- Add SetConsoleCP api to the usetup, and make it call blue.sys in order to load font if needed.

- Fix a typo in WriteConsoleOutputCharacterW prototype.
- Add font.c to the blue.sys, move and add more definitions to a common header blue.h.
- Add Cyrillic font to blue.sys driver.

svn path=/trunk/; revision=31885
This commit is contained in:
Aleksey Bragin 2008-01-19 14:51:12 +00:00
parent f3e620fb65
commit c3c7285a9b
9 changed files with 502 additions and 36 deletions

View file

@ -520,4 +520,13 @@ CONSOLE_PrintTextXYN(
} }
} }
VOID
CONSOLE_SetFont(
IN ULONG LangId)
{
// It should look up what codepage should be used
// but for now we just pass the lang id there
SetConsoleOutputCP((UINT)LangId);
}
/* EOF */ /* EOF */

View file

@ -93,6 +93,10 @@ CONSOLE_PrintTextXYN(
IN SHORT len, IN SHORT len,
IN LPCSTR fmt, ...); IN LPCSTR fmt, ...);
VOID
CONSOLE_SetFont(
IN ULONG LangId);
VOID VOID
CONSOLE_SetCursorType( CONSOLE_SetCursorType(
IN BOOL bInsert, IN BOOL bInsert,

View file

@ -597,6 +597,8 @@ UpdateKBLayout(VOID)
static PAGE_NUMBER static PAGE_NUMBER
LanguagePage(PINPUT_RECORD Ir) LanguagePage(PINPUT_RECORD Ir)
{ {
DWORD LangId;
/* Initialize the computer settings list */ /* Initialize the computer settings list */
if (LanguageList == NULL) if (LanguageList == NULL)
{ {
@ -654,6 +656,10 @@ LanguagePage(PINPUT_RECORD Ir)
UpdateKBLayout(); UpdateKBLayout();
} }
// Load the font
LangId = wcstoul(SelectedLanguageId, NULL, 16);
CONSOLE_SetFont(LangId);
return INTRO_PAGE; return INTRO_PAGE;
} }
} }

View file

@ -484,4 +484,29 @@ SetConsoleTextAttribute(
return NT_SUCCESS(Status); return NT_SUCCESS(Status);
} }
BOOL WINAPI
SetConsoleOutputCP(
IN UINT wCodepage)
{
HANDLE hConsoleOutput;
IO_STATUS_BLOCK IoStatusBlock;
NTSTATUS Status;
hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
Status = NtDeviceIoControlFile(
hConsoleOutput,
NULL,
NULL,
NULL,
&IoStatusBlock,
IOCTL_CONSOLE_LOADFONT,
&wCodepage,
sizeof(ULONG),
NULL,
0);
return NT_SUCCESS(Status);
}
/* EOF */ /* EOF */

View file

@ -101,13 +101,18 @@ WriteConsoleOutputCharacterA(
OUT LPDWORD lpNumberOfCharsWritten); OUT LPDWORD lpNumberOfCharsWritten);
BOOL WINAPI BOOL WINAPI
WriteConsoleOutputCharacterA( WriteConsoleOutputCharacterW(
HANDLE hConsoleOutput, HANDLE hConsoleOutput,
IN LPCSTR lpCharacter, IN LPCSTR lpCharacter,
IN DWORD nLength, IN DWORD nLength,
IN COORD dwWriteCoord, IN COORD dwWriteCoord,
OUT LPDWORD lpNumberOfCharsWritten); OUT LPDWORD lpNumberOfCharsWritten);
BOOL WINAPI
SetConsoleOutputCP(
IN UINT wCodePageID
);
#endif /* _UTILS_CONSOLE_H_ */ #endif /* _UTILS_CONSOLE_H_ */
/* EOF */ /* EOF */

View file

