diff --git a/reactos/base/setup/usetup/interface/consup.c b/reactos/base/setup/usetup/interface/consup.c index 925a94225c6..0dbf4d01152 100644 --- a/reactos/base/setup/usetup/interface/consup.c +++ b/reactos/base/setup/usetup/interface/consup.c @@ -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 */ diff --git a/reactos/base/setup/usetup/interface/consup.h b/reactos/base/setup/usetup/interface/consup.h index 3fbfe9cf346..8745e7c0e44 100644 --- a/reactos/base/setup/usetup/interface/consup.h +++ b/reactos/base/setup/usetup/interface/consup.h @@ -93,6 +93,10 @@ CONSOLE_PrintTextXYN( IN SHORT len, IN LPCSTR fmt, ...); +VOID +CONSOLE_SetFont( + IN ULONG LangId); + VOID CONSOLE_SetCursorType( IN BOOL bInsert, diff --git a/reactos/base/setup/usetup/interface/usetup.c b/reactos/base/setup/usetup/interface/usetup.c index ae783d4bf54..8ba45f997a4 100644 --- a/reactos/base/setup/usetup/interface/usetup.c +++ b/reactos/base/setup/usetup/interface/usetup.c @@ -597,6 +597,8 @@ UpdateKBLayout(VOID) static PAGE_NUMBER LanguagePage(PINPUT_RECORD Ir) { + DWORD LangId; + /* Initialize the computer settings list */ if (LanguageList == NULL) { @@ -654,6 +656,10 @@ LanguagePage(PINPUT_RECORD Ir) UpdateKBLayout(); } + // Load the font + LangId = wcstoul(SelectedLanguageId, NULL, 16); + CONSOLE_SetFont(LangId); + return INTRO_PAGE; } } diff --git a/reactos/base/setup/usetup/native/utils/console.c b/reactos/base/setup/usetup/native/utils/console.c index f3b6d658a71..f87a17642a8 100644 --- a/reactos/base/setup/usetup/native/utils/console.c +++ b/reactos/base/setup/usetup/native/utils/console.c @@ -484,4 +484,29 @@ SetConsoleTextAttribute( 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 */ diff --git a/reactos/base/setup/usetup/native/utils/console.h b/reactos/base/setup/usetup/native/utils/console.h index 8a932e6b621..4dcd2767c79 100644 --- a/reactos/base/setup/usetup/native/utils/console.h +++ b/reactos/base/setup/usetup/native/utils/console.h @@ -101,13 +101,18 @@ WriteConsoleOutputCharacterA( OUT LPDWORD lpNumberOfCharsWritten); BOOL WINAPI -WriteConsoleOutputCharacterA( +WriteConsoleOutputCharacterW( HANDLE hConsoleOutput, IN LPCSTR lpCharacter, IN DWORD nLength, IN COORD dwWriteCoord, OUT LPDWORD lpNumberOfCharsWritten); +BOOL WINAPI +SetConsoleOutputCP( + IN UINT wCodePageID +); + #endif /* _UTILS_CONSOLE_H_ */ /* EOF */ diff --git a/reactos/drivers/setup/blue/blue.c b/reactos/drivers/setup/blue/blue.c index f13d9a64986..fccb05f8735 100644 --- a/reactos/drivers/setup/blue/blue.c +++ b/reactos/drivers/setup/blue/blue.c @@ -20,6 +20,7 @@ typedef struct _SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES; #include #include //#include +#include "blue.h" #define NDEBUG #include @@ -32,41 +33,6 @@ HalQueryDisplayOwnership( 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 ******************************************************************/ /* * [[character][attribute]][[character][attribute]].... @@ -758,6 +724,23 @@ ScrIoControl(PDEVICE_OBJECT DeviceObject, } 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: Status = STATUS_NOT_IMPLEMENTED; } diff --git a/reactos/drivers/setup/blue/blue.h b/reactos/drivers/setup/blue/blue.h new file mode 100644 index 00000000000..c6ec8cd81ca --- /dev/null +++ b/reactos/drivers/setup/blue/blue.h @@ -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(); diff --git a/reactos/drivers/setup/blue/blue.rbuild b/reactos/drivers/setup/blue/blue.rbuild index ffa5eb0e48d..56c4a4bb8a8 100644 --- a/reactos/drivers/setup/blue/blue.rbuild +++ b/reactos/drivers/setup/blue/blue.rbuild @@ -6,5 +6,6 @@ ntoskrnl hal blue.c + font.c blue.rc diff --git a/reactos/drivers/setup/blue/font.c b/reactos/drivers/setup/blue/font.c new file mode 100644 index 00000000000..83e0823f447 --- /dev/null +++ b/reactos/drivers/setup/blue/font.c @@ -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 +#include "blue.h" + +#define NDEBUG +#include + +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 +};