diff options
| author | James Barnett <noreply@jamesbarnett.xyz> | 2019-05-26 17:32:25 +0100 |
|---|---|---|
| committer | James Barnett <noreply@jamesbarnett.xyz> | 2019-05-26 17:32:25 +0100 |
| commit | eb4de24523e8f0832daae89a083844c8e9a261e9 (patch) | |
| tree | 15e5295c8bc8feecb069db0339cd7a1b6c1a7c3c /kernel/gpu/text_mode | |
| parent | 820fa143edde3bf1ca103869dfaff8ba35e8702b (diff) | |
| download | tinyOS-keyboard-support.tar.xz tinyOS-keyboard-support.zip | |
Explicitly enable hardware cursorkeyboard-support
Required for virtualbox
Diffstat (limited to 'kernel/gpu/text_mode')
| -rw-r--r-- | kernel/gpu/text_mode/display.c | 24 | ||||
| -rw-r--r-- | kernel/gpu/text_mode/display.h | 1 |
2 files changed, 18 insertions, 7 deletions
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); |