]> www.infradead.org Git - users/rw/ppcboot.git/commitdiff
* Replaced `serial_io' and `intr_util' structs in bd_info by generic
authorwdenk <wdenk>
Sat, 14 Oct 2000 23:05:33 +0000 (23:05 +0000)
committerwdenk <wdenk>
Sat, 14 Oct 2000 23:05:33 +0000 (23:05 +0000)
  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.

63 files changed:
CHANGELOG
CREDITS
Makefile
common/Makefile
common/board.c
common/cmd_boot.c
common/cmd_bootm.c
common/cmd_ide.c [new file with mode: 0644]
common/command.c
common/main.c
etx094/ppcboot.lds
examples/hello_world.c
examples/timer.c
fads/fads.c
include/ata.h [new file with mode: 0644]
include/cmd_bootm.h
include/cmd_ide.h [new file with mode: 0644]
include/cmd_misc.h
include/cmd_pcmcia.h [new file with mode: 0644]
include/command.h
include/commproc.h
include/config_ADCIOP.h
include/config_CPCI405.h
include/config_ETX094.h
include/config_FADS823.h [new file with mode: 0644]
include/config_FADS850SAR.h
include/config_FADS860T.h
include/config_SPD823TS.h
include/config_TQM823L.h
include/config_TQM850L.h
include/config_TQM855L.h
include/config_TQM860L.h
include/config_cogent_mpc8xx.h
include/console.h [new file with mode: 0644]
include/i2c.h [new file with mode: 0644]
include/ide.h [new file with mode: 0644]
include/mpc8xx.h
include/ppcboot.h
include/version.h
include/video.h [new file with mode: 0644]
include/video_ad7176.h [new file with mode: 0644]
include/video_easylogo.h [new file with mode: 0644]
include/video_font.h [new file with mode: 0644]
include/video_logo.h [new file with mode: 0644]
include/wl_4ppm_keyboard.h [new file with mode: 0644]
mpc8xx/Makefile
mpc8xx/i2c.c [new file with mode: 0644]
mpc8xx/interrupts.c
mpc8xx/serial.c
mpc8xx/start.S
mpc8xx/video.c [new file with mode: 0644]
mpc8xx/wl_4ppm_keyboard.c [new file with mode: 0644]
net/bootp.c
net/net.c
net/rarp.c
net/tftp.c
ppc4xx/405gp_pci.c
ppc4xx/interrupts.c
spd8xx/spd8xx.c
tools/easylogo/Makefile [new file with mode: 0644]
tools/easylogo/easylogo.c [new file with mode: 0644]
tools/easylogo/linux_logo.tga [new file with mode: 0644]
tools/easylogo/runme.sh [new file with mode: 0755]

index e719afa120a01f209bb9cfe390338ee4b6052635..93fb0ea6a437a3fc20af3131c1281b8b9875d410 100644 (file)
--- 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 8acd301f6c1ffbd429c84896eea7bdb2fedda172..978f007ffe331669a2d2a82aa65a7f1e06681aa9 100644 (file)
--- 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
index 93d9378d33f1969cce5e351299663c27ef56f873..04c8b3856d8665cd0c990bd50fec1ddd506ef2cf 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -126,6 +126,7 @@ SPD823TS_config:    unconfig
        echo "CPU   = mpc8xx"   >>config.mk ;   \
        echo "#include <config_$(@:_config=).h>" >config.h
 
+FADS823_config \
 FADS850SAR_config \
 FADS860T_config:       unconfig
        @echo "Configuring for $(@:_config=) Board..." ; \
index 2996c30ffef65801ef2870d6c66761f3f05ddb0a..6ed8e82d611533c69a76f4ef97c5fdb11b0ff285 100644 (file)
@@ -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)
 
index f09a373976a11d20fc407115a4f11e754e3e3720..7019951b0a6c30f0820ff1edc1529b6a708d9f41 100644 (file)
 
 #include <ppcboot.h>
 #include <command.h>
+#include <malloc.h>
+#if (CONFIG_COMMANDS & CFG_CMD_IDE)
+#include <ide.h>
+#endif
 #if (CONFIG_COMMANDS & CFG_CMD_KGDB)
 #include <kgdb.h>
 #endif
+#ifdef CONFIG_VIDEO
+#include <video.h>
+#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);
index 854aeff080d5dab9463cd548db6b24c99f066403..969e518f7f539d7dd6c6bd41361789d1c4f9dc7b 100644 (file)
@@ -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 */
 
