From 50b5427a8edbb8d59215334f5a250e7f8d6d7ca7 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 11 Mar 2015 19:18:59 +0100 Subject: Add keyboard handling code. New font thanks to Muazzam from OSDev! --- .gitignore | 2 + Makefile | 2 +- make_cdrom.sh | 8 +- res/fonts/Makefile | 10 +- res/fonts/default.c | 285 ----- res/fonts/muazzam.s | 2006 +++++++++++++++++++++++++++++++++++ res/fonts/pcvga.c | 278 +++++ res/keymaps/Makefile | 10 + res/keymaps/fr.c | 68 ++ src/common/include/proto/keyboard.h | 20 +- src/kernel/core/idt.c | 2 +- src/lib/include/keyboard.h | 37 + src/lib/include/proto/keymap_file.h | 16 + src/lib/libkogata/Makefile | 2 +- src/lib/libkogata/draw.c | 2 - src/lib/libkogata/keyboard.c | 148 +++ src/lib/libkogata/mainloop.c | 8 +- src/sysbin/login/main.c | 8 + 18 files changed, 2614 insertions(+), 298 deletions(-) delete mode 100644 res/fonts/default.c create mode 100644 res/fonts/muazzam.s create mode 100644 res/fonts/pcvga.c create mode 100644 res/keymaps/Makefile create mode 100644 res/keymaps/fr.c create mode 100644 src/lib/include/keyboard.h create mode 100644 src/lib/include/proto/keymap_file.h create mode 100644 src/lib/libkogata/keyboard.c diff --git a/.gitignore b/.gitignore index 29a8f1e..6c14d1a 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,9 @@ tags *.lib *.map *.log + *.bf +*.km *.iso cdrom/ diff --git a/Makefile b/Makefile index 5020490..2863d35 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ DIRS = src/common/libkogata src/common/libc src/common/libalgo \ src/kernel src/lib/libkogata \ src/sysbin/init src/sysbin/giosrv src/sysbin/login \ - res/fonts + res/fonts res/keymaps all: for dir in $(DIRS); do \ diff --git a/make_cdrom.sh b/make_cdrom.sh index e15e9bc..1e32b32 100755 --- a/make_cdrom.sh +++ b/make_cdrom.sh @@ -15,11 +15,15 @@ cp src/sysbin/init/init.bin cdrom/boot; strip cdrom/boot/init.bin mkdir -p cdrom/sys/bin cp src/sysbin/giosrv/giosrv.bin cdrom/sys/bin cp src/sysbin/login/login.bin cdrom/sys/bin - for BIN in cdrom/sys/bin/*.bin; do strip $BIN; done mkdir -p cdrom/sys/fonts cp res/fonts/*.bf cdrom/sys/fonts +cp res/fonts/muazzam.bf cdrom/sys/fonts/default.bf + +mkdir -p cdrom/sys/keymaps +cp res/keymaps/*.km cdrom/sys/keymaps +cp res/keymaps/fr.km cdrom/sys/keymaps/default.km cp README.md cdrom @@ -38,7 +42,7 @@ kernel /boot/kernel.bin root=io:/disk/atapi0 root_opts=l init=root:/boot/init.b module /boot/kernel.map EOF -# Generate CDROm image +# Generate CDROM image genisoimage -R -b boot/grub/stage2_eltorito -no-emul-boot \ -boot-load-size 4 -boot-info-table -input-charset ascii \ diff --git a/res/fonts/Makefile b/res/fonts/Makefile index c4de63d..8b50213 100644 --- a/res/fonts/Makefile +++ b/res/fonts/Makefile @@ -1,10 +1,18 @@ CC=gcc CFLAGS=-I../../src/lib/include -std=c11 +AS=nasm +ASFLAGS=-fbin %.bf: %.c $(CC) $(CFLAGS) -o $<.bin $< ./$<.bin > $@ rm $<.bin -all: default.bf +%.bf: %.s + $(AS) $(ASFLAGS) -o $@ $< + +all: pcvga.bf muazzam.bf + +clean: + rm *.bf || exit 0 diff --git a/res/fonts/default.c b/res/fonts/default.c deleted file mode 100644 index 43fddce..0000000 --- a/res/fonts/default.c +++ /dev/null @@ -1,285 +0,0 @@ -#include -#include - -#include - -char font_data[256][16] = { -/* 0x00 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x01 */ {0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00}, -/* 0x02 */ {0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00}, -/* 0x03 */ {0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, -/* 0x04 */ {0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x05 */ {0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, -/* 0x06 */ {0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, -/* 0x07 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x08 */ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, -/* 0x09 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x0a */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x0b */ {0x00, 0x00, 0x1e, 0x0e, 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, -/* 0x0c */ {0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, -/* 0x0d */ {0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00}, -/* 0x0e */ {0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00}, -/* 0x0f */ {0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, -/* 0x10 */ {0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00}, -/* 0x11 */ {0x00, 0x02, 0x06, 0x0e, 0x1e, 0x3e, 0xfe, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00}, -/* 0x12 */ {0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x13 */ {0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, -/* 0x14 */ {0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00}, -/* 0x15 */ {0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00}, -/* 0x16 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00}, -/* 0x17 */ {0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00}, -/* 0x18 */ {0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, -/* 0x19 */ {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, -/* 0x1a */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x1b */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x1c */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x1d */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x1e */ {0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x1f */ {0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x20 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x21 */ {0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, -/* 0x22 */ {0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x23 */ {0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00}, -/* 0x24 */ {0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00}, -/* 0x25 */ {0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00}, -/* 0x26 */ {0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, -/* 0x27 */ {0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x28 */ {0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00}, -/* 0x29 */ {0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00}, -/* 0x2a */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x2b */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x2c */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00}, -/* 0x2d */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x2e */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, -/* 0x2f */ {0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00}, -/* 0x30 */ {0x00, 0x00, 0x3c, 0x66, 0xc3, 0xc3, 0xdb, 0xdb, 0xc3, 0xc3, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, -/* 0x31 */ {0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00}, -/* 0x32 */ {0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, -/* 0x33 */ {0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0x34 */ {0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00}, -/* 0x35 */ {0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0x36 */ {0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0x37 */ {0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00}, -/* 0x38 */ {0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0x39 */ {0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00}, -/* 0x3a */ {0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x3b */ {0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00}, -/* 0x3c */ {0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00}, -/* 0x3d */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x3e */ {0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00}, -/* 0x3f */ {0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, -/* 0x40 */ {0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0x41 */ {0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, -/* 0x42 */ {0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, -/* 0x43 */ {0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, -/* 0x44 */ {0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00}, -/* 0x45 */ {0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, -/* 0x46 */ {0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, -/* 0x47 */ {0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00}, -/* 0x48 */ {0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, -/* 0x49 */ {0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, -/* 0x4a */ {0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, -/* 0x4b */ {0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, -/* 0x4c */ {0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, -/* 0x4d */ {0x00, 0x00, 0xc3, 0xe7, 0xff, 0xff, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00}, -/* 0x4e */ {0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, -/* 0x4f */ {0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0x50 */ {0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, -/* 0x51 */ {0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00}, -/* 0x52 */ {0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, -/* 0x53 */ {0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0x54 */ {0x00, 0x00, 0xff, 0xdb, 0x99, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, -/* 0x55 */ {0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0x56 */ {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, -/* 0x57 */ {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, -/* 0x58 */ {0x00, 0x00, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x18, 0x3c, 0x66, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00}, -/* 0x59 */ {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, -/* 0x5a */ {0x00, 0x00, 0xff, 0xc3, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc1, 0xc3, 0xff, 0x00, 0x00, 0x00, 0x00}, -/* 0x5b */ {0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00}, -/* 0x5c */ {0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00}, -/* 0x5d */ {0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00}, -/* 0x5e */ {0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x5f */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00}, -/* 0x60 */ {0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x61 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, -/* 0x62 */ {0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0x63 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0x64 */ {0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, -/* 0x65 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0x66 */ {0x00, 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, -/* 0x67 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00}, -/* 0x68 */ {0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, -/* 0x69 */ {0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, -/* 0x6a */ {0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00}, -/* 0x6b */ {0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, -/* 0x6c */ {0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, -/* 0x6d */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xff, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00}, -/* 0x6e */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, -/* 0x6f */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0x70 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00}, -/* 0x71 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00}, -/* 0x72 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, -/* 0x73 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0x74 */ {0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00}, -/* 0x75 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, -/* 0x76 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, -/* 0x77 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x00, 0x00, 0x00, 0x00}, -/* 0x78 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3, 0x00, 0x00, 0x00, 0x00}, -/* 0x79 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, -/* 0x7a */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, -/* 0x7b */ {0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, -/* 0x7c */ {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, -/* 0x7d */ {0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00}, -/* 0x7e */ {0x00, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x7f */ {0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0x80 */ {0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x0c, 0x06, 0x7c, 0x00, 0x00}, -/* 0x81 */ {0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, -/* 0x82 */ {0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0x83 */ {0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, -/* 0x84 */ {0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, -/* 0x85 */ {0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, -/* 0x86 */ {0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, -/* 0x87 */ {0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x60, 0x60, 0x66, 0x3c, 0x0c, 0x06, 0x3c, 0x00, 0x00, 0x00}, -/* 0x88 */ {0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0x89 */ {0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0x8a */ {0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0x8b */ {0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, -/* 0x8c */ {0x00, 0x18, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, -/* 0x8d */ {0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, -/* 0x8e */ {0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, -/* 0x8f */ {0x38, 0x6c, 0x38, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, -/* 0x90 */ {0x18, 0x30, 0x60, 0x00, 0xfe, 0x66, 0x60, 0x7c, 0x60, 0x60, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, -/* 0x91 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x3b, 0x1b, 0x7e, 0xd8, 0xdc, 0x77, 0x00, 0x00, 0x00, 0x00}, -/* 0x92 */ {0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00}, -/* 0x93 */ {0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0x94 */ {0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0x95 */ {0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0x96 */ {0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, -/* 0x97 */ {0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, -/* 0x98 */ {0x00, 0x00, 0xc6, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00}, -/* 0x99 */ {0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0x9a */ {0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0x9b */ {0x00, 0x18, 0x18, 0x7e, 0xc3, 0xc0, 0xc0, 0xc0, 0xc3, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, -/* 0x9c */ {0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00, 0x00}, -/* 0x9d */ {0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, -/* 0x9e */ {0x00, 0xfc, 0x66, 0x66, 0x7c, 0x62, 0x66, 0x6f, 0x66, 0x66, 0x66, 0xf3, 0x00, 0x00, 0x00, 0x00}, -/* 0x9f */ {0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0x70, 0x00, 0x00}, -/* 0xa0 */ {0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, -/* 0xa1 */ {0x00, 0x0c, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, -/* 0xa2 */ {0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0xa3 */ {0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, -/* 0xa4 */ {0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, -/* 0xa5 */ {0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, -/* 0xa6 */ {0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xa7 */ {0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xa8 */ {0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, -/* 0xa9 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xaa */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xab */ {0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xce, 0x9b, 0x06, 0x0c, 0x1f, 0x00, 0x00}, -/* 0xac */ {0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xce, 0x96, 0x3e, 0x06, 0x06, 0x00, 0x00}, -/* 0xad */ {0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, -/* 0xae */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xaf */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xb0 */ {0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44}, -/* 0xb1 */ {0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa}, -/* 0xb2 */ {0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77}, -/* 0xb3 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, -/* 0xb4 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, -/* 0xb5 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, -/* 0xb6 */ {0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, -/* 0xb7 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, -/* 0xb8 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, -/* 0xb9 */ {0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, -/* 0xba */ {0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, -/* 0xbb */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, -/* 0xbc */ {0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xbd */ {0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xbe */ {0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xbf */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, -/* 0xc0 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xc1 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xc2 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, -/* 0xc3 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, -/* 0xc4 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xc5 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, -/* 0xc6 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, -/* 0xc7 */ {0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, -/* 0xc8 */ {0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xc9 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, -/* 0xca */ {0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xcb */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, -/* 0xcc */ {0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, -/* 0xcd */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xce */ {0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, -/* 0xcf */ {0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xd0 */ {0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xd1 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, -/* 0xd2 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, -/* 0xd3 */ {0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xd4 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xd5 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, -/* 0xd6 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, -/* 0xd7 */ {0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, -/* 0xd8 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, -/* 0xd9 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xda */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, -/* 0xdb */ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, -/* 0xdc */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, -/* 0xdd */ {0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0}, -/* 0xde */ {0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f}, -/* 0xdf */ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xe0 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00}, -/* 0xe1 */ {0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc, 0x00, 0x00, 0x00, 0x00}, -/* 0xe2 */ {0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00}, -/* 0xe3 */ {0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00}, -/* 0xe4 */ {0x00, 0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, -/* 0xe5 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00}, -/* 0xe6 */ {0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00, 0x00, 0x00}, -/* 0xe7 */ {0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, -/* 0xe8 */ {0x00, 0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00}, -/* 0xe9 */ {0x00, 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00}, -/* 0xea */ {0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00}, -/* 0xeb */ {0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, -/* 0xec */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xed */ {0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00}, -/* 0xee */ {0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00}, -/* 0xef */ {0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, -/* 0xf0 */ {0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xf1 */ {0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00}, -/* 0xf2 */ {0x00, 0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00}, -/* 0xf3 */ {0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00}, -/* 0xf4 */ {0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, -/* 0xf5 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00}, -/* 0xf6 */ {0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xf7 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xf8 */ {0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xf9 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xfa */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xfb */ {0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00}, -/* 0xfc */ {0x00, 0xd8, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xfd */ {0x00, 0x70, 0xd8, 0x30, 0x60, 0xc8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xfe */ {0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00}, -/* 0xff */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, -}; - -ascii_bitmap_font_header h = { - .magic = ASCII_BITMAP_FONT_MAGIC, - .cw = 8, - .ch = 16, - .nchars = 256, -}; - -int main() { - FILE *f = fopen("default.bf", "wb"); - if (f == 0) { - fprintf(stderr, "Could not open default.bf\n"); - exit(1); - } - - fwrite(&h, 1, sizeof(h), f); - fwrite(font_data, 256, 16, f); - - return 0; -} - -/* vim: set ts=4 sw=4 tw=0 noet :*/ diff --git a/res/fonts/muazzam.s b/res/fonts/muazzam.s new file mode 100644 index 0000000..43c74a8 --- /dev/null +++ b/res/fonts/muazzam.s @@ -0,0 +1,2006 @@ +;---------------------------------------------------------; +; Written by: Muazzam Ali Kazmi ; +; Public domain ; +;---------------------------------------------------------; + +magic: + dd 0xD184C274 +glyph_geom: + dw 8, 16 +nchars: + dd 127 + +times 512 db 0 + +.space: ;[space] + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + +.exclamation: ;! + + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b + db 00000000b + db 00010000b + db 00000000b + db 00000000b + db 00000000b + +.quotation: ;" + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 01101100b + db 01001000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + +.hash: ;# + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00100010b + db 00100010b + db 01111111b + db 00100010b + db 01000100b + db 01000100b + db 11111111b + db 01000100b + db 01000100b + db 00000000b + db 00000000b + db 00000000b + + +.dollor: ;$ + db 00000000b + db 00000000b + db 00000000b + db 00010000b + + db 00111100b + db 01010010b + db 01010000b + db 01010000b + db 00111100b + db 00010010b + db 00010010b + db 01010010b + db 00111100b + + db 00010000b + db 00000000b + db 00000000b + + +.percent: ;% + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000010b + db 00100010b + db 01010100b + db 00100100b + db 00001000b + db 00001010b + db 00010101b + db 00010010b + db 00100000b + + db 00000000b + db 00000000b + db 00000000b + + +.ampersand: ;& + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00110000b + db 01001000b + db 00110000b + db 00110100b + db 01001000b + db 01000101b + db 00111110b + db 00000001b + + db 00000000b + db 00000000b + db 00000000b + + +.apostrophe: ;' + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00011000b + db 00010000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 00000000b + + +.parenthesis.left: ;( + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00011000b + db 00100000b + db 01000000b + db 01000000b + db 01000000b + db 01000000b + db 01000000b + db 00100000b + db 00011000b + + db 00000000b + db 00000000b + db 00000000b + + +.parenthesis.right: ;) + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00011000b + db 00000100b + db 00000010b + db 00000010b + db 00000010b + db 00000010b + db 00000010b + db 00000100b + db 00011000b + + db 00000000b + db 00000000b + db 00000000b + + +.astrisk: ;* + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00101010b + db 00011100b + db 00011100b + db 00101010b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 00000000b + + +.plus: ;+ + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00001000b + db 00001000b + db 00001000b + db 01111111b + db 00001000b + db 00001000b + db 00001000b + db 00000000b + + db 00000000b + db 00000000b + db 00000000b + + +.comma: ;, + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00011000b + db 00011000b + + db 00001000b + db 00010000b + db 00000000b + + +.minus: ;- + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 01111110b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 00000000b + + +.fullStop: ;. + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00011000b + db 00011000b + + db 00000000b + db 00000000b + db 00000000b + + +.slash: ;/ + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000010b + db 00000010b + db 00000100b + db 00000100b + db 00001000b + db 00001000b + db 00010000b + db 00010000b + db 00100000b + + db 00000000b + db 00000000b + db 00000000b + +;Numbers +; + +.zero: ;0 + + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00011000b + db 00100100b + db 01000010b + db 01000010b + db 01011010b + db 01000010b + db 01000010b + db 00100100b + db 00011000b + + db 00000000b + db 00000000b + db 00000000b + + +.one: ;1 + + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00010000b + db 00110000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b + db 00111000b + + db 00000000b + db 00000000b + db 00000000b + +.two: ;2 + + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00111100b + db 01000010b + db 00000010b + db 00000100b + db 00001000b + db 00010000b + db 00100000b + db 01000000b + db 01111110b + + db 00000000b + db 00000000b + db 00000000b + +.three: ;3 + + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00111100b + db 01000010b + db 00000010b + db 00000100b + db 00111000b + db 00000100b + db 00000010b + db 01000010b + db 00111100b + + db 00000000b + db 00000000b + db 00000000b + +.four: ;4 + + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00001100b + db 00010100b + db 00100100b + db 01000100b + db 01000100b + db 01111110b + db 00000100b + db 00000100b + db 00000100b + + db 00000000b + db 00000000b + db 00000000b + +.five: ;5 + + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01111110b + db 01000000b + db 01000000b + db 01000000b + db 01111100b + db 00000010b + db 00000010b + db 00000010b + db 01111100b + + db 00000000b + db 00000000b + db 00000000b + +.six: ;6 + + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00111100b + db 01000000b + db 01000000b + db 01000000b + db 01111100b + db 01000010b + db 01000010b + db 01000010b + db 00111100b + + db 00000000b + db 00000000b + db 00000000b + +.seven: ;7 + + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01111110b + db 00000010b + db 00000100b + db 00001000b + db 00001000b + db 00010000b + db 00010000b + db 00100000b + db 00100000b + + db 00000000b + db 00000000b + db 00000000b + +.eight: ;8 + + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00111100b + db 01000010b + db 01000010b + db 01000010b + db 00111100b + db 01000010b + db 01000010b + db 01000010b + db 00111100b + + db 00000000b + db 00000000b + db 00000000b + +.nine: ;9 + + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00111100b + db 01000010b + db 01000010b + db 01000010b + db 00111110b + db 00000010b + db 00000010b + db 00000100b + db 00011000b + + db 00000000b + db 00000000b + db 00000000b + +.colon: ;: + + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00011000b + db 00011000b + db 00000000b + db 00000000b + db 00000000b + db 00011000b + db 00011000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 00000000b + +.semicolon: ;; + + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00011000b + db 00011000b + db 00000000b + db 00000000b + db 00000000b + db 00011000b + db 00011000b + db 00001000b + db 00010000b + + db 00000000b + db 00000000b + db 00000000b + +.less: ;< + + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000100b + db 00001000b + db 00010000b + db 00100000b + db 01000000b + db 00100000b + db 00010000b + db 00001000b + db 00000100b + + db 00000000b + db 00000000b + db 00000000b + +.equal: ;= + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 01111110b + db 00000000b + db 01111110b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + +.greater: ;> + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00100000b + db 00010000b + db 00001000b + db 00000100b + db 00000010b + db 00000100b + db 00001000b + db 00010000b + db 00100000b + + db 00000000b + db 00000000b + db 00000000b + + +.question: ;? + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00111100b + db 01000010b + db 00000010b + db 00000100b + db 00001000b + db 00010000b + db 00010000b + db 00000000b + db 00010000b + + db 00000000b + db 00000000b + db 00000000b + + +.at: ;@ + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00111100b + db 01000010b + db 01000010b + db 01001110b + db 01010010b + db 01001110b + db 01000000b + db 01000000b + db 00111100b + + db 00000000b + db 00000000b + db 00000000b + + +;Upper case +; + +.A: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00011000b + db 00100100b + db 01000010b + db 01000010b + db 01111110b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + + db 00000000b + db 00000000b + db 00000000b + + +.B: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01111100b + db 01000010b + db 01000010b + db 01000010b + db 01111100b + db 01000010b + db 01000010b + db 01000010b + db 01111100b + + db 00000000b + db 00000000b + db 00000000b + + +.C: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00111110b + db 01000000b + db 01000000b + db 01000000b + db 01000000b + db 01000000b + db 01000000b + db 01000000b + db 00111110b + + db 00000000b + db 00000000b + db 00000000b + + +.D: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01111000b + db 01000100b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000100b + db 01111000b + + db 00000000b + db 00000000b + db 00000000b + + +.E: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01111110b + db 01000000b + db 01000000b + db 01000000b + db 01111110b + db 01000000b + db 01000000b + db 01000000b + db 01111110b + + db 00000000b + db 00000000b + db 00000000b + + +.F: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01111110b + db 01000000b + db 01000000b + db 01000000b + db 01111110b + db 01000000b + db 01000000b + db 01000000b + db 01000000b + + db 00000000b + db 00000000b + db 00000000b + + +.G: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00111100b + db 01000000b + db 01000000b + db 01000000b + db 01001110b + db 01000010b + db 01000010b + db 01000010b + db 00111100b + + db 00000000b + db 00000000b + db 00000000b + + +.H: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01111110b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + + db 00000000b + db 00000000b + db 00000000b + + +.I: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00111000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b + db 00111000b + + db 00000000b + db 00000000b + db 00000000b + + +.J: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00001110b + db 00000100b + db 00000100b + db 00000100b + db 00000100b + db 00000100b + db 01000100b + db 01000100b + db 00111000b + + db 00000000b + db 00000000b + db 00000000b + + +.K: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01000010b + db 01000100b + db 01001000b + db 01010000b + db 01100000b + db 01010000b + db 01001000b + db 01000100b + db 01000010b + + db 00000000b + db 00000000b + db 00000000b + + +.L: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01000000b + db 01000000b + db 01000000b + db 01000000b + db 01000000b + db 01000000b + db 01000000b + db 01000000b + db 01111111b + + db 00000000b + db 00000000b + db 00000000b + + +.M: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01100110b + db 01100110b + db 01100110b + db 01011010b + db 01011010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + + db 00000000b + db 00000000b + db 00000000b + + +.N: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01100010b + db 01100010b + db 01100010b + db 01010010b + db 01010010b + db 01001010b + db 01001010b + db 01000110b + db 01000110b + + db 00000000b + db 00000000b + db 00000000b + + +.O: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00111100b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 00111100b + + db 00000000b + db 00000000b + db 00000000b + + +.P: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01111100b + db 01000010b + db 01000010b + db 01000010b + db 01111100b + db 01000000b + db 01000000b + db 01000000b + db 01000000b + + db 00000000b + db 00000000b + db 00000000b + + +.Q: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00111100b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01001010b + db 01000110b + db 00111110b + + db 00000001b + db 00000000b + db 00000000b + + +.R: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01111100b + db 01000010b + db 01000010b + db 01000010b + db 01111100b + db 01100000b + db 01010000b + db 01001000b + db 01000100b + + db 00000000b + db 00000000b + db 00000000b + +.S: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00111100b + db 01000010b + db 01000000b + db 01000000b + db 00111100b + db 00000010b + db 00000010b + db 01000010b + db 00111100b + + db 00000000b + db 00000000b + db 00000000b + + +.T: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01111111b + db 00001000b + db 00001000b + db 00001000b + db 00001000b + db 00001000b + db 00001000b + db 00001000b + db 00001000b + + db 00000000b + db 00000000b + db 00000000b + + +.U: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 00111100b + + db 00000000b + db 00000000b + db 00000000b + + +.V: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 00100100b + db 00100100b + db 00011000b + + db 00000000b + db 00000000b + db 00000000b + + +.W: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01011010b + db 01011010b + db 01100110b + db 01100110b + db 01100110b + + db 00000000b + db 00000000b + db 00000000b + + +.X: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01000100b + db 01000100b + db 00101000b + db 00101000b + db 00010000b + db 00010000b + db 00101000b + db 01000100b + db 01000100b + + db 00000000b + db 00000000b + db 00000000b + + +.Y: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01000100b + db 01000100b + db 00101000b + db 00101000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b + + db 00000000b + db 00000000b + db 00000000b + + +.Z: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01111110b + db 00000100b + db 00001000b + db 00001000b + db 00010000b + db 00010000b + db 00100000b + db 01000000b + db 01111110b + + db 00000000b + db 00000000b + db 00000000b + + +.squreBracket.left: ;[ + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01111000b + db 01000000b + db 01000000b + db 01000000b + db 01000000b + db 01000000b + db 01000000b + db 01000000b + db 01111000b + + db 00000000b + db 00000000b + db 00000000b + +.backSlash: ; back slash + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01000000b + db 01000000b + db 00100000b + db 00100000b + db 00010000b + db 00010000b + db 00001000b + db 00001000b + db 00000100b + + db 00000000b + db 00000000b + db 00000000b + + + +.squreBracket.right: ;] + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00011110b + db 00000010b + db 00000010b + db 00000010b + db 00000010b + db 00000010b + db 00000010b + db 00000010b + db 00011110b + + db 00000000b + db 00000000b + db 00000000b + + +.caret: ;^ + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00001000b + db 00010100b + db 00100010b + db 01000001b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 00000000b + + +.underScore: ;_ + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 11111111b + db 00000000b + db 00000000b + + +.graveAccent: ;` + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00011000b + db 00001000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + + db 00000000b + db 00000000b + db 00000000b + + + + +;Lower case +; +.a: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 01111100b + db 00000010b + db 00000010b + db 00111110b + db 01000010b + db 01000010b + db 00111101b + + db 00000000b + db 00000000b + db 00000000b + + +.b: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01000000b + db 01000000b + db 01111100b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01111100b + + db 00000000b + db 00000000b + db 00000000b + + +.c: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 00111100b + db 01000000b + db 01000000b + db 01000000b + db 01000000b + db 01000000b + db 00111100b + + db 00000000b + db 00000000b + db 00000000b + + +.d: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000100b + db 00000100b + db 00111100b + db 01000100b + db 01000100b + db 01000100b + db 01000100b + db 01000100b + db 00111100b + + db 00000000b + db 00000000b + db 00000000b + + +.e: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 00111100b + db 01000010b + db 01000010b + db 01111110b + db 01000000b + db 01000000b + db 00111100b + + db 00000000b + db 00000000b + db 00000000b + + +.f: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00011100b + db 00100000b + db 00100000b + db 01111100b + db 00100000b + db 00100000b + db 00100000b + db 00100000b + db 00100000b + + db 00000000b + db 00000000b + db 00000000b + + +.g: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 00111110b + db 01000010b + db 01000010b + db 01000010b + db 00111110b + db 00000010b + db 00000010b + + db 01111100b + db 00000000b + db 00000000b + + +.h: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01000000b + db 01000000b + db 01111100b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + + db 00000000b + db 00000000b + db 00000000b + + +.i: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00001000b + db 00000000b + db 00001000b + db 00001000b + db 00001000b + db 00001000b + db 00001000b + db 00001000b + db 00001000b + + db 00000000b + db 00000000b + db 00000000b + + +.j: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00001000b + db 00000000b + db 00011100b + db 00000100b + db 00000100b + db 00000100b + db 00000100b + db 00000100b + db 00000100b + + db 00111000b + db 00000000b + db 00000000b + + +.k: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 01000000b + db 01000000b + db 01000000b + db 01001000b + db 01010000b + db 01100000b + db 01010000b + db 01001000b + db 01000100b + + db 00000000b + db 00000000b + db 00000000b + + +.l: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00111000b + db 00001000b + db 00001000b + db 00001000b + db 00001000b + db 00001000b + db 00001000b + db 00001000b + db 00000110b + + db 00000000b + db 00000000b + db 00000000b + + +.m: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 11110110b + db 00101010b + db 00101010b + db 00101010b + db 00101010b + db 00101010b + db 00101010b + + db 00000000b + db 00000000b + db 00000000b + + +.n: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 01111100b + db 00100010b + db 00100010b + db 00100010b + db 00100010b + db 00100010b + db 00100010b + + db 00000000b + db 00000000b + db 00000000b + + +.o: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 00111100b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 00111100b + + db 00000000b + db 00000000b + db 00000000b + + +.p: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 01111100b + db 01000010b + db 01000010b + db 01000010b + db 01111100b + db 01000000b + db 01000000b + + db 01000000b + db 00000000b + db 00000000b + + +.q: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 00111110b + db 01000010b + db 01000010b + db 01000010b + db 00111110b + db 00000010b + db 00000010b + + db 00000010b + db 00000000b + db 00000000b + + +.r: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 00101111b + db 00110000b + db 00100000b + db 00100000b + db 00100000b + db 00100000b + db 00100000b + + db 00000000b + db 00000000b + db 00000000b + + +.s: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 00111100b + db 01000000b + db 01000000b + db 00111100b + db 00000010b + db 00000010b + db 00111100b + + db 00000000b + db 00000000b + db 00000000b + + +.t: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00010000b + db 00010000b + db 01111100b + db 00010000b + db 00010000b + db 00010000b + db 00010000b + db 00001110b + + db 00000000b + db 00000000b + db 00000000b + + +.u: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 01000010b + db 00111110b + + db 00000000b + db 00000000b + db 00000000b + + +.v: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 01000010b + db 01000010b + db 01000010b + db 00100100b + db 00100100b + db 00011000b + db 00000000b + + db 00000000b + db 00000000b + db 00000000b + + +.w: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 01000010b + db 01000010b + db 01000010b + db 01011010b + db 01011010b + db 01100110b + db 01100110b + + db 00000000b + db 00000000b + db 00000000b + + +.x: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 01000100b + db 01000100b + db 00101000b + db 00010000b + db 00101000b + db 01000100b + db 01000100b + + db 00000000b + db 00000000b + db 00000000b + + +.y: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 01000010b + db 01000010b + db 01000010b + db 00100100b + db 00011000b + db 00001000b + db 00010000b + + db 01100000b + db 00000000b + db 00000000b + + +.z: + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00000000b + db 00000000b + db 01111110b + db 00000100b + db 00001000b + db 00010000b + db 00100000b + db 01000000b + db 01111110b + + db 00000000b + db 00000000b + db 00000000b + + +.curlyBracket.left: ;{ + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00001100b + db 00010000b + db 00010000b + db 00010000b + db 01100000b + db 00010000b + db 00010000b + db 00010000b + db 00001100b + + db 00000000b + db 00000000b + db 00000000b + + +.verticalBar: ;| + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00010000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b + db 00010000b + + db 00010000b + db 00000000b + db 00000000b + + +.curlyBracket.right: ;} + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + db 00110000b + db 00001000b + db 00001000b + db 00001000b + db 00000110b + db 00001000b + db 00001000b + db 00001000b + db 00110000b + + db 00000000b + db 00000000b + db 00000000b + + +.tilde: ;~ + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00110010b + db 01001100b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + db 00000000b + + diff --git a/res/fonts/pcvga.c b/res/fonts/pcvga.c new file mode 100644 index 0000000..b646eb8 --- /dev/null +++ b/res/fonts/pcvga.c @@ -0,0 +1,278 @@ +#include + +#include + +char font_data[256][16] = { +/* 0x00 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x01 */ {0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00}, +/* 0x02 */ {0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00}, +/* 0x03 */ {0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, +/* 0x04 */ {0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x05 */ {0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, +/* 0x06 */ {0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, +/* 0x07 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x08 */ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, +/* 0x09 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x0a */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x0b */ {0x00, 0x00, 0x1e, 0x0e, 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, +/* 0x0c */ {0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, +/* 0x0d */ {0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00}, +/* 0x0e */ {0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00}, +/* 0x0f */ {0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, +/* 0x10 */ {0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00}, +/* 0x11 */ {0x00, 0x02, 0x06, 0x0e, 0x1e, 0x3e, 0xfe, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00}, +/* 0x12 */ {0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x13 */ {0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, +/* 0x14 */ {0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00}, +/* 0x15 */ {0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00}, +/* 0x16 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00}, +/* 0x17 */ {0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00}, +/* 0x18 */ {0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, +/* 0x19 */ {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, +/* 0x1a */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x1b */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x1c */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x1d */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x1e */ {0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x1f */ {0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x20 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x21 */ {0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, +/* 0x22 */ {0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x23 */ {0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00}, +/* 0x24 */ {0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00}, +/* 0x25 */ {0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00}, +/* 0x26 */ {0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, +/* 0x27 */ {0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x28 */ {0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00}, +/* 0x29 */ {0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00}, +/* 0x2a */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x2b */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x2c */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00}, +/* 0x2d */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x2e */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, +/* 0x2f */ {0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00}, +/* 0x30 */ {0x00, 0x00, 0x3c, 0x66, 0xc3, 0xc3, 0xdb, 0xdb, 0xc3, 0xc3, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, +/* 0x31 */ {0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00}, +/* 0x32 */ {0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, +/* 0x33 */ {0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0x34 */ {0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00}, +/* 0x35 */ {0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0x36 */ {0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0x37 */ {0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00}, +/* 0x38 */ {0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0x39 */ {0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00}, +/* 0x3a */ {0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x3b */ {0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00}, +/* 0x3c */ {0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00}, +/* 0x3d */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x3e */ {0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00}, +/* 0x3f */ {0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, +/* 0x40 */ {0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0x41 */ {0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, +/* 0x42 */ {0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, +/* 0x43 */ {0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, +/* 0x44 */ {0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00}, +/* 0x45 */ {0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, +/* 0x46 */ {0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, +/* 0x47 */ {0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00}, +/* 0x48 */ {0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, +/* 0x49 */ {0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, +/* 0x4a */ {0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, +/* 0x4b */ {0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, +/* 0x4c */ {0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, +/* 0x4d */ {0x00, 0x00, 0xc3, 0xe7, 0xff, 0xff, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00}, +/* 0x4e */ {0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, +/* 0x4f */ {0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0x50 */ {0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, +/* 0x51 */ {0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00}, +/* 0x52 */ {0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, +/* 0x53 */ {0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0x54 */ {0x00, 0x00, 0xff, 0xdb, 0x99, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, +/* 0x55 */ {0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0x56 */ {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, +/* 0x57 */ {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, +/* 0x58 */ {0x00, 0x00, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x18, 0x3c, 0x66, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00}, +/* 0x59 */ {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, +/* 0x5a */ {0x00, 0x00, 0xff, 0xc3, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc1, 0xc3, 0xff, 0x00, 0x00, 0x00, 0x00}, +/* 0x5b */ {0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00}, +/* 0x5c */ {0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00}, +/* 0x5d */ {0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00}, +/* 0x5e */ {0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x5f */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00}, +/* 0x60 */ {0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x61 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, +/* 0x62 */ {0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0x63 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0x64 */ {0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, +/* 0x65 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0x66 */ {0x00, 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, +/* 0x67 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00}, +/* 0x68 */ {0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, +/* 0x69 */ {0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, +/* 0x6a */ {0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00}, +/* 0x6b */ {0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, +/* 0x6c */ {0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, +/* 0x6d */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xff, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00}, +/* 0x6e */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, +/* 0x6f */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0x70 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00}, +/* 0x71 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00}, +/* 0x72 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, +/* 0x73 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0x74 */ {0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00}, +/* 0x75 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, +/* 0x76 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, +/* 0x77 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x00, 0x00, 0x00, 0x00}, +/* 0x78 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3, 0x00, 0x00, 0x00, 0x00}, +/* 0x79 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, +/* 0x7a */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, +/* 0x7b */ {0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, +/* 0x7c */ {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, +/* 0x7d */ {0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00}, +/* 0x7e */ {0x00, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x7f */ {0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0x80 */ {0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x0c, 0x06, 0x7c, 0x00, 0x00}, +/* 0x81 */ {0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, +/* 0x82 */ {0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0x83 */ {0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, +/* 0x84 */ {0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, +/* 0x85 */ {0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, +/* 0x86 */ {0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, +/* 0x87 */ {0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x60, 0x60, 0x66, 0x3c, 0x0c, 0x06, 0x3c, 0x00, 0x00, 0x00}, +/* 0x88 */ {0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0x89 */ {0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0x8a */ {0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0x8b */ {0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, +/* 0x8c */ {0x00, 0x18, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, +/* 0x8d */ {0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, +/* 0x8e */ {0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, +/* 0x8f */ {0x38, 0x6c, 0x38, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, +/* 0x90 */ {0x18, 0x30, 0x60, 0x00, 0xfe, 0x66, 0x60, 0x7c, 0x60, 0x60, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, +/* 0x91 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x3b, 0x1b, 0x7e, 0xd8, 0xdc, 0x77, 0x00, 0x00, 0x00, 0x00}, +/* 0x92 */ {0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00}, +/* 0x93 */ {0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0x94 */ {0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0x95 */ {0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0x96 */ {0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, +/* 0x97 */ {0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, +/* 0x98 */ {0x00, 0x00, 0xc6, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00}, +/* 0x99 */ {0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0x9a */ {0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0x9b */ {0x00, 0x18, 0x18, 0x7e, 0xc3, 0xc0, 0xc0, 0xc0, 0xc3, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, +/* 0x9c */ {0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00, 0x00}, +/* 0x9d */ {0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, +/* 0x9e */ {0x00, 0xfc, 0x66, 0x66, 0x7c, 0x62, 0x66, 0x6f, 0x66, 0x66, 0x66, 0xf3, 0x00, 0x00, 0x00, 0x00}, +/* 0x9f */ {0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0x70, 0x00, 0x00}, +/* 0xa0 */ {0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, +/* 0xa1 */ {0x00, 0x0c, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, +/* 0xa2 */ {0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0xa3 */ {0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, +/* 0xa4 */ {0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, +/* 0xa5 */ {0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, +/* 0xa6 */ {0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xa7 */ {0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xa8 */ {0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, +/* 0xa9 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xaa */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xab */ {0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xce, 0x9b, 0x06, 0x0c, 0x1f, 0x00, 0x00}, +/* 0xac */ {0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xce, 0x96, 0x3e, 0x06, 0x06, 0x00, 0x00}, +/* 0xad */ {0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, +/* 0xae */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xaf */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xb0 */ {0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44}, +/* 0xb1 */ {0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa}, +/* 0xb2 */ {0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77}, +/* 0xb3 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, +/* 0xb4 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, +/* 0xb5 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, +/* 0xb6 */ {0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, +/* 0xb7 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, +/* 0xb8 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, +/* 0xb9 */ {0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, +/* 0xba */ {0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, +/* 0xbb */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, +/* 0xbc */ {0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xbd */ {0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xbe */ {0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xbf */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, +/* 0xc0 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xc1 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xc2 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, +/* 0xc3 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, +/* 0xc4 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xc5 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, +/* 0xc6 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, +/* 0xc7 */ {0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, +/* 0xc8 */ {0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xc9 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, +/* 0xca */ {0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xcb */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, +/* 0xcc */ {0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, +/* 0xcd */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xce */ {0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, +/* 0xcf */ {0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xd0 */ {0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xd1 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, +/* 0xd2 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, +/* 0xd3 */ {0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xd4 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xd5 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, +/* 0xd6 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, +/* 0xd7 */ {0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, +/* 0xd8 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, +/* 0xd9 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xda */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, +/* 0xdb */ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, +/* 0xdc */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, +/* 0xdd */ {0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0}, +/* 0xde */ {0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f}, +/* 0xdf */ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xe0 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00}, +/* 0xe1 */ {0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc, 0x00, 0x00, 0x00, 0x00}, +/* 0xe2 */ {0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00}, +/* 0xe3 */ {0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00}, +/* 0xe4 */ {0x00, 0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, +/* 0xe5 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00}, +/* 0xe6 */ {0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00, 0x00, 0x00}, +/* 0xe7 */ {0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, +/* 0xe8 */ {0x00, 0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00}, +/* 0xe9 */ {0x00, 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00}, +/* 0xea */ {0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00}, +/* 0xeb */ {0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, +/* 0xec */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xed */ {0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00}, +/* 0xee */ {0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00}, +/* 0xef */ {0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, +/* 0xf0 */ {0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xf1 */ {0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00}, +/* 0xf2 */ {0x00, 0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00}, +/* 0xf3 */ {0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00}, +/* 0xf4 */ {0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, +/* 0xf5 */ {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00}, +/* 0xf6 */ {0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xf7 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xf8 */ {0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xf9 */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xfa */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xfb */ {0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00}, +/* 0xfc */ {0x00, 0xd8, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xfd */ {0x00, 0x70, 0xd8, 0x30, 0x60, 0xc8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xfe */ {0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00}, +/* 0xff */ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +}; + +ascii_bitmap_font_header h = { + .magic = ASCII_BITMAP_FONT_MAGIC, + .cw = 8, + .ch = 16, + .nchars = 256, +}; + +int main() { + fwrite(&h, 1, sizeof(h), stdout); + fwrite(font_data, 256, 16, stdout); + + return 0; +} + +/* vim: set ts=4 sw=4 tw=0 noet :*/ diff --git a/res/keymaps/Makefile b/res/keymaps/Makefile new file mode 100644 index 0000000..394685e --- /dev/null +++ b/res/keymaps/Makefile @@ -0,0 +1,10 @@ +CC=gcc +CFLAGS=-I../../src/lib/include -std=c11 + +%.km: %.c + $(CC) $(CFLAGS) -o $<.bin $< + ./$<.bin > $@ + rm $<.bin + +all: fr.km + diff --git a/res/keymaps/fr.c b/res/keymaps/fr.c new file mode 100644 index 0000000..f039142 --- /dev/null +++ b/res/keymaps/fr.c @@ -0,0 +1,68 @@ +#include + +#include + +keymap_t fr_keymap = { + { // normal + /* 0x00 */ 0, 0, '&', L'é', '"', '\'', '(', '-', L'è', '_', L'ç', L'à', ')', '=', 0, 0, + /* 0x10 */ 'a', 'z', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '^', '$', 0, 0, 'q', 's', + /* 0x20 */ 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', L'ù', L'²', 0, '*', 'w', 'x', 'c', 'v', + /* 0x30 */ 'b', 'n', ',', ';', ':', '!', 0, '*', 0, ' ', 0, 0, 0, 0, 0, 0, + /* 0x40 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '-', 0, 0, 0, '+', 0, + /* 0x50 */ 0, 0, 0, 0, 0, 0, '<', 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x60 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x70 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { // shift + /* 0x00 */ 0, 0, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', L'°', '+', 0, 0, + /* 0x10 */ 'A', 'Z', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', L'¨', L'£', 0, 0, 'Q', 'S', + /* 0x20 */ 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M', '%', '~', 0, L'µ', 'W', 'X', 'C', 'V', + /* 0x30 */ 'B', 'N', '?', '.', '/', L'§', 0, '*', 0, ' ', 0, 0, 0, 0, 0, 0, + /* 0x40 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '-', 0, 0, 0, '+', 0, + /* 0x50 */ 0, 0, 0, 0, 0, 0, '>', 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x60 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x70 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { // caps + /* 0x00 */ 0, 0, '&', L'É', '"', '\'', '(', '-', L'È', '_', L'Ç', L'À', ')', '=', 0, 0, + /* 0x10 */ 'A', 'Z', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', L'¨', '$', 0, 0, 'Q', 'S', + /* 0x20 */ 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M', L'Ù', L'²', 0, '*', 'W', 'X', 'C', 'V', + /* 0x30 */ 'B', 'N', ',', ';', ':', '!', 0, '*', 0, ' ', 0, 0, 0, 0, 0, 0, + /* 0x40 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '-', 0, 0, 0, '+', 0, + /* 0x50 */ 0, 0, 0, 0, 0, 0, '>', 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x60 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x70 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { // alt gr + /* 0x00 */ 0, 0, L'¹', '~', '#', '{', '[', '|', '`', '\\', '^', '@', ']', '}', 0, 0, + /* 0x10 */ L'æ', L'«', L'€', L'¶', L'ŧ', L'←', L'↓', L'→', + L'ø', L'þ', L'¨', L'¤', 0, 0, '@', L'ß', + /* 0x20 */ L'ð', L'đ', L'ŋ', L'ħ', 'j', L'ĸ', L'ł', L'µ', + '^', L'¬', 0, '`', L'ł', L'»', L'¢', L'“', + /* 0x30 */ L'”', 'n', L'´', ';', L'·', '!', 0, '*', 0, ' ', 0, 0, 0, 0, 0, 0, + /* 0x40 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '-', 0, 0, 0, '+', 0, + /* 0x50 */ 0, 0, 0, 0, 0, 0, '|', 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x60 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x70 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }, + { // shift + alt gr + /* 0x00 */ 0, 0, L'¡', L'⅛', L'£', '$', L'⅜', L'⅝', L'⅞', L'™', L'±', L'°', L'¿', L'˛', 0, 0, + /* 0x10 */ L'Æ', '<', L'¢', L'®', L'Ŧ', L'¥', L'↑', L'ı', L'Ø', L'Þ', L'°', L'¯', 0, 0, L'Ω', L'§', + /* 0x20 */ L'Ð', L'ª', L'Ŋ', L'Ħ', 'J', '&', L'Ł', L'º', L'ˇ', L'¬', 0, L'˘', L'Ł', '>', L'©', L'‘', + /* 0x30 */ L'’', 'N', L'˝', L'×', L'÷', L'˙', 0, '*', 0, ' ', 0, 0, 0, 0, 0, 0, + /* 0x40 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '-', 0, 0, 0, '+', 0, + /* 0x50 */ 0, 0, 0, 0, 0, 0, L'¦', 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x60 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* 0x70 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }, + true, +}; + + +int main() { + fwrite(&fr_keymap, 1, sizeof(fr_keymap), stdout); + + return 0; +} + +/* vim: set ts=4 sw=4 tw=0 noet :*/ diff --git a/src/common/include/proto/keyboard.h b/src/common/include/proto/keyboard.h index 8d9543f..c7a2ef8 100644 --- a/src/common/include/proto/keyboard.h +++ b/src/common/include/proto/keyboard.h @@ -36,7 +36,8 @@ typedef struct { #define KBD_CODE_RCTRL 157 #define KBD_CODE_LALT 56 #define KBD_CODE_RALT 184 -#define KBD_CODE_SUPER 219 +#define KBD_CODE_LSUPER 219 +#define KBD_CODE_RSUPER 220 #define KBD_CODE_MENU 221 #define KBD_CODE_TAB 15 #define KBD_CODE_INS 210 @@ -55,4 +56,21 @@ typedef struct { #define KBD_CODE_F11 87 #define KBD_CODE_F12 88 +#define KBD_CODE_NUMLOCK 69 +#define KBD_CODE_SCRLLOCK 70 +#define KBD_CODE_PRTSCN 183 +#define KBD_CODE_SYSREQ 84 + +#define KBD_CODE_KPHOME 71 +#define KBD_CODE_KPUP 72 +#define KBD_CODE_KPPGUP 73 +#define KBD_CODE_KPLEFT 75 +#define KBD_CODE_KP5 76 +#define KBD_CODE_KPRIGHT 77 +#define KBD_CODE_KPEND 79 +#define KBD_CODE_KPDOWN 80 +#define KBD_CODE_KPPGDOWN 81 +#define KBD_CODE_KPINS 82 +#define KBD_CODE_KPDEL 83 + /* vim: set ts=4 sw=4 tw=0 noet :*/ diff --git a/src/kernel/core/idt.c b/src/kernel/core/idt.c index 457e5ae..e2c4bf0 100644 --- a/src/kernel/core/idt.c +++ b/src/kernel/core/idt.c @@ -116,7 +116,7 @@ void idt_ex_handler(registers_t *regs) { void idt_irq_handler(registers_t *regs) { int st = enter_critical(CL_EXCL); // if someone tries to yield(), an assert will fail - if (regs->err_code != 0) dbg_printf("irq%d.", regs->err_code); + /*if (regs->err_code != 0) dbg_printf("irq%d.", regs->err_code);*/ if (regs->err_code > 7) { outb(0xA0, 0x20); diff --git a/src/lib/include/keyboard.h b/src/lib/include/keyboard.h new file mode 100644 index 0000000..2842936 --- /dev/null +++ b/src/lib/include/keyboard.h @@ -0,0 +1,37 @@ +#pragma once + +#include + + +#define KBD_CHAR 0x01 +#define KBD_ALT 0x02 +#define KBD_CTRL 0x04 +#define KBD_SUPER 0x08 +#define KBD_SHIFT 0x10 +#define KBD_CAPS 0x20 +#define KBD_MOD 0x40 + +typedef struct { + union { + int chr; // if flags & KBD_CHAR, chr is a character number + int key; // if !(flags & KBD_CHAR), key is one of KBD_CODE_* defined in + }; + uint32_t flags; // one of kbd_* +} key_t; + +typedef struct { + keymap_t km; + uint32_t status; // mask of alt/ctrl/super +} keyboard_t; + +keyboard_t *init_keyboard(); +void free_keyboard(keyboard_t *t); + +bool load_keymap(keyboard_t *kb, const char* kmname); + +key_t keyboard_press(keyboard_t *t, int scancode); // what key is pressed? +key_t keyboard_release(keyboard_t *t, int scancode); // what key is released? + + + +/* vim: set ts=4 sw=4 tw=0 noet :*/ diff --git a/src/lib/include/proto/keymap_file.h b/src/lib/include/proto/keymap_file.h new file mode 100644 index 0000000..53ffeb7 --- /dev/null +++ b/src/lib/include/proto/keymap_file.h @@ -0,0 +1,16 @@ +#pragma once + +#include +#include +#include + +typedef struct { + int normal[128]; + int shift[128]; + int caps[128]; + int mod[128]; + int shiftmod[128]; + bool ralt_is_mod; // true: right alt = alt-gr +} keymap_t; + +/* vim: set ts=4 sw=4 tw=0 noet :*/ diff --git a/src/lib/libkogata/Makefile b/src/lib/libkogata/Makefile index a8df419..a02a862 100644 --- a/src/lib/libkogata/Makefile +++ b/src/lib/libkogata/Makefile @@ -1,5 +1,5 @@ OBJ = start.o malloc.o debug.o syscall.o user_region.o \ - mainloop.o gip.o draw.o + mainloop.o gip.o draw.o keyboard.o LIB = ../../common/libkogata/libkogata.lib ../../common/libalgo/libalgo.lib ../../common/libc/libc.lib diff --git a/src/lib/libkogata/draw.c b/src/lib/libkogata/draw.c index 911fe0d..b9ef9bc 100644 --- a/src/lib/libkogata/draw.c +++ b/src/lib/libkogata/draw.c @@ -239,13 +239,11 @@ font_t *g_load_ascii_bitmap_font(fd_t f) { if (font == 0) goto error; memset(font, 0, sizeof(font_t)); - font->type = FONT_ASCII_BITMAP; font->ascii_bitmap.cw = h.cw; font->ascii_bitmap.ch = h.ch; font->ascii_bitmap.nchars = h.nchars; - font->ascii_bitmap.data = (uint8_t*)malloc(h.ch * h.nchars); if (font->ascii_bitmap.data == 0) goto error; diff --git a/src/lib/libkogata/keyboard.c b/src/lib/libkogata/keyboard.c new file mode 100644 index 0000000..7e3c376 --- /dev/null +++ b/src/lib/libkogata/keyboard.c @@ -0,0 +1,148 @@ +#include +#include +#include + +#include + +#include +#include + +// ---- Control keys that are not KBD_CHAR-able + +int ctrlkeys[] = { +/* 0x00 */ 0, KBD_CODE_ESC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KBD_CODE_BKSP, KBD_CODE_TAB, +/* 0x10 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KBD_CODE_RETURN, KBD_CODE_LCTRL, 0, 0, +/* 0x20 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KBD_CODE_LSHIFT, 0, 0, 0, 0, 0, +/* 0x30 */ 0, 0, 0, 0, 0, 0, KBD_CODE_RSHIFT, 0, KBD_CODE_LALT, 0, + KBD_CODE_CAPSLOCK, KBD_CODE_F1, KBD_CODE_F2, KBD_CODE_F3, KBD_CODE_F4, KBD_CODE_F5, +/* 0x40 */ KBD_CODE_F6, KBD_CODE_F7, KBD_CODE_F8, KBD_CODE_F9, KBD_CODE_F10, KBD_CODE_NUMLOCK, + KBD_CODE_SCRLLOCK, KBD_CODE_KPHOME, KBD_CODE_KPUP, KBD_CODE_KPPGUP, 0, KBD_CODE_KPLEFT, + KBD_CODE_KP5, KBD_CODE_KPRIGHT, 0, KBD_CODE_KPEND, +/* 0x50 */ KBD_CODE_KPDOWN, KBD_CODE_KPPGDOWN, KBD_CODE_KPINS, KBD_CODE_KPDEL, + KBD_CODE_SYSREQ, 0, 0, KBD_CODE_F11, KBD_CODE_F12, 0, 0, 0, 0, 0, 0, 0, +/* 0x60 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +/* 0x70 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +/* 0x80 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +/* 0x90 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KBD_CODE_RETURN, KBD_CODE_RCTRL, 0, 0, +/* 0xA0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +/* 0xB0 */ 0, 0, 0, 0, 0, 0, 0, KBD_CODE_PRTSCN, KBD_CODE_RALT, 0, 0, 0, 0, 0, 0, 0, +/* 0xC0 */ 0, 0, 0, 0, 0, 0, 0, KBD_CODE_HOME, KBD_CODE_UP, KBD_CODE_PGUP, 0, + KBD_CODE_LEFT, 0, KBD_CODE_RIGHT, 0, KBD_CODE_END, +/* 0xD0 */ KBD_CODE_DOWN, KBD_CODE_PGDOWN, KBD_CODE_INS, KBD_CODE_DEL, 0, 0, 0, 0, 0, + 0, 0, KBD_CODE_LSUPER, KBD_CODE_RSUPER, KBD_CODE_MENU, 0, 0, +/* 0xE0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +/* 0xF0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +// ---- The code + +keyboard_t *init_keyboard() { + keyboard_t *kb = (keyboard_t*)malloc(sizeof(keyboard_t)); + if (kb == 0) return 0; + + if (!load_keymap(kb, "default")) { + free(kb); + return 0; + } + + return kb; +} + +void free_keyboard(keyboard_t *t) { + free(t); +} + +bool load_keymap(keyboard_t *kb, const char* kmname) { + char buf[128]; + snprintf(buf, 128, "sys:/keymaps/%s.km", kmname); + + fd_t f = open(buf, FM_READ); + if (f == 0) { + dbg_printf("Failed to open keymap %s\n", buf); + return false; + } + + keymap_t km; + size_t rd = read(f, 0, sizeof(keymap_t), (char*)&km); + + bool ok = (rd == sizeof(keymap_t)); + + if (ok) { + memcpy(&kb->km, &km, sizeof(keymap_t)); + kb->status = 0; + } + + close(f); + + return ok; +} + +int key_chr(keyboard_t *kb, int k) { + if (kb->status & KBD_MOD) { + if ((kb->status & KBD_SHIFT) | (kb->status & KBD_CAPS)) { + return kb->km.shiftmod[k]; + } else { + return kb->km.mod[k]; + } + } else if ((kb->status & KBD_CAPS) && (kb->status & KBD_SHIFT)) { + return kb->km.normal[k]; + } else if (kb->status & KBD_SHIFT) { + return kb->km.shift[k]; + } else if (kb->status & KBD_CAPS) { + return kb->km.caps[k]; + } else { + return kb->km.normal[k]; + } +} + +key_t make_key(keyboard_t *kb, int k) { + key_t x; + x.flags = kb->status; + + x.key = 0; + if (k >= 128) return x; + + x.key = ctrlkeys[k]; + if (x.key != 0) return x; + + x.flags |= KBD_CHAR; + x.chr = key_chr(kb, k); + return x; + +} + +key_t keyboard_press(keyboard_t *kb, int k) { + if (k == KBD_CODE_LSHIFT || k == KBD_CODE_RSHIFT) { + kb->status |= KBD_SHIFT; + } else if (k == KBD_CODE_LCTRL || k == KBD_CODE_RCTRL) { + kb->status |= KBD_CTRL; + } else if (k == KBD_CODE_LSUPER || k == KBD_CODE_RSUPER) { + kb->status |= KBD_SUPER; + } else if (k == KBD_CODE_LALT || (!kb->km.ralt_is_mod && k == KBD_CODE_RALT)) { + kb->status |= KBD_ALT; + } else if (kb->km.ralt_is_mod && k == KBD_CODE_RALT) { + kb->status |= KBD_MOD; + } else if (kb->km.ralt_is_mod && k == KBD_CODE_CAPSLOCK) { + kb->status ^= KBD_CAPS; + } + + return make_key(kb, k); +} + +key_t keyboard_release(keyboard_t *kb, int k) { + if (k == KBD_CODE_LSHIFT || k == KBD_CODE_RSHIFT) { + kb->status &= ~KBD_SHIFT; + } else if (k == KBD_CODE_LCTRL || k == KBD_CODE_RCTRL) { + kb->status &= ~KBD_CTRL; + } else if (k == KBD_CODE_LSUPER || k == KBD_CODE_RSUPER) { + kb->status &= ~KBD_SUPER; + } else if (k == KBD_CODE_LALT || (!kb->km.ralt_is_mod && k == KBD_CODE_RALT)) { + kb->status &= ~KBD_ALT; + } else if (kb->km.ralt_is_mod && k == KBD_CODE_RALT) { + kb->status &= ~KBD_MOD; + } + + return make_key(kb, k); +} + +/* vim: set ts=4 sw=4 tw=0 noet :*/ diff --git a/src/lib/libkogata/mainloop.c b/src/lib/libkogata/mainloop.c index e7fdfa4..ece7672 100644 --- a/src/lib/libkogata/mainloop.c +++ b/src/lib/libkogata/mainloop.c @@ -88,14 +88,14 @@ void mainloop_run() { } // ---- Do the select - dbg_printf("(mainloop) begin select\n"); + /*dbg_printf("(mainloop) begin select\n");*/ bool ok = select(sel_arg, nfds, -1); if (!ok) { dbg_printf("(mainloop) Failed to select.\n"); free(sel_arg); return; } - dbg_printf("(mainloop) end select\n"); + /*dbg_printf("(mainloop) end select\n");*/ { // Parse result int i = 0; @@ -107,7 +107,7 @@ void mainloop_run() { fd->rd_buf_filled += read(fd->fd, 0, fd->rd_buf_expect_size - fd->rd_buf_filled, fd->rd_buf + fd->rd_buf_filled); if (fd->rd_buf_filled == fd->rd_buf_expect_size) { - dbg_printf("(mainloop) finish read %d\n", fd->rd_buf_expect_size); + /*dbg_printf("(mainloop) finish read %d\n", fd->rd_buf_expect_size);*/ fd->rd_buf_filled = 0; ASSERT(fd->rd_on_full != 0); fd->rd_on_full(fd); @@ -119,7 +119,7 @@ void mainloop_run() { fd->wr_bufs[0].written += write(fd->fd, 0, remain_size, write_ptr); if (fd->wr_bufs[0].written == fd->wr_bufs[0].size) { - dbg_printf("(mainloop) finish write %d\n", fd->wr_bufs[0].size); + /*dbg_printf("(mainloop) finish write %d\n", fd->wr_bufs[0].size);*/ if (fd->wr_bufs[0].must_free) free(fd->wr_bufs[0].buf); for (int i = 1; i < MAINLOOP_MAX_WR_BUFS; i++) { fd->wr_bufs[i-1] = fd->wr_bufs[i]; diff --git a/src/sysbin/login/main.c b/src/sysbin/login/main.c index e6e5290..3c02a4b 100644 --- a/src/sysbin/login/main.c +++ b/src/sysbin/login/main.c @@ -5,6 +5,7 @@ #include #include +#include typedef struct { fb_info_t mode; @@ -40,9 +41,13 @@ gip_handler_callbacks_t loginc_cb = { .fd_error = c_fd_error, }; +keyboard_t *kb; + int main(int argc, char **argv) { dbg_print("[login] Starting up.\n"); + kb = init_keyboard(); + loginc_t loginc; memset(&loginc, 0, sizeof(loginc)); @@ -103,9 +108,12 @@ void c_buffer_info(gip_handler_t *s, gip_msg_header *p, gip_buffer_info_msg *m) } void c_key_down(gip_handler_t *s, gip_msg_header *p) { + keyboard_press(kb, p->arg); } void c_key_up(gip_handler_t *s, gip_msg_header *p) { + key_t k = keyboard_release(kb, p->arg); + if (k.chr) dbg_printf("%c", k.chr); } void c_unknown_msg(gip_handler_t *s, gip_msg_header *p) { -- cgit v1.2.3