diff options
author | aqua <aqua@iserlohn-fortress.net> | 2022-12-10 20:56:57 +0200 |
---|---|---|
committer | aqua <aqua@iserlohn-fortress.net> | 2022-12-11 11:32:51 +0200 |
commit | 9b2a78fa52249ab481493550490aa5f37872dcf6 (patch) | |
tree | 127031268b9b42b0fbdae3d87684d9c045983677 /devices/vga.hpp | |
parent | Rename CCFLAGS to CFLAGS (diff) | |
download | kernel-9b2a78fa52249ab481493550490aa5f37872dcf6.tar.xz |
Rewrite drivers/uart and drivers/vga in cpp
Diffstat (limited to 'devices/vga.hpp')
-rw-r--r-- | devices/vga.hpp | 51 |
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; +}; |