diff --git a/src/kernel.c b/src/kernel.c index d1ba8a0..0c58631 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -57,6 +57,7 @@ uint8_t terminal_color; uint16_t *terminal_buffer = (uint16_t *)VGA_MEMORY; void terminal_initialize(void) { + terminal_row = 0; terminal_column = 0; terminal_color = vga_entry_color(VGA_COLOR_LIGHT_GREY, VGA_COLOR_BLACK); @@ -79,6 +80,14 @@ void terminal_putentryat(char c, uint8_t color, size_t x, size_t y) { } void terminal_putchar(char c) { + if (c == '\n') { + terminal_row += 1; + terminal_column = 0; + if (terminal_row == VGA_HEIGHT) + terminal_row = 0; + return; + } + terminal_putentryat(c, terminal_color, terminal_column, terminal_row); if (++terminal_column == VGA_WIDTH) { terminal_column = 0; @@ -88,8 +97,9 @@ void terminal_putchar(char c) { } void terminal_write(const char *data, size_t size) { - for (size_t i = 0; i < size; i++) + for (size_t i = 0; i < size; i++) { terminal_putchar(data[i]); + } } void terminal_writestring(const char *data) { @@ -101,5 +111,5 @@ void kernel_main(void) { terminal_initialize(); /* Newline support is left as an exercise. */ - terminal_writestring("Hello world from kernel.\n"); + terminal_writestring("Hello world!\nI'm in the kernel and no one can stop me now! =)"); }