]> www.infradead.org Git - users/rw/ppcboot.git/commitdiff
Add VFD support for TRAB
authorwdenk <wdenk>
Sat, 19 Oct 2002 23:30:53 +0000 (23:30 +0000)
committerwdenk <wdenk>
Sat, 19 Oct 2002 23:30:53 +0000 (23:30 +0000)
17 files changed:
CHANGELOG
board/trab/Makefile
board/trab/trab.c
board/trab/vfd.c [new file with mode: 0644]
common/Makefile
common/cmd_vfd.c [new file with mode: 0644]
common/command.c
include/asm-arm/global_data.h
include/cmd_bsp.h
include/cmd_confdefs.h
include/cmd_vfd.h [new file with mode: 0644]
include/common.h
include/configs/RRvision.h
include/configs/trab.h
include/devices.h
include/vfd_logo.h [new file with mode: 0644]
lib_arm/board.c

index 75f364e5c5cc6a62e694c5afbbf2c0abf57b0327..5f0581f861f52310f10dcdb12fc1cb5550759f5f 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,8 @@
 Modifications since 1.2.0:
 ======================================================================
 
+* Add VFD support for TRAB
+
 * Add support for RedRock Vision V1.0 Board
 
 * Fix password protection on ARM;
index 8dbd90ebfad1d8bc4fe54d2d853a3c0ff11c4792..bb6930dc2403125bb9bdb0dc98d971193bfae542 100644 (file)
@@ -25,7 +25,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = lib$(BOARD).a
 
-OBJS   := trab.o flash.o
+OBJS   := trab.o flash.o vfd.o
 SOBJS  := memsetup.o
 
 $(LIB):        $(OBJS) $(SOBJS)
index 58bc0a0f3c323a5ab15e611ea0563ed52d46e545..855be84b934d5fd43ad4182b3580555ad97653a9 100644 (file)
  * MA 02111-1307 USA
  */
 
+#define DEBUG
+
 #include <common.h>
+#include <cmd_bsp.h>
+#include <malloc.h>
 #include <s3c2400.h>
 
 /* ------------------------------------------------------------------------- */
 
+#ifdef CONFIG_MODEM_SUPPORT
+static int key_pressed(void);
+extern void disable_putc(void);
+extern int do_mdm_init; /* defined in common/main.c */
+#endif /* CONFIG_MODEM_SUPPORT */
+
 
 /*
  * Miscellaneous platform dependent initialisations
@@ -55,8 +65,13 @@ int board_init ()
        /* INPUT nCTS0 nRTS0 TXD[1] TXD[0] RXD[1] RXD[0]        */
        /*  00,    10,      10,      10,      10,      10,      10      */
        rPFCON = (2<<0) | (2<<2) | (2<<4) | (2<<6) | (2<<8) | (2<<10);
+#ifdef CONFIG_HWFLOW
        /* do not pull up RXD0, RXD1, TXD0, TXD1 */
        rPFUP  = (1<<0) | (1<<1) | (1<<2) | (1<<3);
+#else
+       /* do not pull up RXD0, RXD1, TXD0, TXD1, CTS0, RTS0 */
+       rPFUP  = (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5);
+#endif
        rPGCON = 0x0;
        rPGUP  = 0x0;
        rOPENCR= 0x0;
@@ -69,6 +84,13 @@ int board_init ()
        /* adress of boot parameters */
        gd->bd->bi_boot_params = 0x0c000100;
 
+#ifdef CONFIG_MODEM_SUPPORT
+       if (key_pressed()) {
+               disable_putc(); /* modem doesn't understand banner etc */
+               do_mdm_init = 1;
+       }
+#endif /* CONFIG_MODEM_SUPPORT */
+
        return 0;
 }
 
@@ -80,3 +102,163 @@ int dram_init (void)
        gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
        return 0;
 }
