From eb4de24523e8f0832daae89a083844c8e9a261e9 Mon Sep 17 00:00:00 2001 From: James Barnett Date: Sun, 26 May 2019 17:32:25 +0100 Subject: Explicitly enable hardware cursor Required for virtualbox --- kernel/gpu/text_mode/display.c | 24 +++++++++++++++++------- kernel/gpu/text_mode/display.h | 1 + 2 files changed, 18 insertions(+), 7 deletions(-) (limited to 'kernel/gpu') diff --git a/kernel/gpu/text_mode/display.c b/kernel/gpu/text_mode/display.c index 19074f7..bacd9df 100644 --- a/kernel/gpu/text_mode/display.c +++ b/kernel/gpu/text_mode/display.c @@ -9,15 +9,15 @@ int cursor_pos = 0; int char_attribute_byte = 0x0F; extern void write_port(unsigned short port, unsigned char data); +extern char read_port(unsigned short port); -void scrn_clear() +void scrn_enable_cursor(unsigned char start_line, unsigned char end_line) { - for (int i = 0; i < FRAME_SIZE; i = i + 2) - { - video_ram[i] = 0; - video_ram[i + 1] = char_attribute_byte; - }; - cursor_pos = 0; + write_port(0x3D4, 0x0A); + write_port(0x3D5, (read_port(0x3D5) & 0xC0) | start_line); + + write_port(0x3D4, 0x0B); + write_port(0x3D5, (read_port(0x3D5) & 0xE0) | end_line); } void scrn_update_csr() @@ -29,6 +29,16 @@ void scrn_update_csr() write_port(0x3D5, csr); } +void scrn_clear() +{ + for (int i = 0; i < FRAME_SIZE; i = i + 2) + { + video_ram[i] = 0; + video_ram[i + 1] = char_attribute_byte; + }; + cursor_pos = 0; +} + void scrn_print(char *msg) { int j = 0; diff --git a/kernel/gpu/text_mode/display.h b/kernel/gpu/text_mode/display.h index f4f3724..fec3314 100644 --- a/kernel/gpu/text_mode/display.h +++ b/kernel/gpu/text_mode/display.h @@ -1,3 +1,4 @@ +void scrn_enable_cursor(unsigned char start_line, unsigned char end_line); void scrn_clear(); void scrn_print(char *msg); void scrn_println(char *msg); -- cgit v1.2.3