From 64aa82592c6c2b043d8c62100d4ce110bf616c1e Mon Sep 17 00:00:00 2001 From: James Barnett Date: Sun, 6 Oct 2019 12:56:26 +0100 Subject: Add os statusbar. Start stdlib --- kernel/gpu/text_mode/display.c | 60 +++++++++++++++++++++++++++++------------- kernel/gpu/text_mode/display.h | 9 +++++-- 2 files changed, 49 insertions(+), 20 deletions(-) (limited to 'kernel') diff --git a/kernel/gpu/text_mode/display.c b/kernel/gpu/text_mode/display.c index bacd9df..3758c71 100644 --- a/kernel/gpu/text_mode/display.c +++ b/kernel/gpu/text_mode/display.c @@ -39,32 +39,22 @@ void scrn_clear() cursor_pos = 0; } -void scrn_print(char *msg) +void scrn_set_text_colour(int foreground, int background) { - int j = 0; - while (msg[j] != '\0') - { - video_ram[cursor_pos++] = msg[j]; - video_ram[cursor_pos++] = char_attribute_byte; - ++j; - } + char_attribute_byte = (background << 4) | foreground; } -void scrn_println(char *msg) -{ - scrn_print(msg); - int current_line = cursor_pos / COLS; - cursor_pos = (current_line + 1) * COLS; +int scrn_get_char_attr_byte() { + return char_attribute_byte; } -void scrn_set_text_colour(int foreground, int background) -{ - char_attribute_byte = (background << 4) | foreground; +void scrn_set_char_attr_byte(int byte) { + char_attribute_byte = byte; } -void scrn_putchar(unsigned char byte) +void scrn_putchar(unsigned char c) { - video_ram[cursor_pos++] = byte; + video_ram[cursor_pos++] = c; video_ram[cursor_pos++] = char_attribute_byte; scrn_update_csr(); } @@ -87,3 +77,37 @@ void scrn_newline() scrn_update_csr(); } +void scrn_print(char *msg) +{ + int j = 0; + while (msg[j] != '\0') + { + video_ram[cursor_pos++] = msg[j]; + video_ram[cursor_pos++] = char_attribute_byte; + ++j; + } + scrn_update_csr(); +} + +void scrn_println(char *msg) +{ + scrn_print(msg); + scrn_newline(); +} + +void scrn_set_cursor_pos(unsigned int row, unsigned int col) +{ + cursor_pos = (row * COLS) + (col * 2); + scrn_update_csr(); +} + +int scrn_get_cursor_row() +{ + // 0 index + return cursor_pos / COLS; +} + +int scrn_get_cursor_col() +{ + return (cursor_pos % COLS)/2; +} \ No newline at end of file diff --git a/kernel/gpu/text_mode/display.h b/kernel/gpu/text_mode/display.h index fec3314..9c76499 100644 --- a/kernel/gpu/text_mode/display.h +++ b/kernel/gpu/text_mode/display.h @@ -3,6 +3,11 @@ void scrn_clear(); void scrn_print(char *msg); void scrn_println(char *msg); void scrn_set_text_colour(int foreground, int background); -void scrn_putchar(unsigned char byte); +int scrn_get_char_attr_byte(); +void scrn_set_char_attr_byte(int byte); +void scrn_putchar(unsigned char c); void scrn_backspace(); -void scrn_newline(); \ No newline at end of file +void scrn_newline(); +void scrn_set_cursor_pos(unsigned int row, unsigned int col); +int scrn_get_cursor_row(); +int scrn_get_cursor_col(); \ No newline at end of file -- cgit v1.2.3