/* * firmware initialization code for Trident Blade3d graphics adapter * written by Fuger Shen 2003-10-10 * (C) 2003 XGI Technology Inc. * This code is released under GPL with permission from XGI */ #include #include #include #include #include #include #include #include #include //----------------------------------------------------------------------------// // init chip 9880 // Fuger Shen 2003-10-10 //----------------------------------------------------------------------------// #define inp inb #define outp(port,val) outb(val, port) #define WORD unsigned int #define BYTE unsigned char #define DWORD unsigned long #define SGRAMTimg 0x27 #define CHIPREV 0x3 //1,RA 2,RB,3,RC #define Port_SRX 0x3c4 #define Port_CRX 0x3d4 #define Port_GRX 0x3ce #define Port_BRX 0x3c0 static BYTE Mem_Clk_Table[][2] = { //For EDO, 3x5.2a.3:2=01 3x4.28.2:0 { 0x50, 0x46 }, //000, F_78 { 0xCF, 0x51 }, //001, F_81 = 81.011Mhz { 0x30, 0x83 }, //010, F_40 = 40.006Mhz { 0x1B, 0x43 }, //011, F_50 = 49.999MHz { 0x22, 0x43 }, //100, F_60 = 59.999MHz { 0x42, 0x46 }, //101, F_66 = 65.988MHz { 0x33, 0x44 }, //110, F_70 = 69.999Mhz { 0x22, 0x42 }, //111, F_75 = 74,999Mhz //for SGRAM, 3x5.2a.3:2=1x { 0x3A, 0x05 }, //000, F_135 { 0x38, 0x05 }, //001, F_130 { 0x44, 0x44 }, //010, F_90 = 89.999MHz { 0x22, 0x04 }, //011, F_100=100.227MHz { 0x0E, 0x01 }, //100, F_105 { 0x3D, 0x07 }, //101, F_110=109.989Mhz { 0x22, 0x03 }, //110, F_120=119.999MHz { 0x36, 0x05 }, //111, F_125 }; typedef struct Reg_struct { WORD rPort; BYTE rIndex; BYTE rValue; BYTE rMask; } Def_Reg_struct; typedef Def_Reg_struct* lpDef_Reg_struct; // , *pDef_Reg_struct, far * lpDef_Reg_struct; static Def_Reg_struct Mode3_temp[] = { //mode3 temp //port index value mask {Port_CRX, 0x00, 0x5F, 0x00}, {Port_CRX, 0x01, 0x4F, 0x00}, {Port_CRX, 0x02, 0x50, 0x00}, {Port_CRX, 0x03, 0x82, 0x00}, {Port_CRX, 0x04, 0x55, 0x00}, {Port_CRX, 0x05, 0x81, 0x00}, {Port_CRX, 0x06, 0xBF, 0x00}, {Port_CRX, 0x07, 0x1F, 0x00}, {Port_CRX, 0x08, 0x00, 0x00}, {Port_CRX, 0x09, 0xC7, 0x00}, {Port_CRX, 0x0a, 0x06, 0x00}, {Port_CRX, 0x0b, 0x07, 0x00}, {Port_CRX, 0x0c, 0x00, 0x00}, {Port_CRX, 0x0d, 0x00, 0x00}, {Port_CRX, 0x0e, 0x00, 0x00}, {Port_CRX, 0x0f, 0x00, 0x00}, {Port_CRX, 0x10, 0x9C, 0x00}, {Port_CRX, 0x11, 0x8E, 0x00}, {Port_CRX, 0x12, 0x8F, 0x00}, {Port_CRX, 0x13, 0x28, 0x00}, {Port_CRX, 0x14, 0x1F, 0x00}, {Port_CRX, 0x15, 0x96, 0x00}, {Port_CRX, 0x16, 0xB9, 0x00}, {Port_CRX, 0x17, 0xA3, 0x00}, {Port_CRX, 0x18, 0xFF, 0x00}, }; WORD Length_Mode3_temp = sizeof(Mode3_temp) / sizeof(Def_Reg_struct); Def_Reg_struct Mode3_reg[] = { //mode3 //port index value mask {Port_CRX, 0x00, 0x5F, 0x00}, //3d5 {Port_CRX, 0x01, 0x4F, 0x00}, {Port_CRX, 0x02, 0x50, 0x00}, {Port_CRX, 0x03, 0x82, 0x00}, {Port_CRX, 0x04, 0x55, 0x00}, {Port_CRX, 0x05, 0x81, 0x00}, {Port_CRX, 0x06, 0xBF, 0x00}, {Port_CRX, 0x07, 0x1F, 0x00}, {Port_CRX, 0x08, 0x00, 0x00}, {Port_CRX, 0x09, 0x4F, 0x00}, {Port_CRX, 0x0a, 0x0D, 0x00}, {Port_CRX, 0x0b, 0x0E, 0x00}, {Port_CRX, 0x0c, 0x00, 0x00}, {Port_CRX, 0x0d, 0x00, 0x00}, {Port_CRX, 0x0e, 0x00, 0x00}, {Port_CRX, 0x0f, 0x00, 0x00}, {Port_CRX, 0x10, 0x9C, 0x00}, {Port_CRX, 0x11, 0x8E, 0x00}, {Port_CRX, 0x12, 0x8F, 0x00}, {Port_CRX, 0x13, 0x28, 0x00}, {Port_CRX, 0x14, 0x1F, 0x00}, {Port_CRX, 0x15, 0x96, 0x00}, {Port_CRX, 0x16, 0xB9, 0x00}, {Port_CRX, 0x17, 0xA3, 0x00}, {Port_CRX, 0x18, 0xFF, 0x00}, //brx {Port_BRX, 0x00, 0x00, 0x00}, {Port_BRX, 0x01, 0x01, 0x00}, {Port_BRX, 0x02, 0x02, 0x00}, {Port_BRX, 0x03, 0x03, 0x00}, {Port_BRX, 0x04, 0x04, 0x00}, {Port_BRX, 0x05, 0x05, 0x00}, {Port_BRX, 0x06, 0x14, 0x00}, {Port_BRX, 0x07, 0x07, 0x00}, {Port_BRX, 0x08, 0x38, 0x00}, {Port_BRX, 0x09, 0x39, 0x00}, {Port_BRX, 0x0a, 0x3A, 0x00}, {Port_BRX, 0x0b, 0x3B, 0x00}, {Port_BRX, 0x0c, 0x3C, 0x00}, {Port_BRX, 0x0d, 0x3D, 0x00}, {Port_BRX, 0x0e, 0x3E, 0x00}, {Port_BRX, 0x0f, 0x3F, 0x00}, {Port_BRX, 0x10, 0x0C, 0x00}, {Port_BRX, 0x11, 0x00, 0x00}, {Port_BRX, 0x12, 0x0F, 0x00}, {Port_BRX, 0x13, 0x08, 0x00}, {Port_BRX, 0x14, 0x00, 0x00}, {Port_SRX, 0x00, 0x03, 0x00}, {Port_SRX, 0x01, 0x00, 0x00}, {Port_SRX, 0x02, 0x03, 0x00}, {Port_SRX, 0x03, 0x00, 0x00}, {Port_SRX, 0x04, 0x02, 0x00}, {Port_SRX, 0x18, 0xa6, 0x00}, //VCLK {Port_SRX, 0x19, 0xc9, 0x00}, {Port_SRX, 0x0D, 0x20, 0x00}, {Port_SRX, 0x12, 0x11, 0x00}, {Port_CRX, 0x19, 0x4a, 0x00}, //{Port_CRX, 0x20, 0x20, 0x00}, //{Port_CRX, 0x23, 0x00, 0x00}, //{Port_CRX, 0x1E, 0x89, 0x00}, {Port_CRX, 0x21, 0xce, 0x00}, //{Port_CRX, 0x25, 0x07, 0x00}, //{Port_CRX, 0x27, 0x08, 0x00}, //{Port_CRX, 0x2B, 0x00, 0x00}, //{Port_CRX, 0x29, 0x04, 0x00}, //{Port_CRX, 0x2F, 0x22, 0x00}, {Port_CRX, 0x37, 0x81, 0x00}, //{Port_CRX, 0x38, 0x00, 0x00}, //{Port_CRX, 0x3b, 0x01, 0x00}, {Port_CRX, 0x56, 0x00, 0x00}, {Port_CRX, 0x57, 0x54, 0x00}, {Port_GRX, 0x05, 0x10, 0x00}, {Port_GRX, 0x06, 0x0e, 0x00}, // {Port_GRX, 0x0F, 0x20, 0x00}, //{Port_GRX, 0x31, 0x06, 0x00}, //{Port_GRX, 0x33, 0x30, 0x00}, //{Port_GRX, 0x52, 0x10, 0x00}, }; static WORD Length_Mode3_reg = sizeof(Mode3_reg) / sizeof(Def_Reg_struct); static Def_Reg_struct Init_reg[] = { //port index value mask {Port_GRX, 0x25, 0x00, 0x00}, {Port_GRX, 0x21, 0x00, 0x00}, {Port_GRX, 0x22, 0x00, 0x00}, {Port_GRX, 0x26, 0x08, 0x00}, {Port_GRX, 0x27, 0x00, 0x00}, {Port_GRX, 0x28, 0xFF, 0x00}, {Port_GRX, 0x29, 0x00, 0x00}, {Port_GRX, 0x2A, 0x00, 0x00}, {Port_GRX, 0x2C, 0x06, 0x00}, {Port_GRX, 0x2E, 0x00, 0x00}, {Port_GRX, 0x2F, 0x00, 0x00}, {Port_GRX, 0x20, 0x80, 0x00}, {Port_SRX, 0x24, 0x0F, 0x00}, {Port_SRX, 0x37, 0x30, 0x00}, {Port_SRX, 0x38, 0x04, 0x00}, {Port_GRX, 0x23, 0x00, 0x00}, {Port_GRX, 0x33, 0x20, 0x00}, {Port_GRX, 0x30, 0x00, 0x00}, // {Port_GRX, 0x28, 0x18, 0x00}, {Port_CRX, 0x0F, 0x20, 0x40}, {Port_CRX, 0x1F, 0x00, 0x00}, {Port_CRX, 0x20, 0x30, 0x00}, {Port_CRX, 0x23, 0x10, 0x00}, {Port_CRX, 0x25, 0x86, 0x00}, {Port_CRX, 0x2F, 0x1F, 0x00}, {Port_CRX, 0x30, 0x0F, 0x00}, {Port_CRX, 0x33, 0x00, 0x00}, {Port_CRX, 0x38, 0x10, 0x00}, {Port_CRX, 0x39, 0x00, 0x00}, {Port_CRX, 0x5E, 0x00, 0x00}, {Port_CRX, 0x29, 0x04, 0x00}, {Port_GRX, 0x5C, 0x00, 0x80}, {Port_GRX, 0x62, 0x00, 0x08}, {Port_SRX, 0x20, 0x04, 0x00}, {Port_GRX, 0x2F, 0x23, 0x00}, {Port_SRX, 0x0B, 0x00, 0x00}, {Port_SRX, 0x0D, 0x28, 0x00}, }; static WORD Length_Init_reg = sizeof(Init_reg) / sizeof(Def_Reg_struct); static BYTE C8x16_Char[][8] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //;0 { 0x00, 0x00, 0x7E, 0x81, 0xA5, 0x81, 0x81, 0xBD }, { 0x99, 0x81, 0x81, 0x7E, 0x00, 0x00, 0x00, 0x00 }, //;1 { 0x00, 0x00, 0x7E, 0xFF, 0xDB, 0xFF, 0xFF, 0xC3 }, { 0xE7, 0xFF, 0xFF, 0x7E, 0x00, 0x00, 0x00, 0x00 }, //;2 { 0x00, 0x00, 0x00, 0x00, 0x6C, 0xFE, 0xFE, 0xFE }, { 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00 }, //;3 { 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7C, 0xFE }, { 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 }, //;4 { 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0xE7, 0xE7 }, { 0xE7, 0x99, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00 }, //;5 { 0x00, 0x00, 0x00, 0x18, 0x3C, 0x7E, 0xFF, 0xFF }, { 0x7E, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00 }, //;6 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C }, { 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //;7 { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xC3 }, { 0xC3, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, //;8 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x42 }, { 0x42, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00 }, //;9 { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0x99, 0xBD }, { 0xBD, 0x99, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, ////10 { 0x00, 0x00, 0x1E, 0x0E, 0x1A, 0x32, 0x78, 0xCC }, { 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00 }, //11 { 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C }, { 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }, //12 { 0x00, 0x00, 0x3F, 0x33, 0x3F, 0x30, 0x30, 0x30 }, { 0x30, 0x70, 0xF0, 0xE0, 0x00, 0x00, 0x00, 0x00 }, //13 { 0x00, 0x00, 0x7F, 0x63, 0x7F, 0x63, 0x63, 0x63 }, { 0x63, 0x67, 0xE7, 0xE6, 0xC0, 0x00, 0x00, 0x00 }, //14 { 0x00, 0x00, 0x00, 0x18, 0x18, 0xDB, 0x3C, 0xE7 }, { 0x3C, 0xDB, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }, //15 { 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFE, 0xF8 }, { 0xF0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00 }, //16 { 0x00, 0x02, 0x06, 0x0E, 0x1E, 0x3E, 0xFE, 0x3E }, { 0x1E, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00 }, //17 { 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18 }, { 0x18, 0x7E, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00 }, //18 { 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66 }, { 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00 }, //19 { 0x00, 0x00, 0x7F, 0xDB, 0xDB, 0xDB, 0x7B, 0x1B }, { 0x1B, 0x1B, 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00 }, //20 { 0x00, 0x7C, 0xC6, 0x60, 0x38, 0x6C, 0xC6, 0xC6 }, { 0x6C, 0x38, 0x0C, 0xC6, 0x7C, 0x00, 0x00, 0x00 }, //21 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00 }, //22 { 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18 }, { 0x18, 0x7E, 0x3C, 0x18, 0x7E, 0x00, 0x00, 0x00 }, //23 { 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18 }, { 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }, //24 { 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }, { 0x18, 0x7E, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00 }, //25 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0C, 0xFE }, { 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //26 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xFE }, { 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //27 { 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0 }, { 0xC0, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //28 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6C, 0xFE }, { 0x6C, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //29 { 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7C }, { 0x7C, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00 }, //30 { 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x7C, 0x7C }, { 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 }, //31 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //32 { 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x18 }, { 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }, //33 { 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //34 { 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0x6C }, { 0x6C, 0xFE, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00 }, //35 { 0x18, 0x18, 0x7C, 0xC6, 0xC2, 0xC0, 0x7C, 0x06 }, { 0x86, 0xC6, 0x7C, 0x18, 0x18, 0x00, 0x00, 0x00 }, //36 { 0x00, 0x00, 0x00, 0x00, 0xC2, 0xC6, 0x0C, 0x18 }, { 0x30, 0x60, 0xC6, 0x86, 0x00, 0x00, 0x00, 0x00 }, //37 { 0x00, 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x76, 0xDC }, { 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00 }, //38 { 0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //39 { 0x00, 0x00, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x30 }, { 0x30, 0x30, 0x18, 0x0C, 0x00, 0x00, 0x00, 0x00 }, //40 { 0x00, 0x00, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x0C }, { 0x0C, 0x0C, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00 }, //41 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3C, 0xFF }, { 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //42 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E }, { 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //43 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00 }, //44 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //45 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }, //46 { 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0C, 0x18 }, { 0x30, 0x60, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00 }, //47 { 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xD6, 0xD6 }, { 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 }, //48 { 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18 }, { 0x18, 0x18, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00 }, //49 { 0x00, 0x00, 0x7C, 0xC6, 0x06, 0x0C, 0x18, 0x30 }, { 0x60, 0xC0, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00 }, //50 { 0x00, 0x00, 0x7C, 0xC6, 0x06, 0x06, 0x3C, 0x06 }, { 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 }, //51 { 0x00, 0x00, 0x0C, 0x1C, 0x3C, 0x6C, 0xCC, 0xFE }, { 0x0C, 0x0C, 0x0C, 0x1E, 0x00, 0x00, 0x00, 0x00 }, //52 { 0x00, 0x00, 0xFE, 0xC0, 0xC0, 0xC0, 0xFC, 0x0E }, { 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 }, //53 { 0x00, 0x00, 0x38, 0x60, 0xC0, 0xC0, 0xFC, 0xC6 }, { 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 }, //54 { 0x00, 0x00, 0xFE, 0xC6, 0x06, 0x06, 0x0C, 0x18 }, { 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00 }, //55 { 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0xC6 }, { 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 }, //56 { 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7E, 0x06 }, { 0x06, 0x06, 0x0C, 0x78, 0x00, 0x00, 0x00, 0x00 }, //57 { 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00 }, { 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00 }, //58 { 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00 }, { 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00 }, //59 { 0x00, 0x00, 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60 }, { 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00 }, //60 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00 }, { 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //61 { 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06 }, { 0x0C, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00 }, //62 { 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x0C, 0x18, 0x18 }, { 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }, //63 { 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xDE, 0xDE }, { 0xDE, 0xDC, 0xC0, 0x7C, 0x00, 0x00, 0x00, 0x00 }, //64 { 0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xFE }, { 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00 }, //65 { 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x66 }, { 0x66, 0x66, 0x66, 0xFC, 0x00, 0x00, 0x00, 0x00 }, //66 { 0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0 }, { 0xC0, 0xC2, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00 }, //67 { 0x00, 0x00, 0xF8, 0x6C, 0x66, 0x66, 0x66, 0x66 }, { 0x66, 0x66, 0x6C, 0xF8, 0x00, 0x00, 0x00, 0x00 }, //68 { 0x00, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78, 0x68 }, { 0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00 }, //69 { 0x00, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78, 0x68 }, { 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00 }, //70 { 0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xDE }, { 0xC6, 0xC6, 0x66, 0x3A, 0x00, 0x00, 0x00, 0x00 }, //71 { 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xFE, 0xC6 }, { 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00 }, //72 { 0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18 }, { 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00 }, //73 { 0x00, 0x00, 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C }, { 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00 }, //74 { 0x00, 0x00, 0xE6, 0x66, 0x6C, 0x6C, 0x78, 0x78 }, { 0x6C, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00 }, //75 { 0x00, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60 }, { 0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00 }, //76 { 0x00, 0x00, 0xC6, 0xEE, 0xFE, 0xFE, 0xD6, 0xC6 }, { 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00 }, //77 { 0x00, 0x00, 0xC6, 0xE6, 0xF6, 0xFE, 0xDE, 0xCE }, { 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00 }, //78 { 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xC6, 0xC6 }, { 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00 }, //79 { 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x60 }, { 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00 }, //80 { 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6 }, { 0xC6, 0xD6, 0xDE, 0x7C, 0x0C, 0x0E, 0x00, 0x00 }, //81 { 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x6C }, { 0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00 }, //82 { 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x60, 0x38, 0x0C }, { 0x06, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 }, //83 { 0x00, 0x00, 0x7E, 0x7E, 0x5A, 0x18, 0x18, 0x18 }, { 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00 }, //84 { 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6 }, { 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 }, //85 { 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6 }, { 0xC6, 0x6C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00 }, //86 { 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xD6 }, { 0xD6, 0xFE, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00 }, //87 { 0x00, 0x00, 0xC6, 0xC6, 0x6C, 0x6C, 0x38, 0x38 }, { 0x6C, 0x6C, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00 }, //88 { 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18 }, { 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00 }, //89 { 0x00, 0x00, 0xFE, 0xC6, 0x86, 0x0C, 0x18, 0x30 }, { 0x60, 0xC2, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00 }, //90 { 0x00, 0x00, 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30 }, { 0x30, 0x30, 0x30, 0x3C, 0x00, 0x00, 0x00, 0x00 }, //91 { 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0x70, 0x38 }, { 0x1C, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00 }, //92 { 0x00, 0x00, 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C }, { 0x0C, 0x0C, 0x0C, 0x3C, 0x00, 0x00, 0x00, 0x00 }, //93 { 0x10, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //94 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00 }, //95 { 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //96 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C }, { 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00 }, //97 { 0x00, 0x00, 0xE0, 0x60, 0x60, 0x78, 0x6C, 0x66 }, { 0x66, 0x66, 0x66, 0xDC, 0x00, 0x00, 0x00, 0x00 }, //98 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0 }, { 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 }, //99 { 0x00, 0x00, 0x1C, 0x0C, 0x0C, 0x3C, 0x6C, 0xCC }, { 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00 }, //100 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xFE }, { 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 }, //101 { 0x00, 0x00, 0x38, 0x6C, 0x64, 0x60, 0xF0, 0x60 }, { 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00 }, //102 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC }, { 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00 }, //103 { 0x00, 0x00, 0xE0, 0x60, 0x60, 0x6C, 0x76, 0x66 }, { 0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00 }, //104 { 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18 }, { 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00 }, //105 { 0x00, 0x00, 0x06, 0x06, 0x00, 0x0E, 0x06, 0x06 }, { 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3C, 0x00 }, //106 { 0x00, 0x00, 0xE0, 0x60, 0x60, 0x66, 0x6C, 0x78 }, { 0x78, 0x6C, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00 }, //107 { 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18 }, { 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00 }, //108 { 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xFE, 0xD6 }, { 0xD6, 0xD6, 0xD6, 0xD6, 0x00, 0x00, 0x00, 0x00 }, //109 { 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66 }, { 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00 }, //110 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6 }, { 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 }, //111 { 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66 }, { 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00 }, //112 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC }, { 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C, 0x1E, 0x00 }, //113 { 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x76, 0x62 }, { 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00 }, //114 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0x60 }, { 0x38, 0x0C, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 }, //115 { 0x00, 0x00, 0x10, 0x30, 0x30, 0xFC, 0x30, 0x30 }, { 0x30, 0x30, 0x36, 0x1C, 0x00, 0x00, 0x00, 0x00 }, //116 { 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC }, { 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00 }, //117 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66 }, { 0x66, 0x66, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00 }, //118 { 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6 }, { 0xD6, 0xD6, 0xFE, 0x6C, 0x00, 0x00, 0x00, 0x00 }, //119 { 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x6C, 0x38 }, { 0x38, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00 }, //120 { 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6 }, { 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0xF8, 0x00 }, //121 { 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xCC, 0x18 }, { 0x30, 0x60, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00 }, //122 { 0x00, 0x00, 0x0E, 0x18, 0x18, 0x18, 0x70, 0x18 }, { 0x18, 0x18, 0x18, 0x0E, 0x00, 0x00, 0x00, 0x00 }, //123 { 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18 }, { 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }, //124 { 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0E, 0x18 }, { 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00 }, //125 { 0x00, 0x00, 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //126 { 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6 }, { 0xC6, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00 }, //127 { 0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0 }, { 0xC2, 0x66, 0x3C, 0x0C, 0x06, 0x7C, 0x00, 0x00 }, //128 { 0x00, 0x00, 0xCC, 0xCC, 0x00, 0xCC, 0xCC, 0xCC }, { 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00 }, //129 { 0x00, 0x0C, 0x18, 0x30, 0x00, 0x7C, 0xC6, 0xFE }, { 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 }, //130 { 0x00, 0x10, 0x38, 0x6C, 0x00, 0x78, 0x0C, 0x7C }, { 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00 }, //131 { 0x00, 0x00, 0xCC, 0xCC, 0x00, 0x78, 0x0C, 0x7C }, { 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00 }, //132 { 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0C, 0x7C }, { 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00 }, //133 { 0x00, 0x38, 0x6C, 0x38, 0x00, 0x78, 0x0C, 0x7C }, { 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00 }, //134 { 0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x60, 0x60 }, { 0x66, 0x3C, 0x0C, 0x06, 0x3C, 0x00, 0x00, 0x00 }, //135 { 0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xFE }, { 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 }, //136 { 0x00, 0x00, 0xC6, 0xC6, 0x00, 0x7C, 0xC6, 0xFE }, { 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 }, //137 { 0x00, 0x60, 0x30, 0x18, 0x00, 0x7C, 0xC6, 0xFE }, { 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 }, //138 { 0x00, 0x00, 0x66, 0x66, 0x00, 0x38, 0x18, 0x18 }, { 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00 }, //139 { 0x00, 0x18, 0x3C, 0x66, 0x00, 0x38, 0x18, 0x18 }, { 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00 }, //140 { 0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18 }, { 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00 }, //141 { 0x00, 0xC6, 0xC6, 0x10, 0x38, 0x6C, 0xC6, 0xC6 }, { 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00 }, //142 { 0x38, 0x6C, 0x38, 0x00, 0x38, 0x6C, 0xC6, 0xC6 }, { 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00 }, //143 { 0x18, 0x30, 0x60, 0x00, 0xFE, 0x66, 0x60, 0x7C }, { 0x60, 0x60, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00 }, //144 { 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x76, 0x36 }, { 0x7E, 0xD8, 0xD8, 0x6E, 0x00, 0x00, 0x00, 0x00 }, //145 { 0x00, 0x00, 0x3E, 0x6C, 0xCC, 0xCC, 0xFE, 0xCC }, { 0xCC, 0xCC, 0xCC, 0xCE, 0x00, 0x00, 0x00, 0x00 }, //146 { 0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xC6 }, { 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 }, //147 { 0x00, 0x00, 0xC6, 0xC6, 0x00, 0x7C, 0xC6, 0xC6 }, { 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 }, //148 { 0x00, 0x60, 0x30, 0x18, 0x00, 0x7C, 0xC6, 0xC6 }, { 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 }, //149 { 0x00, 0x30, 0x78, 0xCC, 0x00, 0xCC, 0xCC, 0xCC }, { 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00 }, //150 { 0x00, 0x60, 0x30, 0x18, 0x00, 0xCC, 0xCC, 0xCC }, { 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00 }, //151 { 0x00, 0x00, 0xC6, 0xC6, 0x00, 0xC6, 0xC6, 0xC6 }, { 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0x78, 0x00 }, //152 { 0x00, 0xC6, 0xC6, 0x00, 0x38, 0x6C, 0xC6, 0xC6 }, { 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00 }, //153 { 0x00, 0xC6, 0xC6, 0x00, 0xC6, 0xC6, 0xC6, 0xC6 }, { 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 }, //154 { 0x00, 0x18, 0x18, 0x3C, 0x66, 0x60, 0x60, 0x60 }, { 0x66, 0x3C, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }, //155 { 0x00, 0x38, 0x6C, 0x64, 0x60, 0xF0, 0x60, 0x60 }, { 0x60, 0x60, 0xE6, 0xFC, 0x00, 0x00, 0x00, 0x00 }, //156 { 0x00, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18 }, { 0x7E, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }, //157 { 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC4, 0xCC, 0xDE }, { 0xCC, 0xCC, 0xCC, 0xC6, 0x00, 0x00, 0x00, 0x00 }, //158 { 0x00, 0x0E, 0x1B, 0x18, 0x18, 0x18, 0x7E, 0x18 }, { 0x18, 0x18, 0x18, 0x18, 0xD8, 0x70, 0x00, 0x00 }, //159 { 0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0C, 0x7C }, { 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00 }, //160 { 0x00, 0x0C, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18 }, { 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00 }, //161 { 0x00, 0x18, 0x30, 0x60, 0x00, 0x7C, 0xC6, 0xC6 }, { 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 }, //162 { 0x00, 0x18, 0x30, 0x60, 0x00, 0xCC, 0xCC, 0xCC }, { 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00 }, //163 { 0x00, 0x00, 0x76, 0xDC, 0x00, 0xDC, 0x66, 0x66 }, { 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00 }, //164 { 0x76, 0xDC, 0x00, 0xC6, 0xE6, 0xF6, 0xFE, 0xDE }, { 0xCE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00 }, //165 { 0x00, 0x3C, 0x6C, 0x6C, 0x3E, 0x00, 0x7E, 0x00 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //166 { 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x7C, 0x00 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //167 { 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60 }, { 0xC0, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 }, //168 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xC0 }, { 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00 }, //169 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x06 }, { 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00 }, //170 { 0x00, 0xC0, 0xC0, 0xC2, 0xC6, 0xCC, 0x18, 0x30 }, { 0x60, 0xCE, 0x93, 0x06, 0x0C, 0x1F, 0x00, 0x00 }, //171 { 0x00, 0xC0, 0xC0, 0xC2, 0xC6, 0xCC, 0x18, 0x30 }, { 0x66, 0xCE, 0x9A, 0x3F, 0x06, 0x0F, 0x00, 0x00 }, //172 { 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18 }, { 0x3C, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00 }, //173 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x66, 0xCC }, { 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //174 { 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x66, 0x33 }, { 0x66, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //175 { 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44 }, { 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44 }, //176 { 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA }, { 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA }, //177 { 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77 }, { 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77 }, //178 { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }, { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }, //179 { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8 }, { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }, //180 { 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0xF8 }, { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }, //181 { 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6 }, { 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 }, //182 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE }, { 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 }, //183 { 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x18, 0xF8 }, { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }, //184 { 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x06, 0xF6 }, { 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 }, //185 { 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 }, { 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 }, //186 { 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x06, 0xF6 }, { 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 }, //187 { 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x06, 0xFE }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //188 { 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFE }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //189 { 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0xF8 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //190 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8 }, { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }, //191 { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //192 { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //193 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF }, { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }, //194 { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F }, { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }, //195 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //196 { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF }, { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }, //197 { 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x1F }, { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }, //198 { 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37 }, { 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 }, //199 { 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3F }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //200 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x30, 0x37 }, { 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 }, //201 { 0x36, 0x36, 0x36, 0x36, 0x36, 0xF7, 0x00, 0xFF }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //202 { 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xF7 }, { 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 }, //203 { 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37 }, { 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 }, //204 { 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //205 { 0x36, 0x36, 0x36, 0x36, 0x36, 0xF7, 0x00, 0xF7 }, { 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 }, //206 { 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x00, 0xFF }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //207 { 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFF }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //208 { 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF }, { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }, //209 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF }, { 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 }, //210 { 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3F }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //211 { 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x1F }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //212 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x18, 0x1F }, { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }, //213 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F }, { 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 }, //214 { 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFF }, { 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36 }, //215 { 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x18, 0xFF }, { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }, //216 { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //217 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F }, { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }, //218 { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, //219 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF }, { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, //220 { 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0 }, { 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0 }, //221 { 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F }, { 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F }, //222 { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //223 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xDC, 0xD8 }, { 0xD8, 0xD8, 0xDC, 0x76, 0x00, 0x00, 0x00, 0x00 }, //224 { 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xDC, 0xC6 }, { 0xC3, 0xC3, 0xC3, 0xCE, 0x00, 0x00, 0x00, 0x00 }, //225 { 0x00, 0x00, 0xFE, 0xC6, 0xC6, 0xC0, 0xC0, 0xC0 }, { 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00 }, //226 { 0x00, 0x00, 0x00, 0x00, 0x80, 0xFE, 0x6C, 0x6C }, { 0x6C, 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00 }, //227 { 0x00, 0x00, 0x00, 0xFE, 0xC6, 0x60, 0x30, 0x18 }, { 0x30, 0x60, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00 }, //228 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xD8, 0xD8 }, { 0xD8, 0xD8, 0xD8, 0x70, 0x00, 0x00, 0x00, 0x00 }, //229 { 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66 }, { 0x66, 0x7C, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00 }, //230 { 0x00, 0x00, 0x00, 0x00, 0x76, 0xDC, 0x18, 0x18 }, { 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00 }, //231 { 0x00, 0x00, 0x00, 0x7E, 0x18, 0x3C, 0x66, 0x66 }, { 0x66, 0x3C, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00 }, //232 { 0x00, 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE }, { 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00 }, //233 { 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xC6, 0x6C }, { 0x6C, 0x6C, 0x6C, 0xEE, 0x00, 0x00, 0x00, 0x00 }, //234 { 0x00, 0x00, 0x1E, 0x30, 0x18, 0x0C, 0x3E, 0x66 }, { 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00 }, //235 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xDB, 0xDB }, { 0xDB, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //236 { 0x00, 0x00, 0x00, 0x03, 0x06, 0x7E, 0xCF, 0xDB }, { 0xF3, 0x7E, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00 }, //237 { 0x00, 0x00, 0x1C, 0x30, 0x60, 0x60, 0x7C, 0x60 }, { 0x60, 0x60, 0x30, 0x1C, 0x00, 0x00, 0x00, 0x00 }, //238 { 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6 }, { 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00 }, //239 { 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE }, { 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00 }, //240 { 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18 }, { 0x18, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00 }, //241 { 0x00, 0x00, 0x00, 0x30, 0x18, 0x0C, 0x06, 0x0C }, { 0x18, 0x30, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00 }, //242 { 0x00, 0x00, 0x00, 0x0C, 0x18, 0x30, 0x60, 0x30 }, { 0x18, 0x0C, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00 }, //243 { 0x00, 0x00, 0x0E, 0x1B, 0x1B, 0x18, 0x18, 0x18 }, { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }, //244 { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18 }, { 0xD8, 0xD8, 0xD8, 0x70, 0x00, 0x00, 0x00, 0x00 }, //245 { 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7E }, { 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00 }, //246 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xDC, 0x00 }, { 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //247 { 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //248 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18 }, { 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //249 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //250 { 0x00, 0x0F, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xEC }, { 0x6C, 0x6C, 0x3C, 0x1C, 0x00, 0x00, 0x00, 0x00 }, //251 { 0x00, 0xD8, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x00 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //252 { 0x00, 0x70, 0x98, 0x30, 0x60, 0xC8, 0xF8, 0x00 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //253 { 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7C, 0x7C, 0x7C }, { 0x7C, 0x7C, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00 }, //254 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //255 }; static void config_OEM_regs(void); static void unprotect_reg(void); static void reprotect_reg(void); static void set_memCLK(BYTE mem_Type, BYTE mem_MD); static void init_SGRAM(void); static void config_video_memory(void); static void set_video_mode(void); static void clear_MEM(void); static void set_font(void); static int init9880(void) { unprotect_reg(); //if use SDRAM //outp(Port_CRX, 0x2a); //outp(Port_CRX+1, (inp(Port_CRX+1) & ~0x0c) | 0x08); //disable other card //enable VGA outp(0x3c3, 0x01); outp(0x4e68, 0x08); outp(0x3c2, 0x23); //if chip revB if (CHIPREV == 0x02) { printk_debug("blade3d: chip revision B\n"); outp(Port_CRX, 0xc0); outp(Port_CRX + 1, 0x00); } config_OEM_regs(); init_SGRAM(); //config_video_memory(); set_video_mode(); reprotect_reg(); //screen on outp(Port_SRX, 0x01); outp(Port_SRX + 1, inp(Port_SRX + 1) & ~0x20); return 0; } static void config_OEM_regs(void) { BYTE CRX_2A, Old_value; BYTE mem_Type; BYTE mem_MD; WORD i; lpDef_Reg_struct lpMode3_temp; lpDef_Reg_struct lpInit_reg; lpMode3_temp = &Mode3_temp[0]; lpInit_reg = &Init_reg[0]; printk_debug("blade3d: config_OEM_regs()\n"); outp(Port_GRX, 0x24); outp(Port_GRX + 1, 0xe0); //MCLK VCLK to 16 bit outp(Port_CRX, 0xcf); outp(Port_CRX + 1, inp(Port_CRX + 1) | 0x03); //3c5.0e //outp(Port_SRX, 0x3b); //outp(Port_SRX+1, inp(Port_SRX+1) | 0x20); // outp(Port_CRX, 0x3b); outp(Port_CRX + 1, inp(Port_CRX + 1) | 0x20); // outp(Port_CRX, 0x1a); outp(Port_CRX + 1, inp(Port_CRX + 1) & 0x08); // outp(Port_CRX, 0x2a); CRX_2A = inp(Port_CRX + 1); outp(Port_CRX + 1, CRX_2A & ~0x20); mem_Type = (CRX_2A & ~0x20) & 0x08; outp(Port_GRX, 0x0f); if (0x08 == mem_Type) outp(Port_GRX + 1, inp(Port_GRX + 1) | 0x20); else outp(Port_GRX + 1, inp(Port_GRX + 1) & ~0x20); outp(Port_CRX, 0x28); mem_MD = inp(Port_CRX + 1) & 0x07; set_memCLK(mem_Type, mem_MD); delay(100); if (0x08 == mem_Type) { outp(Port_CRX, 0x2e); outp(Port_CRX + 1, 0x00); delay(100); outp(Port_CRX, 0x2d); outp(Port_CRX + 1, 0x92); } else { outp(Port_CRX, 0x2d); outp(Port_CRX + 1, 0x82); } for (i = 0; i < Length_Mode3_temp; i++) { outp(lpMode3_temp[i].rPort, lpMode3_temp[i].rIndex); Old_value = inp(lpMode3_temp[i].rPort + 1); outp(lpMode3_temp[i].rPort + 1, lpMode3_temp[i].rValue | (Old_value & lpMode3_temp[i]. rMask)); } //screen off outp(Port_SRX, 0x01); outp(Port_SRX + 1, inp(Port_SRX + 1) | 0x20); for (i = 0; i < Length_Init_reg; i++) { outp(lpInit_reg[i].rPort, lpInit_reg[i].rIndex); Old_value = inp(lpInit_reg[i].rPort + 1); outp(lpInit_reg[i].rPort + 1, lpInit_reg[i].rValue | (Old_value & lpInit_reg[i]. rMask)); } delay(10); init_SGRAM(); outp(Port_CRX, 0x1a); if (0x08 == inp(Port_CRX + 1)) { outp(Port_CRX, 0x20); outp(Port_CRX + 1, inp(Port_CRX + 1) | 0x04); } } //end config_OEM_reg //---------------------------------------------------------------------------// static void unprotect_reg(void) { outp(Port_SRX, 0x11); outp(Port_SRX + 1, 0x92); } static void reprotect_reg(void) { outp(Port_SRX, 0x11); outp(Port_SRX + 1, 0x87); } static void set_memCLK(BYTE mem_Type, BYTE mem_MD) { BYTE Index; Index = ((mem_Type + mem_MD) << 0x01) & 0xf; outp(Port_SRX, 0x16); outp(Port_SRX + 1, Mem_Clk_Table[Index][0]); outp(Port_SRX, 0x17); outp(Port_SRX + 1, Mem_Clk_Table[Index][1]); } static void init_SGRAM(void) { BYTE Temp, i; outp(Port_CRX, 0x2a); if (inp(Port_CRX + 1) & 0x08) //SGRAM { outp(Port_CRX, 0x28); if (inp(Port_CRX + 1) & 0x08) { outp(Port_CRX, 0x1c); outp(Port_CRX + 1, 0x7a); } else { outp(Port_CRX, 0x1c); outp(Port_CRX + 1, 0x3a); } outp(Port_CRX, 0x1b); outp(Port_CRX + 1, SGRAMTimg); if (CHIPREV >= 0x03) { outp(Port_CRX, 0x1a); outp(Port_CRX + 1, inp(Port_CRX + 1) | 0x01); } else { outp(Port_CRX, 0x1a); outp(Port_CRX + 1, 0x16); outp(Port_CRX + 1, inp(Port_CRX + 1) | 0x16); for (i = 0; i < 10; i++) { outp(Port_CRX, 0x1c); outp(Port_CRX + 1, inp(Port_CRX + 1) | 0x40); } delay(100); outp(Port_CRX, 0x1c); Temp = (inp(Port_CRX + 1) | 0x20) & 0x3c; outp(Port_CRX + 1, Temp); outp(Port_CRX + 1, Temp & 0x08); } } else { //SGRAM printk_debug("blade3d: No SGRAM found.\n"); } } static void config_video_memory(void) { printk_debug("blade3d: Error: no video memory init\n"); } static void set_video_mode(void) { BYTE i; BYTE Old_value; lpDef_Reg_struct lpMode3_reg; lpMode3_reg = &Mode3_reg[0]; printk_debug("blade3d: setting video mode\n"); outp(0x3c2, 0x67); for (i = 0; i < Length_Mode3_reg; i++) { if (lpMode3_reg[i].rPort == Port_BRX) { inp(0x3DA); delay(3); outp(lpMode3_reg[i].rPort, lpMode3_reg[i].rIndex); outp(lpMode3_reg[i].rPort, lpMode3_reg[i].rValue); } else { outp(lpMode3_reg[i].rPort, lpMode3_reg[i].rIndex); Old_value = inp(lpMode3_reg[i].rPort + 1); outp(lpMode3_reg[i].rPort + 1, lpMode3_reg[i]. rValue | (Old_value & lpMode3_reg[i].rMask)); } } //set_font(); //clear_MEM(); } static void set_font(void) { printk_debug("blade3d: setting font (not implemented)\n"); } static void clear_MEM(void) { //_fmemset(MK_FP(0xb800,0),0x720,0x4000); __asm__("push %ax\n\t" "push %cx\n\t" "push %di\n\t" "push %es\n\t" "mov %ax, 0xb800\n\t" "mov %es, %ax\n\t" "mov %ax, 0x720\n\t" "mov %cx, 0x4000\n\t" "xor %di, %di\n\t" "rep stosw\n\t" "pop %es\n\t" "pop %di\n\t" "pop %cx\n\t" "pop %ax\n\t" ); } static void trident_blade3d_init(struct device *dev) { printk_info("blade3d: initializing video card\n"); init9880(); } static struct device_operations trident_blade3d_ops = { .read_resources = pci_dev_read_resources, .set_resources = pci_dev_set_resources, .enable_resources = pci_dev_enable_resources, .init = trident_blade3d_init, .scan_bus = 0, }; static struct pci_driver trident_blade3d_driver __pci_driver = { .ops = &trident_blade3d_ops, .vendor = 0x1023, .device = 0x9880, };