X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/f4aab93debd6eed5115c2328ada3160512027bd2..e141fd4dcd5effc2dbe59a498d7ea274b7199147:/lunaix-os/kernel/tty/tty.c diff --git a/lunaix-os/kernel/tty/tty.c b/lunaix-os/kernel/tty/tty.c index bef5c5a..325595e 100644 --- a/lunaix-os/kernel/tty/tty.c +++ b/lunaix-os/kernel/tty/tty.c @@ -1,21 +1,31 @@ #include #include +#include #include #define TTY_WIDTH 80 #define TTY_HEIGHT 25 -vga_attribute* buffer = (vga_attribute*)0xB8000; +vga_attribute* tty_vga_buffer = (vga_attribute*)VGA_BUFFER_PADDR; -vga_attribute theme_color = VGA_COLOR_BLACK; +vga_attribute tty_theme_color = VGA_COLOR_BLACK; uint32_t tty_x = 0; uint16_t tty_y = 0; +void tty_init(void* vga_buf) { + tty_vga_buffer = (vga_attribute*)vga_buf; + tty_clear(); +} + +void tty_set_buffer(void* vga_buf) { + tty_vga_buffer = (vga_attribute*)vga_buf; +} + void tty_set_theme(vga_attribute fg, vga_attribute bg) { - theme_color = (bg << 4 | fg) << 8; + tty_theme_color = (bg << 4 | fg) << 8; } void @@ -26,14 +36,13 @@ tty_put_char(char chr) tty_x += 4; break; case '\n': - tty_x = 0; tty_y++; - break; + // fall through case '\r': tty_x = 0; break; default: - *(buffer + tty_x + tty_y * TTY_WIDTH) = (theme_color | chr); + *(tty_vga_buffer + tty_x + tty_y * TTY_WIDTH) = (tty_theme_color | chr); tty_x++; break; } @@ -60,18 +69,18 @@ void tty_scroll_up() { size_t last_line = TTY_WIDTH * (TTY_HEIGHT - 1); - memcpy(buffer, buffer + TTY_WIDTH, last_line); + memcpy(tty_vga_buffer, tty_vga_buffer + TTY_WIDTH, last_line * 2); for (size_t i = 0; i < TTY_WIDTH; i++) { - *(buffer + i + last_line) = theme_color; + *(tty_vga_buffer + i + last_line) = tty_theme_color; } - tty_y = tty_y == 0 ? 0 : tty_y - 1; + tty_y = tty_y == 0 ? 0 : TTY_HEIGHT - 1; } void tty_clear() { for (uint32_t i = 0; i < TTY_WIDTH * TTY_HEIGHT; i++) { - *(buffer + i) = theme_color; + *(tty_vga_buffer + i) = tty_theme_color; } tty_x = 0; tty_y = 0;