diff options
-rw-r--r-- | kernel/CMakeLists.txt | 2 | ||||
-rw-r--r-- | kernel/drivers/vga_text_buffer.cc (renamed from kernel/drivers/vga_text_buffer/vga_text_buffer.c) | 54 | ||||
-rw-r--r-- | kernel/include/drivers/vga_text_buffer.h | 57 | ||||
-rw-r--r-- | kernel/kernel/kernel.cc | 6 |
4 files changed, 59 insertions, 60 deletions
diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt index 689103a..b412365 100644 --- a/kernel/CMakeLists.txt +++ b/kernel/CMakeLists.txt @@ -7,7 +7,7 @@ set(SRC boot/init/boot.s drivers/serial.cc - drivers/vga_text_buffer/vga_text_buffer.c + drivers/vga_text_buffer.cc kernel/halt.c kernel/io.c diff --git a/kernel/drivers/vga_text_buffer/vga_text_buffer.c b/kernel/drivers/vga_text_buffer.cc index e1e1781..6d1c0e1 100644 --- a/kernel/drivers/vga_text_buffer/vga_text_buffer.c +++ b/kernel/drivers/vga_text_buffer.cc @@ -29,24 +29,27 @@ #include <drivers/vga_text_buffer.h> -static uint16_t *vga_text_buffer_buffer = (uint16_t *) 0xB8000; -static uint8_t vga_text_buffer_row = 0; -static uint8_t vga_text_buffer_column = 0; -static uint8_t vga_text_buffer_color - = vga_entry_color(VGA_COLOR_LIGHT_GREY, VGA_COLOR_BLACK); +namespace VGATextBuffer +{ + +static uint16_t *buffer = (uint16_t *) 0xB8000; +static uint8_t row = 0; +static uint8_t column = 0; +static uint8_t color = vga_entry_color(VGATextBuffer::COLOR_LIGHT_GREY, + VGATextBuffer::COLOR_BLACK); ALWAYS_INLINE static void -vga_text_buffer_write_entry_at(const char c, - const uint8_t color, - const uint8_t x, - const uint8_t y) +write_entry_at(const char c, + const uint8_t color, + const uint8_t x, + const uint8_t y) { size_t index = y * VGA_WIDTH + x; - vga_text_buffer_buffer[index] = vga_entry(c, color); + buffer[index] = vga_entry(c, color); } void -vga_text_buffer_initialize(void) +initialize(void) { /* * Disable the cursor @@ -57,37 +60,36 @@ vga_text_buffer_initialize(void) for (uint8_t y = 0; y < VGA_HEIGHT; y++) for (uint8_t x = 0; x < VGA_WIDTH; x++) - vga_text_buffer_write_entry_at(' ', vga_text_buffer_color, x, y); + write_entry_at(' ', color, x, y); } void -vga_text_buffer_write_char(const char c) +write_char(const char c) { if (c == '\n') { - vga_text_buffer_row++; - vga_text_buffer_column = 0; + row++; + column = 0; } else { - vga_text_buffer_write_entry_at( - c, vga_text_buffer_color, vga_text_buffer_column, vga_text_buffer_row); + write_entry_at(c, color, column, row); - if (++vga_text_buffer_column == VGA_WIDTH) { - vga_text_buffer_column = 0; - if (++vga_text_buffer_row == VGA_HEIGHT) - vga_text_buffer_row = 0; + if (++column == VGA_WIDTH) { + column = 0; + if (++row == VGA_HEIGHT) + row = 0; } } } void -vga_text_buffer_write_string(const char *string) +write_string(const char *string) { size_t size = strlen(string); for (size_t i = 0; i < size; i++) - vga_text_buffer_write_char(string[i]); + write_char(string[i]); } void -vga_text_buffer_printf(const char *string, ...) +printf(const char *string, ...) { /* TODO: Dynamic Memory Allocation */ char str[256]; @@ -97,5 +99,7 @@ vga_text_buffer_printf(const char *string, ...) vsnprintf(str, sizeof(str), string, ap); va_end(ap); - vga_text_buffer_write_string(str); + write_string(str); +} + } diff --git a/kernel/include/drivers/vga_text_buffer.h b/kernel/include/drivers/vga_text_buffer.h index 1a506f6..389c864 100644 --- a/kernel/include/drivers/vga_text_buffer.h +++ b/kernel/include/drivers/vga_text_buffer.h @@ -27,33 +27,9 @@ #include <stdbool.h> #include <stdint.h> -#ifdef __cplusplus -extern "C" { -#endif - #define VGA_WIDTH 80 #define VGA_HEIGHT 25 -/* Hardware text mode color constants. */ -typedef enum { - 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 -} vga_color; - /* * bg fg * 1110 0101 @@ -67,15 +43,34 @@ typedef enum { #define vga_entry(character, color) \ ((uint16_t) color << 8 | (uint16_t) character) -bool vga_text_buffer_is_initialized(void); +namespace VGATextBuffer +{ -void vga_text_buffer_initialize(void); -void vga_text_buffer_write_char(const char); -void vga_text_buffer_write_string(const char *string); -void vga_text_buffer_printf(const char *string, ...); +/* Hardware text mode color constants. */ +typedef enum { + COLOR_BLACK = 0, + COLOR_BLUE = 1, + COLOR_GREEN = 2, + COLOR_CYAN = 3, + COLOR_RED = 4, + COLOR_MAGENTA = 5, + COLOR_BROWN = 6, + COLOR_LIGHT_GREY = 7, + COLOR_DARK_GREY = 8, + COLOR_LIGHT_BLUE = 9, + COLOR_LIGHT_GREEN = 10, + COLOR_LIGHT_CYAN = 11, + COLOR_LIGHT_RED = 12, + COLOR_LIGHT_MAGENTA = 13, + COLOR_LIGHT_BROWN = 14, + COLOR_WHITE = 15 +} colors; + +void initialize(void); +void write_char(const char); +void write_string(const char *string); +void printf(const char *string, ...); -#ifdef __cplusplus } -#endif #endif diff --git a/kernel/kernel/kernel.cc b/kernel/kernel/kernel.cc index a7455aa..a86d4e7 100644 --- a/kernel/kernel/kernel.cc +++ b/kernel/kernel/kernel.cc @@ -32,7 +32,7 @@ extern "C" void kernel_main(uint32_t magic, multiboot_info_t *multiboot_info) { Serial::initialize(); - vga_text_buffer_initialize(); + VGATextBuffer::initialize(); if (magic != MULTIBOOT_BOOTLOADER_MAGIC) { printk("Kernel", "Invalid Multiboot Magic: %x", magic); @@ -44,8 +44,8 @@ kernel_main(uint32_t magic, multiboot_info_t *multiboot_info) physical_mm_init(); virtual_mm_initialize(); - void *x = virtual_mm_find_free_addresses(1046999); - printk("debug", "x(0x%x)", x); + // void *x = virtual_mm_find_free_addresses(1046999); + // printk("debug", "x(0x%x)", x); #if 0 int *x = physical_mm_allocate_block(); |