diff options
Diffstat (limited to 'kernel/main.c')
-rw-r--r-- | kernel/main.c | 105 |
1 files changed, 4 insertions, 101 deletions
diff --git a/kernel/main.c b/kernel/main.c index 47fcecd..5e6491c 100644 --- a/kernel/main.c +++ b/kernel/main.c @@ -1,6 +1,4 @@ -#include <stdbool.h> -#include <stddef.h> -#include <stdint.h> +#include "video-vga.h" /* Check if the compiler thinks you are targeting the wrong operating system. */ #if defined(__linux__) @@ -10,105 +8,10 @@ #if !defined(__i386__) #error "This kernel needs to be compiled with a ix86-elf compiler" #endif - -/* Hardware text mode color constants. */ -enum vga_color { - VGA_COLOR_BLACK = 0, - VGA_COLOR_BLUE = 1, - VGA_COLOR_GREEN = 2, - VGA_COLOR_CYAN = 3, - VGA_COLOR_RED = 4, - VGA_COLOR_MAGENTA = 5, - VGA_COLOR_BROWN = 6, - VGA_COLOR_LIGHT_GREY = 7, - VGA_COLOR_DARK_GREY = 8, - VGA_COLOR_LIGHT_BLUE = 9, - VGA_COLOR_LIGHT_GREEN = 10, - VGA_COLOR_LIGHT_CYAN = 11, - VGA_COLOR_LIGHT_RED = 12, - VGA_COLOR_LIGHT_MAGENTA = 13, - VGA_COLOR_LIGHT_BROWN = 14, - VGA_COLOR_WHITE = 15 -}; - -static const size_t VGA_WIDTH = 80; -static const size_t VGA_HEIGHT = 25; - -size_t terminal_row; -size_t terminal_column; -uint8_t terminal_color; -uint16_t *terminal_buffer; - -static uint8_t vga_entry_color(enum vga_color fg, enum vga_color bg) -{ - return fg | bg << 4; -} - -static uint16_t vga_entry(unsigned char uc, uint8_t color) -{ - return (uint16_t) uc | (uint16_t) color << 8; -} - -size_t strlen(const char* str) -{ - size_t len = 0; - while(str[len]) - len++; - return len; -} - -void terminal_initialize(void) -{ - size_t x, y; - terminal_row = 0; - terminal_column = 0; - terminal_color = vga_entry_color(VGA_COLOR_LIGHT_GREY, VGA_COLOR_BLACK); - terminal_buffer = (uint16_t*) 0xB8000; - for(y = 0; y < VGA_HEIGHT; y++) { - for(x = 0; x < VGA_WIDTH; x++) { - const size_t index = y * VGA_WIDTH + x; - terminal_buffer[index] = vga_entry(' ', terminal_color); - } - } -} - -void terminal_setcolor(uint8_t color) -{ - terminal_color = color; -} - -void terminal_putentryat(char c, uint8_t color, size_t x, size_t y) -{ - const size_t index = y * VGA_WIDTH + x; - terminal_buffer[index] = vga_entry(c, color); -} - -void terminal_putchar(char c) -{ - terminal_putentryat(c, terminal_color, terminal_column, terminal_row); - if(++terminal_column == VGA_WIDTH) { - terminal_column = 0; - if(++terminal_row == VGA_HEIGHT) - terminal_row = 0; - } -} - -void terminal_write(const char* data, size_t size) -{ - size_t i; - for(i = 0; i < size; i++) - terminal_putchar(data[i]); -} - -void terminal_writestring(const char* data) -{ - terminal_write(data, strlen(data)); -} - void kernel_main(void) { - /* Initialize terminal interface */ - terminal_initialize(); + /* Initialize VGA video hardware */ + vga_init(); - terminal_writestring("Welcome to MFSOS!"); + vga_print("Welcome to MFSOS!\n\t"); } |