aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorJames Barnett <noreply@jamesbarnett.xyz>2019-05-26 17:32:25 +0100
committerJames Barnett <noreply@jamesbarnett.xyz>2019-05-26 17:32:25 +0100
commiteb4de24523e8f0832daae89a083844c8e9a261e9 (patch)
tree15e5295c8bc8feecb069db0339cd7a1b6c1a7c3c /kernel
parent820fa143edde3bf1ca103869dfaff8ba35e8702b (diff)
downloadtinyOS-keyboard-support.tar.xz
tinyOS-keyboard-support.zip
Explicitly enable hardware cursorkeyboard-support
Required for virtualbox
Diffstat (limited to 'kernel')
-rw-r--r--kernel/gpu/text_mode/display.c24
-rw-r--r--kernel/gpu/text_mode/display.h1
-rw-r--r--kernel/kernel.c4
3 files changed, 20 insertions, 9 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);
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(" | |_ _ _ __ _ _| | | | (___ ");