aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaghuram Subramani <raghus2247@gmail.com>2025-01-31 00:40:48 -0500
committerRaghuram Subramani <raghus2247@gmail.com>2025-01-31 00:40:48 -0500
commitd887eda7e07ec0659d2eae956a550249f52f991d (patch)
tree574109f83bc4123bad4e0911ba1d901b73d14fdf
parentee16fdda814e381351578bb87696c572773df02a (diff)
drivers: vga_text_buffer: C->C++
-rw-r--r--kernel/CMakeLists.txt2
-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.h57
-rw-r--r--kernel/kernel/kernel.cc6
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();