summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Santmyer <jon@jonsantmyer.com>2021-12-21 11:14:55 -0500
committerJon Santmyer <jon@jonsantmyer.com>2021-12-21 11:14:55 -0500
commit4dce532e4d8cfce07d5826a5f56ec1d76ff794c8 (patch)
tree8efd79d8a7b013b36c09a9b118c4b95ce54bdf79
parent4c5dc70f3816228ae721a51e92c8016c6b9dd743 (diff)
downloadmodit-kernel-flattening.tar.gz
modit-kernel-flattening.tar.bz2
modit-kernel-flattening.zip
Display: Remove vga_textmodeflattening
move display functions to display directory new framebuffer renderer add font spec (8x16 ASCIIish)
-rw-r--r--arch/x86/64/usermode_enter.s6
-rw-r--r--boot/stivale2.c2
-rw-r--r--display/display.c (renamed from io/display.c)10
-rw-r--r--display/display.h (renamed from io/display.h)0
-rw-r--r--display/font.c3886
-rw-r--r--display/font.h271
-rw-r--r--display/framebuffer.c101
-rw-r--r--display/framebuffer.h9
-rw-r--r--display/serial.c (renamed from io/serial.c)0
-rw-r--r--display/serial.h (renamed from io/serial.h)0
-rw-r--r--io/framebuffer.c18
-rw-r--r--io/framebuffer.h19
-rw-r--r--io/vga_textmode.c88
-rw-r--r--io/vga_textmode.h42
-rw-r--r--main.c14
-rw-r--r--task/user.h9
-rw-r--r--task/usermode.c19
17 files changed, 4317 insertions, 177 deletions
diff --git a/arch/x86/64/usermode_enter.s b/arch/x86/64/usermode_enter.s
new file mode 100644
index 0000000..8e3e566
--- /dev/null
+++ b/arch/x86/64/usermode_enter.s
@@ -0,0 +1,6 @@
+.global usermode_enter
+usermode_enter:
+ mov %rdi, %rcx
+ mov %rsi, %rsp
+ mov %rdx, %r11
+ sysretq
diff --git a/boot/stivale2.c b/boot/stivale2.c
index 5f19454..f4b9086 100644
--- a/boot/stivale2.c
+++ b/boot/stivale2.c
@@ -37,7 +37,7 @@ static struct stivale2_header_tag_any_video video_request = {
.identifier = STIVALE2_HEADER_TAG_ANY_VIDEO_ID,
.next = (uint64_t)&unmap_null_tag
},
- .preference = 1
+ .preference = 0
};
__attribute__((section(".stivale2hdr"), used))
diff --git a/io/display.c b/display/display.c
index e680b43..a86c8f3 100644
--- a/io/display.c
+++ b/display/display.c
@@ -1,5 +1,4 @@
#include "display.h"
-#include "vga_textmode.h"
#include "framebuffer.h"
#include "serial.h"
@@ -8,24 +7,19 @@
void
display_putc(char c)
{
- vga_textmode_putc(c);
serial_putc(c);
+ framebuffer_putc(c);
}
void
display_puts(const char *s)
{
- vga_textmode_puts(s);
serial_puts(s);
+ framebuffer_puts(s);
}
void
display_setup(void)
{
- if(bootinfo->fb == NULL) {
- vga_textmode_setup();
- }else{
- framebuffer_setup();
- }
serial_setup();
}
diff --git a/io/display.h b/display/display.h
index a462532..a462532 100644
--- a/io/display.h
+++ b/display/display.h
diff --git a/display/font.c b/display/font.c
new file mode 100644
index 0000000..9f7a0a3
--- /dev/null
+++ b/display/font.c
@@ -0,0 +1,3886 @@
+// Created from bdf2c Version 3, (c) 2009, 2010 by Lutz Sammer
+// License AGPLv3: GNU Affero General Public License version 3
+
+#include "font.h"
+
+ /// character bitmap for each encoding
+static const unsigned char __font_bitmap__[] = {
+// 0 $00 'char0'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XX_XX_X_,
+ ______X_,
+ X_______,
+ X_____X_,
+ ______X_,
+ X_______,
+ X_____X_,
+ ______X_,
+ X_______,
+ X_XX_XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 32 $20 'space'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 33 $21 'exclam'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ___XX___,
+ __XXXX__,
+ __XXXX__,
+ __XXXX__,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ________,
+ ___XX___,
+ ___XX___,
+ ________,
+ ________,
+ ________,
+ ________,
+// 34 $22 'quotedbl'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ __X__X__,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 35 $23 'numbersign'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ _XX_XX__,
+ _XX_XX__,
+ XXXXXXX_,
+ _XX_XX__,
+ _XX_XX__,
+ _XX_XX__,
+ XXXXXXX_,
+ _XX_XX__,
+ _XX_XX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 36 $24 'dollar'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ___XX___,
+ ___XX___,
+ _XXXXX__,
+ XX___XX_,
+ XX____X_,
+ XX______,
+ _XXXXX__,
+ _____XX_,
+ _____XX_,
+ X____XX_,
+ XX___XX_,
+ _XXXXX__,
+ ___XX___,
+ ___XX___,
+ ________,
+ ________,
+// 37 $25 'percent'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ XX____X_,
+ XX___XX_,
+ ____XX__,
+ ___XX___,
+ __XX____,
+ _XX_____,
+ XX___XX_,
+ X____XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 38 $26 'ampersand'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ __XXX___,
+ _XX_XX__,
+ _XX_XX__,
+ __XXX___,
+ _XXX_XX_,
+ XX_XXX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ _XXX_XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 39 $27 'quotesingle'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ __XX____,
+ __XX____,
+ __XX____,
+ __X_____,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 40 $28 'parenleft'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ____XX__,
+ ___XX___,
+ __XX____,
+ __XX____,
+ __XX____,
+ __XX____,
+ __XX____,
+ __XX____,
+ ___XX___,
+ ____XX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 41 $29 'parenright'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ __XX____,
+ ___XX___,
+ ____XX__,
+ ____XX__,
+ ____XX__,
+ ____XX__,
+ ____XX__,
+ ____XX__,
+ ___XX___,
+ __XX____,
+ ________,
+ ________,
+ ________,
+ ________,
+// 42 $2a 'asterisk'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ _XX__XX_,
+ __XXXX__,
+ XXXXXXXX,
+ __XXXX__,
+ _XX__XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 43 $2b 'plus'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ___XX___,
+ ___XX___,
+ _XXXXXX_,
+ ___XX___,
+ ___XX___,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 44 $2c 'comma'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ __XX____,
+ ________,
+ ________,
+ ________,
+// 45 $2d 'hyphen'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ XXXXXXX_,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 46 $2e 'period'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ___XX___,
+ ___XX___,
+ ________,
+ ________,
+ ________,
+ ________,
+// 47 $2f 'slash'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ______X_,
+ _____XX_,
+ ____XX__,
+ ___XX___,
+ __XX____,
+ _XX_____,
+ XX______,
+ X_______,
+ ________,
+ ________,
+ ________,
+ ________,
+// 48 $30 'zero'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ __XXX___,
+ _XX_XX__,
+ XX___XX_,
+ XX___XX_,
+ XX_X_XX_,
+ XX_X_XX_,
+ XX___XX_,
+ XX___XX_,
+ _XX_XX__,
+ __XXX___,
+ ________,
+ ________,
+ ________,
+ ________,
+// 49 $31 'one'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ___XX___,
+ __XXX___,
+ _XXXX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ _XXXXXX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 50 $32 'two'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ _____XX_,
+ ____XX__,
+ ___XX___,
+ __XX____,
+ _XX_____,
+ XX______,
+ XX___XX_,
+ XXXXXXX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 51 $33 'three'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ _____XX_,
+ _____XX_,
+ __XXXX__,
+ _____XX_,
+ _____XX_,
+ _____XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 52 $34 'four'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ____XX__,
+ ___XXX__,
+ __XXXX__,
+ _XX_XX__,
+ XX__XX__,
+ XXXXXXX_,
+ ____XX__,
+ ____XX__,
+ ____XX__,
+ ___XXXX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 53 $35 'five'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XXXXXXX_,
+ XX______,
+ XX______,
+ XX______,
+ XXXXXX__,
+ _____XX_,
+ _____XX_,
+ _____XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 54 $36 'six'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ __XXX___,
+ _XX_____,
+ XX______,
+ XX______,
+ XXXXXX__,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 55 $37 'seven'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XXXXXXX_,
+ XX___XX_,
+ _____XX_,
+ _____XX_,
+ ____XX__,
+ ___XX___,
+ __XX____,
+ __XX____,
+ __XX____,
+ __XX____,
+ ________,
+ ________,
+ ________,
+ ________,
+// 56 $38 'eight'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 57 $39 'nine'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXXX_,
+ _____XX_,
+ _____XX_,
+ _____XX_,
+ ____XX__,
+ _XXXX___,
+ ________,
+ ________,
+ ________,
+ ________,
+// 58 $3a 'colon'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ___XX___,
+ ___XX___,
+ ________,
+ ________,
+ ________,
+ ___XX___,
+ ___XX___,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 59 $3b 'semicolon'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ___XX___,
+ ___XX___,
+ ________,
+ ________,
+ ________,
+ ___XX___,
+ ___XX___,
+ __XX____,
+ ________,
+ ________,
+ ________,
+ ________,
+// 60 $3c 'less'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ _____XX_,
+ ____XX__,
+ ___XX___,
+ __XX____,
+ _XX_____,
+ __XX____,
+ ___XX___,
+ ____XX__,
+ _____XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 61 $3d 'equal'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ _XXXXXX_,
+ ________,
+ ________,
+ _XXXXXX_,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 62 $3e 'greater'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ _XX_____,
+ __XX____,
+ ___XX___,
+ ____XX__,
+ _____XX_,
+ ____XX__,
+ ___XX___,
+ __XX____,
+ _XX_____,
+ ________,
+ ________,
+ ________,
+ ________,
+// 63 $3f 'question'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XX___XX_,
+ ____XX__,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ________,
+ ___XX___,
+ ___XX___,
+ ________,
+ ________,
+ ________,
+ ________,
+// 64 $40 'at'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XX___XX_,
+ XX_XXXX_,
+ XX_XXXX_,
+ XX_XXXX_,
+ XX_XXX__,
+ XX______,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 65 $41 'A'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ___X____,
+ __XXX___,
+ _XX_XX__,
+ XX___XX_,
+ XX___XX_,
+ XXXXXXX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 66 $42 'B'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XXXXXX__,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XXXXX__,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ XXXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 67 $43 'C'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ __XXXX__,
+ _XX__XX_,
+ XX____X_,
+ XX______,
+ XX______,
+ XX______,
+ XX______,
+ XX____X_,
+ _XX__XX_,
+ __XXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 68 $44 'D'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XXXXX___,
+ _XX_XX__,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX_XX__,
+ XXXXX___,
+ ________,
+ ________,
+ ________,
+ ________,
+// 69 $45 'E'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XXXXXXX_,
+ _XX__XX_,
+ _XX___X_,
+ _XX_X___,
+ _XXXX___,
+ _XX_X___,
+ _XX_____,
+ _XX___X_,
+ _XX__XX_,
+ XXXXXXX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 70 $46 'F'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XXXXXXX_,
+ _XX__XX_,
+ _XX___X_,
+ _XX_X___,
+ _XXXX___,
+ _XX_X___,
+ _XX_____,
+ _XX_____,
+ _XX_____,
+ XXXX____,
+ ________,
+ ________,
+ ________,
+ ________,
+// 71 $47 'G'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ __XXXX__,
+ _XX__XX_,
+ XX____X_,
+ XX______,
+ XX______,
+ XX_XXXX_,
+ XX___XX_,
+ XX___XX_,
+ _XX__XX_,
+ __XXX_X_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 72 $48 'H'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XXXXXXX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 73 $49 'I'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ __XXXX__,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ __XXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 74 $4a 'J'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ___XXXX_,
+ ____XX__,
+ ____XX__,
+ ____XX__,
+ ____XX__,
+ ____XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ _XXXX___,
+ ________,
+ ________,
+ ________,
+ ________,
+// 75 $4b 'K'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XXX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX_XX__,
+ _XXXX___,
+ _XXXX___,
+ _XX_XX__,
+ _XX__XX_,
+ _XX__XX_,
+ XXX__XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 76 $4c 'L'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XXXX____,
+ _XX_____,
+ _XX_____,
+ _XX_____,
+ _XX_____,
+ _XX_____,
+ _XX_____,
+ _XX___X_,
+ _XX__XX_,
+ XXXXXXX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 77 $4d 'M'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XX___XX_,
+ XXX_XXX_,
+ XXXXXXX_,
+ XXXXXXX_,
+ XX_X_XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 78 $4e 'N'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XX___XX_,
+ XXX__XX_,
+ XXXX_XX_,
+ XXXXXXX_,
+ XX_XXXX_,
+ XX__XXX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 79 $4f 'O'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 80 $50 'P'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XXXXXX__,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XXXXX__,
+ _XX_____,
+ _XX_____,
+ _XX_____,
+ _XX_____,
+ XXXX____,
+ ________,
+ ________,
+ ________,
+ ________,
+// 81 $51 'Q'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX_X_XX_,
+ XX_XXXX_,
+ _XXXXX__,
+ ____XX__,
+ ____XXX_,
+ ________,
+ ________,
+// 82 $52 'R'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XXXXXX__,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XXXXX__,
+ _XX_XX__,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ XXX__XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 83 $53 'S'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XX___XX_,
+ _XX_____,
+ __XXX___,
+ ____XX__,
+ _____XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 84 $54 'T'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XXXXXX_,
+ _XXXXXX_,
+ _X_XX_X_,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ __XXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 85 $55 'U'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 86 $56 'V'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XX_XX__,
+ __XXX___,
+ ___X____,
+ ________,
+ ________,
+ ________,
+ ________,
+// 87 $57 'W'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX_X_XX_,
+ XX_X_XX_,
+ XX_X_XX_,
+ XXXXXXX_,
+ XXX_XXX_,
+ _XX_XX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 88 $58 'X'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XX___XX_,
+ XX___XX_,
+ _XX_XX__,
+ _XXXXX__,
+ __XXX___,
+ __XXX___,
+ _XXXXX__,
+ _XX_XX__,
+ XX___XX_,
+ XX___XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 89 $59 'Y'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ __XXXX__,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ __XXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 90 $5a 'Z'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XXXXXXX_,
+ XX___XX_,
+ X____XX_,
+ ____XX__,
+ ___XX___,
+ __XX____,
+ _XX_____,
+ XX____X_,
+ XX___XX_,
+ XXXXXXX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 91 $5b 'bracketleft'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ __XXXX__,
+ __XX____,
+ __XX____,
+ __XX____,
+ __XX____,
+ __XX____,
+ __XX____,
+ __XX____,
+ __XX____,
+ __XXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 92 $5c 'backslash'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ X_______,
+ XX______,
+ XXX_____,
+ _XXX____,
+ __XXX___,
+ ___XXX__,
+ ____XXX_,
+ _____XX_,
+ ______X_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 93 $5d 'bracketright'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ __XXXX__,
+ ____XX__,
+ ____XX__,
+ ____XX__,
+ ____XX__,
+ ____XX__,
+ ____XX__,
+ ____XX__,
+ ____XX__,
+ __XXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 94 $5e 'asciicircum'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ___X____,
+ __XXX___,
+ _XX_XX__,
+ XX___XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 95 $5f 'underscore'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ XXXXXXXX,
+ ________,
+ ________,
+// 96 $60 'grave'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ __XX____,
+ __XX____,
+ ___XX___,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 97 $61 'a'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ _XXXX___,
+ ____XX__,
+ _XXXXX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ _XXX_XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 98 $62 'b'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XXX_____,
+ _XX_____,
+ _XX_____,
+ _XXXX___,
+ _XX_XX__,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 99 $63 'c'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XX______,
+ XX______,
+ XX______,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 100 $64 'd'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ___XXX__,
+ ____XX__,
+ ____XX__,
+ __XXXX__,
+ _XX_XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ _XXX_XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 101 $65 'e'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XXXXXXX_,
+ XX______,
+ XX______,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 102 $66 'f'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ __XXX___,
+ _XX_XX__,
+ _XX__X__,
+ _XX_____,
+ XXXX____,
+ _XX_____,
+ _XX_____,
+ _XX_____,
+ _XX_____,
+ XXXX____,
+ ________,
+ ________,
+ ________,
+ ________,
+// 103 $67 'g'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ _XXX_XX_,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ _XXXXX__,
+ ____XX__,
+ XX__XX__,
+ _XXXX___,
+ ________,
+// 104 $68 'h'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XXX_____,
+ _XX_____,
+ _XX_____,
+ _XX_XX__,
+ _XXX_XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ XXX__XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 105 $69 'i'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ___XX___,
+ ___XX___,
+ ________,
+ __XXX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ __XXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 106 $6a 'j'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _____XX_,
+ _____XX_,
+ ________,
+ ____XXX_,
+ _____XX_,
+ _____XX_,
+ _____XX_,
+ _____XX_,
+ _____XX_,
+ _____XX_,
+ _XX__XX_,
+ _XX__XX_,
+ __XXXX__,
+ ________,
+// 107 $6b 'k'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XXX_____,
+ _XX_____,
+ _XX_____,
+ _XX__XX_,
+ _XX_XX__,
+ _XXXX___,
+ _XXXX___,
+ _XX_XX__,
+ _XX__XX_,
+ XXX__XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 108 $6c 'l'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ __XXX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ __XXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 109 $6d 'm'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ XXX_XX__,
+ XXXXXXX_,
+ XX_X_XX_,
+ XX_X_XX_,
+ XX_X_XX_,
+ XX_X_XX_,
+ XX___XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 110 $6e 'n'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ XX_XXX__,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 111 $6f 'o'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 112 $70 'p'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ XX_XXX__,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XXXXX__,
+ _XX_____,
+ _XX_____,
+ XXXX____,
+ ________,
+// 113 $71 'q'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ _XXX_XX_,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ _XXXXX__,
+ ____XX__,
+ ____XX__,
+ ___XXXX_,
+ ________,
+// 114 $72 'r'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ XX_XXX__,
+ _XXX_XX_,
+ _XX__XX_,
+ _XX_____,
+ _XX_____,
+ _XX_____,
+ XXXX____,
+ ________,
+ ________,
+ ________,
+ ________,
+// 115 $73 's'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ _XX_____,
+ __XXX___,
+ ____XX__,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 116 $74 't'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ___X____,
+ __XX____,
+ __XX____,
+ XXXXXX__,
+ __XX____,
+ __XX____,
+ __XX____,
+ __XX____,
+ __XX_XX_,
+ ___XXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 117 $75 'u'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ _XXX_XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 118 $76 'v'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ __XXXX__,
+ ___XX___,
+ ________,
+ ________,
+ ________,
+ ________,
+// 119 $77 'w'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ XX___XX_,
+ XX___XX_,
+ XX_X_XX_,
+ XX_X_XX_,
+ XX_X_XX_,
+ XXXXXXX_,
+ _XX_XX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 120 $78 'x'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ XX___XX_,
+ _XX_XX__,
+ __XXX___,
+ __XXX___,
+ __XXX___,
+ _XX_XX__,
+ XX___XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 121 $79 'y'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXXX_,
+ _____XX_,
+ ____XX__,
+ XXXXX___,
+ ________,
+// 122 $7a 'z'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ XXXXXXX_,
+ XX__XX__,
+ ___XX___,
+ __XX____,
+ _XX_____,
+ XX___XX_,
+ XXXXXXX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 123 $7b 'braceleft'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ____XXX_,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ _XXX____,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ____XXX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 124 $7c 'bar'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ________,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ________,
+ ________,
+ ________,
+ ________,
+// 125 $7d 'braceright'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XXX____,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ____XXX_,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ _XXX____,
+ ________,
+ ________,
+ ________,
+ ________,
+// 126 $7e 'asciitilde'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XXX_XX_,
+ XX_XXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 127 $7f 'char127'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ___X____,
+ __XXX___,
+ _XX_XX__,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XXXXXXX_,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 160 $a0 'space'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 161 $a1 'exclamdown'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ___XX___,
+ ___XX___,
+ ________,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ __XXXX__,
+ __XXXX__,
+ __XXXX__,
+ ___XX___,
+ ________,
+ ________,
+ ________,
+ ________,
+// 162 $a2 'cent'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ___XX___,
+ ___XX___,
+ __XXXX__,
+ _XX__XX_,
+ _XX_____,
+ _XX_____,
+ _XX_____,
+ _XX__XX_,
+ __XXXX__,
+ ___XX___,
+ ___XX___,
+ ________,
+ ________,
+ ________,
+ ________,
+// 163 $a3 'sterling'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ __XXX___,
+ _XX_XX__,
+ _XX__X__,
+ _XX_____,
+ XXXX____,
+ _XX_____,
+ _XX_____,
+ _XX_____,
+ _XX_____,
+ XXX__XX_,
+ XXXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 164 $a4 'currency'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ _XX__XX_,
+ __XXXX__,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ __XXXX__,
+ _XX__XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 165 $a5 'yen'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XX__XX_,
+ _XX__XX_,
+ __XXXX__,
+ ___XX___,
+ _XXXXXX_,
+ ___XX___,
+ _XXXXXX_,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ________,
+ ________,
+ ________,
+ ________,
+// 166 $a6 'brokenbar'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ________,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ________,
+ ________,
+ ________,
+ ________,
+// 167 $a7 'section'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ _XX_____,
+ __XXX___,
+ _XX_XX__,
+ XX___XX_,
+ XX___XX_,
+ _XX_XX__,
+ __XXX___,
+ ____XX__,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+// 168 $a8 'dieresis'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XX_XX__,
+ _XX_XX__,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 169 $a9 'copyright'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ __XXXX__,
+ _X____X_,
+ X__XX__X,
+ X_X__X_X,
+ X_X____X,
+ X_X____X,
+ X_X__X_X,
+ X__XX__X,
+ _X____X_,
+ __XXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 170 $aa 'ordfeminine'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ __XXXX__,
+ _XX_XX__,
+ _XX_XX__,
+ __XXXXX_,
+ ________,
+ _XXXXXX_,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 171 $ab 'guillemotleft'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ __XX_XX_,
+ _XX_XX__,
+ XX_XX___,
+ _XX_XX__,
+ __XX_XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 172 $ac 'logicalnot'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ XXXXXXX_,
+ _____XX_,
+ _____XX_,
+ _____XX_,
+ _____XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 173 $ad 'hyphen'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ __XXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 174 $ae 'registered'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ __XXX___,
+ _X___X__,
+ X_XXX_X_,
+ X_XX__X_,
+ X_X_X_X_,
+ _X___X__,
+ __XXX___,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 175 $af 'macron'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 176 $b0 'degree'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ __XXX___,
+ _XX_XX__,
+ _XX_XX__,
+ __XXX___,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 177 $b1 'plusminus'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ___XX___,
+ ___XX___,
+ _XXXXXX_,
+ ___XX___,
+ ___XX___,
+ ________,
+ _XXXXXX_,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 178 $b2 'twosuperior'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ _XXX____,
+ XX_XX___,
+ __XX____,
+ _XX_____,
+ XX__X___,
+ XXXXX___,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 179 $b3 'threesuperior'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ _XXX____,
+ XX_XX___,
+ __XX____,
+ ___XX___,
+ XX_XX___,
+ _XXX____,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 180 $b4 'acute'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ____XX__,
+ ___XX___,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 181 $b5 'mu'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XXXX_XX_,
+ XX______,
+ XX______,
+ XX______,
+ ________,
+// 182 $b6 'paragraph'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XXXXXXX,
+ XX_XX_XX,
+ XX_XX_XX,
+ XX_XX_XX,
+ _XXXX_XX,
+ ___XX_XX,
+ ___XX_XX,
+ ___XX_XX,
+ ___XX_XX,
+ ___XX_XX,
+ ________,
+ ________,
+ ________,
+ ________,
+// 183 $b7 'periodcentered'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ___XX___,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 184 $b8 'cedilla'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ___XX___,
+ ____XX__,
+ __XXX___,
+ ________,
+// 185 $b9 'onesuperior'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ __XX____,
+ _XXX____,
+ __XX____,
+ __XX____,
+ __XX____,
+ _XXXX___,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 186 $ba 'ordmasculine'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ __XXX___,
+ _XX_XX__,
+ _XX_XX__,
+ __XXX___,
+ ________,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 187 $bb 'guillemotright'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ XX_XX___,
+ _XX_XX__,
+ __XX_XX_,
+ _XX_XX__,
+ XX_XX___,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 188 $bc 'onequarter'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ XX______,
+ XX______,
+ XX____X_,
+ XX___XX_,
+ XX__XX__,
+ ___XX___,
+ __XX____,
+ _XX__XX_,
+ XX__XXX_,
+ X__XXXX_,
+ __XXXXX_,
+ _____XX_,
+ _____XX_,
+ ________,
+ ________,
+// 189 $bd 'onehalf'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ XX______,
+ XX______,
+ XX____X_,
+ XX___XX_,
+ XX__XX__,
+ ___XX___,
+ __XX____,
+ _XX_____,
+ XX_XXX__,
+ X____XX_,
+ ____XX__,
+ ___XX___,
+ __XXXXX_,
+ ________,
+ ________,
+// 190 $be 'threequarters'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ XXX_____,
+ __XX____,
+ _XX___X_,
+ __XX_XX_,
+ XXX_XX__,
+ ___XX___,
+ __XX____,
+ _XX__XX_,
+ XX__XXX_,
+ X__XXXX_,
+ __XXXXX_,
+ _____XX_,
+ _____XX_,
+ ________,
+ ________,
+// 191 $bf 'questiondown'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ __XX____,
+ __XX____,
+ ________,
+ __XX____,
+ __XX____,
+ _XX_____,
+ XX______,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 192 $c0 'Agrave'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ _XX_____,
+ __XX____,
+ ________,
+ ___X____,
+ __XXX___,
+ _XX_XX__,
+ XX___XX_,
+ XX___XX_,
+ XXXXXXX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 193 $c1 'Aacute'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ____XX__,
+ ___XX___,
+ ________,
+ ___X____,
+ __XXX___,
+ _XX_XX__,
+ XX___XX_,
+ XX___XX_,
+ XXXXXXX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 194 $c2 'Acircumflex'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ___X____,
+ __XXX___,
+ _XX_XX__,
+ ___X____,
+ __XXX___,
+ _XX_XX__,
+ XX___XX_,
+ XX___XX_,
+ XXXXXXX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 195 $c3 'Atilde'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ _XXX_XX_,
+ XX_XXX__,
+ ________,
+ ___X____,
+ __XXX___,
+ _XX_XX__,
+ XX___XX_,
+ XX___XX_,
+ XXXXXXX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 196 $c4 'Adieresis'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ _XX_XX__,
+ _XX_XX__,
+ ________,
+ ___X____,
+ __XXX___,
+ _XX_XX__,
+ XX___XX_,
+ XX___XX_,
+ XXXXXXX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 197 $c5 'Aring'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ __XXX___,
+ _XX_XX__,
+ __XXX___,
+ ___X____,
+ __XXX___,
+ _XX_XX__,
+ XX___XX_,
+ XX___XX_,
+ XXXXXXX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 198 $c6 'AE'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ __XXXXX_,
+ _XX_XX__,
+ XX__XX__,
+ XX__XX__,
+ XXXXXXX_,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XXX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 199 $c7 'Ccedilla'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ __XXXX__,
+ _XX__XX_,
+ XX____X_,
+ XX______,
+ XX______,
+ XX______,
+ XX______,
+ XX____X_,
+ _XX__XX_,
+ __XXXX__,
+ ___XX___,
+ ____XX__,
+ __XXX___,
+ ________,
+// 200 $c8 'Egrave'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ __XX____,
+ ___XX___,
+ ________,
+ XXXXXXX_,
+ _XX__XX_,
+ _XX___X_,
+ _XX_X___,
+ _XXXX___,
+ _XX_X___,
+ _XX___X_,
+ _XX__XX_,
+ XXXXXXX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 201 $c9 'Eacute'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ____XX__,
+ ___XX___,
+ ________,
+ XXXXXXX_,
+ _XX__XX_,
+ _XX___X_,
+ _XX_X___,
+ _XXXX___,
+ _XX_X___,
+ _XX___X_,
+ _XX__XX_,
+ XXXXXXX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 202 $ca 'Ecircumflex'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ___X____,
+ __XXX___,
+ _X___X__,
+ XXXXXXX_,
+ _XX__XX_,
+ _XX___X_,
+ _XX_X___,
+ _XXXX___,
+ _XX_X___,
+ _XX___X_,
+ _XX__XX_,
+ XXXXXXX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 203 $cb 'Edieresis'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ _XX_XX__,
+ _XX_XX__,
+ ________,
+ XXXXXXX_,
+ _XX__XX_,
+ _XX___X_,
+ _XX_X___,
+ _XXXX___,
+ _XX_X___,
+ _XX___X_,
+ _XX__XX_,
+ XXXXXXX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 204 $cc 'Igrave'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ __XX____,
+ ___XX___,
+ ________,
+ __XXXX__,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ __XXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 205 $cd 'Iacute'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ____XX__,
+ ___XX___,
+ ________,
+ __XXXX__,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ __XXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 206 $ce 'Icircumflex'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ___XX___,
+ __XXXX__,
+ _X____X_,
+ __XXXX__,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ __XXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 207 $cf 'Idieresis'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ _XX__XX_,
+ _XX__XX_,
+ ________,
+ __XXXX__,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ __XXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 208 $d0 'Eth'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XXXXX___,
+ _XX_XX__,
+ _XX__XX_,
+ _XX__XX_,
+ XXXX_XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX_XX__,
+ XXXXX___,
+ ________,
+ ________,
+ ________,
+ ________,
+// 209 $d1 'Ntilde'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ _XXX_XX_,
+ XX_XXX__,
+ ________,
+ XX___XX_,
+ XXX__XX_,
+ XXXX_XX_,
+ XXXXXXX_,
+ XX_XXXX_,
+ XX__XXX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 210 $d2 'Ograve'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ _XX_____,
+ __XX____,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 211 $d3 'Oacute'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ____XX__,
+ ___XX___,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 212 $d4 'Ocircumflex'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ___X____,
+ __XXX___,
+ _X___X__,
+ _XXXXX__,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 213 $d5 'Otilde'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ _XXX_XX_,
+ XX_XXX__,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 214 $d6 'Odieresis'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ _XX_XX__,
+ _XX_XX__,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 215 $d7 'multiply'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ _XX__XX_,
+ __XXXX__,
+ ___XX___,
+ __XXXX__,
+ _XX__XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 216 $d8 'Oslash'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XXXX_X_,
+ XX___X__,
+ XX__XXX_,
+ XX__XXX_,
+ XX_X_XX_,
+ XX_X_XX_,
+ XXX__XX_,
+ XXX__XX_,
+ _X___XX_,
+ X_XXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 217 $d9 'Ugrave'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ _XX_____,
+ __XX____,
+ ________,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 218 $da 'Uacute'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ____XX__,
+ ___XX___,
+ ________,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 219 $db 'Ucircumflex'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ___X____,
+ __XXX___,
+ _X___X__,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 220 $dc 'Udieresis'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ _XX_XX__,
+ _XX_XX__,
+ ________,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 221 $dd 'Yacute'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ____XX__,
+ ___XX___,
+ ________,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ __XXXX__,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ __XXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 222 $de 'Thorn'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XXXX____,
+ _XX_____,
+ _XXXXX__,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XXXXX__,
+ _XX_____,
+ XXXX____,
+ ________,
+ ________,
+ ________,
+ ________,
+// 223 $df 'germandbls'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ __XXXX__,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX_XX__,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ XXX_XX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 224 $e0 'agrave'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XX_____,
+ __XX____,
+ ________,
+ _XXXX___,
+ ____XX__,
+ _XXXXX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ _XXX_XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 225 $e1 'aacute'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ___XX___,
+ __XX____,
+ ________,
+ _XXXX___,
+ ____XX__,
+ _XXXXX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ _XXX_XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 226 $e2 'acircumflex'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ___X____,
+ __XXX___,
+ _XX_XX__,
+ ________,
+ _XXXX___,
+ ____XX__,
+ _XXXXX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ _XXX_XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 227 $e3 'atilde'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XXX_XX_,
+ XX_XXX__,
+ ________,
+ _XXXX___,
+ ____XX__,
+ _XXXXX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ _XXX_XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 228 $e4 'adieresis'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XX_XX__,
+ _XX_XX__,
+ ________,
+ _XXXX___,
+ ____XX__,
+ _XXXXX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ _XXX_XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 229 $e5 'aring'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ __XXX___,
+ _XX_XX__,
+ __XXX___,
+ ________,
+ _XXXX___,
+ ____XX__,
+ _XXXXX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ _XXX_XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 230 $e6 'ae'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ XX__XX__,
+ _XXX_XX_,
+ __XX_XX_,
+ _XXXXXX_,
+ XX_XX___,
+ XX_XX___,
+ _XX_XXX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 231 $e7 'ccedilla'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XX______,
+ XX______,
+ XX______,
+ XX___XX_,
+ _XXXXX__,
+ ___XX___,
+ ____XX__,
+ __XXX___,
+ ________,
+// 232 $e8 'egrave'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XX_____,
+ __XX____,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XXXXXXX_,
+ XX______,
+ XX______,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 233 $e9 'eacute'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ____XX__,
+ ___XX___,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XXXXXXX_,
+ XX______,
+ XX______,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 234 $ea 'ecircumflex'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ___X____,
+ __XXX___,
+ _XX_XX__,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XXXXXXX_,
+ XX______,
+ XX______,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 235 $eb 'edieresis'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XX_XX__,
+ _XX_XX__,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XXXXXXX_,
+ XX______,
+ XX______,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 236 $ec 'igrave'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ __XX____,
+ ___XX___,
+ ________,
+ __XXX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ __XXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 237 $ed 'iacute'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ____XX__,
+ ___XX___,
+ ________,
+ __XXX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ __XXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 238 $ee 'icircumflex'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ___X____,
+ __XXX___,
+ _XX_XX__,
+ ________,
+ __XXX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ __XXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 239 $ef 'idieresis'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XX__XX_,
+ _XX__XX_,
+ ________,
+ __XXX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ ___XX___,
+ __XXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 240 $f0 'eth'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XXX_XX_,
+ ___XXX__,
+ __XXXX__,
+ _____XX_,
+ _XXXXXX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 241 $f1 'ntilde'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XXX_XX_,
+ XX_XXX__,
+ ________,
+ XX_XXX__,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 242 $f2 'ograve'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XX_____,
+ __XX____,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 243 $f3 'oacute'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ____XX__,
+ ___XX___,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 244 $f4 'ocircumflex'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ___X____,
+ __XXX___,
+ _XX_XX__,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 245 $f5 'otilde'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XXX_XX_,
+ XX_XXX__,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 246 $f6 'odieresis'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XX_XX__,
+ _XX_XX__,
+ ________,
+ _XXXXX__,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 247 $f7 'divide'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ___XX___,
+ ___XX___,
+ ________,
+ _XXXXXX_,
+ ________,
+ ___XX___,
+ ___XX___,
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+// 248 $f8 'oslash'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ________,
+ ________,
+ ________,
+ _XXXX_X_,
+ XX___X__,
+ XX__XXX_,
+ XX_X_XX_,
+ XXX__XX_,
+ _X___XX_,
+ X_XXXX__,
+ ________,
+ ________,
+ ________,
+ ________,
+// 249 $f9 'ugrave'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XX_____,
+ __XX____,
+ ________,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ _XXX_XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 250 $fa 'uacute'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ___XX___,
+ __XX____,
+ ________,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ _XXX_XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 251 $fb 'ucircumflex'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ___X____,
+ __XXX___,
+ _XX_XX__,
+ ________,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ _XXX_XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 252 $fc 'udieresis'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XX__XX__,
+ XX__XX__,
+ ________,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ XX__XX__,
+ _XXX_XX_,
+ ________,
+ ________,
+ ________,
+ ________,
+// 253 $fd 'yacute'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ ____XX__,
+ ___XX___,
+ ________,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXXX_,
+ _____XX_,
+ ____XX__,
+ XXXXX___,
+ ________,
+// 254 $fe 'thorn'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ XXX_____,
+ _XX_____,
+ _XX_____,
+ _XXXXX__,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XX__XX_,
+ _XXXXX__,
+ _XX_____,
+ _XX_____,
+ XXXX____,
+ ________,
+// 255 $ff 'ydieresis'
+// width 8, bbx 0, bby -4, bbw 8, bbh 16
+ ________,
+ ________,
+ _XX_XX__,
+ _XX_XX__,
+ ________,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ XX___XX_,
+ _XXXXXX_,
+ _____XX_,
+ ____XX__,
+ XXXXX___,
+ ________,
+};
+
+ /// character width for each encoding
+static const unsigned char __font_widths__[] = {
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8,
+ 8
+};
+
+ /// character encoding for each index entry
+static const unsigned short __font_index__[] = {
+ 0,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 126,
+ 127,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 174,
+ 175,
+ 176,
+ 177,
+ 178,
+ 179,
+ 180,
+ 181,
+ 182,
+ 183,
+ 184,
+ 185,
+ 186,
+ 187,
+ 188,
+ 189,
+ 190,
+ 191,
+ 192,
+ 193,
+ 194,
+ 195,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 210,
+ 211,
+ 212,
+ 213,
+ 214,
+ 215,
+ 216,
+ 217,
+ 218,
+ 219,
+ 220,
+ 221,
+ 222,
+ 223,
+ 224,
+ 225,
+ 226,
+ 227,
+ 228,
+ 229,
+ 230,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 237,
+ 238,
+ 239,
+ 240,
+ 241,
+ 242,
+ 243,
+ 244,
+ 245,
+ 246,
+ 247,
+ 248,
+ 249,
+ 250,
+ 251,
+ 252,
+ 253,
+ 254,
+ 255
+};
+
+ /// bitmap font structure
+const struct bitmap_font font = {
+ .Width = 8, .Height = 16,
+ .Chars = 255,
+ .Widths = __font_widths__,
+ .Index = __font_index__,
+ .Bitmap = __font_bitmap__,
+};
+
diff --git a/display/font.h b/display/font.h
new file mode 100644
index 0000000..6ef724c
--- /dev/null
+++ b/display/font.h
@@ -0,0 +1,271 @@
+// (c) 2009, 2010 Lutz Sammer, License: AGPLv3
+
+ /// bitmap font structure
+struct bitmap_font {
+ unsigned char Width; ///< max. character width
+ unsigned char Height; ///< character height
+ unsigned short Chars; ///< number of characters in font
+ const unsigned char *Widths; ///< width of each character
+ const unsigned short *Index; ///< encoding to character index
+ const unsigned char *Bitmap; ///< bitmap of all characters
+};
+extern const struct bitmap_font font;
+
+ /// @{ defines to have human readable font files
+#define ________ 0x00
+#define _______X 0x01
+#define ______X_ 0x02
+#define ______XX 0x03
+#define _____X__ 0x04
+#define _____X_X 0x05
+#define _____XX_ 0x06
+#define _____XXX 0x07
+#define ____X___ 0x08
+#define ____X__X 0x09
+#define ____X_X_ 0x0A
+#define ____X_XX 0x0B
+#define ____XX__ 0x0C
+#define ____XX_X 0x0D
+#define ____XXX_ 0x0E
+#define ____XXXX 0x0F
+#define ___X____ 0x10
+#define ___X___X 0x11
+#define ___X__X_ 0x12
+#define ___X__XX 0x13
+#define ___X_X__ 0x14
+#define ___X_X_X 0x15
+#define ___X_XX_ 0x16
+#define ___X_XXX 0x17
+#define ___XX___ 0x18
+#define ___XX__X 0x19
+#define ___XX_X_ 0x1A
+#define ___XX_XX 0x1B
+#define ___XXX__ 0x1C
+#define ___XXX_X 0x1D
+#define ___XXXX_ 0x1E
+#define ___XXXXX 0x1F
+#define __X_____ 0x20
+#define __X____X 0x21
+#define __X___X_ 0x22
+#define __X___XX 0x23
+#define __X__X__ 0x24
+#define __X__X_X 0x25
+#define __X__XX_ 0x26
+#define __X__XXX 0x27
+#define __X_X___ 0x28
+#define __X_X__X 0x29
+#define __X_X_X_ 0x2A
+#define __X_X_XX 0x2B
+#define __X_XX__ 0x2C
+#define __X_XX_X 0x2D
+#define __X_XXX_ 0x2E
+#define __X_XXXX 0x2F
+#define __XX____ 0x30
+#define __XX___X 0x31
+#define __XX__X_ 0x32
+#define __XX__XX 0x33
+#define __XX_X__ 0x34
+#define __XX_X_X 0x35
+#define __XX_XX_ 0x36
+#define __XX_XXX 0x37
+#define __XXX___ 0x38
+#define __XXX__X 0x39
+#define __XXX_X_ 0x3A
+#define __XXX_XX 0x3B
+#define __XXXX__ 0x3C
+#define __XXXX_X 0x3D
+#define __XXXXX_ 0x3E
+#define __XXXXXX 0x3F
+#define _X______ 0x40
+#define _X_____X 0x41
+#define _X____X_ 0x42
+#define _X____XX 0x43
+#define _X___X__ 0x44
+#define _X___X_X 0x45
+#define _X___XX_ 0x46
+#define _X___XXX 0x47
+#define _X__X___ 0x48
+#define _X__X__X 0x49
+#define _X__X_X_ 0x4A
+#define _X__X_XX 0x4B
+#define _X__XX__ 0x4C
+#define _X__XX_X 0x4D
+#define _X__XXX_ 0x4E
+#define _X__XXXX 0x4F
+#define _X_X____ 0x50
+#define _X_X___X 0x51
+#define _X_X__X_ 0x52
+#define _X_X__XX 0x53
+#define _X_X_X__ 0x54
+#define _X_X_X_X 0x55
+#define _X_X_XX_ 0x56
+#define _X_X_XXX 0x57
+#define _X_XX___ 0x58
+#define _X_XX__X 0x59
+#define _X_XX_X_ 0x5A
+#define _X_XX_XX 0x5B
+#define _X_XXX__ 0x5C
+#define _X_XXX_X 0x5D
+#define _X_XXXX_ 0x5E
+#define _X_XXXXX 0x5F
+#define _XX_____ 0x60
+#define _XX____X 0x61
+#define _XX___X_ 0x62
+#define _XX___XX 0x63
+#define _XX__X__ 0x64
+#define _XX__X_X 0x65
+#define _XX__XX_ 0x66
+#define _XX__XXX 0x67
+#define _XX_X___ 0x68
+#define _XX_X__X 0x69
+#define _XX_X_X_ 0x6A
+#define _XX_X_XX 0x6B
+#define _XX_XX__ 0x6C
+#define _XX_XX_X 0x6D
+#define _XX_XXX_ 0x6E
+#define _XX_XXXX 0x6F
+#define _XXX____ 0x70
+#define _XXX___X 0x71
+#define _XXX__X_ 0x72
+#define _XXX__XX 0x73
+#define _XXX_X__ 0x74
+#define _XXX_X_X 0x75
+#define _XXX_XX_ 0x76
+#define _XXX_XXX 0x77
+#define _XXXX___ 0x78
+#define _XXXX__X 0x79
+#define _XXXX_X_ 0x7A
+#define _XXXX_XX 0x7B
+#define _XXXXX__ 0x7C
+#define _XXXXX_X 0x7D
+#define _XXXXXX_ 0x7E
+#define _XXXXXXX 0x7F
+#define X_______ 0x80
+#define X______X 0x81
+#define X_____X_ 0x82
+#define X_____XX 0x83
+#define X____X__ 0x84
+#define X____X_X 0x85
+#define X____XX_ 0x86
+#define X____XXX 0x87
+#define X___X___ 0x88
+#define X___X__X 0x89
+#define X___X_X_ 0x8A
+#define X___X_XX 0x8B
+#define X___XX__ 0x8C
+#define X___XX_X 0x8D
+#define X___XXX_ 0x8E
+#define X___XXXX 0x8F
+#define X__X____ 0x90
+#define X__X___X 0x91
+#define X__X__X_ 0x92
+#define X__X__XX 0x93
+#define X__X_X__ 0x94
+#define X__X_X_X 0x95
+#define X__X_XX_ 0x96
+#define X__X_XXX 0x97
+#define X__XX___ 0x98
+#define X__XX__X 0x99
+#define X__XX_X_ 0x9A
+#define X__XX_XX 0x9B
+#define X__XXX__ 0x9C
+#define X__XXX_X 0x9D
+#define X__XXXX_ 0x9E
+#define X__XXXXX 0x9F
+#define X_X_____ 0xA0
+#define X_X____X 0xA1
+#define X_X___X_ 0xA2
+#define X_X___XX 0xA3
+#define X_X__X__ 0xA4
+#define X_X__X_X 0xA5
+#define X_X__XX_ 0xA6
+#define X_X__XXX 0xA7
+#define X_X_X___ 0xA8
+#define X_X_X__X 0xA9
+#define X_X_X_X_ 0xAA
+#define X_X_X_XX 0xAB
+#define X_X_XX__ 0xAC
+#define X_X_XX_X 0xAD
+#define X_X_XXX_ 0xAE
+#define X_X_XXXX 0xAF
+#define X_XX____ 0xB0
+#define X_XX___X 0xB1
+#define X_XX__X_ 0xB2
+#define X_XX__XX 0xB3
+#define X_XX_X__ 0xB4
+#define X_XX_X_X 0xB5
+#define X_XX_XX_ 0xB6
+#define X_XX_XXX 0xB7
+#define X_XXX___ 0xB8
+#define X_XXX__X 0xB9
+#define X_XXX_X_ 0xBA
+#define X_XXX_XX 0xBB
+#define X_XXXX__ 0xBC
+#define X_XXXX_X 0xBD
+#define X_XXXXX_ 0xBE
+#define X_XXXXXX 0xBF
+#define XX______ 0xC0
+#define XX_____X 0xC1
+#define XX____X_ 0xC2
+#define XX____XX 0xC3
+#define XX___X__ 0xC4
+#define XX___X_X 0xC5
+#define XX___XX_ 0xC6
+#define XX___XXX 0xC7
+#define XX__X___ 0xC8
+#define XX__X__X 0xC9
+#define XX__X_X_ 0xCA
+#define XX__X_XX 0xCB
+#define XX__XX__ 0xCC
+#define XX__XX_X 0xCD
+#define XX__XXX_ 0xCE
+#define XX__XXXX 0xCF
+#define XX_X____ 0xD0
+#define XX_X___X 0xD1
+#define XX_X__X_ 0xD2
+#define XX_X__XX 0xD3
+#define XX_X_X__ 0xD4
+#define XX_X_X_X 0xD5
+#define XX_X_XX_ 0xD6
+#define XX_X_XXX 0xD7
+#define XX_XX___ 0xD8
+#define XX_XX__X 0xD9
+#define XX_XX_X_ 0xDA
+#define XX_XX_XX 0xDB
+#define XX_XXX__ 0xDC
+#define XX_XXX_X 0xDD
+#define XX_XXXX_ 0xDE
+#define XX_XXXXX 0xDF
+#define XXX_____ 0xE0
+#define XXX____X 0xE1
+#define XXX___X_ 0xE2
+#define XXX___XX 0xE3
+#define XXX__X__ 0xE4
+#define XXX__X_X 0xE5
+#define XXX__XX_ 0xE6
+#define XXX__XXX 0xE7
+#define XXX_X___ 0xE8
+#define XXX_X__X 0xE9
+#define XXX_X_X_ 0xEA
+#define XXX_X_XX 0xEB
+#define XXX_XX__ 0xEC
+#define XXX_XX_X 0xED
+#define XXX_XXX_ 0xEE
+#define XXX_XXXX 0xEF
+#define XXXX____ 0xF0
+#define XXXX___X 0xF1
+#define XXXX__X_ 0xF2
+#define XXXX__XX 0xF3
+#define XXXX_X__ 0xF4
+#define XXXX_X_X 0xF5
+#define XXXX_XX_ 0xF6
+#define XXXX_XXX 0xF7
+#define XXXXX___ 0xF8
+#define XXXXX__X 0xF9
+#define XXXXX_X_ 0xFA
+#define XXXXX_XX 0xFB
+#define XXXXXX__ 0xFC
+#define XXXXXX_X 0xFD
+#define XXXXXXX_ 0xFE
+#define XXXXXXXX 0xFF
+ /// @}
diff --git a/display/framebuffer.c b/display/framebuffer.c
new file mode 100644
index 0000000..87d506d
--- /dev/null
+++ b/display/framebuffer.c
@@ -0,0 +1,101 @@
+#include "framebuffer.h"
+#include "boot/boot.h"
+#include "print.h"
+#include "font.h"
+#include "regions.h"
+
+union framebuffer_pixel
+{
+ struct {
+ uint8_t r;
+ uint8_t g;
+ uint8_t b;
+ uint8_t a;
+ };
+ uint32_t pixel;
+};
+
+static union framebuffer_pixel *framebuffer;
+static size_t fb_width;
+static size_t fb_height;
+static size_t fb_pitch;
+static size_t fb_depth;
+
+static size_t fb_text_width;
+static size_t fb_text_height;
+static size_t fb_text_col;
+static size_t fb_text_row;
+
+union framebuffer_pixel *
+framebuffer_at(size_t x, size_t y)
+{
+ return &framebuffer[x + (y * fb_pitch)];
+}
+
+void
+framebuffer_drawch(size_t x, size_t y, char c)
+{
+ union framebuffer_pixel *pixel = NULL;
+ size_t fbx = (x * font.Width);
+ size_t fby = (y * font.Height);
+ size_t font_index = (c < 32 ? 0 : (c - 31));
+ const unsigned char *font_mask_line = &font.Bitmap[(font_index * 16)];
+
+ pixel = framebuffer_at(fbx, fby);
+ for(size_t row = 0; row < 16; row++) {
+ for(size_t col = 0; col < 8; col++) {
+ if((*font_mask_line & (0x80 >> col)) != 0) {
+ pixel->pixel = 0xFFFFFFFF;
+ }
+ pixel++;
+ }
+ pixel = framebuffer_at(fbx, fby + row);
+ font_mask_line++;
+ }
+}
+
+void
+framebuffer_putc(char c)
+{
+ switch(c) {
+ case '\n':
+ fb_text_col = 0;
+ fb_text_row++;
+ break;
+ default:
+ framebuffer_drawch(fb_text_col++, fb_text_row, c);
+ break;
+ }
+ if(fb_text_col >= fb_text_width) {
+ fb_text_col = 0;
+ fb_text_row++;
+ }
+ if(fb_text_row >= fb_text_height) {
+ //TODO: Scrolling
+ fb_text_row--;
+ }
+}
+
+void
+framebuffer_puts(const char *s)
+{
+ if(framebuffer == NULL) return;
+ for(; *s; s++) {
+ framebuffer_putc(*s);
+ }
+}
+
+void
+framebuffer_setup(void)
+{
+ framebuffer =
+ (union framebuffer_pixel*)(bootinfo->fb->address +
+ MEMORY_REGION_IDMAP_BASE);
+ fb_width = bootinfo->fb->width;
+ fb_height = bootinfo->fb->height;
+ fb_pitch = bootinfo->fb->pitch / (bootinfo->fb->bpp / 8);
+ fb_depth = bootinfo->fb->bpp;
+
+ fb_text_width = fb_width / 8;
+ fb_text_height = fb_height / 12;
+}
diff --git a/display/framebuffer.h b/display/framebuffer.h
new file mode 100644
index 0000000..a6f4bd1
--- /dev/null
+++ b/display/framebuffer.h
@@ -0,0 +1,9 @@
+#ifndef MODIT_KERNEL_FRAMEBUFFER_H
+#define MODIT_KERNEL_FRAMEBUFFER_H 1
+
+void framebuffer_putc(char c);
+void framebuffer_puts(const char *s);
+
+void framebuffer_setup(void);
+
+#endif
diff --git a/io/serial.c b/display/serial.c
index 58a84b6..58a84b6 100644
--- a/io/serial.c
+++ b/display/serial.c
diff --git a/io/serial.h b/display/serial.h
index af34888..af34888 100644
--- a/io/serial.h
+++ b/display/serial.h
diff --git a/io/framebuffer.c b/io/framebuffer.c
deleted file mode 100644
index d7f683e..0000000
--- a/io/framebuffer.c
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "framebuffer.h"
-
-#include "boot/boot.h"
-
-struct framebuffer_pixel_24bpp *framebuffer;
-
-size_t framebuffer_width;
-size_t framebuffer_height;
-size_t framebuffer_bpp;
-
-void
-framebuffer_setup(void)
-{
- framebuffer = (struct framebuffer_pixel_24bpp*)(bootinfo->fb->address);
- framebuffer_width = bootinfo->fb->width;
- framebuffer_height = bootinfo->fb->height;
- framebuffer_bpp = bootinfo->fb->bpp;
-}
diff --git a/io/framebuffer.h b/io/framebuffer.h
deleted file mode 100644
index 3e6d017..0000000
--- a/io/framebuffer.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef MODIT_FRAMEBUFFER_H
-#define MODIT_FRAMEBUFFER_H 1
-
-#include <stdint.h>
-
-struct framebuffer_pixel_24bpp {
- union {
- struct {
- uint8_t r;
- uint8_t g;
- uint8_t b;
- }__attribute__((packed));
- uint32_t value : 24;
- }__attribute__((packed));
-};
-
-void framebuffer_setup(void);
-
-#endif
diff --git a/io/vga_textmode.c b/io/vga_textmode.c
deleted file mode 100644
index b731f5c..0000000
--- a/io/vga_textmode.c
+++ /dev/null
@@ -1,88 +0,0 @@
-#include "vga_textmode.h"
-#include "string.h"
-#include "modit.h"
-
-struct vga_textmode_entry {
- char character;
- uint8_t color;
-};
-
-bool vga_textmode_enabled = false;
-
-static struct vga_textmode_entry *vga_textmode_buffer;
-
-static uint8_t vga_textmode_col;
-static uint8_t vga_textmode_row;
-static uint8_t vga_textmode_color;
-
-#define SCROLL_BLOCK_UPPER ((VGA_TEXTMODE_HEIGHT - 1) * VGA_TEXTMODE_WIDTH)
-
-void
-vga_textmode_setfg(char color)
-{
- vga_textmode_color = (vga_textmode_color & 0xF0) | (color & 0x0F);
-}
-
-void
-vga_textmode_setbg(char color)
-{
- vga_textmode_color = (vga_textmode_color & 0x0F) | (((color >> 4) & 0x0F) << 4);
-}
-
-static void
-scroll(void)
-{
- /*in the VGA buffer, shift the VGA entries starting one row below the top upwards*/
- memcpy(vga_textmode_buffer, vga_textmode_buffer + (VGA_TEXTMODE_WIDTH), SCROLL_BLOCK_UPPER * VGA_TEXTMODE_DEPTH);
-
- /*zero the lowest row*/
- memset(vga_textmode_buffer + SCROLL_BLOCK_UPPER, 0, VGA_TEXTMODE_WIDTH * VGA_TEXTMODE_DEPTH);
-}
-
-void
-vga_textmode_putc(char c)
-{
- //mutex_lock(&vga_textmode_buffer_mutex);
- unsigned short index = vga_textmode_col + (vga_textmode_row * VGA_TEXTMODE_WIDTH);
-
- switch(c){
- case '\n': //UNIX-style line endings.
- vga_textmode_row++;
- vga_textmode_col = 0;
- break;
- default:
- vga_textmode_buffer[index].color = vga_textmode_color;
- vga_textmode_buffer[index].character = c;
- vga_textmode_col++;
- break;
- }
- if(vga_textmode_col >= VGA_TEXTMODE_WIDTH){
- vga_textmode_col = 0;
- vga_textmode_row++;
- }
- if(vga_textmode_row >= VGA_TEXTMODE_HEIGHT){
- vga_textmode_row = VGA_TEXTMODE_HEIGHT - 1;
- scroll();
- }
-}
-
-void
-vga_textmode_puts(const char *s)
-{
- for(; *s; s++) {
- vga_textmode_putc(*s);
- }
-}
-
-extern symbol_t offset;
-
-void
-vga_textmode_setup(void)
-{
- vga_textmode_color = 0x0F;
- vga_textmode_col = 0;
- vga_textmode_row = 0;
-
- vga_textmode_buffer = (struct vga_textmode_entry*)(VGA_TEXTMODE_ADDR + (uintptr_t)offset);
- memset(vga_textmode_buffer, 0, VGA_TEXTMODE_WIDTH * VGA_TEXTMODE_HEIGHT * VGA_TEXTMODE_DEPTH);
-}
diff --git a/io/vga_textmode.h b/io/vga_textmode.h
deleted file mode 100644
index 1db1e72..0000000
--- a/io/vga_textmode.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * ui/vga_textmode.h
- * Copyright (c) 2021 Jon Santmyer <jon@jonsantmyer.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * Provides functions for outputting to VGA text mode buffer
- */
-#ifndef KERNEL_VGA_TEXTMODE_H
-#define KERNEL_VGA_TEXTMODE_H 1
-
-#include <stdint.h>
-#include <stdbool.h>
-
-#define VGA_TEXTMODE_ADDR 0xB8000
-
-#define VGA_TEXTMODE_WIDTH 80
-#define VGA_TEXTMODE_HEIGHT 25
-#define VGA_TEXTMODE_DEPTH 2
-
-extern bool vga_textmode_enabled;
-
-void vga_textmode_setfg(char color);
-void vga_textmode_setbg(char color);
-
-void vga_textmode_putc(char c);
-void vga_textmode_puts(const char *s);
-
-void vga_textmode_setup();
-
-#endif
diff --git a/main.c b/main.c
index efb389b..4554514 100644
--- a/main.c
+++ b/main.c
@@ -1,4 +1,5 @@
-#include "io/display.h"
+#include "display/display.h"
+#include "display/framebuffer.h"
#include "boot/boot.h"
#include "memory/memoryman.h"
#include "acpi/acpi.h"
@@ -21,6 +22,17 @@ kernel_main(void)
memoryman_setup();
mmu_finish();
+ if(bootinfo->fb != NULL) {
+ framebuffer_setup();
+ }
+
acpi_setup();
panic("Reached end of kernel main\n");
}
+
+/*Called by tasking init*/
+void
+kernel_task(void)
+{
+
+}
diff --git a/task/user.h b/task/user.h
new file mode 100644
index 0000000..6ae6d39
--- /dev/null
+++ b/task/user.h
@@ -0,0 +1,9 @@
+#ifndef MODIT_KERNEL_TASK_USER_H
+#define MODIT_KERNEL_TASK_USER_H 1
+
+#include <stdint.h>
+
+void usermode_enter(uintptr_t entry, uintptr_t stack, intmax_t flags);
+void usermode_setup(void);
+
+#endif
diff --git a/task/usermode.c b/task/usermode.c
new file mode 100644
index 0000000..691a535
--- /dev/null
+++ b/task/usermode.c
@@ -0,0 +1,19 @@
+#include "task/user.h"
+#include "msr.h"
+
+#define SYSCALL_MSR 0xc0000080
+#define SYSCALL_STAR 0xc0000081
+#define SYSCALL_LSTAR 0xc0000082
+
+void
+usermode_setup(void)
+{
+ /*Enable SCE*/
+ union msr syscall = msr_read(SYSCALL_MSR);
+ syscall.lo |= 1;
+ msr_write(SYSCALL_MSR, syscall);
+
+ union msr star = msr_read(SYSCALL_STAR);
+ star.hi = 0x00100008;
+ msr_write(SYSCALL_STAR, star);
+}