summaryrefslogtreecommitdiffstats
path: root/drivers/video
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video')
-rw-r--r--drivers/video/Config.in30
-rw-r--r--drivers/video/Makefile10
-rw-r--r--drivers/video/amifb.c24
-rw-r--r--drivers/video/atafb.c21
-rw-r--r--drivers/video/atyfb.c179
-rw-r--r--drivers/video/cgsixfb.c14
-rw-r--r--drivers/video/chipsfb.c127
-rw-r--r--drivers/video/clgenfb.c10
-rw-r--r--drivers/video/controlfb.c517
-rw-r--r--drivers/video/controlfb.h46
-rw-r--r--drivers/video/creatorfb.c78
-rw-r--r--drivers/video/cvisionppc.h51
-rw-r--r--drivers/video/cvppcfb.c606
-rw-r--r--drivers/video/cyberfb.c37
-rw-r--r--drivers/video/cyberfb.h2
-rw-r--r--drivers/video/fbcon-cfb8.c16
-rw-r--r--drivers/video/fbcon-iplan2p2.c4
-rw-r--r--drivers/video/fbcon-iplan2p4.c4
-rw-r--r--drivers/video/fbcon-iplan2p8.c4
-rw-r--r--drivers/video/fbcon.c229
-rw-r--r--drivers/video/fbmem.c16
-rw-r--r--drivers/video/font_sun12x22.c11268
-rw-r--r--drivers/video/imsttfb.c662
-rw-r--r--drivers/video/macfb.c165
-rw-r--r--drivers/video/matroxfb.c1428
-rw-r--r--drivers/video/mdacon.c2
-rw-r--r--drivers/video/offb.c141
-rw-r--r--drivers/video/pm2fb.c1494
-rw-r--r--drivers/video/pm2fb.h181
-rw-r--r--drivers/video/retz3fb.c59
-rw-r--r--drivers/video/sbusfb.c24
-rw-r--r--drivers/video/tgafb.c52
-rw-r--r--drivers/video/virgefb.c47
33 files changed, 10024 insertions, 7524 deletions
diff --git a/drivers/video/Config.in b/drivers/video/Config.in
index 7c1887c1c..7224b174f 100644
--- a/drivers/video/Config.in
+++ b/drivers/video/Config.in
@@ -4,6 +4,15 @@
if [ "$CONFIG_FB" = "y" ]; then
define_bool CONFIG_DUMMY_CONSOLE y
+ if [ "$CONFIG_APUS" = "y" ]; then
+ bool 'Permedia2 support' CONFIG_FB_PM2
+ if [ "$CONFIG_FB_PM2" = "y" ]; then
+ bool ' enable FIFO disconnect feature' CONFIG_FB_PM2_FIFO_DISCONNECT
+ if [ "$CONFIG_APUS" = "y" ]; then
+ bool ' Phase5 CVisionPPC/BVisionPPC support' CONFIG_FB_PM2_CVPPC
+ fi
+ fi
+ fi
if [ "$CONFIG_ARCH_ACORN" = "y" ]; then
bool 'Acorn VIDC support' CONFIG_FB_ACORN
fi
@@ -22,7 +31,6 @@ if [ "$CONFIG_FB" = "y" ]; then
tristate 'Amiga CyberVision support' CONFIG_FB_CYBER
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
bool 'Amiga CyberVision3D support (experimental)' CONFIG_FB_VIRGE
- bool 'Amiga CyberVisionPPC support (experimental)' CONFIG_FB_CVPPC
tristate 'Amiga RetinaZ3 support' CONFIG_FB_RETINAZ3
tristate 'Amiga CLgen driver' CONFIG_FB_CLGEN
fi
@@ -157,7 +165,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" -o "$CONFIG_FB_PM2" = "y" ]; then ]; then
define_bool CONFIG_FBCON_CFB8 y
else
if [ "$CONFIG_FB_ACORN" = "m" -o "$CONFIG_FB_ATARI" = "m" -o \
@@ -169,7 +178,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" -o "$CONFIG_FB_PM2" = "m" ]; then
define_bool CONFIG_FBCON_CFB8 m
fi
fi
@@ -179,7 +189,8 @@ 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" -o \
+ "$CONFIG_FB_PM2" = "y" ]; then
define_bool CONFIG_FBCON_CFB16 y
else
if [ "$CONFIG_FB_ATARI" = "m" -o "$CONFIG_FB_ATY" = "m" -o \
@@ -188,18 +199,19 @@ 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" -o \
+ "$CONFIG_FB_PM2" = "m" ]; then
define_bool CONFIG_FBCON_CFB16 m
fi
fi
if [ "$CONFIG_FB_ATY" = "y" -o "$CONFIG_FB_VIRTUAL" = "y" -o \
"$CONFIG_FB_CLGEN" = "y" -o "$CONFIG_FB_VESA" = "y" -o \
- "$CONFIG_FB_MATROX" = "y" ]; then
+ "$CONFIG_FB_MATROX" = "y" -o "$CONFIG_FB_PM2" = "y" ]; then
define_bool CONFIG_FBCON_CFB24 y
else
if [ "$CONFIG_FB_ATY" = "m" -o "$CONFIG_FB_VIRTUAL" = "m" -o \
"$CONFIG_FB_CLGEN" = "m" -o "$CONFIG_FB_VESA" = "m" -o \
- "$CONFIG_FB_MATROX" = "m" ]; then
+ "$CONFIG_FB_MATROX" = "m" -o "$CONFIG_FB_PM2" = "m" ]; then
define_bool CONFIG_FBCON_CFB24 m
fi
fi
@@ -207,14 +219,14 @@ if [ "$CONFIG_FB" = "y" ]; then
"$CONFIG_FB_VESA" = "y" -o "$CONFIG_FB_VIRTUAL" = "y" -o \
"$CONFIG_FB_CONTROL" = "y" -o "$CONFIG_FB_CLGEN" = "y" -o \
"$CONFIG_FB_TGA" = "y" -o "$CONFIG_FB_PLATINUM" = "y" -o \
- "$CONFIG_FB_MATROX" = "y" ]; then
+ "$CONFIG_FB_MATROX" = "y" -o "$CONFIG_FB_PM2" = "y" ]; then
define_bool CONFIG_FBCON_CFB32 y
else
if [ "$CONFIG_FB_ATARI" = "m" -o "$CONFIG_FB_ATY" = "m" -o \
"$CONFIG_FB_VESA" = "m" -o "$CONFIG_FB_VIRTUAL" = "m" -o \
"$CONFIG_FB_CONTROL" = "m" -o "$CONFIG_FB_CLGEN" = "m" -o \
"$CONFIG_FB_TGA" = "m" -o "$CONFIG_FB_PLATINUM" = "m" -o \
- "$CONFIG_FB_MATROX" = "m" ]; then
+ "$CONFIG_FB_MATROX" = "m" -o "$CONFIG_FB_PM2" = "m" ]; then
define_bool CONFIG_FBCON_CFB32 m
fi
fi
diff --git a/drivers/video/Makefile b/drivers/video/Makefile
index 5343be151..5c049664a 100644
--- a/drivers/video/Makefile
+++ b/drivers/video/Makefile
@@ -79,6 +79,11 @@ else
endif
endif
+ifeq ($(CONFIG_FB_PM2),y)
+L_OBJS += pm2fb.o
+CONFIG_FBGEN_BUILTIN = y
+endif
+
ifeq ($(CONFIG_FB_APOLLO),y)
L_OBJS += dnfb.o
endif
@@ -123,11 +128,6 @@ else
endif
endif
-ifeq ($(CONFIG_FB_CVPPC),y)
-L_OBJS += cvppcfb.o
-CONFIG_FBGEN_BUILTIN = y
-endif
-
ifeq ($(CONFIG_FB_MAC),y)
L_OBJS += macfb.o
endif
diff --git a/drivers/video/amifb.c b/drivers/video/amifb.c
index ed588ab0d..2aa4a29e3 100644
--- a/drivers/video/amifb.c
+++ b/drivers/video/amifb.c
@@ -623,6 +623,7 @@ static u_short maxfmode, chipset;
static u_long videomemory, spritememory;
static u_long videomemorysize;
+static u_long videomemory_phys;
/*
* This is the earliest allowed start of fetching display data.
@@ -1479,8 +1480,7 @@ static int amifb_set_var(struct fb_var_screeninfo *var, int con,
struct fb_fix_screeninfo fix;
ami_encode_fix(&fix, &par);
- display->screen_base =
- phys_to_virt ((unsigned long) fix.smem_start);
+ display->screen_base = (char *)videomemory;
display->visual = fix.visual;
display->type = fix.type;
display->type_aux = fix.type_aux;
@@ -1877,6 +1877,18 @@ default_chipset:
assignchunk(copdisplay.list[1][0], copins *, chipptr, COPLISTSIZE);
assignchunk(copdisplay.list[1][1], copins *, chipptr, COPLISTSIZE);
+ /*
+ * access the videomem with writethrough cache
+ */
+ videomemory_phys = (u_long)ZTWO_PADDR(videomemory);
+#if 1
+ videomemory = (u_long)ioremap_writethrough(videomemory_phys, videomemorysize);
+#endif
+ if (!videomemory) {
+ printk("amifb: WARNING! unable to map videomem cached writethrough\n");
+ videomemory = ZTWO_VADDR(videomemory_phys);
+ }
+
memset(dummysprite, 0, DUMMYSPRITEMEMSIZE);
/*
@@ -2126,7 +2138,7 @@ static int ami_encode_fix(struct fb_fix_screeninfo *fix,
{
memset(fix, 0, sizeof(struct fb_fix_screeninfo));
strcpy(fix->id, amifb_name);
- fix->smem_start = (char*) virt_to_phys((void *)videomemory);
+ fix->smem_start = (char *)videomemory_phys;
fix->smem_len = videomemorysize;
#ifdef FBCON_HAS_MFB
@@ -2742,16 +2754,16 @@ static int ami_update_par(void)
par->bpl1mod = par->bpl2mod;
if (par->yoffset) {
- par->bplpt0 = ZTWO_PADDR((u_long)videomemory + par->next_line*par->yoffset + move);
+ par->bplpt0 = videomemory_phys + par->next_line*par->yoffset + move;
if (par->vmode & FB_VMODE_YWRAP) {
if (par->yoffset > par->vyres-par->yres) {
- par->bplpt0wrap = ZTWO_PADDR((u_long)videomemory + move);
+ par->bplpt0wrap = videomemory_phys + move;
if (par->bplcon0 & BPC0_LACE && mod2(par->diwstrt_v+par->vyres-par->yoffset))
par->bplpt0wrap += par->next_line;
}
}
} else
- par->bplpt0 = ZTWO_PADDR((u_long)videomemory + move);
+ par->bplpt0 = videomemory_phys + move;
if (par->bplcon0 & BPC0_LACE && mod2(par->diwstrt_v))
par->bplpt0 += par->next_line;
diff --git a/drivers/video/atafb.c b/drivers/video/atafb.c
index 68c2a6fb2..f33d118b7 100644
--- a/drivers/video/atafb.c
+++ b/drivers/video/atafb.c
@@ -62,6 +62,7 @@
#include <asm/uaccess.h>
#include <asm/pgtable.h>
#include <asm/irq.h>
+#include <asm/io.h>
#include <asm/atarihw.h>
#include <asm/atariints.h>
@@ -669,7 +670,7 @@ static void tt_get_par( struct atafb_par *par )
addr = ((shifter.bas_hi & 0xff) << 16) |
((shifter.bas_md & 0xff) << 8) |
((shifter.bas_lo & 0xff));
- par->screen_base = PTOV(addr);
+ par->screen_base = phys_to_virt(addr);
}
static void tt_set_par( struct atafb_par *par )
@@ -1502,7 +1503,7 @@ static void falcon_get_par( struct atafb_par *par )
addr = (shifter.bas_hi & 0xff) << 16 |
(shifter.bas_md & 0xff) << 8 |
(shifter.bas_lo & 0xff);
- par->screen_base = PTOV(addr);
+ par->screen_base = phys_to_virt(addr);
/* derived parameters */
hw->ste_mode = (hw->f_shift & 0x510)==0 && hw->st_shift==0x100;
@@ -1929,7 +1930,7 @@ static void stste_get_par( struct atafb_par *par )
((shifter.bas_md & 0xff) << 8);
if (ATARIHW_PRESENT(EXTD_SHIFTER))
addr |= (shifter.bas_lo & 0xff);
- par->screen_base = PTOV(addr);
+ par->screen_base = phys_to_virt(addr);
}
static void stste_set_par( struct atafb_par *par )
@@ -2026,7 +2027,7 @@ static int stste_detect( void )
static void stste_set_screen_base(unsigned long s_base)
{
unsigned long addr;
- addr= VTOP(s_base);
+ addr= virt_to_phys(s_base);
/* Setup Screen Memory */
shifter.bas_hi=(unsigned char) ((addr & 0xff0000) >> 16);
shifter.bas_md=(unsigned char) ((addr & 0x00ff00) >> 8);
@@ -2297,7 +2298,7 @@ static int ext_detect( void )
static void set_screen_base(unsigned long s_base)
{
unsigned long addr;
- addr= VTOP(s_base);
+ addr= virt_to_phys(s_base);
/* Setup Screen Memory */
shifter.bas_hi=(unsigned char) ((addr & 0xff0000) >> 16);
shifter.bas_md=(unsigned char) ((addr & 0x00ff00) >> 8);
@@ -2819,9 +2820,9 @@ __initfunc(void atafb_init(void))
if (CPU_IS_040_OR_060) {
/* On a '040+, the cache mode of video RAM must be set to
* write-through also for internal video hardware! */
- cache_push( VTOP(screen_base), screen_len );
+ cache_push( virt_to_phys(screen_base), screen_len );
kernel_set_cachemode( screen_base, screen_len,
- KERNELMAP_NO_COPYBACK );
+ IOMAP_WRITETHROUGH );
}
#ifdef ATAFB_EXT
}
@@ -2829,11 +2830,9 @@ __initfunc(void atafb_init(void))
/* Map the video memory (physical address given) to somewhere
* in the kernel address space.
*/
- external_addr = kernel_map(external_addr, external_len,
- KERNELMAP_NO_COPYBACK, NULL);
+ external_addr = ioremap_writethrough(external_addr, external_len);
if (external_vgaiobase)
- external_vgaiobase = kernel_map(external_vgaiobase,
- 0x10000, KERNELMAP_NOCACHE_SER, NULL);
+ external_vgaiobase = ioremap(external_vgaiobase, 0x10000 );
screen_base =
real_screen_base = external_addr;
screen_len = external_len & PAGE_MASK;
diff --git a/drivers/video/atyfb.c b/drivers/video/atyfb.c
index e3f1b1d8d..6a3625d23 100644
--- a/drivers/video/atyfb.c
+++ b/drivers/video/atyfb.c
@@ -1,4 +1,4 @@
-/* $Id: atyfb.c,v 1.90 1998/11/20 12:27:03 geert Exp $
+/* $Id: atyfb.c,v 1.98 1999/01/14 08:50:53 geert Exp $
* linux/drivers/video/atyfb.c -- Frame buffer device for ATI Mach64
*
* Copyright (C) 1997-1998 Geert Uytterhoeven
@@ -222,6 +222,7 @@ struct fb_info_aty {
u32 cfb32[16];
#endif
} fbcon_cmap;
+ u8 blitter_may_be_busy;
#ifdef __sparc__
u8 open;
u8 mmaped;
@@ -320,8 +321,7 @@ static char *strtoke(char *s, const char *ct);
#endif
static void reset_engine(const struct fb_info_aty *info);
-static void init_engine(const struct atyfb_par *par,
- const struct fb_info_aty *info);
+static void init_engine(const struct atyfb_par *par, struct fb_info_aty *info);
static void aty_st_514(int offset, u8 val, const struct fb_info_aty *info);
static void aty_st_pll(int offset, u8 val, const struct fb_info_aty *info);
#if defined(__sparc__) || defined(DEBUG)
@@ -533,10 +533,11 @@ static inline void wait_for_fifo(u16 entries, const struct fb_info_aty *info)
((u32)(0x8000 >> entries)));
}
-static inline void wait_for_idle(const struct fb_info_aty *info)
+static inline void wait_for_idle(struct fb_info_aty *info)
{
wait_for_fifo(16, info);
while ((aty_ld_le32(GUI_STAT, info) & 1)!= 0);
+ info->blitter_may_be_busy = 0;
}
static void reset_engine(const struct fb_info_aty *info)
@@ -553,8 +554,7 @@ static void reset_engine(const struct fb_info_aty *info)
BUS_FIFO_ERR_ACK, info);
}
-static void init_engine(const struct atyfb_par *par,
- const struct fb_info_aty *info)
+static void init_engine(const struct atyfb_par *par, struct fb_info_aty *info)
{
u32 pitch_value;
@@ -872,7 +872,8 @@ aty_set_cursor(struct fb_info_aty *fb, int on)
aty_ld_le32(GEN_TEST_CNTL, fb) & ~HWCURSOR_ENABLE,
fb);
}
- wait_for_idle(fb);
+ if (fb->blitter_may_be_busy)
+ wait_for_idle(fb);
}
static void
@@ -1457,7 +1458,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;
}
@@ -1608,6 +1609,7 @@ static int aty_var_to_pll_ct(const struct fb_info_aty *info, u32 vclk_per,
return err;
if ((((Gx == GT_CHIP_ID) && (Rev & 0x03)) || (Gx == GU_CHIP_ID) ||
+ (Gx == GV_CHIP_ID) || (Gx == GW_CHIP_ID) || (Gx == GZ_CHIP_ID) ||
(Gx == LG_CHIP_ID) || (Gx == GB_CHIP_ID) || (Gx == GD_CHIP_ID) ||
(Gx == GI_CHIP_ID) || (Gx == GP_CHIP_ID) || (Gx == GQ_CHIP_ID) ||
(Gx == VU_CHIP_ID)) && (info->ram_type >= SDRAM))
@@ -1703,6 +1705,8 @@ static void atyfb_set_par(const struct atyfb_par *par,
info->current_par = *par;
+ if (info->blitter_may_be_busy)
+ wait_for_idle(info);
aty_set_crtc(info, &par->crtc);
aty_st_8(CLOCK_CNTL, 0, info);
aty_st_8(CLOCK_CNTL, CLOCK_STROBE, info);
@@ -1717,8 +1721,24 @@ static void atyfb_set_par(const struct atyfb_par *par,
break;
}
aty_set_pll_gx(info, &par->pll.gx);
- aty_st_le32(BUS_CNTL, 0x890e20f1, info);
- aty_st_le32(DAC_CNTL, 0x47052100, info);
+ aty_st_le32(BUS_CNTL, 0x590e10ff, info);
+ aty_st_le32(DAC_CNTL, 0x47012100, 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;
@@ -2456,9 +2476,13 @@ __initfunc(static int aty_init(struct fb_info_aty *info, const char *name))
(Rev == 0x48))) ||
((Gx == VT_CHIP_ID) && ((Rev == 0x01) ||
(Rev == 0x9a))) ||
- (Gx == VU_CHIP_ID)) {
+ Gx == VU_CHIP_ID) {
/* VTA4 or VTB */
pll = 200;
+ } else if (Gx == VV_CHIP_ID) {
+ /* VT4 */
+ pll = 230;
+ mclk = 83;
} else if (Gx == VT_CHIP_ID) {
/* other VT */
pll = 135;
@@ -2470,15 +2494,19 @@ __initfunc(static int aty_init(struct fb_info_aty *info, const char *name))
(Gx == GU_CHIP_ID)) {
/* RAGE II+ */
pll = 200;
+ } else if (Gx == GV_CHIP_ID || Gx == GW_CHIP_ID ||
+ Gx == GZ_CHIP_ID) {
+ /* RAGE IIC */
+ pll = 230;
+ mclk = 83;
} else if (Gx == GB_CHIP_ID || Gx == GD_CHIP_ID ||
Gx == GI_CHIP_ID || Gx == GP_CHIP_ID ||
- Gx == GQ_CHIP_ID || Gx == VV_CHIP_ID ||
- Gx == GV_CHIP_ID || Gx == GW_CHIP_ID ||
- Gx == GZ_CHIP_ID || Gx == LD_CHIP_ID ||
- Gx == LG_CHIP_ID || Gx == LB_CHIP_ID ||
+ Gx == GQ_CHIP_ID || Gx == LB_CHIP_ID ||
+ Gx == LD_CHIP_ID || Gx == LG_CHIP_ID ||
Gx == LI_CHIP_ID || Gx == LP_CHIP_ID) {
- /* RAGE PRO or IIC */
+ /* RAGE PRO or LT PRO */
pll = 230;
+ mclk = 100;
} else {
/* other RAGE */
pll = 135;
@@ -2736,6 +2764,7 @@ __initfunc(void atyfb_init(void))
addr = pdev->base_address[1];
if (!addr)
continue;
+ addr &= PCI_BASE_ADDRESS_MEM_MASK;
#ifdef __sparc__
/*
@@ -3006,12 +3035,9 @@ __initfunc(void atyfb_init(void))
* Map the video memory (physical address given) to somewhere in the
* kernel address space.
*/
- info->frame_buffer = kernel_map(phys_vmembase[m64_num],
- phys_size[m64_num],
- KERNELMAP_NOCACHE_SER, NULL);
+ info->frame_buffer = ioremap(phys_vmembase[m64_num], phys_size[m64_num]);
info->frame_buffer_phys = info->frame_buffer;
- info->ati_regbase = kernel_map(phys_guiregbase[m64_num], 0x10000,
- KERNELMAP_NOCACHE_SER, NULL)+0xFC00ul;
+ info->ati_regbase = ioremap(phys_guiregbase[m64_num], 0x10000)+0xFC00ul;
info->ati_regbase_phys = info->ati_regbase;
if (!aty_init(info, "ISA bus")) {
@@ -3399,6 +3425,7 @@ static inline void draw_rect(s16 x, s16 y, u16 width, u16 height,
wait_for_fifo(2, info);
aty_st_le32(DST_Y_X, (x << 16) | y, info);
aty_st_le32(DST_HEIGHT_WIDTH, (width << 16) | height, info);
+ info->blitter_may_be_busy = 1;
}
static inline void aty_rectcopy(int srcx, int srcy, int dstx, int dsty,
@@ -3561,14 +3588,15 @@ static void fbcon_aty_clear(struct vc_data *conp, struct display *p, int sy,
static void fbcon_aty8_putc(struct vc_data *conp, struct display *p, int c,
int yy, int xx)
{
-#ifdef __sparc__
struct fb_info_aty *fb = (struct fb_info_aty *)(p->fb_info);
+#ifdef __sparc__
if (fb->mmaped && currcon == fb->vtconsole)
return;
#endif
- wait_for_idle((struct fb_info_aty *)p->fb_info);
+ if (fb->blitter_may_be_busy)
+ wait_for_idle((struct fb_info_aty *)p->fb_info);
fbcon_cfb8_putc(conp, p, c, yy, xx);
}
@@ -3576,20 +3604,36 @@ static void fbcon_aty8_putcs(struct vc_data *conp, struct display *p,
const unsigned short *s, int count, int yy,
int xx)
{
-#ifdef __sparc__
struct fb_info_aty *fb = (struct fb_info_aty *)(p->fb_info);
+#ifdef __sparc__
if (fb->mmaped && currcon == fb->vtconsole)
return;
#endif
- wait_for_idle((struct fb_info_aty *)p->fb_info);
+ if (fb->blitter_may_be_busy)
+ wait_for_idle((struct fb_info_aty *)p->fb_info);
fbcon_cfb8_putcs(conp, p, s, count, yy, xx);
}
+static void fbcon_aty8_clear_margins(struct vc_data *conp, struct display *p,
+ int bottom_only)
+{
+ struct fb_info_aty *fb = (struct fb_info_aty *)(p->fb_info);
+
+#ifdef __sparc__
+ if (fb->mmaped && currcon == fb->vtconsole)
+ return;
+#endif
+
+ if (fb->blitter_may_be_busy)
+ wait_for_idle((struct fb_info_aty *)p->fb_info);
+ fbcon_cfb8_clear_margins(conp, p, bottom_only);
+}
+
static struct display_switch fbcon_aty8 = {
fbcon_cfb8_setup, fbcon_aty_bmove, fbcon_aty_clear, fbcon_aty8_putc,
- fbcon_aty8_putcs, fbcon_cfb8_revc, NULL, NULL, fbcon_cfb8_clear_margins,
+ fbcon_aty8_putcs, fbcon_cfb8_revc, NULL, NULL, fbcon_aty8_clear_margins,
FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
};
#endif
@@ -3598,14 +3642,15 @@ static struct display_switch fbcon_aty8 = {
static void fbcon_aty16_putc(struct vc_data *conp, struct display *p, int c,
int yy, int xx)
{
-#ifdef __sparc__
struct fb_info_aty *fb = (struct fb_info_aty *)(p->fb_info);
+#ifdef __sparc__
if (fb->mmaped && currcon == fb->vtconsole)
return;
#endif
- wait_for_idle((struct fb_info_aty *)p->fb_info);
+ if (fb->blitter_may_be_busy)
+ wait_for_idle((struct fb_info_aty *)p->fb_info);
fbcon_cfb16_putc(conp, p, c, yy, xx);
}
@@ -3613,20 +3658,36 @@ static void fbcon_aty16_putcs(struct vc_data *conp, struct display *p,
const unsigned short *s, int count, int yy,
int xx)
{
-#ifdef __sparc__
struct fb_info_aty *fb = (struct fb_info_aty *)(p->fb_info);
+#ifdef __sparc__
if (fb->mmaped && currcon == fb->vtconsole)
return;
#endif
- wait_for_idle((struct fb_info_aty *)p->fb_info);
+ if (fb->blitter_may_be_busy)
+ wait_for_idle((struct fb_info_aty *)p->fb_info);
fbcon_cfb16_putcs(conp, p, s, count, yy, xx);
}
+static void fbcon_aty16_clear_margins(struct vc_data *conp, struct display *p,
+ int bottom_only)
+{
+ struct fb_info_aty *fb = (struct fb_info_aty *)(p->fb_info);
+
+#ifdef __sparc__
+ if (fb->mmaped && currcon == fb->vtconsole)
+ return;
+#endif
+
+ if (fb->blitter_may_be_busy)
+ wait_for_idle((struct fb_info_aty *)p->fb_info);
+ fbcon_cfb16_clear_margins(conp, p, bottom_only);
+}
+
static struct display_switch fbcon_aty16 = {
fbcon_cfb16_setup, fbcon_aty_bmove, fbcon_aty_clear, fbcon_aty16_putc,
- fbcon_aty16_putcs, fbcon_cfb16_revc, NULL, NULL, fbcon_cfb16_clear_margins,
+ fbcon_aty16_putcs, fbcon_cfb16_revc, NULL, NULL, fbcon_aty16_clear_margins,
FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
};
#endif
@@ -3635,14 +3696,15 @@ static struct display_switch fbcon_aty16 = {
static void fbcon_aty24_putc(struct vc_data *conp, struct display *p, int c,
int yy, int xx)
{
-#ifdef __sparc__
struct fb_info_aty *fb = (struct fb_info_aty *)(p->fb_info);
+#ifdef __sparc__
if (fb->mmaped && currcon == fb->vtconsole)
return;
#endif
- wait_for_idle((struct fb_info_aty *)p->fb_info);
+ if (fb->blitter_may_be_busy)
+ wait_for_idle((struct fb_info_aty *)p->fb_info);
fbcon_cfb24_putc(conp, p, c, yy, xx);
}
@@ -3650,20 +3712,36 @@ static void fbcon_aty24_putcs(struct vc_data *conp, struct display *p,
const unsigned short *s, int count, int yy,
int xx)
{
-#ifdef __sparc__
struct fb_info_aty *fb = (struct fb_info_aty *)(p->fb_info);
+#ifdef __sparc__
if (fb->mmaped && currcon == fb->vtconsole)
return;
#endif
- wait_for_idle((struct fb_info_aty *)p->fb_info);
+ if (fb->blitter_may_be_busy)
+ wait_for_idle((struct fb_info_aty *)p->fb_info);
fbcon_cfb24_putcs(conp, p, s, count, yy, xx);
}
+static void fbcon_aty24_clear_margins(struct vc_data *conp, struct display *p,
+ int bottom_only)
+{
+ struct fb_info_aty *fb = (struct fb_info_aty *)(p->fb_info);
+
+#ifdef __sparc__
+ if (fb->mmaped && currcon == fb->vtconsole)
+ return;
+#endif
+
+ if (fb->blitter_may_be_busy)
+ wait_for_idle((struct fb_info_aty *)p->fb_info);
+ fbcon_cfb24_clear_margins(conp, p, bottom_only);
+}
+
static struct display_switch fbcon_aty24 = {
- fbcon_cfb24_setup, fbcon_cfb24_bmove, fbcon_cfb24_clear, fbcon_aty24_putc,
- fbcon_aty24_putcs, fbcon_cfb24_revc, NULL, NULL, fbcon_cfb24_clear_margins,
+ fbcon_cfb24_setup, fbcon_aty_bmove, fbcon_aty_clear, fbcon_aty24_putc,
+ fbcon_aty24_putcs, fbcon_cfb24_revc, NULL, NULL, fbcon_aty24_clear_margins,
FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
};
#endif
@@ -3672,14 +3750,15 @@ static struct display_switch fbcon_aty24 = {
static void fbcon_aty32_putc(struct vc_data *conp, struct display *p, int c,
int yy, int xx)
{
-#ifdef __sparc__
struct fb_info_aty *fb = (struct fb_info_aty *)(p->fb_info);
+#ifdef __sparc__
if (fb->mmaped && currcon == fb->vtconsole)
return;
#endif
- wait_for_idle((struct fb_info_aty *)p->fb_info);
+ if (fb->blitter_may_be_busy)
+ wait_for_idle((struct fb_info_aty *)p->fb_info);
fbcon_cfb32_putc(conp, p, c, yy, xx);
}
@@ -3687,20 +3766,36 @@ static void fbcon_aty32_putcs(struct vc_data *conp, struct display *p,
const unsigned short *s, int count, int yy,
int xx)
{
-#ifdef __sparc__
struct fb_info_aty *fb = (struct fb_info_aty *)(p->fb_info);
+#ifdef __sparc__
if (fb->mmaped && currcon == fb->vtconsole)
return;
#endif
- wait_for_idle((struct fb_info_aty *)p->fb_info);
+ if (fb->blitter_may_be_busy)
+ wait_for_idle((struct fb_info_aty *)p->fb_info);
fbcon_cfb32_putcs(conp, p, s, count, yy, xx);
}
+static void fbcon_aty32_clear_margins(struct vc_data *conp, struct display *p,
+ int bottom_only)
+{
+ struct fb_info_aty *fb = (struct fb_info_aty *)(p->fb_info);
+
+#ifdef __sparc__
+ if (fb->mmaped && currcon == fb->vtconsole)
+ return;
+#endif
+
+ if (fb->blitter_may_be_busy)
+ wait_for_idle((struct fb_info_aty *)p->fb_info);
+ fbcon_cfb32_clear_margins(conp, p, bottom_only);
+}
+
static struct display_switch fbcon_aty32 = {
fbcon_cfb32_setup, fbcon_aty_bmove, fbcon_aty_clear, fbcon_aty32_putc,
- fbcon_aty32_putcs, fbcon_cfb32_revc, NULL, NULL, fbcon_cfb32_clear_margins,
+ fbcon_aty32_putcs, fbcon_cfb32_revc, NULL, NULL, fbcon_aty32_clear_margins,
FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
};
#endif
diff --git a/drivers/video/cgsixfb.c b/drivers/video/cgsixfb.c
index 4e0bc74ed..2891b4877 100644
--- a/drivers/video/cgsixfb.c
+++ b/drivers/video/cgsixfb.c
@@ -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;
diff --git a/drivers/video/chipsfb.c b/drivers/video/chipsfb.c
index 699ae96ff..eb5d8931c 100644
--- a/drivers/video/chipsfb.c
+++ b/drivers/video/chipsfb.c
@@ -53,11 +53,14 @@ struct fb_info_chips {
struct {
__u8 red, green, blue;
} palette[256];
+ unsigned long frame_buffer_phys;
__u8 *frame_buffer;
- __u8 *blitter_regs;
+ unsigned long blitter_regs_phys;
+ __u32 *blitter_regs;
+ unsigned long blitter_data_phys;
+ __u8 *blitter_data;
+ unsigned long io_base_phys;
__u8 *io_base;
- unsigned long chips_base_phys;
- unsigned long chips_io_phys;
struct fb_info_chips *next;
#ifdef CONFIG_PMAC_PBOOK
unsigned char *save_framebuffer;
@@ -214,27 +217,28 @@ static int chips_get_cmap(struct fb_cmap *cmap, int kspc, int con,
if (con == currcon) /* current console? */
return fb_get_cmap(cmap, kspc, chipsfb_getcolreg, info);
if (fb_display[con].cmap.len) /* non default colormap? */
- fb_copy_cmap(&fb_display[con].cmap, cmap, kspc? 0: 2);
- else
- fb_copy_cmap(fb_default_cmap(256), 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);
+ }
return 0;
}
static int chips_set_cmap(struct fb_cmap *cmap, int kspc, int con,
struct fb_info *info)
{
- struct display *disp = &fb_display[con];
int err;
- if (disp->cmap.len == 0) {
- err = fb_alloc_cmap(&disp->cmap, 256, 0);
- if (err)
+ if (!fb_display[con].cmap.len) { /* no colormap allocated? */
+ int size = fb_display[con].var.bits_per_pixel == 16 ? 32 : 256;
+ if ((err = fb_alloc_cmap(&fb_display[con].cmap, size, 0)))
return err;
}
-
- if (con == currcon)
+ if (con == currcon) /* current console? */
return fb_set_cmap(cmap, kspc, chipsfb_setcolreg, info);
- fb_copy_cmap(cmap, &disp->cmap, kspc==0);
+ else
+ fb_copy_cmap(cmap, &fb_display[con].cmap, kspc ? 0 : 1);
return 0;
}
@@ -244,24 +248,21 @@ static int chips_ioctl(struct inode *inode, struct file *file, u_int cmd,
return -EINVAL;
}
-static int chipsfb_switch(int con, struct fb_info *info)
+static int chipsfbcon_switch(int con, struct fb_info *info)
{
struct fb_info_chips *p = (struct fb_info_chips *) info;
- struct display* old_disp = &fb_display[currcon];
- struct display* new_disp = &fb_display[con];
- int bit_depth;
+ int new_bpp, old_bpp;
+ /* Do we have to save the colormap? */
if (fb_display[currcon].cmap.len)
- fb_get_cmap(&old_disp->cmap, 1, chipsfb_getcolreg, info);
+ fb_get_cmap(&fb_display[currcon].cmap, 1, chipsfb_getcolreg, info);
- bit_depth = new_disp->var.bits_per_pixel;
- if (old_disp->var.bits_per_pixel != bit_depth)
- {
- currcon = con;
- chips_set_bitdepth(p, new_disp, con, bit_depth);
- }
- else
- currcon = con;
+ new_bpp = fb_display[con].var.bits_per_pixel;
+ old_bpp = fb_display[currcon].var.bits_per_pixel;
+ currcon = con;
+
+ if (new_bpp != old_bpp)
+ chips_set_bitdepth(p, &fb_display[con], con, new_bpp);
do_install_cmap(con, info);
return 0;
@@ -277,9 +278,10 @@ static void chipsfb_blank(int blank, struct fb_info *info)
struct fb_info_chips *p = (struct fb_info_chips *) info;
int i;
- if (blank > 1) {
+ // used to disable backlight only for blank > 1, but it seems
+ // useful at blank = 1 too (saves battery, extends backlight life)
+ if (blank) {
pmu_enable_backlight(0);
- } else if (blank) {
for (i = 0; i < 256; ++i) {
out_8(p->io_base + 0x3c8, i);
udelay(1);
@@ -311,10 +313,8 @@ static int chipsfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
u_int transp, struct fb_info *info)
{
struct fb_info_chips *p = (struct fb_info_chips *) info;
- int hr;
- hr = (p->fix.visual != FB_VISUAL_PSEUDOCOLOR)? (regno << 3): regno;
- if (hr > 255)
+ if (regno > 255)
return 1;
red >>= 8;
green >>= 8;
@@ -322,18 +322,18 @@ static int chipsfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
p->palette[regno].red = red;
p->palette[regno].green = green;
p->palette[regno].blue = blue;
- out_8(p->io_base + 0x3c8, hr);
+ out_8(p->io_base + 0x3c8, regno);
udelay(1);
out_8(p->io_base + 0x3c9, red);
out_8(p->io_base + 0x3c9, green);
out_8(p->io_base + 0x3c9, blue);
#ifdef FBCON_HAS_CFB16
- if (regno < 16)
- p->fbcon_cfb16_cmap[regno] = (red << 10) | (green << 5) | blue;
+ if (regno < 16) p->fbcon_cfb16_cmap[regno] =
+ ((red & 0xf8) << 7) | ((green & 0xf8) << 2) | ((blue & 0xf8) >> 3);
#endif
- return 0;
+ return 0;
}
static void do_install_cmap(int con, struct fb_info *info)
@@ -356,13 +356,14 @@ static void chips_set_bitdepth(struct fb_info_chips *p, struct display* disp, in
if (bpp == 16) {
if (con == currcon) {
- write_cr(0x13, 200); // 16 bit display width (decimal)
- write_xr(0x81, 0x14); // 15 bit (TrueColor) color mode
+ write_cr(0x13, 200); // Set line length (doublewords)
+ write_xr(0x81, 0x14); // 15 bit (555) color mode
+ write_xr(0x82, 0x00); // Disable palettes
write_xr(0x20, 0x10); // 16 bit blitter mode
}
fix->line_length = 800*2;
- fix->visual = FB_VISUAL_DIRECTCOLOR;
+ fix->visual = FB_VISUAL_TRUECOLOR;
var->red.offset = 10;
var->green.offset = 5;
@@ -377,8 +378,9 @@ static void chips_set_bitdepth(struct fb_info_chips *p, struct display* disp, in
#endif
} else if (bpp == 8) {
if (con == currcon) {
- write_cr(0x13, 100); // 8 bit display width (decimal)
+ write_cr(0x13, 100); // Set line length (doublewords)
write_xr(0x81, 0x12); // 8 bit color mode
+ write_xr(0x82, 0x08); // Graphics gamma enable
write_xr(0x20, 0x00); // 8 bit blitter mode
}
@@ -400,7 +402,7 @@ static void chips_set_bitdepth(struct fb_info_chips *p, struct display* disp, in
disp->visual = fix->visual;
disp->var = *var;
-#ifdef CONFIG_PMAC_PBOOK
+#if (defined(CONFIG_PMAC_PBOOK) || defined(CONFIG_FB_COMPAT_XPMAC))
display_info.depth = bpp;
display_info.pitch = fix->line_length;
#endif
@@ -547,9 +549,17 @@ __initfunc(static void init_chips(struct fb_info_chips *p))
int i;
strcpy(p->fix.id, "C&T 65550");
- p->fix.smem_start = (char *) p->chips_base_phys;
- p->fix.smem_len = 800 * 600;
- p->fix.mmio_start = (char *) p->chips_io_phys;
+ p->fix.smem_start = (char *) p->frame_buffer_phys;
+
+// FIXME: Assumes 1MB frame buffer, but 65550 supports 1MB or 2MB.
+// * "3500" PowerBook G3 (the original PB G3) has 2MB.
+// * 2400 has 1MB composed of 2 Mitsubishi M5M4V4265CTP DRAM chips.
+// Motherboard actually supports 2MB -- there are two blank locations
+// for a second pair of DRAMs. (Thanks, Apple!)
+// * 3400 has 1MB (I think). Don't know if it's expandable.
+// -- Tim Seufert
+ p->fix.smem_len = 0x100000; // 1MB
+ p->fix.mmio_start = (char *) p->io_base_phys;
p->fix.type = FB_TYPE_PACKED_PIXELS;
p->fix.visual = FB_VISUAL_PSEUDOCOLOR;
p->fix.line_length = 800;
@@ -572,7 +582,7 @@ __initfunc(static void init_chips(struct fb_info_chips *p))
p->disp.cmap.green = NULL;
p->disp.cmap.blue = NULL;
p->disp.cmap.transp = NULL;
- p->disp.screen_base = (char *) p->frame_buffer;
+ p->disp.screen_base = p->frame_buffer;
p->disp.visual = p->fix.visual;
p->disp.type = p->fix.type;
p->disp.type_aux = p->fix.type_aux;
@@ -587,7 +597,7 @@ __initfunc(static void init_chips(struct fb_info_chips *p))
p->info.disp = &p->disp;
p->info.fontname[0] = 0;
p->info.changevar = NULL;
- p->info.switch_con = &chipsfb_switch;
+ p->info.switch_con = &chipsfbcon_switch;
p->info.updatevar = &chipsfb_updatevar;
p->info.blank = &chipsfb_blank;
p->info.flags = FBINFO_FLAG_DEFAULT;
@@ -604,7 +614,8 @@ __initfunc(static void init_chips(struct fb_info_chips *p))
return;
}
- printk("fb%d: Chips 65550 frame buffer\n", GET_FB_IDX(p->info.node));
+ printk("fb%d: Chips 65550 frame buffer (%dK RAM detected)\n",
+ GET_FB_IDX(p->info.node), p->fix.smem_len / 1024);
chips_hw_init(p);
@@ -617,10 +628,10 @@ __initfunc(static void init_chips(struct fb_info_chips *p))
display_info.mode = VMODE_800_600_60;
strncpy(display_info.name, "chips65550",
sizeof(display_info.name));
- display_info.fb_address = p->chips_base_phys + 0x800000;
- display_info.cmap_adr_address = p->chips_io_phys + 0x3c8;
- display_info.cmap_data_address = p->chips_io_phys + 0x3c9;
- display_info.disp_reg_address = p->chips_base_phys + 0xc00000;
+ display_info.fb_address = p->frame_buffer_phys;
+ display_info.cmap_adr_address = p->io_base_phys + 0x3c8;
+ display_info.cmap_data_address = p->io_base_phys + 0x3c9;
+ display_info.disp_reg_address = p->blitter_regs_phys;
console_fb_info = &p->info;
}
#endif /* CONFIG_FB_COMPAT_XPMAC */
@@ -659,17 +670,23 @@ __initfunc(void chips_of_init(struct device_node *dp))
return;
memset(p, 0, sizeof(*p));
addr = dp->addrs[0].address;
- p->chips_base_phys = addr;
- p->frame_buffer = __ioremap(addr+0x800000, 0x100000, _PAGE_NO_CACHE);
- p->blitter_regs = ioremap(addr + 0xC00000, 0x1000);
+#ifdef __BIG_ENDIAN
+ addr += 0x800000; // Use big-endian aperture
+#endif
+ p->frame_buffer_phys = addr;
+ p->frame_buffer = __ioremap(addr, 0x200000, _PAGE_NO_CACHE);
+ p->blitter_regs_phys = addr + 0x400000;
+ p->blitter_regs = ioremap(addr + 0x400000, 0x1000);
+ p->blitter_data_phys = addr + 0x410000;
+ p->blitter_data = ioremap(addr + 0x410000, 0x10000);
if (pci_device_loc(dp, &bus, &devfn) == 0) {
pcibios_read_config_word(bus, devfn, PCI_COMMAND, &cmd);
cmd |= 3; /* enable memory and IO space */
pcibios_write_config_word(bus, devfn, PCI_COMMAND, cmd);
- p->io_base = (unsigned char *) pci_io_base(bus);
+ p->io_base = (__u8 *) pci_io_base(bus);
/* XXX really want the physical address here */
- p->chips_io_phys = (unsigned long) pci_io_base(bus);
+ p->io_base_phys = (unsigned long) pci_io_base(bus);
}
/* Clear the entire framebuffer */
diff --git a/drivers/video/clgenfb.c b/drivers/video/clgenfb.c
index 68078c091..6e09ae666 100644
--- a/drivers/video/clgenfb.c
+++ b/drivers/video/clgenfb.c
@@ -16,6 +16,7 @@
#include <asm/amigahw.h>
#include <asm/pgtable.h>
#include <asm/delay.h>
+#include <asm/io.h>
#include <video/fbcon.h>
#include <video/fbcon-mfb.h>
@@ -1533,15 +1534,13 @@ __initfunc(void clgenfb_init(void))
/* begin of the board, but the begin of RAM. */
/* for P4, map in its address space in 2 chunks (### TEST! ) */
/* (note the ugly hardcoded 16M number) */
- fb_info->regs = (unsigned char *)kernel_map(board_addr, 16777216,
- KERNELMAP_NOCACHE_SER, NULL);
+ fb_info->regs = ioremap(board_addr, 16777216);
DEBUG printk(KERN_INFO "clgen: Virtual address for board set to: $%p\n", fb_info->regs);
fb_info->regs += 0x600000;
fb_info->fbregs_phys = board_addr + 0x600000;
fb_info->fbmem_phys = board_addr + 16777216;
- fb_info->fbmem = kernel_map(fb_info->fbmem_phys, 16777216,
- KERNELMAP_NOCACHE_SER, NULL);
+ fb_info->fbmem = ioremap(fb_info->fbmem_phys, 16777216);
DEBUG printk(KERN_INFO "clgen: (RAM start set to: $%lx)\n", fb_info->fbmem);
}
else
@@ -1551,8 +1550,7 @@ __initfunc(void clgenfb_init(void))
fb_info->fbmem_phys = board_addr;
if (board_addr > 0x01000000)
- fb_info->fbmem = kernel_map(board_addr, board_size,
- KERNELMAP_NOCACHE_SER, NULL);
+ fb_info->fbmem = ioremap(board_addr, board_size);
else
fb_info->fbmem = ZTWO_VADDR(board_addr);
diff --git a/drivers/video/controlfb.c b/drivers/video/controlfb.c
index d1a63b64f..129c4e396 100644
--- a/drivers/video/controlfb.c
+++ b/drivers/video/controlfb.c
@@ -57,12 +57,6 @@
#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
diff --git a/drivers/video/controlfb.h b/drivers/video/controlfb.h
index 32943ed27..ea8c36105 100644
--- a/drivers/video/controlfb.h
+++ b/drivers/video/controlfb.h
@@ -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,
diff --git a/drivers/video/creatorfb.c b/drivers/video/creatorfb.c
index 6c8f14b1d..69242992d 100644
--- a/drivers/video/creatorfb.c
+++ b/drivers/video/creatorfb.c
@@ -1,4 +1,4 @@
-/* $Id: creatorfb.c,v 1.15 1998/09/04 15:43:40 jj Exp $
+/* $Id: creatorfb.c,v 1.17 1998/12/28 11:23:37 jj Exp $
* creatorfb.c: Creator/Creator3D frame buffer driver
*
* Copyright (C) 1997,1998 Jakub Jelinek (jj@ultra.linux.cz)
@@ -123,7 +123,12 @@
#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,8 @@ 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;
+ FFBWait(fbc);
+ FFBFifo(fbc, 6);
fbc->fg = ((u32 *)p->dispsw_data)[attr_bgcol_ec(p,conp)];
fbc->drawop = FFB_DRAWOP_RECTANGLE;
@@ -337,9 +368,12 @@ static void ffb_fill(struct fb_info_sbusfb *fb, struct display *p, int s,
{
register struct ffb_fbc *fbc = fb->s.ffb.fbc;
+ FFBWait(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];
@@ -370,11 +404,14 @@ 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;
+ FFBWait(fbc);
+ 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;
@@ -394,6 +431,8 @@ static void ffb_putcs(struct vc_data *conp, struct display *p, const unsigned sh
int i, xy;
u8 *fd1, *fd2, *fd3, *fd4;
+ FFBWait(fbc);
+ 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 +447,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 +462,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 +478,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 +489,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 +499,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 +507,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++)
@@ -573,10 +618,13 @@ static void ffb_switch_from_graph (struct fb_info_sbusfb *fb)
{
register struct ffb_fbc *fbc = fb->s.ffb.fbc;
+ FFBWait(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 };
@@ -588,7 +636,9 @@ __initfunc(char *creatorfb_init(struct fb_info_sbusfb *fb))
struct display *disp = &fb->disp;
struct fbtype *type = &fb->type;
struct linux_prom64_registers regs[2*PROMREG_MAX];
- int i;
+ int i, afb = 0;
+ unsigned int btype;
+ char name[64];
if (prom_getproperty(fb->prom_node, "reg", (void *) regs, sizeof(regs)) <= 0)
return NULL;
@@ -597,10 +647,22 @@ __initfunc(char *creatorfb_init(struct fb_info_sbusfb *fb))
if (!disp->dispsw_data)
return NULL;
memset(disp->dispsw_data, 0, 16 * sizeof(u32));
+
+ prom_getstring(fb->prom_node, "name", name, sizeof(name));
+ if (!strcmp(name, "SUNW,afb"))
+ afb = 1;
- strcpy(fb->info.modename, "Creator");
+ btype = prom_getintdefault(fb->prom_node, "board_type", 0);
- strcpy(fix->id, "Creator");
+ strcpy(fb->info.modename, "Creator");
+ if (!afb) {
+ if ((btype & 7) == 3)
+ strcpy(fix->id, "Creator 3D");
+ else
+ strcpy(fix->id, "Creator");
+ } else
+ strcpy(fix->id, "Elite 3D");
+
fix->visual = FB_VISUAL_TRUECOLOR;
fix->line_length = 8192;
fix->accel = FB_ACCEL_SUN_CREATOR;
@@ -625,6 +687,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;
@@ -640,7 +708,7 @@ __initfunc(char *creatorfb_init(struct fb_info_sbusfb *fb))
i = prom_getintdefault (fb->prom_node, "board_type", 8);
- sprintf(idstring, "Creator at %016lx type %d DAC %d", regs[0].phys_addr, i, fb->s.ffb.dac_rev);
+ sprintf(idstring, "%s at %016lx type %d DAC %d", fix->id, regs[0].phys_addr, i, fb->s.ffb.dac_rev);
return idstring;
}
diff --git a/drivers/video/cvisionppc.h b/drivers/video/cvisionppc.h
new file mode 100644
index 000000000..4a137548f
--- /dev/null
+++ b/drivers/video/cvisionppc.h
@@ -0,0 +1,51 @@
+/*
+ * Phase5 CybervisionPPC (TVP4020) definitions for the Permedia2 framebuffer
+ * driver.
+ *
+ * Copyright (c) 1998-1999 Ilario Nardinocchi (nardinoc@CS.UniBO.IT)
+ * --------------------------------------------------------------------------
+ * $Id: cvisionppc.h,v 1.1.2.1 1999/01/12 19:52:59 geert Exp $
+ * --------------------------------------------------------------------------
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file README.legal in the main directory of this archive
+ * for more details.
+ */
+
+#ifndef CVISIONPPC_H
+#define CVISIONPPC_H
+
+#ifndef PM2FB_H
+#include "pm2fb.h"
+#endif
+
+struct cvppc_par {
+ unsigned char* pci_config;
+ unsigned char* pci_bridge;
+ unsigned long user_flags;
+};
+
+#define CSPPC_PCI_BRIDGE 0xfffe0000
+#define CSPPC_BRIDGE_ENDIAN 0x0000
+#define CSPPC_BRIDGE_INT 0x0010
+
+#define CVPPC_PCI_CONFIG 0xfffc0000
+#define CVPPC_ROM_ADDRESS 0xe2000001
+#define CVPPC_REGS_REGION 0xef000000
+#define CVPPC_FB_APERTURE_ONE 0xe0000000
+#define CVPPC_FB_APERTURE_TWO 0xe1000000
+#define CVPPC_FB_SIZE 0x00800000
+#define CVPPC_MEM_CONFIG_OLD 0xed61fcaa /* FIXME Fujitsu?? */
+#define CVPPC_MEM_CONFIG_NEW 0xed41c532 /* FIXME USA?? */
+#define CVPPC_MEMCLOCK 83000 /* in KHz */
+
+/* CVPPC_BRIDGE_ENDIAN */
+#define CSPPCF_BRIDGE_BIG_ENDIAN 0x02
+
+/* CVPPC_BRIDGE_INT */
+#define CSPPCF_BRIDGE_ACTIVE_INT2 0x01
+
+#endif /* CVISIONPPC_H */
+
+/*****************************************************************************
+ * That's all folks!
+ *****************************************************************************/
diff --git a/drivers/video/cvppcfb.c b/drivers/video/cvppcfb.c
deleted file mode 100644
index 3e786ab61..000000000
--- a/drivers/video/cvppcfb.c
+++ /dev/null
@@ -1,606 +0,0 @@
-/*
- * CybervisionPPC (TVP4020) low level driver for the frame buffer device
- * ^^^^^^^^^
- * literally ;)
- *
- * Copyright (c) 1998 Ilario Nardinocchi (nardinoc@CS.UniBO.IT) (v124)
- * --------------------------------------------------------------------------
- * based on linux/drivers/video/skeletonfb.c by Geert Uytterhoeven
- * --------------------------------------------------------------------------
- * TODO h/w parameters detect/modify, 8-bit CLUT, acceleration
- * --------------------------------------------------------------------------
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file README.legal in the main directory of this archive
- * for more details.
- */
-
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/errno.h>
-#include <linux/string.h>
-#include <linux/mm.h>
-#include <linux/tty.h>
-#include <linux/malloc.h>
-#include <linux/delay.h>
-#include <linux/fb.h>
-#include <linux/init.h>
-#include <asm/uaccess.h>
-#include <asm/system.h>
-#include <asm/irq.h>
-#include <asm/pgtable.h>
-#include <asm/amigahw.h>
-#include <video/fbcon.h>
-#include <video/fbcon-cfb8.h>
-#include <video/fbcon-cfb16.h>
-#include <video/fbcon-cfb32.h>
-#include <asm/setup.h>
-#include <asm/io.h>
-
-#define ISDIGIT(a) ((a)>='0' && (a)<='9')
-
-#undef CVPPCFB_MASTER_DEBUG
-#ifdef CVPPCFB_MASTER_DEBUG
-#define FBEGIN if (usr_startup.debug>1)\
- printk(__FUNCTION__ " {\n")
-#define FEND if (usr_startup.debug>1)\
- printk("} /* " __FUNCTION__ " */\n")
-#define DPRINTK(a,b...) if (usr_startup.debug)\
- printk("%s: " a, __FUNCTION__ , ## b)
-#else
-#define FBEGIN
-#define FEND
-#define DPRINTK(a,b...)
-#endif
-
-static const char cvppcfb_name[16]="CybervisionPPC";
-
-struct cvppcfb_startup { /* startup options */
- char font[40];
- u32 xres;
- u32 yres;
- u32 bpp;
- unsigned long debug;
- unsigned long YANW; /* You Are Not Welcome */
- struct fb_monspecs monitor;
-};
-static struct cvppcfb_startup usr_startup = {
- "\0", 640, 480, 16, 0, 1, { 31, 32, 58, 62, 0 } };
-
-#define CVPPC_BASE 0xe0000000
-#define CVPPC_SIZE 0x00800000
-static char* video_base; /* virtual address of board video memory */
-static unsigned long video_phys;/* physical address of board video memory */
-static u32 video_size; /* size of board video memory */
-
-struct cvppcfb_par { /* board parameters (sort of) */
- u32 xres;
- u32 yres;
- u32 vxres;
- u32 vyres;
- u32 vxoff;
- u32 vyoff;
- u32 bpp;
- u32 clock;
- u32 sflags;
- u32 left;
- u32 right;
- u32 top;
- u32 bottom;
- u32 hsynclen;
- u32 vsynclen;
-};
-
-struct cvppcfb_info {
- struct fb_info_gen gen;
- struct cvppcfb_par current_par;
- int current_par_valid;
- struct display disp;
- struct {
- u8 transp;
- u8 red;
- u8 green;
- u8 blue;
- } palette[256];
- union {
-#ifdef FBCON_HAS_CFB16
- u16 cmap16[16];
-#endif
-#ifdef FBCON_HAS_CFB32
- u32 cmap32[16];
-#endif
- } cmap;
-};
-static struct cvppcfb_info fb_info;
-
-/*
- * declaration of hw switch functions
- */
-static void cvppcfb_detect(void);
-static int cvppcfb_encode_fix(struct fb_fix_screeninfo* fix,
- const void* par, struct fb_info_gen* info);
-static int cvppcfb_decode_var(const struct fb_var_screeninfo* var,
- void* par, struct fb_info_gen* info);
-static int cvppcfb_encode_var(struct fb_var_screeninfo* var,
- const void* par, struct fb_info_gen* info);
-static void cvppcfb_get_par(void* par, struct fb_info_gen* info);
-static void cvppcfb_set_par(const void* par, struct fb_info_gen* info);
-static int cvppcfb_getcolreg(unsigned regno,
- unsigned* red, unsigned* green, unsigned* blue,
- unsigned* transp, struct fb_info* info);
-static int cvppcfb_setcolreg(unsigned regno,
- unsigned red, unsigned green, unsigned blue,
- unsigned transp, struct fb_info* info);
-static void cvppcfb_dispsw(const void* par, struct display* disp,
- struct fb_info_gen* info);
-
-static struct fbgen_hwswitch cvppcfb_hwswitch={
- cvppcfb_detect, cvppcfb_encode_fix, cvppcfb_decode_var,
- cvppcfb_encode_var, cvppcfb_get_par, cvppcfb_set_par,
- cvppcfb_getcolreg, cvppcfb_setcolreg, NULL /* pan_display() */,
- NULL /* blank() */, cvppcfb_dispsw
-};
-
-/*
- * declaration of ops switch functions
- */
-static int cvppcfb_open(struct fb_info* info, int user);
-static int cvppcfb_release(struct fb_info* info, int user);
-
-static struct fb_ops cvppcfb_ops={
- cvppcfb_open, cvppcfb_release, fbgen_get_fix, fbgen_get_var,
- fbgen_set_var, fbgen_get_cmap, fbgen_set_cmap, fbgen_pan_display,
- fbgen_ioctl, NULL /* fb_mmap() */
-};
-
-/*
- * the actual definition of the above mentioned functions follows
- */
-
-/*
- * private functions
- */
-
-static void cvppcfb_set_modename(struct cvppcfb_info* info,
- struct cvppcfb_startup* s) {
-
- strcpy(info->gen.info.modename, cvppcfb_name);
-}
-
-static void cvppcfb_decode_opt(struct cvppcfb_startup* s, void* par,
- struct cvppcfb_info* info) {
- struct cvppcfb_par* p=(struct cvppcfb_par* )par;
-
- memset(p, 0, sizeof(struct cvppcfb_par));
- p->xres=p->vxres=(s->xres+7)&~7;
- p->yres=p->vyres=s->yres;
- p->bpp=(s->bpp+7)&~7;
- if (p->bpp==24)
- p->bpp=32;
- if (p->bpp<32)
- p->clock=6666;
- else
- p->clock=10000;
-}
-
-static void cvppcfb_encode_mcap(char* options, struct fb_monspecs* mcap) {
- char* next;
- int i=0;
-
- while (i<4 && options) {
- if ((next=strchr(options, ';')))
- *(next++)='\0';
- switch (i++) {
- case 0: /* vmin */
- mcap->vfmin=(__u16 )
- simple_strtoul(options, NULL, 0);
- break;
- case 1: /* vmax */
- mcap->vfmax=(__u16 )
- simple_strtoul(options, NULL, 0);
- break;
- case 2: /* hmin */
- mcap->hfmin=(__u32 )
- simple_strtoul(options, NULL, 0);
- break;
- case 3: /* hmax */
- mcap->hfmax=(__u32 )
- simple_strtoul(options, NULL, 0);
- break;
- }
- options=next;
- }
-}
-
-static void cvppcfb_encode_mode(char* options, struct cvppcfb_startup* s) {
- char* next;
- int i=0;
-
- while (i<3 && options) {
- if ((next=strchr(options, ';')))
- *(next++)='\0';
- switch (i++) {
- case 0:
- s->xres=(u32 )
- simple_strtoul(options, NULL, 0);
- break;
- case 1:
- s->yres=(u32 )
- simple_strtoul(options, NULL, 0);
- break;
- case 2:
- s->bpp=(u32 )
- simple_strtoul(options, NULL, 0);
- break;
- }
- options=next;
- }
-}
-
-/*
- * protected functions
- */
-
-static void cvppcfb_detect(void) {
-
- FBEGIN;
- FEND;
-}
-
-static int cvppcfb_encode_fix(struct fb_fix_screeninfo* fix,
- const void* par, struct fb_info_gen* info) {
-
- FBEGIN;
- strcpy(fix->id, cvppcfb_name);
- fix->smem_start=(char* )video_phys;
- fix->smem_len=(__u32 )video_size;
- fix->type=FB_TYPE_PACKED_PIXELS;
- if (((struct cvppcfb_par* )par)->bpp==8)
- fix->visual=FB_VISUAL_PSEUDOCOLOR;
- else
- fix->visual=FB_VISUAL_TRUECOLOR;
- fix->xpanstep=fix->ypanstep=fix->ywrapstep=0;
- fix->line_length=0; /* computed by fbcon */
- fix->mmio_start=NULL;
- fix->mmio_len=0;
- fix->accel=FB_ACCEL_NONE;
- FEND;
- return 0;
-}
-
-static int cvppcfb_decode_var(const struct fb_var_screeninfo* var,
- void* par, struct fb_info_gen* info) {
- struct cvppcfb_par p;
-
- FBEGIN;
- memset(&p, 0, sizeof(struct cvppcfb_par));
- p.bpp=(var->bits_per_pixel+7)&~7;
- if (p.bpp==24)
- p.bpp=32;
- if (p.bpp>32) {
- DPRINTK("depth too big (%lu)\n", p.bpp);
- return -EINVAL;
- }
- p.xres=(var->xres+7)&~7;
- p.yres=var->yres;
- if (p.xres<320 || p.yres<200 || p.xres>2048 || p.yres>2048) {
- DPRINTK("bad resolution (%lux%lu)\n", p.xres, p.yres);
- return -EINVAL;
- }
- p.vxres=(var->xres_virtual+7)&~7;
- p.vxoff=(var->xoffset+7)&~7;
- p.vyres=var->yres_virtual;
- p.vyoff=var->yoffset;
- if (p.vxres<p.xres+p.vxoff)
- p.vxres=p.xres+p.vxoff;
- if (p.vyres<p.yres+p.vyoff)
- p.vyres=p.yres+p.vyoff;
- if (p.vxres*p.vyres*p.bpp/8>video_size) {
- DPRINTK("no memory for screen (%lux%lux%lu)\n",
- p.vxres, p.vyres, p.bpp);
- return -EINVAL;
- }
- p.sflags=var->sync&(FB_SYNC_HOR_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT);
- p.clock=var->pixclock;
- if (p.clock<6666) {
- DPRINTK("pixclock too fast (%lu)\n", p.clock);
- return -EINVAL;
- }
- p.left=var->left_margin;
- p.top=var->upper_margin;
- p.right=var->right_margin;
- p.bottom=var->lower_margin;
- p.hsynclen=var->hsync_len;
- p.vsynclen=var->vsync_len;
- *((struct cvppcfb_par* )par)=p;
- FEND;
- return 0;
-}
-
-static int cvppcfb_encode_var(struct fb_var_screeninfo* var,
- const void* par, struct fb_info_gen* info) {
- struct cvppcfb_par* p=(struct cvppcfb_par* )par;
- struct fb_var_screeninfo v;
-
- FBEGIN;
- memset(&v, 0, sizeof(struct fb_var_screeninfo));
- v.xres=p->xres;
- v.yres=p->yres;
- v.xres_virtual=p->vxres;
- v.yres_virtual=p->vyres;
- v.xoffset=p->vxoff;
- v.yoffset=p->vyoff;
- v.bits_per_pixel=p->bpp;
- switch (p->bpp) {
- case 16:
- v.red.offset=11;
- v.red.length=5;
- v.green.offset=5;
- v.green.length=6;
- v.blue.length=5;
- break;
- case 32:
- v.transp.offset=24;
- v.red.offset=16;
- v.green.offset=8;
- v.transp.length=8;
- /* fallback */
- case 8:
- v.red.length=v.green.length=v.blue.length=8;
- break;
- }
- v.activate=FB_ACTIVATE_NOW;
- v.height=v.width=-1;
- v.pixclock=p->clock;
- v.left_margin=p->left;
- v.right_margin=p->right;
- v.upper_margin=p->top;
- v.lower_margin=p->bottom;
- v.hsync_len=p->hsynclen;
- v.vsync_len=p->vsynclen;
- v.sync=p->sflags;
- v.vmode=FB_VMODE_NONINTERLACED;
- *var=v;
- FEND;
- return 0;
-}
-
-static void cvppcfb_get_par(void* par, struct fb_info_gen* info) {
- struct cvppcfb_info* i=(struct cvppcfb_info* )info;
-
- FBEGIN;
- if (i->current_par_valid)
- *((struct cvppcfb_par* )par)=i->current_par;
- else
- cvppcfb_decode_opt(&usr_startup, par, i);
- FEND;
-}
-
-static void cvppcfb_set_par(const void* par, struct fb_info_gen* info) {
- struct cvppcfb_info* i=(struct cvppcfb_info* )info;
-
- FBEGIN;
- i->current_par=*((struct cvppcfb_par* )par);
- i->current_par_valid=1;
- FEND;
-}
-
-static int cvppcfb_getcolreg(unsigned regno,
- unsigned* red, unsigned* green, unsigned* blue,
- unsigned* transp, struct fb_info* info) {
- struct cvppcfb_info* i=(struct cvppcfb_info* )info;
-
- if (regno<256) {
- *red=i->palette[regno].red<<8|i->palette[regno].red;
- *green=i->palette[regno].green<<8|i->palette[regno].green;
- *blue=i->palette[regno].blue<<8|i->palette[regno].blue;
- *transp=i->palette[regno].transp<<8|i->palette[regno].transp;
- }
- return regno>255;
-}
-
-static int cvppcfb_setcolreg(unsigned regno,
- unsigned red, unsigned green, unsigned blue,
- unsigned transp, struct fb_info* info) {
- struct cvppcfb_info* i=(struct cvppcfb_info* )info;
-
- if (regno<16) {
- switch (i->current_par.bpp) {
-#ifdef FBCON_HAS_CFB8
- case 8:
- DPRINTK("8 bit depth not supported yet.\n");
- return 1;
-#endif
-#ifdef FBCON_HAS_CFB16
- case 16:
- i->cmap.cmap16[regno]=
- ((u32 )red & 0xf800) |
- (((u32 )green & 0xfc00)>>5) |
- (((u32 )blue & 0xf800)>>11);
- break;
-#endif
-#ifdef FBCON_HAS_CFB32
- case 32:
- i->cmap.cmap32[regno]=
- (((u32 )transp & 0xff00) << 16) |
- (((u32 )red & 0xff00) << 8) |
- (((u32 )green & 0xff00)) |
- (((u32 )blue & 0xff00) >> 8);
- break;
-#endif
- }
- }
- if (regno<256) {
- i->palette[regno].red=red >> 8;
- i->palette[regno].green=green >> 8;
- i->palette[regno].blue=blue >> 8;
- i->palette[regno].transp=transp >> 8;
- }
- return regno>255;
-}
-
-static void cvppcfb_dispsw(const void* par, struct display* disp,
- struct fb_info_gen* info) {
- struct cvppcfb_info* i=(struct cvppcfb_info* )info;
- unsigned long flags;
-
- FBEGIN;
- save_flags(flags);
- cli();
- switch (((struct cvppcfb_par* )par)->bpp) {
-#ifdef FBCON_HAS_CFB8
- case 8:
- disp->dispsw=&fbcon_cfb8;
- break;
-#endif
-#ifdef FBCON_HAS_CFB16
- case 16:
- disp->dispsw=&fbcon_cfb16;
- disp->dispsw_data=i->cmap.cmap16;
- break;
-#endif
-#ifdef FBCON_HAS_CFB32
- case 32:
- disp->dispsw=&fbcon_cfb32;
- disp->dispsw_data=i->cmap.cmap32;
- break;
-#endif
- default:
- disp->dispsw=&fbcon_dummy;
- break;
- }
- restore_flags(flags);
- FEND;
-}
-
-static int cvppcfb_open(struct fb_info* info, int user) {
-
- MOD_INC_USE_COUNT;
- return 0;
-}
-
-static int cvppcfb_release(struct fb_info* info, int user) {
-
- MOD_DEC_USE_COUNT;
- return 0;
-}
-
-/*
- * public functions
- */
-
-void cvppcfb_cleanup(struct fb_info* info) {
-
- unregister_framebuffer(info);
-}
-
-__initfunc(void cvppcfb_init(void)) {
-
- FBEGIN;
-#ifdef CVPPCFB_MASTER_DEBUG
- printk("cvppcfb_init():\n");
- printk(" resolution %ldx%ldx%ld\n", usr_startup.xres,
- usr_startup.yres, usr_startup.bpp);
- printk(" debug: %ld, YANW: %ld\n", usr_startup.debug,
- usr_startup.YANW);
- printk(" monitorcap: %ld,%ld,%ld,%ld\n",
- usr_startup.monitor.vfmin, usr_startup.monitor.vfmax,
- usr_startup.monitor.hfmin, usr_startup.monitor.hfmax);
-#endif
- if (usr_startup.YANW) /* cannot probe yet */
- return;
- memset(&fb_info, 0, sizeof(struct cvppcfb_info));
- video_size=CVPPC_SIZE;
- video_phys=CVPPC_BASE;
-#ifdef CONFIG_APUS
- video_base=(char* )
- kernel_map(video_phys, video_size, KERNELMAP_NOCACHE_SER, NULL);
-#else
- video_base=ioremap(video_phys, video_size);
-#endif
- DPRINTK("video_phys=%08lx, video_base=%08lx\n", video_phys, video_base);
- DPRINTK("phys_to_virt(video_phys)=%08lx\n", phys_to_virt(video_phys));
- DPRINTK("virt_to_phys(video_base)=%08lx\n", virt_to_phys(video_base));
- fb_info.disp.scrollmode=SCROLL_YREDRAW;
- fb_info.gen.parsize=sizeof(struct cvppcfb_par);
- fb_info.gen.fbhw=&cvppcfb_hwswitch;
- cvppcfb_set_modename(&fb_info, &usr_startup);
- fb_info.gen.info.flags=FBINFO_FLAG_DEFAULT;
- fb_info.gen.info.fbops=&cvppcfb_ops;
- fb_info.gen.info.monspecs=usr_startup.monitor;
- fb_info.gen.info.disp=&fb_info.disp;
- strcpy(fb_info.gen.info.fontname, usr_startup.font);
- fb_info.gen.info.switch_con=&fbgen_switch;
- fb_info.gen.info.updatevar=&fbgen_update_var;
- fb_info.gen.info.blank=&fbgen_blank;
- fbgen_get_var(&fb_info.disp.var, -1, &fb_info.gen.info);
- if (fbgen_do_set_var(&fb_info.disp.var, 1, &fb_info.gen)<0) {
- printk( "cvppcfb: bad startup configuration: "
- "unable to register.\n");
- return;
- }
- fbgen_set_disp(-1, &fb_info.gen);
- fbgen_install_cmap(0, &fb_info.gen);
- if (register_framebuffer(&fb_info.gen.info)<0) {
- printk("cvppcfb: unable to register.\n");
- return;
- }
- printk("fb%d: %s frame buffer device, using %ldK of video memory\n",
- GET_FB_IDX(fb_info.gen.info.node), fb_info.gen.info.modename,
- (unsigned long )(video_size>>10));
- MOD_INC_USE_COUNT;
- FEND;
-}
-
-__initfunc(void cvppcfb_setup(char* options, int* ints)) {
- char* next;
-
- usr_startup.YANW=0;
- DPRINTK("options: '%s'\n", options);
- while (options) {
- if ((next=strchr(options, ',')))
- *(next++)='\0';
- if (!strncmp(options, "monitorcap:", 11))
- cvppcfb_encode_mcap(options+11, &usr_startup.monitor);
- else if (!strncmp(options, "debug:", 6)) {
- if (ISDIGIT(options[6]))
- usr_startup.debug=options[6]-'0';
- else
- usr_startup.debug=1;
- }
- else if (!strncmp(options, "mode:", 5))
- cvppcfb_encode_mode(options+5, &usr_startup);
- else if (!strncmp(options, "font:", 5))
- strcpy(usr_startup.font, options+5);
- else
- DPRINTK("unrecognized option '%s'\n", options);
- options=next;
- }
-#ifdef CVPPCFB_MASTER_DEBUG
- printk("cvppcfb_setup():\n");
- printk(" resolution %ldx%ldx%ld\n", usr_startup.xres,
- usr_startup.yres, usr_startup.bpp);
- printk(" debug: %ld, YANW: %ld\n", usr_startup.debug,
- usr_startup.YANW);
- printk(" monitorcap: %ld,%ld,%ld,%ld\n",
- usr_startup.monitor.vfmin, usr_startup.monitor.vfmax,
- usr_startup.monitor.hfmin, usr_startup.monitor.hfmax);
-#endif
-}
-
-/*
- * modularization
- */
-
-#ifdef MODULE
-int init_module(void) {
-
- cvppcfb_init();
-}
-
-void cleanup_module(void) {
-
- cvppcfb_cleanup();
-}
-#endif /* MODULE */
-
diff --git a/drivers/video/cyberfb.c b/drivers/video/cyberfb.c
index 80ec1481b..6882ebfb0 100644
--- a/drivers/video/cyberfb.c
+++ b/drivers/video/cyberfb.c
@@ -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;
@@ -1144,8 +1146,7 @@ __initfunc(void cyberfb_init(void))
DPRINTK("board_addr=%08lx\n", board_addr);
DPRINTK("board_size=%08lx\n", board_size);
- cv64_mem = kernel_map (board_addr, board_size, KERNELMAP_NOCACHE_SER,
- NULL);
+ cv64_mem = ioremap(board_addr, board_size);
cv64_regs = (volatile char *)(cv64_mem + 0x02000000);
cv64_fbmem = cv64_mem + 0x01400000;
DPRINTK("cv64_mem=%08lx cv64_regs=%08lx cv64_fbmem=%08lx\n",
@@ -1153,6 +1154,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 +1456,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 +1496,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 +1898,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 +1906,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 +1964,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 +2071,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 +2268,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 +2307,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 */
diff --git a/drivers/video/cyberfb.h b/drivers/video/cyberfb.h
index 232bc6857..bce02a462 100644
--- a/drivers/video/cyberfb.h
+++ b/drivers/video/cyberfb.h
@@ -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);
diff --git a/drivers/video/fbcon-cfb8.c b/drivers/video/fbcon-cfb8.c
index 5fe78bc30..bfa98c719 100644
--- a/drivers/video/fbcon-cfb8.c
+++ b/drivers/video/fbcon-cfb8.c
@@ -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);
}
diff --git a/drivers/video/fbcon-iplan2p2.c b/drivers/video/fbcon-iplan2p2.c
index c8d6838be..0c0bfa21f 100644
--- a/drivers/video/fbcon-iplan2p2.c
+++ b/drivers/video/fbcon-iplan2p2.c
@@ -10,7 +10,6 @@
* more details.
*/
-#include <linux/config.h>
#include <linux/module.h>
#include <linux/tty.h>
#include <linux/console.h>
@@ -18,6 +17,7 @@
#include <linux/fb.h>
#include <asm/byteorder.h>
+#include <asm/setup.h>
#include <video/fbcon.h>
#include <video/fbcon-iplan2p2.h>
@@ -43,7 +43,7 @@ static const u8 color_2p[] = { 0, 0, 0, 1, 0, 1, 1, 1, 2, 2, 2, 3, 2, 3, 3, 3 };
/* Perform the m68k movepw operation. */
static inline void movepw(u8 *d, u16 val)
{
-#if defined __mc68000__ && !defined CONFIG_OPTIMIZE_060
+#if defined __mc68000__ && !defined CPU_M68060_ONLY
asm volatile ("movepw %1,%0@(0)" : : "a" (d), "d" (val));
#else
d[0] = (val >> 16) & 0xff;
diff --git a/drivers/video/fbcon-iplan2p4.c b/drivers/video/fbcon-iplan2p4.c
index 04b4a8422..2c1d67a77 100644
--- a/drivers/video/fbcon-iplan2p4.c
+++ b/drivers/video/fbcon-iplan2p4.c
@@ -10,7 +10,6 @@
* more details.
*/
-#include <linux/config.h>
#include <linux/module.h>
#include <linux/tty.h>
#include <linux/console.h>
@@ -18,6 +17,7 @@
#include <linux/fb.h>
#include <asm/byteorder.h>
+#include <asm/setup.h>
#include <video/fbcon.h>
#include <video/fbcon-iplan2p4.h>
@@ -35,7 +35,7 @@
/* Perform the m68k movepl operation. */
static inline void movepl(u8 *d, u32 val)
{
-#if defined __mc68000__ && !defined CONFIG_OPTIMIZE_060
+#if defined __mc68000__ && !defined CPU_M68060_ONLY
asm volatile ("movepl %1,%0@(0)" : : "a" (d), "d" (val));
#else
d[0] = (val >> 24) & 0xff;
diff --git a/drivers/video/fbcon-iplan2p8.c b/drivers/video/fbcon-iplan2p8.c
index dbdd56ac8..c730eb39c 100644
--- a/drivers/video/fbcon-iplan2p8.c
+++ b/drivers/video/fbcon-iplan2p8.c
@@ -10,7 +10,6 @@
* more details.
*/
-#include <linux/config.h>
#include <linux/module.h>
#include <linux/tty.h>
#include <linux/console.h>
@@ -18,6 +17,7 @@
#include <linux/fb.h>
#include <asm/byteorder.h>
+#include <asm/setup.h>
#include <video/fbcon.h>
#include <video/fbcon-iplan2p8.h>
@@ -40,7 +40,7 @@
/* Perform the m68k movepl operation extended to 64 bits. */
static inline void movepl2(u8 *d, u32 val1, u32 val2)
{
-#if defined __mc68000__ && !defined CONFIG_OPTIMIZE_060
+#if defined __mc68000__ && !defined CPU_M68060_ONLY
asm volatile ("movepl %1,%0@(0); movepl %2,%0@(8)"
: : "a" (d), "d" (val1), "d" (val2));
#else
diff --git a/drivers/video/fbcon.c b/drivers/video/fbcon.c
index 9bdc9020b..033118f61 100644
--- a/drivers/video/fbcon.c
+++ b/drivers/video/fbcon.c
@@ -536,13 +536,14 @@ static void fbcon_setup(int con, int init, int logo)
conp->vc_can_do_color = p->var.bits_per_pixel != 1;
conp->vc_complement_mask = conp->vc_can_do_color ? 0x7700 : 0x0800;
if (charcnt == 256) {
- p->conp->vc_hi_font_mask = 0;
+ conp->vc_hi_font_mask = 0;
p->fgshift = 8;
p->bgshift = 12;
p->charmask = 0xff;
} else {
- p->conp->vc_hi_font_mask = 0x100;
- p->conp->vc_complement_mask <<= 1;
+ conp->vc_hi_font_mask = 0x100;
+ if (conp->vc_can_do_color)
+ conp->vc_complement_mask <<= 1;
p->fgshift = 9;
p->bgshift = 13;
p->charmask = 0x1ff;
@@ -944,7 +945,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 +964,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 +1004,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 +1063,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 +1264,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
@@ -1325,16 +1334,58 @@ static int fbcon_do_set_font(int unit, struct console_font_op *op, u8 *data, int
p->_fontheight = h;
if (p->conp->vc_hi_font_mask && cnt == 256) {
p->conp->vc_hi_font_mask = 0;
- p->conp->vc_complement_mask >>= 1;
+ if (p->conp->vc_can_do_color)
+ p->conp->vc_complement_mask >>= 1;
p->fgshift--;
p->bgshift--;
p->charmask = 0xff;
+
+ /* ++Edmund: reorder the attribute bits */
+ if (p->conp->vc_can_do_color) {
+ 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;
+ if (p->conp->vc_can_do_color)
+ 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++) {
+ unsigned short newc;
+ c = scr_readw(cp);
+ if (conp->vc_can_do_color)
+ newc = ((c & 0xff00) << 1) | (c & 0xff);
+ else
+ newc = c & ~0x100;
+ scr_writew(newc, cp);
+ }
+ c = conp->vc_video_erase_char;
+ if (conp->vc_can_do_color) {
+ conp->vc_video_erase_char = ((c & 0xff00) << 1) | (c & 0xff);
+ conp->vc_attr <<= 1;
+ } else
+ conp->vc_video_erase_char = c & ~0x100;
+ }
+
}
fbcon_font_widths(p);
@@ -1380,17 +1431,17 @@ static inline int fbcon_set_font(int unit, struct console_font_op *op)
int w = op->width;
int h = op->height;
int size = h;
- int i, j, k;
- u8 *new_data, *data = op->data, c, *p;
+ int i, k;
#ifndef CONFIG_FBCON_FONTWIDTH8_ONLY
- u32 d;
-#else
+ int j;
+#endif
+ 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 +1458,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 +1628,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 +1705,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 +1809,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 */
@@ -1796,7 +1851,7 @@ __initfunc(static int fbcon_show_logo( void ))
int line_length = p->line_length;
/* for support of Atari interleaved planes */
-#define MAP_X(x) (line_length ? x : (x & ~1)*depth + (x & 1))
+#define MAP_X(x) (line_length ? (x) : ((x) & ~1)*depth + ((x) & 1))
#else
#define MAP_X(x) (x)
#endif
@@ -1807,7 +1862,7 @@ __initfunc(static int fbcon_show_logo( void ))
src = logo;
for( y1 = 0; y1 < LOGO_H; y1++ ) {
for( x1 = 0; x1 < LOGO_LINE; x1++, src += logo_depth ) {
- dst = fb + y1*line + MAP_X(x1);
+ dst = fb + y1*line + MAP_X(x/8+x1);
for( bit = 0; bit < logo_depth; bit++ ) {
val = 0;
for( mask = 0x80, i = 0; i < 8; mask >>= 1, i++ ) {
@@ -1826,7 +1881,7 @@ __initfunc(static int fbcon_show_logo( void ))
if (depth > logo_depth) {
for( y1 = 0; y1 < LOGO_H; y1++ ) {
for( x1 = 0; x1 < LOGO_LINE; x1++ ) {
- dst = fb + y1*line + MAP_X(x1) + logo_depth*plane;
+ dst = fb + y1*line + MAP_X(x/8+x1) + logo_depth*plane;
for( i = logo_depth; i < depth; i++, dst += plane )
*dst = (i == logo_depth && logo_depth == 4)
? 0xff : 0x00;
diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
index aab80ad6b..d8e6b0829 100644
--- a/drivers/video/fbmem.c
+++ b/drivers/video/fbmem.c
@@ -22,9 +22,7 @@
#include <linux/console.h>
#include <linux/console_struct.h>
#include <linux/init.h>
-#ifdef CONFIG_PROC_FS
#include <linux/proc_fs.h>
-#endif
#ifdef CONFIG_KMOD
#include <linux/kmod.h>
#endif
@@ -56,8 +54,8 @@ extern void macfb_init(void);
extern void macfb_setup(char *options, int *ints);
extern void cyberfb_init(void);
extern void cyberfb_setup(char *options, int *ints);
-extern void cvppcfb_init(void);
-extern void cvppcfb_setup(char *options, int *ints);
+extern void pm2fb_init(void);
+extern void pm2fb_setup(char *options, int *ints);
extern void retz3fb_init(void);
extern void retz3fb_setup(char *options, int *ints);
extern void clgenfb_init(void);
@@ -114,8 +112,8 @@ static struct {
#ifdef CONFIG_FB_CYBER
{ "cyber", cyberfb_init, cyberfb_setup },
#endif
-#ifdef CONFIG_FB_CVPPC
- { "cvppcfb", cvppcfb_init, cvppcfb_setup },
+#ifdef CONFIG_FB_PM2
+ { "pm2fb", pm2fb_init, pm2fb_setup },
#endif
#ifdef CONFIG_FB_CLGEN
{ "clgen", clgenfb_init, clgenfb_setup },
@@ -205,7 +203,6 @@ static inline int PROC_CONSOLE(void)
return MINOR(current->tty->device) - 1;
}
-#ifdef CONFIG_PROC_FS
static int fbmem_read_proc(char *buf, char **start, off_t offset,
int len, int *eof, void *private)
{
@@ -220,7 +217,6 @@ static int fbmem_read_proc(char *buf, char **start, off_t offset,
*start = buf + offset;
return len > offset ? len - offset : 0;
}
-#endif
static ssize_t
fb_read(struct file *file, char *buf, size_t count, loff_t *ppos)
@@ -583,20 +579,16 @@ unregister_framebuffer(const struct fb_info *fb_info)
return 0;
}
-#ifdef CONFIG_PROC_FS
static struct proc_dir_entry *proc_fbmem;
-#endif
__initfunc(void
fbmem_init(void))
{
int i;
-#ifdef CONFIG_PROC_FS
proc_fbmem = create_proc_entry("fb", 0, 0);
if (proc_fbmem)
proc_fbmem->read_proc = fbmem_read_proc;
-#endif
if (register_chrdev(FB_MAJOR,"fb",&fb_fops))
printk("unable to get major %d for fb devs\n", FB_MAJOR);
diff --git a/drivers/video/font_sun12x22.c b/drivers/video/font_sun12x22.c
index c4cd54c7a..803b35ea8 100644
--- a/drivers/video/font_sun12x22.c
+++ b/drivers/video/font_sun12x22.c
@@ -1,6207 +1,6207 @@
#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 */
};
diff --git a/drivers/video/imsttfb.c b/drivers/video/imsttfb.c
index d50c403a6..99ebadf4b 100644
--- a/drivers/video/imsttfb.c
+++ b/drivers/video/imsttfb.c
@@ -51,11 +51,6 @@
#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 */
diff --git a/drivers/video/macfb.c b/drivers/video/macfb.c
index 2d0ad2924..0f964f60a 100644
--- a/drivers/video/macfb.c
+++ b/drivers/video/macfb.c
@@ -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
*/
@@ -421,6 +559,12 @@ __initfunc(void macfb_init(void))
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;
}
diff --git a/drivers/video/matroxfb.c b/drivers/video/matroxfb.c
index e9f3f44a3..5cfb98f52 100644
--- a/drivers/video/matroxfb.c
+++ b/drivers/video/matroxfb.c
@@ -2,9 +2,9 @@
*
* Hardware accelerated Matrox Millennium I, II, Mystique and G200
*
- * (c) 1998 Petr Vandrovec <vandrove@vc.cvut.cz>
+ * (c) 1998,1999 Petr Vandrovec <vandrove@vc.cvut.cz>
*
- * Version: 1.5 1998/11/19
+ * Version: 1.9 1999/01/04
*
* MTRR stuff: 1998 Tom Rini <tmrini@ntplx.net>
*
@@ -21,10 +21,14 @@
* 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>
@@ -39,7 +43,14 @@
* "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
*
@@ -89,6 +100,7 @@
#include <asm/io.h>
#include <asm/spinlock.h>
+#include <asm/unaligned.h>
#ifdef CONFIG_MTRR
#include <asm/mtrr.h>
#endif
@@ -100,15 +112,17 @@
#include <video/fbcon-cfb24.h>
#include <video/fbcon-cfb32.h>
+#if defined(CONFIG_FB_OF)
#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
@@ -156,7 +170,7 @@
/* I benchmarked PII/350MHz with G200... MEMCPY, MEMCPYTOIO and WRITEL are on same speed ( <2% diff) */
/* so that means that G200 speed (or AGP speed?) is our limit... I do not have benchmark to test, how */
/* much of PCI bandwidth is used during transfers... */
-#if defined(__i386__) || defined(__ppc__)
+#if defined(__i386__)
#define MEMCPYTOIO_MEMCPY
#else
#define MEMCPYTOIO_WRITEL
@@ -167,11 +181,17 @@
#error "Sorry, I have no idea how to do this on sparc... There is mapioaddr... With bus_type parameter..."
#endif
-#ifdef __m68k__
+#if defined(__m68k__)
#define MAP_BUSTOVIRT
#else
+#if defined(CONFIG_PPC) && defined(CONFIG_PREP) && defined(_ISA_MEM_BASE)
+/* do not tell me that PPC is not broken... if ioremap() oops with
+ invalid value written to msr... */
+#define MAP_ISAMEMBASE
+#else
#define MAP_IOREMAP
#endif
+#endif
#ifdef DEBUG
#define dprintk(X...) printk(X)
@@ -185,6 +205,9 @@
#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 +251,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 +275,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);
}
@@ -320,9 +351,13 @@ static inline int mga_ioremap(unsigned long phys, unsigned long size, int flags,
#ifdef MAP_BUSTOVIRT
virt->vaddr = bus_to_virt(phys);
#else
+#ifdef MAP_ISAMEMBASE
+ virt->vaddr = (void*)(phys + _ISA_MEM_BASE);
+#else
#error "Your architecture does not have neither ioremap nor bus_to_virt... Giving up"
#endif
#endif
+#endif
return (virt->vaddr == 0); /* 0, !0... 0, error_code in future */
}
@@ -334,12 +369,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 +443,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 +487,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 +505,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 +542,8 @@ struct matrox_fb_info {
int cfb4;
const int* vxres;
int cross4MB;
+ int text;
+ int plnwt;
} capable;
struct {
unsigned int size;
@@ -529,12 +562,22 @@ struct matrox_fb_info {
int novga;
int nobios;
int nopciretry;
+ int noinit;
int inverse;
int hwcursor;
int blink;
+ int sgram;
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 +588,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 +605,17 @@ struct matrox_fb_info {
} cmap;
#endif
struct { unsigned red, green, blue, transp; } palette[256];
-#if defined(CONFIG_FB_COMPAT_XPMAC)
+#if defined(CONFIG_FB_OF) && 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);
+unsigned char nvram_read_byte(int);
+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 +724,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 +1058,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,35 +1080,28 @@ 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);
mga_outl(M_YDSTORG, curr_ydstorg(MINFO));
- mga_outl(M_PLNWT, -1);
+ if (ACCESS_FBINFO(capable.plnwt))
+ mga_outl(M_PLNWT, -1);
mga_outl(M_OPMODE, mopmode);
mga_outl(M_CXBNDRY, 0xFFFF0000);
mga_outl(M_YTOP, 0);
@@ -1685,55 +1717,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 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 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);
}
-#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 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);
}
-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;
+#define outTi3026 outDAC
+#define inTi3026 inDAC
+#define outDAC1064 outDAC
+#define inDAC1064 inDAC
- 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 +1767,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 +1812,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 +1859,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 +1893,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 +1908,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 +1922,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 +1969,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 +2107,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 +2327,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 +2397,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 +2432,13 @@ 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) {
+ } else 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 +2470,11 @@ 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 +2521,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 +2607,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 +2624,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 +2650,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 +2805,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 +2816,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 +2900,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 +2948,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 +3014,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 +3043,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 +3055,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 +3068,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 +3081,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 +3114,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,
@@ -2833,7 +3124,7 @@ static const unsigned char MGA1064_DAC[] = {
0x00, 0,
M1064_XPIXCLKCTRL_PLL_UP | M1064_XPIXCLKCTRL_EN | M1064_XPIXCLKCTRL_SRC_PLL,
M1064_XGENCTRL_VS_0 | M1064_XGENCTRL_ALPHA_DIS | M1064_XGENCTRL_BLACK_0IRE | M1064_XGENCTRL_NO_SYNC_ON_GREEN,
- M1064_XMISCCTRL_DAC_EN | M1064_XMISCCTRL_MFC_VGA | M1064_XMISCCTRL_DAC_8BIT | M1064_XMISCCTRL_LUT_EN,
+ M1064_XMISCCTRL_DAC_EN | M1064_XMISCCTRL_MFC_DIS | M1064_XMISCCTRL_DAC_8BIT | M1064_XMISCCTRL_LUT_EN,
0x10, 0x3F, M1064_XZOOMCTRL_1, M1064_XSENSETEST_BCOMP | M1064_XSENSETEST_GCOMP | M1064_XSENSETEST_RCOMP | M1064_XSENSETEST_PDOWN,
0x00,
0x00, 0x00, 0xFF, 0xFF};
@@ -2853,7 +3144,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 +3201,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_DIS
+ | 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 +3233,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 +3243,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 +3256,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 +3302,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 +3349,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 +3364,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 +3386,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 +3421,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 +3437,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 +3465,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 +3478,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 +3509,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 +3538,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;
}
- var->xres_virtual = new_xres;
+ /* 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;
+ }
+ }
+ } 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 +3794,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 +3829,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 +3848,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 +3887,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 +3900,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 +3920,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 +3950,33 @@ __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")
+ /* 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;
+ ACCESS_FBINFO(features.pll.in_div_min) = 1;
+ ACCESS_FBINFO(features.pll.in_div_max) = 31;
+ ACCESS_FBINFO(features.pll.post_shift_max) = 3;
+ ACCESS_FBINFO(features.DAC1064.xvrefctrl) = DAC1064_XVREFCTRL_G100_DEFAULT;
/* 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;
-
+ ACCESS_FBINFO(capable.plnwt) = ACCESS_FBINFO(devflags.accelerator) != FB_ACCEL_MATROX_MGAG100;
+
+ 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 +3984,54 @@ __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);
- {
+
+ DAC1064_setmclk(PMINFO hw, DAC1064_OPT_MDIV2 | DAC1064_OPT_GDIV3 | DAC1064_OPT_SCLK_PCI, 133333);
+
+ 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, 0x00000300);
+ /* 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 0
+ if (mga_readb(ACCESS_FBINFO(video.vbase), 0x0000) != 0xAA) {
hw->MXoptionReg &= ~0x1000;
}
- }
#endif
+ } else {
+ hw->MXoptionReg |= 0x00000C00;
+ if (ACCESS_FBINFO(devflags.sgram))
+ hw->MXoptionReg |= 0x4000;
+ 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);
+ }
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,15 +4040,7 @@ __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;
- ACCESS_FBINFO(features.pll.ref_freq) = 27000;
- ACCESS_FBINFO(features.pll.feed_div_min) = 7;
- ACCESS_FBINFO(features.pll.feed_div_max) = 127;
- ACCESS_FBINFO(features.pll.in_div_min) = 1;
- ACCESS_FBINFO(features.pll.in_div_max) = 31;
- ACCESS_FBINFO(features.pll.post_shift_max) = 3;
- ACCESS_FBINFO(features.DAC1064.xvrefctrl) = DAC1064_XVREFCTRL_G100_DEFAULT;
+
ACCESS_FBINFO(features.DAC1064.cursorimage) = ACCESS_FBINFO(video.len_usable) - 1024;
if (ACCESS_FBINFO(devflags.hwcursor))
ACCESS_FBINFO(video.len_usable) -= 1024;
@@ -3658,13 +4059,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 +4131,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 +4153,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 +4184,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 +4305,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 +4321,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 +4354,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 +4386,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 +4404,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 +4423,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 +4432,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 +4461,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 +4507,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_FB_OF) && defined(CONFIG_FB_COMPAT_XPMAC)
if (console_fb_info == &ACCESS_FBINFO(fbcon)) {
int vmode, cmode;
@@ -4095,19 +4535,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_FB_OF && CONFIG_FB_COMPAT_XPMAC */
}
}
return 0;
@@ -4141,11 +4579,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 +4593,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 +4601,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 +4613,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 +4653,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 +4667,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 +4724,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 +4739,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 +4783,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 +4829,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,14 +4855,17 @@ 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 = 1; /* "matrox:init" */
static int inverse = 0; /* "matrox:inverse" */
static int hwcursor = 1; /* "matrox:nohwcursor" */
static int blink = 1; /* "matrox:noblink" */
+static int sgram = 0; /* "matrox:sgram" */
+static int mtrr = 1; /* "matrox:nomtrr" */
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 +4901,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;
@@ -4477,6 +4951,10 @@ __initfunc(void matroxfb_setup(char *options, int *ints)) {
disabled = 1;
else if (!strcmp(this_opt, "enabled")) /* noenabled does not exist */
disabled = 0;
+ else if (!strcmp(this_opt, "sgram")) /* nosgram == sdram */
+ sgram = 1;
+ else if (!strcmp(this_opt, "sdram"))
+ sgram = 0;
else {
int value = 1;
@@ -4496,6 +4974,10 @@ __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, "mtrr"))
+ mtrr = value;
else if (!strcmp(this_opt, "inv24"))
inv24 = value;
else if (!strcmp(this_opt, "cross4MB"))
@@ -4533,7 +5015,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 +5082,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 +5173,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 +5184,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 +5219,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 +5273,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 +5285,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
@@ -4832,7 +5324,22 @@ __initfunc(static int initMatrox2(WPMINFO struct display* d, struct board* b)) {
ACCESS_FBINFO(max_pixel_clock) = b->maxclk;
printk(KERN_INFO "matroxfb: Matrox %s detected\n", b->name);
+ ACCESS_FBINFO(capable.plnwt) = 1;
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 +5393,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 +5442,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))) {
@@ -4950,9 +5464,11 @@ __initfunc(static int initMatrox2(WPMINFO struct display* d, struct board* b)) {
if (ACCESS_FBINFO(video.len_usable) > 0x08000000)
ACCESS_FBINFO(video.len_usable) = 0x08000000;
#ifdef CONFIG_MTRR
- ACCESS_FBINFO(mtrr.vram) = mtrr_add(video_base_phys, ACCESS_FBINFO(video.len), MTRR_TYPE_WRCOMB, 1);
- ACCESS_FBINFO(mtrr.vram_valid) = 1;
- printk(KERN_INFO "matroxfb: MTRR's turned on\n");
+ if (mtrr) {
+ ACCESS_FBINFO(mtrr.vram) = mtrr_add(video_base_phys, ACCESS_FBINFO(video.len), MTRR_TYPE_WRCOMB, 1);
+ ACCESS_FBINFO(mtrr.vram_valid) = 1;
+ printk(KERN_INFO "matroxfb: MTRR's turned on\n");
+ }
#endif /* CONFIG_MTRR */
/* validate params, autodetect k, M */
@@ -4995,12 +5511,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 +5546,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 +5588,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_FB_OF)
#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,11 +5698,13 @@ __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;
ACCESS_FBINFO(devflags.hwcursor) = hwcursor;
ACCESS_FBINFO(devflags.blink) = blink;
+ ACCESS_FBINFO(devflags.sgram) = sgram;
ACCESS_FBINFO(capable.cross4MB) = cross4MB;
ACCESS_FBINFO(fastfont.size) = fastfont;
@@ -5234,9 +5754,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 +5780,12 @@ 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(mtrr, "i");
+MODULE_PARM_DESC(mtrr, "This speeds up video memory accesses (0=disabled or 1) (default=1)");
+MODULE_PARM(sgram, "i");
+MODULE_PARM_DESC(sgram, "Indicates that G200 has SGRAM memory (0=SDRAM, 1=SGRAM) (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 +5798,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 +5820,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 +5837,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 +5849,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 +5862,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;
diff --git a/drivers/video/mdacon.c b/drivers/video/mdacon.c
index ea5afadd8..177493d68 100644
--- a/drivers/video/mdacon.c
+++ b/drivers/video/mdacon.c
@@ -331,7 +331,7 @@ __initfunc(static const char *mdacon_startup(void))
mda_type_name = "MDA";
if (! mda_detect()) {
- printk("mdacon: MDA card not detected.");
+ printk("mdacon: MDA card not detected.\n");
return NULL;
}
diff --git a/drivers/video/offb.c b/drivers/video/offb.c
index d66176242..f74486863 100644
--- a/drivers/video/offb.c
+++ b/drivers/video/offb.c
@@ -68,7 +68,6 @@ struct fb_info_offb {
static int ofonly = 0;
-
/*
* Interface used by the world
*/
@@ -251,8 +250,10 @@ static int offb_get_cmap(struct fb_cmap *cmap, int kspc, int con,
else if (fb_display[con].cmap.len) /* non default colormap? */
fb_copy_cmap(&fb_display[con].cmap, cmap, kspc ? 0 : 2);
else
- fb_copy_cmap(fb_default_cmap(1<<fb_display[con].var.bits_per_pixel),
- cmap, kspc ? 0 : 2);
+ {
+ int size = fb_display[con].var.bits_per_pixel == 16 ? 32 : 256;
+ fb_copy_cmap(fb_default_cmap(size), cmap, kspc ? 0 : 2);
+ }
return 0;
}
@@ -270,8 +271,8 @@ static int offb_set_cmap(struct fb_cmap *cmap, int kspc, int con,
return -ENOSYS;
if (!fb_display[con].cmap.len) { /* no colormap allocated? */
- if ((err = fb_alloc_cmap(&fb_display[con].cmap,
- 1<<fb_display[con].var.bits_per_pixel, 0)))
+ int size = fb_display[con].var.bits_per_pixel == 16 ? 32 : 256;
+ if ((err = fb_alloc_cmap(&fb_display[con].cmap, size, 0)))
return err;
}
if (con == currcon) /* current console? */
@@ -302,7 +303,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 +330,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,
@@ -399,11 +400,13 @@ __initfunc(static int offb_init_driver(struct device_node *dp))
}
#endif /* CONFIG_FB_ATY */
#ifdef CONFIG_FB_S3TRIO
- if (s3triofb_init_of(dp))
+ if (!strncmp(dp->name, "S3Trio", 6)) {
+ s3triofb_init_of(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;
}
@@ -522,17 +525,20 @@ __initfunc(static void offb_init_fb(const char *name, const char *full_name,
fix->type = FB_TYPE_PACKED_PIXELS;
fix->type_aux = 0;
- /* XXX kludge for ati */
- if (strncmp(name, "ATY,", 4) == 0) {
- info->cmap_adr = ioremap(address + 0x7ff000, 0x1000) + 0xcc0;
- info->cmap_data = info->cmap_adr + 1;
- }
-
if (depth == 8)
- fix->visual = info->cmap_adr ? FB_VISUAL_PSEUDOCOLOR
+ {
+ /* XXX kludge for ati */
+ if (strncmp(name, "ATY,", 4) == 0) {
+ unsigned long base = address & 0xff000000UL;
+ info->cmap_adr = ioremap(base + 0x7ff000, 0x1000) + 0xcc0;
+ info->cmap_data = info->cmap_adr + 1;
+ }
+ fix->visual = info->cmap_adr ? FB_VISUAL_PSEUDOCOLOR
: FB_VISUAL_STATIC_PSEUDOCOLOR;
+ }
else
- fix->visual = FB_VISUAL_TRUECOLOR;
+ fix->visual = /*info->cmap_adr ? FB_VISUAL_DIRECTCOLOR
+ : */FB_VISUAL_TRUECOLOR;
var->xoffset = var->yoffset = 0;
var->bits_per_pixel = depth;
@@ -610,10 +616,14 @@ __initfunc(static void offb_init_fb(const char *name, const char *full_name,
disp->dispsw = &fbcon_cfb16;
disp->dispsw_data = info->fbcon_cmap.cfb16;
for (i = 0; i < 16; i++)
- info->fbcon_cmap.cfb16[i] =
- (((default_blu[i] >> 3) & 0x1f) << 10) |
- (((default_grn[i] >> 3) & 0x1f) << 5) |
- ((default_red[i] >> 3) & 0x1f);
+ if (fix->visual == FB_VISUAL_TRUECOLOR)
+ info->fbcon_cmap.cfb16[i] =
+ (((default_blu[i] >> 3) & 0x1f) << 10) |
+ (((default_grn[i] >> 3) & 0x1f) << 5) |
+ ((default_red[i] >> 3) & 0x1f);
+ else
+ info->fbcon_cmap.cfb16[i] =
+ (i << 10) | (i << 5) | i;
break;
#endif
#ifdef FBCON_HAS_CFB32
@@ -621,9 +631,14 @@ __initfunc(static void offb_init_fb(const char *name, const char *full_name,
disp->dispsw = &fbcon_cfb32;
disp->dispsw_data = info->fbcon_cmap.cfb32;
for (i = 0; i < 16; i++)
- info->fbcon_cmap.cfb32[i] = (default_blu[i] << 16) |
- (default_grn[i] << 8) |
- default_red[i];
+ if (fix->visual == FB_VISUAL_TRUECOLOR)
+ info->fbcon_cmap.cfb32[i] =
+ (default_blu[i] << 16) |
+ (default_grn[i] << 8) |
+ default_red[i];
+ else
+ info->fbcon_cmap.cfb32[i] =
+ (i << 16) | (i << 8) | i;
break;
#endif
default:
@@ -674,9 +689,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;
}
@@ -789,7 +805,7 @@ static int offb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
info2->palette[regno].green = green;
info2->palette[regno].blue = blue;
- *info2->cmap_adr = regno;
+ *info2->cmap_adr = regno;/* On some chipsets, add << 3 in 15 bits */
mach_eieio();
*info2->cmap_data = red;
mach_eieio();
@@ -802,8 +818,7 @@ static int offb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
switch (info2->var.bits_per_pixel) {
#ifdef FBCON_HAS_CFB16
case 16:
- info2->fbcon_cmap.cfb16[regno] = (regno << 10) | (regno << 5) |
- regno;
+ info2->fbcon_cmap.cfb16[regno] = (regno << 10) | (regno << 5) | regno;
break;
#endif
#ifdef FBCON_HAS_CFB32
@@ -825,8 +840,10 @@ static void do_install_cmap(int con, struct fb_info *info)
if (fb_display[con].cmap.len)
fb_set_cmap(&fb_display[con].cmap, 1, offb_setcolreg, info);
else
- fb_set_cmap(fb_default_cmap(1<<fb_display[con].var.bits_per_pixel),
- 1, offb_setcolreg, info);
+ {
+ int size = fb_display[con].var.bits_per_pixel == 16 ? 32 : 256;
+ fb_set_cmap(fb_default_cmap(size), 1, offb_setcolreg, info);
+ }
}
diff --git a/drivers/video/pm2fb.c b/drivers/video/pm2fb.c
new file mode 100644
index 000000000..c26958e7b
--- /dev/null
+++ b/drivers/video/pm2fb.c
@@ -0,0 +1,1494 @@
+/*
+ * Permedia2 framebuffer driver.
+ * Copyright (c) 1998-1999 Ilario Nardinocchi (nardinoc@CS.UniBO.IT)
+ * Based on linux/drivers/video/skeletonfb.c by Geert Uytterhoeven.
+ * --------------------------------------------------------------------------
+ * $Id: pm2fb.c,v 1.1.2.1 1999/01/12 19:53:02 geert Exp $
+ * --------------------------------------------------------------------------
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file README.legal in the main directory of this archive
+ * for more details.
+ */
+
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/string.h>
+#include <linux/mm.h>
+#include <linux/tty.h>
+#include <linux/malloc.h>
+#include <linux/vmalloc.h>
+#include <linux/delay.h>
+#include <linux/interrupt.h>
+#include <linux/fb.h>
+#include <linux/selection.h>
+#include <linux/console.h>
+#include <linux/init.h>
+#include <linux/pci.h>
+#include <video/fbcon.h>
+#include <video/fbcon-cfb8.h>
+#include <video/fbcon-cfb16.h>
+#include <video/fbcon-cfb24.h>
+#include <video/fbcon-cfb32.h>
+#include <asm/io.h>
+#include <asm/uaccess.h>
+#include "pm2fb.h"
+#ifdef CONFIG_FB_PM2_CVPPC
+#include "cvisionppc.h"
+#endif
+
+#if !defined(__LITTLE_ENDIAN) && !defined(__BIG_ENDIAN)
+#error "The endianness of the target host has not been defined."
+#endif
+
+#undef PM2FB_MASTER_DEBUG
+#ifdef PM2FB_MASTER_DEBUG
+#define DPRINTK(a,b...) printk("pm2fb: %s: " a, __FUNCTION__ , ## b)
+#else
+#define DPRINTK(a,b...)
+#endif
+
+#define PICOS2KHZ(a) (1000000000UL/(a))
+#define KHZ2PICOS(a) (1000000000UL/(a))
+
+#ifdef CONFIG_APUS
+#define MMAP(a,b) (unsigned char* )kernel_map((unsigned long )(a), \
+ b, KERNELMAP_NOCACHE_SER, NULL)
+#else
+#define MMAP(a,b) ioremap(a, b)
+#endif
+
+#ifndef MIN
+#define MIN(a,b) ((a)<(b)?(a):(b))
+#endif
+
+#ifndef MAX
+#define MAX(a,b) ((a)>(b)?(a):(b))
+#endif
+
+#ifndef __powerpc__
+#define eieio()
+#endif
+
+struct pm2fb_par {
+ unsigned long pixclock; /* pixclock in KHz */
+ unsigned long width; /* width of virtual screen */
+ unsigned long height; /* height of virtual screen */
+ unsigned long hsstart; /* horiz. sync start */
+ unsigned long hsend; /* horiz. sync end */
+ unsigned long hbend; /* horiz. blank end (also gate end) */
+ unsigned long htotal; /* total width (w/ sync & blank) */
+ unsigned long vsstart; /* vert. sync start */
+ unsigned long vsend; /* vert. sync end */
+ unsigned long vbend; /* vert. blank end */
+ unsigned long vtotal; /* total height (w/ sync & blank) */
+ unsigned long stride; /* screen stride */
+ unsigned long base; /* screen base (xoffset+yoffset) */
+ unsigned long depth; /* screen depth (8, 16, 24 or 32) */
+ unsigned long video; /* video control (hsync,vsync) */
+};
+
+#define OPTF_OLD_MEM 0x00000001
+#define OPTF_YPAN 0x00000002
+static struct {
+ char font[40];
+ unsigned long flags;
+ struct pm2fb_par user_mode;
+} pm2fb_options;
+
+static const struct {
+ char name[16];
+ struct pm2fb_par par;
+} user_mode[] __initdata = {
+ {"640x480-60",
+ {25174,640,480,4,28,40,199,9,11,45,524,80,0,8,121}},
+ {"640x480-72",
+ {31199,640,480,6,16,48,207,8,10,39,518,80,0,8,121}},
+ {"640x480-75",
+ {31499,640,480,4,20,50,209,0,3,20,499,80,0,8,121}},
+ {"640x480-90",
+ {39909,640,480,8,18,48,207,24,38,53,532,80,0,8,121}},
+ {"640x480-100",
+ {44899,640,480,8,40,52,211,21,33,51,530,80,0,8,121}},
+ {"800x600-56",
+ {35999,800,600,6,24,56,255,0,2,25,624,100,0,8,41}},
+ {"800x600-60",
+ {40000,800,600,10,42,64,263,0,4,28,627,100,0,8,41}},
+ {"800x600-70",
+ {44899,800,600,6,42,52,251,8,20,36,635,100,0,8,105}},
+ {"800x600-72",
+ {50000,800,600,14,44,60,259,36,42,66,665,100,0,8,41}},
+ {"800x600-75",
+ {49497,800,600,4,24,64,263,0,3,25,624,100,0,8,41}},
+ {"800x600-90",
+ {56637,800,600,2,18,48,247,7,18,35,634,100,0,8,41}},
+ {"800x600-100",
+ {67499,800,600,0,16,70,269,6,10,25,624,100,0,8,41}},
+ {"1024x768-60",
+ {64998,1024,768,6,40,80,335,2,8,38,805,128,0,8,121}},
+ {"1024x768-70",
+ {74996,1024,768,6,40,76,331,2,8,38,805,128,0,8,121}},
+ {"1024x768-72",
+ {74996,1024,768,6,40,66,321,2,8,38,805,128,0,8,121}},
+ {"1024x768-75",
+ {78932,1024,768,4,28,72,327,0,3,32,799,128,0,8,41}},
+ {"1024x768-90",
+ {100000,1024,768,0,24,72,327,20,35,77,844,128,0,8,121}},
+ {"1024x768-100",
+ {109998,1024,768,0,22,92,347,0,7,24,791,128,0,8,121}},
+ {"1024x768-illo",
+ {120322,1024,768,12,48,120,375,3,7,32,799,128,0,8,41}},
+ {"1152x864-60",
+ {80000,1152,864,16,44,76,363,5,10,52,915,144,0,8,41}},
+ {"1152x864-70",
+ {100000,1152,864,10,48,90,377,12,23,81,944,144,0,8,41}},
+ {"1152x864-75",
+ {109998,1152,864,6,42,78,365,44,52,138,1001,144,0,8,41}},
+ {"1152x864-80",
+ {109998,1152,864,4,32,72,359,29,36,94,957,144,0,8,41}},
+ {"1280x1024-60",
+ {107991,1280,1024,12,40,102,421,0,3,42,1065,160,0,8,41}},
+ {"1280x1024-70",
+ {125992,1280,1024,20,48,102,421,0,5,42,1065,160,0,8,41}},
+ {"1280x1024-74",
+ {134989,1280,1024,8,44,108,427,0,29,40,1063,160,0,8,41}},
+ {"1280x1024-75",
+ {134989,1280,1024,4,40,102,421,0,3,42,1065,160,0,8,41}},
+ {"1600x1200-60",
+ {155981,1600,1200,8,48,112,511,9,17,70,1269,200,0,8,121}},
+ {"1600x1200-66",
+ {171998,1600,1200,10,44,120,519,2,5,53,1252,200,0,8,121}},
+ {"1600x1200-76",
+ {197980,1600,1200,10,44,120,519,2,7,50,1249,200,0,8,121}},
+ {"\0", },
+};
+
+static const char permedia2_name[16]="Permedia2";
+
+static struct pm2fb_info {
+ struct fb_info_gen gen;
+ int board; /* Permedia2 board index (see
+ board_table[] below) */
+ struct {
+ unsigned char* fb_base; /* framebuffer memory base */
+ unsigned long fb_size; /* framebuffer memory size */
+ unsigned char* rg_base; /* register memory base */
+ unsigned char* p_fb; /* physical address of frame buffer */
+ unsigned char* v_fb; /* virtual address of frame buffer */
+ unsigned char* p_regs; /* physical address of registers
+ region, must be rg_base or
+ rg_base+PM2_REGS_SIZE depending on
+ the host endianness */
+ unsigned char* v_regs; /* virtual address of p_regs */
+ } regions;
+ union { /* here, the per-board par structs */
+#ifdef CONFIG_FB_PM2_CVPPC
+ struct cvppc_par cvppc; /* CVisionPPC data */
+#endif
+ } board_par;
+ struct pm2fb_par current_par; /* displayed screen */
+ int current_par_valid;
+ unsigned long memclock; /* memclock (set by the per-board
+ init routine) */
+ struct display disp;
+ struct {
+ u8 transp;
+ u8 red;
+ u8 green;
+ u8 blue;
+ } palette[256];
+ union {
+#ifdef FBCON_HAS_CFB16
+ u16 cmap16[16];
+#endif
+#ifdef FBCON_HAS_CFB24
+ u32 cmap24[16];
+#endif
+#ifdef FBCON_HAS_CFB32
+ u32 cmap32[16];
+#endif
+ } cmap;
+} fb_info;
+
+#ifdef CONFIG_FB_PM2_CVPPC
+static int cvppc_detect(struct pm2fb_info*);
+static void cvppc_init(struct pm2fb_info*);
+#endif
+
+/*
+ * Table of the supported Permedia2 based boards.
+ * Three hooks are defined for each board:
+ * detect(): should return 1 if the related board has been detected, 0
+ * otherwise. It should also fill the fields 'regions.fb_base',
+ * 'regions.fb_size', 'regions.rg_base' and 'memclock' in the
+ * passed pm2fb_info structure.
+ * init(): called immediately after the reset of the Permedia2 chip.
+ * It should reset the memory controller if needed (the MClk
+ * is set shortly afterwards by the caller).
+ * cleanup(): called after the driver has been unregistered.
+ *
+ * the init and cleanup pointers can be NULL.
+ */
+static const struct {
+ int (*detect)(struct pm2fb_info*);
+ void (*init)(struct pm2fb_info*);
+ void (*cleanup)(struct pm2fb_info*);
+ char name[32];
+} board_table[] = {
+#ifdef CONFIG_FB_PM2_CVPPC
+ { cvppc_detect, cvppc_init, NULL, "CVisionPPC/BVisionPPC" },
+#endif
+ { NULL, }
+};
+
+/*
+ * partial products for the supported horizontal resolutions.
+ */
+#define PACKPP(p0,p1,p2) (((p2)<<6)|((p1)<<3)|(p0))
+static const struct {
+ unsigned short width;
+ unsigned short pp;
+} pp_table[] = {
+ { 32, PACKPP(1, 0, 0) }, { 64, PACKPP(1, 1, 0) },
+ { 96, PACKPP(1, 1, 1) }, { 128, PACKPP(2, 1, 1) },
+ { 160, PACKPP(2, 2, 1) }, { 192, PACKPP(2, 2, 2) },
+ { 224, PACKPP(3, 2, 1) }, { 256, PACKPP(3, 2, 2) },
+ { 288, PACKPP(3, 3, 1) }, { 320, PACKPP(3, 3, 2) },
+ { 384, PACKPP(3, 3, 3) }, { 416, PACKPP(4, 3, 1) },
+ { 448, PACKPP(4, 3, 2) }, { 512, PACKPP(4, 3, 3) },
+ { 544, PACKPP(4, 4, 1) }, { 576, PACKPP(4, 4, 2) },
+ { 640, PACKPP(4, 4, 3) }, { 768, PACKPP(4, 4, 4) },
+ { 800, PACKPP(5, 4, 1) }, { 832, PACKPP(5, 4, 2) },
+ { 896, PACKPP(5, 4, 3) }, { 1024, PACKPP(5, 4, 4) },
+ { 1056, PACKPP(5, 5, 1) }, { 1088, PACKPP(5, 5, 2) },
+ { 1152, PACKPP(5, 5, 3) }, { 1280, PACKPP(5, 5, 4) },
+ { 1536, PACKPP(5, 5, 5) }, { 1568, PACKPP(6, 5, 1) },
+ { 1600, PACKPP(6, 5, 2) }, { 1664, PACKPP(6, 5, 3) },
+ { 1792, PACKPP(6, 5, 4) }, { 2048, PACKPP(6, 5, 5) },
+ { 0, 0 } };
+
+static void pm2fb_detect(void);
+static int pm2fb_encode_fix(struct fb_fix_screeninfo* fix,
+ const void* par, struct fb_info_gen* info);
+static int pm2fb_decode_var(const struct fb_var_screeninfo* var,
+ void* par, struct fb_info_gen* info);
+static int pm2fb_encode_var(struct fb_var_screeninfo* var,
+ const void* par, struct fb_info_gen* info);
+static void pm2fb_get_par(void* par, struct fb_info_gen* info);
+static void pm2fb_set_par(const void* par, struct fb_info_gen* info);
+static int pm2fb_getcolreg(unsigned regno,
+ unsigned* red, unsigned* green, unsigned* blue,
+ unsigned* transp, struct fb_info* info);
+static int pm2fb_setcolreg(unsigned regno,
+ unsigned red, unsigned green, unsigned blue,
+ unsigned transp, struct fb_info* info);
+static int pm2fb_blank(int blank_mode, struct fb_info_gen* info);
+static int pm2fb_pan_display(const struct fb_var_screeninfo* var,
+ struct fb_info_gen* info);
+static void pm2fb_dispsw(const void* par, struct display* disp,
+ struct fb_info_gen* info);
+
+static struct fbgen_hwswitch pm2fb_hwswitch={
+ pm2fb_detect, pm2fb_encode_fix, pm2fb_decode_var,
+ pm2fb_encode_var, pm2fb_get_par, pm2fb_set_par,
+ pm2fb_getcolreg, pm2fb_setcolreg, pm2fb_pan_display,
+ pm2fb_blank, pm2fb_dispsw
+};
+
+static int pm2fb_open(struct fb_info* info, int user);
+static int pm2fb_release(struct fb_info* info, int user);
+
+static struct fb_ops pm2fb_ops={
+ pm2fb_open, pm2fb_release, fbgen_get_fix, fbgen_get_var,
+ fbgen_set_var, fbgen_get_cmap, fbgen_set_cmap, fbgen_pan_display,
+ NULL /* fb_ioctl() */, NULL /* fb_mmap() */
+};
+
+/***************************************************************************
+ * Begin of Permedia2 specific functions
+ ***************************************************************************/
+
+inline static unsigned long RD32(unsigned char* base, long off) {
+
+ return *((volatile unsigned long* )(base+off));
+}
+
+inline static void WR32(unsigned char* base, long off, unsigned long v) {
+
+ *((volatile unsigned long* )(base+off))=v;
+}
+
+inline static unsigned long pm2_RD(struct pm2fb_info* p, long off) {
+
+ return RD32(p->regions.v_regs, off);
+}
+
+inline static void pm2_WR(struct pm2fb_info* p, long off, unsigned long v) {
+
+ WR32(p->regions.v_regs, off, v);
+}
+
+inline static unsigned long pm2_RDAC_RD(struct pm2fb_info* p, long idx) {
+
+ pm2_WR(p, PM2R_RD_PALETTE_WRITE_ADDRESS, idx);
+ eieio();
+ return pm2_RD(p, PM2R_RD_INDEXED_DATA);
+}
+
+inline static void pm2_RDAC_WR(struct pm2fb_info* p, long idx,
+ unsigned long v) {
+
+ pm2_WR(p, PM2R_RD_PALETTE_WRITE_ADDRESS, idx);
+ eieio();
+ pm2_WR(p, PM2R_RD_INDEXED_DATA, v);
+}
+
+#ifdef CONFIG_FB_PM2_FIFO_DISCONNECT
+#define WAIT_FIFO(p,a)
+#else
+inline static void WAIT_FIFO(struct pm2fb_info* p, unsigned long a) {
+
+ while(pm2_RD(p, PM2R_IN_FIFO_SPACE)<a);
+ eieio();
+}
+#endif
+
+static unsigned long partprod(unsigned long xres) {
+ int i;
+
+ for (i=0; pp_table[i].width && pp_table[i].width!=xres; i++);
+ if (!pp_table[i].width)
+ DPRINTK("invalid width %lu\n", xres);
+ return pp_table[i].pp;
+}
+
+static unsigned long to3264(unsigned long timing, int bpp, int is64) {
+
+ switch (bpp) {
+ case 8:
+ timing=timing>>(2+is64);
+ break;
+ case 16:
+ timing=timing>>(1+is64);
+ break;
+ case 24:
+ timing=(timing*3)>>(2+is64);
+ break;
+ case 32:
+ if (is64)
+ timing=timing>>1;
+ break;
+ }
+ return timing;
+}
+
+static unsigned long from3264(unsigned long timing, int bpp, int is64) {
+
+ switch (bpp) {
+ case 8:
+ timing=timing<<(2+is64);
+ break;
+ case 16:
+ timing=timing<<(1+is64);
+ break;
+ case 24:
+ timing=(timing<<(2+is64))/3;
+ break;
+ case 32:
+ if (is64)
+ timing=timing<<1;
+ break;
+ }
+ return timing;
+}
+
+static void mnp(unsigned long clk, unsigned char* mm, unsigned char* nn,
+ unsigned char* pp) {
+ unsigned char m;
+ unsigned char n;
+ unsigned char p;
+ unsigned long f;
+ long current;
+ long delta=100000;
+
+ *mm=*nn=*pp=0;
+ for (n=2; n<15; n++) {
+ for (m=2; m; m++) {
+ f=PM2_REFERENCE_CLOCK*m/n;
+ if (f>=150000 && f<=300000) {
+ for (p=0; p<5; p++, f>>=1) {
+ current=clk>f?clk-f:f-clk;
+ if (current<delta) {
+ delta=current;
+ *mm=m;
+ *nn=n;
+ *pp=p;
+ }
+ }
+ }
+ }
+ }
+}
+
+static void wait_pm2(struct pm2fb_info* i) {
+
+ WAIT_FIFO(i, 1);
+ pm2_WR(i, PM2R_SYNC, 0);
+ eieio();
+ do {
+ while (pm2_RD(i, PM2R_OUT_FIFO_WORDS)==0);
+ eieio();
+ } while (pm2_RD(i, PM2R_OUT_FIFO)!=PM2TAG(PM2R_SYNC));
+}
+
+static void set_memclock(struct pm2fb_info* info, unsigned long clk) {
+ int i;
+ unsigned char m, n, p;
+
+ mnp(clk, &m, &n, &p);
+ WAIT_FIFO(info, 5);
+ pm2_RDAC_WR(info, PM2I_RD_MEMORY_CLOCK_3, 6);
+ eieio();
+ pm2_RDAC_WR(info, PM2I_RD_MEMORY_CLOCK_1, m);
+ pm2_RDAC_WR(info, PM2I_RD_MEMORY_CLOCK_2, n);
+ eieio();
+ pm2_RDAC_WR(info, PM2I_RD_MEMORY_CLOCK_3, 8|p);
+ eieio();
+ pm2_RDAC_RD(info, PM2I_RD_MEMORY_CLOCK_STATUS);
+ eieio();
+ for (i=256; i &&
+ !(pm2_RD(info, PM2R_RD_INDEXED_DATA)&PM2F_PLL_LOCKED); i--);
+}
+
+static void set_pixclock(struct pm2fb_info* info, unsigned long clk) {
+ int i;
+ unsigned char m, n, p;
+
+ mnp(clk, &m, &n, &p);
+ WAIT_FIFO(info, 5);
+ pm2_RDAC_WR(info, PM2I_RD_PIXEL_CLOCK_A3, 0);
+ eieio();
+ pm2_RDAC_WR(info, PM2I_RD_PIXEL_CLOCK_A1, m);
+ pm2_RDAC_WR(info, PM2I_RD_PIXEL_CLOCK_A2, n);
+ eieio();
+ pm2_RDAC_WR(info, PM2I_RD_PIXEL_CLOCK_A3, 8|p);
+ eieio();
+ pm2_RDAC_RD(info, PM2I_RD_PIXEL_CLOCK_STATUS);
+ eieio();
+ for (i=256; i &&
+ !(pm2_RD(info, PM2R_RD_INDEXED_DATA)&PM2F_PLL_LOCKED); i--);
+}
+
+static void set_color(struct pm2fb_info* p, unsigned char regno,
+ unsigned char r, unsigned char g, unsigned char b) {
+
+ WAIT_FIFO(p, 4);
+ eieio();
+ pm2_WR(p, PM2R_RD_PALETTE_WRITE_ADDRESS, regno);
+ eieio();
+ pm2_WR(p, PM2R_RD_PALETTE_DATA, r);
+ eieio();
+ pm2_WR(p, PM2R_RD_PALETTE_DATA, g);
+ eieio();
+ pm2_WR(p, PM2R_RD_PALETTE_DATA, b);
+}
+
+static void set_aperture(struct pm2fb_info* i, struct pm2fb_par* p) {
+
+ WAIT_FIFO(i, 2);
+#ifdef __LITTLE_ENDIAN
+ pm2_WR(i, PM2R_APERTURE_ONE, 0); /* FIXME */
+ pm2_WR(i, PM2R_APERTURE_TWO, 0);
+#else
+ switch (p->depth) {
+ case 8:
+ case 24:
+ pm2_WR(i, PM2R_APERTURE_ONE, 0);
+ pm2_WR(i, PM2R_APERTURE_TWO, 1);
+ break;
+ case 16:
+ pm2_WR(i, PM2R_APERTURE_ONE, 2);
+ pm2_WR(i, PM2R_APERTURE_TWO, 1);
+ break;
+ case 32:
+ pm2_WR(i, PM2R_APERTURE_ONE, 1);
+ pm2_WR(i, PM2R_APERTURE_TWO, 1);
+ break;
+ }
+#endif
+}
+
+static void set_screen(struct pm2fb_info* i, struct pm2fb_par* p) {
+ unsigned long clrmode=0;
+ unsigned long txtmap=0;
+ unsigned long xres;
+
+ xres=(p->width+31)&~31;
+ set_aperture(i, p);
+ WAIT_FIFO(i, 22);
+ pm2_RDAC_WR(i, PM2I_RD_COLOR_KEY_CONTROL, p->depth==8?0:
+ PM2F_COLOR_KEY_TEST_OFF);
+ switch (p->depth) {
+ case 8:
+ pm2_WR(i, PM2R_FB_READ_PIXEL, 0);
+ break;
+ case 16:
+ pm2_WR(i, PM2R_FB_READ_PIXEL, 1);
+ clrmode=PM2F_RD_TRUECOLOR|0x06;
+ txtmap=PM2F_TEXTEL_SIZE_16;
+ break;
+ case 32:
+ pm2_WR(i, PM2R_FB_READ_PIXEL, 2);
+ clrmode=PM2F_RD_TRUECOLOR|0x08;
+ txtmap=PM2F_TEXTEL_SIZE_32;
+ break;
+ case 24:
+ pm2_WR(i, PM2R_FB_READ_PIXEL, 4);
+ clrmode=PM2F_RD_TRUECOLOR|0x09;
+ txtmap=PM2F_TEXTEL_SIZE_24;
+ break;
+ }
+ pm2_WR(i, PM2R_SCREEN_SIZE, (p->height<<16)|p->width);
+ pm2_WR(i, PM2R_SCISSOR_MODE, PM2F_SCREEN_SCISSOR_ENABLE);
+ pm2_WR(i, PM2R_FB_WRITE_MODE, PM2F_FB_WRITE_ENABLE);
+ pm2_WR(i, PM2R_FB_READ_MODE, partprod(xres));
+ pm2_WR(i, PM2R_LB_READ_MODE, partprod(xres));
+ pm2_WR(i, PM2R_TEXTURE_MAP_FORMAT, txtmap|partprod(xres));
+ pm2_WR(i, PM2R_H_TOTAL, p->htotal);
+ pm2_WR(i, PM2R_HS_START, p->hsstart);
+ pm2_WR(i, PM2R_HS_END, p->hsend);
+ pm2_WR(i, PM2R_HG_END, p->hbend);
+ pm2_WR(i, PM2R_HB_END, p->hbend);
+ pm2_WR(i, PM2R_V_TOTAL, p->vtotal);
+ pm2_WR(i, PM2R_VS_START, p->vsstart);
+ pm2_WR(i, PM2R_VS_END, p->vsend);
+ pm2_WR(i, PM2R_VB_END, p->vbend);
+ pm2_WR(i, PM2R_SCREEN_STRIDE, p->stride);
+ eieio();
+ pm2_WR(i, PM2R_SCREEN_BASE, p->base);
+ pm2_RDAC_WR(i, PM2I_RD_COLOR_MODE, PM2F_RD_COLOR_MODE_RGB|
+ PM2F_RD_GUI_ACTIVE|clrmode);
+ pm2_WR(i, PM2R_VIDEO_CONTROL, p->video);
+ set_pixclock(i, p->pixclock);
+};
+
+/***************************************************************************
+ * Begin of generic initialization functions
+ ***************************************************************************/
+
+static void pm2fb_reset(struct pm2fb_info* p) {
+
+ pm2_WR(p, PM2R_RESET_STATUS, 0);
+ eieio();
+ while (pm2_RD(p, PM2R_RESET_STATUS)&PM2F_BEING_RESET);
+ eieio();
+#ifdef CONFIG_FB_PM2_FIFO_DISCONNECT
+ DPRINTK("FIFO disconnect enabled\n");
+ pm2_WR(p, PM2R_FIFO_DISCON, 1);
+#endif
+ eieio();
+ if (board_table[p->board].init)
+ board_table[p->board].init(p);
+ WAIT_FIFO(p, 48);
+ pm2_WR(p, PM2R_CHIP_CONFIG, pm2_RD(p, PM2R_CHIP_CONFIG)&
+ ~(PM2F_VGA_ENABLE|PM2F_VGA_FIXED));
+ pm2_WR(p, PM2R_BYPASS_WRITE_MASK, ~(0L));
+ pm2_WR(p, PM2R_FRAMEBUFFER_WRITE_MASK, ~(0L));
+ pm2_WR(p, PM2R_FIFO_CONTROL, 0);
+ pm2_WR(p, PM2R_FILTER_MODE, PM2F_SYNCHRONIZATION);
+ pm2_WR(p, PM2R_APERTURE_ONE, 0);
+ pm2_WR(p, PM2R_APERTURE_TWO, 0);
+ pm2_WR(p, PM2R_LB_READ_FORMAT, 0);
+ pm2_WR(p, PM2R_LB_WRITE_FORMAT, 0);
+ pm2_WR(p, PM2R_LB_READ_MODE, 0);
+ pm2_WR(p, PM2R_LB_SOURCE_OFFSET, 0);
+ pm2_WR(p, PM2R_FB_SOURCE_OFFSET, 0);
+ pm2_WR(p, PM2R_FB_PIXEL_OFFSET, 0);
+ pm2_WR(p, PM2R_WINDOW_ORIGIN, 0);
+ pm2_WR(p, PM2R_FB_WINDOW_BASE, 0);
+ pm2_WR(p, PM2R_LB_WINDOW_BASE, 0);
+ pm2_WR(p, PM2R_FB_SOFT_WRITE_MASK, ~(0L));
+ pm2_WR(p, PM2R_FB_HARD_WRITE_MASK, ~(0L));
+ pm2_WR(p, PM2R_FB_READ_PIXEL, 0);
+ pm2_WR(p, PM2R_DITHER_MODE, 0);
+ pm2_WR(p, PM2R_AREA_STIPPLE_MODE, 0);
+ pm2_WR(p, PM2R_DEPTH_MODE, 0);
+ pm2_WR(p, PM2R_STENCIL_MODE, 0);
+ pm2_WR(p, PM2R_TEXTURE_ADDRESS_MODE, 0);
+ pm2_WR(p, PM2R_TEXTURE_READ_MODE, 0);
+ pm2_WR(p, PM2R_TEXEL_LUT_MODE, 0);
+ pm2_WR(p, PM2R_YUV_MODE, 0);
+ pm2_WR(p, PM2R_COLOR_DDA_MODE, 0);
+ pm2_WR(p, PM2R_TEXTURE_COLOR_MODE, 0);
+ pm2_WR(p, PM2R_FOG_MODE, 0);
+ pm2_WR(p, PM2R_ALPHA_BLEND_MODE, 0);
+ pm2_WR(p, PM2R_LOGICAL_OP_MODE, 0);
+ pm2_WR(p, PM2R_STATISTICS_MODE, 0);
+ pm2_WR(p, PM2R_SCISSOR_MODE, 0);
+ pm2_RDAC_WR(p, PM2I_RD_CURSOR_CONTROL, 0);
+ pm2_RDAC_WR(p, PM2I_RD_MISC_CONTROL, PM2F_RD_PALETTE_WIDTH_8);
+ pm2_RDAC_WR(p, PM2I_RD_COLOR_KEY_CONTROL, 0);
+ pm2_RDAC_WR(p, PM2I_RD_OVERLAY_KEY, 0);
+ pm2_RDAC_WR(p, PM2I_RD_RED_KEY, 0);
+ pm2_RDAC_WR(p, PM2I_RD_GREEN_KEY, 0);
+ pm2_RDAC_WR(p, PM2I_RD_BLUE_KEY, 0);
+ eieio();
+ set_memclock(p, p->memclock);
+}
+
+__initfunc(static int pm2fb_conf(struct pm2fb_info* p)) {
+
+ for (p->board=0; board_table[p->board].detect &&
+ !(board_table[p->board].detect(p)); p->board++);
+ if (!board_table[p->board].detect) {
+ DPRINTK("no board found.\n");
+ return 0;
+ }
+ DPRINTK("found board: %s\n", board_table[p->board].name);
+ p->regions.p_fb=p->regions.fb_base;
+ p->regions.v_fb=MMAP(p->regions.p_fb, p->regions.fb_size);
+#ifdef __LITTLE_ENDIAN
+ p->regions.p_regs=p->regions.rg_base;
+#else
+ p->regions.p_regs=p->regions.rg_base+PM2_REGS_SIZE;
+#endif
+ p->regions.v_regs=MMAP(p->regions.p_regs, PM2_REGS_SIZE);
+ return 1;
+}
+
+/***************************************************************************
+ * Begin of per-board initialization functions
+ ***************************************************************************/
+
+#ifdef CONFIG_FB_PM2_CVPPC
+static int cvppc_PCI_init(struct cvppc_par* p) {
+ extern unsigned long powerup_PCI_present;
+
+ if (!powerup_PCI_present) {
+ DPRINTK("no PCI bridge detected\n");
+ return 0;
+ }
+ if (!(p->pci_config=MMAP(CVPPC_PCI_CONFIG, 256))) {
+ DPRINTK("unable to map PCI config region\n");
+ return 0;
+ }
+ if (RD32(p->pci_config, PCI_VENDOR_ID)!=
+ ((PCI_DEVICE_ID_TI_TVP4020<<16)|PCI_VENDOR_ID_TI)) {
+ DPRINTK("bad vendorID/deviceID\n");
+ return 0;
+ }
+ if (!(p->pci_bridge=MMAP(CSPPC_PCI_BRIDGE, 256))) {
+ DPRINTK("unable to map PCI bridge\n");
+ return 0;
+ }
+ WR32(p->pci_bridge, CSPPC_BRIDGE_ENDIAN, CSPPCF_BRIDGE_BIG_ENDIAN);
+ eieio();
+ if (pm2fb_options.flags & OPTF_OLD_MEM)
+ WR32(p->pci_config, PCI_CACHE_LINE_SIZE, 0xff00);
+ WR32(p->pci_config, PCI_BASE_ADDRESS_0, CVPPC_REGS_REGION);
+ WR32(p->pci_config, PCI_BASE_ADDRESS_1, CVPPC_FB_APERTURE_ONE);
+ WR32(p->pci_config, PCI_BASE_ADDRESS_2, CVPPC_FB_APERTURE_TWO);
+ WR32(p->pci_config, PCI_ROM_ADDRESS, CVPPC_ROM_ADDRESS);
+ eieio();
+ WR32(p->pci_config, PCI_COMMAND, 0xef000000 |
+ PCI_COMMAND_IO |
+ PCI_COMMAND_MEMORY |
+ PCI_COMMAND_MASTER);
+ return 1;
+}
+
+static int cvppc_detect(struct pm2fb_info* p) {
+
+ if (!cvppc_PCI_init(&p->board_par.cvppc))
+ return 0;
+ p->regions.fb_base=(unsigned char* )CVPPC_FB_APERTURE_ONE;
+ p->regions.fb_size=CVPPC_FB_SIZE;
+ p->regions.rg_base=(unsigned char* )CVPPC_REGS_REGION;
+ p->memclock=CVPPC_MEMCLOCK;
+ return 1;
+}
+
+static void cvppc_init(struct pm2fb_info* p) {
+
+ WAIT_FIFO(p, 3);
+ pm2_WR(p, PM2R_MEM_CONTROL, 0);
+ pm2_WR(p, PM2R_BOOT_ADDRESS, 0x30);
+ eieio();
+ if (pm2fb_options.flags & OPTF_OLD_MEM)
+ pm2_WR(p, PM2R_MEM_CONFIG, CVPPC_MEM_CONFIG_OLD);
+ else
+ pm2_WR(p, PM2R_MEM_CONFIG, CVPPC_MEM_CONFIG_NEW);
+}
+#endif /* CONFIG_FB_PM2_CVPPC */
+
+/***************************************************************************
+ * Console hw acceleration
+ ***************************************************************************/
+
+/*
+ * copy with packed pixels (8/16bpp only).
+ */
+static void pm2fb_pp_copy(struct pm2fb_info* i, long xsrc, long ysrc,
+ long x, long y, long w, long h) {
+ long scale=i->current_par.depth==8?2:1;
+ long offset;
+
+ if (!w || !h)
+ return;
+ WAIT_FIFO(i, 7);
+ pm2_WR(i, PM2R_CONFIG, PM2F_CONFIG_FB_WRITE_ENABLE|
+ PM2F_CONFIG_FB_PACKED_DATA|
+ PM2F_CONFIG_FB_READ_SOURCE_ENABLE);
+ pm2_WR(i, PM2R_FB_PIXEL_OFFSET, 0);
+ pm2_WR(i, PM2R_FB_SOURCE_DELTA, ((ysrc-y)&0xfff)<<16|
+ ((xsrc-x)&0xfff));
+ offset=(x&0x3)-(xsrc&0x3);
+ pm2_WR(i, PM2R_RECTANGLE_ORIGIN, (y<<16)|(x>>scale));
+ pm2_WR(i, PM2R_RECTANGLE_SIZE, (h<<16)|((w+7)>>scale));
+ pm2_WR(i, PM2R_PACKED_DATA_LIMITS, (offset<<29)|(x<<16)|(x+w));
+ eieio();
+ pm2_WR(i, PM2R_RENDER, PM2F_RENDER_RECTANGLE|
+ (x<xsrc?PM2F_INCREASE_X:0)|
+ (y<ysrc?PM2F_INCREASE_Y:0));
+ wait_pm2(i);
+}
+
+/*
+ * block operation. copy=0: rectangle fill, copy=1: rectangle copy.
+ */
+static void pm2fb_block_op(struct pm2fb_info* i, int copy,
+ long xsrc, long ysrc,
+ long x, long y, long w, long h,
+ unsigned long color) {
+
+ if (!w || !h)
+ return;
+ WAIT_FIFO(i, 6);
+ pm2_WR(i, PM2R_CONFIG, PM2F_CONFIG_FB_WRITE_ENABLE|
+ PM2F_CONFIG_FB_READ_SOURCE_ENABLE);
+ pm2_WR(i, PM2R_FB_PIXEL_OFFSET, 0);
+ if (copy)
+ pm2_WR(i, PM2R_FB_SOURCE_DELTA, ((ysrc-y)&0xfff)<<16|
+ ((xsrc-x)&0xfff));
+ else
+ pm2_WR(i, PM2R_FB_BLOCK_COLOR, color);
+ pm2_WR(i, PM2R_RECTANGLE_ORIGIN, (y<<16)|x);
+ pm2_WR(i, PM2R_RECTANGLE_SIZE, (h<<16)|w);
+ eieio();
+ pm2_WR(i, PM2R_RENDER, PM2F_RENDER_RECTANGLE|
+ (x<xsrc?PM2F_INCREASE_X:0)|
+ (y<ysrc?PM2F_INCREASE_Y:0)|
+ (copy?0:PM2F_RENDER_FASTFILL));
+ wait_pm2(i);
+}
+
+static int pm2fb_blank(int blank_mode, struct fb_info_gen* info) {
+ struct pm2fb_info* i=(struct pm2fb_info* )info;
+ unsigned long video;
+
+ if (!i->current_par_valid)
+ return 1;
+ video=i->current_par.video;
+ if (blank_mode>0) {
+ switch (blank_mode-1) {
+ case VESA_NO_BLANKING: /* FIXME */
+ video=video&~(PM2F_VIDEO_ENABLE);
+ break;
+ case VESA_HSYNC_SUSPEND:
+ video=video&~(PM2F_HSYNC_MASK|
+ PM2F_BLANK_LOW);
+ break;
+ case VESA_VSYNC_SUSPEND:
+ video=video&~(PM2F_VSYNC_MASK|
+ PM2F_BLANK_LOW);
+ break;
+ case VESA_POWERDOWN:
+ video=video&~(PM2F_VSYNC_MASK|
+ PM2F_HSYNC_MASK|
+ PM2F_BLANK_LOW);
+ break;
+ }
+ }
+ WAIT_FIFO(i, 1);
+ pm2_WR(i, PM2R_VIDEO_CONTROL, video);
+ return 0;
+}
+
+static int pm2fb_pan_display(const struct fb_var_screeninfo* var,
+ struct fb_info_gen* info) {
+ struct pm2fb_info* i=(struct pm2fb_info* )info;
+
+ if (!i->current_par_valid)
+ return -EINVAL;
+ i->current_par.base=to3264(var->yoffset*i->current_par.width+
+ var->xoffset, i->current_par.depth, 1);
+ WAIT_FIFO(i, 1);
+ pm2_WR(i, PM2R_SCREEN_BASE, i->current_par.base);
+ return 0;
+}
+
+static void pm2fb_pp_bmove(struct display* p, int sy, int sx,
+ int dy, int dx, int height, int width) {
+
+ if (fontwidthlog(p)) {
+ sx=sx<<fontwidthlog(p);
+ dx=dx<<fontwidthlog(p);
+ width=width<<fontwidthlog(p);
+ }
+ else {
+ sx=sx*fontwidth(p);
+ dx=dx*fontwidth(p);
+ width=width*fontwidth(p);
+ }
+ sy=sy*fontheight(p);
+ dy=dy*fontheight(p);
+ height=height*fontheight(p);
+ pm2fb_pp_copy((struct pm2fb_info* )p->fb_info, sx, sy, dx,
+ dy, width, height);
+}
+
+static void pm2fb_bmove(struct display* p, int sy, int sx,
+ int dy, int dx, int height, int width) {
+
+ if (fontwidthlog(p)) {
+ sx=sx<<fontwidthlog(p);
+ dx=dx<<fontwidthlog(p);
+ width=width<<fontwidthlog(p);
+ }
+ else {
+ sx=sx*fontwidth(p);
+ dx=dx*fontwidth(p);
+ width=width*fontwidth(p);
+ }
+ sy=sy*fontheight(p);
+ dy=dy*fontheight(p);
+ height=height*fontheight(p);
+ pm2fb_block_op((struct pm2fb_info* )p->fb_info, 1, sx, sy, dx, dy,
+ width, height, 0);
+}
+
+#ifdef FBCON_HAS_CFB8
+static void pm2fb_clear8(struct vc_data* conp, struct display* p,
+ int sy, int sx, int height, int width) {
+ unsigned long c;
+
+ sx=sx*fontwidth(p);
+ width=width*fontwidth(p);
+ sy=sy*fontheight(p);
+ height=height*fontheight(p);
+ c=attr_bgcol_ec(p, conp);
+ c|=c<<8;
+ c|=c<<16;
+ pm2fb_block_op((struct pm2fb_info* )p->fb_info, 0, 0, 0, sx, sy,
+ width, height, c);
+}
+
+static void pm2fb_clear_margins8(struct vc_data* conp, struct display* p,
+ int bottom_only) {
+ unsigned long c;
+ unsigned long sx;
+ unsigned long sy;
+
+ c=attr_bgcol_ec(p, conp);
+ c|=c<<8;
+ c|=c<<16;
+ sx=conp->vc_cols*fontwidth(p);
+ sy=conp->vc_rows*fontheight(p);
+ if (!bottom_only)
+ pm2fb_block_op((struct pm2fb_info* )p->fb_info, 0, 0, 0,
+ sx, 0, (p->var.xres-sx), p->var.yres_virtual, c);
+ pm2fb_block_op((struct pm2fb_info* )p->fb_info, 0, 0, 0,
+ 0, p->var.yoffset+sy, sx, p->var.yres-sy, c);
+}
+
+static struct display_switch pm2_cfb8 = {
+ fbcon_cfb8_setup, pm2fb_pp_bmove, pm2fb_clear8,
+ fbcon_cfb8_putc, fbcon_cfb8_putcs, fbcon_cfb8_revc,
+ NULL /* cursor() */, NULL /* set_font() */,
+ pm2fb_clear_margins8,
+ FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16) };
+#endif /* FBCON_HAS_CFB8 */
+
+#ifdef FBCON_HAS_CFB16
+static void pm2fb_clear16(struct vc_data* conp, struct display* p,
+ int sy, int sx, int height, int width) {
+ unsigned long c;
+
+ sx=sx*fontwidth(p);
+ width=width*fontwidth(p);
+ sy=sy*fontheight(p);
+ height=height*fontheight(p);
+ c=((u16 *)p->dispsw_data)[attr_bgcol_ec(p, conp)];
+ c|=c<<16;
+ pm2fb_block_op((struct pm2fb_info* )p->fb_info, 0, 0, 0, sx, sy,
+ width, height, c);
+}
+
+static void pm2fb_clear_margins16(struct vc_data* conp, struct display* p,
+ int bottom_only) {
+ unsigned long c;
+ unsigned long sx;
+ unsigned long sy;
+
+ c = ((u16 *)p->dispsw_data)[attr_bgcol_ec(p, conp)];
+ c|=c<<16;
+ sx=conp->vc_cols*fontwidth(p);
+ sy=conp->vc_rows*fontheight(p);
+ if (!bottom_only)
+ pm2fb_block_op((struct pm2fb_info* )p->fb_info, 0, 0, 0,
+ sx, 0, (p->var.xres-sx), p->var.yres_virtual, c);
+ pm2fb_block_op((struct pm2fb_info* )p->fb_info, 0, 0, 0,
+ 0, p->var.yoffset+sy, sx, p->var.yres-sy, c);
+}
+
+static struct display_switch pm2_cfb16 = {
+ fbcon_cfb16_setup, pm2fb_pp_bmove, pm2fb_clear16,
+ fbcon_cfb16_putc, fbcon_cfb16_putcs, fbcon_cfb16_revc,
+ NULL /* cursor() */, NULL /* set_font() */,
+ pm2fb_clear_margins16,
+ FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16) };
+#endif /* FBCON_HAS_CFB16 */
+
+#ifdef FBCON_HAS_CFB24
+/*
+ * fast fill for 24bpp works only when red==green==blue
+ */
+static void pm2fb_clear24(struct vc_data* conp, struct display* p,
+ int sy, int sx, int height, int width) {
+ struct pm2fb_info* i=(struct pm2fb_info* )p->fb_info;
+ unsigned long c;
+
+ c=attr_bgcol_ec(p, conp);
+ if ( i->palette[c].red==i->palette[c].green &&
+ i->palette[c].green==i->palette[c].blue) {
+ c=((u32 *)p->dispsw_data)[c];
+ c|=(c&0xff0000)<<8;
+ sx=sx*fontwidth(p);
+ width=width*fontwidth(p);
+ sy=sy*fontheight(p);
+ height=height*fontheight(p);
+ pm2fb_block_op(i, 0, 0, 0, sx, sy, width, height, c);
+ }
+ else
+ fbcon_cfb24_clear(conp, p, sy, sx, height, width);
+
+}
+
+static void pm2fb_clear_margins24(struct vc_data* conp, struct display* p,
+ int bottom_only) {
+ struct pm2fb_info* i=(struct pm2fb_info* )p->fb_info;
+ unsigned long c;
+ unsigned long sx;
+ unsigned long sy;
+
+ c=attr_bgcol_ec(p, conp);
+ if ( i->palette[c].red==i->palette[c].green &&
+ i->palette[c].green==i->palette[c].blue) {
+ c=((u32 *)p->dispsw_data)[c];
+ c|=(c&0xff0000)<<8;
+ sx=conp->vc_cols*fontwidth(p);
+ sy=conp->vc_rows*fontheight(p);
+ if (!bottom_only)
+ pm2fb_block_op(i, 0, 0, 0, sx, 0, (p->var.xres-sx),
+ p->var.yres_virtual, c);
+ pm2fb_block_op(i, 0, 0, 0, 0, p->var.yoffset+sy,
+ sx, p->var.yres-sy, c);
+ }
+ else
+ fbcon_cfb24_clear_margins(conp, p, bottom_only);
+
+}
+
+static struct display_switch pm2_cfb24 = {
+ fbcon_cfb24_setup, pm2fb_bmove, pm2fb_clear24,
+ fbcon_cfb24_putc, fbcon_cfb24_putcs, fbcon_cfb24_revc,
+ NULL /* cursor() */, NULL /* set_font() */,
+ pm2fb_clear_margins24,
+ FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16) };
+#endif /* FBCON_HAS_CFB24 */
+
+#ifdef FBCON_HAS_CFB32
+static void pm2fb_clear32(struct vc_data* conp, struct display* p,
+ int sy, int sx, int height, int width) {
+ unsigned long c;
+
+ sx=sx*fontwidth(p);
+ width=width*fontwidth(p);
+ sy=sy*fontheight(p);
+ height=height*fontheight(p);
+ c=((u32 *)p->dispsw_data)[attr_bgcol_ec(p, conp)];
+ pm2fb_block_op((struct pm2fb_info* )p->fb_info, 0, 0, 0, sx, sy,
+ width, height, c);
+}
+
+static void pm2fb_clear_margins32(struct vc_data* conp, struct display* p,
+ int bottom_only) {
+ unsigned long c;
+ unsigned long sx;
+ unsigned long sy;
+
+ c = ((u32 *)p->dispsw_data)[attr_bgcol_ec(p, conp)];
+ sx=conp->vc_cols*fontwidth(p);
+ sy=conp->vc_rows*fontheight(p);
+ if (!bottom_only)
+ pm2fb_block_op((struct pm2fb_info* )p->fb_info, 0, 0, 0,
+ sx, 0, (p->var.xres-sx), p->var.yres_virtual, c);
+ pm2fb_block_op((struct pm2fb_info* )p->fb_info, 0, 0, 0,
+ 0, p->var.yoffset+sy, sx, p->var.yres-sy, c);
+}
+
+static struct display_switch pm2_cfb32 = {
+ fbcon_cfb32_setup, pm2fb_bmove, pm2fb_clear32,
+ fbcon_cfb32_putc, fbcon_cfb32_putcs, fbcon_cfb32_revc,
+ NULL /* cursor() */, NULL /* set_font() */,
+ pm2fb_clear_margins32,
+ FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16) };
+#endif /* FBCON_HAS_CFB32 */
+
+/***************************************************************************
+ * Framebuffer functions
+ ***************************************************************************/
+
+static void pm2fb_detect(void) {}
+
+static int pm2fb_encode_fix(struct fb_fix_screeninfo* fix,
+ const void* par, struct fb_info_gen* info) {
+ struct pm2fb_info* i=(struct pm2fb_info* )info;
+ struct pm2fb_par* p=(struct pm2fb_par* )par;
+
+ strcpy(fix->id, permedia2_name);
+ fix->smem_start=i->regions.p_fb;
+ fix->smem_len=i->regions.fb_size;
+ fix->mmio_start=i->regions.p_regs;
+ fix->mmio_len=PM2_REGS_SIZE;
+ fix->accel=FB_ACCEL_3DLABS_PERMEDIA2;
+ fix->type=FB_TYPE_PACKED_PIXELS;
+ fix->visual=p->depth==8?FB_VISUAL_PSEUDOCOLOR:FB_VISUAL_TRUECOLOR;
+ fix->line_length=0;
+ fix->xpanstep=p->depth==24?8:64/p->depth;
+ fix->ypanstep=1;
+ fix->ywrapstep=0;
+ return 0;
+}
+
+static int pm2fb_decode_var(const struct fb_var_screeninfo* var,
+ void* par, struct fb_info_gen* info) {
+ struct pm2fb_info* i=(struct pm2fb_info* )info;
+ struct pm2fb_par p;
+ unsigned long xres;
+ int data64;
+
+ memset(&p, 0, sizeof(struct pm2fb_par));
+ p.width=(var->xres_virtual+7)&~7;
+ p.height=var->yres_virtual;
+ p.depth=(var->bits_per_pixel+7)&~7;
+ p.depth=p.depth>32?32:p.depth;
+ data64=p.depth>8;
+ xres=(var->xres+31)&~31;
+ if (p.width==~(0L))
+ p.width=xres;
+ if (p.height==~(0L))
+ p.height=var->yres;
+ if (p.width<xres+var->xoffset)
+ p.width=xres+var->xoffset;
+ if (p.height<var->yres+var->yoffset)
+ p.height=var->yres+var->yoffset;
+ if (!partprod(xres)) {
+ DPRINTK("width not supported: %lu\n", xres);
+ return -EINVAL;
+ }
+ if (p.width>2047) {
+ DPRINTK("virtual width not supported: %lu\n", p.width);
+ return -EINVAL;
+ }
+ if (var->yres<200) {
+ DPRINTK("height not supported: %lu\n",
+ (unsigned long )var->yres);
+ return -EINVAL;
+ }
+ if (p.height<200 || p.height>2047) {
+ DPRINTK("virtual height not supported: %lu\n", p.height);
+ return -EINVAL;
+ }
+ if (p.width*p.height*p.depth/8>i->regions.fb_size) {
+ DPRINTK("no memory for screen (%lux%lux%lu)\n",
+ xres, p.height, p.depth);
+ return -EINVAL;
+ }
+ p.pixclock=PICOS2KHZ(var->pixclock);
+ if (p.pixclock>PM2_MAX_PIXCLOCK) {
+ DPRINTK("pixclock too high (%luKHz)\n", p.pixclock);
+ return -EINVAL;
+ }
+ p.hsstart=to3264(var->right_margin, p.depth, data64);
+ p.hsend=p.hsstart+to3264(var->hsync_len, p.depth, data64);
+ p.hbend=p.hsend+to3264(var->left_margin, p.depth, data64);
+ p.htotal=to3264(xres, p.depth, data64)+p.hbend-1;
+ p.vsstart=var->lower_margin?var->lower_margin-1:0; /* FIXME! */
+ p.vsend=var->lower_margin+var->vsync_len-1;
+ p.vbend=var->lower_margin+var->vsync_len+var->upper_margin;
+ p.vtotal=var->yres+p.vbend-1;
+ p.stride=to3264(p.width, p.depth, 1);
+ p.base=to3264(var->yoffset*xres+var->xoffset, p.depth, 1);
+ if (data64)
+ p.video|=PM2F_DATA_64_ENABLE;
+ if (var->sync & FB_SYNC_HOR_HIGH_ACT)
+ p.video|=PM2F_HSYNC_ACT_HIGH;
+ else
+ p.video|=PM2F_HSYNC_ACT_LOW;
+ if (var->sync & FB_SYNC_VERT_HIGH_ACT)
+ p.video|=PM2F_VSYNC_ACT_HIGH;
+ else
+ p.video|=PM2F_VSYNC_ACT_LOW;
+ if ((var->vmode & FB_VMODE_MASK)==FB_VMODE_INTERLACED) {
+ DPRINTK("interlaced not supported\n");
+ return -EINVAL;
+ }
+ if ((var->vmode & FB_VMODE_MASK)==FB_VMODE_DOUBLE)
+ p.video|=PM2F_LINE_DOUBLE;
+ if (var->activate==FB_ACTIVATE_NOW)
+ p.video|=PM2F_VIDEO_ENABLE;
+ *((struct pm2fb_par* )par)=p;
+ return 0;
+}
+
+static int pm2fb_encode_var(struct fb_var_screeninfo* var,
+ const void* par, struct fb_info_gen* info) {
+ struct pm2fb_par* p=(struct pm2fb_par* )par;
+ struct fb_var_screeninfo v;
+ unsigned long base;
+
+ memset(&v, 0, sizeof(struct fb_var_screeninfo));
+ v.xres_virtual=p->width;
+ v.yres_virtual=p->height;
+ v.xres=(p->htotal+1)-p->hbend;
+ v.yres=(p->vtotal+1)-p->vbend;
+ v.right_margin=p->hsstart;
+ v.hsync_len=p->hsend-p->hsstart;
+ v.left_margin=p->hbend-p->hsend;
+ v.lower_margin=p->vsstart+1;
+ v.vsync_len=p->vsend-v.lower_margin+1;
+ v.upper_margin=p->vbend-v.lower_margin-v.vsync_len;
+ v.bits_per_pixel=p->depth;
+ if (p->video & PM2F_DATA_64_ENABLE) {
+ v.xres=v.xres<<1;
+ v.right_margin=v.right_margin<<1;
+ v.hsync_len=v.hsync_len<<1;
+ v.left_margin=v.left_margin<<1;
+ }
+ switch (p->depth) {
+ case 8:
+ v.red.length=v.green.length=v.blue.length=8;
+ v.xres=v.xres<<2;
+ v.right_margin=v.right_margin<<2;
+ v.hsync_len=v.hsync_len<<2;
+ v.left_margin=v.left_margin<<2;
+ break;
+ case 16:
+ v.red.offset=11;
+ v.red.length=5;
+ v.green.offset=5;
+ v.green.length=6;
+ v.blue.length=5;
+ v.xres=v.xres<<1;
+ v.right_margin=v.right_margin<<1;
+ v.hsync_len=v.hsync_len<<1;
+ v.left_margin=v.left_margin<<1;
+ break;
+ case 32:
+ v.transp.offset=24;
+ v.red.offset=16;
+ v.green.offset=8;
+ v.red.length=v.green.length=v.blue.length=
+ v.transp.length=8;
+ break;
+ case 24:
+ v.blue.offset=16;
+ v.green.offset=8;
+ v.red.length=v.green.length=v.blue.length=8;
+ v.xres=(v.xres<<2)/3;
+ v.right_margin=(v.right_margin<<2)/3;
+ v.hsync_len=(v.hsync_len<<2)/3;
+ v.left_margin=(v.left_margin<<2)/3;
+ break;
+ }
+ base=from3264(p->base, p->depth, 1);
+ v.xoffset=base%v.xres;
+ v.yoffset=base/v.xres;
+ v.height=v.width=-1;
+ v.pixclock=KHZ2PICOS(p->pixclock);
+ if ((p->video & PM2F_HSYNC_MASK)==PM2F_HSYNC_ACT_HIGH)
+ v.sync|=FB_SYNC_HOR_HIGH_ACT;
+ if ((p->video & PM2F_VSYNC_MASK)==PM2F_VSYNC_ACT_HIGH)
+ v.sync|=FB_SYNC_VERT_HIGH_ACT;
+ if (p->video & PM2F_LINE_DOUBLE)
+ v.vmode=FB_VMODE_DOUBLE;
+ *var=v;
+ return 0;
+}
+
+static void set_user_mode(struct pm2fb_info* i) {
+
+ memcpy(&i->current_par, &pm2fb_options.user_mode,
+ sizeof(i->current_par));
+ if (pm2fb_options.flags & OPTF_YPAN) {
+ i->current_par.height=i->regions.fb_size/
+ (i->current_par.width*i->current_par.depth/8);
+ i->current_par.height=MIN(i->current_par.height,2047);
+ i->current_par.height=MAX(i->current_par.height,
+ pm2fb_options.user_mode.height);
+ }
+}
+
+static void pm2fb_get_par(void* par, struct fb_info_gen* info) {
+ struct pm2fb_info* i=(struct pm2fb_info* )info;
+
+ if (!i->current_par_valid) {
+ set_user_mode(i);
+ pm2fb_reset(i);
+ set_screen(i, &i->current_par);
+ i->current_par_valid=1;
+ }
+ *((struct pm2fb_par* )par)=i->current_par;
+}
+
+static void pm2fb_set_par(const void* par, struct fb_info_gen* info) {
+ struct pm2fb_info* i=(struct pm2fb_info* )info;
+ struct pm2fb_par* p;
+
+ p=(struct pm2fb_par* )par;
+ if (i->current_par_valid) {
+ i->current_par.base=p->base;
+ if (!memcmp(p, &i->current_par, sizeof(struct pm2fb_par))) {
+ WAIT_FIFO(i, 1);
+ pm2_WR(i, PM2R_SCREEN_BASE, p->base);
+ return;
+ }
+ }
+ i->current_par=*p;
+ i->current_par_valid=1;
+ set_screen(i, &i->current_par);
+}
+
+static int pm2fb_getcolreg(unsigned regno,
+ unsigned* red, unsigned* green, unsigned* blue,
+ unsigned* transp, struct fb_info* info) {
+ struct pm2fb_info* i=(struct pm2fb_info* )info;
+
+ if (regno<256) {
+ *red=i->palette[regno].red<<8|i->palette[regno].red;
+ *green=i->palette[regno].green<<8|i->palette[regno].green;
+ *blue=i->palette[regno].blue<<8|i->palette[regno].blue;
+ *transp=i->palette[regno].transp<<8|i->palette[regno].transp;
+ }
+ return regno>255;
+}
+
+static int pm2fb_setcolreg(unsigned regno,
+ unsigned red, unsigned green, unsigned blue,
+ unsigned transp, struct fb_info* info) {
+ struct pm2fb_info* i=(struct pm2fb_info* )info;
+
+ if (regno<16) {
+ switch (i->current_par.depth) {
+#ifdef FBCON_HAS_CFB8
+ case 8:
+ break;
+#endif
+#ifdef FBCON_HAS_CFB16
+ case 16:
+ i->cmap.cmap16[regno]=
+ ((u32 )red & 0xf800) |
+ (((u32 )green & 0xfc00)>>5) |
+ (((u32 )blue & 0xf800)>>11);
+ break;
+#endif
+#ifdef FBCON_HAS_CFB24
+ case 24:
+ i->cmap.cmap24[regno]=
+ (((u32 )blue & 0xff00) << 8) |
+ ((u32 )green & 0xff00) |
+ (((u32 )red & 0xff00) >> 8);
+ break;
+#endif
+#ifdef FBCON_HAS_CFB32
+ case 32:
+ i->cmap.cmap32[regno]=
+ (((u32 )transp & 0xff00) << 16) |
+ (((u32 )red & 0xff00) << 8) |
+ (((u32 )green & 0xff00)) |
+ (((u32 )blue & 0xff00) >> 8);
+ break;
+#endif
+ default:
+ DPRINTK("bad depth %lu\n",
+ i->current_par.depth);
+ break;
+ }
+ }
+ if (regno<256) {
+ i->palette[regno].red=red >> 8;
+ i->palette[regno].green=green >> 8;
+ i->palette[regno].blue=blue >> 8;
+ i->palette[regno].transp=transp >> 8;
+ if (i->current_par.depth==8)
+ set_color(i, regno, red>>8, green>>8, blue>>8);
+ }
+ return regno>255;
+}
+
+static void pm2fb_dispsw(const void* par, struct display* disp,
+ struct fb_info_gen* info) {
+ struct pm2fb_info* i=(struct pm2fb_info* )info;
+ unsigned long flags;
+ unsigned long depth;
+
+ save_flags(flags);
+ cli();
+ switch (depth=((struct pm2fb_par* )par)->depth) {
+#ifdef FBCON_HAS_CFB8
+ case 8:
+ disp->dispsw=&pm2_cfb8;
+ break;
+#endif
+#ifdef FBCON_HAS_CFB16
+ case 16:
+ disp->dispsw=&pm2_cfb16;
+ disp->dispsw_data=i->cmap.cmap16;
+ break;
+#endif
+#ifdef FBCON_HAS_CFB24
+ case 24:
+ disp->dispsw=&pm2_cfb24;
+ disp->dispsw_data=i->cmap.cmap24;
+ break;
+#endif
+#ifdef FBCON_HAS_CFB32
+ case 32:
+ disp->dispsw=&pm2_cfb32;
+ disp->dispsw_data=i->cmap.cmap32;
+ break;
+#endif
+ default:
+ disp->dispsw=&fbcon_dummy;
+ break;
+ }
+ restore_flags(flags);
+}
+
+static int pm2fb_open(struct fb_info* info, int user) {
+
+ MOD_INC_USE_COUNT;
+ return 0;
+}
+
+static int pm2fb_release(struct fb_info* info, int user) {
+
+ MOD_DEC_USE_COUNT;
+ return 0;
+}
+
+/***************************************************************************
+ * Begin of public functions
+ ***************************************************************************/
+
+void pm2fb_cleanup(struct fb_info* info) {
+ struct pm2fb_info* i=(struct pm2fb_info* )info;
+
+ unregister_framebuffer(info);
+ pm2fb_reset(i);
+ /* FIXME UNMAP()??? */
+ if (board_table[i->board].cleanup)
+ board_table[i->board].cleanup(i);
+}
+
+__initfunc(void pm2fb_init(void)) {
+
+ memset(&fb_info, 0, sizeof(fb_info));
+ if (!pm2fb_conf(&fb_info))
+ return;
+ fb_info.disp.scrollmode=SCROLL_YNOMOVE;
+ fb_info.gen.parsize=sizeof(struct pm2fb_par);
+ fb_info.gen.fbhw=&pm2fb_hwswitch;
+ strcpy(fb_info.gen.info.modename, permedia2_name);
+ fb_info.gen.info.flags=FBINFO_FLAG_DEFAULT;
+ fb_info.gen.info.fbops=&pm2fb_ops;
+ fb_info.gen.info.disp=&fb_info.disp;
+ strcpy(fb_info.gen.info.fontname, pm2fb_options.font);
+ fb_info.gen.info.switch_con=&fbgen_switch;
+ fb_info.gen.info.updatevar=&fbgen_update_var;
+ fb_info.gen.info.blank=&fbgen_blank;
+ fbgen_get_var(&fb_info.disp.var, -1, &fb_info.gen.info);
+ if (fbgen_do_set_var(&fb_info.disp.var, 1, &fb_info.gen)<0)
+ return;
+ fbgen_set_disp(-1, &fb_info.gen);
+ fbgen_install_cmap(0, &fb_info.gen);
+ if (register_framebuffer(&fb_info.gen.info)<0) {
+ printk("pm2fb: unable to register.\n");
+ return;
+ }
+ printk("fb%d: %s (%s), using %ldK of video memory.\n",
+ GET_FB_IDX(fb_info.gen.info.node),
+ board_table[fb_info.board].name,
+ permedia2_name,
+ (unsigned long )(fb_info.regions.fb_size>>10));
+ MOD_INC_USE_COUNT;
+}
+
+__initfunc(void pm2fb_mode_setup(char* options)) {
+ int i;
+
+ for (i=0; user_mode[i].name[0] &&
+ strcmp(options, user_mode[i].name); i++);
+ if (user_mode[i].name[0])
+ memcpy(&pm2fb_options.user_mode, &user_mode[i].par,
+ sizeof(pm2fb_options.user_mode));
+}
+
+__initfunc(void pm2fb_font_setup(char* options)) {
+
+ strncpy(pm2fb_options.font, options, sizeof(pm2fb_options.font));
+ pm2fb_options.font[sizeof(pm2fb_options.font)-1]='\0';
+}
+
+__initfunc(void pm2fb_setup(char* options, int* ints)) {
+ char* next;
+
+ memset(&pm2fb_options, 0, sizeof(pm2fb_options));
+ memcpy(&pm2fb_options.user_mode, &user_mode[0].par,
+ sizeof(pm2fb_options.user_mode));
+ while (options) {
+ if ((next=strchr(options, ',')))
+ *(next++)='\0';
+ if (!strncmp(options, "font:", 5))
+ pm2fb_font_setup(options+5);
+ else if (!strncmp(options, "mode:", 5))
+ pm2fb_mode_setup(options+5);
+ else if (!strcmp(options, "ypan"))
+ pm2fb_options.flags |= OPTF_YPAN;
+ else if (!strcmp(options, "oldmem"))
+ pm2fb_options.flags |= OPTF_OLD_MEM;
+ options=next;
+ }
+}
+
+/***************************************************************************
+ * Begin of module functions
+ ***************************************************************************/
+
+#ifdef MODULE
+int init_module(void) {
+
+ pm2fb_init();
+}
+
+void cleanup_module(void) {
+
+ pm2fb_cleanup();
+}
+#endif /* MODULE */
+
+/***************************************************************************
+ * That's all folks!
+ ***************************************************************************/
diff --git a/drivers/video/pm2fb.h b/drivers/video/pm2fb.h
new file mode 100644
index 000000000..94f346427
--- /dev/null
+++ b/drivers/video/pm2fb.h
@@ -0,0 +1,181 @@
+/*
+ * Permedia2 framebuffer driver definitions.
+ * Copyright (c) 1998-1999 Ilario Nardinocchi (nardinoc@CS.UniBO.IT)
+ * --------------------------------------------------------------------------
+ * $Id: pm2fb.h,v 1.1.2.1 1999/01/12 19:53:02 geert Exp $
+ * --------------------------------------------------------------------------
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file README.legal in the main directory of this archive
+ * for more details.
+ */
+
+#ifndef PM2FB_H
+#define PM2FB_H
+
+#define PM2_REFERENCE_CLOCK 14318 /* in KHz */
+#define PM2_MAX_PIXCLOCK 230000 /* in KHz */
+#define PM2_REGS_SIZE 0x10000
+
+#define PM2TAG(r) (unsigned long )(((r)-0x8000)>>3)
+
+/*****************************************************************************
+ * Permedia2 registers used in the framebuffer
+ *****************************************************************************/
+
+#define PM2R_RESET_STATUS 0x0000
+#define PM2R_IN_FIFO_SPACE 0x0018
+#define PM2R_OUT_FIFO_WORDS 0x0020
+#define PM2R_APERTURE_ONE 0x0050
+#define PM2R_APERTURE_TWO 0x0058
+#define PM2R_FIFO_DISCON 0x0068
+#define PM2R_CHIP_CONFIG 0x0070
+
+#define PM2R_REBOOT 0x1000
+#define PM2R_MEM_CONTROL 0x1040
+#define PM2R_BOOT_ADDRESS 0x1080
+#define PM2R_MEM_CONFIG 0x10c0
+#define PM2R_BYPASS_WRITE_MASK 0x1100
+#define PM2R_FRAMEBUFFER_WRITE_MASK 0x1140
+
+#define PM2R_OUT_FIFO 0x2000
+
+#define PM2R_SCREEN_BASE 0x3000
+#define PM2R_SCREEN_STRIDE 0x3008
+#define PM2R_H_TOTAL 0x3010
+#define PM2R_HG_END 0x3018
+#define PM2R_HB_END 0x3020
+#define PM2R_HS_START 0x3028
+#define PM2R_HS_END 0x3030
+#define PM2R_V_TOTAL 0x3038
+#define PM2R_VB_END 0x3040
+#define PM2R_VS_START 0x3048
+#define PM2R_VS_END 0x3050
+#define PM2R_VIDEO_CONTROL 0x3058
+#define PM2R_LINE_COUNT 0x3070
+#define PM2R_FIFO_CONTROL 0x3078
+
+#define PM2R_RD_PALETTE_WRITE_ADDRESS 0x4000
+#define PM2R_RD_PALETTE_DATA 0x4008
+#define PM2R_RD_PALETTE_READ_ADDRESS 0x4018
+#define PM2R_RD_INDEXED_DATA 0x4050
+
+#define PM2R_START_X_DOM 0x8000
+#define PM2R_D_X_DOM 0x8008
+#define PM2R_START_X_SUB 0x8010
+#define PM2R_D_X_SUB 0x8018
+#define PM2R_START_Y 0x8020
+#define PM2R_D_Y 0x8028
+#define PM2R_COUNT 0x8030
+#define PM2R_RENDER 0x8038
+#define PM2R_RECTANGLE_ORIGIN 0x80d0
+#define PM2R_RECTANGLE_SIZE 0x80d8
+#define PM2R_PACKED_DATA_LIMITS 0x8150
+#define PM2R_SCISSOR_MODE 0x8180
+#define PM2R_SCREEN_SIZE 0x8198
+#define PM2R_AREA_STIPPLE_MODE 0x81a0
+#define PM2R_WINDOW_ORIGIN 0x81c8
+#define PM2R_TEXTURE_ADDRESS_MODE 0x8380
+#define PM2R_TEXTURE_MAP_FORMAT 0x8588
+#define PM2R_TEXTURE_DATA_FORMAT 0x8590
+#define PM2R_TEXTURE_READ_MODE 0x8670
+#define PM2R_TEXEL_LUT_MODE 0x8678
+#define PM2R_TEXTURE_COLOR_MODE 0x8680
+#define PM2R_FOG_MODE 0x8690
+#define PM2R_COLOR_DDA_MODE 0x87e0
+#define PM2R_ALPHA_BLEND_MODE 0x8810
+#define PM2R_DITHER_MODE 0x8818
+#define PM2R_FB_SOFT_WRITE_MASK 0x8820
+#define PM2R_LOGICAL_OP_MODE 0x8828
+#define PM2R_LB_READ_MODE 0x8880
+#define PM2R_LB_READ_FORMAT 0x8888
+#define PM2R_LB_SOURCE_OFFSET 0x8890
+#define PM2R_LB_WINDOW_BASE 0x88b8
+#define PM2R_LB_WRITE_FORMAT 0x88c8
+#define PM2R_STENCIL_MODE 0x8988
+#define PM2R_DEPTH_MODE 0x89a0
+#define PM2R_FB_READ_MODE 0x8a80
+#define PM2R_FB_SOURCE_OFFSET 0x8a88
+#define PM2R_FB_PIXEL_OFFSET 0x8a90
+#define PM2R_FB_WINDOW_BASE 0x8ab0
+#define PM2R_FB_WRITE_MODE 0x8ab8
+#define PM2R_FB_HARD_WRITE_MASK 0x8ac0
+#define PM2R_FB_BLOCK_COLOR 0x8ac8
+#define PM2R_FB_READ_PIXEL 0x8ad0
+#define PM2R_FILTER_MODE 0x8c00
+#define PM2R_SYNC 0x8c40
+#define PM2R_YUV_MODE 0x8f00
+#define PM2R_STATISTICS_MODE 0x8c08
+#define PM2R_FB_SOURCE_DELTA 0x8d88
+#define PM2R_CONFIG 0x8d90
+
+/* Permedia2 RAMDAC indexed registers */
+#define PM2I_RD_CURSOR_CONTROL 0x06
+#define PM2I_RD_COLOR_MODE 0x18
+#define PM2I_RD_MODE_CONTROL 0x19
+#define PM2I_RD_MISC_CONTROL 0x1e
+#define PM2I_RD_PIXEL_CLOCK_A1 0x20
+#define PM2I_RD_PIXEL_CLOCK_A2 0x21
+#define PM2I_RD_PIXEL_CLOCK_A3 0x22
+#define PM2I_RD_PIXEL_CLOCK_STATUS 0x29
+#define PM2I_RD_MEMORY_CLOCK_1 0x30
+#define PM2I_RD_MEMORY_CLOCK_2 0x31
+#define PM2I_RD_MEMORY_CLOCK_3 0x32
+#define PM2I_RD_MEMORY_CLOCK_STATUS 0x33
+#define PM2I_RD_COLOR_KEY_CONTROL 0x40
+#define PM2I_RD_OVERLAY_KEY 0x41
+#define PM2I_RD_RED_KEY 0x42
+#define PM2I_RD_GREEN_KEY 0x43
+#define PM2I_RD_BLUE_KEY 0x44
+
+/* Fields and flags */
+#define PM2F_RENDER_AREASTIPPLE (1<<0)
+#define PM2F_RENDER_FASTFILL (1<<3)
+#define PM2F_RENDER_PRIMITIVE_MASK (0x3<<6)
+#define PM2F_RENDER_LINE 0
+#define PM2F_RENDER_TRAPEZOID (1<<6)
+#define PM2F_RENDER_POINT (2<<6)
+#define PM2F_RENDER_RECTANGLE (3<<6)
+#define PM2F_SYNCHRONIZATION (1<<10)
+#define PM2F_PLL_LOCKED 0x10
+#define PM2F_BEING_RESET (1<<31)
+#define PM2F_DATATYPE_COLOR 0x8000
+#define PM2F_VGA_ENABLE 0x02
+#define PM2F_VGA_FIXED 0x04
+#define PM2F_FB_WRITE_ENABLE 0x01
+#define PM2F_FB_READ_SOURCE_ENABLE 0x0200
+#define PM2F_RD_PALETTE_WIDTH_8 0x02
+#define PM2F_PART_PROD_MASK 0x01ff
+#define PM2F_SCREEN_SCISSOR_ENABLE 0x02
+#define PM2F_DATA_64_ENABLE 0x00010000
+#define PM2F_BLANK_LOW 0x02
+#define PM2F_HSYNC_MASK 0x18
+#define PM2F_VSYNC_MASK 0x60
+#define PM2F_HSYNC_ACT_HIGH 0x08
+#define PM2F_HSYNC_FORCED_LOW 0x10
+#define PM2F_HSYNC_ACT_LOW 0x18
+#define PM2F_VSYNC_ACT_HIGH 0x20
+#define PM2F_VSYNC_FORCED_LOW 0x40
+#define PM2F_VSYNC_ACT_LOW 0x60
+#define PM2F_LINE_DOUBLE 0x04
+#define PM2F_VIDEO_ENABLE 0x01
+#define PM2F_RD_GUI_ACTIVE 0x10
+#define PM2F_RD_COLOR_MODE_RGB 0x20
+#define PM2F_RD_TRUECOLOR 0x80
+#define PM2F_NO_ALPHA_BUFFER 0x10
+#define PM2F_TEXTEL_SIZE_16 0x00080000
+#define PM2F_TEXTEL_SIZE_32 0x00100000
+#define PM2F_TEXTEL_SIZE_4 0x00180000
+#define PM2F_TEXTEL_SIZE_24 0x00200000
+#define PM2F_INCREASE_X (1<<21)
+#define PM2F_INCREASE_Y (1<<22)
+#define PM2F_CONFIG_FB_WRITE_ENABLE (1<<3)
+#define PM2F_CONFIG_FB_PACKED_DATA (1<<2)
+#define PM2F_CONFIG_FB_READ_DEST_ENABLE (1<<1)
+#define PM2F_CONFIG_FB_READ_SOURCE_ENABLE (1<<0)
+#define PM2F_COLOR_KEY_TEST_OFF (1<<4)
+
+#endif /* PM2FB_H */
+
+/*****************************************************************************
+ * That's all folks!
+ *****************************************************************************/
diff --git a/drivers/video/retz3fb.c b/drivers/video/retz3fb.c
index 8bfffe147..995e86506 100644
--- a/drivers/video/retz3fb.c
+++ b/drivers/video/retz3fb.c
@@ -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;
@@ -727,7 +757,7 @@ static int retz3_set_video(struct fb_info *info,
reg_w(regs, VDAC_MASK, 0xff);
/*
- * Extended palette adressing ???
+ * Extended palette addressing ???
*/
switch (bpp){
case 8:
@@ -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);
}
@@ -1421,8 +1455,7 @@ __initfunc(void retz3fb_init(void))
board_addr = (unsigned long)cd->cd_BoardAddr;
board_size = (unsigned long)cd->cd_BoardSize;
- zinfo->base = kernel_map (board_addr, board_size,
- KERNELMAP_NOCACHE_SER, NULL);
+ zinfo->base = ioremap(board_addr, board_size);
zinfo->regs = (unsigned char *)(zinfo->base);
zinfo->fbmem = zinfo->base + VIDEO_MEM_OFFSET;
/* Get memory size - for now we asume its a 4MB board */
diff --git a/drivers/video/sbusfb.c b/drivers/video/sbusfb.c
index f4fbe2ec5..88ecf5743 100644
--- a/drivers/video/sbusfb.c
+++ b/drivers/video/sbusfb.c
@@ -46,6 +46,9 @@
#define DEFAULT_CURSOR_BLINK_RATE (2*HZ/5)
+#define CURSOR_SHAPE 1
+#define CURSOR_BLINK 2
+
/*
* Interface used by the world
*/
@@ -457,7 +460,7 @@ sbusfb_cursor_timer_handler(unsigned long dev_addr)
if (!fb->setcursor) return;
- if (fb->cursor.mode != 2) {
+ if (fb->cursor.mode & CURSOR_BLINK) {
fb->cursor.enable ^= 1;
fb->setcursor(fb);
}
@@ -472,14 +475,14 @@ static void sbusfb_cursor(struct display *p, int mode, int x, int y)
switch (mode) {
case CM_ERASE:
- fb->cursor.mode = 2;
+ fb->cursor.mode &= ~CURSOR_BLINK;
fb->cursor.enable = 0;
(*fb->setcursor)(fb);
break;
case CM_MOVE:
case CM_DRAW:
- if (fb->cursor.mode) {
+ if (fb->cursor.mode & CURSOR_SHAPE) {
fb->cursor.size.fbx = fontwidth(p);
fb->cursor.size.fby = fontheight(p);
fb->cursor.chot.fbx = 0;
@@ -492,8 +495,8 @@ static void sbusfb_cursor(struct display *p, int mode, int x, int y)
fb->cursor.bits[1][fontheight(p) - 1] = (0xffffffff << (32 - fontwidth(p)));
(*fb->setcursormap) (fb, hw_cursor_cmap, hw_cursor_cmap, hw_cursor_cmap);
(*fb->setcurshape) (fb);
- fb->cursor.mode = 0;
}
+ fb->cursor.mode = CURSOR_BLINK;
if (fontwidthlog(p))
fb->cursor.cpos.fbx = (x << fontwidthlog(p)) + fb->x_margin;
else
@@ -684,7 +687,7 @@ static int sbusfb_ioctl(struct inode *inode, struct file *file, u_int cmd,
lastconsole = info->display_fg->vc_num;
if (vt_cons[lastconsole]->vc_mode == KD_TEXT)
return -EINVAL; /* Don't let graphics programs hide our nice text cursor */
- fb->cursor.mode = 2; /* Forget state of our text cursor */
+ fb->cursor.mode = CURSOR_SHAPE; /* Forget state of our text cursor */
}
return sbus_hw_scursor ((struct fbcursor *) arg, fb);
@@ -761,7 +764,7 @@ static int sbusfbcon_switch(int con, struct fb_info *info)
if (lastconsole != con &&
(fontwidth(&fb_display[lastconsole]) != fontwidth(&fb_display[con]) ||
fontheight(&fb_display[lastconsole]) != fontheight(&fb_display[con])))
- fb->cursor.mode = 1;
+ fb->cursor.mode |= CURSOR_SHAPE;
}
x_margin = (fb_display[con].var.xres_virtual - fb_display[con].var.xres) / 2;
y_margin = (fb_display[con].var.yres_virtual - fb_display[con].var.yres) / 2;
@@ -889,7 +892,7 @@ static int sbusfb_set_font(struct display *p, int width, int height)
p->var.xres = w - 2*x_margin;
p->var.yres = h - 2*y_margin;
- fb->cursor.mode = 1;
+ fb->cursor.mode |= CURSOR_SHAPE;
if (fb->margins)
fb->margins(fb, p, x_margin, y_margin);
@@ -1076,6 +1079,7 @@ sizechange:
add_timer(&fb->cursor.timer);
}
}
+ fb->cursor.mode = CURSOR_SHAPE;
fb->dispsw.set_font = sbusfb_set_font;
fb->setup = fb->dispsw.setup;
fb->dispsw.setup = sbusfb_disp_setup;
@@ -1134,9 +1138,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
diff --git a/drivers/video/tgafb.c b/drivers/video/tgafb.c
index 201984959..fe3bc4068 100644
--- a/drivers/video/tgafb.c
+++ b/drivers/video/tgafb.c
@@ -19,6 +19,10 @@
*
* - 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);
}
/*
diff --git a/drivers/video/virgefb.c b/drivers/video/virgefb.c
index 59d16e90b..ba4bf5ea0 100644
--- a/drivers/video/virgefb.c
+++ b/drivers/video/virgefb.c
@@ -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>
@@ -49,7 +50,15 @@
#if 1
#define vgawb_3d(reg,dat) \
- (*((unsigned char *)(CyberVGARegs + (reg ^ 3))) = dat)
+ if (cv3d_on_zorro2) { \
+ *((unsigned char volatile *)((Cyber_vcode_switch_base) + 0x04)) = \
+ (0x01 & 0xffff); asm volatile ("nop"); \
+ } \
+ (*((unsigned char *)(CyberVGARegs + (reg ^ 3))) = dat); \
+ if (cv3d_on_zorro2) { \
+ *((unsigned char volatile *)((Cyber_vcode_switch_base) + 0x04)) = \
+ (0x02 & 0xffff); asm volatile ("nop"); \
+ }
#define vgaww_3d(reg,dat) \
(*((unsigned word *)(CyberVGARegs + (reg ^ 2))) = swab16(dat))
#define vgawl_3d(reg,dat) \
@@ -154,6 +163,9 @@ static volatile char *CyberRegs;
static volatile unsigned long CyberVGARegs; /* ++Andre: for CV64/3D, see macros at the beginning */
static unsigned long CyberMem_phys;
static unsigned long CyberRegs_phys;
+static unsigned long Cyber_register_base;
+static unsigned long Cyber_vcode_switch_base;
+static unsigned char cv3d_on_zorro2;
/*
@@ -344,7 +356,11 @@ static int Cyber_init(void)
memset ((char*)CyberMem, 0, 1600 * 1200);
/* Disable hardware cursor */
- CyberSize = 0x00400000; /* 4 MB */
+ if (cv3d_on_zorro2) {
+ CyberSize = 0x00380000; /* 3.5 MB , we need some space for the registers? */
+ } else {
+ CyberSize = 0x00400000; /* 4 MB */
+ }
vgawb_3d(0x3c8, 255);
vgawb_3d(0x3c9, 56);
@@ -1044,21 +1060,26 @@ __initfunc(void virgefb_init(void))
CyberMem_phys = board_addr;
CyberMem = ZTWO_VADDR(CyberMem_phys);
- printk("CV3D detected running in Z2 mode ... not yet supported!\n");
- return;
+ CyberVGARegs = (unsigned long) \
+ ZTWO_VADDR(board_addr + 0x003c0000);
+ CyberRegs_phys = (unsigned long)(board_addr + 0x003e0000);
+ CyberRegs = (unsigned char *)ZTWO_VADDR(CyberRegs_phys);
+ Cyber_register_base = (unsigned long) \
+ ZTWO_VADDR(board_addr + 0x003c8000);
+ Cyber_vcode_switch_base = (unsigned long) \
+ ZTWO_VADDR(board_addr + 0x003a0000);
+ cv3d_on_zorro2 = 1;
+ printk("CV3D detected running in Z2 mode.\n");
}
else
{
- CyberVGARegs = kernel_map(board_addr +0x0c000000, 0x00010000,
- KERNELMAP_NOCACHE_SER, NULL);
+ CyberVGARegs = ioremap(board_addr +0x0c000000, 0x00010000);
CyberRegs_phys = board_addr + 0x05000000;
CyberMem_phys = board_addr + 0x04800000;
- CyberRegs = (char *)kernel_map(CyberRegs_phys,
- 0x00010000,
- KERNELMAP_NOCACHE_SER, NULL);
- CyberMem = kernel_map(CyberMem_phys, 0x00400000,
- KERNELMAP_NOCACHE_SER, NULL);
+ CyberRegs = ioremap(CyberRegs_phys, 0x00010000);
+ CyberMem = ioremap(CyberMem_phys, 0x00400000);
+ cv3d_on_zorro2 = 0;
printk("CV3D detected running in Z3 mode\n");
}
@@ -1083,8 +1104,10 @@ __initfunc(void virgefb_init(void))
virgefb_set_disp(-1, &fb_info);
do_install_cmap(0, &fb_info);
- if (register_framebuffer(&fb_info) < 0)
+ if (register_framebuffer(&fb_info) < 0) {
+ printk("virgefb.c: register_framebuffer failed\n");
return;
+ }
printk("fb%d: %s frame buffer device, using %ldK of video memory\n",
GET_FB_IDX(fb_info.node), fb_info.modename, CyberSize>>10);