+
+/*-----------------------------------------------------------------------
+ * Keyboard Controller
+ */
+
+/* Maximum key number */
+#define KEYBD_KEY_NUM          4
+
+#define KBD_DATA       (((*(volatile ulong *)0x04020000) >> 16) & 0xF)
+
+static uchar *key_match (ulong);
+
+int misc_init_r (void)
+{
+       ulong kbd_data = KBD_DATA;
+       uchar keybd_env[KEYBD_KEY_NUM + 1];
+       uchar *str;
+       int i;
+       
+       for (i = 0; i < KEYBD_KEY_NUM; ++i) {
+               keybd_env[i] = '0' + ((kbd_data >> i) & 1);
+       }
+       keybd_env[i] = '\0';
+       debug ("** Setting keybd=\"%s\"\n", keybd_env);
+       setenv ("keybd", keybd_env);
+
+       str = strdup (key_match (kbd_data));    /* decode keys */
+
+#ifdef CONFIG_PREBOOT  /* automatically configure "preboot" command on key match */
+       debug ("** Setting preboot=\"%s\"\n", str);
+       setenv ("preboot", str);        /* set or delete definition */
+#endif /* CONFIG_PREBOOT */
+       if (str != NULL) {
+               free (str);
+       }
+
+       return (0);
+}
+
+#ifdef CONFIG_PREBOOT
+
+static uchar kbd_magic_prefix[] = "key_magic";
+static uchar kbd_command_prefix[] = "key_cmd";
+
+static int compare_magic (ulong kbd_data, uchar *str)
+{
+       uchar key_mask;
+
+       debug ("compare_magic: kbd: %04lx  str: \"%s\"\n",kbd_data,str);
+       for (; *str; str++)
+       {
+               uchar c = *str - '1';
+
+               if (c >= KEYBD_KEY_NUM)         /* bad key number */
+                       return -1;
+
+               key_mask = 1 << c;
+
+               if (!(kbd_data & key_mask)) {   /* key not pressed */
+                       debug ( "compare_magic: "
+                               "kbd: %04lx mask: %04lx - key not pressed\n",
+                               kbd_data, key_mask );
+                       return -1;
+               }
+
+               kbd_data &= ~key_mask;
+       }
+
+       if (kbd_data) {                         /* key(s) not released */
+               debug ( "compare_magic: "
+                       "kbd: %04lx - key(s) not released\n", kbd_data);
+               return -1;
+       }
+       
+       return 0;
+}
+
+/*-----------------------------------------------------------------------
+ * Check if pressed key(s) match magic sequence,
+ * and return the command string associated with that key(s).
+ *
+ * If no key press was decoded, NULL is returned.
+ *
+ * Note: the first character of the argument will be overwritten with
+ * the "magic charcter code" of the decoded key(s), or '\0'.
+ *
+ *
+ * Note: the string points to static environment data and must be
+ * saved before you call any function that modifies the environment.
+ */
+static uchar *key_match (ulong kbd_data)
+{
+       uchar magic[sizeof (kbd_magic_prefix) + 1];
+       uchar cmd_name[sizeof (kbd_command_prefix) + 1];
+       uchar *suffix;
+       uchar *kbd_magic_keys;
+
+       /*
+        * The following string defines the characters that can pe appended
+        * to "key_magic" to form the names of environment variables that
+        * hold "magic" key codes, i. e. such key codes that can cause
+        * pre-boot actions. If the string is empty (""), then only
+        * "key_magic" is checked (old behaviour); the string "125" causes
+        * checks for "key_magic1", "key_magic2" and "key_magic5", etc.
+        */
+       if ((kbd_magic_keys = getenv ("magic_keys")) == NULL)
+               kbd_magic_keys = "";
+
+       debug ("key_match: magic_keys=\"%s\"\n", kbd_magic_keys);
+
+       /* loop over all magic keys;
+        * use '\0' suffix in case of empty string
+        */
+       for (suffix=kbd_magic_keys; *suffix || suffix==kbd_magic_keys; ++suffix)
+       {
+               sprintf (magic, "%s%c", kbd_magic_prefix, *suffix);
+
+               debug ("key_match: magic=\"%s\"\n",
+                       getenv(magic) ? getenv(magic) : "<UNDEFINED>");
+
+               if (compare_magic(kbd_data, getenv(magic)) == 0)
+               {
+                       sprintf (cmd_name, "%s%c", kbd_command_prefix, *suffix);
+                       debug ("key_match: cmdname %s=\"%s\"\n",
+                               cmd_name,
+                               getenv (cmd_name) ?
+                                       getenv (cmd_name) :
+                                       "<UNDEFINED>");
+                       return (getenv (cmd_name));
+               }
+       }
+       debug ("key_match: no match\n");
+       return (NULL);
+}
+#endif                                                 /* CONFIG_PREBOOT */
+
+/* Read Keyboard status */
+int do_kbd (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+{
+       ulong kbd_data = KBD_DATA;
+       uchar keybd_env[KEYBD_KEY_NUM + 1];
+       int i;
+       
+       puts ("Keys:");
+       for (i = 0; i < KEYBD_KEY_NUM; ++i) {
+               keybd_env[i] = '0' + ((kbd_data >> i) & 1);
+               printf (" %c", keybd_env[i]);
+       }
+       keybd_env[i] = '\0';
+       putc ('\n');
+       setenv ("keybd", keybd_env);
+       return 0;
+}
+
+#ifdef CONFIG_MODEM_SUPPORT
+static int key_pressed(void)
+{
+       return (compare_magic(KBD_DATA, CONFIG_MODEM_KEY_MAGIC) == 0);
+}
+#endif /* CONFIG_MODEM_SUPPORT */
diff --git a/board/trab/vfd.c b/board/trab/vfd.c
new file mode 100644 (file)
index 0000000..c0e8f1a
--- /dev/null
@@ -0,0 +1,420 @@
+/*
+ * (C) Copyright 2001
+ * 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
+ */
+
+/************************************************************************/
+/* ** HEADER FILES                                                     */
+/************************************************************************/
+
+#include <config.h>
+#include <common.h>
+#include <version.h>
+#include <stdarg.h>
+#include <linux/types.h>
+#include <devices.h>
+#include <s3c2400.h>
+
+#ifdef CONFIG_VFD
+
+/************************************************************************/
+/* ** DEBUG SETTINGS                                                   */
+/************************************************************************/
+
+#undef VFD_DEBUG
+
+#ifdef VFD_DEBUG
+#define DEBUGF(fmt,args...)    printf(fmt ,##args)
+#else
+#define DEBUGF(fmt,args...)
+#endif
+
+/************************************************************************/
+/* ** CONFIG STUFF -- should be moved to board config file             */
+/************************************************************************/
+
+/************************************************************************/
+
+#ifndef PAGE_SIZE
+#define        PAGE_SIZE       4096
+#endif
+
+#define ROT 0x09
+#define BLAU 0x0C
+#define VIOLETT 0X0D
+
+ulong vfdbase;
+ulong frame_buf_size;
+#define frame_buf_offs 4
+
+/* taken from armboot/common/vfd.c by TQS */
+ulong         adr_vfd_table[112][18][2][4][2];
+unsigned char bit_vfd_table[112][18][2][4][2];
+
+/*
+ * initialize the values for the VFD-grid-control in the framebuffer
+ */
+void init_grid_ctrl(void)
+{
+       ulong adr, grid_cycle;
+       unsigned int bit, display;
+       unsigned char temp, bit_nr;
+
+       for (adr=vfdbase; adr<=(vfdbase+7168); adr+=4) /*clear frame buffer */
+               (*(volatile ulong*)(adr))=0;
+
+       for(display=0;display<=3;display++)
+       {
+               for(grid_cycle=0;grid_cycle<=55;grid_cycle++)
+               {
+                       bit = grid_cycle*256*4+(grid_cycle+200)*4+frame_buf_offs+display;               
+                       /* wrap arround if offset (see manual S3C2400) */
+                       if (bit>=frame_buf_size*8)
+                               bit = bit-(frame_buf_size*8);
+                       adr = vfdbase+(bit/32)*4+(3-(bit%32)/8);
+                       bit_nr = bit%8;
+                       bit_nr = (bit_nr>3)?bit_nr-4:bit_nr+4;
+                       temp=(*(volatile unsigned char*)(adr));
+                       temp|=(1<<bit_nr);
+                       (*(volatile unsigned char*)(adr))=temp;
+
+                       if(grid_cycle<55)
+                               bit = grid_cycle*256*4+(grid_cycle+201)*4+frame_buf_offs+display;
+                       else
+                               bit = grid_cycle*256*4+200*4+frame_buf_offs+display-4;  /* grid nr. 0 */
+                       /* wrap arround if offset (see manual S3C2400) */
+                       if (bit>=frame_buf_size*8)
+                               bit = bit-(frame_buf_size*8);
+                       adr = vfdbase+(bit/32)*4+(3-(bit%32)/8);
+                       bit_nr = bit%8;
+                       bit_nr = (bit_nr>3)?bit_nr-4:bit_nr+4;
+                       temp=(*(volatile unsigned char*)(adr));
+                       temp|=(1<<bit_nr);
+                       (*(volatile unsigned char*)(adr))=temp;
+               }
+       }
+}
+
+/*
+ *create translation table for getting easy the right position in the 
+ *physical framebuffer for some x/y-coordinates of the VFDs
+ */
+void create_vfd_table(void)
+{
+       unsigned int vfd_table[112][18][2][4][2];
+       ulong adr;
+       unsigned int x, y, color, display, entry, pixel, bit_nr;
+
+       /*
+        * Create translation table for Noritake-T119C-VFD-specific
+        * organized frame-buffer.
+        * Created is the number of the bit in the framebuffer (the
+        * first transferred pixel of each frame is bit 0).
+        */
+       for(y=0;y<=17;y++)   /* Zeile */
+       {
+               for(x=0;x<=111;x++)  /* Spalten */
+               {
+                       /*Display 0 blaue Pixel Eintrag 1 */
+                       vfd_table[x][y][0][0][0]=((x%4)*4+y*16+(x/4)*2048);
+                       /*Display 0 rote Pixel Eintrag 1 */
+                       vfd_table[x][y][1][0][0]=((x%4)*4+y*16+(x/4)*2048+512);
+                       if(x<=1)
+                       {
+                               /*Display 0 blaue Pixel Eintrag 2 */
+                               vfd_table[x][y][0][0][1]=(((x+112)%4)*4+y*16+((x+110)/4)*2048+1024);
+                               /*Display 0 rote Pixel Eintrag 2 */
+                               vfd_table[x][y][1][0][1]=(((x+112)%4)*4+y*16+((x+110)/4)*2048+512+1024);
+                       }
+                       else
+                       {
+                               /*Display 0 blaue Pixel Eintrag 2 */
+                               vfd_table[x][y][0][0][1]=((x%4)*4+y*16+((x-2)/4)*2048+1024);
+                               /*Display 0 rote Pixel Eintrag 2 */
+                               vfd_table[x][y][1][0][1]=((x%4)*4+y*16+((x-2)/4)*2048+512+1024);
+                       }
+                       /*Display 1 blaue Pixel Eintrag 1 */
+                       vfd_table[x][y][0][1][0]=((x%4)*4+y*16+(x/4)*2048+1);
+                       /*Display 1 rote Pixel Eintrag 1 */
+                       vfd_table[x][y][1][1][0]=((x%4)*4+y*16+(x/4)*2048+512+1);
+                       if(x<=1)
+                       {
+                               /*Display 1 blaue Pixel Eintrag 2 */
+                               vfd_table[x][y][0][1][1]=(((x+112)%4)*4+y*16+((x+110)/4)*2048+1+1024);
+                               /*Display 1 rote Pixel Eintrag 2 */
+                               vfd_table[x][y][1][1][1]=(((x+112)%4)*4+y*16+((x+110)/4)*2048+512+1+1024);
+                       }
+                       else
+                       {
+                               /*Display 1 blaue Pixel Eintrag 2 */
+                               vfd_table[x][y][0][1][1]=((x%4)*4+y*16+((x-2)/4)*2048+1+1024);
+                               /*Display 1 rote Pixel Eintrag 2 */
+                               vfd_table[x][y][1][1][1]=((x%4)*4+y*16+((x-2)/4)*2048+512+1+1024);
+                       }
+                       /*Display 2 blaue Pixel Eintrag 1 */
+                       vfd_table[x][y][0][2][0]=((x%4)*4+y*16+(x/4)*2048+2);
+                       /*Display 2 rote Pixel Eintrag 1 */
+                       vfd_table[x][y][1][2][0]=((x%4)*4+y*16+(x/4)*2048+512+2);
+                       if(x<=1)
+                       {
+                               /*Display 2 blaue Pixel Eintrag 2 */    
+                               vfd_table[x][y][0][2][1]=(((x+112)%4)*4+y*16+((x+110)/4)*2048+2+1024);
+                               /*Display 2 rote Pixel Eintrag 2 */
+                               vfd_table[x][y][1][2][1]=(((x+112)%4)*4+y*16+((x+110)/4)*2048+512+2+1024);
+                       }
+                       else
+                       {
+                               /*Display 2 blaue Pixel Eintrag 2 */
+                               vfd_table[x][y][0][2][1]=((x%4)*4+y*16+((x-2)/4)*2048+2+1024);
+                               /*Display 2 rote Pixel Eintrag 2 */
+                               vfd_table[x][y][1][2][1]=((x%4)*4+y*16+((x-2)/4)*2048+512+2+1024);
+                       }
+                       /*Display 3 blaue Pixel Eintrag 1 */
+                       vfd_table[x][y][0][3][0]=((x%4)*4+y*16+(x/4)*2048+3);
+                       /*Display 3 rote Pixel Eintrag 1 */
+                       vfd_table[x][y][1][3][0]=((x%4)*4+y*16+(x/4)*2048+512+3);
+                       if(x<=1)
+                       {
+                               /*Display 3 blaue Pixel Eintrag 2 */
+                               vfd_table[x][y][0][3][1]=(((x+112)%4)*4+y*16+((x+110)/4)*2048+3+1024);
+                               /*Display 3 rote Pixel Eintrag 2 */
+                               vfd_table[x][y][1][3][1]=(((x+112)%4)*4+y*16+((x+110)/4)*2048+512+3+1024);
+                       }
+                       else
+                       {
+                               /*Display 3 blaue Pixel Eintrag 2 */
+                               vfd_table[x][y][0][3][1]=((x%4)*4+y*16+((x-2)/4)*2048+3+1024);
+                               /*Display 3 rote Pixel Eintrag 2 */
+                               vfd_table[x][y][1][3][1]=((x%4)*4+y*16+((x-2)/4)*2048+512+3+1024);
+                       }
+               }
+       }
+
+       /*
+        * Create translation table for Noritake-T119C-VFD-specific
+        * organized frame-buffer
+        * Create table with entries for physical byte adresses and
+        * bit-number within the byte
+        * from table with bit-numbers within the total framebuffer
+        */
+       for(y=0;y<=17;y++)   
+       {
+               for(x=0;x<=111;x++)
+               {
+                       for(color=0;color<=1;color++) 
+                       {
+                               for(display=0;display<=3;display++) 
+                               {
+                                       for(entry=0;entry<=1;entry++)
+                                       {
+                                               pixel  = vfd_table[x][y][color][display][entry] + frame_buf_offs; 
+                                                /*
+                                                 * wrap arround if offset
+                                                 * (see manual S3C2400)
+                                                 */
+                                               if (pixel>=frame_buf_size*8)
+                                                       pixel = pixel-(frame_buf_size*8);
+                                               adr    = vfdbase+(pixel/32)*4+(3-(pixel%32)/8);
+                                               bit_nr = pixel%8;
+                                               bit_nr = (bit_nr>3)?bit_nr-4:bit_nr+4;
+                                               adr_vfd_table[x][y][color][display][entry] = adr;
+                                               bit_vfd_table[x][y][color][display][entry] = bit_nr;
+                                       }
+                               }
+                       }
+               }
+       }
+}
+
+/*
+ * Set/clear pixel of the VFDs
+ */
+void set_vfd_pixel(unsigned char x, unsigned char y, unsigned char color, unsigned char display, unsigned char value)
+{
+       ulong adr;
+       unsigned char bit_nr, temp;
+
+       if (value!=0)
+       {
+               /* Pixel-Eintrag Nr. 1 */
+               adr = adr_vfd_table[x][y][color][display][0];
+               /* Pixel-Eintrag Nr. 1 */
+               bit_nr = bit_vfd_table[x][y][color][display][0];
+               temp=(*(volatile unsigned char*)(adr));
+               temp|=1<<bit_nr;
+               (*(volatile unsigned char*)(adr))=temp;
+
+               /* Pixel-Eintrag Nr. 2 */
+               adr = adr_vfd_table[x][y][color][display][1];
+               /* Pixel-Eintrag Nr. 2 */
+               bit_nr = bit_vfd_table[x][y][color][display][1];
+               temp=(*(volatile unsigned char*)(adr));
+               temp|=1<<bit_nr;
+               (*(volatile unsigned char*)(adr))=temp;
+       }
+       else
+       {
+               /* Pixel-Eintrag Nr. 1 */
+               adr = adr_vfd_table[x][y][color][display][0];
+               /* Pixel-Eintrag Nr. 1 */
+               bit_nr = bit_vfd_table[x][y][color][display][0];
+               temp=(*(volatile unsigned char*)(adr));
+               temp&=~(1<<bit_nr);
+               (*(volatile unsigned char*)(adr))=temp;
+
+               /* Pixel-Eintrag Nr. 2 */
+               adr = adr_vfd_table[x][y][color][display][1];
+               /* Pixel-Eintrag Nr. 2 */
+               bit_nr = bit_vfd_table[x][y][color][display][1];
+               temp=(*(volatile unsigned char*)(adr));
+               temp&=~(1<<bit_nr);
+               (*(volatile unsigned char*)(adr))=temp;
+       }
+}
+
+/*
+ * transfer image from BMP-File
+ */
+void transfer_pic(int display, unsigned char *adr, int height, int width)
+{
+       int x, y;
+       unsigned char temp;
+
+       for (; height > 0; height -= 18)
+       {
+               if (height > 18)
+                       y = 18;
+               else
+                       y = height;
+               for (; y > 0; y--)
+               {
+                       for (x = 0; x < width; x += 2)
+                       {
+                               temp = *adr++;
+                               set_vfd_pixel(x, y-1, 0, display, 0);
+                               set_vfd_pixel(x, y-1, 1, display, 0);
+                               if ((temp >> 4) == BLAU)
+                                       set_vfd_pixel(x, y-1, 0, display, 1);
+                               else if ((temp >> 4) == ROT)
+                                       set_vfd_pixel(x, y-1, 1, display, 1);
+                               else if ((temp >> 4) == VIOLETT)
+                               {
+                                       set_vfd_pixel(x, y-1, 0, display, 1);
+                                       set_vfd_pixel(x, y-1, 1, display, 1);
+                               } 
+                               set_vfd_pixel(x+1, y-1, 0, display, 0);
+                               set_vfd_pixel(x+1, y-1, 1, display, 0);
+                               if ((temp & 0x0F) == BLAU)
+                                       set_vfd_pixel(x+1, y-1, 0, display, 1);
+                               else if ((temp & 0x0F) == ROT)
+                                       set_vfd_pixel(x+1, y-1, 1, display, 1);
+                               else if ((temp & 0x0F) == VIOLETT)
+                               {
+                                       set_vfd_pixel(x+1, y-1, 0, display, 1);
+                                       set_vfd_pixel(x+1, y-1, 1, display, 1);
+                               } 
+                       }
+               }
+               display++;
+               if (display > 3)
+                       display = 0;
+       }
+}
+
+/*
+ * initialize LCD-Controller of the S3C2400 for using VFDs 
+ */
+int drv_vfd_init(void)
+{
+       ulong palette;
+
+       DECLARE_GLOBAL_DATA_PTR;
+
+       vfdbase = gd->vfd_base;
+       create_vfd_table();
+       init_grid_ctrl();
+
+       /*
+        * Hinweis: Der Framebuffer ist um genau ein Nibble verschoben 
+        * Das erste angezeigte Pixel wird aus dem zweiten Nibble geholt
+        * das letzte angezeigte Pixel wird aus dem ersten Nibble geholt
+        * (wrap around)
+        * see manual S3C2400
+        */
+       /* frame buffer startadr */
+       rLCDSADDR1 = vfdbase >> 1;
+       /* frame buffer endadr */
+       rLCDSADDR2 = (vfdbase + frame_buf_size) >> 1;
+       rLCDSADDR3 = ((256/4)); 
+
+       /* Port-Pins als LCD-Ausgang */
+       rPCCON =   (rPCCON & 0xFFFFFF00)| 0x000000AA;
+       /* Port-Pins als LCD-Ausgang */
+       rPDCON =   (rPDCON & 0xFFFFFF03)| 0x000000A8;
+#ifdef WITH_VFRAME
+       /* mit VFRAME zum Messen */
+       rPDCON =   (rPDCON & 0xFFFFFF00)| 0x000000AA;
+#endif
+
+       rLCDCON2 = 0x000DC000;
+       rLCDCON3 = 0x0051000A;
+       rLCDCON4 = 0x00000001;
+       rLCDCON5 = 0x00000440;
+       rLCDCON1 = 0x00000B75;
+
+       DEBUGF ("LCDSADDR1: %lX\n", rLCDSADDR1);
+       DEBUGF ("LCDSADDR2: %lX\n", rLCDSADDR2);
+       DEBUGF ("LCDSADDR3: %lX\n", rLCDSADDR3);
+
+       for(palette=0;palette<=15;palette++)
+               (*(volatile unsigned int*)(PALETTE+(palette*4)))=palette;
+       for(palette=16;palette<=255;palette++)
+               (*(volatile unsigned int*)(PALETTE+(palette*4)))=0x00;
+
+       return 0;
+}
+
+/************************************************************************/
+/* ** ROM capable initialization part - needed to reserve FB memory    */
+/************************************************************************/
+
+/*
+ * This is called early in the system initialization to grab memory
+ * for the VFD controller.
+ *
+ * Note that this is running from ROM, so no write access to global data.
+ */
+ulong vfd_setmem (ulong addr)
+{
+       ulong size;
+
+       /* MAGIC */
+       frame_buf_size = (256*4*56)/8;
+
+       /* Round up to nearest full page */
+       size = (frame_buf_size + (PAGE_SIZE - 1)) & ~(PAGE_SIZE - 1);
+
+       DEBUGF ("Reserving %ldk for VFD Framebuffer at: %08lx\n", size>>10, addr);
+
+       return (size);
+}
+
+#endif /* CONFIG_VFD */
index 86921b68c3a1f56d124c78d8280e076f7294a969..f2c90c7d5f08d87ec409c8ecd956d9de04cd17ae 100644 (file)
@@ -37,7 +37,7 @@ COBJS = main.o altera.o bedbug.o \
          cmd_net.o cmd_nvedit.o env_common.o \
          env_flash.o env_eeprom.o env_nvram.o env_nowhere.o \
          cmd_pci.o cmd_pcmcia.o \
-         cmd_reginfo.o cmd_scsi.o cmd_usb.o \
+         cmd_reginfo.o cmd_scsi.o cmd_vfd.o cmd_usb.o \
          command.o console.o devices.o dlmalloc.o \
          docecc.o environment.o flash.o fpga.o \
          hush.o kgdb.o lists.o miiphybb.o miiphyutil.o \
diff --git a/common/cmd_vfd.c b/common/cmd_vfd.c
new file mode 100644 (file)
index 0000000..47eb429
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * (C) Copyright 2001
+ * 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
+ */
+
+/*
+ * Command to load a splash screen to the VFDs.
+ * NOTE that htis will be controlled by a key combination when
+ * the keyboard stuff works. For now the user has to enter a
+ * bitmap number (only VFDT_TEST_LOGO is supported now - 16.10.2002).
+ *
+ * This rather crudely requires that each bitmap be included as a
+ * header file.
+ */
+#include <common.h>
+#include <command.h>
+
+#if (CONFIG_COMMANDS & CFG_CMD_VFD)
+#ifdef VFD_TEST_LOGO
+#include <vfd_logo.h>
+#define VFD_TEST_LOGO_BMPNR 0
+#endif
+
+extern void transfer_pic(unsigned char, unsigned char *, int, int);
+
+int do_vfd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       ulong bitmap;
+
+       if (argc != 2) {
+               printf ("Usage:\n%s\n", cmdtp->usage);
+               return 1;
+       }
+
+       bitmap = simple_strtoul(argv[1], NULL, 10);
+
+       switch (bitmap)
+       {
+#ifdef VFD_TEST_LOGO
+               case VFD_TEST_LOGO_BMPNR:
+                       transfer_pic(1, &vfd_test_logo_bitmap[0],
+                               VFD_TEST_LOGO_HEIGHT, VFD_TEST_LOGO_WIDTH);
+                       break;
+#endif
+               default:
+                       printf("Unknown bitmap %ld\n", bitmap);
+                       break;
+       }
+       return 0;
+}
+
+#endif /* CFG_CMD_VFD */
index da834f31ddbd6eb24ab7fbd63ea9094ef593db78..2f50e6d1f8193f4a8ab06dc462c8107b9837f818 100644 (file)
@@ -67,6 +67,8 @@
 
 #include <cmd_dtt.h>
 
