From: wdenk Date: Sat, 14 Oct 2000 23:05:33 +0000 (+0000) Subject: * Replaced `serial_io' and `intr_util' structs in bd_info by generic X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=a8a441b77366f6f5f8d4d11fb8eca7817dc5584d;p=users%2Frw%2Fppcboot.git * Replaced `serial_io' and `intr_util' structs in bd_info by generic structure `mon_fnc' containing `monitor functions'; added putstr(), malloc() and free(). * Added "bootd" command (run "bootcmd"): now you can type just "boot" to run an arbitrary default (boot) command. * Added ';' as command separator for the default boot command: now "bootcmd" can contain a sequence of several commands which are executed in sequence. Please note that there is absolutely no flow control, conditional execition, or the like: PPCBoot will always run all commands strictly one after the other [assuming the command returns to PPCBoot, which cannot be expected for instance when you start an OS kernel...] * Fixed bugs in interrupt handler (thanks to Murray): enable only CPM interrupts; disable any bogus interrupts. * Added support for ATA disks (directly connected to PCMCIA port) WARNING: work in progress, tested only on SPD823TS systems * Added configuration for FADS board with support for video and wireless keyboard (thanks to Paolo Scaffardi). WARNING: work in progress, not complete yet. --- diff --git a/CHANGELOG b/CHANGELOG index e719afa..93fb0ea 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,11 @@ Open Issues: ====================================================================== +* Some commands could default to the "last used address" so that for + instance a "bootp" could be followed by a plain "iminfo" or "bootm" + (without arguments) using the memory address used by the previous + (here bootp) command. + * Boot with RAMDisk: No need to copy ramdisk image when it's already in RAM ??? Or do we @@ -45,16 +50,39 @@ Open Issues: gap if there is one, instead of hard-coding the map - which will break if sizes change? -* INIT: - - Replace `serial_io' and `intr_util' structs in bd_info by generic - structure containing `monitor functions'; add things like malloc() - and free(). - * BUG: Fix Exception handling for "Software Emulation Exception" etc. +====================================================================== +Modifications for 0.5.3: +====================================================================== + +* Replaced `serial_io' and `intr_util' structs in bd_info by generic + structure `mon_fnc' containing `monitor functions'; added putstr(), + malloc() and free(). + +* Added "bootd" command (run "bootcmd"): now you can type just "boot" + to run an arbitrary default (boot) command. + +* Added ';' as command separator for the default boot command: now + "bootcmd" can contain a sequence of several commands which are + executed in sequence. Please note that there is absolutely no flow + control, conditional execition, or the like: PPCBoot will always + run all commands strictly one after the other [assuming the command + returns to PPCBoot, which cannot be expected for instance when you + start an OS kernel...] + +* Fixed bugs in interrupt handler (thanks to Murray): enable only CPM + interrupts; disable any bogus interrupts. + +* Added support for ATA disks (directly connected to PCMCIA port) + WARNING: work in progress, tested only on SPD823TS systems + +* Added configuration for FADS board with support for video and + wireless keyboard (thanks to Paolo Scaffardi). + WARNING: work in progress, not complete yet. + ====================================================================== Modifications for 0.5.2: ====================================================================== diff --git a/CREDITS b/CREDITS index 8acd301..978f007 100644 --- a/CREDITS +++ b/CREDITS @@ -62,3 +62,7 @@ D: IBM PPC401/403/405GP Support; Windows environment support N: Neil Russell E: caret@c-side.com D: Author of LiMon-1.4.2, which contributed some ideas + +N: Paolo Scaffardi +E: arsenio@tin.it +D: FADS823 configuration, MPC823 video support, I2C, wireless keyboard diff --git a/Makefile b/Makefile index 93d9378..04c8b38 100644 --- a/Makefile +++ b/Makefile @@ -126,6 +126,7 @@ SPD823TS_config: unconfig echo "CPU = mpc8xx" >>config.mk ; \ echo "#include " >config.h +FADS823_config \ FADS850SAR_config \ FADS860T_config: unconfig @echo "Configuring for $(@:_config=) Board..." ; \ diff --git a/common/Makefile b/common/Makefile index 2996c30..6ed8e82 100644 --- a/common/Makefile +++ b/common/Makefile @@ -28,7 +28,7 @@ LIB = libcommon.a AOBJS = environment.o COBJS = board.o main.o command.o \ cmd_cache.o cmd_mem.o cmd_boot.o cmd_flash.o \ - cmd_bootm.o cmd_net.o cmd_nvedit.o \ + cmd_bootm.o cmd_ide.o cmd_net.o cmd_nvedit.o \ s_record.o dlmalloc.o kgdb.o OBJS = $(AOBJS) $(COBJS) diff --git a/common/board.c b/common/board.c index f09a373..7019951 100644 --- a/common/board.c +++ b/common/board.c @@ -23,9 +23,16 @@ #include #include +#include +#if (CONFIG_COMMANDS & CFG_CMD_IDE) +#include +#endif #if (CONFIG_COMMANDS & CFG_CMD_KGDB) #include #endif +#ifdef CONFIG_VIDEO +#include +#endif static char *failed = "*** failed ***\n"; @@ -141,6 +148,9 @@ board_init_f (ulong bootflag) addr_moni = CFG_SDRAM_BASE + dram_size - len; +#ifdef DEBUG + printf (" Relocating to: %08lx\n", addr_moni); +#endif /* * Then we (permanently) allocate a Board Info struct. * @@ -195,13 +205,15 @@ board_init_f (ulong bootflag) /* Function pointers must be added after code relocation */ #if 0 - bd->bi_serial_io.getc = NULL; /* Addr of getc() from Console */ - bd->bi_serial_io.tstc = NULL; /* Addr of tstc() from Console */ - bd->bi_serial_io.putc = NULL; /* Addr of tstc() from Console */ - bd->bi_serial_io.printf = NULL; /* Addr of printf() to Console */ - - bd->bi_interrupt.install_hdlr = NULL; - bd->bi_interrupt.free_hdlr = NULL; + bd->bi_mon_fnc.getc = NULL; /* Addr of getc() from Console */ + bd->bi_mon_fnc.tstc = NULL; /* Addr of tstc() from Console */ + bd->bi_mon_fnc.putc = NULL; /* Addr of putc() to Console */ + bd->bi_mon_fnc.putstr = NULL; /* Addr of putstr() to Console */ + bd->bi_mon_fnc.printf = NULL; /* Addr of printf() to Console */ + bd->bi_mon_fnc.install_hdlr = NULL; + bd->bi_mon_fnc.free_hdlr = NULL; + bd->bi_mon_fnc.malloc = NULL; + bd->bi_mon_fnc.free = NULL; #endif relocate_code (addr_sp, bd, addr_moni); @@ -266,6 +278,11 @@ void board_init_r (bd_t *bd, ulong dest_addr) reset_phy (); #endif +#if (CONFIG_COMMANDS & CFG_CMD_IDE) + printf (" IDE: "); + ide_init(); +#endif + #if (CONFIG_COMMANDS & CFG_CMD_KGDB) printf (" KGDB: "); kgdb_init(); @@ -280,21 +297,34 @@ void board_init_r (bd_t *bd, ulong dest_addr) /* Insert function pointers now that we have relocated the code */ - bd->bi_serial_io.getc = serial_getc; - bd->bi_serial_io.tstc = serial_tstc; - bd->bi_serial_io.putc = serial_putc; - bd->bi_serial_io.printf = printf; + bd->bi_mon_fnc.getc = serial_getc; + bd->bi_mon_fnc.tstc = serial_tstc; + bd->bi_mon_fnc.putc = serial_putc; + bd->bi_mon_fnc.putstr = serial_putstr; + bd->bi_mon_fnc.printf = printf; #if defined(CONFIG_8xx) - bd->bi_interrupt.install_hdlr = cpm_install_handler; - bd->bi_interrupt.free_hdlr = cpm_free_handler; + bd->bi_mon_fnc.install_hdlr = cpm_install_handler; + bd->bi_mon_fnc.free_hdlr = cpm_free_handler; #elif defined(CONFIG_4xx) - bd->bi_interrupt.install_hdlr = irq_install_handler; - bd->bi_interrupt.free_hdlr = irq_free_handler; + bd->bi_mon_fnc.install_hdlr = irq_install_handler; + bd->bi_mon_fnc.free_hdlr = irq_free_handler; #else #error No interrupt handler for this architecture #endif + /* Initialize other board modules */ +#ifdef CONFIG_VIDEO + printf(" Video: "); + video_init(CONFIG_VIDEO_ADDR); +#endif +#ifdef CONFIG_PCMCIA + printf(" PCMCIA: "); + pcmcia_init(); +#endif + + bd->bi_mon_fnc.malloc = malloc; + bd->bi_mon_fnc.free = free; /* initialize malloc() area */ mem_malloc_init (dest_addr); diff --git a/common/cmd_boot.c b/common/cmd_boot.c index 854aeff..969e518 100644 --- a/common/cmd_boot.c +++ b/common/cmd_boot.c @@ -67,12 +67,15 @@ void do_bdinfo (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]) ip <<= 8; } printf ("\n baudrate = %6ld bps\n", bd->bi_baudrate ); - printf (" getc = 0x%08lx\n",(ulong)bd->bi_serial_io.getc); - printf (" tstc = 0x%08lx\n",(ulong)bd->bi_serial_io.tstc); - printf (" putc = 0x%08lx\n",(ulong)bd->bi_serial_io.putc); - printf (" printf = 0x%08lx\n",(ulong)bd->bi_serial_io.printf); - printf (" install_hdlr= 0x%08lx\n",(ulong)bd->bi_interrupt.install_hdlr); - printf (" free_hdr = 0x%08lx\n",(ulong)bd->bi_interrupt.free_hdlr); + printf (" getc = 0x%08lx\n",(ulong)bd->bi_mon_fnc.getc); + printf (" tstc = 0x%08lx\n",(ulong)bd->bi_mon_fnc.tstc); + printf (" putc = 0x%08lx\n",(ulong)bd->bi_mon_fnc.putc); + printf (" putstr = 0x%08lx\n",(ulong)bd->bi_mon_fnc.putstr); + printf (" printf = 0x%08lx\n",(ulong)bd->bi_mon_fnc.printf); + printf (" install_hdlr= 0x%08lx\n",(ulong)bd->bi_mon_fnc.install_hdlr); + printf (" free_hdlr = 0x%08lx\n",(ulong)bd->bi_mon_fnc.free_hdlr); + printf (" malloc = 0x%08lx\n",(ulong)bd->bi_mon_fnc.malloc); + printf (" free = 0x%08lx\n",(ulong)bd->bi_mon_fnc.free); } #endif /* CFG_CMD_BDI */ diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c index 9054ff3..475874a 100644 --- a/common/cmd_bootm.c +++ b/common/cmd_bootm.c @@ -31,7 +31,8 @@ #include #include -int gunzip(void *, int, unsigned char *, int *); +int gunzip (void *, int, unsigned char *, int *); +void run_default_command (int l, cmd_tbl_t *cmdtp, bd_t *bd, int flag); static void *zalloc(void *, unsigned, unsigned); static void zfree(void *, void *, unsigned); @@ -298,6 +299,15 @@ void do_bootm (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]) (*kernel) (kbd, initrd_start, initrd_end, cmd_start, cmd_end); } + +#if (CONFIG_COMMANDS & CFG_CMD_BOOTD) +void do_bootd (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]) +{ + run_default_command (-1, cmdtp, bd, flag); +} +#endif + + #if (CONFIG_COMMANDS & CFG_CMD_IMI) void do_iminfo (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]) { diff --git a/common/cmd_ide.c b/common/cmd_ide.c new file mode 100644 index 0000000..1b0f04d --- /dev/null +++ b/common/cmd_ide.c @@ -0,0 +1,641 @@ +/* + * (C) Copyright 2000 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + */ + +/* + * IDE support + */ +#include +#include +#include +#include +#include +#include +#include + +#if (CONFIG_COMMANDS & CFG_CMD_IDE) + +/* ------------------------------------------------------------------------- */ + +/* + * Allow configuration to select PCMCIA slot, + * or try to generate a useful default + */ +#if !defined(CONFIG_PCMCIA_SLOT_A) && !defined(CONFIG_PCMCIA_SLOT_B) + + /* The RPX series use SLOT_B */ +#if defined(CONFIG_RPXCLASSIC) || defined(CONFIG_RPXLITE) +# define CONFIG_PCMCIA_SLOT_B +#elif defined(CONFIG_ADS) /* The ADS board use SLOT_A */ +# define CONFIG_PCMCIA_SLOT_A +#elif defined(CONFIG_FADS) /* The FADS series are a mess */ +# if defined(CONFIG_MPC860T) || defined(CONFIG_MPC860) || defined(CONFIG_MPC821) +# define CONFIG_PCMCIA_SLOT_A +# else +# define CONFIG_PCMCIA_SLOT_B +# endif +#elif defined(CONFIG_TQM860L) || defined(CONFIG_TQM855L) /* The TQM8xxL modules */ +# define CONFIG_PCMCIA_SLOT_A /* ... use SLOT_A on MPC860/855 */ +#elif defined(CONFIG_TQM823L) || defined(CONFIG_TQM850L) +# define CONFIG_PCMCIA_SLOT_B /* ... and SLOT_B else */ +#elif defined(CONFIG_SPD823TS) /* The SPD8xx use SLOT_B */ +# define CONFIG_PCMCIA_SLOT_B +#else +# error "PCMCIA Slot not configured" +#endif + +#endif /* !defined(CONFIG_PCMCIA_SLOT_A) && !defined(CONFIG_PCMCIA_SLOT_B) */ + +/* Make sure exactly one slot is defined - we support only one for now */ +#if !defined(CONFIG_PCMCIA_SLOT_A) && !defined(CONFIG_PCMCIA_SLOT_B) +#error Neither CONFIG_PCMCIA_SLOT_A nor CONFIG_PCMCIA_SLOT_B configured +#endif +#if defined(CONFIG_PCMCIA_SLOT_A) && defined(CONFIG_PCMCIA_SLOT_B) +#error Both CONFIG_PCMCIA_SLOT_A and CONFIG_PCMCIA_SLOT_B configured +#endif + +#define PCMCIA_SOCKETS_NO 1 +#define PCMCIA_MEM_WIN_NO 4 +#define PCMCIA_IO_WIN_NO 2 + +/* define _slot_ to be able to optimize macros */ +#ifdef CONFIG_PCMCIA_SLOT_A +# define _slot_ 0 +# define PCMCIA_SLOT_MSG "SLOT_A" +#else +# define _slot_ 1 +# define PCMCIA_SLOT_MSG "SLOT_B" +#endif + +/* + * The TQM850L hardware has two pins swapped! Grrrrgh! + */ +#ifdef CONFIG_TQM850L +#define __MY_PCMCIA_GCRX_CXRESET PCMCIA_GCRX_CXOE +#define __MY_PCMCIA_GCRX_CXOE PCMCIA_GCRX_CXRESET +#else +#define __MY_PCMCIA_GCRX_CXRESET PCMCIA_GCRX_CXRESET +#define __MY_PCMCIA_GCRX_CXOE PCMCIA_GCRX_CXOE +#endif + +/* look up table for pgcrx registers */ + +static u_int *pcmcia_pgcrx[2] = { + &((immap_t *)CFG_IMMR)->im_pcmcia.pcmc_pgcra, + &((immap_t *)CFG_IMMR)->im_pcmcia.pcmc_pgcrb, +}; + +#define PCMCIA_PGCRX(slot) (*pcmcia_pgcrx[slot]) + +/* + * This structure is used to address each window in the PCMCIA controller. + * + * Keep in mind that we assume that pcmcia_win_t[n+1] is mapped directly + * after pcmcia_win_t[n]... + */ + +typedef struct { + ulong br; + ulong or; +} pcmcia_win_t; + +/* + * LED Port + */ +#define LED_IDE2 0x02 +#define LED_IDE1 0x01 + +/* ------------------------------------------------------------------------- */ + +/* + * Memory Map Information: + * + * BR0 / OR0: EPROM1 Base 0x0C000000 Size 512KB + * BR1 / OR1: EPROM2 Base 0x0C080000 Size 512KB + * BR2 / OR2: SRAM Base 0x04200000 Size 2MB + * BR3 / OR3: SDRAM Base 0x00000000 Size 16MB + * BR4 / OR4: PER-8 Base 0x04000000 Size 1MB + * BR5 / OR5: SHARC Base 0x04400000 Size 4MB + */ +/* ------------------------------------------------------------------------- */ + +/* Current I/O Device */ +static int curr_device; + +/* Current offset for IDE0 / IDE1 bus access */ +static ulong bus_offset[IDE_MAXBUS] = { + CFG_ATA_IDE0_OFFSET, + CFG_ATA_IDE1_OFFSET, +}; + +#define ATA_CURR_BASE(dev) (ATA_IO_BASE+bus_offset[IDE_BUS(dev)]) + +typedef struct ide_dev_id { + ulong size; + uchar model[40]; + uchar serial_no[20]; +} ide_dev_id_t; + +static ide_dev_id_t ide_device[IDE_MAXDEVICE]; + +/* ------------------------------------------------------------------------- */ + +static void ide_led (uchar led, uchar status); +static void ide_reset (void); +static void ide_ident (int device); +static void ide_print (int device); +static uchar ide_wait (int dev, ulong t); + +static void __inline__ outb(int dev, int port, unsigned char val); +static unsigned char __inline__ inb(int dev, int port); +static void input_swap_data(int dev, ulong *sect_buf, int words); +static void input_data(int dev, ulong *sect_buf, int words); +static void output_data(int dev, ulong *sect_buf, int words); +static void trim_trail (unsigned char *str, unsigned int len); +/* ------------------------------------------------------------------------- */ + +void do_ide (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]) +{ + switch (argc) { + case 0: + case 1: + printf ("Usage:\n%s\n", cmdtp->usage); + return; + case 2: + if (strcmp(argv[1],"reset") == 0) { + printf ("\nReset IDE on PCMCIA " PCMCIA_SLOT_MSG ": "); + + ide_init(); + return; + } else if (strcmp(argv[1],"info") == 0) { + int i; + + printf ("\n"); + + for (i=0; iusage); + return; + case 3: + if (strcmp(argv[1],"device") == 0) { + int dev = (int)simple_strtoul(argv[2], NULL, 10); + + printf ("\nIDE device %d: ", dev); + if (dev >= IDE_MAXDEVICE) { + printf ("unknown device\n"); + return; + } + + ide_print (dev); + + if (ide_device[dev].size == 0) { + return; + } + + curr_device = dev; + + printf ("... is now current device\n"); + + return; + } + printf ("Usage:\n%s\n", cmdtp->usage); + return; + default: + /* at least 4 args */ + + if (strcmp(argv[1],"read") == 0) { + ulong addr = simple_strtoul(argv[2], NULL, 16); + ulong blk = simple_strtoul(argv[3], NULL, 16); + ulong cnt = simple_strtoul(argv[4], NULL, 16); + ulong n; + + printf ("\nIDE read: device %d block # %ld, count %ld ... ", + curr_device, blk, cnt); + + n = ide_read (0, blk, cnt, (ulong *)addr); + + printf ("%ld blocks read: %s\n", + n, (n==cnt) ? "OK" : "ERROR"); + + return; + + } else if (strcmp(argv[1],"write") == 0) { + ulong addr = simple_strtoul(argv[2], NULL, 16); + ulong blk = simple_strtoul(argv[3], NULL, 16); + ulong cnt = simple_strtoul(argv[4], NULL, 16); + ulong n; + + printf ("\nIDE write: device %d block # %ld, count %ld ... ", + curr_device, blk, cnt); + + n = ide_write (0, blk, cnt, (ulong *)addr); + + printf ("%ld blocks written: %s\n", + n, (n==cnt) ? "OK" : "ERROR"); + + return; + } else { + printf ("Usage:\n%s\n", cmdtp->usage); + } + + return; + } +} + +/* ------------------------------------------------------------------------- */ + +void ide_init (void) +{ + immap_t *immr = (immap_t *)CFG_IMMR; + volatile pcmconf8xx_t *pcmp = &(immr->im_pcmcia); + unsigned char c; + int i; + + /* Configure PC for IDE Reset Pin + */ + immr->im_ioport.iop_pcdat &= ~(PC_IDE_RESET); /* Set reset bit */ + immr->im_ioport.iop_pcpar &= ~(PC_IDE_RESET); + immr->im_ioport.iop_pcso &= ~(PC_IDE_RESET); + immr->im_ioport.iop_pcdir |= PC_IDE_RESET; /* Make output */ + + /* Reset the IDE just to be sure. + * Light LED's to show + */ + ide_led ((LED_IDE1 | LED_IDE2), 1); /* LED's on */ + ide_reset (); + ide_led ((LED_IDE1 | LED_IDE2), 0); /* LED's off */ + + /* PCMCIA / IDE initialization for common mem space */ + pcmp->pcmc_pgcrb = 0; + + /* IDE 1 + */ + pcmp->pcmc_pbr0 = CFG_PCMCIA_PBR0; + pcmp->pcmc_por0 = CFG_PCMCIA_POR0; + + pcmp->pcmc_pbr1 = CFG_PCMCIA_PBR1; + pcmp->pcmc_por1 = CFG_PCMCIA_POR1; + + pcmp->pcmc_pbr2 = CFG_PCMCIA_PBR2; + pcmp->pcmc_por2 = CFG_PCMCIA_POR2; + + pcmp->pcmc_pbr3 = CFG_PCMCIA_PBR3; + pcmp->pcmc_por3 = CFG_PCMCIA_POR3; + + /* IDE 2 + */ + pcmp->pcmc_pbr4 = CFG_PCMCIA_PBR4; + pcmp->pcmc_por4 = CFG_PCMCIA_POR4; + + pcmp->pcmc_pbr5 = CFG_PCMCIA_PBR5; + pcmp->pcmc_por5 = CFG_PCMCIA_POR5; + + pcmp->pcmc_pbr6 = CFG_PCMCIA_PBR6; + pcmp->pcmc_por7 = CFG_PCMCIA_POR6; + + pcmp->pcmc_pbr7 = CFG_PCMCIA_PBR7; + pcmp->pcmc_por7 = CFG_PCMCIA_POR7; + + /* + * Wait for IDE to get ready. + * According to spec, this can take up to 31 seconds! + */ + i = 0; + do { + udelay (10000); /* 10 ms */ + c = inb (0, ATA_STATUS); + ++i; + if (i > (ATA_RESET_TIME * 100)) { + printf ("** Timeout **\n"); + return; + } + if ((i >= 100) && ((i%100)==0)) { + printf ("."); + } + } while (c & (ATA_STAT_BUSY | ATA_STAT_FAULT)); + + if (c & (ATA_STAT_BUSY | ATA_STAT_FAULT)) { + printf ("Status: 0x%02x\n", c); + } else { + printf ("OK\n"); + } + + curr_device = -1; + for (i=0; i 0) && (curr_device < 0)) { + curr_device = i; + } + } +} + +/* ------------------------------------------------------------------------- */ + +static void __inline__ +outb(int dev, int port, unsigned char val) +{ + /* Ensure I/O operations complete */ + __asm__ volatile("eieio"); + *((uchar *)(ATA_CURR_BASE(dev)+port)) = val; +#if 0 +printf ("\nOUTB: 0x%08lx <== 0x%02x\n", ATA_CURR_BASE(dev)+port, val); +#endif +} + +static unsigned char __inline__ +inb(int dev, int port) +{ + /* Ensure I/O operations complete */ + __asm__ volatile("eieio"); + return (*((uchar *)(ATA_CURR_BASE(dev)+port))); +} + +static void +input_swap_data(int dev, ulong *sect_buf, int words) +{ + volatile ushort *pbuf = (ushort *)(ATA_CURR_BASE(dev)+ATA_DATA_REG); + ushort *dbuf = (ushort *)sect_buf; + + while (words--) { + *dbuf++ = ld_le16(pbuf); + *dbuf++ = ld_le16(pbuf); + } +} + +static void +output_data(int dev, ulong *sect_buf, int words) +{ + ushort *dbuf; + volatile ushort *pbuf; + + pbuf = (ushort *)(ATA_CURR_BASE(dev)+ATA_DATA_REG); + dbuf = (ushort *)sect_buf; + while (words--) { + __asm__ volatile ("eieio"); + *pbuf = *dbuf++; + __asm__ volatile ("eieio"); + *pbuf = *dbuf++; + } +} + +static void +input_data(int dev, ulong *sect_buf, int words) +{ + ushort *dbuf; + volatile ushort *pbuf; + + pbuf = (ushort *)(ATA_CURR_BASE(dev)+ATA_DATA_REG); + dbuf = (ushort *)sect_buf; + while (words--) { + __asm__ volatile ("eieio"); + *dbuf++ = *pbuf; + __asm__ volatile ("eieio"); + *dbuf++ = *pbuf; + } +} + +/* ------------------------------------------------------------------------- */ + +static void ide_ident (int device) +{ + ulong iobuf[ATA_SECTORWORDS]; + unsigned char c; + hd_driveid_t *iop = (hd_driveid_t *)iobuf; + ide_dev_id_t *idp = &(ide_device[device]); + + printf (" Device %d: ", device); + + /* Select device + */ + outb (device, ATA_DEV_HD, ATA_LBA | ATA_DEVICE(device)); + + /* Start Ident Command + */ + outb (device, ATA_COMMAND, ATA_CMD_IDENT); + + /* Wait for completion + */ + c = ide_wait (device, 100); + + if ((c & ATA_STAT_READY) == 0) { + idp->size = 0; + idp->model[0] = idp->serial_no[0] = '\0'; + return; + } + + input_swap_data (device, iobuf, ATA_SECTORWORDS); + + trim_trail (iop->model, sizeof(iop->model)); + trim_trail (iop->serial_no, sizeof(iop->serial_no)); + + /* swap shorts */ + idp->size = (iop->lba_capacity << 16) | (iop->lba_capacity >> 16); + + strncpy (idp->model, iop->model, sizeof(idp->model)); + strncpy (idp->serial_no, iop->serial_no, sizeof(idp->serial_no)); +} + +/* ------------------------------------------------------------------------- */ + +static void ide_print (int device) +{ + ide_dev_id_t *idp = &(ide_device[device]); + + if (idp->size == 0) { + printf ("not available\n"); + return; + } + + printf ("Model: %s Serial #: %s ", idp->model, idp->serial_no); + printf ("Capacity: %lu MB = %lu GB\n", + (idp->size / 2) >> 10, (idp->size / 2) >> 20); +} + +/* ------------------------------------------------------------------------- */ + +ulong ide_read (int device, ulong blknr, ulong blkcnt, ulong *buffer) +{ + ulong n = 0; + unsigned char c; + + while (blkcnt-- > 0) { + + c = ide_wait (device, 500); + + if (c & ATA_STAT_BUSY) { + printf ("IDE read: device %d not ready\n", device); + return (n); + } + + outb (device, ATA_SECT_CNT, 1); + outb (device, ATA_LBA_LOW, (blknr >> 0) & 0xFF); + outb (device, ATA_LBA_MID, (blknr >> 8) & 0xFF); + outb (device, ATA_LBA_HIGH, (blknr >> 16) & 0xFF); + outb (device, ATA_DEV_HD, ATA_LBA | ATA_DEVICE(device)); + outb (device, ATA_COMMAND, ATA_CMD_READ); + + udelay (50); + + c = ide_wait (device, 500); /* can't take over 500 ms */ + + if ((c&(ATA_STAT_DRQ|ATA_STAT_BUSY|ATA_STAT_ERR)) != ATA_STAT_DRQ) { + printf ("Error (no IRQ) dev %d blk %ld: status 0x%02x\n", + device, blknr, c); + return (n); + } + + input_data (device, buffer, ATA_SECTORWORDS); + (void) inb (device, ATA_STATUS); /* clear IRQ */ + + ++n; + ++blknr; + buffer += ATA_SECTORWORDS; + } + return (n); +} + +/* ------------------------------------------------------------------------- */ + + +ulong ide_write (int device, ulong blknr, ulong blkcnt, ulong *buffer) +{ + ulong n = 0; + unsigned char c; + + while (blkcnt-- > 0) { + + c = ide_wait (device, 500); + + if (c & ATA_STAT_BUSY) { + printf ("IDE read: device %d not ready\n", device); + return (n); + } + + outb (device, ATA_SECT_CNT, 1); + outb (device, ATA_LBA_LOW, (blknr >> 0) & 0xFF); + outb (device, ATA_LBA_MID, (blknr >> 8) & 0xFF); + outb (device, ATA_LBA_HIGH, (blknr >> 16) & 0xFF); + outb (device, ATA_DEV_HD, ATA_LBA | ATA_DEVICE(device)); + outb (device, ATA_COMMAND, ATA_CMD_WRITE); + + udelay (50); + + c = ide_wait (device, 500); /* can't take over 500 ms */ + + if ((c&(ATA_STAT_DRQ|ATA_STAT_BUSY|ATA_STAT_ERR)) != ATA_STAT_DRQ) { + printf ("Error (no IRQ) dev %d blk %ld: status 0x%02x\n", + device, blknr, c); + return (n); + } + + output_data (device, buffer, ATA_SECTORWORDS); + c = inb (device, ATA_STATUS); /* clear IRQ */ + ++n; + ++blknr; + buffer += ATA_SECTORWORDS; + } + return (n); +} + +/* ------------------------------------------------------------------------- */ + +/* Trim trailing blanks, and NUL-terminate string + */ +static void trim_trail (unsigned char *str, unsigned int len) +{ + unsigned char *p = str + len - 1; + + while (len-- > 0) { + *p-- = '\0'; + if (*p != ' ') { + return; + } + } +} + +/* ------------------------------------------------------------------------- */ + +/* + * Wait until Busy bit is off, or timeout (in ms) + * Return last status + */ +static uchar ide_wait (int dev, ulong t) +{ + ulong delay = 10 * t; /* poll every 100 us */ + uchar c; + + while ((c = inb(dev, ATA_STATUS)) & ATA_STAT_BUSY) { + udelay (100); + if (delay-- == 0) { + break; + } + } + return (c); +} + +/* ------------------------------------------------------------------------- */ + +static void ide_reset (void) +{ + immap_t *immr = (immap_t *)CFG_IMMR; + + /* assert IDE RESET signal */ + immr->im_ioport.iop_pcdat &= ~(PC_IDE_RESET); + udelay (1000); + /* de-assert RESET signal of IDE */ + immr->im_ioport.iop_pcdat |= PC_IDE_RESET; + udelay (1000); +} + +/* ------------------------------------------------------------------------- */ + +static uchar led_buffer = 0; /* Buffer for current LED status */ + +static void ide_led (uchar led, uchar status) +{ + uchar *led_port = (uchar *)(0x04000000 + 0x3000); + + if (status) { /* switch LED on */ + led_buffer |= led; + } else { /* switch LED off */ + led_buffer &= ~led; + } + + *led_port = led_buffer; +} + +/* ------------------------------------------------------------------------- */ + +#endif /* CONFIG_COMMANDS & CFG_CMD_IDE */ diff --git a/common/command.c b/common/command.c index 289a5d4..2c494db 100644 --- a/common/command.c +++ b/common/command.c @@ -36,6 +36,7 @@ #include #include #include +#include /* * HELP command @@ -127,6 +128,7 @@ cmd_tbl_t cmd_tbl[] = { CMD_TBL_BOOTP CMD_TBL_TFTPB CMD_TBL_RARPB + CMD_TBL_BOOTD CMD_TBL_LOADS CMD_TBL_LOADB CMD_TBL_MD @@ -140,13 +142,14 @@ cmd_tbl_t cmd_tbl[] = { CMD_TBL_PRINTENV CMD_TBL_SETENV CMD_TBL_SAVEENV - CMD_TBL_BDINFO + CMD_TBL_PROTECT + CMD_TBL_FLERASE CMD_TBL_FLINFO + CMD_TBL_BDINFO CMD_TBL_IMINFO CMD_TBL_PCIINFO CMD_TBL_IRQINFO - CMD_TBL_FLERASE - CMD_TBL_PROTECT + CMD_TBL_IDE CMD_TBL_LOOP CMD_TBL_MTEST CMD_TBL_ICACHE diff --git a/common/main.c b/common/main.c index 950a171..2781c45 100644 --- a/common/main.c +++ b/common/main.c @@ -24,10 +24,12 @@ #include #include -int readline (const char *const prompt); +int readline (const char *const prompt); +void run_default_command (int l, cmd_tbl_t *cmdtp, bd_t *bd, int flag); static char * delete_char (char *buffer, char *p, int *colp, int *np, int plen); static int parse_line (char *, char *[]); +static void run_command (int len, cmd_tbl_t *cmdtp, bd_t *bd, int flag); char console_buffer[CFG_CBSIZE]; /* console I/O buffer */ @@ -91,14 +93,11 @@ void main_loop(bd_t *bd) serial_putc ('\n'); if (autoboot) { - s = getenv("bootcmd"); - strncpy (console_buffer, - s ? s : "", - CFG_CBSIZE-1); - console_buffer[CFG_CBSIZE-1] = '\0'; /* just in case */ - len = strlen (console_buffer); - autoboot = 0; + + run_default_command (1, cmdtp, bd, flag); + + continue; } else /* No autoboot: read input */ #endif /* CONFIG_BOOTDELAY */ @@ -106,18 +105,70 @@ void main_loop(bd_t *bd) printf ("\n"); continue; } + run_command (len, cmdtp, bd, flag); + } +} - /* - * If we have any new input, we parse the new command line. - * Otherwise, we re-issue the previous command. - */ - if (len) { - strcpy (parse_buffer, console_buffer); +/*----------------------------------------------------------*/ + +void run_default_command (int l, cmd_tbl_t *cmdtp, bd_t *bd, int flag) +{ + char *str = getenv("bootcmd"); - argc = parse_line (parse_buffer, argv); - } else { - flag |= CMD_FLAG_REPEAT; + if (!str) + return; + + while (*str) { + char *sep; + char *t; + + /* find separator, or string end */ + for (sep=str; *sep; sep++) { + if (*sep == ';') break; + } + + /* copy to console buffer */ + + for (t=console_buffer; str= console_buffer+CFG_CBSIZE-1) { + break; /* just in case */ + } } + *t = '\0'; + + run_command (l, cmdtp, bd, flag); + + if (*sep == '\0') { + break; + } + str = sep + 1; + } +} + +/*----------------------------------------------------------*/ +/* + * "len" is used to indicate if we're executing normal input + * (len > 0), just re-executing the last command when the user + * presses only ENTER (len == 0), or executing the default command + * (len < 0). + */ +static void run_command (int len, + cmd_tbl_t *cmdtp, bd_t *bd, int flag) +{ + extern void do_bootd (cmd_tbl_t *, bd_t *, int, int, char *[]); + + /* + * If we have any new input, we parse the new command line. + * Otherwise, we re-issue the previous command. + */ + if (len != 0) { + strcpy (parse_buffer, console_buffer); + + argc = parse_line (parse_buffer, argv); + } else { + flag |= CMD_FLAG_REPEAT; + } #if 0 { int i; printf ("ARGC = %d\n", argc); @@ -128,30 +179,34 @@ void main_loop(bd_t *bd) } #endif - if (argc == 0) { /* nothing to do */ - continue; - } + if (argc == 0) { /* nothing to do */ + return; + } - /* - * Search command table. - * Use linear search - it's a small table - */ - for (cmdtp=&cmd_tbl[0]; cmdtp->name; cmdtp++) { - if (strncmp(argv[0], cmdtp->name, cmdtp->lmin) == 0) { - /* found - check max args */ - if (argc > cmdtp->maxargs) { - printf ("Usage:\n%s\n", cmdtp->usage); - goto done; - } - /* OK - call function */ - (cmdtp->cmd)(cmdtp, bd, flag, argc, argv); - goto done; + /* + * Search command table. + * Use linear search - it's a small table + */ + for (cmdtp=&cmd_tbl[0]; cmdtp->name; cmdtp++) { + if (strncmp(argv[0], cmdtp->name, cmdtp->lmin) == 0) { + /* found - check max args */ + if (argc > cmdtp->maxargs) { + printf ("Usage:\n%s\n", cmdtp->usage); + return; + } + /* avoid "bootd" recursion */ + if ((len < 0) && (cmdtp->cmd == do_bootd)) { + printf ("'bootd' recursion detected\n"); + return; } + /* OK - call function */ + (cmdtp->cmd)(cmdtp, bd, flag, argc, argv); + return; } - printf ("Unknown command '%s' - try 'help'\n", argv[0]); -done: ; } + printf ("Unknown command '%s' - try 'help'\n", argv[0]); } +/*---------------------------------------------------------------*/ /****************************************************************************/ diff --git a/etx094/ppcboot.lds b/etx094/ppcboot.lds index fd6a019..045ecac 100644 --- a/etx094/ppcboot.lds +++ b/etx094/ppcboot.lds @@ -64,7 +64,6 @@ SECTIONS mpc8xx/speed.o (.text) common/dlmalloc.o (.text) ppc/crc32.o (.text) - ppc/extable.o (.text) ppc/zlib.o (.text) . = env_offset; diff --git a/examples/hello_world.c b/examples/hello_world.c index 4d423b2..b6bcdd8 100644 --- a/examples/hello_world.c +++ b/examples/hello_world.c @@ -24,13 +24,13 @@ #include #define MON_PRINT(fmt,args...) \ - (*(void (*)(const char *, ...))(bd->bi_serial_io.printf)) (fmt ,##args) + (*(void (*)(const char *, ...))(bd->bi_mon_fnc.printf)) (fmt ,##args) #define MON_GETC \ - (*(int (*)(void))(bd->bi_serial_io.getc)) + (*(int (*)(void))(bd->bi_mon_fnc.getc)) #define MON_TSTC \ - (*(int (*)(void))(bd->bi_serial_io.tstc)) + (*(int (*)(void))(bd->bi_mon_fnc.tstc)) int hello_world (bd_t *bd, int argc, char *argv[]) { diff --git a/examples/timer.c b/examples/timer.c index fa15f8b..cd74d47 100644 --- a/examples/timer.c +++ b/examples/timer.c @@ -112,19 +112,19 @@ typedef struct tid_8xx_cpmtimer_s { #define MON_PRINT(fmt,args...) \ - (*(void (*)(const char *, ...))(bd->bi_serial_io.printf)) (fmt ,##args) + (*(void (*)(const char *, ...))(bd->bi_mon_fnc.printf)) (fmt ,##args) #define MON_GETC \ - (*(int (*)(void))(bd->bi_serial_io.getc)) + (*(int (*)(void))(bd->bi_mon_fnc.getc)) #define MON_TSTC \ - (*(int (*)(void))(bd->bi_serial_io.tstc)) + (*(int (*)(void))(bd->bi_mon_fnc.tstc)) #define MON_INSTALL_HANDLER \ - (*(int (*)(int, void (*)(void *), void *))(bd->bi_interrupt.install_hdlr)) + (*(int (*)(int, void (*)(void *), void *))(bd->bi_mon_fnc.install_hdlr)) #define MON_FREE_HANDLER \ - (*(int (*)(int))(bd->bi_interrupt.free_hdlr)) + (*(int (*)(int))(bd->bi_mon_fnc.free_hdlr)) void setPeriod (bd_t * bd, tid_8xx_cpmtimer_t *hwp, ulong interval); diff --git a/fads/fads.c b/fads/fads.c index d20e910..ba6f35b 100644 --- a/fads/fads.c +++ b/fads/fads.c @@ -776,7 +776,64 @@ int testdram (void) return (0); } -int pcmciacheck(void) +static int voltage_set(int vcc, int vpp) +{ + u_int reg = 0; + + switch(vpp) { + case 0: reg = 0; break; + case 50: reg = 1; break; + case 120: reg = 2; break; + default: return 1; + } + + switch(vcc) { + case 0: reg = 0; break; +#ifdef CONFIG_ADS + case 50: reg = BCSR1_PCCVCCON; break; +#endif +#ifdef CONFIG_FADS + case 33: reg = BCSR1_PCCVCC0 | BCSR1_PCCVCC1; break; + case 50: reg = BCSR1_PCCVCC1; break; +#endif + default: return 1; + } + + /* first, turn off all power */ + +#ifdef CONFIG_ADS + *((uint *)BCSR1) |= BCSR1_PCCVCCON; +#endif +#ifdef CONFIG_FADS + *((uint *)BCSR1) &= ~(BCSR1_PCCVCC0 | BCSR1_PCCVCC1); +#endif + *((uint *)BCSR1) &= ~BCSR1_PCCVPP_MASK; + + /* enable new powersettings */ + +#ifdef CONFIG_ADS + *((uint *)BCSR1) &= ~reg; +#endif +#ifdef CONFIG_FADS + *((uint *)BCSR1) |= reg; +#endif + + *((uint *)BCSR1) |= reg << 20; + + return 0; +} + +static void hardware_enable(void) +{ + *((uint *)BCSR1) &= ~BCSR1_PCCEN; +} + +static void hardware_disable(void) +{ + *((uint *)BCSR1) &= ~BCSR1_PCCEN; +} + +int pcmcia_init(void) { volatile pcmconf8xx_t *pcmp; uint v; diff --git a/include/ata.h b/include/ata.h new file mode 100644 index 0000000..37e3fca --- /dev/null +++ b/include/ata.h @@ -0,0 +1,223 @@ +/* + * (C) Copyright 2000 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/* + * Most of the following information was derived from the document + * "Information Technology - AT Attachment-3 Interface (ATA-3)" + * which can be found at: + * http://www.dt.wdc.com/ata/ata-3/ata3r5v.zip + * ftp://poctok.iae.nsk.su/pub/asm/Documents/IDE/ATA3R5V.ZIP + * ftp://ftp.fee.vutbr.cz/pub/doc/io/ata/ata-3/ata3r5v.zip + */ + +#ifndef _ATA_H +#define _ATA_H + +/* Register addressing depends on the hardware design; for instance, + * 8-bit (register) and 16-bit (data) accesses might use different + * address spaces. This is implemented bythe following definitions. + */ + +#define CFG_ATA_BASE_ADDR 0x04100000 +#define CFG_ATA_IDE0_OFFSET 0x0000 +#define CFG_ATA_IDE1_OFFSET 0x0C00 + +#define CFG_ATA_DATA_OFFSET 0x0000 /* Offset for data I/O */ +#define CFG_ATA_REG_OFFSET 0x0080 /* Offset for normal register accesses */ +#define CFG_ATA_ALT_OFFSET 0x0100 /* Offset for alternate registers */ + +#define ATA_IO_DATA(x) (CFG_ATA_DATA_OFFSET+(x)) +#define ATA_IO_REG(x) (CFG_ATA_REG_OFFSET +(x)) +#define ATA_IO_ALT(x) (CFG_ATA_ALT_OFFSET +(x)) + +/* + * I/O Register Descriptions + */ +#define ATA_DATA_REG ATA_IO_DATA(0) +#define ATA_ERROR_REG ATA_IO_REG(1) +#define ATA_SECT_CNT ATA_IO_REG(2) +#define ATA_SECT_NUM ATA_IO_REG(3) +#define ATA_CYL_LOW ATA_IO_REG(4) +#define ATA_CYL_HIGH ATA_IO_REG(5) +#define ATA_DEV_HD ATA_IO_REG(6) +#define ATA_COMMAND ATA_IO_REG(7) +#define ATA_STATUS ATA_COMMAND +#define ATA_DEV_CTL ATA_IO_ALT(6) +#define ATA_LBA_LOW ATA_SECT_NUM +#define ATA_LBA_MID ATA_CYL_LOW +#define ATA_LBA_HIGH ATA_CYL_HIGH +#define ATA_LBA_SEL ATA_DEV_CTL + +/* + * Status register bits + */ +#define ATA_STAT_BUSY 0x80 /* Device Busy */ +#define ATA_STAT_READY 0x40 /* Device Ready */ +#define ATA_STAT_FAULT 0x20 /* Device Fault */ +#define ATA_STAT_SEEK 0x10 /* Device Seek Complete */ +#define ATA_STAT_DRQ 0x08 /* Data Request (ready) */ +#define ATA_STAT_CORR 0x04 /* Corrected Data Error */ +#define ATA_STAT_INDEX 0x02 /* Vendor specific */ +#define ATA_STAT_ERR 0x01 /* Error */ + +/* + * Device / Head Register Bits + */ +#define ATA_DEVICE(x) ((x & 1)<<4) +#define ATA_LBA 0xE0 + +/* + * ATA Commands (only mandatory commands listed here) + */ +#define ATA_CMD_READ 0x20 /* Read Sectors (with retries) */ +#define ATA_CMD_READN 0x21 /* Read Sectors ( no retries) */ +#define ATA_CMD_WRITE 0x30 /* Write Sectores (with retries)*/ +#define ATA_CMD_WRITEN 0x31 /* Write Sectors ( no retries)*/ +#define ATA_CMD_VRFY 0x40 /* Read Verify (with retries) */ +#define ATA_CMD_VRFYN 0x41 /* Read verify ( no retries) */ +#define ATA_CMD_SEEK 0x70 /* Seek */ +#define ATA_CMD_DIAG 0x90 /* Execute Device Diagnostic */ +#define ATA_CMD_INIT 0x91 /* Initialize Device Parameters */ +#define ATA_CMD_RD_MULT 0xC4 /* Read Multiple */ +#define ATA_CMD_WR_MULT 0xC5 /* Write Multiple */ +#define ATA_CMD_SETMULT 0xC6 /* Set Multiple Mode */ +#define ATA_CMD_RD_DMA 0xC8 /* Read DMA (with retries) */ +#define ATA_CMD_RD_DMAN 0xC9 /* Read DMS ( no retries) */ +#define ATA_CMD_WR_DMA 0xCA /* Write DMA (with retries) */ +#define ATA_CMD_WR_DMAN 0xCB /* Write DMA ( no retires) */ +#define ATA_CMD_IDENT 0xEC /* Identify Device */ +#define ATA_CMD_SETF 0xEF /* Set Features */ + + +#define ATA_GET_ERR() inb(ATA_STATUS) +#define ATA_GET_STAT() inb(ATA_STATUS) +#define ATA_OK_STAT(stat,good,bad) (((stat)&((good)|(bad)))==(good)) +#define ATA_BAD_R_STAT (ATA_STAT_BUSY | ATA_STAT_ERR) +#define ATA_BAD_W_STAT (ATA_BAD_R_STAT | ATA_STAT_FAULT) +#define ATA_BAD_STAT (ATA_BAD_R_STAT | ATA_STAT_DRQ) +#define ATA_DRIVE_READY (ATA_READY_STAT | ATA_STAT_SEEK) +#define ATA_DATA_READY (ATA_STAT_DRQ) + +#define ATA_BLOCKSIZE 512 /* bytes */ +#define ATA_BLOCKSHIFT 9 /* 2 ^ ATA_BLOCKSIZESHIFT = 512 */ +#define ATA_SECTORWORDS (512 / sizeof(unsigned long)) + +#define ATA_RESET_TIME 60 /* spec allows up to 31 seconds */ + + +/* ------------------------------------------------------------------------- */ + +/* + * structure returned by ATA_CMD_IDENT, as per ANSI ATA2 rev.2f spec + */ +typedef struct hd_driveid { + unsigned short config; /* lots of obsolete bit flags */ + unsigned short cyls; /* "physical" cyls */ + unsigned short reserved2; /* reserved (word 2) */ + unsigned short heads; /* "physical" heads */ + unsigned short track_bytes; /* unformatted bytes per track */ + unsigned short sector_bytes; /* unformatted bytes per sector */ + unsigned short sectors; /* "physical" sectors per track */ + unsigned short vendor0; /* vendor unique */ + unsigned short vendor1; /* vendor unique */ + unsigned short vendor2; /* vendor unique */ + unsigned char serial_no[20]; /* 0 = not_specified */ + unsigned short buf_type; + unsigned short buf_size; /* 512 byte increments; 0 = not_specified */ + unsigned short ecc_bytes; /* for r/w long cmds; 0 = not_specified */ + unsigned char fw_rev[8]; /* 0 = not_specified */ + unsigned char model[40]; /* 0 = not_specified */ + unsigned char max_multsect; /* 0=not_implemented */ + unsigned char vendor3; /* vendor unique */ + unsigned short dword_io; /* 0=not_implemented; 1=implemented */ + unsigned char vendor4; /* vendor unique */ + unsigned char capability; /* bits 0:DMA 1:LBA 2:IORDYsw 3:IORDYsup*/ + unsigned short reserved50; /* reserved (word 50) */ + unsigned char vendor5; /* vendor unique */ + unsigned char tPIO; /* 0=slow, 1=medium, 2=fast */ + unsigned char vendor6; /* vendor unique */ + unsigned char tDMA; /* 0=slow, 1=medium, 2=fast */ + unsigned short field_valid; /* bits 0:cur_ok 1:eide_ok */ + unsigned short cur_cyls; /* logical cylinders */ + unsigned short cur_heads; /* logical heads */ + unsigned short cur_sectors; /* logical sectors per track */ + unsigned short cur_capacity0; /* logical total sectors on drive */ + unsigned short cur_capacity1; /* (2 words, misaligned int) */ + unsigned char multsect; /* current multiple sector count */ + unsigned char multsect_valid; /* when (bit0==1) multsect is ok */ + unsigned int lba_capacity; /* total number of sectors */ + unsigned short dma_1word; /* single-word dma info */ + unsigned short dma_mword; /* multiple-word dma info */ + unsigned short eide_pio_modes; /* bits 0:mode3 1:mode4 */ + unsigned short eide_dma_min; /* min mword dma cycle time (ns) */ + unsigned short eide_dma_time; /* recommended mword dma cycle time (ns) */ + unsigned short eide_pio; /* min cycle time (ns), no IORDY */ + unsigned short eide_pio_iordy; /* min cycle time (ns), with IORDY */ + unsigned short words69_70[2]; /* reserved words 69-70 */ + unsigned short words71_74[4]; /* reserved words 71-74 */ + unsigned short queue_depth; /* */ + unsigned short words76_79[4]; /* reserved words 76-79 */ + unsigned short major_rev_num; /* */ + unsigned short minor_rev_num; /* */ + unsigned short command_set_1; /* bits 0:Smart 1:Security 2:Removable 3:PM */ + unsigned short command_set_2; /* bits 14:Smart Enabled 13:0 zero */ + unsigned short cfsse; /* command set-feature supported extensions */ + unsigned short cfs_enable_1; /* command set-feature enabled */ + unsigned short cfs_enable_2; /* command set-feature enabled */ + unsigned short csf_default; /* command set-feature default */ + unsigned short dma_ultra; /* */ + unsigned short word89; /* reserved (word 89) */ + unsigned short word90; /* reserved (word 90) */ + unsigned short CurAPMvalues; /* current APM values */ + unsigned short word92; /* reserved (word 92) */ + unsigned short hw_config; /* hardware config */ + unsigned short words94_125[32];/* reserved words 94-125 */ + unsigned short last_lun; /* reserved (word 126) */ + unsigned short word127; /* reserved (word 127) */ + unsigned short dlf; /* device lock function + * 15:9 reserved + * 8 security level 1:max 0:high + * 7:6 reserved + * 5 enhanced erase + * 4 expire + * 3 frozen + * 2 locked + * 1 en/disabled + * 0 capability + */ + unsigned short csfo; /* current set features options + * 15:4 reserved + * 3 auto reassign + * 2 reverting + * 1 read-look-ahead + * 0 write cache + */ + unsigned short words130_155[26];/* reserved vendor words 130-155 */ + unsigned short word156; + unsigned short words157_159[3];/* reserved vendor words 157-159 */ + unsigned short words160_255[95];/* reserved words 160-255 */ +} hd_driveid_t; + +/* ------------------------------------------------------------------------- */ + +#endif /* _ATA_H */ diff --git a/include/cmd_bootm.h b/include/cmd_bootm.h index cf681bb..6c39013 100644 --- a/include/cmd_bootm.h +++ b/include/cmd_bootm.h @@ -37,6 +37,18 @@ void do_bootm (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]); " 'arg' can be the address of an initrd image\n" \ ), +#if (CONFIG_COMMANDS & CFG_CMD_BOOTD) +void do_bootd (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]); + +#define CMD_TBL_BOOTD MK_CMD_TBL_ENTRY( \ + "bootd", 4, 1, do_bootd, \ + "bootd - boot default, i.e., run 'bootcmd'\n", \ + NULL \ +), +#else +#define CMD_TBL_BOOTD +#endif + #if (CONFIG_COMMANDS & CFG_CMD_IMI) void do_iminfo (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]); diff --git a/include/cmd_ide.h b/include/cmd_ide.h new file mode 100644 index 0000000..57ef921 --- /dev/null +++ b/include/cmd_ide.h @@ -0,0 +1,51 @@ +/* + * (C) Copyright 2000 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/* + * IDE support + */ +#ifndef _CMD_IDE_H +#define _CMD_IDE_H + +#include +#include + +#if (CONFIG_COMMANDS & CFG_CMD_IDE) +#define CMD_TBL_IDE MK_CMD_TBL_ENTRY( \ + "ide", 3, 5, do_ide, \ + "ide - IDE sub-system", \ + "reset - reset IDE controller\n" \ + "ide info - show available IDE devices\n" \ + "ide device [dev] - show or set current device\n" \ + "ide read addr blk# cnt\n" \ + "ide write addr blk# cnt - read/write `cnt'" \ + " blocks starting at block `blk#'\n" \ + " to/from memory address `addr'\n" \ +), + +void do_ide (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]); +#else +#define CMD_TBL_IDE +#endif + +#endif /* _CMD_IDE_H */ diff --git a/include/cmd_misc.h b/include/cmd_misc.h index fd337fc..0c2c87f 100644 --- a/include/cmd_misc.h +++ b/include/cmd_misc.h @@ -1,2 +1,61 @@ +/* + * (C) Copyright 2000 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/* + * Miscellanious commands + */ +#ifndef _CMD_MISC_H +#define _CMD_MISC_H + +#if (CONFIG_COMMANDS & CFG_CMD_PCI) + +#define CMD_TBL_PCIINFO MK_CMD_TBL_ENTRY( \ + "pciinfo", 3, 2, do_pciinfo, \ + "pciinfo - print information about PCI devices\n", \ + "[ bus ]\n" \ + " - print information about PCI devices on PCI-Bus 'bus'\n" \ +), + +/* Implemented in $(BOARD)/pci.c */ +void do_pciinfo (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]); + +#else #define CMD_TBL_PCIINFO +#endif /* CFG_CMD_PCI */ + +#if (CONFIG_COMMANDS & CFG_CMD_IRQ) + +#define CMD_TBL_IRQINFO MK_CMD_TBL_ENTRY( \ + "irqinfo", 3, 1, do_irqinfo, \ + "irqinfo - print information about IRQs\n", \ + NULL \ +), + +/* Implemented in $(CPU)/interrupts.c */ +void do_irqinfo (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]); + +#else #define CMD_TBL_IRQINFO +#endif /* CONFIG_COMMANDS & CFG_CMD_IRQ */ + +#endif /* _CMD_MISC_H */ diff --git a/include/cmd_pcmcia.h b/include/cmd_pcmcia.h new file mode 100644 index 0000000..f25c65e --- /dev/null +++ b/include/cmd_pcmcia.h @@ -0,0 +1,39 @@ +/* + * (C) Copyright 2000 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/* + * PCMCIA support + */ +#ifndef _CMD_PCMCIA_H +#define _CMD_PCMCIA_H + +#define CMD_TBL_PINIT MK_CMD_TBL_ENTRY( \ + "pinit", 4, 2, do_pinit, \ + "pinit - initialize PCMCIA sub-system\n", \ + NULL \ +), + +void do_pinit (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]); + +#endif /* _CMD_PCMCIA_H */ + diff --git a/include/command.h b/include/command.h index 521b4ef..d2f28d3 100644 --- a/include/command.h +++ b/include/command.h @@ -93,12 +93,21 @@ typedef void command_t (cmd_tbl_t *, bd_t *, int, int, char *[]); #define CFG_CMD_NET 0x00000080 /* bootp, tftpboot, rarpboot */ #define CFG_CMD_ENV 0x00000100 /* saveenv */ #define CFG_CMD_KGDB 0x00000200 /* kgdb */ +#define CFG_CMD_IDE 0x00000400 /* IDE harddisk support */ +#define CFG_CMD_PCI 0x00000800 /* pciinfo */ +#define CFG_CMD_IRQ 0x00001000 /* irqinfo */ +#define CFG_CMD_BOOTD 0x00002000 /* bootd */ #define CFG_CMD_ALL 0xFFFFFFFF /* ALL commands */ -/* Default configuration: everything but KGDB (which is quite big) +/* Commands that are considered "non-standard" for some reason + * (memory hogs, requires special hardware, not fully tested, etc.) */ -#define CONFIG_CMD_DFL (CFG_CMD_ALL & ~(CFG_CMD_KGDB)) +#define CFG_CMD_NONSTD (CFG_CMD_KGDB | CFG_CMD_IDE | CFG_CMD_PCI | CFG_CMD_IRQ) + +/* Default configuration + */ +#define CONFIG_CMD_DFL (CFG_CMD_ALL & ~CFG_CMD_NONSTD) #ifndef CONFIG_COMMANDS #define CONFIG_COMMANDS CONFIG_CMD_DFL diff --git a/include/commproc.h b/include/commproc.h index da6404a..4a0cd66 100644 --- a/include/commproc.h +++ b/include/commproc.h @@ -428,6 +428,46 @@ typedef struct scc_enet { #define SICR_ENET_CLKRT ((uint)0x00003d00) #endif /* CONFIG_RPXLITE */ +/*** FADS823 ********************************************************/ + +#if defined(CONFIG_MPC823FADS) && defined(CONFIG_FADS) +/* This ENET stuff is for the MPC823FADS with ethernet on SCC2. + */ +#ifdef CONFIG_SCC2_ENET +#define PROFF_ENET PROFF_SCC2 +#define CPM_CR_ENET CPM_CR_CH_SCC2 +#define SCC_ENET 1 +#define CPMVEC_ENET CPMVEC_SCC2 +#endif + +#ifdef CONFIG_SCC1_ENET +#define PROFF_ENET PROFF_SCC1 +#define CPM_CR_ENET CPM_CR_CH_SCC1 +#define SCC_ENET 0 +#define CPMVEC_ENET CPMVEC_SCC1 +#endif + +#define PA_ENET_RXD ((ushort)0x0004) +#define PA_ENET_TXD ((ushort)0x0008) +#define PA_ENET_TCLK ((ushort)0x0400) +#define PA_ENET_RCLK ((ushort)0x0200) + +#define PB_ENET_TENA ((uint)0x00002000) + +#define PC_ENET_CLSN ((ushort)0x0040) +#define PC_ENET_RENA ((ushort)0x0080) + +#define SICR_ENET_MASK ((uint)0x0000ff00) +#define SICR_ENET_CLKRT ((uint)0x00002e00) + +/* 68160 PHY control */ + +#define PC_ENET_ETHLOOP ((ushort)0x0800) +#define PC_ENET_TPFLDL ((ushort)0x0400) +#define PC_ENET_TPSQEL ((ushort)0x0200) + +#endif /* CONFIG_FADS823FADS */ + /*** FADS850SAR ********************************************************/ #if defined(CONFIG_MPC850SAR) && defined(CONFIG_FADS) diff --git a/include/config_ADCIOP.h b/include/config_ADCIOP.h index 31b3f96..3bf5c82 100644 --- a/include/config_ADCIOP.h +++ b/include/config_ADCIOP.h @@ -69,7 +69,7 @@ #define CFG_CBSIZE 256 /* Console I/O Buffer Size */ #endif #define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ -#define CFG_MAXARGS 8 /* max number of command args */ +#define CFG_MAXARGS 16 /* max number of command args */ #define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ #define CFG_MEMTEST_START 0x0400000 /* memtest works on */ diff --git a/include/config_CPCI405.h b/include/config_CPCI405.h index 0793d8f..15ccf6e 100644 --- a/include/config_CPCI405.h +++ b/include/config_CPCI405.h @@ -67,12 +67,11 @@ #define CFG_LOADS_BAUD_CHANGE 1 /* allow baudrate change */ #define CONFIG_PCI_PNP 1 /* include pci plug-and-play */ -#define CONFIG_PCIINFO 1 /* include pci info command */ - -#define CONFIG_IRQINFO 1 /* include irq info command */ #define CONFIG_DRAM_SPEED (CONFIG_BUSCLOCK) /* MHz */ +#define CONFIG_COMMANDS \ + (CONFIG_CMD_DFL | CFG_CMD_PCI | CFG_CMD_IRQ) /* * Miscellaneous configurable options */ @@ -84,7 +83,7 @@ #define CFG_CBSIZE 256 /* Console I/O Buffer Size */ #endif #define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ -#define CFG_MAXARGS 8 /* max number of command args */ +#define CFG_MAXARGS 16 /* max number of command args */ #define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ #define CFG_MEMTEST_START 0x0400000 /* memtest works on */ diff --git a/include/config_ETX094.h b/include/config_ETX094.h index 07c4c2b..9e19b97 100644 --- a/include/config_ETX094.h +++ b/include/config_ETX094.h @@ -64,7 +64,7 @@ #define CFG_CBSIZE 256 /* Console I/O Buffer Size */ #endif #define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ -#define CFG_MAXARGS 8 /* max number of command args */ +#define CFG_MAXARGS 16 /* max number of command args */ #define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ #define CFG_MEMTEST_START 0x0300000 /* memtest works on */ diff --git a/include/config_FADS823.h b/include/config_FADS823.h new file mode 100644 index 0000000..434fc97 --- /dev/null +++ b/include/config_FADS823.h @@ -0,0 +1,437 @@ + /* + * A collection of structures, addresses, and values associated with + * the Motorola 860T FADS board. Copied from the MBX stuff. + * Magnus Damm added defines for 8xxrom and extended bd_info. + * Helmut Buchsbaum added bitvalues for BCSRx + * + * Copyright (c) 1998 Dan Malek (dmalek@jlc.net) + */ + +/* + * 1999-nov-26: The FADS is using the following physical memorymap: + * + * f4000000 -> f400ffff : pcmcia + * 02100000 -> 0210ffff : BCSR connected to CS1, setup by 8xxROM + * ff000000 -> ff00ffff : IMAP internal in the cpu + * 02800000 -> 028nnnnn : flash connected to CS0, setup by 8xxROM + * 00000000 -> nnnnnnnn : sdram/dram setup by 8xxrom + */ + +/* ------------------------------------------------------------------------- */ + +/* + * board/config.h - configuration options, board specific + */ + +#ifndef __CONFIG_H +#define __CONFIG_H + +#define CONFIG_ETHADDR 08:00:22:50:70:63 // Ethernet address +#define CONFIG_ENV_OVERWRITE 1 // Overwrite the environment + +#define CONFIG_VIDEO 1 // To enable the video initialization +#define CONFIG_PCMCIA 1 // To enable the PCMCIA initialization +#define CONFIG_I2C 1 // To enable I2C support + +/* Video related */ + +#define CONFIG_VIDEO_LOGO 1 // Show the logo +#define CONFIG_VIDEO_ENCODER_AD7176 1 // Enable this encoder +#define CONFIG_VIDEO_ENCODER_AD7176_ADDR 0x54 // Default on fads +#define CONFIG_VIDEO_SIZE (2*1024*1024) +#define CONFIG_VIDEO_ADDR (bd->bi_memsize - CONFIG_VIDEO_SIZE) // Frame buffer address + +/* Wireless 56Khz 4PPM keyboard on SMCx */ + +#define CONFIG_WL_4PPM_KEYBOARD 1 +#define CONFIG_WL_4PPM_KEYBOARD_SMC 0 // SMC to use (0 indexed) + +/* + * High Level Configuration Options + * (easy to change) + */ +#include + +#define CONFIG_MPC823 1 +#define CONFIG_MPC823FADS 1 +#define CONFIG_FADS 1 + +#define CONFIG_8xx_CPUCLOCK 50 +#define CONFIG_8xx_BUSCLOCK (CONFIG_8xx_CPUCLOCK) + +#define CONFIG_8xx_CONS_SMC1 1 /* Console is on SMC1 */ +#undef CONFIG_8xx_CONS_SMC2 +#define CONFIG_BAUDRATE 115200 + +// Set the CPU speed to 50Mhz on the FADS + +#if 0 +#define MPC8XX_FACT 10 /* Multiply by 10 */ +#define MPC8XX_XIN 50000000 /* 50 MHz in */ +#else +#define MPC8XX_FACT 10 /* Multiply by 10 */ +#define MPC8XX_XIN 5000000 /* 5 MHz in */ +#define CFG_PLPRCR_MF (MPC8XX_FACT-1) << 20 /* From 0 to 4095 */ +#endif +#define MPC8XX_HZ ((MPC8XX_XIN) * (MPC8XX_FACT)) + +#if 1 +#define CONFIG_BOOTDELAY 2 /* autoboot after 2 seconds */ +#define CONFIG_LOADS_ECHO 0 /* Dont echoes received characters */ +#define CONFIG_BOOTCOMMAND "bootp" /* autoboot command */ +#define CONFIG_BOOTARGS "" +#else +#define CONFIG_BOOTDELAY 0 /* autoboot disabled */ +#endif + +#define CONFIG_DRAM_SPEED (CONFIG_8xx_BUSCLOCK) /* MHz */ +/* + * Miscellaneous configurable options + */ +#define CFG_LONGHELP /* undef to save memory */ +#define CFG_PROMPT "=:>" /* Monitor Command Prompt */ +#define CFG_CBSIZE 256 /* Console I/O Buffer Size */ +#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ +#define CFG_MAXARGS 16 /* max number of command args */ +#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ + +#define CFG_MEMTEST_START 0x00000000 /* memtest works on */ +#define CFG_MEMTEST_END 0x00800000 /* 4 ... 8 MB in DRAM */ + +#define CFG_TFTP_LOADADDR 0x00100000 /* default load address */ +/* + * Low Level Configuration Settings + * (address mappings, register initial values, etc.) + * You should know what you are doing if you make changes here. + */ +/*----------------------------------------------------------------------- + * Internal Memory Mapped Register + */ +#define CFG_IMMR 0xFF000000 +#define CFG_IMMR_SIZE ((uint)(64 * 1024)) + +/*----------------------------------------------------------------------- + * Definitions for initial stack pointer and data area (in DPRAM) + */ +#define CFG_INIT_RAM_ADDR CFG_IMMR +#define CFG_INIT_RAM_END 0x3000 /* End of used area in DPRAM */ +#define CFG_INIT_DATA_SIZE 64 /* size in bytes reserved for initial data */ +#define CFG_INIT_DATA_OFFSET (CFG_INIT_RAM_END - CFG_INIT_DATA_SIZE) +#define CFG_INIT_SP_OFFSET CFG_INIT_DATA_OFFSET + + +/*----------------------------------------------------------------------- + * Start addresses for the final memory configuration + * (Set up by the startup code) + * Please note that CFG_SDRAM_BASE _must_ start at 0 + * Also NOTE that it doesn't mean SDRAM - it means MEMORY. + */ +#define CFG_SDRAM_BASE 0x00000000 +#define CFG_FLASH_BASE 0x02800000 +#define CFG_FLASH_SIZE ((uint)(8 * 1024 * 1024)) /* max 8Mbyte */ +#if 0 +#define CFG_MONITOR_LEN (256 << 10) /* Reserve 128 kB for Monitor */ +#else +#define CFG_MONITOR_LEN (512 << 10) /* Reserve 512 kB for Monitor */ +#endif +#define CFG_MALLOC_LEN (256 << 10) /* Reserve 128 kB for malloc() */ + +/* + * For booting Linux, the board info and command line data + * have to be in the first 8 MB of memory, since this is + * the maximum mapped by the Linux kernel during initialization. + */ +#define CFG_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */ +/*----------------------------------------------------------------------- + * FLASH organization + */ +#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */ +#define CFG_MAX_FLASH_SECT 8 /* max number of sectors on one chip */ + +#define CFG_FLASH_ERASE_TOUT 120000 /* Timeout for Flash Erase (in ms) */ +#define CFG_FLASH_WRITE_TOUT 500 /* Timeout for Flash Write (in ms) */ + +#define CFG_FLASH_ENV_OFFSET 0x00040000 /* Offset of Environment Sector */ +#define CFG_FLASH_ENV_SIZE 0x40000 /* Total Size of Environment Sector */ +/* the other CS:s are determined by looking at parameters in BCSRx */ + +/* values according to the manual */ + +/*----------------------------------------------------------------------- + * Cache Configuration + */ +#define CFG_CACHELINE_SIZE 16 /* For all MPC8xx CPUs */ + +/*----------------------------------------------------------------------- + * SYPCR - System Protection Control 11-9 + * SYPCR can only be written once after reset! + *----------------------------------------------------------------------- + * Software & Bus Monitor Timer max, Bus Monitor enable, SW Watchdog freeze + */ +#define CFG_SYPCR (SYPCR_SWTC | SYPCR_BMT | SYPCR_BME | SYPCR_SWF | SYPCR_SWP) + +/*----------------------------------------------------------------------- + * SUMCR - SIU Module Configuration 11-6 + *----------------------------------------------------------------------- + * PCMCIA config., multi-function pin tri-state + */ +#define CFG_SIUMCR (SIUMCR_DBGC00 | SIUMCR_DBPC00 | SIUMCR_MLRC01) + +/*----------------------------------------------------------------------- + * TBSCR - Time Base Status and Control 11-26 + *----------------------------------------------------------------------- + * Clear Reference Interrupt Status, Timebase freezing enabled + */ +#define CFG_TBSCR (TBSCR_REFA | TBSCR_REFB | TBSCR_TBE) + +/*----------------------------------------------------------------------- + * PISCR - Periodic Interrupt Status and Control 11-31 + *----------------------------------------------------------------------- + * Clear Periodic Interrupt Status, Interrupt Timer freezing enabled + */ +#define CFG_PISCR (PISCR_PS | PISCR_PITF) + +/*----------------------------------------------------------------------- + * PLPRCR - PLL, Low-Power, and Reset Control Register 15-30 + *----------------------------------------------------------------------- + * Reset PLL lock status sticky bit, timer expired status bit and timer * + * interrupt status bit - leave PLL multiplication factor unchanged ! + */ +#define CFG_PLPRCR (PLPRCR_SPLSS | PLPRCR_TEXPS | PLPRCR_TMIST | CFG_PLPRCR_MF) + +/*----------------------------------------------------------------------- + * SCCR - System Clock and reset Control Register 15-27 + *----------------------------------------------------------------------- + * Set clock output, timebase and RTC source and divider, + * power management and some other internal clocks + */ +#define SCCR_MASK SCCR_EBDF11 +#define CFG_SCCR (SCCR_TBS | \ + SCCR_COM00 | SCCR_DFSYNC00 | SCCR_DFBRG00 | \ + SCCR_DFNL000 | SCCR_DFNH000 | SCCR_DFLCD000 | \ + SCCR_DFALCD00) + + /*----------------------------------------------------------------------- + * + *----------------------------------------------------------------------- + * + */ +#define CFG_DER 0 + +/* Because of the way the 860 starts up and assigns CS0 the +* entire address space, we have to set the memory controller +* differently. Normally, you write the option register +* first, and then enable the chip select by writing the +* base register. For CS0, you must write the base register +* first, followed by the option register. +*/ + +/* + * Init Memory Controller: + * + * BR0/1 and OR0/1 (FLASH) + */ +/* the other CS:s are determined by looking at parameters in BCSRx */ + +#define BCSR_ADDR ((uint) 0x02100000) +#define BCSR_SIZE ((uint)(64 * 1024)) + +#define FLASH_BASE0_PRELIM 0x02800000 /* FLASH bank #0 */ +#define FLASH_BASE1_PRELIM 0x00000000 /* FLASH bank #1 */ + +#define CFG_REMAP_OR_AM 0x80000000 /* OR addr mask */ +#define CFG_PRELIM_OR_AM 0xFFE00000 /* OR addr mask */ + +/* FLASH timing: ACS = 10, TRLX = 1, CSNT = 1, SCY = 3, EHTR = 0 */ +#define CFG_OR_TIMING_FLASH (OR_CSNT_SAM | OR_ACS_DIV4 | OR_BI | OR_SCY_3_CLK | OR_TRLX) + +#define CFG_OR0_REMAP (CFG_REMAP_OR_AM | CFG_OR_TIMING_FLASH) +#define CFG_OR0_PRELIM (CFG_PRELIM_OR_AM | CFG_OR_TIMING_FLASH) /* 1 Mbyte until detected and only 1 Mbyte is needed*/ +#define CFG_BR0_PRELIM ((FLASH_BASE0_PRELIM & BR_BA_MSK) | BR_V ) + +/* BCSRx - Board Control and Status Registers */ +#define CFG_OR1_REMAP CFG_OR0_REMAP +#define CFG_OR1_PRELIM 0xffff8110 /* 64Kbyte address space */ +#define CFG_BR1_PRELIM ((BCSR_ADDR) | BR_V ) + + +/* + * Memory Periodic Timer Prescaler + */ + +/* periodic timer for refresh */ +#define CFG_MAMR_PTA 97 /* start with divider for 100 MHz */ + +/* refresh rate 15.6 us (= 64 ms / 4K = 62.4 / quad bursts) for <= 128 MBit */ +#define CFG_MPTPR_2BK_4K MPTPR_PTP_DIV16 /* setting for 2 banks */ +#define CFG_MPTPR_1BK_4K MPTPR_PTP_DIV32 /* setting for 1 bank */ + +/* refresh rate 7.8 us (= 64 ms / 8K = 31.2 / quad bursts) for 256 MBit */ +#define CFG_MPTPR_2BK_8K MPTPR_PTP_DIV8 /* setting for 2 banks */ +#define CFG_MPTPR_1BK_8K MPTPR_PTP_DIV16 /* setting for 1 bank */ + +/* + * MAMR settings for SDRAM + */ + +/* 8 column SDRAM */ +#define CFG_MAMR_8COL ((CFG_MAMR_PTA << MAMR_PTA_SHIFT) | MAMR_PTAE | \ + MAMR_AMA_TYPE_0 | MAMR_DSA_1_CYCL | MAMR_G0CLA_A11 | \ + MAMR_RLFA_1X | MAMR_WLFA_1X | MAMR_TLFA_4X) +/* 9 column SDRAM */ +#define CFG_MAMR_9COL ((CFG_MAMR_PTA << MAMR_PTA_SHIFT) | MAMR_PTAE | \ + MAMR_AMA_TYPE_1 | MAMR_DSA_1_CYCL | MAMR_G0CLA_A10 | \ + MAMR_RLFA_1X | MAMR_WLFA_1X | MAMR_TLFA_4X) + +#define CFG_MAMR 0x13a01114 +/* + * Internal Definitions + * + * Boot Flags + */ +#define BOOTFLAG_COLD 0x01 /* Normal Power-On: Boot from FLASH */ +#define BOOTFLAG_WARM 0x02 /* Software reboot */ + +/* values according to the manual */ + +#define PCMCIA_MEM_ADDR ((uint)0xf4000000) +#define PCMCIA_MEM_SIZE ((uint)(64 * 1024)) + +#define BCSR0 ((uint) (BCSR_ADDR + 00)) +#define BCSR1 ((uint) (BCSR_ADDR + 0x04)) +#define BCSR2 ((uint) (BCSR_ADDR + 0x08)) +#define BCSR3 ((uint) (BCSR_ADDR + 0x0c)) +#define BCSR4 ((uint) (BCSR_ADDR + 0x10)) + +/* FADS bitvalues by Helmut Buchsbaum + * see MPC8xxADS User's Manual for a proper description + * of the following structures + */ + +#define BCSR0_ERB ((uint)0x80000000) +#define BCSR0_IP ((uint)0x40000000) +#define BCSR0_BDIS ((uint)0x10000000) +#define BCSR0_BPS_MASK ((uint)0x0C000000) +#define BCSR0_ISB_MASK ((uint)0x01800000) +#define BCSR0_DBGC_MASK ((uint)0x00600000) +#define BCSR0_DBPC_MASK ((uint)0x00180000) +#define BCSR0_EBDF_MASK ((uint)0x00060000) + +#define BCSR1_FLASH_EN ((uint)0x80000000) +#define BCSR1_DRAM_EN ((uint)0x40000000) +#define BCSR1_ETHEN ((uint)0x20000000) +#define BCSR1_IRDEN ((uint)0x10000000) +#define BCSR1_FLASH_CFG_EN ((uint)0x08000000) +#define BCSR1_CNT_REG_EN_PROTECT ((uint)0x04000000) +#define BCSR1_BCSR_EN ((uint)0x02000000) +#define BCSR1_RS232EN_1 ((uint)0x01000000) +#define BCSR1_PCCEN ((uint)0x00800000) +#define BCSR1_PCCVCC0 ((uint)0x00400000) +#define BCSR1_PCCVPP_MASK ((uint)0x00300000) +#define BCSR1_DRAM_HALF_WORD ((uint)0x00080000) +#define BCSR1_RS232EN_2 ((uint)0x00040000) +#define BCSR1_SDRAM_EN ((uint)0x00020000) +#define BCSR1_PCCVCC1 ((uint)0x00010000) + +#define BCSR2_FLASH_PD_MASK ((uint)0xF0000000) +#define BCSR2_DRAM_PD_MASK ((uint)0x07800000) +#define BCSR2_DRAM_PD_SHIFT (23) +#define BCSR2_EXTTOLI_MASK ((uint)0x00780000) +#define BCSR2_DBREVNR_MASK ((uint)0x00030000) + +#define BCSR3_DBID_MASK ((ushort)0x3800) +#define BCSR3_CNT_REG_EN_PROTECT ((ushort)0x0400) +#define BCSR3_BREVNR0 ((ushort)0x0080) +#define BCSR3_FLASH_PD_MASK ((ushort)0x0070) +#define BCSR3_BREVN1 ((ushort)0x0008) +#define BCSR3_BREVN2_MASK ((ushort)0x0003) + +#define BCSR4_ETHLOOP ((uint)0x80000000) +#define BCSR4_TFPLDL ((uint)0x40000000) +#define BCSR4_TPSQEL ((uint)0x20000000) +#define BCSR4_SIGNAL_LAMP ((uint)0x10000000) +#ifdef CONFIG_MPC823 +#define BCSR4_USB_EN ((uint)0x08000000) +#endif /* CONFIG_MPC823 */ +#ifdef CONFIG_MPC860SAR +#define BCSR4_UTOPIA_EN ((uint)0x08000000) +#endif /* CONFIG_MPC860SAR */ +#ifdef CONFIG_MPC860T +#define BCSR4_FETH_EN ((uint)0x08000000) +#endif /* CONFIG_MPC860T */ +#ifdef CONFIG_MPC823 +#define BCSR4_USB_SPEED ((uint)0x04000000) +#endif /* CONFIG_MPC823 */ +#ifdef CONFIG_MPC860T +#define BCSR4_FETHCFG0 ((uint)0x04000000) +#endif /* CONFIG_MPC860T */ +#ifdef CONFIG_MPC823 +#define BCSR4_VCCO ((uint)0x02000000) +#endif /* CONFIG_MPC823 */ +#ifdef CONFIG_MPC860T +#define BCSR4_FETHFDE ((uint)0x02000000) +#endif /* CONFIG_MPC860T */ +#ifdef CONFIG_MPC823 +#define BCSR4_VIDEO_ON ((uint)0x00800000) +#endif /* CONFIG_MPC823 */ +#ifdef CONFIG_MPC823 +#define BCSR4_VDO_EKT_CLK_EN ((uint)0x00400000) +#endif /* CONFIG_MPC823 */ +#ifdef CONFIG_MPC860T +#define BCSR4_FETHCFG1 ((uint)0x00400000) +#endif /* CONFIG_MPC860T */ +#ifdef CONFIG_MPC823 +#define BCSR4_VIDEO_RST ((uint)0x00200000) +#endif /* CONFIG_MPC823 */ +#ifdef CONFIG_MPC860T +#define BCSR4_FETHRST ((uint)0x00200000) +#endif /* CONFIG_MPC860T */ +#ifdef CONFIG_MPC823 +#define BCSR4_MODEM_EN ((uint)0x00100000) +#endif /* CONFIG_MPC823 */ +#ifdef CONFIG_MPC823 +#define BCSR4_DATA_VOICE ((uint)0x00080000) +#endif /* CONFIG_MPC823 */ +#ifdef CONFIG_MPC850 +#define BCSR4_DATA_VOICE ((uint)0x00080000) +#endif /* CONFIG_MPC50 */ + +#define CONFIG_DRAM_50MHZ 1 +#define CONFIG_SDRAM_50MHZ + +#ifdef CONFIG_MPC860T + +/* Interrupt level assignments. +*/ +#define FEC_INTERRUPT SIU_LEVEL1 /* FEC interrupt */ + +#endif /* CONFIG_MPC860T */ + +/* We don't use the 8259. +*/ +#define NR_8259_INTS 0 + +/* Machine type +*/ +#define _MACH_8xx (_MACH_fads) + +/* + * MPC8xx CPM Options + */ +#define CONFIG_SCC_ENET 1 +#define CONFIG_SCC2_ENET 1 +#undef CONFIG_FEC_ENET +#undef CONFIG_CPM_IIC +#undef CONFIG_UCODE_PATCH + +#define CONFIG_DISK_SPINUP_TIME 1000000 + +/* PCMCIA configuration */ + +#define PCMCIA_MAX_SLOTS 1 + +#ifdef CONFIG_MPC860 +#define PCMCIA_SLOT_A 1 +#endif + +#endif /* __CONFIG_H */ diff --git a/include/config_FADS850SAR.h b/include/config_FADS850SAR.h index 6c5dcb6..dce1a72 100644 --- a/include/config_FADS850SAR.h +++ b/include/config_FADS850SAR.h @@ -74,7 +74,7 @@ #define CFG_CBSIZE 256 /* Console I/O Buffer Size */ #endif #define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ -#define CFG_MAXARGS 8 /* max number of command args */ +#define CFG_MAXARGS 16 /* max number of command args */ #define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ #define CFG_MEMTEST_START 0x00000000 /* memtest works on */ diff --git a/include/config_FADS860T.h b/include/config_FADS860T.h index 7a3d685..3d11571 100644 --- a/include/config_FADS860T.h +++ b/include/config_FADS860T.h @@ -78,7 +78,7 @@ #define CFG_CBSIZE 256 /* Console I/O Buffer Size */ #endif #define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ -#define CFG_MAXARGS 8 /* max number of command args */ +#define CFG_MAXARGS 16 /* max number of command args */ #define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ #define CFG_MEMTEST_START 0x0100000 /* memtest works on */ diff --git a/include/config_SPD823TS.h b/include/config_SPD823TS.h index 08e4dec..2480577 100644 --- a/include/config_SPD823TS.h +++ b/include/config_SPD823TS.h @@ -53,7 +53,8 @@ #define CONFIG_LOADS_ECHO 1 /* echo on for serial download */ #undef CFG_LOADS_BAUD_CHANGE /* don't allow baudrate change */ -#define CONFIG_COMMANDS (CONFIG_CMD_DFL & ~(CFG_CMD_FLASH)) /* no Flash */ +#define CONFIG_COMMANDS \ +((CONFIG_CMD_DFL & ~(CFG_CMD_FLASH)) | CFG_CMD_IDE) /* no Flash, but IDE */ /*----------------------------------------------------------------------*/ #define CONFIG_ETHADDR 00:d0:93:00:01:cb @@ -72,7 +73,7 @@ #define CFG_CBSIZE 256 /* Console I/O Buffer Size */ #endif #define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ -#define CFG_MAXARGS 8 /* max number of command args */ +#define CFG_MAXARGS 16 /* max number of command args */ #define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ #define CFG_MEMTEST_START 0x00100000 /* memtest works on */ @@ -107,9 +108,9 @@ #define CFG_SDRAM_BASE 0x00000000 #define CFG_FLASH_BASE 0x0C000000 #ifdef DEBUG -#define CFG_MONITOR_LEN (256 << 10) /* Reserve 256 kB for Monitor */ +#define CFG_MONITOR_LEN (512 << 10) /* Reserve 512 kB for Monitor */ #else -#define CFG_MONITOR_LEN (128 << 10) /* Reserve 128 kB for Monitor */ +#define CFG_MONITOR_LEN (256 << 10) /* Reserve 256 kB for Monitor */ #endif #define CFG_MALLOC_LEN (128 << 10) /* Reserve 128 kB for malloc() */ diff --git a/include/config_TQM823L.h b/include/config_TQM823L.h index b18caf2..a754c46 100644 --- a/include/config_TQM823L.h +++ b/include/config_TQM823L.h @@ -64,7 +64,7 @@ #define CFG_CBSIZE 256 /* Console I/O Buffer Size */ #endif #define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ -#define CFG_MAXARGS 8 /* max number of command args */ +#define CFG_MAXARGS 16 /* max number of command args */ #define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ #define CFG_MEMTEST_START 0x0400000 /* memtest works on */ diff --git a/include/config_TQM850L.h b/include/config_TQM850L.h index 39b9505..4ecf347 100644 --- a/include/config_TQM850L.h +++ b/include/config_TQM850L.h @@ -64,7 +64,7 @@ #define CFG_CBSIZE 256 /* Console I/O Buffer Size */ #endif #define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ -#define CFG_MAXARGS 8 /* max number of command args */ +#define CFG_MAXARGS 16 /* max number of command args */ #define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ #define CFG_MEMTEST_START 0x0400000 /* memtest works on */ diff --git a/include/config_TQM855L.h b/include/config_TQM855L.h index 2077188..df0fa12 100644 --- a/include/config_TQM855L.h +++ b/include/config_TQM855L.h @@ -66,7 +66,7 @@ #define CFG_CBSIZE 256 /* Console I/O Buffer Size */ #endif #define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ -#define CFG_MAXARGS 8 /* max number of command args */ +#define CFG_MAXARGS 16 /* max number of command args */ #define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ #define CFG_MEMTEST_START 0x0400000 /* memtest works on */ diff --git a/include/config_TQM860L.h b/include/config_TQM860L.h index 7acc60c..ea82bf1 100644 --- a/include/config_TQM860L.h +++ b/include/config_TQM860L.h @@ -64,7 +64,7 @@ #define CFG_CBSIZE 256 /* Console I/O Buffer Size */ #endif #define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ -#define CFG_MAXARGS 8 /* max number of command args */ +#define CFG_MAXARGS 16 /* max number of command args */ #define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ #define CFG_MEMTEST_START 0x0400000 /* memtest works on */ diff --git a/include/config_cogent_mpc8xx.h b/include/config_cogent_mpc8xx.h index 4e0bab4..74f8bdf 100644 --- a/include/config_cogent_mpc8xx.h +++ b/include/config_cogent_mpc8xx.h @@ -114,7 +114,7 @@ #define CFG_CBSIZE 256 /* Console I/O Buffer Size */ #endif #define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ -#define CFG_MAXARGS 8 /* max number of command args */ +#define CFG_MAXARGS 16 /* max number of command args */ #define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ #define CFG_MEMTEST_START 0x00400000 /* memtest works on */ diff --git a/include/console.h b/include/console.h new file mode 100644 index 0000000..2a476a8 --- /dev/null +++ b/include/console.h @@ -0,0 +1,17 @@ +#ifndef _CONSOLE_H_ +#define _CONSOLE_H_ + +/* console functions */ + +console_io_t *console; // Must be init into common/board.c to bd->bi_console_io + +// Dont use them from into the FLASH, but after the code is relocated (board.c) +// Before use the serial_* functions. + +#define CON_GETC console->getc +#define CON_TSTC console->tstc +#define CON_PUTC(c) console->putc(c) +#define CON_PRINTF(s,args...) console->printf(s,##args) +#define CON_PUTSTR(s) console->putstr(s) + +#endif diff --git a/include/i2c.h b/include/i2c.h new file mode 100644 index 0000000..8e4010e --- /dev/null +++ b/include/i2c.h @@ -0,0 +1,22 @@ +/* +** I2C interface +** ============= +** (C) 2000 by Paolo Scaffardi (arsenio@tin.it) +** AIRVENT SAM s.p.a - RIMINI(ITALY) +** +*/ + +#ifndef _I2C_H_ +#define _I2C_H_ + +void i2c_init(int speed); +void i2c_send( unsigned char address, + unsigned char secondary_address, + int enable_secondary, + unsigned short size, unsigned char dataout[] ); +void i2c_receive(unsigned char address, + unsigned char secondary_address, + int enable_secondary, + unsigned short size_to_expect, unsigned char datain[] ); + +#endif diff --git a/include/ide.h b/include/ide.h new file mode 100644 index 0000000..b94a740 --- /dev/null +++ b/include/ide.h @@ -0,0 +1,208 @@ +/* + * (C) Copyright 2000 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#ifndef _IDE_H +#define _IDE_H + +/* + * I/O Port definition for IDE Reset + */ +#define PC_IDE_RESET ((ushort)0x0008) /* PC 12 !!! */ + +/* Timings for IDE Interface - assuming 50 MHz clock !!! + * + * SETUP / LENGTH / HOLD - TIME AT 50 MHZ CLK + * 70 165 30 PIO-Mode 0, [ns] + * 4 9 2 [Cycles] + * 50 125 20 PIO-Mode 1, [ns] + * 3 7 2 [Cycles] + * 30 100 15 PIO-Mode 2, [ns] + * 2 6 1 [Cycles] + * 30 80 10 PIO-Mode 3, [ns] + * 2 5 1 [Cycles] + * 25 70 10 PIO-Mode 4, [ns] + * 2 4 1 [Cycles] + */ + +/* + * Definitions for PCMCIA control registers to operate in IDE mode + */ + +/* Window 0: + * Base: 0x04100000 CS1 + * Port Size: 2 Bytes + * Strobe Hold: 2 clk => PIO Mode 0 + * Strobe Setup: 4 clk => PIO Mode 0 + * Strobe Length: 9 clk => PIO Mode 0 + * Port Size: 16 Bit + * Common Memory Space + */ + +#define CFG_PCMCIA_PBR0 0x04100000 +#define CFG_PCMCIA_POR0 ( PCMCIA_BSIZE_2 \ + | PCMCIA_SHT(2) \ + | PCMCIA_SST(4) \ + | PCMCIA_SL(9) \ + | PCMCIA_PPS_16 \ + | PCMCIA_PRS_MEM \ + | PCMCIA_PSLOT_B \ + | PCMCIA_PV \ + ) + +/* Window 1: + * Base: 0x04100080 CS1 + * Port Size: 8 Bytes + * Strobe Hold: 2 clk => PIO Mode 0 + * Strobe Setup: 4 clk => PIO Mode 0 + * Strobe Length: 9 clk => PIO Mode 0 + * Port Size: 8 Bit + * Common Memory Space + */ + +#define CFG_PCMCIA_PBR1 0x04100080 +#define CFG_PCMCIA_POR1 ( PCMCIA_BSIZE_8 \ + | PCMCIA_SHT(2) \ + | PCMCIA_SST(4) \ + | PCMCIA_SL(9) \ + | PCMCIA_PPS_8 \ + | PCMCIA_PRS_MEM \ + | PCMCIA_PSLOT_B \ + | PCMCIA_PV \ + ) + +/* Window 2: + * Base: 0x04100100 CS2 + * Port Size: 8 Bytes + * Strobe Hold: 2 clk => PIO Mode 0 + * Strobe Setup: 4 clk => PIO Mode 0 + * Strobe Length: 9 clk => PIO Mode 0 + * Port Size: 8 Bit + * Common Memory Space + */ + +#define CFG_PCMCIA_PBR2 0x04100100 +#define CFG_PCMCIA_POR2 ( PCMCIA_BSIZE_8 \ + | PCMCIA_SHT(2) \ + | PCMCIA_SST(4) \ + | PCMCIA_SL(9) \ + | PCMCIA_PPS_8 \ + | PCMCIA_PRS_MEM \ + | PCMCIA_PSLOT_B \ + | PCMCIA_PV \ + ) + +/* Window 3: + * not used + */ +#define CFG_PCMCIA_PBR3 0 +#define CFG_PCMCIA_POR3 0 + +/* Window 4: + * Base: 0x041000C00 CS1 + * Port Size: 2 Bytes + * Strobe Hold: 2 clk => PIO Mode 0 + * Strobe Setup: 4 clk => PIO Mode 0 + * Strobe Length: 9 clk => PIO Mode 0 + * Port Size: 16 Bit + * Common Memory Space + */ + +#define CFG_PCMCIA_PBR4 0x04100C00 +#define CFG_PCMCIA_POR4 ( PCMCIA_BSIZE_2 \ + | PCMCIA_SHT(2) \ + | PCMCIA_SST(4) \ + | PCMCIA_SL(9) \ + | PCMCIA_PPS_16 \ + | PCMCIA_PRS_MEM \ + | PCMCIA_PSLOT_B \ + | PCMCIA_PV \ + ) + +/* Window 5: + * Base: 0x04100C80 CS1 + * Port Size: 8 Bytes + * Strobe Hold: 2 clk => PIO Mode 0 + * Strobe Setup: 4 clk => PIO Mode 0 + * Strobe Length: 9 clk => PIO Mode 0 + * Port Size: 8 Bit + * Common Memory Space + */ + +#define CFG_PCMCIA_PBR5 0x04100C80 +#define CFG_PCMCIA_POR5 ( PCMCIA_BSIZE_8 \ + | PCMCIA_SHT(2) \ + | PCMCIA_SST(4) \ + | PCMCIA_SL(9) \ + | PCMCIA_PPS_8 \ + | PCMCIA_PRS_MEM \ + | PCMCIA_PSLOT_B \ + | PCMCIA_PV \ + ) + +/* Window 6: + * Base: 0x04100D00 CS2 + * Port Size: 8 Bytes + * Strobe Hold: 2 clk => PIO Mode 0 + * Strobe Setup: 4 clk => PIO Mode 0 + * Strobe Length: 9 clk => PIO Mode 0 + * Port Size: 8 Bit + * Common Memory Space + */ + +#define CFG_PCMCIA_PBR6 0x04100D00 +#define CFG_PCMCIA_POR6 ( PCMCIA_BSIZE_8 \ + | PCMCIA_SHT(2) \ + | PCMCIA_SST(4) \ + | PCMCIA_SL(9) \ + | PCMCIA_PPS_8 \ + | PCMCIA_PRS_MEM \ + | PCMCIA_PSLOT_B \ + | PCMCIA_PV \ + ) + +/* Window 7: + * not used + */ +#define CFG_PCMCIA_PBR7 0 +#define CFG_PCMCIA_POR7 0 + + +#define ATA_IO_BASE CFG_PCMCIA_PBR0 + +#if 0 /* disabled - problems accessing IDE1 at 0x04100c00 */ +#define IDE_MAXBUS 2 /* max. 2 IDE busses */ +#else +#define IDE_MAXBUS 1 /* max. 2 IDE busses */ +#endif +#define IDE_MAXDEVICE (IDE_MAXBUS*2) /* max. 2 drives per IDE bus */ +#define IDE_BUS(dev) (dev >> 1) + +/* + * Function Prototypes + */ + +void ide_init (void); +ulong ide_read (int device, ulong blknr, ulong blkcnt, ulong *buffer); +ulong ide_write (int device, ulong blknr, ulong blkcnt, ulong *buffer); + +#endif /* _IDE_H */ diff --git a/include/mpc8xx.h b/include/mpc8xx.h index e7d0f65..36dc244 100644 --- a/include/mpc8xx.h +++ b/include/mpc8xx.h @@ -456,7 +456,60 @@ #define PCMCIA_RDY_F(slot) (0x00100000 >> (slot << 4)) #define PCMCIA_MASK(slot) (0xFFFF0000 >> (slot << 4)) +/*----------------------------------------------------------------------- + * PCMCIA Option Register Definitions + * + * Bank Sizes: + */ +#define PCMCIA_BSIZE_1 0x00000000 /* Bank size: 1 Bytes */ +#define PCMCIA_BSIZE_2 0x08000000 /* Bank size: 2 Bytes */ +#define PCMCIA_BSIZE_4 0x18000000 /* Bank size: 4 Bytes */ +#define PCMCIA_BSIZE_8 0x10000000 /* Bank size: 8 Bytes */ +#define PCMCIA_BSIZE_16 0x30000000 /* Bank size: 16 Bytes */ +#define PCMCIA_BSIZE_32 0x38000000 /* Bank size: 32 Bytes */ +#define PCMCIA_BSIZE_64 0x28000000 /* Bank size: 64 Bytes */ +#define PCMCIA_BSIZE_128 0x20000000 /* Bank size: 128 Bytes */ +#define PCMCIA_BSIZE_256 0x60000000 /* Bank size: 256 Bytes */ +#define PCMCIA_BSIZE_512 0x68000000 /* Bank size: 512 Bytes */ +#define PCMCIA_BSIZE_1K 0x78000000 /* Bank size: 1 kB */ +#define PCMCIA_BSIZE_2K 0x70000000 /* Bank size: 2 kB */ +#define PCMCIA_BSIZE_4K 0x50000000 /* Bank size: 4 kB */ +#define PCMCIA_BSIZE_8K 0x58000000 /* Bank size: 8 kB */ +#define PCMCIA_BSIZE_16K 0x48000000 /* Bank size: 16 kB */ +#define PCMCIA_BSIZE_32K 0x40000000 /* Bank size: 32 kB */ +#define PCMCIA_BSIZE_64K 0xC0000000 /* Bank size: 64 kB */ +#define PCMCIA_BSIZE_128K 0xC8000000 /* Bank size: 128 kB */ +#define PCMCIA_BSIZE_256K 0xD8000000 /* Bank size: 256 kB */ +#define PCMCIA_BSIZE_512K 0xD0000000 /* Bank size: 512 kB */ +#define PCMCIA_BSIZE_1M 0xF0000000 /* Bank size: 1 MB */ +#define PCMCIA_BSIZE_2M 0xF8000000 /* Bank size: 2 MB */ +#define PCMCIA_BSIZE_4M 0xE8000000 /* Bank size: 4 MB */ +#define PCMCIA_BSIZE_8M 0xE0000000 /* Bank size: 8 MB */ +#define PCMCIA_BSIZE_16M 0xA0000000 /* Bank size: 16 MB */ +#define PCMCIA_BSIZE_32M 0xA8000000 /* Bank size: 32 MB */ +#define PCMCIA_BSIZE_64M 0xB8000000 /* Bank size: 64 MB */ + +/* PCMCIA Timing */ +#define PCMCIA_SHT(t) ((t & 0x0F)<<16) /* Strobe Hold Time */ +#define PCMCIA_SST(t) ((t & 0x0F)<<12) /* Strobe Setup Time */ +#define PCMCIA_SL(t) ((t==32) ? 0 : ((t & 0x1F)<<7)) /* Strobe Length */ + +/* PCMCIA Port Sizes */ +#define PCMCIA_PPS_8 0x00000000 /* 8 bit port size */ +#define PCMCIA_PPS_16 0x00000040 /* 16 bit port size */ + +/* PCMCIA Region Select */ +#define PCMCIA_PRS_MEM 0x00000000 /* Common Memory Space */ +#define PCMCIA_PRS_ATTR 0x00000010 /* Attribute Space */ +#define PCMCIA_PRS_IO 0x00000018 /* I/O Space */ +#define PCMCIA_PRS_DMA 0x00000020 /* DMA, normal transfer */ +#define PCMCIA_PRS_DMA_LAST 0x00000028 /* DMA, last transactn */ +#define PCMCIA_PRS_CEx 0x00000030 /* A[22:23] ==> CE1,CE2 */ +#define PCMCIA_PSLOT_A 0x00000000 /* Slot A */ +#define PCMCIA_PSLOT_B 0x00000004 /* Slot B */ +#define PCMCIA_WPROT 0x00000002 /* Write Protect */ +#define PCMCIA_PV 0x00000001 /* Valid Bit */ #define UPMA 0x00000000 #define UPMB 0x00800000 diff --git a/include/ppcboot.h b/include/ppcboot.h index c972f81..7fab839 100644 --- a/include/ppcboot.h +++ b/include/ppcboot.h @@ -49,18 +49,17 @@ typedef volatile unsigned long vu_long; typedef void (interrupt_handler_t)(void *); -typedef struct serial_io { +typedef struct monitor_functions { int (*getc)(void); int (*tstc)(void); void (*putc)(const char c); + void (*putstr)(const char *s); void (*printf)(const char *fmt, ...); -} serial_io_t; - -typedef struct intr_util { void (*install_hdlr)(int, interrupt_handler_t *, void *); void (*free_hdlr)(int); -} intr_util_t; - + void *(*malloc)(size_t); + void (*free)(void *); +} mon_fnc_t; /* A Board Information structure that is given to a program when * ppcboot starts it up. @@ -83,8 +82,7 @@ typedef struct bd_info { unsigned long bi_intfreq; /* Internal Freq, in MHz */ unsigned long bi_busfreq; /* Bus Freq, in MHz */ unsigned long bi_baudrate; /* Console Baudrate */ - serial_io_t bi_serial_io; /* Addr of monitor fnc for Console I/O */ - intr_util_t bi_interrupt; /* Addr of monitor fnc for Interrupts */ + mon_fnc_t bi_mon_fnc; /* Addresses of monitor functions */ } bd_t; /* The following data structure is placed in DPRAM to allow for a diff --git a/include/version.h b/include/version.h index aa90ed7..64267ba 100644 --- a/include/version.h +++ b/include/version.h @@ -24,6 +24,6 @@ #ifndef __VERSION_H__ #define __VERSION_H__ -#define PPCBOOT_VERSION "ppcboot 0.5.2" +#define PPCBOOT_VERSION "ppcboot 0.5.3" #endif /* __VERSION_H__ */ diff --git a/include/video.h b/include/video.h new file mode 100644 index 0000000..79516c4 --- /dev/null +++ b/include/video.h @@ -0,0 +1,19 @@ +/* +** MPC823 Video Controller +** ======================= +** (C) 2000 by Paolo Scaffardi (arsenio@tin.it) +** AIRVENT SAM s.p.a - RIMINI(ITALY) +** +*/ + +#ifndef _VIDEO_H_ +#define _VIDEO_H_ + +// Video functions + +int video_init (void *videobase); +void video_putc (const char c); +void video_putstr (const char *s); +void video_printf (const char *fmt, ...); + +#endif diff --git a/include/video_ad7176.h b/include/video_ad7176.h new file mode 100644 index 0000000..830e090 --- /dev/null +++ b/include/video_ad7176.h @@ -0,0 +1,78 @@ +#ifndef _VIDEO_AD7176_H_ +#define _VIDEO_AD7176_H_ + +#define VIDEO_MODE_YUYV // The only mode supported by this encoder +#undef VIDEO_MODE_RGB +#define VIDEO_MODE_BPP 16 + +#ifdef VIDEO_MODE_PAL +#define VIDEO_ACTIVE_COLS 720 +#define VIDEO_ACTIVE_ROWS 576 +#define VIDEO_VISIBLE_COLS 640 +#define VIDEO_VISIBLE_ROWS 480 +#endif + +#ifdef VIDEO_MODE_NTSC +#define VIDEO_ACTIVE_COLS 720 +#define VIDEO_ACTIVE_ROWS 525 +#define VIDEO_VISIBLE_COLS 640 +#define VIDEO_VISIBLE_ROWS 400 +#endif + +static unsigned char + video_encoder_data[] = { +#ifdef VIDEO_MODE_NTSC + 0x04, // Mode Register 0 +#ifdef VIDEO_DEBUG_COLORBARS + 0x82, +#else + 0x02, // Mode Register 1 +#endif + 0x16, // Subcarrier Freq 0 + 0x7c, // Subcarrier Freq 1 + 0xf0, // Subcarrier Freq 2 + 0x21, // Subcarrier Freq 3 + 0x00, // Subcarrier phase + 0x02, // Timing Register 0 + 0x00, // Extended Captioning 0 + 0x00, // Extended Captioning 1 + 0x00, // Closed Captioning 0 + 0x00, // Closed Captioning 1 + 0x00, // Timing Register 1 + 0x08, // Mode Register 2 + 0x00, // Pedestal Register 0 + 0x00, // Pedestal Register 1 + 0x00, // Pedestal Register 2 + 0x00, // Pedestal Register 3 + 0x00 // Mode Register 3 + +#endif + +#ifdef VIDEO_MODE_PAL + 0x05, // Mode Register 0 +#ifdef VIDEO_DEBUG_COLORBARS + 0x82, +#else + 0x02, // Mode Register 1 (2) +#endif + 0xcb, // Subcarrier Freq 0 + 0x8a, // Subcarrier Freq 1 + 0x09, // Subcarrier Freq 2 + 0x2a, // Subcarrier Freq 3 + 0x00, // Subcarrier phase + 0x0a, // Timing Register 0 (a) + 0x00, // Extended Captioning 0 + 0x00, // Extended Captioning 1 + 0x00, // Closed Captioning 0 + 0x00, // Closed Captioning 1 + 0x00, // Timing Register 1 + 0x08, // Mode Register 2 (8) + 0x00, // Pedestal Register 0 + 0x00, // Pedestal Register 1 + 0x00, // Pedestal Register 2 + 0x00, // Pedestal Register 3 + 0x00 // Mode Register 3 +#endif + } ; + +#endif diff --git a/include/video_easylogo.h b/include/video_easylogo.h new file mode 100644 index 0000000..2fe2364 --- /dev/null +++ b/include/video_easylogo.h @@ -0,0 +1,26 @@ +/* +** video easylogo +** ============== +** (C) 2000 by Paolo Scaffardi (arsenio@tin.it) +** AIRVENT SAM s.p.a - RIMINI(ITALY) +** +** This utility is still under construction! +*/ + +// Dont use print here 'cause video console is not initialized! + +#ifndef _EASYLOGO_H_ +#define _EASYLOGO_H_ + +//#define ENABLE_ASCII_BANNERS + +typedef struct { + unsigned char *data; + int width, + height, + bpp, + pixel_size, + size; +} fastimage_t ; + +#endif diff --git a/include/video_font.h b/include/video_font.h new file mode 100644 index 0000000..a0ede01 --- /dev/null +++ b/include/video_font.h @@ -0,0 +1,4621 @@ +#ifndef _VIDEO_FONT_ +#define _VIDEO_FONT_ + +#define VIDEO_FONT_CHARS 256 +#define VIDEO_FONT_WIDTH 8 +#define VIDEO_FONT_HEIGHT 16 +#define VIDEO_FONT_SIZE (VIDEO_FONT_CHARS * VIDEO_FONT_HEIGHT) + +static unsigned char video_fontdata[VIDEO_FONT_SIZE] = { + + /* 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 */ + +}; + +#endif diff --git a/include/video_logo.h b/include/video_logo.h new file mode 100644 index 0000000..802e854 --- /dev/null +++ b/include/video_logo.h @@ -0,0 +1,831 @@ +// +// Generated by EasyLogo, (C) 2000 by Paolo Scaffardi +// +// To use this, include it and call: easylogo_plot(screen,&ppcboot_logo, width,x,y) +// +// Where: 'screen' is the pointer to the frame buffer +// 'width' is the screen width +// 'x' is the horizontal position +// 'y' is the vertical position +// + +#include + +#define DEF_PPCBOOT_LOGO_WIDTH 80 +#define DEF_PPCBOOT_LOGO_HEIGHT 80 +#define DEF_PPCBOOT_LOGO_PIXELS 6400 +#define DEF_PPCBOOT_LOGO_BPP 16 +#define DEF_PPCBOOT_LOGO_PIXEL_SIZE 2 +#define DEF_PPCBOOT_LOGO_SIZE 12800 + +unsigned char DEF_PPCBOOT_LOGO_DATA[DEF_PPCBOOT_LOGO_SIZE] = { + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x14, 0x7f, 0x34, 0x7f, 0x29, 0x7f, 0x28, 0x7f, 0x29, + 0x7f, 0x23, 0x7f, 0x34, 0x7f, 0x2b, 0x7f, 0x47, 0x7f, 0x1f, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x7f, 0x35, 0x7f, 0x3a, 0x7f, 0x18, 0x80, 0x10, 0x7f, 0x12, 0x80, 0x10, 0x7f, 0x11, + 0x7f, 0x10, 0x80, 0x10, 0x7f, 0x11, 0x7f, 0x10, 0x7f, 0x13, 0x7f, 0x39, 0x7f, 0x38, 0x7f, 0x14, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x7f, 0x2e, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x11, 0x80, 0x10, 0x7f, 0x12, 0x7f, 0x13, + 0x7f, 0x13, 0x7f, 0x10, 0x7f, 0x12, 0x7f, 0x10, 0x7f, 0x11, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x35, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x7f, 0x29, 0x80, 0x10, 0x7f, 0x11, 0x7f, 0x12, 0x7f, 0x10, 0x80, 0x10, 0x7f, 0x12, 0x7f, 0x11, + 0x80, 0x10, 0x7f, 0x14, 0x7f, 0x13, 0x7f, 0x16, 0x7f, 0x2c, 0x7f, 0x28, 0x7f, 0x1b, 0x80, 0x10, + 0x7f, 0x31, 0x7f, 0x14, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x24, 0x7f, 0x3a, + 0x80, 0x10, 0x7f, 0x11, 0x7f, 0x13, 0x80, 0x10, 0x7f, 0x10, 0x7f, 0x13, 0x7f, 0x13, 0x7f, 0x10, + 0x80, 0x10, 0x7f, 0x14, 0x80, 0x10, 0x7f, 0x23, 0x7f, 0x4c, 0x7f, 0x6a, 0x7f, 0x54, 0x7f, 0x29, + 0x80, 0x10, 0x7f, 0x2e, 0x7f, 0x21, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x3a, 0x80, 0x10, + 0x80, 0x10, 0x7f, 0x10, 0x7f, 0x11, 0x7f, 0x12, 0x7f, 0x15, 0x7f, 0x13, 0x80, 0x10, 0x7f, 0x12, + 0x7f, 0x12, 0x7f, 0x11, 0x80, 0x10, 0x7f, 0x29, 0x7f, 0x5d, 0x7f, 0x70, 0x7f, 0x59, 0x7f, 0x37, + 0x7f, 0x1a, 0x80, 0x10, 0x7f, 0x2c, 0x7f, 0x1c, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x21, 0x7f, 0x21, 0x7f, 0x10, + 0x7f, 0x15, 0x7f, 0x12, 0x7f, 0x14, 0x7f, 0x15, 0x7f, 0x11, 0x7f, 0x10, 0x80, 0x11, 0x80, 0x13, + 0x7f, 0x11, 0x7f, 0x11, 0x7f, 0x10, 0x7f, 0x24, 0x7f, 0x47, 0x7f, 0x3a, 0x7f, 0x33, 0x7f, 0x1d, + 0x7f, 0x14, 0x7f, 0x19, 0x80, 0x10, 0x7f, 0x36, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x27, 0x7f, 0x1c, 0x7f, 0x11, + 0x7e, 0x15, 0x7d, 0x13, 0x7d, 0x14, 0x7e, 0x13, 0x80, 0x10, 0x82, 0x12, 0x83, 0x16, 0x83, 0x12, + 0x81, 0x10, 0x7f, 0x11, 0x7c, 0x15, 0x7b, 0x1c, 0x7d, 0x1d, 0x7f, 0x18, 0x7f, 0x1c, 0x7f, 0x11, + 0x7f, 0x16, 0x7f, 0x18, 0x80, 0x10, 0x7f, 0x1c, 0x7f, 0x28, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x38, 0x7f, 0x12, 0x7f, 0x14, + 0x7e, 0x12, 0x7d, 0x15, 0x7d, 0x14, 0x7e, 0x12, 0x80, 0x11, 0x83, 0x13, 0x85, 0x16, 0x85, 0x17, + 0x83, 0x14, 0x80, 0x12, 0x7d, 0x13, 0x7d, 0x14, 0x7e, 0x12, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x13, + 0x7f, 0x11, 0x7f, 0x15, 0x7f, 0x13, 0x80, 0x10, 0x7f, 0x39, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x2e, 0x7f, 0x10, 0x7f, 0x16, + 0x80, 0x14, 0x80, 0x17, 0x81, 0x1b, 0x81, 0x12, 0x82, 0x11, 0x83, 0x17, 0x84, 0x16, 0x83, 0x15, + 0x85, 0x14, 0x84, 0x13, 0x83, 0x10, 0x83, 0x11, 0x82, 0x15, 0x80, 0x28, 0x7f, 0x1b, 0x7f, 0x10, + 0x7f, 0x15, 0x7f, 0x12, 0x7f, 0x15, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, + 0x82, 0x12, 0x85, 0x12, 0x85, 0x20, 0x83, 0x26, 0x81, 0x18, 0x80, 0x10, 0x80, 0x11, 0x80, 0x16, + 0x83, 0x13, 0x84, 0x10, 0x88, 0x15, 0x89, 0x1b, 0x84, 0x11, 0x7f, 0x23, 0x7f, 0x39, 0x7f, 0x22, + 0x7f, 0x11, 0x7f, 0x13, 0x7f, 0x14, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x31, 0x80, 0x10, 0x7f, 0x16, + 0x82, 0x24, 0x85, 0x3b, 0x84, 0x25, 0x81, 0x28, 0x7e, 0x24, 0x7c, 0x17, 0x7d, 0x13, 0x7e, 0x13, + 0x7e, 0x12, 0x83, 0x29, 0x87, 0x5d, 0x89, 0x81, 0x85, 0x70, 0x80, 0x31, 0x7f, 0x23, 0x7f, 0x24, + 0x80, 0x10, 0x7f, 0x14, 0x7f, 0x12, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x31, 0x80, 0x10, 0x7f, 0x17, + 0x7f, 0x75, 0x7f, 0xb6, 0x7d, 0x83, 0x7c, 0x31, 0x7c, 0x15, 0x7c, 0x15, 0x7e, 0x13, 0x7f, 0x11, + 0x7c, 0x2a, 0x7e, 0x71, 0x81, 0xa0, 0x82, 0xb8, 0x81, 0xc7, 0x7f, 0x95, 0x7f, 0x34, 0x7f, 0x10, + 0x7f, 0x11, 0x80, 0x10, 0x7f, 0x13, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x7f, 0x3b, + 0x7d, 0xb0, 0x7c, 0xdc, 0x7b, 0xd8, 0x7c, 0x83, 0x7d, 0x1f, 0x7e, 0x14, 0x7f, 0x11, 0x80, 0x1f, + 0x7f, 0x70, 0x7e, 0xc6, 0x7e, 0xd9, 0x7e, 0xce, 0x7f, 0xdf, 0x7f, 0xd4, 0x7f, 0x81, 0x7f, 0x21, + 0x7f, 0x11, 0x7f, 0x16, 0x7f, 0x12, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x33, 0x80, 0x10, 0x7f, 0x8e, + 0x7e, 0xa1, 0x7c, 0x58, 0x7d, 0x91, 0x80, 0xdb, 0x82, 0x71, 0x82, 0x12, 0x83, 0x14, 0x85, 0x2f, + 0x83, 0xc0, 0x81, 0xe2, 0x80, 0x62, 0x7f, 0x41, 0x7f, 0x89, 0x80, 0xbb, 0x7f, 0xdc, 0x7f, 0x60, + 0x80, 0x10, 0x7f, 0x15, 0x7f, 0x15, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x30, 0x80, 0x10, 0x7f, 0x9b, + 0x7f, 0x67, 0x7f, 0x35, 0x80, 0x50, 0x80, 0xc7, 0x81, 0x86, 0x82, 0x14, 0x82, 0x1e, 0x82, 0x37, + 0x83, 0xd3, 0x82, 0xb4, 0x82, 0x1b, 0x83, 0x24, 0x82, 0x4c, 0x7f, 0x71, 0x7f, 0xeb, 0x7f, 0x83, + 0x80, 0x10, 0x7f, 0x11, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x32, 0x80, 0x10, 0x7f, 0x8b, + 0x7f, 0x3c, 0x7f, 0x19, 0x7c, 0x40, 0x77, 0xc2, 0x72, 0x74, 0x7d, 0x13, 0x78, 0x20, 0x78, 0x29, + 0x74, 0x95, 0x78, 0x9a, 0x7d, 0x1d, 0x80, 0x10, 0x81, 0x11, 0x80, 0x45, 0x7f, 0xeb, 0x7f, 0x81, + 0x80, 0x10, 0x7f, 0x17, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x31, 0x80, 0x10, 0x7f, 0x8d, + 0x7f, 0x77, 0x80, 0x10, 0x79, 0x23, 0x67, 0x7b, 0x5a, 0x7a, 0x56, 0x7e, 0x51, 0x80, 0x54, 0x65, + 0x5a, 0x8d, 0x66, 0x97, 0x79, 0x1c, 0x80, 0x10, 0x80, 0x10, 0x81, 0x5b, 0x7f, 0xeb, 0x80, 0x80, + 0x80, 0x10, 0x7f, 0x13, 0x7f, 0x11, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x32, 0x80, 0x10, 0x7e, 0x63, + 0x7a, 0xa6, 0x76, 0x25, 0x64, 0x4b, 0x53, 0x80, 0x42, 0xa4, 0x35, 0xb4, 0x2f, 0xa8, 0x35, 0x9a, + 0x40, 0xa1, 0x50, 0xa7, 0x66, 0x48, 0x76, 0x20, 0x77, 0x49, 0x7b, 0xc4, 0x7c, 0xe2, 0x7c, 0x5c, + 0x7f, 0x10, 0x80, 0x16, 0x80, 0x14, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7e, 0x30, 0x7f, 0x10, 0x7a, 0x2a, + 0x65, 0x89, 0x52, 0x74, 0x49, 0x91, 0x3f, 0xa8, 0x34, 0xa9, 0x2b, 0xac, 0x27, 0xb7, 0x2a, 0xb2, + 0x2f, 0xb2, 0x39, 0xc2, 0x42, 0xa6, 0x49, 0x94, 0x48, 0xa8, 0x4a, 0xc1, 0x57, 0x98, 0x6f, 0x33, + 0x7e, 0x12, 0x82, 0x15, 0x86, 0x13, 0x80, 0x10, 0x81, 0x36, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7d, 0x3d, 0x7f, 0x11, 0x74, 0x26, + 0x54, 0x78, 0x3c, 0x99, 0x35, 0xa4, 0x32, 0xa7, 0x2f, 0xa8, 0x2a, 0xb2, 0x28, 0xbd, 0x27, 0xc1, + 0x29, 0xc1, 0x2a, 0xbf, 0x2d, 0xc8, 0x2e, 0xc9, 0x28, 0xbc, 0x28, 0xab, 0x3c, 0xa6, 0x65, 0x4e, + 0x7e, 0x13, 0x83, 0x13, 0x8a, 0x17, 0x83, 0x10, 0x81, 0x32, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7e, 0x2f, 0x78, 0x1d, 0x6d, 0x4e, + 0x51, 0x85, 0x35, 0x98, 0x2f, 0xa3, 0x2f, 0xab, 0x2f, 0xaf, 0x2d, 0xb3, 0x2c, 0xba, 0x2c, 0xc1, + 0x2b, 0xbe, 0x2a, 0xbf, 0x2a, 0xc6, 0x2a, 0xb5, 0x31, 0x99, 0x38, 0x8b, 0x45, 0xac, 0x69, 0x5e, + 0x7e, 0x12, 0x83, 0x16, 0x87, 0x15, 0x86, 0x15, 0x80, 0x10, 0x80, 0x38, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7e, 0x2b, 0x7a, 0x19, 0x70, 0x66, + 0x51, 0x91, 0x31, 0xa6, 0x2d, 0xab, 0x2e, 0xab, 0x30, 0xab, 0x30, 0xb5, 0x30, 0xc2, 0x2f, 0xc1, + 0x2d, 0xbf, 0x2d, 0xc2, 0x2d, 0xb0, 0x33, 0x94, 0x39, 0x8e, 0x43, 0x8e, 0x52, 0x9d, 0x6c, 0x52, + 0x7f, 0x11, 0x82, 0x11, 0x85, 0x12, 0x83, 0x17, 0x80, 0x10, 0x7f, 0x39, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x27, 0x7d, 0x1a, 0x74, 0x3e, + 0x54, 0x77, 0x37, 0x98, 0x30, 0xa2, 0x32, 0xae, 0x33, 0xb3, 0x33, 0xb7, 0x32, 0xb8, 0x34, 0xaf, + 0x37, 0xac, 0x33, 0xa9, 0x38, 0x8d, 0x3b, 0x87, 0x40, 0x96, 0x52, 0x99, 0x5f, 0x96, 0x70, 0x4a, + 0x7f, 0x11, 0x81, 0x14, 0x82, 0x2c, 0x80, 0x2d, 0x7e, 0x1c, 0x7f, 0x18, 0x7f, 0x2e, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x25, 0x7c, 0x1d, 0x7d, 0x18, + 0x5d, 0x6d, 0x48, 0x6f, 0x41, 0x7b, 0x3b, 0x94, 0x38, 0xa1, 0x39, 0x93, 0x3b, 0x86, 0x3f, 0x80, + 0x43, 0x7b, 0x40, 0x86, 0x41, 0x8e, 0x45, 0x91, 0x53, 0x98, 0x63, 0xa6, 0x6b, 0xaf, 0x78, 0x59, + 0x80, 0x10, 0x7f, 0x12, 0x7f, 0x55, 0x7e, 0x86, 0x7d, 0x5b, 0x80, 0x10, 0x7f, 0x15, 0x80, 0x1e, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x22, 0x7b, 0x1e, 0x7b, 0x25, + 0x68, 0x9e, 0x59, 0x7c, 0x52, 0x69, 0x49, 0x83, 0x41, 0x9b, 0x3d, 0x91, 0x3d, 0x88, 0x3d, 0x8e, + 0x42, 0x8f, 0x4c, 0x87, 0x55, 0x85, 0x5c, 0x9d, 0x67, 0xb1, 0x70, 0xbb, 0x75, 0xc4, 0x7b, 0x69, + 0x80, 0x10, 0x7f, 0x13, 0x7e, 0x38, 0x7d, 0x81, 0x7d, 0x72, 0x7e, 0x1b, 0x80, 0x10, 0x81, 0x3a, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x34, 0x7f, 0x10, 0x79, 0x2e, + 0x73, 0xa3, 0x6d, 0xa1, 0x64, 0x83, 0x59, 0x76, 0x4e, 0x83, 0x45, 0x8b, 0x41, 0x8a, 0x45, 0x85, + 0x4f, 0x7c, 0x5c, 0x86, 0x67, 0x9a, 0x71, 0xaf, 0x77, 0xc1, 0x7a, 0xc2, 0x7c, 0xd2, 0x7d, 0x78, + 0x80, 0x10, 0x7f, 0x14, 0x7e, 0x1a, 0x7e, 0x51, 0x7e, 0x4c, 0x7f, 0x11, 0x7f, 0x13, 0x80, 0x1c, + 0x7f, 0x33, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x29, 0x81, 0x24, 0x7f, 0x11, 0x7a, 0x2b, + 0x7a, 0xaa, 0x7b, 0xb9, 0x73, 0xa8, 0x68, 0x82, 0x5c, 0x71, 0x54, 0x6d, 0x51, 0x6b, 0x53, 0x75, + 0x5e, 0x8a, 0x69, 0xa1, 0x75, 0xae, 0x7f, 0xbc, 0x81, 0xd4, 0x7f, 0xe3, 0x7f, 0xe9, 0x7f, 0xba, + 0x7f, 0x29, 0x80, 0x10, 0x7f, 0x15, 0x7f, 0x15, 0x81, 0x1a, 0x81, 0x12, 0x7f, 0x15, 0x80, 0x10, + 0x7f, 0x25, 0x7f, 0x11, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x82, 0x3a, 0x80, 0x10, 0x80, 0x10, 0x7d, 0x3c, + 0x7e, 0xc7, 0x7f, 0xb9, 0x7b, 0xb3, 0x73, 0xb1, 0x6b, 0xa5, 0x66, 0x99, 0x64, 0x99, 0x66, 0xa1, + 0x6c, 0xae, 0x74, 0xb5, 0x7c, 0xbb, 0x82, 0xd4, 0x82, 0xe6, 0x80, 0xe9, 0x80, 0xe9, 0x80, 0xe9, + 0x7f, 0x81, 0x80, 0x16, 0x81, 0x11, 0x82, 0x13, 0x83, 0x11, 0x82, 0x1b, 0x80, 0x10, 0x7f, 0x11, + 0x7f, 0x21, 0x7f, 0x18, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x2d, 0x83, 0x1b, 0x84, 0x13, 0x82, 0x40, 0x7f, 0xc9, + 0x7f, 0xe9, 0x7f, 0xd2, 0x7d, 0xb7, 0x7b, 0xb4, 0x79, 0xb3, 0x77, 0xb4, 0x76, 0xba, 0x77, 0xb7, + 0x79, 0xbe, 0x7c, 0xd0, 0x7e, 0xde, 0x80, 0xe7, 0x7f, 0xea, 0x80, 0xe5, 0x7f, 0xe7, 0x7f, 0xeb, + 0x7f, 0xdd, 0x81, 0x7e, 0x81, 0x13, 0x84, 0x16, 0x85, 0x11, 0x82, 0x14, 0x80, 0x15, 0x7e, 0x12, + 0x7f, 0x10, 0x7f, 0x35, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x82, 0x35, 0x80, 0x10, 0x85, 0x27, 0x83, 0xaf, 0x7f, 0xeb, + 0x7d, 0xe8, 0x7d, 0xe4, 0x7d, 0xcd, 0x7f, 0xb2, 0x80, 0xad, 0x82, 0xaf, 0x82, 0xb5, 0x81, 0xc7, + 0x80, 0xdb, 0x7f, 0xe9, 0x7d, 0xe8, 0x7c, 0xe6, 0x7e, 0xe8, 0x80, 0xe8, 0x7f, 0xe8, 0x7d, 0xe6, + 0x7f, 0xeb, 0x81, 0xd1, 0x84, 0x42, 0x82, 0x10, 0x86, 0x17, 0x83, 0x13, 0x7e, 0x15, 0x7d, 0x14, + 0x80, 0x10, 0x7f, 0x16, 0x7f, 0x25, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x7f, 0x38, 0x80, 0x10, 0x81, 0x10, 0x81, 0x6b, 0x81, 0xe5, 0x7f, 0xe6, + 0x7e, 0xe8, 0x7d, 0xe4, 0x7e, 0xe1, 0x7f, 0xd2, 0x80, 0xc4, 0x81, 0xc6, 0x82, 0xd4, 0x81, 0xe3, + 0x80, 0xe9, 0x7f, 0xea, 0x7e, 0xe8, 0x7d, 0xe9, 0x7e, 0xea, 0x80, 0xe9, 0x7f, 0xe7, 0x7f, 0xe6, + 0x7f, 0xeb, 0x7f, 0xe9, 0x81, 0x69, 0x80, 0x10, 0x82, 0x14, 0x81, 0x18, 0x7f, 0x13, 0x7f, 0x11, + 0x7f, 0x12, 0x80, 0x10, 0x7f, 0x36, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x7f, 0x23, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x3b, 0x7f, 0xb9, 0x7f, 0xeb, 0x7f, 0xe9, + 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xeb, 0x7f, 0xe8, 0x7e, 0xdd, 0x7f, 0xe1, 0x7f, 0xe9, 0x7f, 0xe9, + 0x7e, 0xea, 0x7e, 0xea, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xea, 0x80, 0xe7, + 0x7f, 0xeb, 0x7f, 0xeb, 0x7f, 0x7c, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x12, 0x7f, 0x11, 0x7f, 0x15, + 0x7f, 0x13, 0x80, 0x10, 0x7f, 0x13, 0x7f, 0x39, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x7f, 0x39, 0x7f, 0x26, 0x80, 0x10, 0x7f, 0x17, 0x7f, 0x7d, 0x7f, 0xe9, 0x7f, 0xe7, 0x7f, 0xe8, + 0x7f, 0xe6, 0x7f, 0xe7, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe5, 0x7f, 0xe8, 0x7f, 0xea, 0x7f, 0xe7, + 0x7f, 0xe6, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xeb, 0x7f, 0xe7, + 0x7f, 0xe9, 0x7f, 0xeb, 0x7f, 0xb0, 0x7f, 0x23, 0x80, 0x10, 0x7f, 0x12, 0x80, 0x10, 0x7f, 0x11, + 0x80, 0x10, 0x7f, 0x15, 0x7f, 0x13, 0x80, 0x10, 0x7f, 0x38, 0x7f, 0x2d, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x37, + 0x80, 0x10, 0x80, 0x10, 0x7f, 0x15, 0x7f, 0x30, 0x7f, 0xa4, 0x7f, 0xe4, 0x7f, 0xe7, 0x80, 0xe8, + 0x7f, 0xea, 0x7f, 0xe8, 0x7f, 0xe6, 0x7f, 0xe5, 0x7f, 0xe0, 0x7f, 0xe1, 0x7f, 0xe9, 0x7f, 0xe9, + 0x7f, 0xe6, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xeb, 0x7f, 0xe2, + 0x7f, 0xdb, 0x7f, 0xdd, 0x7f, 0xce, 0x7f, 0x41, 0x80, 0x10, 0x7f, 0x12, 0x7f, 0x14, 0x80, 0x10, + 0x7f, 0x16, 0x7f, 0x16, 0x7f, 0x12, 0x7f, 0x13, 0x80, 0x10, 0x7f, 0x16, 0x7f, 0x30, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x3a, 0x80, 0x10, + 0x7f, 0x16, 0x7f, 0x11, 0x7f, 0x13, 0x7f, 0x37, 0x7f, 0x9c, 0x7f, 0xc5, 0x7f, 0xd9, 0x7f, 0xdd, + 0x7f, 0xe4, 0x7f, 0xe6, 0x7f, 0xe1, 0x7f, 0xda, 0x7f, 0xd1, 0x7f, 0xd2, 0x7f, 0xe2, 0x7f, 0xe9, + 0x7f, 0xe4, 0x7f, 0xe4, 0x7f, 0xe3, 0x7f, 0xda, 0x7f, 0xd4, 0x7f, 0xce, 0x7f, 0xcf, 0x7f, 0xc7, + 0x7f, 0xc0, 0x7f, 0xc4, 0x7f, 0xc7, 0x7f, 0x7a, 0x7f, 0x22, 0x80, 0x10, 0x7f, 0x12, 0x80, 0x10, + 0x7f, 0x12, 0x7f, 0x18, 0x7f, 0x13, 0x7f, 0x1b, 0x7f, 0x14, 0x80, 0x10, 0x7f, 0x22, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, + 0x80, 0x10, 0x7f, 0x19, 0x7f, 0x16, 0x7f, 0x3b, 0x7f, 0x8e, 0x7f, 0xb1, 0x7f, 0xbf, 0x7f, 0xd5, + 0x7f, 0xe2, 0x7f, 0xe8, 0x7f, 0xe6, 0x7f, 0xdc, 0x7f, 0xcf, 0x7f, 0xd7, 0x7f, 0xe6, 0x7f, 0xe9, + 0x7f, 0xe6, 0x7f, 0xe7, 0x7f, 0xe5, 0x7f, 0xda, 0x7f, 0xcb, 0x80, 0xbc, 0x7f, 0xbc, 0x7f, 0xb8, + 0x7f, 0xb3, 0x7f, 0xb7, 0x7f, 0xbc, 0x7f, 0xc8, 0x7f, 0x60, 0x80, 0x10, 0x7f, 0x1c, 0x7f, 0x21, + 0x7f, 0x18, 0x7f, 0x13, 0x7f, 0x13, 0x7f, 0x17, 0x7f, 0x16, 0x7f, 0x13, 0x80, 0x10, 0x7f, 0x11, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, + 0x7f, 0x10, 0x7f, 0x16, 0x80, 0x10, 0x7f, 0x47, 0x7f, 0xad, 0x7f, 0xc6, 0x7f, 0xd7, 0x7f, 0xe4, + 0x7f, 0xe5, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe2, 0x7f, 0xdc, 0x7f, 0xe3, 0x7f, 0xea, 0x7f, 0xe8, + 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe7, 0x7f, 0xe0, 0x7f, 0xd9, 0x7f, 0xd4, 0x7f, 0xc7, + 0x7f, 0xb9, 0x7f, 0xb0, 0x7f, 0xb1, 0x7f, 0xce, 0x7f, 0x9a, 0x80, 0x10, 0x7f, 0x19, 0x7f, 0x3d, + 0x7f, 0x2a, 0x7f, 0x1d, 0x7f, 0x11, 0x7f, 0x12, 0x7f, 0x14, 0x7f, 0x14, 0x80, 0x10, 0x7f, 0x1b, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x16, 0x7f, 0x2b, 0x7f, 0x1c, + 0x7f, 0x22, 0x80, 0x10, 0x7f, 0x1c, 0x7f, 0x7c, 0x7f, 0xda, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xe7, + 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe6, 0x7f, 0xe2, 0x7f, 0xe7, 0x7f, 0xe9, 0x7f, 0xe7, + 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xea, 0x7f, 0xeb, 0x7f, 0xea, 0x7f, 0xe1, + 0x7f, 0xd6, 0x7f, 0xd2, 0x7f, 0xc7, 0x7f, 0xc6, 0x7f, 0xba, 0x7f, 0x50, 0x80, 0x10, 0x7f, 0x18, + 0x7f, 0x22, 0x7f, 0x1f, 0x7f, 0x1c, 0x7f, 0x10, 0x7f, 0x11, 0x7f, 0x12, 0x7f, 0x13, 0x7f, 0x31, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x38, 0x80, 0x10, 0x7f, 0x40, + 0x7f, 0x18, 0x7f, 0x13, 0x7f, 0x5a, 0x7f, 0xdb, 0x7f, 0xea, 0x7f, 0xe8, 0x7f, 0xe6, 0x7f, 0xe7, + 0x7f, 0xe7, 0x7e, 0xe8, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe7, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe7, + 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xea, 0x7f, 0xeb, + 0x7f, 0xeb, 0x7f, 0xeb, 0x7f, 0xe8, 0x7f, 0xda, 0x7f, 0xd3, 0x7f, 0xaf, 0x7f, 0x23, 0x80, 0x10, + 0x7f, 0x15, 0x7f, 0x17, 0x7f, 0x30, 0x7f, 0x1a, 0x7f, 0x10, 0x7f, 0x11, 0x7f, 0x15, 0x80, 0x10, + 0x7f, 0x39, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x34, 0x7f, 0x22, 0x7f, 0x2c, + 0x80, 0x10, 0x7f, 0x1d, 0x7f, 0xab, 0x7f, 0xeb, 0x7f, 0xe6, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, + 0x7f, 0xe5, 0x7f, 0xe5, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe7, + 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe8, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe8, + 0x7f, 0xe7, 0x7f, 0xe6, 0x7f, 0xe8, 0x7f, 0xe6, 0x7f, 0xd2, 0x7f, 0xd8, 0x7f, 0x5c, 0x80, 0x10, + 0x7f, 0x16, 0x7f, 0x2b, 0x7f, 0x33, 0x7f, 0x26, 0x7f, 0x10, 0x7f, 0x11, 0x80, 0x10, 0x80, 0x10, + 0x7f, 0x36, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x21, 0x80, 0x10, 0x7f, 0x29, 0x7f, 0x1d, + 0x80, 0x10, 0x7f, 0x47, 0x7f, 0xdf, 0x7f, 0xe9, 0x7f, 0xeb, 0x7f, 0xea, 0x80, 0xdf, 0x7f, 0xe8, + 0x7f, 0xea, 0x7f, 0xe5, 0x7f, 0xe7, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe7, + 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xe6, 0x7f, 0xe7, + 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe5, 0x7f, 0xea, 0x7f, 0xde, 0x7f, 0xe8, 0x7f, 0xac, 0x7f, 0x16, + 0x7f, 0x24, 0x7f, 0x41, 0x7f, 0x26, 0x7f, 0x28, 0x7f, 0x1a, 0x7f, 0x11, 0x7f, 0x11, 0x7f, 0x14, + 0x7f, 0x19, 0x7f, 0x27, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x3a, 0x80, 0x10, 0x80, 0x22, 0x80, 0x13, + 0x80, 0x10, 0x7f, 0xa2, 0x7f, 0xeb, 0x7f, 0xeb, 0x7f, 0xe8, 0x7f, 0xea, 0x7f, 0xe4, 0x7f, 0xe9, + 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe7, + 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe4, 0x7f, 0xe5, + 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe8, 0x7f, 0xe4, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xd8, 0x80, 0x2f, + 0x7f, 0x25, 0x7f, 0x34, 0x7f, 0x1b, 0x7f, 0x2b, 0x7f, 0x34, 0x80, 0x10, 0x7f, 0x14, 0x7f, 0x15, + 0x80, 0x10, 0x7f, 0x37, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x23, 0x7e, 0x1d, 0x80, 0x16, 0x82, 0x16, 0x80, 0x13, + 0x81, 0x54, 0x80, 0xe0, 0x7f, 0xeb, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe9, 0x7e, 0xea, 0x7e, 0xe8, + 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe1, 0x7f, 0xe3, 0x7f, 0xe9, 0x7f, 0xe3, 0x7f, 0xe7, 0x7f, 0xe8, + 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe7, + 0x7f, 0xe8, 0x7f, 0xe8, 0x80, 0xe8, 0x80, 0xe6, 0x80, 0xe9, 0x7f, 0xea, 0x80, 0xe3, 0x81, 0x6f, + 0x7f, 0x12, 0x7f, 0x18, 0x7f, 0x11, 0x7f, 0x1c, 0x7f, 0x34, 0x7f, 0x17, 0x7f, 0x16, 0x7f, 0x13, + 0x7f, 0x16, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x37, 0x80, 0x10, 0x82, 0x33, 0x82, 0x18, 0x82, 0x3b, + 0x81, 0xd4, 0x7f, 0xe9, 0x80, 0xe9, 0x7f, 0xe8, 0x7f, 0xe8, 0x7e, 0xe8, 0x7d, 0xe8, 0x7d, 0xe8, + 0x7e, 0xe8, 0x7f, 0xe6, 0x7f, 0xdd, 0x7f, 0xe3, 0x7f, 0xe9, 0x7f, 0xe5, 0x7f, 0xe9, 0x7f, 0xe8, + 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe8, + 0x7f, 0xe9, 0x7f, 0xea, 0x80, 0xe5, 0x80, 0xe7, 0x80, 0xe5, 0x7f, 0xeb, 0x7f, 0xeb, 0x81, 0x9e, + 0x80, 0x10, 0x7f, 0x10, 0x80, 0x10, 0x7f, 0x16, 0x7f, 0x3a, 0x7f, 0x22, 0x7f, 0x1b, 0x7f, 0x13, + 0x80, 0x10, 0x7f, 0x12, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x24, 0x85, 0x26, 0x87, 0x15, 0x83, 0x2f, 0x82, 0x17, 0x82, 0x6d, + 0x81, 0xe5, 0x80, 0xe5, 0x7f, 0xe9, 0x7f, 0xe6, 0x7f, 0xe6, 0x7e, 0xe6, 0x7d, 0xe6, 0x7d, 0xe6, + 0x7e, 0xe7, 0x7f, 0xe4, 0x7f, 0xda, 0x7f, 0xe0, 0x7f, 0xea, 0x7f, 0xe6, 0x7f, 0xe9, 0x7f, 0xe8, + 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe8, + 0x7f, 0xe9, 0x7f, 0xe9, 0x80, 0xe7, 0x7f, 0xe9, 0x80, 0xe5, 0x80, 0xe5, 0x7f, 0xeb, 0x80, 0xb9, + 0x80, 0x17, 0x7f, 0x10, 0x7f, 0x12, 0x7f, 0x14, 0x7f, 0x3b, 0x7f, 0x23, 0x7f, 0x11, 0x7f, 0x16, + 0x7f, 0x17, 0x80, 0x10, 0x7f, 0x23, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x82, 0x3b, 0x85, 0x11, 0x8a, 0x28, 0x83, 0x23, 0x82, 0x1b, 0x80, 0xaa, + 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe5, 0x7f, 0xe6, 0x7f, 0xe6, 0x7e, 0xe6, 0x7d, 0xe6, 0x7d, 0xe6, + 0x7e, 0xe8, 0x7f, 0xe5, 0x7f, 0xd8, 0x7f, 0xde, 0x7f, 0xe9, 0x7f, 0xe4, 0x7f, 0xe7, 0x7f, 0xe8, + 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe8, + 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xeb, 0x7f, 0xe1, 0x80, 0xe8, 0x80, 0xe1, 0x7f, 0xeb, 0x7f, 0xcb, + 0x7f, 0x37, 0x80, 0x10, 0x7f, 0x14, 0x7f, 0x11, 0x7f, 0x37, 0x7f, 0x1f, 0x7f, 0x12, 0x7f, 0x14, + 0x7f, 0x15, 0x80, 0x10, 0x7f, 0x2e, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x7f, 0x34, 0x81, 0x10, 0x84, 0x17, 0x83, 0x29, 0x81, 0x23, 0x80, 0x3b, 0x80, 0xc6, + 0x7f, 0xeb, 0x7f, 0xe1, 0x7f, 0xe9, 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe7, 0x7e, 0xe7, 0x7e, 0xe7, + 0x7e, 0xe8, 0x7f, 0xe4, 0x7f, 0xd5, 0x7f, 0xdc, 0x7f, 0xe9, 0x7f, 0xe5, 0x7f, 0xe7, 0x7f, 0xe8, + 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe8, + 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xdf, 0x7f, 0xe8, 0x7e, 0xe7, 0x7f, 0xea, 0x7f, 0xdf, + 0x7f, 0x53, 0x80, 0x10, 0x7f, 0x11, 0x7f, 0x13, 0x7f, 0x32, 0x7f, 0x1c, 0x7f, 0x11, 0x7f, 0x13, + 0x7f, 0x16, 0x7f, 0x10, 0x7f, 0x28, 0x7f, 0x16, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x7d, 0x27, 0x7e, 0x12, 0x7c, 0x17, 0x7d, 0x39, 0x7f, 0x2d, 0x7f, 0x62, 0x7f, 0xde, + 0x7f, 0xea, 0x7f, 0xe6, 0x7f, 0xe5, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, + 0x7f, 0xe8, 0x7f, 0xe1, 0x7f, 0xd1, 0x7f, 0xdb, 0x7f, 0xea, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe8, + 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe8, + 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe6, 0x7e, 0xe6, 0x7e, 0xe4, 0x7e, 0xe6, 0x7d, 0xe7, 0x7d, 0xe9, + 0x7f, 0x5b, 0x80, 0x10, 0x7f, 0x10, 0x7f, 0x15, 0x7f, 0x2a, 0x7f, 0x16, 0x7f, 0x11, 0x7f, 0x14, + 0x80, 0x10, 0x7f, 0x14, 0x7f, 0x16, 0x7f, 0x3a, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x7f, 0x14, 0x7c, 0x1e, 0x7f, 0x10, 0x7e, 0x16, 0x7d, 0x41, 0x7e, 0x2a, 0x7f, 0x77, 0x7d, 0xe7, + 0x7e, 0xe9, 0x7e, 0xe9, 0x7e, 0xe8, 0x7d, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, + 0x7f, 0xea, 0x7f, 0xe0, 0x7f, 0xd1, 0x7f, 0xdd, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe6, 0x7f, 0xe6, + 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, 0x80, 0xe8, 0x80, 0xe7, 0x80, 0xe7, + 0x7f, 0xe7, 0x7f, 0xe8, 0x7e, 0xe9, 0x7d, 0xe6, 0x7d, 0xe5, 0x7d, 0xe5, 0x7d, 0xe7, 0x7d, 0xe7, + 0x7e, 0x5f, 0x80, 0x10, 0x7f, 0x12, 0x7f, 0x25, 0x7f, 0x25, 0x7f, 0x13, 0x7f, 0x12, 0x7f, 0x16, + 0x80, 0x10, 0x7f, 0x15, 0x80, 0x10, 0x7f, 0x3a, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x39, 0x84, 0x13, 0x83, 0x10, 0x86, 0x2c, 0x83, 0x56, 0x7e, 0x30, 0x7d, 0x7d, 0x7f, 0xea, + 0x7d, 0xe8, 0x7d, 0xe7, 0x7e, 0xe9, 0x7d, 0xe6, 0x7e, 0xe7, 0x7f, 0xe7, 0x7f, 0xe9, 0x7f, 0xe9, + 0x7f, 0xe9, 0x7f, 0xde, 0x7f, 0xd1, 0x7f, 0xdf, 0x7f, 0xea, 0x7f, 0xe8, 0x7f, 0xe6, 0x7f, 0xe7, + 0x7f, 0xe7, 0x7f, 0xe8, 0x7f, 0xe8, 0x7e, 0xe8, 0x7f, 0xe9, 0x81, 0xe8, 0x80, 0xe7, 0x80, 0xe7, + 0x7f, 0xe7, 0x7f, 0xe8, 0x7d, 0xea, 0x7d, 0xe8, 0x7d, 0xea, 0x7c, 0xe6, 0x7c, 0xe6, 0x7e, 0xea, + 0x7e, 0x64, 0x80, 0x10, 0x7f, 0x11, 0x7f, 0x23, 0x7f, 0x22, 0x7f, 0x12, 0x7f, 0x11, 0x7f, 0x13, + 0x7f, 0x10, 0x7f, 0x16, 0x80, 0x10, 0x7f, 0x3a, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x82, 0x37, 0x89, 0x16, 0x85, 0x12, 0x85, 0x1d, 0x82, 0x44, 0x7d, 0x31, 0x7c, 0x84, 0x7f, 0xea, + 0x7e, 0xe9, 0x7d, 0xe8, 0x7d, 0xe8, 0x7d, 0xe7, 0x7e, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, + 0x7f, 0xe7, 0x7f, 0xdb, 0x7f, 0xd2, 0x7f, 0xe3, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe9, + 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe6, 0x80, 0xe7, 0x81, 0xe8, 0x80, 0xe7, 0x80, 0xe7, + 0x7f, 0xe7, 0x7e, 0xe8, 0x7d, 0xea, 0x7d, 0xe2, 0x7c, 0xe4, 0x7b, 0xe8, 0x7c, 0xea, 0x7a, 0xe8, + 0x7d, 0x59, 0x80, 0x10, 0x7f, 0x12, 0x7f, 0x1b, 0x7f, 0x18, 0x80, 0x10, 0x7f, 0x11, 0x7f, 0x12, + 0x7f, 0x11, 0x7f, 0x12, 0x80, 0x10, 0x7f, 0x39, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x34, 0x7f, 0x11, 0x7f, 0x11, 0x7e, 0x12, 0x7b, 0x1d, 0x7a, 0x2b, 0x7b, 0x98, 0x7e, 0xea, + 0x7c, 0xe3, 0x7d, 0xe6, 0x7d, 0xe9, 0x7e, 0xea, 0x7e, 0xe9, 0x7f, 0xe8, 0x7f, 0xe6, 0x7f, 0xe5, + 0x7f, 0xe5, 0x7e, 0xdc, 0x7f, 0xd3, 0x7f, 0xe3, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, + 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe6, 0x80, 0xe7, 0x81, 0xe8, 0x80, 0xe7, 0x80, 0xe7, + 0x7f, 0xe7, 0x7f, 0xe8, 0x7d, 0xe9, 0x7c, 0xe6, 0x7c, 0xe9, 0x7b, 0xe5, 0x7b, 0xe6, 0x7a, 0xe2, + 0x7d, 0x50, 0x80, 0x10, 0x7f, 0x1e, 0x7f, 0x1f, 0x7f, 0x17, 0x7f, 0x16, 0x7f, 0x14, 0x7f, 0x11, + 0x7f, 0x11, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x39, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x78, 0x52, 0x67, 0x4d, 0x64, 0x5d, 0x5e, 0x63, 0x67, 0x43, 0x78, 0x1c, 0x7c, 0x81, 0x7b, 0xe7, + 0x7c, 0xea, 0x7d, 0xe6, 0x7d, 0xe5, 0x7d, 0xe9, 0x7e, 0xe8, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe6, + 0x7f, 0xe7, 0x7f, 0xdf, 0x7f, 0xd5, 0x7f, 0xe2, 0x7e, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe7, + 0x7f, 0xe7, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe8, 0x7f, 0xe9, 0x81, 0xe8, 0x80, 0xe7, 0x80, 0xe7, + 0x7f, 0xe7, 0x7e, 0xe8, 0x7d, 0xe9, 0x7d, 0xe8, 0x7c, 0xe8, 0x7c, 0xe9, 0x7f, 0xeb, 0x7b, 0xb5, + 0x7d, 0x2a, 0x7f, 0x11, 0x7f, 0x1c, 0x7f, 0x19, 0x7f, 0x14, 0x7f, 0x17, 0x7f, 0x16, 0x7f, 0x28, + 0x80, 0x35, 0x80, 0x1d, 0x80, 0x20, 0x7f, 0x1b, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x11, + 0x6c, 0x6e, 0x4a, 0xa3, 0x3a, 0xb8, 0x2e, 0xbd, 0x3e, 0xa8, 0x64, 0x59, 0x77, 0x3c, 0x7d, 0xa5, + 0x80, 0xe8, 0x7f, 0xea, 0x7c, 0xe1, 0x7d, 0xe5, 0x80, 0xe5, 0x80, 0xe8, 0x80, 0xe8, 0x80, 0xe9, + 0x7f, 0xeb, 0x7e, 0xe1, 0x7f, 0xd6, 0x7f, 0xe0, 0x7f, 0xe7, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe6, + 0x7f, 0xe7, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe9, 0x80, 0xe9, 0x81, 0xe8, 0x81, 0xe7, 0x80, 0xe7, + 0x7e, 0xe7, 0x7d, 0xe8, 0x7d, 0xea, 0x7b, 0xe9, 0x72, 0xdc, 0x6c, 0xc7, 0x68, 0xd1, 0x6d, 0x8f, + 0x76, 0x21, 0x7d, 0x16, 0x7f, 0x10, 0x7f, 0x10, 0x82, 0x11, 0x83, 0x14, 0x82, 0x12, 0x80, 0x30, + 0x7f, 0x4e, 0x7d, 0x2b, 0x7f, 0x32, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7e, 0x21, + 0x71, 0x63, 0x50, 0x8c, 0x34, 0xb1, 0x2b, 0xaf, 0x2a, 0xb4, 0x39, 0xab, 0x6b, 0x33, 0x83, 0x25, + 0x88, 0x90, 0x80, 0xd6, 0x7c, 0xe8, 0x7d, 0xe2, 0x82, 0xe4, 0x81, 0xe7, 0x82, 0xe5, 0x81, 0xe8, + 0x7f, 0xe8, 0x7f, 0xdf, 0x7f, 0xd5, 0x7f, 0xe3, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe6, + 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe7, 0x7f, 0xe7, 0x80, 0xe7, 0x82, 0xe6, 0x7f, 0xe9, + 0x7c, 0xe9, 0x7c, 0xe8, 0x7c, 0xe7, 0x74, 0xe5, 0x5b, 0xc7, 0x43, 0xb1, 0x36, 0xb6, 0x3d, 0xb0, + 0x5f, 0x58, 0x7e, 0x12, 0x7e, 0x11, 0x82, 0x13, 0x88, 0x11, 0x8a, 0x13, 0x88, 0x12, 0x82, 0x2e, + 0x7b, 0x2c, 0x75, 0x2d, 0x7b, 0x39, 0x7e, 0x1c, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x73, 0x5e, + 0x4e, 0x99, 0x3c, 0xa2, 0x30, 0xb1, 0x29, 0xa8, 0x27, 0xaf, 0x2d, 0xb7, 0x4f, 0x79, 0x78, 0x1c, + 0x82, 0x12, 0x80, 0x68, 0x7d, 0xe0, 0x7f, 0xe8, 0x81, 0xe9, 0x80, 0xe4, 0x81, 0xe6, 0x80, 0xe8, + 0x7f, 0xe8, 0x7f, 0xe0, 0x7f, 0xd1, 0x7f, 0xe1, 0x7f, 0xea, 0x7f, 0xe6, 0x7f, 0xe5, 0x7f, 0xe7, + 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe7, 0x7e, 0xe7, 0x7e, 0xe8, 0x82, 0xe7, 0x7f, 0xe8, + 0x7b, 0xe8, 0x7c, 0xe9, 0x7d, 0xe9, 0x72, 0xe3, 0x54, 0xbe, 0x36, 0xb1, 0x26, 0xbb, 0x2d, 0xb6, + 0x61, 0x4d, 0x80, 0x10, 0x7f, 0x16, 0x86, 0x14, 0x8b, 0x12, 0x8a, 0x13, 0x83, 0x13, 0x7c, 0x22, + 0x7b, 0x17, 0x66, 0x4b, 0x56, 0xa3, 0x72, 0x50, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x77, 0x4d, 0x77, 0x4d, 0x7a, 0x3d, 0x7c, 0x30, 0x7c, 0x35, 0x72, 0x62, 0x53, 0x83, + 0x41, 0x93, 0x36, 0xaa, 0x2e, 0xaf, 0x2b, 0xb2, 0x2b, 0xad, 0x32, 0xb4, 0x3c, 0x9c, 0x58, 0x57, + 0x76, 0x20, 0x80, 0x16, 0x80, 0x67, 0x7d, 0xc0, 0x7c, 0xe8, 0x7d, 0xea, 0x7f, 0xe7, 0x7e, 0xe3, + 0x7e, 0xea, 0x7f, 0xe3, 0x7f, 0xd7, 0x7f, 0xe3, 0x7f, 0xea, 0x7f, 0xe7, 0x7f, 0xe5, 0x7f, 0xe8, + 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7e, 0xe7, 0x7e, 0xe8, 0x81, 0xe9, 0x7f, 0xe6, + 0x7c, 0xe8, 0x7d, 0xe9, 0x7e, 0xea, 0x74, 0xe2, 0x56, 0xb9, 0x39, 0xac, 0x2a, 0xb0, 0x32, 0xa1, + 0x61, 0x48, 0x80, 0x10, 0x80, 0x11, 0x84, 0x11, 0x86, 0x14, 0x82, 0x17, 0x7e, 0x12, 0x7d, 0x13, + 0x6a, 0x36, 0x4b, 0x8f, 0x3e, 0xb6, 0x59, 0x76, 0x7c, 0x2d, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x76, 0x54, 0x4e, 0x8a, 0x43, 0x9d, 0x49, 0x9e, 0x4b, 0x9c, 0x4a, 0x9d, 0x44, 0x9d, 0x3b, 0x9b, + 0x34, 0xac, 0x2f, 0xaa, 0x2b, 0xa6, 0x2b, 0xb5, 0x2f, 0xad, 0x33, 0xaa, 0x2a, 0xb7, 0x31, 0xab, + 0x50, 0x7d, 0x76, 0x20, 0x80, 0x10, 0x7e, 0x32, 0x77, 0x91, 0x77, 0xdd, 0x7e, 0xea, 0x7d, 0xe2, + 0x7e, 0xe8, 0x7f, 0xe7, 0x7f, 0xe5, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe9, 0x7f, 0xe8, + 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe8, 0x7f, 0xe8, 0x7d, 0xe8, 0x7e, 0xe8, 0x81, 0xe8, 0x7f, 0xe5, + 0x7c, 0xe9, 0x7d, 0xe8, 0x7e, 0xd5, 0x74, 0xc4, 0x58, 0xae, 0x3c, 0xa8, 0x2c, 0xa6, 0x35, 0x99, + 0x57, 0x64, 0x76, 0x23, 0x7f, 0x11, 0x7e, 0x13, 0x7e, 0x13, 0x7e, 0x13, 0x7c, 0x15, 0x60, 0x53, + 0x47, 0x8e, 0x39, 0xad, 0x2d, 0xac, 0x2f, 0xa4, 0x77, 0x41, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x13, + 0x68, 0x75, 0x3a, 0x92, 0x32, 0xa0, 0x35, 0xa6, 0x36, 0xa6, 0x34, 0xa6, 0x31, 0xab, 0x2d, 0xaf, + 0x2b, 0xaa, 0x2a, 0xb1, 0x2a, 0xb2, 0x2a, 0xab, 0x2f, 0xaa, 0x31, 0xad, 0x24, 0xb1, 0x25, 0xb1, + 0x3b, 0xad, 0x64, 0x54, 0x7f, 0x12, 0x7f, 0x10, 0x7c, 0x1f, 0x77, 0x76, 0x7b, 0xce, 0x7f, 0xea, + 0x7e, 0xe6, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe9, 0x7f, 0xe9, + 0x7f, 0xe7, 0x7f, 0xe6, 0x7f, 0xe7, 0x7f, 0xe8, 0x7d, 0xe9, 0x7d, 0xe9, 0x81, 0xe5, 0x7f, 0xe6, + 0x7d, 0xea, 0x7d, 0xe2, 0x7f, 0xc5, 0x75, 0xb7, 0x59, 0xa9, 0x3e, 0xa5, 0x30, 0xa1, 0x37, 0x94, + 0x4b, 0x86, 0x60, 0x57, 0x72, 0x27, 0x76, 0x20, 0x73, 0x24, 0x6c, 0x32, 0x63, 0x41, 0x4c, 0x94, + 0x3d, 0xa2, 0x33, 0xa7, 0x2a, 0xa8, 0x2d, 0xa6, 0x76, 0x43, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x1b, + 0x69, 0x65, 0x36, 0x96, 0x2c, 0xa9, 0x2c, 0xb1, 0x2a, 0xaf, 0x28, 0xad, 0x26, 0xad, 0x26, 0xb0, + 0x26, 0xb1, 0x28, 0xac, 0x29, 0xb0, 0x2a, 0xa9, 0x2d, 0xaf, 0x2c, 0xb2, 0x24, 0xb0, 0x25, 0xac, + 0x2f, 0xbc, 0x53, 0x80, 0x78, 0x1f, 0x7f, 0x13, 0x80, 0x10, 0x7e, 0x15, 0x7b, 0x57, 0x7f, 0xc1, + 0x7f, 0xeb, 0x7f, 0xea, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe6, 0x7f, 0xe5, 0x7f, 0xe9, + 0x7f, 0xe7, 0x7f, 0xe6, 0x7f, 0xe7, 0x7e, 0xe8, 0x7d, 0xea, 0x7e, 0xea, 0x81, 0xe4, 0x7f, 0xe5, + 0x7e, 0xea, 0x7d, 0xdc, 0x80, 0xbf, 0x76, 0xb7, 0x5a, 0xa4, 0x3f, 0xa4, 0x31, 0xa5, 0x38, 0x97, + 0x3f, 0x8c, 0x45, 0x7f, 0x4d, 0x6e, 0x52, 0x63, 0x53, 0x6a, 0x4f, 0x79, 0x48, 0x82, 0x40, 0x9a, + 0x37, 0xa9, 0x30, 0xab, 0x2b, 0xab, 0x2f, 0xab, 0x71, 0x50, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x1b, + 0x6a, 0x65, 0x3a, 0x97, 0x2f, 0xa9, 0x2c, 0xb1, 0x28, 0xb0, 0x25, 0xae, 0x23, 0xaf, 0x24, 0xaf, + 0x25, 0xb0, 0x28, 0xaf, 0x29, 0xaf, 0x2a, 0xaf, 0x29, 0xb2, 0x27, 0xaf, 0x27, 0xac, 0x26, 0xac, + 0x2b, 0xb0, 0x3f, 0xae, 0x60, 0x5b, 0x7c, 0x15, 0x7f, 0x15, 0x80, 0x12, 0x80, 0x10, 0x81, 0x37, + 0x82, 0xd1, 0x7f, 0xea, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, + 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe8, 0x7d, 0xe9, 0x7e, 0xe8, 0x80, 0xe8, 0x7f, 0xe5, + 0x7d, 0xe8, 0x7e, 0xdc, 0x80, 0xbb, 0x76, 0xba, 0x5a, 0xa0, 0x3f, 0x9c, 0x32, 0xa7, 0x36, 0x99, + 0x35, 0x93, 0x36, 0x8f, 0x39, 0x8c, 0x3d, 0x8b, 0x41, 0x8d, 0x40, 0x90, 0x3c, 0x98, 0x36, 0xa8, + 0x31, 0xb3, 0x2e, 0xaf, 0x2a, 0xb0, 0x2e, 0xad, 0x63, 0x69, 0x7d, 0x25, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x1b, + 0x6e, 0x61, 0x41, 0x93, 0x35, 0xa5, 0x30, 0xaf, 0x2a, 0xaf, 0x26, 0xae, 0x25, 0xaf, 0x27, 0xaf, + 0x29, 0xaf, 0x2a, 0xaf, 0x2a, 0xaf, 0x2a, 0xaf, 0x26, 0xb1, 0x24, 0xae, 0x2b, 0xaf, 0x2c, 0xb1, + 0x2a, 0xae, 0x32, 0xb9, 0x49, 0x90, 0x72, 0x2f, 0x80, 0x14, 0x7f, 0x14, 0x80, 0x10, 0x80, 0x10, + 0x83, 0x7a, 0x7f, 0xeb, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, + 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe8, 0x7d, 0xe7, 0x7e, 0xe7, 0x7f, 0xeb, 0x7f, 0xe7, + 0x7c, 0xe6, 0x7d, 0xe1, 0x7f, 0xc4, 0x75, 0xb4, 0x59, 0xa3, 0x3d, 0x9d, 0x30, 0xa6, 0x35, 0xa4, + 0x33, 0x9e, 0x32, 0x9b, 0x35, 0x97, 0x38, 0x95, 0x3a, 0x98, 0x38, 0x9b, 0x34, 0xa3, 0x2e, 0xb1, + 0x2a, 0xb4, 0x28, 0xae, 0x26, 0xac, 0x2a, 0xa9, 0x3e, 0xa7, 0x72, 0x4e, 0x7d, 0x27, 0x80, 0x10, + 0x7f, 0x13, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x1b, + 0x75, 0x58, 0x45, 0x90, 0x38, 0xa1, 0x32, 0xad, 0x2b, 0xaf, 0x28, 0xae, 0x28, 0xaf, 0x2a, 0xaf, + 0x2c, 0xaf, 0x2d, 0xaf, 0x2b, 0xaf, 0x29, 0xaf, 0x25, 0xb1, 0x25, 0xac, 0x2e, 0xab, 0x31, 0xb0, + 0x2b, 0xab, 0x28, 0xb4, 0x3a, 0xb9, 0x5c, 0x6e, 0x79, 0x1a, 0x7e, 0x12, 0x7d, 0x18, 0x80, 0x10, + 0x84, 0x60, 0x7f, 0xeb, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, + 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe8, 0x7e, 0xea, 0x7e, 0xe8, 0x82, 0xe4, 0x7f, 0xe4, + 0x7d, 0xe8, 0x7d, 0xe7, 0x7e, 0xc8, 0x74, 0x7f, 0x58, 0x73, 0x3b, 0xa3, 0x2e, 0xa5, 0x33, 0xab, + 0x33, 0xac, 0x32, 0xa8, 0x35, 0xa5, 0x37, 0xa3, 0x37, 0xa6, 0x34, 0xa9, 0x2e, 0xab, 0x28, 0xb0, + 0x24, 0xb1, 0x24, 0xae, 0x24, 0xae, 0x25, 0xb0, 0x33, 0xa8, 0x43, 0xad, 0x68, 0x62, 0x7e, 0x27, + 0x7f, 0x20, 0x7f, 0x16, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x19, + 0x7b, 0x3c, 0x45, 0x8e, 0x36, 0x9f, 0x2f, 0xad, 0x29, 0xb0, 0x27, 0xae, 0x29, 0xaf, 0x2c, 0xaf, + 0x2f, 0xaf, 0x2f, 0xaf, 0x2c, 0xaf, 0x28, 0xb0, 0x24, 0xb1, 0x26, 0xae, 0x2c, 0xaa, 0x2d, 0xaf, + 0x2a, 0xad, 0x27, 0xac, 0x31, 0xb5, 0x44, 0xa0, 0x65, 0x41, 0x7e, 0x12, 0x80, 0x10, 0x81, 0x13, + 0x84, 0x88, 0x7f, 0xeb, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, + 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe8, 0x7e, 0xe7, 0x7e, 0xe4, 0x81, 0xe7, 0x7f, 0xe9, + 0x7c, 0xe6, 0x7e, 0xea, 0x7d, 0x9c, 0x76, 0x30, 0x57, 0x5b, 0x39, 0xa1, 0x2b, 0xa5, 0x30, 0xab, + 0x31, 0xae, 0x31, 0xae, 0x33, 0xac, 0x34, 0xab, 0x34, 0xad, 0x30, 0xaf, 0x2c, 0xb0, 0x27, 0xae, + 0x24, 0xae, 0x24, 0xaf, 0x25, 0xae, 0x28, 0xb1, 0x2b, 0xb1, 0x31, 0xb0, 0x3a, 0xab, 0x57, 0x88, + 0x7a, 0x39, 0x7f, 0x1d, 0x7f, 0x19, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x7e, 0x28, 0x41, 0x8f, 0x30, 0x9f, 0x2b, 0xae, 0x25, 0xb0, 0x25, 0xae, 0x29, 0xae, 0x2d, 0xaf, + 0x30, 0xb0, 0x30, 0xaf, 0x2b, 0xaf, 0x26, 0xb0, 0x26, 0xaf, 0x2a, 0xb0, 0x28, 0xb0, 0x25, 0xaf, + 0x26, 0xb0, 0x28, 0xac, 0x2c, 0xad, 0x34, 0xb2, 0x4f, 0x71, 0x6f, 0x34, 0x7e, 0x50, 0x83, 0x80, + 0x81, 0xd9, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, + 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe9, 0x7e, 0xe4, 0x7f, 0xe8, 0x80, 0xe8, 0x80, 0xe4, + 0x7e, 0xea, 0x7b, 0xb5, 0x7d, 0x39, 0x7b, 0x18, 0x55, 0x6b, 0x38, 0x9f, 0x2a, 0xa5, 0x2e, 0xab, + 0x2d, 0xab, 0x2b, 0xb0, 0x2d, 0xad, 0x2f, 0xac, 0x30, 0xae, 0x2e, 0xaf, 0x2c, 0xb1, 0x29, 0xae, + 0x28, 0xad, 0x2b, 0xb0, 0x2e, 0xac, 0x30, 0xae, 0x29, 0xac, 0x27, 0xad, 0x2a, 0xb2, 0x3b, 0xae, + 0x70, 0x54, 0x7f, 0x16, 0x7f, 0x1b, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x78, 0x4e, 0x3f, 0x8f, 0x30, 0xa0, 0x2b, 0xae, 0x27, 0xb0, 0x26, 0xae, 0x28, 0xae, 0x2c, 0xaf, + 0x2f, 0xaf, 0x2f, 0xaf, 0x2c, 0xaf, 0x29, 0xb0, 0x28, 0xad, 0x29, 0xad, 0x25, 0xb3, 0x25, 0xad, + 0x27, 0xae, 0x2a, 0xaf, 0x2a, 0xaf, 0x2c, 0xb2, 0x3d, 0x97, 0x59, 0x7c, 0x73, 0xcc, 0x7f, 0xeb, + 0x80, 0xe9, 0x7f, 0xe7, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe8, + 0x7f, 0xe6, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe7, 0x7e, 0xe9, 0x7f, 0xe4, 0x7f, 0xeb, 0x80, 0xe5, + 0x7d, 0x9d, 0x7d, 0x39, 0x7f, 0x11, 0x74, 0x24, 0x53, 0x6a, 0x37, 0xa5, 0x29, 0xa8, 0x29, 0xac, + 0x28, 0xb0, 0x28, 0xaf, 0x29, 0xae, 0x2a, 0xad, 0x2a, 0xae, 0x2a, 0xaf, 0x28, 0xaf, 0x27, 0xac, + 0x29, 0xad, 0x2d, 0xb1, 0x32, 0xad, 0x34, 0xac, 0x28, 0xb0, 0x24, 0xad, 0x25, 0xaf, 0x37, 0xaf, + 0x6f, 0x55, 0x7f, 0x21, 0x7f, 0x13, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x13, + 0x5e, 0x7b, 0x3c, 0x8c, 0x34, 0xa1, 0x31, 0xaa, 0x2d, 0xad, 0x2a, 0xaf, 0x29, 0xad, 0x2a, 0xae, + 0x2b, 0xb0, 0x2c, 0xae, 0x2e, 0xac, 0x2f, 0xae, 0x2a, 0xaf, 0x25, 0xad, 0x24, 0xaf, 0x27, 0xaf, + 0x2b, 0xaf, 0x2b, 0xad, 0x2a, 0xae, 0x2a, 0xac, 0x34, 0xaf, 0x47, 0x94, 0x5e, 0x9a, 0x71, 0xcc, + 0x7c, 0xe8, 0x7f, 0xe9, 0x80, 0xe8, 0x7f, 0xe7, 0x7f, 0xe8, 0x7f, 0xeb, 0x7f, 0xe8, 0x7f, 0xe7, + 0x7f, 0xe6, 0x7f, 0xe6, 0x7f, 0xe6, 0x7f, 0xe8, 0x7f, 0xeb, 0x7f, 0xdd, 0x80, 0xb5, 0x82, 0x6b, + 0x80, 0x10, 0x7f, 0x11, 0x7e, 0x12, 0x6c, 0x31, 0x50, 0x6c, 0x3b, 0xa1, 0x2a, 0xaa, 0x23, 0xaf, + 0x27, 0xae, 0x2b, 0xad, 0x2a, 0xae, 0x27, 0xaf, 0x25, 0xaf, 0x23, 0xb0, 0x24, 0xaf, 0x24, 0xae, + 0x24, 0xb0, 0x27, 0xb2, 0x2d, 0xa7, 0x2c, 0xaf, 0x24, 0xb5, 0x24, 0xb0, 0x2d, 0xae, 0x48, 0x96, + 0x7c, 0x2d, 0x7f, 0x1a, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7a, 0x43, + 0x4d, 0x88, 0x37, 0x96, 0x2f, 0xa6, 0x2e, 0xad, 0x2b, 0xae, 0x28, 0xaf, 0x27, 0xad, 0x27, 0xaf, + 0x28, 0xb0, 0x2a, 0xaf, 0x2c, 0xac, 0x2f, 0xad, 0x2a, 0xaf, 0x25, 0xaf, 0x27, 0xaf, 0x2c, 0xae, + 0x2e, 0xae, 0x2b, 0xae, 0x29, 0xb2, 0x2a, 0xaf, 0x31, 0xa7, 0x40, 0xa6, 0x53, 0x76, 0x65, 0x6e, + 0x76, 0xcd, 0x7f, 0xeb, 0x7f, 0xeb, 0x7f, 0xeb, 0x7f, 0xeb, 0x7f, 0xeb, 0x7f, 0xeb, 0x7f, 0xeb, + 0x7f, 0xeb, 0x7f, 0xe8, 0x7f, 0xeb, 0x7f, 0xe4, 0x7e, 0xb1, 0x7d, 0x63, 0x80, 0x1f, 0x81, 0x10, + 0x81, 0x11, 0x7d, 0x18, 0x7e, 0x13, 0x6b, 0x33, 0x51, 0x6c, 0x3f, 0x9f, 0x2f, 0xa8, 0x25, 0xae, + 0x25, 0xad, 0x27, 0xad, 0x28, 0xad, 0x28, 0xad, 0x29, 0xae, 0x29, 0xae, 0x29, 0xaf, 0x29, 0xb0, + 0x2a, 0xab, 0x2a, 0xa9, 0x28, 0xb0, 0x28, 0xb4, 0x2a, 0xa9, 0x31, 0xa9, 0x3e, 0xa1, 0x78, 0x32, + 0x76, 0x49, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7d, 0x2d, 0x5f, 0x81, + 0x47, 0x89, 0x32, 0x9f, 0x2b, 0xab, 0x2a, 0xae, 0x28, 0xae, 0x25, 0xae, 0x24, 0xad, 0x24, 0xaf, + 0x25, 0xb1, 0x28, 0xb0, 0x2a, 0xad, 0x2b, 0xae, 0x2b, 0xaf, 0x29, 0xb1, 0x2c, 0xaf, 0x2f, 0xae, + 0x2f, 0xae, 0x2c, 0xb0, 0x28, 0xb1, 0x27, 0xb1, 0x2e, 0xa7, 0x3b, 0x9f, 0x4b, 0x8c, 0x5c, 0x56, + 0x6f, 0x5e, 0x7e, 0x94, 0x80, 0xb4, 0x7f, 0xd6, 0x7f, 0xe2, 0x7f, 0xdd, 0x7f, 0xdb, 0x7f, 0xd8, + 0x7f, 0xcc, 0x7f, 0xaa, 0x7f, 0x8d, 0x7f, 0x67, 0x7f, 0x22, 0x80, 0x10, 0x7f, 0x10, 0x81, 0x14, + 0x81, 0x15, 0x7d, 0x15, 0x7a, 0x19, 0x69, 0x39, 0x55, 0x6f, 0x44, 0xa0, 0x34, 0xa8, 0x29, 0xae, + 0x24, 0xaf, 0x24, 0xae, 0x26, 0xae, 0x29, 0xae, 0x2d, 0xae, 0x30, 0xaf, 0x31, 0xaf, 0x31, 0xac, + 0x31, 0xaf, 0x2e, 0xb0, 0x2a, 0xb1, 0x2c, 0xad, 0x3c, 0x9c, 0x4c, 0xa3, 0x6f, 0x4f, 0x7a, 0x33, + 0x7f, 0x17, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7c, 0x31, 0x5d, 0x73, + 0x45, 0x92, 0x34, 0x9d, 0x2e, 0xa7, 0x2d, 0xa8, 0x2a, 0xa9, 0x28, 0xab, 0x27, 0xab, 0x26, 0xac, + 0x26, 0xb0, 0x27, 0xb1, 0x2a, 0xaf, 0x2a, 0xae, 0x2c, 0xaf, 0x2d, 0xaf, 0x30, 0xad, 0x31, 0xad, + 0x30, 0xad, 0x2c, 0xae, 0x28, 0xb1, 0x27, 0xaa, 0x2b, 0xab, 0x36, 0xa6, 0x45, 0x8b, 0x53, 0x6b, + 0x70, 0x2a, 0x7e, 0x19, 0x80, 0x32, 0x7f, 0x4c, 0x7f, 0x55, 0x7f, 0x51, 0x7f, 0x4e, 0x7f, 0x4a, + 0x7f, 0x4a, 0x7f, 0x2d, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7d, 0x14, 0x7e, 0x13, 0x80, 0x14, + 0x80, 0x13, 0x7e, 0x12, 0x77, 0x1e, 0x68, 0x41, 0x56, 0x72, 0x46, 0xa0, 0x37, 0xa7, 0x2d, 0xae, + 0x27, 0xb0, 0x25, 0xaf, 0x27, 0xaf, 0x29, 0xaf, 0x2c, 0xaf, 0x30, 0xaf, 0x33, 0xaf, 0x35, 0xac, + 0x37, 0xac, 0x38, 0xa4, 0x38, 0xab, 0x3c, 0x8f, 0x6e, 0x50, 0x7e, 0x1e, 0x7f, 0x13, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x13, 0x7f, 0x1b, 0x78, 0x36, + 0x51, 0x75, 0x41, 0x8f, 0x3b, 0x9a, 0x39, 0x9f, 0x35, 0xa3, 0x33, 0xa9, 0x30, 0xa9, 0x2e, 0xa6, + 0x2d, 0xab, 0x2d, 0xae, 0x2d, 0xae, 0x2d, 0xad, 0x2d, 0xaf, 0x2e, 0xad, 0x2f, 0xac, 0x2f, 0xae, + 0x2e, 0xad, 0x2a, 0xac, 0x26, 0xad, 0x26, 0xb2, 0x2b, 0xa9, 0x37, 0x96, 0x42, 0x8b, 0x4e, 0x7a, + 0x6c, 0x33, 0x7f, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x7f, 0x15, 0x7f, 0x15, 0x7f, 0x11, 0x7f, 0x11, 0x7f, 0x10, 0x80, 0x10, 0x80, 0x13, + 0x7f, 0x13, 0x7d, 0x14, 0x77, 0x1f, 0x65, 0x45, 0x55, 0x72, 0x45, 0x9d, 0x36, 0xa4, 0x2e, 0xad, + 0x2c, 0xaf, 0x2d, 0xaf, 0x2b, 0xae, 0x29, 0xad, 0x29, 0xad, 0x2a, 0xad, 0x2e, 0xaf, 0x35, 0x9e, + 0x3f, 0xa8, 0x47, 0x96, 0x60, 0x5a, 0x6d, 0x51, 0x7f, 0x13, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x19, 0x7f, 0x1b, 0x7e, 0x2a, + 0x78, 0x3a, 0x72, 0x48, 0x5b, 0x87, 0x4e, 0x90, 0x4a, 0x8a, 0x45, 0x93, 0x41, 0x94, 0x3e, 0x98, + 0x3a, 0x9f, 0x38, 0xa1, 0x36, 0xa3, 0x35, 0xa7, 0x32, 0xa6, 0x2f, 0xa8, 0x2e, 0xb0, 0x2e, 0xb0, + 0x2d, 0xad, 0x2a, 0xac, 0x28, 0xaa, 0x29, 0xb1, 0x2f, 0xa4, 0x3a, 0x91, 0x45, 0x82, 0x4f, 0x67, + 0x6b, 0x38, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x12, 0x81, 0x10, 0x82, 0x11, 0x81, 0x10, + 0x80, 0x10, 0x7d, 0x13, 0x78, 0x1c, 0x63, 0x43, 0x52, 0x6e, 0x42, 0x97, 0x35, 0x9e, 0x2d, 0xa8, + 0x30, 0xab, 0x32, 0xab, 0x2f, 0xac, 0x2b, 0xaa, 0x29, 0xaa, 0x2a, 0xaa, 0x32, 0x9c, 0x3c, 0x96, + 0x4c, 0x9d, 0x6e, 0x4e, 0x7e, 0x20, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x7f, 0x13, 0x7f, 0x1c, 0x7f, 0x21, 0x7a, 0x43, 0x68, 0x7b, 0x5b, 0x76, 0x55, 0x76, 0x50, 0x74, + 0x4b, 0x73, 0x48, 0x7b, 0x46, 0x7f, 0x42, 0x88, 0x3c, 0x86, 0x36, 0x90, 0x34, 0x9e, 0x32, 0xa0, + 0x2f, 0xa5, 0x2e, 0xab, 0x2e, 0xaa, 0x34, 0x97, 0x3a, 0x8b, 0x46, 0x80, 0x51, 0x64, 0x57, 0x5c, + 0x6d, 0x33, 0x7f, 0x15, 0x80, 0x17, 0x7f, 0x16, 0x7f, 0x1c, 0x7f, 0x1b, 0x7f, 0x19, 0x7f, 0x17, + 0x7f, 0x18, 0x7f, 0x18, 0x7f, 0x19, 0x7f, 0x19, 0x81, 0x1a, 0x83, 0x18, 0x83, 0x1b, 0x82, 0x19, + 0x7f, 0x1c, 0x7e, 0x19, 0x7d, 0x17, 0x66, 0x3c, 0x52, 0x63, 0x42, 0x83, 0x36, 0x91, 0x2f, 0x9d, + 0x31, 0xa2, 0x34, 0x9c, 0x33, 0xa9, 0x33, 0xa1, 0x34, 0x95, 0x3b, 0x8f, 0x43, 0x7f, 0x67, 0x5a, + 0x7b, 0x2f, 0x7f, 0x15, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x16, 0x7f, 0x21, 0x7e, 0x29, 0x7e, 0x2d, 0x76, 0x4e, + 0x66, 0x65, 0x57, 0x63, 0x57, 0x5f, 0x54, 0x66, 0x4a, 0x73, 0x42, 0x7a, 0x3e, 0x83, 0x3b, 0x8f, + 0x38, 0x93, 0x38, 0x97, 0x3a, 0x94, 0x41, 0x90, 0x48, 0x7b, 0x54, 0x68, 0x5b, 0x5c, 0x63, 0x41, + 0x7a, 0x23, 0x7f, 0x26, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x7f, 0x16, 0x7f, 0x23, 0x70, 0x31, 0x59, 0x53, 0x47, 0x79, 0x3c, 0x89, 0x37, 0x8c, + 0x35, 0x92, 0x36, 0x9e, 0x39, 0x90, 0x3f, 0x8e, 0x47, 0x87, 0x50, 0x6f, 0x67, 0x50, 0x7d, 0x23, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x14, 0x7f, 0x14, 0x7f, 0x19, + 0x7f, 0x22, 0x7d, 0x2c, 0x79, 0x44, 0x73, 0x5d, 0x61, 0x70, 0x57, 0x6d, 0x51, 0x66, 0x4c, 0x74, + 0x49, 0x7b, 0x49, 0x77, 0x4b, 0x76, 0x50, 0x6e, 0x58, 0x62, 0x60, 0x50, 0x66, 0x44, 0x7b, 0x2f, + 0x7f, 0x26, 0x7f, 0x1c, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x7f, 0x1e, 0x7b, 0x33, 0x68, 0x3b, 0x55, 0x70, 0x4b, 0x73, 0x44, 0x7f, + 0x40, 0x81, 0x40, 0x82, 0x47, 0x80, 0x50, 0x70, 0x66, 0x49, 0x75, 0x43, 0x7f, 0x17, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x7f, 0x1e, 0x7f, 0x22, 0x7f, 0x1c, 0x7f, 0x1a, 0x7f, 0x1c, 0x7f, 0x15, 0x71, 0x29, + 0x67, 0x3e, 0x67, 0x41, 0x6a, 0x3f, 0x6d, 0x37, 0x73, 0x2e, 0x78, 0x23, 0x7f, 0x12, 0x7f, 0x14, + 0x7e, 0x1d, 0x7f, 0x14, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x7f, 0x14, 0x7f, 0x28, 0x75, 0x33, 0x70, 0x36, 0x6b, 0x3d, 0x69, 0x42, + 0x64, 0x4a, 0x60, 0x4c, 0x68, 0x43, 0x6f, 0x39, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x10, 0x7f, 0x15, 0x7f, 0x1d, 0x7f, 0x1b, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, + 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10 +}; + +fastimage_t ppcboot_logo = { + DEF_PPCBOOT_LOGO_DATA, + DEF_PPCBOOT_LOGO_WIDTH, + DEF_PPCBOOT_LOGO_HEIGHT, + DEF_PPCBOOT_LOGO_BPP, + DEF_PPCBOOT_LOGO_PIXEL_SIZE, + DEF_PPCBOOT_LOGO_SIZE +}; diff --git a/include/wl_4ppm_keyboard.h b/include/wl_4ppm_keyboard.h new file mode 100644 index 0000000..5a15616 --- /dev/null +++ b/include/wl_4ppm_keyboard.h @@ -0,0 +1,16 @@ +/* +** Wireless 56Khz 4PPM keyboard interface on SMCx +** ============================================== +** (C) 2000 by Paolo Scaffardi (arsenio@tin.it) +** AIRVENT SAM s.p.a - RIMINI(ITALY) +** +** Not currently supported. Still under construction. +*/ + +#ifndef _WL_4PPM_KEYBOARD_ +#define _WL_4PPM_KEYBOARD_ + +int wl_4ppm_keyboard_getc(void); +int wl_4ppm_keyboard_tstc(void); + +#endif diff --git a/mpc8xx/Makefile b/mpc8xx/Makefile index cf13d78..c9b965d 100644 --- a/mpc8xx/Makefile +++ b/mpc8xx/Makefile @@ -27,7 +27,8 @@ LIB = lib$(CPU).a START = start.o kgdb.o OBJS = traps.o serial.o cpu.o cpu_init.o speed.o \ - interrupts.o scc.o + interrupts.o scc.o i2c.o video.o \ + wl_4ppm_keyboard.o all: .depend $(START) $(LIB) diff --git a/mpc8xx/i2c.c b/mpc8xx/i2c.c new file mode 100644 index 0000000..2aa387d --- /dev/null +++ b/mpc8xx/i2c.c @@ -0,0 +1,370 @@ +/* +** I2C interface +** ============= +** (C) 2000 by Paolo Scaffardi (arsenio@tin.it) +** AIRVENT SAM s.p.a - RIMINI(ITALY) +** +*/ + +#include +#include +#include + +#ifdef CONFIG_I2C + +#define DEBUG_STEP 0 +#define PRINTD(x) if (DEBUG_STEP) printf(x); +#define DELAY_US 100000 // us to wait before checking the I2c + +#define I2C_PRAM 0 +#define CPCR_FLAG 0x01 +#define I2C_CPCR_CMD ( ( 0<<(15-7) ) | ( 1 << (15-11) ) | CPCR_FLAG ) +#define I2C_RX_LEN 128 /* Receive buffer length */ +#define I2C_TX_LEN 128 /* Transmit buffer length */ +#define TXBD_R 0x8000 /* Transmit buffer ready to send */ +#define TXBD_W 0x2000 /* Wrap, last buffer in buffer circle */ +#define TXBD_L 0x0800 /* Last, this buffer is the last in this frame */ + /* This bit causes the STOP condition to be sent */ +#define TXBD_S 0x0400 /* Start condition. Causes this BD to transmit a start */ +#define RXBD_E 0x8000 /* Receive buffer is empty and can be used by CPM */ +#define RXBD_W 0x2000 /* Wrap, last receive buffer in buffer circle */ + +typedef struct I2C_BD +{ + unsigned short status; + unsigned short length; + unsigned char *addr; +} I2C_BD; + + +static I2C_BD *rxbd, *txbd, *txbd2; /* buffer descriptors are defined */ + /* globally for this file */ + +static unsigned char + rxbuf[I2C_RX_LEN], /* The buffers are in main memory. They */ + txbuf[I2C_TX_LEN], /* could also be in the DPRAM, like the SMC buffers */ + txbuf2[I2C_TX_LEN]; + +// Returns the best value of I2BRG to meet desired clock speed of I2C with +// input parameters (clock speed, filter, and predivider value). +// It returns computer speed value and the difference between it and desired +// speed. +static inline int i2c_roundrate (int hz, int speed, int filter, int modval, + int *brgval, int *totspeed) +{ + int moddiv = 1 << (3-(modval & 3)), + brgdiv, + div; + + *brgval = hz / (2 * moddiv * speed) - 3 + 2*filter ; + + if ((*brgval < 0) || (*brgval > 255)) + return -1 ; + + brgdiv = 2 * (*brgval + 3 + 2 * filter) ; + div = moddiv * brgdiv ; + *totspeed = hz / div ; + + return 0; +} + +// Sets the I2C clock predivider and divider to meet required clock speed +static int i2c_setrate (int hz, int speed) +{ + immap_t *immap = (immap_t *)CFG_IMMR ; + i2c8xx_t *i2c = (i2c8xx_t *)&immap->im_i2c; + int brgval, + modval, // 0-3 + bestspeed_diff = speed, + bestspeed_brgval=0, + bestspeed_modval=0, + bestspeed_filter=0, + totspeed, + filter; + + for (filter = 0; filter < 2; filter++) + for (modval = 0; modval < 4; modval++) + if (i2c_roundrate ( hz, speed, + filter, modval, + &brgval, &totspeed) == 0) + { + int diff = speed - totspeed ; + + if ((diff >= 0) && (diff < bestspeed_diff)) + { + bestspeed_diff = diff ; + bestspeed_modval = modval; + bestspeed_brgval = brgval; + bestspeed_filter = filter; + } + } + +/* printf("Best is:\n"); + printf("\nCPU=%dhz RATE=%d F=%d I2MOD=%08x I2BRG=%08x DIFF=%dhz", + hz, speed, + bestspeed_filter, bestspeed_modval, bestspeed_brgval, + bestspeed_diff); +*/ + i2c->i2c_i2mod = ((bestspeed_modval & 3) << 1) | (bestspeed_filter << 3); + i2c->i2c_i2brg = bestspeed_brgval & 0xff; + + return 1 ; +} + +volatile i2c8xx_t *i2c; +volatile cbd_t *tbdf, *rbdf; +volatile iic_t *iip; + +void i2c_init(int speed) +{ + immap_t *immap = (immap_t *)CFG_IMMR ; + volatile cpm8xx_t *cp; + char *dest; + int count ; +#ifdef CONFIG_UCODE_PATCH + int reloc = 0 ; +#endif + + /* Get pointer to Communication Processor + * and to internal registers + */ + cp = (cpm8xx_t *)&immap->im_cpm ; + iip = (iic_t *)&cp->cp_dparam[PROFF_IIC]; + i2c = (i2c8xx_t *)&(immap->im_i2c); + +#ifdef CONFIG_UCODE_PATCH + /* Check for and use a microcode relocation patch + */ + if (reloc = iip->iic_rpbase) + iip = (iic_t *)&cp->cp_dpmem[iip->iic_rpbase] ; + + /* Initialize Port B I2C pins. + */ + cp->cp_pbpar |= 0x00000030; + cp->cp_pbdir |= 0x00000030; + cp->cp_pbodr |= 0x00000030; + + /* Initialize port B IIC pins + * We need to make sure many things are initialized to zero, + * expecially in the case of a microcode patch. + */ + iip->iic_rstate=0; + iip->iic_rdp=0; + iip->iic_rbptr=0; + iip->iic_rbc=0; + iip->iic_rxtmp=0; + iip->iic_tstate=0; + iip->iic_tdp=0; + iip->iic_tbptr=0; + iip->iic_tbc=0; + iip->iic_txtmp=0; +#else + /* Initialize Port B I2C pins. + */ + cp->cp_pbpar |= 0x00000030; + cp->cp_pbdir |= 0x00000030; + cp->cp_pbodr |= 0x00000030; +#endif + + /* Disable interrupts. + */ + i2c->i2c_i2cmr = 0; + i2c->i2c_i2cer = 0xff; + + /* Set I2C controller in master mode + */ + i2c->i2c_i2com = 0x01; + + /* Set big endian byte order + */ + iip->iic_tfcr = SMC_EB; + iip->iic_rfcr = SMC_EB; + + /* Set maximum receive size. + */ + iip->iic_mrblr = 128; + + /* Initialize Tx/Rx parameters. + */ + iip->iic_rbase = (unsigned short) 0x2018; + iip->iic_tbase = (unsigned short) 0x2020; + + cp->cp_cpcr = mk_cr_cmd(CPM_CR_CH_I2C, CPM_CR_INIT_TRX) | CPM_CR_FLG; + while (cp->cp_cpcr & CPM_CR_FLG); + + // Setup Buffer Descriptor and buffer memory. Skips space used by + // uart.s buffer descriptors and buffers. (0x2000 to 0x2017) + // Each buffer descriptor takes up 8 bytes + + rxbd = ( I2C_BD *) ((unsigned char *)immap + 0x2018); + txbd = ( I2C_BD *) ((unsigned char *)immap + 0x2020); + txbd2 = ( I2C_BD *) ((unsigned char *)immap + 0x2028 ); + + PRINTD("\n[I2C ] Clearing the buffer memory..."); + + // Clear the buffer memory + dest = rxbuf; + for( count = 0; count < I2C_RX_LEN; count++ ) + *dest++ = 0; + + dest = txbuf; + for( count = 0; count < I2C_TX_LEN; count++ ) + *dest++ = 0; + + dest = txbuf2; + for( count = 0; count < I2C_TX_LEN; count++ ) + *dest++ = 0; + + PRINTD("\n[I2C ] Initializing BD's..."); + + // Initialize the BD's + + // Rx: Wrap, no interrupt, empty + rxbd->length = 0; + rxbd->addr = rxbuf; + rxbd->status = 0xa000; + + // Tx: Wrap, no interrupt, not ready to send, last + txbd->length = 0; + txbd->addr = txbuf; + txbd->status = 0x2800; + + txbd2->length = 0; + txbd2->addr = txbuf2; + txbd2->status = 0x2c00; + // Set the I2C BRG Clock division factor from desired i2c rate + // and current CPU rate (we assume sccr dfbgr field is 0; + // divide BRGCLK by 1) + + PRINTD("\n[I2C ] Setting rate..."); + i2c_setrate (MPC8XX_HZ, speed) ; + +} + +void i2c_send( unsigned char address, + unsigned char secondary_address, + int enable_secondary, + unsigned short size, unsigned char dataout[] ) +{ + int i,j; + + if( size > I2C_TX_LEN ) /* Trying to send message larger than BD */ + return; + + /* Enable I2C */ + + PRINTD("\n[I2C ] Enabling I2C..."); + i2c->i2c_i2mod |= 1; + +/* WE ONLY HAVE TO SEND ONCE + + PRINTD("\n[I2C ] Waiting for transmit buffer empty..."); + while( txbd->status & TXBD_R ) + { + }; // Loop until previous data sent +*/ + PRINTD("\n[I2C ] Formatting addresses..."); + if( enable_secondary ) /* Device has an internal address */ + { + txbd->length = size + 2; /* Length of message plus dest addresses */ + txbd->addr[0] = address; + txbd->addr[0] &= ~(0x01); + txbd->addr[1] = secondary_address; + i = 2; + } + else + { + txbd->length = size + 1; /* Length of message plus dest address */ + txbd->addr[0] = address; /* Write destination address to BD */ + txbd->addr[0] &= ~(0x01); /* Set address to write */ + i = 1; + } + /* Copy data to send into buffer */ + + PRINTD("\n[I2C ] Copying data into buffer..."); + + for( j = 0; j < size; i++, j++ ) + txbd->addr[ i ] = dataout[j]; + + /* Ready to Transmit, wrap, last */ + + PRINTD("\n[I2C ] Waiting to transmit..."); + + txbd->status = txbd->status | TXBD_R | TXBD_W | TXBD_L; + + /* Transmit */ + PRINTD("\n[I2C ] Transmitting..."); + + i2c->i2c_i2com |= 0x80; + + PRINTD("\n[I2C ] Waiting for transmit buffer empty..."); + udelay (DELAY_US) ; + + while( txbd->status & TXBD_R ); + + /* Turn off I2C */ + PRINTD("\n[I2C ] Turning off I2C..."); + i2c->i2c_i2mod &= (~1); +} + +void i2c_receive(unsigned char address, + unsigned char secondary_address, + int enable_secondary, + unsigned short size_to_expect, unsigned char datain[] ) +{ + int i, j; + +// if( size_to_expect > I2C_RX_LEN ) +// abort(); /* Expected to receive too much */ + + /* Turn on I2C */ + i2c->i2c_i2mod |= 0x01; + + /* Setup TXBD for destination address */ + if( enable_secondary ) + { + txbd->length = 2; + txbd->addr[0] = address | 0x00; /* Write data */ + txbd->addr[1] = secondary_address; /* Internal address */ + txbd->status = TXBD_R; + + /* Buffer ready to transmit, */ + txbd2->status = TXBD_R | TXBD_W | TXBD_L | TXBD_S; + txbd2->length = size_to_expect + 1; + txbd2->addr[0] = address | 0x01; /* Read data */ + + /* Reset the rxbd */ + rxbd->status = RXBD_E | RXBD_W; + + /* Begin transmission */ + i2c->i2c_i2com |= 0x80; + + } + else + { + txbd->length = 1 + size_to_expect; + txbd->addr[0] = address | 0x01; + + + /* Buffer ready to transmit, wrap, loop */ + txbd->status |= TXBD_R | TXBD_W | TXBD_L; + + /* Reset the rxbd */ + rxbd->status = RXBD_E | RXBD_W; + + /* Begin transmission */ + i2c->i2c_i2com |= 0x80; + + while( txbd->status & TXBD_R); /* Loop until transmit completed */ + } + + while( rxbd->status & RXBD_E); /* Wait until receive is finished */ + + for( i= 0, j = 0; j < size_to_expect; j++, i++ ) /* Copy data to datain[] */ + datain[j] = rxbd->addr[i]; + + /* Turn off I2C */ + i2c->i2c_i2mod &= (~1); +} + +#endif /* CONFIG_I2C */ diff --git a/mpc8xx/interrupts.c b/mpc8xx/interrupts.c index 5a27489..b00361a 100644 --- a/mpc8xx/interrupts.c +++ b/mpc8xx/interrupts.c @@ -95,17 +95,19 @@ int disable_interrupts (void) void interrupt_init (bd_t *bd) { + volatile immap_t *immr = (immap_t *)CFG_IMMR; int freq; freq = (bd->bi_intfreq * 1000000); - if (((volatile immap_t *)CFG_IMMR)->im_clkrst.car_sccr & SCCR_TBS) { + if (immr->im_clkrst.car_sccr & SCCR_TBS) { freq /= 16; /* use divide by 16 processor clock */ } decrementer_count = freq / DECREMENTER_TICK; cpm_interrupt_init(); - ((immap_t *)CFG_IMMR)->im_siu_conf.sc_simask |= (1 << (31-CPM_INTERRUPT)); + /* disable all interrupts except for the CPM interrupt */ + immr->im_siu_conf.sc_simask = 1 << (31-CPM_INTERRUPT); set_dec (decrementer_count); @@ -119,20 +121,18 @@ interrupt_init (bd_t *bd) */ void external_interrupt(struct pt_regs *regs) { - immap_t *immr = (immap_t *)CFG_IMMR; + volatile immap_t *immr = (immap_t *)CFG_IMMR; int irq; - ulong bits; ulong simask, newmask; - ulong vec; + ulong vec, v_bit; /* * read the SIVEC register and shift the bits down * to get the irq number */ - bits = immr->im_siu_conf.sc_sivec; - irq = bits >> 26; - - bits = 1UL << irq; + vec = immr->im_siu_conf.sc_sivec; + irq = vec >> 26; + v_bit = 0x80000000UL >> irq; /* * Read Interrupt Mask Register and Mask Interrupts @@ -142,12 +142,11 @@ void external_interrupt(struct pt_regs *regs) immr->im_siu_conf.sc_simask = newmask; if (!(irq & 0x1)) { /* External Interrupt ? */ - ulong siel, v_bit; + ulong siel; /* * Read Interrupt Edge/Level Register */ siel = immr->im_siu_conf.sc_siel; - v_bit = 0x80000000 >> irq; if (siel & v_bit) { /* edge triggered interrupt ? */ /* @@ -164,6 +163,8 @@ void external_interrupt(struct pt_regs *regs) default: printf ("\nBogus External Interrupt IRQ %d Vector %ld\n", irq, vec); + /* turn off the bogus interrupt to avoid it from now */ + simask &= ~v_bit; break; } @@ -181,7 +182,7 @@ void external_interrupt(struct pt_regs *regs) static void cpm_interrupt(int irq, struct pt_regs * regs) { - immap_t *immr = (immap_t *)CFG_IMMR; + volatile immap_t *immr = (immap_t *)CFG_IMMR; uint vec; /* @@ -224,13 +225,15 @@ cpm_error_interrupt (void *dummy) void cpm_install_handler(int vec, interrupt_handler_t *handler, void *arg) { + volatile immap_t *immr = (immap_t *)CFG_IMMR; + if (cpm_vecs[vec].handler != NULL) { printf ("CPM interrupt 0x%x replacing 0x%x\n", (uint)handler, (uint)cpm_vecs[vec].handler); } cpm_vecs[vec].handler = handler; cpm_vecs[vec].arg = arg; - ((immap_t *)CFG_IMMR)->im_cpic.cpic_cimr |= (1 << vec); + immr->im_cpic.cpic_cimr |= (1 << vec); #if 0 printf ("Install CPM interrupt for vector %d ==> %p\n", vec, handler); #endif @@ -239,11 +242,12 @@ cpm_install_handler(int vec, interrupt_handler_t *handler, void *arg) void cpm_free_handler(int vec) { + volatile immap_t *immr = (immap_t *)CFG_IMMR; #if 0 printf ("Free CPM interrupt for vector %d ==> %p\n", vec, cpm_vecs[vec].handler); #endif - ((immap_t *)CFG_IMMR)->im_cpic.cpic_cimr &= ~(1 << vec); + immr->im_cpic.cpic_cimr &= ~(1 << vec); cpm_vecs[vec].handler = NULL; cpm_vecs[vec].arg = NULL; } @@ -253,7 +257,7 @@ cpm_free_handler(int vec) static void cpm_interrupt_init (void) { - immap_t *immr = (immap_t *)CFG_IMMR; + volatile immap_t *immr = (immap_t *)CFG_IMMR; /* * Initialize the CPM interrupt controller. @@ -287,7 +291,7 @@ volatile ulong timestamp = 0; */ void timer_interrupt(struct pt_regs *regs) { - immap_t *immr = (immap_t *)CFG_IMMR; + volatile immap_t *immr = (immap_t *)CFG_IMMR; #if 0 printf ("*** Timer Interrupt *** "); #endif diff --git a/mpc8xx/serial.c b/mpc8xx/serial.c index d157b1d..8a080e8 100644 --- a/mpc8xx/serial.c +++ b/mpc8xx/serial.c @@ -177,6 +177,10 @@ serial_init (ulong cpu_clock, int baudrate) /* Enable transmitter/receiver. */ sp->smc_smcmr |= SMCMR_REN | SMCMR_TEN; + +#ifdef CONFIG_FADS + udelay(500000); +#endif } void diff --git a/mpc8xx/start.S b/mpc8xx/start.S index 0a48328..d0464fc 100644 --- a/mpc8xx/start.S +++ b/mpc8xx/start.S @@ -164,7 +164,6 @@ in_flash: ori r1, r3, CFG_INIT_SP_OFFSET /* set up the stack in internal DPRAM */ - /* * Disable serialized ifetch and show cycles * (i.e. set processor to normal mode). diff --git a/mpc8xx/video.c b/mpc8xx/video.c new file mode 100644 index 0000000..5ccd567 --- /dev/null +++ b/mpc8xx/video.c @@ -0,0 +1,1020 @@ +/* +** MPC823 Video Controller +** ======================= +** (C) 2000 by Paolo Scaffardi (arsenio@tin.it) +** AIRVENT SAM s.p.a - RIMINI(ITALY) +** +*/ + +// *********************************************************************** +// ** HEADER FILES +// *********************************************************************** + +#include +#include +#include +#include +#include +#include +#include + +#ifdef CONFIG_VIDEO + +// *********************************************************************** +// ** DEBUG SETTINGS +// *********************************************************************** + +#define VIDEO_DEBUG_STEP 0 +#define PRINTD(x) if (VIDEO_DEBUG_STEP) printf(x); + +//#define VIDEO_DEBUG_COLORBARS // Force colorbars output + +// *********************************************************************** +// ** VIDEO MODE SETTINGS +// *********************************************************************** + +//#define VIDEO_MODE_EXTENDED // Allow screen size bigger than visible area +//#define VIDEO_MODE_NTSC +#define VIDEO_MODE_PAL +//#define VIDEO_BLINK // This enables cursor blinking (under construction) +#define VIDEO_INFO // Show PPCBOOT informations +#define VIDEO_INFO_X VIDEO_LOGO_WIDTH+8 +#define VIDEO_INFO_Y 8 + +// *********************************************************************** +// ** VIDEO ENCODER CONSTANTS +// *********************************************************************** + +#ifdef CONFIG_VIDEO_ENCODER_AD7176 + +#include // Sets encoder data, mode, and visible and active area + +#define VIDEO_I2C 1 +#define VIDEO_I2C_RATE 75000 // Max I2C rate is 100Khz - Too high! +#define VIDEO_I2C_ADDR CONFIG_VIDEO_ENCODER_AD7176_ADDR +#define VIDEO_I2C_DATA_ADDR video_encoder_data +#define VIDEO_I2C_DATA_SIZE sizeof(video_encoder_data) +#endif + +#ifdef VIDEO_MODE_EXTENDED +#define VIDEO_COLS VIDEO_ACTIVE_COLS +#define VIDEO_ROWS VIDEO_ACTIVE_ROWS +#else +#define VIDEO_COLS VIDEO_VISIBLE_COLS +#define VIDEO_ROWS VIDEO_VISIBLE_ROWS +#endif + +// *********************************************************************** +// ** VIDEO MODE CONSTANTS +// *********************************************************************** + +#define VIDEO_PIXEL_SIZE (VIDEO_MODE_BPP/8) +#define VIDEO_SIZE (VIDEO_ROWS*VIDEO_COLS*VIDEO_PIXEL_SIZE)// Total size of buffer +#define VIDEO_PIX_BLOCKS (VIDEO_SIZE >> 2) // Number of ints +#define VIDEO_LINE_LEN (VIDEO_COLS*VIDEO_PIXEL_SIZE) // Number of bytes per line +#define VIDEO_BURST_LEN (VIDEO_COLS/8) + +#ifdef VIDEO_MODE_YUYV +#define VIDEO_BG_COL 0x80108010 // Background color in YUYV format +#else +#define VIDEO_BG_COL 0x00000000 // Background color in RGB format +#endif + +// *********************************************************************** +// ** FONT AND LOGO DATA +// *********************************************************************** + +#include // Get font data, width and height + +#ifdef CONFIG_VIDEO_LOGO +#include // Get logo data, width and height + +#define VIDEO_LOGO_WIDTH DEF_PPCBOOT_LOGO_WIDTH +#define VIDEO_LOGO_HEIGHT DEF_PPCBOOT_LOGO_HEIGHT +#define VIDEO_LOGO_ADDR &ppcboot_logo +#endif + +// *********************************************************************** +// ** VIDEO CONTROLLER CONSTANTS +// *********************************************************************** + +// VCCR - VIDEO CONTROLLER CONFIGURATION REGISTER + +#define VIDEO_VCCR_VON 0 // Video controller ON +#define VIDEO_VCCR_CSRC 1 // Clock source +#define VIDEO_VCCR_PDF 13 // Pixel display format +#define VIDEO_VCCR_IEN 11 // Interrupt enable + +// VSR - VIDEO STATUS REGISTER + +#define VIDEO_VSR_CAS 6 // Active set +#define VIDEO_VSR_EOF 0 // End of frame + +// VCMR - VIDEO COMMAND REGISTER + +#define VIDEO_VCMR_BD 0 // Blank display +#define VIDEO_VCMR_ASEL 1 // Active set selection + +// VBCB - VIDEO BACKGROUND COLOR BUFFER REGISTER + +#define VIDEO_BCSR4_RESET_BIT 21 // BCSR4 - Extern video encoder reset +#define VIDEO_BCSR4_EXTCLK_BIT 22 // BCSR4 - Extern clock enable +#define VIDEO_BCSR4_VIDLED_BIT 23 // BCSR4 - Video led disable + +// *********************************************************************** +// ** CONSOLE CONSTANTS +// *********************************************************************** + +#ifdef CONFIG_VIDEO_LOGO +#define CONSOLE_ROWS ((VIDEO_ROWS - VIDEO_LOGO_HEIGHT) / VIDEO_FONT_HEIGHT) +#define VIDEO_LOGO_SKIP (VIDEO_COLS - VIDEO_LOGO_WIDTH) +#else +#define CONSOLE_ROWS (VIDEO_ROWS / VIDEO_FONT_HEIGHT) +#endif + +#define CONSOLE_COLS (VIDEO_COLS / VIDEO_FONT_WIDTH) +#define CONSOLE_ROW_SIZE (VIDEO_FONT_HEIGHT * VIDEO_LINE_LEN) +#define CONSOLE_ROW_FIRST (video_console_address) +#define CONSOLE_ROW_SECOND (video_console_address + CONSOLE_ROW_SIZE) +#define CONSOLE_ROW_LAST (video_console_address + CONSOLE_SIZE - CONSOLE_ROW_SIZE) +#define CONSOLE_SIZE (CONSOLE_ROW_SIZE * CONSOLE_ROWS) +#define CONSOLE_SCROLL_SIZE (CONSOLE_SIZE - CONSOLE_ROW_SIZE) + +// Simple color definitions + +#define CONSOLE_COLOR_BLACK 0 +#define CONSOLE_COLOR_WHITE 15 +#define CONSOLE_COLOR_GRAY 14 + +// *********************************************************************** +// ** BITOPS MACROS +// *********************************************************************** + +#define HISHORT(i) ((i >> 16)&0xffff) +#define LOSHORT(i) (i & 0xffff) +#define HICHAR(s) ((i >> 8)&0xff) +#define LOCHAR(s) (i & 0xff) +#define HI(c) ((c >> 4)&0xf) +#define LO(c) (c & 0xf) +#define SWAPINT(i) (HISHORT(i) | (LOSHORT(i) << 16)) +#define SWAPSHORT(s) (HICHAR(s) | (LOCHAR(s) << 8)) +#define SWAPCHAR(c) (HI(c) | (LO(c) << 4)) +#define BITMASK(b) (1 << (b)) +#define GETBIT(v,b) (((v) & BITMASK(b)) > 0) +#define SETBIT(v,b,d) (v = (((d)>0) ? (v) | BITMASK(b): (v) & ~BITMASK(b))) + +// *********************************************************************** +// ** STRUCTURES +// *********************************************************************** + +typedef struct { + unsigned char V, + Y1, + U, + Y2; +} tYUYV ; + +/* This structure is based on the Video Ram in the MPC823. */ +typedef struct VRAM +{ + unsigned hx:2, /* Horizontal sync */ + vx:2, /* Vertical sync */ + fx:2, /* Frame */ + bx:2, /* Blank */ + res1:6, /* Reserved */ + vds:2, /* Video Data Select */ + inter:1, /* Interrupt */ + res2:2, /* Reserved */ + lcyc:11, /* Loop/video cycles */ + lp:1, /* Loop start/end */ + lst:1; /* Last entry */ +} VRAM; + +// *********************************************************************** +// ** VARIABLES +// *********************************************************************** + +static int + video_panning_range_x = 0, // Video mode invisible pixels x range + video_panning_range_y = 0, // Video mode invisible pixels y range + video_panning_value_x = 0, // Video mode x panning value (absolute) + video_panning_value_y = 0, // Video mode y panning value (absolute) + video_panning_factor_x = 0, // Video mode x panning value (-127 +127) + video_panning_factor_y = 0, // Video mode y panning value (-127 +127) + + console_col = 0, // Cursor col + console_row = 0, // Cursor row + + video_palette[16]; // Our palette + +static const int + video_font_draw_table[] = {0x00000000, 0x0000ffff, 0xffff0000, 0xffffffff} ; + +static char + + video_color_fg = 0, // Current fg color index (0-15) + video_color_bg = 0, // Current bg color index (0-15) + + video_enable = 0 ; // Video has been initialized? + +static void + *video_fb_address, // Frame buffer address + *video_console_address ; // Console frame buffer start address + +// *********************************************************************** +// ** MEMORY FUNCTIONS (32bit) +// *********************************************************************** + +static void memsetl (int *p, int c, int v) +{ + while (c--) + *(p++) = v ; +} + +static void memcpyl (int *d, int *s, int c) +{ + while (c--) + *(d++) = *(s++) ; +} + +// *********************************************************************** +// ** VIDEO DRAWING AND COLOR FUNCTIONS +// *********************************************************************** + +static int video_maprgb (int r, int g, int b) +{ + unsigned int pR, pG, pB ; + tYUYV YUYV ; + unsigned int *ret = (unsigned int*) &YUYV ; + + // Transform (0-255) components to (0-100) + + pR = r * 100 / 255 ; + pG = g * 100 / 255 ; + pB = b * 100 / 255 ; + + // Calculate YUV values (0-255) from RGB beetween 0-100 + + YUYV.Y1 = YUYV.Y2 = 209 * (pR + pG + pB) / 300 + 16 ; + YUYV.U = pR - (pG*3/4) - (pB/4) + 128 ; + YUYV.V = pB - (pR/4) - (pG*3/4) + 128 ; + + return *ret ; +} + +static void video_setpalette (int color, int r, int g, int b) +{ + color &= 0xf ; + + video_palette[color] = video_maprgb(r,g,b); + + // Swap values if our panning offset is odd + if (video_panning_value_x & 1) + video_palette[color] = SWAPINT (video_palette[color]); +} + +static void video_fill(int color) +{ + memsetl (video_fb_address, VIDEO_PIX_BLOCKS, color); +} + +static void video_setfgcolor(int i) +{ + video_color_fg = i & 0xf; +} + +static void video_setbgcolor(int i) +{ + video_color_bg = i & 0xf; +} + +static int video_pickcolor(int i) +{ + return video_palette[i & 0xf]; +} + +// Absolute console plotting functions + +#ifdef VIDEO_BLINK +static void video_revchar (int xx, int yy) +{ + int rows; + u8 *dest ; + dest = video_fb_address + yy * VIDEO_LINE_LEN + xx * 2; + + for (rows = VIDEO_FONT_HEIGHT; rows--; dest += VIDEO_LINE_LEN) { + switch (VIDEO_FONT_WIDTH) { + case 16: + ((u32 *)dest)[6] ^= 0xffffffff; ((u32 *)dest)[7] ^= 0xffffffff; + /* FALL THROUGH */ + case 12: + ((u32 *)dest)[4] ^= 0xffffffff; ((u32 *)dest)[5] ^= 0xffffffff; + /* FALL THROUGH */ + case 8: + ((u32 *)dest)[2] ^= 0xffffffff; ((u32 *)dest)[3] ^= 0xffffffff; + /* FALL THROUGH */ + case 4: + ((u32 *)dest)[0] ^= 0xffffffff; ((u32 *)dest)[1] ^= 0xffffffff; + } + } +} +#endif + +static void video_drawchars(int xx, int yy, unsigned char *s, int count) +{ + u8 *cdat, *dest, *dest0; + int rows, offset, c; + u32 eorx, fgx, bgx; + + offset = yy * VIDEO_LINE_LEN + xx * 2; + dest0 = video_fb_address + offset ; + + fgx = video_pickcolor (video_color_fg) ; + bgx = video_pickcolor (video_color_bg) ; + + if (xx & 1) + { + fgx = SWAPINT(fgx); + bgx = SWAPINT(bgx); + } + + eorx = fgx ^ bgx; + + switch (VIDEO_FONT_WIDTH) { + case 4: + case 8: + while (count--) + { + c = *s ; + cdat = video_fontdata + c * VIDEO_FONT_HEIGHT; + for (rows = VIDEO_FONT_HEIGHT, dest = dest0; rows--; dest += VIDEO_LINE_LEN) { + u8 bits = *cdat++; + ((u32 *)dest)[0] = (video_font_draw_table[bits >> 6] & eorx) ^ bgx; + ((u32 *)dest)[1] = (video_font_draw_table[bits >> 4 & 3] & eorx) ^ bgx; + if (VIDEO_FONT_WIDTH == 8) { + ((u32 *)dest)[2] = (video_font_draw_table[bits >> 2 & 3] & eorx) ^ bgx; + ((u32 *)dest)[3] = (video_font_draw_table[bits & 3] & eorx) ^ bgx; + } + } + dest0 += VIDEO_FONT_WIDTH*2; + s++ ; + } + break; + case 12: + case 16: + while (count--) { + cdat = video_fontdata + (*s) * (VIDEO_FONT_HEIGHT << 1); + for (rows = VIDEO_FONT_HEIGHT, dest = dest0; rows--; dest += VIDEO_LINE_LEN) { + u8 bits = *cdat++; + ((u32 *)dest)[0] = (video_font_draw_table[bits >> 6] & eorx) ^ bgx; + ((u32 *)dest)[1] = (video_font_draw_table[bits >> 4 & 3] & eorx) ^ bgx; + ((u32 *)dest)[2] = (video_font_draw_table[bits >> 2 & 3] & eorx) ^ bgx; + ((u32 *)dest)[3] = (video_font_draw_table[bits & 3] & eorx) ^ bgx; + bits = *cdat++; + ((u32 *)dest)[4] = (video_font_draw_table[bits >> 6] & eorx) ^ bgx; + ((u32 *)dest)[5] = (video_font_draw_table[bits >> 4 & 3] & eorx) ^ bgx; + if (VIDEO_FONT_WIDTH == 16) { + ((u32 *)dest)[6] = (video_font_draw_table[bits >> 2 & 3] & eorx) ^ bgx; + ((u32 *)dest)[7] = (video_font_draw_table[bits & 3] & eorx) ^ bgx; + } + } + s++ ; + dest0 += VIDEO_FONT_WIDTH*2; + } + break; + } +} + +static inline void video_drawstring(int xx, int yy, unsigned char *s) +{ + video_drawchars (xx, yy, s, strlen(s)) ; +} + +// Relative to console plotting functions + +static void video_putchars(int xx, int yy, unsigned char *s, int count) +{ +#ifdef CONFIG_VIDEO_LOGO + video_drawchars (xx, yy + VIDEO_LOGO_HEIGHT, s, count) ; +#else + video_drawchars (xx, yy, s, count) ; +#endif +} + +static void video_putchar(int xx, int yy, unsigned char c) +{ +#ifdef CONFIG_VIDEO_LOGO + video_drawchars (xx, yy + VIDEO_LOGO_HEIGHT, &c, 1) ; +#else + video_drawchars (xx, yy, &c, 1) ; +#endif +} + +static inline void video_putstring(int xx, int yy, unsigned char *s) +{ + video_putchars (xx, yy, s, strlen(s)) ; +} + +// *********************************************************************** +// ** VIDEO CONTROLLER LOW-LEVEL FUNCTIONS +// *********************************************************************** + +static void video_mode_dupefield(VRAM *source, VRAM *dest, int entries) +{ + int i ; + + for(i=0; ihx = Hx ; + vr->vx = Vx ; + vr->fx = Fx ; + vr->bx = Bx ; + vr->vds = VDS ; + vr->inter = INT ; + vr->lcyc = LCYC ; + vr->lp = LP ; + vr->lst = LST ; +} + +#define ADDENTRY(a,b,c,d,e,f,g,h,i) video_mode_addentry(&vr[entry++],a,b,c,d,e,f,g,h,i) + +static int video_mode_generate (void) +{ + immap_t *immap = (immap_t *)CFG_IMMR; + VRAM *vr = (VRAM *)(((void *)immap) + 0xb00); // Pointer to the VRAM table + int DX, X1, X2, DY, Y1, Y2, entry=0, fifo ; + + // CHECKING PARAMETERS + + if (video_panning_factor_y < -128) + video_panning_factor_y = -128; + + if (video_panning_factor_y > 128) + video_panning_factor_y = 128; + + if (video_panning_factor_x < -128) + video_panning_factor_x = -128; + + if (video_panning_factor_x > 128) + video_panning_factor_x = 128; + + // Setting panning + + DX = video_panning_range_x = (VIDEO_ACTIVE_COLS - VIDEO_COLS) * 2 ; + DY = video_panning_range_y = (VIDEO_ACTIVE_ROWS - VIDEO_ROWS) / 2 ; + + video_panning_value_x = (video_panning_factor_x + 128) * DX / 256; + video_panning_value_y = (video_panning_factor_y + 128) * DY / 256; + + // We assume these are burst units (multiplied by 2, we need it pari) + X1 = video_panning_value_x & 0xfffe; + X2 = DX - X1; + + // We assume these are field line units (divided by 2, we need it pari) + Y1 = video_panning_value_y & 0xfffe; + Y2 = DY - Y1; + +#ifdef VIDEO_MODE_NTSC +#error "Not yet supported!" +#endif + +#ifdef VIDEO_MODE_PAL +// Hx Vx Fx Bx VDS INT LCYC LP LST +// +// vertical; blanking +// + ADDENTRY( 0, 0, 0, 0, 1, 0, 22, 1, 0 ); + ADDENTRY( 3, 0, 0, 0, 1, 0, 263, 0, 0 ); + ADDENTRY( 3, 0, 0, 0, 1, 0,1440, 0, 0 ); + ADDENTRY( 3, 0, 0, 0, 1, 0, 24, 1, 0 ); +// +// active area (TOP) +// + if (Y1 > 0) + { + ADDENTRY( 0, 0, 0, 0, 1, 0, Y1, 1, 0 ); // 11? + ADDENTRY( 3, 0, 0, 0, 1, 0, 255, 0, 0 ); + ADDENTRY( 3, 0, 0, 3, 1, 0,1448, 0, 0 ); + ADDENTRY( 3, 0, 0, 0, 1, 0, 24, 1, 0 ); + } +// +// field active area (CENTER) +// + ADDENTRY( 0, 0, 0, 0, 1, 0, 288-DY, 1, 0 ); // 265? + ADDENTRY( 3, 0, 0, 0, 1, 0, 255, 0, 0 ); + ADDENTRY( 3, 0, 0, 3, 1, 0, 8 + X1, 0, 0 ); + ADDENTRY( 3, 0, 0, 3, 0, 0, VIDEO_COLS * 2, 0, 0 ); + + if (X2 > 0) + ADDENTRY( 3, 0, 0, 1, 1, 0, X2, 0, 0 ); + + ADDENTRY( 3, 0, 0, 0, 1, 0, 24, 1, 0 ); +// +// field active area (BOTTOM) +// + if (Y2 > 0) + { + ADDENTRY( 0, 0, 0, 0, 1, 0, Y2, 1, 0 ); // 12? + ADDENTRY( 3, 0, 0, 0, 1, 0, 255, 0, 0 ); + ADDENTRY( 3, 0, 0, 3, 1, 0,1448, 0, 0 ); + ADDENTRY( 3, 0, 0, 0, 1, 0, 24, 1, 0 ); + } +// +// field vertical; blanking +// + ADDENTRY( 0, 0, 0, 0, 1, 0, 2, 1, 0 ); + ADDENTRY( 3, 0, 0, 0, 1, 0, 263, 0, 0 ); + ADDENTRY( 3, 0, 0, 0, 1, 0,1440, 0, 0 ); + ADDENTRY( 3, 0, 0, 0, 1, 0, 24, 1, 0 ); +// +// Create the other field (like this, but whit other field selected, +// one more cycle loop and a last identifier) +// + video_mode_dupefield (vr, &vr[entry], entry); +#endif + + // See what FIFO are we using + fifo = GETBIT(immap->im_vid.vid_vsr, VIDEO_VSR_CAS); + + // Set number of lines and burst (only one frame for now) + if (fifo) + immap->im_vid.vid_vfcr0 = VIDEO_BURST_LEN | + (VIDEO_BURST_LEN << 8) | + ((VIDEO_ROWS / 2) << 19) ; + else + immap->im_vid.vid_vfcr1 = VIDEO_BURST_LEN | + (VIDEO_BURST_LEN << 8) | + ((VIDEO_ROWS / 2) << 19) ; + + SETBIT(immap->im_vid.vid_vcmr, VIDEO_VCMR_ASEL, !fifo); + +// Wait until changes are applied (not done) +// while (GETBIT(immap->im_vid.vid_vsr, VIDEO_VSR_CAS) == fifo) ; + + // Return number of VRAM entries + return entry * 2 ; +} + +static void video_encoder_init (void) +{ +#ifdef VIDEO_I2C + // Initialize the I2C + PRINTD("\n[VIDEO ENCODER] Initializing I2C bus..."); + i2c_init (VIDEO_I2C_RATE); + +#ifdef CONFIG_FADS + // Reset ADV7176 chip + PRINTD("\n[VIDEO ENCODER] Resetting encoder..."); + (*(int *)BCSR4) &= ~(1 << 21); + + // Wait for 5 ms inside the reset + PRINTD("\n[VIDEO ENCODER] Waiting for encoder reset..."); + udelay(5000); + + // Take ADV7176 out of reset + (*(int *)BCSR4) |= 1 << 21; + + // Wait for 5 ms after the reset + udelay(5000); +#endif + + // Send configuration + PRINTD("\n[VIDEO ENCODER] Configuring the encoder..."); +#if (VIDEO_DEBUG_STEP == 1) + printf("Sending %d bytes (%08x) to I2C 0x%x\n", + VIDEO_I2C_DATA_SIZE, VIDEO_I2C_DATA_ADDR, VIDEO_I2C_ADDR); +#endif + i2c_send(VIDEO_I2C_ADDR, 0, 1, VIDEO_I2C_DATA_SIZE, VIDEO_I2C_DATA_ADDR); +#endif + return ; +} + +static void video_ctrl_init (void *memptr) +{ + immap_t *immap = (immap_t *)CFG_IMMR; + + video_fb_address = memptr; + + // Set black background + PRINTD("\n[VIDEO CTRL] Setting background color..."); + immap->im_vid.vid_vbcb = VIDEO_BG_COL; + + // Show the background + PRINTD("\n[VIDEO CTRL] Forcing background..."); + SETBIT(immap->im_vid.vid_vcmr, VIDEO_VCMR_BD, 1); + + // Turn off video controller + PRINTD("\n[VIDEO CTRL] Turning off video controller..."); + SETBIT(immap->im_vid.vid_vccr, VIDEO_VCCR_VON, 0) ; + +#ifdef CONFIG_FADS + // Turn on Video Port LED + PRINTD("\n[VIDEO CTRL] Turning off video port led..."); + SETBIT(*(int *)BCSR4, VIDEO_BCSR4_VIDLED_BIT, 1); + + // Disable internal clock + PRINTD("\n[VIDEO CTRL] Disabling internal clock..."); + SETBIT(*(int *)BCSR4, VIDEO_BCSR4_EXTCLK_BIT, 0); +#endif + + // Generate and make active a new video mode + PRINTD("\n[VIDEO CTRL] Generating video mode..."); + video_mode_generate (); + + // Start of frame buffer (even and odd frame, to make it working with + // any selected active set) + PRINTD("\n[VIDEO CTRL] Setting frame address..."); + immap->im_vid.vid_vfaa1 = + immap->im_vid.vid_vfaa0 = (u32) video_fb_address ; + immap->im_vid.vid_vfba1 = + immap->im_vid.vid_vfba0 = (u32) video_fb_address + VIDEO_LINE_LEN ; + + // YUV, Big endian, SHIFT/CLK/CLK input (BEFORE ENABLING 27MHZ EXT CLOCK) + PRINTD("\n[VIDEO CTRL] Setting pixel mode and clocks..."); + immap->im_vid.vid_vccr = 0x2042; + + // Configure port pins + PRINTD("\n[VIDEO CTRL] Configuring input/ouput pins..."); + immap->im_ioport.iop_pdpar = 0x1fff; + immap->im_ioport.iop_pddir = 0x0000; + +#ifdef CONFIG_FADS + // Turn on Video Port Clock - ONLY AFTER SET VCCR TO ENABLE EXTERNAL CLOCK + PRINTD("\n[VIDEO CTRL] Turning on video clock..."); + SETBIT(*(int *)BCSR4, VIDEO_BCSR4_EXTCLK_BIT, 1); + + // Turn on Video Port LED + PRINTD("\n[VIDEO CTRL] Turning on video port led..."); + SETBIT(*(int *)BCSR4, VIDEO_BCSR4_VIDLED_BIT, 0); +#endif + + // Blanking the screen. + PRINTD("\n[VIDEO CTRL] Blanking the screen..."); + video_fill(VIDEO_BG_COL); + + // Turns on Aggressive Mode. Normally, turning on the caches will cause + // the screen to flicker when the caches try to fill. This gives the + // FIFO's for the Video Controller higher priority and prevents flickering + // because of underrun. This may still be an issue when using FLASH, since + // accessing data from Flash is so slow. + PRINTD("\n[VIDEO CTRL] Turning on aggressive mode..."); + immap->im_siu_conf.sc_sdcr = 0x40; + + // Turn on video controller + PRINTD("\n[VIDEO CTRL] Turning on video controller..."); + SETBIT(immap->im_vid.vid_vccr, VIDEO_VCCR_VON, 1) ; + + // Show the display + PRINTD("\n[VIDEO CTRL] Enabling the video..."); + SETBIT(immap->im_vid.vid_vcmr, VIDEO_VCMR_BD, 0); +} + +// *********************************************************************** +// ** CONSOLE FUNCTIONS +// *********************************************************************** + +static void console_scrollup(void) +{ + // Copy up rows ignoring the first one + memcpyl (CONSOLE_ROW_FIRST, CONSOLE_ROW_SECOND, CONSOLE_SCROLL_SIZE >> 2); + + // Clear the last one + memsetl (CONSOLE_ROW_LAST, CONSOLE_ROW_SIZE >> 2, VIDEO_BG_COL); +} + +static inline void console_back (void) +{ + console_col -- ; + + if (console_col < 0) + { + console_col = CONSOLE_COLS-1 ; + console_row -- ; + if (console_row < 0) + console_row = 0; + } + + video_putchar (console_col * VIDEO_FONT_WIDTH, console_row * VIDEO_FONT_HEIGHT, ' '); +} + +static inline void console_newline (void) +{ + console_row ++ ; + console_col = 0 ; + + // Check if we need to scroll the terminal + if (console_row >= CONSOLE_ROWS) + { + // Scroll everything up + console_scrollup () ; + + // Decrement row number + console_row -- ; + } +} + +void video_putc(const char c) +{ + if (!video_enable) + { + serial_putc(c); + return ; + } + + switch (c){ + case 13: // Simply ignore this + break; + + case '\n': // Next line, please + console_newline(); + break; + + case 8: // Eat last character + console_back(); + break; + + default: // Add to the console + video_putchar (console_col * VIDEO_FONT_WIDTH, + console_row * VIDEO_FONT_HEIGHT, c); + console_col++ ; + // Check if we need to go to next row + if (console_col >= CONSOLE_COLS) + console_newline(); + } +} + +void video_putstr (const char *s) +{ + int count = strlen(s); + + if (!video_enable) + while(count--) + serial_putc(*s++); + else + while(count--) + video_putc(*s++); +} + +void video_printf(const char *fmt, ...) +{ + extern int vsprintf(char *buf, const char *fmt, va_list args); + va_list args; + uint i; + char printbuffer[CFG_PBSIZE]; // damm, wd + + va_start(args, fmt); + + /* For this to work, printbuffer must be larger than + * anything we ever want to print. + */ + i = vsprintf(printbuffer, fmt, args); + va_end(args); + + if (!video_enable) + serial_putstr(printbuffer); + else + video_putstr(printbuffer); +} + +// *********************************************************************** +// ** CURSOR BLINKING FUNCTIONS +// *********************************************************************** + +#ifdef VIDEO_BLINK + +#define BLINK_TIMER_ID 0 +#define BLINK_TIMER_HZ 2 + +static unsigned char blink_enabled = 0; +static timer_t blink_timer ; + +static void blink_update (void) +{ + static int blink_row = -1, blink_col = -1, blink_old = 0; + +// Check if we have a new position to invert + if ((console_row != blink_row) || (console_col != blink_col)) + { + // Check if we need to reverse last character + if (blink_old) + video_revchar (blink_col * VIDEO_FONT_WIDTH, + (blink_row +#ifdef CONFIG_VIDEO_LOGO + + VIDEO_LOGO_HEIGHT +#endif + )* VIDEO_FONT_HEIGHT); + + // Update values + blink_row = console_row ; + blink_col = console_col ; + blink_old = 0 ; + } + +// Reverse this character + blink_old = !blink_old ; + video_revchar (console_col * VIDEO_FONT_WIDTH, (console_row +#ifdef CONFIG_VIDEO_LOGO + +VIDEO_LOGO_HEIGHT +#endif + ) * VIDEO_FONT_HEIGHT); + +} + +/* + * Handler for blinking cursor + */ +static void blink_handler (void *arg) +{ +// Blink + blink_update(); +// Ack the timer + timer_ack (&blink_timer); +} + +int blink_set (int blink) +{ + int ret = blink_enabled ; + + if (blink) + timer_enable (&blink_timer); + else + timer_disable (&blink_timer); + + blink_enabled = blink ; + + return ret ; +} + +static inline void blink_close (void) +{ + timer_close (&blink_timer); +} + +static inline void blink_init (void) +{ + timer_init (&blink_timer, BLINK_TIMER_ID, BLINK_TIMER_HZ, blink_handler); +} +#endif + +// *********************************************************************** +// ** LOGO PLOTTING FUNCTIONS +// *********************************************************************** + +#ifdef CONFIG_VIDEO_LOGO + +#ifdef VIDEO_MODE_YUYV +void easylogo_plot (fastimage_t *image, void *screen, int width, int x, int y) +{ + int skip = width - image->width, + xcount, + ycount = image->height; + + unsigned short + val, + *source = (unsigned short *) image->data, + *dest = (unsigned short *) screen + y * width + x; + +#ifdef ENABLE_ASCII_BANNERS + printf("Image size is W=%d H=%d - ",image->width, image->height); + printf("Dest is X=%d Y=%d at 0x%08x\n", + x, + y, + screen); +#endif + while (ycount--) + { + xcount = image->width ; + while (xcount--) + { +#if defined(powerpc) + val = *source; +#else + val = SWAPSHORT(*source); // Because of i386 inverts data! +#ifdef ENABLE_ASCII_BANNERS + if (val != 0x8010) + printf("X"); + else + printf(" "); +#endif +#endif + + *dest = val ; + + source++ ; + dest++ ; + } +#ifdef ENABLE_ASCII_BANNERS + printf("\n"); +#endif + dest += skip ; + } +} +#endif + +static void *video_logo (void) +{ + u16 *screen = video_fb_address, width = VIDEO_COLS ; + char info[80]; + + easylogo_plot (VIDEO_LOGO_ADDR, screen, width, 0, 0); + +#ifdef VIDEO_INFO + video_drawstring(VIDEO_INFO_X, VIDEO_INFO_Y, PPCBOOT_VERSION); +#ifdef CONFIG_FADS + sprintf(info, "MPC823 CPU at 50 Mhz on FADS823 board"); + video_drawstring(VIDEO_INFO_X, VIDEO_INFO_Y + VIDEO_FONT_HEIGHT, info); + + sprintf(info, "2Mb FLASH - 8Mb DRAM - 4Mb SRAM"); + video_drawstring(VIDEO_INFO_X, VIDEO_INFO_Y + VIDEO_FONT_HEIGHT*2, info); +#endif +#endif + + return video_fb_address + VIDEO_LOGO_HEIGHT * VIDEO_LINE_LEN ; +} +#endif + +// *********************************************************************** +// ** VIDEO HIGH-LEVEL FUNCTIONS +// *********************************************************************** + +int video_init(void *videobase) +{ + // Initialize the encoder + PRINTD("\n[VIDEO] Initializing video encoder..."); + video_encoder_init(); + + // Initialize the video controller +#if VIDEO_DEBUG_STEP == 1 + printf("\n[VIDEO] Initializing video controller at %08x...", (int)videobase); +#endif + video_ctrl_init(videobase); + + // Setting the palette + video_setpalette (CONSOLE_COLOR_BLACK , 0, 0, 0) ; + video_setpalette (CONSOLE_COLOR_WHITE , 0xff, 0xff, 0xff) ; + video_setpalette (CONSOLE_COLOR_GRAY , 0xaa, 0xaa, 0xaa) ; + video_setbgcolor (CONSOLE_COLOR_BLACK ) ; + video_setfgcolor (CONSOLE_COLOR_GRAY ) ; + +#ifdef CONFIG_VIDEO_LOGO + // Paint the logo and retrieve tv base address + PRINTD("\n[VIDEO] Drawing the logo..."); + video_console_address = video_logo(); +#else + video_console_address = video_fb_address; +#endif + +#ifdef VIDEO_BLINK + // Enable the blinking (under construction) + blink_init (); + blink_set (0); // To Fix! +#endif + + // Initialize the console + console_col = 0; + console_row = 0; + video_enable = 1 ; + + // Showing some information + printf("%s %dx%dx%d (%s) at %08x (%d bytes) - console %dx%d\n", +#ifdef VIDEO_MODE_PAL + "PAL", +#endif +#ifdef VIDEO_MODE_NTSC + "NTSC", +#endif + VIDEO_COLS, VIDEO_ROWS, VIDEO_MODE_BPP, +#ifdef VIDEO_MODE_YUYV + "YCbYCr", +#endif +#ifdef VIDEO_MODE_RGB + "RGB", +#endif + video_fb_address, + VIDEO_SIZE, + CONSOLE_COLS, + CONSOLE_ROWS + ); + return 0 ; +} + +#endif /* CONFIG_VIDEO */ diff --git a/mpc8xx/wl_4ppm_keyboard.c b/mpc8xx/wl_4ppm_keyboard.c new file mode 100644 index 0000000..fb2e81a --- /dev/null +++ b/mpc8xx/wl_4ppm_keyboard.c @@ -0,0 +1,21 @@ +/* +** Wireless 56Khz 4PPM keyboard interface on SMCx +** ============================================== +** (C) 2000 by Paolo Scaffardi (arsenio@tin.it) +** AIRVENT SAM s.p.a - RIMINI(ITALY) +** +** Not currently supported. Still under construction. +*/ +#include +#include +#include + +int wl_4ppm_keyboard_getc(void) +{ + return serial_getc(); +} + +int wl_4ppm_keyboard_tstc(void) +{ + return serial_tstc(); +} diff --git a/net/bootp.c b/net/bootp.c index eae6a5a..492ceb5 100644 --- a/net/bootp.c +++ b/net/bootp.c @@ -5,10 +5,13 @@ * (See License) */ -#include "ppcboot.h" -#include "net.h" -#include "bootp.h" -#include "tftp.h" +#include +#include +#include "net.h" +#include "bootp.h" +#include "tftp.h" + +#if (CONFIG_COMMANDS & CFG_CMD_NET) #define TIMEOUT 5 /* Seconds before trying BOOTP again */ @@ -126,3 +129,5 @@ BootpRequest(char *fileName, ulong loadAdr) NetSetTimeout(TIMEOUT * HZ, BootpTimeout); NetSetHandler(BootpHandler); } + +#endif /* CFG_CMD_NET */ diff --git a/net/net.c b/net/net.c index 4a73c83..8151b95 100644 --- a/net/net.c +++ b/net/net.c @@ -8,12 +8,14 @@ * 9/16/00 bor adapted to TQM823L/STK8xxL board, RARP/TFTP boot added */ -#include "ppcboot.h" -#include "net.h" -#include "bootp.h" -#include "tftp.h" -#include "rarp.h" +#include +#include +#include "net.h" +#include "bootp.h" +#include "tftp.h" +#include "rarp.h" +#if (CONFIG_COMMANDS & CFG_CMD_NET) uchar NetOurEther[6]; /* Our ethernet address */ uchar NetServerEther[6]; /* Boot server enet address */ @@ -498,3 +500,5 @@ GetTicksSinceBoot(void) return l; } + +#endif /* CFG_CMD_NET */ diff --git a/net/rarp.c b/net/rarp.c index a98f847..b4a01b8 100644 --- a/net/rarp.c +++ b/net/rarp.c @@ -21,12 +21,14 @@ * MA 02111-1307 USA */ +#include +#include +#include "net.h" +#include "bootp.h" +#include "rarp.h" +#include "tftp.h" -#include "ppcboot.h" -#include "net.h" -#include "bootp.h" -#include "rarp.h" -#include "tftp.h" +#if (CONFIG_COMMANDS & CFG_CMD_NET) #define TIMEOUT 5 /* Seconds before trying BOOTP again */ @@ -96,3 +98,5 @@ RarpRequest(char *fileName, ulong loadAdr) NetSetTimeout(TIMEOUT * HZ, RarpTimeout); NetSetHandler(RarpHandler); } + +#endif /* CFG_CMD_NET */ diff --git a/net/tftp.c b/net/tftp.c index 8b1d5d8..04572ee 100644 --- a/net/tftp.c +++ b/net/tftp.c @@ -5,11 +5,13 @@ * (See License) */ -#include "ppcboot.h" -#include "net.h" -#include "tftp.h" -#include "bootp.h" +#include +#include +#include "net.h" +#include "tftp.h" +#include "bootp.h" +#if (CONFIG_COMMANDS & CFG_CMD_NET) #define WELL_KNOWN_PORT 69 /* Well known TFTP port # */ #define TIMEOUT 2 /* Seconds to timeout for a lost pkt */ @@ -270,3 +272,5 @@ TftpStart(ulong loadAdr) TftpSend(); } + +#endif /* CFG_CMD_NET */ diff --git a/ppc4xx/405gp_pci.c b/ppc4xx/405gp_pci.c index 6353260..91e80b6 100644 --- a/ppc4xx/405gp_pci.c +++ b/ppc4xx/405gp_pci.c @@ -635,7 +635,7 @@ int PCI_Find_Device(unsigned short VendorID, unsigned short DeviceID) } -#ifdef CONFIG_PCIINFO +#if (CONFIG_COMMANDS & CFG_CMD_PCI) void do_pciinfo(cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]) @@ -851,6 +851,6 @@ pciBheaderPrint(PCI_HEADER_BRIDGE * pB) printf (" bridge control = 0x%.4x\n", (ushort)pB->control); } -#endif /* CONFIG_PCIINFO */ +#endif /* CONFIG_COMMANDS & CFG_CMD_PCI */ #endif /* CONFIG_PPC405GP */ diff --git a/ppc4xx/interrupts.c b/ppc4xx/interrupts.c index 70d421b..093209a 100644 --- a/ppc4xx/interrupts.c +++ b/ppc4xx/interrupts.c @@ -303,7 +303,7 @@ void set_timer (ulong t) /****************************************************************************/ -#ifdef CONFIG_IRQINFO +#if (CONFIG_COMMANDS & CFG_CMD_IRQ) /******************************************************************************* * @@ -328,4 +328,4 @@ do_irqinfo(cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]) } -#endif /* CONFIG_IRQINFO */ +#endif /* CONFIG_COMMANDS & CFG_CMD_IRQ */ diff --git a/spd8xx/spd8xx.c b/spd8xx/spd8xx.c index b526f73..ef1ef48 100644 --- a/spd8xx/spd8xx.c +++ b/spd8xx/spd8xx.c @@ -278,7 +278,7 @@ void reset_phy() immr->im_ioport.iop_padat &= ~(PA_ENET_MDC); /* set MDC = 0 */ /* - * RESET in implemented by a positive pule of at least 1 us + * RESET in implemented by a positive pulse of at least 1 us * at the reset pin. * * Configure RESET pins for NS DP83843 PHY, and RESET chip. diff --git a/tools/easylogo/Makefile b/tools/easylogo/Makefile new file mode 100644 index 0000000..292344a --- /dev/null +++ b/tools/easylogo/Makefile @@ -0,0 +1,2 @@ +all: easylogo.c + gcc easylogo.c -o easylogo diff --git a/tools/easylogo/easylogo.c b/tools/easylogo/easylogo.c new file mode 100644 index 0000000..8a961b8 --- /dev/null +++ b/tools/easylogo/easylogo.c @@ -0,0 +1,416 @@ +/* +** Easylogo TGA->header converter +** ============================== +** (C) 2000 by Paolo Scaffardi (arsenio@tin.it) +** AIRVENT SAM s.p.a - RIMINI(ITALY) +** +** This is still under construction! +*/ + +#include + +#pragma pack(1) + +//#define ENABLE_ASCII_BANNERS + +typedef struct { + unsigned char id; + unsigned char ColorMapType; + unsigned char ImageTypeCode; + unsigned short ColorMapOrigin; + unsigned short ColorMapLenght; + unsigned char ColorMapEntrySize; + unsigned short ImageXOrigin; + unsigned short ImageYOrigin; + unsigned short ImageWidth; + unsigned short ImageHeight; + unsigned char ImagePixelSize; + unsigned char ImageDescriptorByte; +} tga_header_t; + +typedef struct { + unsigned char r,g,b ; +} rgb_t ; + +typedef struct { + unsigned char b,g,r ; +} bgr_t ; + +typedef struct { + unsigned char v,y1,u,y2; +} yuyv_t ; + +typedef struct { + unsigned char *data, + *palette ; + int width, + height, + pixels, + bpp, + pixel_size, + size, + palette_size, + yuyv; +} image_t ; + +void StringUpperCase (char *str) +{ + int count = strlen(str); + char c ; + + while(count--) + { + c=*str; + if ((c >= 'a')&&(c<='z')) + *str = 'A' + (c-'a'); + str++ ; + } +} + +void StringLowerCase (char *str) +{ + int count = strlen(str); + char c ; + + while(count--) + { + c=*str; + if ((c >= 'A')&&(c<='Z')) + *str = 'a' + (c-'A'); + str++ ; + } +} +void pixel_rgb_to_yuyv (rgb_t *rgb_pixel, yuyv_t *yuyv_pixel) +{ + float R = rgb_pixel->r, + G = rgb_pixel->g, + B = rgb_pixel->b; + + yuyv_pixel->y1 = yuyv_pixel->y2 = 16 + ( 65.738 * R + 129.057 * G + 25.064 * B) / 256.0 ; + yuyv_pixel->u = 128 + ( -37.945 * R - 74.494 * G + 112.439 * B) / 256.0 ; + yuyv_pixel->v = 128 + ( 112.439 * R - 94.154 * G - 18.285 * B) / 256.0 ; + + return ; +} + +void printlogo_rgb (rgb_t *data, int w, int h) +{ + int x,y; + for (y=0; yr == 0)&&(data->g == 0)&&(data->b == 0)) + printf(" "); + else + printf("X"); + printf("\n"); + } +} + +void printlogo_yuyv (unsigned short *data, int w, int h) +{ + int x,y; + for (y=0; ywidth = header.ImageWidth ; + image->height = header.ImageHeight ; + + switch (header.ImageTypeCode){ + case 2: // Uncompressed RGB + image->yuyv = 0 ; + image->palette_size = 0 ; + image->palette = NULL ; + break; + + default: + printf("Format not supported!\n"); + return -1 ; + } + + image->bpp = header.ImagePixelSize ; + image->pixel_size = ((image->bpp-1) / 8) + 1 ; + image->pixels = image->width * image->height; + image->size = image->pixels * image->pixel_size ; + image->data = malloc(image->size) ; + + if (image->bpp != 24) + { + printf("Bpp not supported: %d!\n", image->bpp); + return -1 ; + } + + fread(image->data, image->size, 1, file); + +// Swapping R and B values + + p = image->data ; + for(i=0; i < image->pixels; i++, p++) + { + app = p->r ; + p->r = p->b ; + p->b = app ; + } + +// Swapping image + + if(!(header.ImageDescriptorByte & 0x20)) + { + unsigned char *temp = malloc(image->size); + int linesize = image->pixel_size * image->width ; + void *dest = image->data, + *source = temp + image->size - linesize ; + + printf("S"); + if (temp == NULL) + { + printf("Cannot alloc temp buffer!\n"); + return -1; + } + + memcpy(temp, image->data, image->size); + for(i = 0; iheight; i++, dest+=linesize, source-=linesize) + memcpy(dest, source, linesize); + + free( temp ); + } + +#ifdef ENABLE_ASCII_BANNERS + printlogo_rgb (image->data,image->width, image->height); +#endif + + fclose (file); + return 0; +} + +int image_free (image_t *image) +{ + if(image->data != NULL) + free(image->data); + + if(image->palette != NULL) + free(image->palette); + + return 0; +} + +int image_rgb_to_yuyv (image_t *rgb_image, image_t *yuyv_image) +{ + rgb_t *rgb_ptr = (rgb_t *) rgb_image->data ; + yuyv_t yuyv ; + unsigned short *dest ; + int count = rgb_image->pixels; + + yuyv_image->pixel_size = 2 ; + yuyv_image->bpp = 16 ; + yuyv_image->yuyv = 1 ; + yuyv_image->width = rgb_image->width ; + yuyv_image->height = rgb_image->height ; + yuyv_image->pixels = yuyv_image->width * yuyv_image->height ; + yuyv_image->size = yuyv_image->pixels * yuyv_image->pixel_size ; + dest = (unsigned short *) (yuyv_image->data = malloc(yuyv_image->size)) ; + yuyv_image->palette = 0 ; + yuyv_image->palette_size= 0 ; + + while(count--) + { + pixel_rgb_to_yuyv (rgb_ptr++, &yuyv); + + // Use first pixel only (V and Y1) + memcpy (dest, (void *)&yuyv + 2, sizeof(short)); + + dest ++ ; + } + +#ifdef ENABLE_ASCII_BANNERS + printlogo_yuyv (yuyv_image->data, yuyv_image->width, yuyv_image->height); +#endif + return 0 ; +} + +int image_save_header (image_t *image, char *filename, char *varname) +{ + FILE *file = fopen (filename, "w"); + char app[256], str[256]="", def_name[64] ; + int count = image->size, col=0; + unsigned char *dataptr = image->data ; + if (file==NULL) + return -1 ; + +// Author informations + fprintf(file, "//\n// Generated by EasyLogo, (C) 2000 by Paolo Scaffardi\n//\n"); + fprintf(file, "// To use this, include it and call: easylogo_plot(screen,&%s, width,x,y)\n//\n", varname); + fprintf(file, "// Where:\t'screen'\tis the pointer to the frame buffer\n"); + fprintf(file, "// \t\t'width'\tis the screen width\n"); + fprintf(file, "// \t\t'x'\t\tis the horizontal position\n"); + fprintf(file, "// \t\t'y'\t\tis the vertical position\n//\n\n"); + +// Headers + fprintf(file, "#include \n\n"); +// Macros + strcpy(def_name, varname); + StringUpperCase (def_name); + fprintf(file, "#define DEF_%s_WIDTH\t\t%d\n", def_name, image->width); + fprintf(file, "#define DEF_%s_HEIGHT\t\t%d\n", def_name, image->height); + fprintf(file, "#define DEF_%s_PIXELS\t\t%d\n", def_name, image->pixels); + fprintf(file, "#define DEF_%s_BPP\t\t%d\n", def_name, image->bpp); + fprintf(file, "#define DEF_%s_PIXEL_SIZE\t%d\n", def_name, image->pixel_size); + fprintf(file, "#define DEF_%s_SIZE\t\t%d\n\n", def_name, image->size); +// Declaration + fprintf(file, "unsigned char DEF_%s_DATA[DEF_%s_SIZE] = {\n", def_name, def_name); + +// Data + while(count) + switch (col){ + case 0: + sprintf(str, " 0x%02x", *dataptr++); + col++; + count-- ; + break; + + case 16: + fprintf(file, "%s", str); + if (count > 0) + fprintf(file,","); + fprintf(file, "\n"); + + col = 0 ; + break; + + default: + strcpy(app, str); + sprintf(str, "%s, 0x%02x", app, *dataptr++); + col++ ; + count-- ; + break; + } + + if (col) + fprintf(file, "%s\n", str); + +// End of declaration + fprintf(file, "};\n\n"); +// Variable + fprintf(file, "fastimage_t %s = {\n", varname); + fprintf(file, " DEF_%s_DATA,\n", def_name); + fprintf(file, " DEF_%s_WIDTH,\n", def_name); + fprintf(file, " DEF_%s_HEIGHT,\n", def_name); + fprintf(file, " DEF_%s_BPP,\n", def_name); + fprintf(file, " DEF_%s_PIXEL_SIZE,\n", def_name); + fprintf(file, " DEF_%s_SIZE\n};\n", def_name); + + fclose (file); + + return 0 ; +} + +#define DEF_FILELEN 256 + +int main (int argc, char *argv[]) +{ + char + inputfile[DEF_FILELEN], + outputfile[DEF_FILELEN], + varname[DEF_FILELEN]; + + image_t rgb_logo, yuyv_logo ; + + switch (argc){ + case 2: + case 3: + case 4: + strcpy (inputfile, argv[1]); + + if (argc > 2) + strcpy (varname, argv[2]); + else + { + int pos = strchr(inputfile, '.'); + + if (pos >= 0) + { + strncpy (varname, inputfile, pos); + varname[pos] = 0 ; + } + } + + if (argc > 3) + strcpy (outputfile, argv[3]); + else + { + int pos = strchr (varname, '.'); + + if (pos > 0) + { + char app[DEF_FILELEN] ; + + strncpy(app, varname, pos); + sprintf(outputfile, "%s.h", app); + } + } + break; + + default: + printf("EasyLogo 1.0 (C) 2000 by Paolo Scaffardi\n\n"); + + printf("Syntax: easylogo inputfile [outputvar {outputfile}] \n"); + printf("\n"); + printf("Where: 'inputfile' is the TGA image to load\n"); + printf(" 'outputvar' is the variable name to create\n"); + printf(" 'outputfile' is the output header file (default is 'inputfile.h')\n"); + + return -1 ; + } + + printf("Doing '%s' (%s) from '%s'...", + outputfile, varname, inputfile); + +// Import TGA logo + + printf("L"); + if (image_load_tga (&rgb_logo, inputfile)<0) + { + printf("input file not found!\n"); + exit(1); + } + +// Convert it to YUYV format + + printf("C"); + image_rgb_to_yuyv (&rgb_logo, &yuyv_logo) ; + +// Save it into a header format + + printf("S"); + image_save_header (&yuyv_logo, outputfile, varname) ; + +// Free original image and copy + + image_free (&rgb_logo); + image_free (&yuyv_logo); + + printf("\n"); + + return 0 ; +} diff --git a/tools/easylogo/linux_logo.tga b/tools/easylogo/linux_logo.tga new file mode 100644 index 0000000..ac53def Binary files /dev/null and b/tools/easylogo/linux_logo.tga differ diff --git a/tools/easylogo/runme.sh b/tools/easylogo/runme.sh new file mode 100755 index 0000000..3c773e1 --- /dev/null +++ b/tools/easylogo/runme.sh @@ -0,0 +1,3 @@ +#!/bin/sh +./easylogo linux_logo.tga ppcboot_logo video_logo.h +mv video_logo.h ../../include