[coreboot] [Patch] Native VGA support.

Luc Verhaegen libv at skynet.be
Tue May 26 15:02:08 CEST 2009


Since i have some spare time on my hands now (;)) and because ruik 
tickled me, i dusted off some native VGA code i had sitting around since 
2007.

This is only part of the solution, as the complete thing adds full 
native vga textmodeset support for the VIA CLE266. But i am still trying 
to track down an issue there.

Part of the explanation of this patch is of course in the diff header, 
so read that first, then read on here.

Issue: kernel calls int10 set video mode, and (unless provided by 
something else) consequently assumes that since this hook isn't 
implemented it must be talking to a CGA device. So a message appears 
that the vt is a CGA 80x25, and the character height is assumed to be 8.
The real character height is 16 though, but the only effect is that you 
have the cursor floating halfway the character, everything else is just 
fine.

Usage: Here is a snippet of the code in my 
northbridge/via/vt8623/unichrome.c .init hook:

+#if CONFIG_VGA == 1
+	/* Now set up the VGA console */
+	vga_io_init(); /* Enable full IO access */
+
+	unichrome_vga_init(dev);
+
+	vga_textmode_init();
+
+#if CONFIG_CONSOLE_VGA == 1
+	vga_console_init();
+#endif
+
+	printk_info("UniChrome VGA Textmode initialized.\n");
+
+#if CONFIG_CONSOLE_VGA == 0
+	/* if we don't have console, at least print something... */
+	vga_line_write(0, "UniChrome VGA Textmode initialized.");
+#endif
+
+#endif /* CONFIG_VGA */

TODO's in the vga console code will be dealt with. Right now i want to
reduce my diff and make the whole more manageable.

Luc Verhaegen.
-------------- next part --------------
Implement native VGA Support.

This code brings a rather complete set of VGA IO routines for whoever wants it.
These consist of the by now familiar read/write/mask sets. Due to the crazy
nature of VGA, an ancient standard with bits all over the place, it makes no
sense to define individual registers. You need a vga register spec at hand if
you want to do anything anyway. These IO routines are always exposed.

It also provides code to natively set up a 640x400 VGA textmode with an 8x16
font. The native VGA mode code is behind the OPTION_VGA option, as the font
really adds to the size of the compiled/compressed rom. The font is the one
also present in the linux kernel, but this file is unlicensed. Another copy of
this is also present in coreboot in the deprecated console/btext code.

The vga console code has been cleaned up, but it still has some TODO's left
open, but that's for when i finally have found the remaining issue with the
epia-m. Right now, it is important to get parts of my work out already and to
make the remainder managable again.

Signed-off-by: Luc Verhaegen <libv at skynet.be>

Index: src/devices/pci_device.c
===================================================================
--- src/devices/pci_device.c	(revision 4298)
+++ src/devices/pci_device.c	(working copy)
@@ -673,11 +673,8 @@
 	run_bios(dev, (unsigned long)ram);
 
 #if CONFIG_CONSOLE_VGA == 1
-	/* vga_inited is a trigger of the VGA console code. */
-	if ((dev->class>>8) == PCI_CLASS_DISPLAY_VGA) {
-	    extern int vga_inited;
-	    vga_inited = 1;
-	}
+	if ((dev->class>>8) == PCI_CLASS_DISPLAY_VGA)
+	    vga_console_init(void);
 #endif /* CONFIG_CONSOLE_VGA */
 #endif /* CONFIG_PCI_ROM_RUN || CONFIG_VGA_ROM_RUN */
 }
Index: src/include/console/console.h
===================================================================
--- src/include/console/console.h	(revision 4298)
+++ src/include/console/console.h	(working copy)
@@ -126,4 +126,8 @@
 #define print_debug_hex32(HEX)   printk_debug  ("%08x", (HEX))
 #define print_spew_hex32(HEX)    printk_spew   ("%08x", (HEX))
 
+#if CONFIG_CONSOLE_VGA == 1
+void vga_console_init(void);
+#endif
+
 #endif /* CONSOLE_CONSOLE_H_ */
Index: src/include/pc80/vga.h
===================================================================
--- src/include/pc80/vga.h	(revision 4298)
+++ src/include/pc80/vga.h	(working copy)
@@ -1,228 +1,43 @@
 /*
+ * Copyright (C)  2007-2009  Luc Verhaegen <libv at skynet.be>
  *
- * modified
- * by Steve M. Gehlbach <steve at kesa.com>
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
  *
- * Originally  from linux/drivers/video/vga16.c by
- * Ben Pfaff <pfaffben at debian.org> and Petr Vandrovec <VANDROVE at vc.cvut.cz>
- * Copyright 1999 Ben Pfaff <pfaffben at debian.org> and Petr Vandrovec <VANDROVE at vc.cvut.cz>
- * Based on VGA info at http://www.goodnet.com/~tinara/FreeVGA/home.htm
- * Based on VESA framebuffer (c) 1998 Gerd Knorr <kraxel at goldbach.in-berlin.de>
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
  *
- */ 
-
-#ifndef VGA_H_INCL
-#define VGA_H_INCL 1
-
-#include <arch/io.h>
-
-#define u8 unsigned char
-#define u16 unsigned short
-#define u32 unsigned int
-#define __u32 u32
-
-#define VERROR -1
-#define CHAR_HEIGHT 16
-#define LINES 25
-#define COLS 80
-
-// macros for writing to vga regs
-#define write_crtc(data,addr) outb(addr,CRT_IC); outb(data,CRT_DC)
-#define write_att(data,addr) inb(IS1_RC); inb(0x80); outb(addr,ATT_IW); inb(0x80); outb(data,ATT_IW); inb(0x80)
-#define write_seq(data,addr) outb(addr,SEQ_I); outb(data,SEQ_D)
-#define write_gra(data,addr) outb(addr,GRA_I); outb(data,GRA_D)
-u8 read_seq_b(u16 addr);
-u8 read_gra_b(u16 addr);
-u8 read_crtc_b(u16 addr);
-u8 read_att_b(u16 addr);
-
-
-#ifdef VGA_HARDWARE_FIXUP
-void vga_hardware_fixup(void);
-#else
-#define vga_hardware_fixup() do{} while(0)
-#endif
-
-#define SYNC_HOR_HIGH_ACT    1       /* horizontal sync high active  */
-#define SYNC_VERT_HIGH_ACT   2       /* vertical sync high active    */
-#define SYNC_EXT             4       /* external sync                */
-#define SYNC_COMP_HIGH_ACT   8       /* composite sync high active   */
-#define SYNC_BROADCAST       16      /* broadcast video timings      */
-                                        /* vtotal = 144d/288n/576i => PAL  */
-                                        /* vtotal = 121d/242n/484i => NTSC */
-
-#define SYNC_ON_GREEN        32      /* sync on green */
-
-#define VMODE_NONINTERLACED  0       /* non interlaced */
-#define VMODE_INTERLACED     1       /* interlaced   */
-#define VMODE_DOUBLE         2       /* double scan */
-#define VMODE_MASK           255
-
-#define VMODE_YWRAP          256     /* ywrap instead of panning     */
-#define VMODE_SMOOTH_XPAN    512     /* smooth xpan possible (internally used) */
-#define VMODE_CONUPDATE      512     /* don't update x/yoffset       */
-
-/* VGA data register ports */
-#define CRT_DC  0x3D5           /* CRT Controller Data Register - color emulation */
-#define CRT_DM  0x3B5           /* CRT Controller Data Register - mono emulation */
-#define ATT_R   0x3C1           /* Attribute Controller Data Read Register */
-#define GRA_D   0x3CF           /* Graphics Controller Data Register */
-#define SEQ_D   0x3C5           /* Sequencer Data Register */
-
-#define MIS_R   0x3CC           // Misc Output Read Register
-#define MIS_W   0x3C2           // Misc Output Write Register
-
-#define IS1_RC  0x3DA           /* Input Status Register 1 - color emulation */
-#define IS1_RM  0x3BA           /* Input Status Register 1 - mono emulation */
-#define PEL_D   0x3C9           /* PEL Data Register */
-#define PEL_MSK 0x3C6           /* PEL mask register */
-
-/* EGA-specific registers */
-#define GRA_E0  0x3CC           /* Graphics enable processor 0 */
-#define GRA_E1  0x3CA           /* Graphics enable processor 1 */
-
-
-/* VGA index register ports */
-#define CRT_IC  0x3D4           /* CRT Controller Index - color emulation */
-#define CRT_IM  0x3B4           /* CRT Controller Index - mono emulation */
-#define ATT_IW  0x3C0           /* Attribute Controller Index & Data Write Register */
-#define GRA_I   0x3CE           /* Graphics Controller Index */
-#define SEQ_I   0x3C4           /* Sequencer Index */
-#define PEL_IW  0x3C8           /* PEL Write Index */
-#define PEL_IR  0x3C7           /* PEL Read Index */
-
-/* standard VGA indexes max counts */
-#define CRTC_C   25              /* 25 CRT Controller Registers sequentially set*/
-								 // the remainder are not in the par array
-#define ATT_C   21              /* 21 Attribute Controller Registers */
-#define GRA_C   9               /* 9  Graphics Controller Registers */
-#define SEQ_C   5               /* 5  Sequencer Registers */
-#define MIS_C   1               /* 1  Misc Output Register */
-
-#define CRTC_H_TOTAL            0
-#define CRTC_H_DISP             1
-#define CRTC_H_BLANK_START      2
-#define CRTC_H_BLANK_END        3
-#define CRTC_H_SYNC_START       4
-#define CRTC_H_SYNC_END         5
-#define CRTC_V_TOTAL            6
-#define CRTC_OVERFLOW           7
-#define CRTC_PRESET_ROW         8
-#define CRTC_MAX_SCAN           9
-#define CRTC_CURSOR_START       0x0A
-#define CRTC_CURSOR_END         0x0B
-#define CRTC_START_HI           0x0C
-#define CRTC_START_LO           0x0D
-#define CRTC_CURSOR_HI          0x0E
-#define CRTC_CURSOR_LO          0x0F
-#define CRTC_V_SYNC_START       0x10
-#define CRTC_V_SYNC_END         0x11
-#define CRTC_V_DISP_END         0x12
-#define CRTC_OFFSET             0x13
-#define CRTC_UNDERLINE          0x14
-#define CRTC_V_BLANK_START      0x15
-#define CRTC_V_BLANK_END        0x16
-#define CRTC_MODE               0x17
-#define CRTC_LINE_COMPARE       0x18
-
-#define ATC_MODE                0x10
-#define ATC_OVERSCAN            0x11
-#define ATC_PLANE_ENABLE        0x12
-#define ATC_PEL                 0x13
-#define ATC_COLOR_PAGE          0x14
-
-#define SEQ_CLOCK_MODE          0x01
-#define SEQ_PLANE_WRITE         0x02
-#define SEQ_CHARACTER_MAP       0x03
-#define SEQ_MEMORY_MODE         0x04
-
-#define GDC_SR_VALUE            0x00
-#define GDC_SR_ENABLE           0x01
-#define GDC_COMPARE_VALUE       0x02
-#define GDC_DATA_ROTATE         0x03
-#define GDC_PLANE_READ          0x04
-#define GDC_MODE                0x05
-#define GDC_MISC                0x06
-#define GDC_COMPARE_MASK        0x07
-#define GDC_BIT_MASK            0x08
-
-// text attributes
-#define VGA_ATTR_CLR_RED 0x4
-#define VGA_ATTR_CLR_GRN 0x2
-#define VGA_ATTR_CLR_BLU 0x1
-#define VGA_ATTR_CLR_YEL (VGA_ATTR_CLR_RED | VGA_ATTR_CLR_GRN)
-#define VGA_ATTR_CLR_CYN (VGA_ATTR_CLR_GRN | VGA_ATTR_CLR_BLU)
-#define VGA_ATTR_CLR_MAG (VGA_ATTR_CLR_BLU | VGA_ATTR_CLR_RED)
-#define VGA_ATTR_CLR_BLK 0
-#define VGA_ATTR_CLR_WHT (VGA_ATTR_CLR_RED | VGA_ATTR_CLR_GRN | VGA_ATTR_CLR_BLU)
-#define VGA_ATTR_BNK     0x80
-#define VGA_ATTR_ITN     0x08
-
-/*
- * vga register parameters
- * these are copied to the 
- * registers.
- *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
-struct vga_par {
-        u8 crtc[CRTC_C];
-        u8 atc[ATT_C];
-        u8 gdc[GRA_C];
-        u8 seq[SEQ_C];
-        u8 misc; // the misc register, MIS_W
-        u8 vss;
-};
 
+#ifndef VGA_H
+#define VGA_H
 
-/* Interpretation of offset for color fields: All offsets are from the right,
- * inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you
- * can use the offset as right argument to <<). A pixel afterwards is a bit
- * stream and is written to video memory as that unmodified. This implies
- * big-endian byte order if bits_per_pixel is greater than 8.
- */
-struct fb_bitfield {
-        __u32 offset;                   /* beginning of bitfield        */
-        __u32 length;                   /* length of bitfield           */
-        __u32 msb_right;                /* != 0 : Most significant bit is */ 
-                                        /* right */ 
-};
+#define VGA_FB 0xB8000
+#define VGA_FB_SIZE 0x4000 /* char + attr = word sized so 0x8000 / 2 */
+#define VGA_COLUMNS 80
+#define VGA_LINES 25
 
