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 + kernel/kernel.c | 4 ++-- 3 files changed, 20 insertions(+), 9 deletions(-) (limited to 'kernel') 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); diff --git a/kernel/kernel.c b/kernel/kernel.c index a6540f5..7f702e7 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -5,10 +5,10 @@ void run_kern_demo() { - + scrn_enable_cursor(10, 12); scrn_clear(); scrn_set_text_colour(COLOUR_LIGHT_GREEN, COLOUR_BLACK); - + scrn_println(" _ _ ____ _____ "); scrn_println(" | | (_) / __ \\ / ____|"); scrn_println(" | |_ _ _ __ _ _| | | | (___ "); -- cgit v1.2.3