+#include <cmd_vfd.h>           /* load a bitmap to the VFDs on TRAB */
+
 /*
  * HELP command
  */
@@ -319,7 +321,8 @@ cmd_tbl_t cmd_tbl[] = {
        CMD_TBL_USB
        CMD_TBL_VERS
        CMD_TBL_BSP
-       CMD_TBL_QUES
+       CMD_TBL_VFD
+       CMD_TBL_QUES            /* keep this ("help") the last entry */
        /* the following entry terminates this table */
        MK_CMD_TBL_ENTRY( NULL, 0, 0, 0, NULL, NULL, NULL )
 };
index a8daa2850efe1d79604abad6959365df35c1c665..bf4e1264fe3f095e80152a8e60c82587c339dddd 100644 (file)
@@ -41,6 +41,9 @@ typedef       struct  global_data {
        unsigned long   reloc_off;      /* Relocation Offset */
        unsigned long   env_addr;       /* Address  of Environment struct */
        unsigned long   env_valid;      /* Checksum of Environment valid? */
+#ifdef CONFIG_VFD
+       unsigned long   vfd_base;       /* base address of VFD frame buffer */
+#endif
 #if 0
        unsigned long   cpu_clk;        /* CPU clock in Hz!             */
        unsigned long   bus_clk;
index e756fed655b5efe59af5ebe01df15d0f7c656815..4ac04af6696333e0aea29a436ae03f7254d48dd2 100644 (file)
@@ -276,6 +276,21 @@ extern int do_led (cmd_tbl_t *, int, int, char *[]);
 #endif /* CONFIG_PN62 */
 /* ----------------------------------------------------------------------------*/
 
+/* ----- TRAB ------------------------------------------------------------------
+ */
+#if defined(CONFIG_TRAB)
+
+#define        CMD_TBL_BSP     MK_CMD_TBL_ENTRY(                                       \
+       "kbd",  3,      1,      1,      do_kbd,                                 \
+       "kbd     - read keyboard status\n",                                     \
+       NULL                                                                    \
+),
+
+int do_kbd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
+
+#endif /* CONFIG_TRAB */
+/* ----------------------------------------------------------------------------*/
+
 #else
 #define CMD_TBL_BSP
 #endif /* CFG_CMD_BSP */
