From 1f90fb5825890dfbf74e5aea46779645ebc453b9 Mon Sep 17 00:00:00 2001 From: Ruslan Isaev Date: Thu, 20 Nov 2025 20:12:52 +0300 Subject: [PATCH] screen: implement cursor positioning --- include/screen.h | 1 + src/drivers/screen.c | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/include/screen.h b/include/screen.h index f71810c..cf5ce05 100644 --- a/include/screen.h +++ b/include/screen.h @@ -39,5 +39,6 @@ void terminal_putentryat(char c, uint8_t color, size_t x, size_t y); void terminal_putchar(char c); void terminal_write(const char* data, size_t size); void terminal_writestring(const char* data); +void update_cursor(int x, int y); #endif diff --git a/src/drivers/screen.c b/src/drivers/screen.c index 5d6302e..4436cc9 100644 --- a/src/drivers/screen.c +++ b/src/drivers/screen.c @@ -1,6 +1,7 @@ // screen.c #include "../include/screen.h" #include "../include/string.h" +#include "../include/utils.h" static size_t terminal_row; static size_t terminal_column; @@ -83,6 +84,7 @@ void terminal_putchar(char c) if (c == 'H') { terminal_row = 0; terminal_column = 0; + update_cursor(0, 0); } terminal_state = STATE_NORMAL; return; @@ -109,6 +111,7 @@ void terminal_putchar(char c) if (terminal_row >= VGA_HEIGHT) { terminal_scroll(); } + update_cursor(terminal_column, terminal_row); } void terminal_write(const char* data, size_t size) @@ -121,3 +124,13 @@ void terminal_writestring(const char* data) { terminal_write(data, strlen(data)); } + +void update_cursor(int x, int y) +{ + uint16_t pos = y * VGA_WIDTH + x; + + outb(0x3D4, 0x0F); + outb(0x3D5, (uint8_t) (pos & 0xFF)); + outb(0x3D4, 0x0E); + outb(0x3D5, (uint8_t) ((pos >> 8) & 0xFF)); +} \ No newline at end of file