aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorFranklin Wei <frankhwei536@gmail.com>2015-02-08 12:15:06 -0500
committerFranklin Wei <frankhwei536@gmail.com>2015-02-08 12:15:06 -0500
commit0d7cde7c4d735ebebd39b988440f50f5889bd29f (patch)
tree7ddc66bfc3c64becdb55af3bb6e33a536421b1a6 /drivers
parentea15c8963fa17deaba4356219e481128db66f5bc (diff)
downloadkappa-0d7cde7c4d735ebebd39b988440f50f5889bd29f.zip
kappa-0d7cde7c4d735ebebd39b988440f50f5889bd29f.tar.gz
kappa-0d7cde7c4d735ebebd39b988440f50f5889bd29f.tar.bz2
kappa-0d7cde7c4d735ebebd39b988440f50f5889bd29f.tar.xz
lots of stuff
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gfx-as.S27
-rw-r--r--drivers/gfx.c55
-rw-r--r--drivers/gfx_font.c1728
-rw-r--r--drivers/include/gfx.h14
-rw-r--r--drivers/include/gfx_font.h4
5 files changed, 1809 insertions, 19 deletions
diff --git a/drivers/gfx-as.S b/drivers/gfx-as.S
new file mode 100644
index 0000000..70009c1
--- /dev/null
+++ b/drivers/gfx-as.S
@@ -0,0 +1,27 @@
+ .global gfx_clear
+ .extern fb_width
+ .extern fb_height
+ .extern fb_bpp
+ .extern _gfx_bgcol
+ .extern framebuffer
+ # void gfx_clear(uint32_t color)
+gfx_clear:
+ movzwl fb_width, %ecx
+ movzwl fb_height, %edx
+ movl framebuffer, %eax
+ pushl %ebx
+ movl _gfx_bgcol, %ebx
+ imull %ecx, %edx
+ movzbl fb_bpp, %ecx
+ imull %ecx, %edx
+ addl %eax, %edx
+ cmpl %edx, %eax
+ jnb .L2
+.L6:
+ movl %ebx, (%eax)
+ addl %ecx, %eax
+ cmpl %eax, %edx
+ ja .L6
+.L2:
+ popl %ebx
+ ret
diff --git a/drivers/gfx.c b/drivers/gfx.c
index 53d6686..8dc9d74 100644
--- a/drivers/gfx.c
+++ b/drivers/gfx.c
@@ -9,25 +9,47 @@
#include "panic.h"
#include "gfx.h"
-static uint8_t *framebuffer = NULL;
-static uint16_t fb_width;
-static uint16_t fb_height;
+uint8_t *framebuffer = NULL;
+uint16_t fb_width;
+uint16_t fb_height;
/* this is BYTES per pixel */
-static uint8_t fb_bpp;
+uint8_t fb_bpp;
const uint8_t *gfx_bpp = &fb_bpp;
const uint16_t *gfx_width = &fb_width;
const uint16_t *gfx_height = &fb_height;
static int cursor_x, cursor_y;
-static uint32_t fgcol, bgcol;
+uint32_t _gfx_fgcol, _gfx_bgcol;
-void gfx_drawpixel(int x, int y, uint32_t col)
+void gfx_set_background(uint32_t col)
{
- ((uint32_t*)framebuffer)[y * fb_width + x] = col;
+ _gfx_bgcol = col;
}
+uint32_t gfx_get_background(void)
+{
+ return _gfx_bgcol;
+}
+
+void gfx_set_foreground(uint32_t col)
+{
+ _gfx_fgcol = col;
+}
+
+uint32_t gfx_get_foreground(void)
+{
+ return _gfx_fgcol;
+}
+
+void gfx_drawpixel(int x, int y)
+{
+ ((uint32_t*)framebuffer)[y * fb_width + x] = _gfx_fgcol;
+}
+
+/* implemented in assembly now */
+/*
void gfx_clear(uint32_t col)
{
uint8_t *p = framebuffer;
@@ -38,28 +60,29 @@ void gfx_clear(uint32_t col)
p += fb_bpp;
}
}
+*/
void gfx_reset(void)
{
- gfx_clear(VGA_RGBPACK(0, 0, 0));
+ _gfx_fgcol = VGA_RGBPACK(0xff, 0xff, 0xff);
+ _gfx_bgcol = VGA_RGBPACK(0, 0, 0);
+ gfx_clear();
cursor_y = 0;
cursor_x = 0;
- fgcol = VGA_RGBPACK(0xff, 0xff, 0xff);
- bgcol = VGA_RGBPACK(0, 0, 0);
}
-void gfx_drawchar(int x, int y, char c, uint32_t fg, uint32_t bg)
+void gfx_drawchar(int x, int y, char c)
{
int stride = fb_bpp * fb_width;
uint8_t *line_addr = framebuffer + (x * fb_bpp) + (y * stride);
for(int i = 0; i < FONT_HEIGHT; ++i)
{
- uint32_t line_buf[8] = {bg};
+ uint32_t line_buf[8] = {_gfx_bgcol};
uint8_t mask = 0x80;
for(int j = 0; j < 8; ++j, mask >>= 1)
{
if(gfx_font[(int)c][i] & mask)
- line_buf[j] = fg;
+ line_buf[j] = _gfx_fgcol;
}
memcpy(line_addr, line_buf, sizeof(line_buf));
line_addr += stride;
@@ -70,7 +93,7 @@ void gfx_putchar(char ch)
{
if(ch != '\n')
{
- gfx_drawchar(cursor_x, cursor_y, ch, fgcol, bgcol);
+ gfx_drawchar(cursor_x, cursor_y, ch);
cursor_x += FONT_WIDTH;
if(cursor_x >= fb_width)
{
@@ -78,7 +101,7 @@ void gfx_putchar(char ch)
cursor_y += FONT_HEIGHT;
if(cursor_y >= fb_height)
{
- gfx_clear(bgcol);
+ gfx_clear();
cursor_y = 0;
}
}
@@ -89,7 +112,7 @@ void gfx_putchar(char ch)
cursor_y += FONT_HEIGHT;
if(cursor_y >= fb_height)
{
- gfx_clear(bgcol);
+ gfx_clear();
cursor_y = 0;
}
}
diff --git a/drivers/gfx_font.c b/drivers/gfx_font.c
new file mode 100644
index 0000000..311e86d
--- /dev/null
+++ b/drivers/gfx_font.c
@@ -0,0 +1,1728 @@
+#include <stdint.h>
+
+/*
+ * terminal bitmap fallback font
+ */
+
+/* Binary Literals */
+#define b(x) ((uint8_t)b_(0 ## x ## uL))
+#define b_(x) ((x & 1) | (x >> 2 & 2) | (x >> 4 & 4) | (x >> 6 & 8) | (x >> 8 & 16) | (x >> 10 & 32) | (x >> 12 & 64) | (x >> 14 & 128))
+
+const uint8_t gfx_font[][12] = {
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 8 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01111110),
+ b(11000011),
+ b(10000001), /* 4 */
+ b(10100101),
+ b(10000001),
+ b(10111101),
+ b(10011001), /* 8 */
+ b(11000011),
+ b(01111110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01111110),
+ b(11111111),
+ b(11111111), /* 4 */
+ b(11011011),
+ b(11111111),
+ b(11000011),
+ b(11100111), /* 8 */
+ b(11111111),
+ b(01111110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(01000100),
+ b(11101110), /* 4 */
+ b(11111110),
+ b(11111110),
+ b(11111110),
+ b(01111100), /* 8 */
+ b(00111000),
+ b(00010000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00010000),
+ b(00111000),
+ b(01111100), /* 4 */
+ b(11111110),
+ b(11111110),
+ b(01111100),
+ b(00111000), /* 8 */
+ b(00010000),
+ b(00000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00011000),
+ b(00111100),
+ b(00111100), /* 4 */
+ b(11111111),
+ b(11100111),
+ b(11100111),
+ b(00011000), /* 8 */
+ b(00011000),
+ b(01111110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00011000),
+ b(00111100),
+ b(01111110), /* 4 */
+ b(11111111),
+ b(11111111),
+ b(01111110),
+ b(00011000), /* 8 */
+ b(00011000),
+ b(01111110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(00111100),
+ b(01111110),
+ b(01111110),
+ b(00111100), /* 8 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(11111111),
+ b(11111111),
+ b(11111111),
+ b(11111111), /* 4 */
+ b(11000011),
+ b(10000001),
+ b(10000001),
+ b(11000011), /* 8 */
+ b(11111111),
+ b(11111111),
+ b(11111111),
+ b(11111111) /* 01 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00111100),
+ b(01111110), /* 4 */
+ b(01100110),
+ b(01000010),
+ b(01000010),
+ b(01100110), /* 8 */
+ b(01111110),
+ b(00111100),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(11111111),
+ b(11111111),
+ b(11000011),
+ b(10000001), /* 4 */
+ b(10011001),
+ b(10111101),
+ b(10111101),
+ b(10011001), /* 8 */
+ b(10000001),
+ b(11000011),
+ b(11111111),
+ b(11111111) /* 01 */
+ },
+ { b(00000000),
+ b(00111110),
+ b(00001110),
+ b(00111010), /* 4 */
+ b(01110010),
+ b(11111000),
+ b(11001100),
+ b(11001100), /* 8 */
+ b(11001100),
+ b(01111000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00111100),
+ b(01100110),
+ b(01100110), /* 4 */
+ b(01100110),
+ b(00111100),
+ b(00011000),
+ b(01111110), /* 8 */
+ b(00011000),
+ b(00011000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00011111),
+ b(00011001),
+ b(00011001), /* 4 */
+ b(00011111),
+ b(00011000),
+ b(00011000),
+ b(01111000), /* 8 */
+ b(11111000),
+ b(01110000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01111111),
+ b(01100011),
+ b(01111111), /* 4 */
+ b(01100011),
+ b(01100011),
+ b(01100011),
+ b(01100111), /* 8 */
+ b(11100111),
+ b(11100110),
+ b(11000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00011000),
+ b(11011011), /* 4 */
+ b(01111110),
+ b(11100111),
+ b(11100111),
+ b(01111110), /* 8 */
+ b(11011011),
+ b(00011000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(10000000),
+ b(11000000),
+ b(11100000), /* 4 */
+ b(11111000),
+ b(11111110),
+ b(11111000),
+ b(11100000), /* 8 */
+ b(11000000),
+ b(10000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000010),
+ b(00000110),
+ b(00001110), /* 4 */
+ b(00111110),
+ b(11111110),
+ b(00111110),
+ b(00001110), /* 8 */
+ b(00000110),
+ b(00000010),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00011000),
+ b(00111100),
+ b(01111110), /* 4 */
+ b(00011000),
+ b(00011000),
+ b(00011000),
+ b(01111110), /* 8 */
+ b(00111100),
+ b(00011000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01100110),
+ b(01100110),
+ b(01100110), /* 4 */
+ b(01100110),
+ b(01100110),
+ b(00000000),
+ b(00000000), /* 8 */
+ b(01100110),
+ b(01100110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01111111),
+ b(11011011),
+ b(11011011), /* 4 */
+ b(11011011),
+ b(01111011),
+ b(00011011),
+ b(00011011), /* 8 */
+ b(00011011),
+ b(00011011),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01111110),
+ b(01100011),
+ b(00110000), /* 4 */
+ b(00111100),
+ b(01100110),
+ b(01100110),
+ b(00111100), /* 8 */
+ b(00001100),
+ b(11000110),
+ b(01111110),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(11111110), /* 8 */
+ b(11111110),
+ b(11111110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00011000),
+ b(00111100),
+ b(01111110), /* 4 */
+ b(00011000),
+ b(00011000),
+ b(00011000),
+ b(01111110), /* 8 */
+ b(00111100),
+ b(00011000),
+ b(01111110),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00011000),
+ b(00111100),
+ b(01111110), /* 4 */
+ b(00011000),
+ b(00011000),
+ b(00011000),
+ b(00011000), /* 8 */
+ b(00011000),
+ b(00011000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00011000),
+ b(00011000),
+ b(00011000), /* 4 */
+ b(00011000),
+ b(00011000),
+ b(00011000),
+ b(01111110), /* 8 */
+ b(00111100),
+ b(00011000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00011000), /* 4 */
+ b(00001100),
+ b(11111110),
+ b(00001100),
+ b(00011000), /* 8 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00110000), /* 4 */
+ b(01100000),
+ b(11111110),
+ b(01100000),
+ b(00110000), /* 8 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(11000000),
+ b(11000000),
+ b(11111110),
+ b(00000000), /* 8 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00100100), /* 4 */
+ b(01100110),
+ b(11111111),
+ b(01100110),
+ b(00100100), /* 8 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00010000),
+ b(00010000), /* 4 */
+ b(00111000),
+ b(00111000),
+ b(01111100),
+ b(01111100), /* 8 */
+ b(11111110),
+ b(11111110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(11111110),
+ b(11111110), /* 4 */
+ b(01111100),
+ b(01111100),
+ b(00111000),
+ b(00111000), /* 8 */
+ b(00010000),
+ b(00010000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 8 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00110000),
+ b(01111000),
+ b(01111000), /* 4 */
+ b(00110000),
+ b(00110000),
+ b(00000000),
+ b(00110000), /* 8 */
+ b(00110000),
+ b(00000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01100110),
+ b(01100110),
+ b(00100100), /* 4 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 8 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01101100),
+ b(01101100),
+ b(11111110), /* 4 */
+ b(01101100),
+ b(01101100),
+ b(01101100),
+ b(11111110), /* 8 */
+ b(01101100),
+ b(01101100),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00110000),
+ b(00110000),
+ b(01111100),
+ b(11000000), /* 4 */
+ b(11000000),
+ b(01111000),
+ b(00001100),
+ b(00001100), /* 8 */
+ b(11111000),
+ b(00110000),
+ b(00110000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(11000100),
+ b(11001100), /* 4 */
+ b(00011000),
+ b(00110000),
+ b(01100000),
+ b(11001100), /* 8 */
+ b(10001100),
+ b(00000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01110000),
+ b(11011000),
+ b(11011000), /* 4 */
+ b(01110000),
+ b(11111010),
+ b(11011110),
+ b(11001100), /* 8 */
+ b(11011100),
+ b(01110110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00110000),
+ b(00110000),
+ b(00110000), /* 4 */
+ b(01100000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 8 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00001100),
+ b(00011000),
+ b(00110000), /* 4 */
+ b(01100000),
+ b(01100000),
+ b(01100000),
+ b(00110000), /* 8 */
+ b(00011000),
+ b(00001100),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01100000),
+ b(00110000),
+ b(00011000), /* 4 */
+ b(00001100),
+ b(00001100),
+ b(00001100),
+ b(00011000), /* 8 */
+ b(00110000),
+ b(01100000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(01100110), /* 4 */
+ b(00111100),
+ b(11111111),
+ b(00111100),
+ b(01100110), /* 8 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /** 4 */
+ b(00011000),
+ b(00011000),
+ b(01111110),
+ b(00011000), /* 8 */
+ b(00011000),
+ b(00000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 8 */
+ b(00111000),
+ b(00111000),
+ b(01100000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(00000000),
+ b(00000000),
+ b(11111110),
+ b(00000000), /* 8 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 8 */
+ b(00111000),
+ b(00111000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000010),
+ b(00000110), /* 4 */
+ b(00001100),
+ b(00011000),
+ b(00110000),
+ b(01100000), /* 8 */
+ b(11000000),
+ b(10000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01111100),
+ b(11000110),
+ b(11001110), /* 4 */
+ b(11011110),
+ b(11010110),
+ b(11110110),
+ b(11100110), /* 8 */
+ b(11000110),
+ b(01111100),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00010000),
+ b(00110000),
+ b(11110000), /* 4 */
+ b(00110000),
+ b(00110000),
+ b(00110000),
+ b(00110000), /* 8 */
+ b(00110000),
+ b(11111100),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01111000),
+ b(11001100),
+ b(11001100), /* 4 */
+ b(00001100),
+ b(00011000),
+ b(00110000),
+ b(01100000), /* 8 */
+ b(11001100),
+ b(11111100),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01111000),
+ b(11001100),
+ b(00001100), /* 4 */
+ b(00001100),
+ b(00111000),
+ b(00001100),
+ b(00001100), /* 8 */
+ b(11001100),
+ b(01111000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00001100),
+ b(00011100),
+ b(00111100), /* 4 */
+ b(01101100),
+ b(11001100),
+ b(11111110),
+ b(00001100), /* 8 */
+ b(00001100),
+ b(00011110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11111100),
+ b(11000000),
+ b(11000000), /* 4 */
+ b(11000000),
+ b(11111000),
+ b(00001100),
+ b(00001100), /* 8 */
+ b(11001100),
+ b(01111000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00111000),
+ b(01100000),
+ b(11000000), /* 4 */
+ b(11000000),
+ b(11111000),
+ b(11001100),
+ b(11001100), /* 8 */
+ b(11001100),
+ b(01111000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11111110),
+ b(11000110),
+ b(11000110), /* 4 */
+ b(00000110),
+ b(00001100),
+ b(00011000),
+ b(00110000), /* 8 */
+ b(00110000),
+ b(00110000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01111000),
+ b(11001100),
+ b(11001100), /* 4 */
+ b(11001100),
+ b(01111000),
+ b(11001100),
+ b(11001100), /* 8 */
+ b(11001100),
+ b(01111000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01111000),
+ b(11001100),
+ b(11001100), /* 4 */
+ b(11001100),
+ b(01111100),
+ b(00011000),
+ b(00011000), /* 8 */
+ b(00110000),
+ b(01110000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00111000), /* 4 */
+ b(00111000),
+ b(00000000),
+ b(00000000),
+ b(00111000), /* 8 */
+ b(00111000),
+ b(00000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00111000), /* 4 */
+ b(00111000),
+ b(00000000),
+ b(00000000),
+ b(00111000), /* 8 */
+ b(00111000),
+ b(00011000),
+ b(00110000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00001100),
+ b(00011000),
+ b(00110000), /* 4 */
+ b(01100000),
+ b(11000000),
+ b(01100000),
+ b(00110000), /* 8 */
+ b(00011000),
+ b(00001100),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(01111110),
+ b(00000000),
+ b(01111110),
+ b(00000000), /* 8 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01100000),
+ b(00110000),
+ b(00011000), /* 4 */
+ b(00001100),
+ b(00000110),
+ b(00001100),
+ b(00011000), /* 8 */
+ b(00110000),
+ b(01100000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01111000),
+ b(11001100),
+ b(00001100), /* 4 */
+ b(00011000),
+ b(00110000),
+ b(00110000),
+ b(00000000), /* 8 */
+ b(00110000),
+ b(00110000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01111100),
+ b(11000110),
+ b(11000110), /* 4 */
+ b(11011110),
+ b(11010110),
+ b(11011110),
+ b(11000000), /* 8 */
+ b(11000000),
+ b(01111100),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00110000),
+ b(01111000),
+ b(11001100), /* 4 */
+ b(11001100),
+ b(11001100),
+ b(11111100),
+ b(11001100), /* 8 */
+ b(11001100),
+ b(11001100),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11111100),
+ b(01100110),
+ b(01100110), /* 4 */
+ b(01100110),
+ b(01111100),
+ b(01100110),
+ b(01100110), /* 8 */
+ b(01100110),
+ b(11111100),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00111100),
+ b(01100110),
+ b(11000110), /* 4 */
+ b(11000000),
+ b(11000000),
+ b(11000000),
+ b(11000110), /* 8 */
+ b(01100110),
+ b(00111100),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11111000),
+ b(01101100),
+ b(01100110), /* 4 */
+ b(01100110),
+ b(01100110),
+ b(01100110),
+ b(01100110), /* 8 */
+ b(01101100),
+ b(11111000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11111110),
+ b(01100010),
+ b(01100000), /* 4 */
+ b(01100100),
+ b(01111100),
+ b(01100100),
+ b(01100000), /* 8 */
+ b(01100010),
+ b(11111110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11111110),
+ b(01100110),
+ b(01100010), /* 4 */
+ b(01100100),
+ b(01111100),
+ b(01100100),
+ b(01100000), /* 8 */
+ b(01100000),
+ b(11110000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00111100),
+ b(01100110),
+ b(11000110), /* 4 */
+ b(11000000),
+ b(11000000),
+ b(11001110),
+ b(11000110), /* 8 */
+ b(01100110),
+ b(00111110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11001100),
+ b(11001100),
+ b(11001100), /* 4 */
+ b(11001100),
+ b(11111100),
+ b(11001100),
+ b(11001100), /* 8 */
+ b(11001100),
+ b(11001100),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01111000),
+ b(00110000),
+ b(00110000), /* 4 */
+ b(00110000),
+ b(00110000),
+ b(00110000),
+ b(00110000), /* 8 */
+ b(00110000),
+ b(01111000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00011110),
+ b(00001100),
+ b(00001100), /* 4 */
+ b(00001100),
+ b(00001100),
+ b(11001100),
+ b(11001100), /* 8 */
+ b(11001100),
+ b(01111000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11100110),
+ b(01100110),
+ b(01101100), /* 4 */
+ b(01101100),
+ b(01111000),
+ b(01101100),
+ b(01101100), /* 8 */
+ b(01100110),
+ b(11100110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11110000),
+ b(01100000),
+ b(01100000), /* 4 */
+ b(01100000),
+ b(01100000),
+ b(01100010),
+ b(01100110), /* 8 */
+ b(01100110),
+ b(11111110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11000110),
+ b(11101110),
+ b(11111110), /* 4 */
+ b(11111110),
+ b(11010110),
+ b(11000110),
+ b(11000110), /* 8 */
+ b(11000110),
+ b(11000110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11000110),
+ b(11000110),
+ b(11100110), /* 4 */
+ b(11110110),
+ b(11111110),
+ b(11011110),
+ b(11001110), /* 8 */
+ b(11000110),
+ b(11000110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00111000),
+ b(01101100),
+ b(11000110), /* 4 */
+ b(11000110),
+ b(11000110),
+ b(11000110),
+ b(11000110), /* 8 */
+ b(01101100),
+ b(00111000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11111100),
+ b(01100110),
+ b(01100110), /* 4 */
+ b(01100110),
+ b(01111100),
+ b(01100000),
+ b(01100000), /* 8 */
+ b(01100000),
+ b(11110000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00111000),
+ b(01101100),
+ b(11000110), /* 4 */
+ b(11000110),
+ b(11000110),
+ b(11001110),
+ b(11011110), /* 8 */
+ b(01111100),
+ b(00001100),
+ b(00011110),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11111100),
+ b(01100110),
+ b(01100110), /* 4 */
+ b(01100110),
+ b(01111100),
+ b(01101100),
+ b(01100110), /* 8 */
+ b(01100110),
+ b(11100110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01111000),
+ b(11001100),
+ b(11001100), /* 4 */
+ b(11000000),
+ b(01110000),
+ b(00011000),
+ b(11001100), /* 8 */
+ b(11001100),
+ b(01111000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11111100),
+ b(10110100),
+ b(00110000), /* 4 */
+ b(00110000),
+ b(00110000),
+ b(00110000),
+ b(00110000), /* 8 */
+ b(00110000),
+ b(01111000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11001100),
+ b(11001100),
+ b(11001100), /* 4 */
+ b(11001100),
+ b(11001100),
+ b(11001100),
+ b(11001100), /* 8 */
+ b(11001100),
+ b(01111000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11001100),
+ b(11001100),
+ b(11001100), /* 4 */
+ b(11001100),
+ b(11001100),
+ b(11001100),
+ b(11001100), /* 8 */
+ b(01111000),
+ b(00110000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11000110),
+ b(11000110),
+ b(11000110), /* 4 */
+ b(11000110),
+ b(11010110),
+ b(11010110),
+ b(01101100), /* 8 */
+ b(01101100),
+ b(01101100),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11001100),
+ b(11001100),
+ b(11001100), /* 4 */
+ b(01111000),
+ b(00110000),
+ b(01111000),
+ b(11001100), /* 8 */
+ b(11001100),
+ b(11001100),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11001100),
+ b(11001100),
+ b(11001100), /* 4 */
+ b(11001100),
+ b(01111000),
+ b(00110000),
+ b(00110000), /* 8 */
+ b(00110000),
+ b(01111000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11111110),
+ b(11001110),
+ b(10011000), /* 4 */
+ b(00011000),
+ b(00110000),
+ b(01100000),
+ b(01100010), /* 8 */
+ b(11000110),
+ b(11111110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00111100),
+ b(00110000),
+ b(00110000), /* 4 */
+ b(00110000),
+ b(00110000),
+ b(00110000),
+ b(00110000), /* 8 */
+ b(00110000),
+ b(00111100),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(10000000),
+ b(11000000),
+ b(01100000), /* 4 */
+ b(00110000),
+ b(00011000),
+ b(00001100),
+ b(00000110), /* 8 */
+ b(00000010),
+ b(00000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00111100),
+ b(00001100),
+ b(00001100), /* 4 */
+ b(00001100),
+ b(00001100),
+ b(00001100),
+ b(00001100), /* 8 */
+ b(00001100),
+ b(00111100),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00010000),
+ b(00111000),
+ b(01101100),
+ b(11000110), /* 4 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 8 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 8 */
+ b(00000000),
+ b(00000000),
+ b(11111111),
+ b(00000000) /* 12 */
+ },
+ { b(00110000),
+ b(00110000),
+ b(00011000),
+ b(00000000), /* 4 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 8 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(01111000),
+ b(00001100),
+ b(01111100),
+ b(11001100), /* 8 */
+ b(11001100),
+ b(01110110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11100000),
+ b(01100000),
+ b(01100000), /* 4 */
+ b(01111100),
+ b(01100110),
+ b(01100110),
+ b(01100110), /* 8 */
+ b(01100110),
+ b(11011100),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(01111000),
+ b(11001100),
+ b(11000000),
+ b(11000000), /* 8 */
+ b(11001100),
+ b(01111000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00011100),
+ b(00001100),
+ b(00001100), /* 4 */
+ b(01111100),
+ b(11001100),
+ b(11001100),
+ b(11001100), /* 8 */
+ b(11001100),
+ b(01110110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(01111000),
+ b(11001100),
+ b(11111100),
+ b(11000000), /* 8 */
+ b(11001100),
+ b(01111000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00111000),
+ b(01101100),
+ b(01100000), /* 4 */
+ b(01100000),
+ b(11111000),
+ b(01100000),
+ b(01100000), /* 8 */
+ b(01100000),
+ b(11110000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(01110110),
+ b(11001100),
+ b(11001100),
+ b(11001100), /* 8 */
+ b(01111100),
+ b(00001100),
+ b(11001100),
+ b(01111000) /* 12 */
+ },
+ { b(00000000),
+ b(11100000),
+ b(01100000),
+ b(01100000), /* 4 */
+ b(01101100),
+ b(01110110),
+ b(01100110),
+ b(01100110), /* 8 */
+ b(01100110),
+ b(11100110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00011000),
+ b(00011000),
+ b(00000000), /* 4 */
+ b(01111000),
+ b(00011000),
+ b(00011000),
+ b(00011000), /* 8 */
+ b(00011000),
+ b(01111110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00001100),
+ b(00001100),
+ b(00000000), /* 4 */
+ b(00011100),
+ b(00001100),
+ b(00001100),
+ b(00001100), /* 8 */
+ b(00001100),
+ b(11001100),
+ b(11001100),
+ b(01111000) /* 12 */
+ },
+ { b(00000000),
+ b(11100000),
+ b(01100000),
+ b(01100000), /* 4 */
+ b(01100110),
+ b(01101100),
+ b(01111000),
+ b(01101100), /* 8 */
+ b(01100110),
+ b(11100110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01111000),
+ b(00011000),
+ b(00011000), /* 4 */
+ b(00011000),
+ b(00011000),
+ b(00011000),
+ b(00011000), /* 8 */
+ b(00011000),
+ b(01111110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(11111100),
+ b(11010110),
+ b(11010110),
+ b(11010110), /* 8 */
+ b(11010110),
+ b(11000110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(11111000),
+ b(11001100),
+ b(11001100),
+ b(11001100), /* 8 */
+ b(11001100),
+ b(11001100),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(01111000),
+ b(11001100),
+ b(11001100),
+ b(11001100), /* 8 */
+ b(11001100),
+ b(01111000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(11011100),
+ b(01100110),
+ b(01100110),
+ b(01100110), /* 8 */
+ b(01100110),
+ b(01111100),
+ b(01100000),
+ b(11110000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(01110110),
+ b(11001100),
+ b(11001100),
+ b(11001100), /* 8 */
+ b(11001100),
+ b(01111100),
+ b(00001100),
+ b(00011110) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(11101100),
+ b(01101110),
+ b(01110110),
+ b(01100000), /* 8 */
+ b(01100000),
+ b(11110000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(01111000),
+ b(11001100),
+ b(01100000),
+ b(00011000), /* 8 */
+ b(11001100),
+ b(01111000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00100000),
+ b(01100000), /* 4 */
+ b(11111100),
+ b(01100000),
+ b(01100000),
+ b(01100000), /* 8 */
+ b(01101100),
+ b(00111000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(11001100),
+ b(11001100),
+ b(11001100),
+ b(11001100), /* 8 */
+ b(11001100),
+ b(01110110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(11001100),
+ b(11001100),
+ b(11001100),
+ b(11001100), /* 8 */
+ b(01111000),
+ b(00110000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(11000110),
+ b(11000110),
+ b(11010110),
+ b(11010110), /* 8 */
+ b(01101100),
+ b(01101100),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(11000110),
+ b(01101100),
+ b(00111000),
+ b(00111000), /* 8 */
+ b(01101100),
+ b(11000110),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(01100110),
+ b(01100110),
+ b(01100110),
+ b(01100110), /* 8 */
+ b(00111100),
+ b(00001100),
+ b(00011000),
+ b(11110000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 4 */
+ b(11111100),
+ b(10001100),
+ b(00011000),
+ b(01100000), /* 8 */
+ b(11000100),
+ b(11111100),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00011100),
+ b(00110000),
+ b(00110000), /* 4 */
+ b(01100000),
+ b(11000000),
+ b(01100000),
+ b(00110000), /* 8 */
+ b(00110000),
+ b(00011100),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00011000),
+ b(00011000),
+ b(00011000), /* 4 */
+ b(00011000),
+ b(00000000),
+ b(00011000),
+ b(00011000), /* 8 */
+ b(00011000),
+ b(00011000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11100000),
+ b(00110000),
+ b(00110000), /* 4 */
+ b(00011000),
+ b(00001100),
+ b(00011000),
+ b(00110000), /* 8 */
+ b(00110000),
+ b(11100000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01110011),
+ b(11011010),
+ b(11001110), /* 4 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000), /* 8 */
+ b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00000000),
+ b(00000000),
+ b(00010000), /* 4 */
+ b(00111000),
+ b(01101100),
+ b(11000110),
+ b(11000110), /* 8 */
+ b(11111110),
+ b(00000000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01000100),
+ b(01101100),
+ b(00111000), /* 4 */
+ b(00110000),
+ b(01100000),
+ b(11000000),
+ b(11000000), /* 8 */
+ b(01100000),
+ b(00111000),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(00110000),
+ b(00110000),
+ b(11111110), /* 4 */
+ b(00110000),
+ b(00110000),
+ b(01111010),
+ b(10110110), /* 8 */
+ b(01111100),
+ b(00110010),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(11111110),
+ b(00001100),
+ b(00011000), /* 4 */
+ b(00110000),
+ b(00011000),
+ b(00001100),
+ b(01110110), /* 8 */
+ b(11000110),
+ b(01111100),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+ { b(00000000),
+ b(01100110),
+ b(01100110),
+ b(01100110), /* 4 */
+ b(01100110),
+ b(00000000),
+ b(00000000),
+ b(00111100), /* 8 */
+ b(01100110),
+ b(11000011),
+ b(00000000),
+ b(00000000) /* 12 */
+ },
+};
diff --git a/drivers/include/gfx.h b/drivers/include/gfx.h
index 182428e..42ada32 100644
--- a/drivers/include/gfx.h
+++ b/drivers/include/gfx.h
@@ -34,18 +34,26 @@ struct vbe_info_t;
bool gfx_init(struct vbe_info_t *vbe_mode_info);
-void gfx_drawpixel(int x, int y, uint32_t color);
+void gfx_drawpixel(int x, int y);
-void gfx_drawchar(int x, int y, char c, uint32_t fg, uint32_t bg);
+void gfx_drawchar(int x, int y, char ch);
void gfx_putchar(char ch);
void gfx_puts(const char* str);
-void gfx_clear(uint32_t color);
+void gfx_clear(void);
void gfx_reset(void);
+void gfx_set_foreground(uint32_t);
+
+uint32_t gfx_get_foreground(void);
+
+void gfx_set_background(uint32_t);
+
+uint32_t gfx_get_background(void);
+
extern const uint16_t *gfx_width, *gfx_height;
/* this is _BYTES_ per pixel, NOT BITS per pixel! */
diff --git a/drivers/include/gfx_font.h b/drivers/include/gfx_font.h
new file mode 100644
index 0000000..f7db9d7
--- /dev/null
+++ b/drivers/include/gfx_font.h
@@ -0,0 +1,4 @@
+#include <stdint.h>
+#define FONT_WIDTH 8
+#define FONT_HEIGHT 12
+extern const uint8_t gfx_font[][FONT_HEIGHT];