From 820fa143edde3bf1ca103869dfaff8ba35e8702b Mon Sep 17 00:00:00 2001 From: James Barnett Date: Sun, 26 May 2019 16:39:13 +0100 Subject: Add hardware cursor support --- kernel/gpu/text_mode/display.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'kernel/gpu/text_mode/display.c') diff --git a/kernel/gpu/text_mode/display.c b/kernel/gpu/text_mode/display.c index 3659e60..19074f7 100644 --- a/kernel/gpu/text_mode/display.c +++ b/kernel/gpu/text_mode/display.c @@ -6,18 +6,29 @@ char *video_ram = (char *) 0xB8000; int cursor_pos = 0; -int char_attribute_byte = 0x07; +int char_attribute_byte = 0x0F; + +extern void write_port(unsigned short port, unsigned char data); void scrn_clear() { for (int i = 0; i < FRAME_SIZE; i = i + 2) { - video_ram[i] = ' '; + video_ram[i] = 0; video_ram[i + 1] = char_attribute_byte; }; cursor_pos = 0; } +void scrn_update_csr() +{ + unsigned short csr = cursor_pos/2; + write_port(0x3D4, 14); + write_port(0x3D5, csr >> 8); + write_port(0x3D4, 15); + write_port(0x3D5, csr); +} + void scrn_print(char *msg) { int j = 0; @@ -45,6 +56,7 @@ void scrn_putchar(unsigned char byte) { video_ram[cursor_pos++] = byte; video_ram[cursor_pos++] = char_attribute_byte; + scrn_update_csr(); } // TODO - jump cursor to prev non 0 text char rather than reversing through whole array @@ -54,6 +66,7 @@ void scrn_backspace() { video_ram[--cursor_pos] = char_attribute_byte; video_ram[--cursor_pos] = 0; + scrn_update_csr(); } } @@ -61,4 +74,6 @@ void scrn_newline() { int current_line = cursor_pos / COLS; cursor_pos = (current_line + 1) * COLS; -} \ No newline at end of file + scrn_update_csr(); +} + -- cgit v1.2.3