index 42103fab0767a8e04522b45e34a4aa039af80251..1eb69189cb6e9e41030633498a2f574f21fbecbe 100644 (file)
@@ -75,6 +75,7 @@
 #define CFG_CMD_FPGA   0x0000010000000000      /* FPGA configuration Support   */
 #define CFG_CMD_HWFLOW 0x0000020000000000      /* RTS/CTS hw flow control      */
 #define CFG_CMD_SAVES  0x0000040000000000      /* save S record dump           */
+#define CFG_CMD_VFD    0x0000080000000000      /* Display bitmap on VFD display*/
 
 #define CFG_CMD_ALL    0xFFFFFFFFFFFFFFFF      /* ALL commands                 */
 
diff --git a/include/cmd_vfd.h b/include/cmd_vfd.h
new file mode 100644 (file)
index 0000000..40a9b34
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * (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_VFD_H
+#define        _CMD_VFD_H
+
+#if (CONFIG_COMMANDS & CFG_CMD_VFD)
+#define        CMD_TBL_VFD     MK_CMD_TBL_ENTRY(                                       \
+       "vfd",  3,      2,      0,      do_vfd,                 \
+       "vfd     - load a bitmap to the VFDs on TRAB\n",                \
+       "N\n"                                                   \
+       "    - load bitmap N to the VFDs (N is _decimal_ !!!)\n"\
+),
+
+/* Implemented in common/cmd_misc.c */
+int do_vfd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
+#else
+#define CMD_TBL_VFD
+#endif /* CFG_CMD_VFD */
+
+#endif /* _CMD_VFD_H */
index 40137e8b8189cabe528b9268877e412bf9893f9a..77226a50282708697e7a19bf15b8264b35e8a494 100644 (file)
@@ -339,6 +339,11 @@ void mii_init (void);
 ulong  lcd_setmem (ulong);
 #endif /* CONFIG_LCD */
 
