]> git.neil.brown.name Git - history.git/commitdiff
pre-2.1.132-4.. 2.1.132pre4
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:17:38 +0000 (15:17 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:17:38 +0000 (15:17 -0500)
There's a new pre-patch on ftp.kernel.org. I've been waiting for a few
other things, but the pre-patches are getting to be so big that it's
getting unwieldly, so I'll probably make a real 2.1.132 real soon now. In
the meantime, there's a pre-patch that people can verify for sanity (this
one should have coda-fs back to working order, for example - patch
craziness corrupted a simple update in pre-3).

                Linus

71 files changed:
Documentation/Configure.help
Documentation/fb/matroxfb.txt [new file with mode: 0644]
arch/i386/kernel/smp.c
arch/ppc/8xx_io/enet.c
arch/ppc/Makefile
arch/ppc/amiga/bootinfo.c
arch/ppc/amiga/config.c
arch/ppc/boot/Makefile
arch/ppc/boot/misc.c
arch/ppc/coffboot/Makefile
arch/ppc/common_defconfig
arch/ppc/config.in
arch/ppc/defconfig
arch/ppc/kernel/Makefile
arch/ppc/kernel/apus_setup.c
arch/ppc/kernel/head.S
arch/ppc/kernel/irq.c
arch/ppc/kernel/mbx_setup.c
arch/ppc/kernel/misc.S
arch/ppc/kernel/pci.c
arch/ppc/kernel/ppc_htab.c
arch/ppc/kernel/ppc_ksyms.c
arch/ppc/kernel/prep_pci.c
arch/ppc/kernel/prep_setup.c
arch/ppc/kernel/process.c
arch/ppc/kernel/setup.c
arch/ppc/kernel/smp.c
arch/ppc/kernel/time.c
arch/ppc/lib/Makefile
arch/ppc/mbx_defconfig
arch/ppc/mm/init.c
arch/ppc/pmac_defconfig
arch/ppc/prep_defconfig
drivers/macintosh/mediabay.c
drivers/macintosh/via-pmu.c
drivers/video/Config.in
drivers/video/atyfb.c
drivers/video/cgsixfb.c
drivers/video/chipsfb.c
drivers/video/controlfb.c
drivers/video/controlfb.h
drivers/video/creatorfb.c
drivers/video/cyberfb.c
drivers/video/cyberfb.h
drivers/video/fbcon-cfb8.c
drivers/video/fbcon.c
drivers/video/font_sun12x22.c
drivers/video/imsttfb.c
drivers/video/macfb.c
drivers/video/matroxfb.c
drivers/video/offb.c
drivers/video/retz3fb.c
drivers/video/sbusfb.c
drivers/video/tgafb.c
drivers/video/virgefb.c
fs/buffer.c
fs/dcache.c
fs/ext2/file.c
include/asm-ppc/amigappc.h
include/asm-ppc/io.h
include/asm-ppc/mmu_context.h
include/asm-ppc/resource.h
include/asm-ppc/termios.h
include/linux/coda.h
include/linux/coda_linux.h
include/linux/coda_psdev.h
include/linux/fb.h
include/linux/fs.h
include/video/fbcon.h
mm/filemap.c
mm/vmscan.c

index a1aabb540872bb8a69e9ecd333ed2226245c43c8..26639326c90c5faf9c39bfc1c3357fafdf70b044 100644 (file)
@@ -1767,7 +1767,7 @@ CONFIG_FB_MATROX
 
 Matrox Millennium support
 CONFIG_FB_MATROX_MILLENIUM
-  Say Y here if you have Matrox Millennium  or Matrox Milleninium II in 
+  Say Y here if you  have Matrox Millennium  or Matrox Millennium II in 
   the box. If you select "Advanced lowlevel driver options", you should 
   check 4 bpp packed pixel, 8 bpp packed pixel, 16 bpp packed pixel, 24
   bpp  packed pixel  and 32  bpp packed  pixel. You  can also  use font 
@@ -1783,13 +1783,10 @@ CONFIG_FB_MATROX_MYSTIQUE
 
 Matrox G100 support
 CONFIG_FB_MATROX_G100
-  Say Y here  if you have  Matrox Productiva G100  in the box. But THIS 
-  DRIVER  IS NOT  TESTED BECAUSE  OF I  HAVE NO  G100  board  and  G100 
-  technical sheets  are top secret at this time.  But driver should not 
-  cause any damage to your computer.
-  If you select  "Advanced lowlevel  driver options",  you should check
-  8 bpp  packed pixel,  16 bpp  packed pixel,  24 bpp  packed pixel and 
-  32 bpp packed pixel. You can also use font widths different from 8.
+  Say Y  here if  you have  Matrox Productiva G100  in the box.  If you
+  select  "Advanced lowlevel  driver options",  you should  check 8 bpp
+  packed pixel,  16 bpp packed  pixel, 24 bpp  packed pixel  and 32 bpp
+  packed pixel. You can also use font widths different from 8.
 
 Matrox unified driver multihead support
 CONFIG_FB_MATROX_MULTIHEAD
diff --git a/Documentation/fb/matroxfb.txt b/Documentation/fb/matroxfb.txt
new file mode 100644 (file)
index 0000000..cb1b9b2
--- /dev/null
@@ -0,0 +1,283 @@
+[This file is cloned from VesaFB. Thanks go to Gerd Knorr]
+
+what is matroxfb?
+=================
+
+This is a driver for a graphic framebuffer for Matrox devices on
+Alpha, Intel and PPC boxes.
+
+Advantages:
+
+ * It provides a nice large console (128 cols + 48 lines with 1024x768)
+   without using tiny, unreadable fonts.
+ * You can run XF68_FBDev on top of /dev/fb0
+ * Most important: boot logo :-)
+
+Disadvantages:
+
+ * graphic mode is slower than text mode... but you should not notice
+   if you use same resolution as you used in textmode.
+
+
+How to use it?
+==============
+
+Switching modes is done using the video=matrox:vesa=... boot parameter
+or using `fbset' program.
+
+You should compile in both vgacon (to boot if you remove you Matrox from
+box) and matroxfb (for graphics mode). You should not compile-in vesafb
+unless you have primary display on non-Matrox VBE2.0 device (see 
+Documentation/vesafb.txt for details).
+
+Currently supported video modes are (through vesa=... interface, PowerMac
+has (as addon) compatibility code.
+
+bpp | 640x400  640x480  768x576  800x600  960x720  1024x768 1152x864 1280x1024 1408x1056 1600x1200
+----+----------------------------------------------------------------------------------------------
+  4 |            0x12             0x102             0x104             0x106
+  8 |  0x100    0x101    0x180    0x103    0x188    0x105    0x190    0x107     0x198     0x11C
+ 15 |           0x110    0x181    0x113    0x189    0x116    0x191    0x119     0x199     0x11D
+ 16 |           0x111    0x182    0x114    0x18A    0x117    0x192    0x11A     0x19A     0x11E
+ 24 |           0x1B2    0x184    0x1B5    0x18C    0x1B8    0x194    0x1BB     0x19C     0x1BF
+ 32 |           0x112    0x183    0x115    0x18B    0x118    0x193    0x11B     0x19B
+
+text | 640x400  640x480  1056x344  1056x400  1056x480
+-----+------------------------------------------------
+ 8x8 |  0x1C0    0x108     0x10A     0x10B     0x10C
+8x16 | 2, 3, 7                       0x109
+
+You can enter these number either hexadecimal (leading `0x') or decimal (0x100 = 256). You can also
+use value + 512 to achieve compatibility with your old number passed to vesafb.
+
+Non-listed number can be achieved by more complicated command-line, for example
+1600x1200x32bpp can be specified by `video=matrox:vesa:0x11C,depth:32'.
+
+
+X11
+===
+
+XF68_FBDev should work just fine, but it is non-accelerated. On non-intel
+architectures there are some glitches for 24bpp videomodes. 8, 16 and 32bpp
+works fine.
+
+Running another (accelerated) X-Server like XF86_SVGA works too. But (at least)
+XFree servers have big troubles in multihead configurations (even on first
+head, not even talking about second).
+
+
+SVGALib
+=======
+
+Driver contains SVGALib compatibility code. It is turned on by choosing textual
+mode for console. You can do it at boottime by using videomode 2,3,7,0x108-0x10C 
+or 0x1C0. At runtime, `fbset -depth 0' does this work.
+Unfortunately, after SVGALib application exits, screen contents is corrupted.
+Switching to another console and back fixes it. I hope that it is SVGALib and
+not mine problem, but I'm not sure.
+
+
+Configuration
+=============
+
+You can pass kernel command line options to vesafb with
+`video=matrox:option1,option2:value2,option3' (multiple options should be 
+separated by comma, values are separated from options by `:'). 
+Accepted options:
+
+mem:X    - size of memory (X can be in megabytes, kilobytes or bytes)
+           You can only decrease value determined by driver because of
+          it always probe for memory. Default is to use whole detected
+          memory usable for on-screen display (i.e. max. 8MB).
+disabled - do not load driver; you can use also `off', but `disabled'
+           is here too.
+enabled  - load driver, if you have `video=matrox:disabled' in LILO configuration,
+           you can override it by this (you cannot override `off').
+          It is default.
+noaccel  - do not use acceleration engine. It does not work on Alphas.
+accel    - use acceleration engine. It is default.
+nopan    - create initial consoles with vyres = yres, thus disabling virtual
+           scrolling.
+pan      - create initial consoles as tall as possible (vyres = memory/vxres).
+           It is default.
+nopciretry - disable PCI retries. It is needed for some broken chipsets,
+           it is autodetected for intel's 82437. In this case device does
+          not comply to PCI 2.1 specs (it will not guarantee that every transaction
+          terminate with success or retry in 32 PCLK).
+pciretry - enable PCI retries. It is default, except for intel's 82437.
+novga    - disables VGA I/O ports. It is default if BIOS did not enable device.
+           You should not use this option, some boards then do not restart without
+          power off.
+vga      - preserve state of VGA I/O ports. It is default. Driver does not enable
+           VGA I/O if BIOS did not it (it is not safe to enable it in most cases).
+nobios   - disables BIOS ROM. It is default if BIOS did not enable BIOS itself.
+           You should not use this option, some boards then do not restart without
+          power off.
+bios     - preserve state of BIOS ROM. It is default. Driver does not enable BIOS
+           if BIOS was not enabled before.
+noinit   - tells driver, that devices were already initialized. You should use it
+           if you have G100 and/or if driver cannot detect memory, you see strange
+          pattern on screen and so on. Devices not enabled by BIOS are still
+          initialized.
+init     - driver initializes every device it knows about. It is default.
+inv24    - change timings parameters for 24bpp modes on Millenium and Millenium II.
+           Specify this if you see strange color shadows around characters.
+noinv24  - use standard timmings. It is default.
+inverse  - invert colors on screen (for LCD displays)
+noinverse - show true colors on screen. It is default.
+dev:X    - bind driver to device X. Driver numbers device from 0 up to N, where device
+           0 is first `known' device found, 1 second and so on. lspci lists
+          devices in this order.
+          Default is `every' known device for driver with multihead support and
+          first working device (usually dev:0) for driver without multihead support.
+nohwcursor - disables hardware cursor (use software cursor instead).
+hwcursor - enables hardware cursor. It is default. If you are using non-accelerated mode
+           (`noaccel' or `fbset -accel false'), software cursor is used (except for
+          text mode).
+noblink  - disables cursor blinking. Cursor in text mode always blinks (hw limitation).
+blink    - enables cursor blinking. It is default.
+nofastfont - disables fastfont feature. It is default.
+fastfont:X - enables fastfont feature. X specifies size of memory reserved for font data,
+           it must be >= (fontwidth*fontheight*chars_in_font)/8. It is faster on
+          Gx00 series, but slower on older cards.
+grayscale - enable grayscale summing. It works in PSEUDOCOLOR modes (text, 4bpp, 8bpp). In
+           DIRECTCOLOR modes it is limited to characters displayed through putc/putcs. Direct
+          accesses to framebuffer can paint colors.
+nograyscale - disable grayscale summing. It is default.
+cross4MB - enables that pixel line can cross 4MB boundary. It is default for non-Millenium.
+nocross4MB - pixel line must not cross 4MB boundary. It is default for Millenium I or II,
+           because of these devices have hardware limitations which do not allow this.
+          But this option is incompatible with some (if not all yet released) versions
+          of XF86_FBDev.
+vesa:X   - selects startup videomode. X is number from 0 to 0x1FF, see table above
+           for detailed explanation. Default is 640x480, 8bpp if driver has 8bpp support.
+          Otherwise first available of 640x350x4bpp, 640x480x15bpp, 640x480x24bpp,
+          640x480x32bpp or 80x25 text (80x25 text is always available).
+If you are not satisfied with videomode selected by `vesa' option, you
+can modify it with these options:
+xres:X   - horizontal resolution, in pixels. Default is derived from `vesa' option.
+yres:X   - vertical resolution, in pixel lines. Default is derived from `vesa' option.
+upper:X  - top boundary: lines between end of VSYNC pulse and start of first pixel line 
+           of picture. Default is derived from `vesa' option.
+lower:X  - bottom boundary: lines between end of picture and start of VSYNC pulse.
+           Default is derived from `vesa' option.
+vslen:X  - length of VSYNC pulse, in lines. Default is derived from `vesa' option.
+left:X   - left boundary: pixels between end of HSYNC pulse and first pixel. Default
+           is derived from `vesa' option.
+right:X  - right boundary: pixels between end of picture and start of HSYNC pulse.
+           Default is derived from `vesa' option.
+hslen:X  - length of HSYNC pulse, in pixels. Default is derived from `vesa' option.
+pixclock:X - dotclocks, in ps (picoseconds). Default is derived from `vesa' option and
+           from `fh' and `fv' options.
+sync:X   - sync. pulse - bit 0 inverts HSYNC polarity, bit 1 VSYNC polarity.
+           If bit 3 (value 0x08) is set, composite sync instead of HSYNC is generated.
+          If bit 5 (value 0x20) is set, sync on green is turned on.
+          Default depends on `vesa'.
+depth:X  - Bits per pixel: 0=text, 4,8,15,16,24 or 32. Default depends on `vesa'.
+If you know capabilities of your monitor, you can specify some (or all) of `pixclk', `fh'
+and `fv'. In this case, `pixclock' is computed so that pixclock <= maxclk, real_fh <= fh
+and real_fv <= fv.
+maxclk:X - maximum dotclock. X can be specified in MHz, kHz or Hz. Default is `don't care'.
+fh:X     - maximum horizontal synchronization frequency. X can be specified in kHz or Hz.
+           Default is `don't care'.
+fv:X     - maximum vertical frequency. X must be specified in Hz. Default is 70 for modes
+           derived from `vesa' with yres <= 400, 60Hz for yres > 400.
+
+
+Limitations
+===========
+
+There are known and unknown bugs, features and misfeatures.
+Currently there are following known bugs:
+ + G100 support does not work as expected, I'm still investigating this one.
+   Using `noinit' option works, but only for `first' head :-(
+ + SVGALib does not restore screen on exit
+ + generic fbcon-cfbX procedures do not work on Alphas. Due to this,
+   `noaccel' (and cfb4 accel) driver does not work on Alpha. So everyone
+   with access to /dev/fb* on Alpha can hang machine (you should restrict
+   access to /dev/fb* - everyone with access to this device can destroy
+   your monitor, believe me...).
+ + 24bpp does not support correctly XF-FBDev on big-endian architectures.
+ + interlaced text mode is not supported; it looks like hardware limitiation,
+   but I'm not sure.
+ + maybe more...
+And following misfeatures:
+ + SVGALib does not restore screen on exit.
+ + pixclock for text modes is limited by hardware to
+    83MHz on G200
+    66MHz on Millenium I
+    60MHz on Millenium II
+   Because of I have not access to other devices, I do not know specific
+   frequencies for them. So driver does not check this and allows you to
+   set frequency higher that this. It cause sparks, black holes and other
+   pretty effects on screen. Device was not destroyed during tests :-)
+ + my Millenium G200 oscillator has frequency range from 35MHz to 380MHz
+   (and it works with 8bpp on about 320MHz dotclocks (and changed mclk)).
+   But Matrox says on product sheet that VCO limit is 50-250MHz, so I believe
+   them (maybe that chip overheates, but it has very big cooler (G100 has
+   not one), so it should work).
+ + special mixed video/graphics videomodes of Mystique and Gx00 - 2G8V16 and
+   G16V16 are not supported
+ + color keying is not supported
+ + feature connector of Mystique and Gx00 is set to VGA mode (it is disabled
+   by BIOS)
+ + DCC (monitor detection) protocol is not implemented
+ + some check for input values are not so strict how it should be (you can
+   specify vslen=4000 and so on).
+ + maybe more...
+And following features:
+ + 4bpp is available only on Millenium I and Millenium II. It is hardware
+   limitiation.
+ + current fbset is not able to set 15bpp videomode: you must specify
+   depth==16 and green.length==5. fbset does not allow you to set 
+   green.length.
+ + hardware cursor is available only in accelerated videomodes. Maybe that
+   this is misfeature and not feature.
+ + text mode uses 6 bit VGA palette instead of 8 bit (one of 262144 colors
+   instead of one of 16M colors). It is due to hardware limitation of 
+   MilleniumI/II and SVGALib compatibility.
+
+
+Benchmarks
+==========
+It is time to redraw whole screen 1000 times in 1024x768, 60Hz. It is
+time for draw 6144000 characters on screen through /dev/vcsa
+(for 32bpp it is about 3GB of data (exactly 3000 MB); for 8x16 font in 
+16 seconds, i.e. 187MBps).
+Times were obtained from one older version of driver, now they are about 3%
+faster, it is kernel-space only time on P-II/350MHz, Millenium I in 33MHz
+PCI slot, G200 in AGP 2x slot. I did not test vgacon.
+
+NOACCEL
+        8x16                 12x22
+        MilleniumI   G200    MilleniumI   G200
+8bpp    16.42         9.54   12.33         9.13
+16bpp   21.00        15.70   19.11        15.02
+24bpp   36.66        36.66   35.00        35.00
+32bpp   35.00        30.00   33.85        28.66
+
+ACCEL, nofastfont
+        8x16                 12x22                6x11
+       MilleniumI   G200    MilleniumI   G200    MilleniumI   G200
+8bpp     7.79         7.24   13.55         7.78   30.00        21.01
+16bpp    9.13         7.78   16.16         7.78   30.00        21.01
+24bpp   14.17        10.72   18.69        10.24   34.99        21.01
+32bpp   16.15       16.16   18.73        13.09   34.99        21.01
+
+ACCEL, fastfont
+        8x16                 12x22                6x11
+       MilleniumI   G200    MilleniumI   G200    MilleniumI   G200
+8bpp     8.41         6.01    6.54         4.37   16.00        10.51
+16bpp    9.54         9.12    8.76         6.17   17.52        14.01
+24bpp   15.00        12.36   11.67        10.00   22.01        18.32
+32bpp   16.18        18.29*  12.71        12.74   24.44        21.00
+
+TEXT
+        8x16
+       MilleniumI   G200
+TEXT     3.29         1.50
+
+       
+* Yes, it is slower than Millenium I.
+--
+Petr Vandrovec <vandrove@vc.cvut.cz>
index 60979b172a594987b4c8d2001edfe0b52a48cfb6..c01eb35f5b73c6af37598edda1b90aed48741821 100644 (file)
@@ -1175,7 +1175,6 @@ void __init smp_boot_cpus(void)
 smp_done:
 }
 
-
 void send_IPI(int dest, int vector)
 {
        unsigned long cfg;
index 8c3401d6fefef33cb6c0e2d786f6ed56c7c185dc..126b724be2e69bef6bbdabd050670ef2c81c80e3 100644 (file)
@@ -1,4 +1,5 @@
 /*
+ * $Id: enet.c,v 1.8 1998/11/15 19:58:07 cort Exp $
  * Ethernet driver for Motorola MPC8xx.
  * Copyright (c) 1997 Dan Malek (dmalek@jlc.net)
  *
@@ -657,7 +658,7 @@ __initfunc(int cpm_enet_init(void))
 
        cp = cpmp;      /* Get pointer to Communication Processor */
 
-       immap = (immap_t *)MBX_IMAP_ADDR;       /* and to internal registers */
+       immap = (immap_t *)IMAP_ADDR;   /* and to internal registers */
 
        /* Allocate some private information.
        */
@@ -719,11 +720,11 @@ __initfunc(int cpm_enet_init(void))
         * These are relative offsets in the DP ram address space.
         * Initialize base addresses for the buffer descriptors.
         */
-       i = mbx_cpm_dpalloc(sizeof(cbd_t) * RX_RING_SIZE);
+       i = m8xx_cpm_dpalloc(sizeof(cbd_t) * RX_RING_SIZE);
        ep->sen_genscc.scc_rbase = i;
        cep->rx_bd_base = (cbd_t *)&cp->cp_dpmem[i];
 
-       i = mbx_cpm_dpalloc(sizeof(cbd_t) * TX_RING_SIZE);
+       i = m8xx_cpm_dpalloc(sizeof(cbd_t) * TX_RING_SIZE);
        ep->sen_genscc.scc_tbase = i;
        cep->tx_bd_base = (cbd_t *)&cp->cp_dpmem[i];
 
@@ -912,4 +913,3 @@ __initfunc(int cpm_enet_init(void))
 
        return 0;
 }
-
index cd98b4513dc65f29fcae7569dac604ffa15bd522..990b24b84062f1a478236b0282385378f219fa06 100644 (file)
@@ -16,8 +16,6 @@ KERNELLOAD    =0xc0000000
 
 ifeq ($(shell uname -m),ppc)
 CHECKS         = checks
-else
-CROSS_COMPILE  = ppc-linux-elf-
 endif
 
 ASFLAGS                =
index f24a0c5b853ca117b4f0981fb4e90af95b548aba..7639de68e5940a4bc1fbb72828c7c8c0a7bb1d05 100644 (file)
@@ -17,8 +17,8 @@
 extern char cmd_line[CL_SIZE];
 
 int num_memory = 0;
-extern struct mem_info memory[NUM_MEMINFO];
-extern struct mem_info ramdisk;
+struct mem_info memory[NUM_MEMINFO];
+struct mem_info ramdisk;
 
 extern int amiga_parse_bootinfo(const struct bi_record *);
 extern int atari_parse_bootinfo(const struct bi_record *);
index f79172390af9c4f68674e87913709eae649392b8..2335adfb97c8e387a9d396caad0dcebb765f1eac 100644 (file)
@@ -742,7 +742,7 @@ static void amiga_savekmsg_init(void)
 static void amiga_serial_putc(char c)
 {
     custom.serdat = (unsigned char)c | 0x100;
-    iobarrier ();
+    iobarrier_rw ();
     while (!(custom.serdatr & 0x2000))
        ;
 }
index fde1ad4c6e345d90a7b0dc1585e83e22b8090090..da4945fd7251ba2a647ed9413f1d12221e21a36a 100644 (file)
@@ -48,6 +48,9 @@ OBJECTS += mbxtty.o
 CFLAGS += -DCONFIG_MBX
 else
 OBJECTS += vreset.o kbd.o
+ ifeq ($(CONFIG_SERIAL_CONSOLE),y)
+  OBJECTS += ns16550.o
+ endif
 endif
 
 all:   zImage
index 42cb533dafe8d0d6de2223a7576cf1881242e836..470e1e4a98fa43b800ff8b3324b3d97d127c349e 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * misc.c
  *
- * $Id: misc.c,v 1.52 1998/09/19 01:21:24 cort Exp $
+ * $Id: misc.c,v 1.53 1998/12/15 17:40:15 cort Exp $
  * 
  * Adapted for PowerPC by Gary Thomas
  *
@@ -12,7 +12,7 @@
 #include <linux/types.h>
 #include "../coffboot/zlib.h"
 #include "asm/residual.h"
-#include <elf.h>
+#include <linux/elf.h>
 #include <linux/config.h>
 #include <asm/page.h>
 #include <asm/processor.h>
 #ifdef CONFIG_FADS
 #include <asm/fads.h>
 #endif
+#if defined(CONFIG_SERIAL_CONSOLE) && !defined(CONFIG_MBX)
+#include "ns16550.h"
+struct NS16550 *com_port;
+#endif /* CONFIG_SERIAL_CONSOLE */
 
 /*
  * Please send me load/board info and such data for hardware not
@@ -42,6 +46,7 @@ char *end_avail;
  * save here and pass to the kernel (command line and board info).
  * On the MBX we grab some known memory holes to hold this information.
  */
+char cmd_preset[] = "console=tty0 console=ttyS0,9600n8";
 char   cmd_buf[256];
 char   *cmd_line = cmd_buf;
 
@@ -108,12 +113,19 @@ static void scroll()
 
 tstc(void)
 {
+#if defined(CONFIG_SERIAL_CONSOLE) && !defined(CONFIG_MBX)
+       return (CRT_tstc() || NS16550_tstc(com_port));
+#else
        return (CRT_tstc() );
+#endif /* CONFIG_SERIAL_CONSOLE */
 }
 
 getc(void)
 {
        while (1) {
+#if defined(CONFIG_SERIAL_CONSOLE) && !defined(CONFIG_MBX)
+               if (NS16550_tstc(com_port)) return (NS16550_getc(com_port));
+#endif /* CONFIG_SERIAL_CONSOLE */
                if (CRT_tstc()) return (CRT_getc());
        }
 }
@@ -123,6 +135,11 @@ putc(const char c)
 {
        int x,y;
 
+#if defined(CONFIG_SERIAL_CONSOLE) && !defined(CONFIG_MBX)
+       NS16550_putc(com_port, c);
+       if ( c == '\n' ) NS16550_putc(com_port, '\r');
+#endif /* CONFIG_SERIAL_CONSOLE */
+
        x = orig_x;
        y = orig_y;
 
@@ -162,12 +179,21 @@ void puts(const char *s)
        y = orig_y;
 
        while ( ( c = *s++ ) != '\0' ) {
+#if defined(CONFIG_SERIAL_CONSOLE) && !defined(CONFIG_MBX)
+               NS16550_putc(com_port, c);
+               if ( c == '\n' ) NS16550_putc(com_port, '\r');
+#endif /* CONFIG_SERIAL_CONSOLE */
+
                if ( c == '\n' ) {
                        x = 0;
                        if ( ++y >= lines ) {
                                scroll();
                                y--;
                        }
+               } else if (c == '\b') {
+                 if (x > 0) {
+                   x--;
+                 }
                } else {
                        vidmem [ ( x + cols * y ) * 2 ] = c; 
                        if ( ++x >= cols ) {
@@ -358,6 +384,10 @@ decompress_kernel(unsigned long load_addr, int num_words, unsigned long cksum, R
        _put_MSR(_get_MSR() & ~0x0030);
        vga_init(0xC0000000);
 
+#if defined(CONFIG_SERIAL_CONSOLE) && !defined(CONFIG_MBX)
+       com_port = (struct NS16550 *)NS16550_init(0);
+#endif /* CONFIG_SERIAL_CONSOLE */
+
        if (residual)
                memcpy(hold_residual,residual,sizeof(RESIDUAL));
 #else /* CONFIG_MBX */
@@ -510,6 +540,8 @@ decompress_kernel(unsigned long load_addr, int num_words, unsigned long cksum, R
        puts("\nLinux/PPC load: ");
        timer = 0;
        cp = cmd_line;
+       memcpy (cmd_line, cmd_preset, sizeof(cmd_preset));
+       while ( *cp ) putc(*cp++);
        while (timer++ < 5*1000) {
                if (tstc()) {
                        while ((ch = getc()) != '\n' && ch != '\r') {
index 72a6df4552d95f69bd3fd93691481fdfcfaabf58..4669d22281e40756c52560fc90c4d5972e8855d3 100644 (file)
@@ -3,18 +3,6 @@
 #
 # Paul Mackerras       January 1997
 
-# PowerPC (cross) tools
-ifneq ($(shell uname -m),ppc)
-CROSS_COMPILE  =powerpc-eabi-
-endif
-
-
-# PowerPC (cross) tools
-ifneq ($(shell uname -m),ppc)
-#CROSS_COMPILE         =powerpc-eabi-
-CROSS_COMPILE  =ppc-linux-elf-
-endif
-
 HOSTCC = gcc
 HOSTCFLAGS = -O -I$(TOPDIR)/include
 
index 916af99f149ca7dbc59b2ca1013c5e1abe712a0f..4a5ea33d918c24002069a364f3a60ef499cd2146 100644 (file)
@@ -45,7 +45,7 @@ CONFIG_ADBMOUSE=y
 CONFIG_BLK_DEV_IDE_PMAC=y
 CONFIG_PROC_DEVICETREE=y
 # CONFIG_KGDB is not set
-CONFIG_XMON=y
+# CONFIG_XMON is not set
 # CONFIG_TOTALMP is not set
 # CONFIG_BOOTX_TEXT is not set
 
@@ -188,6 +188,7 @@ CONFIG_BMAC=y
 # CONFIG_NET_VENDOR_RACAL is not set
 # CONFIG_RTL8139 is not set
 # CONFIG_YELLOWFIN is not set
+# CONFIG_ACENIC is not set
 # CONFIG_NET_ISA is not set
 CONFIG_NET_EISA=y
 CONFIG_PCNET32=m
@@ -239,10 +240,22 @@ CONFIG_SLIP=m
 # Console drivers
 #
 CONFIG_DUMMY_CONSOLE=y
-# CONFIG_FB_OF is not set
+CONFIG_FB_OF=y
+# CONFIG_FB_CONTROL is not set
+# CONFIG_FB_PLATINUM is not set
+# CONFIG_FB_VALKYRIE is not set
+CONFIG_FB_ATY=y
+CONFIG_FB_IMSTT=y
+# CONFIG_FB_CT65550 is not set
+# CONFIG_FB_S3TRIO is not set
 # CONFIG_FB_MATROX is not set
+CONFIG_FB_ATY=y
 # CONFIG_FB_VIRTUAL is not set
 # CONFIG_FBCON_ADVANCED is not set
+CONFIG_FBCON_CFB8=y
+CONFIG_FBCON_CFB16=y
+CONFIG_FBCON_CFB24=y
+CONFIG_FBCON_CFB32=y
 # CONFIG_FBCON_FONTWIDTH8_ONLY is not set
 # CONFIG_FBCON_FONTS is not set
 CONFIG_FONT_8x8=y
@@ -290,12 +303,13 @@ CONFIG_MSDOS_FS=m
 # CONFIG_VFAT_FS is not set
 CONFIG_PROC_FS=y
 CONFIG_NFS_FS=y
-CONFIG_NFSD=y
+CONFIG_NFSD=m
 # CONFIG_NFSD_SUN is not set
 CONFIG_SUNRPC=y
 CONFIG_LOCKD=y
 # CONFIG_CODA_FS is not set
 # CONFIG_SMB_FS is not set
+# CONFIG_NCP_FS is not set
 # CONFIG_HPFS_FS is not set
 # CONFIG_NTFS_FS is not set
 # CONFIG_SYSV_FS is not set
index 0378a8e4b97c08abfeed7ebd98c295b58f605711..59223a45c46298f1d11011e9924440e712418ab1 100644 (file)
@@ -22,9 +22,6 @@ choice 'Machine Type' \
 if [ "$CONFIG_ALL_PPC" != "y" ];then
   define_bool CONFIG_MACH_SPECIFIC y
 fi
-
-bool 'Symmetric multi-processing support' CONFIG_SMP
-
 endmenu
 
 if [ "$CONFIG_MBX" = "y" ];then
index b0c9ad966f43a59294165cb2ef9ffb7e4b744a48..ae1303bb481341402a58e810ef41997c3a629da6 100644 (file)
@@ -14,7 +14,6 @@ CONFIG_PMAC=y
 # CONFIG_ALL_PPC is not set
 # CONFIG_APUS is not set
 # CONFIG_MBX is not set
-# CONFIG_SMP is not set
 CONFIG_MACH_SPECIFIC=y
 
 #
index be0d214776b9c7bb725ca54fed700d52b50ddf39..0914879f5607dd499478284bb07cefe18ddbba0c 100644 (file)
@@ -15,8 +15,7 @@ OX_OBJS := ppc_ksyms.o setup.o
 
 
 O_OBJS := traps.o irq.o idle.o time.o process.o signal.o syscalls.o misc.o \
-         bitops.o ptrace.o align.o ppc_htab.o feature.o
-
+         bitops.o ptrace.o align.o ppc_htab.o
 ifdef CONFIG_PCI
 O_OBJS += pci.o
 endif
@@ -33,15 +32,17 @@ else
 ifeq ($(CONFIG_APUS),y)
 O_OBJS += apus_setup.o prom.o openpic.o
 else
+ifneq ($(CONFIG_MBX),y)
 O_OBJS += prep_time.o pmac_time.o chrp_time.o \
          pmac_setup.o pmac_support.o \
          prep_pci.o pmac_pci.o chrp_pci.o \
-         residual.o prom.o openpic.o
+         residual.o prom.o openpic.o feature.o
 OX_OBJS += chrp_setup.o prep_setup.o
 endif
 endif
+endif
 
-ifdef CONFIG_SMP
+ifdef SMP
 O_OBJS += smp.o
 endif
 
index 93c2fe2d172eacc08e1bb09b6dfb0a9d20f95eef..c3a81ad3e8361e8ff81b685193b6f371eac1008d 100644 (file)
@@ -329,9 +329,9 @@ unsigned long mm_ptov (unsigned long paddr)
                int i;
 
                for (i = 0; i < kmap_chunk_count;){
-                       unsigned long virt = kmap_chunks[i++];
-                       unsigned long size = kmap_chunks[i++];
                        unsigned long phys = kmap_chunks[i++];
+                       unsigned long size = kmap_chunks[i++];
+                       unsigned long virt = kmap_chunks[i++];
                        if (paddr >= phys
                            && paddr < (phys + size)){
                                ret = virt + paddr - phys;
index 4c528beb88dd3a98b056890280e90038e7252c39..4374b30d5c4133fb5d2dfe768cabca5d05820ca6 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  arch/ppc/kernel/head.S
  *
- *  $Id: head.S,v 1.111 1998/11/10 01:10:32 paulus Exp $
+ *  $Id: head.S,v 1.113 1998/12/02 18:41:00 cort Exp $
  *
  *  PowerPC version 
  *    Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
@@ -148,6 +148,10 @@ _start:
  *  r4: virtual address of boot_infos_t
  *  r5: 0
  *
+ * APUS
+ *   r3: 'APUS'
+ *   Linux/m68k style BootInfo structure at &_end.
+ *
  * PREP
  * This is jumped to on prep systems right after the kernel is relocated
  * to its proper place in memory by the boot loader.  The expected layout
@@ -1204,9 +1208,23 @@ stack_ovf:
 Hash_base = 0x180000
 Hash_bits = 12                         /* e.g. 256kB hash table */
 Hash_msk = (((1 << Hash_bits) - 1) * 64)
-
+       
+       .globl  hash_table_lock
+hash_table_lock:
+.long  0
+       
        .globl  hash_page
 hash_page:
+#ifdef __SMP__
+       lis     r2,hash_table_lock@h
+       ori     r2,r2,hash_table_lock@l
+       tophys(r2,r2,r6)
+10:    lwarx   r6,0,r2
+       stwcx.  r2,0,r2
+       bne-    10b
+       cmpi    0,0,r6,0
+       bne     10b
+#endif
        /* Get PTE (linux-style) and check access */
        lwz     r5,PG_TABLES(r5)                
        tophys(r5,r5,r2)                /* convert to phys addr */
@@ -1379,6 +1397,13 @@ found_slot:
        mtcrf   0xff,r3
        mtlr    r4
        mtctr   r5
+#ifdef __SMP__
+       lis     r2,hash_table_lock@h
+       ori     r2,r2,hash_table_lock@l
+       tophys(r2,r2,r6)
+       li      r6,0
+       stw     r6,0(r2)
+#endif         
        REST_GPR(0, r21)
        REST_2GPRS(1, r21)
        REST_4GPRS(3, r21)
@@ -1392,6 +1417,13 @@ found_slot:
        rfi
        
 hash_page_out:
+#ifdef __SMP__
+       lis     r2,hash_table_lock@h
+       ori     r2,r2,hash_table_lock@l
+       tophys(r2,r2,r6)
+       li      r6,0
+       stw     r6,0(r2)
+#endif         
        blr
 next_slot:
        .long   0
@@ -2195,6 +2227,15 @@ _GLOBAL(flush_page_to_ram)
  */
 #ifndef CONFIG_8xx     
 _GLOBAL(flush_hash_segments)
+#ifdef __SMP__
+       lis     r9,hash_table_lock@h
+       ori     r9,r9,hash_table_lock@l
+10:    lwarx   r6,0,r9
+       stwcx.  r9,0,r9
+       bne-    10b
+       cmpi    0,0,r6,0
+       bne     10b
+#endif
 #ifdef NO_RELOAD_HTAB
 /*
  * Bitmask of PVR numbers of 603-like chips,
@@ -2231,6 +2272,12 @@ _GLOBAL(flush_hash_segments)
        sync
 99:    tlbia
        isync
+#ifdef __SMP__
+       lis     r3,hash_table_lock@h
+       ori     r3,r3,hash_table_lock@l
+       li      r6,0
+       stw     r6,0(r3)
+#endif         
        blr
 
 /*
@@ -2239,6 +2286,15 @@ _GLOBAL(flush_hash_segments)
  * flush_hash_page(unsigned context, unsigned long va)
  */
 _GLOBAL(flush_hash_page)
+#ifdef __SMP__
+       lis     r9,hash_table_lock@h
+       ori     r9,r9,hash_table_lock@l
+10:    lwarx   r6,0,r9
+       stwcx.  r9,0,r9
+       bne-    10b
+       cmpi    0,0,r6,0
+       bne     10b
+#endif
 #ifdef NO_RELOAD_HTAB
        mfspr   r0,PVR
        rlwinm  r0,r0,16,27,31
@@ -2280,6 +2336,12 @@ _GLOBAL(flush_hash_page)
 4:     sync
 99:    tlbie   r4                      /* in hw tlb too */
        isync
+#ifdef __SMP__
+       lis     r3,hash_table_lock@h
+       ori     r3,r3,hash_table_lock@l
+       li      r6,0
+       stw     r6,0(r3)
+#endif         
        blr
 #endif /* CONFIG_8xx */
 /*
index a180e5f0a781eb004d22707998e14e577fea2d54..ccc5b466cb97fb7828dff7311f6d0bbe2541a948 100644 (file)
@@ -1,4 +1,6 @@
 /*
+ * $Id: irq.c,v 1.90 1998/12/10 02:39:46 cort Exp $
+ *
  *  arch/ppc/kernel/irq.c
  *
  *  Derived from arch/i386/kernel/irq.c
@@ -6,6 +8,7 @@
  *  Adapted from arch/i386 by Gary Thomas
  *    Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
  *  Updated and modified by Cort Dougan (cort@cs.nmt.edu)
+ *    Copyright (C) 1996 Cort Dougan
  *  Adapted for Power Macintosh by Paul Mackerras
  *    Copyright (C) 1996 Paul Mackerras (paulus@cs.anu.edu.au)
  *  Amiga/APUS changes by Jesper Skov (jskov@cygnus.co.uk).
@@ -309,14 +312,14 @@ static void __openfirmware chrp_unmask_irq(unsigned int irq_nr)
 static void mbx_mask_irq(unsigned int irq_nr)
 {
        cached_irq_mask[0] &= ~(1 << (31-irq_nr));
-       ((immap_t *)MBX_IMAP_ADDR)->im_siu_conf.sc_simask =
+       ((immap_t *)IMAP_ADDR)->im_siu_conf.sc_simask =
                                                        cached_irq_mask[0];
 }
 
 static void mbx_unmask_irq(unsigned int irq_nr)
 {
        cached_irq_mask[0] |= (1 << (31-irq_nr));
-       ((immap_t *)MBX_IMAP_ADDR)->im_siu_conf.sc_simask =
+       ((immap_t *)IMAP_ADDR)->im_siu_conf.sc_simask =
                                                        cached_irq_mask[0];
 }
 #endif /* CONFIG_8xx */
@@ -799,9 +802,13 @@ apus_out:
        }
 
        if (irq < 0) {
-               printk(KERN_DEBUG "Bogus interrupt %d from PC = %lx\n",
-                      irq, regs->nip);
-               spurious_interrupts++;
+               /* we get here with Gatwick but the 'bogus' isn't correct in that case -- Cort */
+               if ( irq != second_irq )
+               {
+                       printk(KERN_DEBUG "Bogus interrupt %d from PC = %lx\n",
+                              irq, regs->nip);
+                       spurious_interrupts++;
+               }
                goto out;
        }                                       
        
@@ -809,7 +816,7 @@ apus_out:
        /* For MPC8xx, read the SIVEC register and shift the bits down
         * to get the irq number.
         */
-       bits = ((immap_t *)MBX_IMAP_ADDR)->im_siu_conf.sc_sivec;
+       bits = ((immap_t *)IMAP_ADDR)->im_siu_conf.sc_sivec;
        irq = bits >> 26;
 #endif /* CONFIG_8xx */
        mask_and_ack_irq(irq);
@@ -1089,17 +1096,6 @@ __initfunc(void init_IRQ(void))
                         */
                        if ( _prep_type == _PREP_IBM )
                                irq_mode2 |= 0xa0;
-                       /*
-                        * Sound on the Powerstack reportedly needs to be edge triggered
-                        */
-                       if ( _prep_type == _PREP_Motorola )
-                       {
-                               irq_mode2 &= ~0x04L;
-                               irq_mode2 = 0xca;
-                               outb( irq_mode1 , 0x4d0 );
-                               outb( irq_mode2 , 0x4d1 );
-                       }
-
                }
                break;
 #ifdef CONFIG_APUS             
@@ -1116,8 +1112,7 @@ __initfunc(void init_IRQ(void))
 /* This routine will fix some missing interrupt values in the device tree
  * on the gatwick mac-io controller used by some PowerBooks
  */
-__pmac
-static void pmac_fix_gatwick_interrupts(struct device_node *gw, int irq_base)
+static void __init pmac_fix_gatwick_interrupts(struct device_node *gw, int irq_base)
 {
        struct device_node *node;
        static struct interrupt_info int_pool[4];
index 9d26e27d144d16784e5b93bb9b6bd4b219d93c9e..30cd01a860b6f4a3e6bb39877b81a9fd4faf78d5 100644 (file)
@@ -1,4 +1,6 @@
 /*
+ * $Id: mbx_setup.c,v 1.4 1998/11/15 19:58:55 cort Exp $
+ *
  *  linux/arch/ppc/kernel/setup.c
  *
  *  Copyright (C) 1995  Linus Torvalds
@@ -51,10 +53,17 @@ extern int rd_image_start;  /* starting block # of image */
 extern char saved_command_line[256];
 
 extern unsigned long find_available_memory(void);
-extern void mbx_cpm_reset(uint);
+extern void m8xx_cpm_reset(uint);
 
+/* this really does make things cleaner -- Cort */
+void __init powermac_init(void)
+{
+}
+void __init adbdev_init(void)
+{
+}
 
-void mbx_ide_init_hwif_ports(ide_ioreg_t *p, ide_ioreg_t base, int *irq)
+void __init mbx_ide_init_hwif_ports(ide_ioreg_t *p, ide_ioreg_t base, int *irq)
 {
 
        *p = 0;
@@ -88,7 +97,7 @@ mbx_setup_arch(unsigned long * memory_start_p, unsigned long * memory_end_p))
 
        /* Reset the Communication Processor Module.
        */
-       mbx_cpm_reset(cpm_page);
+       m8xx_cpm_reset(cpm_page);
 
 #ifdef notdef
        ROOT_DEV = to_kdev_t(0x0301); /* hda1 */
index f13508d96b33100d13b7e166199599b7feb117ef..383015cf636705e11a2b0df39c95fd7b0ceeda34 100644 (file)
@@ -383,6 +383,177 @@ _GLOBAL(_set_THRM3)
        mtspr   THRM3,r3
        blr
        
+_GLOBAL(_get_PVR)
+       mfspr   r3,PVR
+       blr
+/*
+       L2CR functions
+       Copyright Â© 1997-1998 by PowerLogix R & D, Inc.
+       
+       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., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+/*
+       Thur, Dec. 12, 1998.
+       - First public release, contributed by PowerLogix.
+       
+       Author: Terry Greeniaus (tgree@phys.ualberta.ca)
+       Please e-mail updates to this file to me, thanks!
+*/
+
+_GLOBAL(_set_L2CR)
+       /* Usage:
+       
+               When setting the L2CR register, you must do a few special things.  If you are enabling the
+               cache, you must perform a global invalidate.  If you are disabling the cache, you must
+               flush the cache contents first.  This routine takes care of doing these things.  When first
+               enabling the cache, make sure you pass in the L2CR you want, as well as passing in the
+               global invalidate bit set.  A global invalidate will only be performed if the L2I bit is set
+               in applyThis.  When enabling the cache, you should also set the L2E bit in applyThis.  If you
+               want to modify the L2CR contents after the cache has been enabled, the recommended
+               procedure is to first call __setL2CR(0) to disable the cache and then call it again with
+               the new values for L2CR.  Examples:
+       
+                       _setL2CR(0)                     -       disables the cache
+                       _setL2CR(0xB3A04000)            -       enables my G3 upgrade card:
+                                                       -       L2E set to turn on the cache
+                                                       -       L2SIZ set to 1MB
+                                                       -       L2CLK set to 1:1
+                                                       -       L2RAM set to pipelined syncronous late-write
+                                                       -       L2I set to perform a global invalidation
+                                                       -       L2OH set to 0.5 nS
+                                                       -       L2DF set because this upgrade card requires it
+       
+               A similar call should work for your card.  You need to know the correct setting for your
+               card and then place them in the fields I have outlined above.  Other fields support optional
+               features, such as L2DO which caches only data, or L2TS which causes cache pushes from
+               the L1 cache to go to the L2 cache instead of to main memory.
+       */
+       
+       /* Make sure this is a 750 chip */
+       mfspr   r4,PVR
+       rlwinm  r4,r4,16,16,31
+       cmplwi  r4,0x0008
+       beq     thisIs750
+       li      r3,-1
+       blr
+       
+thisIs750:
+       /* Get the current enable bit of the L2CR into r4 */
+       mfspr   r4,L2CR
+       rlwinm  r4,r4,0,0,0
+       
+       /* See if we want to perform a global inval this time. */
+       rlwinm  r6,r3,0,10,10           /* r6 contains the new invalidate bit */
+       rlwinm. r5,r3,0,0,0             /* r5 contains the new enable bit */
+       rlwinm  r3,r3,0,11,9            /* Turn off the invalidate bit */
+       rlwinm  r3,r3,0,1,31            /* Turn off the enable bit */
+       or      r3,r3,r4                /* Keep the enable bit the same as it was for now. */
+       bne     dontDisableCache        /* Only disable the cache if L2CRApply has the enable bit off */
+
+disableCache:
+       /* Disable the cache.  First, we turn off data relocation. */
+       mfmsr   r7
+       rlwinm  r4,r7,0,28,26           /* Turn off DR bit */
+       rlwinm  r4,r4,0,17,15           /* Turn off EE bit - an external exception while we are flushing
+                                          the cache is fatal (comment this line and see!) */
+       sync
+       mtmsr   r4
+       sync
+       
+       /*
+               Now, read the first 2MB of memory to put new data in the cache.
+               (Actually we only need the size of the L2 cache plus
+               the size of the L1 cache, but 2MB will cover everything just to be safe).
+       */
+       lis     r4,0x0001
+       mtctr   r4
+       li      r4,0
+loadLoop:
+       lwzx    r0,r0,r4
+       addi    r4,r4,0x0020            /* Go to start of next cache line */
+       bdnz    loadLoop
+       
+       /* Now, flush the first 2MB of memory */
+       lis     r4,0x0001
+       mtctr   r4
+       li      r4,0
+       sync
+flushLoop:
+       dcbf    r0,r4
+       addi    r4,r4,0x0020    /* Go to start of next cache line */
+       bdnz    flushLoop
+       
+       /* Turn off the L2CR enable bit. */
+       rlwinm  r3,r3,0,1,31
+       
+       /* Reenable data relocation. */
+       sync
+       mtmsr   r7
+       sync
+       
+dontDisableCache:
+       /* Set up the L2CR configuration bits */
+       sync
+       mtspr   L2CR,r3
+       sync
+       cmplwi  r6,0
+       beq     noInval
+       
+       /* Perform a global invalidation */
+       oris    r3,r3,0x0020
+       sync
+       mtspr   1017,r3
+       sync
+invalCompleteLoop:                     /* Wait for the invalidation to complete */
+       mfspr   r3,1017
+       rlwinm. r4,r3,0,31,31
+       bne     invalCompleteLoop
+       
+       rlwinm  r3,r3,0,11,9;           /* Turn off the L2I bit */
+       sync
+       mtspr   L2CR,r3
+       sync
+       
+noInval:
+       /* See if we need to enable the cache */
+       cmplwi  r5,0
+       beqlr
+       
+enableCache:
+       /* Enable the cache */
+       oris    r3,r3,0x8000
+       mtspr   L2CR,r3
+       sync
+       blr
+
+_GLOBAL(_get_L2CR)
+       /* Make sure this is a 750 chip */
+       mfspr   r3,PVR
+       rlwinm  r3,r3,16,16,31
+       cmplwi  r3,0x0008
+       li      r3,0
+       bnelr
+       
+       /* Return the L2CR contents */
+       mfspr   r3,L2CR
+       blr
+
+/* --- End of PowerLogix code ---
+ */
+
+/*
 _GLOBAL(_get_L2CR)
        mfspr   r3,L2CR
        blr
@@ -391,9 +562,7 @@ _GLOBAL(_set_L2CR)
        mtspr   L2CR,r3
        blr
                
-_GLOBAL(_get_PVR)
-       mfspr   r3,PVR
-       blr
+*/
 
 /*
  * These are used in the alignment trap handler when emulating
index 359446f4fecd0b99d47936b29ae8c29d33c5fb5e..197e8344113a2505e9fe1c86ec799026b9ebe4b5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: pci.c,v 1.39 1998/10/13 20:59:04 cort Exp $
+ * $Id: pci.c,v 1.42 1998/12/04 14:31:37 cort Exp $
  * Common pmac/prep/chrp pci routines. -- Cort
  */
 
@@ -188,13 +188,7 @@ __initfunc(void pcibios_fixup(void))
        extern struct bridge_data **bridges;
        extern unsigned char *Motherboard_map;
        extern unsigned char *Motherboard_routes;
-       
-       /*
-        * FIXME: This is broken: We should not assign IRQ's to IRQless
-        *        devices (look at PCI_INTERRUPT_PIN) and we also should
-        *        honor the existence of multi-function devices where
-        *        different functions have different interrupt pins. [mj]
-        */
+#ifndef CONFIG_MBX
        switch (_machine )
        {
        case _MACH_prep:
@@ -206,8 +200,23 @@ __initfunc(void pcibios_fixup(void))
                         * irq this device uses.  This is necessary on things
                         * without residual data. -- Cort
                         */
-                       unsigned char d = PCI_SLOT(dev->devfn);
+                       unsigned char d = PCI_SLOT(dev->devfn), i;
                        dev->irq = Motherboard_routes[Motherboard_map[d]];
+                       for ( i = 0 ; i <= 5 ; i++ )
+                       {
+                               if ( dev->base_address[i] > 0x10000000 )
+                               {
+                                       printk("Relocating PCI address %x -> %x\n",
+                                              dev->base_address[i],
+                                              (dev->base_address[i] & 0x00FFFFFF)
+                                              | 0x01000000);
+                                       dev->base_address[i] =
+                                         (dev->base_address[i] & 0x00FFFFFF) | 0x01000000;
+                                       pci_write_config_dword(dev,
+                                               PCI_BASE_ADDRESS_0+(i*0x4),
+                                               dev->base_address[i] );
+                               }
+                       }
 #if 0                  
                        /*
                         * If we have residual data and if it knows about this
@@ -255,6 +264,11 @@ __initfunc(void pcibios_fixup(void))
                }
                break;
        }
+#else /* CONFIG_MBX */
+       for(dev=pci_devices; dev; dev=dev->next)
+       {
+       }
+#endif /* CONFIG_MBX */
 }
 
 __initfunc(void pcibios_fixup_bus(struct pci_bus *bus))
index 3aa0534eaf02ff1e6022800f7fe13e54dccf160a..30123c07653c77b24aa24b4c17640566a88581b9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: ppc_htab.c,v 1.25 1998/08/26 10:28:26 davem Exp $
+ * $Id: ppc_htab.c,v 1.26 1998/12/10 00:24:23 cort Exp $
  *
  * PowerPC hash table management proc entry.  Will show information
  * about the current hash table and will allow changes to it.
@@ -569,6 +569,7 @@ int proc_dol2crvec(ctl_table *table, int write, struct file *filp,
                                break;
                        buffer += len;
                        left -= len;
+                       _set_L2CR(0);
                        _set_L2CR(val);
                        while ( _get_L2CR() & 0x1 )
                                /* wait for invalidate to finish */;
index ea5f6db0d6a0c0d3431d40f8a9c318924b55c939..54db1f38161abefa3183adc2860ab2a7f4abe508 100644 (file)
@@ -185,7 +185,9 @@ EXPORT_SYMBOL(pci_device_loc);
 EXPORT_SYMBOL(feature_set);
 EXPORT_SYMBOL(feature_clear);
 EXPORT_SYMBOL(feature_test);
+#ifdef CONFIG_SCSI
 EXPORT_SYMBOL(note_scsi_host);
+#endif
 EXPORT_SYMBOL(kd_mksound);
 #ifdef CONFIG_PMAC
 EXPORT_SYMBOL(nvram_read_byte);
index b7d94d2086da67c4210cd227e4d6744e2d962d62..b48f7a1fc00fb0b8b82d488586196372196f7407 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: prep_pci.c,v 1.23 1998/10/21 10:52:24 cort Exp $
+ * $Id: prep_pci.c,v 1.24 1998/12/10 02:39:51 cort Exp $
  * PReP pci functions.
  * Originally by Gary Thomas
  * rewritten and updated by Cort Dougan (cort@cs.nmt.edu)
@@ -107,7 +107,7 @@ static char Omaha_pci_IRQ_routes[] __prepdata =
 };
 
 /* Motorola PowerStack */
-static char Blackhawk_pci_IRQ_map[16] __prepdata =
+static char Blackhawk_pci_IRQ_map[19] __prepdata =
 {
        0,      /* Slot 0  - unused */
        0,      /* Slot 1  - unused */
@@ -125,6 +125,9 @@ static char Blackhawk_pci_IRQ_map[16] __prepdata =
        0,      /* Slot 13 - unused */
        1,      /* Slot 14 - Ethernet */
        0,      /* Slot 15 - unused */
+       1,      /* Slot P7 */
+       2,      /* Slot P6 */
+       3,      /* Slot P5 */
 };
 
 static char Blackhawk_pci_IRQ_routes[] __prepdata =
@@ -132,7 +135,7 @@ static char Blackhawk_pci_IRQ_routes[] __prepdata =
        0,      /* Line 0 - Unused */
        9,      /* Line 1 */
        11,     /* Line 2 */
-       14,     /* Line 3 */
+       15,     /* Line 3 */
        15      /* Line 4 */
 };
    
@@ -226,6 +229,7 @@ static char ibm8xx_pci_IRQ_map[23] __prepdata = {
         0, /* Slot 21 - unused */
         2, /* Slot 22 - PCI slot 1 PCIINTx# (See below) */
 };
+
 static char ibm8xx_pci_IRQ_routes[] __prepdata = {
         0,      /* Line 0 - unused */
         13,     /* Line 1 */
@@ -440,6 +444,8 @@ __initfunc(unsigned long route_pci_interrupts(void))
        
        if ( _prep_type == _PREP_Motorola)
        {
+               unsigned short irq_mode;
+
                switch (inb(0x800) & 0xF0)
                {
                case 0x10: /* MVME16xx */
@@ -474,6 +480,14 @@ __initfunc(unsigned long route_pci_interrupts(void))
                        Motherboard_routes = Blackhawk_pci_IRQ_routes;
                        break;
                }
+               /* AJF adjust level/edge control according to routes */
+               irq_mode = 0;
+               for (i = 1;  i <= 4;  i++)
+               {
+                       irq_mode |= ( 1 << Motherboard_routes[i] );
+               }
+               outb( irq_mode & 0xff, 0x4d0 );
+               outb( (irq_mode >> 8) & 0xff, 0x4d1 );
        } else if ( _prep_type == _PREP_IBM )
        {
                unsigned char pl_id;
index e596f9ea50866c1b9eab15c7f9efe423604d2446..72752e11fe73329d3924295b93b6cd2211ab3af1 100644 (file)
@@ -189,11 +189,6 @@ prep_setup_arch(unsigned long * memory_start_p, unsigned long * memory_end_p))
        /* Enable L2.  Assume we don't need to flush -- Cort*/
        *(unsigned char *)(0x8000081c) = *(unsigned char *)(0x8000081c)|3;
        
-       /* make the serial port the console */
-       /* strcat(cmd_line,"console=ttyS0,9600n8"); */
-       /* use the normal console but send output to the serial port, too */
-       /*strcat(cmd_line,"console=tty0 console=ttyS0,9600n8");*/
-        sprintf(cmd_line,"%s console=tty0 console=ttyS0,9600n8", cmd_line);
        printk("Boot arguments: %s\n", cmd_line);
        
 #ifdef CONFIG_SOUND_CS4232
index 5ea55cee9200aa4af2bdec73cd70535d2afd8ef5..11d72054a0d1c9bbe40eef42b41131b7244620d1 100644 (file)
@@ -1,4 +1,6 @@
 /*
+ * $Id: process.c,v 1.68 1998/11/15 19:59:02 cort Exp $
+ *
  *  linux/arch/ppc/kernel/process.c
  *
  *  Derived from "arch/i386/kernel/process.c"
@@ -450,6 +452,7 @@ print_backtrace(unsigned long *sp)
        printk("\n");
 }
 
+#if 0
 /*
  * Low level print for debugging - Cort
  */
@@ -537,3 +540,4 @@ __initfunc(void ll_puts(const char *s))
        orig_x = x;
        orig_y = y;
 }
+#endif
index 706c1dde2f2a53fd7375a8f72b8b281777908818..b52f6d92b1c462cc904baf6691c4875b121d9514 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: setup.c,v 1.117 1998/11/09 19:55:53 geert Exp $
+ * $Id: setup.c,v 1.120 1998/12/10 00:24:28 cort Exp $
  * Common prep/pmac/chrp boot and setup code.
  */
 
@@ -35,7 +35,7 @@ extern unsigned long m68k_machtype;
 extern int parse_bootinfo(const struct bi_record *);
 extern char _end[];
 #ifdef CONFIG_APUS
-struct mem_info ramdisk;
+extern struct mem_info ramdisk;
 unsigned long isa_io_base;
 unsigned long isa_mem_base;
 unsigned long pci_dram_offset;
@@ -665,7 +665,7 @@ identify_machine(unsigned long r3, unsigned long r4, unsigned long r5,
 #else /* CONFIG_MBX */
 
        if ( r3 )
-               memcpy( (void *)&res,(void *)(r3+KERNELBASE), sizeof(bd_t) );
+               memcpy( (void *)res,(void *)(r3+KERNELBASE), sizeof(bd_t) );
        
 #ifdef CONFIG_PCI
        setup_pci_ptrs();
@@ -693,9 +693,22 @@ identify_machine(unsigned long r3, unsigned long r4, unsigned long r5,
                extern int __map_without_bats;
                __map_without_bats = 1;
        }
+       
        return 0;
 }
 
+/* Checks "l2cr=xxxx" command-line option */
+void ppc_setup_l2cr(char *str, int *ints)
+{
+       if ( (_get_PVR() >> 16) == 8)
+       {
+               unsigned long val = simple_strtoul(str, NULL, 0);
+               printk(KERN_INFO "l2cr set to %lx\n", val);
+               _set_L2CR(0);
+               _set_L2CR(val);
+       }
+}
+
 __initfunc(void setup_arch(char **cmdline_p,
        unsigned long * memory_start_p, unsigned long * memory_end_p))
 {
index 75445925f83c91531dde841d53548ef920f2a5e9..e6dca0e806d5c7c8de68d8761074a1ef781d94ea 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: smp.c,v 1.36 1998/10/08 01:17:48 cort Exp $
+ * $Id: smp.c,v 1.38 1998/12/02 21:23:49 cort Exp $
  *
  * Smp support for ppc.
  *
@@ -152,7 +152,7 @@ void smp_message_pass(int target, int msg, unsigned long data, int wait)
 {
        if ( _machine != _MACH_Pmac )
                return;
-       /*printk("SMP %d: sending smp message\n", current->processor);*/
+printk("SMP %d: sending smp message %x\n", current->processor, msg);
 if (smp_processor_id() ) printk("pass from cpu 1\n");
        spin_lock(&mesg_pass_lock);
 #define OTHER (~smp_processor_id() & 1)
@@ -179,7 +179,7 @@ if (smp_processor_id() ) printk("pass from cpu 1\n");
        spin_unlock(&mesg_pass_lock);   
 }
 
-__initfunc(void smp_boot_cpus(void))
+void __init smp_boot_cpus(void)
 {
        extern struct task_struct *current_set[NR_CPUS];
        extern void __secondary_start(void);
@@ -251,19 +251,17 @@ __initfunc(void smp_boot_cpus(void))
        smp_message_pass(1,0xf0f0, 0, 0);
 }
 
-__initfunc(void smp_commence(void))
+void __init smp_commence(void)
 {
        printk("SMP %d: smp_commence()\n",current->processor);
        /*
         *      Lets the callin's below out of their loop.
         */
-       local_flush_tlb_all();
        smp_commenced = 1;
-       local_flush_tlb_all();
 }
 
 /* intel needs this */
-__initfunc(void initialize_secondary(void))
+void __init initialize_secondary(void)
 {
 }
 
@@ -275,33 +273,33 @@ asmlinkage int __init start_secondary(void *unused)
        return cpu_idle(NULL);
 }
 
-__initfunc(void smp_callin(void))
+void __init smp_callin(void)
 {
        printk("SMP %d: smp_callin()\n",current->processor);
         smp_store_cpu_info(current->processor);
        set_dec(decrementer_count);
-       
+#if 0
        current->mm->mmap->vm_page_prot = PAGE_SHARED;
        current->mm->mmap->vm_start = PAGE_OFFSET;
        current->mm->mmap->vm_end = init_task.mm->mmap->vm_end;
-
-       cpu_callin_map[current->processor] = current->processor;
+#endif
+       cpu_callin_map[current->processor] = 1;
        while(!smp_commenced)
                barrier();
        __sti();
 }
 
-__initfunc(void smp_setup(char *str, int *ints))
+void __init smp_setup(char *str, int *ints)
 {
        printk("SMP %d: smp_setup()\n",current->processor);
 }
 
-__initfunc(int setup_profiling_timer(unsigned int multiplier))
+int __init setup_profiling_timer(unsigned int multiplier)
 {
        return 0;
 }
 
-__initfunc(void smp_store_cpu_info(int id))
+void __init smp_store_cpu_info(int id)
 {
         struct cpuinfo_PPC *c = &cpu_data[id];
 
index 8bada0e6961ae57e3bd4c71f8a276fc5426b08d6..0842f52fbe038e3390b71fb6785615e0fe63f39b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: time.c,v 1.36 1998/10/10 12:16:08 geert Exp $
+ * $Id: time.c,v 1.38 1998/11/16 15:56:15 cort Exp $
  * Common time routines among all ppc machines.
  *
  * Written by Cort Dougan (cort@cs.nmt.edu) to merge
@@ -133,9 +133,9 @@ void timebase_interrupt(int irq, void * dev, struct pt_regs * regs)
 static int
 mbx_set_rtc_time(unsigned long time)
 {
-       ((immap_t *)MBX_IMAP_ADDR)->im_sitk.sitk_rtck = KAPWR_KEY;
-       ((immap_t *)MBX_IMAP_ADDR)->im_sit.sit_rtc = time;
-       ((immap_t *)MBX_IMAP_ADDR)->im_sitk.sitk_rtck = ~KAPWR_KEY;
+       ((immap_t *)IMAP_ADDR)->im_sitk.sitk_rtck = KAPWR_KEY;
+       ((immap_t *)IMAP_ADDR)->im_sit.sit_rtc = time;
+       ((immap_t *)IMAP_ADDR)->im_sitk.sitk_rtck = ~KAPWR_KEY;
        return(0);
 }
 #endif /* CONFIG_MBX */
@@ -227,13 +227,13 @@ __initfunc(void time_init(void))
         * modify these registers we have to write the key value to
         * the key location associated with the register.
         */
-       ((immap_t *)MBX_IMAP_ADDR)->im_sitk.sitk_tbscrk = KAPWR_KEY;
-       ((immap_t *)MBX_IMAP_ADDR)->im_sitk.sitk_rtcsck = KAPWR_KEY;
+       ((immap_t *)IMAP_ADDR)->im_sitk.sitk_tbscrk = KAPWR_KEY;
+       ((immap_t *)IMAP_ADDR)->im_sitk.sitk_rtcsck = KAPWR_KEY;
 
 
        /* Disable the RTC one second and alarm interrupts.
        */
-       ((immap_t *)MBX_IMAP_ADDR)->im_sit.sit_rtcsc &=
+       ((immap_t *)IMAP_ADDR)->im_sit.sit_rtcsc &=
                                                ~(RTCSC_SIE | RTCSC_ALE);
 
        /* Enabling the decrementer also enables the timebase interrupts
@@ -241,7 +241,7 @@ __initfunc(void time_init(void))
         * we have to enable the timebase).  The decrementer interrupt
         * is wired into the vector table, nothing to do here for that.
         */
-       ((immap_t *)MBX_IMAP_ADDR)->im_sit.sit_tbscr =
+       ((immap_t *)IMAP_ADDR)->im_sit.sit_tbscr =
                                ((mk_int_int_mask(DEC_INTERRUPT) << 8) |
                                         (TBSCR_TBF | TBSCR_TBE));
        if (request_irq(DEC_INTERRUPT, timebase_interrupt, 0, "tbint", NULL) != 0)
@@ -249,7 +249,7 @@ __initfunc(void time_init(void))
 
        /* Get time from the RTC.
        */
-       xtime.tv_sec = ((immap_t *)MBX_IMAP_ADDR)->im_sit.sit_rtc;
+       xtime.tv_sec = ((immap_t *)IMAP_ADDR)->im_sit.sit_rtc;
        xtime.tv_usec = 0;
 
 #endif /* CONFIG_MBX */
@@ -343,10 +343,10 @@ __initfunc(void prep_calibrate_decr_handler(int irq, void *dev, struct pt_regs *
  */
 __initfunc(void mbx_calibrate_decr(void))
 {
-       bd_t    *binfo = (bd_t *)&res;
+       bd_t    *binfo = (bd_t *)res;
        int freq, fp, divisor;
 
-       if ((((immap_t *)MBX_IMAP_ADDR)->im_clkrst.car_sccr & 0x02000000) == 0)
+       if ((((immap_t *)IMAP_ADDR)->im_clkrst.car_sccr & 0x02000000) == 0)
                printk("WARNING: Wrong decrementer source clock.\n");
 
        /* The manual says the frequency is in Hz, but it is really
index 8ca9a3cd54666da6937af628910d2a05671e08df..4cc49de17f37bab348d3b7cf87a80b6760641e69 100644 (file)
@@ -8,7 +8,7 @@
 O_TARGET = lib.o
 O_OBJS  = checksum.o string.o strcase.o
 
-ifdef CONFIG_SMP
+ifdef SMP
 O_OBJS += locks.o
 endif
 
index 5a2e7960bc222f9606c55888747c06cd18e30720..4882740c5d9856911bc22cf44c0a9ede5c6ae91e 100644 (file)
@@ -14,16 +14,16 @@ CONFIG_8xx=y
 # CONFIG_ALL_PPC is not set
 # CONFIG_APUS is not set
 CONFIG_MBX=y
-# CONFIG_SMP is not set
-CONFIG_SERIAL_CONSOLE=y
 CONFIG_MACH_SPECIFIC=y
+CONFIG_SERIAL_CONSOLE=y
 
 #
 # General setup
 #
-# CONFIG_EXPERIMENTAL is not set
+CONFIG_EXPERIMENTAL=y
 # CONFIG_MODULES is not set
 CONFIG_PCI=y
+# CONFIG_PCI_QUIRKS is not set
 CONFIG_PCI_OLD_PROC=y
 CONFIG_NET=y
 # CONFIG_SYSCTL is not set
@@ -34,13 +34,19 @@ CONFIG_KERNEL_ELF=y
 # CONFIG_BINFMT_MISC is not set
 # CONFIG_BINFMT_JAVA is not set
 # CONFIG_PARPORT is not set
+# CONFIG_VGA_CONSOLE is not set
+# CONFIG_FB is not set
+# CONFIG_PMAC_PBOOK is not set
 # CONFIG_MAC_KEYBOARD is not set
 # CONFIG_MAC_FLOPPY is not set
 # CONFIG_MAC_SERIAL is not set
+# CONFIG_ADBMOUSE is not set
+# CONFIG_BLK_DEV_IDE_PMAC is not set
 # CONFIG_PROC_DEVICETREE is not set
 # CONFIG_KGDB is not set
 # CONFIG_XMON is not set
-CONFIG_VGA_CONSOLE=y
+# CONFIG_TOTALMP is not set
+# CONFIG_BOOTX_TEXT is not set
 
 #
 # Plug and Play support
@@ -48,7 +54,7 @@ CONFIG_VGA_CONSOLE=y
 # CONFIG_PNP is not set
 
 #
-# Floppy, IDE, and other block devices
+# Block devices
 #
 # CONFIG_BLK_DEV_FD is not set
 # CONFIG_BLK_DEV_IDE is not set
@@ -85,8 +91,19 @@ CONFIG_IP_PNP_BOOTP=y
 # CONFIG_INET_RARP is not set
 CONFIG_IP_NOSR=y
 # CONFIG_SKB_LARGE is not set
+# CONFIG_IPV6 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_LLC is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_FASTROUTE is not set
+# CONFIG_NET_HW_FLOWCONTROL is not set
+# CONFIG_CPU_IS_SLOW is not set
+# CONFIG_NET_SCHED is not set
 
 #
 # SCSI support
@@ -101,22 +118,26 @@ CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_EQUALIZER is not set
 CONFIG_NET_ETHERNET=y
+# CONFIG_MACE is not set
+# CONFIG_BMAC is not set
 # CONFIG_NET_VENDOR_3COM is not set
 # CONFIG_LANCE is not set
 # CONFIG_NET_VENDOR_SMC is not set
 # CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_RTL8139 is not set
+# CONFIG_YELLOWFIN is not set
 # CONFIG_NET_ISA is not set
 # CONFIG_NET_EISA is not set
 # CONFIG_NET_POCKET is not set
 # CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
 # CONFIG_DLCI is not set
 # CONFIG_PPP is not set
 # CONFIG_SLIP is not set
 # CONFIG_NET_RADIO is not set
 # CONFIG_TR is not set
-# CONFIG_WAN_DRIVERS is not set
-# CONFIG_LAPBETHER is not set
-# CONFIG_X25_ASY is not set
+# CONFIG_SHAPER is not set
+# CONFIG_HOSTESS_SV11 is not set
 
 #
 # Amateur Radio support
@@ -133,6 +154,32 @@ CONFIG_NET_ETHERNET=y
 #
 # CONFIG_CD_NO_IDESCSI is not set
 
+#
+# Console drivers
+#
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+CONFIG_SERIAL=y
+CONFIG_SERIAL_CONSOLE=y
+# CONFIG_SERIAL_EXTENDED is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_UNIX98_PTYS is not set
+# CONFIG_MOUSE is not set
+# CONFIG_QIC02_TAPE is not set
+# CONFIG_WATCHDOG is not set
+# CONFIG_RTC is not set
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_NVRAM is not set
+# CONFIG_JOYSTICK is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+
 #
 # Filesystems
 #
@@ -160,30 +207,14 @@ CONFIG_LOCKD=y
 # CONFIG_ROMFS_FS is not set
 # CONFIG_AUTOFS_FS is not set
 # CONFIG_UFS_FS is not set
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_SMD_DISKLABEL is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_ADFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
 # CONFIG_MAC_PARTITION is not set
 # CONFIG_NLS is not set
 
-#
-# Character devices
-#
-# CONFIG_VT is not set
-# CONFIG_SERIAL is not set
-# CONFIG_SERIAL_EXTENDED is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_MOUSE is not set
-# CONFIG_QIC02_TAPE is not set
-# CONFIG_WATCHDOG is not set
-# CONFIG_RTC is not set
-# CONFIG_VIDEO_DEV is not set
-# CONFIG_NVRAM is not set
-# CONFIG_JOYSTICK is not set
-# CONFIG_MISC_RADIO is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_FTAPE is not set
-
 #
 # Sound
 #
index 44104fd4e26ff8052931d73c66b84b5e886bb953..72bffcc5764e1e8429dfc60d65ff59cbb52e1eb2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  $Id: init.c,v 1.130 1998/11/10 10:09:20 paulus Exp $
+ *  $Id: init.c,v 1.138 1998/12/15 17:34:43 cort Exp $
  *
  *  PowerPC version 
  *    Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
@@ -55,7 +55,7 @@
 /* END APUS includes */
 
 int prom_trashed;
-int next_mmu_context;
+atomic_t next_mmu_context;
 unsigned long *end_of_DRAM;
 int mem_init_done;
 extern pgd_t swapper_pg_dir[];
@@ -71,7 +71,8 @@ unsigned long ioremap_base;
 unsigned long ioremap_bot;
 unsigned long avail_start;
 struct pgtable_cache_struct quicklists;
-struct mem_info memory[NUM_MEMINFO];
+extern int num_memory;
+extern struct mem_info memory[NUM_MEMINFO];
 extern boot_infos_t *boot_infos;
 
 void MMU_init(void);
@@ -89,6 +90,27 @@ void map_page(struct task_struct *, unsigned long va,
 extern void die_if_kernel(char *,struct pt_regs *,long);
 extern void show_net_buffers(void);
 
+
+/*
+ * The following stuff defines a data structure for representing
+ * areas of memory as an array of (address, length) pairs, and
+ * procedures for manipulating them.
+ */
+#define MAX_MEM_REGIONS        32
+
+struct mem_pieces {
+       int n_regions;
+       struct reg_property regions[MAX_MEM_REGIONS];
+};
+struct mem_pieces phys_mem;
+struct mem_pieces phys_avail;
+struct mem_pieces prom_mem;
+
+static void remove_mem_piece(struct mem_pieces *, unsigned, unsigned, int);
+void *find_mem_piece(unsigned, unsigned);
+static void print_mem_pieces(struct mem_pieces *);
+static void append_mem_piece(struct mem_pieces *, unsigned, unsigned);
+
 extern struct task_struct *current_set[NR_CPUS];
 
 PTE *Hash, *Hash_end;
@@ -529,37 +551,18 @@ mmu_context_overflow(void)
        }
        read_unlock(&tasklist_lock);
        flush_hash_segments(0x10, 0xffffff);
-       next_mmu_context = 0;
+       atomic_set(&next_mmu_context, 0);
        /* make sure current always has a context */
-       current->mm->context = MUNGE_CONTEXT(++next_mmu_context);
+       current->mm->context = MUNGE_CONTEXT(atomic_inc_return(&next_mmu_context));
        set_context(current->mm->context);
 #else
        /* We set the value to -1 because it is pre-incremented before
         * before use.
         */
-       next_mmu_context = -1;
+       atomic_set(&next_mmu_context, -1);
 #endif
 }
 
-/*
- * The following stuff defines a data structure for representing
- * areas of memory as an array of (address, length) pairs, and
- * procedures for manipulating them.
- */
-#define MAX_MEM_REGIONS        32
-
-struct mem_pieces {
-       int n_regions;
-       struct reg_property regions[MAX_MEM_REGIONS];
-};
-struct mem_pieces phys_mem;
-struct mem_pieces phys_avail;
-struct mem_pieces prom_mem;
-
-static void remove_mem_piece(struct mem_pieces *, unsigned, unsigned, int);
-void *find_mem_piece(unsigned, unsigned);
-static void print_mem_pieces(struct mem_pieces *);
-
 /*
  * Scan a region for a piece of a given size with the required alignment.
  */
@@ -653,14 +656,26 @@ __initfunc(static void print_mem_pieces(struct mem_pieces *mp))
        printk("\n");
 }
 
+/*
+ * Add some memory to an array of pieces
+ */
+__initfunc(static void
+          append_mem_piece(struct mem_pieces *mp, unsigned start, unsigned size))
+{
+       struct reg_property *rp;
 
+       if (mp->n_regions >= MAX_MEM_REGIONS)
+               return;
+       rp = &mp->regions[mp->n_regions++];
+       rp->address = start;
+       rp->size = size;
+}
 
 #ifndef CONFIG_8xx
 static void hash_init(void);
 static void get_mem_prop(char *, struct mem_pieces *);
 static void sort_mem_pieces(struct mem_pieces *);
 static void coalesce_mem_pieces(struct mem_pieces *);
-static void append_mem_piece(struct mem_pieces *, unsigned, unsigned);
 
 __initfunc(static void sort_mem_pieces(struct mem_pieces *mp))
 {
@@ -702,21 +717,6 @@ __initfunc(static void coalesce_mem_pieces(struct mem_pieces *mp))
        mp->n_regions = d;
 }
 
-/*
- * Add some memory to an array of pieces
- */
-__initfunc(static void
-          append_mem_piece(struct mem_pieces *mp, unsigned start, unsigned size))
-{
-       struct reg_property *rp;
-
-       if (mp->n_regions >= MAX_MEM_REGIONS)
-               return;
-       rp = &mp->regions[mp->n_regions++];
-       rp->address = start;
-       rp->size = size;
-}
-
 /*
  * Read in a property describing some pieces of memory.
  */
@@ -963,8 +963,10 @@ __initfunc(void MMU_init(void))
 #ifndef CONFIG_8xx
        if (have_of)
                end_of_DRAM = pmac_find_end_of_memory();
+#ifdef CONFIG_APUS
        else if (_machine == _MACH_apus )
                end_of_DRAM = apus_find_end_of_memory();
+#endif
        else /* prep */
                end_of_DRAM = prep_find_end_of_memory();
 
@@ -1023,7 +1025,7 @@ __initfunc(void MMU_init(void))
          */
         ioremap(NVRAM_ADDR, NVRAM_SIZE);
         ioremap(MBX_CSR_ADDR, MBX_CSR_SIZE);
-        ioremap(MBX_IMAP_ADDR, MBX_IMAP_SIZE);
+        ioremap(IMAP_ADDR, IMAP_SIZE);
         ioremap(PCI_CSR_ADDR, PCI_CSR_SIZE);
 #endif /* CONFIG_8xx */
 }
@@ -1189,7 +1191,7 @@ __initfunc(unsigned long *mbx_find_end_of_memory(void))
        volatile memctl8xx_t    *mcp;
        unsigned long *ret;
        
-       binfo = (bd_t *)&res;
+       binfo = (bd_t *)res;
 
        /*
         * The MBX does weird things with the mmaps for ram.
@@ -1200,11 +1202,13 @@ __initfunc(unsigned long *mbx_find_end_of_memory(void))
         * In fact, it might be the best idea to just read the DRAM
         * config registers and set the mem areas accordingly.
         */
-       mcp = (memctl8xx_t *)(&(((immap_t *)MBX_IMAP_ADDR)->im_memctl));
+       mcp = (memctl8xx_t *)(&(((immap_t *)IMAP_ADDR)->im_memctl));
+       append_mem_piece(&phys_mem, 0, binfo->bi_memsize);
+#if 0
        phys_mem.regions[0].address = 0;
-       phys_mem.regions[0].size = binfo->bi_memsize;
-       
+       phys_mem.regions[0].size = binfo->bi_memsize;   
        phys_mem.n_regions = 1;
+#endif 
        
        ret = __va(phys_mem.regions[0].address+
                   phys_mem.regions[0].size);
@@ -1322,6 +1326,7 @@ __initfunc(unsigned long *prep_find_end_of_memory(void))
        return (__va(total));
 }
 
+#ifdef CONFIG_APUS
 #define HARDWARE_MAPPED_SIZE (512*1024)
 __initfunc(unsigned long *apus_find_end_of_memory(void))
 {
@@ -1381,15 +1386,22 @@ __initfunc(unsigned long *apus_find_end_of_memory(void))
                /* Remove the upper 512KB where the PPC exception
                    vectors are mapped. */
                top -= HARDWARE_MAPPED_SIZE;
-               remove_mem_piece(&phys_avail, top,
-                                HARDWARE_MAPPED_SIZE, 0);
+#if 0
+               /* This would be neat, but it breaks on A3000 machines!? */
+               remove_mem_piece(&phys_avail, top, 16384, 0);
+#else
+               remove_mem_piece(&phys_avail, top, HARDWARE_MAPPED_SIZE, 0);
+#endif
+
        }
 
-       /* FIXME:APUS: Only handles one block of memory! Problem is
-          that the VTOP/PTOV code in head.S would be a mess if it had
-          to handle more than one block.  */
+       /* Linux/APUS only handles one block of memory -- the one on
+          the PowerUP board. Other system memory is horrible slow in
+          comparison. The user can use other memory for swapping
+          using the z2ram device. */
        return __va(memory[0].addr + memory[0].size);
 }
+#endif /* CONFIG_APUS */
 
 /*
  * Initialize the hash table and patch the instructions in head.S.
@@ -1400,7 +1412,7 @@ __initfunc(static void hash_init(void))
        unsigned long h, ramsize;
 
        extern unsigned int hash_page_patch_A[], hash_page_patch_B[],
-               hash_page_patch_C[];
+               hash_page_patch_C[], hash_page[];
 
        /*
         * Allow 64k of hash table for every 16MB of memory,
@@ -1475,7 +1487,17 @@ __initfunc(static void hash_init(void))
                flush_icache_range((unsigned long) b(hash_page_patch_A),
                                   (unsigned long) b(hash_page_patch_C + 1));
        }
-       else
+       else {
                Hash_end = 0;
+               /*
+                * Put a blr (procedure return) instruction at the
+                * start of hash_page, since we can still get DSI
+                * exceptions on a 603.
+                */
+               *b(hash_page) = 0x4e800020;
+               flush_icache_range((unsigned long) b(hash_page),
+                                  (unsigned long) b(hash_page + 1));
+       }
 }
 #endif /* ndef CONFIG_8xx */
+
index b0c9ad966f43a59294165cb2ef9ffb7e4b744a48..ae1303bb481341402a58e810ef41997c3a629da6 100644 (file)
@@ -14,7 +14,6 @@ CONFIG_PMAC=y
 # CONFIG_ALL_PPC is not set
 # CONFIG_APUS is not set
 # CONFIG_MBX is not set
-# CONFIG_SMP is not set
 CONFIG_MACH_SPECIFIC=y
 
 #
index 14b4ea4a0ffc77141250974d4f638eff0d783789..41db35a4a4a9bf7f265a32b904115790ef69cc5e 100644 (file)
@@ -14,7 +14,6 @@ CONFIG_PREP=y
 # CONFIG_ALL_PPC is not set
 # CONFIG_APUS is not set
 # CONFIG_MBX is not set
-# CONFIG_SMP is not set
 CONFIG_MACH_SPECIFIC=y
 
 #
index 13ce064f4880ef6750742d6235ac0d621f857f2b..30ecbd4e0b0f1fd14f3ad79f8635217be39a9296 100644 (file)
@@ -180,7 +180,7 @@ check_media_bay(struct device_node *which_bay, int what)
 {
 #ifdef CONFIG_BLK_DEV_IDE
        int     i;
-       
+
        for (i=0; i<media_bay_count; i++)
                if (which_bay == media_bays[i].dev_node)
                {
@@ -196,9 +196,9 @@ check_media_bay(struct device_node *which_bay, int what)
 int
 check_media_bay_by_base(unsigned long base, int what)
 {
+#ifdef CONFIG_BLK_DEV_IDE
        int     i;
 
-#ifdef CONFIG_BLK_DEV_IDE
        for (i=0; i<media_bay_count; i++)
                if (base == media_bays[i].cd_base)
                {
@@ -216,9 +216,9 @@ int
 media_bay_set_ide_infos(struct device_node* which_bay, unsigned long base,
        int irq, int index)
 {
-       int     i;
-       
 #ifdef CONFIG_BLK_DEV_IDE
+       int     i;
+
        for (i=0; i<media_bay_count; i++)
                if (which_bay == media_bays[i].dev_node)
                {
index 4dd82fef9366f5526eb3ab49e0e6ae9711220da1..b1bb32a28df05e0ab3c788b6688ad8c0f8de241e 100644 (file)
@@ -523,7 +523,7 @@ via_pmu_interrupt(int irq, void *arg, struct pt_regs *regs)
        int intr;
        int nloop = 0;
 
-       while ((intr = (in_8(&via[IFR]) & (SR_INT | CB1_INT))) != 0) {
+       while ((intr = in_8(&via[IFR])) != 0) {
                if (++nloop > 1000) {
                        printk(KERN_DEBUG "PMU: stuck in intr loop, "
                               "intr=%x pmu_state=%d\n", intr, pmu_state);
@@ -534,6 +534,12 @@ via_pmu_interrupt(int irq, void *arg, struct pt_regs *regs)
                else if (intr & CB1_INT) {
                        adb_int_pending = 1;
                        out_8(&via[IFR], CB1_INT);
+               } else
+               {
+                       /* -- Disabled printk, will happen _really_ often on
+                                 PowerBooks ((CB2 interrupts) --
+                       printk(KERN_DEBUG "PMU: spurrious interrupt intr=%x\n", intr); */
+                       out_8(&via[IFR], intr);
                }
        }
        if (pmu_state == idle) {
@@ -750,7 +756,8 @@ pmu_restart(void)
 
        _disable_interrupts();
        
-       pmu_request(&req, NULL, 2, PMU_SET_INTR_MASK, CB1_INT);
+       pmu_request(&req, NULL, 2, PMU_SET_INTR_MASK, PMU_INT_ADB |
+                                       PMU_INT_TICK );
        while(!req.complete)
                pmu_poll();
        
@@ -768,7 +775,8 @@ pmu_shutdown(void)
 
        _disable_interrupts();
        
-       pmu_request(&req, NULL, 2, PMU_SET_INTR_MASK, CB1_INT);
+       pmu_request(&req, NULL, 2, PMU_SET_INTR_MASK, PMU_INT_ADB |
+                                       PMU_INT_TICK );
        while(!req.complete)
                pmu_poll();
 
index b5b27c14a8c2e0999c03f6346fa85b761cd186e4..465b22d5861be17c0c2cc608e976c4665926f775 100644 (file)
@@ -156,7 +156,8 @@ if [ "$CONFIG_FB" = "y" ]; then
         "$CONFIG_FB_CGFOURTEEN" = "y" -o "$CONFIG_FB_G364" = "y" -o \
         "$CONFIG_FB_VIRGE" = "y" -o "$CONFIG_FB_CYBER" = "y" -o \
         "$CONFIG_FB_VALKYRIE" = "y" -o "$CONFIG_FB_PLATINUM" = "y" -o \
-         "$CONFIG_FB_IGA" = "y" -o "$CONFIG_FB_MATROX" = "y" ]; then
+         "$CONFIG_FB_IGA" = "y" -o "$CONFIG_FB_MATROX" = "y" -o \
+         "$CONFIG_FB_CT65550" = "y" ]; then
       define_bool CONFIG_FBCON_CFB8 y
     else
       if [ "$CONFIG_FB_ACORN" = "m" -o "$CONFIG_FB_ATARI" = "m" -o \
@@ -168,7 +169,8 @@ if [ "$CONFIG_FB" = "y" ]; then
           "$CONFIG_FB_CGFOURTEEN" = "m" -o "$CONFIG_FB_G364" = "m" -o \
           "$CONFIG_FB_VIRGE" = "m" -o "$CONFIG_FB_CYBER" = "m" -o \
           "$CONFIG_FB_VALKYRIE" = "m" -o "$CONFIG_FB_PLATINUM" = "m" -o \
-           "$CONFIG_FB_IGA" = "m" -o "$CONFIG_FB_MATROX" = "m" ]; then
+           "$CONFIG_FB_IGA" = "m" -o "$CONFIG_FB_MATROX" = "m" -o \
+           "$CONFIG_FB_CT65550" = "m" ]; then
        define_bool CONFIG_FBCON_CFB8 m
       fi
     fi
@@ -178,7 +180,7 @@ if [ "$CONFIG_FB" = "y" ]; then
         "$CONFIG_FB_CONTROL" = "y" -o "$CONFIG_FB_CLGEN" = "y" -o \
         "$CONFIG_FB_VIRGE" = "y" -o "$CONFIG_FB_CYBER" = "y" -o \
         "$CONFIG_FB_VALKYRIE" = "y" -o "$CONFIG_FB_PLATINUM" = "y" -o \
-        "$CONFIG_FB_MATROX" = "y" ]; then
+        "$CONFIG_FB_CT65550" = "y" -o "$CONFIG_FB_MATROX" = "y" ]; then
       define_bool CONFIG_FBCON_CFB16 y
     else
       if [ "$CONFIG_FB_ATARI" = "m" -o "$CONFIG_FB_ATY" = "m" -o \
@@ -187,7 +189,7 @@ if [ "$CONFIG_FB" = "y" ]; then
           "$CONFIG_FB_CONTROL" = "m" -o "$CONFIG_FB_CLGEN" = "m" -o \
           "$CONFIG_FB_VIRGE" = "m" -o "$CONFIG_FB_CYBER" = "m" -o \
           "$CONFIG_FB_VALKYRIE" = "m" -o "$CONFIG_FB_PLATINUM" = "m" -o \
-          "$CONFIG_FB_MATROX" = "m" ]; then
+          "$CONFIG_FB_CT65550" = "m" -o "$CONFIG_FB_MATROX" = "m" ]; then
        define_bool CONFIG_FBCON_CFB16 m
       fi
     fi
index e3f1b1d8d3a1a99e4c960508ccf8d395a22ad705..84585f6fea5afb4ecc25886fdf38873df4a5d969 100644 (file)
@@ -1,4 +1,4 @@
-/*  $Id: atyfb.c,v 1.90 1998/11/20 12:27:03 geert Exp $
+/*  $Id: atyfb.c,v 1.93 1998/12/18 18:33:13 geert Exp $
  *  linux/drivers/video/atyfb.c -- Frame buffer device for ATI Mach64
  *
  *     Copyright (C) 1997-1998  Geert Uytterhoeven
@@ -1457,7 +1457,7 @@ static int aty_pll_gx_to_var(const struct pll_gx *pll, u32 *vclk_per)
     vco_div_count = pll->m & 0x3f;
     ref_div_count = pll->n;
 
-    *vclk_per = (ref_clk_per*(vco_div_count+65)/ref_div_count)>>(3-df);
+    *vclk_per = ((ref_clk_per*ref_div_count)<<(3-df))/(vco_div_count+65);
 
     return 0;
 }
@@ -1719,6 +1719,22 @@ static void atyfb_set_par(const struct atyfb_par *par,
        aty_set_pll_gx(info, &par->pll.gx);
        aty_st_le32(BUS_CNTL, 0x890e20f1, info);
        aty_st_le32(DAC_CNTL, 0x47052100, info);
+
+       /* Don't forget MEM_CNTL */
+       i = aty_ld_le32(MEM_CNTL, info) & 0xf0ffffff;
+       switch (par->crtc.bpp) {
+           case 8:
+               i |= 0x02000000;
+               break;
+           case 16:
+               i |= 0x03000000;
+               break;
+           case 32:
+               i |= 0x06000000;
+               break;
+       }
+       aty_st_le32(MEM_CNTL, i, info);
+                                       
     } else {
        aty_set_pll_ct(info, &par->pll.ct);
        i = aty_ld_le32(MEM_CNTL, info) & 0xf30fffff;
index 4e0bc74ed814e65fbca0eb83439ce3e1465f7527..2891b4877419211e889c4e0bac7977f525a32789 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: cgsixfb.c,v 1.11 1998/09/04 15:43:42 jj Exp $
+/* $Id: cgsixfb.c,v 1.12 1998/11/27 00:02:04 anton Exp $
  * cgsixfb.c: CGsix (GX,GXplus) frame buffer driver
  *
  * Copyright (C) 1996,1998 Jakub Jelinek (jj@ultra.linux.cz)
@@ -534,6 +534,7 @@ static void cg6_reset (struct fb_info_sbusfb *fb)
        unsigned int rev, conf;
        struct cg6_tec *tec = fb->s.cg6.tec;
        struct cg6_fbc *fbc = fb->s.cg6.fbc;
+       u32 mode;
        
        /* Turn off stuff in the Transform Engine. */
        tec->tec_matrix = 0;
@@ -552,15 +553,20 @@ static void cg6_reset (struct fb_info_sbusfb *fb)
                *(fb->s.cg6.fhc) = conf;
        }
 
-       /* Set things in the FBC. */
-       fbc->mode &= ~(CG6_FBC_BLIT_MASK | CG6_FBC_MODE_MASK |
+       /* Set things in the FBC. Bad things appear to happen if we do
+        * back to back store/loads on the mode register, so copy it
+        * out instead. */
+       mode = fbc->mode;
+       mode &= ~(CG6_FBC_BLIT_MASK | CG6_FBC_MODE_MASK |
                       CG6_FBC_DRAW_MASK | CG6_FBC_BWRITE0_MASK |
                       CG6_FBC_BWRITE1_MASK | CG6_FBC_BREAD_MASK |
                       CG6_FBC_BDISP_MASK);
-       fbc->mode |= (CG6_FBC_BLIT_SRC | CG6_FBC_MODE_COLOR8 |
+       mode |= (CG6_FBC_BLIT_SRC | CG6_FBC_MODE_COLOR8 |
                      CG6_FBC_DRAW_RENDER | CG6_FBC_BWRITE0_ENABLE |
                      CG6_FBC_BWRITE1_DISABLE | CG6_FBC_BREAD_0 |
                      CG6_FBC_BDISP_0);
+       fbc->mode = mode;
+
        fbc->clip = 0;
        fbc->offx = 0;
        fbc->offy = 0;
index 699ae96ff409e3fca0da3b8ba41945a5e962e11b..04735949e496a6579619609873ec4fb38208cf25 100644 (file)
@@ -358,6 +358,7 @@ static void chips_set_bitdepth(struct fb_info_chips *p, struct display* disp, in
                if (con == currcon) {
                        write_cr(0x13, 200);            // 16 bit display width (decimal)
                        write_xr(0x81, 0x14);           // 15 bit (TrueColor) color mode
+                       write_xr(0x82, 0x00);           // disable palettes
                        write_xr(0x20, 0x10);           // 16 bit blitter mode
                }
 
@@ -379,6 +380,7 @@ static void chips_set_bitdepth(struct fb_info_chips *p, struct display* disp, in
                if (con == currcon) {
                        write_cr(0x13, 100);            // 8 bit display width (decimal)
                        write_xr(0x81, 0x12);           // 8 bit color mode
+                       write_xr(0x82, 0x08);           // Graphics gamma enable
                        write_xr(0x20, 0x00);           // 8 bit blitter mode
                }
 
index d1a63b64fef87a18f33d67a88732eb745142f553..129c4e396971bfdd0539854d318beaaceb98f4a9 100644 (file)
 
 #include "controlfb.h"
 
-static int currcon = 0;
-static int switching = 0;
-static char fontname[40] __initdata = { 0 };
-static int default_vmode = VMODE_NVRAM;
-static int default_cmode = CMODE_NVRAM;
-
 struct fb_par_control {
        int     vmode, cmode;
        int     xres, yres;
@@ -70,11 +64,25 @@ struct fb_par_control {
        int     xoffset, yoffset;
 };
 
+#define DIRTY(z) ((x)->z != (y)->z)
+static inline int PAR_EQUAL(struct fb_par_control *x, struct fb_par_control *y)
+{
+       return (!DIRTY(vmode) && !DIRTY(cmode) && !DIRTY(xres)
+               && !DIRTY(yres) && !DIRTY(vxres) && !DIRTY(vyres)
+               && !DIRTY(xoffset) && !DIRTY(yoffset));
+}
+static inline int VAR_MATCH(struct fb_var_screeninfo *x, struct fb_var_screeninfo *y)
+{
+       return (!DIRTY(bits_per_pixel) && !DIRTY(xres)
+               && !DIRTY(yres) && !DIRTY(xres_virtual)
+               && !DIRTY(yres_virtual));
+}
+
 struct fb_info_control {
        struct fb_info                  info;
-       struct fb_fix_screeninfo        fix;
-       struct fb_var_screeninfo        var;
-       struct display                  disp;
+/*     struct fb_fix_screeninfo        fix;
+       struct fb_var_screeninfo        var;*/
+       struct display                  display;
        struct fb_par_control           par;
        struct {
                __u8 red, green, blue;
@@ -101,15 +109,7 @@ struct fb_info_control {
        } fbcon_cmap;
 };
 
-/*
- * Exported functions
- */
-void control_init(void);
-#ifdef CONFIG_FB_OF
-void control_of_init(struct device_node *dp);
-#endif
-void controlfb_setup(char *options, int *ints);
-
+/******************** Prototypes for exported functions ********************/
 static int control_open(struct fb_info *info, int user);
 static int control_release(struct fb_info *info, int user);
 static int control_get_fix(struct fb_fix_screeninfo *fix, int con,
@@ -127,11 +127,38 @@ static int control_set_cmap(struct fb_cmap *cmap, int kspc, int con,
 static int control_ioctl(struct inode *inode, struct file *file, u_int cmd,
                       u_long arg, int con, struct fb_info *info);
 
+
+static int controlfb_getcolreg(u_int regno, u_int *red, u_int *green,
+                            u_int *blue, u_int *transp, struct fb_info *info);
+static int controlfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
+                            u_int transp, struct fb_info *info);
+
+/******************** Prototypes for internal functions ********************/
+static void control_par_to_fix(struct fb_par_control *par, struct fb_fix_screeninfo *fix,
+       struct fb_info_control *p);
+static void do_install_cmap(int con, struct fb_info *info);
+static void control_set_dispsw(struct display *disp, int cmode, struct fb_info_control *p);
+
+/************************* Internal variables *****************************/
+static int currcon = 0;
+static int par_set = 0;
+static char fontname[40] __initdata = { 0 };
+static int default_vmode = VMODE_NVRAM;
+static int default_cmode = CMODE_NVRAM;
+
+/*
+ * Exported functions
+ */
+void control_init(void);
+#ifdef CONFIG_FB_OF
+void control_of_init(struct device_node *dp);
+#endif
+void control_setup(char *options, int *ints);
+
 static int read_control_sense(struct fb_info_control *p);
 static inline int control_vram_reqd(int video_mode, int color_mode);
 static void set_control_clock(unsigned char *params);
-static void control_set_hardware(struct fb_info_control *p);
-static void control_par_to_all(struct fb_info_control *p, int init);
+static void control_set_hardware(struct fb_info_control *p, struct fb_par_control *par);
 static inline void control_par_to_var(struct fb_par_control *par, struct fb_var_screeninfo *var);
 static int control_var_to_par(struct fb_var_screeninfo *var,
        struct fb_par_control *par, const struct fb_info *fb_info);
@@ -139,10 +166,8 @@ static int control_var_to_par(struct fb_var_screeninfo *var,
 static void control_init_info(struct fb_info *info, struct fb_info_control *p);
 static void control_par_to_display(struct fb_par_control *par,
   struct display *disp, struct fb_fix_screeninfo *fix, struct fb_info_control *p);
-static void control_init_display(struct display *disp);
-static void control_par_to_fix(struct fb_par_control *par, struct fb_fix_screeninfo *fix,
-       struct fb_info_control *p);
-static void control_init_fix(struct fb_fix_screeninfo *fix, struct fb_info_control *p);
+
+static int controlfb_updatevar(int con, struct fb_info *info);
 
 static struct fb_ops controlfb_ops = {
        control_open,
@@ -156,15 +181,15 @@ static struct fb_ops controlfb_ops = {
        control_ioctl
 };
 
-static int controlfb_getcolreg(u_int regno, u_int *red, u_int *green,
-                            u_int *blue, u_int *transp, struct fb_info *info);
-static int controlfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
-                            u_int transp, struct fb_info *info);
-static void do_install_cmap(int con, struct fb_info *info);
 
 
+/********************  The functions for controlfb_ops ********************/
+
+#ifndef MODULE
 __openfirmware
+#endif
 
+/**********  Dummies for loading control as a module  **********/
 
 static int control_open(struct fb_info *info, int user)
 {
@@ -178,25 +203,62 @@ static int control_release(struct fb_info *info, int user)
        return 0;
 }
 
+#ifdef MODULE
+int init_module(void)
+{
+       struct device_node *dp;
+
+       printk("Loading...\n");
+       dp = find_devices("control");
+       if (dp != 0)
+               control_of_init(dp);
+       else
+               printk("Failed.\n");
+       printk("Done.\n");
+}
+
+void cleanup_module(void)
+{
+}
+#endif
+
+/*********** Providing our information to the user ************/
+
 static int control_get_fix(struct fb_fix_screeninfo *fix, int con,
                         struct fb_info *info)
 {
-       struct fb_info_control *cp = (struct fb_info_control *) info;
+       struct fb_info_control *p = (struct fb_info_control *) info;
 
-       *fix = cp->fix;
+       if(!par_set)
+               printk(KERN_ERR "control_get_fix called with unset par!\n");
+       if(con == -1) {
+               control_par_to_fix(&p->par, fix, p);
+       } else {
+               struct fb_par_control par;
+               
+               control_var_to_par(&fb_display[con].var, &par, info);
+               control_par_to_fix(&par, fix, p);
+       }
        return 0;
 }
 
 static int control_get_var(struct fb_var_screeninfo *var, int con,
                         struct fb_info *info)
 {
-       struct fb_info_control *cp = (struct fb_info_control *) info;
+       struct fb_info_control *p = (struct fb_info_control *) info;
 
-       *var = cp->var;
+       if(!par_set)
+               printk(KERN_ERR "control_get_var called with unset par!\n");
+       if(con == -1) {
+               control_par_to_var(&p->par, var);
+       } else {
+               *var = fb_display[con].var;
+       }
        return 0;
 }
 
 /* Sets everything according to var */
+/* No longer safe for use in console switching */
 static int control_set_var(struct fb_var_screeninfo *var, int con,
                         struct fb_info *info)
 {
@@ -204,53 +266,57 @@ static int control_set_var(struct fb_var_screeninfo *var, int con,
        struct display *disp;
        struct fb_par_control par;
        int depthchange, err;
+       int activate = var->activate;
+
+       disp = (con >= 0) ? &fb_display[con] : info->disp;
 
-       disp = (con >= 0) ? &fb_display[con] : &p->disp;
        if((err = control_var_to_par(var, &par, info))) {
-               printk (KERN_ERR "Error in control_set_var, calling control_var_to_par: %d.\n", err);
+               printk (KERN_ERR "control_set_var: error calling control_var_to_par: %d.\n", err);
                return err;
        }
        
-       if ((var->activate & FB_ACTIVATE_MASK) != FB_ACTIVATE_NOW) {
-               /* printk("Not activating, in control_set_var.\n"); */
-               control_par_to_var(&par, var);
+       control_par_to_var(&par, var);
+       
+       if ((activate & FB_ACTIVATE_MASK) != FB_ACTIVATE_NOW)
                return 0;
-       }
+
 /* I know, we want to use fb_display[con], but grab certain info from p->var instead. */
-#define DIRTY(x) (p->var.x != var->x)
-       depthchange = DIRTY(bits_per_pixel);
-       if(!DIRTY(xres) && !DIRTY(yres) && !DIRTY(xres_virtual) &&
-          !DIRTY(yres_virtual) && !DIRTY(bits_per_pixel)) {
-               control_par_to_var(&par, var);
-               p->var = disp->var = *var;
-               return 0;
-       }
-       /* printk("Original bpp is %d, new bpp %d.\n", p->var.bits_per_pixel, var->bits_per_pixel); */
-       /* OK, we're getting here at the right times... */
-       p->par = par;
-       control_par_to_var(&par, var);
-       p->var = *var;
-       control_par_to_fix(&par, &p->fix, p);
-       control_par_to_display(&par, disp, &p->fix, p);
-       p->disp = *disp;
+/* [above no longer true] */
+       depthchange = (disp->var.bits_per_pixel != var->bits_per_pixel);
+       if(!VAR_MATCH(&disp->var, var)) {
+               struct fb_fix_screeninfo        fix;
+               control_par_to_fix(&par, &fix, p);
+               control_par_to_display(&par, disp, &fix, p);
+               if(info->changevar)
+                       (*info->changevar)(con);
+       } else
+               disp->var = *var;
+       /*p->disp = *disp;*/
+
        
-       if(info->changevar && !switching)       /* Don't want to do this if just switching consoles. */
-               (*info->changevar)(con);
-       if(con == currcon)
-               control_set_hardware(p);
-       if(depthchange)
+       if(con == currcon || con == -1) {
+               control_set_hardware(p, &par);
+       }
+       if(depthchange) {
                if((err = fb_alloc_cmap(&disp->cmap, 0, 0)))
                        return err;
-       if(depthchange || switching)
                do_install_cmap(con, info);
+       }
        return 0;
 }
 
 static int control_pan_display(struct fb_var_screeninfo *var, int con,
                             struct fb_info *info)
 {
-       if (var->xoffset != 0 || var->yoffset != 0)
+       struct fb_info_control *p = (struct fb_info_control *)info;
+       struct fb_par_control *par = &p->par;
+       
+       if (var->xoffset != 0 || var->yoffset+var->yres > var->yres_virtual)
                return -EINVAL;
+       fb_display[con].var.yoffset =  par->yoffset = var->yoffset;
+       if(con == currcon)
+               out_le32(&p->control_regs->start_addr.r,
+                   par->yoffset * (par->vxres << par->cmode));
        return 0;
 }
 
@@ -260,7 +326,7 @@ static int control_get_cmap(struct fb_cmap *cmap, int kspc, int con,
        if (con == currcon)             /* current console? */
                return fb_get_cmap(cmap, kspc, controlfb_getcolreg, info);
        if (fb_display[con].cmap.len)   /* non default colormap? */
-               fb_copy_cmap(&fb_display[con].cmap, cmap, kspc? 0: 2);
+               fb_copy_cmap(&fb_display[con].cmap, cmap, kspc ? 0: 2);
        else {
                int size = fb_display[con].var.bits_per_pixel == 16 ? 32 : 256;
                fb_copy_cmap(fb_default_cmap(size), cmap, kspc ? 0 : 2);
@@ -275,12 +341,11 @@ static int control_set_cmap(struct fb_cmap *cmap, int kspc, int con,
        int err;
 
        if (disp->cmap.len == 0) {
-               int size = fb_display[con].var.bits_per_pixel == 16 ? 32 : 256;
+               int size = disp->var.bits_per_pixel == 16 ? 32 : 256;
                err = fb_alloc_cmap(&disp->cmap, size, 0);
                if (err)
                        return err;
        }
-
        if (con == currcon)
                return fb_set_cmap(cmap, kspc, controlfb_setcolreg, info);
        fb_copy_cmap(cmap, &disp->cmap, kspc ? 0 : 1);
@@ -293,30 +358,42 @@ static int control_ioctl(struct inode *inode, struct file *file, u_int cmd,
        return -EINVAL;
 }
 
+/********************  End of controlfb_ops implementation  ********************/
+/* (new one that is) */
+
+
 static int controlfb_switch(int con, struct fb_info *info)
 {
+       struct fb_info_control  *p = (struct fb_info_control *)info;
+       struct fb_par_control   par;
+       int oldcon = currcon;
+
        if (fb_display[currcon].cmap.len)
                fb_get_cmap(&fb_display[currcon].cmap, 1, controlfb_getcolreg,
                            info);
        currcon = con;
-#if 0
-       control_var_to_par(&fb_display[currcon].var, &par, info);
-       control_set_par(&par, info); /*STOPPEDHERE - did i define that? */
+
+       control_var_to_par(&fb_display[con].var, &par, info);
+       control_set_hardware(p, &par);
+       control_set_dispsw(&fb_display[con], par.cmode, p);
+
+       if(fb_display[oldcon].var.yoffset != fb_display[con].var.yoffset);
+               controlfb_updatevar(con, info);
+
        do_install_cmap(con, info);
-#else
-       /* I see no reason not to do this.  Minus info->changevar(). */
-       /* DOH.  This makes control_set_var compare, you guessed it, */
-       /* fb_display[con].var (first param), and fb_display[con].var! */
-       /* Perhaps I just fixed that... */
-       switching = 1;
-       control_set_var(&fb_display[con].var, con, info);
-       switching = 0;
-#endif
-       return 0;
+       return 1;
 }
 
 static int controlfb_updatevar(int con, struct fb_info *info)
 {
+       struct fb_info_control  *p = (struct fb_info_control *)info;
+
+       if(con != currcon)
+               return 0;
+       /* imsttfb blanks the unused bottom of the screen here...hmm. */
+       out_le32(&p->control_regs->start_addr.r,
+           fb_display[con].var.yoffset * fb_display[con].line_length);
+       
        return 0;
 }
 
@@ -332,10 +409,12 @@ static void controlfb_blank(int blank_mode, struct fb_info *info)
  *    blank_mode == 3: suspend hsync
  *    blank_mode == 4: powerdown
  */
-/* [danj] I think there's something fishy about those constants... */
+/* A blank_mode of 1+VESA_NO_BLANKING or 1+VESA_POWERDOWN act alike... */
        struct fb_info_control *p = (struct fb_info_control *) info;
        int     ctrl;
 
+       if(blank_mode == 1+VESA_NO_BLANKING)
+               blank_mode = 1+VESA_POWERDOWN;
        ctrl = ld_le32(&p->control_regs->ctrl.r) | 0x33;
        if (blank_mode)
                --blank_mode;
@@ -385,25 +464,16 @@ static int controlfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
        out_8(&p->cmap_regs->lut, blue);
 
        if (regno < 16)
-               switch (p->var.bits_per_pixel) {
+               switch (p->par.cmode) {
 #ifdef FBCON_HAS_CFB16
-                       case 16:
-#if 0
-                               p->fbcon_cmap.cfb16[regno] = (red << 10) | (green << 5) | blue;
-#else
+                       case CMODE_16:
                                p->fbcon_cmap.cfb16[regno] = (regno << 10) | (regno << 5) | regno;
-#endif
                                break;
 #endif
 #ifdef FBCON_HAS_CFB32
-                       case 32:
-#if 0
-                               p->fbcon_cmap.cfb32[regno] = (red << 16) | (green << 8) | blue;
-#else
+                       case CMODE_32:
                                i = (regno << 8) | regno;
                                p->fbcon_cmap.cfb32[regno] = (i << 16) | i;
-                               /* I think */
-#endif
                                break;
 #endif
                }
@@ -427,18 +497,12 @@ static void do_install_cmap(int con, struct fb_info *info)
 #ifdef CONFIG_FB_COMPAT_XPMAC
 extern struct vc_mode display_info;
 extern struct fb_info *console_fb_info;
-#if 0
-extern int (*console_setmode_ptr)(struct vc_mode *, int);
-extern int (*console_set_cmap_ptr)(struct fb_cmap *, int, int,
-                                  struct fb_info *);
-int console_setmode(struct vc_mode *, int);
-#endif
 #endif /* CONFIG_FB_COMPAT_XPMAC */
 
 static inline int control_vram_reqd(int video_mode, int color_mode)
 {
        return control_reg_init[video_mode-1]->vres
-               * control_reg_init[video_mode-1]->pitch[color_mode];
+               * control_reg_init[video_mode-1]->hres << color_mode;
 }
 
 static void set_control_clock(unsigned char *params)
@@ -457,7 +521,9 @@ static void set_control_clock(unsigned char *params)
 
 __initfunc(static void init_control(struct fb_info_control *p))
 {
-       struct fb_par_control *par = &p->par;
+       struct fb_par_control parstruct;
+       struct fb_par_control *par = &parstruct;
+       struct fb_var_screeninfo var;
 
        p->sense = read_control_sense(p);
        printk(KERN_INFO "Monitor sense value = 0x%x, ", p->sense);
@@ -482,30 +548,44 @@ __initfunc(static void init_control(struct fb_info_control *p))
        printk("using video mode %d and color mode %d.\n", par->vmode, par->cmode);
        
        par->vxres = par->xres = control_reg_init[par->vmode - 1]->hres;
-       par->vyres = par->yres = control_reg_init[par->vmode - 1]->vres;
+       par->yres = control_reg_init[par->vmode - 1]->vres;
+       par->vyres = p->total_vram / (par->vxres << par->cmode);
        par->xoffset = par->yoffset = 0;
        
-       control_par_to_all(p, 1);
+       control_init_info(&p->info, p);
+       
+       par_set = 1;    /* Debug */
+       
+       control_par_to_var(par, &var);
+       control_set_var(&var, -1, &p->info);
        
        p->info.flags = FBINFO_FLAG_DEFAULT;
        if (register_framebuffer(&p->info) < 0) {
                kfree(p);
                return;
        }
-       control_set_hardware(p);
        
        printk(KERN_INFO "fb%d: control display adapter\n", GET_FB_IDX(p->info.node));  
 }
 
+#define STORE_D2(a,d) \
+       out_8(&p->cmap_regs->addr, (a)); \
+       out_8(&p->cmap_regs->d2,   (d))
+
 /* Now how about actually saying, Make it so! */
 /* Some things in here probably don't need to be done each time. */
-static void control_set_hardware(struct fb_info_control *p)
+static void control_set_hardware(struct fb_info_control *p, struct fb_par_control *par)
 {
        struct control_regvals  *init;
-       struct preg             *rp;
+       volatile struct preg    *rp;
        int                     flags, ctrl, i;
        int                     vmode, cmode;
        
+       if(PAR_EQUAL(&p->par, par))
+               return;
+       
+       p->par = *par;
+       
        vmode = p->par.vmode;
        cmode = p->par.cmode;
        
@@ -527,19 +607,20 @@ static void control_set_hardware(struct fb_info_control *p)
        
        set_control_clock(init->clock_params);
        
-       p->cmap_regs->addr = 0x20; p->cmap_regs->d2 = init->radacal_ctrl[cmode];
-       p->cmap_regs->addr = 0x21; p->cmap_regs->d2 = p->control_use_bank2 ? 0: 1;
-       p->cmap_regs->addr = 0x10; p->cmap_regs->d2 = 0;
-       p->cmap_regs->addr = 0x11; p->cmap_regs->d2 = 0;
+       STORE_D2(0x20, init->radacal_ctrl[cmode]);
+       STORE_D2(0x21, p->control_use_bank2 ? 0 : 1);
+       STORE_D2(0x10, 0);
+       STORE_D2(0x11, 0);
 
        rp = &p->control_regs->vswin;
        for (i = 0; i < 16; ++i, ++rp)
                out_le32(&rp->r, init->regs[i]);
        
-       out_le32(&p->control_regs->pitch.r, init->pitch[cmode]);
+       out_le32(&p->control_regs->pitch.r, init->hres << cmode);
        out_le32(&p->control_regs->mode.r, init->mode[cmode]);
        out_le32(&p->control_regs->flags.r, flags);
-       out_le32(&p->control_regs->start_addr.r, 0);
+       out_le32(&p->control_regs->start_addr.r,
+           par->yoffset * (par->vxres << par->cmode));
        out_le32(&p->control_regs->reg18.r, 0x1e5);
        out_le32(&p->control_regs->reg19.r, 0);
 
@@ -556,11 +637,11 @@ static void control_set_hardware(struct fb_info_control *p)
 #ifdef CONFIG_FB_COMPAT_XPMAC
        /* And let the world know the truth. */
        if (!console_fb_info || console_fb_info == &p->info) {
-               display_info.height = p->var.yres;
-               display_info.width = p->var.xres;
+               display_info.height = p->par.yres;
+               display_info.width = p->par.xres;
                display_info.depth = (cmode == CMODE_32) ? 32 :
                        ((cmode == CMODE_16) ? 16 : 8);
-               display_info.pitch = p->fix.line_length;
+               display_info.pitch = p->par.vxres << p->par.cmode;
                display_info.mode = vmode;
                strncpy(display_info.name, "control",
                        sizeof(display_info.name));
@@ -591,15 +672,6 @@ __initfunc(void control_of_init(struct device_node *dp))
        unsigned long           addr, size;
        int                     i, bank1, bank2;
 
-#if 0
-       if(dp->next != 0)
-               printk("Warning: only using first control display device.\n");
-               /* danj: I have a feeling this no longer applies - if we somehow *
-                * had two of them, they'd be two framebuffers, right?
-                * Yep. - paulus
-                */
-#endif
-
        if(dp->n_addrs != 2) {
                printk(KERN_ERR "expecting 2 address for control (got %d)", dp->n_addrs);
                return;
@@ -629,25 +701,23 @@ __initfunc(void control_of_init(struct device_node *dp))
 
        /* Work out which banks of VRAM we have installed. */
        /* danj: I guess the card just ignores writes to nonexistant VRAM... */
-       p->frame_buffer[0] = 0x5a;
-       p->frame_buffer[1] = 0xc7;
-       bank1 = p->frame_buffer[0] == 0x5a && p->frame_buffer[1] == 0xc7;
-       p->frame_buffer[0x600000] = 0xa5;
-       p->frame_buffer[0x600001] = 0x38;
-       bank2 = p->frame_buffer[0x600000] == 0xa5 && p->frame_buffer[0x600001] == 0x38;
+       out_8(&p->frame_buffer[0], 0x5a);
+       out_8(&p->frame_buffer[1], 0xc7);
+       asm volatile("eieio; dcbi 0,%0" : : "r" (&p->frame_buffer[0]) : "memory" );
+       bank1 = (in_8(&p->frame_buffer[0]) == 0x5a) && (in_8(&p->frame_buffer[1]) == 0xc7);
+
+       out_8(&p->frame_buffer[0x600000], 0xa5);
+       out_8(&p->frame_buffer[0x600001], 0x38);
+       asm volatile("eieio; dcbi 0,%0" : : "r" (&p->frame_buffer[0x600000]) : "memory" );
+       bank2 = (in_8(&p->frame_buffer[0x600000]) == 0xa5)
+               && (in_8(&p->frame_buffer[0x600001]) == 0x38);
+       
        p->total_vram = (bank1 + bank2) * 0x200000;
        /* If we don't have bank 1 installed, we hope we have bank 2 :-) */
        p->control_use_bank2 = !bank1;
        if (p->control_use_bank2)
                p->frame_buffer += 0x600000;
 
-#ifdef CONFIG_FB_COMPAT_XPMAC
-#if 0
-       console_set_cmap_ptr = control_set_cmap;
-       console_setmode_ptr = control_console_setmode;
-#endif
-#endif /* CONFIG_FB_COMPAT_XPMAC */
-
        init_control(p);
 }
 
@@ -655,8 +725,6 @@ __initfunc(void control_of_init(struct device_node *dp))
  * Get the monitor sense value.
  * Note that this can be called before calibrate_delay,
  * so we can't use udelay.
- *
- * Hmm - looking at platinum, should we be calling eieio() here?
  */
 static int read_control_sense(struct fb_info_control *p)
 {
@@ -685,6 +753,7 @@ static int read_control_sense(struct fb_info_control *p)
        return sense;
 }
 
+/***********************  Various translation functions  ***********************/
 #if 1
 /* This routine takes a user-supplied var, and picks the best vmode/cmode from it. */
 static int control_var_to_par(struct fb_var_screeninfo *var,
@@ -726,59 +795,58 @@ static int control_var_to_par(struct fb_var_screeninfo *var,
                par->vmode = VMODE_1280_960_75;         /* 1280x960, 75Hz */
        else if (xres <= 1280 && yres <= 1024)
                par->vmode = VMODE_1280_1024_75;        /* 1280x1024, 75Hz */
-       else
+       else {
+               printk(KERN_ERR "Bad x/y res in var_to_par\n");
                return -EINVAL;
+       }
 
        xres = control_reg_init[par->vmode-1]->hres;
        yres = control_reg_init[par->vmode-1]->vres;
 
-/*
+       par->xres = xres;
+       par->yres = yres;
+
        if (var->xres_virtual <= xres)
                par->vxres = xres;
-       else
+       else if(var->xres_virtual > xres) {
+               par->vxres = xres;
+       } else  /* NotReached at present */
                par->vxres = (var->xres_virtual+7) & ~7;
+
        if (var->yres_virtual <= yres)
                par->vyres = yres;
        else
                par->vyres = var->yres_virtual;
 
-       par->xoffset = (var->xoffset+7) & ~7;
-       par->yoffset = var->yoffset;
-       if (par->xoffset+xres > par->vxres || par->yoffset+yres > par->vyres)
-               return -EINVAL;
-*/
-
-       /* I'm too chicken to think about virtual       */
-       /* resolutions just yet. Bok bok.                       */
-       
-       /* And I'm too chicken to even figure out what they are.  Awk awk. [danj] */
-       if (var->xres_virtual > xres || var->yres_virtual > yres
-               || var->xoffset != 0 || var->yoffset != 0) {
+       if (var->xoffset > 0 || var->yoffset+yres > par->vyres) {
+               printk(KERN_ERR "Bad offsets in var_to_par\n");
                return -EINVAL;
        }
 
-       par->xres = xres;
-       par->yres = yres;
-       par->vxres = xres;
-       par->vyres = yres;
-       par->xoffset = 0;
-       par->yoffset = 0;
+       par->xoffset = (var->xoffset+7) & ~7;
+       par->yoffset = var->yoffset;
+
 
-       if (bpp <= 8)
+       if (bpp <= 8)
                par->cmode = CMODE_8;
        else if (bpp <= 16)
                par->cmode = CMODE_16;
        else if (bpp <= 32)
                par->cmode = CMODE_32;
-       else
+       else {
+               printk(KERN_ERR "Bad bpp in var_to_par\n");
                return -EINVAL;
+       }
 
-       if (control_vram_reqd(par->vmode, par->cmode) > p->total_vram)
+       if (control_vram_reqd(par->vmode, par->cmode) > p->total_vram) {
+               printk(KERN_ERR "Too much VRAM required for vmode %d cmode %d.\n", par->vmode, par->cmode);
                return -EINVAL;
+       }
 
        /* Check if we know about the wanted video mode */
        init = control_reg_init[par->vmode-1];
        if (init == NULL) {
+               printk(KERN_ERR "init is null in control_var_to_par().\n");
                /* I'm not sure if control has any specific requirements --     */
                /* if we have a regvals struct, we're good to go?               */
                return -EINVAL;
@@ -812,14 +880,19 @@ static int control_var_to_par(struct fb_var_screeninfo *var,
 }
 #endif
 
-#if 1
+/***********  Convert hardware data in par to an fb_var_screeninfo ***********/
+
 static void control_par_to_var(struct fb_par_control *par, struct fb_var_screeninfo *var)
 {
+       struct control_regints *rv;
+       
+       rv = (struct control_regints *) control_reg_init[par->vmode - 1]->regs;
+       
        memset(var, 0, sizeof(*var));
        var->xres = control_reg_init[par->vmode - 1]->hres;
        var->yres = control_reg_init[par->vmode - 1]->vres;
-       var->xres_virtual = var->xres;
-       var->yres_virtual = var->yres;  /* For now. */
+       var->xres_virtual = par->vxres;
+       var->yres_virtual = par->vyres;
        var->xoffset = par->xoffset;
        var->yoffset = par->yoffset;
        var->grayscale = 0;
@@ -873,12 +946,30 @@ static void control_par_to_var(struct fb_par_control *par, struct fb_var_screeni
        var->width = -1;
        var->vmode = FB_VMODE_NONINTERLACED;
 
-       /* these are total guesses, copied right out of atyfb.c */
-       var->left_margin = var->right_margin = 64;
-       var->upper_margin = var->lower_margin = 32;
-       var->hsync_len = /*64*/8;
-       var->vsync_len = /*2*/8;
-       var->sync = 0;
+       var->left_margin = (rv->heblank - rv->hesync)
+               << ((par->vmode > 18) ? 2 : 1);
+       var->right_margin = (rv->hssync - rv->hsblank)
+               << ((par->vmode > 18) ? 2 : 1);
+       var->hsync_len = (rv->hperiod + 2 - rv->hssync + rv->hesync)
+               << ((par->vmode > 18) ? 2 : 1);
+
+       var->upper_margin = (rv->veblank - rv->vesync) >> 1;
+       var->lower_margin = (rv->vssync - rv->vsblank) >> 1;
+       var->vsync_len = (rv->vperiod - rv->vssync + rv->vesync) >> 1;
+
+       /* Acording to macmodes.c... */
+       if((par->vmode >= 9 && par->vmode <= 12) ||
+          (par->vmode >= 16 && par->vmode <= 18) ||
+          (par->vmode == 20))
+       {
+               var->sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT;
+       } else {
+               var->sync = 0;          /* I suppose */
+       }
+
+    /* The reason these are both here: with my revised margin calculations, */
+    /* these SHOULD both give the same answer for each mode.  Some day I    */
+    /* will sit down and check the rest.  Works perfectly for vmode 13.     */
 
 #if 0
 /* jonh's pixclocks...*/
@@ -899,14 +990,9 @@ static void control_par_to_var(struct fb_par_control *par, struct fb_var_screeni
        var->pixclock >>= control_reg_init[par->vmode-1]->clock_params[2];
 #endif
 }
-#else
-static inline void control_par_to_var(struct fb_par_control *par, struct fb_var_screeninfo *var)
-{
-       mac_vmode_to_var(par->vmode, par->cmode, var);
-}
-#endif
 
-static void control_init_fix(struct fb_fix_screeninfo *fix, struct fb_info_control *p)
+static void control_par_to_fix(struct fb_par_control *par, struct fb_fix_screeninfo *fix,
+       struct fb_info_control *p)
 {
        memset(fix, 0, sizeof(*fix));
        strcpy(fix->id, "control");
@@ -914,34 +1000,35 @@ static void control_init_fix(struct fb_fix_screeninfo *fix, struct fb_info_contr
        fix->mmio_len = sizeof(struct control_regs);
        fix->type = FB_TYPE_PACKED_PIXELS;
        
+       fix->ypanstep = 1;
        /*
                fix->type_aux = 0;
                fix->ywrapstep = 0;
                fix->ypanstep = 0;
                fix->xpanstep = 0;
        */
-}
 
-/* Fix must already be inited ^^^^^^^ */
-static void control_par_to_fix(struct fb_par_control *par, struct fb_fix_screeninfo *fix,
-       struct fb_info_control *p)
-{
        fix->smem_start = (void *)(p->frame_buffer_phys
                + control_reg_init[par->vmode-1]->offset[par->cmode]);
-       p->fix.smem_len = control_vram_reqd(par->vmode, par->cmode);
-               /* Hmm, jonh used total_vram here. */
-       p->fix.visual = (par->cmode == CMODE_8) ?
+       fix->smem_len = p->total_vram;
+       fix->visual = (par->cmode == CMODE_8) ?
                FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_DIRECTCOLOR;
-       p->fix.line_length = par->vxres << par->cmode;
-               /* ywrapstep, xpanstep, ypanstep */
+       fix->line_length = par->vxres << par->cmode;
 }
 
-static void control_init_display(struct display *disp)
+/* We never initialize any display except for p->disp.
+   And p->disp is already memset to 0.  So no memset here.
+   [Found by Takashi Oe]
+*/
+static void control_par_to_display(struct fb_par_control *par,
+  struct display *disp, struct fb_fix_screeninfo *fix, struct fb_info_control *p)
 {
-       memset(disp, 0, sizeof(*disp));
-       disp->type = /* fix->type */ FB_TYPE_PACKED_PIXELS;
+       /* memset(disp, 0, sizeof(*disp)); */
+       disp->type = fix->type;
        disp->can_soft_blank = 1;
-       disp->scrollmode = SCROLL_YREDRAW;
+       disp->scrollmode = SCROLL_YNOMOVE | SCROLL_YNOPARTIAL;
+       disp->ypanstep = fix->ypanstep;
+       disp->ywrapstep = fix->ywrapstep;
 #if 0
                disp->type_aux = fix->type_aux;
                disp->cmap.red = NULL;  /* ??? danj */
@@ -950,22 +1037,18 @@ static void control_init_display(struct display *disp)
                disp->cmap.transp = NULL;
                        /* Yeah, I realize I just set 0 = 0. */
 #endif
-}
 
-static void control_par_to_display(struct fb_par_control *par,
-  struct display *disp, struct fb_fix_screeninfo *fix, struct fb_info_control *p)
-{
-       disp->var = p->var;
+       control_par_to_var(par, &disp->var);
        disp->screen_base = (char *) p->frame_buffer
                 + control_reg_init[par->vmode-1]->offset[par->cmode];
        disp->visual = fix->visual;
        disp->line_length = fix->line_length;
-
-if(disp->scrollmode != SCROLL_YREDRAW) {
-       printk(KERN_ERR "Scroll mode not YREDRAW in control_par_to_display!!\n");
-       disp->scrollmode = SCROLL_YREDRAW;
+       control_set_dispsw(disp, par->cmode, p);
 }
-       switch (par->cmode) {
+
+static void control_set_dispsw(struct display *disp, int cmode, struct fb_info_control *p)
+{
+       switch (cmode) {
 #ifdef FBCON_HAS_CFB8
                case CMODE_8:
                        disp->dispsw = &fbcon_cfb8;
@@ -991,10 +1074,10 @@ if(disp->scrollmode != SCROLL_YREDRAW) {
 
 static void control_init_info(struct fb_info *info, struct fb_info_control *p)
 {
-       strcpy(info->modename, p->fix.id);
+       strcpy(info->modename, "control");
        info->node = -1;        /* ??? danj */
        info->fbops = &controlfb_ops;
-       info->disp = &p->disp;
+       info->disp = &p->display;
        strcpy(info->fontname, fontname);
        info->changevar = NULL;
        info->switch_con = &controlfb_switch;
@@ -1002,28 +1085,8 @@ static void control_init_info(struct fb_info *info, struct fb_info_control *p)
        info->blank = &controlfb_blank;
 }
 
-/* danj: Oh, I HOPE I didn't miss anything major in here... */
-static void control_par_to_all(struct fb_info_control *p, int init)
-{
-       if(init) {
-               control_init_fix(&p->fix, p);
-       }
-       control_par_to_fix(&p->par, &p->fix, p);
-
-       control_par_to_var(&p->par, &p->var);
-
-       if(init) {
-               control_init_display(&p->disp);
-       }
-       control_par_to_display(&p->par, &p->disp, &p->fix, p);
-       
-       if(init) {
-               control_init_info(&p->info, p);
-       }
-}
-
 /* Parse user speficied options (`video=controlfb:') */
-__initfunc(void controlfb_setup(char *options, int *ints))
+__initfunc(void control_setup(char *options, int *ints))
 {
        char *this_opt;
 
@@ -1050,6 +1113,11 @@ __initfunc(void controlfb_setup(char *options, int *ints))
                } else if (!strncmp(this_opt, "cmode:", 6)) {
                        int depth = simple_strtoul(this_opt+6, NULL, 0);
                        switch (depth) {
+                        case CMODE_8:
+                        case CMODE_16:
+                        case CMODE_32:
+                               default_cmode = depth;
+                               break;
                         case 8:
                                default_cmode = CMODE_8;
                                break;
@@ -1081,4 +1149,5 @@ static int controlfb_pan_display(struct fb_var_screeninfo *var,
 
     return 0;
 }
+
 #endif
index 32943ed274dd5dfbb0c2911d9b4307d9fa361d82..ea8c361057add0298b78393a65bce6e52fd7948d 100644 (file)
@@ -73,6 +73,28 @@ struct control_regs {
        struct preg res[6];
 };
 
+struct control_regints {
+       /* Vertical parameters are in units of 1/2 scan line */
+       unsigned vswin; /* between vsblank and vssync */
+       unsigned vsblank;       /* vert start blank */
+       unsigned veblank;       /* vert end blank (display start) */
+       unsigned vewin; /* between vesync and veblank */
+       unsigned vesync;        /* vert end sync */
+       unsigned vssync;        /* vert start sync */
+       unsigned vperiod;       /* vert period */
+       unsigned reg8;
+       /* Horizontal params are in units of 2 pixels */
+       /* Except, apparently, for hres > 1024 (or == 1280?) */
+       unsigned hperiod;       /* horiz period - 2 */
+       unsigned hsblank;       /* horiz start blank */
+       unsigned heblank;       /* horiz end blank */
+       unsigned hesync;        /* horiz end sync */
+       unsigned hssync;        /* horiz start sync */
+       unsigned rege;
+       unsigned regf;
+       unsigned reg10;
+};
+       
 /*
  * Register initialization tables for the control display.
  *
@@ -81,9 +103,10 @@ struct control_regs {
  *
  * The values for vertical frequency (V) in the comments below
  * are the values measured using the modes under MacOS.
+ *
+ * Pitch is always the same as bytes per line (for these video modes at least).
  */
 struct control_regvals {
-       int     pitch[3];               /* bytes/line, indexed by color_mode */
        int     offset[3];              /* first pixel address */
        unsigned regs[16];              /* for vswin .. reg10 */
        unsigned char mode[3];          /* indexed by color_mode */
@@ -95,7 +118,6 @@ struct control_regvals {
 
 /* Register values for 1280x1024, 75Hz mode (20) */
 static struct control_regvals control_reg_init_20 = {
-       { 1280, 2560, 0 },
        { 0x10, 0x20, 0 },
        { 2129, 2128, 80, 42, 4, 2130, 2132, 88,
          420, 411, 91, 35, 421, 18, 211, 386, },
@@ -107,7 +129,6 @@ static struct control_regvals control_reg_init_20 = {
 
 /* Register values for 1280x960, 75Hz mode (19) */
 static struct control_regvals control_reg_init_19 = {
-       { 1280, 2560, 0 },
        { 0x10, 0x20, 0 },
        { 1997, 1996, 76, 40, 4, 1998, 2000, 86,
          418, 409, 89, 35, 419, 18, 210, 384, },
@@ -119,7 +140,6 @@ static struct control_regvals control_reg_init_19 = {
 
 /* Register values for 1152x870, 75Hz mode (18) */
 static struct control_regvals control_reg_init_18 = {
-       { 1152, 2304, 4608 },
        { 0x10, 0x28, 0x50 },
        { 1825, 1822, 82, 43, 4, 1828, 1830, 120,
          726, 705, 129, 63, 727, 32, 364, 664 },
@@ -131,7 +151,6 @@ static struct control_regvals control_reg_init_18 = {
 
 /* Register values for 1024x768, 75Hz mode (17) */
 static struct control_regvals control_reg_init_17 = {
-       { 1024, 2048, 4096 },
        { 0x10, 0x28, 0x50 },
        { 1603, 1600, 64, 34, 4, 1606, 1608, 120,
          662, 641, 129, 47, 663, 24, 332, 616 },
@@ -141,9 +160,8 @@ static struct control_regvals control_reg_init_17 = {
        1024, 768
 };
 
-/* Register values for 1024x768, 72Hz mode (16 (15?)) */
-static struct control_regvals control_reg_init_16 = {
-       { 1024, 2048, 4096 },
+/* Register values for 1024x768, 72Hz mode 16 (15?) */
+static struct control_regvals control_reg_init_15 = {
        { 0x10, 0x28, 0x50 },
        { 1607, 1604, 68, 39, 10, 1610, 1612, 132,
          670, 653, 141, 67, 671, 34, 336, 604, },
@@ -155,7 +173,6 @@ static struct control_regvals control_reg_init_16 = {
 
 /* Register values for 1024x768, 60Hz mode (14) */
 static struct control_regvals control_reg_init_14 = {
-       { 1024, 2048, 4096 },
        { 0x10, 0x28, 0x50 },
        { 1607, 1604, 68, 39, 10, 1610, 1612, 132,
          670, 653, 141, 67, 671, 34, 336, 604, },
@@ -167,7 +184,6 @@ static struct control_regvals control_reg_init_14 = {
 
 /* Register values for 832x624, 75Hz mode (13) */
 static struct control_regvals control_reg_init_13 = {
-       { 832, 1664, 3328 },
        { 0x10, 0x28, 0x50 },
        { 1331, 1330, 82, 43, 4, 1332, 1334, 128,
          574, 553, 137, 31, 575, 16, 288, 544 },
@@ -178,7 +194,6 @@ static struct control_regvals control_reg_init_13 = {
 
 /* Register values for 800x600, 75Hz mode (12) */
 static struct control_regvals control_reg_init_12 = {
-       { 800, 1600, 3200 },
        { 0x10, 0x28, 0x50 },
        { 1247, 1246, 46, 25, 4, 1248, 1250, 104,
          526, 513, 113, 39, 527, 20, 264, 488, },
@@ -189,7 +204,6 @@ static struct control_regvals control_reg_init_12 = {
 
 /* Register values for 800x600, 72Hz mode (11) */
 static struct control_regvals control_reg_init_11 = {
-       { 800, 1600, 3200 },
        { 0x10, 0x28, 0x50 },
        { 1293, 1256, 56, 33, 10, 1330, 1332, 76,
          518, 485, 85, 59, 519, 30, 260, 460, },
@@ -200,7 +214,6 @@ static struct control_regvals control_reg_init_11 = {
 
 /* Register values for 800x600, 60Hz mode (10) */
 static struct control_regvals control_reg_init_10 = {
-       { 800, 1600, 3200 },
        { 0x10, 0x28, 0x50 },
        { 1293, 1256, 56, 33, 10, 1330, 1332, 76,
          518, 485, 85, 59, 519, 30, 260, 460, },
@@ -211,7 +224,6 @@ static struct control_regvals control_reg_init_10 = {
 
 /* Register values for 640x870, 75Hz Full Page Display (7) */
 static struct control_regvals control_reg_init_7 = {
-        { 640, 1280, 2560 },
        { 0x10, 0x30, 0x68 },
        { 0x727, 0x724, 0x58, 0x2e, 0x4, 0x72a, 0x72c, 0x40,
          0x19e, 0x18c, 0x4c, 0x27, 0x19f, 0x14, 0xd0, 0x178 },
@@ -222,7 +234,6 @@ static struct control_regvals control_reg_init_7 = {
 
 /* Register values for 640x480, 67Hz mode (6) */
 static struct control_regvals control_reg_init_6 = {
-       { 640, 1280, 2560 },
        { 0, 8, 0x10 },
        { 1045, 1042, 82, 43, 4, 1048, 1050, 72,
          430, 393, 73, 31, 431, 16, 216, 400 },
@@ -233,7 +244,6 @@ static struct control_regvals control_reg_init_6 = {
 
 /* Register values for 640x480, 60Hz mode (5) */
 static struct control_regvals control_reg_init_5 = {
-       { 640, 1280, 2560 },
        { 0x10, 0x28, 0x50 },
        { 1037, 1026, 66, 34, 2, 1048, 1050, 56,
          398, 385, 65, 47, 399, 24, 200, 352, },
@@ -253,8 +263,8 @@ static struct control_regvals *control_reg_init[VMODE_MAX] = {
        &control_reg_init_12,
        &control_reg_init_13,
        &control_reg_init_14,
-       &control_reg_init_16,
-       &control_reg_init_16,
+       &control_reg_init_15,
+       &control_reg_init_15,
        &control_reg_init_17,
        &control_reg_init_18,
        &control_reg_init_19,
index 6c8f14b1db99fe22ab044f2a279435bea3942224..be477a33dcabb5356128ce40de6ce4b74ab1f1e1 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: creatorfb.c,v 1.15 1998/09/04 15:43:40 jj Exp $
+/* $Id: creatorfb.c,v 1.16 1998/12/21 05:14:39 davem Exp $
  * creatorfb.c: Creator/Creator3D frame buffer driver
  *
  * Copyright (C) 1997,1998 Jakub Jelinek (jj@ultra.linux.cz)
 #define FFB_ROP_NEW                  0x83
 
 #define FFB_UCSR_FIFO_MASK     0x00000fff
+#define FFB_UCSR_FB_BUSY       0x01000000
 #define FFB_UCSR_RP_BUSY       0x02000000
+#define FFB_UCSR_ALL_BUSY      (FFB_UCSR_RP_BUSY|FFB_UCSR_FB_BUSY)
+#define FFB_UCSR_READ_ERR      0x40000000
+#define FFB_UCSR_FIFO_OVFL     0x80000000
+#define FFB_UCSR_ALL_ERRORS    (FFB_UCSR_READ_ERR|FFB_UCSR_FIFO_OVFL)
 
 struct ffb_fbc {
        /* Next vertex registers */
@@ -271,6 +276,30 @@ struct ffb_fbc {
        volatile u32    mer;
 };
 
+static __inline__ void FFBFifo(struct ffb_fbc *ffb, int n)
+{
+       int limit = 10000;
+
+       do {
+               if((ffb->ucsr & FFB_UCSR_FIFO_MASK) >= (n + 4))
+                       break;
+               if((ffb->ucsr & FFB_UCSR_ALL_ERRORS) != 0)
+                       ffb->ucsr = FFB_UCSR_ALL_ERRORS;
+       } while(--limit > 0);
+}
+
+static __inline__ void FFBWait(struct ffb_fbc *ffb)
+{
+       int limit = 10000;
+
+       do {
+               if((ffb->ucsr & FFB_UCSR_ALL_BUSY) == 0)
+                       break;
+               if((ffb->ucsr & FFB_UCSR_ALL_ERRORS) != 0)
+                       ffb->ucsr = FFB_UCSR_ALL_ERRORS;
+       } while(--limit > 0);
+}
+
 struct ffb_dac {
        volatile u32    type;
        volatile u32    value;
@@ -313,6 +342,7 @@ static void ffb_clear(struct vc_data *conp, struct display *p, int sy, int sx,
        register struct ffb_fbc *fbc = fb->s.ffb.fbc;
        int x, y, w, h;
        
+       FFBFifo(fbc, 6);
        fbc->fg = ((u32 *)p->dispsw_data)[attr_bgcol_ec(p,conp)];
        fbc->drawop = FFB_DRAWOP_RECTANGLE;
 
@@ -330,6 +360,7 @@ static void ffb_clear(struct vc_data *conp, struct display *p, int sy, int sx,
        fbc->bx = x + fb->x_margin;
        fbc->bh = h;
        fbc->bw = w;
+       FFBWait(fbc);
 }
 
 static void ffb_fill(struct fb_info_sbusfb *fb, struct display *p, int s,
@@ -337,15 +368,18 @@ static void ffb_fill(struct fb_info_sbusfb *fb, struct display *p, int s,
 {
        register struct ffb_fbc *fbc = fb->s.ffb.fbc;
 
+       FFBFifo(fbc, 2);
        fbc->fg = ((u32 *)p->dispsw_data)[attr_bgcol(p,s)];
        fbc->drawop = FFB_DRAWOP_RECTANGLE;
        while (count-- > 0) {
+               FFBFifo(fbc, 4);
                fbc->by = boxes[1];
                fbc->bx = boxes[0];
                fbc->bh = boxes[3] - boxes[1];
                fbc->bw = boxes[2] - boxes[0];
                boxes += 4;
        }
+       FFBWait(fbc);
 }
 
 static void ffb_putc(struct vc_data *conp, struct display *p, int c, int yy, int xx)
@@ -370,11 +404,13 @@ static void ffb_putc(struct vc_data *conp, struct display *p, int c, int yy, int
                xy += (xx << fontwidthlog(p)) + fb->s.ffb.xy_margin;
        else
                xy += (xx * fontwidth(p)) + fb->s.ffb.xy_margin;
+       FFBFifo(fbc, 5);
        fbc->fg = ((u32 *)p->dispsw_data)[attr_fgcol(p,c)];
        fbc->bg = ((u32 *)p->dispsw_data)[attr_bgcol(p,c)];
        fbc->fontw = fontwidth(p);
        fbc->fontinc = 0x10000;
        fbc->fontxy = xy;
+       FFBFifo(fbc, fontheight(p));
        if (fontwidth(p) <= 8) {
                for (i = 0; i < fontheight(p); i++)
                        fbc->font = *fd++ << 24;
@@ -384,6 +420,7 @@ static void ffb_putc(struct vc_data *conp, struct display *p, int c, int yy, int
                        fd += 2;
                }
        }
+       FFBWait(fbc);
 }
 
 static void ffb_putcs(struct vc_data *conp, struct display *p, const unsigned short *s,
@@ -394,6 +431,7 @@ static void ffb_putcs(struct vc_data *conp, struct display *p, const unsigned sh
        int i, xy;
        u8 *fd1, *fd2, *fd3, *fd4;
 
+       FFBFifo(fbc, 2);
        fbc->fg = ((u32 *)p->dispsw_data)[attr_fgcol(p,*s)];
        fbc->bg = ((u32 *)p->dispsw_data)[attr_bgcol(p,*s)];
        xy = fb->s.ffb.xy_margin;
@@ -408,6 +446,7 @@ static void ffb_putcs(struct vc_data *conp, struct display *p, const unsigned sh
        if (fontwidth(p) <= 8) {
                while (count >= 4) {
                        count -= 4;
+                       FFBFifo(fbc, 3);
                        fbc->fontw = 4 * fontwidth(p);
                        fbc->fontinc = 0x10000;
                        fbc->fontxy = xy;
@@ -422,6 +461,7 @@ static void ffb_putcs(struct vc_data *conp, struct display *p, const unsigned sh
                                fd3 = p->fontdata + ((*s++ & p->charmask) * fontheight(p));
                                fd4 = p->fontdata + ((*s++ & p->charmask) * fontheight(p));
                        }
+                       FFBFifo(fbc, fontheight(p));
                        if (fontwidth(p) == 8) {
                                for (i = 0; i < fontheight(p); i++)
                                        fbc->font = ((u32)*fd4++) | ((((u32)*fd3++) | ((((u32)*fd2++) | (((u32)*fd1++) 
@@ -437,6 +477,7 @@ static void ffb_putcs(struct vc_data *conp, struct display *p, const unsigned sh
        } else {
                while (count >= 2) {
                        count -= 2;
+                       FFBFifo(fbc, 3);
                        fbc->fontw = 2 * fontwidth(p);
                        fbc->fontinc = 0x10000;
                        fbc->fontxy = xy;
@@ -447,6 +488,7 @@ static void ffb_putcs(struct vc_data *conp, struct display *p, const unsigned sh
                                fd1 = p->fontdata + (((*s++ & p->charmask) * fontheight(p)) << 1);
                                fd2 = p->fontdata + (((*s++ & p->charmask) * fontheight(p)) << 1);
                        }
+                       FFBFifo(fbc, fontheight(p));
                        for (i = 0; i < fontheight(p); i++) {
                                fbc->font = ((((u32)*(u16 *)fd1) << fontwidth(p)) | ((u32)*(u16 *)fd2)) << (16 - fontwidth(p));
                                fd1 += 2; fd2 += 2;
@@ -456,6 +498,7 @@ static void ffb_putcs(struct vc_data *conp, struct display *p, const unsigned sh
        }
        while (count) {
                count--;
+               FFBFifo(fbc, 3);
                fbc->fontw = fontwidth(p);
                fbc->fontinc = 0x10000;
                fbc->fontxy = xy;
@@ -463,6 +506,7 @@ static void ffb_putcs(struct vc_data *conp, struct display *p, const unsigned sh
                        i = ((*s++ & p->charmask) << fontheightlog(p));
                else
                        i = ((*s++ & p->charmask) * fontheight(p));
+               FFBFifo(fbc, fontheight(p));
                if (fontwidth(p) <= 8) {
                        fd1 = p->fontdata + i;
                        for (i = 0; i < fontheight(p); i++)
@@ -476,6 +520,7 @@ static void ffb_putcs(struct vc_data *conp, struct display *p, const unsigned sh
                }
                xy += fontwidth(p);
        }
+       FFBWait(fbc);
 }
 
 static void ffb_revc(struct display *p, int xx, int yy)
@@ -573,10 +618,12 @@ static void ffb_switch_from_graph (struct fb_info_sbusfb *fb)
 {
        register struct ffb_fbc *fbc = fb->s.ffb.fbc;
 
+       FFBFifo(fbc, 4);
        fbc->ppc = FFB_PPC_VCE_DISABLE|FFB_PPC_TBE_OPAQUE|FFB_PPC_APE_DISABLE|FFB_PPC_CS_CONST;
        fbc->fbc = 0x2000707f;
        fbc->rop = FFB_ROP_NEW;
        fbc->pmask = 0xffffffff;
+       FFBWait(fbc);
 }                                
 
 static char idstring[60] __initdata = { 0 };
@@ -625,6 +672,12 @@ __initfunc(char *creatorfb_init(struct fb_info_sbusfb *fb))
        fb->switch_from_graph = ffb_switch_from_graph;
        fb->fill = ffb_fill;
        
+       /* If there are any read errors or fifo overflow conditions,
+        * clear them now.
+        */
+       if((fb->s.ffb.fbc->ucsr & FFB_UCSR_ALL_ERRORS) != 0)
+               fb->s.ffb.fbc->ucsr = FFB_UCSR_ALL_ERRORS;
+
        ffb_switch_from_graph(fb);
        
        fb->physbase = regs[0].phys_addr;
index 80ec1481be89f165eeb85bd9eac5f95fa2a8310f..67034a9a9df7de17e88ab953456703f0a02c2473 100644 (file)
@@ -166,6 +166,8 @@ static unsigned char Cyber_colour_table [256][3];
 static unsigned long CyberMem;
 static unsigned long CyberSize;
 static volatile char *CyberRegs;
+static unsigned long CyberMem_phys;
+static unsigned long CyberRegs_phys;
 /* From cvision.c  for cvision_core.c */
 static unsigned long cv64_mem;
 static unsigned long cv64_fbmem;
@@ -428,9 +430,9 @@ static int Cyber_encode_fix(struct fb_fix_screeninfo *fix,
        DPRINTK("ENTER\n");
        memset(fix, 0, sizeof(struct fb_fix_screeninfo));
        strcpy(fix->id, cyberfb_name);
-       fix->smem_start = (char*) virt_to_phys ((void *)CyberMem);
+       fix->smem_start = (char*) CyberMem_phys;
        fix->smem_len = CyberSize;
-       fix->mmio_start = (char*) virt_to_phys ((void *)CyberRegs);
+       fix->mmio_start = (char*) CyberRegs_phys;
        fix->mmio_len = 0x10000;
 
        fix->type = FB_TYPE_PACKED_PIXELS;
@@ -1153,6 +1155,8 @@ __initfunc(void cyberfb_init(void))
 
        CyberMem = cv64_fbmem;
        CyberRegs = cv64_regs;
+       CyberMem_phys = board_addr + 0x01400000;
+       CyberRegs_phys = CyberMem_phys + 0x00c00000;
        DPRINTK("CyberMem=%08lx CyberRegs=%08lx\n", CyberMem,
                (long unsigned int)CyberRegs);
 
@@ -1453,7 +1457,7 @@ unsigned char cvconscolors[16][3] = {     /* background, foreground, hilite */
 /* -------------------- Hardware specific routines ------------------------- */
 #if 0
 /* ARB Generates 100 usec delay */
-inline void __delay (unsigned long usecs)
+inline void __cv_delay (unsigned long usecs)
 {
        int k;
        
@@ -1493,7 +1497,7 @@ inline unsigned char RAttr (volatile caddr_t board, short idx)
 {
        vgaw (board, ACT_ADDRESS_W, idx);
        udelay(100);
-       /* __delay (0); */
+       /* __cv_delay (0); */
        return (vgar (board, ACT_ADDRESS_R));
 }
 
@@ -1895,7 +1899,7 @@ static void cv64_board_init (void)
   vgaw16 (cv64_regs, ECR_BKGD_MIX, 0x07);
   vgaw16 (cv64_regs, ECR_READ_REG_DATA, 0x1000);
   udelay(200);
-  /* __delay (200000); */
+  /* __cv_delay (200000); */
   vgaw16 (cv64_regs, ECR_READ_REG_DATA, 0x2000);
   Cyber_WaitBlit();
   /* GfxBusyWait (cv64_regs); */
@@ -1903,7 +1907,7 @@ static void cv64_board_init (void)
   Cyber_WaitBlit();
   /* GfxBusyWait (cv64_regs); */
   udelay(200);
-  /* __delay (200000); */
+  /* __cv_delay (200000); */
   vgaw16 (cv64_regs, ECR_READ_REG_DATA, 0x4FFF);
   Cyber_WaitBlit();
   /* GfxBusyWait (cv64_regs); */
@@ -1961,7 +1965,9 @@ static void cv64_load_video_mode (struct fb_var_screeninfo *video_mode)
   int xres, hfront, hsync, hback;
   int yres, vfront, vsync, vback;
   int bpp;
+#if 0
   float freq_f;
+#endif
   long freq;
   /* ---------------- */
        
@@ -2066,9 +2072,15 @@ static void cv64_load_video_mode (struct fb_var_screeninfo *video_mode)
   /* cv64_compute_clock accepts arguments in Hz */
   /* pixclock is in ps ... convert to Hz */
        
+#if 0
   freq_f = (1.0 / (float) video_mode->pixclock) * 1000000000;
   freq = ((long) freq_f) * 1000;
-       
+#else
+/* freq = (long) ((long long)1000000000000 / (long long) video_mode->pixclock);
+ */
+  freq = (1000000000 / video_mode->pixclock) * 1000;
+#endif
+
   mnr = cv64_compute_clock (freq);
   WSeq (cv64_regs, SEQ_ID_DCLK_HI, ((mnr & 0xFF00) >> 8));
   WSeq (cv64_regs, SEQ_ID_DCLK_LO, (mnr & 0xFF));
@@ -2257,14 +2269,14 @@ static void cv64_load_video_mode (struct fb_var_screeninfo *video_mode)
   WCrt (cv64_regs, CRT_ID_EXT_SYS_CNTL_1, cr50);
        
   udelay(100);
-  /* __delay (100000); */
+  /* __cv_delay (100000); */
   WAttr (cv64_regs, ACT_ID_ATTR_MODE_CNTL, (TEXT ? 0x08 : 0x41));
   udelay(100);
-  /* __delay (100000); */
+  /* __cv_delay (100000); */
   WAttr (cv64_regs, ACT_ID_COLOR_PLANE_ENA,
         (video_mode->bits_per_pixel == 1) ? 0x01 : 0x0F);
   udelay(100);
-  /* __delay (100000); */
+  /* __cv_delay (100000); */
        
   tfillm = (96 * (cv64_memclk / 1000)) / 240000;
        
@@ -2296,7 +2308,7 @@ static void cv64_load_video_mode (struct fb_var_screeninfo *video_mode)
   WCrt (cv64_regs, CRT_ID_EXT_MEM_CNTL_2, m);
   WCrt (cv64_regs, CRT_ID_EXT_MEM_CNTL_3, n);
   udelay(10);
-  /* __delay (10000); */
+  /* __cv_delay (10000); */
        
   /* Text initialization */
        
index 232bc685723c724f1a10855632ee332e2d4cd05d..bce02a462d059cce5434ae57ad702a4722426084 100644 (file)
@@ -421,7 +421,7 @@ do { \
      /* --------------------------------- */
 
 /* in cvision_core.c */
-inline void __delay(unsigned long usecs);
+inline void __cv_delay(unsigned long usecs);
 inline void GfxBusyWait(volatile caddr_t board);
 inline void GfxFifoWait(volatile caddr_t board);
 inline unsigned char RAttr(volatile caddr_t board, short idx);
index 5fe78bc30e0ae05243e89eb554c877d1bbecab09..bfa98c71948f4a79113ad4a9a1cabcfcbe68c27e 100644 (file)
@@ -143,12 +143,12 @@ void fbcon_cfb8_putc(struct vc_data *conp, struct display *p, int c, int yy,
     case 12:
     case 16:
        for (rows = fontheight(p) ; rows-- ; dest += bytes) {
-           ((u32 *)dest)[0]= (nibbletab_cfb8[*(u16 *)cdat >> 12] & eorx) ^ bgx;
-           ((u32 *)dest)[1]= (nibbletab_cfb8[(*(u16 *)cdat >> 8) & 0xf] & eorx) ^ bgx;
-           ((u32 *)dest)[2]= (nibbletab_cfb8[(*(u16 *)cdat >> 4) & 0xf] & eorx) ^ bgx;
+           ((u32 *)dest)[0]= (nibbletab_cfb8[*cdat >> 4] & eorx) ^ bgx;
+           ((u32 *)dest)[1]= (nibbletab_cfb8[*cdat++ & 0xf] & eorx) ^ bgx;
+           ((u32 *)dest)[2]= (nibbletab_cfb8[*cdat >> 4] & eorx) ^ bgx;
            if (fontwidth(p) == 16)
                ((u32 *)dest)[3]= (nibbletab_cfb8[*cdat & 0xf] & eorx) ^ bgx;
-           cdat += 2;
+           cdat++;
         }
         break;
     }
@@ -200,12 +200,12 @@ void fbcon_cfb8_putcs(struct vc_data *conp, struct display *p,
            cdat = p->fontdata + (c * fontheight(p) << 1);
 
            for (rows = fontheight(p), dest = dest0; rows-- ; dest += bytes) {
-               ((u32 *)dest)[0]= (nibbletab_cfb8[*(u16 *)cdat >> 12] & eorx) ^ bgx;
-               ((u32 *)dest)[1]= (nibbletab_cfb8[(*(u16 *)cdat >> 8) & 0xf] & eorx) ^ bgx;
-               ((u32 *)dest)[2]= (nibbletab_cfb8[(*(u16 *)cdat >> 4) & 0xf] & eorx) ^ bgx;
+               ((u32 *)dest)[0]= (nibbletab_cfb8[*cdat >> 4] & eorx) ^ bgx;
+               ((u32 *)dest)[1]= (nibbletab_cfb8[*cdat++ & 0xf] & eorx) ^ bgx;
+               ((u32 *)dest)[2]= (nibbletab_cfb8[(*cdat >> 4) & 0xf] & eorx) ^ bgx;
                if (fontwidth(p) == 16)
                    ((u32 *)dest)[3]= (nibbletab_cfb8[*cdat & 0xf] & eorx) ^ bgx;
-               cdat += 2;
+               cdat++;
            }
            dest0+=fontwidth(p);
         }
index 9bdc9020b0f9b4ff8bba7a29b925af2234fe20bd..657bbdb136a6fd5d74c67f8931fe3594dc92576d 100644 (file)
@@ -944,7 +944,8 @@ static int fbcon_scroll(struct vc_data *conp, int t, int b, int dir,
 {
     int unit = conp->vc_num;
     struct display *p = &fb_display[unit];
-    int is_txt = (p->type == FB_TYPE_TEXT);
+    int scroll_partial = !(p->scrollmode & __SCROLL_YNOPARTIAL);
+    int logos_left = 0; int logos_width = conp->vc_cols;
 
     if (!p->can_soft_blank && console_blanked)
        return 0;
@@ -962,22 +963,34 @@ static int fbcon_scroll(struct vc_data *conp, int t, int b, int dir,
 
     switch (dir) {
        case SM_UP:
+           /* K.Garloff@ping.de, 98/10/21: If logo is diplayed, only save logo
+            * and not the hole top region. In combination with the logo being
+            * displayed on the right side, this allows scrollback feature
+            * when bootlogo is displayed. */
+            if (t != 0 && logo_shown == fg_console) {
+               struct display *p = &fb_display[unit];
+               int lw = (smp_num_cpus * (LOGO_W + 8) - 7) / fontwidth(p) + 1;
+               logos_left = conp->vc_cols - lw;
+               while (logos_left < 0) logos_left += (LOGO_W + 8 - 7) / fontwidth(p);
+               logos_width = conp->vc_cols - logos_left;
+           }
            if (count > conp->vc_rows)  /* Maximum realistic size */
                count = conp->vc_rows;
            switch (p->scrollmode & __SCROLL_YMASK) {
            case __SCROLL_YMOVE:
-               p->dispsw->bmove(p, t+count, 0, t, 0, b-t-count,
+               if (t > 0) p->dispsw->bmove(p, 0, logos_left, count,
+                                       logos_left, t, logos_width);
+               p->dispsw->bmove(p, count, 0, 0, 0, b-count,
                                 conp->vc_cols);
-               p->dispsw->clear(conp, p, b-count, 0, count,
+               p->dispsw->clear(conp, p, b-count, 0, count,
                                 conp->vc_cols);
                break;
 
            case __SCROLL_YWRAP:
-               if (b-t-count > 3*conp->vc_rows>>2) {
+               if (b-t-count > 2*conp->vc_rows/3) {
                    if (t > 0)
-                       fbcon_bmove(conp, 0, 0, count, 0, t,
-                                   conp->vc_cols);
-                       ywrap_up(unit, conp, p, count);
+                       fbcon_bmove(conp, 0, logos_left, count, logos_left, t, logos_width);
+                   ywrap_up(unit, conp, p, count);
                    if (conp->vc_rows-b > 0)
                        fbcon_bmove(conp, b-count, 0, b, 0,
                                    conp->vc_rows-b, conp->vc_cols);
@@ -990,11 +1003,11 @@ static int fbcon_scroll(struct vc_data *conp, int t, int b, int dir,
                break;
 
            case __SCROLL_YPAN:
-               if (( is_txt && (b-t == conp->vc_rows)) ||
-                   (!is_txt && (b-t-count > 3*conp->vc_rows>>2))) {
+               if (( !scroll_partial && (b-t == conp->vc_rows)) ||
+                   ( scroll_partial  && (b-t-count > 3*conp->vc_rows>>2))) {
                    if (t > 0)
-                       fbcon_bmove(conp, 0, 0, count, 0, t,
-                                   conp->vc_cols);
+                       fbcon_bmove(conp, 0, logos_left, count, logos_left, t,
+                                   logos_width);
                    ypan_up(unit, conp, p, count);
                    if (conp->vc_rows-b > 0)
                        fbcon_bmove(conp, b-count, 0, b, 0,
@@ -1049,8 +1062,8 @@ static int fbcon_scroll(struct vc_data *conp, int t, int b, int dir,
                break;
 
            case __SCROLL_YPAN:
-               if (( is_txt && (b-t == conp->vc_rows)) ||
-                   (!is_txt && (b-t-count > 3*conp->vc_rows>>2))) {
+               if (( !scroll_partial && (b-t == conp->vc_rows)) ||
+                   ( scroll_partial  && (b-t-count > 3*conp->vc_rows>>2))) {
                    if (conp->vc_rows-b > 0)
                        fbcon_bmove(conp, b, 0, b-count, 0,
                                    conp->vc_rows-b, conp->vc_cols);
@@ -1250,46 +1263,41 @@ static inline int fbcon_get_font(int unit, struct console_font_op *op)
     if (!op->data) return 0;
     
     if (op->width <= 8) {
+       j = fontheight(p);
        for (i = 0; i < op->charcount; i++) {
-           for (j = 0; j < fontheight(p); j++)
-               *data++ = *fontdata++;
-           memset(data, 0, 32-j);
-           data += 32 - j;
+           memcpy(data, fontdata, j);
+           memset(data+j, 0, 32-j);
+           data += 32;
+           fontdata += j;
        }
     }
 #ifndef CONFIG_FBCON_FONTWIDTH8_ONLY
     else if (op->width <= 16) {
+       j = fontheight(p) * 2;
        for (i = 0; i < op->charcount; i++) {
-           for (j = 0; j < fontheight(p); j++) {
-               *data++ = *(u16 *)fontdata >> 8;
-               *data++ = *(u16 *)fontdata;
-               fontdata += sizeof(u16);
-           }
-           memset(data, 0, 2*(32-j));
-           data += 2 * (32 - j);
+           memcpy(data, fontdata, j);
+           memset(data+j, 0, 64-j);
+           data += 64;
+           fontdata += j;
        }
     } else if (op->width <= 24) {
        for (i = 0; i < op->charcount; i++) {
            for (j = 0; j < fontheight(p); j++) {
-               *data++ = *(u32 *)fontdata >> 24;
-               *data++ = *(u32 *)fontdata >> 16;
-               *data++ = *(u32 *)fontdata >> 8;
+               *data++ = fontdata[0];
+               *data++ = fontdata[1];
+               *data++ = fontdata[2];
                fontdata += sizeof(u32);
            }
            memset(data, 0, 3*(32-j));
            data += 3 * (32 - j);
        }
     } else {
+       j = fontheight(p) * 4;
        for (i = 0; i < op->charcount; i++) {
-           for (j = 0; j < fontheight(p); j++) {
-               *data++ = *(u32 *)fontdata >> 24;
-               *data++ = *(u32 *)fontdata >> 16;
-               *data++ = *(u32 *)fontdata >> 8;
-               *data++ = *(u32 *)fontdata;
-               fontdata += sizeof(u32);
-           }
-           memset(data, 0, 4*(32-j));
-           data += 4 * (32 - j);
+           memcpy(data, fontdata, j);
+           memset(data+j, 0, 128-j);
+           data += 128;
+           fontdata += j;
        }
     }
 #endif
@@ -1329,12 +1337,44 @@ static int fbcon_do_set_font(int unit, struct console_font_op *op, u8 *data, int
        p->fgshift--;
        p->bgshift--;
        p->charmask = 0xff;
+
+       /* ++Edmund: reorder the attribute bits */
+       {
+           struct vc_data *conp = p->conp;
+           unsigned short *cp = (unsigned short *) conp->vc_origin;
+           int count = conp->vc_screenbuf_size/2;
+           unsigned short c;
+           for (; count > 0; count--, cp++) {
+               c = scr_readw(cp);
+               scr_writew(((c & 0xfe00) >> 1) | (c & 0xff), cp);
+           }
+           c = conp->vc_video_erase_char;
+           conp->vc_video_erase_char = ((c & 0xfe00) >> 1) | (c & 0xff);
+           conp->vc_attr >>= 1;
+       }
+
     } else if (!p->conp->vc_hi_font_mask && cnt == 512) {
        p->conp->vc_hi_font_mask = 0x100;
        p->conp->vc_complement_mask <<= 1;
        p->fgshift++;
        p->bgshift++;
        p->charmask = 0x1ff;
+
+       /* ++Edmund: reorder the attribute bits */
+       {
+           struct vc_data *conp = p->conp;
+           unsigned short *cp = (unsigned short *) conp->vc_origin;
+           int count = conp->vc_screenbuf_size/2;
+           unsigned short c;
+           for (; count > 0; count--, cp++) {
+               c = scr_readw(cp);
+               scr_writew(((c & 0xff00) << 1) | (c & 0xff), cp);
+           }
+           c = conp->vc_video_erase_char;
+           conp->vc_video_erase_char = ((c & 0xff00) << 1) | (c & 0xff);
+           conp->vc_attr <<= 1;
+       }
+
     }
     fbcon_font_widths(p);
 
@@ -1381,16 +1421,13 @@ static inline int fbcon_set_font(int unit, struct console_font_op *op)
     int h = op->height;
     int size = h;
     int i, j, k;
-    u8 *new_data, *data = op->data, c, *p;
-#ifndef CONFIG_FBCON_FONTWIDTH8_ONLY
-    u32 d;
-#else
+    u8 *new_data, *data = op->data, *p;
 
+#ifdef CONFIG_FBCON_FONTWIDTH8_ONLY
     if (w != 8)
        return -EINVAL;
 #endif
-
-    if (w > 32 || (op->charcount != 256 && op->charcount != 512))
+    if ((w <= 0) || (w > 32) || (op->charcount != 256 && op->charcount != 512))
         return -EINVAL;
     
     if (w > 8) { 
@@ -1407,56 +1444,46 @@ static inline int fbcon_set_font(int unit, struct console_font_op *op)
     FNTSIZE(new_data) = size;
     FNTCHARCNT(new_data) = op->charcount;
     REFCOUNT(new_data) = 0; /* usage counter */
-    k = 0;
     p = new_data;
     if (w <= 8) {
        for (i = 0; i < op->charcount; i++) {
-           for (j = 0; j < h; j++) {
-               c = *data++;
-               k += c;
-               *p++ = c;
-           }
-           data += 32 - h;
+           memcpy(p, data, h);
+           data += 32;
+           p += h;
        }
     }
 #ifndef CONFIG_FBCON_FONTWIDTH8_ONLY
     else if (w <= 16) {
+       h *= 2;
        for (i = 0; i < op->charcount; i++) {
-           for (j = 0; j < h; j++) {
-               d = (data[0] << 8) | data[1];
-               data += 2;
-               k += d;
-               *(u16 *)p = d;
-               p += sizeof(u16);
-           }
-           data += 2*(32 - h);
+           memcpy(p, data, h);
+           data += 64;
+           p += h;
        }
-    } else {
+    } else if (w <= 24) {
        for (i = 0; i < op->charcount; i++) {
            for (j = 0; j < h; j++) {
-               if (w <= 24) {
-                   d = (data[0] << 24) | 
-                       (data[1] << 16) | 
-                       (data[2] << 8);
-                   data += 3;
-               } else {
-                   d = (data[0] << 24) | 
-                       (data[1] << 16) | 
-                       (data[2] << 8) |
-                       data[3];
-                   data += 4;
-               }
-               k += d;
-               *(u32 *)p = d;
+               memcpy(p, data, 3);
+               p[3] = 0;
+               data += 3;
                p += sizeof(u32);
            }
-           if (w <= 24)
-               data += 3*(32 - h);
-           else
-               data += 4*(32 - h);
+           data += 3*(32 - h);
+       }
+    } else {
+       h *= 4;
+       for (i = 0; i < op->charcount; i++) {
+           memcpy(p, data, h);
+           data += 128;
+           p += h;
        }
     }
 #endif
+    /* we can do it in u32 chunks because of charcount is 256 or 512, so
+       font length must be multiple of 256, at least. And 256 is multiple
+       of 4 */
+    k = 0;
+    while (p > new_data) k += *--(u32 *)p;
     FNTSUM(new_data) = k;
     /* Check if the same font is on some other console already */
     for (i = 0; i < MAX_NR_CONSOLES; i++) {
@@ -1587,7 +1614,7 @@ static int fbcon_scrolldelta(struct vc_data *conp, int lines)
     p->var.xoffset = 0;
     p->var.yoffset = offset*fontheight(p);
     p->fb_info->updatevar(unit, p->fb_info);
-    if (!offset)
+    if (!scrollback_current)
        fbcon_cursor(conp, CM_DRAW);
     return 0;
 }
@@ -1664,8 +1691,8 @@ __initfunc(static int fbcon_show_logo( void ))
        logo_depth = 1;
     }
 
-    for (x = 0; x < smp_num_cpus * (LOGO_W + 8) &&
-        x < p->var.xres - (LOGO_W + 8); x += (LOGO_W + 8)) {
+    for (x = p->var.xres - LOGO_W; x > 0 && x > (int)p->var.xres 
+        - smp_num_cpus * (LOGO_W + 8); x -= (LOGO_W + 8)) {
         
 #if defined(CONFIG_FBCON_CFB16) || defined(CONFIG_FBCON_CFB24) || \
     defined(CONFIG_FBCON_CFB32) || defined(CONFIG_FB_SBUS)
@@ -1768,6 +1795,20 @@ __initfunc(static int fbcon_show_logo( void ))
            done = 1;
        }
 #endif
+#if defined(CONFIG_FBCON_CFB4)
+       if (depth == 4 && p->type == FB_TYPE_PACKED_PIXELS) {
+               src = logo;
+               for( y1 = 0; y1 < LOGO_H; y1++) {
+                       dst = fb + y1*line + x/2;
+                       for( x1 = 0; x1 < LOGO_W/2; x1++) {
+                               u8 q = *src++;
+                               q = (q << 4) | (q >> 4);
+                               *dst++ = q;
+                       }
+               }
+               done = 1;
+       }
+#endif
 #if defined(CONFIG_FBCON_CFB8) || defined(CONFIG_FB_SBUS)
        if (depth == 8 && p->type == FB_TYPE_PACKED_PIXELS) {
            /* depth 8 or more, packed, with color registers */
index c4cd54c7a486f16a525eb2fe5d3a178673f23803..803b35ea8d72c491128d97f1f26e3f99c95eee4d 100644 (file)
 #include <video/font.h>
 
-#define FONTDATAMAX 5632
+#define FONTDATAMAX 11264
 
-static unsigned short fontdata_sun12x22[FONTDATAMAX] = {
+static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
 
        /* 0 0x00 '^@' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 1 0x01 '^A' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 2 0x02 '^B' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 3 0x03 '^C' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 4 0x04 '^D' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 5 0x05 '^E' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 6 0x06 '^F' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 7 0x07 '^G' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 8 0x08 '^H' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 9 0x09 '^I' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 10 0x0a '^J' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 11 0x0b '^K' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 12 0x0c '^L' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 13 0x0d '^M' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 14 0x0e '^N' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 15 0x0f '^O' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 16 0x10 '^P' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 17 0x11 '^Q' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 18 0x12 '^R' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 19 0x13 '^S' */
-       0x0000, /* 000000000000 */
-       0x3180, /* 001100011000 */
-       0x3180, /* 001100011000 */
-       0x3180, /* 001100011000 */
-       0x3180, /* 001100011000 */
-       0x3180, /* 001100011000 */
-       0x3180, /* 001100011000 */
-       0x3180, /* 001100011000 */
-       0x3180, /* 001100011000 */
-       0x3180, /* 001100011000 */
-       0x3180, /* 001100011000 */
-       0x3180, /* 001100011000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3180, /* 001100011000 */
-       0x3180, /* 001100011000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x31, 0x80, /* 001100011000 */
+       0x31, 0x80, /* 001100011000 */
+       0x31, 0x80, /* 001100011000 */
+       0x31, 0x80, /* 001100011000 */
+       0x31, 0x80, /* 001100011000 */
+       0x31, 0x80, /* 001100011000 */
+       0x31, 0x80, /* 001100011000 */
+       0x31, 0x80, /* 001100011000 */
+       0x31, 0x80, /* 001100011000 */
+       0x31, 0x80, /* 001100011000 */
+       0x31, 0x80, /* 001100011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x31, 0x80, /* 001100011000 */
+       0x31, 0x80, /* 001100011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 20 0x14 '^T' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1ff0, /* 000111111111 */
-       0x3cc0, /* 001111001100 */
-       0x7cc0, /* 011111001100 */
-       0x7cc0, /* 011111001100 */
-       0x7cc0, /* 011111001100 */
-       0x3cc0, /* 001111001100 */
-       0x1cc0, /* 000111001100 */
-       0x0cc0, /* 000011001100 */
-       0x0cc0, /* 000011001100 */
-       0x0cc0, /* 000011001100 */
-       0x0cc0, /* 000011001100 */
-       0x0cc0, /* 000011001100 */
-       0x0cc0, /* 000011001100 */
-       0x1ce0, /* 000111001110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1f, 0xf0, /* 000111111111 */
+       0x3c, 0xc0, /* 001111001100 */
+       0x7c, 0xc0, /* 011111001100 */
+       0x7c, 0xc0, /* 011111001100 */
+       0x7c, 0xc0, /* 011111001100 */
+       0x3c, 0xc0, /* 001111001100 */
+       0x1c, 0xc0, /* 000111001100 */
+       0x0c, 0xc0, /* 000011001100 */
+       0x0c, 0xc0, /* 000011001100 */
+       0x0c, 0xc0, /* 000011001100 */
+       0x0c, 0xc0, /* 000011001100 */
+       0x0c, 0xc0, /* 000011001100 */
+       0x0c, 0xc0, /* 000011001100 */
+       0x1c, 0xe0, /* 000111001110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 21 0x15 '^U' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1f00, /* 000111110000 */
-       0x3180, /* 001100011000 */
-       0x3180, /* 001100011000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x1f00, /* 000111110000 */
-       0x3180, /* 001100011000 */
-       0x3180, /* 001100011000 */
-       0x1f00, /* 000111110000 */
-       0x0180, /* 000000011000 */
-       0x0180, /* 000000011000 */
-       0x3180, /* 001100011000 */
-       0x3180, /* 001100011000 */
-       0x1f00, /* 000111110000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1f, 0x00, /* 000111110000 */
+       0x31, 0x80, /* 001100011000 */
+       0x31, 0x80, /* 001100011000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x1f, 0x00, /* 000111110000 */
+       0x31, 0x80, /* 001100011000 */
+       0x31, 0x80, /* 001100011000 */
+       0x1f, 0x00, /* 000111110000 */
+       0x01, 0x80, /* 000000011000 */
+       0x01, 0x80, /* 000000011000 */
+       0x31, 0x80, /* 001100011000 */
+       0x31, 0x80, /* 001100011000 */
+       0x1f, 0x00, /* 000111110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 22 0x16 '^V' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 23 0x17 '^W' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 24 0x18 '^X' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 25 0x19 '^Y' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 26 0x1a '^Z' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 27 0x1b '^[' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 28 0x1c '^\' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 29 0x1d '^]' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 30 0x1e '^^' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 31 0x1f '^_' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 32 0x20 ' ' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 33 0x21 '!' */
-       0x0000, /* 000000000000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 34 0x22 '"' */
-       0x0000, /* 000000000000 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 35 0x23 '#' */
-       0x0000, /* 000000000000 */
-       0x0330, /* 000000110011 */
-       0x0330, /* 000000110011 */
-       0x0330, /* 000000110011 */
-       0x0660, /* 000001100110 */
-       0x1ff0, /* 000111111111 */
-       0x1ff0, /* 000111111111 */
-       0x0cc0, /* 000011001100 */
-       0x0cc0, /* 000011001100 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0x7fc0, /* 011111111100 */
-       0x7fc0, /* 011111111100 */
-       0x3300, /* 001100110000 */
-       0x6600, /* 011001100000 */
-       0x6600, /* 011001100000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x03, 0x30, /* 000000110011 */
+       0x03, 0x30, /* 000000110011 */
+       0x03, 0x30, /* 000000110011 */
+       0x06, 0x60, /* 000001100110 */
+       0x1f, 0xf0, /* 000111111111 */
+       0x1f, 0xf0, /* 000111111111 */
+       0x0c, 0xc0, /* 000011001100 */
+       0x0c, 0xc0, /* 000011001100 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0x7f, 0xc0, /* 011111111100 */
+       0x7f, 0xc0, /* 011111111100 */
+       0x33, 0x00, /* 001100110000 */
+       0x66, 0x00, /* 011001100000 */
+       0x66, 0x00, /* 011001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 36 0x24 '$' */
-       0x0000, /* 000000000000 */
-       0x0600, /* 000001100000 */
-       0x1f80, /* 000111111000 */
-       0x3fc0, /* 001111111100 */
-       0x66e0, /* 011001101110 */
-       0x6660, /* 011001100110 */
-       0x6600, /* 011001100000 */
-       0x3e00, /* 001111100000 */
-       0x1f80, /* 000111111000 */
-       0x07c0, /* 000001111100 */
-       0x0660, /* 000001100110 */
-       0x0660, /* 000001100110 */
-       0x6660, /* 011001100110 */
-       0x7fc0, /* 011111111100 */
-       0x3f80, /* 001111111000 */
-       0x0600, /* 000001100000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x1f, 0x80, /* 000111111000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x66, 0xe0, /* 011001101110 */
+       0x66, 0x60, /* 011001100110 */
+       0x66, 0x00, /* 011001100000 */
+       0x3e, 0x00, /* 001111100000 */
+       0x1f, 0x80, /* 000111111000 */
+       0x07, 0xc0, /* 000001111100 */
+       0x06, 0x60, /* 000001100110 */
+       0x06, 0x60, /* 000001100110 */
+       0x66, 0x60, /* 011001100110 */
+       0x7f, 0xc0, /* 011111111100 */
+       0x3f, 0x80, /* 001111111000 */
+       0x06, 0x00, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 37 0x25 '%' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x38c0, /* 001110001100 */
-       0x4cc0, /* 010011001100 */
-       0x4580, /* 010001011000 */
-       0x6580, /* 011001011000 */
-       0x3b00, /* 001110110000 */
-       0x0300, /* 000000110000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0c00, /* 000011000000 */
-       0x0dc0, /* 000011011100 */
-       0x1a60, /* 000110100110 */
-       0x1a20, /* 000110100010 */
-       0x3320, /* 001100110010 */
-       0x31c0, /* 001100011100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x38, 0xc0, /* 001110001100 */
+       0x4c, 0xc0, /* 010011001100 */
+       0x45, 0x80, /* 010001011000 */
+       0x65, 0x80, /* 011001011000 */
+       0x3b, 0x00, /* 001110110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0d, 0xc0, /* 000011011100 */
+       0x1a, 0x60, /* 000110100110 */
+       0x1a, 0x20, /* 000110100010 */
+       0x33, 0x20, /* 001100110010 */
+       0x31, 0xc0, /* 001100011100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 38 0x26 '&' */
-       0x0000, /* 000000000000 */
-       0x0700, /* 000001110000 */
-       0x0f80, /* 000011111000 */
-       0x18c0, /* 000110001100 */
-       0x18c0, /* 000110001100 */
-       0x18c0, /* 000110001100 */
-       0x0f80, /* 000011111000 */
-       0x1e00, /* 000111100000 */
-       0x3e00, /* 001111100000 */
-       0x7700, /* 011101110000 */
-       0x6360, /* 011000110110 */
-       0x61e0, /* 011000011110 */
-       0x61c0, /* 011000011100 */
-       0x6180, /* 011000011000 */
-       0x3fe0, /* 001111111110 */
-       0x1e60, /* 000111100110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x07, 0x00, /* 000001110000 */
+       0x0f, 0x80, /* 000011111000 */
+       0x18, 0xc0, /* 000110001100 */
+       0x18, 0xc0, /* 000110001100 */
+       0x18, 0xc0, /* 000110001100 */
+       0x0f, 0x80, /* 000011111000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x3e, 0x00, /* 001111100000 */
+       0x77, 0x00, /* 011101110000 */
+       0x63, 0x60, /* 011000110110 */
+       0x61, 0xe0, /* 011000011110 */
+       0x61, 0xc0, /* 011000011100 */
+       0x61, 0x80, /* 011000011000 */
+       0x3f, 0xe0, /* 001111111110 */
+       0x1e, 0x60, /* 000111100110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 39 0x27 ''' */
-       0x0000, /* 000000000000 */
-       0x0c00, /* 000011000000 */
-       0x1e00, /* 000111100000 */
-       0x1e00, /* 000111100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0c00, /* 000011000000 */
-       0x1800, /* 000110000000 */
-       0x1000, /* 000100000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x18, 0x00, /* 000110000000 */
+       0x10, 0x00, /* 000100000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 40 0x28 '(' */
-       0x0000, /* 000000000000 */
-       0x0180, /* 000000011000 */
-       0x0300, /* 000000110000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0300, /* 000000110000 */
-       0x0180, /* 000000011000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x01, 0x80, /* 000000011000 */
+       0x03, 0x00, /* 000000110000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x03, 0x00, /* 000000110000 */
+       0x01, 0x80, /* 000000011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 41 0x29 ')' */
-       0x0000, /* 000000000000 */
-       0x1800, /* 000110000000 */
-       0x0c00, /* 000011000000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0300, /* 000000110000 */
-       0x0300, /* 000000110000 */
-       0x0300, /* 000000110000 */
-       0x0300, /* 000000110000 */
-       0x0300, /* 000000110000 */
-       0x0300, /* 000000110000 */
-       0x0300, /* 000000110000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0c00, /* 000011000000 */
-       0x1800, /* 000110000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x18, 0x00, /* 000110000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x03, 0x00, /* 000000110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x18, 0x00, /* 000110000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 42 0x2a '*' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0f00, /* 000011110000 */
-       0x0600, /* 000001100000 */
-       0x6660, /* 011001100110 */
-       0x76e0, /* 011101101110 */
-       0x1980, /* 000110011000 */
-       0x0000, /* 000000000000 */
-       0x1980, /* 000110011000 */
-       0x76e0, /* 011101101110 */
-       0x6660, /* 011001100110 */
-       0x0600, /* 000001100000 */
-       0x0f00, /* 000011110000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x06, 0x00, /* 000001100000 */
+       0x66, 0x60, /* 011001100110 */
+       0x76, 0xe0, /* 011101101110 */
+       0x19, 0x80, /* 000110011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x19, 0x80, /* 000110011000 */
+       0x76, 0xe0, /* 011101101110 */
+       0x66, 0x60, /* 011001100110 */
+       0x06, 0x00, /* 000001100000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 43 0x2b '+' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x7fe0, /* 011111111110 */
-       0x7fe0, /* 011111111110 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 44 0x2c ',' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0c00, /* 000011000000 */
-       0x1e00, /* 000111100000 */
-       0x1e00, /* 000111100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0c00, /* 000011000000 */
-       0x1800, /* 000110000000 */
-       0x1000, /* 000100000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x18, 0x00, /* 000110000000 */
+       0x10, 0x00, /* 000100000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 45 0x2d '-' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x7fe0, /* 011111111110 */
-       0x7fe0, /* 011111111110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 46 0x2e '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0c00, /* 000011000000 */
-       0x1e00, /* 000111100000 */
-       0x1e00, /* 000111100000 */
-       0x0c00, /* 000011000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 47 0x2f '/' */
-       0x0000, /* 000000000000 */
-       0x0060, /* 000000000110 */
-       0x00c0, /* 000000001100 */
-       0x00c0, /* 000000001100 */
-       0x0180, /* 000000011000 */
-       0x0180, /* 000000011000 */
-       0x0300, /* 000000110000 */
-       0x0300, /* 000000110000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x1800, /* 000110000000 */
-       0x1800, /* 000110000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x6000, /* 011000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x60, /* 000000000110 */
+       0x00, 0xc0, /* 000000001100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x01, 0x80, /* 000000011000 */
+       0x01, 0x80, /* 000000011000 */
+       0x03, 0x00, /* 000000110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x18, 0x00, /* 000110000000 */
+       0x18, 0x00, /* 000110000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 48 0x30 '0' */
-       0x0000, /* 000000000000 */
-       0x0700, /* 000001110000 */
-       0x0f80, /* 000011111000 */
-       0x1180, /* 000100011000 */
-       0x10c0, /* 000100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x3080, /* 001100001000 */
-       0x1880, /* 000110001000 */
-       0x1f00, /* 000111110000 */
-       0x0e00, /* 000011100000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x07, 0x00, /* 000001110000 */
+       0x0f, 0x80, /* 000011111000 */
+       0x11, 0x80, /* 000100011000 */
+       0x10, 0xc0, /* 000100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0x80, /* 001100001000 */
+       0x18, 0x80, /* 000110001000 */
+       0x1f, 0x00, /* 000111110000 */
+       0x0e, 0x00, /* 000011100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 49 0x31 '1' */
-       0x0000, /* 000000000000 */
-       0x0200, /* 000000100000 */
-       0x0600, /* 000001100000 */
-       0x0e00, /* 000011100000 */
-       0x1e00, /* 000111100000 */
-       0x3600, /* 001101100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x02, 0x00, /* 000000100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x0e, 0x00, /* 000011100000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x36, 0x00, /* 001101100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 50 0x32 '2' */
-       0x0000, /* 000000000000 */
-       0x1f00, /* 000111110000 */
-       0x3f80, /* 001111111000 */
-       0x61c0, /* 011000011100 */
-       0x40c0, /* 010000001100 */
-       0x00c0, /* 000000001100 */
-       0x00c0, /* 000000001100 */
-       0x00c0, /* 000000001100 */
-       0x0180, /* 000000011000 */
-       0x0300, /* 000000110000 */
-       0x0600, /* 000001100000 */
-       0x0c00, /* 000011000000 */
-       0x1800, /* 000110000000 */
-       0x3020, /* 001100000010 */
-       0x7fe0, /* 011111111110 */
-       0x7fe0, /* 011111111110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1f, 0x00, /* 000111110000 */
+       0x3f, 0x80, /* 001111111000 */
+       0x61, 0xc0, /* 011000011100 */
+       0x40, 0xc0, /* 010000001100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x01, 0x80, /* 000000011000 */
+       0x03, 0x00, /* 000000110000 */
+       0x06, 0x00, /* 000001100000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x18, 0x00, /* 000110000000 */
+       0x30, 0x20, /* 001100000010 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 51 0x33 '3' */
-       0x0000, /* 000000000000 */
-       0x0f80, /* 000011111000 */
-       0x1fc0, /* 000111111100 */
-       0x20e0, /* 001000001110 */
-       0x4060, /* 010000000110 */
-       0x0060, /* 000000000110 */
-       0x00e0, /* 000000001110 */
-       0x07c0, /* 000001111100 */
-       0x0fc0, /* 000011111100 */
-       0x00e0, /* 000000001110 */
-       0x0060, /* 000000000110 */
-       0x0060, /* 000000000110 */
-       0x4060, /* 010000000110 */
-       0x6040, /* 011000000100 */
-       0x3f80, /* 001111111000 */
-       0x1f00, /* 000111110000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x80, /* 000011111000 */
+       0x1f, 0xc0, /* 000111111100 */
+       0x20, 0xe0, /* 001000001110 */
+       0x40, 0x60, /* 010000000110 */
+       0x00, 0x60, /* 000000000110 */
+       0x00, 0xe0, /* 000000001110 */
+       0x07, 0xc0, /* 000001111100 */
+       0x0f, 0xc0, /* 000011111100 */
+       0x00, 0xe0, /* 000000001110 */
+       0x00, 0x60, /* 000000000110 */
+       0x00, 0x60, /* 000000000110 */
+       0x40, 0x60, /* 010000000110 */
+       0x60, 0x40, /* 011000000100 */
+       0x3f, 0x80, /* 001111111000 */
+       0x1f, 0x00, /* 000111110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 52 0x34 '4' */
-       0x0000, /* 000000000000 */
-       0x0180, /* 000000011000 */
-       0x0380, /* 000000111000 */
-       0x0380, /* 000000111000 */
-       0x0580, /* 000001011000 */
-       0x0580, /* 000001011000 */
-       0x0980, /* 000010011000 */
-       0x0980, /* 000010011000 */
-       0x1180, /* 000100011000 */
-       0x1180, /* 000100011000 */
-       0x2180, /* 001000011000 */
-       0x3fe0, /* 001111111110 */
-       0x7fe0, /* 011111111110 */
-       0x0180, /* 000000011000 */
-       0x0180, /* 000000011000 */
-       0x0180, /* 000000011000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x01, 0x80, /* 000000011000 */
+       0x03, 0x80, /* 000000111000 */
+       0x03, 0x80, /* 000000111000 */
+       0x05, 0x80, /* 000001011000 */
+       0x05, 0x80, /* 000001011000 */
+       0x09, 0x80, /* 000010011000 */
+       0x09, 0x80, /* 000010011000 */
+       0x11, 0x80, /* 000100011000 */
+       0x11, 0x80, /* 000100011000 */
+       0x21, 0x80, /* 001000011000 */
+       0x3f, 0xe0, /* 001111111110 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x01, 0x80, /* 000000011000 */
+       0x01, 0x80, /* 000000011000 */
+       0x01, 0x80, /* 000000011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 53 0x35 '5' */
-       0x0000, /* 000000000000 */
-       0x0fc0, /* 000011111100 */
-       0x0fc0, /* 000011111100 */
-       0x1000, /* 000100000000 */
-       0x1000, /* 000100000000 */
-       0x2000, /* 001000000000 */
-       0x3f80, /* 001111111000 */
-       0x31c0, /* 001100011100 */
-       0x00e0, /* 000000001110 */
-       0x0060, /* 000000000110 */
-       0x0060, /* 000000000110 */
-       0x0060, /* 000000000110 */
-       0x4060, /* 010000000110 */
-       0x6060, /* 011000000110 */
-       0x30c0, /* 001100001100 */
-       0x1f80, /* 000111111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0xc0, /* 000011111100 */
+       0x0f, 0xc0, /* 000011111100 */
+       0x10, 0x00, /* 000100000000 */
+       0x10, 0x00, /* 000100000000 */
+       0x20, 0x00, /* 001000000000 */
+       0x3f, 0x80, /* 001111111000 */
+       0x31, 0xc0, /* 001100011100 */
+       0x00, 0xe0, /* 000000001110 */
+       0x00, 0x60, /* 000000000110 */
+       0x00, 0x60, /* 000000000110 */
+       0x00, 0x60, /* 000000000110 */
+       0x40, 0x60, /* 010000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x30, 0xc0, /* 001100001100 */
+       0x1f, 0x80, /* 000111111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 54 0x36 '6' */
-       0x0000, /* 000000000000 */
-       0x0700, /* 000001110000 */
-       0x0c00, /* 000011000000 */
-       0x1800, /* 000110000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x6000, /* 011000000000 */
-       0x6780, /* 011001111000 */
-       0x6fc0, /* 011011111100 */
-       0x70e0, /* 011100001110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x7040, /* 011100000100 */
-       0x3f80, /* 001111111000 */
-       0x1f00, /* 000111110000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x07, 0x00, /* 000001110000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x18, 0x00, /* 000110000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x67, 0x80, /* 011001111000 */
+       0x6f, 0xc0, /* 011011111100 */
+       0x70, 0xe0, /* 011100001110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x70, 0x40, /* 011100000100 */
+       0x3f, 0x80, /* 001111111000 */
+       0x1f, 0x00, /* 000111110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 55 0x37 '7' */
-       0x0000, /* 000000000000 */
-       0x1fe0, /* 000111111110 */
-       0x3fe0, /* 001111111110 */
-       0x6040, /* 011000000100 */
-       0x0040, /* 000000000100 */
-       0x00c0, /* 000000001100 */
-       0x0080, /* 000000001000 */
-       0x0080, /* 000000001000 */
-       0x0180, /* 000000011000 */
-       0x0100, /* 000000010000 */
-       0x0100, /* 000000010000 */
-       0x0300, /* 000000110000 */
-       0x0200, /* 000000100000 */
-       0x0200, /* 000000100000 */
-       0x0600, /* 000001100000 */
-       0x0400, /* 000001000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1f, 0xe0, /* 000111111110 */
+       0x3f, 0xe0, /* 001111111110 */
+       0x60, 0x40, /* 011000000100 */
+       0x00, 0x40, /* 000000000100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x00, 0x80, /* 000000001000 */
+       0x00, 0x80, /* 000000001000 */
+       0x01, 0x80, /* 000000011000 */
+       0x01, 0x00, /* 000000010000 */
+       0x01, 0x00, /* 000000010000 */
+       0x03, 0x00, /* 000000110000 */
+       0x02, 0x00, /* 000000100000 */
+       0x02, 0x00, /* 000000100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x04, 0x00, /* 000001000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 56 0x38 '8' */
-       0x0000, /* 000000000000 */
-       0x0f00, /* 000011110000 */
-       0x1180, /* 000100011000 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x1880, /* 000110001000 */
-       0x0d00, /* 000011010000 */
-       0x0600, /* 000001100000 */
-       0x0b00, /* 000010110000 */
-       0x1180, /* 000100011000 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x1880, /* 000110001000 */
-       0x0f00, /* 000011110000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x11, 0x80, /* 000100011000 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x18, 0x80, /* 000110001000 */
+       0x0d, 0x00, /* 000011010000 */
+       0x06, 0x00, /* 000001100000 */
+       0x0b, 0x00, /* 000010110000 */
+       0x11, 0x80, /* 000100011000 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x18, 0x80, /* 000110001000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 57 0x39 '9' */
-       0x0000, /* 000000000000 */
-       0x0f80, /* 000011111000 */
-       0x11c0, /* 000100011100 */
-       0x20e0, /* 001000001110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x70e0, /* 011100001110 */
-       0x3f60, /* 001111110110 */
-       0x1e60, /* 000111100110 */
-       0x0060, /* 000000000110 */
-       0x00c0, /* 000000001100 */
-       0x00c0, /* 000000001100 */
-       0x0180, /* 000000011000 */
-       0x0700, /* 000001110000 */
-       0x3c00, /* 001111000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x80, /* 000011111000 */
+       0x11, 0xc0, /* 000100011100 */
+       0x20, 0xe0, /* 001000001110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x70, 0xe0, /* 011100001110 */
+       0x3f, 0x60, /* 001111110110 */
+       0x1e, 0x60, /* 000111100110 */
+       0x00, 0x60, /* 000000000110 */
+       0x00, 0xc0, /* 000000001100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x01, 0x80, /* 000000011000 */
+       0x07, 0x00, /* 000001110000 */
+       0x3c, 0x00, /* 001111000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 58 0x3a ':' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0c00, /* 000011000000 */
-       0x1e00, /* 000111100000 */
-       0x1e00, /* 000111100000 */
-       0x0c00, /* 000011000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0c00, /* 000011000000 */
-       0x1e00, /* 000111100000 */
-       0x1e00, /* 000111100000 */
-       0x0c00, /* 000011000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 59 0x3b ';' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0c00, /* 000011000000 */
-       0x1e00, /* 000111100000 */
-       0x1e00, /* 000111100000 */
-       0x0c00, /* 000011000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0c00, /* 000011000000 */
-       0x1e00, /* 000111100000 */
-       0x1e00, /* 000111100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0c00, /* 000011000000 */
-       0x1800, /* 000110000000 */
-       0x1000, /* 000100000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x18, 0x00, /* 000110000000 */
+       0x10, 0x00, /* 000100000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 60 0x3c '<' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0060, /* 000000000110 */
-       0x01c0, /* 000000011100 */
-       0x0700, /* 000001110000 */
-       0x1c00, /* 000111000000 */
-       0x7000, /* 011100000000 */
-       0x7000, /* 011100000000 */
-       0x1c00, /* 000111000000 */
-       0x0700, /* 000001110000 */
-       0x01c0, /* 000000011100 */
-       0x0060, /* 000000000110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x60, /* 000000000110 */
+       0x01, 0xc0, /* 000000011100 */
+       0x07, 0x00, /* 000001110000 */
+       0x1c, 0x00, /* 000111000000 */
+       0x70, 0x00, /* 011100000000 */
+       0x70, 0x00, /* 011100000000 */
+       0x1c, 0x00, /* 000111000000 */
+       0x07, 0x00, /* 000001110000 */
+       0x01, 0xc0, /* 000000011100 */
+       0x00, 0x60, /* 000000000110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 61 0x3d '=' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x7fe0, /* 011111111110 */
-       0x7fe0, /* 011111111110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x7fe0, /* 011111111110 */
-       0x7fe0, /* 011111111110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 62 0x3e '>' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x6000, /* 011000000000 */
-       0x3800, /* 001110000000 */
-       0x0e00, /* 000011100000 */
-       0x0380, /* 000000111000 */
-       0x00e0, /* 000000001110 */
-       0x00e0, /* 000000001110 */
-       0x0380, /* 000000111000 */
-       0x0e00, /* 000011100000 */
-       0x3800, /* 001110000000 */
-       0x6000, /* 011000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x38, 0x00, /* 001110000000 */
+       0x0e, 0x00, /* 000011100000 */
+       0x03, 0x80, /* 000000111000 */
+       0x00, 0xe0, /* 000000001110 */
+       0x00, 0xe0, /* 000000001110 */
+       0x03, 0x80, /* 000000111000 */
+       0x0e, 0x00, /* 000011100000 */
+       0x38, 0x00, /* 001110000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 63 0x3f '?' */
-       0x0000, /* 000000000000 */
-       0x0f00, /* 000011110000 */
-       0x1f80, /* 000111111000 */
-       0x39c0, /* 001110011100 */
-       0x20c0, /* 001000001100 */
-       0x00c0, /* 000000001100 */
-       0x00c0, /* 000000001100 */
-       0x0180, /* 000000011000 */
-       0x0300, /* 000000110000 */
-       0x0600, /* 000001100000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x1f, 0x80, /* 000111111000 */
+       0x39, 0xc0, /* 001110011100 */
+       0x20, 0xc0, /* 001000001100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x01, 0x80, /* 000000011000 */
+       0x03, 0x00, /* 000000110000 */
+       0x06, 0x00, /* 000001100000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 64 0x40 '@' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0f80, /* 000011111000 */
-       0x3fc0, /* 001111111100 */
-       0x3060, /* 001100000110 */
-       0x6060, /* 011000000110 */
-       0x6720, /* 011001110010 */
-       0x6fa0, /* 011011111010 */
-       0x6ca0, /* 011011001010 */
-       0x6ca0, /* 011011001010 */
-       0x67e0, /* 011001111110 */
-       0x6000, /* 011000000000 */
-       0x3000, /* 001100000000 */
-       0x3fe0, /* 001111111110 */
-       0x0fe0, /* 000011111110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x80, /* 000011111000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x30, 0x60, /* 001100000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x67, 0x20, /* 011001110010 */
+       0x6f, 0xa0, /* 011011111010 */
+       0x6c, 0xa0, /* 011011001010 */
+       0x6c, 0xa0, /* 011011001010 */
+       0x67, 0xe0, /* 011001111110 */
+       0x60, 0x00, /* 011000000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x3f, 0xe0, /* 001111111110 */
+       0x0f, 0xe0, /* 000011111110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 65 0x41 'A' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0b00, /* 000010110000 */
-       0x0b00, /* 000010110000 */
-       0x0900, /* 000010010000 */
-       0x1180, /* 000100011000 */
-       0x1180, /* 000100011000 */
-       0x1080, /* 000100001000 */
-       0x3fc0, /* 001111111100 */
-       0x20c0, /* 001000001100 */
-       0x2040, /* 001000000100 */
-       0x4060, /* 010000000110 */
-       0x4060, /* 010000000110 */
-       0xe0f0, /* 111000001111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x0b, 0x00, /* 000010110000 */
+       0x0b, 0x00, /* 000010110000 */
+       0x09, 0x00, /* 000010010000 */
+       0x11, 0x80, /* 000100011000 */
+       0x11, 0x80, /* 000100011000 */
+       0x10, 0x80, /* 000100001000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x20, 0xc0, /* 001000001100 */
+       0x20, 0x40, /* 001000000100 */
+       0x40, 0x60, /* 010000000110 */
+       0x40, 0x60, /* 010000000110 */
+       0xe0, 0xf0, /* 111000001111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 66 0x42 'B' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xff00, /* 111111110000 */
-       0x6080, /* 011000001000 */
-       0x60c0, /* 011000001100 */
-       0x60c0, /* 011000001100 */
-       0x60c0, /* 011000001100 */
-       0x6180, /* 011000011000 */
-       0x7f80, /* 011111111000 */
-       0x60c0, /* 011000001100 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x60c0, /* 011000001100 */
-       0xff80, /* 111111111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xff, 0x00, /* 111111110000 */
+       0x60, 0x80, /* 011000001000 */
+       0x60, 0xc0, /* 011000001100 */
+       0x60, 0xc0, /* 011000001100 */
+       0x60, 0xc0, /* 011000001100 */
+       0x61, 0x80, /* 011000011000 */
+       0x7f, 0x80, /* 011111111000 */
+       0x60, 0xc0, /* 011000001100 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0xc0, /* 011000001100 */
+       0xff, 0x80, /* 111111111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 67 0x43 'C' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0fc0, /* 000011111100 */
-       0x1060, /* 000100000110 */
-       0x2020, /* 001000000010 */
-       0x2000, /* 001000000000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x2000, /* 001000000000 */
-       0x3020, /* 001100000010 */
-       0x1840, /* 000110000100 */
-       0x0f80, /* 000011111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0xc0, /* 000011111100 */
+       0x10, 0x60, /* 000100000110 */
+       0x20, 0x20, /* 001000000010 */
+       0x20, 0x00, /* 001000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x20, 0x00, /* 001000000000 */
+       0x30, 0x20, /* 001100000010 */
+       0x18, 0x40, /* 000110000100 */
+       0x0f, 0x80, /* 000011111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 68 0x44 'D' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xff00, /* 111111110000 */
-       0x61c0, /* 011000011100 */
-       0x60c0, /* 011000001100 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6040, /* 011000000100 */
-       0x6180, /* 011000011000 */
-       0xfe00, /* 111111100000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xff, 0x00, /* 111111110000 */
+       0x61, 0xc0, /* 011000011100 */
+       0x60, 0xc0, /* 011000001100 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x40, /* 011000000100 */
+       0x61, 0x80, /* 011000011000 */
+       0xfe, 0x00, /* 111111100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 69 0x45 'E' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x7fc0, /* 011111111100 */
-       0x3040, /* 001100000100 */
-       0x3040, /* 001100000100 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3080, /* 001100001000 */
-       0x3f80, /* 001111111000 */
-       0x3080, /* 001100001000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3020, /* 001100000010 */
-       0x3020, /* 001100000010 */
-       0x7fe0, /* 011111111110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x7f, 0xc0, /* 011111111100 */
+       0x30, 0x40, /* 001100000100 */
+       0x30, 0x40, /* 001100000100 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x80, /* 001100001000 */
+       0x3f, 0x80, /* 001111111000 */
+       0x30, 0x80, /* 001100001000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x20, /* 001100000010 */
+       0x30, 0x20, /* 001100000010 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 70 0x46 'F' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x7fc0, /* 011111111100 */
-       0x3040, /* 001100000100 */
-       0x3040, /* 001100000100 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3080, /* 001100001000 */
-       0x3f80, /* 001111111000 */
-       0x3080, /* 001100001000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x7800, /* 011110000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x7f, 0xc0, /* 011111111100 */
+       0x30, 0x40, /* 001100000100 */
+       0x30, 0x40, /* 001100000100 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x80, /* 001100001000 */
+       0x3f, 0x80, /* 001111111000 */
+       0x30, 0x80, /* 001100001000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x78, 0x00, /* 011110000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 71 0x47 'G' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0fc0, /* 000011111100 */
-       0x1060, /* 000100000110 */
-       0x2020, /* 001000000010 */
-       0x2000, /* 001000000000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x61f0, /* 011000011111 */
-       0x6060, /* 011000000110 */
-       0x2060, /* 001000000110 */
-       0x3060, /* 001100000110 */
-       0x1860, /* 000110000110 */
-       0x0f80, /* 000011111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0xc0, /* 000011111100 */
+       0x10, 0x60, /* 000100000110 */
+       0x20, 0x20, /* 001000000010 */
+       0x20, 0x00, /* 001000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x61, 0xf0, /* 011000011111 */
+       0x60, 0x60, /* 011000000110 */
+       0x20, 0x60, /* 001000000110 */
+       0x30, 0x60, /* 001100000110 */
+       0x18, 0x60, /* 000110000110 */
+       0x0f, 0x80, /* 000011111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 72 0x48 'H' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xf0f0, /* 111100001111 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x7fe0, /* 011111111110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0xf0f0, /* 111100001111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xf0, 0xf0, /* 111100001111 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0xf0, 0xf0, /* 111100001111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 73 0x49 'I' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1f80, /* 000111111000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x1f80, /* 000111111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1f, 0x80, /* 000111111000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x1f, 0x80, /* 000111111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 74 0x4a 'J' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1f80, /* 000111111000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0400, /* 000001000000 */
-       0x3800, /* 001110000000 */
-       0x3000, /* 001100000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1f, 0x80, /* 000111111000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x04, 0x00, /* 000001000000 */
+       0x38, 0x00, /* 001110000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 75 0x4b 'K' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xf0e0, /* 111100001110 */
-       0x6180, /* 011000011000 */
-       0x6300, /* 011000110000 */
-       0x6600, /* 011001100000 */
-       0x6c00, /* 011011000000 */
-       0x7800, /* 011110000000 */
-       0x7800, /* 011110000000 */
-       0x7c00, /* 011111000000 */
-       0x6e00, /* 011011100000 */
-       0x6700, /* 011001110000 */
-       0x6380, /* 011000111000 */
-       0x61c0, /* 011000011100 */
-       0x60e0, /* 011000001110 */
-       0xf070, /* 111100000111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xf0, 0xe0, /* 111100001110 */
+       0x61, 0x80, /* 011000011000 */
+       0x63, 0x00, /* 011000110000 */
+       0x66, 0x00, /* 011001100000 */
+       0x6c, 0x00, /* 011011000000 */
+       0x78, 0x00, /* 011110000000 */
+       0x78, 0x00, /* 011110000000 */
+       0x7c, 0x00, /* 011111000000 */
+       0x6e, 0x00, /* 011011100000 */
+       0x67, 0x00, /* 011001110000 */
+       0x63, 0x80, /* 011000111000 */
+       0x61, 0xc0, /* 011000011100 */
+       0x60, 0xe0, /* 011000001110 */
+       0xf0, 0x70, /* 111100000111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 76 0x4c 'L' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x7800, /* 011110000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3020, /* 001100000010 */
-       0x3020, /* 001100000010 */
-       0x7fe0, /* 011111111110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x78, 0x00, /* 011110000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x20, /* 001100000010 */
+       0x30, 0x20, /* 001100000010 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 77 0x4d 'M' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xe070, /* 111000000111 */
-       0x60e0, /* 011000001110 */
-       0x70e0, /* 011100001110 */
-       0x70e0, /* 011100001110 */
-       0x70e0, /* 011100001110 */
-       0x5960, /* 010110010110 */
-       0x5960, /* 010110010110 */
-       0x5960, /* 010110010110 */
-       0x4d60, /* 010011010110 */
-       0x4e60, /* 010011100110 */
-       0x4e60, /* 010011100110 */
-       0x4460, /* 010001000110 */
-       0x4460, /* 010001000110 */
-       0xe4f0, /* 111001001111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xe0, 0x70, /* 111000000111 */
+       0x60, 0xe0, /* 011000001110 */
+       0x70, 0xe0, /* 011100001110 */
+       0x70, 0xe0, /* 011100001110 */
+       0x70, 0xe0, /* 011100001110 */
+       0x59, 0x60, /* 010110010110 */
+       0x59, 0x60, /* 010110010110 */
+       0x59, 0x60, /* 010110010110 */
+       0x4d, 0x60, /* 010011010110 */
+       0x4e, 0x60, /* 010011100110 */
+       0x4e, 0x60, /* 010011100110 */
+       0x44, 0x60, /* 010001000110 */
+       0x44, 0x60, /* 010001000110 */
+       0xe4, 0xf0, /* 111001001111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 78 0x4e 'N' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xc070, /* 110000000111 */
-       0x6020, /* 011000000010 */
-       0x7020, /* 011100000010 */
-       0x7820, /* 011110000010 */
-       0x5820, /* 010110000010 */
-       0x4c20, /* 010011000010 */
-       0x4620, /* 010001100010 */
-       0x4720, /* 010001110010 */
-       0x4320, /* 010000110010 */
-       0x41a0, /* 010000011010 */
-       0x40e0, /* 010000001110 */
-       0x40e0, /* 010000001110 */
-       0x4060, /* 010000000110 */
-       0xe030, /* 111000000011 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xc0, 0x70, /* 110000000111 */
+       0x60, 0x20, /* 011000000010 */
+       0x70, 0x20, /* 011100000010 */
+       0x78, 0x20, /* 011110000010 */
+       0x58, 0x20, /* 010110000010 */
+       0x4c, 0x20, /* 010011000010 */
+       0x46, 0x20, /* 010001100010 */
+       0x47, 0x20, /* 010001110010 */
+       0x43, 0x20, /* 010000110010 */
+       0x41, 0xa0, /* 010000011010 */
+       0x40, 0xe0, /* 010000001110 */
+       0x40, 0xe0, /* 010000001110 */
+       0x40, 0x60, /* 010000000110 */
+       0xe0, 0x30, /* 111000000011 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 79 0x4f 'O' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0f00, /* 000011110000 */
-       0x11c0, /* 000100011100 */
-       0x20c0, /* 001000001100 */
-       0x2060, /* 001000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x2040, /* 001000000100 */
-       0x3040, /* 001100000100 */
-       0x1880, /* 000110001000 */
-       0x0f00, /* 000011110000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x11, 0xc0, /* 000100011100 */
+       0x20, 0xc0, /* 001000001100 */
+       0x20, 0x60, /* 001000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x20, 0x40, /* 001000000100 */
+       0x30, 0x40, /* 001100000100 */
+       0x18, 0x80, /* 000110001000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 80 0x50 'P' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x7f80, /* 011111111000 */
-       0x30c0, /* 001100001100 */
-       0x3060, /* 001100000110 */
-       0x3060, /* 001100000110 */
-       0x3060, /* 001100000110 */
-       0x30c0, /* 001100001100 */
-       0x3780, /* 001101111000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x7800, /* 011110000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x7f, 0x80, /* 011111111000 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0x60, /* 001100000110 */
+       0x30, 0x60, /* 001100000110 */
+       0x30, 0x60, /* 001100000110 */
+       0x30, 0xc0, /* 001100001100 */
+       0x37, 0x80, /* 001101111000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x78, 0x00, /* 011110000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 81 0x51 'Q' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0f00, /* 000011110000 */
-       0x11c0, /* 000100011100 */
-       0x20c0, /* 001000001100 */
-       0x2060, /* 001000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x3040, /* 001100000100 */
-       0x3840, /* 001110000100 */
-       0x1f80, /* 000111111000 */
-       0x0e00, /* 000011100000 */
-       0x1f00, /* 000111110000 */
-       0x2390, /* 001000111001 */
-       0x01e0, /* 000000011110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x11, 0xc0, /* 000100011100 */
+       0x20, 0xc0, /* 001000001100 */
+       0x20, 0x60, /* 001000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x30, 0x40, /* 001100000100 */
+       0x38, 0x40, /* 001110000100 */
+       0x1f, 0x80, /* 000111111000 */
+       0x0e, 0x00, /* 000011100000 */
+       0x1f, 0x00, /* 000111110000 */
+       0x23, 0x90, /* 001000111001 */
+       0x01, 0xe0, /* 000000011110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 82 0x52 'R' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xff00, /* 111111110000 */
-       0x6180, /* 011000011000 */
-       0x60c0, /* 011000001100 */
-       0x60c0, /* 011000001100 */
-       0x60c0, /* 011000001100 */
-       0x6080, /* 011000001000 */
-       0x7f00, /* 011111110000 */
-       0x7c00, /* 011111000000 */
-       0x6e00, /* 011011100000 */
-       0x6700, /* 011001110000 */
-       0x6380, /* 011000111000 */
-       0x61c0, /* 011000011100 */
-       0x60e0, /* 011000001110 */
-       0xf070, /* 111100000111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xff, 0x00, /* 111111110000 */
+       0x61, 0x80, /* 011000011000 */
+       0x60, 0xc0, /* 011000001100 */
+       0x60, 0xc0, /* 011000001100 */
+       0x60, 0xc0, /* 011000001100 */
+       0x60, 0x80, /* 011000001000 */
+       0x7f, 0x00, /* 011111110000 */
+       0x7c, 0x00, /* 011111000000 */
+       0x6e, 0x00, /* 011011100000 */
+       0x67, 0x00, /* 011001110000 */
+       0x63, 0x80, /* 011000111000 */
+       0x61, 0xc0, /* 011000011100 */
+       0x60, 0xe0, /* 011000001110 */
+       0xf0, 0x70, /* 111100000111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 83 0x53 'S' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1fe0, /* 000111111110 */
-       0x3060, /* 001100000110 */
-       0x6020, /* 011000000010 */
-       0x6020, /* 011000000010 */
-       0x7000, /* 011100000000 */
-       0x3c00, /* 001111000000 */
-       0x1e00, /* 000111100000 */
-       0x0780, /* 000001111000 */
-       0x01c0, /* 000000011100 */
-       0x00e0, /* 000000001110 */
-       0x4060, /* 010000000110 */
-       0x4060, /* 010000000110 */
-       0x60c0, /* 011000001100 */
-       0x7f80, /* 011111111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1f, 0xe0, /* 000111111110 */
+       0x30, 0x60, /* 001100000110 */
+       0x60, 0x20, /* 011000000010 */
+       0x60, 0x20, /* 011000000010 */
+       0x70, 0x00, /* 011100000000 */
+       0x3c, 0x00, /* 001111000000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x07, 0x80, /* 000001111000 */
+       0x01, 0xc0, /* 000000011100 */
+       0x00, 0xe0, /* 000000001110 */
+       0x40, 0x60, /* 010000000110 */
+       0x40, 0x60, /* 010000000110 */
+       0x60, 0xc0, /* 011000001100 */
+       0x7f, 0x80, /* 011111111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 84 0x54 'T' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x7fe0, /* 011111111110 */
-       0x4620, /* 010001100010 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x1f80, /* 000111111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x46, 0x20, /* 010001100010 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x1f, 0x80, /* 000111111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 85 0x55 'U' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xf070, /* 111100000111 */
-       0x6020, /* 011000000010 */
-       0x6020, /* 011000000010 */
-       0x6020, /* 011000000010 */
-       0x6020, /* 011000000010 */
-       0x6020, /* 011000000010 */
-       0x6020, /* 011000000010 */
-       0x6020, /* 011000000010 */
-       0x6020, /* 011000000010 */
-       0x6020, /* 011000000010 */
-       0x6020, /* 011000000010 */
-       0x7040, /* 011100000100 */
-       0x3fc0, /* 001111111100 */
-       0x1f80, /* 000111111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xf0, 0x70, /* 111100000111 */
+       0x60, 0x20, /* 011000000010 */
+       0x60, 0x20, /* 011000000010 */
+       0x60, 0x20, /* 011000000010 */
+       0x60, 0x20, /* 011000000010 */
+       0x60, 0x20, /* 011000000010 */
+       0x60, 0x20, /* 011000000010 */
+       0x60, 0x20, /* 011000000010 */
+       0x60, 0x20, /* 011000000010 */
+       0x60, 0x20, /* 011000000010 */
+       0x60, 0x20, /* 011000000010 */
+       0x70, 0x40, /* 011100000100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x1f, 0x80, /* 000111111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 86 0x56 'V' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xe0e0, /* 111000001110 */
-       0x6040, /* 011000000100 */
-       0x3080, /* 001100001000 */
-       0x3080, /* 001100001000 */
-       0x3080, /* 001100001000 */
-       0x1900, /* 000110010000 */
-       0x1900, /* 000110010000 */
-       0x1900, /* 000110010000 */
-       0x0a00, /* 000010100000 */
-       0x0e00, /* 000011100000 */
-       0x0e00, /* 000011100000 */
-       0x0400, /* 000001000000 */
-       0x0400, /* 000001000000 */
-       0x0400, /* 000001000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xe0, 0xe0, /* 111000001110 */
+       0x60, 0x40, /* 011000000100 */
+       0x30, 0x80, /* 001100001000 */
+       0x30, 0x80, /* 001100001000 */
+       0x30, 0x80, /* 001100001000 */
+       0x19, 0x00, /* 000110010000 */
+       0x19, 0x00, /* 000110010000 */
+       0x19, 0x00, /* 000110010000 */
+       0x0a, 0x00, /* 000010100000 */
+       0x0e, 0x00, /* 000011100000 */
+       0x0e, 0x00, /* 000011100000 */
+       0x04, 0x00, /* 000001000000 */
+       0x04, 0x00, /* 000001000000 */
+       0x04, 0x00, /* 000001000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 87 0x57 'W' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xfef0, /* 111111101111 */
-       0x6620, /* 011001100010 */
-       0x6620, /* 011001100010 */
-       0x6620, /* 011001100010 */
-       0x7620, /* 011101100010 */
-       0x7740, /* 011101110100 */
-       0x3340, /* 001100110100 */
-       0x3740, /* 001101110100 */
-       0x3bc0, /* 001110111100 */
-       0x3b80, /* 001110111000 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xfe, 0xf0, /* 111111101111 */
+       0x66, 0x20, /* 011001100010 */
+       0x66, 0x20, /* 011001100010 */
+       0x66, 0x20, /* 011001100010 */
+       0x76, 0x20, /* 011101100010 */
+       0x77, 0x40, /* 011101110100 */
+       0x33, 0x40, /* 001100110100 */
+       0x37, 0x40, /* 001101110100 */
+       0x3b, 0xc0, /* 001110111100 */
+       0x3b, 0x80, /* 001110111000 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 88 0x58 'X' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xf070, /* 111100000111 */
-       0x6020, /* 011000000010 */
-       0x3040, /* 001100000100 */
-       0x3880, /* 001110001000 */
-       0x1880, /* 000110001000 */
-       0x0d00, /* 000011010000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0b00, /* 000010110000 */
-       0x1180, /* 000100011000 */
-       0x11c0, /* 000100011100 */
-       0x20c0, /* 001000001100 */
-       0x4060, /* 010000000110 */
-       0xe0f0, /* 111000001111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xf0, 0x70, /* 111100000111 */
+       0x60, 0x20, /* 011000000010 */
+       0x30, 0x40, /* 001100000100 */
+       0x38, 0x80, /* 001110001000 */
+       0x18, 0x80, /* 000110001000 */
+       0x0d, 0x00, /* 000011010000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x0b, 0x00, /* 000010110000 */
+       0x11, 0x80, /* 000100011000 */
+       0x11, 0xc0, /* 000100011100 */
+       0x20, 0xc0, /* 001000001100 */
+       0x40, 0x60, /* 010000000110 */
+       0xe0, 0xf0, /* 111000001111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 89 0x59 'Y' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xf070, /* 111100000111 */
-       0x6020, /* 011000000010 */
-       0x3040, /* 001100000100 */
-       0x1880, /* 000110001000 */
-       0x1880, /* 000110001000 */
-       0x0d00, /* 000011010000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0f00, /* 000011110000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xf0, 0x70, /* 111100000111 */
+       0x60, 0x20, /* 011000000010 */
+       0x30, 0x40, /* 001100000100 */
+       0x18, 0x80, /* 000110001000 */
+       0x18, 0x80, /* 000110001000 */
+       0x0d, 0x00, /* 000011010000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 90 0x5a 'Z' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fe0, /* 001111111110 */
-       0x20c0, /* 001000001100 */
-       0x00c0, /* 000000001100 */
-       0x0180, /* 000000011000 */
-       0x0180, /* 000000011000 */
-       0x0300, /* 000000110000 */
-       0x0300, /* 000000110000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x1800, /* 000110000000 */
-       0x1820, /* 000110000010 */
-       0x3fe0, /* 001111111110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xe0, /* 001111111110 */
+       0x20, 0xc0, /* 001000001100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x01, 0x80, /* 000000011000 */
+       0x01, 0x80, /* 000000011000 */
+       0x03, 0x00, /* 000000110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x18, 0x00, /* 000110000000 */
+       0x18, 0x20, /* 000110000010 */
+       0x3f, 0xe0, /* 001111111110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 91 0x5b '[' */
-       0x0000, /* 000000000000 */
-       0x0f80, /* 000011111000 */
-       0x0f80, /* 000011111000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0f80, /* 000011111000 */
-       0x0f80, /* 000011111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x80, /* 000011111000 */
+       0x0f, 0x80, /* 000011111000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0f, 0x80, /* 000011111000 */
+       0x0f, 0x80, /* 000011111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 92 0x5c '\' */
-       0x0000, /* 000000000000 */
-       0x6000, /* 011000000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x1800, /* 000110000000 */
-       0x1800, /* 000110000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0300, /* 000000110000 */
-       0x0300, /* 000000110000 */
-       0x0180, /* 000000011000 */
-       0x0180, /* 000000011000 */
-       0x00c0, /* 000000001100 */
-       0x00c0, /* 000000001100 */
-       0x0060, /* 000000000110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x18, 0x00, /* 000110000000 */
+       0x18, 0x00, /* 000110000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x03, 0x00, /* 000000110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x01, 0x80, /* 000000011000 */
+       0x01, 0x80, /* 000000011000 */
+       0x00, 0xc0, /* 000000001100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x00, 0x60, /* 000000000110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 93 0x5d ']' */
-       0x0000, /* 000000000000 */
-       0x1f00, /* 000111110000 */
-       0x1f00, /* 000111110000 */
-       0x0300, /* 000000110000 */
-       0x0300, /* 000000110000 */
-       0x0300, /* 000000110000 */
-       0x0300, /* 000000110000 */
-       0x0300, /* 000000110000 */
-       0x0300, /* 000000110000 */
-       0x0300, /* 000000110000 */
-       0x0300, /* 000000110000 */
-       0x0300, /* 000000110000 */
-       0x0300, /* 000000110000 */
-       0x0300, /* 000000110000 */
-       0x1f00, /* 000111110000 */
-       0x1f00, /* 000111110000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1f, 0x00, /* 000111110000 */
+       0x1f, 0x00, /* 000111110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x1f, 0x00, /* 000111110000 */
+       0x1f, 0x00, /* 000111110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 94 0x5e '^' */
-       0x0000, /* 000000000000 */
-       0x0400, /* 000001000000 */
-       0x0e00, /* 000011100000 */
-       0x1b00, /* 000110110000 */
-       0x3180, /* 001100011000 */
-       0x60c0, /* 011000001100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x04, 0x00, /* 000001000000 */
+       0x0e, 0x00, /* 000011100000 */
+       0x1b, 0x00, /* 000110110000 */
+       0x31, 0x80, /* 001100011000 */
+       0x60, 0xc0, /* 011000001100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 95 0x5f '_' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 96 0x60 '`' */
-       0x0000, /* 000000000000 */
-       0x0100, /* 000000010000 */
-       0x0300, /* 000000110000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0780, /* 000001111000 */
-       0x0780, /* 000001111000 */
-       0x0300, /* 000000110000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x01, 0x00, /* 000000010000 */
+       0x03, 0x00, /* 000000110000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x07, 0x80, /* 000001111000 */
+       0x07, 0x80, /* 000001111000 */
+       0x03, 0x00, /* 000000110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 97 0x61 'a' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0f80, /* 000011111000 */
-       0x18c0, /* 000110001100 */
-       0x10c0, /* 000100001100 */
-       0x03c0, /* 000000111100 */
-       0x1cc0, /* 000111001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x39c0, /* 001110011100 */
-       0x1ee0, /* 000111101110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x80, /* 000011111000 */
+       0x18, 0xc0, /* 000110001100 */
+       0x10, 0xc0, /* 000100001100 */
+       0x03, 0xc0, /* 000000111100 */
+       0x1c, 0xc0, /* 000111001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x39, 0xc0, /* 001110011100 */
+       0x1e, 0xe0, /* 000111101110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 98 0x62 'b' */
-       0x0000, /* 000000000000 */
-       0x2000, /* 001000000000 */
-       0x6000, /* 011000000000 */
-       0xe000, /* 111000000000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x6780, /* 011001111000 */
-       0x6fc0, /* 011011111100 */
-       0x70e0, /* 011100001110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x7060, /* 011100000110 */
-       0x78c0, /* 011110001100 */
-       0x4f80, /* 010011111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x20, 0x00, /* 001000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0xe0, 0x00, /* 111000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x67, 0x80, /* 011001111000 */
+       0x6f, 0xc0, /* 011011111100 */
+       0x70, 0xe0, /* 011100001110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x70, 0x60, /* 011100000110 */
+       0x78, 0xc0, /* 011110001100 */
+       0x4f, 0x80, /* 010011111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 99 0x63 'c' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1f80, /* 000111111000 */
-       0x31c0, /* 001100011100 */
-       0x20c0, /* 001000001100 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x7040, /* 011100000100 */
-       0x30c0, /* 001100001100 */
-       0x1f80, /* 000111111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1f, 0x80, /* 000111111000 */
+       0x31, 0xc0, /* 001100011100 */
+       0x20, 0xc0, /* 001000001100 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x70, 0x40, /* 011100000100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x1f, 0x80, /* 000111111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 100 0x64 'd' */
-       0x0000, /* 000000000000 */
-       0x0060, /* 000000000110 */
-       0x00e0, /* 000000001110 */
-       0x0060, /* 000000000110 */
-       0x0060, /* 000000000110 */
-       0x0060, /* 000000000110 */
-       0x0f60, /* 000011110110 */
-       0x31e0, /* 001100011110 */
-       0x20e0, /* 001000001110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x70e0, /* 011100001110 */
-       0x3960, /* 001110010110 */
-       0x1e70, /* 000111100111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x60, /* 000000000110 */
+       0x00, 0xe0, /* 000000001110 */
+       0x00, 0x60, /* 000000000110 */
+       0x00, 0x60, /* 000000000110 */
+       0x00, 0x60, /* 000000000110 */
+       0x0f, 0x60, /* 000011110110 */
+       0x31, 0xe0, /* 001100011110 */
+       0x20, 0xe0, /* 001000001110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x70, 0xe0, /* 011100001110 */
+       0x39, 0x60, /* 001110010110 */
+       0x1e, 0x70, /* 000111100111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 101 0x65 'e' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0f00, /* 000011110000 */
-       0x30c0, /* 001100001100 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x7fe0, /* 011111111110 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x3000, /* 001100000000 */
-       0x1860, /* 000110000110 */
-       0x0f80, /* 000011111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x30, 0xc0, /* 001100001100 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x18, 0x60, /* 000110000110 */
+       0x0f, 0x80, /* 000011111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 102 0x66 'f' */
-       0x0000, /* 000000000000 */
-       0x0380, /* 000000111000 */
-       0x04c0, /* 000001001100 */
-       0x04c0, /* 000001001100 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x3f80, /* 001111111000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x1e00, /* 000111100000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x03, 0x80, /* 000000111000 */
+       0x04, 0xc0, /* 000001001100 */
+       0x04, 0xc0, /* 000001001100 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x3f, 0x80, /* 001111111000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 103 0x67 'g' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1f20, /* 000111110010 */
-       0x31e0, /* 001100011110 */
-       0x60c0, /* 011000001100 */
-       0x60c0, /* 011000001100 */
-       0x60c0, /* 011000001100 */
-       0x3180, /* 001100011000 */
-       0x3f00, /* 001111110000 */
-       0x6000, /* 011000000000 */
-       0x7fc0, /* 011111111100 */
-       0x3fe0, /* 001111111110 */
-       0x2060, /* 001000000110 */
-       0x4020, /* 010000000010 */
-       0x4020, /* 010000000010 */
-       0x7fc0, /* 011111111100 */
-       0x3f80, /* 001111111000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1f, 0x20, /* 000111110010 */
+       0x31, 0xe0, /* 001100011110 */
+       0x60, 0xc0, /* 011000001100 */
+       0x60, 0xc0, /* 011000001100 */
+       0x60, 0xc0, /* 011000001100 */
+       0x31, 0x80, /* 001100011000 */
+       0x3f, 0x00, /* 001111110000 */
+       0x60, 0x00, /* 011000000000 */
+       0x7f, 0xc0, /* 011111111100 */
+       0x3f, 0xe0, /* 001111111110 */
+       0x20, 0x60, /* 001000000110 */
+       0x40, 0x20, /* 010000000010 */
+       0x40, 0x20, /* 010000000010 */
+       0x7f, 0xc0, /* 011111111100 */
+       0x3f, 0x80, /* 001111111000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 104 0x68 'h' */
-       0x0000, /* 000000000000 */
-       0x1000, /* 000100000000 */
-       0x3000, /* 001100000000 */
-       0x7000, /* 011100000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3780, /* 001101111000 */
-       0x39c0, /* 001110011100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x79e0, /* 011110011110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x10, 0x00, /* 000100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x70, 0x00, /* 011100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x37, 0x80, /* 001101111000 */
+       0x39, 0xc0, /* 001110011100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x79, 0xe0, /* 011110011110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 105 0x69 'i' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1e00, /* 000111100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x1f80, /* 000111111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x1f, 0x80, /* 000111111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 106 0x6a 'j' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x00c0, /* 000000001100 */
-       0x00c0, /* 000000001100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x03c0, /* 000000111100 */
-       0x00c0, /* 000000001100 */
-       0x00c0, /* 000000001100 */
-       0x00c0, /* 000000001100 */
-       0x00c0, /* 000000001100 */
-       0x00c0, /* 000000001100 */
-       0x00c0, /* 000000001100 */
-       0x00c0, /* 000000001100 */
-       0x00c0, /* 000000001100 */
-       0x00c0, /* 000000001100 */
-       0x20c0, /* 001000001100 */
-       0x30c0, /* 001100001100 */
-       0x3880, /* 001110001000 */
-       0x1f00, /* 000111110000 */
-       0x0e00, /* 000011100000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0xc0, /* 000000001100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x03, 0xc0, /* 000000111100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x20, 0xc0, /* 001000001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x38, 0x80, /* 001110001000 */
+       0x1f, 0x00, /* 000111110000 */
+       0x0e, 0x00, /* 000011100000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 107 0x6b 'k' */
-       0x0000, /* 000000000000 */
-       0x6000, /* 011000000000 */
-       0xe000, /* 111000000000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x61c0, /* 011000011100 */
-       0x6300, /* 011000110000 */
-       0x6600, /* 011001100000 */
-       0x7c00, /* 011111000000 */
-       0x7800, /* 011110000000 */
-       0x7c00, /* 011111000000 */
-       0x6e00, /* 011011100000 */
-       0x6700, /* 011001110000 */
-       0x6380, /* 011000111000 */
-       0xf1e0, /* 111100011110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0xe0, 0x00, /* 111000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x61, 0xc0, /* 011000011100 */
+       0x63, 0x00, /* 011000110000 */
+       0x66, 0x00, /* 011001100000 */
+       0x7c, 0x00, /* 011111000000 */
+       0x78, 0x00, /* 011110000000 */
+       0x7c, 0x00, /* 011111000000 */
+       0x6e, 0x00, /* 011011100000 */
+       0x67, 0x00, /* 011001110000 */
+       0x63, 0x80, /* 011000111000 */
+       0xf1, 0xe0, /* 111100011110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 108 0x6c 'l' */
-       0x0000, /* 000000000000 */
-       0x1e00, /* 000111100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x1f80, /* 000111111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x1f, 0x80, /* 000111111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 109 0x6d 'm' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xddc0, /* 110111011100 */
-       0x6ee0, /* 011011101110 */
-       0x6660, /* 011001100110 */
-       0x6660, /* 011001100110 */
-       0x6660, /* 011001100110 */
-       0x6660, /* 011001100110 */
-       0x6660, /* 011001100110 */
-       0x6660, /* 011001100110 */
-       0x6660, /* 011001100110 */
-       0xef70, /* 111011110111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xdd, 0xc0, /* 110111011100 */
+       0x6e, 0xe0, /* 011011101110 */
+       0x66, 0x60, /* 011001100110 */
+       0x66, 0x60, /* 011001100110 */
+       0x66, 0x60, /* 011001100110 */
+       0x66, 0x60, /* 011001100110 */
+       0x66, 0x60, /* 011001100110 */
+       0x66, 0x60, /* 011001100110 */
+       0x66, 0x60, /* 011001100110 */
+       0xef, 0x70, /* 111011110111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 110 0x6e 'n' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x2780, /* 001001111000 */
-       0x79c0, /* 011110011100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x79e0, /* 011110011110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x27, 0x80, /* 001001111000 */
+       0x79, 0xc0, /* 011110011100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x79, 0xe0, /* 011110011110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 111 0x6f 'o' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0f80, /* 000011111000 */
-       0x11c0, /* 000100011100 */
-       0x20e0, /* 001000001110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x7040, /* 011100000100 */
-       0x3880, /* 001110001000 */
-       0x1f00, /* 000111110000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x80, /* 000011111000 */
+       0x11, 0xc0, /* 000100011100 */
+       0x20, 0xe0, /* 001000001110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x70, 0x40, /* 011100000100 */
+       0x38, 0x80, /* 001110001000 */
+       0x1f, 0x00, /* 000111110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 112 0x70 'p' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xef80, /* 111011111000 */
-       0x71c0, /* 011100011100 */
-       0x60e0, /* 011000001110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6040, /* 011000000100 */
-       0x7080, /* 011100001000 */
-       0x7f00, /* 011111110000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0xf000, /* 111100000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xef, 0x80, /* 111011111000 */
+       0x71, 0xc0, /* 011100011100 */
+       0x60, 0xe0, /* 011000001110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x40, /* 011000000100 */
+       0x70, 0x80, /* 011100001000 */
+       0x7f, 0x00, /* 011111110000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0xf0, 0x00, /* 111100000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 113 0x71 'q' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0f20, /* 000011110010 */
-       0x11e0, /* 000100011110 */
-       0x20e0, /* 001000001110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x7060, /* 011100000110 */
-       0x38e0, /* 001110001110 */
-       0x1fe0, /* 000111111110 */
-       0x0060, /* 000000000110 */
-       0x0060, /* 000000000110 */
-       0x0060, /* 000000000110 */
-       0x0060, /* 000000000110 */
-       0x00f0, /* 000000001111 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x20, /* 000011110010 */
+       0x11, 0xe0, /* 000100011110 */
+       0x20, 0xe0, /* 001000001110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x70, 0x60, /* 011100000110 */
+       0x38, 0xe0, /* 001110001110 */
+       0x1f, 0xe0, /* 000111111110 */
+       0x00, 0x60, /* 000000000110 */
+       0x00, 0x60, /* 000000000110 */
+       0x00, 0x60, /* 000000000110 */
+       0x00, 0x60, /* 000000000110 */
+       0x00, 0xf0, /* 000000001111 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 114 0x72 'r' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x7380, /* 011100111000 */
-       0x34c0, /* 001101001100 */
-       0x38c0, /* 001110001100 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x7800, /* 011110000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x73, 0x80, /* 011100111000 */
+       0x34, 0xc0, /* 001101001100 */
+       0x38, 0xc0, /* 001110001100 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x78, 0x00, /* 011110000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 115 0x73 's' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1fc0, /* 000111111100 */
-       0x30c0, /* 001100001100 */
-       0x3040, /* 001100000100 */
-       0x3800, /* 001110000000 */
-       0x1e00, /* 000111100000 */
-       0x0780, /* 000001111000 */
-       0x01c0, /* 000000011100 */
-       0x20c0, /* 001000001100 */
-       0x30c0, /* 001100001100 */
-       0x3f80, /* 001111111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1f, 0xc0, /* 000111111100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0x40, /* 001100000100 */
+       0x38, 0x00, /* 001110000000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x07, 0x80, /* 000001111000 */
+       0x01, 0xc0, /* 000000011100 */
+       0x20, 0xc0, /* 001000001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x3f, 0x80, /* 001111111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 116 0x74 't' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0400, /* 000001000000 */
-       0x0400, /* 000001000000 */
-       0x0c00, /* 000011000000 */
-       0x7fc0, /* 011111111100 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c00, /* 000011000000 */
-       0x0c20, /* 000011000010 */
-       0x0e40, /* 000011100100 */
-       0x0780, /* 000001111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x04, 0x00, /* 000001000000 */
+       0x04, 0x00, /* 000001000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x7f, 0xc0, /* 011111111100 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0c, 0x20, /* 000011000010 */
+       0x0e, 0x40, /* 000011100100 */
+       0x07, 0x80, /* 000001111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 117 0x75 'u' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x79e0, /* 011110011110 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x39c0, /* 001110011100 */
-       0x1e60, /* 000111100110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x79, 0xe0, /* 011110011110 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x39, 0xc0, /* 001110011100 */
+       0x1e, 0x60, /* 000111100110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 118 0x76 'v' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xf070, /* 111100000111 */
-       0x6020, /* 011000000010 */
-       0x3040, /* 001100000100 */
-       0x3040, /* 001100000100 */
-       0x1880, /* 000110001000 */
-       0x1880, /* 000110001000 */
-       0x0d00, /* 000011010000 */
-       0x0d00, /* 000011010000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xf0, 0x70, /* 111100000111 */
+       0x60, 0x20, /* 011000000010 */
+       0x30, 0x40, /* 001100000100 */
+       0x30, 0x40, /* 001100000100 */
+       0x18, 0x80, /* 000110001000 */
+       0x18, 0x80, /* 000110001000 */
+       0x0d, 0x00, /* 000011010000 */
+       0x0d, 0x00, /* 000011010000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 119 0x77 'w' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xff70, /* 111111110111 */
-       0x6620, /* 011001100010 */
-       0x6620, /* 011001100010 */
-       0x6620, /* 011001100010 */
-       0x3740, /* 001101110100 */
-       0x3b40, /* 001110110100 */
-       0x3b40, /* 001110110100 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xff, 0x70, /* 111111110111 */
+       0x66, 0x20, /* 011001100010 */
+       0x66, 0x20, /* 011001100010 */
+       0x66, 0x20, /* 011001100010 */
+       0x37, 0x40, /* 001101110100 */
+       0x3b, 0x40, /* 001110110100 */
+       0x3b, 0x40, /* 001110110100 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 120 0x78 'x' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xf8f0, /* 111110001111 */
-       0x7040, /* 011100000100 */
-       0x3880, /* 001110001000 */
-       0x1d00, /* 000111010000 */
-       0x0e00, /* 000011100000 */
-       0x0700, /* 000001110000 */
-       0x0b80, /* 000010111000 */
-       0x11c0, /* 000100011100 */
-       0x20e0, /* 001000001110 */
-       0xf1f0, /* 111100011111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xf8, 0xf0, /* 111110001111 */
+       0x70, 0x40, /* 011100000100 */
+       0x38, 0x80, /* 001110001000 */
+       0x1d, 0x00, /* 000111010000 */
+       0x0e, 0x00, /* 000011100000 */
+       0x07, 0x00, /* 000001110000 */
+       0x0b, 0x80, /* 000010111000 */
+       0x11, 0xc0, /* 000100011100 */
+       0x20, 0xe0, /* 001000001110 */
+       0xf1, 0xf0, /* 111100011111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 121 0x79 'y' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xf0f0, /* 111100001111 */
-       0x6020, /* 011000000010 */
-       0x3040, /* 001100000100 */
-       0x3040, /* 001100000100 */
-       0x1880, /* 000110001000 */
-       0x1880, /* 000110001000 */
-       0x0d00, /* 000011010000 */
-       0x0d00, /* 000011010000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0400, /* 000001000000 */
-       0x0c00, /* 000011000000 */
-       0x0800, /* 000010000000 */
-       0x7800, /* 011110000000 */
-       0x7000, /* 011100000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xf0, 0xf0, /* 111100001111 */
+       0x60, 0x20, /* 011000000010 */
+       0x30, 0x40, /* 001100000100 */
+       0x30, 0x40, /* 001100000100 */
+       0x18, 0x80, /* 000110001000 */
+       0x18, 0x80, /* 000110001000 */
+       0x0d, 0x00, /* 000011010000 */
+       0x0d, 0x00, /* 000011010000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x04, 0x00, /* 000001000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x08, 0x00, /* 000010000000 */
+       0x78, 0x00, /* 011110000000 */
+       0x70, 0x00, /* 011100000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 122 0x7a 'z' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x7fe0, /* 011111111110 */
-       0x60e0, /* 011000001110 */
-       0x41c0, /* 010000011100 */
-       0x0380, /* 000000111000 */
-       0x0700, /* 000001110000 */
-       0x0e00, /* 000011100000 */
-       0x1c00, /* 000111000000 */
-       0x3820, /* 001110000010 */
-       0x7060, /* 011100000110 */
-       0x7fe0, /* 011111111110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x60, 0xe0, /* 011000001110 */
+       0x41, 0xc0, /* 010000011100 */
+       0x03, 0x80, /* 000000111000 */
+       0x07, 0x00, /* 000001110000 */
+       0x0e, 0x00, /* 000011100000 */
+       0x1c, 0x00, /* 000111000000 */
+       0x38, 0x20, /* 001110000010 */
+       0x70, 0x60, /* 011100000110 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 123 0x7b '{' */
-       0x0000, /* 000000000000 */
-       0x0380, /* 000000111000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0c00, /* 000011000000 */
-       0x3800, /* 001110000000 */
-       0x0c00, /* 000011000000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0380, /* 000000111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x03, 0x80, /* 000000111000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x38, 0x00, /* 001110000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x03, 0x80, /* 000000111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 124 0x7c '|' */
-       0x0000, /* 000000000000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 125 0x7d '}' */
-       0x0000, /* 000000000000 */
-       0x1c00, /* 000111000000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0300, /* 000000110000 */
-       0x01c0, /* 000000011100 */
-       0x0300, /* 000000110000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x1c00, /* 000111000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1c, 0x00, /* 000111000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x03, 0x00, /* 000000110000 */
+       0x01, 0xc0, /* 000000011100 */
+       0x03, 0x00, /* 000000110000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x1c, 0x00, /* 000111000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 126 0x7e '~' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1c20, /* 000111000010 */
-       0x3e60, /* 001111100110 */
-       0x67c0, /* 011001111100 */
-       0x4380, /* 010000111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1c, 0x20, /* 000111000010 */
+       0x3e, 0x60, /* 001111100110 */
+       0x67, 0xc0, /* 011001111100 */
+       0x43, 0x80, /* 010000111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 127 0x7f '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 128 0x80 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0fc0, /* 000011111100 */
-       0x1060, /* 000100000110 */
-       0x2020, /* 001000000010 */
-       0x2000, /* 001000000000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x2000, /* 001000000000 */
-       0x3020, /* 001100000010 */
-       0x1840, /* 000110000100 */
-       0x0f80, /* 000011111000 */
-       0x0600, /* 000001100000 */
-       0x0300, /* 000000110000 */
-       0x0180, /* 000000011000 */
-       0x0f00, /* 000011110000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0xc0, /* 000011111100 */
+       0x10, 0x60, /* 000100000110 */
+       0x20, 0x20, /* 001000000010 */
+       0x20, 0x00, /* 001000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x20, 0x00, /* 001000000000 */
+       0x30, 0x20, /* 001100000010 */
+       0x18, 0x40, /* 000110000100 */
+       0x0f, 0x80, /* 000011111000 */
+       0x06, 0x00, /* 000001100000 */
+       0x03, 0x00, /* 000000110000 */
+       0x01, 0x80, /* 000000011000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 129 0x81 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x79e0, /* 011110011110 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x39c0, /* 001110011100 */
-       0x1e60, /* 000111100110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x79, 0xe0, /* 011110011110 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x39, 0xc0, /* 001110011100 */
+       0x1e, 0x60, /* 000111100110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 130 0x82 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0180, /* 000000011000 */
-       0x0300, /* 000000110000 */
-       0x0600, /* 000001100000 */
-       0x0000, /* 000000000000 */
-       0x0f00, /* 000011110000 */
-       0x30c0, /* 001100001100 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x7fe0, /* 011111111110 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x3000, /* 001100000000 */
-       0x1860, /* 000110000110 */
-       0x0f80, /* 000011111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x01, 0x80, /* 000000011000 */
+       0x03, 0x00, /* 000000110000 */
+       0x06, 0x00, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x30, 0xc0, /* 001100001100 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x18, 0x60, /* 000110000110 */
+       0x0f, 0x80, /* 000011111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 131 0x83 '.' */
-       0x0000, /* 000000000000 */
-       0x0200, /* 000000100000 */
-       0x0700, /* 000001110000 */
-       0x0d80, /* 000011011000 */
-       0x18c0, /* 000110001100 */
-       0x0000, /* 000000000000 */
-       0x0f80, /* 000011111000 */
-       0x18c0, /* 000110001100 */
-       0x10c0, /* 000100001100 */
-       0x03c0, /* 000000111100 */
-       0x1cc0, /* 000111001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x39c0, /* 001110011100 */
-       0x1ee0, /* 000111101110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x02, 0x00, /* 000000100000 */
+       0x07, 0x00, /* 000001110000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x18, 0xc0, /* 000110001100 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x80, /* 000011111000 */
+       0x18, 0xc0, /* 000110001100 */
+       0x10, 0xc0, /* 000100001100 */
+       0x03, 0xc0, /* 000000111100 */
+       0x1c, 0xc0, /* 000111001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x39, 0xc0, /* 001110011100 */
+       0x1e, 0xe0, /* 000111101110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 132 0x84 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0f80, /* 000011111000 */
-       0x18c0, /* 000110001100 */
-       0x10c0, /* 000100001100 */
-       0x03c0, /* 000000111100 */
-       0x1cc0, /* 000111001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x39c0, /* 001110011100 */
-       0x1ee0, /* 000111101110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x80, /* 000011111000 */
+       0x18, 0xc0, /* 000110001100 */
+       0x10, 0xc0, /* 000100001100 */
+       0x03, 0xc0, /* 000000111100 */
+       0x1c, 0xc0, /* 000111001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x39, 0xc0, /* 001110011100 */
+       0x1e, 0xe0, /* 000111101110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 133 0x85 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0c00, /* 000011000000 */
-       0x0600, /* 000001100000 */
-       0x0300, /* 000000110000 */
-       0x0000, /* 000000000000 */
-       0x0f80, /* 000011111000 */
-       0x18c0, /* 000110001100 */
-       0x10c0, /* 000100001100 */
-       0x03c0, /* 000000111100 */
-       0x1cc0, /* 000111001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x39c0, /* 001110011100 */
-       0x1ee0, /* 000111101110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x03, 0x00, /* 000000110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x80, /* 000011111000 */
+       0x18, 0xc0, /* 000110001100 */
+       0x10, 0xc0, /* 000100001100 */
+       0x03, 0xc0, /* 000000111100 */
+       0x1c, 0xc0, /* 000111001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x39, 0xc0, /* 001110011100 */
+       0x1e, 0xe0, /* 000111101110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 134 0x86 '.' */
-       0x0000, /* 000000000000 */
-       0x0700, /* 000001110000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0700, /* 000001110000 */
-       0x0000, /* 000000000000 */
-       0x0f80, /* 000011111000 */
-       0x18c0, /* 000110001100 */
-       0x10c0, /* 000100001100 */
-       0x03c0, /* 000000111100 */
-       0x1cc0, /* 000111001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x39c0, /* 001110011100 */
-       0x1ee0, /* 000111101110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x07, 0x00, /* 000001110000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x07, 0x00, /* 000001110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x80, /* 000011111000 */
+       0x18, 0xc0, /* 000110001100 */
+       0x10, 0xc0, /* 000100001100 */
+       0x03, 0xc0, /* 000000111100 */
+       0x1c, 0xc0, /* 000111001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x39, 0xc0, /* 001110011100 */
+       0x1e, 0xe0, /* 000111101110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 135 0x87 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1f80, /* 000111111000 */
-       0x31c0, /* 001100011100 */
-       0x20c0, /* 001000001100 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x7040, /* 011100000100 */
-       0x30c0, /* 001100001100 */
-       0x1f80, /* 000111111000 */
-       0x0600, /* 000001100000 */
-       0x0300, /* 000000110000 */
-       0x0180, /* 000000011000 */
-       0x0f00, /* 000011110000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1f, 0x80, /* 000111111000 */
+       0x31, 0xc0, /* 001100011100 */
+       0x20, 0xc0, /* 001000001100 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x70, 0x40, /* 011100000100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x1f, 0x80, /* 000111111000 */
+       0x06, 0x00, /* 000001100000 */
+       0x03, 0x00, /* 000000110000 */
+       0x01, 0x80, /* 000000011000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 136 0x88 '.' */
-       0x0000, /* 000000000000 */
-       0x0200, /* 000000100000 */
-       0x0700, /* 000001110000 */
-       0x0d80, /* 000011011000 */
-       0x18c0, /* 000110001100 */
-       0x0000, /* 000000000000 */
-       0x0f00, /* 000011110000 */
-       0x30c0, /* 001100001100 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x7fe0, /* 011111111110 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x3000, /* 001100000000 */
-       0x1860, /* 000110000110 */
-       0x0f80, /* 000011111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x02, 0x00, /* 000000100000 */
+       0x07, 0x00, /* 000001110000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x18, 0xc0, /* 000110001100 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x30, 0xc0, /* 001100001100 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x18, 0x60, /* 000110000110 */
+       0x0f, 0x80, /* 000011111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 137 0x89 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0f00, /* 000011110000 */
-       0x30c0, /* 001100001100 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x7fe0, /* 011111111110 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x3000, /* 001100000000 */
-       0x1860, /* 000110000110 */
-       0x0f80, /* 000011111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x30, 0xc0, /* 001100001100 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x18, 0x60, /* 000110000110 */
+       0x0f, 0x80, /* 000011111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 138 0x8a '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0c00, /* 000011000000 */
-       0x0600, /* 000001100000 */
-       0x0300, /* 000000110000 */
-       0x0000, /* 000000000000 */
-       0x0f00, /* 000011110000 */
-       0x30c0, /* 001100001100 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x7fe0, /* 011111111110 */
-       0x6000, /* 011000000000 */
-       0x6000, /* 011000000000 */
-       0x3000, /* 001100000000 */
-       0x1860, /* 000110000110 */
-       0x0f80, /* 000011111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x03, 0x00, /* 000000110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x30, 0xc0, /* 001100001100 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x60, 0x00, /* 011000000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x18, 0x60, /* 000110000110 */
+       0x0f, 0x80, /* 000011111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 139 0x8b '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1e00, /* 000111100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x1f80, /* 000111111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x1f, 0x80, /* 000111111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 140 0x8c '.' */
-       0x0000, /* 000000000000 */
-       0x0400, /* 000001000000 */
-       0x0e00, /* 000011100000 */
-       0x1b00, /* 000110110000 */
-       0x3180, /* 001100011000 */
-       0x0000, /* 000000000000 */
-       0x1e00, /* 000111100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x1f80, /* 000111111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x04, 0x00, /* 000001000000 */
+       0x0e, 0x00, /* 000011100000 */
+       0x1b, 0x00, /* 000110110000 */
+       0x31, 0x80, /* 001100011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x1f, 0x80, /* 000111111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 141 0x8d '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1800, /* 000110000000 */
-       0x0c00, /* 000011000000 */
-       0x0600, /* 000001100000 */
-       0x0000, /* 000000000000 */
-       0x1e00, /* 000111100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x1f80, /* 000111111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x18, 0x00, /* 000110000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x1f, 0x80, /* 000111111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 142 0x8e '.' */
-       0x0000, /* 000000000000 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0x0000, /* 000000000000 */
-       0x0400, /* 000001000000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0b00, /* 000010110000 */
-       0x0b00, /* 000010110000 */
-       0x1980, /* 000110011000 */
-       0x1180, /* 000100011000 */
-       0x3fc0, /* 001111111100 */
-       0x20c0, /* 001000001100 */
-       0x6060, /* 011000000110 */
-       0x4060, /* 010000000110 */
-       0xe0f0, /* 111000001111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x04, 0x00, /* 000001000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x0b, 0x00, /* 000010110000 */
+       0x0b, 0x00, /* 000010110000 */
+       0x19, 0x80, /* 000110011000 */
+       0x11, 0x80, /* 000100011000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x20, 0xc0, /* 001000001100 */
+       0x60, 0x60, /* 011000000110 */
+       0x40, 0x60, /* 010000000110 */
+       0xe0, 0xf0, /* 111000001111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 143 0x8f '.' */
-       0x0000, /* 000000000000 */
-       0x0f00, /* 000011110000 */
-       0x1980, /* 000110011000 */
-       0x0f00, /* 000011110000 */
-       0x0400, /* 000001000000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0b00, /* 000010110000 */
-       0x0b00, /* 000010110000 */
-       0x1980, /* 000110011000 */
-       0x1180, /* 000100011000 */
-       0x3fc0, /* 001111111100 */
-       0x20c0, /* 001000001100 */
-       0x6060, /* 011000000110 */
-       0x4060, /* 010000000110 */
-       0xe0f0, /* 111000001111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x19, 0x80, /* 000110011000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x04, 0x00, /* 000001000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x0b, 0x00, /* 000010110000 */
+       0x0b, 0x00, /* 000010110000 */
+       0x19, 0x80, /* 000110011000 */
+       0x11, 0x80, /* 000100011000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x20, 0xc0, /* 001000001100 */
+       0x60, 0x60, /* 011000000110 */
+       0x40, 0x60, /* 010000000110 */
+       0xe0, 0xf0, /* 111000001111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 144 0x90 '.' */
-       0x0000, /* 000000000000 */
-       0x0300, /* 000000110000 */
-       0x0600, /* 000001100000 */
-       0x0800, /* 000010000000 */
-       0x7fe0, /* 011111111110 */
-       0x3020, /* 001100000010 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3080, /* 001100001000 */
-       0x3f80, /* 001111111000 */
-       0x3080, /* 001100001000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3020, /* 001100000010 */
-       0x3020, /* 001100000010 */
-       0x7fe0, /* 011111111110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x03, 0x00, /* 000000110000 */
+       0x06, 0x00, /* 000001100000 */
+       0x08, 0x00, /* 000010000000 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x30, 0x20, /* 001100000010 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x80, /* 001100001000 */
+       0x3f, 0x80, /* 001111111000 */
+       0x30, 0x80, /* 001100001000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x20, /* 001100000010 */
+       0x30, 0x20, /* 001100000010 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 145 0x91 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3de0, /* 001111011110 */
-       0x6630, /* 011001100011 */
-       0x4630, /* 010001100011 */
-       0x0630, /* 000001100011 */
-       0x3ff0, /* 001111111111 */
-       0x6600, /* 011001100000 */
-       0xc600, /* 110001100000 */
-       0xc600, /* 110001100000 */
-       0xe730, /* 111001110011 */
-       0x7de0, /* 011111011110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3d, 0xe0, /* 001111011110 */
+       0x66, 0x30, /* 011001100011 */
+       0x46, 0x30, /* 010001100011 */
+       0x06, 0x30, /* 000001100011 */
+       0x3f, 0xf0, /* 001111111111 */
+       0x66, 0x00, /* 011001100000 */
+       0xc6, 0x00, /* 110001100000 */
+       0xc6, 0x00, /* 110001100000 */
+       0xe7, 0x30, /* 111001110011 */
+       0x7d, 0xe0, /* 011111011110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 146 0x92 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x03f0, /* 000000111111 */
-       0x0710, /* 000001110001 */
-       0x0710, /* 000001110001 */
-       0x0b00, /* 000010110000 */
-       0x0b00, /* 000010110000 */
-       0x0b20, /* 000010110010 */
-       0x13e0, /* 000100111110 */
-       0x1320, /* 000100110010 */
-       0x3f00, /* 001111110000 */
-       0x2300, /* 001000110000 */
-       0x2300, /* 001000110000 */
-       0x4310, /* 010000110001 */
-       0x4310, /* 010000110001 */
-       0xe7f0, /* 111001111111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x03, 0xf0, /* 000000111111 */
+       0x07, 0x10, /* 000001110001 */
+       0x07, 0x10, /* 000001110001 */
+       0x0b, 0x00, /* 000010110000 */
+       0x0b, 0x00, /* 000010110000 */
+       0x0b, 0x20, /* 000010110010 */
+       0x13, 0xe0, /* 000100111110 */
+       0x13, 0x20, /* 000100110010 */
+       0x3f, 0x00, /* 001111110000 */
+       0x23, 0x00, /* 001000110000 */
+       0x23, 0x00, /* 001000110000 */
+       0x43, 0x10, /* 010000110001 */
+       0x43, 0x10, /* 010000110001 */
+       0xe7, 0xf0, /* 111001111111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 147 0x93 '.' */
-       0x0000, /* 000000000000 */
-       0x0200, /* 000000100000 */
-       0x0700, /* 000001110000 */
-       0x0d80, /* 000011011000 */
-       0x18c0, /* 000110001100 */
-       0x0000, /* 000000000000 */
-       0x0f80, /* 000011111000 */
-       0x11c0, /* 000100011100 */
-       0x20e0, /* 001000001110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x7040, /* 011100000100 */
-       0x3880, /* 001110001000 */
-       0x1f00, /* 000111110000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x02, 0x00, /* 000000100000 */
+       0x07, 0x00, /* 000001110000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x18, 0xc0, /* 000110001100 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x80, /* 000011111000 */
+       0x11, 0xc0, /* 000100011100 */
+       0x20, 0xe0, /* 001000001110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x70, 0x40, /* 011100000100 */
+       0x38, 0x80, /* 001110001000 */
+       0x1f, 0x00, /* 000111110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 148 0x94 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0f80, /* 000011111000 */
-       0x11c0, /* 000100011100 */
-       0x20e0, /* 001000001110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x7040, /* 011100000100 */
-       0x3880, /* 001110001000 */
-       0x1f00, /* 000111110000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x80, /* 000011111000 */
+       0x11, 0xc0, /* 000100011100 */
+       0x20, 0xe0, /* 001000001110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x70, 0x40, /* 011100000100 */
+       0x38, 0x80, /* 001110001000 */
+       0x1f, 0x00, /* 000111110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 149 0x95 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0c00, /* 000011000000 */
-       0x0600, /* 000001100000 */
-       0x0300, /* 000000110000 */
-       0x0000, /* 000000000000 */
-       0x0f80, /* 000011111000 */
-       0x11c0, /* 000100011100 */
-       0x20e0, /* 001000001110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x7040, /* 011100000100 */
-       0x3880, /* 001110001000 */
-       0x1f00, /* 000111110000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x03, 0x00, /* 000000110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x80, /* 000011111000 */
+       0x11, 0xc0, /* 000100011100 */
+       0x20, 0xe0, /* 001000001110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x70, 0x40, /* 011100000100 */
+       0x38, 0x80, /* 001110001000 */
+       0x1f, 0x00, /* 000111110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 150 0x96 '.' */
-       0x0000, /* 000000000000 */
-       0x0200, /* 000000100000 */
-       0x0700, /* 000001110000 */
-       0x0d80, /* 000011011000 */
-       0x18c0, /* 000110001100 */
-       0x0000, /* 000000000000 */
-       0x79e0, /* 011110011110 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x39c0, /* 001110011100 */
-       0x1e60, /* 000111100110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x02, 0x00, /* 000000100000 */
+       0x07, 0x00, /* 000001110000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x18, 0xc0, /* 000110001100 */
+       0x00, 0x00, /* 000000000000 */
+       0x79, 0xe0, /* 011110011110 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x39, 0xc0, /* 001110011100 */
+       0x1e, 0x60, /* 000111100110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 151 0x97 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1800, /* 000110000000 */
-       0x0c00, /* 000011000000 */
-       0x0600, /* 000001100000 */
-       0x0000, /* 000000000000 */
-       0x79e0, /* 011110011110 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x39c0, /* 001110011100 */
-       0x1e60, /* 000111100110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x18, 0x00, /* 000110000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x79, 0xe0, /* 011110011110 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x39, 0xc0, /* 001110011100 */
+       0x1e, 0x60, /* 000111100110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 152 0x98 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xf0f0, /* 111100001111 */
-       0x6020, /* 011000000010 */
-       0x3040, /* 001100000100 */
-       0x3040, /* 001100000100 */
-       0x1880, /* 000110001000 */
-       0x1880, /* 000110001000 */
-       0x0d00, /* 000011010000 */
-       0x0d00, /* 000011010000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0400, /* 000001000000 */
-       0x0c00, /* 000011000000 */
-       0x0800, /* 000010000000 */
-       0x7800, /* 011110000000 */
-       0x7000, /* 011100000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xf0, 0xf0, /* 111100001111 */
+       0x60, 0x20, /* 011000000010 */
+       0x30, 0x40, /* 001100000100 */
+       0x30, 0x40, /* 001100000100 */
+       0x18, 0x80, /* 000110001000 */
+       0x18, 0x80, /* 000110001000 */
+       0x0d, 0x00, /* 000011010000 */
+       0x0d, 0x00, /* 000011010000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x04, 0x00, /* 000001000000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x08, 0x00, /* 000010000000 */
+       0x78, 0x00, /* 011110000000 */
+       0x70, 0x00, /* 011100000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 153 0x99 '.' */
-       0x0000, /* 000000000000 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0x0000, /* 000000000000 */
-       0x0f80, /* 000011111000 */
-       0x11c0, /* 000100011100 */
-       0x20c0, /* 001000001100 */
-       0x2060, /* 001000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x2040, /* 001000000100 */
-       0x3040, /* 001100000100 */
-       0x1880, /* 000110001000 */
-       0x0f00, /* 000011110000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x80, /* 000011111000 */
+       0x11, 0xc0, /* 000100011100 */
+       0x20, 0xc0, /* 001000001100 */
+       0x20, 0x60, /* 001000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x20, 0x40, /* 001000000100 */
+       0x30, 0x40, /* 001100000100 */
+       0x18, 0x80, /* 000110001000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 154 0x9a '.' */
-       0x0000, /* 000000000000 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0xe030, /* 111000000011 */
-       0x6020, /* 011000000010 */
-       0x6020, /* 011000000010 */
-       0x6020, /* 011000000010 */
-       0x6020, /* 011000000010 */
-       0x6020, /* 011000000010 */
-       0x6020, /* 011000000010 */
-       0x6020, /* 011000000010 */
-       0x6020, /* 011000000010 */
-       0x6020, /* 011000000010 */
-       0x7040, /* 011100000100 */
-       0x3fc0, /* 001111111100 */
-       0x1f80, /* 000111111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0xe0, 0x30, /* 111000000011 */
+       0x60, 0x20, /* 011000000010 */
+       0x60, 0x20, /* 011000000010 */
+       0x60, 0x20, /* 011000000010 */
+       0x60, 0x20, /* 011000000010 */
+       0x60, 0x20, /* 011000000010 */
+       0x60, 0x20, /* 011000000010 */
+       0x60, 0x20, /* 011000000010 */
+       0x60, 0x20, /* 011000000010 */
+       0x60, 0x20, /* 011000000010 */
+       0x70, 0x40, /* 011100000100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x1f, 0x80, /* 000111111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 155 0x9b '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x1f80, /* 000111111000 */
-       0x36c0, /* 001101101100 */
-       0x26c0, /* 001001101100 */
-       0x6600, /* 011001100000 */
-       0x6600, /* 011001100000 */
-       0x6600, /* 011001100000 */
-       0x6600, /* 011001100000 */
-       0x7640, /* 011101100100 */
-       0x36c0, /* 001101101100 */
-       0x1f80, /* 000111111000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x1f, 0x80, /* 000111111000 */
+       0x36, 0xc0, /* 001101101100 */
+       0x26, 0xc0, /* 001001101100 */
+       0x66, 0x00, /* 011001100000 */
+       0x66, 0x00, /* 011001100000 */
+       0x66, 0x00, /* 011001100000 */
+       0x66, 0x00, /* 011001100000 */
+       0x76, 0x40, /* 011101100100 */
+       0x36, 0xc0, /* 001101101100 */
+       0x1f, 0x80, /* 000111111000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 156 0x9c '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0f80, /* 000011111000 */
-       0x1cc0, /* 000111001100 */
-       0x18c0, /* 000110001100 */
-       0x1800, /* 000110000000 */
-       0x1800, /* 000110000000 */
-       0x1800, /* 000110000000 */
-       0x7e00, /* 011111100000 */
-       0x7e00, /* 011111100000 */
-       0x1800, /* 000110000000 */
-       0x1800, /* 000110000000 */
-       0x1800, /* 000110000000 */
-       0x1800, /* 000110000000 */
-       0x3e20, /* 001111100010 */
-       0x7fe0, /* 011111111110 */
-       0x61c0, /* 011000011100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x80, /* 000011111000 */
+       0x1c, 0xc0, /* 000111001100 */
+       0x18, 0xc0, /* 000110001100 */
+       0x18, 0x00, /* 000110000000 */
+       0x18, 0x00, /* 000110000000 */
+       0x18, 0x00, /* 000110000000 */
+       0x7e, 0x00, /* 011111100000 */
+       0x7e, 0x00, /* 011111100000 */
+       0x18, 0x00, /* 000110000000 */
+       0x18, 0x00, /* 000110000000 */
+       0x18, 0x00, /* 000110000000 */
+       0x18, 0x00, /* 000110000000 */
+       0x3e, 0x20, /* 001111100010 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x61, 0xc0, /* 011000011100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 157 0x9d '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x30c0, /* 001100001100 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0x0f00, /* 000011110000 */
-       0x0600, /* 000001100000 */
-       0x1f80, /* 000111111000 */
-       0x0600, /* 000001100000 */
-       0x1f80, /* 000111111000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x30, 0xc0, /* 001100001100 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x06, 0x00, /* 000001100000 */
+       0x1f, 0x80, /* 000111111000 */
+       0x06, 0x00, /* 000001100000 */
+       0x1f, 0x80, /* 000111111000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 158 0x9e '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 159 0x9f '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 160 0xa0 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0180, /* 000000011000 */
-       0x0300, /* 000000110000 */
-       0x0600, /* 000001100000 */
-       0x0000, /* 000000000000 */
-       0x0f80, /* 000011111000 */
-       0x18c0, /* 000110001100 */
-       0x10c0, /* 000100001100 */
-       0x03c0, /* 000000111100 */
-       0x1cc0, /* 000111001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x39c0, /* 001110011100 */
-       0x1ee0, /* 000111101110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x01, 0x80, /* 000000011000 */
+       0x03, 0x00, /* 000000110000 */
+       0x06, 0x00, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x80, /* 000011111000 */
+       0x18, 0xc0, /* 000110001100 */
+       0x10, 0xc0, /* 000100001100 */
+       0x03, 0xc0, /* 000000111100 */
+       0x1c, 0xc0, /* 000111001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x39, 0xc0, /* 001110011100 */
+       0x1e, 0xe0, /* 000111101110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 161 0xa1 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0180, /* 000000011000 */
-       0x0300, /* 000000110000 */
-       0x0600, /* 000001100000 */
-       0x0000, /* 000000000000 */
-       0x1e00, /* 000111100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x1f80, /* 000111111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x01, 0x80, /* 000000011000 */
+       0x03, 0x00, /* 000000110000 */
+       0x06, 0x00, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1e, 0x00, /* 000111100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x1f, 0x80, /* 000111111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 162 0xa2 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0180, /* 000000011000 */
-       0x0300, /* 000000110000 */
-       0x0600, /* 000001100000 */
-       0x0000, /* 000000000000 */
-       0x0f80, /* 000011111000 */
-       0x11c0, /* 000100011100 */
-       0x20e0, /* 001000001110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x6060, /* 011000000110 */
-       0x7040, /* 011100000100 */
-       0x3880, /* 001110001000 */
-       0x1f00, /* 000111110000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x01, 0x80, /* 000000011000 */
+       0x03, 0x00, /* 000000110000 */
+       0x06, 0x00, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x80, /* 000011111000 */
+       0x11, 0xc0, /* 000100011100 */
+       0x20, 0xe0, /* 001000001110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x60, 0x60, /* 011000000110 */
+       0x70, 0x40, /* 011100000100 */
+       0x38, 0x80, /* 001110001000 */
+       0x1f, 0x00, /* 000111110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 163 0xa3 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0180, /* 000000011000 */
-       0x0300, /* 000000110000 */
-       0x0600, /* 000001100000 */
-       0x0000, /* 000000000000 */
-       0x79e0, /* 011110011110 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x39c0, /* 001110011100 */
-       0x1e60, /* 000111100110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x01, 0x80, /* 000000011000 */
+       0x03, 0x00, /* 000000110000 */
+       0x06, 0x00, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x79, 0xe0, /* 011110011110 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x39, 0xc0, /* 001110011100 */
+       0x1e, 0x60, /* 000111100110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 164 0xa4 '.' */
-       0x0000, /* 000000000000 */
-       0x1c40, /* 000111000100 */
-       0x3fc0, /* 001111111100 */
-       0x2380, /* 001000111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x2780, /* 001001111000 */
-       0x79c0, /* 011110011100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x79e0, /* 011110011110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1c, 0x40, /* 000111000100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x23, 0x80, /* 001000111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x27, 0x80, /* 001001111000 */
+       0x79, 0xc0, /* 011110011100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x79, 0xe0, /* 011110011110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 165 0xa5 '.' */
-       0x0000, /* 000000000000 */
-       0x1c40, /* 000111000100 */
-       0x3fc0, /* 001111111100 */
-       0x2380, /* 001000111000 */
-       0xc070, /* 110000000111 */
-       0x6020, /* 011000000010 */
-       0x7020, /* 011100000010 */
-       0x7820, /* 011110000010 */
-       0x5c20, /* 010111000010 */
-       0x4e20, /* 010011100010 */
-       0x4720, /* 010001110010 */
-       0x43a0, /* 010000111010 */
-       0x41e0, /* 010000011110 */
-       0x40e0, /* 010000001110 */
-       0x4060, /* 010000000110 */
-       0xe030, /* 111000000011 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1c, 0x40, /* 000111000100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x23, 0x80, /* 001000111000 */
+       0xc0, 0x70, /* 110000000111 */
+       0x60, 0x20, /* 011000000010 */
+       0x70, 0x20, /* 011100000010 */
+       0x78, 0x20, /* 011110000010 */
+       0x5c, 0x20, /* 010111000010 */
+       0x4e, 0x20, /* 010011100010 */
+       0x47, 0x20, /* 010001110010 */
+       0x43, 0xa0, /* 010000111010 */
+       0x41, 0xe0, /* 010000011110 */
+       0x40, 0xe0, /* 010000001110 */
+       0x40, 0x60, /* 010000000110 */
+       0xe0, 0x30, /* 111000000011 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 166 0xa6 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1f00, /* 000111110000 */
-       0x3180, /* 001100011000 */
-       0x0180, /* 000000011000 */
-       0x0780, /* 000001111000 */
-       0x1980, /* 000110011000 */
-       0x3180, /* 001100011000 */
-       0x3180, /* 001100011000 */
-       0x3380, /* 001100111000 */
-       0x1dc0, /* 000111011100 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x1f, 0x00, /* 000111110000 */
+       0x31, 0x80, /* 001100011000 */
+       0x01, 0x80, /* 000000011000 */
+       0x07, 0x80, /* 000001111000 */
+       0x19, 0x80, /* 000110011000 */
+       0x31, 0x80, /* 001100011000 */
+       0x31, 0x80, /* 001100011000 */
+       0x33, 0x80, /* 001100111000 */
+       0x1d, 0xc0, /* 000111011100 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 167 0xa7 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0700, /* 000001110000 */
-       0x1980, /* 000110011000 */
-       0x10c0, /* 000100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x3080, /* 001100001000 */
-       0x1980, /* 000110011000 */
-       0x0e00, /* 000011100000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x07, 0x00, /* 000001110000 */
+       0x19, 0x80, /* 000110011000 */
+       0x10, 0xc0, /* 000100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0x80, /* 001100001000 */
+       0x19, 0x80, /* 000110011000 */
+       0x0e, 0x00, /* 000011100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 168 0xa8 '.' */
-       0x0000, /* 000000000000 */
-       0x0300, /* 000000110000 */
-       0x0300, /* 000000110000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0300, /* 000000110000 */
-       0x0300, /* 000000110000 */
-       0x0600, /* 000001100000 */
-       0x0c00, /* 000011000000 */
-       0x1800, /* 000110000000 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x3040, /* 001100000100 */
-       0x39c0, /* 001110011100 */
-       0x1f80, /* 000111111000 */
-       0x0f00, /* 000011110000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x03, 0x00, /* 000000110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x03, 0x00, /* 000000110000 */
+       0x03, 0x00, /* 000000110000 */
+       0x06, 0x00, /* 000001100000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x18, 0x00, /* 000110000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x40, /* 001100000100 */
+       0x39, 0xc0, /* 001110011100 */
+       0x1f, 0x80, /* 000111111000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 169 0xa9 '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 170 0xaa '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x00c0, /* 000000001100 */
-       0x00c0, /* 000000001100 */
-       0x00c0, /* 000000001100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x00, 0xc0, /* 000000001100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 171 0xab '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1000, /* 000100000000 */
-       0x3000, /* 001100000000 */
-       0x1000, /* 000100000000 */
-       0x1040, /* 000100000100 */
-       0x1080, /* 000100001000 */
-       0x1100, /* 000100010000 */
-       0x3a00, /* 001110100000 */
-       0x05c0, /* 000001011100 */
-       0x0a20, /* 000010100010 */
-       0x1020, /* 000100000010 */
-       0x20c0, /* 001000001100 */
-       0x4100, /* 010000010000 */
-       0x0200, /* 000000100000 */
-       0x03e0, /* 000000111110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x10, 0x00, /* 000100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x10, 0x00, /* 000100000000 */
+       0x10, 0x40, /* 000100000100 */
+       0x10, 0x80, /* 000100001000 */
+       0x11, 0x00, /* 000100010000 */
+       0x3a, 0x00, /* 001110100000 */
+       0x05, 0xc0, /* 000001011100 */
+       0x0a, 0x20, /* 000010100010 */
+       0x10, 0x20, /* 000100000010 */
+       0x20, 0xc0, /* 001000001100 */
+       0x41, 0x00, /* 010000010000 */
+       0x02, 0x00, /* 000000100000 */
+       0x03, 0xe0, /* 000000111110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 172 0xac '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x1000, /* 000100000000 */
-       0x3000, /* 001100000000 */
-       0x1000, /* 000100000000 */
-       0x1040, /* 000100000100 */
-       0x1080, /* 000100001000 */
-       0x1100, /* 000100010000 */
-       0x3a40, /* 001110100100 */
-       0x04c0, /* 000001001100 */
-       0x0940, /* 000010010100 */
-       0x1240, /* 000100100100 */
-       0x2440, /* 001001000100 */
-       0x47e0, /* 010001111110 */
-       0x0040, /* 000000000100 */
-       0x0040, /* 000000000100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x10, 0x00, /* 000100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x10, 0x00, /* 000100000000 */
+       0x10, 0x40, /* 000100000100 */
+       0x10, 0x80, /* 000100001000 */
+       0x11, 0x00, /* 000100010000 */
+       0x3a, 0x40, /* 001110100100 */
+       0x04, 0xc0, /* 000001001100 */
+       0x09, 0x40, /* 000010010100 */
+       0x12, 0x40, /* 000100100100 */
+       0x24, 0x40, /* 001001000100 */
+       0x47, 0xe0, /* 010001111110 */
+       0x00, 0x40, /* 000000000100 */
+       0x00, 0x40, /* 000000000100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 173 0xad '.' */
-       0x0000, /* 000000000000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 174 0xae '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0660, /* 000001100110 */
-       0x0cc0, /* 000011001100 */
-       0x1980, /* 000110011000 */
-       0x3300, /* 001100110000 */
-       0x6600, /* 011001100000 */
-       0x3300, /* 001100110000 */
-       0x1980, /* 000110011000 */
-       0x0cc0, /* 000011001100 */
-       0x0660, /* 000001100110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x06, 0x60, /* 000001100110 */
+       0x0c, 0xc0, /* 000011001100 */
+       0x19, 0x80, /* 000110011000 */
+       0x33, 0x00, /* 001100110000 */
+       0x66, 0x00, /* 011001100000 */
+       0x33, 0x00, /* 001100110000 */
+       0x19, 0x80, /* 000110011000 */
+       0x0c, 0xc0, /* 000011001100 */
+       0x06, 0x60, /* 000001100110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 175 0xaf '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x6600, /* 011001100000 */
-       0x3300, /* 001100110000 */
-       0x1980, /* 000110011000 */
-       0x0cc0, /* 000011001100 */
-       0x0660, /* 000001100110 */
-       0x0cc0, /* 000011001100 */
-       0x1980, /* 000110011000 */
-       0x3300, /* 001100110000 */
-       0x6600, /* 011001100000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x66, 0x00, /* 011001100000 */
+       0x33, 0x00, /* 001100110000 */
+       0x19, 0x80, /* 000110011000 */
+       0x0c, 0xc0, /* 000011001100 */
+       0x06, 0x60, /* 000001100110 */
+       0x0c, 0xc0, /* 000011001100 */
+       0x19, 0x80, /* 000110011000 */
+       0x33, 0x00, /* 001100110000 */
+       0x66, 0x00, /* 011001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 176 0xb0 '.' */
-       0x0c30, /* 000011000011 */
-       0x0820, /* 000010000010 */
-       0x6180, /* 011000011000 */
-       0x2080, /* 001000001000 */
-       0x0c30, /* 000011000011 */
-       0x0820, /* 000010000010 */
-       0x6180, /* 011000011000 */
-       0x2080, /* 001000001000 */
-       0x0c30, /* 000011000011 */
-       0x0820, /* 000010000010 */
-       0x6180, /* 011000011000 */
-       0x2080, /* 001000001000 */
-       0x0c30, /* 000011000011 */
-       0x0820, /* 000010000010 */
-       0x6180, /* 011000011000 */
-       0x2080, /* 001000001000 */
-       0x0c30, /* 000011000011 */
-       0x0820, /* 000010000010 */
-       0x6180, /* 011000011000 */
-       0x2080, /* 001000001000 */
-       0x0c30, /* 000011000011 */
-       0x0820, /* 000010000010 */
+       0x0c, 0x30, /* 000011000011 */
+       0x08, 0x20, /* 000010000010 */
+       0x61, 0x80, /* 011000011000 */
+       0x20, 0x80, /* 001000001000 */
+       0x0c, 0x30, /* 000011000011 */
+       0x08, 0x20, /* 000010000010 */
+       0x61, 0x80, /* 011000011000 */
+       0x20, 0x80, /* 001000001000 */
+       0x0c, 0x30, /* 000011000011 */
+       0x08, 0x20, /* 000010000010 */
+       0x61, 0x80, /* 011000011000 */
+       0x20, 0x80, /* 001000001000 */
+       0x0c, 0x30, /* 000011000011 */
+       0x08, 0x20, /* 000010000010 */
+       0x61, 0x80, /* 011000011000 */
+       0x20, 0x80, /* 001000001000 */
+       0x0c, 0x30, /* 000011000011 */
+       0x08, 0x20, /* 000010000010 */
+       0x61, 0x80, /* 011000011000 */
+       0x20, 0x80, /* 001000001000 */
+       0x0c, 0x30, /* 000011000011 */
+       0x08, 0x20, /* 000010000010 */
 
        /* 177 0xb1 '.' */
-       0x7770, /* 011101110111 */
-       0x2220, /* 001000100010 */
-       0x8880, /* 100010001000 */
-       0xddd0, /* 110111011101 */
-       0x8880, /* 100010001000 */
-       0x2220, /* 001000100010 */
-       0x7770, /* 011101110111 */
-       0x2220, /* 001000100010 */
-       0x8880, /* 100010001000 */
-       0xddd0, /* 110111011101 */
-       0x8880, /* 100010001000 */
-       0x2220, /* 001000100010 */
-       0x7770, /* 011101110111 */
-       0x2220, /* 001000100010 */
-       0x8880, /* 100010001000 */
-       0xddd0, /* 110111011101 */
-       0x8880, /* 100010001000 */
-       0x2220, /* 001000100010 */
-       0x7770, /* 011101110111 */
-       0x2220, /* 001000100010 */
-       0x8880, /* 100010001000 */
-       0xddd0, /* 110111011101 */
+       0x77, 0x70, /* 011101110111 */
+       0x22, 0x20, /* 001000100010 */
+       0x88, 0x80, /* 100010001000 */
+       0xdd, 0xd0, /* 110111011101 */
+       0x88, 0x80, /* 100010001000 */
+       0x22, 0x20, /* 001000100010 */
+       0x77, 0x70, /* 011101110111 */
+       0x22, 0x20, /* 001000100010 */
+       0x88, 0x80, /* 100010001000 */
+       0xdd, 0xd0, /* 110111011101 */
+       0x88, 0x80, /* 100010001000 */
+       0x22, 0x20, /* 001000100010 */
+       0x77, 0x70, /* 011101110111 */
+       0x22, 0x20, /* 001000100010 */
+       0x88, 0x80, /* 100010001000 */
+       0xdd, 0xd0, /* 110111011101 */
+       0x88, 0x80, /* 100010001000 */
+       0x22, 0x20, /* 001000100010 */
+       0x77, 0x70, /* 011101110111 */
+       0x22, 0x20, /* 001000100010 */
+       0x88, 0x80, /* 100010001000 */
+       0xdd, 0xd0, /* 110111011101 */
 
        /* 178 0xb2 '.' */
-       0xf3c0, /* 111100111100 */
-       0xf7d0, /* 111101111101 */
-       0x9e70, /* 100111100111 */
-       0xdf70, /* 110111110111 */
-       0xf3c0, /* 111100111100 */
-       0xf7d0, /* 111101111101 */
-       0x9e70, /* 100111100111 */
-       0xdf70, /* 110111110111 */
-       0xf3c0, /* 111100111100 */
-       0xf7d0, /* 111101111101 */
-       0x9e70, /* 100111100111 */
-       0xdf70, /* 110111110111 */
-       0xf3c0, /* 111100111100 */
-       0xf7d0, /* 111101111101 */
-       0x9e70, /* 100111100111 */
-       0xdf70, /* 110111110111 */
-       0xf3c0, /* 111100111100 */
-       0xf7d0, /* 111101111101 */
-       0x9e70, /* 100111100111 */
-       0xdf70, /* 110111110111 */
-       0xf3c0, /* 111100111100 */
-       0xf7d0, /* 111101111101 */
+       0xf3, 0xc0, /* 111100111100 */
+       0xf7, 0xd0, /* 111101111101 */
+       0x9e, 0x70, /* 100111100111 */
+       0xdf, 0x70, /* 110111110111 */
+       0xf3, 0xc0, /* 111100111100 */
+       0xf7, 0xd0, /* 111101111101 */
+       0x9e, 0x70, /* 100111100111 */
+       0xdf, 0x70, /* 110111110111 */
+       0xf3, 0xc0, /* 111100111100 */
+       0xf7, 0xd0, /* 111101111101 */
+       0x9e, 0x70, /* 100111100111 */
+       0xdf, 0x70, /* 110111110111 */
+       0xf3, 0xc0, /* 111100111100 */
+       0xf7, 0xd0, /* 111101111101 */
+       0x9e, 0x70, /* 100111100111 */
+       0xdf, 0x70, /* 110111110111 */
+       0xf3, 0xc0, /* 111100111100 */
+       0xf7, 0xd0, /* 111101111101 */
+       0x9e, 0x70, /* 100111100111 */
+       0xdf, 0x70, /* 110111110111 */
+       0xf3, 0xc0, /* 111100111100 */
+       0xf7, 0xd0, /* 111101111101 */
 
        /* 179 0xb3 '.' */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
 
        /* 180 0xb4 '.' */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0xfe00, /* 111111100000 */
-       0xfe00, /* 111111100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0xfe, 0x00, /* 111111100000 */
+       0xfe, 0x00, /* 111111100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
 
        /* 181 0xb5 '.' */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0xfe00, /* 111111100000 */
-       0xfe00, /* 111111100000 */
-       0x0600, /* 000001100000 */
-       0xfe00, /* 111111100000 */
-       0xfe00, /* 111111100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0xfe, 0x00, /* 111111100000 */
+       0xfe, 0x00, /* 111111100000 */
+       0x06, 0x00, /* 000001100000 */
+       0xfe, 0x00, /* 111111100000 */
+       0xfe, 0x00, /* 111111100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
 
        /* 182 0xb6 '.' */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0xfd80, /* 111111011000 */
-       0xfd80, /* 111111011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0xfd, 0x80, /* 111111011000 */
+       0xfd, 0x80, /* 111111011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
 
        /* 183 0xb7 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xff80, /* 111111111000 */
-       0xff80, /* 111111111000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xff, 0x80, /* 111111111000 */
+       0xff, 0x80, /* 111111111000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
 
        /* 184 0xb8 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xfe00, /* 111111100000 */
-       0xfe00, /* 111111100000 */
-       0x0600, /* 000001100000 */
-       0xfe00, /* 111111100000 */
-       0xfe00, /* 111111100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xfe, 0x00, /* 111111100000 */
+       0xfe, 0x00, /* 111111100000 */
+       0x06, 0x00, /* 000001100000 */
+       0xfe, 0x00, /* 111111100000 */
+       0xfe, 0x00, /* 111111100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
 
        /* 185 0xb9 '.' */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0xfd80, /* 111111011000 */
-       0xfd80, /* 111111011000 */
-       0x0180, /* 000000011000 */
-       0xfd80, /* 111111011000 */
-       0xfd80, /* 111111011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0xfd, 0x80, /* 111111011000 */
+       0xfd, 0x80, /* 111111011000 */
+       0x01, 0x80, /* 000000011000 */
+       0xfd, 0x80, /* 111111011000 */
+       0xfd, 0x80, /* 111111011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
 
        /* 186 0xba '.' */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
 
        /* 187 0xbb '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xff80, /* 111111111000 */
-       0xff80, /* 111111111000 */
-       0x0180, /* 000000011000 */
-       0xfd80, /* 111111011000 */
-       0xfd80, /* 111111011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xff, 0x80, /* 111111111000 */
+       0xff, 0x80, /* 111111111000 */
+       0x01, 0x80, /* 000000011000 */
+       0xfd, 0x80, /* 111111011000 */
+       0xfd, 0x80, /* 111111011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
 
        /* 188 0xbc '.' */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0xfd80, /* 111111011000 */
-       0xfd80, /* 111111011000 */
-       0x0180, /* 000000011000 */
-       0xff80, /* 111111111000 */
-       0xff80, /* 111111111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0xfd, 0x80, /* 111111011000 */
+       0xfd, 0x80, /* 111111011000 */
+       0x01, 0x80, /* 000000011000 */
+       0xff, 0x80, /* 111111111000 */
+       0xff, 0x80, /* 111111111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 189 0xbd '.' */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0xff80, /* 111111111000 */
-       0xff80, /* 111111111000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0xff, 0x80, /* 111111111000 */
+       0xff, 0x80, /* 111111111000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 190 0xbe '.' */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0xfe00, /* 111111100000 */
-       0xfe00, /* 111111100000 */
-       0x0600, /* 000001100000 */
-       0xfe00, /* 111111100000 */
-       0xfe00, /* 111111100000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0xfe, 0x00, /* 111111100000 */
+       0xfe, 0x00, /* 111111100000 */
+       0x06, 0x00, /* 000001100000 */
+       0xfe, 0x00, /* 111111100000 */
+       0xfe, 0x00, /* 111111100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 191 0xbf '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xfe00, /* 111111100000 */
-       0xfe00, /* 111111100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xfe, 0x00, /* 111111100000 */
+       0xfe, 0x00, /* 111111100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
 
        /* 192 0xc0 '.' */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x07f0, /* 000001111111 */
-       0x07f0, /* 000001111111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x07, 0xf0, /* 000001111111 */
+       0x07, 0xf0, /* 000001111111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 193 0xc1 '.' */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 194 0xc2 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
 
        /* 195 0xc3 '.' */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x07f0, /* 000001111111 */
-       0x07f0, /* 000001111111 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x07, 0xf0, /* 000001111111 */
+       0x07, 0xf0, /* 000001111111 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
 
        /* 196 0xc4 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 197 0xc5 '.' */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
 
        /* 198 0xc6 '.' */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x07f0, /* 000001111111 */
-       0x07f0, /* 000001111111 */
-       0x0600, /* 000001100000 */
-       0x07f0, /* 000001111111 */
-       0x07f0, /* 000001111111 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x07, 0xf0, /* 000001111111 */
+       0x07, 0xf0, /* 000001111111 */
+       0x06, 0x00, /* 000001100000 */
+       0x07, 0xf0, /* 000001111111 */
+       0x07, 0xf0, /* 000001111111 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
 
        /* 199 0xc7 '.' */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0df0, /* 000011011111 */
-       0x0df0, /* 000011011111 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0xf0, /* 000011011111 */
+       0x0d, 0xf0, /* 000011011111 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
 
        /* 200 0xc8 '.' */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0df0, /* 000011011111 */
-       0x0df0, /* 000011011111 */
-       0x0c00, /* 000011000000 */
-       0x0ff0, /* 000011111111 */
-       0x0ff0, /* 000011111111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0xf0, /* 000011011111 */
+       0x0d, 0xf0, /* 000011011111 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0f, 0xf0, /* 000011111111 */
+       0x0f, 0xf0, /* 000011111111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 201 0xc9 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0ff0, /* 000011111111 */
-       0x0ff0, /* 000011111111 */
-       0x0c00, /* 000011000000 */
-       0x0df0, /* 000011011111 */
-       0x0df0, /* 000011011111 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0xf0, /* 000011111111 */
+       0x0f, 0xf0, /* 000011111111 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0d, 0xf0, /* 000011011111 */
+       0x0d, 0xf0, /* 000011011111 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
 
        /* 202 0xca '.' */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0xfdf0, /* 111111011111 */
-       0xfdf0, /* 111111011111 */
-       0x0000, /* 000000000000 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0xfd, 0xf0, /* 111111011111 */
+       0xfd, 0xf0, /* 111111011111 */
+       0x00, 0x00, /* 000000000000 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 203 0xcb '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0x0000, /* 000000000000 */
-       0xfdf0, /* 111111011111 */
-       0xfdf0, /* 111111011111 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0x00, 0x00, /* 000000000000 */
+       0xfd, 0xf0, /* 111111011111 */
+       0xfd, 0xf0, /* 111111011111 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
 
        /* 204 0xcc '.' */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0df0, /* 000011011111 */
-       0x0df0, /* 000011011111 */
-       0x0c00, /* 000011000000 */
-       0x0df0, /* 000011011111 */
-       0x0df0, /* 000011011111 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0xf0, /* 000011011111 */
+       0x0d, 0xf0, /* 000011011111 */
+       0x0c, 0x00, /* 000011000000 */
+       0x0d, 0xf0, /* 000011011111 */
+       0x0d, 0xf0, /* 000011011111 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
 
        /* 205 0xcd '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0x0000, /* 000000000000 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0x00, 0x00, /* 000000000000 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 206 0xce '.' */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0xfdf0, /* 111111011111 */
-       0xfdf0, /* 111111011111 */
-       0x0000, /* 000000000000 */
-       0xfdf0, /* 111111011111 */
-       0xfdf0, /* 111111011111 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0xfd, 0xf0, /* 111111011111 */
+       0xfd, 0xf0, /* 111111011111 */
+       0x00, 0x00, /* 000000000000 */
+       0xfd, 0xf0, /* 111111011111 */
+       0xfd, 0xf0, /* 111111011111 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
 
        /* 207 0xcf '.' */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0x0000, /* 000000000000 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0x00, 0x00, /* 000000000000 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 208 0xd0 '.' */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 209 0xd1 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0x0000, /* 000000000000 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0x00, 0x00, /* 000000000000 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
 
        /* 210 0xd2 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
 
        /* 211 0xd3 '.' */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0ff0, /* 000011111111 */
-       0x0ff0, /* 000011111111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0f, 0xf0, /* 000011111111 */
+       0x0f, 0xf0, /* 000011111111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 212 0xd4 '.' */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x07f0, /* 000001111111 */
-       0x07f0, /* 000001111111 */
-       0x0600, /* 000001100000 */
-       0x07f0, /* 000001111111 */
-       0x07f0, /* 000001111111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x07, 0xf0, /* 000001111111 */
+       0x07, 0xf0, /* 000001111111 */
+       0x06, 0x00, /* 000001100000 */
+       0x07, 0xf0, /* 000001111111 */
+       0x07, 0xf0, /* 000001111111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 213 0xd5 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x07f0, /* 000001111111 */
-       0x07f0, /* 000001111111 */
-       0x0600, /* 000001100000 */
-       0x07f0, /* 000001111111 */
-       0x07f0, /* 000001111111 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x07, 0xf0, /* 000001111111 */
+       0x07, 0xf0, /* 000001111111 */
+       0x06, 0x00, /* 000001100000 */
+       0x07, 0xf0, /* 000001111111 */
+       0x07, 0xf0, /* 000001111111 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
 
        /* 214 0xd6 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0ff0, /* 000011111111 */
-       0x0ff0, /* 000011111111 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0xf0, /* 000011111111 */
+       0x0f, 0xf0, /* 000011111111 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
 
        /* 215 0xd7 '.' */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
-       0x0d80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
+       0x0d, 0x80, /* 000011011000 */
 
        /* 216 0xd8 '.' */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0x0600, /* 000001100000 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0x06, 0x00, /* 000001100000 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
 
        /* 217 0xd9 '.' */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0xfe00, /* 111111100000 */
-       0xfe00, /* 111111100000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0xfe, 0x00, /* 111111100000 */
+       0xfe, 0x00, /* 111111100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 218 0xda '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x07f0, /* 000001111111 */
-       0x07f0, /* 000001111111 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x07, 0xf0, /* 000001111111 */
+       0x07, 0xf0, /* 000001111111 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
 
        /* 219 0xdb '.' */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
 
        /* 220 0xdc '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
 
        /* 221 0xdd '.' */
-       0xfc00, /* 111111000000 */
-       0xfc00, /* 111111000000 */
-       0xfc00, /* 111111000000 */
-       0xfc00, /* 111111000000 */
-       0xfc00, /* 111111000000 */
-       0xfc00, /* 111111000000 */
-       0xfc00, /* 111111000000 */
-       0xfc00, /* 111111000000 */
-       0xfc00, /* 111111000000 */
-       0xfc00, /* 111111000000 */
-       0xfc00, /* 111111000000 */
-       0xfc00, /* 111111000000 */
-       0xfc00, /* 111111000000 */
-       0xfc00, /* 111111000000 */
-       0xfc00, /* 111111000000 */
-       0xfc00, /* 111111000000 */
-       0xfc00, /* 111111000000 */
-       0xfc00, /* 111111000000 */
-       0xfc00, /* 111111000000 */
-       0xfc00, /* 111111000000 */
-       0xfc00, /* 111111000000 */
-       0xfc00, /* 111111000000 */
+       0xfc, 0x00, /* 111111000000 */
+       0xfc, 0x00, /* 111111000000 */
+       0xfc, 0x00, /* 111111000000 */
+       0xfc, 0x00, /* 111111000000 */
+       0xfc, 0x00, /* 111111000000 */
+       0xfc, 0x00, /* 111111000000 */
+       0xfc, 0x00, /* 111111000000 */
+       0xfc, 0x00, /* 111111000000 */
+       0xfc, 0x00, /* 111111000000 */
+       0xfc, 0x00, /* 111111000000 */
+       0xfc, 0x00, /* 111111000000 */
+       0xfc, 0x00, /* 111111000000 */
+       0xfc, 0x00, /* 111111000000 */
+       0xfc, 0x00, /* 111111000000 */
+       0xfc, 0x00, /* 111111000000 */
+       0xfc, 0x00, /* 111111000000 */
+       0xfc, 0x00, /* 111111000000 */
+       0xfc, 0x00, /* 111111000000 */
+       0xfc, 0x00, /* 111111000000 */
+       0xfc, 0x00, /* 111111000000 */
+       0xfc, 0x00, /* 111111000000 */
+       0xfc, 0x00, /* 111111000000 */
 
        /* 222 0xde '.' */
-       0x03f0, /* 000000111111 */
-       0x03f0, /* 000000111111 */
-       0x03f0, /* 000000111111 */
-       0x03f0, /* 000000111111 */
-       0x03f0, /* 000000111111 */
-       0x03f0, /* 000000111111 */
-       0x03f0, /* 000000111111 */
-       0x03f0, /* 000000111111 */
-       0x03f0, /* 000000111111 */
-       0x03f0, /* 000000111111 */
-       0x03f0, /* 000000111111 */
-       0x03f0, /* 000000111111 */
-       0x03f0, /* 000000111111 */
-       0x03f0, /* 000000111111 */
-       0x03f0, /* 000000111111 */
-       0x03f0, /* 000000111111 */
-       0x03f0, /* 000000111111 */
-       0x03f0, /* 000000111111 */
-       0x03f0, /* 000000111111 */
-       0x03f0, /* 000000111111 */
-       0x03f0, /* 000000111111 */
-       0x03f0, /* 000000111111 */
+       0x03, 0xf0, /* 000000111111 */
+       0x03, 0xf0, /* 000000111111 */
+       0x03, 0xf0, /* 000000111111 */
+       0x03, 0xf0, /* 000000111111 */
+       0x03, 0xf0, /* 000000111111 */
+       0x03, 0xf0, /* 000000111111 */
+       0x03, 0xf0, /* 000000111111 */
+       0x03, 0xf0, /* 000000111111 */
+       0x03, 0xf0, /* 000000111111 */
+       0x03, 0xf0, /* 000000111111 */
+       0x03, 0xf0, /* 000000111111 */
+       0x03, 0xf0, /* 000000111111 */
+       0x03, 0xf0, /* 000000111111 */
+       0x03, 0xf0, /* 000000111111 */
+       0x03, 0xf0, /* 000000111111 */
+       0x03, 0xf0, /* 000000111111 */
+       0x03, 0xf0, /* 000000111111 */
+       0x03, 0xf0, /* 000000111111 */
+       0x03, 0xf0, /* 000000111111 */
+       0x03, 0xf0, /* 000000111111 */
+       0x03, 0xf0, /* 000000111111 */
+       0x03, 0xf0, /* 000000111111 */
 
        /* 223 0xdf '.' */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0xfff0, /* 111111111111 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0xff, 0xf0, /* 111111111111 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 224 0xe0 '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 225 0xe1 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0f00, /* 000011110000 */
-       0x1980, /* 000110011000 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x3180, /* 001100011000 */
-       0x3780, /* 001101111000 */
-       0x3180, /* 001100011000 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x3180, /* 001100011000 */
-       0x7700, /* 011101110000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x19, 0x80, /* 000110011000 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x31, 0x80, /* 001100011000 */
+       0x37, 0x80, /* 001101111000 */
+       0x31, 0x80, /* 001100011000 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x31, 0x80, /* 001100011000 */
+       0x77, 0x00, /* 011101110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 226 0xe2 '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 227 0xe3 '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 228 0xe4 '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 229 0xe5 '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 230 0xe6 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x30c0, /* 001100001100 */
-       0x39c0, /* 001110011100 */
-       0x36e0, /* 001101101110 */
-       0x3000, /* 001100000000 */
-       0x3000, /* 001100000000 */
-       0x6000, /* 011000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x30, 0xc0, /* 001100001100 */
+       0x39, 0xc0, /* 001110011100 */
+       0x36, 0xe0, /* 001101101110 */
+       0x30, 0x00, /* 001100000000 */
+       0x30, 0x00, /* 001100000000 */
+       0x60, 0x00, /* 011000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 231 0xe7 '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 232 0xe8 '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 233 0xe9 '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 234 0xea '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 235 0xeb '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 236 0xec '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 237 0xed '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 238 0xee '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 239 0xef '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 240 0xf0 '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 241 0xf1 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x7fe0, /* 011111111110 */
-       0x7fe0, /* 011111111110 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0000, /* 000000000000 */
-       0x7fe0, /* 011111111110 */
-       0x7fe0, /* 011111111110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 242 0xf2 '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 243 0xf3 '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 244 0xf4 '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 245 0xf5 '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 246 0xf6 '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x7fe0, /* 011111111110 */
-       0x7fe0, /* 011111111110 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0600, /* 000001100000 */
-       0x0600, /* 000001100000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x7f, 0xe0, /* 011111111110 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x06, 0x00, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 247 0xf7 '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 248 0xf8 '.' */
-       0x0000, /* 000000000000 */
-       0x0f00, /* 000011110000 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0x1980, /* 000110011000 */
-       0x0f00, /* 000011110000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0x19, 0x80, /* 000110011000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 249 0xf9 '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 250 0xfa '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0600, /* 000001100000 */
-       0x0f00, /* 000011110000 */
-       0x0f00, /* 000011110000 */
-       0x0600, /* 000001100000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x06, 0x00, /* 000001100000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x06, 0x00, /* 000001100000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 251 0xfb '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 252 0xfc '.' */
        /* FIXME */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 253 0xfd '.' */
-       0x0000, /* 000000000000 */
-       0x0f00, /* 000011110000 */
-       0x1f80, /* 000111111000 */
-       0x3180, /* 001100011000 */
-       0x2180, /* 001000011000 */
-       0x0300, /* 000000110000 */
-       0x0600, /* 000001100000 */
-       0x0c00, /* 000011000000 */
-       0x1840, /* 000110000100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x0f, 0x00, /* 000011110000 */
+       0x1f, 0x80, /* 000111111000 */
+       0x31, 0x80, /* 001100011000 */
+       0x21, 0x80, /* 001000011000 */
+       0x03, 0x00, /* 000000110000 */
+       0x06, 0x00, /* 000001100000 */
+       0x0c, 0x00, /* 000011000000 */
+       0x18, 0x40, /* 000110000100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 254 0xfe '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x3fc0, /* 001111111100 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x3f, 0xc0, /* 001111111100 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
        /* 255 0xff '.' */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
-       0x0000, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
+       0x00, 0x00, /* 000000000000 */
 
 };
 
index d50c403a6fddf50d745598ba1e69424b08bbab39..99ebadf4b9d53e2099f720096c1bf5cf28e89a9c 100644 (file)
 #define eieio()                /* Enforce In-order Execution of I/O */
 #endif
 
-enum {
-       IBM = 0x00,
-       TVP = 0x01
-};
-
 /* TwinTurbo (Cosmo) registers */
 enum {
        S1SA    =  0, /* 0x00 */
@@ -63,7 +58,8 @@ enum {
        SP      =  2, /* 0x08 */
        DSA     =  3, /* 0x0C */
        CNT     =  4, /* 0x10 */
-       DP_OCTRL=  5, /* 0x14 */
+       DP_OCTL =  5, /* 0x14 */
+       CLR     =  6, /* 0x18 */
        BI      =  8, /* 0x20 */
        MBC     =  9, /* 0x24 */
        BLTCTL  = 10, /* 0x28 */
@@ -113,7 +109,7 @@ enum {
 #endif
 };
 
-/* IBM ramdac direct registers */
+/* IBM 624 RAMDAC Direct Registers */
 enum {
        PADDRW  = 0x00,
        PDATA   = 0x04,
@@ -125,7 +121,7 @@ enum {
        PIDXCTL = 0x1c
 };
 
-/* IBM ramdac indirect registers */
+/* IBM 624 RAMDAC Indirect Registers */
 enum {
        CLKCTL          = 0x02, /* (0x01) Miscellaneous Clock Control */
        SYNCCTL         = 0x03, /* (0x00) Sync Control */
@@ -255,7 +251,7 @@ static struct initvalues ibm_initregs[] __initdata = {
         * used in the 2MB and 4MB cards, at least.
         */
        { BPP8,         0x00 },
-       { BPP16,        0x00 },
+       { BPP16,        0x01 },
        { BPP24,        0x00 },
        { BPP32,        0x00 },
 
@@ -265,7 +261,7 @@ static struct initvalues ibm_initregs[] __initdata = {
        { SYSCLKM,      0x4f },
        { SYSCLKP,      0x00 },
        { SYSCLKC,      0x00 },
-       { CURSCTL,      0x02 },
+       { CURSCTL,      0x00 },
        { CURSACCTL,    0x01 },
        { CURSACATTR,   0xa8 },
        { CURS1R,       0xff },
@@ -287,24 +283,24 @@ static struct initvalues ibm_initregs[] __initdata = {
 };
 
 static struct initvalues tvp_initregs[] __initdata = {
-       { 0x6,  0x00 },
-       { 0x7,  0xe4 },
-       { 0xf,  0x06 },
-       { 0x18, 0x80 },
-       { 0x19, 0x4d },
-       { 0x1a, 0x05 },
-       { 0x1c, 0x00 },
-       { 0x1d, 0x00 },
-       { 0x1e, 0x08 },
-       { 0x30, 0xff },
-       { 0x31, 0xff },
-       { 0x32, 0xff },
-       { 0x33, 0xff },
-       { 0x34, 0xff },
-       { 0x35, 0xff },
-       { 0x36, 0xff },
-       { 0x37, 0xff },
-       { 0x38, 0x00 },
+       { TVPIRICC,     0x00 },
+       { TVPIRBRC,     0xe4 },
+       { TVPIRLAC,     0x06 },
+       { TVPIRTCC,     0x80 },
+       { TVPIRMXC,     0x4d },
+       { TVPIRCLS,     0x05 },
+       { TVPIRPPG,     0x00 },
+       { TVPIRGEC,     0x00 },
+       { TVPIRMIC,     0x08 },
+       { TVPIRCKL,     0xff },
+       { TVPIRCKH,     0xff },
+       { TVPIRCRL,     0xff },
+       { TVPIRCRH,     0xff },
+       { TVPIRCGL,     0xff },
+       { TVPIRCGH,     0xff },
+       { TVPIRCBL,     0xff },
+       { TVPIRCBH,     0xff },
+       { TVPIRCKC,     0x00 },
        { TVPIRPLA,     0x00 },
        { TVPIRPPD,     0xc0 },
        { TVPIRPPD,     0xd5 },
@@ -358,13 +354,18 @@ struct fb_info_imstt {
        } palette[256];
        struct imstt_regvals init;
        struct imstt_cursor cursor;
-       volatile __u8 *frame_buffer_phys, *frame_buffer;
-       volatile __u32 *dc_regs_phys, *dc_regs;
-       volatile __u8 *cmap_regs_phys, *cmap_regs;
+       __u8 *frame_buffer_phys, *frame_buffer;
+       __u32 *dc_regs_phys, *dc_regs;
+       __u8 *cmap_regs_phys, *cmap_regs;
        __u32 total_vram;
        __u32 ramdac;
 };
 
+enum {
+       IBM = 0,
+       TVP = 1
+};
+
 #define USE_NV_MODES           1
 #define INIT_BPP               8
 #define INIT_XRES              640
@@ -379,6 +380,9 @@ static char noaccel __initdata = 0;
 #if defined(CONFIG_PPC)
 static signed char init_vmode __initdata = -1, init_cmode __initdata = -1;
 #endif
+#ifdef MODULE
+static struct fb_info_imstt *fb_info_imstt_p[FB_MAX] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+#endif
 
 static struct imstt_regvals tvp_reg_init_2 = {
        512,
@@ -619,7 +623,12 @@ set_imstt_regvals_tvp (struct fb_info_imstt *p, u_int bpp)
                        lckl_p = init->lckl_p[1];
                        break;
                case 24:
-                       /* ?!? */
+                       tcc = 0x5e;
+                       mxc = 0x5d;
+                       lckl_n = 0xf1;
+                       mlc = init->mlc[2];
+                       lckl_p = init->lckl_p[2];
+                       break;
                case 32:
                        tcc = 0x46;
                        mxc = 0x5d;
@@ -666,7 +675,7 @@ static void
 set_imstt_regvals (struct fb_info_imstt *p, u_int bpp)
 {
        struct imstt_regvals *init = &p->init;
-       __u32 ctl, pitch, byteswap, scr, line_pitch = init->pitch * (bpp >> 3);
+       __u32 ctl, pitch, byteswap, scr;
 
        if (p->ramdac == IBM)
                set_imstt_regvals_ibm(p, bpp);
@@ -682,7 +691,6 @@ set_imstt_regvals (struct fb_info_imstt *p, u_int bpp)
    *     ==========     =====   =====
    *        8bpp          0       0
    *       16bpp          0       1
-   *       24bpp          1       0
    *       32bpp          1       1
    */
        switch (bpp) {
@@ -737,64 +745,97 @@ set_imstt_regvals (struct fb_info_imstt *p, u_int bpp)
        }
 
        switch (p->total_vram) {
-               case 0x00200000:
+               case 0x200000:
                        scr = 0x059d | byteswap;
                        break;
-               case 0x00400000:
-               case 0x00800000:
-                       pitch /= 2;
+               /* case 0x400000:
+                  case 0x800000: */
+               default:
+                       pitch >>= 1;
                        scr = 0x150dd | byteswap;
                        break;
        }
 
        out_le32(&p->dc_regs[SCR], scr);
        out_le32(&p->dc_regs[SPR], pitch);
-       out_le32(&p->dc_regs[SP], (line_pitch << 16) | line_pitch);
-       out_le32(&p->dc_regs[DP_OCTRL], line_pitch);
-
        out_le32(&p->dc_regs[STGCTL], ctl);
 }
 
-static void
-set_16 (struct fb_info_imstt *p, __u8 x)
+static inline void
+set_offset (struct display *disp, struct fb_info_imstt *p)
+{
+       __u32 off = disp->var.yoffset * (disp->line_length >> 3)
+                   + ((disp->var.xoffset * (disp->var.bits_per_pixel >> 3)) >> 3);
+       out_le32(&p->dc_regs[SSR], off);
+}
+
+static inline void
+set_555 (struct fb_info_imstt *p)
 {
        if (p->ramdac == IBM) {
                p->cmap_regs[PIDXHI] = 0;       eieio();
                p->cmap_regs[PIDXLO] = BPP16;   eieio();
-               p->cmap_regs[PIDXDATA] = x;     eieio();
+               p->cmap_regs[PIDXDATA] = 0x01;  eieio();
        } else {
-               /* ?!? */
+               p->cmap_regs[TVPADDRW] = TVPIRTCC;      eieio();
+               p->cmap_regs[TVPIDATA] = 0x44;          eieio();
        }
 }
 
-#define set_555(_p)    set_16(_p, 0x01)
-#define set_565(_p)    set_16(_p, 0x03)
+static inline void
+set_565 (struct fb_info_imstt *p)
+{
+       if (p->ramdac == IBM) {
+               p->cmap_regs[PIDXHI] = 0;       eieio();
+               p->cmap_regs[PIDXLO] = BPP16;   eieio();
+               p->cmap_regs[PIDXDATA] = 0x03;  eieio();
+       } else {
+               p->cmap_regs[TVPADDRW] = TVPIRTCC;      eieio();
+               p->cmap_regs[TVPIDATA] = 0x45;          eieio();
+       }
+}
 
 static void
 imstt_set_cursor (struct fb_info_imstt *p, int on)
 {
        struct imstt_cursor *c = &p->cursor;
 
-       p->cmap_regs[PIDXHI] = 0;
-       if (!on) {
-               p->cmap_regs[PIDXLO] = CURSCTL; eieio();
-               p->cmap_regs[PIDXDATA] = 0x00;  eieio();
+       if (p->ramdac == IBM) {
+               p->cmap_regs[PIDXHI] = 0;       eieio();
+               if (!on) {
+                       p->cmap_regs[PIDXLO] = CURSCTL; eieio();
+                       p->cmap_regs[PIDXDATA] = 0x00;  eieio();
+               } else {
+                       p->cmap_regs[PIDXLO] = CURSXHI;         eieio();
+                       p->cmap_regs[PIDXDATA] = c->x >> 8;     eieio();
+                       p->cmap_regs[PIDXLO] = CURSXLO;         eieio();
+                       p->cmap_regs[PIDXDATA] = c->x & 0xff;   eieio();
+                       p->cmap_regs[PIDXLO] = CURSYHI;         eieio();
+                       p->cmap_regs[PIDXDATA] = c->y >> 8;     eieio();
+                       p->cmap_regs[PIDXLO] = CURSYLO;         eieio();
+                       p->cmap_regs[PIDXDATA] = c->y & 0xff;   eieio();
+                       p->cmap_regs[PIDXLO] = CURSCTL;         eieio();
+                       p->cmap_regs[PIDXDATA] = 0x02;          eieio();
+               }
        } else {
-               p->cmap_regs[PIDXLO] = CURSXHI;         eieio();
-               p->cmap_regs[PIDXDATA] = c->x >> 8;     eieio();
-               p->cmap_regs[PIDXLO] = CURSXLO;         eieio();
-               p->cmap_regs[PIDXDATA] = c->x & 0xff;   eieio();
-               p->cmap_regs[PIDXLO] = CURSYHI;         eieio();
-               p->cmap_regs[PIDXDATA] = c->y >> 8;     eieio();
-               p->cmap_regs[PIDXLO] = CURSYLO;         eieio();
-               p->cmap_regs[PIDXDATA] = c->y & 0xff;   eieio();
-               p->cmap_regs[PIDXLO] = CURSCTL;         eieio();
-               p->cmap_regs[PIDXDATA] = 0x02;          eieio();
+               if (!on) {
+                       p->cmap_regs[TVPADDRW] = TVPIRICC;      eieio();
+                       p->cmap_regs[TVPIDATA] = 0x00;          eieio();
+               } else {
+                       __u16 x = c->x + 0x40, y = c->y + 0x40;
+
+                       p->cmap_regs[TVPCXPOH] = x >> 8;        eieio();
+                       p->cmap_regs[TVPCXPOL] = x & 0xff;      eieio();
+                       p->cmap_regs[TVPCYPOH] = y >> 8;        eieio();
+                       p->cmap_regs[TVPCYPOL] = y & 0xff;      eieio();
+                       p->cmap_regs[TVPADDRW] = TVPIRICC;      eieio();
+                       p->cmap_regs[TVPIDATA] = 0x02;          eieio();
+               }
        }
 }
 
 static void
-imsttfb_cursor (struct display *disp, int mode, int x, int y)
+imsttfbcon_cursor (struct display *disp, int mode, int x, int y)
 {
        struct fb_info_imstt *p = (struct fb_info_imstt *)disp->fb_info;
        struct imstt_cursor *c = &p->cursor;
@@ -827,11 +868,12 @@ imsttfb_cursor (struct display *disp, int mode, int x, int y)
 }
 
 static int
-imsttfb_set_font (struct display *disp, int width, int height)
+imsttfbcon_set_font (struct display *disp, int width, int height)
 {
        struct fb_info_imstt *p = (struct fb_info_imstt *)disp->fb_info;
        struct imstt_cursor *c = &p->cursor;
        u_int x, y;
+       __u8 fgc;
 
        if (width > 32 || height > 32)
                return -EINVAL;
@@ -839,17 +881,68 @@ imsttfb_set_font (struct display *disp, int width, int height)
        c->height = height;
        c->width = width;
 
-       p->cmap_regs[PIDXHI] = 1;       eieio();
-       for (x = 0; x < 0x100; x++) {
-               p->cmap_regs[PIDXLO] = x;       eieio();
-               p->cmap_regs[PIDXDATA] = 0x00;  eieio();
-       }
-       p->cmap_regs[PIDXHI] = 1;       eieio();
-       for (y = 0; y < height; y++)
-               for (x = 0; x < width >> 2; x++) {
-                       p->cmap_regs[PIDXLO] = x + y * 8;       eieio();
-                       p->cmap_regs[PIDXDATA] = 0xff;          eieio();
+       fgc = ~attr_bgcol_ec(disp, disp->conp);
+
+       if (p->ramdac == IBM) {
+               p->cmap_regs[PIDXHI] = 1;       eieio();
+               for (x = 0; x < 0x100; x++) {
+                       p->cmap_regs[PIDXLO] = x;       eieio();
+                       p->cmap_regs[PIDXDATA] = 0x00;  eieio();
                }
+               p->cmap_regs[PIDXHI] = 1;       eieio();
+               for (y = 0; y < height; y++)
+                       for (x = 0; x < width >> 2; x++) {
+                               p->cmap_regs[PIDXLO] = x + y * 8;       eieio();
+                               p->cmap_regs[PIDXDATA] = 0xff;          eieio();
+                       }
+               p->cmap_regs[PIDXHI] = 0;       eieio();
+               p->cmap_regs[PIDXLO] = CURS1R;  eieio();
+               p->cmap_regs[PIDXDATA] = fgc;   eieio();
+               p->cmap_regs[PIDXLO] = CURS1G;  eieio();
+               p->cmap_regs[PIDXDATA] = fgc;   eieio();
+               p->cmap_regs[PIDXLO] = CURS1B;  eieio();
+               p->cmap_regs[PIDXDATA] = fgc;   eieio();
+               p->cmap_regs[PIDXLO] = CURS2R;  eieio();
+               p->cmap_regs[PIDXDATA] = fgc;   eieio();
+               p->cmap_regs[PIDXLO] = CURS2G;  eieio();
+               p->cmap_regs[PIDXDATA] = fgc;   eieio();
+               p->cmap_regs[PIDXLO] = CURS2B;  eieio();
+               p->cmap_regs[PIDXDATA] = fgc;   eieio();
+               p->cmap_regs[PIDXLO] = CURS3R;  eieio();
+               p->cmap_regs[PIDXDATA] = fgc;   eieio();
+               p->cmap_regs[PIDXLO] = CURS3G;  eieio();
+               p->cmap_regs[PIDXDATA] = fgc;   eieio();
+               p->cmap_regs[PIDXLO] = CURS3B;  eieio();
+               p->cmap_regs[PIDXDATA] = fgc;   eieio();
+       } else {
+               p->cmap_regs[TVPADDRW] = TVPIRICC;      eieio();
+               p->cmap_regs[TVPIDATA] &= 0x03;         eieio();
+               p->cmap_regs[TVPADDRW] = 0;             eieio();
+               for (x = 0; x < 0x200; x++) {
+                       p->cmap_regs[TVPCRDAT] = 0x00;  eieio();
+               }
+               for (x = 0; x < 0x200; x++) {
+                       p->cmap_regs[TVPCRDAT] = 0xff;  eieio();
+               }
+               p->cmap_regs[TVPADDRW] = TVPIRICC;      eieio();
+               p->cmap_regs[TVPIDATA] &= 0x03;         eieio();
+               for (y = 0; y < height; y++)
+                       for (x = 0; x < width >> 3; x++) {
+                               p->cmap_regs[TVPADDRW] = x + y * 8;     eieio();
+                               p->cmap_regs[TVPCRDAT] = 0xff;          eieio();
+                       }
+               p->cmap_regs[TVPADDRW] = TVPIRICC;      eieio();
+               p->cmap_regs[TVPIDATA] |= 0x08;         eieio();
+               for (y = 0; y < height; y++)
+                       for (x = 0; x < width >> 3; x++) {
+                               p->cmap_regs[TVPADDRW] = x + y * 8;     eieio();
+                               p->cmap_regs[TVPCRDAT] = 0xff;          eieio();
+                       }
+               p->cmap_regs[TVPCADRW] = 0x00;  eieio();
+               for (x = 0; x < 12; x++) {
+                       p->cmap_regs[TVPCDATA] = fgc;   eieio();
+               }
+       }
 
        return 1;
 }
@@ -879,7 +972,7 @@ imstt_cursor_init (struct fb_info_imstt *p))
 {
        struct imstt_cursor *c = &p->cursor;
 
-       imsttfb_set_font(&p->disp, fontwidth(&p->disp), fontheight(&p->disp));
+       imsttfbcon_set_font(&p->disp, fontwidth(&p->disp), fontheight(&p->disp));
 
        c->enable = 1;
        c->on = 1;
@@ -898,75 +991,152 @@ imstt_cursor_init (struct fb_info_imstt *p))
 }
 
 static void
-imsttfb_rectcopy (struct display *disp, int sy, int sx, int dy, int dx, int height, int width)
+imsttfbcon_bmove (struct display *disp, int sy, int sx, int dy, int dx, int height, int width)
 {
        struct fb_info_imstt *p = (struct fb_info_imstt *)disp->fb_info;
-       __u32   Bpp = disp->var.bits_per_pixel >> 3,
-               line_pitch = disp->line_length,
-               fb_offset_old, fb_offset_new;
+       __u32   Bpp, line_pitch,
+               fb_offset_old, fb_offset_new,
+               sp, dp_octl, cnt, bltctl;
+
+       Bpp = disp->var.bits_per_pixel >> 3,
 
-       fb_offset_old = sy * line_pitch + sx * Bpp;
-       fb_offset_new = dy * line_pitch + dx * Bpp;
+       sy *= fontheight(disp);
+       sx *= fontwidth(disp);
+       sx *= Bpp;
+       dy *= fontheight(disp);
+       dx *= fontwidth(disp);
+       dx *= Bpp;
+       height *= fontheight(disp);
+       height--;
+       width *= fontwidth(disp);
+       width *= Bpp;
+       width--;
+
+       line_pitch = disp->line_length;
+       bltctl = 0x05;
+       sp = line_pitch << 16;
+       cnt = height << 16;
+
+       if (sy < dy) {
+               sy += height;
+               dy += height;
+               sp |= -(line_pitch) & 0xffff;
+               dp_octl = -(line_pitch) & 0xffff;
+       } else {
+               sp |= line_pitch;
+               dp_octl = line_pitch;
+       }
+       if (sx < dx) {
+               sx += width;
+               dx += width;
+               bltctl |= 0x80;
+               cnt |= -(width) & 0xffff;
+       } else {
+               cnt |= width;
+       }
+       fb_offset_old = sy * line_pitch + sx;
+       fb_offset_new = dy * line_pitch + dx;
 
-       while (in_le32(&p->dc_regs[SSTATUS]) & 0x80);
-       out_le32(&p->dc_regs[CNT], ((height - 1) << 16) | (width * Bpp - 1));
+       while(in_le32(&p->dc_regs[SSTATUS]) & 0x80);
        out_le32(&p->dc_regs[S1SA], fb_offset_old);
-       /* out_le32(&p->dc_regs[S2SA], fb_offset_new); */
+       out_le32(&p->dc_regs[SP], sp);
        out_le32(&p->dc_regs[DSA], fb_offset_new);
-       out_le32(&p->dc_regs[BLTCTL], 0xc0000005);
-       while (in_le32(&p->dc_regs[SSTATUS]) & 0x80);
-       while (in_le32(&p->dc_regs[SSTATUS]) & 0x40);
+       out_le32(&p->dc_regs[CNT], cnt);
+       out_le32(&p->dc_regs[DP_OCTL], dp_octl);
+       out_le32(&p->dc_regs[BLTCTL], bltctl);
+       while(in_le32(&p->dc_regs[SSTATUS]) & 0x80);
+       while(in_le32(&p->dc_regs[SSTATUS]) & 0x40);
 }
 
 static void
-imsttfbcon_bmove (struct display *disp, int sy, int sx, int dy, int dx, int height, int width)
+imsttfbcon_clear (struct vc_data *conp, struct display *disp,
+                 int sy, int sx, int height, int width)
 {
-       /* XXX .. */
-       if (sy < dy || (sy == dy && sx < dx)) {
-               switch (disp->var.bits_per_pixel) {
-               case 8: fbcon_cfb8_bmove(disp, sy, sx, dy, dx, height, width); break;
-               case 16: fbcon_cfb16_bmove(disp, sy, sx, dy, dx, height, width); break;
-               case 24: fbcon_cfb24_bmove(disp, sy, sx, dy, dx, height, width); break;
-               case 32: fbcon_cfb32_bmove(disp, sy, sx, dy, dx, height, width); break;
-               }
-               return;
-       }
+       struct fb_info_imstt *p = (struct fb_info_imstt *)disp->fb_info;
+       __u32 Bpp, line_pitch, bgc;
+
+       bgc = attr_bgcol_ec(disp, conp);
+       bgc |= (bgc << 8);
+       bgc |= (bgc << 16);
+
+       Bpp = disp->var.bits_per_pixel >> 3,
+       line_pitch = disp->line_length;
 
        sy *= fontheight(disp);
+       sy *= line_pitch;
        sx *= fontwidth(disp);
-       dy *= fontheight(disp);
-       dx *= fontwidth(disp);
+       sx *= Bpp;
        height *= fontheight(disp);
+       height--;
        width *= fontwidth(disp);
+       width *= Bpp;
+       width--;
+
+       while(in_le32(&p->dc_regs[SSTATUS]) & 0x80);
+       out_le32(&p->dc_regs[DSA], sy + sx);
+       out_le32(&p->dc_regs[CNT], (height << 16) | width);
+       out_le32(&p->dc_regs[DP_OCTL], line_pitch);
+       out_le32(&p->dc_regs[BI], 0xffffffff);
+       out_le32(&p->dc_regs[MBC], 0xffffffff);
+       out_le32(&p->dc_regs[CLR], bgc);
+       out_le32(&p->dc_regs[BLTCTL], 0x200000);
+       while(in_le32(&p->dc_regs[SSTATUS]) & 0x80);
+       while(in_le32(&p->dc_regs[SSTATUS]) & 0x40);
+}
 
-       imsttfb_rectcopy(disp, sy, sx, dy, dx, height, width);
+static void
+imsttfbcon_revc (struct display *disp, int sx, int sy)
+{
+       struct fb_info_imstt *p = (struct fb_info_imstt *)disp->fb_info;
+       __u32 Bpp, line_pitch, height, width;
+
+       Bpp = disp->var.bits_per_pixel >> 3,
+       line_pitch = disp->line_length;
+
+       height = fontheight(disp);
+       width = fontwidth(disp) * Bpp;
+       sy *= height;
+       sy *= line_pitch;
+       sx *= width;
+       height--;
+       width--;
+
+       while(in_le32(&p->dc_regs[SSTATUS]) & 0x80);
+       out_le32(&p->dc_regs[DSA], sy + sx);
+       out_le32(&p->dc_regs[S1SA], sy + sx);
+       out_le32(&p->dc_regs[CNT], (height << 16) | width);
+       out_le32(&p->dc_regs[DP_OCTL], line_pitch);
+       out_le32(&p->dc_regs[SP], line_pitch);
+       out_le32(&p->dc_regs[BLTCTL], 0x40005);
+       while(in_le32(&p->dc_regs[SSTATUS]) & 0x80);
+       while(in_le32(&p->dc_regs[SSTATUS]) & 0x40);
 }
 
 #ifdef FBCON_HAS_CFB8
 static struct display_switch fbcon_imstt8 = {
-       fbcon_cfb8_setup, imsttfbcon_bmove, fbcon_cfb8_clear, fbcon_cfb8_putc,
-       fbcon_cfb8_putcs, fbcon_cfb8_revc, NULL, NULL, fbcon_cfb8_clear_margins,
+       fbcon_cfb8_setup, imsttfbcon_bmove, imsttfbcon_clear, fbcon_cfb8_putc,
+       fbcon_cfb8_putcs, imsttfbcon_revc, imsttfbcon_cursor, imsttfbcon_set_font, fbcon_cfb8_clear_margins,
        FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
 };
 #endif
 #ifdef FBCON_HAS_CFB16
 static struct display_switch fbcon_imstt16 = {
-       fbcon_cfb16_setup, imsttfbcon_bmove, fbcon_cfb16_clear, fbcon_cfb16_putc,
-       fbcon_cfb16_putcs, fbcon_cfb16_revc, NULL, NULL, fbcon_cfb16_clear_margins,
+       fbcon_cfb16_setup, imsttfbcon_bmove, imsttfbcon_clear, fbcon_cfb16_putc,
+       fbcon_cfb16_putcs, imsttfbcon_revc, imsttfbcon_cursor, imsttfbcon_set_font, fbcon_cfb16_clear_margins,
        FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
 };
 #endif
 #ifdef FBCON_HAS_CFB24
 static struct display_switch fbcon_imstt24 = {
-       fbcon_cfb24_setup, imsttfbcon_bmove, fbcon_cfb24_clear, fbcon_cfb24_putc,
-       fbcon_cfb24_putcs, fbcon_cfb24_revc, NULL, NULL, fbcon_cfb24_clear_margins,
+       fbcon_cfb24_setup, imsttfbcon_bmove, imsttfbcon_clear, fbcon_cfb24_putc,
+       fbcon_cfb24_putcs, imsttfbcon_revc, imsttfbcon_cursor, imsttfbcon_set_font, fbcon_cfb24_clear_margins,
        FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
 };
 #endif
 #ifdef FBCON_HAS_CFB32
 static struct display_switch fbcon_imstt32 = {
-       fbcon_cfb32_setup, imsttfbcon_bmove, fbcon_cfb32_clear, fbcon_cfb32_putc,
-       fbcon_cfb32_putcs, fbcon_cfb32_revc, NULL, NULL, fbcon_cfb32_clear_margins,
+       fbcon_cfb32_setup, imsttfbcon_bmove, imsttfbcon_clear, fbcon_cfb32_putc,
+       fbcon_cfb32_putcs, imsttfbcon_revc, imsttfbcon_cursor, imsttfbcon_set_font, fbcon_cfb32_clear_margins,
        FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
 };
 #endif
@@ -1049,11 +1219,12 @@ imsttfb_setcolreg (u_int regno, u_int red, u_int green, u_int blue,
        p->palette[regno].blue = blue;
 
        /* PADDRW/PDATA are the same as TVPPADDRW/TVPPDATA */
-       if (bpp == 16 && p->ramdac == TVP && fb_display[currcon].var.green.length == 5) {
-               p->cmap_regs[PADDRW] = regno << 3;      eieio();
-       } else {
-               p->cmap_regs[PADDRW] = regno;           eieio();
-       }
+       if (0 && bpp == 16)     /* screws up X */
+               p->cmap_regs[PADDRW] = regno << 3;
+       else
+               p->cmap_regs[PADDRW] = regno;
+       eieio();
+
        p->cmap_regs[PDATA] = red;      eieio();
        p->cmap_regs[PDATA] = green;    eieio();
        p->cmap_regs[PDATA] = blue;     eieio();
@@ -1129,10 +1300,13 @@ imsttfb_get_var (struct fb_var_screeninfo *var, int con, struct fb_info *info)
 }
 
 static void
-set_disp (struct display *disp, struct fb_info_imstt *p)
+set_dispsw (struct display *disp, struct fb_info_imstt *p)
 {
        u_int accel = disp->var.accel_flags & FB_ACCELF_TEXT;
 
+       if (disp->conp && disp->conp->vc_sw && disp->conp->vc_sw->con_cursor)
+               disp->conp->vc_sw->con_cursor(disp->conp, CM_ERASE);
+
        p->dispsw = fbcon_dummy;
        disp->dispsw = &p->dispsw;
        disp->dispsw_data = 0;
@@ -1150,7 +1324,7 @@ set_disp (struct display *disp, struct fb_info_imstt *p)
                        p->dispsw = accel ? fbcon_imstt8 : fbcon_cfb8;
 #endif
                        break;
-               case 16:        /* RGB 555 */
+               case 16:        /* RGB 555 or 565 */
                        if (disp->var.green.length != 6)
                                disp->var.red.offset = 10;
                        disp->var.red.length = 5;
@@ -1196,11 +1370,25 @@ set_disp (struct display *disp, struct fb_info_imstt *p)
                        break;
        }
 
-       if (p->ramdac == IBM) {
-               p->dispsw.cursor = imsttfb_cursor;
-               p->dispsw.set_font = imsttfb_set_font;
+       if (accel && p->ramdac != IBM) {
+               p->dispsw.cursor = 0;
+               p->dispsw.set_font = 0;
        }
 
+#ifdef CONFIG_FB_COMPAT_XPMAC
+       set_display_info(disp);
+#endif
+}
+
+static void
+set_disp (struct display *disp, struct fb_info_imstt *p)
+{
+       u_int accel = disp->var.accel_flags & FB_ACCELF_TEXT;
+
+       disp->fb_info = &p->info;
+
+       set_dispsw(disp, p);
+
        disp->visual = disp->var.bits_per_pixel == 8 ? FB_VISUAL_PSEUDOCOLOR
                                                     : FB_VISUAL_DIRECTCOLOR;
        disp->screen_base = (__u8 *)p->frame_buffer;
@@ -1222,8 +1410,6 @@ set_disp (struct display *disp, struct fb_info_imstt *p)
                }
        } else {
                disp->scrollmode = SCROLL_YREDRAW;
-               disp->var.yoffset = disp->var.xoffset = 0;
-               out_le32(&p->dc_regs[SSR], 0);
        }
 
        disp->var.activate = 0;
@@ -1237,10 +1423,6 @@ set_disp (struct display *disp, struct fb_info_imstt *p)
        disp->var.left_margin = disp->var.right_margin = 16;
        disp->var.upper_margin = disp->var.lower_margin = 16;
        disp->var.hsync_len = disp->var.vsync_len = 8;
-
-#ifdef CONFIG_FB_COMPAT_XPMAC
-       set_display_info(disp);
-#endif
 }
 
 static int
@@ -1248,7 +1430,7 @@ imsttfb_set_var (struct fb_var_screeninfo *var, int con, struct fb_info *info)
 {
        struct fb_info_imstt *p = (struct fb_info_imstt *)info;
        struct display *disp;
-       u_int oldbpp, oldxres, oldyres, oldgreenlen;
+       u_int oldbpp, oldxres, oldyres, oldgreenlen, oldaccel;
 
        disp = &fb_display[con];
 
@@ -1273,6 +1455,7 @@ imsttfb_set_var (struct fb_var_screeninfo *var, int con, struct fb_info *info)
        oldxres = disp->var.xres;
        oldyres = disp->var.yres;
        oldgreenlen = disp->var.green.length;
+       oldaccel = disp->var.accel_flags;
 
        disp->var.bits_per_pixel = var->bits_per_pixel;
        disp->var.xres = var->xres;
@@ -1306,6 +1489,7 @@ imsttfb_set_var (struct fb_var_screeninfo *var, int con, struct fb_info *info)
                        return err;
                do_install_cmap(con, info);
        }
+       *var = disp->var;
 
        return 0;
 }
@@ -1315,7 +1499,6 @@ imsttfb_pan_display (struct fb_var_screeninfo *var, int con, struct fb_info *inf
 {
        struct fb_info_imstt *p = (struct fb_info_imstt *)info;
        struct display *disp = &fb_display[con];
-       __u32 off;
 
        if (var->xoffset + disp->var.xres > disp->var.xres_virtual
            || var->yoffset + disp->var.yres > disp->var.yres_virtual)
@@ -1323,11 +1506,8 @@ imsttfb_pan_display (struct fb_var_screeninfo *var, int con, struct fb_info *inf
 
        disp->var.xoffset = var->xoffset;
        disp->var.yoffset = var->yoffset;
-       if (con == currcon) {
-               off = var->yoffset * (disp->line_length >> 3)
-                     + ((var->xoffset * (disp->var.bits_per_pixel >> 3)) >> 3);
-               out_le32(&p->dc_regs[SSR], off);
-       }
+       if (con == currcon)
+               set_offset(disp, p);
 
        return 0;
 }
@@ -1377,48 +1557,48 @@ imsttfb_ioctl (struct inode *inode, struct file *file, u_int cmd,
               u_long arg, int con, struct fb_info *info)
 {
        struct fb_info_imstt *p = (struct fb_info_imstt *)info;
-       __u8 init[2];
+       __u8 idx[2];
        __u32 reg[2];
 
        switch (cmd) {
                case FBIMSTT_SETREG:
-                       if (copy_from_user(reg, (void *)arg, 8) || reg[0] > (0x40000 - sizeof(reg[0])) / sizeof(reg[0]))
+                       if (copy_from_user(reg, (void *)arg, 8) || reg[0] > (0x1000 - sizeof(reg[0])) / sizeof(reg[0]))
                                return -EFAULT;
                        out_le32(&p->dc_regs[reg[0]], reg[1]);
                        return 0;
                case FBIMSTT_GETREG:
-                       if (copy_from_user(reg, (void *)arg, 4) || reg[0] > (0x40000 - sizeof(reg[0])) / sizeof(reg[0]))
+                       if (copy_from_user(reg, (void *)arg, 4) || reg[0] > (0x1000 - sizeof(reg[0])) / sizeof(reg[0]))
                                return -EFAULT;
                        reg[1] = in_le32(&p->dc_regs[reg[0]]);
                        if (copy_to_user((void *)(arg + 4), &reg[1], 4))
                                return -EFAULT;
                        return 0;
                case FBIMSTT_SETCMAPREG:
-                       if (copy_from_user(reg, (void *)arg, 8) || reg[0] > (0x17c0000 - sizeof(reg[0])) / sizeof(reg[0]))
+                       if (copy_from_user(reg, (void *)arg, 8) || reg[0] > (0x1000 - sizeof(reg[0])) / sizeof(reg[0]))
                                return -EFAULT;
                        out_le32(&((u_int *)p->cmap_regs)[reg[0]], reg[1]);
                        return 0;
                case FBIMSTT_GETCMAPREG:
-                       if (copy_from_user(reg, (void *)arg, 4) || reg[0] > (0x17c0000 - sizeof(reg[0])) / sizeof(reg[0]))
+                       if (copy_from_user(reg, (void *)arg, 4) || reg[0] > (0x1000 - sizeof(reg[0])) / sizeof(reg[0]))
                                return -EFAULT;
                        reg[1] = in_le32(&((u_int *)p->cmap_regs)[reg[0]]);
                        if (copy_to_user((void *)(arg + 4), &reg[1], 4))
                                return -EFAULT;
                        return 0;
                case FBIMSTT_SETIDXREG:
-                       if (copy_from_user(init, (void *)arg, 2))
+                       if (copy_from_user(idx, (void *)arg, 2))
                                return -EFAULT;
                        p->cmap_regs[PIDXHI] = 0;               eieio();
-                       p->cmap_regs[PIDXLO] = init[0];         eieio();
-                       p->cmap_regs[PIDXDATA] = init[1];       eieio();
+                       p->cmap_regs[PIDXLO] = idx[0];          eieio();
+                       p->cmap_regs[PIDXDATA] = idx[1];        eieio();
                        return 0;
                case FBIMSTT_GETIDXREG:
-                       if (copy_from_user(init, (void *)arg, 1))
+                       if (copy_from_user(idx, (void *)arg, 1))
                                return -EFAULT;
                        p->cmap_regs[PIDXHI] = 0;               eieio();
-                       p->cmap_regs[PIDXLO] = init[0];         eieio();
-                       init[1] = p->cmap_regs[PIDXDATA];
-                       if (copy_to_user((void *)(arg + 1), &init[1], 1))
+                       p->cmap_regs[PIDXLO] = idx[0];          eieio();
+                       idx[1] = p->cmap_regs[PIDXDATA];
+                       if (copy_to_user((void *)(arg + 1), &idx[1], 1))
                                return -EFAULT;
                        return 0;
                default:
@@ -1443,21 +1623,21 @@ imsttfbcon_switch (int con, struct fb_info *info)
 {
        struct fb_info_imstt *p = (struct fb_info_imstt *)info;
        struct display *old = &fb_display[currcon], *new = &fb_display[con];
-       __u32 off;
 
        if (old->cmap.len)
                fb_get_cmap(&old->cmap, 1, imsttfb_getcolreg, info);
-       
-       if (p->ramdac == IBM)
-               imsttfb_cursor(old, CM_ERASE, p->cursor.x, p->cursor.y);
+
+       if (old->conp && old->conp->vc_sw && old->conp->vc_sw->con_cursor)
+               old->conp->vc_sw->con_cursor(old->conp, CM_ERASE);
 
        currcon = con;
 
        if (old->var.xres != new->var.xres
            || old->var.yres != new->var.yres
            || old->var.bits_per_pixel != new->var.bits_per_pixel
-           || old->var.green.length != new->var.green.length) {
-               set_disp(new, p);
+           || old->var.green.length != new->var.green.length
+           || old->var.accel_flags != new->var.accel_flags) {
+               set_dispsw(new, p);
                if (!compute_imstt_regvals(p, new->var.xres, new->var.yres))
                        return -1;
                if (new->var.bits_per_pixel == 16) {
@@ -1468,53 +1648,28 @@ imsttfbcon_switch (int con, struct fb_info *info)
                }
                set_imstt_regvals(p, new->var.bits_per_pixel);
        }
-       if (old->var.yoffset != new->var.yoffset || old->var.xoffset != new->var.xoffset) {
-               off = new->var.yoffset * (new->line_length >> 3)
-                     + ((new->var.xoffset * (new->var.bits_per_pixel >> 3)) >> 3);
-               out_le32(&p->dc_regs[SSR], off);
-       }
+       set_offset(new, p);
+
+       imsttfbcon_set_font(new, fontwidth(new), fontheight(new));
 
        do_install_cmap(con, info);
 
        return 0;
 }
 
-static inline void
-imsttfb_rectfill (struct display *disp, u_int sy, u_int sx, u_int height, u_int width, __u32 bgx)
-{
-       memset(disp->screen_base + sy + sx, bgx, height * width * (disp->var.bits_per_pixel >> 3));
-}
-
 static int
 imsttfbcon_updatevar (int con, struct fb_info *info)
 {
        struct fb_info_imstt *p = (struct fb_info_imstt *)info;
        struct display *disp = &fb_display[con];
-       struct vc_data *conp = disp->conp;
-       __u32 off, yres, yoffset, sy, height;
 
        if (con != currcon)
                goto out;
 
-       yres = disp->var.yres;
-       yoffset = disp->var.yoffset;
-       sy = (conp->vc_rows + disp->yscroll) * fontheight(disp);
-       height = yres - conp->vc_rows * fontheight(disp);
-
-       if (height && (yoffset + yres > sy)) {
-               __u32 bgx = attr_bgcol_ec(disp, conp);
-
-               if (sy + height > disp->var.yres_virtual)
-                       printk("updatevar: %u + %u > %u\n", sy, height, disp->var.yres_virtual);
-               imsttfb_rectfill(disp, sy, disp->var.xoffset, height, disp->var.xres, bgx);
-       }
+       if (p->ramdac == IBM)
+               imsttfbcon_cursor(disp, CM_ERASE, p->cursor.x, p->cursor.y);
 
-       if (p->ramdac == IBM && (yoffset + yres <= sy))
-               imsttfb_cursor(disp, CM_ERASE, p->cursor.x, p->cursor.y);
-
-       off = disp->var.yoffset * (disp->line_length >> 3)
-             + ((disp->var.xoffset * (disp->var.bits_per_pixel >> 3)) >> 3); 
-       out_le32(&p->dc_regs[SSR], off);
+       set_offset(disp, p);
 
 out:
        return 0;
@@ -1581,9 +1736,9 @@ init_imstt(struct fb_info_imstt *p))
 
        tmp = in_le32(&p->dc_regs[PRC]);
        if (p->ramdac == IBM)
-               p->total_vram = (tmp & 0x0004) ? 0x00400000 : 0x00200000;
+               p->total_vram = (tmp & 0x0004) ? 0x400000 : 0x200000;
        else
-               p->total_vram = 0x00800000;
+               p->total_vram = 0x800000;
 
        ip = (__u32 *)p->frame_buffer;
        end = (__u32 *)(p->frame_buffer + p->total_vram);
@@ -1660,7 +1815,7 @@ init_imstt(struct fb_info_imstt *p))
        p->disp.var.accel_flags = noaccel ? 0 : FB_ACCELF_TEXT;
        set_disp(&p->disp, p);
 
-       if (p->ramdac == IBM)
+       if (!noaccel && p->ramdac == IBM)
                imstt_cursor_init(p);
        if (p->disp.var.green.length == 6)
                set_565(p);
@@ -1693,64 +1848,65 @@ init_imstt(struct fb_info_imstt *p))
                return;
        }
 
+       i = GET_FB_IDX(p->info.node);
        tmp = (in_le32(&p->dc_regs[SSTATUS]) & 0x0f00) >> 8;
-       printk("fb%d: %s frame buffer; %uMB vram; chip version %u\n",
-               GET_FB_IDX(p->info.node), p->fix.id, p->total_vram >> 20, tmp);
+       printk("fb%u: %s frame buffer; %uMB vram; chip version %u\n",
+               i, p->fix.id, p->total_vram >> 20, tmp);
 
+#ifdef MODULE
+       fb_info_imstt_p[i] = p;
+#endif
 #ifdef CONFIG_FB_COMPAT_XPMAC
        strncpy(display_info.name, "IMS,tt128mb", sizeof(display_info.name));
        display_info.fb_address = (__u32)p->frame_buffer_phys;
        display_info.cmap_adr_address = (__u32)&p->cmap_regs_phys[PADDRW];
        display_info.cmap_data_address = (__u32)&p->cmap_regs_phys[PDATA];
        display_info.disp_reg_address = (__u32)p->dc_regs_phys;
-       set_display_info(&p->disp);
        if (!console_fb_info)
                console_fb_info = &p->info;
 #endif /* CONFIG_FB_COMPAT_XPMAC */
 }
 
-#if defined(CONFIG_FB_OF)
+#if defined(CONFIG_FB_OF) && !defined(MODULE)
 __initfunc(void
 imsttfb_of_init(struct device_node *dp))
 {
        struct fb_info_imstt *p;
        int i;
-       __u32 addr, size = 0;
+       __u32 addr = 0;
        __u8 bus, devfn;
        __u16 cmd;
 
        for (i = 0; i < dp->n_addrs; i++) {
-               if (dp->addrs[i].size >= 0x02000000) {
+               if (dp->addrs[i].size >= 0x02000000)
                        addr = dp->addrs[i].address;
-                       size = dp->addrs[i].size;
-               }
        }
-       if (!size)
+       if (!addr)
                return;
 
+       if (!pci_device_loc(dp, &bus, &devfn)) {
+               if (!pcibios_read_config_word(bus, devfn, PCI_COMMAND, &cmd) && !(cmd & PCI_COMMAND_MEMORY)) {
+                       cmd |= PCI_COMMAND_MEMORY;
+                       pcibios_write_config_word(bus, devfn, PCI_COMMAND, cmd);
+               }
+       }
+
        p = kmalloc(sizeof(struct fb_info_imstt), GFP_ATOMIC);
        if (!p)
                return;
-
        memset(p, 0, sizeof(struct fb_info_imstt));
-       p->frame_buffer_phys = (__u8 *)addr;
-       p->frame_buffer = (__u8 *)ioremap(addr, size);
-       p->dc_regs_phys = (__u32 *)(p->frame_buffer_phys + 0x00800000);
-       p->dc_regs = (__u32 *)(p->frame_buffer + 0x00800000);
-       p->cmap_regs_phys = (__u8 *)(p->frame_buffer_phys + 0x00840000);
-       p->cmap_regs = (__u8 *)(p->frame_buffer + 0x00840000);
 
-       if (dp->name[11] == '8')
+       if (dp->name[11] == '8' || (dp->name[6] == '3' && dp->name[7] == 'd'))
                p->ramdac = TVP;
        else
                p->ramdac = IBM;
 
-       if (!pci_device_loc(dp, &bus, &devfn)) {
-               if (!pcibios_read_config_word(bus, devfn, PCI_COMMAND, &cmd)) {
-                       cmd |= PCI_COMMAND_MEMORY;
-                       pcibios_write_config_word(bus, devfn, PCI_COMMAND, cmd);
-               }
-       }
+       p->frame_buffer_phys = (__u8 *)addr;
+       p->frame_buffer = (__u8 *)ioremap(addr, p->ramdac == IBM ? 0x400000 : 0x800000);
+       p->dc_regs_phys = (__u32 *)(addr + 0x800000);
+       p->dc_regs = (__u32 *)ioremap(addr + 0x800000, 0x1000);
+       p->cmap_regs_phys = (__u8 *)(addr + 0x840000);
+       p->cmap_regs = (__u8 *)ioremap(addr + 0x840000, 0x1000);
 
        init_imstt(p);
 }
@@ -1759,11 +1915,60 @@ imsttfb_of_init(struct device_node *dp))
 __initfunc(void
 imsttfb_init(void))
 {
-#if !defined(CONFIG_FB_OF)
-       /* ... */
-#endif
+#if defined(CONFIG_FB_OF) && !defined(MODULE)
+       /* We don't want to be called like this. */
+       /* We rely on Open Firmware (offb) instead. */
+#elif defined(CONFIG_PCI)
+       struct pci_dev *pdev;
+       struct fb_info_imstt *p;
+       __u32 addr;
+       __u16 cmd;
+
+       for (pdev = pci_devices; pdev; pdev = pdev->next) {
+               if (!(((pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY)
+                     && (pdev->vendor == PCI_VENDOR_ID_IMS)))
+                       continue;
+
+               pci_read_config_word(pdev, PCI_COMMAND, &cmd);
+               if (!(cmd & PCI_COMMAND_MEMORY)) {
+                       cmd |= PCI_COMMAND_MEMORY;
+                       pci_write_config_word(pdev, PCI_COMMAND, cmd);
+               }
+
+               addr = pdev->base_address[0] & PCI_BASE_ADDRESS_MEM_MASK;
+               if (!addr)
+                       continue;
+
+               p = kmalloc(sizeof(struct fb_info_imstt), GFP_ATOMIC);
+               if (!p)
+                       return;
+               memset(p, 0, sizeof(struct fb_info_imstt));
+
+               printk("imsttfb: device=%04x\n", pdev->device);
+
+               switch (pdev->device) {
+                       case 0x9128:    /* IMS,tt128mbA */
+                               p->ramdac = IBM;
+                               break;
+                       case 0x9135:    /* IMS,tt3d */
+                       default:
+                               p->ramdac = TVP;
+                               break;
+               }
+
+               p->frame_buffer_phys = (__u8 *)addr;
+               p->frame_buffer = (__u8 *)ioremap(addr, p->ramdac == IBM ? 0x400000 : 0x800000);
+               p->dc_regs_phys = (__u32 *)(addr + 0x800000);
+               p->dc_regs = (__u32 *)ioremap(addr + 0x800000, 0x1000);
+               p->cmap_regs_phys = (__u8 *)(addr + 0x840000);
+               p->cmap_regs = (__u8 *)ioremap(addr + 0x840000, 0x1000);
+
+               init_imstt(p);
+       }
+#endif /* CONFIG_PCI */
 }
 
+#ifndef MODULE
 __initfunc(void
 imsttfb_setup(char *options, int *ints))
 {
@@ -1816,3 +2021,42 @@ imsttfb_setup(char *options, int *ints))
 #endif
        }
 }
+
+#else /* MODULE */
+
+int
+init_module (void)
+{
+       struct fb_info_imstt *p;
+       __u32 i;
+
+       imsttfb_init();
+
+       for (i = 0; i < FB_MAX; i++) {
+               p = fb_info_imstt_p[i];
+               if (p)
+                       return 0;
+       }
+
+       return -ENXIO;
+}
+
+void
+cleanup_module (void)
+{
+       struct fb_info_imstt *p;
+       __u32 i;
+
+       for (i = 0; i < FB_MAX; i++) {
+               p = fb_info_imstt_p[i];
+               if (!p)
+                       continue;
+               iounmap(p->cmap_regs);
+               iounmap(p->dc_regs);
+               iounmap(p->frame_buffer);
+               kfree(p);
+       }
+}
+
+#include "macmodes.c"
+#endif /* MODULE */
index 2d0ad292496bfac25ee2bc08f2478ef1fecd7d8b..0f964f60a4d0943129a89d660e9c9af635ecae1c 100644 (file)
@@ -22,6 +22,7 @@
 #include <asm/macintosh.h>
 #include <linux/fb.h>
 
+#include <video/fbcon.h>
 /* conditionalize these ?? */
 #include <video/fbcon-mfb.h>
 #include <video/fbcon-cfb2.h>
@@ -154,13 +155,15 @@ static void macfb_encode_fix(struct fb_fix_screeninfo *fix,
        strcpy(fix->id,"Macintosh");
 
        /*
-        * X works, but screen wraps ... 
+        * fbmem.c accepts non page aligned mappings now!
         */
-       fix->smem_start=(char *)(mac_videobase&PAGE_MASK);
-       fix->smem_offset=(mac_videobase&~PAGE_MASK);
-       fix->smem_len=PAGE_ALIGN(mac_videosize);
+       fix->smem_start=(char *)mac_videobase;
+       fix->smem_len=mac_videosize;
        fix->type = FB_TYPE_PACKED_PIXELS;
-       fix->visual = FB_VISUAL_PSEUDOCOLOR;
+       if (mac_depth == 1)
+               fix->visual = FB_VISUAL_MONO01;
+       else
+               fix->visual = FB_VISUAL_STATIC_PSEUDOCOLOR;
        fix->xpanstep=0;
        fix->ypanstep=0;
        fix->ywrapstep=0;
@@ -203,7 +206,7 @@ static void macfb_set_disp(int con)
 
        macfb_get_fix(&fix, con, 0);
 
-       display->screen_base = fix.smem_start+fix.smem_offset;
+       display->screen_base = fix.smem_start;
        display->visual = fix.visual;
        display->type = fix.type;
        display->type_aux = fix.type_aux;
@@ -212,7 +215,8 @@ static void macfb_set_disp(int con)
        display->line_length = fix.line_length;
        display->next_line = fix.line_length;
        display->can_soft_blank = 0;
-       display->inverse = inverse;
+       display->inverse =
+           (fix.visual == FB_VISUAL_MONO01 ? !inverse : inverse);
 
        switch (mac_depth) {
 #ifdef FBCON_HAS_MFB
@@ -251,6 +255,140 @@ static int macfb_set_var(struct fb_var_screeninfo *var, int con,
        return 0;
 }
 
+/*
+ * Color map handling - hardcoded maps!! 
+ *
+ * 2.0 color map primitives, copied from atafb.c
+ */
+/*
+ * should be kmalloc'ed on request
+ */
+static short red256[256], green256[256], blue256[256];
+
+static short red16[]=
+       { 0x0000,0x0000,0x0000,0x0000,0x8080,0x8080,0x8080,0xc0c0,
+         0x8080,0x0000,0x0000,0x0000,0xffff,0xffff,0xffff,0xffff};
+static short green16[]=
+       { 0x0000,0x0000,0x8080,0x8080,0x0000,0x0000,0x8080,0xc0c0,
+         0x8080,0x0000,0xffff,0xffff,0x0000,0x0000,0xffff,0xffff};
+static short blue16[]=
+       { 0x0000,0x8080,0x0000,0x8080,0x0000,0x8080,0x0000,0xc0c0,
+         0x8080,0xffff,0x0000,0xffff,0x0000,0xffff,0x0000,0xffff};
+
+static short red4[]=
+       { 0x0000,0x8080,0xffff,0xffff};
+static short green4[]=
+       { 0x0000,0x8080,0x0000,0xffff};
+static short blue4[]=
+       { 0x0000,0x8080,0x0000,0xffff};
+
+static short red2[]=
+       { 0x0000,0xffff};
+static short green2[]=
+       { 0x0000,0xffff};
+static short blue2[]=
+       { 0x0000,0xffff};
+
+struct fb_cmap default_256_colors = { 0, 256, red256, green256, blue256, NULL };
+struct fb_cmap default_16_colors  = { 0, 16, red16, green16, blue16, NULL };
+struct fb_cmap default_4_colors   = { 0, 4, red4, green4, blue4, NULL };
+struct fb_cmap default_2_colors   = { 0, 2, red2, green2, blue2, NULL };
+
+static int mac_set_cmap256(struct fb_cmap* cmap)
+{
+       int i,start;
+       unsigned short *red,*green,*blue;
+       unsigned short cval[] = {0xffff, 0xcccc, 0x9999, 
+                                0x6666, 0x3333, 0x0000 };
+       unsigned short gval[] = {0x0a0a, 0x1414, 0x1e1e,
+                                0x2828, 0x3232, 0x3c3c,
+                                0x4646, 0x5050, 0x5a5a,
+                                0x6464, 0x6e6e, 0x7878,
+                                0x8282, 0x8c8c, 0x9696,
+                                0xa0a0, 0xaaaa, 0xb4b4,
+                                0xbebe, 0xc8c8, 0xd2d2,
+                                0xdcdc, 0xe6e6, 0xf0f0};
+
+       red=cmap->red;
+       green=cmap->green;
+       blue=cmap->blue;
+       start=cmap->start;
+
+       if (start < 0)
+               return -EINVAL;
+       if (cmap->len < 255)
+               return -EINVAL;
+       /* 16 ANSI colors */
+       for (i=0 ; i < 16 ; i++) {
+               *red++   = red16[i];
+               *green++ = green16[i];
+               *blue++  = blue16[i];
+       }
+       /* 216 colors (6x6x6) map) */
+       for (i=16 ; i < 232 ; i++) {
+               *red++   = cval[(i-16)/36];
+               *green++ = cval[((i-16)/6)%6];
+               *blue++  = cval[(i-16)%6];
+       }
+       /* 24 grays */
+       for (i=232 ; i < 256 ; i++) {
+               *red = *green = *blue = gval[i-232];
+               red++;
+               green++;
+               blue++;
+       }
+       return 0;
+}
+
+static struct fb_cmap * mac_get_default_cmap(int bpp)
+{
+       if (bpp == 1)
+               return &default_2_colors;
+       if (bpp == 2)
+               return &default_4_colors;
+       if (bpp == 4)
+               return &default_16_colors;
+       return &default_256_colors;
+}
+
+static void memcpy_fs(int fsfromto, void *to, void *from, int len)
+{
+    switch (fsfromto) {
+       case 0:
+           memcpy(to, from, len);
+           return;
+       case 1:
+           copy_from_user(to, from, len);
+           return;
+       case 2:
+           copy_to_user(to, from, len);
+           return;
+    }
+}
+
+static void copy_cmap(struct fb_cmap *from, struct fb_cmap *to, int fsfromto)
+{
+       int size;
+       int tooff=0, fromoff=0;
+
+       if (to->start > from->start)
+               fromoff=to->start-from->start;
+       else
+               tooff=from->start-to->start;                    
+       size=to->len-tooff;
+       if (size > from->len-fromoff)
+               size=from->len-fromoff;
+       if (size < 0)
+               return;
+       size*=sizeof(unsigned short);
+       memcpy_fs(fsfromto, to->red+tooff, from->red+fromoff, size);
+       memcpy_fs(fsfromto, to->green+tooff, from->green+fromoff, size);
+       memcpy_fs(fsfromto, to->blue+tooff, from->blue+fromoff, size);
+       if (from->transp && to->transp)
+               memcpy_fs(fsfromto, to->transp+tooff, from->transp+fromoff, size);
+}
 static int macfb_get_cmap(struct fb_cmap *cmap, int kspc, int con,
                          struct fb_info *info)
 {
@@ -267,6 +405,8 @@ static int macfb_get_cmap(struct fb_cmap *cmap, int kspc, int con,
                fb_copy_cmap(fb_default_cmap(fb_display[con].var.bits_per_pixel),
                     cmap, kspc ? 0 : 2);
 #endif
+       copy_cmap(mac_get_default_cmap(fb_display[con].var.bits_per_pixel),
+            cmap, kspc ? 0 : 2);
        return 0;
 
 }
@@ -387,11 +527,9 @@ __initfunc(void macfb_init(void))
        mac_videosize=mac_xbytes*mac_yres;
        mac_videobase=mac_bi_data.videoaddr;
 
-       printk("macfb_init: xres %d yres %d bpp %d addr %x size %d \n",
+       printk("macfb_init: xres %d yres %d bpp %d addr %lx size %ld \n",
                mac_xres, mac_yres, mac_depth, mac_videobase, mac_videosize);
 
-       mac_debugging_penguin(4);
-       
        /*
         *      Fill in the available video resolution
         */
@@ -420,6 +558,12 @@ __initfunc(void macfb_init(void))
        macfb_get_var(&disp.var, -1, &fb_info);
        macfb_set_disp(-1);
 
+       /*
+        *      Fill in the 8 bit color table if required
+        */
+       if (mac_depth == 8)
+               mac_set_cmap256(&default_256_colors);
+               
        /*
         *      Register the nubus hook
         */
@@ -428,7 +572,6 @@ __initfunc(void macfb_init(void))
 
        if (register_framebuffer(&fb_info) < 0)
        {
-               mac_boom(6);
                return;
        }
 
index e9f3f44a3be23d9a901cab11c42a61352ce944e7..42f72a33a904f6606aa74be4351b58f37277f09d 100644 (file)
@@ -4,7 +4,7 @@
  *
  * (c) 1998 Petr Vandrovec <vandrove@vc.cvut.cz>
  *
- * Version: 1.5 1998/11/19 
+ * Version: 1.8 1998/12/11
  *
  * MTRR stuff: 1998 Tom Rini <tmrini@ntplx.net>
  *
  *                     Access device through readb|w|l and write b|w|l
  *                     Extensive debugging stuff
  *
+ *               "Daniel Haun" <haund@usa.net>
+ *                     Testing, hardware cursor fixes
+ *
  *               "Gerd Knorr" <kraxel@goldbach.isdn.cs.tu-berlin.de>
  *                     Betatesting
  *
  *               "Kelly French" <targon@hazmat.com>
+ *               "Fernando Herrera" <fherrera@eurielec.etsit.upm.es>
  *                     Betatesting, bug reporting
  *
  *               "Pablo Bianucci" <pbian@pccp.com.ar>
  *               "Paul Womar" <Paul@pwomar.demon.co.uk>
  *               "Owen Waller" <O.Waller@ee.qub.ac.uk>
  *                     PPC betatesting 
- *                     
+ *
+ *               "Thomas Pornin" <pornin@bolet.ens.fr>
+ *                     Alpha betatesting
+ *
+ *               "Pieter van Leuven" <pvl@iae.nl>
+ *               "Ulf Jaenicke-Roessler" <ujr@physik.phy.tu-dresden.de>
+ *                     G100 testing
+ *
  *               "H. Peter Arvin" <hpa@transmeta.com>
  *                     Ideas
  *
 #include <video/fbcon-cfb24.h>
 #include <video/fbcon-cfb32.h>
 
+#if defined(CONFIG_PPC)
 #if defined(CONFIG_FB_COMPAT_XPMAC)
 #include <asm/vc_ioctl.h>
 #endif
-#if defined(CONFIG_PPC)
 #include <asm/prom.h>
 #include <asm/pci-bridge.h>
 #include <video/macmodes.h>
 #endif
 
+#define FBCON_HAS_VGATEXT
+
 #ifdef MATROXFB_DEBUG
 
 #define DEBUG
 #ifndef PCI_SS_VENDOR_ID_MATROX
 #define PCI_SS_VENDOR_ID_MATROX                PCI_VENDOR_ID_MATROX
 #endif
+#ifndef PCI_DEVICE_ID_MATROX_G200_PCI
+#define PCI_DEVICE_ID_MATROX_G200_PCI  0x0520
+#endif
 #ifndef PCI_DEVICE_ID_MATROX_G200_AGP
 #define PCI_DEVICE_ID_MATROX_G200_AGP  0x0521
 #endif
@@ -228,6 +244,10 @@ static inline unsigned int mga_readb(vaddr_t va, unsigned int offs) {
        return readb(va.vaddr + offs);
 }
 
+static inline unsigned int mga_readw(vaddr_t va, unsigned int offs) {
+       return readw(va.vaddr + offs);
+}
+
 static inline u_int32_t mga_readl(vaddr_t va, unsigned int offs) {
        return readl(va.vaddr + offs);
 }
@@ -248,6 +268,10 @@ static inline unsigned int mga_readb(vaddr_t va, unsigned int offs) {
        return *(volatile u_int8_t*)(va.vaddr + offs);
 }
 
+static inline unsigned int mga_readw(vaddr_t va, unsigned int offs) {
+       return *(volatile u_int16_t*)(va.vaddr + offs);
+}
+
 static inline u_int32_t mga_readl(vaddr_t va, unsigned int offs) {
        return *(volatile u_int32_t*)(va.vaddr + offs);
 }
@@ -334,12 +358,13 @@ static inline void mga_iounmap(vaddr_t va) {
 
 struct matroxfb_par
 {
-       struct fb_var_screeninfo var;
-
        unsigned int    final_bppShift;
-       int             visual;         /* unfortunately, fix */
-       int             video_type;
        unsigned int    cmap_len;
+       struct {
+               unsigned int bytes;
+               unsigned int pixels;
+               unsigned int chunks;
+                     } ydstorg;
        void            (*putc)(u_int32_t, u_int32_t, struct display*, int, int, int);
        void            (*putcs)(u_int32_t, u_int32_t, struct display*, const unsigned short*, int, int, int);
 };
@@ -407,8 +432,8 @@ struct matrox_accel_data {
 };
 
 #ifdef CONFIG_FB_MATROX_MULTIHEAD
-#define ACCESS_FBINFO(x) (minfo->x)
-#define ACCESS_FBINFO2(info, x) (((struct matrox_fb_info*)info)->x)
+#define ACCESS_FBINFO2(info, x) (info->x)
+#define ACCESS_FBINFO(x) ACCESS_FBINFO2(minfo,x)
 
 #define MINFO minfo
 
@@ -451,7 +476,7 @@ static inline struct matrox_fb_info* mxinfo(struct display* p) {
 struct matrox_switch {
        int     (*preinit)(WPMINFO struct matrox_hw_state*);
        void    (*reset)(WPMINFO struct matrox_hw_state*);
-       int     (*init)(CPMINFO struct matrox_hw_state*, struct my_timming*);
+       int     (*init)(CPMINFO struct matrox_hw_state*, struct my_timming*, struct display*);
        void    (*restore)(WPMINFO struct matrox_hw_state*, struct matrox_hw_state*, struct display*);
 };
 
@@ -469,11 +494,6 @@ struct matrox_fb_info {
 
        struct matrox_accel_data accel;
 
-#ifdef MATROX_2MB_WITH_4MB_ADDON
-       unsigned int    _mga_ydstorg;
-       unsigned int    _curr_ydstorg;
-#endif
-
        struct pci_dev*         pcidev;
 
        struct {
@@ -511,6 +531,7 @@ struct matrox_fb_info {
                int             cfb4;
                const int*      vxres;
                int             cross4MB;
+               int             text;
                              } capable;
        struct {
                unsigned int    size;
@@ -529,12 +550,21 @@ struct matrox_fb_info {
                int             novga;
                int             nobios;
                int             nopciretry;
+               int             noinit;
                int             inverse;
                int             hwcursor;
                int             blink;
 
                int             accelerator;
+               int             text_type_aux;
                int             video64bits;
+               unsigned int    vgastep;
+               unsigned int    vgastepdisp;
+               unsigned int    textmode;
+               unsigned int    textstep;
+               unsigned int    textvram;       /* character cells */
+               unsigned int    ydstorg;        /* offset in bytes from video start to usable memory */
+                                               /* 0 except for 6MB Millenium */
                              } devflags;
        struct display_switch   dispsw;
        struct {
@@ -545,6 +575,7 @@ struct matrox_fb_info {
                unsigned int    d;
                unsigned int    type;
                int             state;
+               int             redraw;
                struct timer_list timer;
                              } cursor;
 #if defined(FBCON_HAS_CFB16) || defined(FBCON_HAS_CFB24) || defined(FBCON_HAS_CFB32)
@@ -561,27 +592,19 @@ struct matrox_fb_info {
        } cmap;
 #endif
        struct { unsigned red, green, blue, transp; } palette[256];
-#if defined(CONFIG_FB_COMPAT_XPMAC)
+#if defined(CONFIG_PPC) && defined(CONFIG_FB_COMPAT_XPMAC)
        char    matrox_name[32];
 #endif
 };
 
 #if defined(CONFIG_PPC)
 unsigned char nvram_read_byte(int);
-static int default_vmode = VMODE_NVRAM;
-static int default_cmode = CMODE_NVRAM;
 #endif
 #if defined(CONFIG_FB_OF)
-void matrox_of_init(struct device_node *dp);
+int matrox_of_init(struct device_node *dp);
 #endif
 
-#ifdef MATROX_2MB_WITH_4MB_ADDON
-#define mga_ydstorg(x) ACCESS_FBINFO2(x, _mga_ydstorg)
-#define curr_ydstorg(x)        ACCESS_FBINFO2(x, _curr_ydstorg)
-#else
-#define mga_ydstorg(x) (0)
-#define curr_ydstorg(x) (0)
-#endif
+#define curr_ydstorg(x)        ACCESS_FBINFO2(x, curr.ydstorg.pixels)
 
 #define PCI_OPTION_REG 0x40
 #define PCI_MGA_INDEX  0x44
@@ -690,6 +713,9 @@ void matrox_of_init(struct device_node *dp);
 #define M_DAC_VAL      (M_RAMDAC_BASE+1)
 #define M_PALETTE_MASK (M_RAMDAC_BASE+2)
 
+#define M_X_INDEX      0x00
+#define M_X_DATAREG    0x0A
+
 #ifdef CONFIG_FB_MATROX_MILLENIUM
 #define TVP3026_INDEX          0x00
 #define TVP3026_PALWRADD       0x00
@@ -1021,19 +1047,21 @@ void matrox_of_init(struct device_node *dp);
 #define isMilleniumII(x) (0)
 #endif
 
-static void matrox_cfbX_init(struct matrox_fb_info* minfo) {
+static void matrox_cfbX_init(WPMINFO struct display* p) {
        u_int32_t maccess;
        u_int32_t mpitch;
        u_int32_t mopmode;
 
        DBG("matrox_cfbX_init")
        
-#ifdef MATROX_2MB_WITH_4MB_ADDON
-       curr_ydstorg(MINFO) = mga_ydstorg(MINFO);
-#endif
-       mpitch = ACCESS_FBINFO(curr.var.xres_virtual);
-       
-       switch (ACCESS_FBINFO(curr.var.bits_per_pixel)) {
+       mpitch = p->var.xres_virtual;
+
+       if (p->type == FB_TYPE_TEXT) {
+               maccess = 0x00000000;
+               mpitch = (mpitch >> 4) | 0x8000; /* set something */
+               mopmode = M_OPMODE_8BPP;
+       } else {
+               switch (p->var.bits_per_pixel) {
                case 4:         maccess = 0x00000000;   /* accelerate as 8bpp video */
                                mpitch = (mpitch >> 1) | 0x8000; /* disable linearization */
                                mopmode = M_OPMODE_4BPP;
@@ -1041,30 +1069,22 @@ static void matrox_cfbX_init(struct matrox_fb_info* minfo) {
                case 8:         maccess = 0x00000000; 
                                mopmode = M_OPMODE_8BPP;
                                break;
-               case 16:        if (ACCESS_FBINFO(curr.var.green.length) == 5)
+               case 16:        if (p->var.green.length == 5)
                                        maccess = 0xC0000001; 
                                else
                                        maccess = 0x40000001; 
-#ifdef MATROX_2MB_WITH_4MB_ADDON
-                               curr_ydstorg(MINFO) >>= 1;
-#endif
                                mopmode = M_OPMODE_16BPP;
                                break;
                case 24:        maccess = 0x00000003;
-#ifdef MATROX_2MB_WITH_4MB_ADDON
-                               curr_ydstorg(MINFO) /= 3;
-#endif
                                mopmode = M_OPMODE_24BPP;
                                break;
                case 32:        maccess = 0x00000002; 
-#ifdef MATROX_2MB_WITH_4MB_ADDON
-                               curr_ydstorg(MINFO) >>= 2;
-#endif
                                mopmode = M_OPMODE_32BPP;
                                break;
                default:        maccess = 0x00000000; 
                                mopmode = 0x00000000;
                                break;  /* turn off acceleration!!! */
+               }
        }
        mga_fifo(8);
        mga_outl(M_PITCH, mpitch);
@@ -1685,55 +1705,34 @@ static void matrox_cfbX_clear_margins(struct vc_data* conp, struct display* p, i
        }
 }
 
-#ifdef CONFIG_FB_MATROX_MILLENIUM
-static void outTi3026(CPMINFO int reg, int val) {
-       
-       DBG_REG("outTi3026")
-       
-       mga_outb(M_RAMDAC_BASE+TVP3026_INDEX, reg);
-       mga_outb(M_RAMDAC_BASE+TVP3026_X_DATAREG, val);
+static void outDAC(CPMINFO int reg, int val) {
+       DBG_REG("outDAC");
+       mga_outb(M_RAMDAC_BASE+M_X_INDEX, reg);
+       mga_outb(M_RAMDAC_BASE+M_X_DATAREG, val);
 }
 
-static int inTi3026(CPMINFO int reg) {
-       
-       DBG_REG("inTi3026")
-       
-       mga_outb(M_RAMDAC_BASE+TVP3026_INDEX, reg);
-       return mga_inb(M_RAMDAC_BASE+TVP3026_X_DATAREG);
+static int inDAC(CPMINFO int reg) {
+       DBG_REG("inDAC");
+       mga_outb(M_RAMDAC_BASE+M_X_INDEX, reg);
+       return mga_inb(M_RAMDAC_BASE+M_X_DATAREG);
 }
 
-#define POS3026_XCURCTRL       20
+#define outTi3026 outDAC
+#define inTi3026 inDAC
+#define outDAC1064 outDAC
+#define inDAC1064 inDAC
 
-static void matroxfb_ti3026_flashcursor(unsigned long ptr) {
-#define minfo ((struct matrox_fb_info*)ptr)
-       spin_lock(&ACCESS_FBINFO(lock.DAC));
-       outTi3026(PMINFO TVP3026_XCURCTRL, inTi3026(PMINFO TVP3026_XCURCTRL) ^ TVP3026_XCURCTRL_DIS ^ TVP3026_XCURCTRL_XGA);
-       ACCESS_FBINFO(cursor.timer.expires) = jiffies + HZ/2;
-       add_timer(&ACCESS_FBINFO(cursor.timer));
-       spin_unlock(&ACCESS_FBINFO(lock.DAC));
-#undef minfo
-}
-
-static void matroxfb_ti3026_createcursor(WPMINFO struct display* p) {
-       unsigned long flags;
-       u_int32_t xline;
-       unsigned int i;
-       unsigned int w, h;
-       unsigned int cd, cu;
-
-       if (ACCESS_FBINFO(currcon_display) != p)
-               return;
-
-       DBG("matroxfb_ti3026_createcursor");
+static void matroxfb_createcursorshape(WPMINFO struct display* p, int vmode) {
+       unsigned int h;
+       unsigned int cu, cd;
 
-       w = fontwidth(p);
        h = fontheight(p);
 
-       if (ACCESS_FBINFO(curr.var.vmode) & FB_VMODE_DOUBLE)
+       if (vmode & FB_VMODE_DOUBLE)
                h *= 2;
        cd = h;
        if (cd >= 10)
-               cd -= 1;
+               cd--;
        switch (ACCESS_FBINFO(cursor.type) = (p->conp->vc_cursor_type & CUR_HWMASK)) {
                case CUR_NONE:
                                cu = cd;
@@ -1756,13 +1755,42 @@ static void matroxfb_ti3026_createcursor(WPMINFO struct display* p) {
                                cd = h;
                                break;
        }
-       ACCESS_FBINFO(cursor.w) = w;
+       ACCESS_FBINFO(cursor.w) = fontwidth(p);
        ACCESS_FBINFO(cursor.u) = cu;
        ACCESS_FBINFO(cursor.d) = cd;
+}      
+
+#ifdef CONFIG_FB_MATROX_MILLENIUM
+#define POS3026_XCURCTRL       20
+
+static void matroxfb_ti3026_flashcursor(unsigned long ptr) {
+#define minfo ((struct matrox_fb_info*)ptr)
+       spin_lock(&ACCESS_FBINFO(lock.DAC));
+       outTi3026(PMINFO TVP3026_XCURCTRL, inTi3026(PMINFO TVP3026_XCURCTRL) ^ TVP3026_XCURCTRL_DIS ^ TVP3026_XCURCTRL_XGA);
+       ACCESS_FBINFO(cursor.timer.expires) = jiffies + HZ/2;
+       add_timer(&ACCESS_FBINFO(cursor.timer));
+       spin_unlock(&ACCESS_FBINFO(lock.DAC));
+#undef minfo
+}
+
+static void matroxfb_ti3026_createcursor(WPMINFO struct display* p) {
+       unsigned long flags;
+       u_int32_t xline;
+       unsigned int i;
+       unsigned int to;
+
+       if (ACCESS_FBINFO(currcon_display) != p)
+               return;
+
+       DBG("matroxfb_ti3026_createcursor");
+
+       matroxfb_createcursorshape(PMINFO p, p->var.vmode);
+
        xline = (~0) << (32 - ACCESS_FBINFO(cursor.w));
        spin_lock_irqsave(&ACCESS_FBINFO(lock.DAC), flags);
        mga_outb(M_RAMDAC_BASE+TVP3026_INDEX, 0);
-       for (i = 0; i < cu; i++) {
+       to = ACCESS_FBINFO(cursor.u);
+       for (i = 0; i < to; i++) {
                mga_outb(M_RAMDAC_BASE+TVP3026_CURRAMDATA, 0);
                mga_outb(M_RAMDAC_BASE+TVP3026_CURRAMDATA, 0);
                mga_outb(M_RAMDAC_BASE+TVP3026_CURRAMDATA, 0);
@@ -1772,7 +1800,8 @@ static void matroxfb_ti3026_createcursor(WPMINFO struct display* p) {
                mga_outb(M_RAMDAC_BASE+TVP3026_CURRAMDATA, 0);
                mga_outb(M_RAMDAC_BASE+TVP3026_CURRAMDATA, 0);
        }
-       for (; i < cd; i++) {
+       to = ACCESS_FBINFO(cursor.d);
+       for (; i < to; i++) {
                mga_outb(M_RAMDAC_BASE+TVP3026_CURRAMDATA, xline >> 24);
                mga_outb(M_RAMDAC_BASE+TVP3026_CURRAMDATA, xline >> 16);
                mga_outb(M_RAMDAC_BASE+TVP3026_CURRAMDATA, xline >> 8);
@@ -1818,10 +1847,11 @@ static void matroxfb_ti3026_cursor(struct display* p, int mode, int x, int y) {
        x *= fontwidth(p);
        y *= fontheight(p);
        y -= p->var.yoffset;
-       if (ACCESS_FBINFO(curr.var.vmode) & FB_VMODE_DOUBLE)
+       if (p->var.vmode & FB_VMODE_DOUBLE)
                y *= 2;
        spin_lock_irqsave(&ACCESS_FBINFO(lock.DAC), flags);
-       if ((x != ACCESS_FBINFO(cursor.x)) || (y != ACCESS_FBINFO(cursor.y))) {
+       if ((x != ACCESS_FBINFO(cursor.x)) || (y != ACCESS_FBINFO(cursor.y)) || ACCESS_FBINFO(cursor.redraw)) {
+               ACCESS_FBINFO(cursor.redraw) = 0;
                ACCESS_FBINFO(cursor.x) = x;
                ACCESS_FBINFO(cursor.y) = y;
                x += 64;
@@ -1851,21 +1881,6 @@ static int matroxfb_ti3026_setfont(struct display* p, int width, int height) {
 #endif
 
 #ifdef NEED_DAC1064
-static void outDAC1064(CPMINFO int reg, int val) {
-
-       DBG_REG("outDAC1064");
-
-       mga_outb(M_RAMDAC_BASE+M1064_INDEX, reg);
-       mga_outb(M_RAMDAC_BASE+M1064_X_DATAREG, val);
-}
-
-static int inDAC1064(CPMINFO int reg) {
-
-       DBG_REG("inDAC1064");
-
-       mga_outb(M_RAMDAC_BASE+M1064_INDEX, reg);
-       return mga_inb(M_RAMDAC_BASE+M1064_X_DATAREG);
-}
 
 static void matroxfb_DAC1064_flashcursor(unsigned long ptr) {
 #define minfo ((struct matrox_fb_info*)ptr)
@@ -1881,45 +1896,13 @@ static void matroxfb_DAC1064_createcursor(WPMINFO struct display* p) {
        vaddr_t cursorbase;
        u_int32_t xline;
        unsigned int i;
-       unsigned int w, h;
-       unsigned int cu, cd;
+       unsigned int h, to;
 
        if (ACCESS_FBINFO(currcon_display) != p)
                return;
 
-       w = fontwidth(p);
-       h = fontheight(p);
+       matroxfb_createcursorshape(PMINFO p, p->var.vmode);
 
-       if (ACCESS_FBINFO(curr.var.vmode) & FB_VMODE_DOUBLE)
-               h *= 2;
-       cd = h;
-       if (cd >= 10)
-               cd -= 1;
-       switch (ACCESS_FBINFO(cursor.type) = (p->conp->vc_cursor_type & CUR_HWMASK)) {
-               case CUR_NONE:
-                               cu = cd;
-                               break;
-               case CUR_UNDERLINE:
-                               cu = cd - 2;
-                               break;
-               case CUR_LOWER_THIRD:
-                               cu = (h * 2) / 3;
-                               break;
-               case CUR_LOWER_HALF:
-                               cu = h / 2;
-                               break;
-               case CUR_TWO_THIRDS:
-                               cu = h / 3;
-                               break;
-               case CUR_BLOCK:
-               default:
-                               cu = 0;
-                               cd = h;
-                               break;
-       }
-       ACCESS_FBINFO(cursor.w) = w;
-       ACCESS_FBINFO(cursor.u) = cu;
-       ACCESS_FBINFO(cursor.d) = cd;
        xline = (~0) << (32 - ACCESS_FBINFO(cursor.w));
        cursorbase = ACCESS_FBINFO(video.vbase);
        h = ACCESS_FBINFO(features.DAC1064.cursorimage);
@@ -1927,14 +1910,16 @@ static void matroxfb_DAC1064_createcursor(WPMINFO struct display* p) {
        WaitTillIdle();
        mga_outl(M_OPMODE, M_OPMODE_32BPP);
 #endif
-       for (i = 0; i < cu; i++) {
+       to = ACCESS_FBINFO(cursor.u);
+       for (i = 0; i < to; i++) {
                mga_writel(cursorbase, h, 0);
                mga_writel(cursorbase, h+4, 0);
                mga_writel(cursorbase, h+8, ~0);
                mga_writel(cursorbase, h+12, ~0);
                h += 16;
        }
-       for (; i < cd; i++) {
+       to = ACCESS_FBINFO(cursor.d);
+       for (; i < to; i++) {
                mga_writel(cursorbase, h, 0);
                mga_writel(cursorbase, h+4, xline);
                mga_writel(cursorbase, h+8, ~0);
@@ -1972,10 +1957,11 @@ static void matroxfb_DAC1064_cursor(struct display* p, int mode, int x, int y) {
        x *= fontwidth(p);
        y *= fontheight(p);
        y -= p->var.yoffset;
-       if (ACCESS_FBINFO(curr.var.vmode) & FB_VMODE_DOUBLE)
+       if (p->var.vmode & FB_VMODE_DOUBLE)
                y *= 2;
        spin_lock_irqsave(&ACCESS_FBINFO(lock.DAC), flags);
-       if ((x != ACCESS_FBINFO(cursor.x)) || (y != ACCESS_FBINFO(cursor.y))) {
+       if ((x != ACCESS_FBINFO(cursor.x)) || (y != ACCESS_FBINFO(cursor.y)) || ACCESS_FBINFO(cursor.redraw)) {
+               ACCESS_FBINFO(cursor.redraw) = 0;
                ACCESS_FBINFO(cursor.x) = x;
                ACCESS_FBINFO(cursor.y) = y;
                x += 64;
@@ -2109,6 +2095,218 @@ static int matroxfb_fastfont_tryset(WPMINFO struct display* p) {
        return 1;
 }
 
+static void matrox_text_setup(struct display* p) {
+       MINFO_FROM_DISP(p);
+
+       p->next_line = p->line_length ? p->line_length : ((p->var.xres_virtual / (fontwidth(p)?fontwidth(p):8)) * ACCESS_FBINFO(devflags.textstep));
+       p->next_plane = 0;
+}
+
+static void matrox_text_bmove(struct display* p, int sy, int sx, int dy, int dx,
+               int height, int width) {
+       unsigned int srcoff;
+       unsigned int dstoff;
+       unsigned int step;
+       MINFO_FROM_DISP(p);
+
+       step = ACCESS_FBINFO(devflags.textstep);
+       srcoff = (sy * p->next_line) + (sx * step);
+       dstoff = (dy * p->next_line) + (dx * step);
+       if (dstoff < srcoff) {
+               while (height > 0) {
+                       int i;
+                       for (i = width; i > 0; dstoff += step, srcoff += step, i--)
+                               mga_writew(ACCESS_FBINFO(video.vbase), dstoff, mga_readw(ACCESS_FBINFO(video.vbase), srcoff));
+                       height--;
+                       dstoff += p->next_line - width * step;
+                       srcoff += p->next_line - width * step;
+               }
+       } else {
+               unsigned int off;
+
+               off = (height - 1) * p->next_line + (width - 1) * step;
+               srcoff += off;
+               dstoff += off;
+               while (height > 0) {
+                       int i;
+                       for (i = width; i > 0; dstoff -= step, srcoff -= step, i--)
+                               mga_writew(ACCESS_FBINFO(video.vbase), dstoff, mga_readw(ACCESS_FBINFO(video.vbase), srcoff));
+                       dstoff -= p->next_line - width * step;
+                       srcoff -= p->next_line - width * step;
+                       height--;
+               }
+       }
+}
+
+static void matrox_text_clear(struct vc_data* conp, struct display* p, int sy, int sx,
+               int height, int width) {
+       unsigned int offs;
+       unsigned int val;
+       unsigned int step;
+       MINFO_FROM_DISP(p);
+
+       step = ACCESS_FBINFO(devflags.textstep);
+       offs = sy * p->next_line + sx * step;
+       val = ntohs((attr_bgcol(p, conp->vc_video_erase_char) << 4) | attr_fgcol(p, conp->vc_video_erase_char) | (' ' << 8));
+       while (height > 0) {
+               int i;
+               for (i = width; i > 0; offs += step, i--)
+                       mga_writew(ACCESS_FBINFO(video.vbase), offs, val);
+               offs += p->next_line - width * step;
+               height--;
+       }
+}
+
+static void matrox_text_putc(struct vc_data* conp, struct display* p, int c, int yy, int xx) {
+       unsigned int offs;
+       unsigned int chr;
+       unsigned int step;
+       MINFO_FROM_DISP(p);
+
+       step = ACCESS_FBINFO(devflags.textstep);
+       offs = yy * p->next_line + xx * step;
+       chr = attr_fgcol(p,c) | (attr_bgcol(p,c) << 4) | ((c & p->charmask) << 8);
+       if (chr & 0x10000) chr |= 0x08;
+       mga_writew(ACCESS_FBINFO(video.vbase), offs, ntohs(chr));
+}
+
+static void matrox_text_putcs(struct vc_data* conp, struct display* p, const unsigned short* s,
+               int count, int yy, int xx) {
+       unsigned int offs;
+       unsigned int attr;
+       unsigned int step;
+       MINFO_FROM_DISP(p);
+
+       step = ACCESS_FBINFO(devflags.textstep);
+       offs = yy * p->next_line + xx * step;
+       attr = attr_fgcol(p,*s) | (attr_bgcol(p,*s) << 4);
+       while (count-- > 0) {
+               unsigned int chr = ((*s++) & p->charmask) << 8;
+               if (chr & 0x10000) chr ^= 0x10008;
+               mga_writew(ACCESS_FBINFO(video.vbase), offs, ntohs(attr|chr));
+               offs += step;
+       }
+}
+
+static void matrox_text_revc(struct display* p, int xx, int yy) {
+       unsigned int offs;
+       unsigned int step;
+       MINFO_FROM_DISP(p);
+
+       step = ACCESS_FBINFO(devflags.textstep);
+       offs = yy * p->next_line + xx * step + 1;
+       mga_writeb(ACCESS_FBINFO(video.vbase), offs, mga_readb(ACCESS_FBINFO(video.vbase), offs) ^ 0x77);
+}
+
+static int matrox_text_loadfont(WPMINFO struct display* p) {
+       unsigned int fsize;
+       unsigned int width;
+       vaddr_t dst;
+       unsigned int i;
+       u_int8_t* font;
+
+       if (!p || !p->fontdata)
+               return 0;
+       width = fontwidth(p);
+       fsize = p->userfont?FNTCHARCNT(p->fontdata):256;
+
+       dst = ACCESS_FBINFO(video.vbase);
+       i = 2;
+       font = (u_int8_t*)p->fontdata;
+       mga_setr(M_SEQ_INDEX, 0x02, 0x04);
+       while (fsize--) {
+               int l;
+
+               for (l = 0; l < fontheight(p); l++) {
+                       mga_writeb(dst, i, *font++);
+                       if (fontwidth(p) > 8) font++;
+                       i += ACCESS_FBINFO(devflags.vgastep);
+               }
+               i += (32 - fontheight(p)) * ACCESS_FBINFO(devflags.vgastep);
+       }
+       mga_setr(M_SEQ_INDEX, 0x02, 0x03);
+       return 1;
+}
+
+static void matrox_text_createcursor(WPMINFO struct display* p) {
+
+       if (ACCESS_FBINFO(currcon_display) != p)
+               return;
+
+       matroxfb_createcursorshape(PMINFO p, 0);
+       mga_setr(M_CRTC_INDEX, 0x0A, ACCESS_FBINFO(cursor.u));
+       mga_setr(M_CRTC_INDEX, 0x0B, ACCESS_FBINFO(cursor.d) - 1);
+}
+
+static void matrox_text_cursor(struct display* p, int mode, int x, int y) {
+       unsigned int pos;
+       MINFO_FROM_DISP(p);
+
+       if (mode == CM_ERASE) {
+               if (ACCESS_FBINFO(cursor.state) != CM_ERASE) {
+                       mga_setr(M_CRTC_INDEX, 0x0A, 0x20);
+                       ACCESS_FBINFO(cursor.state) = CM_ERASE;
+               }
+               return;
+       }
+       if ((p->conp->vc_cursor_type & CUR_HWMASK) != ACCESS_FBINFO(cursor.type))
+               matrox_text_createcursor(PMINFO p);
+
+       /* DO NOT CHECK cursor.x != x because of vgaHWinit moves cursor to 0,0 */
+       ACCESS_FBINFO(cursor.x) = x;
+       ACCESS_FBINFO(cursor.y) = y;
+       pos = p->next_line / ACCESS_FBINFO(devflags.textstep) * y + x;
+       mga_setr(M_CRTC_INDEX, 0x0F, pos);
+       mga_setr(M_CRTC_INDEX, 0x0E, pos >> 8);
+
+       mga_setr(M_CRTC_INDEX, 0x0A, ACCESS_FBINFO(cursor.u));
+       ACCESS_FBINFO(cursor.state) = CM_DRAW;
+}
+
+static void matrox_text_round(CPMINFO struct fb_var_screeninfo* var, struct display* p) {
+       unsigned hf;
+       unsigned vf;
+       unsigned vxres;
+       unsigned ych;
+
+       hf = fontwidth(p);
+       if (!hf) hf = 8;
+       /* do not touch xres */
+       vxres = (var->xres_virtual + hf - 1) / hf;
+       if (vxres >= 256)
+               vxres = 255;
+       if (vxres < 16)
+               vxres = 16;
+       vxres = (vxres + 1) & ~1;       /* must be even */
+       vf = fontheight(p);
+       if (!vf) vf = 16;
+       if (var->yres < var->yres_virtual) {
+               ych = ACCESS_FBINFO(devflags.textvram) / vxres;
+               var->yres_virtual = ych * vf;
+       } else
+               ych = var->yres_virtual / vf;
+       if (vxres * ych > ACCESS_FBINFO(devflags.textvram)) {
+               ych = ACCESS_FBINFO(devflags.textvram) / vxres;
+               var->yres_virtual = ych * vf;
+       }
+       var->xres_virtual = vxres * hf;
+}
+
+static int matrox_text_setfont(struct display* p, int width, int height) {
+       DBG("matrox_text_setfont");
+
+       if (p) {
+               MINFO_FROM_DISP(p);
+               
+               matrox_text_round(PMINFO &p->var, p);
+               p->next_line = p->line_length = ((p->var.xres_virtual / (fontwidth(p)?fontwidth(p):8)) * ACCESS_FBINFO(devflags.textstep));
+
+               if (p->conp)
+                       matrox_text_createcursor(PMINFO p);
+       }
+       return 0;
+}
+
 #define matrox_cfb16_revc matrox_cfbX_revc
 #define matrox_cfb24_revc matrox_cfbX_revc
 #define matrox_cfb32_revc matrox_cfbX_revc
@@ -2117,6 +2315,15 @@ static int matroxfb_fastfont_tryset(WPMINFO struct display* p) {
 #define matrox_cfb24_putc matrox_cfb32_putc
 #define matrox_cfb24_putcs matrox_cfb32_putcs
 
+#ifdef FBCON_HAS_VGATEXT
+static struct display_switch matroxfb_text = {
+       matrox_text_setup,    matrox_text_bmove,  matrox_text_clear,
+       matrox_text_putc,     matrox_text_putcs,  matrox_text_revc,
+       matrox_text_cursor,   matrox_text_setfont, NULL,
+       FONTWIDTH(8)|FONTWIDTH(9)
+};
+#endif
+
 #ifdef FBCON_HAS_CFB4
 static struct display_switch matroxfb_cfb4 = {
        fbcon_cfb4_setup,     matrox_cfb4_bmove,  matrox_cfb4_clear,
@@ -2178,7 +2385,10 @@ static void initMatrox(WPMINFO struct display* p) {
        
        p->dispsw_data = NULL;
        if ((p->var.accel_flags & FB_ACCELF_TEXT) != FB_ACCELF_TEXT) {
-               switch (p->var.bits_per_pixel) {
+               if (p->type == FB_TYPE_TEXT) {
+                       swtmp = &matroxfb_text;
+               } else {
+                       switch (p->var.bits_per_pixel) {
 #ifdef FBCON_HAS_CFB4
                        case 4:
                                swtmp = &fbcon_cfb4;
@@ -2210,12 +2420,16 @@ static void initMatrox(WPMINFO struct display* p) {
                        default:
                                p->dispsw = &fbcon_dummy;
                                return;
+                       }
                }
                dprintk(KERN_INFO "matroxfb: acceleration disabled\n");
                p->dispsw = swtmp;
                return;
        }
-       switch (p->var.bits_per_pixel) {
+       if (p->type == FB_TYPE_TEXT) {
+               swtmp = &matroxfb_text;
+       } else {
+               switch (p->var.bits_per_pixel) {
 #ifdef FBCON_HAS_CFB4
                case 4:
                        swtmp = &matroxfb_cfb4;
@@ -2247,11 +2461,12 @@ static void initMatrox(WPMINFO struct display* p) {
                default:
                        p->dispsw = &fbcon_dummy;
                        return;
+               }
        }
        dprintk(KERN_INFO "matroxfb: now accelerated\n");
        memcpy(&ACCESS_FBINFO(dispsw), swtmp, sizeof(ACCESS_FBINFO(dispsw)));
        p->dispsw = &ACCESS_FBINFO(dispsw);
-       if (ACCESS_FBINFO(devflags.hwcursor)) {
+       if ((p->type != FB_TYPE_TEXT) && ACCESS_FBINFO(devflags.hwcursor)) {
                if (isMillenium(MINFO)) {
 #ifdef CONFIG_FB_MATROX_MILLENIUM
                        ACCESS_FBINFO(dispsw.cursor) = matroxfb_ti3026_cursor;
@@ -2298,27 +2513,19 @@ static struct fb_var_screeninfo vesafb_defined __initdata = {
 /* --------------------------------------------------------------------- */
 
 static void matrox_pan_var(WPMINFO struct fb_var_screeninfo *var) {
-       struct matroxfb_par* p = &ACCESS_FBINFO(curr);
        unsigned int pos;
        unsigned short p0, p1, p2;
+       struct display *disp;
 
        DBG("matrox_pan_var")
        
-       p->var.xoffset = var->xoffset;
-       p->var.yoffset = var->yoffset;
-       if (var->vmode & FB_VMODE_YWRAP)
-               p->var.vmode |= FB_VMODE_YWRAP;
-       else
-               p->var.vmode &= ~FB_VMODE_YWRAP;
-       
-       pos = (p->var.yoffset * p->var.xres_virtual + p->var.xoffset) * p->final_bppShift / 32;
-       if (mga_ydstorg(MINFO)) {
-               if (isInterleave(MINFO))
-                       pos += mga_ydstorg(MINFO) >> 3;
-               else
-                       pos += mga_ydstorg(MINFO) >> 2;
+       disp = ACCESS_FBINFO(currcon_display);
+       if (disp->type == FB_TYPE_TEXT) {
+               pos = var->yoffset / fontheight(disp) * disp->next_line / ACCESS_FBINFO(devflags.textstep) + var->xoffset / (fontwidth(disp)?fontwidth(disp):8);
+       } else {
+               pos = (var->yoffset * var->xres_virtual + var->xoffset) * ACCESS_FBINFO(curr.final_bppShift) / 32;
+               pos += ACCESS_FBINFO(curr.ydstorg.chunks);
        }
-
        p0 = ACCESS_FBINFO(currenthw)->CRTC[0x0D] = pos & 0xFF;
        p1 = ACCESS_FBINFO(currenthw)->CRTC[0x0C] = (pos & 0xFF00) >> 8;
        p2 = ACCESS_FBINFO(currenthw)->CRTCEXT[0] = (ACCESS_FBINFO(currenthw)->CRTCEXT[0] & 0xF0) | ((pos >> 16) & 0x0F);
@@ -2392,6 +2599,9 @@ static int matroxfb_get_final_bppShift(CPMINFO int bpp) {
        DBG("matroxfb_get_final_bppShift")
        
        bppshft2 = bpp;
+       if (!bppshft2) {
+               return 8;
+       }
        if (isInterleave(MINFO))
                bppshft2 >>= 1;
        if (ACCESS_FBINFO(devflags.video64bits))
@@ -2406,6 +2616,7 @@ static int matroxfb_test_and_set_rounding(CPMINFO int xres, int bpp) {
        DBG("matroxfb_test_and_set_rounding")
        
        switch (bpp) {
+               case 0:         return xres;
                case 4:         rounding = 128;
                                break;
                case 8:         rounding = 64;
@@ -2431,6 +2642,8 @@ static int matroxfb_pitch_adjust(CPMINFO int xres, int bpp) {
        int xres_new;
 
        DBG("matroxfb_pitch_adjust")
+
+       if (!bpp) return xres;
        
        width = ACCESS_FBINFO(capable.vxres);
 
@@ -2584,10 +2797,9 @@ static int Ti3026_calcclock(CPMINFO unsigned int freq, unsigned int fmax, int* i
        return fvco;
 }
 
-static int Ti3026_setpclk(CPMINFO struct matrox_hw_state* hw, int clk, int Bpp) {
+static int Ti3026_setpclk(CPMINFO struct matrox_hw_state* hw, int clk, struct display* p) {
        unsigned int f_pll;
        unsigned int pixfeed, pixin, pixpost;
-       unsigned int loopfeed, loopin, looppost, loopdiv, z;
        
        DBG("Ti3026_setpclk")
        
@@ -2596,52 +2808,65 @@ static int Ti3026_setpclk(CPMINFO struct matrox_hw_state* hw, int clk, int Bpp)
        hw->DACclk[0] = pixin | 0xC0;
        hw->DACclk[1] = pixfeed;
        hw->DACclk[2] = pixpost | 0xB0;
-       if (ACCESS_FBINFO(curr.var.bits_per_pixel) == 24) {
-               loopfeed = 3;           /* set lm to any possible value */
-               loopin = 3 * 32 / Bpp;
+
+       if (p->type == FB_TYPE_TEXT) {
+               hw->DACreg[POS3026_XMEMPLLCTRL] = TVP3026_XMEMPLLCTRL_MCLK_MCLKPLL | TVP3026_XMEMPLLCTRL_RCLK_PIXPLL;
+               hw->DACclk[3] = 0xFD;
+               hw->DACclk[4] = 0x3D;
+               hw->DACclk[5] = 0x70;
        } else {
-               loopfeed = 4;
-               loopin = 4 * 32 / Bpp;
-       }
-       z = (110000 * loopin) / (f_pll * loopfeed);
-       loopdiv = 0; /* div 2 */
-       if (z < 2)
-               looppost = 0;
-       else if (z < 4)
-               looppost = 1;
-       else if (z < 8)
-               looppost = 2;
-       else {
-               looppost = 3;
-               loopdiv = z/16; 
-       }
-       if (ACCESS_FBINFO(curr.var.bits_per_pixel) == 24) {
-               hw->DACclk[3] = ((65 - loopin) & 0x3F) | 0xC0;
-               hw->DACclk[4] = (65 - loopfeed) | 0x80;
-               if (ACCESS_FBINFO(accel.ramdac_rev) > 0x20) {
-                       if (isInterleave(MINFO))
-                               hw->DACreg[POS3026_XLATCHCTRL] = TVP3026B_XLATCHCTRL_8_3;
-                       else {
-                               hw->DACclk[4] &= ~0xC0;
-                               hw->DACreg[POS3026_XLATCHCTRL] = TVP3026B_XLATCHCTRL_4_3;
-                       }
+               unsigned int loopfeed, loopin, looppost, loopdiv, z;
+               unsigned int Bpp;
+
+               Bpp = ACCESS_FBINFO(curr.final_bppShift);
+
+               if (p->var.bits_per_pixel == 24) {
+                       loopfeed = 3;           /* set lm to any possible value */
+                       loopin = 3 * 32 / Bpp;
                } else {
-                       if (isInterleave(MINFO))
-                               ;       /* default... */
-                       else {
-                               hw->DACclk[4] ^= 0xC0;  /* change from 0x80 to 0x40 */
-                               hw->DACreg[POS3026_XLATCHCTRL] = TVP3026A_XLATCHCTRL_4_3;
+                       loopfeed = 4;
+                       loopin = 4 * 32 / Bpp;
+               }
+               z = (110000 * loopin) / (f_pll * loopfeed);
+               loopdiv = 0; /* div 2 */
+               if (z < 2)
+                       looppost = 0;
+               else if (z < 4)
+                       looppost = 1;
+               else if (z < 8)
+                       looppost = 2;
+               else {
+                       looppost = 3;
+                       loopdiv = z/16; 
+               }
+               if (p->var.bits_per_pixel == 24) {
+                       hw->DACclk[3] = ((65 - loopin) & 0x3F) | 0xC0;
+                       hw->DACclk[4] = (65 - loopfeed) | 0x80;
+                       if (ACCESS_FBINFO(accel.ramdac_rev) > 0x20) {
+                               if (isInterleave(MINFO))
+                                       hw->DACreg[POS3026_XLATCHCTRL] = TVP3026B_XLATCHCTRL_8_3;
+                               else {
+                                       hw->DACclk[4] &= ~0xC0;
+                                       hw->DACreg[POS3026_XLATCHCTRL] = TVP3026B_XLATCHCTRL_4_3;
+                               }
+                       } else {
+                               if (isInterleave(MINFO))
+                                       ;       /* default... */
+                               else {
+                                       hw->DACclk[4] ^= 0xC0;  /* change from 0x80 to 0x40 */
+                                       hw->DACreg[POS3026_XLATCHCTRL] = TVP3026A_XLATCHCTRL_4_3;
+                               }
                        }
+                       hw->DACclk[5] = looppost | 0xF8;
+                       if (ACCESS_FBINFO(devflags.mga_24bpp_fix))
+                               hw->DACclk[5] ^= 0x40;
+               } else {
+                       hw->DACclk[3] = ((65 - loopin) & 0x3F) | 0xC0;
+                       hw->DACclk[4] = 65 - loopfeed;
+                       hw->DACclk[5] = looppost | 0xF0;
                }
-               hw->DACclk[5] = looppost | 0xF8;
-               if (ACCESS_FBINFO(devflags.mga_24bpp_fix))
-                       hw->DACclk[5] ^= 0x40;
-       } else {
-               hw->DACclk[3] = ((65 - loopin) & 0x3F) | 0xC0;
-               hw->DACclk[4] = 65 - loopfeed;
-               hw->DACclk[5] = looppost | 0xF0;
+               hw->DACreg[POS3026_XMEMPLLCTRL] = loopdiv | TVP3026_XMEMPLLCTRL_MCLK_MCLKPLL | TVP3026_XMEMPLLCTRL_RCLK_LOOPPLL;
        }
-       hw->DACreg[POS3026_XMEMPLLCTRL] = loopdiv | TVP3026_XMEMPLLCTRL_STROBEMKC4 | TVP3026_XMEMPLLCTRL_MCLK_MCLKPLL | TVP3026_XMEMPLLCTRL_RCLK_LOOPPLL;
        return 0;
 }
 #endif
@@ -2667,20 +2892,34 @@ static void var2my(struct fb_var_screeninfo* var, struct my_timming* mt) {
        mt->sync = var->sync;
 }
 
-static int vgaHWinit(CPMINFO struct matrox_hw_state* hw, struct my_timming* m) {
+static int vgaHWinit(CPMINFO struct matrox_hw_state* hw, struct my_timming* m, struct display* p) {
        unsigned int hd, hs, he, hbe, ht;
        unsigned int vd, vs, ve, vt;
        unsigned int wd;
        unsigned int divider;
        int i;
+       int text = p->type == FB_TYPE_TEXT;
+       int fwidth;
+
+       if (text) {
+               fwidth = fontwidth(p);
+               if (!fwidth) fwidth = 8;
+       } else
+               fwidth = 8;
 
        DBG("vgaHWinit")
        
        hw->SEQ[0] = 0x00;
-       hw->SEQ[1] = 0x01;      /* or 0x09 */
+       if (fwidth == 9)
+               hw->SEQ[1] = 0x00;
+       else
+               hw->SEQ[1] = 0x01;      /* or 0x09 */
        hw->SEQ[2] = 0x0F;      /* bitplanes */
        hw->SEQ[3] = 0x00;
-       hw->SEQ[4] = 0x0E;
+       if (text)
+               hw->SEQ[4] = 0x02;
+       else
+               hw->SEQ[4] = 0x0E;
        /* CRTC 0..7, 9, 16..19, 21, 22 are reprogrammed by Matrox Millenium code... Hope that by MGA1064 too */
        if (m->dblscan) {
                m->VTotal <<= 1;
@@ -2701,28 +2940,48 @@ static int vgaHWinit(CPMINFO struct matrox_hw_state* hw, struct my_timming* m) {
        hw->GCTL[2] = 0x00;
        hw->GCTL[3] = 0x00;
        hw->GCTL[4] = 0x00;
-       hw->GCTL[5] = 0x40;
-       hw->GCTL[6] = 0x05;
+       if (text) {
+               hw->GCTL[5] = 0x10;
+               hw->GCTL[6] = 0x02;
+       } else {
+               hw->GCTL[5] = 0x40;
+               hw->GCTL[6] = 0x05;
+       }
        hw->GCTL[7] = 0x0F;
        hw->GCTL[8] = 0xFF;
 
        /* Whole ATTR is ignored in PowerGraphics mode */
        for (i = 0; i < 16; i++)
                hw->ATTR[i] = i;
-       hw->ATTR[16] = 0x41;
+       if (text) {
+               hw->ATTR[16] = 0x04;
+       } else {
+               hw->ATTR[16] = 0x41;
+       }
        hw->ATTR[17] = 0xFF;
        hw->ATTR[18] = 0x0F;
-       hw->ATTR[19] = 0x00;
+       if (fwidth == 9)
+               hw->ATTR[19] = 0x08;
+       else
+               hw->ATTR[19] = 0x00;
        hw->ATTR[20] = 0x00;
 
-       hd = m->HDisplay >> 3;
-       hs = m->HSyncStart >> 3;
-       he = m->HSyncEnd >> 3;
-       ht = m->HTotal >> 3;
-       /* standard timmings are in 8pixels, but for interleaved we cannot */
-       /* do it for 4bpp (because of (4bpp >> 1(interleaved))/4 == 0) */
-       /* using 16 or more pixels per unit can save us */
-       divider = ACCESS_FBINFO(curr.final_bppShift);
+       if (text) {
+               hd = m->HDisplay / fwidth;
+               hs = m->HSyncStart / fwidth;
+               he = m->HSyncEnd / fwidth;
+               ht = m->HTotal / fwidth;
+               divider = 8;
+       } else {
+               hd = m->HDisplay >> 3;
+               hs = m->HSyncStart >> 3;
+               he = m->HSyncEnd >> 3;
+               ht = m->HTotal >> 3;
+               /* standard timmings are in 8pixels, but for interleaved we cannot */
+               /* do it for 4bpp (because of (4bpp >> 1(interleaved))/4 == 0) */
+               /* using 16 or more pixels per unit can save us */
+               divider = ACCESS_FBINFO(curr.final_bppShift);
+       }
        while (divider & 3) {
                hd >>= 1;
                hs >>= 1;
@@ -2747,10 +3006,16 @@ static int vgaHWinit(CPMINFO struct matrox_hw_state* hw, struct my_timming* m) {
        vs = m->VSyncStart - 1;
        ve = m->VSyncEnd - 1;
        vt = m->VTotal - 2;
-       if (((ht & 0x0F) == 0x0E) || ((ht & 0x0F) == 0x04))
+       /* G200 cannot work with (ht & 7) == 6 */
+       if (((ht & 0x07) == 0x06) || ((ht & 0x0F) == 0x04))
                ht++;
-       hbe = ht;
-       wd = ACCESS_FBINFO(curr.var.xres_virtual) * ACCESS_FBINFO(curr.final_bppShift) / 64;
+       if (text) {
+               hbe = ht - 1;
+               wd = p->var.xres_virtual / (fwidth * 2);
+       } else {
+               hbe = ht;
+               wd = p->var.xres_virtual * ACCESS_FBINFO(curr.final_bppShift) / 64;
+       }
 
        hw->CRTCEXT[0] = 0;
        hw->CRTCEXT[5] = 0;
@@ -2770,7 +3035,10 @@ static int vgaHWinit(CPMINFO struct matrox_hw_state* hw, struct my_timming* m) {
                          ((vd & 0x400) >>  8) |        /* disp end */
                          ((vd & 0xC00) >>  7) |        /* vblanking start */
                          ((vs & 0xC00) >>  5);
-       hw->CRTCEXT[3] = (divider - 1) | 0x80;
+       if (text)
+               hw->CRTCEXT[3] = 0x00;
+       else
+               hw->CRTCEXT[3] = (divider - 1) | 0x80;
        hw->CRTCEXT[4] = 0;
 
        hw->CRTC[0] = ht-4;
@@ -2779,6 +3047,8 @@ static int vgaHWinit(CPMINFO struct matrox_hw_state* hw, struct my_timming* m) {
        hw->CRTC[3] = (hbe & 0x1F) | 0x80;
        hw->CRTC[4] = hs;
        hw->CRTC[5] = ((hbe & 0x20) << 2) | (he & 0x1F);
+       if (text)
+               hw->CRTC[5] |= 0x60;    /* delay sync for 3 clocks (to same picture position on MGA and VGA) */
        hw->CRTC[6] = vt & 0xFF;
        hw->CRTC[7] = ((vt & 0x100) >> 8) |
                      ((vd & 0x100) >> 7) |
@@ -2790,6 +3060,8 @@ static int vgaHWinit(CPMINFO struct matrox_hw_state* hw, struct my_timming* m) {
                      ((vs & 0x200) >> 2);
        hw->CRTC[8] = 0x00;
        hw->CRTC[9] = ((vd & 0x200) >> 4) | 0x40;
+       if (text)
+               hw->CRTC[9] |= fontheight(p) - 1;
        if (m->dblscan && !m->interlaced)
                hw->CRTC[9] |= 0x80;
        for (i = 10; i < 16; i++)
@@ -2801,7 +3073,17 @@ static int vgaHWinit(CPMINFO struct matrox_hw_state* hw, struct my_timming* m) {
        hw->CRTC[20] = 0x00;
        hw->CRTC[21] = vd /* & 0xFF */;
        hw->CRTC[22] = (vt + 1) /* & 0xFF */;
-       hw->CRTC[23] = 0xC3;
+       if (text) {
+               if (ACCESS_FBINFO(devflags.textmode) == 1)
+                       hw->CRTC[23] = 0xC3;
+               else
+                       hw->CRTC[23] = 0xA3;
+               if (ACCESS_FBINFO(devflags.textmode) == 4)
+                       hw->CRTC[20] = 0x5F;
+               else
+                       hw->CRTC[20] = 0x1F;
+       } else
+               hw->CRTC[23] = 0xC3;
        hw->CRTC[24] = 0xFF;
        return 0;
 };
@@ -2824,6 +3106,7 @@ static const unsigned char MGA1064_DAC_regs[] = {
 #define POS1064_XVREFCTRL              12
 #define POS1064_XMULCTRL               13
 #define POS1064_XGENCTRL               15
+#define POS1064_XMISCCTRL              16
 
 static const unsigned char MGA1064_DAC[] = {
                0x00, 0x00, M1064_XCURCTRL_DIS,
@@ -2853,7 +3136,14 @@ __initfunc(static void DAC1064_setmclk(CPMINFO struct matrox_hw_state* hw, int o
        u_int32_t mx;
 
        DBG("DAC1064_setmclk")
-       
+
+       if (ACCESS_FBINFO(devflags.noinit)) {
+               /* read MCLK and give up... */
+               hw->DACclk[3] = inDAC1064(PMINFO DAC1064_XSYSPLLM);
+               hw->DACclk[4] = inDAC1064(PMINFO DAC1064_XSYSPLLN);
+               hw->DACclk[5] = inDAC1064(PMINFO DAC1064_XSYSPLLP);
+               return;
+       }
        mx = hw->MXoptionReg | 0x00000004;
        pci_write_config_dword(ACCESS_FBINFO(pcidev), PCI_OPTION_REG, mx);
        mx &= ~0x000000BB;
@@ -2903,18 +3193,26 @@ __initfunc(static void DAC1064_setmclk(CPMINFO struct matrox_hw_state* hw, int o
        hw->MXoptionReg = mx;
 }
 
-static int DAC1064_init_1(CPMINFO struct matrox_hw_state* hw, struct my_timming* m) {
+static int DAC1064_init_1(CPMINFO struct matrox_hw_state* hw, struct my_timming* m, struct display *p) {
        
        DBG("DAC1064_init_1")
        
        memcpy(hw->DACreg, MGA1064_DAC, sizeof(MGA1064_DAC_regs));
-       switch (ACCESS_FBINFO(curr.var.bits_per_pixel)) {
+       if (p->type == FB_TYPE_TEXT) {
+               hw->DACreg[POS1064_XMISCCTRL] = M1064_XMISCCTRL_DAC_EN
+                                             | M1064_XMISCCTRL_MFC_VGA
+                                             | M1064_XMISCCTRL_DAC_6BIT
+                                             | M1064_XMISCCTRL_LUT_EN;
+               hw->DACreg[POS1064_XMULCTRL] = M1064_XMULCTRL_DEPTH_8BPP 
+                                            | M1064_XMULCTRL_GRAPHICS_PALETIZED;
+       } else {
+               switch (p->var.bits_per_pixel) {
                /* case 4: not supported by MGA1064 DAC */
                case 8: 
                        hw->DACreg[POS1064_XMULCTRL] = M1064_XMULCTRL_DEPTH_8BPP | M1064_XMULCTRL_GRAPHICS_PALETIZED;
                        break;
                case 16:
-                       if (ACCESS_FBINFO(curr.var.green.length) == 5)
+                       if (p->var.green.length == 5)
                                hw->DACreg[POS1064_XMULCTRL] = M1064_XMULCTRL_DEPTH_15BPP_1BPP | M1064_XMULCTRL_GRAPHICS_PALETIZED;
                        else
                                hw->DACreg[POS1064_XMULCTRL] = M1064_XMULCTRL_DEPTH_16BPP | M1064_XMULCTRL_GRAPHICS_PALETIZED;
@@ -2927,6 +3225,7 @@ static int DAC1064_init_1(CPMINFO struct matrox_hw_state* hw, struct my_timming*
                        break;
                default:
                        return 1;       /* unsupported depth */
+               }
        }
        hw->DACreg[POS1064_XVREFCTRL] = ACCESS_FBINFO(features.DAC1064.xvrefctrl);
        hw->DACreg[POS1064_XGENCTRL] &= ~M1064_XGENCTRL_SYNC_ON_GREEN_MASK;
@@ -2936,12 +3235,12 @@ static int DAC1064_init_1(CPMINFO struct matrox_hw_state* hw, struct my_timming*
        return 0;
 }
 
-static int DAC1064_init_2(CPMINFO struct matrox_hw_state* hw, struct my_timming* m) {
+static int DAC1064_init_2(CPMINFO struct matrox_hw_state* hw, struct my_timming* m, struct display* p) {
        
        DBG("DAC1064_init_2")
        
        DAC1064_setpclk(PMINFO hw, m->pixclock);
-       if (ACCESS_FBINFO(curr.var.bits_per_pixel) > 16) {      /* 256 entries */
+       if (p->var.bits_per_pixel > 16) {       /* 256 entries */
                int i;
 
                for (i = 0; i < 256; i++) {
@@ -2949,8 +3248,8 @@ static int DAC1064_init_2(CPMINFO struct matrox_hw_state* hw, struct my_timming*
                        hw->DACpal[i * 3 + 1] = i;
                        hw->DACpal[i * 3 + 2] = i;
                }
-       } else if (ACCESS_FBINFO(curr.var.bits_per_pixel) > 8) {
-               if (ACCESS_FBINFO(curr.var.green.length) == 5) {        /* 0..31, 128..159 */
+       } else if (p->var.bits_per_pixel > 8) {
+               if (p->var.green.length == 5) { /* 0..31, 128..159 */
                        int i;
 
                        for (i = 0; i < 32; i++) {
@@ -2995,15 +3294,29 @@ static void DAC1064_restore_1(CPMINFO const struct matrox_hw_state* hw, const st
 
 static void DAC1064_restore_2(WPMINFO const struct matrox_hw_state* hw, const struct matrox_hw_state* oldhw, struct display* p) {
        unsigned int i;
+       unsigned int tmout;
        
        DBG("DAC1064_restore_2")
        
        for (i = 0; i < 3; i++)
                outDAC1064(PMINFO M1064_XPIXPLLCM + i, hw->DACclk[i]);
-       while (!(inDAC1064(PMINFO M1064_XPIXPLLSTAT) & 0x40));
+       for (tmout = 500000; tmout; tmout--) {
+               if (inDAC1064(PMINFO M1064_XPIXPLLSTAT) & 0x40)
+                       break;
+               udelay(10);
+       };
+       if (!tmout)
+               printk(KERN_ERR "matroxfb: Pixel PLL not locked after 5 secs\n");
+
        if (p && p->conp) {
-               matroxfb_DAC1064_createcursor(PMINFO p);
-               i = matroxfb_fastfont_tryset(PMINFO p);
+               if (p->type == FB_TYPE_TEXT) {
+                       matrox_text_createcursor(PMINFO p);
+                       matrox_text_loadfont(PMINFO p);
+                       i = 0;
+               } else {
+                       matroxfb_DAC1064_createcursor(PMINFO p);
+                       i = matroxfb_fastfont_tryset(PMINFO p);
+               }
        } else
                i = 0;
        if (i) {
@@ -3028,12 +3341,12 @@ static void DAC1064_restore_2(WPMINFO const struct matrox_hw_state* hw, const st
 #endif /* NEED_DAC1064 */
 
 #ifdef CONFIG_FB_MATROX_MYSTIQUE
-static int MGA1064_init(CPMINFO struct matrox_hw_state* hw, struct my_timming* m) {
+static int MGA1064_init(CPMINFO struct matrox_hw_state* hw, struct my_timming* m, struct display* p) {
        
        DBG("MGA1064_init")
        
-       if (DAC1064_init_1(PMINFO hw, m)) return 1;
-       if (vgaHWinit(PMINFO hw, m)) return 1;
+       if (DAC1064_init_1(PMINFO hw, m, p)) return 1;
+       if (vgaHWinit(PMINFO hw, m, p)) return 1;
 
        hw->MiscOutReg = 0xCB;
        if (m->sync & FB_SYNC_HOR_HIGH_ACT)
@@ -3043,19 +3356,19 @@ static int MGA1064_init(CPMINFO struct matrox_hw_state* hw, struct my_timming* m
        if (m->sync & FB_SYNC_COMP_HIGH_ACT) /* should be only FB_SYNC_COMP */
                hw->CRTCEXT[3] |= 0x40;
 
-       if (DAC1064_init_2(PMINFO hw, m)) return 1;
+       if (DAC1064_init_2(PMINFO hw, m, p)) return 1;
        return 0;               
 }
 #endif
 
 #ifdef CONFIG_FB_MATROX_G100
-static int MGAG100_init(CPMINFO struct matrox_hw_state* hw, struct my_timming* m) {
+static int MGAG100_init(CPMINFO struct matrox_hw_state* hw, struct my_timming* m, struct display* p) {
 
        DBG("MGAG100_init")
 
-       if (DAC1064_init_1(PMINFO hw, m)) return 1;
+       if (DAC1064_init_1(PMINFO hw, m, p)) return 1;
        hw->MXoptionReg &= ~0x2000;
-       if (vgaHWinit(PMINFO hw, m)) return 1;
+       if (vgaHWinit(PMINFO hw, m, p)) return 1;
 
        hw->MiscOutReg = 0xEF;
        if (m->sync & FB_SYNC_HOR_HIGH_ACT)
@@ -3065,19 +3378,27 @@ static int MGAG100_init(CPMINFO struct matrox_hw_state* hw, struct my_timming* m
        if (m->sync & FB_SYNC_COMP_HIGH_ACT) /* should be only FB_SYNC_COMP */
                hw->CRTCEXT[3] |= 0x40;
 
-       if (DAC1064_init_2(PMINFO hw, m)) return 1;
+       if (DAC1064_init_2(PMINFO hw, m, p)) return 1;
        return 0;               
 }
 #endif /* G100 */
 
 #ifdef CONFIG_FB_MATROX_MILLENIUM
-static int Ti3026_init(CPMINFO struct matrox_hw_state* hw, struct my_timming* m) {
+static int Ti3026_init(CPMINFO struct matrox_hw_state* hw, struct my_timming* m, struct display* p) {
        u_int8_t muxctrl = isInterleave(MINFO) ? TVP3026_XMUXCTRL_MEMORY_64BIT : TVP3026_XMUXCTRL_MEMORY_32BIT;
 
        DBG("Ti3026_init")
 
        memcpy(hw->DACreg, MGADACbpp32, sizeof(hw->DACreg));
-       switch (ACCESS_FBINFO(curr.var.bits_per_pixel)) {
+       if (p->type == FB_TYPE_TEXT) {
+               hw->DACreg[POS3026_XLATCHCTRL] = TVP3026_XLATCHCTRL_8_1;
+               hw->DACreg[POS3026_XTRUECOLORCTRL] = TVP3026_XTRUECOLORCTRL_PSEUDOCOLOR;
+               hw->DACreg[POS3026_XMUXCTRL] = TVP3026_XMUXCTRL_VGA;
+               hw->DACreg[POS3026_XCLKCTRL] = TVP3026_XCLKCTRL_SRC_PLL | 
+                                              TVP3026_XCLKCTRL_DIV4;
+               hw->DACreg[POS3026_XMISCCTRL] = TVP3026_XMISCCTRL_DAC_PUP | TVP3026_XMISCCTRL_DAC_6BIT | TVP3026_XMISCCTRL_PSEL_DIS | TVP3026_XMISCCTRL_PSEL_LOW;
+       } else {
+               switch (p->var.bits_per_pixel) {
                case 4: hw->DACreg[POS3026_XLATCHCTRL] = TVP3026_XLATCHCTRL_16_1;       /* or _8_1, they are same */
                        hw->DACreg[POS3026_XTRUECOLORCTRL] = TVP3026_XTRUECOLORCTRL_PSEUDOCOLOR;
                        hw->DACreg[POS3026_XMUXCTRL] = muxctrl | TVP3026_XMUXCTRL_PIXEL_4BIT;
@@ -3092,7 +3413,7 @@ static int Ti3026_init(CPMINFO struct matrox_hw_state* hw, struct my_timming* m)
                        break;
                case 16:
                        /* XLATCHCTRL should be _4_1 / _2_1... Why is not? (_2_1 is used everytime) */
-                       hw->DACreg[POS3026_XTRUECOLORCTRL] = (ACCESS_FBINFO(curr.var.green.length) == 5)? (TVP3026_XTRUECOLORCTRL_DIRECTCOLOR | TVP3026_XTRUECOLORCTRL_ORGB_1555 ) : (TVP3026_XTRUECOLORCTRL_DIRECTCOLOR | TVP3026_XTRUECOLORCTRL_RGB_565);
+                       hw->DACreg[POS3026_XTRUECOLORCTRL] = (p->var.green.length == 5)? (TVP3026_XTRUECOLORCTRL_DIRECTCOLOR | TVP3026_XTRUECOLORCTRL_ORGB_1555 ) : (TVP3026_XTRUECOLORCTRL_DIRECTCOLOR | TVP3026_XTRUECOLORCTRL_RGB_565);
                        hw->DACreg[POS3026_XMUXCTRL] = muxctrl | TVP3026_XMUXCTRL_PIXEL_16BIT;
                        hw->DACreg[POS3026_XCLKCTRL] = TVP3026_XCLKCTRL_SRC_PLL | TVP3026_XCLKCTRL_DIV2;
                        break;
@@ -3108,8 +3429,9 @@ static int Ti3026_init(CPMINFO struct matrox_hw_state* hw, struct my_timming* m)
                        break;
                default:
                        return 1;       /* TODO: failed */
+               }
        }
-       if (vgaHWinit(PMINFO hw, m)) return 1;
+       if (vgaHWinit(PMINFO hw, m, p)) return 1;
 
        /* set SYNC */
        hw->MiscOutReg = 0xCB;
@@ -3135,10 +3457,10 @@ static int Ti3026_init(CPMINFO struct matrox_hw_state* hw, struct my_timming* m)
 
        /* set interleaving */
        hw->MXoptionReg &= ~0x00001000;
-       if (isInterleave(MINFO)) hw->MXoptionReg |= 0x00001000;
+       if ((p->type != FB_TYPE_TEXT) && isInterleave(MINFO)) hw->MXoptionReg |= 0x00001000;
 
        /* set DAC */
-       Ti3026_setpclk(PMINFO hw, m->pixclock, ACCESS_FBINFO(curr.final_bppShift));
+       Ti3026_setpclk(PMINFO hw, m->pixclock, p);
        return 0;
 }
 #endif /* CONFIG_FB_MATROX_MILLENIUM */
@@ -3148,6 +3470,10 @@ static int matroxfb_get_cmap_len(struct fb_var_screeninfo *var) {
        DBG("matroxfb_get_cmap_len")
 
        switch (var->bits_per_pixel) {
+#ifdef FBCON_HAS_VGATEXT
+               case 0:
+                       return 16;      /* pseudocolor... 16 entries HW palette */
+#endif
 #ifdef FBCON_HAS_CFB4
                case 4:
                        return 16;      /* pseudocolor... 16 entries HW palette */
@@ -3175,16 +3501,17 @@ static int matroxfb_get_cmap_len(struct fb_var_screeninfo *var) {
        return 16;      /* return something reasonable... or panic()? */
 }
 
-static int matroxfb_decode_var(CPMINFO struct fb_var_screeninfo *var, int *visual, int *video_cmap_len) {
+static int matroxfb_decode_var(CPMINFO struct display* p, struct fb_var_screeninfo *var, int *visual, int *video_cmap_len, unsigned int* ydstorg) {
        unsigned int vramlen;
        unsigned int memlen;
 
        DBG("matroxfb_decode_var")
        
-       if ((var->xres > var->xres_virtual) || (var->yres > var->yres_virtual) || 
-           (var->xoffset > var->xres_virtual) || (var->yoffset > var->yres_virtual))
-               return -EINVAL;
        switch (var->bits_per_pixel) {
+#ifdef FBCON_HAS_VGATEXT
+               case 0:  if (!ACCESS_FBINFO(capable.text)) return -EINVAL;
+                        break;
+#endif
 #ifdef FBCON_HAS_CFB4
                case 4:  if (!ACCESS_FBINFO(capable.cfb4)) return -EINVAL;
                         break;
@@ -3203,40 +3530,74 @@ static int matroxfb_decode_var(CPMINFO struct fb_var_screeninfo *var, int *visua
 #endif
                default: return -EINVAL;
        }
+       *ydstorg = 0;
        vramlen = ACCESS_FBINFO(video.len_usable);
-       var->xres_virtual = matroxfb_pitch_adjust(PMINFO var->xres_virtual, var->bits_per_pixel);
-       memlen = var->xres_virtual * var->bits_per_pixel * var->yres_virtual / 8;
-       if (memlen > vramlen) 
-               return -EINVAL; /* out of memory */
-       /* There is hardware bug that no line can cross 4MB boundary */
-       /* give up for CFB24, it is impossible to easy workaround it */
-       /* for other try to do something */
-       if (!ACCESS_FBINFO(capable.cross4MB) && (memlen > 0x400000) && (var->bits_per_pixel != 24)) {
-               int new_xres = var->xres_virtual;
-
-               if (new_xres <= 512)
-                       new_xres = 512;
-               else if (new_xres <= 1024)
-                       new_xres = 1024;
-               else if (new_xres <= 2048)
-                       new_xres = 2048;
-               else
-                       new_xres = var->xres_virtual;
-               memlen = new_xres * var->bits_per_pixel / 8;
-               /* if now out of memory, try shrink virtual height */
-               /* but if new virtual height is smaller than visible height, return -EINVAL */
-               if (var->yres_virtual * memlen > vramlen) {
-                       unsigned int new_yres;
-
-                       new_yres = vramlen / memlen;
-                       if (new_yres < var->yres)
-                               return -EINVAL;
-                       var->yres_virtual = new_yres;
+       if (var->bits_per_pixel) {
+               var->xres_virtual = matroxfb_pitch_adjust(PMINFO var->xres_virtual, var->bits_per_pixel);
+               memlen = var->xres_virtual * var->bits_per_pixel * var->yres_virtual / 8;
+               if (memlen > vramlen) {
+                       var->yres_virtual = vramlen * 8 / (var->xres_virtual * var->bits_per_pixel);
+                       memlen = var->xres_virtual * var->bits_per_pixel * var->yres_virtual / 8;
+               }
+               /* There is hardware bug that no line can cross 4MB boundary */
+               /* give up for CFB24, it is impossible to easy workaround it */
+               /* for other try to do something */
+               if (!ACCESS_FBINFO(capable.cross4MB) && (memlen > 0x400000)) {
+                       if (var->bits_per_pixel == 24) {
+                               /* sorry */
+                       } else {
+                               unsigned int linelen;
+                               unsigned int m1 = linelen = var->xres_virtual * var->bits_per_pixel / 8;
+                               unsigned int m2 = PAGE_SIZE;    /* or 128 if you do not need PAGE ALIGNED address */
+                               unsigned int max_yres;
+
+                               while (m1) {
+                                       int t;
+
+                                       while (m2 >= m1) m2 -= m1;
+                                       t = m1;
+                                       m1 = m2;
+                                       m2 = t;
+                               }
+                               m2 = linelen * PAGE_SIZE / m2;
+                               *ydstorg = m2 = 0x400000 % m2;
+                               max_yres = (vramlen - m2) / linelen;
+                               if (var->yres_virtual > max_yres)
+                                       var->yres_virtual = max_yres;
+                       }
                }
-               var->xres_virtual = new_xres;
+       } else {
+               matrox_text_round(PMINFO var, p);
+#if 0
+/* we must limit pixclock by mclk... 
+   Millenium I:    66 MHz = 15000
+   Millenium II:   61 MHz = 16300
+   Millenium G200: 83 MHz = 12000 */
+               if (var->pixclock < 15000)
+                       var->pixclock = 15000;  /* limit for "normal" gclk & mclk */
+#endif
        }
 
-       if (var->bits_per_pixel == 4) {
+       if (var->yres_virtual < var->yres)
+               var->yres = var->yres_virtual;
+       if (var->xres_virtual < var->xres)
+               var->xres = var->xres_virtual;
+       if (var->xoffset + var->xres > var->xres_virtual)
+               var->xoffset = var->xres_virtual - var->xres;
+       if (var->yoffset + var->yres > var->yres_virtual)
+               var->yoffset = var->yres_virtual - var->yres;
+
+       if (var->bits_per_pixel == 0) {
+               var->red.offset = 0;
+               var->red.length = 6;
+               var->green.offset = 0;
+               var->green.length = 6;
+               var->blue.offset = 0;
+               var->blue.length = 6;
+               var->transp.offset = 0;
+               var->transp.length = 0;
+               *visual = MX_VISUAL_PSEUDOCOLOR;
+       } else if (var->bits_per_pixel == 4) {
                var->red.offset = 0;
                var->red.length = 8;
                var->green.offset = 0;
@@ -3425,6 +3786,8 @@ __initfunc(static void ti3026_ramdac_init(WPMINFO struct matrox_hw_state* hw)) {
        ACCESS_FBINFO(features.pll.in_div_min)   = 2;
        ACCESS_FBINFO(features.pll.in_div_max)   = 63;
        ACCESS_FBINFO(features.pll.post_shift_max) = 3;
+       if (ACCESS_FBINFO(devflags.noinit))
+               return;
        ti3026_setMCLK(PMINFO hw, 60000);
 }
 #endif
@@ -3458,7 +3821,7 @@ __initfunc(static void MGA1064_ramdac_init(WPMINFO struct matrox_hw_state* hw))
        DBG("MGA1064_ramdac_init");
 
        /* ACCESS_FBINFO(features.DAC1064.vco_freq_min) = 120000; */
-       ACCESS_FBINFO(features.pll.vco_freq_min) = 50000; 
+       ACCESS_FBINFO(features.pll.vco_freq_min) = 62000; 
        ACCESS_FBINFO(features.pll.ref_freq)     = 14318;
        ACCESS_FBINFO(features.pll.feed_div_min) = 100;
        ACCESS_FBINFO(features.pll.feed_div_max) = 127;
@@ -3477,10 +3840,13 @@ __initfunc(static int MGA1064_preinit(WPMINFO struct matrox_hw_state* hw)) {
        DBG("MGA1064_preinit")
 
        /* ACCESS_FBINFO(capable.cfb4) = 0; ... preinitialized by 0 */
+       ACCESS_FBINFO(capable.text) = 1;
        ACCESS_FBINFO(capable.vxres) = vxres_mystique;
        ACCESS_FBINFO(features.accel.has_cacheflush) = 1;
        ACCESS_FBINFO(cursor.timer.function) = matroxfb_DAC1064_flashcursor;
 
+       if (ACCESS_FBINFO(devflags.noinit)) 
+               return 0;       /* do not modify settings */
        hw->MXoptionReg &= 0xC0000100;
        hw->MXoptionReg |= 0x00094E20;
        if (ACCESS_FBINFO(devflags.novga))
@@ -3513,8 +3879,9 @@ __initfunc(static void MGA1064_reset(WPMINFO struct matrox_hw_state* hw)) {
 
 #ifdef CONFIG_FB_MATROX_G100
 /* BIOS environ */
-static int x7AF4 = 0;    /* flags */
-#if 0
+static int x7AF4 = 0x10;    /* flags, maybe 0x10 = SDRAM, 0x00 = SGRAM??? */
+                       /* G100 wants 0x10, G200 SGRAM does not care... */
+#if 0 
 static int def50 = 0;  /* reg50, & 0x0F, & 0x3000 (only 0x0000, 0x1000, 0x2000 (0x3000 disallowed and treated as 0) */
 #endif
 
@@ -3525,7 +3892,8 @@ __initfunc(static void MGAG100_progPixClock(CPMINFO int flags, int m, int n, int
 
        DBG("MGAG100_progPixClock")
        
-       outDAC1064(PMINFO M1064_XPIXCLKCTRL, inDAC1064(PMINFO M1064_XPIXCLKCTRL) | M1064_XPIXCLKCTRL_DIS);
+       outDAC1064(PMINFO M1064_XPIXCLKCTRL, inDAC1064(PMINFO M1064_XPIXCLKCTRL) | M1064_XPIXCLKCTRL_DIS |
+                  M1064_XPIXCLKCTRL_PLL_UP);
        switch (flags & 3) {
                case 0:         reg = M1064_XPIXPLLAM; break;
                case 1:         reg = M1064_XPIXPLLBM; break;
@@ -3544,9 +3912,11 @@ __initfunc(static void MGAG100_progPixClock(CPMINFO int flags, int m, int n, int
                default:        selClk |= 0x0C; break;
        }
        mga_outb(M_MISC_REG, selClk);
-       for (clk = 65536; clk; clk--)
+       for (clk = 500000; clk; clk--) {
                if (inDAC1064(PMINFO M1064_XPIXPLLSTAT) & 0x40)
                        break;
+               udelay(10);
+       };
        if (!clk)
                printk(KERN_ERR "matroxfb: Pixel PLL%c not locked after usual time\n", (reg-M1064_XPIXPLLAM-2)/4 + 'A');
        selClk = inDAC1064(PMINFO M1064_XPIXCLKCTRL) & ~M1064_XPIXCLKCTRL_SRC_MASK;
@@ -3572,20 +3942,23 @@ __initfunc(static int MGAG100_preinit(WPMINFO struct matrox_hw_state* hw)) {
        static const int vxres_g100[] = {  512,        640, 768,  800,  832,  960, 
                                           1024, 1152, 1280,      1600, 1664, 1920, 
                                           2048, 0};
+        u_int32_t reg50;
 #if 0
-       u_int32_t reg50;
        u_int32_t q;
 #endif
 
        DBG("MGAG100_preinit")
        
        /* ACCESS_FBINFO(capable.cfb4) = 0; ... preinitialized by 0 */
+       ACCESS_FBINFO(capable.text) = 1;
        ACCESS_FBINFO(capable.vxres) = vxres_g100;
        ACCESS_FBINFO(features.accel.has_cacheflush) = 1;
        ACCESS_FBINFO(cursor.timer.function) = matroxfb_DAC1064_flashcursor;
-       
+
+       if (ACCESS_FBINFO(devflags.noinit))
+               return 0;
        hw->MXoptionReg &= 0xC0000100;
-       hw->MXoptionReg |= 0x00078C20;
+       hw->MXoptionReg |= 0x00078020;
        if (ACCESS_FBINFO(devflags.novga))
                hw->MXoptionReg &= ~0x00000100;
        if (ACCESS_FBINFO(devflags.nobios))
@@ -3593,36 +3966,49 @@ __initfunc(static int MGAG100_preinit(WPMINFO struct matrox_hw_state* hw)) {
        if (ACCESS_FBINFO(devflags.nopciretry))
                hw->MXoptionReg |=  0x20000000;
        pci_write_config_dword(ACCESS_FBINFO(pcidev), PCI_OPTION_REG, hw->MXoptionReg);
-
-       mga_outl(M_CTLWTST, 0x03258A31);        /* 03258A31 is x7AF0, default is 0x02032521 */
-#if 0
-       hw->MXoptionReg |= 0x1000;
-       pci_write_config_dword(ACCESS_FBINFO(pcidev), PCI_OPTION_REG, hw->MXoptionReg);
        pci_read_config_dword(ACCESS_FBINFO(pcidev), 0x50, &reg50);
-       q = def50 & 0x3000;
-       reg50 = (reg50 & ~0x3000) | q;
+       reg50 &= ~0x3000;
        pci_write_config_dword(ACCESS_FBINFO(pcidev), 0x50, reg50);
-       mga_outb(0x1C05, 0x00);
-       mga_outb(0x1C05, 0x80);
-       udelay(100);
-       mga_outb(0x1C05, 0x40);
-       mga_outb(0x1C05, 0xC0);
-       pci_write_config_byte(ACCESS_FBINFO(pcidev), 0x50, def50 & 0x0F);
-       {
+       if (!(x7AF4 & 0x10))
+               hw->MXoptionReg |= 0x4000;
+       if (ACCESS_FBINFO(devflags.accelerator) == FB_ACCEL_MATROX_MGAG100) {
+               hw->MXoptionReg |= 0x1080;
+               pci_write_config_dword(ACCESS_FBINFO(pcidev), PCI_OPTION_REG, hw->MXoptionReg);
+               mga_outl(M_CTLWTST, 0x01032521);
+               /* mga_outl(M_CTLWTST, 0x03258A31); */ 
+               udelay(100);
+               mga_outb(0x1C05, 0x00);
+               mga_outb(0x1C05, 0x80);
+               udelay(100);
+               mga_outb(0x1C05, 0x40);
+               mga_outb(0x1C05, 0xC0);
+               udelay(100);
+               reg50 &= ~0xFF;
+               reg50 |=  0x07;
+               pci_write_config_dword(ACCESS_FBINFO(pcidev), 0x50, reg50);
+               /* it should help with G100 */
                mga_outb(M_GRAPHICS_INDEX, 6);
                mga_outb(M_GRAPHICS_DATA, (mga_inb(M_GRAPHICS_DATA) & 3) | 4);
                mga_setr(M_EXTVGA_INDEX, 0x03, 0x81);
                mga_setr(M_EXTVGA_INDEX, 0x04, 0x00);
-               mga_writeb(ACCESS_FBINFO(video.vbase), 0x000, 0xAA);
-               mga_writeb(ACCESS_FBINFO(video.vbase), 0x800, 0x55);
-               if (mga_readb(ACCESS_FBINFO(video.vbase), 0x000) != 0xAA) {
+               mga_writeb(ACCESS_FBINFO(video.vbase), 0x0000, 0xAA);
+               mga_writeb(ACCESS_FBINFO(video.vbase), 0x0800, 0x55);
+               mga_writeb(ACCESS_FBINFO(video.vbase), 0x4000, 0x55);
+               if (mga_readb(ACCESS_FBINFO(video.vbase), 0x0000) != 0xAA) {
                        hw->MXoptionReg &= ~0x1000;
                }
+       } else {
+               hw->MXoptionReg |= 0x00000C00;
+               mga_outl(M_CTLWTST, 0x042450A1);
+               mga_outb(0x1E47, 0x00);
+               mga_outb(0x1E46, 0x00);
+               udelay(10);
+               mga_outb(0x1C05, 0x00);
+               mga_outb(0x1C05, 0x80);
+               udelay(100);
+               mga_outw(0x1E44, 0x0108);
        }
-#endif
        hw->MXoptionReg = (hw->MXoptionReg & ~0x1F8000) | 0x78000;
-       if (!(x7AF4 & 0x10))
-               hw->MXoptionReg |= 0x4000;
        pci_write_config_dword(ACCESS_FBINFO(pcidev), PCI_OPTION_REG, hw->MXoptionReg);
        return 0;
 }
@@ -3631,8 +4017,9 @@ __initfunc(static void MGAG100_reset(WPMINFO struct matrox_hw_state* hw)) {
        u_int8_t b;
 
        DBG("MGAG100_reset")
-       
-       ACCESS_FBINFO(features.pll.vco_freq_min) = 50000;
+
+       /* there are some instabilities if in_div > 19 && vco < 61000 */
+       ACCESS_FBINFO(features.pll.vco_freq_min) = 62000;
        ACCESS_FBINFO(features.pll.ref_freq)     = 27000;
        ACCESS_FBINFO(features.pll.feed_div_min) = 7;
        ACCESS_FBINFO(features.pll.feed_div_max) = 127;
@@ -3658,13 +4045,17 @@ __initfunc(static void MGAG100_reset(WPMINFO struct matrox_hw_state* hw)) {
                        pci_write_config_byte(ibm, PCI_IO_LIMIT, 0x00); /* ??? */
                }
 #endif
-               if (x7AF4 & 8) {
-                       hw->MXoptionReg |= 0x40;
-                       pci_write_config_dword(ACCESS_FBINFO(pcidev), PCI_OPTION_REG, hw->MXoptionReg);
+               if (!ACCESS_FBINFO(devflags.noinit)) {
+                       if (x7AF4 & 8) {
+                               hw->MXoptionReg |= 0x40;
+                               pci_write_config_dword(ACCESS_FBINFO(pcidev), PCI_OPTION_REG, hw->MXoptionReg);
+                       }
+                       mga_setr(M_EXTVGA_INDEX, 0x06, 0x50);
                }
-               mga_setr(M_EXTVGA_INDEX, 0x06, 0x50);
        }
-       DAC1064_setmclk(PMINFO hw, DAC1064_OPT_SCLK_PLL, 120000);
+       DAC1064_setmclk(PMINFO hw, DAC1064_OPT_RESERVED | DAC1064_OPT_MDIV2 | DAC1064_OPT_GDIV1 | DAC1064_OPT_SCLK_PLL, 133333);
+       if (ACCESS_FBINFO(devflags.noinit))
+               return;
        MGAG100_setPixClock(PMINFO 4, 25175);
        MGAG100_setPixClock(PMINFO 5, 28322);
        if (x7AF4 & 0x10) {
@@ -3726,6 +4117,7 @@ static int matrox_setcolreg(unsigned regno, unsigned red, unsigned green,
                            unsigned blue, unsigned transp,
                            struct fb_info *fb_info)
 {
+       struct display* p;
 #ifdef CONFIG_FB_MATROX_MULTIHEAD
        struct matrox_fb_info* minfo = (struct matrox_fb_info*)fb_info;
 #endif
@@ -3747,18 +4139,22 @@ static int matrox_setcolreg(unsigned regno, unsigned red, unsigned green,
        ACCESS_FBINFO(palette[regno].blue)  = blue;
        ACCESS_FBINFO(palette[regno].transp) = transp;
 
-       if (ACCESS_FBINFO(curr.var.grayscale)) {
+       p = ACCESS_FBINFO(currcon_display);
+       if (p->var.grayscale) {
                /* gray = 0.30*R + 0.59*G + 0.11*B */
                red = green = blue = (red * 77 + green * 151 + blue * 28) >> 8;
        }
 
-       red = CNVT_TOHW(red, ACCESS_FBINFO(curr.var.red.length));
-       green = CNVT_TOHW(green, ACCESS_FBINFO(curr.var.green.length));
-       blue = CNVT_TOHW(blue, ACCESS_FBINFO(curr.var.blue.length));
-       transp = CNVT_TOHW(transp, ACCESS_FBINFO(curr.var.transp.length));
+       red = CNVT_TOHW(red, p->var.red.length);
+       green = CNVT_TOHW(green, p->var.green.length);
+       blue = CNVT_TOHW(blue, p->var.blue.length);
+       transp = CNVT_TOHW(transp, p->var.transp.length);
 
-       switch (ACCESS_FBINFO(curr.var.bits_per_pixel)) {
-#if defined(FBCON_HAS_CFB8) || defined(FBCON_HAS_CFB4)
+       switch (p->var.bits_per_pixel) {
+#if defined(FBCON_HAS_CFB8) || defined(FBCON_HAS_CFB4) || defined(FBCON_HAS_VGATEXT)
+#ifdef FBCON_HAS_VGATEXT
+       case 0:
+#endif
 #ifdef FBCON_HAS_CFB4
        case 4:
 #endif
@@ -3774,45 +4170,37 @@ static int matrox_setcolreg(unsigned regno, unsigned red, unsigned green,
 #ifdef FBCON_HAS_CFB16 
        case 16:
                ACCESS_FBINFO(cmap.cfb16[regno]) =
-                       (red << ACCESS_FBINFO(curr.var.red.offset))     | 
-                       (green << ACCESS_FBINFO(curr.var.green.offset)) | 
-                       (blue << ACCESS_FBINFO(curr.var.blue.offset))   |
-                       (transp << ACCESS_FBINFO(curr.var.transp.offset)); /* for 1:5:5:5 */
+                       (red << p->var.red.offset)     | 
+                       (green << p->var.green.offset) | 
+                       (blue << p->var.blue.offset)   |
+                       (transp << p->var.transp.offset); /* for 1:5:5:5 */
                break;
 #endif
 #ifdef FBCON_HAS_CFB24
        case 24:
                ACCESS_FBINFO(cmap.cfb24[regno]) =
-                       (red   << ACCESS_FBINFO(curr.var.red.offset))   |
-                       (green << ACCESS_FBINFO(curr.var.green.offset)) |
-                       (blue  << ACCESS_FBINFO(curr.var.blue.offset));
+                       (red   << p->var.red.offset)   |
+                       (green << p->var.green.offset) |
+                       (blue  << p->var.blue.offset);
                break;
 #endif
 #ifdef FBCON_HAS_CFB32
        case 32:
                ACCESS_FBINFO(cmap.cfb32[regno]) =
-                       (red   << ACCESS_FBINFO(curr.var.red.offset))   |
-                       (green << ACCESS_FBINFO(curr.var.green.offset)) |
-                       (blue  << ACCESS_FBINFO(curr.var.blue.offset))  |
-                       (transp << ACCESS_FBINFO(curr.var.transp.offset));      /* 8:8:8:8 */
+                       (red   << p->var.red.offset)   |
+                       (green << p->var.green.offset) |
+                       (blue  << p->var.blue.offset)  |
+                       (transp << p->var.transp.offset);       /* 8:8:8:8 */
                break;
 #endif
        }
        return 0;
 }
 
-static void do_install_cmap(WPMINFO int con)
+static void do_install_cmap(WPMINFO struct display* dsp)
 {
-       struct display* dsp;
-
        DBG("do_install_cmap")
 
-       if (con != ACCESS_FBINFO(currcon))
-               return;
-       if (con >= 0)
-               dsp = fb_display+con;
-       else
-               dsp = ACCESS_FBINFO(fbcon.disp);
        if (dsp->cmap.len)
                fb_set_cmap(&dsp->cmap, 1, matrox_setcolreg, &ACCESS_FBINFO(fbcon));
        else
@@ -3903,7 +4291,7 @@ static void Ti3026_restore(WPMINFO struct matrox_hw_state* hw, struct matrox_hw_
                outTi3026(PMINFO TVP3026_XPLLADDR, 0x00);
                for (i = 3; i < 6; i++)
                        outTi3026(PMINFO TVP3026_XLOOPPLLDATA, hw->DACclk[i]);
-               if ((hw->MiscOutReg & 0x08) && ((hw->DACclk[3] & 0xC0) == 0xC0)) {
+               if ((hw->MiscOutReg & 0x08) && ((hw->DACclk[5] & 0x80) == 0x80)) {
                        int tmout;
 
                        outTi3026(PMINFO TVP3026_XPLLADDR, 0x3F);
@@ -3919,8 +4307,14 @@ static void Ti3026_restore(WPMINFO struct matrox_hw_state* hw, struct matrox_hw_
                }
        }
        if (p && p->conp) {
-               matroxfb_ti3026_createcursor(PMINFO p);
-               i = matroxfb_fastfont_tryset(PMINFO p);
+               if (p->type == FB_TYPE_TEXT) {
+                       matrox_text_createcursor(PMINFO p);
+                       matrox_text_loadfont(PMINFO p);
+                       i = 0;
+               } else {
+                       matroxfb_ti3026_createcursor(PMINFO p);
+                       i = matroxfb_fastfont_tryset(PMINFO p);
+               }
        } else
                i = 0;
        if (i) {
@@ -3946,21 +4340,28 @@ static void Ti3026_restore(WPMINFO struct matrox_hw_state* hw, struct matrox_hw_
 static int matroxfb_get_fix(struct fb_fix_screeninfo *fix, int con,
                         struct fb_info *info)
 {
-
+       struct display* p;
        DBG("matroxfb_get_fix")
 
 #define minfo ((struct matrox_fb_info*)info)
+
+       if (con >= 0)
+               p = fb_display + con;
+       else
+               p = ACCESS_FBINFO(fbcon.disp);
+
        memset(fix, 0, sizeof(struct fb_fix_screeninfo));
        strcpy(fix->id,"MATROX");
 
-       fix->smem_start = (void*)ACCESS_FBINFO(video.base);
-       fix->smem_len = ACCESS_FBINFO(video.len);
-       fix->type = ACCESS_FBINFO(curr.video_type);
-       fix->visual = ACCESS_FBINFO(curr.visual);
+       fix->smem_start = (void*)ACCESS_FBINFO(video.base) + ACCESS_FBINFO(curr.ydstorg.bytes);
+       fix->smem_len = ACCESS_FBINFO(video.len) - ACCESS_FBINFO(curr.ydstorg.bytes);
+       fix->type = p->type;
+       fix->type_aux = p->type_aux;
+       fix->visual = p->visual;
        fix->xpanstep = 8; /* 8 for 8bpp, 4 for 16bpp, 2 for 32bpp */
        fix->ypanstep = 1;
        fix->ywrapstep = 0;
-       fix->line_length = (ACCESS_FBINFO(curr.var.xres_virtual) * ACCESS_FBINFO(curr.var.bits_per_pixel)) >> 3;
+       fix->line_length = p->line_length;
        fix->mmio_start = (void*)ACCESS_FBINFO(mmio.base);
        fix->mmio_len = ACCESS_FBINFO(mmio.len);
        fix->accel = ACCESS_FBINFO(devflags.accelerator);
@@ -3971,14 +4372,15 @@ static int matroxfb_get_fix(struct fb_fix_screeninfo *fix, int con,
 static int matroxfb_get_var(struct fb_var_screeninfo *var, int con,
                         struct fb_info *info)
 {
-
+#define minfo ((struct matrox_fb_info*)info)
        DBG("matroxfb_get_var")
        
        if(con < 0)
-               *var=ACCESS_FBINFO2(info, curr.var);
+               *var=ACCESS_FBINFO(fbcon.disp)->var;
        else
                *var=fb_display[con].var;
        return 0;
+#undef minfo
 }
 
 static int matroxfb_set_var(struct fb_var_screeninfo *var, int con,
@@ -3988,12 +4390,17 @@ static int matroxfb_set_var(struct fb_var_screeninfo *var, int con,
        int err;
        int visual;
        int cmap_len;
+       unsigned int ydstorg;
        struct display* display;
        int chgvar;
 
        DBG("matroxfb_set_var")
 
-       if ((err = matroxfb_decode_var(PMINFO var, &visual, &cmap_len)) != 0) 
+       if (con >= 0)
+               display = fb_display + con;
+       else
+               display = ACCESS_FBINFO(fbcon.disp);
+       if ((err = matroxfb_decode_var(PMINFO display, var, &visual, &cmap_len, &ydstorg)) != 0) 
                return err;
        switch (var->activate & FB_ACTIVATE_MASK) {
                case FB_ACTIVATE_TEST:  return 0;
@@ -4002,7 +4409,6 @@ static int matroxfb_set_var(struct fb_var_screeninfo *var, int con,
                default:                return -EINVAL; /* unknown */
        }
        if (con >= 0) {
-               display = fb_display+con;
                chgvar = ((display->var.xres != var->xres) || 
                    (display->var.yres != var->yres) || 
                     (display->var.xres_virtual != var->xres_virtual) ||
@@ -4012,18 +4418,23 @@ static int matroxfb_set_var(struct fb_var_screeninfo *var, int con,
                    memcmp(&display->var.green, &var->green, sizeof(var->green)) ||
                    memcmp(&display->var.blue, &var->blue, sizeof(var->blue)));
        } else {
-               display = ACCESS_FBINFO(fbcon.disp);
                chgvar = 0;
        }
        display->var = *var;
        /* cmap */
-       display->screen_base = vaddr_va(ACCESS_FBINFO(video.vbase));
+       display->screen_base = vaddr_va(ACCESS_FBINFO(video.vbase)) + ydstorg;
        display->visual = visual;
-       display->type = FB_TYPE_PACKED_PIXELS;
-       display->type_aux = 0;
        display->ypanstep = 1;
        display->ywrapstep = 0;
-       display->next_line = display->line_length = (var->xres_virtual * var->bits_per_pixel) >> 3;
+       if (var->bits_per_pixel) {
+               display->type = FB_TYPE_PACKED_PIXELS;
+               display->type_aux = 0;
+               display->next_line = display->line_length = (var->xres_virtual * var->bits_per_pixel) >> 3;
+       } else {
+               display->type = FB_TYPE_TEXT;
+               display->type_aux = ACCESS_FBINFO(devflags.text_type_aux);
+               display->next_line = display->line_length = (var->xres_virtual / (fontwidth(display)?fontwidth(display):8)) * ACCESS_FBINFO(devflags.textstep);
+       }
        display->can_soft_blank = 1;
        display->inverse = ACCESS_FBINFO(devflags.inverse);
        /* conp, fb_info, vrows, cursor_x, cursor_y, fgcol, bgcol */
@@ -4036,9 +4447,21 @@ static int matroxfb_set_var(struct fb_var_screeninfo *var, int con,
        if (con == ACCESS_FBINFO(currcon)) {
                unsigned int pos;
 
-               ACCESS_FBINFO(curr.var) = *var;
-               ACCESS_FBINFO(curr.visual) = visual;
                ACCESS_FBINFO(curr.cmap_len) = cmap_len;
+               if (display->type == FB_TYPE_TEXT) {
+                       /* textmode must be in first megabyte, so no ydstorg allowed */
+                       ACCESS_FBINFO(curr.ydstorg.bytes) = 0;
+                       ACCESS_FBINFO(curr.ydstorg.chunks) = 0;
+                       ACCESS_FBINFO(curr.ydstorg.pixels) = 0;
+               } else {
+                       ydstorg += ACCESS_FBINFO(devflags.ydstorg);
+                       ACCESS_FBINFO(curr.ydstorg.bytes) = ydstorg;
+                       ACCESS_FBINFO(curr.ydstorg.chunks) = ydstorg >> (isInterleave(MINFO)?3:2);
+                       if (var->bits_per_pixel == 4)
+                               ACCESS_FBINFO(curr.ydstorg.pixels) = ydstorg;
+                       else
+                               ACCESS_FBINFO(curr.ydstorg.pixels) = (ydstorg * 8) / var->bits_per_pixel;
+               }
                ACCESS_FBINFO(curr.final_bppShift) = matroxfb_get_final_bppShift(PMINFO var->bits_per_pixel);
                if (visual == MX_VISUAL_PSEUDOCOLOR) {
                        int i;
@@ -4070,24 +4493,27 @@ static int matroxfb_set_var(struct fb_var_screeninfo *var, int con,
                        del_timer(&ACCESS_FBINFO(cursor.timer));
                        ACCESS_FBINFO(cursor.state) = CM_ERASE;
 
-                       ACCESS_FBINFO(hw_switch->init(PMINFO hw, &mt));
-                       pos = (var->yoffset * var->xres_virtual + var->xoffset) * ACCESS_FBINFO(curr.final_bppShift) / 32;
-                       if (mga_ydstorg(MINFO)) {
-                               if (isInterleave(MINFO))
-                                       pos += mga_ydstorg(MINFO) >> 3;
+                       ACCESS_FBINFO(hw_switch->init(PMINFO hw, &mt, display));
+                       if (display->type == FB_TYPE_TEXT) {
+                               if (fontheight(display))
+                                       pos = var->yoffset / fontheight(display) * display->next_line / ACCESS_FBINFO(devflags.textstep) + var->xoffset / (fontwidth(display)?fontwidth(display):8);
                                else
-                                       pos += mga_ydstorg(MINFO) >> 2;
+                                       pos = 0;
+                       } else {
+                               pos = (var->yoffset * var->xres_virtual + var->xoffset) * ACCESS_FBINFO(curr.final_bppShift) / 32;
+                               pos += ACCESS_FBINFO(curr.ydstorg.chunks);
                        }
 
                        hw->CRTC[0x0D] = pos & 0xFF;
                        hw->CRTC[0x0C] = (pos & 0xFF00) >> 8;
                        hw->CRTCEXT[0] = (hw->CRTCEXT[0] & 0xF0) | ((pos >> 16) & 0x0F);
                        ACCESS_FBINFO(hw_switch->restore(PMINFO hw, ohw, display));
+                       ACCESS_FBINFO(cursor.redraw) = 1;
                        ACCESS_FBINFO(currenthw) = hw;
                        ACCESS_FBINFO(newhw) = ohw;
-                       matrox_cfbX_init(MINFO);
-                       do_install_cmap(PMINFO con);
-#if defined(CONFIG_FB_COMPAT_XPMAC)
+                       matrox_cfbX_init(PMINFO display);
+                       do_install_cmap(PMINFO display);
+#if defined(CONFIG_PPC) && defined(CONFIG_FB_COMPAT_XPMAC)
                        if (console_fb_info == &ACCESS_FBINFO(fbcon)) {
                                int vmode, cmode;
 
@@ -4095,19 +4521,17 @@ static int matroxfb_set_var(struct fb_var_screeninfo *var, int con,
                                display_info.height = var->yres;
                                display_info.depth = var->bits_per_pixel;
                                display_info.pitch = (var->xres_virtual)*(var->bits_per_pixel)/8;
-                               if (mac_var_to_vmode(var, &vmode, &cmode)
+                               if (mac_var_to_vmode(var, &vmode, &cmode))
                                        display_info.mode = 0;
                                else
                                        display_info.mode = vmode;
                                strcpy(display_info.name, ACCESS_FBINFO(matrox_name));
                                display_info.fb_address = ACCESS_FBINFO(video.base);
-                               /* we should not expose this addresses outside of driver. Every access to DAC must be
-                                   exclusive locked by spinlock_irq(ACCESS_FBINFO(lock.DAC)) or by turning hardware cursor (flashing) OFF */
-                               display_info.cmap_adr_address = ACCESS_FBINFO(mmio.base) + M_DAC_REG;
-                               display_info.cmap_data_address = ACCESS_FBINFO(mmio.base) + M_DAC_VAL;
+                               display_info.cmap_adr_address = 0;
+                               display_info.cmap_data_address = 0;
                                display_info.disp_reg_address = ACCESS_FBINFO(mmio.base);
                        }
-#endif /* CONFIG_FB_COMPAT_XPMAC */
+#endif /* CONFIG_PPC && CONFIG_FB_COMPAT_XPMAC */
                }
        }
        return 0;
@@ -4141,11 +4565,13 @@ static int matrox_getcolreg(unsigned regno, unsigned *red, unsigned *green,
 static int matroxfb_get_cmap(struct fb_cmap *cmap, int kspc, int con,
                             struct fb_info *info)
 {
-       struct display* dsp = (con < 0) ? info->disp : fb_display+con;
+#define minfo ((struct matrox_fb_info*)info)
+       struct display* dsp = (con < 0) ? ACCESS_FBINFO(fbcon.disp) 
+                                       : fb_display + con;
 
        DBG("matroxfb_get_cmap")
 
-       if (con == ACCESS_FBINFO2(info, currcon)) /* current console? */
+       if (con == ACCESS_FBINFO(currcon)) /* current console? */
                return fb_get_cmap(cmap, kspc, matrox_getcolreg, info);
        else if (dsp->cmap.len) /* non default colormap? */
                fb_copy_cmap(&dsp->cmap, cmap, kspc ? 0 : 2);
@@ -4153,6 +4579,7 @@ static int matroxfb_get_cmap(struct fb_cmap *cmap, int kspc, int con,
                fb_copy_cmap(fb_default_cmap(matroxfb_get_cmap_len(&dsp->var)),
                             cmap, kspc ? 0 : 2);
        return 0;
+#undef minfo
 }
 
 static int matroxfb_set_cmap(struct fb_cmap *cmap, int kspc, int con,
@@ -4160,6 +4587,7 @@ static int matroxfb_set_cmap(struct fb_cmap *cmap, int kspc, int con,
 {
        unsigned int cmap_len;
        struct display* dsp = (con < 0) ? info->disp : (fb_display + con);
+#define minfo ((struct matrox_fb_info*)info)
 
        DBG("matroxfb_set_cmap")
 
@@ -4171,11 +4599,12 @@ static int matroxfb_set_cmap(struct fb_cmap *cmap, int kspc, int con,
                if (err)
                        return err;
        }
-       if (con == ACCESS_FBINFO2(info, currcon))                       /* current console? */
+       if (con == ACCESS_FBINFO(currcon)) {                    /* current console? */
                return fb_set_cmap(cmap, kspc, matrox_setcolreg, info);
-       else
+       else
                fb_copy_cmap(cmap, &dsp->cmap, kspc ? 0 : 1);
        return 0;
+#undef minfo   
 }
 
 static int matroxfb_ioctl(struct inode *inode, struct file *file, 
@@ -4210,8 +4639,8 @@ static int matroxfb_switch(int con, struct fb_info *info)
 
        if (ACCESS_FBINFO(currcon) >= 0) {
                /* Do we have to save the colormap? */
-               cmap = &fb_display[ACCESS_FBINFO2(info, currcon)].cmap;
-               dprintk(KERN_DEBUG "switch1: con = %d, cmap.len = %d\n", ACCESS_FBINFO2(info, currcon), cmap->len);
+               cmap = &(ACCESS_FBINFO(currcon_display)->cmap);
+               dprintk(KERN_DEBUG "switch1: con = %d, cmap.len = %d\n", ACCESS_FBINFO(currcon), cmap->len);
 
                if (cmap->len) {
                        dprintk(KERN_DEBUG "switch1a: %p %p %p %p\n", cmap->red, cmap->green, cmap->blue, cmap->transp);
@@ -4224,7 +4653,7 @@ static int matroxfb_switch(int con, struct fb_info *info)
                }
        }
        ACCESS_FBINFO(currcon) = con;
-       ACCESS_FBINFO(currcon_display) = fb_display+con;
+       ACCESS_FBINFO(currcon_display) = fb_display + con;
        fb_display[con].var.activate = FB_ACTIVATE_NOW;
 #ifdef DEBUG
        cmap = &fb_display[con].cmap;
@@ -4281,7 +4710,11 @@ static void matroxfb_blank(int blank, struct fb_info *info)
 #define RS960x720      8
 #define RS1152x864     9
 #define RS1408x1056    10
-/* B-F */
+#define RS640x350      11
+#define RS1056x344     12      /* 132 x 43 text */
+#define RS1056x400     13      /* 132 x 50 text */
+#define RS1056x480     14      /* 132 x 60 text */
+/* 0F-FF */
 static struct { int xres, yres, left, right, upper, lower, hslen, vslen, vfreq; } timmings[] __initdata = {
        {  640,  400,  48, 16, 39,  8,  96, 2, 70 },
        {  640,  480,  48, 16, 33, 10,  96, 2, 60 },
@@ -4292,27 +4725,35 @@ static struct { int xres, yres, left, right, upper, lower, hslen, vslen, vfreq;
        {  768,  576, 144, 16, 28,  6, 112, 4, 60 },
        {  960,  720, 144, 24, 28,  8, 112, 4, 60 },
        { 1152,  864, 192, 32, 30,  4, 128, 4, 60 },
-       { 1408, 1056, 256, 40, 32,  5, 144, 5, 60 }
+       { 1408, 1056, 256, 40, 32,  5, 144, 5, 60 },
+       {  640,  350,  48, 16, 39,  8,  96, 2, 70 },
+       { 1056,  344,  96, 24, 59, 44, 160, 2, 70 },
+       { 1056,  400,  96, 24, 39,  8, 160, 2, 70 },
+       { 1056,  480,  96, 24, 36, 12, 160, 3, 60 }
 };
 
-#define RSDepth(X)     (((X) >> 4) & 0x0F)
+#define RSDepth(X)     (((X) >> 8) & 0x0F)
 #define RS8bpp         0x1
 #define RS15bpp                0x2
 #define RS16bpp                0x3
 #define RS32bpp                0x4
 #define RS4bpp         0x5
 #define RS24bpp                0x6
-/* 7-F */
+#define RSText         0x7
+#define RSText8                0x8
+/* 9-F */
 static struct { struct fb_bitfield red, green, blue, transp; int bits_per_pixel; } colors[] __initdata = {
        { {  0, 8, 0}, { 0, 8, 0}, { 0, 8, 0}, {  0, 0, 0},  8 },
        { { 10, 5, 0}, { 5, 5, 0}, { 0, 5, 0}, { 15, 1, 0}, 16 },
        { { 11, 5, 0}, { 6, 5, 0}, { 0, 5, 0}, {  0, 0, 0}, 16 },
        { { 16, 8, 0}, { 8, 8, 0}, { 0, 8, 0}, { 24, 8, 0}, 32 },
        { {  0, 8, 0}, { 0, 8, 0}, { 0, 8, 0}, {  0, 0, 0},  4 },
-       { { 16, 8, 0}, { 8, 8, 0}, { 0, 8, 0}, {  0, 0, 0}, 24 }
+       { { 16, 8, 0}, { 8, 8, 0}, { 0, 8, 0}, {  0, 0, 0}, 24 },
+       { {  0, 6, 0}, { 0, 6, 0}, { 0, 6, 0}, {  0, 0, 0},  0 },       /* textmode with (default) VGA8x16 */
+       { {  0, 6, 0}, { 0, 6, 0}, { 0, 6, 0}, {  0, 0, 0},  0 }        /* textmode hardwired to VGA8x8 */
 };
 
-#define RSCreate(X,Y)  ((X) | ((Y) << 4))
+#define RSCreate(X,Y)  ((X) | ((Y) << 8))
 static struct { unsigned int vesa; unsigned int info; } *RSptr, vesamap[] __initdata = {
 /* default must be first */
 #ifdef FBCON_HAS_CFB8
@@ -4328,8 +4769,11 @@ static struct { unsigned int vesa; unsigned int info; } *RSptr, vesamap[] __init
        { 0x11C, RSCreate(RS1600x1200, RS8bpp ) },
 #endif
 #ifdef FBCON_HAS_CFB4
+       { 0x010, RSCreate(RS640x350,   RS4bpp ) },
+       { 0x012, RSCreate(RS640x480,   RS4bpp ) },
        { 0x102, RSCreate(RS800x600,   RS4bpp ) },
        { 0x104, RSCreate(RS1024x768,  RS4bpp ) },
+       { 0x106, RSCreate(RS1280x1024, RS4bpp ) },
 #endif
 #ifdef FBCON_HAS_CFB16
        { 0x110, RSCreate(RS640x480,   RS15bpp) },
@@ -4371,6 +4815,18 @@ static struct { unsigned int vesa; unsigned int info; } *RSptr, vesamap[] __init
        { 0x193, RSCreate(RS1152x864,  RS32bpp) },
        { 0x11B, RSCreate(RS1280x1024, RS32bpp) },
        { 0x19B, RSCreate(RS1408x1056, RS32bpp) },
+       { 0x11F, RSCreate(RS1600x1200, RS32bpp) },
+#endif
+#ifdef FBCON_HAS_VGATEXT
+       { 0x002, RSCreate(RS640x400,   RSText)  },      /* 80x25 */
+       { 0x003, RSCreate(RS640x400,   RSText)  },      /* 80x25 */
+       { 0x007, RSCreate(RS640x400,   RSText)  },      /* 80x25 */
+       { 0x1C0, RSCreate(RS640x400,   RSText8) },      /* 80x50 */
+       { 0x108, RSCreate(RS640x480,   RSText8) },      /* 80x60 */
+       { 0x109, RSCreate(RS1056x400,  RSText)  },      /* 132x25 */
+       { 0x10A, RSCreate(RS1056x344,  RSText8) },      /* 132x43 */
+       { 0x10B, RSCreate(RS1056x400,  RSText8) },      /* 132x50 */
+       { 0x10C, RSCreate(RS1056x480,  RSText8) },      /* 132x60 */
 #endif
        {     0, 0                                 }};
 
@@ -4385,6 +4841,7 @@ static int nopan = 0;                     /* "matrox:nopan" */
 static int no_pci_retry = 0;           /* "matrox:nopciretry" */
 static int novga = 0;                  /* "matrox:novga" */
 static int nobios = 0;                 /* "matrox:nobios" */
+static int noinit = 0;                 /* "matrox:noinit" */
 static int inverse = 0;                        /* "matrox:inverse" */
 static int hwcursor = 1;               /* "matrox:nohwcursor" */
 static int blink = 1;                  /* "matrox:noblink" */
@@ -4392,7 +4849,7 @@ static int grayscale = 0;         /* "matrox:grayscale" */
 static unsigned int fastfont = 0;      /* "matrox:fastfont:xxxxx" */
 static int dev = -1;                   /* "matrox:dev:xxxxx" */
 static unsigned int vesa = 0x101;      /* "matrox:vesa:xxxxx" */
-static unsigned int depth = 0;         /* "matrox:depth:xxxxx" */
+static int depth = -1;                 /* "matrox:depth:xxxxx" */
 static unsigned int xres = 0;          /* "matrox:xres:xxxxx" */
 static unsigned int yres = 0;          /* "matrox:yres:xxxxx" */
 static unsigned int upper = 0;         /* "matrox:upper:xxxxx" */
@@ -4428,6 +4885,7 @@ __initfunc(void matroxfb_setup(char *options, int *ints)) {
                        dev = simple_strtoul(this_opt+4, NULL, 0);
                else if (!strncmp(this_opt, "depth:", 6)) {
                        switch (simple_strtoul(this_opt+6, NULL, 0)) {
+                               case 0: depth = RSText; break;
                                case 4: depth = RS4bpp; break;
                                case 8: depth = RS8bpp; break;
                                case 15:depth = RS15bpp; break;
@@ -4496,6 +4954,8 @@ __initfunc(void matroxfb_setup(char *options, int *ints)) {
                                novga = !value;
                        else if (!strcmp(this_opt, "bios"))
                                nobios = !value;
+                       else if (!strcmp(this_opt, "init"))
+                               noinit = !value;
                        else if (!strcmp(this_opt, "inv24"))
                                inv24 = value;
                        else if (!strcmp(this_opt, "cross4MB"))
@@ -4533,7 +4993,7 @@ __initfunc(static int matroxfb_getmemory(WPMINFO unsigned int maxSize, unsigned
        /* at least 2MB */
        if (maxSize < 0x0200000) return 0;
        if (maxSize > 0x1000000) maxSize = 0x1000000;
-       
+
        mga_outb(M_EXTVGA_INDEX, 0x03);
        mga_outb(M_EXTVGA_DATA, mga_inb(M_EXTVGA_DATA) | 0x80);
 
@@ -4600,9 +5060,12 @@ __initfunc(static int Ti3026_preinit(WPMINFO struct matrox_hw_state* hw)) {
        ACCESS_FBINFO(millenium) = 1;
        ACCESS_FBINFO(milleniumII) = (ACCESS_FBINFO(pcidev)->device != PCI_DEVICE_ID_MATROX_MIL);
        ACCESS_FBINFO(capable.cfb4) = 1;
+       ACCESS_FBINFO(capable.text) = 1; /* isMilleniumII(MINFO); */
        ACCESS_FBINFO(capable.vxres) = isMilleniumII(MINFO)?vxres_mill2:vxres_mill1;
        ACCESS_FBINFO(cursor.timer.function) = matroxfb_ti3026_flashcursor;
 
+       if (ACCESS_FBINFO(devflags.noinit))
+               return 0;
        /* preserve VGA I/O, BIOS and PPC */
        hw->MXoptionReg &= 0xC0000100;
        hw->MXoptionReg |= 0x002C0000;
@@ -4688,6 +5151,7 @@ static struct video_board vbG200 __initdata               = {0x1000000,   FB_ACCEL_MATROX_MGAG2
 #define DEVF_MILLENIUM 0x04
 #define        DEVF_MILLENIUM2 0x08
 #define DEVF_CROSS4MB  0x10
+#define DEVF_TEXT4B    0x20
 static struct board {
        unsigned short vendor, device, rev, svid, sid;
        unsigned int flags;
@@ -4698,8 +5162,8 @@ static struct board {
 #ifdef CONFIG_FB_MATROX_MILLENIUM
        {PCI_VENDOR_ID_MATROX,  PCI_DEVICE_ID_MATROX_MIL,       0xFF,
                0,                      0,
-               DEVF_MILLENIUM,
-               220000,
+               DEVF_MILLENIUM | DEVF_TEXT4B,
+               230000,
                &vbMillenium,
                "Millennium (PCI)"},
        {PCI_VENDOR_ID_MATROX,  PCI_DEVICE_ID_MATROX_MIL_2,     0xFF,
@@ -4733,45 +5197,51 @@ static struct board {
        {PCI_VENDOR_ID_MATROX,  PCI_DEVICE_ID_MATROX_G100,      0xFF,
                PCI_SS_VENDOR_ID_MATROX,        PCI_SS_ID_MATROX_MGA_G100_PCI,
                DEVF_VIDEO64BIT | DEVF_SWAPS | DEVF_CROSS4MB,
-               220000,
+               230000,
                &vbG100,
                "MGA-G100 (PCI)"},
        {PCI_VENDOR_ID_MATROX,  PCI_DEVICE_ID_MATROX_G100,      0xFF,
                0,                      0,
                DEVF_VIDEO64BIT | DEVF_SWAPS | DEVF_CROSS4MB,
-               220000,
+               230000,
                &vbG100,
                "unknown G100 (PCI)"},
        {PCI_VENDOR_ID_MATROX,  PCI_DEVICE_ID_MATROX_G100_AGP,  0xFF,
                PCI_SS_VENDOR_ID_MATROX,        PCI_SS_ID_MATROX_GENERIC,
                DEVF_VIDEO64BIT | DEVF_SWAPS | DEVF_CROSS4MB,
-               220000,
+               230000,
                &vbG100,
                "MGA-G100 (AGP)"},
        {PCI_VENDOR_ID_MATROX,  PCI_DEVICE_ID_MATROX_G100_AGP,  0xFF,
                PCI_SS_VENDOR_ID_MATROX,        PCI_SS_ID_MATROX_MGA_G100_AGP,
                DEVF_VIDEO64BIT | DEVF_SWAPS | DEVF_CROSS4MB,
-               220000,
+               230000,
                &vbG100,
                "MGA-G100 (AGP)"},
        {PCI_VENDOR_ID_MATROX,  PCI_DEVICE_ID_MATROX_G100_AGP,  0xFF,
                PCI_SS_VENDOR_ID_SIEMENS_NIXDORF,       PCI_SS_ID_SIEMENS_MGA_G100_AGP,
                DEVF_VIDEO64BIT | DEVF_SWAPS | DEVF_CROSS4MB,
-               220000,
+               230000,
                &vbG100,
                "MGA-G100 (AGP)"},
        {PCI_VENDOR_ID_MATROX,  PCI_DEVICE_ID_MATROX_G100_AGP,  0xFF,
                PCI_SS_VENDOR_ID_MATROX,        PCI_SS_ID_MATROX_PRODUCTIVA_G100_AGP,
                DEVF_VIDEO64BIT | DEVF_SWAPS | DEVF_CROSS4MB,
-               220000,
+               230000,
                &vbG100,
                "Productiva G100 (AGP)"},
        {PCI_VENDOR_ID_MATROX,  PCI_DEVICE_ID_MATROX_G100_AGP,  0xFF,
                0,                      0,
                DEVF_VIDEO64BIT | DEVF_SWAPS | DEVF_CROSS4MB,
-               220000,
+               230000,
                &vbG100,
                "unknown G100 (AGP)"},
+       {PCI_VENDOR_ID_MATROX,  PCI_DEVICE_ID_MATROX_G200_PCI,  0xFF,
+               0,                      0,
+               DEVF_VIDEO64BIT | DEVF_SWAPS | DEVF_CROSS4MB,
+               250000,
+               &vbG200,
+               "unknown G200 (PCI)"},
        {PCI_VENDOR_ID_MATROX,  PCI_DEVICE_ID_MATROX_G200_AGP,  0xFF,
                PCI_SS_VENDOR_ID_MATROX,        PCI_SS_ID_MATROX_GENERIC,
                DEVF_VIDEO64BIT | DEVF_SWAPS | DEVF_CROSS4MB,
@@ -4781,7 +5251,7 @@ static struct board {
        {PCI_VENDOR_ID_MATROX,  PCI_DEVICE_ID_MATROX_G200_AGP,  0xFF,
                PCI_SS_VENDOR_ID_MATROX,        PCI_SS_ID_MATROX_MYSTIQUE_G200_AGP,
                DEVF_VIDEO64BIT | DEVF_SWAPS | DEVF_CROSS4MB,
-               220000,
+               230000,
                &vbG200,
                "Mystique G200 (AGP)"},
        {PCI_VENDOR_ID_MATROX,  PCI_DEVICE_ID_MATROX_G200_AGP,  0xFF,
@@ -4793,19 +5263,19 @@ static struct board {
        {PCI_VENDOR_ID_MATROX,  PCI_DEVICE_ID_MATROX_G200_AGP,  0xFF,
                PCI_SS_VENDOR_ID_MATROX,        PCI_SS_ID_MATROX_MARVEL_G200_AGP,
                DEVF_VIDEO64BIT | DEVF_SWAPS | DEVF_CROSS4MB,
-               220000,
+               230000,
                &vbG200,
                "Marvel G200 (AGP)"},
        {PCI_VENDOR_ID_MATROX,  PCI_DEVICE_ID_MATROX_G200_AGP,  0xFF,
                PCI_SS_VENDOR_ID_SIEMENS_NIXDORF,       PCI_SS_ID_SIEMENS_MGA_G200_AGP,
                DEVF_VIDEO64BIT | DEVF_SWAPS | DEVF_CROSS4MB,
-               220000,
+               230000,
                &vbG200,
                "MGA-G200 (AGP)"},
        {PCI_VENDOR_ID_MATROX,  PCI_DEVICE_ID_MATROX_G200_AGP,  0xFF,
                0,                      0,
                DEVF_VIDEO64BIT | DEVF_SWAPS,
-               220000,
+               230000,
                &vbG200,
                "unknown G200 (AGP)"},
 #endif
@@ -4833,6 +5303,20 @@ __initfunc(static int initMatrox2(WPMINFO struct display* d, struct board* b)) {
 
        printk(KERN_INFO "matroxfb: Matrox %s detected\n", b->name);
        ACCESS_FBINFO(devflags.video64bits) = b->flags & DEVF_VIDEO64BIT;
+       if (b->flags & DEVF_TEXT4B) {
+               ACCESS_FBINFO(devflags.vgastep) = 4;
+               ACCESS_FBINFO(devflags.textmode) = 4;
+               ACCESS_FBINFO(devflags.vgastepdisp) = 16;
+               ACCESS_FBINFO(devflags.text_type_aux) = FB_AUX_TEXT_MGA_STEP16;
+       } else {
+               ACCESS_FBINFO(devflags.vgastep) = 8;
+               ACCESS_FBINFO(devflags.textmode) = 1;
+               ACCESS_FBINFO(devflags.vgastepdisp) = 64;
+               ACCESS_FBINFO(devflags.text_type_aux) = FB_AUX_TEXT_MGA_STEP8;
+       }
+       ACCESS_FBINFO(devflags.textstep) = ACCESS_FBINFO(devflags.vgastep) * ACCESS_FBINFO(devflags.textmode);
+       ACCESS_FBINFO(devflags.textvram) = 65536 / ACCESS_FBINFO(devflags.textmode);
+
        if (ACCESS_FBINFO(capable.cross4MB) < 0)
                ACCESS_FBINFO(capable.cross4MB) = b->flags & DEVF_CROSS4MB;
        if (b->flags & DEVF_SWAPS) {
@@ -4886,8 +5370,12 @@ __initfunc(static int initMatrox2(WPMINFO struct display* d, struct board* b)) {
                        dprintk(KERN_WARNING "matroxfb: PCI BIOS did not enable device!\n");
                        cmd = (cmd | PCI_COMMAND_MEMORY) & ~PCI_COMMAND_VGA_PALETTE;
                        mga_option &=  0xBFFFFEFF; 
+                       /* we must not enable VGA, BIOS if PCI BIOS did not enable device itself */
                        ACCESS_FBINFO(devflags.novga) = 1;
                        ACCESS_FBINFO(devflags.nobios) = 1;
+                       /* we must initialize device if PCI BIOS did not enable it.
+                          It probably means that it is second head ... */
+                       ACCESS_FBINFO(devflags.noinit) = 0;
                }
                mga_option |= MX_OPTION_BSWAP;
                if (pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82437, NULL)) {
@@ -4931,13 +5419,16 @@ __initfunc(static int initMatrox2(WPMINFO struct display* d, struct board* b)) {
                        ACCESS_FBINFO(video.len) = end - offs;
                }
 #endif
-               mga_ydstorg(MINFO) = offs;
+               ACCESS_FBINFO(devflags.ydstorg) = offs;
                video_base_phys += offs;
+               if (offs)
+                       ACCESS_FBINFO(capable.text) = 0;
+#else
+               ACCESS_FBINFO(devflags.ydstorg) = 0;
 #endif
        }
-       ACCESS_FBINFO(curr.video_type) = FB_TYPE_PACKED_PIXELS;
        ACCESS_FBINFO(currcon) = -1;
-       ACCESS_FBINFO(currcon_display) = NULL;
+       ACCESS_FBINFO(currcon_display) = d;
        mga_iounmap(ACCESS_FBINFO(video.vbase));
        ACCESS_FBINFO(video.base) = video_base_phys;
        if (mga_ioremap(video_base_phys, ACCESS_FBINFO(video.len), MGA_IOREMAP_FB, &ACCESS_FBINFO(video.vbase))) {
@@ -4995,12 +5486,14 @@ __initfunc(static int initMatrox2(WPMINFO struct display* d, struct board* b)) {
                        vslen = timmings[res].vslen;
                if (!(fv||fh||maxclk||pixclock))
                        fv = timmings[res].vfreq;
-               if (!depth)
+               if (depth == -1)
                        depth = RSDepth(RSptr->info);
        }
        if (sync == -1) {
                sync = 0;
-               if (yres < 480)
+               if (yres < 400)
+                       sync |= FB_SYNC_HOR_HIGH_ACT;
+               else if (yres < 480)
                        sync |= FB_SYNC_VERT_HIGH_ACT;
        }
        if (xres < 320)
@@ -5028,6 +5521,9 @@ __initfunc(static int initMatrox2(WPMINFO struct display* d, struct board* b)) {
                        if (tmp > pixclock) pixclock = tmp;
                }
        }
+       if ((depth == RSText8) && (!*ACCESS_FBINFO(fbcon.fontname))) {
+               strcpy(ACCESS_FBINFO(fbcon.fontname), "VGA8x8");
+       }
        vesafb_defined.red = colors[depth-1].red;
        vesafb_defined.green = colors[depth-1].green;
        vesafb_defined.blue = colors[depth-1].blue;
@@ -5067,41 +5563,38 @@ __initfunc(static int initMatrox2(WPMINFO struct display* d, struct board* b)) {
        ACCESS_FBINFO(fbcon.flags) = FBINFO_FLAG_DEFAULT;
        ACCESS_FBINFO(hw_switch->reset(PMINFO hw));
        ACCESS_FBINFO(video.len_usable) &= PAGE_MASK;
+#if defined(CONFIG_PPC)
 #if defined(CONFIG_FB_COMPAT_XPMAC)
        strcpy(ACCESS_FBINFO(matrox_name), "MTRX,");    /* OpenFirmware naming convension */
-       strcat(ACCESS_FBINFO(matrox_name), b->name);
+       strncat(ACCESS_FBINFO(matrox_name), b->name, 26);
        if (!console_fb_info)
                console_fb_info = &ACCESS_FBINFO(fbcon);
 #endif
-#if defined(CONFIG_PPC)
        if ((xres <= 640) && (yres <= 480)) {
                struct fb_var_screeninfo var;
+               int default_vmode = nvram_read_byte(NV_VMODE);
+               int default_cmode = nvram_read_byte(NV_CMODE);
 
-               if (default_vmode == VMODE_NVRAM)
-                       default_vmode = nvram_read_byte(NV_VMODE);
                if ((default_vmode <= 0) || (default_vmode > VMODE_MAX))
                        default_vmode = VMODE_640_480_60;
-               if (default_cmode == CMODE_NVRAM)
-                       default_cmode = nvram_read_byte(NV_CMODE);
                if ((default_cmode < CMODE_8) || (default_cmode > CMODE_32))
                        default_cmode = CMODE_8;
                if (!mac_vmode_to_var(default_vmode, default_cmode, &var)) {
                        var.accel_flags = vesafb_defined.accel_flags;
-                       vesafb_defined = var;
+                       var.xoffset = var.yoffset = 0;
+                       vesafb_defined = var; /* Note: mac_vmode_to_var() doesnot set all parameters */
                }
        }
 #endif
        {
                int pixel_size = vesafb_defined.bits_per_pixel;
-               int avamem = ACCESS_FBINFO(video.len_usable);
 
-               vesafb_defined.xres_virtual = matroxfb_pitch_adjust(PMINFO xres, pixel_size);
+               vesafb_defined.xres_virtual = matroxfb_pitch_adjust(PMINFO vesafb_defined.xres, pixel_size);
                if (nopan) {
                        vesafb_defined.yres_virtual = vesafb_defined.yres;
                } else {
-                       vesafb_defined.yres_virtual = (avamem * 8 / (pixel_size * vesafb_defined.xres_virtual)) & ~0x1F;
-                       if (vesafb_defined.yres_virtual < vesafb_defined.yres)
-                               vesafb_defined.yres_virtual = vesafb_defined.yres;
+                       vesafb_defined.yres_virtual = 65536; /* large enough to be INF, but small enough
+                                                               to yres_virtual * xres_virtual < 2^32 */
                }
        }
        if (matroxfb_set_var(&vesafb_defined, -2, &ACCESS_FBINFO(fbcon))) {
@@ -5180,6 +5673,7 @@ __initfunc(static int matrox_init(void)) {
                                ACCESS_FBINFO(devflags.inverse) = inverse;
                                ACCESS_FBINFO(devflags.novga) = novga;
                                ACCESS_FBINFO(devflags.nobios) = nobios;
+                               ACCESS_FBINFO(devflags.noinit) = noinit;
                                ACCESS_FBINFO(devflags.nopciretry) = no_pci_retry;
                                ACCESS_FBINFO(devflags.mga_24bpp_fix) = inv24;
                                ACCESS_FBINFO(devflags.precise_width) = option_precise_width;
@@ -5234,9 +5728,11 @@ __initfunc(void matroxfb_init(void))
 }
 
 #if defined(CONFIG_FB_OF)
-__initfunc(void matrox_of_init(struct device_node *dp)) {
+__initfunc(int matrox_of_init(struct device_node *dp)) {
        DBG("matrox_of_init");
        matrox_init();
+       if (!fb_list) return -ENXIO;
+       return 0;
 }
 #endif /* CONFIG_FB_OF */
 
@@ -5258,6 +5754,8 @@ MODULE_PARM(novga, "i");
 MODULE_PARM_DESC(novga, "VGA I/O (0x3C0-0x3DF) disabled (0 or 1=disabled) (default=0)");
 MODULE_PARM(nobios, "i");
 MODULE_PARM_DESC(nobios, "Disables ROM BIOS (0 or 1=disabled) (default=do not change BIOS state)"); 
+MODULE_PARM(noinit, "i");
+MODULE_PARM_DESC(noinit, "Disables W/SG/SD-RAM and bus interface initialization (0 or 1=do not initialize) (default=0)");
 MODULE_PARM(inv24, "i");
 MODULE_PARM_DESC(inv24, "Inverts clock polarity for 24bpp and loop frequency > 100MHz (default=do not invert polarity)");
 MODULE_PARM(inverse, "i");
@@ -5270,7 +5768,7 @@ MODULE_PARM(dev, "i");
 MODULE_PARM_DESC(dev, "Multihead support, attach to device ID (0..N) (default=first working)");
 #endif
 MODULE_PARM(vesa, "i");
-MODULE_PARM_DESC(vesa, "Startup videomode (0x100-0x1FF) (default=0x101)");
+MODULE_PARM_DESC(vesa, "Startup videomode (0x000-0x1FF) (default=0x101)");
 MODULE_PARM(xres, "i");
 MODULE_PARM_DESC(xres, "Horizontal resolutioni (px), overrides xres from vesa (default=vesa)");
 MODULE_PARM(yres, "i");
@@ -5292,7 +5790,7 @@ MODULE_PARM_DESC(pixclock, "Pixelclock (ns), overrides pixclock from vesa (defau
 MODULE_PARM(sync, "i");
 MODULE_PARM_DESC(sync, "Sync polarity, overrides sync from vesa (default=vesa)");
 MODULE_PARM(depth, "i");
-MODULE_PARM_DESC(depth, "Color depth (8,15,16,24,32) (default=vesa)");
+MODULE_PARM_DESC(depth, "Color depth (0=text,8,15,16,24,32) (default=vesa)");
 MODULE_PARM(maxclk, "i");
 MODULE_PARM_DESC(maxclk, "Startup maximal clock, 0-999MHz, 1000-999999kHz, 1000000-INF Hz");
 MODULE_PARM(fh, "i");
@@ -5309,7 +5807,7 @@ MODULE_PARM_DESC(fastfont, "Specifies, how much memory should be used for font d
 MODULE_PARM(grayscale, "i");
 MODULE_PARM_DESC(grayscale, "Sets display into grayscale. Works perfectly with paletized videomode (4, 8bpp), some limitations apply to 16, 24 and 32bpp videomodes (default=nograyscale)");
 MODULE_PARM(cross4MB, "i");
-MODULE_PARM_DESC(cross4MB, "Specifies that 4MB boundary can be in middle of line. It cannot at least on Millennium (I/II).");
+MODULE_PARM_DESC(cross4MB, "Specifies that 4MB boundary can be in middle of line. (default=autodetected)");
 
 __initfunc(int init_module(void)) {
 
@@ -5321,7 +5819,7 @@ __initfunc(int init_module(void)) {
 #endif /* DEBUG */
 
        if (depth == 0)
-               depth = 0;      /* default */
+               depth = RSText;
        else if (depth == 4)
                depth = RS4bpp;
        else if (depth == 8)
@@ -5334,9 +5832,9 @@ __initfunc(int init_module(void)) {
                depth = RS24bpp;
        else if (depth == 32)
                depth = RS32bpp;
-       else {
+       else if (depth != -1) {
                printk(KERN_ERR "matroxfb: depth %d is not supported, using default\n", depth);
-               depth = 0;
+               depth = -1;
        }
        matrox_init();
        if (!fb_list) return -ENXIO;
index d6617624255b95948f7f231131e5009e110aab04..bafcc23bc4bc93849a7965d01ee2c27a89f249ed 100644 (file)
@@ -302,7 +302,7 @@ extern void imsttfb_of_init(struct device_node *dp);
 extern void chips_of_init(struct device_node *dp);
 #endif /* CONFIG_FB_CT65550 */
 #ifdef CONFIG_FB_MATROX
-extern void matrox_of_init(struct device_node *dp);
+extern int matrox_of_init(struct device_node *dp);
 #endif /* CONFIG_FB_MATROX */
 #ifdef CONFIG_FB_CONTROL
 extern void control_of_init(struct device_node *dp);
@@ -329,43 +329,43 @@ __initfunc(void offb_init(void))
     /* If we're booted from BootX... */
     if (prom_num_displays == 0 && boot_infos != 0) {
        unsigned long addr = (unsigned long) boot_infos->dispDeviceBase;
-       if (!ofonly) {
-           /* find the device node corresponding to the macos display */
-           for (dp = displays; dp != NULL; dp = dp->next) {
-               int i;
-               /*
-                * Grrr...  It looks like the MacOS ATI driver
-                * munges the assigned-addresses property (but
-                * the AAPL,address value is OK).
-                */
-               if (strncmp(dp->name, "ATY,", 4) == 0 && dp->n_addrs == 1) {
-                   unsigned int *ap = (unsigned int *)
-                       get_property(dp, "AAPL,address", NULL);
-                   if (ap != NULL) {
-                       dp->addrs[0].address = *ap;
-                       dp->addrs[0].size = 0x01000000;
-                   }
+       /* find the device node corresponding to the macos display */
+       for (dp = displays; dp != NULL; dp = dp->next) {
+           int i;
+           /*
+            * Grrr...  It looks like the MacOS ATI driver
+            * munges the assigned-addresses property (but
+            * the AAPL,address value is OK).
+            */
+           if (strncmp(dp->name, "ATY,", 4) == 0 && dp->n_addrs == 1) {
+               unsigned int *ap = (unsigned int *)
+                   get_property(dp, "AAPL,address", NULL);
+               if (ap != NULL) {
+                   dp->addrs[0].address = *ap;
+                   dp->addrs[0].size = 0x01000000;
                }
-               /*
-                * See if the display address is in one of the address
-                * ranges for this display.
-                */
-               for (i = 0; i < dp->n_addrs; ++i) {
-                   if (dp->addrs[i].address <= addr
-                       && addr < dp->addrs[i].address + dp->addrs[i].size)
-                       break;
-               }
-               if (i < dp->n_addrs) {
-                   printk(KERN_INFO "MacOS display is %s\n", dp->full_name);
-                   macos_display = dp;
+           }
+           /*
+            * See if the display address is in one of the address
+            * ranges for this display.
+            */
+           for (i = 0; i < dp->n_addrs; ++i) {
+               if (dp->addrs[i].address <= addr
+                   && addr < dp->addrs[i].address + dp->addrs[i].size)
                    break;
-               }
+           }
+           if (i < dp->n_addrs) {
+               printk(KERN_INFO "MacOS display is %s\n", dp->full_name);
+               macos_display = dp;
+               break;
            }
        }
 
        /* initialize it */
-       if (macos_display == NULL || !offb_init_driver(macos_display)) {
-           offb_init_fb("MacOS display", "MacOS display",
+       if (ofonly || macos_display == NULL 
+           || !offb_init_driver(macos_display)) {
+           offb_init_fb(macos_display? macos_display->name: "MacOS display",
+                        macos_display? macos_display->full_name: "MacOS display",
                         boot_infos->dispDeviceRect[2],
                         boot_infos->dispDeviceRect[3],
                         boot_infos->dispDeviceDepth,
@@ -403,7 +403,7 @@ __initfunc(static int offb_init_driver(struct device_node *dp))
        return 1;
 #endif /* CONFIG_FB_S3TRIO */
 #ifdef CONFIG_FB_IMSTT
-    if (!strncmp(dp->name, "IMS,tt128mb", 11)) {
+    if (!strncmp(dp->name, "IMS,tt", 6)) {
        imsttfb_of_init(dp);
        return 1;
     }
@@ -524,7 +524,8 @@ __initfunc(static void offb_init_fb(const char *name, const char *full_name,
 
        /* XXX kludge for ati */
     if (strncmp(name, "ATY,", 4) == 0) {
-       info->cmap_adr = ioremap(address + 0x7ff000, 0x1000) + 0xcc0;
+       unsigned long base = address & 0xff000000UL;
+       info->cmap_adr = ioremap(base + 0x7ff000, 0x1000) + 0xcc0;
        info->cmap_data = info->cmap_adr + 1;
     }
 
@@ -674,9 +675,10 @@ __initfunc(static void offb_init_fb(const char *name, const char *full_name,
        display_info.disp_reg_address = 0;
        /* XXX kludge for ati */
        if (strncmp(name, "ATY,", 4) == 0) {
-           display_info.disp_reg_address = address + 0x7ffc00;
-           display_info.cmap_adr_address = address + 0x7ffcc0;
-           display_info.cmap_data_address = address + 0x7ffcc1;
+           unsigned long base = address & 0xff000000UL;
+           display_info.disp_reg_address = base + 0x7ffc00;
+           display_info.cmap_adr_address = base + 0x7ffcc0;
+           display_info.cmap_data_address = base + 0x7ffcc1;
        }
        console_fb_info = &info->info;
     }
index 8bfffe1474183fd16776037583461cb98ceab40a..fba3cbbd67aacfb2b6c4e6a913514cf62406a210 100644 (file)
@@ -178,7 +178,11 @@ static struct fb_videomode retz3fb_predefined[] __initdata = {
        "640x480", {            /* 640x480, 8 bpp */
            640, 480, 640, 480, 0, 0, 8, 0,
            {0, 8, 0}, {0, 8, 0}, {0, 8, 0}, {0, 0, 0},
+#if 1
+           0, 0, -1, -1, FB_ACCEL_NONE, 39722, 48, 16, 33, 10, 96, 2,
+#else
            0, 0, -1, -1, FB_ACCELF_TEXT, 38461, 28, 32, 12, 10, 96, 2,
+#endif
            FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,FB_VMODE_NONINTERLACED
        }
     },
@@ -194,8 +198,24 @@ static struct fb_videomode retz3fb_predefined[] __initdata = {
            FB_SYNC_COMP_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED
        }
     },
+    {
+       "800x600-60", {         /* 800x600, 8 bpp */
+           800, 600, 800, 600, 0, 0, 8, 0,
+           {0, 8, 0}, {0, 8, 0}, {0, 8, 0}, {0, 0, 0},
+           0, 0, -1, -1, FB_ACCELF_TEXT, 25000, 88, 40, 23, 1, 128, 4,
+           FB_SYNC_COMP_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED
+       }
+    },
+    {
+       "800x600-70", {         /* 800x600, 8 bpp */
+           800, 600, 800, 600, 0, 0, 8, 0,
+           {0, 8, 0}, {0, 8, 0}, {0, 8, 0}, {0, 0, 0},
+           0, 0, -1, -1, FB_ACCELF_TEXT, 22272, 40, 24, 15, 9, 144, 12,
+           FB_SYNC_COMP_HIGH_ACT, FB_VMODE_NONINTERLACED
+       }
+    },
     /*
-     ModeLine "1024x768i" 45 1024 1064 1224 1264 768 777 785 817 interlace
+      ModeLine "1024x768i" 45 1024 1064 1224 1264 768 777 785 817 interlace
               < name >   DCF HR  SH1  SH2  HFL  VR  SV1 SV2 VFL
      */
     {
@@ -205,14 +225,24 @@ static struct fb_videomode retz3fb_predefined[] __initdata = {
            0, 0, -1, -1, FB_ACCELF_TEXT, 22222, 40, 40, 32, 9, 160, 8,
            FB_SYNC_COMP_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT, FB_VMODE_INTERLACED
        }
-    }, {
+    },
+    {
+       "1024x768", {
+           1024, 768, 1024, 768, 0, 0, 8, 0, 
+           {0, 8, 0}, {0, 8, 0}, {0, 8, 0}, {0, 0, 0}, 
+           0, 0, -1, -1, FB_ACCEL_NONE, 12500, 92, 112, 31, 2, 204, 4,
+           FB_SYNC_HOR_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED
+        }
+    },
+    {
        "640x480-16", {         /* 640x480, 16 bpp */
            640, 480, 640, 480, 0, 0, 16, 0,
            {11, 5, 0}, {5, 6, 0}, {0, 5, 0}, {0, 0, 0},
            0, 0, -1, -1, 0, 38461/2, 28, 32, 12, 10, 96, 2,
            FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,FB_VMODE_NONINTERLACED
        }
-    }, {
+    },
+    {
        "640x480-24", {         /* 640x480, 24 bpp */
            640, 480, 640, 480, 0, 0, 24, 0,
            {8, 8, 8}, {8, 8, 8}, {8, 8, 8}, {0, 0, 0},
@@ -421,7 +451,7 @@ static int retz3_set_video(struct fb_info *info,
        data.h_total    = (hback / 8) + (xres / 8)
                        + (hfront / 8) + (hsync / 8) - 1 /* + 1 */;
        data.h_dispend  = ((xres + bpp - 1)/ 8) - 1;
-       data.h_bstart   = xres / 8 /* + 1 */;
+       data.h_bstart   = xres / 8 - 1 /* + 1 */;
 
        data.h_bstop    = data.h_total+1 + 2 + 1;
        data.h_sstart   = (xres / 8) + (hfront / 8) + 1;
@@ -430,7 +460,7 @@ static int retz3_set_video(struct fb_info *info,
        data.v_total    = yres + vfront + vsync + vback - 1;
 
        data.v_dispend  = yres - 1;
-       data.v_bstart   = yres;
+       data.v_bstart   = yres - 1;
 
        data.v_bstop    = data.v_total;
        data.v_sstart   = yres + vfront - 1 - 2;
@@ -1198,7 +1228,7 @@ static void retz3fb_set_disp(int con, struct fb_info *info)
        case 8:
                if (display->var.accel_flags & FB_ACCELF_TEXT) {
                    display->dispsw = &fbcon_retz3_8;
-#warning FIXME: We should reinit the graphics engine here
+                   retz3_set_video(info, &display->var, &zinfo->current_par);
                } else
                    display->dispsw = &fbcon_cfb8;
                break;
@@ -1266,7 +1296,6 @@ static int retz3fb_set_var(struct fb_var_screeninfo *var, int con,
                        case 8:
                                if (var->accel_flags & FB_ACCELF_TEXT) {
                                        display->dispsw = &fbcon_retz3_8;
-#warning FIXME: We should reinit the graphics engine here
                                } else
                                        display->dispsw = &fbcon_cfb8;
                                break;
@@ -1280,9 +1309,14 @@ static int retz3fb_set_var(struct fb_var_screeninfo *var, int con,
                                display->dispsw = &fbcon_dummy;
                                break;
                        }
-/*
-       retz3fb_set_disp(con, info);
-*/
+                       /*
+                        * We still need to find a way to tell the X
+                        * server that the video mem has been fiddled with
+                        * so it redraws the entire screen when switching
+                        * between X and a text console.
+                        */
+                       retz3_set_video(info, var, &zinfo->current_par);
+
                        if (info->changevar)
                                (*info->changevar)(con);
                }
index f4fbe2ec5e447ad0e6fe7dd4e6f3a3846723e593..b1061266fe772ade252ce43c9f4160b198dfc21e 100644 (file)
@@ -1134,9 +1134,11 @@ __initfunc(void sbusfb_init(void))
                int root, node;
                root = prom_getchild(prom_root_node);
                for (node = prom_searchsiblings(root, "SUNW,ffb"); node;
-                    node = prom_searchsiblings(prom_getsibling(node), "SUNW,ffb")) {
+                    node = prom_searchsiblings(prom_getsibling(node), "SUNW,ffb"))
+                       sbusfb_init_fb(node, prom_root_node, FBTYPE_CREATOR, NULL);
+               for (node = prom_searchsiblings(root, "SUNW,afb"); node;
+                    node = prom_searchsiblings(prom_getsibling(node), "SUNW,afb"))
                        sbusfb_init_fb(node, prom_root_node, FBTYPE_CREATOR, NULL);
-               }
        }
 #endif
 #ifdef CONFIG_SUN4
index 201984959e80dde3aab42dcae0a893e775984b6c..fe3bc4068623914d0927f74cbcbd5c2ce3ace32c 100644 (file)
  *
  *     - Hardware cursor (useful for other graphics boards too)
  *
+ *     - Support for more resolutions
+ *
+ *     - Some redraws can stall kernel for several seconds
+ *
  * KNOWN PROBLEMS/TO DO ==================================================== */
 
 #include <linux/module.h>
@@ -800,18 +804,56 @@ static int tgafbcon_updatevar(int con, struct fb_info *info)
 }
 
     /*
-     *  Blank the display.
+     *  Blank and unblank the display.
      */
 
 static void tgafbcon_blank(int blank, struct fb_info *info)
 {
-    /* Should also do stuff here for vesa blanking  -tor */
+    static int tga_vesa_blanked = 0;
+    u32 vhcr, vvcr;
+    unsigned long flags;
+    
+    save_flags(flags);
+    cli();
+
+    vhcr = TGA_READ_REG(TGA_HORIZ_REG);
+    vvcr = TGA_READ_REG(TGA_VERT_REG);
+
+    switch (blank) {
+    case 0: /* Unblanking */
+        if (tga_vesa_blanked) {
+          TGA_WRITE_REG(vhcr & 0xbfffffff, TGA_HORIZ_REG);
+          TGA_WRITE_REG(vvcr & 0xbfffffff, TGA_VERT_REG);
+          tga_vesa_blanked = 0;
+       }
+       TGA_WRITE_REG(0x01, TGA_VALID_REG); /* SCANNING */
+       break;
 
-    if (blank > 0) {
+    case 1: /* Normal blanking */
        TGA_WRITE_REG(0x03, TGA_VALID_REG); /* SCANNING and BLANK */
-    } else {
-       TGA_WRITE_REG(0x01, TGA_VALID_REG); /* SCANNING */
+       break;
+
+    case 2: /* VESA blank (vsync off) */
+       TGA_WRITE_REG(vvcr | 0x40000000, TGA_VERT_REG);
+       TGA_WRITE_REG(0x02, TGA_VALID_REG); /* BLANK */
+       tga_vesa_blanked = 1;
+       break;
+
+    case 3: /* VESA blank (hsync off) */
+       TGA_WRITE_REG(vhcr | 0x40000000, TGA_HORIZ_REG);
+       TGA_WRITE_REG(0x02, TGA_VALID_REG); /* BLANK */
+       tga_vesa_blanked = 1;
+       break;
+
+    case 4: /* Poweroff */
+       TGA_WRITE_REG(vhcr | 0x40000000, TGA_HORIZ_REG);
+       TGA_WRITE_REG(vvcr | 0x40000000, TGA_VERT_REG);
+       TGA_WRITE_REG(0x02, TGA_VALID_REG); /* BLANK */
+       tga_vesa_blanked = 1;
+       break;
     }
+
+    restore_flags(flags);
 }
 
     /*
index 59d16e90bfe3d9598f607a27806d3f01f508f2fc..15521e9179a8a79ed48e0f04baeaeb5cab218d52 100644 (file)
@@ -32,6 +32,7 @@
 #include <asm/irq.h>
 #include <asm/pgtable.h>
 #include <asm/amigahw.h>
+#include <asm/io.h>
 
 #include <video/s3blit.h>
 #include <video/fbcon.h>
index 3ca874e37b1757bd1396ccea0355dfad47dee535..a013b35420948e4d858c5fdfe0d38ef95b5ea25b 100644 (file)
@@ -691,12 +691,12 @@ static struct buffer_head *find_candidate(struct buffer_head *bh,
                goto no_candidate;
 
        for (; (*list_len) > 0; bh = bh->b_next_free, (*list_len)--) {
-               if (size != bh->b_size) {
+               if (size != bh->b_size && !buffer_touched(bh)) {
                        /* This provides a mechanism for freeing blocks
                         * of other sizes, this is necessary now that we
                         * no longer have the lav code.
                         */
-                       try_to_free_buffer(bh,&bh,1);
+                       try_to_free_buffer(bh,&bh);
                        if (!bh)
                                break;
                        continue;
@@ -920,7 +920,6 @@ repeat:
                                 put_last_lru(bh);
                        bh->b_flushtime = 0;
                }
-               set_bit(BH_Touched, &bh->b_state);
                return bh;
        }
 
@@ -936,7 +935,7 @@ get_free:
         */
        init_buffer(bh, dev, block, end_buffer_io_sync, NULL);
        bh->b_lru_time  = jiffies;
-       bh->b_state=(1<<BH_Touched);
+       bh->b_state=0;
        insert_into_queues(bh);
        return bh;
 
@@ -1063,6 +1062,7 @@ struct buffer_head * bread(kdev_t dev, int block, int size)
        struct buffer_head * bh = getblk(dev, block, size);
 
        if (bh) {
+               touch_buffer(bh);
                if (buffer_uptodate(bh))
                        return bh;
                ll_rw_block(READ, 1, &bh);
@@ -1101,6 +1101,7 @@ struct buffer_head * breada(kdev_t dev, int block, int bufsize,
 
        index = BUFSIZE_INDEX(bh->b_size);
 
+       touch_buffer(bh);
        if (buffer_uptodate(bh))
                return(bh);   
        else ll_rw_block(READ, 1, &bh);
@@ -1638,8 +1639,7 @@ static inline int buffer_waiting(struct buffer_head * bh)
  * try_to_free_buffer() checks if all the buffers on this particular page
  * are unused, and free's the page if so.
  */
-int try_to_free_buffer(struct buffer_head * bh, struct buffer_head ** bhp,
-                      int priority)
+int try_to_free_buffer(struct buffer_head * bh, struct buffer_head ** bhp)
 {
        unsigned long page;
        struct buffer_head * tmp, * p;
@@ -1655,8 +1655,6 @@ int try_to_free_buffer(struct buffer_head * bh, struct buffer_head ** bhp,
                    buffer_dirty(tmp) || buffer_locked(tmp) ||
                    buffer_waiting(tmp))
                        return 0;
-               if (priority && buffer_touched(tmp))
-                       return 0;
                tmp = tmp->b_this_page;
        } while (tmp != bh);
 
index c37da320e70711392df6406131fc54d403b67d2f..2eb7b13af6b386a63693bbedcdabc817d146f8d3 100644 (file)
@@ -161,17 +161,17 @@ out:
 
 /*
  * Try to invalidate the dentry if it turns out to be
- * possible. If there are other users of the dentry we
- * can't invalidate it.
+ * possible. If there are other dentries that can be
+ * reached through this one we can't delete it.
  */
 int d_invalidate(struct dentry * dentry)
 {
        /* Check whether to do a partial shrink_dcache */
-       if (!list_empty(&dentry->d_subdirs))
+       if (!list_empty(&dentry->d_subdirs)) {
                shrink_dcache_parent(dentry);
-
-       if (dentry->d_count != 1)
-               return -EBUSY;
+               if (!list_empty(&dentry->d_subdirs))
+                       return -EBUSY;
+       }
 
        d_drop(dentry);
        return 0;
index 0a98bad09cd7726cafc429564124ec36ed4a336e..2e4d2812cf0458957aaa1ea3d2218e1b5c85caf7 100644 (file)
@@ -272,10 +272,6 @@ static ssize_t ext2_file_write (struct file * filp, const char * buf,
                mark_buffer_uptodate(bh, 1);
                mark_buffer_dirty(bh, 0);
 
-               /* Mark the buffer untouched if we'll move on to the next one.. */
-               if (!(pos & (sb->s_blocksize-1)))
-                       clear_bit(BH_Touched, &bh->b_state);
-
                if (filp->f_flags & O_SYNC)
                        bufferlist[buffercount++] = bh;
                else
index 5546cb1fbd5b930f8db29e7e1bde32bb4a333b56..bea284b2d4606974b8ffc444d1fa0a312dbdd1f5 100644 (file)
 
 #ifndef __ASSEMBLY__
 
-#ifndef iobarrier /* Don't include io.h - avoid circular dependency */
-#define iobarrier() eieio()
+#ifndef iobarrier_rw /* Don't include io.h - avoid circular dependency */
+#define iobarrier_rw() eieio()
 #endif
 
 #define APUS_WRITE(_a_, _v_)                           \
 do {                                                   \
        (*((volatile unsigned char *)(_a_)) = (_v_));   \
-       iobarrier ();                                   \
+       iobarrier_rw ();                                \
 } while (0)
 
 #define APUS_READ(_a_, _v_)                            \
 do {                                                   \
        (_v_) = (*((volatile unsigned char *)(_a_)));   \
-       iobarrier ();                                   \
+       iobarrier_rw ();                                \
 } while (0)
 #endif /* ndef __ASSEMBLY__ */
 
index da5219e397a2b5cfdaf5a604884f2eab4e348663..b6b80c4ea9dc7dbc21270b6eb62a6f54e740a59d 100644 (file)
@@ -192,7 +192,13 @@ extern inline void eieio(void)
 {
        __asm__ __volatile__ ("eieio" : : : "memory");
 }
-#define iobarrier() eieio()
+
+/* Enforce in-order execution of data I/O. 
+ * No distinction between read/write on PPC; use eieio for all three.
+ */
+#define iobarrier_rw() eieio()
+#define iobarrier_r()  eieio()
+#define iobarrier_w()  eieio()
 
 /*
  * 8, 16 and 32 bit, big and little endian I/O operations, with barrier.
index 5b2bdc932991d73ce00a540510b486cffe041af9..50fa27081e33ffdfb171215ab39bc6e639aab59c 100644 (file)
@@ -38,7 +38,7 @@
 #define MUNGE_CONTEXT(n)        (((n) * 897) & LAST_CONTEXT)
 #endif
 
-extern int next_mmu_context;
+extern atomic_t next_mmu_context;
 extern void mmu_context_overflow(void);
 
 #ifndef CONFIG_8xx
@@ -54,9 +54,9 @@ extern void set_context(int context);
 do {                                                           \
        struct mm_struct *mm = (tsk)->mm;                       \
        if (mm->context == NO_CONTEXT) {                        \
-               if (next_mmu_context == LAST_CONTEXT)           \
+               if (atomic_read(&next_mmu_context) == LAST_CONTEXT)             \
                        mmu_context_overflow();                 \
-               mm->context = MUNGE_CONTEXT(++next_mmu_context);\
+               mm->context = MUNGE_CONTEXT(atomic_inc_return(&next_mmu_context));\
        }                                                       \
 } while (0)
 
index 4555502a280ed599e810ec93aef2eb0069949484..674e6d6f1eb6806496ba3246995feaee03c00fbb 100644 (file)
@@ -21,7 +21,7 @@
     {LONG_MAX, LONG_MAX},                      /* RLIMIT_CPU */        \
     {LONG_MAX, LONG_MAX},                      /* RLIMIT_FSIZE */      \
     {LONG_MAX, LONG_MAX},                      /* RLIMIT_DATA */       \
-    {_STK_LIM, _STK_LIM},                      /* RLIMIT_STACK */      \
+    {_STK_LIM, LONG_MAX},                      /* RLIMIT_STACK */      \
     {       0, LONG_MAX},                      /* RLIMIT_CORE */       \
     {LONG_MAX, LONG_MAX},                      /* RLIMIT_RSS */        \
     {MAX_TASKS_PER_USER, MAX_TASKS_PER_USER},  /* RLIMIT_NPROC */      \
index 13b3591b81b3641cc90ff06de721b11828d94069..c6385d4a7a91489f92490ca07389763f20b4d720 100644 (file)
@@ -182,8 +182,6 @@ struct termio {
 #define N_MASC         8       /* Reserved for Mobitex module <kaz@cafe.net> */
 #define N_R3964                9       /* Reserved for Simatic R3964 module */
 #define N_PROFIBUS_FDL 10      /* Reserved for Profibus <Dave@mvhi.com> */
-#define N_IRDA         11      /* Linux IrDa - http://www.cs.uit.no/~dagb/irda/irda.html */
-#define N_SMSBLOCK     12      /* SMS block mode - for talking to GSM data cards about SMS messages */
 
 #ifdef __KERNEL__
 
index 564b3933bb981ccf5b6ec71d087884e4c41fae85..800ff82665606a15aad64993f90611063cb0113f 100644 (file)
@@ -5,8 +5,8 @@
  * Linux modifications by Peter Braam, Aug 1996
  */
 
-#ifndef _CFS_HEADER_
-#define _CFS_HEADER_
+#ifndef _CODA_HEADER_
+#define _CODA_HEADER_
 
 
 
 #include <sys/types.h>
 #endif 
 
-#ifdef DJGPP
+#ifndef CODA_MAXSYMLINKS
+#define CODA_MAXSYMLINKS 10
+#endif
+
+#if defined(DJGPP) || defined(__CYGWIN32__)
 #ifdef KERNEL
 typedef unsigned long u_long;
 typedef unsigned int u_int;
@@ -23,7 +27,11 @@ typedef unsigned short u_short;
 typedef u_long ino_t;
 typedef u_long dev_t;
 typedef void * caddr_t;
-typedef u_long u_quad_t;
+#ifdef DOS
+typedef unsigned __int64 u_quad_t;
+#else 
+typedef unsigned long long u_quad_t;
+#endif
 
 #define inline
 
@@ -34,12 +42,12 @@ struct timespec {
 #else  /* DJGPP but not KERNEL */
 #include <sys/types.h>
 #include <sys/time.h>
-typedef u_long u_quad_t;
+typedef unsigned long long u_quad_t;
 #endif /* !KERNEL */
 #endif /* !DJGPP */
 
 
-#if defined(__linux__) || defined(__CYGWIN32__)
+#if defined(__linux__)
 #define cdev_t u_quad_t
 #if !defined(_UQUAD_T_) && (!defined(__GLIBC__) || __GLIBC__ < 2)
 #define _UQUAD_T_ 1
@@ -61,9 +69,9 @@ struct timespec {
 /*
  * Cfs constants
  */
-#define CFS_MAXNAMLEN   255
-#define CFS_MAXPATHLEN  1024
-#define CFS_MAXSYMLINK  10
+#define CODA_MAXNAMLEN   255
+#define CODA_MAXPATHLEN  1024
+#define CODA_MAXSYMLINK  10
 
 /* these are Coda's version of O_RDONLY etc combinations
  * to deal with VFS open modes
@@ -79,9 +87,9 @@ struct timespec {
 #define C_M_WRITE 00200
 
 /* for access Venus will use */
+#define C_A_C_OK    8               /* Test for writing upon create.  */
 #define C_A_R_OK    4               /* Test for read permission.  */
 #define C_A_W_OK    2               /* Test for write permission.  */
-#define C_A_C_OK    8               /* Test for writing upon create.  */
 #define C_A_X_OK    1               /* Test for execute permission.  */
 #define C_A_F_OK    0               /* Test for existence.  */
 
@@ -94,23 +102,23 @@ struct venus_dirent {
         unsigned short d_reclen;               /* length of this record */
         char           d_type;                 /* file type, see below */
         char           d_namlen;               /* length of string in d_name */
-        char           d_name[CFS_MAXNAMLEN + 1];/* name must be no longer than this */
+        char           d_name[CODA_MAXNAMLEN + 1];/* name must be no longer than this */
 };
 #undef DIRSIZ
-#define DIRSIZ(dp)      ((sizeof (struct venus_dirent) - (CFS_MAXNAMLEN+1)) + \
+#define DIRSIZ(dp)      ((sizeof (struct venus_dirent) - (CODA_MAXNAMLEN+1)) + \
                          (((dp)->d_namlen+1 + 3) &~ 3))
 
 /*
  * File types
  */
 #define        CDT_UNKNOWN      0
-#define        CDT_FIFO                 1
+#define        CDT_FIFO         1
 #define        CDT_CHR          2
 #define        CDT_DIR          4
 #define        CDT_BLK          6
 #define        CDT_REG          8
 #define        CDT_LNK         10
-#define        CDT_SOCK                12
+#define        CDT_SOCK        12
 #define        CDT_WHT         14
 
 /*
@@ -138,14 +146,27 @@ typedef struct ViceFid {
 } ViceFid;
 #endif /* VICEFID */
 
-static inline ino_t coda_f2i(struct ViceFid *fid)
+
+#ifdef __linux__
+static __inline__ ino_t  coda_f2i(struct ViceFid *fid)
 {
-      if ( fid ) {
-              return (fid->Unique + (fid->Vnode << 10) + (fid->Volume << 20));
-      } else { 
-              return 0;
-      }
+       if ( ! fid ) 
+               return 0; 
+       if (fid->Vnode == 0xfffffffe || fid->Vnode == 0xffffffff)
+               return ((fid->Volume << 20) | (fid->Unique & 0xfffff));
+       else
+               return (fid->Unique + (fid->Vnode<<10) + (fid->Volume<<20));
 }
+       
+#else
+#define coda_f2i(fid)\
+       ((fid) ? ((fid)->Unique + ((fid)->Vnode<<10) + ((fid)->Volume<<20)) : 0)
+#endif
+
+
+#ifndef __BIT_TYPES_DEFINED__
+#define u_int32_t unsigned int
+#endif
 
 
 #ifndef _VUID_T_
@@ -158,11 +179,7 @@ typedef u_int32_t vgid_t;
 #define _CODACRED_T_
 struct coda_cred {
     vuid_t cr_uid, cr_euid, cr_suid, cr_fsuid; /* Real, efftve, set, fs uid*/
-#if    defined(__NetBSD__) || defined(__FreeBSD__)
-    vgid_t cr_groupid, cr_egid, cr_sgid, cr_fsgid; /* same for groups */
-#else
-    vgid_t cr_gid,     cr_egid, cr_sgid, cr_fsgid; /* same for groups */
-#endif
+    vgid_t cr_groupid,     cr_egid, cr_sgid, cr_fsgid; /* same for groups */
 };
 #endif 
 
@@ -174,7 +191,7 @@ struct coda_cred {
 enum coda_vtype        { C_VNON, C_VREG, C_VDIR, C_VBLK, C_VCHR, C_VLNK, C_VSOCK, C_VFIFO, C_VBAD };
 
 struct coda_vattr {
-       enum coda_vtype va_type;        /* vnode type (for create) */
+       int             va_type;        /* vnode type (for create) */
        u_short         va_mode;        /* files access mode and type */
        short           va_nlink;       /* number of references to file */
        vuid_t          va_uid;         /* owner user id */
@@ -198,50 +215,59 @@ struct coda_vattr {
  * Kernel <--> Venus communications.
  */
 
-#define CFS_ROOT       ((u_long) 2)
-#define CFS_SYNC       ((u_long) 3)
-#define CFS_OPEN       ((u_long) 4)
-#define CFS_CLOSE      ((u_long) 5)
-#define CFS_IOCTL      ((u_long) 6)
-#define CFS_GETATTR    ((u_long) 7)
-#define CFS_SETATTR    ((u_long) 8)
-#define CFS_ACCESS     ((u_long) 9)
-#define CFS_LOOKUP     ((u_long) 10)
-#define CFS_CREATE     ((u_long) 11)
-#define CFS_REMOVE     ((u_long) 12)
-#define CFS_LINK       ((u_long) 13)
-#define CFS_RENAME     ((u_long) 14)
-#define CFS_MKDIR      ((u_long) 15)
-#define CFS_RMDIR      ((u_long) 16)
-#define CFS_READDIR    ((u_long) 17)
-#define CFS_SYMLINK    ((u_long) 18)
-#define CFS_READLINK   ((u_long) 19)
-#define CFS_FSYNC      ((u_long) 20)
-#define CFS_INACTIVE   ((u_long) 21)
-#define CFS_VGET       ((u_long) 22)
-#define CFS_SIGNAL     ((u_long) 23)
-#define CFS_REPLACE    ((u_long) 24)
-#define CFS_FLUSH       ((u_long) 25)
-#define CFS_PURGEUSER   ((u_long) 26)
-#define CFS_ZAPFILE     ((u_long) 27)
-#define CFS_ZAPDIR      ((u_long) 28)
-/* #define CFS_ZAPVNODE    ((u_long) 29)   obsolete */ 
-#define CFS_PURGEFID    ((u_long) 30)
-#define CFS_OPEN_BY_PATH ((u_long) 31)
-#define CFS_NCALLS 32
-
-#define DOWNCALL(opcode) (opcode >= CFS_REPLACE && opcode <= CFS_PURGEFID)
+#define CODA_ROOT      2
+#define CODA_SYNC      3
+#define CODA_OPEN      4
+#define CODA_CLOSE     5
+#define CODA_IOCTL     6
+#define CODA_GETATTR   7
+#define CODA_SETATTR   8
+#define CODA_ACCESS    9
+#define CODA_LOOKUP    10
+#define CODA_CREATE    11
+#define CODA_REMOVE    12
+#define CODA_LINK      13
+#define CODA_RENAME    14
+#define CODA_MKDIR     15
+#define CODA_RMDIR     16
+#define CODA_READDIR   17
+#define CODA_SYMLINK   18
+#define CODA_READLINK  19
+#define CODA_FSYNC     20
+#define CODA_INACTIVE  21
+#define CODA_VGET      22
+#define CODA_SIGNAL    23
+#define CODA_REPLACE   24
+#define CODA_FLUSH       25
+#define CODA_PURGEUSER   26
+#define CODA_ZAPFILE     27
+#define CODA_ZAPDIR      28
+#define CODA_PURGEFID    30
+#define CODA_OPEN_BY_PATH 31
+#define CODA_RESOLVE     32
+#define CODA_REINTEGRATE 33
+#define CODA_NCALLS 34
+
+#define DOWNCALL(opcode) (opcode >= CODA_REPLACE && opcode <= CODA_PURGEFID)
 
 #define VC_MAXDATASIZE     8192
 #define VC_MAXMSGSIZE      sizeof(union inputArgs)+sizeof(union outputArgs) +\
                             VC_MAXDATASIZE  
 
-
+#define CIOC_KERNEL_VERSION _IOWR('c', 10, sizeof (int))
+#if    0
+       /* don't care about kernel version number */
+#define CODA_KERNEL_VERSION 0
+       /* The old venus 4.6 compatible interface */
+#define CODA_KERNEL_VERSION 1
+#endif
+       /* venus_lookup gets an extra parameter to aid windows.*/
+#define CODA_KERNEL_VERSION 2
 
 /*
  *        Venus <-> Coda  RPC arguments
  */
-struct cfs_in_hdr {
+struct coda_in_hdr {
     unsigned long opcode;
     unsigned long unique;          /* Keep multiple outstanding msgs distinct */
     u_short pid;                   /* Common to all */
@@ -251,53 +277,53 @@ struct cfs_in_hdr {
 };
 
 /* Really important that opcode and unique are 1st two fields! */
-struct cfs_out_hdr {
+struct coda_out_hdr {
     unsigned long opcode;
     unsigned long unique;      
     unsigned long result;
 };
 
-/* cfs_root: NO_IN */
-struct cfs_root_out {
-    struct cfs_out_hdr oh;
+/* coda_root: NO_IN */
+struct coda_root_out {
+    struct coda_out_hdr oh;
     ViceFid VFid;
 };
 
-struct cfs_root_in {
-    struct cfs_in_hdr in;
+struct coda_root_in {
+    struct coda_in_hdr in;
 };
 
-/* cfs_sync: */
-/* Nothing needed for cfs_sync */
+/* coda_sync: */
+/* Nothing needed for coda_sync */
 
-/* cfs_open: */
-struct cfs_open_in {
-    struct cfs_in_hdr ih;
+/* coda_open: */
+struct coda_open_in {
+    struct coda_in_hdr ih;
     ViceFid    VFid;
     int        flags;
 };
 
-struct cfs_open_out {
-    struct cfs_out_hdr oh;
+struct coda_open_out {
+    struct coda_out_hdr oh;
     cdev_t     dev;
     ino_t      inode;
 };
 
 
-/* cfs_close: */
-struct cfs_close_in {
-    struct cfs_in_hdr ih;
+/* coda_close: */
+struct coda_close_in {
+    struct coda_in_hdr ih;
     ViceFid    VFid;
     int        flags;
 };
 
-struct cfs_close_out {
-    struct cfs_out_hdr out;
+struct coda_close_out {
+    struct coda_out_hdr out;
 };
 
-/* cfs_ioctl: */
-struct cfs_ioctl_in {
-    struct cfs_in_hdr ih;
+/* coda_ioctl: */
+struct coda_ioctl_in {
+    struct coda_in_hdr ih;
     ViceFid VFid;
     int        cmd;
     int        len;
@@ -305,64 +331,70 @@ struct cfs_ioctl_in {
     char *data;                        /* Place holder for data. */
 };
 
-struct cfs_ioctl_out {
-    struct cfs_out_hdr oh;
+struct coda_ioctl_out {
+    struct coda_out_hdr oh;
     int        len;
     caddr_t    data;           /* Place holder for data. */
 };
 
 
-/* cfs_getattr: */
-struct cfs_getattr_in {
-    struct cfs_in_hdr ih;
+/* coda_getattr: */
+struct coda_getattr_in {
+    struct coda_in_hdr ih;
     ViceFid VFid;
 };
 
-struct cfs_getattr_out {
-    struct cfs_out_hdr oh;
+struct coda_getattr_out {
+    struct coda_out_hdr oh;
     struct coda_vattr attr;
 };
 
 
-/* cfs_setattr: NO_OUT */
-struct cfs_setattr_in {
-    struct cfs_in_hdr ih;
+/* coda_setattr: NO_OUT */
+struct coda_setattr_in {
+    struct coda_in_hdr ih;
     ViceFid VFid;
     struct coda_vattr attr;
 };
 
-struct cfs_setattr_out {
-    struct cfs_out_hdr out;
+struct coda_setattr_out {
+    struct coda_out_hdr out;
 };
 
-/* cfs_access: NO_OUT */
-struct cfs_access_in {
-    struct cfs_in_hdr ih;
+/* coda_access: NO_OUT */
+struct coda_access_in {
+    struct coda_in_hdr ih;
     ViceFid    VFid;
     int        flags;
 };
 
-struct cfs_access_out {
-    struct cfs_out_hdr out;
+struct coda_access_out {
+    struct coda_out_hdr out;
 };
 
-/* cfs_lookup: */
-struct  cfs_lookup_in {
-    struct cfs_in_hdr ih;
+
+/* lookup flags */
+#define CLU_CASE_SENSITIVE     0x01
+#define CLU_CASE_INSENSITIVE   0x02
+
+/* coda_lookup: */
+struct  coda_lookup_in {
+    struct coda_in_hdr ih;
     ViceFid    VFid;
     int         name;          /* Place holder for data. */
+    int         flags; 
 };
 
-struct cfs_lookup_out {
-    struct cfs_out_hdr oh;
+struct coda_lookup_out {
+    struct coda_out_hdr oh;
     ViceFid VFid;
     int        vtype;
 };
 
 
-/* cfs_create: */
-struct cfs_create_in {
-    struct cfs_in_hdr ih;
+/* coda_create: */
+struct coda_create_in {
+    struct coda_in_hdr ih;
     ViceFid VFid;
     struct coda_vattr attr;
     int excl;
@@ -370,188 +402,188 @@ struct cfs_create_in {
     int        name;           /* Place holder for data. */
 };
 
-struct cfs_create_out {
-    struct cfs_out_hdr oh;
+struct coda_create_out {
+    struct coda_out_hdr oh;
     ViceFid VFid;
     struct coda_vattr attr;
 };
 
 
-/* cfs_remove: NO_OUT */
-struct cfs_remove_in {
-    struct cfs_in_hdr ih;
+/* coda_remove: NO_OUT */
+struct coda_remove_in {
+    struct coda_in_hdr ih;
     ViceFid    VFid;
     int name;          /* Place holder for data. */
 };
 
-struct cfs_remove_out {
-    struct cfs_out_hdr out;
+struct coda_remove_out {
+    struct coda_out_hdr out;
 };
 
-/* cfs_link: NO_OUT */
-struct cfs_link_in {
-    struct cfs_in_hdr ih;
+/* coda_link: NO_OUT */
+struct coda_link_in {
+    struct coda_in_hdr ih;
     ViceFid sourceFid;          /* cnode to link *to* */
     ViceFid destFid;            /* Directory in which to place link */
     int tname;         /* Place holder for data. */
 };
 
-struct cfs_link_out {
-    struct cfs_out_hdr out;
+struct coda_link_out {
+    struct coda_out_hdr out;
 };
 
 
-/* cfs_rename: NO_OUT */
-struct cfs_rename_in {
-    struct cfs_in_hdr ih;
+/* coda_rename: NO_OUT */
+struct coda_rename_in {
+    struct coda_in_hdr ih;
     ViceFid    sourceFid;
     int        srcname;
     ViceFid destFid;
     int        destname;
 };
 
-struct cfs_rename_out {
-    struct cfs_out_hdr out;
+struct coda_rename_out {
+    struct coda_out_hdr out;
 };
 
-/* cfs_mkdir: */
-struct cfs_mkdir_in {
-    struct cfs_in_hdr ih;
+/* coda_mkdir: */
+struct coda_mkdir_in {
+    struct coda_in_hdr ih;
     ViceFid    VFid;
     struct coda_vattr attr;
     int           name;                /* Place holder for data. */
 };
 
-struct cfs_mkdir_out {
-    struct cfs_out_hdr oh;
+struct coda_mkdir_out {
+    struct coda_out_hdr oh;
     ViceFid VFid;
     struct coda_vattr attr;
 };
 
 
-/* cfs_rmdir: NO_OUT */
-struct cfs_rmdir_in {
-    struct cfs_in_hdr ih;
+/* coda_rmdir: NO_OUT */
+struct coda_rmdir_in {
+    struct coda_in_hdr ih;
     ViceFid    VFid;
     int name;          /* Place holder for data. */
 };
 
-struct cfs_rmdir_out {
-    struct cfs_out_hdr out;
+struct coda_rmdir_out {
+    struct coda_out_hdr out;
 };
 
-/* cfs_readdir: */
-struct cfs_readdir_in {
-    struct cfs_in_hdr ih;
+/* coda_readdir: */
+struct coda_readdir_in {
+    struct coda_in_hdr ih;
     ViceFid    VFid;
     int        count;
     int        offset;
 };
 
-struct cfs_readdir_out {
-    struct cfs_out_hdr oh;
+struct coda_readdir_out {
+    struct coda_out_hdr oh;
     int        size;
     caddr_t    data;           /* Place holder for data. */
 };
 
-/* cfs_symlink: NO_OUT */
-struct cfs_symlink_in {
-    struct cfs_in_hdr ih;
+/* coda_symlink: NO_OUT */
+struct coda_symlink_in {
+    struct coda_in_hdr ih;
     ViceFid    VFid;          /* Directory to put symlink in */
     int srcname;
     struct coda_vattr attr;
     int tname;
 };
 
-struct cfs_symlink_out {
-    struct cfs_out_hdr out;
+struct coda_symlink_out {
+    struct coda_out_hdr out;
 };
 
-/* cfs_readlink: */
-struct cfs_readlink_in {
-    struct cfs_in_hdr ih;
+/* coda_readlink: */
+struct coda_readlink_in {
+    struct coda_in_hdr ih;
     ViceFid VFid;
 };
 
-struct cfs_readlink_out {
-    struct cfs_out_hdr oh;
+struct coda_readlink_out {
+    struct coda_out_hdr oh;
     int        count;
     caddr_t    data;           /* Place holder for data. */
 };
 
 
-/* cfs_fsync: NO_OUT */
-struct cfs_fsync_in {
-    struct cfs_in_hdr ih;
+/* coda_fsync: NO_OUT */
+struct coda_fsync_in {
+    struct coda_in_hdr ih;
     ViceFid VFid;
 };
 
-struct cfs_fsync_out {
-    struct cfs_out_hdr out;
+struct coda_fsync_out {
+    struct coda_out_hdr out;
 };
 
-/* cfs_inactive: NO_OUT */
-struct cfs_inactive_in {
-    struct cfs_in_hdr ih;
+/* coda_inactive: NO_OUT */
+struct coda_inactive_in {
+    struct coda_in_hdr ih;
     ViceFid VFid;
 };
 
-/* cfs_vget: */
-struct cfs_vget_in {
-    struct cfs_in_hdr ih;
+/* coda_vget: */
+struct coda_vget_in {
+    struct coda_in_hdr ih;
     ViceFid VFid;
 };
 
-struct cfs_vget_out {
-    struct cfs_out_hdr oh;
+struct coda_vget_out {
+    struct coda_out_hdr oh;
     ViceFid VFid;
     int        vtype;
 };
 
 
-/* CFS_SIGNAL is out-of-band, doesn't need data. */
-/* CFS_INVALIDATE is a venus->kernel call */
-/* CFS_FLUSH is a venus->kernel call */
+/* CODA_SIGNAL is out-of-band, doesn't need data. */
+/* CODA_INVALIDATE is a venus->kernel call */
+/* CODA_FLUSH is a venus->kernel call */
 
-/* cfs_purgeuser: */
-/* CFS_PURGEUSER is a venus->kernel call */
-struct cfs_purgeuser_out {
-    struct cfs_out_hdr oh;
+/* coda_purgeuser: */
+/* CODA_PURGEUSER is a venus->kernel call */
+struct coda_purgeuser_out {
+    struct coda_out_hdr oh;
     struct coda_cred cred;
 };
 
-/* cfs_zapfile: */
-/* CFS_ZAPFILE is a venus->kernel call */
-struct cfs_zapfile_out {  
-    struct cfs_out_hdr oh;
+/* coda_zapfile: */
+/* CODA_ZAPFILE is a venus->kernel call */
+struct coda_zapfile_out {  
+    struct coda_out_hdr oh;
     ViceFid CodaFid;
 };
 
-/* cfs_zapdir: */
-/* CFS_ZAPDIR is a venus->kernel call */       
-struct cfs_zapdir_out {          
-    struct cfs_out_hdr oh;
+/* coda_zapdir: */
+/* CODA_ZAPDIR is a venus->kernel call */      
+struct coda_zapdir_out {         
+    struct coda_out_hdr oh;
     ViceFid CodaFid;
 };
 
-/* cfs_zapnode: */
-/* CFS_ZAPVNODE is a venus->kernel call */     
-struct cfs_zapvnode_out { 
-    struct cfs_out_hdr oh;
+/* coda_zapnode: */
+/* CODA_ZAPVNODE is a venus->kernel call */    
+struct coda_zapvnode_out { 
+    struct coda_out_hdr oh;
     struct coda_cred cred;
     ViceFid VFid;
 };
 
-/* cfs_purgefid: */
-/* CFS_PURGEFID is a venus->kernel call */     
-struct cfs_purgefid_out { 
-    struct cfs_out_hdr oh;
+/* coda_purgefid: */
+/* CODA_PURGEFID is a venus->kernel call */    
+struct coda_purgefid_out { 
+    struct coda_out_hdr oh;
     ViceFid CodaFid;
 };
 
-/* cfs_rdwr: */
-struct cfs_rdwr_in {
-    struct cfs_in_hdr ih;
+/* coda_rdwr: */
+struct coda_rdwr_in {
+    struct coda_in_hdr ih;
     ViceFid    VFid;
     int        rwflag;
     int        count;
@@ -560,97 +592,97 @@ struct cfs_rdwr_in {
     caddr_t    data;           /* Place holder for data. */    
 };
 
-struct cfs_rdwr_out {
-    struct cfs_out_hdr oh;
+struct coda_rdwr_out {
+    struct coda_out_hdr oh;
     int        rwflag;
     int        count;
     caddr_t    data;   /* Place holder for data. */
 };
 
 
-/* cfs_replace: */
-/* CFS_REPLACE is a venus->kernel call */      
-struct cfs_replace_out { /* cfs_replace is a venus->kernel call */
-    struct cfs_out_hdr oh;
+/* coda_replace: */
+/* CODA_REPLACE is a venus->kernel call */     
+struct coda_replace_out { /* coda_replace is a venus->kernel call */
+    struct coda_out_hdr oh;
     ViceFid NewFid;
     ViceFid OldFid;
 };
 
-/* cfs_open_by_path: */
-struct cfs_open_by_path_in {
-    struct cfs_in_hdr ih;
+/* coda_open_by_path: */
+struct coda_open_by_path_in {
+    struct coda_in_hdr ih;
     ViceFid    VFid;
     int        flags;
 };
 
-struct cfs_open_by_path_out {
-    struct cfs_out_hdr oh;
+struct coda_open_by_path_out {
+    struct coda_out_hdr oh;
        int path;
 };
 
 /* 
- * Occasionally, we don't cache the fid returned by CFS_LOOKUP. 
+ * Occasionally, we don't cache the fid returned by CODA_LOOKUP. 
  * For instance, if the fid is inconsistent. 
  * This case is handled by setting the top bit of the type result parameter.
  */
-#define CFS_NOCACHE          0x80000000
+#define CODA_NOCACHE          0x80000000
 
 union inputArgs {
-    struct cfs_in_hdr ih;              /* NB: every struct below begins with an ih */
-    struct cfs_open_in cfs_open;
-    struct cfs_close_in cfs_close;
-    struct cfs_ioctl_in cfs_ioctl;
-    struct cfs_getattr_in cfs_getattr;
-    struct cfs_setattr_in cfs_setattr;
-    struct cfs_access_in cfs_access;
-    struct cfs_lookup_in cfs_lookup;
-    struct cfs_create_in cfs_create;
-    struct cfs_remove_in cfs_remove;
-    struct cfs_link_in cfs_link;
-    struct cfs_rename_in cfs_rename;
-    struct cfs_mkdir_in cfs_mkdir;
-    struct cfs_rmdir_in cfs_rmdir;
-    struct cfs_readdir_in cfs_readdir;
-    struct cfs_symlink_in cfs_symlink;
-    struct cfs_readlink_in cfs_readlink;
-    struct cfs_fsync_in cfs_fsync;
-    struct cfs_inactive_in cfs_inactive;
-    struct cfs_vget_in cfs_vget;
-    struct cfs_rdwr_in cfs_rdwr;
-       struct cfs_open_by_path_in cfs_open_by_path;
+    struct coda_in_hdr ih;             /* NB: every struct below begins with an ih */
+    struct coda_open_in coda_open;
+    struct coda_close_in coda_close;
+    struct coda_ioctl_in coda_ioctl;
+    struct coda_getattr_in coda_getattr;
+    struct coda_setattr_in coda_setattr;
+    struct coda_access_in coda_access;
+    struct coda_lookup_in coda_lookup;
+    struct coda_create_in coda_create;
+    struct coda_remove_in coda_remove;
+    struct coda_link_in coda_link;
+    struct coda_rename_in coda_rename;
+    struct coda_mkdir_in coda_mkdir;
+    struct coda_rmdir_in coda_rmdir;
+    struct coda_readdir_in coda_readdir;
+    struct coda_symlink_in coda_symlink;
+    struct coda_readlink_in coda_readlink;
+    struct coda_fsync_in coda_fsync;
+    struct coda_inactive_in coda_inactive;
+    struct coda_vget_in coda_vget;
+    struct coda_rdwr_in coda_rdwr;
+       struct coda_open_by_path_in coda_open_by_path;
 };
 
 union outputArgs {
-    struct cfs_out_hdr oh;             /* NB: every struct below begins with an oh */
-    struct cfs_root_out cfs_root;
-    struct cfs_open_out cfs_open;
-    struct cfs_ioctl_out cfs_ioctl;
-    struct cfs_getattr_out cfs_getattr;
-    struct cfs_lookup_out cfs_lookup;
-    struct cfs_create_out cfs_create;
-    struct cfs_mkdir_out cfs_mkdir;
-    struct cfs_readdir_out cfs_readdir;
-    struct cfs_readlink_out cfs_readlink;
-    struct cfs_vget_out cfs_vget;
-    struct cfs_purgeuser_out cfs_purgeuser;
-    struct cfs_zapfile_out cfs_zapfile;
-    struct cfs_zapdir_out cfs_zapdir;
-    struct cfs_zapvnode_out cfs_zapvnode;
-    struct cfs_purgefid_out cfs_purgefid;
-    struct cfs_rdwr_out cfs_rdwr;
-    struct cfs_replace_out cfs_replace;
-       struct cfs_open_by_path_out cfs_open_by_path;
+    struct coda_out_hdr oh;            /* NB: every struct below begins with an oh */
+    struct coda_root_out coda_root;
+    struct coda_open_out coda_open;
+    struct coda_ioctl_out coda_ioctl;
+    struct coda_getattr_out coda_getattr;
+    struct coda_lookup_out coda_lookup;
+    struct coda_create_out coda_create;
+    struct coda_mkdir_out coda_mkdir;
+    struct coda_readdir_out coda_readdir;
+    struct coda_readlink_out coda_readlink;
+    struct coda_vget_out coda_vget;
+    struct coda_purgeuser_out coda_purgeuser;
+    struct coda_zapfile_out coda_zapfile;
+    struct coda_zapdir_out coda_zapdir;
+    struct coda_zapvnode_out coda_zapvnode;
+    struct coda_purgefid_out coda_purgefid;
+    struct coda_rdwr_out coda_rdwr;
+    struct coda_replace_out coda_replace;
+       struct coda_open_by_path_out coda_open_by_path;
 };    
 
-union cfs_downcalls {
-    /* CFS_INVALIDATE is a venus->kernel call */
-    /* CFS_FLUSH is a venus->kernel call */
-    struct cfs_purgeuser_out purgeuser;
-    struct cfs_zapfile_out zapfile;
-    struct cfs_zapdir_out zapdir;
-    struct cfs_zapvnode_out zapvnode;
-    struct cfs_purgefid_out purgefid;
-    struct cfs_replace_out replace;
+union coda_downcalls {
+    /* CODA_INVALIDATE is a venus->kernel call */
+    /* CODA_FLUSH is a venus->kernel call */
+    struct coda_purgeuser_out purgeuser;
+    struct coda_zapfile_out zapfile;
+    struct coda_zapdir_out zapdir;
+    struct coda_zapvnode_out zapvnode;
+    struct coda_purgefid_out purgefid;
+    struct coda_replace_out replace;
 };
 
 
@@ -665,14 +697,23 @@ struct ViceIoctl {
         short out_size;         /* Maximum size of output buffer, <= 2K */
 };
 
+#if defined(__CYGWIN32__) || defined(DJGPP)
 struct PioctlData {
+       unsigned long cmd;
         const char *path;
         int follow;
         struct ViceIoctl vi;
 };
+#else
+struct PioctlData {
+        const char *path;
+        int follow;
+        struct ViceIoctl vi;
+};
+#endif
 
-#define        CFS_CONTROL             ".CONTROL"
-#define CFS_CONTROLLEN           8
+#define        CODA_CONTROL            ".CONTROL"
+#define CODA_CONTROLLEN           8
 #define        CTL_VOL                 -1
 #define        CTL_VNO                 -1
 #define        CTL_UNI                 -1
index 50af4c367eaefaec2b2aa4668fe4e816727f96ab..05d9c0e98712d61482b3a14fcd659a5107ccc79d 100644 (file)
@@ -82,9 +82,9 @@ void coda_sysctl_clean(void);
 /* debugging masks */
 #define D_SUPER     1   /* print results returned by Venus */ 
 #define D_INODE     2   /* print entry and exit into procedure */
-#define D_FILE      4   /* print malloc, de-alloc information */
+#define D_FILE      4   
 #define D_CACHE     8   /* cache debugging */
-#define D_MALLOC    16
+#define D_MALLOC    16  /* print malloc, de-alloc information */
 #define D_CNODE     32
 #define D_UPCALL    64  /* up and downcall debugging */
 #define D_PSDEV    128  
index 2aca579b2aa3c4c6f9bd710c867d0e76d33d184e..2de8ff1ff0cc8d74c93826cb609cd245a64e5366 100644 (file)
@@ -20,7 +20,7 @@ struct coda_sb_info
        struct list_head    sbi_volroothead;
 };
 
-/* communication pending/processing queues queues */
+/* communication pending/processing queues */
 struct venus_comm {
        u_long              vc_seq;
        struct wait_queue  *vc_waitq; /* Venus wait queue */
@@ -51,7 +51,8 @@ int venus_setattr(struct super_block *, struct ViceFid *,
 int venus_lookup(struct super_block *sb, struct ViceFid *fid, 
                    const char *name, int length, int *type, 
                    struct ViceFid *resfid);
-int venus_release(struct super_block *sb, struct ViceFid *fid, int flags);
+int venus_release(struct super_block *sb, struct ViceFid *fid, int flags,
+                 struct coda_cred *);
 int venus_open(struct super_block *sb, struct ViceFid *fid,
                  int flags, ino_t *ino, dev_t *dev);
 int venus_mkdir(struct super_block *sb, struct ViceFid *dirfid, 
@@ -107,7 +108,7 @@ struct upc_req {
 struct coda_upcallstats {
        int     ncalls;                 /* client requests */
        int     nbadcalls;              /* upcall failures */
-       int     reqs[CFS_NCALLS];       /* count of each request */
+       int     reqs[CODA_NCALLS];      /* count of each request */
 } ;
 
 extern struct coda_upcallstats coda_callstats;
@@ -115,7 +116,7 @@ extern struct coda_upcallstats coda_callstats;
 static inline void clstats(int opcode)
 {
     coda_callstats.ncalls++;
-    if ( (0 <= opcode) && (opcode <= CFS_NCALLS) )
+    if ( (0 <= opcode) && (opcode <= CODA_NCALLS) )
        coda_callstats.reqs[opcode]++;
     else
        printk("clstats called with bad opcode %d\n", opcode); 
index cb5618a56661f2ae86a632268e9c25c681573d84..f4c775db405f231f192da67ab9e573c318bfa7ea 100644 (file)
@@ -35,6 +35,8 @@
 #define FB_AUX_TEXT_MDA                0       /* Monochrome text */
 #define FB_AUX_TEXT_CGA                1       /* CGA/EGA/VGA Color text */
 #define FB_AUX_TEXT_S3_MMIO    2       /* S3 MMIO fasttext */
+#define FB_AUX_TEXT_MGA_STEP16 3       /* MGA Millenium I: text, attr, 14 reserved bytes */
+#define FB_AUX_TEXT_MGA_STEP8  4       /* other MGAs:      text, attr,  6 reserved bytes */
 
 #define FB_VISUAL_MONO01               0       /* Monochr. 1=Black 0=White */
 #define FB_VISUAL_MONO10               1       /* Monochr. 1=White 0=Black */
index b8018949052e18b12077fca82d480f49d62790aa..0139168ca8096e730c15cc7239cb9a3be3b70d5c 100644 (file)
@@ -176,8 +176,6 @@ typedef char buffer_block[BLOCK_SIZE];
 #define BH_Dirty       1       /* 1 if the buffer is dirty */
 #define BH_Lock                2       /* 1 if the buffer is locked */
 #define BH_Req         3       /* 0 if the buffer has been invalidated */
-#define BH_Touched     4       /* 1 if the buffer has been touched (aging) */
-#define BH_Has_aged    5       /* 1 if the buffer has been aged (aging) */
 #define BH_Protected   6       /* 1 if the buffer is protected */
 
 /*
@@ -248,21 +246,19 @@ static inline int buffer_req(struct buffer_head * bh)
        return test_bit(BH_Req, &bh->b_state);
 }
 
-static inline int buffer_touched(struct buffer_head * bh)
-{
-       return test_bit(BH_Touched, &bh->b_state);
-}
-
-static inline int buffer_has_aged(struct buffer_head * bh)
-{
-       return test_bit(BH_Has_aged, &bh->b_state);
-}
-
 static inline int buffer_protected(struct buffer_head * bh)
 {
        return test_bit(BH_Protected, &bh->b_state);
 }
 
+/*
+ * Deprecated - we don't keep per-buffer reference flags
+ * any more.
+ */
+#define buffer_page(bh)                (mem_map + MAP_NR((bh)->b_data))
+#define buffer_touched(bh)     (PageReferenced(buffer_page(bh)))
+#define touch_buffer(bh)       set_bit(PG_referenced, buffer_page(bh))
+
 #include <linux/pipe_fs_i.h>
 #include <linux/minix_fs_i.h>
 #include <linux/ext2_fs_i.h>
@@ -736,7 +732,7 @@ extern struct file *inuse_filps;
 
 extern void refile_buffer(struct buffer_head * buf);
 extern void set_writetime(struct buffer_head * buf, int flag);
-extern int try_to_free_buffer(struct buffer_head*, struct buffer_head**, int);
+extern int try_to_free_buffer(struct buffer_head*, struct buffer_head**);
 
 extern int nr_buffers;
 extern int buffermem;
index 4145f56e30bbb5c303a7cf3982e4d8c44266e038..5502b23811336a3911d9cbabbe319b43782c60e5 100644 (file)
@@ -100,6 +100,7 @@ extern struct display_switch fbcon_dummy;
 #define __SCROLL_YFIXED                0x010
 #define __SCROLL_YNOMOVE       0x020
 #define __SCROLL_YPANREDRAW    0x040
+#define __SCROLL_YNOPARTIAL    0x080
 
 /* Only these should be used by the drivers */
 /* Which one should you use? If you have a fast card and slow bus,
@@ -117,6 +118,15 @@ extern struct display_switch fbcon_dummy;
 #define SCROLL_YREDRAW         (__SCROLL_YFIXED|__SCROLL_YREDRAW)
 #define SCROLL_YNOMOVE         (__SCROLL_YNOMOVE|__SCROLL_YPANREDRAW)
 
+/* SCROLL_YNOPARTIAL, used in combination with the above, is for video
+   cards which can not handle using panning to scroll a portion of the
+   screen without excessive flicker.  Panning will only be used for
+   whole screens.
+ */
+/* Namespace consistency */
+#define SCROLL_YNOPARTIAL      __SCROLL_YNOPARTIAL
+
+
 extern void fbcon_redraw_bmove(struct display *, int, int, int, int, int, int);
 
 
index 9f94805c4b7cf0765eb88e7e09514754cc78a12e..08c9771faabb5cdf1239ff7d059ad325a688bc96 100644 (file)
@@ -118,81 +118,6 @@ void remove_inode_page(struct page *page)
        __free_page(page);
 }
 
-/*
- * Check whether we can free this page.
- */
-static inline int shrink_one_page(struct page *page, int gfp_mask)
-{
-       struct buffer_head *tmp, *bh;
-
-       if (PageLocked(page))
-               goto next;
-       if ((gfp_mask & __GFP_DMA) && !PageDMA(page))
-               goto next;
-       /* First of all, regenerate the page's referenced bit
-         * from any buffers in the page
-        */
-       bh = page->buffers;
-       if (bh) {
-               tmp = bh;
-               do {
-                       if (buffer_touched(tmp)) {
-                               clear_bit(BH_Touched, &tmp->b_state);
-                               set_bit(PG_referenced, &page->flags);
-                       }
-                       tmp = tmp->b_this_page;
-               } while (tmp != bh);
-
-               /* Refuse to swap out all buffer pages */
-               if (buffer_under_min())
-                       goto next;
-       }
-
-       /* We can't throw away shared pages, but we do mark
-          them as referenced.  This relies on the fact that
-          no page is currently in both the page cache and the
-          buffer cache; we'd have to modify the following
-          test to allow for that case. */
-
-       switch (atomic_read(&page->count)) {
-       case 1:
-               /* is it a swap-cache or page-cache page? */
-               if (page->inode) {
-                       if (test_and_clear_bit(PG_referenced, &page->flags))
-                               break;
-                       if (pgcache_under_min())
-                               break;
-                       if (PageSwapCache(page)) {
-                               delete_from_swap_cache(page);
-                               return 1;
-                       }
-                       remove_inode_page(page);
-                       return 1;
-               }
-               /* It's not a cache page, so we don't do aging.
-                * If it has been referenced recently, don't free it */
-               if (test_and_clear_bit(PG_referenced, &page->flags))
-                       break;
-
-               if (buffer_under_min())
-                       break;
-
-               /* is it a buffer cache page? */
-               if (bh && try_to_free_buffer(bh, &bh, 6))
-                       return 1;
-               break;
-
-       default:
-               /* more than one user: we can't throw it away */
-               set_bit(PG_referenced, &page->flags);
-               /* fall through */
-       case 0:
-               /* nothing */
-       }
-next:
-       return 0;
-}
-
 int shrink_mmap(int priority, int gfp_mask)
 {
        static unsigned long clock = 0;
@@ -204,20 +129,53 @@ int shrink_mmap(int priority, int gfp_mask)
 
        page = mem_map + clock;
        do {
+               page++;
+               clock++;
+               if (clock >= max_mapnr) {
+                       clock = 0;
+                       page = mem_map;
+               }
                if (PageSkip(page)) {
                        /* next_hash is overloaded for PageSkip */
                        page = page->next_hash;
                        clock = page->map_nr;
                }
                
-               if (shrink_one_page(page, gfp_mask))
+               if (PageLocked(page))
+                       continue;
+
+               if (test_and_clear_bit(PG_referenced, &page->flags))
+                       continue;
+
+               if ((gfp_mask & __GFP_DMA) && !PageDMA(page))
+                       continue;
+
+               /* We can't free pages unless there's just one user */
+               if (atomic_read(&page->count) != 1)
+                       continue;
+
+               /* Is it a buffer page? */
+               if (page->buffers) {
+                       struct buffer_head *bh = page->buffers;
+                       if (buffer_under_min())
+                               continue;
+                       if (!try_to_free_buffer(bh, &bh))
+                               continue;
                        return 1;
-               page++;
-               clock++;
-               if (clock >= max_mapnr) {
-                       clock = 0;
-                       page = mem_map;
                }
+
+               /* is it a swap-cache or page-cache page? */
+               if (page->inode) {
+                       if (pgcache_under_min())
+                               continue;
+                       if (PageSwapCache(page)) {
+                               delete_from_swap_cache(page);
+                               return 1;
+                       }
+                       remove_inode_page(page);
+                       return 1;
+               }
+
        } while (--count >= 0);
        return 0;
 }
index 2c2b01fafff32cc70e3f86e55c7b8958cfd81605..0f782a94f5915faf0080268870b7d0667afaa52c 100644 (file)
@@ -451,7 +451,7 @@ static int kswapd_free_pages(int kswapd_state)
        /* max one hundreth of a second */
        end_time = jiffies + (HZ-1)/100;
        do {
-               int priority = 7;
+               int priority = 5;
                int count = pager_daemon.swap_cluster;
 
                switch (kswapd_state) {
@@ -562,7 +562,7 @@ int try_to_free_pages(unsigned int gfp_mask, int count)
 
                current->flags |= PF_MEMALLOC;
        
-               priority = 8;
+               priority = 5;
                do {
                        free_memory(shrink_mmap(priority, gfp_mask));
                        free_memory(shm_swap(priority, gfp_mask));