@ -20,6 +20,7 @@ typedef struct _SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES;
#include <blue/ntddblue.h> #include <blue/ntddblue.h>
#include <ndk/inbvfuncs.h> #include <ndk/inbvfuncs.h>
//#include <intrin.h> //#include <intrin.h>
#include "blue.h"
#define NDEBUG #define NDEBUG
#include <debug.h> #include <debug.h>
@ -32,41 +33,6 @@ HalQueryDisplayOwnership(
VOID VOID
); );
/* DEFINITIONS ***************************************************************/
#define VIDMEM_BASE 0xb8000
#define CRTC_COMMAND ((PUCHAR)0x3d4)
#define CRTC_DATA ((PUCHAR)0x3d5)
#define CRTC_COLUMNS 0x01
#define CRTC_OVERFLOW 0x07
#define CRTC_ROWS 0x12
#define CRTC_SCANLINES 0x09
#define CRTC_CURSORSTART 0x0a
#define CRTC_CURSOREND 0x0b
#define CRTC_CURSORPOSHI 0x0e
#define CRTC_CURSORPOSLO 0x0f
#define ATTRC_WRITEREG ((PUCHAR)0x3c0)
#define ATTRC_READREG ((PUCHAR)0x3c1)
#define ATTRC_INPST1 ((PUCHAR)0x3da)
#define TAB_WIDTH 8
#define MISC (PUCHAR)0x3c2
#define SEQ (PUCHAR)0x3c4
#define SEQDATA (PUCHAR)0x3c5
#define CRTC (PUCHAR)0x3d4
#define CRTCDATA (PUCHAR)0x3d5
#define GRAPHICS (PUCHAR)0x3ce
#define GRAPHICSDATA (PUCHAR)0x3cf
#define ATTRIB (PUCHAR)0x3c0
#define STATUS (PUCHAR)0x3da
#define PELMASK (PUCHAR)0x3c6
#define PELINDEX (PUCHAR)0x3c8
#define PELDATA (PUCHAR)0x3c9
/* NOTES ******************************************************************/ /* NOTES ******************************************************************/
/* /*
* [[character][attribute]][[character][attribute]].... * [[character][attribute]][[character][attribute]]....
@ -758,6 +724,23 @@ ScrIoControl(PDEVICE_OBJECT DeviceObject,
} }
break; break;
case IOCTL_CONSOLE_LOADFONT:
{
ULONG LangId = (ULONG)*(PULONG)Irp->AssociatedIrp.SystemBuffer;
// Upload the cyrillic font into the fontgenerator, if needed
if (LangId == MAKELANGID(LANG_BULGARIAN, SUBLANG_DEFAULT) ||
LangId == MAKELANGID(LANG_RUSSIAN, SUBLANG_DEFAULT) ||
LangId == MAKELANGID(LANG_UKRAINIAN, SUBLANG_DEFAULT))
{
ScrLoadFontTable();
}
Irp->IoStatus.Information = 0;
Status = STATUS_SUCCESS;
}
break;
default: default:
Status = STATUS_NOT_IMPLEMENTED; Status = STATUS_NOT_IMPLEMENTED;
} }

View file

@ -0,0 +1,61 @@
/*
* PROJECT: ReactOS Setup Driver
* LICENSE: GPL - See COPYING in the top level directory
* FILE: drivers/setup/blue/font.h
* PURPOSE: Loading specific fonts into VGA
* PROGRAMMERS: Aleksey Bragin (aleksey@reactos.org)
*/
/* DEFINITIONS ***************************************************************/
#define VIDMEM_BASE 0xb8000
#define BITPLANE_BASE 0xa0000
#define CRTC_COMMAND ((PUCHAR)0x3d4)
#define CRTC_DATA ((PUCHAR)0x3d5)
#define CRTC_COLUMNS 0x01
#define CRTC_OVERFLOW 0x07
#define CRTC_ROWS 0x12
#define CRTC_SCANLINES 0x09
#define CRTC_CURSORSTART 0x0a
#define CRTC_CURSOREND 0x0b
#define CRTC_CURSORPOSHI 0x0e
#define CRTC_CURSORPOSLO 0x0f
#define SEQ_COMMAND ((PUCHAR)0x3c4)
#define SEQ_DATA ((PUCHAR)0x3c5)
#define GCT_COMMAND ((PUCHAR)0x3ce)
#define GCT_DATA ((PUCHAR)0x3cf)
/* SEQ regs numbers*/
#define SEQ_RESET 0x00
#define SEQ_ENABLE_WRT_PLANE 0x02
#define SEQ_MEM_MODE 0x04
/* GCT regs numbers */
#define GCT_READ_PLANE 0x04
#define GCT_RW_MODES 0x05
#define GCT_GRAPH_MODE 0x06
#define ATTRC_WRITEREG ((PUCHAR)0x3c0)
#define ATTRC_READREG ((PUCHAR)0x3c1)
#define ATTRC_INPST1 ((PUCHAR)0x3da)
#define TAB_WIDTH 8
#define MISC (PUCHAR)0x3c2
#define SEQ (PUCHAR)0x3c4
#define SEQDATA (PUCHAR)0x3c5
#define CRTC (PUCHAR)0x3d4
#define CRTCDATA (PUCHAR)0x3d5
#define GRAPHICS (PUCHAR)0x3ce
#define GRAPHICSDATA (PUCHAR)0x3cf
#define ATTRIB (PUCHAR)0x3c0
#define STATUS (PUCHAR)0x3da
#define PELMASK (PUCHAR)0x3c6
#define PELINDEX (PUCHAR)0x3c8
#define PELDATA (PUCHAR)0x3c9
VOID ScrLoadFontTable();

View file

@ -6,5 +6,6 @@
<library>ntoskrnl</library> <library>ntoskrnl</library>
<library>hal</library> <library>hal</library>
<file>blue.c</file> <file>blue.c</file>
<file>font.c</file>
<file>blue.rc</file> <file>blue.rc</file>
</module> </module>

View file