+/* $(CPU)/.../vfd.c */
+#ifdef CONFIG_VFD
+ulong  vfd_setmem (ulong);
+#endif /* CONFIG_VFD */
+
 /* ppc/cache.c */
 void   flush_cache   (unsigned long, unsigned long);
 
index 14da704a2892b9508504c539800ef5ef4834d843..283b4ec080e3af67a3367e7e9fde441cbeb2538b 100644 (file)
 
 #define        CONFIG_RTC_MPC8xx               /* use internal RTC of MPC8xx   */
 
+
+#if 0
+#define CONFIG_VIDEO           1       /* To enable the video initialization */
+/*#define CONFIG_VIDEO_ADDR    0x00200000 */
+
+/* Video related */
+#define CONFIG_VIDEO_LOGO                      1       /* Show the logo */
+#define CONFIG_VIDEO_ENCODER_AD7177            1       /* Enable this encoder */
+#define CONFIG_VIDEO_ENCODER_AD7177_ADDR       0xF4    /* ALSB to ground */
+#endif
+
+
 #define CONFIG_COMMANDS            ( ( CONFIG_CMD_DFL  | \
                                CFG_CMD_DHCP    | \
                                CFG_CMD_IDE     | \
  * power management and some other internal clocks
  */
 #define SCCR_MASK      SCCR_EBDF11
