aboutsummaryrefslogtreecommitdiff
path: root/kernel/vga.h
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/vga.h')
-rw-r--r--kernel/vga.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/kernel/vga.h b/kernel/vga.h
new file mode 100644
index 0000000..3052dbc
--- /dev/null
+++ b/kernel/vga.h
@@ -0,0 +1,39 @@
+#pragma once
+#include <stdlib.h>
+
+class VGA : public Console {
+public:
+ /* Hardware text mode color constants. */
+ enum vga_color {
+ VGA_COLOR_BLACK = 0,
+ VGA_COLOR_BLUE = 1,
+ VGA_COLOR_GREEN = 2,
+ VGA_COLOR_CYAN = 3,
+ VGA_COLOR_RED = 4,
+ VGA_COLOR_MAGENTA = 5,
+ VGA_COLOR_BROWN = 6,
+ VGA_COLOR_LIGHT_GREY = 7,
+ VGA_COLOR_DARK_GREY = 8,
+ VGA_COLOR_LIGHT_BLUE = 9,
+ VGA_COLOR_LIGHT_GREEN = 10,
+ VGA_COLOR_LIGHT_CYAN = 11,
+ VGA_COLOR_LIGHT_RED = 12,
+ VGA_COLOR_LIGHT_MAGENTA = 13,
+ VGA_COLOR_LIGHT_BROWN = 14,
+ VGA_COLOR_WHITE = 15,
+ };
+
+ VGA(vga_color fg = VGA_COLOR_BLACK, vga_color bg = VGA_COLOR_LIGHT_GREY, uint32_t address = 0xB8000);
+ ~VGA() = default;
+
+ void write(char c) override;
+ void write(ViewIterator& iter) override;
+
+ void set_color(vga_color fg, vga_color bg) { color = (fg | bg << 4); }
+
+private:
+ const size_t max_columns = 80, max_rows = 25;
+ size_t column = 0, row = 0;
+ uint8_t color;
+ uint16_t* buffer;
+};