@ -0,0 +1,372 @@
/*
* PROJECT: ReactOS Setup Driver
* LICENSE: GPL - See COPYING in the top level directory
* FILE: drivers/setup/blue/font.c
* PURPOSE: Loading specific fonts into VGA
* PROGRAMMERS: Aleksey Bragin (aleksey@reactos.org)
*/
/* INCLUDES ***************************************************************/
#include <ntddk.h>
#include "blue.h"
#define NDEBUG
#include <debug.h>
VOID OpenBitPlane();
VOID CloseBitPlane();
VOID LoadFont(PBYTE Bitplane);
static UCHAR font8x8[2048];
/* FUNCTIONS ****************************************************************/
VOID
ScrLoadFontTable()
{
PHYSICAL_ADDRESS BaseAddress;
PBYTE Bitplane;
/* open bit plane for font table access */
OpenBitPlane();
/* get pointer to video memory */
BaseAddress.QuadPart = BITPLANE_BASE;
Bitplane = (PBYTE)MmMapIoSpace (BaseAddress, 0xFFFF, MmNonCached);
LoadFont(Bitplane);
MmUnmapIoSpace(Bitplane, 0xFFFF);
/* close bit plane */
CloseBitPlane();
}
/* PRIVATE FUNCTIONS *********************************************************/
/* Font-load specific funcs */
VOID
OpenBitPlane()
{
/* disable interrupts */
__asm__("cli\n\t");
/* sequence reg */
WRITE_PORT_UCHAR (SEQ_COMMAND, SEQ_RESET); WRITE_PORT_UCHAR (SEQ_DATA, 0x01);
WRITE_PORT_UCHAR (SEQ_COMMAND, SEQ_ENABLE_WRT_PLANE); WRITE_PORT_UCHAR (SEQ_DATA, 0x04);
WRITE_PORT_UCHAR (SEQ_COMMAND, SEQ_MEM_MODE); WRITE_PORT_UCHAR (SEQ_DATA, 0x07);
WRITE_PORT_UCHAR (SEQ_COMMAND, SEQ_RESET); WRITE_PORT_UCHAR (SEQ_DATA, 0x03);
/* graphic reg */
WRITE_PORT_UCHAR (GCT_COMMAND, GCT_READ_PLANE); WRITE_PORT_UCHAR (GCT_DATA, 0x02);
WRITE_PORT_UCHAR (GCT_COMMAND, GCT_RW_MODES); WRITE_PORT_UCHAR (GCT_DATA, 0x00);
WRITE_PORT_UCHAR (GCT_COMMAND, GCT_GRAPH_MODE); WRITE_PORT_UCHAR (GCT_DATA, 0x00);
/* enable interrupts */
__asm__("sti\n\t");
}
VOID
CloseBitPlane()
{
/* disable interrupts */
__asm__("cli\n\t");
/* sequence reg */
WRITE_PORT_UCHAR (SEQ_COMMAND, SEQ_RESET); WRITE_PORT_UCHAR (SEQ_DATA, 0x01);
WRITE_PORT_UCHAR (SEQ_COMMAND, SEQ_ENABLE_WRT_PLANE); WRITE_PORT_UCHAR (SEQ_DATA, 0x03);
WRITE_PORT_UCHAR (SEQ_COMMAND, SEQ_MEM_MODE); WRITE_PORT_UCHAR (SEQ_DATA, 0x03);
WRITE_PORT_UCHAR (SEQ_COMMAND, SEQ_RESET); WRITE_PORT_UCHAR (SEQ_DATA, 0x03);
/* graphic reg */
WRITE_PORT_UCHAR (GCT_COMMAND, GCT_READ_PLANE); WRITE_PORT_UCHAR (GCT_DATA, 0x00);
WRITE_PORT_UCHAR (GCT_COMMAND, GCT_RW_MODES); WRITE_PORT_UCHAR (GCT_DATA, 0x10);
WRITE_PORT_UCHAR (GCT_COMMAND, GCT_GRAPH_MODE); WRITE_PORT_UCHAR (GCT_DATA, 0x0e);
/* enable interrupts */
__asm__("sti\n\t");
}
VOID
LoadFont(PBYTE Bitplane)
{
UINT i,j;
for (i=0; i<256; i++)
{
for (j=0; j<8; j++)
{
*Bitplane = font8x8[i*8+j];
Bitplane++;
}
// padding
for (j=8; j<32; j++)
{
*Bitplane = 0;
Bitplane++;
}
}
}
/* This font was provided by ??? */
static UCHAR font8x8[2048] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7E,0x81,0xA5,0x81,0xBD,0x99,0x81,0x7E,
0x7E,0xFF,0xDB,0xFF,0xC3,0xE7,0xFF,0x7E,
0x6C,0xFE,0xFE,0xFE,0x7C,0x38,0x10,0x00,
0x10,0x38,0x7C,0xFE,0x7C,0x38,0x10,0x00,
0x38,0x7C,0x38,0xFE,0xFE,0x7C,0x38,0x7C,
0x10,0x10,0x38,0x7C,0xFE,0x7C,0x38,0x7C,
0x00,0x00,0x18,0x3C,0x3C,0x18,0x00,0x00,
0xFF,0xFF,0xE7,0xC3,0xC3,0xE7,0xFF,0xFF,
0x00,0x3C,0x66,0x42,0x42,0x66,0x3C,0x00,
0xFF,0xC3,0x99,0xBD,0xBD,0x99,0xC3,0xFF,
0x0F,0x07,0x0F,0x7D,0xCC,0xCC,0xCC,0x78,
0x3C,0x66,0x66,0x66,0x3C,0x18,0x7E,0x18,
0x3F,0x33,0x3F,0x30,0x30,0x70,0xF0,0xE0,
0x7F,0x63,0x7F,0x63,0x63,0x67,0xE6,0xC0,
0x99,0x5A,0x3C,0xE7,0xE7,0x3C,0x5A,0x99,
0x80,0xE0,0xF8,0xFE,0xF8,0xE0,0x80,0x00,
0x02,0x0E,0x3E,0xFE,0x3E,0x0E,0x02,0x00,
0x18,0x3C,0x7E,0x18,0x18,0x7E,0x3C,0x18,
0x66,0x66,0x66,0x66,0x66,0x00,0x66,0x00,
0x7F,0xDB,0xDB,0x7B,0x1B,0x1B,0x1B,0x00,
0x3E,0x63,0x38,0x6C,0x6C,0x38,0xCC,0x78,
0x00,0x00,0x00,0x00,0x7E,0x7E,0x7E,0x00,
0x18,0x3C,0x7E,0x18,0x7E,0x3C,0x18,0xFF,
0x18,0x3C,0x7E,0x18,0x18,0x18,0x18,0x00,
0x18,0x18,0x18,0x18,0x7E,0x3C,0x18,0x00,
0x00,0x18,0x0C,0xFE,0x0C,0x18,0x00,0x00,
0x00,0x30,0x60,0xFE,0x60,0x30,0x00,0x00,
0x00,0x00,0xC0,0xC0,0xC0,0xFE,0x00,0x00,
0x00,0x24,0x66,0xFF,0x66,0x24,0x00,0x00,
0x00,0x18,0x3C,0x7E,0xFF,0xFF,0x00,0x00,
0x00,0xFF,0xFF,0x7E,0x3C,0x18,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00, // ! 33 21
0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00, // " 34 22
0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00, // # 35 23
0x30,0x7C,0xC0,0x78,0x0C,0xF8,0x30,0x00, // $ 36 24
0x00,0xC6,0xCC,0x18,0x30,0x66,0xC6,0x00, // % 37 25
0x38,0x6C,0x38,0x76,0xDC,0xCC,0x76,0x00, // & 38 26
0x60,0x60,0xC0,0x00,0x00,0x00,0x00,0x00, // ' 39 27
0x18,0x30,0x60,0x60,0x60,0x30,0x18,0x00, // ( 40 28
0x60,0x30,0x18,0x18,0x18,0x30,0x60,0x00, // ) 41 29
0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00, // * 42 2A
0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00, // + 43 2B
0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x60, // , 44 2C
0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00, // - 45 2D
0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00, // . 46 2E
0x06,0x0C,0x18,0x30,0x60,0xC0,0x80,0x00, // / 47 2F
0x7C,0xC6,0xCE,0xDE,0xF6,0xE6,0x7C,0x00, // 0 48 30
0x30,0x70,0x30,0x30,0x30,0x30,0xFC,0x00, // 1 49 31
0x78,0xCC,0x0C,0x38,0x60,0xCC,0xFC,0x00, // 2 50 32
0x78,0xCC,0x0C,0x38,0x0C,0xCC,0x78,0x00, // 3 51 33
0x1C,0x3C,0x6C,0xCC,0xFE,0x0C,0x1E,0x00, // 4 52 34
0xFC,0xC0,0xF8,0x0C,0x0C,0xCC,0x78,0x00, // 5 53 35
0x38,0x60,0xC0,0xF8,0xCC,0xCC,0x78,0x00, // 6 54 36
0xFC,0xCC,0x0C,0x18,0x30,0x30,0x30,0x00, // 7 55 37
0x78,0xCC,0xCC,0x78,0xCC,0xCC,0x78,0x00, // 8 56 38
0x78,0xCC,0xCC,0x7C,0x0C,0x18,0x70,0x00, // 9 57 39
0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00, // : 58 3A
0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x60, // // 59 3B
0x18,0x30,0x60,0xC0,0x60,0x30,0x18,0x00, // < 60 3C
0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00, // = 61 3D
0x60,0x30,0x18,0x0C,0x18,0x30,0x60,0x00, // > 62 3E
0x78,0xCC,0x0C,0x18,0x30,0x00,0x30,0x00, // ? 63 3F
0x7C,0xC6,0xDE,0xDE,0xDE,0xC0,0x78,0x00, // @ 64 40
0x30,0x78,0xCC,0xCC,0xFC,0xCC,0xCC,0x00, // A 65 41
0xFC,0x66,0x66,0x7C,0x66,0x66,0xFC,0x00, // B 66 42
0x3C,0x66,0xC0,0xC0,0xC0,0x66,0x3C,0x00, // C 67 43
0xF8,0x6C,0x66,0x66,0x66,0x6C,0xF8,0x00, // D 68 44
0xFE,0x62,0x68,0x78,0x68,0x62,0xFE,0x00, // E 69 45
0xFE,0x62,0x68,0x78,0x68,0x60,0xF0,0x00, // F 70 46
0x3C,0x66,0xC0,0xC0,0xCE,0x66,0x3E,0x00, // G 71 47
0xCC,0xCC,0xCC,0xFC,0xCC,0xCC,0xCC,0x00, // H 72 48
0x78,0x30,0x30,0x30,0x30,0x30,0x78,0x00, // I 73 49
0x1E,0x0C,0x0C,0x0C,0xCC,0xCC,0x78,0x00, // J 74 4A
0xE6,0x66,0x6C,0x78,0x6C,0x66,0xE6,0x00, // K 75 4B
0xF0,0x60,0x60,0x60,0x62,0x66,0xFE,0x00, // L 76 4C
0xC6,0xEE,0xFE,0xFE,0xD6,0xC6,0xC6,0x00, // M 77 4D
0xC6,0xE6,0xF6,0xDE,0xCE,0xC6,0xC6,0x00, // N 78 4E
0x38,0x6C,0xC6,0xC6,0xC6,0x6C,0x38,0x00, // O 79 4F
0xFC,0x66,0x66,0x7C,0x60,0x60,0xF0,0x00, // P 80 50
0x78,0xCC,0xCC,0xCC,0xDC,0x78,0x1C,0x00, // Q 81 51
0xFC,0x66,0x66,0x7C,0x6C,0x66,0xE6,0x00, // R 82 52
0x78,0xCC,0xE0,0x70,0x1C,0xCC,0x78,0x00, // S 83 53
0xFC,0xB4,0x30,0x30,0x30,0x30,0x78,0x00, // T 84 54
0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xFC,0x00, // U 85 55
0xCC,0xCC,0xCC,0xCC,0xCC,0x78,0x30,0x00, // V 86 56
0xC6,0xC6,0xC6,0xD6,0xFE,0xEE,0xC6,0x00, // W 87 57
0xC6,0xC6,0x6C,0x38,0x38,0x6C,0xC6,0x00, // X 88 58
0xCC,0xCC,0xCC,0x78,0x30,0x30,0x78,0x00, // Y 89 59
0xFE,0xC6,0x8C,0x18,0x32,0x66,0xFE,0x00, // Z 90 5A
0x78,0x60,0x60,0x60,0x60,0x60,0x78,0x00, // [ 91 5B
0xC0,0x60,0x30,0x18,0x0C,0x06,0x02,0x00, // \ 92 5C
0x78,0x18,0x18,0x18,0x18,0x18,0x78,0x00, // ] 93 5D
0x10,0x38,0x6C,0xC6,0x00,0x00,0x00,0x00, // ^ 94 5E
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF, // _ 95 5F
0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00, // ` 96 60
0x00,0x00,0x78,0x0C,0x7C,0xCC,0x76,0x00, // a 97 61
0xE0,0x60,0x60,0x7C,0x66,0x66,0xDC,0x00, // b 98 62
0x00,0x00,0x78,0xCC,0xC0,0xCC,0x78,0x00, // c 99 63
0x1C,0x0C,0x0C,0x7C,0xCC,0xCC,0x76,0x00, // d 100 64
0x00,0x00,0x78,0xCC,0xFC,0xC0,0x78,0x00, // e 101 65
0x38,0x6C,0x60,0xF0,0x60,0x60,0xF0,0x00, // f 102 66
0x00,0x00,0x76,0xCC,0xCC,0x7C,0x0C,0xF8, // g 103 67
0xE0,0x60,0x6C,0x76,0x66,0x66,0xE6,0x00, // h 104 68
0x30,0x00,0x70,0x30,0x30,0x30,0x78,0x00, // i 105 69
0x0C,0x00,0x0C,0x0C,0x0C,0xCC,0xCC,0x78, // j 106 6A
0xE0,0x60,0x66,0x6C,0x78,0x6C,0xE6,0x00, // k 107 6B
0x70,0x30,0x30,0x30,0x30,0x30,0x78,0x00, // l 108 6C
0x00,0x00,0xCC,0xFE,0xFE,0xD6,0xC6,0x00, // m 109 6D
0x00,0x00,0xF8,0xCC,0xCC,0xCC,0xCC,0x00, // n 110 6E
0x00,0x00,0x78,0xCC,0xCC,0xCC,0x78,0x00, // o 111 6F
0x00,0x00,0xDC,0x66,0x66,0x7C,0x60,0xF0, // p 112 70
0x00,0x00,0x76,0xCC,0xCC,0x7C,0x0C,0x1E, // q 113 71
0x00,0x00,0xDC,0x76,0x66,0x60,0xF0,0x00, // r 114 72
0x00,0x00,0x7C,0xC0,0x78,0x0C,0xF8,0x00, // s 115 73
0x10,0x30,0x7C,0x30,0x30,0x34,0x18,0x00, // t 116 74
0x00,0x00,0xCC,0xCC,0xCC,0xCC,0x76,0x00, // u 117 75
0x00,0x00,0xCC,0xCC,0xCC,0x78,0x30,0x00, // v 118 76
0x00,0x00,0xC6,0xD6,0xFE,0xFE,0x6C,0x00, // w 119 77
0x00,0x00,0xC6,0x6C,0x38,0x6C,0xC6,0x00, // x 120 78
0x00,0x00,0xCC,0xCC,0xCC,0x7C,0x0C,0xF8, // y 121 79
0x00,0x00,0xFC,0x98,0x30,0x64,0xFC,0x00, // z 122 7A
0x1C,0x30,0x30,0xE0,0x30,0x30,0x1C,0x00, // { 123 7B
0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x00, // | 124 7C
0xE0,0x30,0x30,0x1C,0x30,0x30,0xE0,0x00, // } 125 7D
0x76,0xDC,0x00,0x00,0x00,0x00,0x00,0x00, // ~ 126 7E
0x00,0x10,0x38,0x6C,0xC6,0xC6,0xFE,0x00, //  127 7F
0x30,0x78,0xCC,0xCC,0xFC,0xCC,0xCC,0x00, // À 128 80
0xFE,0x62,0x60,0x7C,0x66,0x66,0xFC,0x00, // Á 129 81
0xFC,0x66,0x66,0x7C,0x66,0x66,0xFC,0x00, // Â 130 82
0xFE,0x62,0x60,0x60,0x60,0x60,0xF0,0x00, // Ã 131 83
0x3C,0x4C,0x4C,0x4C,0x4C,0x4C,0xFE,0x82, // Ä 132 84
0xFE,0x62,0x68,0x78,0x68,0x62,0xFE,0x00, // Å 133 85
0xD6,0xD6,0x54,0x38,0xD6,0xD6,0xD6,0x00, // Æ 134 86
0x78,0xCC,0x0C,0x38,0x0C,0xCC,0x78,0x00, // Ç 135 87
0xC6,0xC6,0xCE,0xDE,0xF6,0xE6,0xC6,0x00, // È 136 88
0xD6,0xC6,0xCE,0xDE,0xF6,0xE6,0xC6,0x00, // É 137 89
0xE6,0x66,0x6C,0x78,0x6C,0x66,0xE6,0x00, // Ê 138 8A
0x3E,0x66,0x66,0x66,0x66,0x66,0xE6,0x00, // Ë 139 8B
0xC6,0xEE,0xFE,0xFE,0xD6,0xC6,0xC6,0x00, // Ì 140 8C
0xCC,0xCC,0xCC,0xFC,0xCC,0xCC,0xCC,0x00, // Í 141 8D
0x38,0x6C,0xC6,0xC6,0xC6,0x6C,0x38,0x00, // Î 142 8E
0xFC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0x00, // Ï 143 8F
0xFC,0x66,0x66,0x7C,0x60,0x60,0xF0,0x00, // Ð 144 90
0x3C,0x66,0xC0,0xC0,0xC0,0x66,0x3C,0x00, // Ñ 145 91
0xFC,0xB4,0x30,0x30,0x30,0x30,0x78,0x00, // Ò 146 92
0xCC,0xCC,0xCC,0x7C,0x0C,0xCC,0x78,0x00, // Ó 147 93
0x7C,0xD6,0xD6,0xD6,0x7C,0x10,0x38,0x00, // Ô 148 94
0xC6,0xC6,0x6C,0x38,0x38,0x6C,0xC6,0x00, // Õ 149 95
0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xFE,0x02, // Ö 150 96
0xCC,0xCC,0xCC,0xCC,0x7C,0x0C,0x0C,0x00, // × 151 97
0xC6,0xC6,0xC6,0xD6,0xD6,0xD6,0xFE,0x00, // Ø 152 98
0xC6,0xC6,0xC6,0xD6,0xD6,0xD6,0xFF,0x01, // Ù 153 99
0xF8,0xB0,0x30,0x3C,0x36,0x36,0x7C,0x00, // Ú 154 9A
0xC6,0xC6,0xC6,0xE6,0xD6,0xD6,0xE6,0x00, // Û 155 9B
0xF0,0x60,0x60,0x7C,0x66,0x66,0xFC,0x00, // Ü 156 9C
0x78,0xCC,0x06,0x1E,0x06,0xCC,0x78,0x00, // Ý 157 9D
0xCC,0xD6,0xD6,0xF6,0xD6,0xD6,0xCC,0x00, // Þ 158 9E
0x7C,0xCC,0xCC,0x7C,0x6C,0xCC,0xCE,0x00, // ß 159 9F
0x00,0x00,0x78,0x0C,0x7C,0xCC,0x76,0x00, // à 160 A0
0x1C,0x30,0x60,0x7C,0x66,0x66,0x3C,0x00, // á 161 A1
0x00,0x00,0xFC,0x66,0x7C,0x66,0xFC,0x00, // â 162 A2
0x00,0x00,0xFE,0x62,0x60,0x60,0xF0,0x00, // ã 163 A3
0x00,0x00,0x3C,0x4C,0x4C,0x4C,0xFE,0x82, // ä 164 A4
0x00,0x00,0x78,0xCC,0xFC,0xC0,0x78,0x00, // å 165 A5
0x00,0x00,0xD6,0xD6,0x7C,0xD6,0xD6,0x00, // æ 166 A6
0x00,0x00,0x7C,0xC6,0x0C,0xC6,0x7C,0x00, // ç 167 A7
0x00,0x00,0xC6,0xCE,0xD6,0xE6,0xC6,0x00, // è 168 A8
0x38,0x00,0xC6,0xCE,0xD6,0xE6,0xC6,0x00, // é 169 A9
0x00,0x00,0xE6,0x6C,0x78,0x6C,0xE6,0x00, // ê 170 AA
0x00,0x00,0x3E,0x66,0x66,0x66,0xE6,0x00, // ë 171 AB
0x00,0x00,0xC6,0xEE,0xFE,0xD6,0xC6,0x00, // ì 172 AC
0x00,0x00,0xCC,0xCC,0xFC,0xCC,0xCC,0x00, // í 173 AD
0x00,0x00,0x78,0xCC,0xCC,0xCC,0x78,0x00, // î 174 AE
0x00,0x00,0xFC,0xCC,0xCC,0xCC,0xCC,0x00, // ï 175 AF
0x22,0x88,0x22,0x88,0x22,0x88,0x22,0x88, // - 176 B0
0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA, // - 177 B1
0xDB,0x77,0xDB,0xEE,0xDB,0x77,0xDB,0xEE, // - 178 B2
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, // ? 179 B3
0x18,0x18,0x18,0x18,0xF8,0x18,0x18,0x18, // + 180 B4
0x18,0x18,0xF8,0x18,0xF8,0x18,0x18,0x18, // ? 181 B5
0x36,0x36,0x36,0x36,0xF6,0x36,0x36,0x36, // ? 182 B6
0x00,0x00,0x00,0x00,0xFE,0x36,0x36,0x36, // ? 183 B7
0x00,0x00,0xF8,0x18,0xF8,0x18,0x18,0x18, // ? 184 B8
0x36,0x36,0xF6,0x06,0xF6,0x36,0x36,0x36, // ? 185 B9
0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, // ? 186 BA
0x00,0x00,0xFE,0x06,0xF6,0x36,0x36,0x36, // ? 187 BB
0x36,0x36,0xF6,0x06,0xFE,0x00,0x00,0x00, // - 188 BC
0x36,0x36,0x36,0x36,0xFE,0x00,0x00,0x00, // - 189 BD
0x18,0x18,0xF8,0x18,0xF8,0x00,0x00,0x00, // - 190 BE
0x00,0x00,0x00,0x00,0xF8,0x18,0x18,0x18, // ? 191 BF
0x18,0x18,0x18,0x18,0x1F,0x00,0x00,0x00, // L 192 C0
0x18,0x18,0x18,0x18,0xFF,0x00,0x00,0x00, // + 193 C1
0x00,0x00,0x00,0x00,0xFF,0x18,0x18,0x18, // T 194 C2
0x18,0x18,0x18,0x18,0x1F,0x18,0x18,0x18, // + 195 C3
0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00, // - 196 C4
0x18,0x18,0x18,0x18,0xFF,0x18,0x18,0x18, // + 197 C5
0x18,0x18,0x1F,0x18,0x1F,0x18,0x18,0x18, // ? 198 C6
0x36,0x36,0x36,0x36,0x37,0x36,0x36,0x36, // ? 199 C7
0x36,0x36,0x37,0x30,0x3F,0x00,0x00,0x00, // L 200 C8
0x00,0x00,0x3F,0x30,0x37,0x36,0x36,0x36, // ã 201 C9
0x36,0x36,0xF7,0x00,0xFF,0x00,0x00,0x00, // ? 202 CA
0x00,0x00,0xFF,0x00,0xF7,0x36,0x36,0x36, // T 203 CB
0x36,0x36,0x37,0x30,0x37,0x36,0x36,0x36, // ? 204 CC
0x00,0x00,0xFF,0x00,0xFF,0x00,0x00,0x00, // = 205 CD
0x36,0x36,0xF7,0x00,0xF7,0x36,0x36,0x36, // + 206 CE
0x18,0x18,0xFF,0x00,0xFF,0x00,0x00,0x00, // ? 207 CF
0x36,0x36,0x36,0x36,0xFF,0x00,0x00,0x00, // ? 208 D0
0x00,0x00,0xFF,0x00,0xFF,0x18,0x18,0x18, // T 209 D1
0x00,0x00,0x00,0x00,0xFF,0x36,0x36,0x36, // T 210 D2
0x36,0x36,0x36,0x36,0x3F,0x00,0x00,0x00, // L 211 D3
0x18,0x18,0x1F,0x18,0x1F,0x00,0x00,0x00, // L 212 D4
0x00,0x00,0x1F,0x18,0x1F,0x18,0x18,0x18, // - 213 D5
0x00,0x00,0x00,0x00,0x3F,0x36,0x36,0x36, // ã 214 D6
0x36,0x36,0x36,0x36,0xFF,0x36,0x36,0x36, // + 215 D7
0x18,0x18,0xFF,0x18,0xFF,0x18,0x18,0x18, // + 216 D8
0x18,0x18,0x18,0x18,0xF8,0x00,0x00,0x00, // - 217 D9
0x00,0x00,0x00,0x00,0x1F,0x18,0x18,0x18, // - 218 DA
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, // - 219 DB
0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF, // - 220 DC
0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0, // ? 221 DD
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F, // ? 222 DE
0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00, // - 223 DF
0x00,0x00,0xFC,0x66,0x7C,0x60,0xF0,0x00, // ð 224 E0
0x00,0x00,0x78,0xCC,0xC0,0xCC,0x78,0x00, // ñ 225 E1
0x00,0x00,0xFC,0xB4,0x30,0x30,0x78,0x00, // ò 226 E2
0x00,0x00,0xCC,0xCC,0x7C,0x0C,0xF8,0x00, // ó 227 E3
0x00,0x00,0x7C,0xD6,0xD6,0x7C,0x10,0x00, // ô 228 E4
0x00,0x00,0xC6,0x6C,0x38,0x6C,0xC6,0x00, // õ 229 E5
0x00,0x00,0xCC,0xCC,0xCC,0xCC,0x76,0x02, // ö 230 E6
0x00,0x00,0xCC,0xCC,0x7C,0x0C,0x0C,0x00, // ÷ 231 E7
0x00,0x00,0xC6,0xC6,0xD6,0xD6,0xFE,0x00, // ø 232 E8
0x00,0x00,0xC6,0xC6,0xD6,0xD6,0xFF,0x01, // ù 233 E9
0x00,0x00,0xF0,0xB0,0x3C,0x32,0xFC,0x00, // ú 234 EA
0x00,0x00,0xC6,0xE6,0xD6,0xD6,0xE6,0x00, // û 235 EB
0x00,0x00,0xE0,0x60,0x7C,0x62,0xFC,0x00, // ü 236 EC
0x00,0x00,0xFC,0x06,0x1E,0x06,0xFC,0x00, // ý 237 ED
0x00,0x00,0xCC,0xD6,0xF6,0xD6,0xCC,0x00, // þ 238 EE
0x00,0x00,0x76,0xCC,0x7C,0x2C,0xCE,0x00, // ÿ 239 EF
0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x00, // ¨ 240 F0
0x30,0x30,0xFC,0x30,0x30,0x00,0xFC,0x00, // ¸ 241 F1
0x60,0x30,0x18,0x30,0x60,0x00,0xFC,0x00, // ª 242 F2
0x18,0x30,0x60,0x30,0x18,0x00,0xFC,0x00, // º 243 F3
0x0E,0x1B,0x1B,0x18,0x18,0x18,0x18,0x18, // ¯ 244 F4
0x18,0x18,0x18,0x18,0x18,0xD8,0xD8,0x70, // ¿ 245 F5
0x30,0x30,0x00,0xFC,0x00,0x30,0x30,0x00, // ¡ 246 F6
0x00,0x76,0xDC,0x00,0x76,0xDC,0x00,0x00, // ¢ 247 F7
0x38,0x6C,0x6C,0x38,0x00,0x00,0x00,0x00, // ° 248 F8
0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00, //  249 F9
0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00, // · 250 FA
0x0F,0x0C,0x0C,0x0C,0xEC,0x6C,0x3C,0x1C, // v 251 FB
0x78,0x6C,0x6C,0x6C,0x6C,0x00,0x00,0x00, // ¹ 252 FC
0x70,0x18,0x30,0x60,0x78,0x00,0x00,0x00, // ¤ 253 FD
0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00, // ? 254 FE
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 //   255 FF
};