-#define CFG_SCCR       (/* SCCR_TBS  | */ \
+#define CFG_SCCR       (/* SCCR_TBS  | */ SCCR_RTSEL | SCCR_RTDIV    | \
                         SCCR_COM00   | SCCR_DFSYNC00 | SCCR_DFBRG00  | \
                         SCCR_DFNL000 | SCCR_DFNH000  | SCCR_DFLCD000 | \
                         SCCR_DFALCD00)
index 8cf13236fdc56781a6a743b5e73a6f1a667cad4d..a642e313911e158ed6da2679598dacff8ed15789 100644 (file)
 #define CS8900_BASE            0x07000300 /* agrees with WIN CE PA */
 #define CS8900_BUS16           1 /* the Linux driver does accesses as shorts */
 
+#define CONFIG_VFD             1       /* VFD linear frame buffer driver */
+#define VFD_TEST_LOGO          1       /* output a test logo to the VFDs */
+
 /*
  * select serial console configuration
  */
 #define CONFIG_SERIAL1          1      /* we use SERIAL 1 on TRAB */
 
+#define CONFIG_HWFLOW                  /* include RTS/CTS flow control support */
+
+#define CONFIG_MODEM_SUPPORT           /* enable modem initialization stuff */
+
+#define        CONFIG_MODEM_KEY_MAGIC  "23"    /* hold down these keys to enable modem */
+
+/*
+ * The following enables modem debugging stuff. The dbg() and
+ * 'char screen[1024]' are used for debug printfs. Unfortunately,
+ * it is usable only from BDI
+ */
+#undef CONFIG_MODEM_SUPPORT_DEBUG
+
 /* allow to overwrite serial and ethaddr */
 #define CONFIG_ENV_OVERWRITE
 
 #define CONFIG_BAUDRATE                115200
 
