qemu patches vs 2.6.17rc4
2 patches attached...
q-vga.c.patch gets virtual consoles working with qemu
arch-mips-Kconfig.patch enables setting little endian for qemu
The q-vga.c changes are just a literal port of some public domain vga code... specificly http://my.execpc.com/~geezer/osd/graphics/modes.c.
Tested for mipsel. Running vga16fb and a framebuffer console works if you tweak the relevant depends line in drivers/video/Kconfig.
Note: Setting CONFIG_DEBUG_SPINLOCK=y in the kernel config seems to work around the boot hang I'm seeing.
Manuel
arch/mips/qemu/q-vga.c renamed from arch/mips/qemu/q-vga.c-orig +342 -102
@@ -17,34 +17,13 @@* run on the uninitialized hardware. */ #undef LOAD_VGA_FONT - -static unsigned char sr[8 ]__initdata = {/* Sequencer */ -0x03 ,0x00 ,0x03 ,0x04 ,0x02 ,0x00 ,0x00 ,0x00 -}; - -static unsigned char gr[16 ]__initdata = {/* Graphics Controller */ -0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x10 ,0x0e ,0x00 , -0xff ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 -}; - -static unsigned char ar[21 ]__initdata = {/* Attribute Controller */ -0x00 ,0x01 ,0x02 ,0x03 ,0x04 ,0x05 ,0x06 ,0x07 , -0x08 ,0x09 ,0x0a ,0x0b ,0x0c ,0x0d ,0x0e ,0x0f , -0x0c ,0x01 ,0x07 ,0x13 ,0x00 -}; - -static unsigned char cr[32 ]__initdata = {/* CRT Controller */ -0x91 ,0x4f ,0x4f ,0x95 ,0x57 ,0x4f ,0xc0 ,0x1f , -0x00 ,0x4f ,0x0d ,0x0e ,0x02 ,0x30 ,0x09 ,0xb0 , -0x90 ,0x83 ,0x8f ,0x28 ,0x1f ,0x8f ,0xc1 ,0xa3 , -0xff ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 -}; +#define LOAD_VGA_FONT 1static struct rgb {unsigned char r;unsigned char g;unsigned char b; -} palette[16 ]__initdata = { +} palette[16 ]__initdata = { [0 ] = {0x00 ,0x00 ,0x00 }, [1 ] = {0x00 ,0x00 ,0x2a }, [2 ] = {0x00 ,0x2a ,0x00 },
@@ -64,51 +43,271 @@ }; -void __init qvga_init_ibm (void ) -{ -int i; - -for (i =0 ; i <8 ; i++) {/* Sequencer registers */ -outb (i,0x3c4 ); -outb (sr[i],0x3c5 ); - } - -for (i =0 ; i <16 ; i++) {/* Graphics Controller registers */ -outb (i,0x3ce ); -outb (gr[i],0x3cf ); - } - -for (i =0 ; i <21 ; i++) {/* Attribute Controller registers */ -outb (i,0x3c0 ); -outb (ar[i],0x3c1 ); - } -outb (0x20 ,0x3c0 );/* enable bit in *index* register */ - -for (i =0 ; i <32 ; i++) {/* CRT Controller registers */ -outb (i,0x3d4 ); -outb (cr[i],0x3d5 ); - } - -for (i =0 ; i <16 ; i++) {/* palette */ -outb (i,0x3c8 ); -outb (palette[i].r,0x3c9 ); -outb (palette[i].g,0x3c9 ); -outb (palette[i].b,0x3c9 ); - } - -#if 1 -for (i =0 ; i <0x20000 ; i +=2 ) - *(volatile unsigned short *) (0xb00a0000 + i) =0xaaaa ; -#endif -} -#ifdef LOAD_VGA_FONT -#include "/home/ralf/src/qemu/qemu-mips/vgafont.h" + +static unsigned char g_8x16_font[4096 ]__initdata = { +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x7E ,0x81 ,0xA5 ,0x81 ,0x81 ,0xBD ,0x99 ,0x81 ,0x81 ,0x7E ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x7E ,0xFF ,0xDB ,0xFF ,0xFF ,0xC3 ,0xE7 ,0xFF ,0xFF ,0x7E ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x6C ,0xFE ,0xFE ,0xFE ,0xFE ,0x7C ,0x38 ,0x10 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x10 ,0x38 ,0x7C ,0xFE ,0x7C ,0x38 ,0x10 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x18 ,0x3C ,0x3C ,0xE7 ,0xE7 ,0xE7 ,0x99 ,0x18 ,0x3C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x18 ,0x3C ,0x7E ,0xFF ,0xFF ,0x7E ,0x18 ,0x18 ,0x3C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x18 ,0x3C ,0x3C ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xE7 ,0xC3 ,0xC3 ,0xE7 ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x3C ,0x66 ,0x42 ,0x42 ,0x66 ,0x3C ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xC3 ,0x99 ,0xBD ,0xBD ,0x99 ,0xC3 ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF , +0x00 ,0x00 ,0x1E ,0x0E ,0x1A ,0x32 ,0x78 ,0xCC ,0xCC ,0xCC ,0xCC ,0x78 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x3C ,0x66 ,0x66 ,0x66 ,0x66 ,0x3C ,0x18 ,0x7E ,0x18 ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x3F ,0x33 ,0x3F ,0x30 ,0x30 ,0x30 ,0x30 ,0x70 ,0xF0 ,0xE0 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x7F ,0x63 ,0x7F ,0x63 ,0x63 ,0x63 ,0x63 ,0x67 ,0xE7 ,0xE6 ,0xC0 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x18 ,0x18 ,0xDB ,0x3C ,0xE7 ,0x3C ,0xDB ,0x18 ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x80 ,0xC0 ,0xE0 ,0xF0 ,0xF8 ,0xFE ,0xF8 ,0xF0 ,0xE0 ,0xC0 ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x02 ,0x06 ,0x0E ,0x1E ,0x3E ,0xFE ,0x3E ,0x1E ,0x0E ,0x06 ,0x02 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x18 ,0x3C ,0x7E ,0x18 ,0x18 ,0x18 ,0x18 ,0x7E ,0x3C ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x66 ,0x66 ,0x66 ,0x66 ,0x66 ,0x66 ,0x66 ,0x00 ,0x66 ,0x66 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x7F ,0xDB ,0xDB ,0xDB ,0x7B ,0x1B ,0x1B ,0x1B ,0x1B ,0x1B ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x7C ,0xC6 ,0x60 ,0x38 ,0x6C ,0xC6 ,0xC6 ,0x6C ,0x38 ,0x0C ,0xC6 ,0x7C ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFE ,0xFE ,0xFE ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x18 ,0x3C ,0x7E ,0x18 ,0x18 ,0x18 ,0x18 ,0x7E ,0x3C ,0x18 ,0x7E ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x18 ,0x3C ,0x7E ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x7E ,0x3C ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x18 ,0x0C ,0xFE ,0x0C ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x30 ,0x60 ,0xFE ,0x60 ,0x30 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x28 ,0x6C ,0xFE ,0x6C ,0x28 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x10 ,0x38 ,0x38 ,0x7C ,0x7C ,0xFE ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0xFE ,0xFE ,0x7C ,0x7C ,0x38 ,0x38 ,0x10 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x18 ,0x3C ,0x3C ,0x3C ,0x18 ,0x18 ,0x18 ,0x00 ,0x18 ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x66 ,0x66 ,0x66 ,0x24 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x6C ,0x6C ,0xFE ,0x6C ,0x6C ,0x6C ,0xFE ,0x6C ,0x6C ,0x00 ,0x00 ,0x00 ,0x00 , +0x18 ,0x18 ,0x7C ,0xC6 ,0xC2 ,0xC0 ,0x7C ,0x06 ,0x86 ,0xC6 ,0x7C ,0x18 ,0x18 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0xC2 ,0xC6 ,0x0C ,0x18 ,0x30 ,0x60 ,0xC6 ,0x86 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x38 ,0x6C ,0x6C ,0x38 ,0x76 ,0xDC ,0xCC ,0xCC ,0xCC ,0x76 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x30 ,0x30 ,0x30 ,0x60 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x0C ,0x18 ,0x30 ,0x30 ,0x30 ,0x30 ,0x30 ,0x30 ,0x18 ,0x0C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x30 ,0x18 ,0x0C ,0x0C ,0x0C ,0x0C ,0x0C ,0x0C ,0x18 ,0x30 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x66 ,0x3C ,0xFF ,0x3C ,0x66 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x18 ,0x18 ,0x7E ,0x18 ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x18 ,0x18 ,0x18 ,0x30 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x18 ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x02 ,0x06 ,0x0C ,0x18 ,0x30 ,0x60 ,0xC0 ,0x80 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x7C ,0xC6 ,0xC6 ,0xCE ,0xD6 ,0xD6 ,0xE6 ,0xC6 ,0xC6 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x18 ,0x38 ,0x78 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x7E ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x7C ,0xC6 ,0x06 ,0x0C ,0x18 ,0x30 ,0x60 ,0xC0 ,0xC6 ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x7C ,0xC6 ,0x06 ,0x06 ,0x3C ,0x06 ,0x06 ,0x06 ,0xC6 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x0C ,0x1C ,0x3C ,0x6C ,0xCC ,0xFE ,0x0C ,0x0C ,0x0C ,0x1E ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0xFE ,0xC0 ,0xC0 ,0xC0 ,0xFC ,0x0E ,0x06 ,0x06 ,0xC6 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x38 ,0x60 ,0xC0 ,0xC0 ,0xFC ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0xFE ,0xC6 ,0x06 ,0x06 ,0x0C ,0x18 ,0x30 ,0x30 ,0x30 ,0x30 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x7C ,0xC6 ,0xC6 ,0xC6 ,0x7C ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x7C ,0xC6 ,0xC6 ,0xC6 ,0x7E ,0x06 ,0x06 ,0x06 ,0x0C ,0x78 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x18 ,0x18 ,0x00 ,0x00 ,0x00 ,0x18 ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x18 ,0x18 ,0x00 ,0x00 ,0x00 ,0x18 ,0x18 ,0x30 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x06 ,0x0C ,0x18 ,0x30 ,0x60 ,0x30 ,0x18 ,0x0C ,0x06 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFE ,0x00 ,0x00 ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x60 ,0x30 ,0x18 ,0x0C ,0x06 ,0x0C ,0x18 ,0x30 ,0x60 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x7C ,0xC6 ,0xC6 ,0x0C ,0x18 ,0x18 ,0x18 ,0x00 ,0x18 ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x7C ,0xC6 ,0xC6 ,0xDE ,0xDE ,0xDE ,0xDC ,0xC0 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x10 ,0x38 ,0x6C ,0xC6 ,0xC6 ,0xFE ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0xFC ,0x66 ,0x66 ,0x66 ,0x7C ,0x66 ,0x66 ,0x66 ,0x66 ,0xFC ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x3C ,0x66 ,0xC2 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC2 ,0x66 ,0x3C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0xF8 ,0x6C ,0x66 ,0x66 ,0x66 ,0x66 ,0x66 ,0x66 ,0x6C ,0xF8 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0xFE ,0x66 ,0x62 ,0x68 ,0x78 ,0x68 ,0x60 ,0x62 ,0x66 ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0xFE ,0x66 ,0x62 ,0x68 ,0x78 ,0x68 ,0x60 ,0x60 ,0x60 ,0xF0 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x3C ,0x66 ,0xC2 ,0xC0 ,0xC0 ,0xDE ,0xC6 ,0xC6 ,0x66 ,0x3A ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xFE ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x3C ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x3C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x1E ,0x0C ,0x0C ,0x0C ,0x0C ,0x0C ,0xCC ,0xCC ,0xCC ,0x78 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0xE6 ,0x66 ,0x6C ,0x6C ,0x78 ,0x78 ,0x6C ,0x66 ,0x66 ,0xE6 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0xF0 ,0x60 ,0x60 ,0x60 ,0x60 ,0x60 ,0x60 ,0x62 ,0x66 ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0xC6 ,0xEE ,0xFE ,0xFE ,0xD6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0xC6 ,0xE6 ,0xF6 ,0xFE ,0xDE ,0xCE ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x38 ,0x6C ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0x6C ,0x38 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0xFC ,0x66 ,0x66 ,0x66 ,0x7C ,0x60 ,0x60 ,0x60 ,0x60 ,0xF0 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x7C ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xD6 ,0xDE ,0x7C ,0x0C ,0x0E ,0x00 ,0x00 , +0x00 ,0x00 ,0xFC ,0x66 ,0x66 ,0x66 ,0x7C ,0x6C ,0x66 ,0x66 ,0x66 ,0xE6 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x7C ,0xC6 ,0xC6 ,0x60 ,0x38 ,0x0C ,0x06 ,0xC6 ,0xC6 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x7E ,0x7E ,0x5A ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x3C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0x6C ,0x38 ,0x10 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xD6 ,0xD6 ,0xFE ,0x6C ,0x6C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0xC6 ,0xC6 ,0x6C ,0x6C ,0x38 ,0x38 ,0x6C ,0x6C ,0xC6 ,0xC6 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x66 ,0x66 ,0x66 ,0x66 ,0x3C ,0x18 ,0x18 ,0x18 ,0x18 ,0x3C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0xFE ,0xC6 ,0x86 ,0x0C ,0x18 ,0x30 ,0x60 ,0xC2 ,0xC6 ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x3C ,0x30 ,0x30 ,0x30 ,0x30 ,0x30 ,0x30 ,0x30 ,0x30 ,0x3C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x80 ,0xC0 ,0xE0 ,0x70 ,0x38 ,0x1C ,0x0E ,0x06 ,0x02 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x3C ,0x0C ,0x0C ,0x0C ,0x0C ,0x0C ,0x0C ,0x0C ,0x0C ,0x3C ,0x00 ,0x00 ,0x00 ,0x00 , +0x10 ,0x38 ,0x6C ,0xC6 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFF ,0x00 ,0x00 , +0x30 ,0x30 ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x78 ,0x0C ,0x7C ,0xCC ,0xCC ,0xCC ,0x76 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0xE0 ,0x60 ,0x60 ,0x78 ,0x6C ,0x66 ,0x66 ,0x66 ,0x66 ,0xDC ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7C ,0xC6 ,0xC0 ,0xC0 ,0xC0 ,0xC6 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x1C ,0x0C ,0x0C ,0x3C ,0x6C ,0xCC ,0xCC ,0xCC ,0xCC ,0x76 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7C ,0xC6 ,0xFE ,0xC0 ,0xC0 ,0xC6 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x38 ,0x6C ,0x64 ,0x60 ,0xF0 ,0x60 ,0x60 ,0x60 ,0x60 ,0xF0 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x76 ,0xCC ,0xCC ,0xCC ,0xCC ,0xCC ,0x7C ,0x0C ,0xCC ,0x78 ,0x00 , +0x00 ,0x00 ,0xE0 ,0x60 ,0x60 ,0x6C ,0x76 ,0x66 ,0x66 ,0x66 ,0x66 ,0xE6 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x18 ,0x18 ,0x00 ,0x38 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x3C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x06 ,0x06 ,0x00 ,0x0E ,0x06 ,0x06 ,0x06 ,0x06 ,0x06 ,0x06 ,0x66 ,0x66 ,0x3C ,0x00 , +0x00 ,0x00 ,0xE0 ,0x60 ,0x60 ,0x66 ,0x6C ,0x78 ,0x78 ,0x6C ,0x66 ,0xE6 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x38 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x3C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xEC ,0xFE ,0xD6 ,0xD6 ,0xD6 ,0xD6 ,0xD6 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xDC ,0x66 ,0x66 ,0x66 ,0x66 ,0x66 ,0x66 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7C ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xDC ,0x66 ,0x66 ,0x66 ,0x66 ,0x66 ,0x7C ,0x60 ,0x60 ,0xF0 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x76 ,0xCC ,0xCC ,0xCC ,0xCC ,0xCC ,0x7C ,0x0C ,0x0C ,0x1E ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xDC ,0x76 ,0x62 ,0x60 ,0x60 ,0x60 ,0xF0 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7C ,0xC6 ,0x60 ,0x38 ,0x0C ,0xC6 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x10 ,0x30 ,0x30 ,0xFC ,0x30 ,0x30 ,0x30 ,0x30 ,0x36 ,0x1C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xCC ,0xCC ,0xCC ,0xCC ,0xCC ,0xCC ,0x76 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x66 ,0x66 ,0x66 ,0x66 ,0x66 ,0x3C ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xC6 ,0xC6 ,0xC6 ,0xD6 ,0xD6 ,0xFE ,0x6C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xC6 ,0x6C ,0x38 ,0x38 ,0x38 ,0x6C ,0xC6 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0x7E ,0x06 ,0x0C ,0xF8 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFE ,0xCC ,0x18 ,0x30 ,0x60 ,0xC6 ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x0E ,0x18 ,0x18 ,0x18 ,0x70 ,0x18 ,0x18 ,0x18 ,0x18 ,0x0E ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x18 ,0x18 ,0x18 ,0x18 ,0x00 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x70 ,0x18 ,0x18 ,0x18 ,0x0E ,0x18 ,0x18 ,0x18 ,0x18 ,0x70 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x76 ,0xDC ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x10 ,0x38 ,0x6C ,0xC6 ,0xC6 ,0xC6 ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x3C ,0x66 ,0xC2 ,0xC0 ,0xC0 ,0xC0 ,0xC2 ,0x66 ,0x3C ,0x0C ,0x06 ,0x7C ,0x00 ,0x00 , +0x00 ,0x00 ,0xCC ,0xCC ,0x00 ,0xCC ,0xCC ,0xCC ,0xCC ,0xCC ,0xCC ,0x76 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x0C ,0x18 ,0x30 ,0x00 ,0x7C ,0xC6 ,0xFE ,0xC0 ,0xC0 ,0xC6 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x10 ,0x38 ,0x6C ,0x00 ,0x78 ,0x0C ,0x7C ,0xCC ,0xCC ,0xCC ,0x76 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0xCC ,0xCC ,0x00 ,0x78 ,0x0C ,0x7C ,0xCC ,0xCC ,0xCC ,0x76 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x60 ,0x30 ,0x18 ,0x00 ,0x78 ,0x0C ,0x7C ,0xCC ,0xCC ,0xCC ,0x76 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x38 ,0x6C ,0x38 ,0x00 ,0x78 ,0x0C ,0x7C ,0xCC ,0xCC ,0xCC ,0x76 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x3C ,0x66 ,0x60 ,0x60 ,0x66 ,0x3C ,0x0C ,0x06 ,0x3C ,0x00 ,0x00 ,0x00 , +0x00 ,0x10 ,0x38 ,0x6C ,0x00 ,0x7C ,0xC6 ,0xFE ,0xC0 ,0xC0 ,0xC6 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0xC6 ,0xC6 ,0x00 ,0x7C ,0xC6 ,0xFE ,0xC0 ,0xC0 ,0xC6 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x60 ,0x30 ,0x18 ,0x00 ,0x7C ,0xC6 ,0xFE ,0xC0 ,0xC0 ,0xC6 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x66 ,0x66 ,0x00 ,0x38 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x3C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x18 ,0x3C ,0x66 ,0x00 ,0x38 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x3C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x60 ,0x30 ,0x18 ,0x00 ,0x38 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x3C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0xC6 ,0xC6 ,0x10 ,0x38 ,0x6C ,0xC6 ,0xC6 ,0xFE ,0xC6 ,0xC6 ,0xC6 ,0x00 ,0x00 ,0x00 ,0x00 , +0x38 ,0x6C ,0x38 ,0x00 ,0x38 ,0x6C ,0xC6 ,0xC6 ,0xFE ,0xC6 ,0xC6 ,0xC6 ,0x00 ,0x00 ,0x00 ,0x00 , +0x18 ,0x30 ,0x60 ,0x00 ,0xFE ,0x66 ,0x60 ,0x7C ,0x60 ,0x60 ,0x66 ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xCC ,0x76 ,0x36 ,0x7E ,0xD8 ,0xD8 ,0x6E ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x3E ,0x6C ,0xCC ,0xCC ,0xFE ,0xCC ,0xCC ,0xCC ,0xCC ,0xCE ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x10 ,0x38 ,0x6C ,0x00 ,0x7C ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0xC6 ,0xC6 ,0x00 ,0x7C ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x60 ,0x30 ,0x18 ,0x00 ,0x7C ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x30 ,0x78 ,0xCC ,0x00 ,0xCC ,0xCC ,0xCC ,0xCC ,0xCC ,0xCC ,0x76 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x60 ,0x30 ,0x18 ,0x00 ,0xCC ,0xCC ,0xCC ,0xCC ,0xCC ,0xCC ,0x76 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0xC6 ,0xC6 ,0x00 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0x7E ,0x06 ,0x0C ,0x78 ,0x00 , +0x00 ,0xC6 ,0xC6 ,0x00 ,0x38 ,0x6C ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0x6C ,0x38 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0xC6 ,0xC6 ,0x00 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x18 ,0x18 ,0x3C ,0x66 ,0x60 ,0x60 ,0x60 ,0x66 ,0x3C ,0x18 ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x38 ,0x6C ,0x64 ,0x60 ,0xF0 ,0x60 ,0x60 ,0x60 ,0x60 ,0xE6 ,0xFC ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x66 ,0x66 ,0x3C ,0x18 ,0x7E ,0x18 ,0x7E ,0x18 ,0x18 ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0xF8 ,0xCC ,0xCC ,0xF8 ,0xC4 ,0xCC ,0xDE ,0xCC ,0xCC ,0xCC ,0xC6 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x0E ,0x1B ,0x18 ,0x18 ,0x18 ,0x7E ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0xD8 ,0x70 ,0x00 ,0x00 , +0x00 ,0x18 ,0x30 ,0x60 ,0x00 ,0x78 ,0x0C ,0x7C ,0xCC ,0xCC ,0xCC ,0x76 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x0C ,0x18 ,0x30 ,0x00 ,0x38 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x3C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x18 ,0x30 ,0x60 ,0x00 ,0x7C ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x18 ,0x30 ,0x60 ,0x00 ,0xCC ,0xCC ,0xCC ,0xCC ,0xCC ,0xCC ,0x76 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x76 ,0xDC ,0x00 ,0xDC ,0x66 ,0x66 ,0x66 ,0x66 ,0x66 ,0x66 ,0x00 ,0x00 ,0x00 ,0x00 , +0x76 ,0xDC ,0x00 ,0xC6 ,0xE6 ,0xF6 ,0xFE ,0xDE ,0xCE ,0xC6 ,0xC6 ,0xC6 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x3C ,0x6C ,0x6C ,0x3E ,0x00 ,0x7E ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x38 ,0x6C ,0x6C ,0x38 ,0x00 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x30 ,0x30 ,0x00 ,0x30 ,0x30 ,0x60 ,0xC0 ,0xC6 ,0xC6 ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFE ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFE ,0x06 ,0x06 ,0x06 ,0x06 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0xC0 ,0xC0 ,0xC2 ,0xC6 ,0xCC ,0x18 ,0x30 ,0x60 ,0xCE ,0x93 ,0x06 ,0x0C ,0x1F ,0x00 ,0x00 , +0x00 ,0xC0 ,0xC0 ,0xC2 ,0xC6 ,0xCC ,0x18 ,0x30 ,0x66 ,0xCE ,0x9A ,0x3F ,0x06 ,0x0F ,0x00 ,0x00 , +0x00 ,0x00 ,0x18 ,0x18 ,0x00 ,0x18 ,0x18 ,0x18 ,0x3C ,0x3C ,0x3C ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x33 ,0x66 ,0xCC ,0x66 ,0x33 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xCC ,0x66 ,0x33 ,0x66 ,0xCC ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x11 ,0x44 ,0x11 ,0x44 ,0x11 ,0x44 ,0x11 ,0x44 ,0x11 ,0x44 ,0x11 ,0x44 ,0x11 ,0x44 ,0x11 ,0x44 , +0x55 ,0xAA ,0x55 ,0xAA ,0x55 ,0xAA ,0x55 ,0xAA ,0x55 ,0xAA ,0x55 ,0xAA ,0x55 ,0xAA ,0x55 ,0xAA , +0xDD ,0x77 ,0xDD ,0x77 ,0xDD ,0x77 ,0xDD ,0x77 ,0xDD ,0x77 ,0xDD ,0x77 ,0xDD ,0x77 ,0xDD ,0x77 , +0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 , +0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0xF8 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 , +0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0xF8 ,0x18 ,0xF8 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 , +0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0xF6 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFE ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xF8 ,0x18 ,0xF8 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 , +0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0xF6 ,0x06 ,0xF6 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 , +0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFE ,0x06 ,0xF6 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 , +0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0xF6 ,0x06 ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0xF8 ,0x18 ,0xF8 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xF8 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 , +0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x1F ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0xFF ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFF ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 , +0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x1F ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFF ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0xFF ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 , +0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x1F ,0x18 ,0x1F ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 , +0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x37 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 , +0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x37 ,0x30 ,0x3F ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x3F ,0x30 ,0x37 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 , +0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0xF7 ,0x00 ,0xFF ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFF ,0x00 ,0xF7 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 , +0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x37 ,0x30 ,0x37 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFF ,0x00 ,0xFF ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0xF7 ,0x00 ,0xF7 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 , +0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0xFF ,0x00 ,0xFF ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0xFF ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFF ,0x00 ,0xFF ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFF ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 , +0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x3F ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x1F ,0x18 ,0x1F ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x1F ,0x18 ,0x1F ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x3F ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 , +0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0xFF ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 ,0x36 , +0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0xFF ,0x18 ,0xFF ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 , +0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0xF8 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x1F ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 , +0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF , +0xF0 ,0xF0 ,0xF0 ,0xF0 ,0xF0 ,0xF0 ,0xF0 ,0xF0 ,0xF0 ,0xF0 ,0xF0 ,0xF0 ,0xF0 ,0xF0 ,0xF0 ,0xF0 , +0x0F ,0x0F ,0x0F ,0x0F ,0x0F ,0x0F ,0x0F ,0x0F ,0x0F ,0x0F ,0x0F ,0x0F ,0x0F ,0x0F ,0x0F ,0x0F , +0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x76 ,0xDC ,0xD8 ,0xD8 ,0xD8 ,0xDC ,0x76 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xFC ,0xC6 ,0xFC ,0xC6 ,0xC6 ,0xFC ,0xC0 ,0xC0 ,0xC0 ,0x00 ,0x00 , +0x00 ,0x00 ,0xFE ,0xC6 ,0xC6 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x80 ,0xFE ,0x6C ,0x6C ,0x6C ,0x6C ,0x6C ,0x6C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0xFE ,0xC6 ,0x60 ,0x30 ,0x18 ,0x30 ,0x60 ,0xC6 ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7E ,0xD8 ,0xD8 ,0xD8 ,0xD8 ,0xD8 ,0x70 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x66 ,0x66 ,0x66 ,0x66 ,0x66 ,0x7C ,0x60 ,0x60 ,0xC0 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x76 ,0xDC ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x7E ,0x18 ,0x3C ,0x66 ,0x66 ,0x66 ,0x3C ,0x18 ,0x7E ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x38 ,0x6C ,0xC6 ,0xC6 ,0xFE ,0xC6 ,0xC6 ,0x6C ,0x38 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x38 ,0x6C ,0xC6 ,0xC6 ,0xC6 ,0x6C ,0x6C ,0x6C ,0x6C ,0xEE ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x1E ,0x30 ,0x18 ,0x0C ,0x3E ,0x66 ,0x66 ,0x66 ,0x66 ,0x3C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x7E ,0xDB ,0xDB ,0xDB ,0x7E ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x03 ,0x06 ,0x7E ,0xCF ,0xDB ,0xF3 ,0x7E ,0x60 ,0xC0 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x1C ,0x30 ,0x60 ,0x60 ,0x7C ,0x60 ,0x60 ,0x60 ,0x30 ,0x1C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x7C ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0xC6 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0xFE ,0x00 ,0x00 ,0xFE ,0x00 ,0x00 ,0xFE ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x18 ,0x18 ,0x7E ,0x18 ,0x18 ,0x00 ,0x00 ,0xFF ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x30 ,0x18 ,0x0C ,0x06 ,0x0C ,0x18 ,0x30 ,0x00 ,0x7E ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x0C ,0x18 ,0x30 ,0x60 ,0x30 ,0x18 ,0x0C ,0x00 ,0x7E ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x0E ,0x1B ,0x1B ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 , +0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0x18 ,0xD8 ,0xD8 ,0xD8 ,0x70 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x18 ,0x18 ,0x00 ,0x7E ,0x00 ,0x18 ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x76 ,0xDC ,0x00 ,0x76 ,0xDC ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x38 ,0x6C ,0x6C ,0x38 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x18 ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x18 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x0F ,0x0C ,0x0C ,0x0C ,0x0C ,0x0C ,0xEC ,0x6C ,0x6C ,0x3C ,0x1C ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0xD8 ,0x6C ,0x6C ,0x6C ,0x6C ,0x6C ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x70 ,0x98 ,0x30 ,0x60 ,0xC8 ,0xF8 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x7C ,0x7C ,0x7C ,0x7C ,0x7C ,0x7C ,0x7C ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 , +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 +};static void __init qvga_load_font (unsigned char *def,unsigned int c) { -volatile void *w = (volatile void *)0xb00a0000 ; +void *w = (void *)0xb00a0000 ;vga_wseq (NULL ,0 ,1 );vga_wseq (NULL ,2 ,4 );
@@ -118,7 +317,12 @@vga_wgfx (NULL ,5 ,0 );vga_wgfx (NULL ,6 ,0 ); -memcpy (w, def, c); + { +int i; +for (i=0 ; i<256 ; i++) { +memcpy (w+i*32 , def+i*16 ,16 ); + } + }vga_wseq (NULL ,0 ,1 );vga_wseq (NULL ,2 ,3 );
@@ -128,61 +332,97 @@vga_wgfx (NULL ,5 ,0x10 );vga_wgfx (NULL ,6 ,0xe ); } -#endif + +#endif /* LOAD_VGA_FONT */ + +static unsigned char g_80x25_text[]__initdata = { +/* MISC */ +0x67 , +/* SEQ */ +0x03 ,0x00 ,0x03 ,0x00 ,0x02 , +/* CRTC */ +0x5F ,0x4F ,0x50 ,0x82 ,0x55 ,0x81 ,0xBF ,0x1F , +0x00 ,0x4F ,0x0D ,0x0E ,0x00 ,0x00 ,0x00 ,0x50 , +0x9C ,0x0E ,0x8F ,0x28 ,0x1F ,0x96 ,0xB9 ,0xA3 , +0xFF , +/* GC */ +0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x10 ,0x0E ,0x00 , +0xFF , +/* AC */ +0x00 ,0x01 ,0x02 ,0x03 ,0x04 ,0x05 ,0x14 ,0x07 , +0x38 ,0x39 ,0x3A ,0x3B ,0x3C ,0x3D ,0x3E ,0x3F , +0x0C ,0x00 ,0x0F ,0x08 ,0x00 +}; + +static void __init write_regs (unsigned char *regs) +{ +unsigned i; + +/* write MISCELLANEOUS reg */ +vga_io_w (VGA_MIS_W , *regs); + regs++; +/* write SEQUENCER regs */ +for (i =0 ; i <VGA_SEQ_C ; i++) { +vga_io_wseq (i, *regs); + regs++; + } +/* unlock CRTC registers */ +vga_io_w (VGA_CRT_IC ,0x03 ); +vga_io_w (VGA_CRT_DC ,vga_io_r (VGA_CRT_DC ) |0x80 ); +vga_io_w (VGA_CRT_IC ,0x11 ); +vga_io_w (VGA_CRT_DC ,vga_io_r (VGA_CRT_DC ) & ~0x80 ); +/* make sure they remain unlocked */ + regs[0x03 ] |=0x80 ; + regs[0x11 ] &= ~0x80 ; +/* write CRTC regs */ +for (i =0 ; i <VGA_CRT_C ; i++) { +vga_io_wcrt (i, *regs); + regs++; + } +/* write GRAPHICS CONTROLLER regs */ +for (i =0 ; i <VGA_GFX_C ; i++) { +vga_io_wgfx (i, *regs); + regs++; + } +/* write ATTRIBUTE CONTROLLER regs */ +for (i =0 ; i <VGA_ATT_C ; i++) { + (void )vga_io_r (VGA_IS1_RC ); +vga_io_wattr (i, *regs); + regs++; + } +/* lock 16-color palette and unblank display */ + (void )vga_io_r (VGA_IS1_RC ); +vga_io_w (VGA_ATT_W ,0x20 ); +}void __init qvga_init (void ) {struct screen_info *si = &screen_info; -unsigned int h;int i; -#if LOAD_VGA_FONT -qvga_load_font (vgafont16,4096 ); -#endif +write_regs (g_80x25_text); -vga_wgfx (NULL ,5 ,0x10 );/* Set odd/even mode */ -vga_wgfx (NULL ,6 ,0x0c );/* map to offset 0xb8000, text mode */ -vga_wseq (NULL ,2 ,3 );/* Planes 0 & 1 */ -vga_wseq (NULL ,3 ,4 );/* Font offset */ -outb (1 ,VGA_MIS_W );/* set msr to MSR_COLOR_EMULATION */ -vga_wcrt (NULL ,1 ,79 );/* 80 columns */ -vga_wcrt (NULL ,9 ,15 );/* 16 pixels per character */ -vga_wcrt (NULL ,0x0c ,0 );/* start address high 8 bit */ -vga_wcrt (NULL ,0x0d ,0 );/* start address low 8 bit */ -vga_wcrt (NULL ,0x13 ,0x28 );/* line offset */ -vga_wcrt (NULL ,0x07 ,0x1f );/* line compare bit 8 */ -vga_wcrt (NULL ,0x09 ,0x4f );/* line compare bit 9 */ -vga_wcrt (NULL ,0x18 ,0xff );/* line compare low 8 bit */ - - h = (25 *16 ); -vga_wcrt (NULL ,0x12 , h); - -outb (7 ,0x3d4 ); -outb ((inb (0x3d5 ) & ~0x42 ) | ((h >>7 ) &2 ) | ((h >>3 ) &0x40 ),0x3d5 ); - -for (i =0 ; i <21 ; i++)/* Attribute Controller */ -vga_wattr (NULL , i, ar[i]); -outb (0x20 ,0x3c0 );/* Set bit 5 in Attribute Controller */ -/* index ... VGA is so stupid I want */ -/* to cry all day ... */ -outb (0 ,VGA_PEL_IW );for (i =0 ; i <16 ; i++) {/* palette */ +outb (i,VGA_PEL_IW );outb (palette[i].r,VGA_PEL_D );outb (palette[i].g,VGA_PEL_D );outb (palette[i].b,VGA_PEL_D ); } +#ifdef LOAD_VGA_FONT +/* printk("qvga_init: loading font\n"); */ +qvga_load_font (g_8x16_font,4096 ); +#endif + +/* clear the screen */ +for (i =0 ; i <80 *25 *2 ; i +=2 ) { +scr_writew (0x0700 |' ' , (volatile unsigned short *) (0xb00b8000 + i)); + } + si->orig_x =0 ;/* Cursor x position */ si->orig_y =0 ;/* Cursor y position */ si->orig_video_cols =80 ;/* Columns */ si->orig_video_lines =25 ;/* Lines */ si->orig_video_isVGA =VIDEO_TYPE_VGAC ;/* Card type */ si->orig_video_points =16 ; - -#if 0 -for (i =0 ; i <80 ; i +=2 ) -//*(volatile unsigned short *) (0xb00b8000 + i) = 0x0100 | 'A'; -scr_writew (0x0100 |'A' , (volatile unsigned short *) (0xb00b8000 + i)); -while (1 ); -#endif }
arch/mips/Kconfig renamed from arch/mips/Kconfig-orig +1 -0
@@ -535,6 +535,7 @@ select SYS_HAS_CPU_MIPS32_R1 select SYS_SUPPORTS_32BIT_KERNEL select SYS_SUPPORTS_BIG_ENDIAN + select SYS_SUPPORTS_LITTLE_ENDIAN help Qemu is a software emulator which among other architectures also can simulate a MIPS32 4Kc system. This patch adds support for the
Quoted 1 line · Manuel Novoa III
2 patches attached...
Please only send one patch per email, with Signed-off-by: lines.
Quoted 5 lines
q-vga.c.patch gets virtual consoles working with qemu
arch-mips-Kconfig.patch enables setting little endian for qemuThe
q-vga.cchanges are just a literal port of some public domain vga code... specificly http://my.execpc.com/~geezer/osd/graphics/modes.c.
No problem with that.
There is one big issue with this patch however - it's putting a font under arch. Fonts have no business under arch/. Can you try to find a way to use the fonts we have under drivers/video/console?
Ralf