aboutsummaryrefslogtreecommitdiff
path: root/kernel/io/vga
diff options
context:
space:
mode:
authorJames Barnett <noreply@jamesbarnett.xyz>2018-08-28 18:02:17 +0100
committerJames Barnett <noreply@jamesbarnett.xyz>2018-08-28 18:02:17 +0100
commit326526206eface026e6ec291d75cd037dbec6609 (patch)
tree3b7236a4024ba183d9f512b51072343436dbdbfa /kernel/io/vga
parentd5cf6a9696f6f86bec5652f94ba7485aae4ca1bc (diff)
downloadtinyOS-326526206eface026e6ec291d75cd037dbec6609.tar.xz
tinyOS-326526206eface026e6ec291d75cd037dbec6609.zip
Add text colour manipulation
Diffstat (limited to 'kernel/io/vga')
-rw-r--r--kernel/io/vga/colours.h16
-rw-r--r--kernel/io/vga/text_mode_diplay.h4
-rw-r--r--kernel/io/vga/text_mode_display.c42
3 files changed, 62 insertions, 0 deletions
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/vga/text_mode_display.c b/kernel/io/vga/text_mode_display.c
new file mode 100644
index 0000000..958eb87
--- /dev/null
+++ b/kernel/io/vga/text_mode_display.c
@@ -0,0 +1,42 @@
+#include "colours.h"
+
+#define COLS (80 * 2) // 2 bytes per char
+#define ROWS 25
+#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] = char_attribute_byte;
+ };
+ cursor_pos = 0;
+}
+
+void print(char *msg)
+{
+ int j = 0;
+ while (msg[j] != '\0')
+ {
+ video_ram[cursor_pos++] = msg[j];
+ video_ram[cursor_pos++] = char_attribute_byte;
+ ++j;
+ }
+}
+
+void print_ln(char *msg)
+{
+ print(msg);
+ int current_line = cursor_pos / COLS;
+ 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