X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/cd09c4b222e4ddf45a42522563ae2471a829d1c8..0471b0eeea5ea30883c776dd53275ec6b8454ca7:/lunaix-os/kernel/tty/tty.c diff --git a/lunaix-os/kernel/tty/tty.c b/lunaix-os/kernel/tty/tty.c index cb4e13a..4a20a77 100644 --- a/lunaix-os/kernel/tty/tty.c +++ b/lunaix-os/kernel/tty/tty.c @@ -1,17 +1,17 @@ -#include +#include #include -#include +#include #include #define TTY_WIDTH 80 #define TTY_HEIGHT 25 -vga_attribute* tty_vga_buffer = (vga_attribute*)VGA_BUFFER_PADDR; +static vga_attribute* tty_vga_buffer = (vga_attribute*)VGA_BUFFER_PADDR; -vga_attribute tty_theme_color = VGA_COLOR_BLACK; +static vga_attribute tty_theme_color = VGA_COLOR_BLACK; -uint32_t tty_x = 0; -uint16_t tty_y = 0; +static uint32_t tty_x = 0; +static uint16_t tty_y = 0; void tty_init(void* vga_buf) { tty_vga_buffer = (vga_attribute*)vga_buf; @@ -41,6 +41,10 @@ tty_put_char(char chr) case '\r': tty_x = 0; break; + case '\x08': + tty_x = tty_x ? tty_x - 1 : 0; + *(tty_vga_buffer + tty_x + tty_y * TTY_WIDTH) = (tty_theme_color | 0x20); + break; default: *(tty_vga_buffer + tty_x + tty_y * TTY_WIDTH) = (tty_theme_color | chr); tty_x++; @@ -69,11 +73,11 @@ void tty_scroll_up() { size_t last_line = TTY_WIDTH * (TTY_HEIGHT - 1); - memcpy(tty_vga_buffer, tty_vga_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++) { *(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 @@ -84,4 +88,29 @@ tty_clear() } tty_x = 0; tty_y = 0; +} + +void +tty_clear_line(unsigned int y) { + for (size_t i = 0; i < TTY_WIDTH; i++) + { + *(tty_vga_buffer + i + y * TTY_WIDTH) = tty_theme_color; + } +} + +void +tty_set_cpos(unsigned int x, unsigned int y) { + tty_x = x % TTY_WIDTH; + tty_y = y % TTY_HEIGHT; +} + +void +tty_get_cpos(unsigned int* x, unsigned int* y) { + *x = tty_x; + *y = tty_y; +} + +vga_attribute +tty_get_theme() { + return tty_theme_color; } \ No newline at end of file