index 9054ff30a345926b4cce88ac24c06b2ae8b2c088..475874aa9b38319bde3d6dd537f547db47247f29 100644 (file)
@@ -31,7 +31,8 @@
 #include <malloc.h>
 #include <zlib.h>
 
-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 (file)
index 0000000..1b0f04d
--- /dev/null
@@ -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 <mpc8xx_irq.h>
+#include <ppcboot.h>
+#include <command.h>
+#include <ide.h>
+#include <ata.h>
+#include <cmd_ide.h>
+#include <mpc8xx.h>
+
+#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; i<IDE_MAXDEVICE; ++i) {
+                       printf ("IDE device %d: ", i);
+                       ide_print (i);
+               }
+               return;
+
+       } else if (strcmp(argv[1],"device") == 0) {
+               printf ("\nIDE device %d: ", curr_device);
+               ide_print (curr_device);
+               return;
+       }
+       printf ("Usage:\n%s\n", cmdtp->usage);
+       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<IDE_MAXDEVICE; ++i) {
+               ide_ident (i);
+               ide_print (i);
+
+               /* make first available device current */
+               if ((ide_device[i].size > 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 */
index 289a5d4ae74b6f49bde89130f910bcac0181939c..2c494dbc2674416f848c6d88a6cdad63c2ba7db4 100644 (file)
@@ -36,6 +36,7 @@
 #include <cmd_nvedit.h>
 #include <cmd_misc.h>
 #include <cmd_kgdb.h>
+#include <cmd_ide.h>
 
 /*
  * 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
index 950a17134f58b5c7105d459d122982833a0eb348..2781c450d0a07e5ee5aea33b54cc46cd7dbdb9d4 100644 (file)
 #include <ppcboot.h>
 #include <command.h>
 
-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 ("<INTERRUPT>\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<sep; ) {
+                       *t++ = *str++;
+                       if (t >= 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]);
 }
+/*---------------------------------------------------------------*/
 
 /****************************************************************************/
 
index fd6a019947231c064a13345d47aa492fb2fe6a3d..045ecacc1cea8d78605592622e4d97506bf1036a 100644 (file)
@@ -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;
index 4d423b232d2284b909f036ac612b9f7e49143e5d..b6bcdd8bfe21c0a851763fbf63a471190a2ec771 100644 (file)
 #include <ppcboot.h>
 
 #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[])
 {
index fa15f8b5e8dfecf8cc9ce9cb6c7856f815229392..cd74d478c918639ad10a3fd1657ac6ebb4bf1324 100644 (file)
@@ -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);
 
index d20e9104e0027e22595d6793f345ee9341a31a41..ba6f35b0af44a97de07fe4b28e245fb77f800b7e 100644 (file)
@@ -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 (file)
index 0000000..37e3fca
--- /dev/null
@@ -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 */
index cf681bb5577386b9f2bdd09ea193430191deb63e..6c39013fac60d5bc17cf978434fdfa9a8a488e46 100644 (file)
@@ -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 (file)
index 0000000..57ef921
--- /dev/null
@@ -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 <ppcboot.h>
+#include <command.h>
+
+#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 */
index fd337fc02fd3ea7a8591aae0162899b06e4d9bd3..0c2c87f5dc61c0775339bc0c566205702f01c3ed 100644 (file)
@@ -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 (file)
index 0000000..f25c65e
--- /dev/null
@@ -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 */
+
index 521b4efb670a6f144dcf2864003213b719a4c21d..d2f28d32d16b048a6ea30f9a65e0e6a760daded3 100644 (file)
@@ -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
index da6404ad397816660daf2c5a4159a5cc717ef345..4a0cd66f1d6a2ead5fd34b659b78118ff981cde8 100644 (file)
@@ -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)
index 31b3f96365c099dea972f609789b100bcf46490f..3bf5c8289d515daf239cca48c9b325f1bf8e9ca1 100644 (file)
@@ -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                  /* 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     */
index 0793d8f5c5eeddfb89a4621c8c487bffd6eb35c1..15ccf6e8b43eba369137117cc86f24243e072ec5 100644 (file)
 #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                  /* 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     */
index 07c4c2b2fe7d40185fca6f9f0aff6c48db4ed835..9e19b970a5b56c8b54b63bb1658aa39e56544bf2 100644 (file)
@@ -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                   /* 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 (file)
index 0000000..434fc97
--- /dev/null
@@ -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 <mpc8xx_irq.h>
+
+#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 */
index 6c5dcb606906c1dad19ab981bc35a7e1e457281c..dce1a72b620df74909cd6820ba011f39064c703b 100644 (file)
@@ -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                           /* 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     */
index 7a3d68518b4b16aa228d3db072791a4d4a32fc65..3d11571c78757c6968da62643d0bc71fe520c5d1 100644 (file)
@@ -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                   /* 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     */
index 08e4dec374acf94f48b46343a2c74a4cb3447aff..2480577e04384a65a7bcab4f7aae188d4620a3a4 100644 (file)
@@ -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                   /* 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     */
 #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()  */
 
index b18caf236ab28a45136a096ea70a4592628c0ce9..a754c46e5f1af73e9d1c4d8542def2d546a26d3a 100644 (file)
@@ -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                   /* 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     */
index 39b950585cff54cfb29adbd2dde5bcb9a82285f0..4ecf3471884c813d155be16eda675bbd165ce3c5 100644 (file)
@@ -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                   /* 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     */
index 2077188eadbfd15ee0f9919782420b7f88965006..df0fa12ea78167aa8ee57ec488a22473e3f6fa8d 100644 (file)
@@ -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                   /* 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     */
index 7acc60cb1edebddb824d98025eb6207fdc61fc74..ea82bf105ff96caea6454dbd22cb679fa2f33f97 100644 (file)
@@ -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                   /* 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     */
index 4e0bab49d3f28927d89569098eeca0d5ce6dd65a..74f8bdfdfcb9f91428f29d8961ac82fab7f315aa 100644 (file)
 #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                   /* 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 (file)
index 0000000..2a476a8
--- /dev/null
@@ -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 (file)
index 0000000..8e4010e
--- /dev/null
@@ -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 (file)
index 0000000..b94a740
--- /dev/null
@@ -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 */
index e7d0f652ae48f8562a66a3f83d023c85f88243e6..36dc2446ebac35f9445fc4a8d6ae4c396105ebcd 100644 (file)
 #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
index c972f81355059a6da79cfe9a2964484c5dfd4076..7fab83928d11340eabac6fea42e4a1d17dc50d43 100644 (file)
@@ -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
index aa90ed702b1f355a10556b400e6510132ebcfa85..64267ba0a73e7c336e248841af25651aa6c202ca 100644 (file)
@@ -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 (file)
index 0000000..79516c4
--- /dev/null
@@ -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 (file)
index 0000000..830e090
--- /dev/null
@@ -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 (file)
index 0000000..2fe2364
--- /dev/null
@@ -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 (file)
index 0000000..a0ede01
--- /dev/null
@@ -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 '\7f' */
+       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 '\80' */
+       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 '\81' */
+       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 '\82' */
+       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 '\83' */
+       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 '\84' */
+       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 '\85' */
+       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 '\86' */
+       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 '\87' */
+       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 '\88' */
+       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 '\89' */
+       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 '\8a' */
+       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 '\8b' */
+       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 '\8c' */
+       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 '\8d' */
+       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 '\8e' */
+       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 '\8f' */
+       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 '\90' */
+       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 '\91' */
+       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 '\92' */
+       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 '\93' */
+       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 '\94' */
+       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 '\95' */
+       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 '\96' */
+       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 '\97' */
+       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 '\98' */
+       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 '\99' */
+       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 '\9a' */
+       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 '\9b' */
+       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 '\9c' */
+       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 '\9d' */
+       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 '\9e' */
+       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 '\9f' */
+       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 (file)
index 0000000..802e854
--- /dev/null
@@ -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 <video_easylogo.h>
+
+#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 (file)
index 0000000..5a15616
--- /dev/null
@@ -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
index cf13d781ff5916b98bdb77c2269dbafa4f82f6b8..c9b965d99c40f7b2d8d54372f4500fab3c1addbf 100644 (file)
@@ -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 (file)
index 0000000..2aa387d
--- /dev/null
@@ -0,0 +1,370 @@
+/*
+** I2C interface
+** =============
+** (C) 2000 by Paolo Scaffardi (arsenio@tin.it)
+** AIRVENT SAM s.p.a - RIMINI(ITALY)
+**
+*/
+
+#include <ppcboot.h>
+#include <commproc.h>
+#include <i2c.h>
+
+#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 */
index 5a27489e4ce40e88e9f7768eba77a4aaaee515f3..b00361a961deda052afadd29a9001e6917d0da3c 100644 (file)
@@ -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
index d157b1d9ad3a923b61b4aaddf6f1288e3623c6ff..8a080e8828ef124bc8cc9e80fd9245134ddac5c2 100644 (file)
@@ -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
index 0a483282b1c45cecd9152be15f983408fcd9d907..d0464fc396b2c3bf99fcab420be669a4cabb0aa0 100644 (file)
@@ -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 (file)
index 0000000..5ccd567
--- /dev/null
@@ -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 <stdarg.h>
+#include <ppcboot.h>
+#include <config.h>
+#include <version.h>
+#include <i2c.h>
+#include <video.h>
+#include <linux/types.h>
+
+#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 <video_ad7176.h>      // 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 <video_font.h>                // Get font data, width and height
+
+#ifdef CONFIG_VIDEO_LOGO
+#include <video_logo.h>                // 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; i<entries; i++)
+    {
+       dest[i] = source[i] ;           // Copy the entire record
+       dest[i].fx = (!dest[i].fx)*3 ;  // Negate field bit
+    }
+
+    dest[0].lcyc++ ;           // Add a cycle to the first entry
+    dest[entries-1].lst = 1 ;  // Set end of ram entries
+}
+
+static void video_mode_addentry(VRAM *vr,
+                   int Hx,
+                   int Vx,
+                   int Fx,
+                   int Bx,
+                   int VDS,
+                   int INT,
+                   int LCYC,
+                   int LP,
+                   int LST)
+{
+    vr->hx     = 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, \rVIDEO_I2C_DATA_SIZE, VIDEO_I2C_DATA_ADDR);\r
+#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)\r
+{
+// 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 (file)
index 0000000..fb2e81a
--- /dev/null
@@ -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 <ppcboot.h>
+#include <config.h>
+#include <wl_4ppm_keyboard.h>
+
+int    wl_4ppm_keyboard_getc(void)
+{
+    return serial_getc();
+}
+
+int    wl_4ppm_keyboard_tstc(void)
+{
+    return serial_tstc();
+}
index eae6a5ac1c9242dfb125945f3e2c7712f6b49224..492ceb5a954a1b92ddab2d453ce3f053d3fc9c1e 100644 (file)
@@ -5,10 +5,13 @@
  *     (See License)
  */
 
-#include       "ppcboot.h"
-#include       "net.h"
-#include       "bootp.h"
-#include       "tftp.h"
+#include <ppcboot.h>
+#include <command.h>
+#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 */
index 4a73c8304f0678cd47c41a627beb2a115a55a2d2..8151b95b4e68b4f463e8a229093646fd0464a66c 100644 (file)
--- 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 <ppcboot.h>
+#include <command.h>
+#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 */
index a98f8478f7d91a8d4ab6c35b6bd812b70b3d9a24..b4a01b887616b7a8ed929f72c3882f27677be79a 100644 (file)
  * MA 02111-1307 USA
  */
 
+#include <ppcboot.h>
+#include <command.h>
+#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 */
index 8b1d5d8853b9c82ff007a360d222501dd45a368d..04572eeff824aec4dfa1a5ccffebb97efadefd98 100644 (file)
@@ -5,11 +5,13 @@
  *     (See License)
  */
 
-#include       "ppcboot.h"
-#include       "net.h"
-#include       "tftp.h"
-#include       "bootp.h"
+#include <ppcboot.h>
+#include <command.h>
+#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 */
index 635326069f956f2393d1f5b1663a4040f42fe72c..91e80b6baf5a442ba43327a59261e002494f36fa 100644 (file)
@@ -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 */
index 70d421b98cdd3c81c77094674d4ff108e16c35ba..093209aa921da72001170e1356f06fc826ec4f09 100644 (file)
@@ -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 */
index b526f7378bd0766d14f3b936ce69e90b4c8bd488..ef1ef48be712889bb1df59856c26f196183082c3 100644 (file)
@@ -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 (file)
index 0000000..292344a
--- /dev/null
@@ -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 (file)
index 0000000..8a961b8
--- /dev/null
@@ -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 <stdio.h>
+
+#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; y<h; y++)
+    {
+       for (x=0; x<w; x++, data++)
+           if ((data->r == 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; y<h; y++)
+    {
+       for (x=0; x<w; x++, data++)
+           if (*data == 0x1080)    // Because of inverted on i386!
+               printf(" ");
+           else
+               printf("X");
+        printf("\n");
+    }
+}
+
+int image_load_tga (image_t *image, char *filename)
+{
+    FILE *file ;
+    tga_header_t header ;
+    int i;
+    unsigned char app ;
+    rgb_t *p ;
+
+    if( ( file = fopen( filename, "rb" ) ) == NULL )
+       return -1;
+
+    fread(&header, sizeof(header), 1, file);
+
+    image->width       = 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; i<image->height; 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 <video_easylogo.h>\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 (file)
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 (executable)
index 0000000..3c773e1
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/sh
+./easylogo linux_logo.tga ppcboot_logo video_logo.h
+mv video_logo.h ../../include