aboutsummaryrefslogtreecommitdiff
path: root/devices/vga.hpp
diff options
context:
space:
mode:
authoraqua <aqua@iserlohn-fortress.net>2022-12-10 20:56:57 +0200
committeraqua <aqua@iserlohn-fortress.net>2022-12-11 11:32:51 +0200
commit9b2a78fa52249ab481493550490aa5f37872dcf6 (patch)
tree127031268b9b42b0fbdae3d87684d9c045983677 /devices/vga.hpp
parentRename CCFLAGS to CFLAGS (diff)
downloadkernel-9b2a78fa52249ab481493550490aa5f37872dcf6.tar.xz
Rewrite drivers/uart and drivers/vga in cpp
Diffstat (limited to 'devices/vga.hpp')
-rw-r--r--devices/vga.hpp51
1 files changed, 51 insertions, 0 deletions
diff --git a/devices/vga.hpp b/devices/vga.hpp
new file mode 100644
index 0000000..5287d73
--- /dev/null
+++ b/devices/vga.hpp
@@ -0,0 +1,51 @@
+#pragma once
+
+#include <stdio.h>
+
+/** 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,
+};
+
+FILE *vga_init(void *buffer);
+
+struct VGA : public kIoDevice {
+ VGA(void *addr);
+
+ void putc(char a) override;
+ int puts(const char *string, int length) override;
+ void
+ flush() override
+ {
+ update_cursor();
+ }
+
+ struct __attribute__((packed)) VGAEntry {
+ unsigned char text;
+ unsigned char foreground : 4;
+ unsigned char background : 4;
+ };
+
+private:
+ void clear(enum vga_color foreground, enum vga_color background);
+ void update_cursor();
+
+ struct VGAEntry *buffer;
+ int col = 0;
+ int row = 0;
+};