diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/io/text_mode_diplay.h | 3 | ||||
| -rw-r--r-- | kernel/io/vga/colours.h | 16 | ||||
| -rw-r--r-- | kernel/io/vga/text_mode_diplay.h | 4 | ||||
| -rw-r--r-- | kernel/io/vga/text_mode_display.c (renamed from kernel/io/text_mode_display.c) | 18 | ||||
| -rw-r--r-- | kernel/kernel.c | 12 |
5 files changed, 43 insertions, 10 deletions
diff --git a/kernel/io/text_mode_diplay.h b/kernel/io/text_mode_diplay.h deleted file mode 100644 index d2d1180..0000000 --- a/kernel/io/text_mode_diplay.h +++ /dev/null @@ -1,3 +0,0 @@ -void clear_screen(); -void print(char *msg); -void print_ln(char *msg);
\ No newline at end of file diff --git a/kernel/io/vga/colours.h b/kernel/io/vga/colours.h new file mode 100644 index 0000000..a019fd3 --- /dev/null +++ b/kernel/io/vga/colours.h @@ -0,0 +1,16 @@ +#define COLOUR_BLACK 0x00 +#define COLOUR_BLUE 0x01 +#define COLOUR_GREEN 0x02 +#define COLOUR_CYAN 0x03 +#define COLOUR_RED 0x04 +#define COLOUR_PURPLE 0x05 +#define COLOUR_BROWN 0x06 +#define COLOUR_GRAY 0x07 +#define COLOUR_DARK_GREY 0x08 +#define COLOUR_LIGHT_BLUE 0x09 +#define COLOUR_LIGHT_GREEN 0x0A +#define COLOUR_LIGHT_CYAN 0x0B +#define COLOUR_LIGHT_RED 0x0C +#define COLOUR_LIGHT_PURPLE 0x0D +#define COLOUR_YELLOW 0x0E +#define COLOUR_WHITE 0x0F
\ No newline at end of file diff --git a/kernel/io/vga/text_mode_diplay.h b/kernel/io/vga/text_mode_diplay.h new file mode 100644 index 0000000..269a6ce --- /dev/null +++ b/kernel/io/vga/text_mode_diplay.h @@ -0,0 +1,4 @@ +void clear_screen(); +void print(char *msg); +void print_ln(char *msg); +void set_text_colour(int foreground, int background);
\ No newline at end of file diff --git a/kernel/io/text_mode_display.c b/kernel/io/vga/text_mode_display.c index 514ba9f..958eb87 100644 --- a/kernel/io/text_mode_display.c +++ b/kernel/io/vga/text_mode_display.c @@ -1,16 +1,19 @@ -#define COLS 80 +#include "colours.h" + +#define COLS (80 * 2) // 2 bytes per char #define ROWS 25 -#define FRAME_SIZE (ROWS * COLS * 2) // 2 bytes per char +#define FRAME_SIZE (ROWS * COLS) char *video_ram = (char *)0xB8000; int cursor_pos = 0; +int char_attribute_byte = 0x07; void clear_screen() { for (int i = 0; i < FRAME_SIZE; i = i + 2) { video_ram[i] = ' '; - video_ram[i + 1] = 0x07; + video_ram[i + 1] = char_attribute_byte; }; cursor_pos = 0; } @@ -21,7 +24,7 @@ void print(char *msg) while (msg[j] != '\0') { video_ram[cursor_pos++] = msg[j]; - video_ram[cursor_pos++] = 0x07; + video_ram[cursor_pos++] = char_attribute_byte; ++j; } } @@ -30,5 +33,10 @@ void print_ln(char *msg) { print(msg); int current_line = cursor_pos / COLS; - cursor_pos = (current_line + 1) * (COLS*2); + cursor_pos = (current_line + 1) * COLS; } + +void set_text_colour(int foreground, int background) +{ + char_attribute_byte = (background << 4) | foreground; +}
\ No newline at end of file diff --git a/kernel/kernel.c b/kernel/kernel.c index e872fa5..d10060a 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -1,12 +1,20 @@ -#include "./io/text_mode_diplay.h" +#include "./io/vga/text_mode_diplay.h" +#include "./io/vga/colours.h" void run_kern() { clear_screen(); print_ln("I am a kernel!"); + set_text_colour(COLOUR_WHITE, COLOUR_GREEN); print("I am on a new line"); - print(" - I am not"); + print_ln(" - I am not"); + + set_text_colour(COLOUR_RED, COLOUR_WHITE); + print_ln("red on white"); + + set_text_colour(COLOUR_WHITE, COLOUR_BLUE); + print_ln("white on blue"); } void kernel_entrypoint() |