diff options
Diffstat (limited to 'drivers/video')
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), ®[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), ®[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, ®50); - 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); |