-struct screeninfo {
-        __u32 xres;                     /* visible resolution           */
-        __u32 yres;
-        __u32 xres_virtual;             /* virtual resolution           */
-        __u32 yres_virtual;
-        __u32 xoffset;                  /* offset from virtual to visible */
-        __u32 yoffset;                  /* resolution                   */
+#if (CONFIG_VGA == 1)
 
-        __u32 bits_per_pixel;           /* guess what                   */
-        __u32 grayscale;                /* != 0 Graylevels instead of colors */
+void vga_io_init(void);
 
-        struct fb_bitfield red;         /* bitfield in fb mem if true color, */
-        struct fb_bitfield green;       /* else only length is significant */
-        struct fb_bitfield blue;
-        struct fb_bitfield transp;      /* transparency                 */      
+void vga_textmode_init(void);
 
-        __u32 nonstd;                   /* != 0 Non standard pixel format */
+void vga_cursor_enable(int enable);
+void vga_cursor_reset(void);
+void vga_cursor_set(unsigned int line, unsigned int character);
 
-        __u32 activate;                 /* see FB_ACTIVATE_*            */
+void vga_frame_set(unsigned int line, unsigned int character);
 
-        __u32 height;                   /* height of picture in mm    */
-        __u32 width;                    /* width of picture in mm     */
+void vga_line_write(unsigned int line, const char *string);
 
-        __u32 accel_flags;              /* acceleration flags (hints)   */
+#endif /* (CONFIG_VGA == 1) */
 
-        /* Timing: All values in pixclocks, except pixclock (of course) */
-        __u32 pixclock;                 /* pixel clock in ps (pico seconds) */
-        __u32 left_margin;              /* time from sync to picture    */
-        __u32 right_margin;             /* time from picture to sync    */
-        __u32 upper_margin;             /* time from sync to picture    */
-        __u32 lower_margin;
-        __u32 hsync_len;                /* length of horizontal sync    */
-        __u32 vsync_len;                /* length of vertical sync      */
-        __u32 sync;                     /* sync polarity                */
-        __u32 vmode;                    /* interlaced etc				*/
-        __u32 reserved[6];              /* Reserved for future compatibility */
-};
-
-#endif
+#endif /* VGA_H */
Index: src/include/pc80/vga_io.h
===================================================================
--- src/include/pc80/vga_io.h	(revision 0)
+++ src/include/pc80/vga_io.h	(revision 0)
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C)  2007  Luc Verhaegen <libv at skynet.be>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef VGA_IO_H
+#define VGA_IO_H
+
+/*
+ * All IO necessary to poke VGA registers.
+ */
+
+/* VGA Enable */
+unsigned char vga_enable_read(void);
+void vga_enable_write(unsigned char value);
+void vga_enable_mask(unsigned char value, unsigned char mask);
+
+/* Miscellaneous register */
+unsigned char vga_misc_read(void);
+void vga_misc_write(unsigned char value);
+void vga_misc_mask(unsigned char value, unsigned char mask);
+
+/* Sequencer registers. */
+unsigned char vga_sr_read(unsigned char index);
+void vga_sr_write(unsigned char index, unsigned char value);
+void vga_sr_mask(unsigned char index, unsigned char value, unsigned char mask);
+
+/* CR registers. */
+unsigned char vga_cr_read(unsigned char index);
+void vga_cr_write(unsigned char index, unsigned char value);
+void vga_cr_mask(unsigned char index, unsigned char value, unsigned char mask);
+
+/* Attribute registers. */
+unsigned char vga_ar_read(unsigned char index);
+void vga_ar_write(unsigned char index, unsigned char value);
+void vga_ar_mask(unsigned char index, unsigned char value, unsigned char mask);
+
+/* Graphics registers. */
+unsigned char vga_gr_read(unsigned char index);
+void vga_gr_write(unsigned char index, unsigned char value);
+void vga_gr_mask(unsigned char index, unsigned char value, unsigned char mask);
+
+/* DAC functions. */
+void vga_palette_enable(void);
+void vga_palette_disable(void);
+unsigned char vga_dac_mask_read(void);
+void vga_dac_mask_write(unsigned char mask);
+void vga_dac_read_address(unsigned char address);
+void vga_dac_write_address(unsigned char address);
+unsigned char vga_dac_data_read(void);
+void vga_dac_data_write(unsigned char data);
+
+#endif /* VGA_IO_H */
Index: src/console/vga_console.c
===================================================================
--- src/console/vga_console.c	(revision 4298)
+++ src/console/vga_console.c	(working copy)
@@ -5,105 +5,95 @@
  *
  */
 
+/*
+ * TODO:
+ * * make vga_console_init take FB location, columns, lines and starting
+ *   column/line.
+ * * track a word offset, and not columns/lines. The offset is needed more
+ *   often than columns/lines and the latter two can be calculated easily.
+ * * then implement real vga scrolling, instead of memcpying stuff around.
+ *
+ * -- libv.
+ */
+
 #include <arch/io.h>
 #include <string.h>
+#include <pc80/vga_io.h>
 #include <pc80/vga.h>
 #include <console/console.h>
 
 /* The video buffer, should be replaced by symbol in ldscript.ld */
 static char *vidmem;
-
-int vga_line, vga_col;
-
-int vga_inited = 0; // it will be changed in pci_rom.c
-
+static int total_lines, total_columns;
+static int current_line, current_column;
 static int vga_console_inited = 0;
 
-#define VIDBUFFER 0xB8000;
-
-static void memsetw(void *s, int c, unsigned int n)
+/*
+ *
+ */
+void vga_console_init(void)
 {
-	int i;
-	 u16 *ss = (u16 *) s;
+	vidmem = (char *) VGA_FB;
+	total_columns = VGA_COLUMNS;
+	total_lines = VGA_LINES;
+	current_column = 0;
+	current_line = 0;
 
-	for (i = 0; i < n; i++) {
-		ss[i] = ( u16 ) c;
-	}
+	vga_console_inited = 1;
 }
 
-static void vga_init(void)
-{
-	// these are globals
-	vga_line = 0;
-	vga_col = 0;
-	vidmem = (char *) VIDBUFFER;
-	
-	// mainboard or chip specific init routines
-	// also loads font
-	vga_hardware_fixup();
-	
-	// set attributes, char for entire screen
-	// font should be previously loaded in 
-	// device specific code (vga_hardware_fixup)
-	 memsetw(vidmem, VGA_ATTR_CLR_WHT, 2*1024); //
-}
-
 static void vga_scroll(void)
 {
 	int i;
 
-	memcpy(vidmem, vidmem + COLS * 2, (LINES - 1) * COLS * 2);
-	for (i = (LINES - 1) * COLS * 2; i < LINES * COLS * 2; i += 2)
+	memcpy(vidmem, vidmem + total_columns * 2, (total_lines - 1) * total_columns * 2);
+	for (i = (total_lines - 1) * total_columns * 2; i < total_lines * total_columns * 2; i += 2)
 		vidmem[i] = ' ';
 }
 