+#ifdef CONFIG_HWFLOW
+#define CONFIG_COMMANDS_ADD_HWFLOW     CFG_CMD_HWFLOW
+#else
+#define        CONFIG_COMMANDS_ADD_HWFLOW      0
+#endif
+
+#ifdef CONFIG_VFD
+#define CONFIG_COMMANDS_ADD_VFD                CFG_CMD_VFD
+#else
+#define CONFIG_COMMANDS_ADD_VFD                0
+#endif
+
 #ifndef USE_920T_MMU
-#define CONFIG_COMMANDS                (CONFIG_CMD_DFL & ~CFG_CMD_CACHE)
+#define CONFIG_COMMANDS                ((CONFIG_CMD_DFL & ~CFG_CMD_CACHE) | \
+                                CFG_CMD_BSP | \
+                                CONFIG_COMMANDS_ADD_HWFLOW     | \
+                                CONFIG_COMMANDS_ADD_VFD        )
 #else
-#define CONFIG_COMMANDS                (CONFIG_CMD_DFL)
+#define CONFIG_COMMANDS                (CONFIG_CMD_DFL | \
+                                CFG_CMD_BSP    | \
+                                CONFIG_COMMANDS_ADD_HWFLOW     | \
+                                CONFIG_COMMANDS_ADD_VFD        )
 #endif
 
+#undef CONFIG_COMMANDS_ADD_HWFLOW
+#undef CONFIG_COMMANDS_ADD_VFD
+
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
 
 
 #define CONFIG_BOOTDELAY       5
+#define CONFIG_PREBOOT         "echo;echo *** booting ***;echo"
 #define CONFIG_BOOTARGS        "console=ttyS0"
 #define CONFIG_ETHADDR         00:D0:93:00:61:11
 #define CONFIG_NETMASK          255.255.255.0
 /* valid baudrates */
 #define CFG_BAUDRATE_TABLE     { 9600, 19200, 38400, 57600, 115200 }
 