-static void vga_tx_byte(unsigned char byte)
+static void
+vga_tx_byte(unsigned char byte)
 {
-	if (!vga_inited) {
-		return;
+	if (!vga_console_inited)
+	    return;
+
+	switch (byte) {
+	case '\n':
+		current_line++;
+		current_column = 0;
+		break;
+	case '\r':
+		current_column = 0;
+		break;
+	case '\b':
+		current_column--;
+		break;
+	case '\t':
+		current_column += 4;
+		break;
+	case '\a': /* beep */
+		break;
+	default:
+		vidmem[((current_column + (current_line * total_columns)) * 2)] = byte;
+		vidmem[((current_column + (current_line * total_columns)) * 2) +1] = 0x07;
+		current_column++;
+		break;
 	}
- 
-	if(!vga_console_inited) {
-		vga_init();
-		vga_console_inited = 1;
-	}
 
-	if (byte == '\n') {
-		vga_line++;
-		vga_col = 0;
-
-	} else if (byte == '\r') {
-		vga_col = 0;
-
-	} else if (byte == '\b') {
-		vga_col--;
-
-	} else if (byte == '\t') {
-		vga_col += 4;
-
-	} else if (byte == '\a') {
-		//beep
-//		beep(500);
-		;
-	} else {
-		vidmem[((vga_col + (vga_line *COLS)) * 2)] = byte;
-		vidmem[((vga_col + (vga_line *COLS)) * 2) +1] = VGA_ATTR_CLR_WHT;
-		vga_col++;
+	if (current_column < 0)
+		current_column = 0;
+	if (current_column >= total_columns) {
+		current_line++;
+		current_column = 0;
 	}
-	if (vga_col < 0) {
-		vga_col = 0;
-	}
-	if (vga_col >= COLS) {
-		vga_line++;
-		vga_col = 0;
-	}
-	if (vga_line >= LINES) {
+	if (current_line >= total_lines) {
 		vga_scroll();
-		vga_line--;
+		current_line--;
 	}
-	// move the cursor
-	write_crtc((vga_col + (vga_line *COLS)) >> 8, CRTC_CURSOR_HI);
-	write_crtc((vga_col + (vga_line *COLS)) & 0x0ff, CRTC_CURSOR_LO);
+
+	/* move the cursor */
+	vga_cr_write(0x0E, (current_column + (current_line * total_columns)) >> 8);
+	vga_cr_write(0x0F, (current_column + (current_line * total_columns)) & 0x0ff);
 }
 
 static const struct console_driver vga_console __console ={
Index: src/config/Options.lb
===================================================================
--- src/config/Options.lb	(revision 4298)
+++ src/config/Options.lb	(working copy)
@@ -1077,6 +1077,12 @@
 	comment "CPU hardware address lines num, for AMD K8 could be 40, and AMD family 10 could be 48"
 end
 
+define CONFIG_VGA
+	default 0
+	export always
+	comment "Include VGA initialisation code"
+end
+
 define CONFIG_VGA_ROM_RUN
 	default 0
 	export always
Index: src/pc80/Config.lb
===================================================================
--- src/pc80/Config.lb	(revision 4298)
+++ src/pc80/Config.lb	(working copy)
@@ -1,5 +1,4 @@
 uses CONFIG_IDE
-uses CONFIG_CONSOLE_VGA
 uses CONFIG_UDELAY_IO
 
 object mc146818rtc.o
@@ -15,4 +14,6 @@
 	dir ide
 end
 
+dir vga
+
 object keyboard.o
Index: src/pc80/vga/Config.lb
===================================================================
--- src/pc80/vga/Config.lb	(revision 0)
+++ src/pc80/vga/Config.lb	(revision 0)
@@ -0,0 +1,9 @@
+uses CONFIG_VGA
+
+# always build this.
+object vga_io.o
+
+# this adds a vga modeset including a huge font.
+if CONFIG_VGA
+	object vga.o
+end
Index: src/pc80/vga/vga_io.c
===================================================================
--- src/pc80/vga/vga_io.c	(revision 0)
+++ src/pc80/vga/vga_io.c	(revision 0)
@@ -0,0 +1,275 @@
+/*
+ * Copyright (C)  2007-2009  Luc Verhaegen <libv at skynet.be>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/*
+ * All IO necessary to poke VGA registers.
+ */
+#include <pc80/vga_io.h>
+
+#include <arch/io.h>
+
+#define VGA_CR_INDEX          0x3D4
+#define VGA_CR_VALUE          0x3D5
+
+#define VGA_SR_INDEX          0x3C4
+#define VGA_SR_VALUE          0x3C5
+
+#define VGA_GR_INDEX          0x3CE
+#define VGA_GR_VALUE          0x3CF
+
+#define VGA_AR_INDEX          0x3C0
+#define VGA_AR_VALUE_READ     0x3C1
+#define VGA_AR_VALUE_WRITE    VGA_AR_INDEX
+
+#define VGA_MISC_WRITE        0x3C2
+#define VGA_MISC_READ         0x3CC
+
+#define VGA_ENABLE            0x3C3
+#define VGA_STAT1             0x3DA
+
+#define VGA_DAC_MASK          0x3C6
+#define VGA_DAC_READ_ADDRESS  0x3C7
+#define VGA_DAC_WRITE_ADDRESS 0x3C8
+#define VGA_DAC_DATA          0x3C9
+
+/*
+ * VGA enable. Poke this to have the PCI IO enabled device accept VGA IO.
+ */
+unsigned char
+vga_enable_read(void)
+{
+	return inb(VGA_ENABLE);
+}
+
+void
+vga_enable_write(unsigned char value)
+{
+	outb(value, VGA_ENABLE);
+}
+
+void
+vga_enable_mask(unsigned char value, unsigned char mask)
+{
+	unsigned char tmp;
+
+	tmp = vga_enable_read();
+	tmp &= ~mask;
+	tmp |= (value & mask);
+	vga_enable_write(tmp);
+}
+
+/*
+ * Miscellaneous register.
+ */
+unsigned char
+vga_misc_read(void)
+{
+	return inb(VGA_MISC_READ);
+}
+
+void
+vga_misc_write(unsigned char value)
+{
+	outb(value, VGA_MISC_WRITE);
+}
+
+void
+vga_misc_mask(unsigned char value, unsigned char mask)
+{
+	unsigned char tmp;
+
+	tmp = vga_misc_read();
+	tmp &= ~mask;
+	tmp |= (value & mask);
+	vga_misc_write(tmp);
+}
+
+/*
+ * Sequencer registers.
+ */
+unsigned char
+vga_sr_read(unsigned char index)
+{
+	outb(index, VGA_SR_INDEX);
+	return (inb(VGA_SR_VALUE));
+}
+
+void
+vga_sr_write(unsigned char index, unsigned char value)
+{
+	outb(index, VGA_SR_INDEX);
+	outb(value, VGA_SR_VALUE);
+}
+
+void
+vga_sr_mask(unsigned char index, unsigned char value, unsigned char mask)
+{
+	unsigned char tmp;
+
+	tmp = vga_sr_read(index);
+	tmp &= ~mask;
+	tmp |= (value & mask);
+	vga_sr_write(index, tmp);
+}
+
+/*
+ * CRTC registers.
+ */
+unsigned char
+vga_cr_read(unsigned char index)
+{
+	outb(index, VGA_CR_INDEX);
+	return (inb(VGA_CR_VALUE));
+}
+
+void
+vga_cr_write(unsigned char index, unsigned char value)
+{
+	outb(index, VGA_CR_INDEX);
+	outb(value, VGA_CR_VALUE);
+}
+
+void
+vga_cr_mask(unsigned char index, unsigned char value, unsigned char mask)
+{
+	unsigned char tmp;
+
+	tmp = vga_cr_read(index);
+	tmp &= ~mask;
+	tmp |= (value & mask);
+	vga_cr_write(index, tmp);
+}
+
+/*
+ * Attribute registers.
+ */
+unsigned char
+vga_ar_read(unsigned char index)
+{
+	unsigned char ret;
+
+	(void) inb(VGA_STAT1);
+	outb(index, VGA_AR_INDEX);
+	ret = inb(VGA_AR_VALUE_READ);
+	(void) inb(VGA_STAT1);
+
+	return ret;
+}
+
+void
+vga_ar_write(unsigned char index, unsigned char value)
+{
+	(void) inb(VGA_STAT1);
+	outb(index, VGA_AR_INDEX);
+	outb(value, VGA_AR_VALUE_WRITE);
+	(void) inb(VGA_STAT1);
+}
+
+void
+vga_ar_mask(unsigned char index, unsigned char value, unsigned char mask)
+{
+	unsigned char tmp;
+
+	tmp = vga_ar_read(index);
+	tmp &= ~mask;
+	tmp |= (value & mask);
+	vga_ar_write(index, tmp);
+}
+
+/*
+ * Graphics registers.
+ */
+unsigned char
+vga_gr_read(unsigned char index)
+{
+	outb(index, VGA_GR_INDEX);
+	return (inb(VGA_GR_VALUE));
+}
+
+void
+vga_gr_write(unsigned char index, unsigned char value)
+{
+	outb(index, VGA_GR_INDEX);
+	outb(value, VGA_GR_VALUE);
+}
+
+void
+vga_gr_mask(unsigned char index, unsigned char value, unsigned char mask)
+{
+	unsigned char tmp;
+
+	tmp = vga_gr_read(index);
+	tmp &= ~mask;
+	tmp |= (value & mask);
+	vga_gr_write(index, tmp);
+}
+
+/*
+ * DAC functions.
+ */
+void
+vga_palette_enable(void)
+{
+	(void) inb(VGA_STAT1);
+	outb(0x00, VGA_AR_INDEX);
+	(void) inb(VGA_STAT1);
+}
+
+void
+vga_palette_disable(void)
+{
+	(void) inb(VGA_STAT1);
+	outb(0x20, VGA_AR_INDEX);
+	(void) inb(VGA_STAT1);
+}
+
+unsigned char
+vga_dac_mask_read(void)
+{
+	return inb(VGA_DAC_MASK);
+}
+
+void
+vga_dac_mask_write(unsigned char mask)
+{
+	outb(mask, VGA_DAC_MASK);
+}
+
+void
+vga_dac_read_address(unsigned char address)
+{
+	outb(address, VGA_DAC_READ_ADDRESS);
+}
+
+void
+vga_dac_write_address(unsigned char address)
+{
+	outb(address, VGA_DAC_WRITE_ADDRESS);
+}
+
+unsigned char
+vga_dac_data_read(void)
+{
+	return inb(VGA_DAC_DATA);
+}
+
+void
+vga_dac_data_write(unsigned char data)
+{
+	outb(data, VGA_DAC_DATA);
+}
Index: src/pc80/vga/vga_font_8x16.c
===================================================================
--- src/pc80/vga/vga_font_8x16.c	(revision 0)
+++ src/pc80/vga/vga_font_8x16.c	(revision 0)
@@ -0,0 +1,4362 @@
+/**********************************************/
+/*                                            */
+/*       Font file generated by cpi2fnt       */
+/*                                            */
+/**********************************************/
+
+const unsigned char
+vga_font_8x16[256][16] = {
+	{ /* 0 0x00 '^@' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 1 0x01 '^A' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7e, /* 01111110 */
+		0x81, /* 10000001 */
+		0xa5, /* 10100101 */
+		0x81, /* 10000001 */
+		0x81, /* 10000001 */
+		0xbd, /* 10111101 */
+		0x99, /* 10011001 */
+		0x81, /* 10000001 */
+		0x81, /* 10000001 */
+		0x7e, /* 01111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 2 0x02 '^B' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7e, /* 01111110 */
+		0xff, /* 11111111 */
+		0xdb, /* 11011011 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xc3, /* 11000011 */
+		0xe7, /* 11100111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0x7e, /* 01111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 3 0x03 '^C' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x6c, /* 01101100 */
+		0xfe, /* 11111110 */
+		0xfe, /* 11111110 */
+		0xfe, /* 11111110 */
+		0xfe, /* 11111110 */
+		0x7c, /* 01111100 */
+		0x38, /* 00111000 */
+		0x10, /* 00010000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 4 0x04 '^D' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x10, /* 00010000 */
+		0x38, /* 00111000 */
+		0x7c, /* 01111100 */
+		0xfe, /* 11111110 */
+		0x7c, /* 01111100 */
+		0x38, /* 00111000 */
+		0x10, /* 00010000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 5 0x05 '^E' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x3c, /* 00111100 */
+		0x3c, /* 00111100 */
+		0xe7, /* 11100111 */
+		0xe7, /* 11100111 */
+		0xe7, /* 11100111 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x3c, /* 00111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 6 0x06 '^F' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x3c, /* 00111100 */
+		0x7e, /* 01111110 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0x7e, /* 01111110 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x3c, /* 00111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 7 0x07 '^G' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x3c, /* 00111100 */
+		0x3c, /* 00111100 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 8 0x08 '^H' */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xe7, /* 11100111 */
+		0xc3, /* 11000011 */
+		0xc3, /* 11000011 */
+		0xe7, /* 11100111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+	}, { /* 9 0x09 '^I' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x3c, /* 00111100 */
+		0x66, /* 01100110 */
+		0x42, /* 01000010 */
+		0x42, /* 01000010 */
+		0x66, /* 01100110 */
+		0x3c, /* 00111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 10 0x0a '^J' */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xc3, /* 11000011 */
+		0x99, /* 10011001 */
+		0xbd, /* 10111101 */
+		0xbd, /* 10111101 */
+		0x99, /* 10011001 */
+		0xc3, /* 11000011 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+	}, { /* 11 0x0b '^K' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x1e, /* 00011110 */
+		0x0e, /* 00001110 */
+		0x1a, /* 00011010 */
+		0x32, /* 00110010 */
+		0x78, /* 01111000 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0x78, /* 01111000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 12 0x0c '^L' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x3c, /* 00111100 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x3c, /* 00111100 */
+		0x18, /* 00011000 */
+		0x7e, /* 01111110 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 13 0x0d '^M' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x3f, /* 00111111 */
+		0x33, /* 00110011 */
+		0x3f, /* 00111111 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x70, /* 01110000 */
+		0xf0, /* 11110000 */
+		0xe0, /* 11100000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 14 0x0e '^N' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7f, /* 01111111 */
+		0x63, /* 01100011 */
+		0x7f, /* 01111111 */
+		0x63, /* 01100011 */
+		0x63, /* 01100011 */
+		0x63, /* 01100011 */
+		0x63, /* 01100011 */
+		0x67, /* 01100111 */
+		0xe7, /* 11100111 */
+		0xe6, /* 11100110 */
+		0xc0, /* 11000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 15 0x0f '^O' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0xdb, /* 11011011 */
+		0x3c, /* 00111100 */
+		0xe7, /* 11100111 */
+		0x3c, /* 00111100 */
+		0xdb, /* 11011011 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 16 0x10 '^P' */
+		0x00, /* 00000000 */
+		0x80, /* 10000000 */
+		0xc0, /* 11000000 */
+		0xe0, /* 11100000 */
+		0xf0, /* 11110000 */
+		0xf8, /* 11111000 */
+		0xfe, /* 11111110 */
+		0xf8, /* 11111000 */
+		0xf0, /* 11110000 */
+		0xe0, /* 11100000 */
+		0xc0, /* 11000000 */
+		0x80, /* 10000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 17 0x11 '^Q' */
+		0x00, /* 00000000 */
+		0x02, /* 00000010 */
+		0x06, /* 00000110 */
+		0x0e, /* 00001110 */
+		0x1e, /* 00011110 */
+		0x3e, /* 00111110 */
+		0xfe, /* 11111110 */
+		0x3e, /* 00111110 */
+		0x1e, /* 00011110 */
+		0x0e, /* 00001110 */
+		0x06, /* 00000110 */
+		0x02, /* 00000010 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 18 0x12 '^R' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x3c, /* 00111100 */
+		0x7e, /* 01111110 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x7e, /* 01111110 */
+		0x3c, /* 00111100 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 19 0x13 '^S' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x00, /* 00000000 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 20 0x14 '^T' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7f, /* 01111111 */
+		0xdb, /* 11011011 */
+		0xdb, /* 11011011 */
+		0xdb, /* 11011011 */
+		0x7b, /* 01111011 */
+		0x1b, /* 00011011 */
+		0x1b, /* 00011011 */
+		0x1b, /* 00011011 */
+		0x1b, /* 00011011 */
+		0x1b, /* 00011011 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 21 0x15 '^U' */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0x60, /* 01100000 */
+		0x38, /* 00111000 */
+		0x6c, /* 01101100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x6c, /* 01101100 */
+		0x38, /* 00111000 */
+		0x0c, /* 00001100 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 22 0x16 '^V' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xfe, /* 11111110 */
+		0xfe, /* 11111110 */
+		0xfe, /* 11111110 */
+		0xfe, /* 11111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 23 0x17 '^W' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x3c, /* 00111100 */
+		0x7e, /* 01111110 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x7e, /* 01111110 */
+		0x3c, /* 00111100 */
+		0x18, /* 00011000 */
+		0x7e, /* 01111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 24 0x18 '^X' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x3c, /* 00111100 */
+		0x7e, /* 01111110 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 25 0x19 '^Y' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x7e, /* 01111110 */
+		0x3c, /* 00111100 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 26 0x1a '^Z' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x0c, /* 00001100 */
+		0xfe, /* 11111110 */
+		0x0c, /* 00001100 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 27 0x1b '^[' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x30, /* 00110000 */
+		0x60, /* 01100000 */
+		0xfe, /* 11111110 */
+		0x60, /* 01100000 */
+		0x30, /* 00110000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 28 0x1c '^\' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xfe, /* 11111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 29 0x1d '^]' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x28, /* 00101000 */
+		0x6c, /* 01101100 */
+		0xfe, /* 11111110 */
+		0x6c, /* 01101100 */
+		0x28, /* 00101000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 30 0x1e '^^' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x10, /* 00010000 */
+		0x38, /* 00111000 */
+		0x38, /* 00111000 */
+		0x7c, /* 01111100 */
+		0x7c, /* 01111100 */
+		0xfe, /* 11111110 */
+		0xfe, /* 11111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 31 0x1f '^_' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xfe, /* 11111110 */
+		0xfe, /* 11111110 */
+		0x7c, /* 01111100 */
+		0x7c, /* 01111100 */
+		0x38, /* 00111000 */
+		0x38, /* 00111000 */
+		0x10, /* 00010000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 32 0x20 ' ' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 33 0x21 '!' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x3c, /* 00111100 */
+		0x3c, /* 00111100 */
+		0x3c, /* 00111100 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 34 0x22 '"' */
+		0x00, /* 00000000 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x24, /* 00100100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 35 0x23 '#' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x6c, /* 01101100 */
+		0x6c, /* 01101100 */
+		0xfe, /* 11111110 */
+		0x6c, /* 01101100 */
+		0x6c, /* 01101100 */
+		0x6c, /* 01101100 */
+		0xfe, /* 11111110 */
+		0x6c, /* 01101100 */
+		0x6c, /* 01101100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 36 0x24 '$' */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xc2, /* 11000010 */
+		0xc0, /* 11000000 */
+		0x7c, /* 01111100 */
+		0x06, /* 00000110 */
+		0x06, /* 00000110 */
+		0x86, /* 10000110 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 37 0x25 '%' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xc2, /* 11000010 */
+		0xc6, /* 11000110 */
+		0x0c, /* 00001100 */
+		0x18, /* 00011000 */
+		0x30, /* 00110000 */
+		0x60, /* 01100000 */
+		0xc6, /* 11000110 */
+		0x86, /* 10000110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 38 0x26 '&' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x38, /* 00111000 */
+		0x6c, /* 01101100 */
+		0x6c, /* 01101100 */
+		0x38, /* 00111000 */
+		0x76, /* 01110110 */
+		0xdc, /* 11011100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0x76, /* 01110110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 39 0x27 ''' */
+		0x00, /* 00000000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x60, /* 01100000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 40 0x28 '(' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x0c, /* 00001100 */
+		0x18, /* 00011000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x18, /* 00011000 */
+		0x0c, /* 00001100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 41 0x29 ')' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x30, /* 00110000 */
+		0x18, /* 00011000 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0x18, /* 00011000 */
+		0x30, /* 00110000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 42 0x2a '*' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x66, /* 01100110 */
+		0x3c, /* 00111100 */
+		0xff, /* 11111111 */
+		0x3c, /* 00111100 */
+		0x66, /* 01100110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 43 0x2b '+' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x7e, /* 01111110 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 44 0x2c ',' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x30, /* 00110000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 45 0x2d '-' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xfe, /* 11111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 46 0x2e '.' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 47 0x2f '/' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x02, /* 00000010 */
+		0x06, /* 00000110 */
+		0x0c, /* 00001100 */
+		0x18, /* 00011000 */
+		0x30, /* 00110000 */
+		0x60, /* 01100000 */
+		0xc0, /* 11000000 */
+		0x80, /* 10000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 48 0x30 '0' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x38, /* 00111000 */
+		0x6c, /* 01101100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xd6, /* 11010110 */
+		0xd6, /* 11010110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x6c, /* 01101100 */
+		0x38, /* 00111000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 49 0x31 '1' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x38, /* 00111000 */
+		0x78, /* 01111000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x7e, /* 01111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 50 0x32 '2' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0x06, /* 00000110 */
+		0x0c, /* 00001100 */
+		0x18, /* 00011000 */
+		0x30, /* 00110000 */
+		0x60, /* 01100000 */
+		0xc0, /* 11000000 */
+		0xc6, /* 11000110 */
+		0xfe, /* 11111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 51 0x33 '3' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0x06, /* 00000110 */
+		0x06, /* 00000110 */
+		0x3c, /* 00111100 */
+		0x06, /* 00000110 */
+		0x06, /* 00000110 */
+		0x06, /* 00000110 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 52 0x34 '4' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x0c, /* 00001100 */
+		0x1c, /* 00011100 */
+		0x3c, /* 00111100 */
+		0x6c, /* 01101100 */
+		0xcc, /* 11001100 */
+		0xfe, /* 11111110 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0x1e, /* 00011110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 53 0x35 '5' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xfe, /* 11111110 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xfc, /* 11111100 */
+		0x06, /* 00000110 */
+		0x06, /* 00000110 */
+		0x06, /* 00000110 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 54 0x36 '6' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x38, /* 00111000 */
+		0x60, /* 01100000 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xfc, /* 11111100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 55 0x37 '7' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xfe, /* 11111110 */
+		0xc6, /* 11000110 */
+		0x06, /* 00000110 */
+		0x06, /* 00000110 */
+		0x0c, /* 00001100 */
+		0x18, /* 00011000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 56 0x38 '8' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 57 0x39 '9' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x7e, /* 01111110 */
+		0x06, /* 00000110 */
+		0x06, /* 00000110 */
+		0x06, /* 00000110 */
+		0x0c, /* 00001100 */
+		0x78, /* 01111000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 58 0x3a ':' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 59 0x3b ';' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x30, /* 00110000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 60 0x3c '<' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x06, /* 00000110 */
+		0x0c, /* 00001100 */
+		0x18, /* 00011000 */
+		0x30, /* 00110000 */
+		0x60, /* 01100000 */
+		0x30, /* 00110000 */
+		0x18, /* 00011000 */
+		0x0c, /* 00001100 */
+		0x06, /* 00000110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 61 0x3d '=' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7e, /* 01111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7e, /* 01111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 62 0x3e '>' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x60, /* 01100000 */
+		0x30, /* 00110000 */
+		0x18, /* 00011000 */
+		0x0c, /* 00001100 */
+		0x06, /* 00000110 */
+		0x0c, /* 00001100 */
+		0x18, /* 00011000 */
+		0x30, /* 00110000 */
+		0x60, /* 01100000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 63 0x3f '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x0c, /* 00001100 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 64 0x40 '@' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xde, /* 11011110 */
+		0xde, /* 11011110 */
+		0xde, /* 11011110 */
+		0xdc, /* 11011100 */
+		0xc0, /* 11000000 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 65 0x41 'A' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x10, /* 00010000 */
+		0x38, /* 00111000 */
+		0x6c, /* 01101100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xfe, /* 11111110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 66 0x42 'B' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xfc, /* 11111100 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x7c, /* 01111100 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0xfc, /* 11111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 67 0x43 'C' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x3c, /* 00111100 */
+		0x66, /* 01100110 */
+		0xc2, /* 11000010 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc2, /* 11000010 */
+		0x66, /* 01100110 */
+		0x3c, /* 00111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 68 0x44 'D' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xf8, /* 11111000 */
+		0x6c, /* 01101100 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x6c, /* 01101100 */
+		0xf8, /* 11111000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 69 0x45 'E' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xfe, /* 11111110 */
+		0x66, /* 01100110 */
+		0x62, /* 01100010 */
+		0x68, /* 01101000 */
+		0x78, /* 01111000 */
+		0x68, /* 01101000 */
+		0x60, /* 01100000 */
+		0x62, /* 01100010 */
+		0x66, /* 01100110 */
+		0xfe, /* 11111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 70 0x46 'F' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xfe, /* 11111110 */
+		0x66, /* 01100110 */
+		0x62, /* 01100010 */
+		0x68, /* 01101000 */
+		0x78, /* 01111000 */
+		0x68, /* 01101000 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0xf0, /* 11110000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 71 0x47 'G' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x3c, /* 00111100 */
+		0x66, /* 01100110 */
+		0xc2, /* 11000010 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xde, /* 11011110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x66, /* 01100110 */
+		0x3a, /* 00111010 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 72 0x48 'H' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xfe, /* 11111110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 73 0x49 'I' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x3c, /* 00111100 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x3c, /* 00111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 74 0x4a 'J' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x1e, /* 00011110 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0x78, /* 01111000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 75 0x4b 'K' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xe6, /* 11100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x6c, /* 01101100 */
+		0x78, /* 01111000 */
+		0x78, /* 01111000 */
+		0x6c, /* 01101100 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0xe6, /* 11100110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 76 0x4c 'L' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xf0, /* 11110000 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0x62, /* 01100010 */
+		0x66, /* 01100110 */
+		0xfe, /* 11111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 77 0x4d 'M' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xc6, /* 11000110 */
+		0xee, /* 11101110 */
+		0xfe, /* 11111110 */
+		0xfe, /* 11111110 */
+		0xd6, /* 11010110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 78 0x4e 'N' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xc6, /* 11000110 */
+		0xe6, /* 11100110 */
+		0xf6, /* 11110110 */
+		0xfe, /* 11111110 */
+		0xde, /* 11011110 */
+		0xce, /* 11001110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 79 0x4f 'O' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 80 0x50 'P' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xfc, /* 11111100 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x7c, /* 01111100 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0xf0, /* 11110000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 81 0x51 'Q' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xd6, /* 11010110 */
+		0xde, /* 11011110 */
+		0x7c, /* 01111100 */
+		0x0c, /* 00001100 */
+		0x0e, /* 00001110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 82 0x52 'R' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xfc, /* 11111100 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x7c, /* 01111100 */
+		0x6c, /* 01101100 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0xe6, /* 11100110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 83 0x53 'S' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x60, /* 01100000 */
+		0x38, /* 00111000 */
+		0x0c, /* 00001100 */
+		0x06, /* 00000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 84 0x54 'T' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7e, /* 01111110 */
+		0x7e, /* 01111110 */
+		0x5a, /* 01011010 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x3c, /* 00111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 85 0x55 'U' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 86 0x56 'V' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x6c, /* 01101100 */
+		0x38, /* 00111000 */
+		0x10, /* 00010000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 87 0x57 'W' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xd6, /* 11010110 */
+		0xd6, /* 11010110 */
+		0xd6, /* 11010110 */
+		0xfe, /* 11111110 */
+		0xee, /* 11101110 */
+		0x6c, /* 01101100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 88 0x58 'X' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x6c, /* 01101100 */
+		0x7c, /* 01111100 */
+		0x38, /* 00111000 */
+		0x38, /* 00111000 */
+		0x7c, /* 01111100 */
+		0x6c, /* 01101100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 89 0x59 'Y' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x3c, /* 00111100 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x3c, /* 00111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 90 0x5a 'Z' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xfe, /* 11111110 */
+		0xc6, /* 11000110 */
+		0x86, /* 10000110 */
+		0x0c, /* 00001100 */
+		0x18, /* 00011000 */
+		0x30, /* 00110000 */
+		0x60, /* 01100000 */
+		0xc2, /* 11000010 */
+		0xc6, /* 11000110 */
+		0xfe, /* 11111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 91 0x5b '[' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x3c, /* 00111100 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x3c, /* 00111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 92 0x5c '\' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x80, /* 10000000 */
+		0xc0, /* 11000000 */
+		0xe0, /* 11100000 */
+		0x70, /* 01110000 */
+		0x38, /* 00111000 */
+		0x1c, /* 00011100 */
+		0x0e, /* 00001110 */
+		0x06, /* 00000110 */
+		0x02, /* 00000010 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 93 0x5d ']' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x3c, /* 00111100 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0x3c, /* 00111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 94 0x5e '^' */
+		0x10, /* 00010000 */
+		0x38, /* 00111000 */
+		0x6c, /* 01101100 */
+		0xc6, /* 11000110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 95 0x5f '_' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xff, /* 11111111 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 96 0x60 '`' */
+		0x00, /* 00000000 */
+		0x30, /* 00110000 */
+		0x18, /* 00011000 */
+		0x0c, /* 00001100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 97 0x61 'a' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x78, /* 01111000 */
+		0x0c, /* 00001100 */
+		0x7c, /* 01111100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0x76, /* 01110110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 98 0x62 'b' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xe0, /* 11100000 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0x78, /* 01111000 */
+		0x6c, /* 01101100 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 99 0x63 'c' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 100 0x64 'd' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x1c, /* 00011100 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0x3c, /* 00111100 */
+		0x6c, /* 01101100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0x76, /* 01110110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 101 0x65 'e' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xfe, /* 11111110 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 102 0x66 'f' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x1c, /* 00011100 */
+		0x36, /* 00110110 */
+		0x32, /* 00110010 */
+		0x30, /* 00110000 */
+		0x78, /* 01111000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x78, /* 01111000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 103 0x67 'g' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x76, /* 01110110 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0x7c, /* 01111100 */
+		0x0c, /* 00001100 */
+		0xcc, /* 11001100 */
+		0x78, /* 01111000 */
+		0x00, /* 00000000 */
+	}, { /* 104 0x68 'h' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xe0, /* 11100000 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0x6c, /* 01101100 */
+		0x76, /* 01110110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0xe6, /* 11100110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 105 0x69 'i' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x38, /* 00111000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x3c, /* 00111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 106 0x6a 'j' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x06, /* 00000110 */
+		0x06, /* 00000110 */
+		0x00, /* 00000000 */
+		0x0e, /* 00001110 */
+		0x06, /* 00000110 */
+		0x06, /* 00000110 */
+		0x06, /* 00000110 */
+		0x06, /* 00000110 */
+		0x06, /* 00000110 */
+		0x06, /* 00000110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x3c, /* 00111100 */
+		0x00, /* 00000000 */
+	}, { /* 107 0x6b 'k' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xe0, /* 11100000 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0x66, /* 01100110 */
+		0x6c, /* 01101100 */
+		0x78, /* 01111000 */
+		0x78, /* 01111000 */
+		0x6c, /* 01101100 */
+		0x66, /* 01100110 */
+		0xe6, /* 11100110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 108 0x6c 'l' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x38, /* 00111000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x3c, /* 00111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 109 0x6d 'm' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xec, /* 11101100 */
+		0xfe, /* 11111110 */
+		0xd6, /* 11010110 */
+		0xd6, /* 11010110 */
+		0xd6, /* 11010110 */
+		0xd6, /* 11010110 */
+		0xc6, /* 11000110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 110 0x6e 'n' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xdc, /* 11011100 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 111 0x6f 'o' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 112 0x70 'p' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xdc, /* 11011100 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x7c, /* 01111100 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0xf0, /* 11110000 */
+		0x00, /* 00000000 */
+	}, { /* 113 0x71 'q' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x76, /* 01110110 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0x7c, /* 01111100 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0x1e, /* 00011110 */
+		0x00, /* 00000000 */
+	}, { /* 114 0x72 'r' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xdc, /* 11011100 */
+		0x76, /* 01110110 */
+		0x66, /* 01100110 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0xf0, /* 11110000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 115 0x73 's' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0x60, /* 01100000 */
+		0x38, /* 00111000 */
+		0x0c, /* 00001100 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 116 0x74 't' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x10, /* 00010000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0xfc, /* 11111100 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x36, /* 00110110 */
+		0x1c, /* 00011100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 117 0x75 'u' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0x76, /* 01110110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 118 0x76 'v' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x6c, /* 01101100 */
+		0x38, /* 00111000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 119 0x77 'w' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xd6, /* 11010110 */
+		0xd6, /* 11010110 */
+		0xd6, /* 11010110 */
+		0xfe, /* 11111110 */
+		0x6c, /* 01101100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 120 0x78 'x' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xc6, /* 11000110 */
+		0x6c, /* 01101100 */
+		0x38, /* 00111000 */
+		0x38, /* 00111000 */
+		0x38, /* 00111000 */
+		0x6c, /* 01101100 */
+		0xc6, /* 11000110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 121 0x79 'y' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x7e, /* 01111110 */
+		0x06, /* 00000110 */
+		0x0c, /* 00001100 */
+		0xf8, /* 11111000 */
+		0x00, /* 00000000 */
+	}, { /* 122 0x7a 'z' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xfe, /* 11111110 */
+		0xcc, /* 11001100 */
+		0x18, /* 00011000 */
+		0x30, /* 00110000 */
+		0x60, /* 01100000 */
+		0xc6, /* 11000110 */
+		0xfe, /* 11111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 123 0x7b '{' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x0e, /* 00001110 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x70, /* 01110000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x0e, /* 00001110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 124 0x7c '|' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 125 0x7d '}' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x70, /* 01110000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x0e, /* 00001110 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x70, /* 01110000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 126 0x7e '~' */
+		0x00, /* 00000000 */
+		0x76, /* 01110110 */
+		0xdc, /* 11011100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 127 0x7f '' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x10, /* 00010000 */
+		0x38, /* 00111000 */
+		0x6c, /* 01101100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xfe, /* 11111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 128 0x80 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x3c, /* 00111100 */
+		0x66, /* 01100110 */
+		0xc2, /* 11000010 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc2, /* 11000010 */
+		0x66, /* 01100110 */
+		0x3c, /* 00111100 */
+		0x18, /* 00011000 */
+		0x70, /* 01110000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 129 0x81 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xcc, /* 11001100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0x76, /* 01110110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 130 0x82 '?' */
+		0x00, /* 00000000 */
+		0x0c, /* 00001100 */
+		0x18, /* 00011000 */
+		0x30, /* 00110000 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xfe, /* 11111110 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 131 0x83 '?' */
+		0x00, /* 00000000 */
+		0x10, /* 00010000 */
+		0x38, /* 00111000 */
+		0x6c, /* 01101100 */
+		0x00, /* 00000000 */
+		0x78, /* 01111000 */
+		0x0c, /* 00001100 */
+		0x7c, /* 01111100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0x76, /* 01110110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 132 0x84 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xcc, /* 11001100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x78, /* 01111000 */
+		0x0c, /* 00001100 */
+		0x7c, /* 01111100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0x76, /* 01110110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 133 0x85 '?' */
+		0x00, /* 00000000 */
+		0x60, /* 01100000 */
+		0x30, /* 00110000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x78, /* 01111000 */
+		0x0c, /* 00001100 */
+		0x7c, /* 01111100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0x76, /* 01110110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 134 0x86 '?' */
+		0x00, /* 00000000 */
+		0x38, /* 00111000 */
+		0x6c, /* 01101100 */
+		0x38, /* 00111000 */
+		0x00, /* 00000000 */
+		0x78, /* 01111000 */
+		0x0c, /* 00001100 */
+		0x7c, /* 01111100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0x76, /* 01110110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 135 0x87 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x18, /* 00011000 */
+		0x70, /* 01110000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 136 0x88 '?' */
+		0x00, /* 00000000 */
+		0x10, /* 00010000 */
+		0x38, /* 00111000 */
+		0x6c, /* 01101100 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xfe, /* 11111110 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 137 0x89 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xc6, /* 11000110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xfe, /* 11111110 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 138 0x8a '?' */
+		0x00, /* 00000000 */
+		0x60, /* 01100000 */
+		0x30, /* 00110000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xfe, /* 11111110 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 139 0x8b '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x66, /* 01100110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x38, /* 00111000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x3c, /* 00111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 140 0x8c '?' */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x3c, /* 00111100 */
+		0x66, /* 01100110 */
+		0x00, /* 00000000 */
+		0x38, /* 00111000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x3c, /* 00111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 141 0x8d '?' */
+		0x00, /* 00000000 */
+		0x60, /* 01100000 */
+		0x30, /* 00110000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x38, /* 00111000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x3c, /* 00111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 142 0x8e '?' */
+		0x00, /* 00000000 */
+		0xc6, /* 11000110 */
+		0x00, /* 00000000 */
+		0x10, /* 00010000 */
+		0x38, /* 00111000 */
+		0x6c, /* 01101100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xfe, /* 11111110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 143 0x8f '?' */
+		0x38, /* 00111000 */
+		0x6c, /* 01101100 */
+		0x38, /* 00111000 */
+		0x10, /* 00010000 */
+		0x38, /* 00111000 */
+		0x6c, /* 01101100 */
+		0xc6, /* 11000110 */
+		0xfe, /* 11111110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 144 0x90 '?' */
+		0x0c, /* 00001100 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0xfe, /* 11111110 */
+		0x66, /* 01100110 */
+		0x62, /* 01100010 */
+		0x68, /* 01101000 */
+		0x78, /* 01111000 */
+		0x68, /* 01101000 */
+		0x62, /* 01100010 */
+		0x66, /* 01100110 */
+		0xfe, /* 11111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 145 0x91 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xec, /* 11101100 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x7e, /* 01111110 */
+		0xd8, /* 11011000 */
+		0xd8, /* 11011000 */
+		0x6e, /* 01101110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 146 0x92 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x3e, /* 00111110 */
+		0x6c, /* 01101100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xfe, /* 11111110 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xce, /* 11001110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 147 0x93 '?' */
+		0x00, /* 00000000 */
+		0x10, /* 00010000 */
+		0x38, /* 00111000 */
+		0x6c, /* 01101100 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 148 0x94 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xc6, /* 11000110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 149 0x95 '?' */
+		0x00, /* 00000000 */
+		0x60, /* 01100000 */
+		0x30, /* 00110000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 150 0x96 '?' */
+		0x00, /* 00000000 */
+		0x30, /* 00110000 */
+		0x78, /* 01111000 */
+		0xcc, /* 11001100 */
+		0x00, /* 00000000 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0x76, /* 01110110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 151 0x97 '?' */
+		0x00, /* 00000000 */
+		0x60, /* 01100000 */
+		0x30, /* 00110000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0x76, /* 01110110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 152 0x98 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xc6, /* 11000110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x7e, /* 01111110 */
+		0x06, /* 00000110 */
+		0x0c, /* 00001100 */
+		0x78, /* 01111000 */
+		0x00, /* 00000000 */
+	}, { /* 153 0x99 '?' */
+		0x00, /* 00000000 */
+		0xc6, /* 11000110 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 154 0x9a '?' */
+		0x00, /* 00000000 */
+		0xc6, /* 11000110 */
+		0x00, /* 00000000 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 155 0x9b '?' */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 156 0x9c '?' */
+		0x00, /* 00000000 */
+		0x38, /* 00111000 */
+		0x6c, /* 01101100 */
+		0x64, /* 01100100 */
+		0x60, /* 01100000 */
+		0xf0, /* 11110000 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0xe6, /* 11100110 */
+		0xfc, /* 11111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 157 0x9d '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x3c, /* 00111100 */
+		0x18, /* 00011000 */
+		0x7e, /* 01111110 */
+		0x18, /* 00011000 */
+		0x7e, /* 01111110 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 158 0x9e '?' */
+		0x00, /* 00000000 */
+		0xf8, /* 11111000 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xf8, /* 11111000 */
+		0xc4, /* 11000100 */
+		0xcc, /* 11001100 */
+		0xde, /* 11011110 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xc6, /* 11000110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 159 0x9f '?' */
+		0x00, /* 00000000 */
+		0x0e, /* 00001110 */
+		0x1b, /* 00011011 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x7e, /* 01111110 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0xd8, /* 11011000 */
+		0x70, /* 01110000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 160 0xa0 '?' */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x30, /* 00110000 */
+		0x60, /* 01100000 */
+		0x00, /* 00000000 */
+		0x78, /* 01111000 */
+		0x0c, /* 00001100 */
+		0x7c, /* 01111100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0x76, /* 01110110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 161 0xa1 '?' */
+		0x00, /* 00000000 */
+		0x0c, /* 00001100 */
+		0x18, /* 00011000 */
+		0x30, /* 00110000 */
+		0x00, /* 00000000 */
+		0x38, /* 00111000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x3c, /* 00111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 162 0xa2 '?' */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x30, /* 00110000 */
+		0x60, /* 01100000 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 163 0xa3 '?' */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x30, /* 00110000 */
+		0x60, /* 01100000 */
+		0x00, /* 00000000 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0x76, /* 01110110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 164 0xa4 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x76, /* 01110110 */
+		0xdc, /* 11011100 */
+		0x00, /* 00000000 */
+		0xdc, /* 11011100 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 165 0xa5 '?' */
+		0x76, /* 01110110 */
+		0xdc, /* 11011100 */
+		0x00, /* 00000000 */
+		0xc6, /* 11000110 */
+		0xe6, /* 11100110 */
+		0xf6, /* 11110110 */
+		0xfe, /* 11111110 */
+		0xde, /* 11011110 */
+		0xce, /* 11001110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 166 0xa6 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x3c, /* 00111100 */
+		0x6c, /* 01101100 */
+		0x6c, /* 01101100 */
+		0x3e, /* 00111110 */
+		0x00, /* 00000000 */
+		0x7e, /* 01111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 167 0xa7 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x38, /* 00111000 */
+		0x6c, /* 01101100 */
+		0x6c, /* 01101100 */
+		0x38, /* 00111000 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 168 0xa8 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x00, /* 00000000 */
+		0x30, /* 00110000 */
+		0x30, /* 00110000 */
+		0x60, /* 01100000 */
+		0xc0, /* 11000000 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x7c, /* 01111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 169 0xa9 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xfe, /* 11111110 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 170 0xaa '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xfe, /* 11111110 */
+		0x06, /* 00000110 */
+		0x06, /* 00000110 */
+		0x06, /* 00000110 */
+		0x06, /* 00000110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 171 0xab '?' */
+		0x00, /* 00000000 */
+		0x60, /* 01100000 */
+		0xe0, /* 11100000 */
+		0x62, /* 01100010 */
+		0x66, /* 01100110 */
+		0x6c, /* 01101100 */
+		0x18, /* 00011000 */
+		0x30, /* 00110000 */
+		0x60, /* 01100000 */
+		0xdc, /* 11011100 */
+		0x86, /* 10000110 */
+		0x0c, /* 00001100 */
+		0x18, /* 00011000 */
+		0x3e, /* 00111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 172 0xac '?' */
+		0x00, /* 00000000 */
+		0x60, /* 01100000 */
+		0xe0, /* 11100000 */
+		0x62, /* 01100010 */
+		0x66, /* 01100110 */
+		0x6c, /* 01101100 */
+		0x18, /* 00011000 */
+		0x30, /* 00110000 */
+		0x66, /* 01100110 */
+		0xce, /* 11001110 */
+		0x9a, /* 10011010 */
+		0x3f, /* 00111111 */
+		0x06, /* 00000110 */
+		0x06, /* 00000110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 173 0xad '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x3c, /* 00111100 */
+		0x3c, /* 00111100 */
+		0x3c, /* 00111100 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 174 0xae '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x36, /* 00110110 */
+		0x6c, /* 01101100 */
+		0xd8, /* 11011000 */
+		0x6c, /* 01101100 */
+		0x36, /* 00110110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 175 0xaf '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xd8, /* 11011000 */
+		0x6c, /* 01101100 */
+		0x36, /* 00110110 */
+		0x6c, /* 01101100 */
+		0xd8, /* 11011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 176 0xb0 '?' */
+		0x11, /* 00010001 */
+		0x44, /* 01000100 */
+		0x11, /* 00010001 */
+		0x44, /* 01000100 */
+		0x11, /* 00010001 */
+		0x44, /* 01000100 */
+		0x11, /* 00010001 */
+		0x44, /* 01000100 */
+		0x11, /* 00010001 */
+		0x44, /* 01000100 */
+		0x11, /* 00010001 */
+		0x44, /* 01000100 */
+		0x11, /* 00010001 */
+		0x44, /* 01000100 */
+		0x11, /* 00010001 */
+		0x44, /* 01000100 */
+	}, { /* 177 0xb1 '?' */
+		0x55, /* 01010101 */
+		0xaa, /* 10101010 */
+		0x55, /* 01010101 */
+		0xaa, /* 10101010 */
+		0x55, /* 01010101 */
+		0xaa, /* 10101010 */
+		0x55, /* 01010101 */
+		0xaa, /* 10101010 */
+		0x55, /* 01010101 */
+		0xaa, /* 10101010 */
+		0x55, /* 01010101 */
+		0xaa, /* 10101010 */
+		0x55, /* 01010101 */
+		0xaa, /* 10101010 */
+		0x55, /* 01010101 */
+		0xaa, /* 10101010 */
+	}, { /* 178 0xb2 '?' */
+		0xdd, /* 11011101 */
+		0x77, /* 01110111 */
+		0xdd, /* 11011101 */
+		0x77, /* 01110111 */
+		0xdd, /* 11011101 */
+		0x77, /* 01110111 */
+		0xdd, /* 11011101 */
+		0x77, /* 01110111 */
+		0xdd, /* 11011101 */
+		0x77, /* 01110111 */
+		0xdd, /* 11011101 */
+		0x77, /* 01110111 */
+		0xdd, /* 11011101 */
+		0x77, /* 01110111 */
+		0xdd, /* 11011101 */
+		0x77, /* 01110111 */
+	}, { /* 179 0xb3 '?' */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+	}, { /* 180 0xb4 '?' */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0xf8, /* 11111000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+	}, { /* 181 0xb5 '?' */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0xf8, /* 11111000 */
+		0x18, /* 00011000 */
+		0xf8, /* 11111000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+	}, { /* 182 0xb6 '?' */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0xf6, /* 11110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+	}, { /* 183 0xb7 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xfe, /* 11111110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+	}, { /* 184 0xb8 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xf8, /* 11111000 */
+		0x18, /* 00011000 */
+		0xf8, /* 11111000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+	}, { /* 185 0xb9 '?' */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0xf6, /* 11110110 */
+		0x06, /* 00000110 */
+		0xf6, /* 11110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+	}, { /* 186 0xba '?' */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+	}, { /* 187 0xbb '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xfe, /* 11111110 */
+		0x06, /* 00000110 */
+		0xf6, /* 11110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+	}, { /* 188 0xbc '?' */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0xf6, /* 11110110 */
+		0x06, /* 00000110 */
+		0xfe, /* 11111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 189 0xbd '?' */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0xfe, /* 11111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 190 0xbe '?' */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0xf8, /* 11111000 */
+		0x18, /* 00011000 */
+		0xf8, /* 11111000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 191 0xbf '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xf8, /* 11111000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+	}, { /* 192 0xc0 '?' */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x1f, /* 00011111 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 193 0xc1 '?' */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0xff, /* 11111111 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 194 0xc2 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xff, /* 11111111 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+	}, { /* 195 0xc3 '?' */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x1f, /* 00011111 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+	}, { /* 196 0xc4 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xff, /* 11111111 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 197 0xc5 '?' */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0xff, /* 11111111 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+	}, { /* 198 0xc6 '?' */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x1f, /* 00011111 */
+		0x18, /* 00011000 */
+		0x1f, /* 00011111 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+	}, { /* 199 0xc7 '?' */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x37, /* 00110111 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+	}, { /* 200 0xc8 '?' */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x37, /* 00110111 */
+		0x30, /* 00110000 */
+		0x3f, /* 00111111 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 201 0xc9 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x3f, /* 00111111 */
+		0x30, /* 00110000 */
+		0x37, /* 00110111 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+	}, { /* 202 0xca '?' */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0xf7, /* 11110111 */
+		0x00, /* 00000000 */
+		0xff, /* 11111111 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 203 0xcb '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xff, /* 11111111 */
+		0x00, /* 00000000 */
+		0xf7, /* 11110111 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+	}, { /* 204 0xcc '?' */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x37, /* 00110111 */
+		0x30, /* 00110000 */
+		0x37, /* 00110111 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+	}, { /* 205 0xcd '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xff, /* 11111111 */
+		0x00, /* 00000000 */
+		0xff, /* 11111111 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 206 0xce '?' */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0xf7, /* 11110111 */
+		0x00, /* 00000000 */
+		0xf7, /* 11110111 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+	}, { /* 207 0xcf '?' */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0xff, /* 11111111 */
+		0x00, /* 00000000 */
+		0xff, /* 11111111 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 208 0xd0 '?' */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0xff, /* 11111111 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 209 0xd1 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xff, /* 11111111 */
+		0x00, /* 00000000 */
+		0xff, /* 11111111 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+	}, { /* 210 0xd2 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xff, /* 11111111 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+	}, { /* 211 0xd3 '?' */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x3f, /* 00111111 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 212 0xd4 '?' */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x1f, /* 00011111 */
+		0x18, /* 00011000 */
+		0x1f, /* 00011111 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 213 0xd5 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x1f, /* 00011111 */
+		0x18, /* 00011000 */
+		0x1f, /* 00011111 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+	}, { /* 214 0xd6 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x3f, /* 00111111 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+	}, { /* 215 0xd7 '?' */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0xff, /* 11111111 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+	}, { /* 216 0xd8 '?' */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0xff, /* 11111111 */
+		0x18, /* 00011000 */
+		0xff, /* 11111111 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+	}, { /* 217 0xd9 '?' */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0xf8, /* 11111000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 218 0xda '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x1f, /* 00011111 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+	}, { /* 219 0xdb '?' */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+	}, { /* 220 0xdc '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+	}, { /* 221 0xdd '?' */
+		0xf0, /* 11110000 */
+		0xf0, /* 11110000 */
+		0xf0, /* 11110000 */
+		0xf0, /* 11110000 */
+		0xf0, /* 11110000 */
+		0xf0, /* 11110000 */
+		0xf0, /* 11110000 */
+		0xf0, /* 11110000 */
+		0xf0, /* 11110000 */
+		0xf0, /* 11110000 */
+		0xf0, /* 11110000 */
+		0xf0, /* 11110000 */
+		0xf0, /* 11110000 */
+		0xf0, /* 11110000 */
+		0xf0, /* 11110000 */
+		0xf0, /* 11110000 */
+	}, { /* 222 0xde '?' */
+		0x0f, /* 00001111 */
+		0x0f, /* 00001111 */
+		0x0f, /* 00001111 */
+		0x0f, /* 00001111 */
+		0x0f, /* 00001111 */
+		0x0f, /* 00001111 */
+		0x0f, /* 00001111 */
+		0x0f, /* 00001111 */
+		0x0f, /* 00001111 */
+		0x0f, /* 00001111 */
+		0x0f, /* 00001111 */
+		0x0f, /* 00001111 */
+		0x0f, /* 00001111 */
+		0x0f, /* 00001111 */
+		0x0f, /* 00001111 */
+		0x0f, /* 00001111 */
+	}, { /* 223 0xdf '?' */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0xff, /* 11111111 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 224 0xe0 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x76, /* 01110110 */
+		0xdc, /* 11011100 */
+		0xd8, /* 11011000 */
+		0xd8, /* 11011000 */
+		0xd8, /* 11011000 */
+		0xdc, /* 11011100 */
+		0x76, /* 01110110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 225 0xe1 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x78, /* 01111000 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xcc, /* 11001100 */
+		0xd8, /* 11011000 */
+		0xcc, /* 11001100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xcc, /* 11001100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 226 0xe2 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xfe, /* 11111110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0xc0, /* 11000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 227 0xe3 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xfe, /* 11111110 */
+		0x6c, /* 01101100 */
+		0x6c, /* 01101100 */
+		0x6c, /* 01101100 */
+		0x6c, /* 01101100 */
+		0x6c, /* 01101100 */
+		0x6c, /* 01101100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 228 0xe4 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xfe, /* 11111110 */
+		0xc6, /* 11000110 */
+		0x60, /* 01100000 */
+		0x30, /* 00110000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x30, /* 00110000 */
+		0x60, /* 01100000 */
+		0xc6, /* 11000110 */
+		0xfe, /* 11111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 229 0xe5 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7e, /* 01111110 */
+		0xd8, /* 11011000 */
+		0xd8, /* 11011000 */
+		0xd8, /* 11011000 */
+		0xd8, /* 11011000 */
+		0xd8, /* 11011000 */
+		0x70, /* 01110000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 230 0xe6 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x7c, /* 01111100 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0xc0, /* 11000000 */
+		0x00, /* 00000000 */
+	}, { /* 231 0xe7 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x76, /* 01110110 */
+		0xdc, /* 11011100 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 232 0xe8 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7e, /* 01111110 */
+		0x18, /* 00011000 */
+		0x3c, /* 00111100 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x3c, /* 00111100 */
+		0x18, /* 00011000 */
+		0x7e, /* 01111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 233 0xe9 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x38, /* 00111000 */
+		0x6c, /* 01101100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xfe, /* 11111110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x6c, /* 01101100 */
+		0x38, /* 00111000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 234 0xea '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x38, /* 00111000 */
+		0x6c, /* 01101100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x6c, /* 01101100 */
+		0x6c, /* 01101100 */
+		0x6c, /* 01101100 */
+		0x6c, /* 01101100 */
+		0xee, /* 11101110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 235 0xeb '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x1e, /* 00011110 */
+		0x30, /* 00110000 */
+		0x18, /* 00011000 */
+		0x0c, /* 00001100 */
+		0x3e, /* 00111110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x66, /* 01100110 */
+		0x3c, /* 00111100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 236 0xec '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7e, /* 01111110 */
+		0xdb, /* 11011011 */
+		0xdb, /* 11011011 */
+		0xdb, /* 11011011 */
+		0x7e, /* 01111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 237 0xed '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x03, /* 00000011 */
+		0x06, /* 00000110 */
+		0x7e, /* 01111110 */
+		0xdb, /* 11011011 */
+		0xdb, /* 11011011 */
+		0xf3, /* 11110011 */
+		0x7e, /* 01111110 */
+		0x60, /* 01100000 */
+		0xc0, /* 11000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 238 0xee '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x1c, /* 00011100 */
+		0x30, /* 00110000 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0x7c, /* 01111100 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0x60, /* 01100000 */
+		0x30, /* 00110000 */
+		0x1c, /* 00011100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 239 0xef '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7c, /* 01111100 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0xc6, /* 11000110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 240 0xf0 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xfe, /* 11111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xfe, /* 11111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0xfe, /* 11111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 241 0xf1 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x7e, /* 01111110 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7e, /* 01111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 242 0xf2 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x30, /* 00110000 */
+		0x18, /* 00011000 */
+		0x0c, /* 00001100 */
+		0x06, /* 00000110 */
+		0x0c, /* 00001100 */
+		0x18, /* 00011000 */
+		0x30, /* 00110000 */
+		0x00, /* 00000000 */
+		0x7e, /* 01111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 243 0xf3 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x0c, /* 00001100 */
+		0x18, /* 00011000 */
+		0x30, /* 00110000 */
+		0x60, /* 01100000 */
+		0x30, /* 00110000 */
+		0x18, /* 00011000 */
+		0x0c, /* 00001100 */
+		0x00, /* 00000000 */
+		0x7e, /* 01111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 244 0xf4 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x0e, /* 00001110 */
+		0x1b, /* 00011011 */
+		0x1b, /* 00011011 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+	}, { /* 245 0xf5 '?' */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0xd8, /* 11011000 */
+		0xd8, /* 11011000 */
+		0xd8, /* 11011000 */
+		0x70, /* 01110000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 246 0xf6 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x7e, /* 01111110 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 247 0xf7 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x76, /* 01110110 */
+		0xdc, /* 11011100 */
+		0x00, /* 00000000 */
+		0x76, /* 01110110 */
+		0xdc, /* 11011100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 248 0xf8 '?' */
+		0x00, /* 00000000 */
+		0x38, /* 00111000 */
+		0x6c, /* 01101100 */
+		0x6c, /* 01101100 */
+		0x38, /* 00111000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 249 0xf9 '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 250 0xfa '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x18, /* 00011000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 251 0xfb '?' */
+		0x00, /* 00000000 */
+		0x0f, /* 00001111 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0x0c, /* 00001100 */
+		0xec, /* 11101100 */
+		0x6c, /* 01101100 */
+		0x6c, /* 01101100 */
+		0x3c, /* 00111100 */
+		0x1c, /* 00011100 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 252 0xfc '?' */
+		0x00, /* 00000000 */
+		0x6c, /* 01101100 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x36, /* 00110110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 253 0xfd '?' */
+		0x00, /* 00000000 */
+		0x3c, /* 00111100 */
+		0x66, /* 01100110 */
+		0x0c, /* 00001100 */
+		0x18, /* 00011000 */
+		0x32, /* 00110010 */
+		0x7e, /* 01111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 254 0xfe '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x7e, /* 01111110 */
+		0x7e, /* 01111110 */
+		0x7e, /* 01111110 */
+		0x7e, /* 01111110 */
+		0x7e, /* 01111110 */
+		0x7e, /* 01111110 */
+		0x7e, /* 01111110 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	}, { /* 255 0xff '?' */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+		0x00, /* 00000000 */
+	},
+};
Index: src/pc80/vga/vga_palette.c
===================================================================
--- src/pc80/vga/vga_palette.c	(revision 0)
+++ src/pc80/vga/vga_palette.c	(revision 0)
@@ -0,0 +1,261 @@
+/*
+ * Basic palette.
+ */
+struct palette {
+        unsigned char red;
+        unsigned char green;
+        unsigned char blue;
+};
+
+static const struct palette
+default_vga_palette[0x100] = {
+        { 0x00, 0x00, 0x00},
+        { 0x00, 0x00, 0x2A},
+        { 0x00, 0x2A, 0x00},
+        { 0x00, 0x2A, 0x2A},
+        { 0x2A, 0x00, 0x00},
+        { 0x2A, 0x00, 0x2A},
+        { 0x2A, 0x15, 0x00},
+        { 0x2A, 0x2A, 0x2A},
+        { 0x15, 0x15, 0x15},
+        { 0x15, 0x15, 0x3F},
+        { 0x15, 0x3F, 0x15},
+        { 0x15, 0x3F, 0x3F},
+        { 0x3F, 0x15, 0x15},
+        { 0x3F, 0x15, 0x3F},
+        { 0x3F, 0x3F, 0x15},
+        { 0x3F, 0x3F, 0x3F},
+        { 0x00, 0x00, 0x00},
+        { 0x05, 0x05, 0x05},
+        { 0x08, 0x08, 0x08},
+        { 0x0B, 0x0B, 0x0B},
+        { 0x0E, 0x0E, 0x0E},
+        { 0x11, 0x11, 0x11},
+        { 0x16, 0x16, 0x16},
+        { 0x18, 0x18, 0x18},
+        { 0x1C, 0x1C, 0x1C},
+        { 0x20, 0x20, 0x20},
+        { 0x24, 0x24, 0x24},
+        { 0x28, 0x28, 0x28},
+        { 0x2D, 0x2D, 0x2D},
+        { 0x32, 0x32, 0x32},
+        { 0x38, 0x38, 0x38},
+        { 0x3F, 0x3F, 0x3F},
+        { 0x00, 0x00, 0x3F},
+        { 0x20, 0x00, 0x3F},
+        { 0x1F, 0x00, 0x3F},
+        { 0x2F, 0x00, 0x3F},
+        { 0x3F, 0x00, 0x3F},
+        { 0x3F, 0x00, 0x2F},
+        { 0x3F, 0x00, 0x1F},
+        { 0x3F, 0x00, 0x20},
+        { 0x3F, 0x00, 0x00},
+        { 0x3F, 0x20, 0x00},
+        { 0x3F, 0x1F, 0x00},
+        { 0x3F, 0x2F, 0x00},
+        { 0x3F, 0x3F, 0x00},
+        { 0x2F, 0x3F, 0x00},
+        { 0x1F, 0x3F, 0x00},
+        { 0x20, 0x3F, 0x00},
+        { 0x00, 0x3F, 0x00},
+        { 0x00, 0x3F, 0x20},
+        { 0x00, 0x3F, 0x1F},
+        { 0x00, 0x3F, 0x2F},
+        { 0x00, 0x3F, 0x3F},
+        { 0x00, 0x2F, 0x3F},
+        { 0x00, 0x1F, 0x3F},
+        { 0x00, 0x20, 0x3F},
+        { 0x1F, 0x1F, 0x3F},
+        { 0x27, 0x1F, 0x3F},
+        { 0x2F, 0x1F, 0x3F},
+        { 0x37, 0x1F, 0x3F},
+        { 0x3F, 0x1F, 0x3F},
+        { 0x3F, 0x1F, 0x37},
+        { 0x3F, 0x1F, 0x2F},
+        { 0x3F, 0x1F, 0x27},
+        { 0x3F, 0x1F, 0x1F},
+        { 0x3F, 0x27, 0x1F},
+        { 0x3F, 0x2F, 0x1F},
+        { 0x3F, 0x37, 0x1F},
+        { 0x3F, 0x3F, 0x1F},
+        { 0x37, 0x3F, 0x1F},
+        { 0x2F, 0x3F, 0x1F},
+        { 0x27, 0x3F, 0x1F},
+        { 0x1F, 0x3F, 0x1F},
+        { 0x1F, 0x3F, 0x27},
+        { 0x1F, 0x3F, 0x2F},
+        { 0x1F, 0x3F, 0x37},
+        { 0x1F, 0x3F, 0x3F},
+        { 0x1F, 0x37, 0x3F},
+        { 0x1F, 0x2F, 0x3F},
+        { 0x1F, 0x27, 0x3F},
+        { 0x2D, 0x2D, 0x3F},
+        { 0x31, 0x2D, 0x3F},
+        { 0x36, 0x2D, 0x3F},
+        { 0x3A, 0x2D, 0x3F},
+        { 0x3F, 0x2D, 0x3F},
+        { 0x3F, 0x2D, 0x3A},
+        { 0x3F, 0x2D, 0x36},
+        { 0x3F, 0x2D, 0x31},
+        { 0x3F, 0x2D, 0x2D},
+        { 0x3F, 0x31, 0x2D},
+        { 0x3F, 0x36, 0x2D},
+        { 0x3F, 0x3A, 0x2D},
+        { 0x3F, 0x3F, 0x2D},
+        { 0x3A, 0x3F, 0x2D},
+        { 0x36, 0x3F, 0x2D},
+        { 0x31, 0x3F, 0x2D},
+        { 0x2D, 0x3F, 0x2D},
+        { 0x2D, 0x3F, 0x31},
+        { 0x2D, 0x3F, 0x36},
+        { 0x2D, 0x3F, 0x3A},
+        { 0x2D, 0x3F, 0x3F},
+        { 0x2D, 0x3A, 0x3F},
+        { 0x2D, 0x36, 0x3F},
+        { 0x2D, 0x31, 0x3F},
+        { 0x00, 0x00, 0x1C},
+        { 0x07, 0x00, 0x1C},
+        { 0x0E, 0x00, 0x1C},
+        { 0x15, 0x00, 0x1C},
+        { 0x1C, 0x00, 0x1C},
+        { 0x1C, 0x00, 0x15},
+        { 0x1C, 0x00, 0x0E},
+        { 0x1C, 0x00, 0x07},
+        { 0x1C, 0x00, 0x00},
+        { 0x1C, 0x07, 0x00},
+        { 0x1C, 0x0E, 0x00},
+        { 0x1C, 0x15, 0x00},
+        { 0x1C, 0x1C, 0x00},
+        { 0x15, 0x1C, 0x00},
+        { 0x0E, 0x1C, 0x00},
+        { 0x07, 0x1C, 0x00},
+        { 0x00, 0x1C, 0x00},
+        { 0x00, 0x1C, 0x07},
+        { 0x00, 0x1C, 0x0E},
+        { 0x00, 0x1C, 0x15},
+        { 0x00, 0x1C, 0x1C},
+        { 0x00, 0x15, 0x1C},
+        { 0x00, 0x0E, 0x1C},
+        { 0x00, 0x07, 0x1C},
+        { 0x0E, 0x0E, 0x1C},
+        { 0x11, 0x0E, 0x1C},
+        { 0x15, 0x0E, 0x1C},
+        { 0x18, 0x0E, 0x1C},
+        { 0x1C, 0x0E, 0x1C},
+        { 0x1C, 0x0E, 0x18},
+        { 0x1C, 0x0E, 0x15},
+        { 0x1C, 0x0E, 0x11},
+        { 0x1C, 0x0E, 0x0E},
+        { 0x1C, 0x11, 0x0E},
+        { 0x1C, 0x15, 0x0E},
+        { 0x1C, 0x18, 0x0E},
+        { 0x1C, 0x1C, 0x0E},
+        { 0x18, 0x1C, 0x0E},
+        { 0x15, 0x1C, 0x0E},
+        { 0x11, 0x1C, 0x0E},
+        { 0x0E, 0x1C, 0x0E},
+        { 0x0E, 0x1C, 0x11},
+        { 0x0E, 0x1C, 0x15},
+        { 0x0E, 0x1C, 0x18},
+        { 0x0E, 0x1C, 0x1C},
+        { 0x0E, 0x18, 0x1C},
+        { 0x0E, 0x15, 0x1C},
+        { 0x0E, 0x11, 0x1C},
+        { 0x16, 0x16, 0x1C},
+        { 0x16, 0x16, 0x1C},
+        { 0x18, 0x16, 0x1C},
+        { 0x1A, 0x16, 0x1C},
+        { 0x1C, 0x16, 0x1C},
+        { 0x1C, 0x16, 0x1A},
+        { 0x1C, 0x16, 0x18},
+        { 0x1C, 0x16, 0x16},
+        { 0x1C, 0x16, 0x16},
+        { 0x1C, 0x16, 0x16},
+        { 0x1C, 0x18, 0x16},
+        { 0x1C, 0x1A, 0x16},
+        { 0x1C, 0x1C, 0x16},
+        { 0x1A, 0x1C, 0x16},
+        { 0x18, 0x1C, 0x16},
+        { 0x16, 0x1C, 0x16},
+        { 0x16, 0x1C, 0x16},
+        { 0x16, 0x1C, 0x16},
+        { 0x16, 0x1C, 0x18},
+        { 0x16, 0x1C, 0x1A},
+        { 0x16, 0x1C, 0x1C},
+        { 0x16, 0x1A, 0x1C},
+        { 0x16, 0x18, 0x1C},
+        { 0x16, 0x16, 0x1C},
+        { 0x00, 0x00, 0x20},
+        { 0x04, 0x00, 0x20},
+        { 0x08, 0x00, 0x20},
+        { 0x0C, 0x00, 0x20},
+        { 0x20, 0x00, 0x20},
+        { 0x20, 0x00, 0x0C},
+        { 0x20, 0x00, 0x08},
+        { 0x20, 0x00, 0x04},
+        { 0x20, 0x00, 0x00},
+        { 0x20, 0x04, 0x00},
+        { 0x20, 0x08, 0x00},
+        { 0x20, 0x0C, 0x00},
+        { 0x20, 0x20, 0x00},
+        { 0x0C, 0x20, 0x00},
+        { 0x08, 0x20, 0x00},
+        { 0x04, 0x20, 0x00},
+        { 0x00, 0x20, 0x00},
+        { 0x00, 0x20, 0x04},
+        { 0x00, 0x20, 0x08},
+        { 0x00, 0x20, 0x0C},
+        { 0x00, 0x20, 0x20},
+        { 0x00, 0x0C, 0x20},
+        { 0x00, 0x08, 0x20},
+        { 0x00, 0x04, 0x20},
+        { 0x08, 0x08, 0x20},
+        { 0x0A, 0x08, 0x20},
+        { 0x0C, 0x08, 0x20},
+        { 0x0E, 0x08, 0x20},
+        { 0x20, 0x08, 0x20},
+        { 0x20, 0x08, 0x0E},
+        { 0x20, 0x08, 0x0C},
+        { 0x20, 0x08, 0x0A},
+        { 0x20, 0x08, 0x08},
+        { 0x20, 0x0A, 0x08},
+        { 0x20, 0x0C, 0x08},
+        { 0x20, 0x0E, 0x08},
+        { 0x20, 0x20, 0x08},
+        { 0x0E, 0x20, 0x08},
+        { 0x0C, 0x20, 0x08},
+        { 0x0A, 0x20, 0x08},
+        { 0x08, 0x20, 0x08},
+        { 0x08, 0x20, 0x0A},
+        { 0x08, 0x20, 0x0C},
+        { 0x08, 0x20, 0x0E},
+        { 0x08, 0x20, 0x20},
+        { 0x08, 0x0E, 0x20},
+        { 0x08, 0x0C, 0x20},
+        { 0x08, 0x0A, 0x20},
+        { 0x0B, 0x0B, 0x20},
+        { 0x0C, 0x0B, 0x20},
+        { 0x0D, 0x0B, 0x20},
+        { 0x0F, 0x0B, 0x20},
+        { 0x20, 0x0B, 0x20},
+        { 0x20, 0x0B, 0x0F},
+        { 0x20, 0x0B, 0x0D},
+        { 0x20, 0x0B, 0x0C},
+        { 0x20, 0x0B, 0x0B},
+        { 0x20, 0x0C, 0x0B},
+        { 0x20, 0x0D, 0x0B},
+        { 0x20, 0x0F, 0x0B},
+        { 0x20, 0x20, 0x0B},
+        { 0x0F, 0x20, 0x0B},
+        { 0x0D, 0x20, 0x0B},
+        { 0x0C, 0x20, 0x0B},
+        { 0x0B, 0x20, 0x0B},
+        { 0x0B, 0x20, 0x0C},
+        { 0x0B, 0x20, 0x0D},
+        { 0x0B, 0x20, 0x0F},
+        { 0x0B, 0x20, 0x20},
+        { 0x0B, 0x0F, 0x20},
+        { 0x0B, 0x0D, 0x20},
+        { 0x0B, 0x0C, 0x20},
+        /* Pad with NULL */
+};
Index: src/pc80/vga/vga.c
===================================================================
--- src/pc80/vga/vga.c	(revision 0)
+++ src/pc80/vga/vga.c	(revision 0)
@@ -0,0 +1,328 @@
+/*
+ * Copyright (C)  2007-2009  Luc Verhaegen <libv at skynet.be>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <pc80/vga.h>
+#include <pc80/vga_io.h>
+
+#include <string.h>
+
+/*
+ * pci io enable should've happened before
+ */
+void
+vga_io_init(void)
+{
+	vga_enable_mask(0x01, 0x01);
+
+	/* cr io is at 0x3D4/0x3D5 */
+	vga_misc_mask(0x01, 0x01);
+
+	/* clear cr0-7 protection */
+	vga_cr_mask(0x11, 0x00, 0x80);
+}
+
+/*
+ *
+ */
+static void
+vga_fb_init(void)
+{
+	vga_sr_write(0x02, 0x03);
+	vga_sr_write(0x03, 0x00);
+	vga_sr_write(0x04, 0x02); /* access all 256kB */
+
+	vga_gr_write(0x00, 0x00);
+	vga_gr_write(0x01, 0x00);
+	vga_gr_write(0x02, 0x00);
+	vga_gr_write(0x03, 0x00);
+	vga_gr_write(0x04, 0x00);
+	vga_gr_write(0x05, 0x10);
+	vga_gr_write(0x06, 0x0E); /* map at 0xB8000 */
+	vga_gr_write(0x07, 0x00);
+	vga_gr_write(0x08, 0xFF);
+
+	/* o/e enable: ram enable */
+	vga_misc_mask(0x22, 0x22);
+}
+
+/*
+ *
+ */
+static void
+vga_fb_clear(void)
+{
+	memset((void *)VGA_FB, 0x00, 0x8000);
+}
+
+#include "vga_palette.c"
+
+/*
+ *
+ */
+static void
+vga_palette_init(void)
+{
+	unsigned int i;
+
+	/* set up attribute registers */
+	for (i = 0; i < 0x10; i++)
+		vga_ar_write(i, i);
+
+	vga_ar_write(0x10, 0x0c);
+	vga_ar_write(0x11, 0x00);
+	vga_ar_write(0x12, 0x0F);
+	vga_ar_write(0x13, 0x08);
+	vga_ar_write(0x14, 0x00);
+
+	vga_palette_disable();
+
+	/* load actual palette */
+	vga_dac_mask_write(0xFF);
+
+	for (i = 0; i < 0x100; i++) {
+		vga_dac_write_address(i);
+		vga_dac_data_write(default_vga_palette[i].red);
+		vga_dac_data_write(default_vga_palette[i].green);
+		vga_dac_data_write(default_vga_palette[i].blue);
+	}
+}
+
+/*
+ *
+ */
+static void
+vga_mode_set(int hdisplay, int hblankstart, int hsyncstart, int hsyncend,
+	     int hblankend, int htotal, int vdisplay, int vblankstart,
+	     int vsyncstart, int vsyncend, int vblankend, int vtotal,
+	     int stride)
+{
+	/* htotal: 2045 */
+	htotal /= 8;
+	htotal -= 5;
+	vga_cr_write(0x00, htotal);
+
+	/* hdisplay: 2041 */
+	hdisplay /= 8;
+	hdisplay -= 1;
+	vga_cr_write(0x01, hdisplay);
+
+	/* hblankstart: 2041 */
+	hblankstart /= 8;
+	hblankstart -= 1;
+	vga_cr_write(0x02, hblankstart);
+
+	/* hblankend: hblankstart + 512 */
+	hblankend /= 8;
+	hblankend -= 1;
+	vga_cr_mask(0x03, hblankend, 0x1F);
+	vga_cr_mask(0x05, hblankend << 2, 0x80);
+
+	/* hsyncstart: 255 * 8: 2040 */
+	vga_cr_write(0x04, hsyncstart / 8);
+
+	/* hsyncend: hsyncstart + 255 */
+	vga_cr_mask(0x05, hsyncend / 8, 0x1F);
+
+	/* vtotal: 1025 */
+	vtotal -= 2;
+	vga_cr_write(0x06, vtotal);
+	vga_cr_mask(0x07, vtotal >> 8, 0x01);
+	vga_cr_mask(0x07, vtotal >> 4, 0x20);
+
+	/* vdisplay: 1024 */
+	vdisplay -= 1;
+	vga_cr_write(0x12, vdisplay);
+	vga_cr_mask(0x07, vdisplay >> 7, 0x02);
+	vga_cr_mask(0x07, vdisplay >> 3, 0x40);
+
+	/* vblankstart: 1024 */
+	vblankstart -= 1;
+	vga_cr_write(0x15, vblankstart);
+	vga_cr_mask(0x07, vblankstart >> 5, 0x08);
+	vga_cr_mask(0x09, vblankstart >> 4, 0x20);
+
+	/* vblankend: vblankstart + 257 */
+	vblankend -= 1;
+	vga_cr_write(0x16, vblankend);
+
+	/* vsyncstart: 1023 */
+	vga_cr_write(0x10, vsyncstart);
+	vga_cr_mask(0x07, vsyncstart >> 6, 0x04);
+	vga_cr_mask(0x07, vsyncstart >> 2, 0x80);
+
+	/* vsyncend: vsyncstart + 16 */
+	vga_cr_mask(0x11, vsyncend, 0x0F);
+
+	/* stride */
+	vga_cr_write(0x13, stride / 8);
+
+	/* line compare */
+	vga_cr_write(0x18, 0xFF);
+	vga_cr_mask(0x07, 0x10, 0x10);
+	vga_cr_mask(0x09, 0x40, 0x40);
+
+	vga_misc_mask(0x44, 0xCC); /* set up clock: 27mhz and h/vsync */
+
+	vga_cr_mask(0x09, 0x00, 0x80); /* disable doublescan */
+}
+
+#include "vga_font_8x16.c"
+
+static void
+vga_font_8x16_load(void)
+{
+	unsigned char *p;
+	int i, j;
+	unsigned char sr2, sr4, gr5, gr6;
+
+#define height 16
+#define count 256
+
+	sr2 = vga_sr_read(0x02);
+	sr4 = vga_sr_read(0x04);
+	gr5 = vga_gr_read(0x05);
+	gr6 = vga_gr_read(0x06);
+
+	/* disable odd/even */
+	vga_sr_mask(0x04, 0x04, 0x04);
+	vga_gr_mask(0x05, 0x00, 0x10);
+	vga_gr_mask(0x06, 0x00, 0x02);
+
+	/* plane 2 */
+	vga_sr_write(0x02, 0x04);
+	p = (unsigned char *) VGA_FB;
+	for (i = 0; i < count; i++) {
+		for (j = 0; j < 32; j++) {
+			if (j < height)
+				*p = vga_font_8x16[i][j];
+			else
+				*p = 0x00;
+			p++;
+		}
+	}
+
+	vga_gr_write(0x06, gr6);
+	vga_gr_write(0x05, gr5);
+	vga_sr_write(0x04, sr4);
+	vga_sr_write(0x02, sr2);
+
+	/* set up font size */
+	vga_cr_mask(0x09, 16 - 1, 0x1F);
+}
+
+/*
+ *
+ */
+void
+vga_cursor_enable(int enable)
+{
+	if (enable)
+		vga_cr_mask(0x0A, 0x00, 0x20);
+	else
+		vga_cr_mask(0x0A, 0x20, 0x20);
+}
+
+/*
+ *
+ */
+void
+vga_cursor_reset(void)
+{
+	vga_cr_write(0x0A, 0x2E);
+	vga_cr_write(0x0B, 0x0E);
+	vga_cr_write(0x0E, 0x00);
+	vga_cr_write(0x0F, 0x00);
+}
+
+/*
+ *
+ */
+void
+vga_cursor_set(unsigned int line, unsigned int character)
+{
+	unsigned int offset = (80 * line + character) & 0xFFFF;
+
+	vga_cr_write(0x0A, 0x0E);
+	vga_cr_write(0x0B, 0x0E);
+	vga_cr_write(0x0E, offset >> 8);
+	vga_cr_write(0x0F, offset & 0xFF);
+}
+
+/*
+ *
+ */
+void
+vga_frame_set(unsigned int line, unsigned int character)
+{
+	unsigned int offset = (80 * line + character) & 0xFFFF;
+
+	vga_cr_write(0x0C, offset >> 8);
+	vga_cr_write(0x0D, offset & 0xFF);
+}
+
+/*
+ * simply fills a line with the given string.
+ */
+void
+vga_line_write(unsigned int line, const char *string)
+{
+	unsigned short *p = (unsigned short *) VGA_FB + (80 * line);
+	int i, len = strlen(string);
+
+	for (i = 0; i < 80; i++) {
+		if (i < len)
+			p[i] = 0x0F00 | string[i];
+		else
+			p[i] = 0x0F00;
+	}
+}
+
+/*
+ * set up everything to get a basic 80x25 textmode.
+ */
+void
+vga_textmode_init(void)
+{
+	vga_sr_write(0x00, 0x01); /* clear reset */
+	vga_sr_write(0x01, 0x00);
+
+	/* set up cr */
+	vga_cr_mask(0x03, 0x80, 0xE0);
+	vga_cr_mask(0x05, 0x00, 0x60);
+
+	vga_cr_write(0x08, 0x00);
+
+	vga_cr_write(0x14, 0x00); /* */
+
+	vga_cr_write(0x17, 0x23);
+
+	vga_palette_init();
+
+	vga_mode_set(640, 648, 680, 776, 792, 800,
+		     400, 407, 412, 414, 442, 449, 320);
+
+	vga_cursor_reset();
+	vga_frame_set(0, 0);
+
+	vga_fb_init();
+	vga_fb_clear();
+	vga_font_8x16_load();
+
+	vga_sr_mask(0x00, 0x02, 0x02); /* take us out of reset */
+	vga_cr_mask(0x17, 0x80, 0x80); /* sync! */
+}


More information about the coreboot mailing list