-#ifndef __ASSEMBLY__
-/*-----------------------------------------------------------------------
- * Board specific extension for bd_info
- *
- * This structure is embedded in the global bd_info (bd_t) structure
- * and can be used by the board specific code (eg board/...)
- */
-
-struct bd_info_ext
-{
-    /* helper variable for board environment handling
-     *
-     * env_crc_valid == 0    =>   uninitialised
-     * env_crc_valid  > 0    =>   environment crc in flash is valid
-     * env_crc_valid  < 0    =>   environment crc in flash is invalid
-     */
-     int       env_crc_valid;
-};
-#endif
+#define CONFIG_MISC_INIT_R             /* have misc_init_r() function  */
 
 /*-----------------------------------------------------------------------
  * Stack sizes
index e4ded26633bd4c3188a8156d57a8603e51535302..b1e1ebdfd7d16b2427a1db1855b62209b8a9370e 100644 (file)
@@ -96,6 +96,9 @@ int   device_deregister(char *devname);
 #ifdef CONFIG_LCD
 int    drv_lcd_init (void);
 #endif
+#ifdef CONFIG_VFD
+int    drv_vfd_init (void);
+#endif
 #ifdef CONFIG_VIDEO
 int    drv_video_init (void);
 #endif
diff --git a/include/vfd_logo.h b/include/vfd_logo.h
new file mode 100644 (file)
index 0000000..a636401
--- /dev/null
@@ -0,0 +1,525 @@
+/*
+ * Automatically generated by "tools/bmp_logo"
+ *
+ * DO NOT EDIT
+ *
+ */
+
+
+#ifndef __BMP_LOGO_H__
+#define __BMP_LOGO_H__
+
+#define VFD_TEST_LOGO_WIDTH            112
+#define VFD_TEST_LOGO_HEIGHT           72
+#define VFD_TEST_LOGO_COLORS           0
+#define VFD_TEST_LOGO_OFFSET           0
+
+
+unsigned char vfd_test_logo_bitmap[] = {
+       0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD,
+       0xDF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD,
+       0xDD, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD,
+       0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD,
+       0xDD, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD,
+       0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD,
+       0xDD, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFD, 0xDF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xFD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xFD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFD, 0xDD, 0xDF, 0xDD, 0xDD, 0xFF, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xFD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDF, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xFD,
+       0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xFD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xDF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xFD,
+       0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFD, 0xDF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xDF, 0xFD, 0xDD, 0xDF, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
+       0xDD, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xFF,
+       0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xFF, 0xFD, 0xDD, 0xDD, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xFF, 0xFD, 0xDD, 0xDD, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD,
+       0xDD, 0xDD, 0xFF, 0xFF, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD,
+       0xDF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD,
+       0xDD, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD,
+       0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD,
+       0xDD, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD,
+       0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD,
+       0xDD, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFD, 0xDF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xFD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xFD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFD, 0xDD, 0xDF, 0xDD, 0xDD, 0xFF, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xFD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDF, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xFD,
+       0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xFD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xDF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xFD,
+       0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFD, 0xDF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xDF, 0xFD, 0xDD, 0xDF, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
+       0xDD, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xFF,
+       0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xFF, 0xFD, 0xDD, 0xDD, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xFF, 0xFD, 0xDD, 0xDD, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD,
+       0xDD, 0xDD, 0xFF, 0xFF, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD,
+       0xDF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD,
+       0xDD, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD,
+       0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD,
+       0xDD, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD,
+       0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD,
+       0xDD, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFD, 0xDF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xFD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xFD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFD, 0xDD, 0xDF, 0xDD, 0xDD, 0xFF, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xFD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDF, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xFD,
+       0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xFD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xDF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xFD,
+       0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFD, 0xDF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xDF, 0xFD, 0xDD, 0xDF, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
+       0xDD, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xFF,
+       0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xFF, 0xFD, 0xDD, 0xDD, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xFF, 0xFD, 0xDD, 0xDD, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD,
+       0xDD, 0xDD, 0xFF, 0xFF, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD,
+       0xDF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD,
+       0xDD, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD,
+       0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD,
+       0xDD, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD,
+       0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD,
+       0xDD, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFD, 0xDF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xFD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xFD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFD, 0xDD, 0xDF, 0xDD, 0xDD, 0xFF, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xFD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDF, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xFD,
+       0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xFD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDF, 0xFD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xDF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xFD,
+       0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDF, 0xFF, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFD, 0xDF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xDF, 0xFD, 0xDD, 0xDF, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,
+       0xDD, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xFF,
+       0xDD, 0xDD, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xFF, 0xFD, 0xDD, 0xDD, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xFF, 0xFD, 0xDD, 0xDD, 0xFD,
+       0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD,
+       0xDD, 0xDD, 0xFF, 0xFF, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xDD, 0xDD, 0xDF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDD, 0xDD, 0xDD,
+       0xDD, 0xDD, 0xDD, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+       0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xDD, 0xDD, 0xDD,
+};
+
+#endif /* __VFD_TEST_LOGO_H__ */
index c0c4f08480a2d2ea4bc35ec20eea60206d0ce7c9..0120ded8f024cf6ce2a4b0fdd103eb8a92bef99b 100644 (file)
@@ -181,6 +181,9 @@ void start_armboot (void)
        gd_t gd_data;
        bd_t bd_data;
        init_fnc_t **init_fnc_ptr;
+#ifdef CONFIG_VFD
+       unsigned long addr;
+#endif
 
        /* Pointer is writable since we allocated a register for it */
        gd = &gd_data;
@@ -198,9 +201,30 @@ void start_armboot (void)
        size = flash_init ();
        display_flash_config (size);
 
-       /* armboot_end is defined in the board-specific linker script */
+#ifdef CONFIG_VFD
+#ifndef PAGE_SIZE
+#define PAGE_SIZE 4096
+#endif
+       /*
+        * reserve memory for VFD display (always full pages)
+        */
+       /* armboot_real_end is defined in the board-specific linker script */
+       addr = (_armboot_real_end + (PAGE_SIZE - 1)) & ~(PAGE_SIZE - 1);
+       size = vfd_setmem (addr);
+       gd->vfd_base = addr;
+       /* round to the next page boundary */
+       addr += size;
+       addr = (addr + (PAGE_SIZE - 1)) & ~(PAGE_SIZE - 1);
+       mem_malloc_init (addr);
+#else
+       /* armboot_real_end is defined in the board-specific linker script */
        mem_malloc_init (_armboot_real_end);
+#endif /* CONFIG_VFD */
 
+#ifdef CONFIG_VFD
+       /* must do this after the framebuffer is allocated */
+       drv_vfd_init();
+#endif
        /* initialize environment */
        env_relocate ();
 
@@ -224,6 +248,11 @@ void start_armboot (void)
                }
        }
 
+#if defined(CONFIG_MISC_INIT_R)
+       /* miscellaneous platform dependent initialisations */
+       misc_init_r ();
+#endif
+
        /* enable exceptions */
        enable_interrupts ();