Home | History | Annotate | Download | only in vgabios
      1 /*
      2  *
      3  * BIOS Memory
      4  *
      5  */
      6 #define BIOSMEM_SEG 0x40
      7 
      8 #define BIOSMEM_INITIAL_MODE  0x10
      9 #define BIOSMEM_CURRENT_MODE  0x49
     10 #define BIOSMEM_NB_COLS       0x4A
     11 #define BIOSMEM_PAGE_SIZE     0x4C
     12 #define BIOSMEM_CURRENT_START 0x4E
     13 #define BIOSMEM_CURSOR_POS    0x50
     14 #define BIOSMEM_CURSOR_TYPE   0x60
     15 #define BIOSMEM_CURRENT_PAGE  0x62
     16 #define BIOSMEM_CRTC_ADDRESS  0x63
     17 #define BIOSMEM_CURRENT_MSR   0x65
     18 #define BIOSMEM_CURRENT_PAL   0x66
     19 #define BIOSMEM_NB_ROWS       0x84
     20 #define BIOSMEM_CHAR_HEIGHT   0x85
     21 #define BIOSMEM_VIDEO_CTL     0x87
     22 #define BIOSMEM_SWITCHES      0x88
     23 #define BIOSMEM_MODESET_CTL   0x89
     24 #define BIOSMEM_DCC_INDEX     0x8A
     25 #define BIOSMEM_VS_POINTER    0xA8
     26 #define BIOSMEM_VBE_FLAG      0xB9
     27 #define BIOSMEM_VBE_MODE      0xBA
     28 
     29 
     30 /*
     31  *
     32  * VGA registers
     33  *
     34  */
     35 #define VGAREG_ACTL_ADDRESS            0x3c0
     36 #define VGAREG_ACTL_WRITE_DATA         0x3c0
     37 #define VGAREG_ACTL_READ_DATA          0x3c1
     38 
     39 #define VGAREG_INPUT_STATUS            0x3c2
     40 #define VGAREG_WRITE_MISC_OUTPUT       0x3c2
     41 #define VGAREG_VIDEO_ENABLE            0x3c3
     42 #define VGAREG_SEQU_ADDRESS            0x3c4
     43 #define VGAREG_SEQU_DATA               0x3c5
     44 
     45 #define VGAREG_PEL_MASK                0x3c6
     46 #define VGAREG_DAC_STATE               0x3c7
     47 #define VGAREG_DAC_READ_ADDRESS        0x3c7
     48 #define VGAREG_DAC_WRITE_ADDRESS       0x3c8
     49 #define VGAREG_DAC_DATA                0x3c9
     50 
     51 #define VGAREG_READ_FEATURE_CTL        0x3ca
     52 #define VGAREG_READ_MISC_OUTPUT        0x3cc
     53 
     54 #define VGAREG_GRDC_ADDRESS            0x3ce
     55 #define VGAREG_GRDC_DATA               0x3cf
     56 
     57 #define VGAREG_MDA_CRTC_ADDRESS        0x3b4
     58 #define VGAREG_MDA_CRTC_DATA           0x3b5
     59 #define VGAREG_VGA_CRTC_ADDRESS        0x3d4
     60 #define VGAREG_VGA_CRTC_DATA           0x3d5
     61 
     62 #define VGAREG_MDA_WRITE_FEATURE_CTL   0x3ba
     63 #define VGAREG_VGA_WRITE_FEATURE_CTL   0x3da
     64 #define VGAREG_ACTL_RESET              0x3da
     65 
     66 #define VGAREG_MDA_MODECTL             0x3b8
     67 #define VGAREG_CGA_MODECTL             0x3d8
     68 #define VGAREG_CGA_PALETTE             0x3d9
     69 
     70 /* Video memory */
     71 #define VGAMEM_GRAPH 0xA000
     72 #define VGAMEM_CTEXT 0xB800
     73 #define VGAMEM_MTEXT 0xB000
     74 
     75 /*
     76  *
     77  * Tables of default values for each mode
     78  *
     79  */
     80 #define MODE_MAX   15
     81 #define TEXT       0x00
     82 #define GRAPH      0x01
     83 
     84 #define CTEXT      0x00
     85 #define MTEXT      0x01
     86 #define CGA        0x02
     87 #define PLANAR1    0x03
     88 #define PLANAR4    0x04
     89 #define LINEAR8    0x05
     90 
     91 // for SVGA
     92 #define LINEAR15   0x10
     93 #define LINEAR16   0x11
     94 #define LINEAR24   0x12
     95 #define LINEAR32   0x13
     96 
     97 typedef struct
     98 {Bit8u  svgamode;
     99  Bit8u  class;    /* TEXT, GRAPH */
    100  Bit8u  memmodel; /* CTEXT,MTEXT,CGA,PL1,PL2,PL4,P8,P15,P16,P24,P32 */
    101  Bit8u  pixbits;
    102  Bit16u sstart;
    103  Bit8u  pelmask;
    104  Bit8u  dacmodel; /* 0 1 2 3 */
    105 } VGAMODES;
    106 
    107 static VGAMODES vga_modes[MODE_MAX+1]=
    108 {//mode  class  model bits sstart  pelm  dac
    109  {0x00, TEXT,  CTEXT,   4, 0xB800, 0xFF, 0x02},
    110  {0x01, TEXT,  CTEXT,   4, 0xB800, 0xFF, 0x02},
    111  {0x02, TEXT,  CTEXT,   4, 0xB800, 0xFF, 0x02},
    112  {0x03, TEXT,  CTEXT,   4, 0xB800, 0xFF, 0x02},
    113  {0x04, GRAPH, CGA,     2, 0xB800, 0xFF, 0x01},
    114  {0x05, GRAPH, CGA,     2, 0xB800, 0xFF, 0x01},
    115  {0x06, GRAPH, CGA,     1, 0xB800, 0xFF, 0x01},
    116  {0x07, TEXT,  MTEXT,   4, 0xB000, 0xFF, 0x00},
    117  {0x0D, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x01},
    118  {0x0E, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x01},
    119  {0x0F, GRAPH, PLANAR1, 1, 0xA000, 0xFF, 0x00},
    120  {0x10, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x02},
    121  {0x11, GRAPH, PLANAR1, 1, 0xA000, 0xFF, 0x02},
    122  {0x12, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x02},
    123  {0x13, GRAPH, LINEAR8, 8, 0xA000, 0xFF, 0x03},
    124  {0x6A, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x02}
    125 };
    126 
    127 /* convert index in vga_modes[] to index in video_param_table[] */
    128 static Bit8u line_to_vpti[MODE_MAX+1]={
    129     0x17, 0x17, 0x18, 0x18, 0x04, 0x05, 0x06, 0x07,
    130     0x0d, 0x0e, 0x11, 0x12, 0x1a, 0x1b, 0x1c, 0x1d,
    131 };
    132 
    133 /* Default Palette */
    134 #define DAC_MAX_MODEL 3
    135 
    136 static Bit8u dac_regs[DAC_MAX_MODEL+1]=
    137 {0x3f,0x3f,0x3f,0xff};
    138 
    139 /* standard BIOS Video Parameter Table */
    140 typedef struct {
    141     Bit8u  twidth;
    142     Bit8u  theightm1;
    143     Bit8u  cheight;
    144     Bit8u  slength_l;
    145     Bit8u  slength_h;
    146     Bit8u  sequ_regs[4];
    147     Bit8u  miscreg;
    148     Bit8u  crtc_regs[25];
    149     Bit8u  actl_regs[20];
    150     Bit8u  grdc_regs[9];
    151 } VideoParamTableEntry;
    152 
    153 static VideoParamTableEntry video_param_table[30] = {
    154 {
    155  /* index=0x00 no mode defined */
    156  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    157  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    158  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    159  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    160  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    161  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    162  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    163  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    164 },
    165 {
    166  /* index=0x01 no mode defined */
    167  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    168  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    169  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    170  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    171  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    172  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    173  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    174  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    175 },
    176 {
    177  /* index=0x02 no mode defined */
    178  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    179  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    180  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    181  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    182  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    183  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    184  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    185  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    186 },
    187 {
    188  /* index=0x03 no mode defined */
    189  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    190  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    191  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    192  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    193  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    194  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    195  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    196  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    197 },
    198 {
    199  /* index=0x04 vga mode 0x04 */
    200  40, 24, 8, 0x00, 0x08, /* tw, th-1, ch, slength */
    201  0x09, 0x03, 0x00, 0x02, /* sequ_regs */
    202  0x63, /* miscreg */
    203  0x2d, 0x27, 0x28, 0x90, 0x2b, 0x80, 0xbf, 0x1f,
    204  0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    205  0x9c, 0x8e, 0x8f, 0x14, 0x00, 0x96, 0xb9, 0xa2,
    206  0xff, /* crtc_regs */
    207  0x00, 0x13, 0x15, 0x17, 0x02, 0x04, 0x06, 0x07,
    208  0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
    209  0x01, 0x00, 0x03, 0x00, /* actl_regs */
    210  0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0f, 0x0f, 0xff, /* grdc_regs */
    211 },
    212 {
    213  /* index=0x05 vga mode 0x05 */
    214  40, 24, 8, 0x00, 0x08, /* tw, th-1, ch, slength */
    215  0x09, 0x03, 0x00, 0x02, /* sequ_regs */
    216  0x63, /* miscreg */
    217  0x2d, 0x27, 0x28, 0x90, 0x2b, 0x80, 0xbf, 0x1f,
    218  0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    219  0x9c, 0x8e, 0x8f, 0x14, 0x00, 0x96, 0xb9, 0xa2,
    220  0xff, /* crtc_regs */
    221  0x00, 0x13, 0x15, 0x17, 0x02, 0x04, 0x06, 0x07,
    222  0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
    223  0x01, 0x00, 0x03, 0x00, /* actl_regs */
    224  0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0f, 0x0f, 0xff, /* grdc_regs */
    225 },
    226 {
    227  /* index=0x06 vga mode 0x06 */
    228  80, 24, 8, 0x00, 0x10, /* tw, th-1, ch, slength */
    229  0x01, 0x01, 0x00, 0x06, /* sequ_regs */
    230  0x63, /* miscreg */
    231  0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
    232  0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    233  0x9c, 0x8e, 0x8f, 0x28, 0x00, 0x96, 0xb9, 0xc2,
    234  0xff, /* crtc_regs */
    235  0x00, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
    236  0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
    237  0x01, 0x00, 0x01, 0x00, /* actl_regs */
    238  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0f, 0xff, /* grdc_regs */
    239 },
    240 {
    241  /* index=0x07 vga mode 0x07 */
    242  80, 24, 16, 0x00, 0x10, /* tw, th-1, ch, slength */
    243  0x00, 0x03, 0x00, 0x02, /* sequ_regs */
    244  0x66, /* miscreg */
    245  0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
    246  0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
    247  0x9c, 0x8e, 0x8f, 0x28, 0x0f, 0x96, 0xb9, 0xa3,
    248  0xff, /* crtc_regs */
    249  0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
    250  0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
    251  0x0e, 0x00, 0x0f, 0x08, /* actl_regs */
    252  0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x0f, 0xff, /* grdc_regs */
    253 },
    254 {
    255  /* index=0x08 no mode defined */
    256  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    257  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    258  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    259  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    260  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    261  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    262  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    263  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    264 },
    265 {
    266  /* index=0x09 no mode defined */
    267  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    268  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    269  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    270  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    271  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    272  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    273  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    274  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    275 },
    276 {
    277  /* index=0x0a no mode defined */
    278  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    279  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    280  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    281  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    282  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    283  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    284  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    285  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    286 },
    287 {
    288  /* index=0x0b no mode defined */
    289  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    290  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    291  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    292  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    293  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    294  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    295  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    296  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    297 },
    298 {
    299  /* index=0x0c no mode defined */
    300  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    301  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    302  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    303  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    304  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    305  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    306  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    307  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    308 },
    309 {
    310  /* index=0x0d vga mode 0x0d */
    311  40, 24, 8, 0x00, 0x20, /* tw, th-1, ch, slength */
    312  0x09, 0x0f, 0x00, 0x06, /* sequ_regs */
    313  0x63, /* miscreg */
    314  0x2d, 0x27, 0x28, 0x90, 0x2b, 0x80, 0xbf, 0x1f,
    315  0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    316  0x9c, 0x8e, 0x8f, 0x14, 0x00, 0x96, 0xb9, 0xe3,
    317  0xff, /* crtc_regs */
    318  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
    319  0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
    320  0x01, 0x00, 0x0f, 0x00, /* actl_regs */
    321  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
    322 },
    323 {
    324  /* index=0x0e vga mode 0x0e */
    325  80, 24, 8, 0x00, 0x40, /* tw, th-1, ch, slength */
    326  0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
    327  0x63, /* miscreg */
    328  0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
    329  0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    330  0x9c, 0x8e, 0x8f, 0x28, 0x00, 0x96, 0xb9, 0xe3,
    331  0xff, /* crtc_regs */
    332  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
    333  0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
    334  0x01, 0x00, 0x0f, 0x00, /* actl_regs */
    335  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
    336 },
    337 {
    338  /* index=0x0f no mode defined */
    339  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    340  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    341  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    342  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    343  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    344  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    345  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    346  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    347 },
    348 {
    349  /* index=0x10 no mode defined */
    350  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    351  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    352  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    353  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    354  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    355  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    356  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    357  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    358 },
    359 {
    360  /* index=0x11 vga mode 0x0f */
    361  80, 24, 14, 0x00, 0x80, /* tw, th-1, ch, slength */
    362  0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
    363  0xa3, /* miscreg */
    364  0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
    365  0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    366  0x83, 0x85, 0x5d, 0x28, 0x0f, 0x63, 0xba, 0xe3,
    367  0xff, /* crtc_regs */
    368  0x00, 0x08, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00,
    369  0x00, 0x08, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
    370  0x01, 0x00, 0x01, 0x00, /* actl_regs */
    371  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
    372 },
    373 {
    374  /* index=0x12 vga mode 0x10 */
    375  80, 24, 14, 0x00, 0x80, /* tw, th-1, ch, slength */
    376  0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
    377  0xa3, /* miscreg */
    378  0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
    379  0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    380  0x83, 0x85, 0x5d, 0x28, 0x0f, 0x63, 0xba, 0xe3,
    381  0xff, /* crtc_regs */
    382  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
    383  0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
    384  0x01, 0x00, 0x0f, 0x00, /* actl_regs */
    385  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
    386 },
    387 {
    388  /* index=0x13 no mode defined */
    389  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    390  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    391  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    392  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    393  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    394  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    395  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    396  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    397 },
    398 {
    399  /* index=0x14 no mode defined */
    400  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    401  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    402  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    403  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    404  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    405  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    406  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    407  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    408 },
    409 {
    410  /* index=0x15 no mode defined */
    411  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    412  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    413  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    414  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    415  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    416  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    417  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    418  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    419 },
    420 {
    421  /* index=0x16 no mode defined */
    422  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    423  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    424  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    425  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    426  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    427  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    428  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    429  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    430 },
    431 {
    432  /* index=0x17 vga mode 0x01 */
    433  40, 24, 16, 0x00, 0x08, /* tw, th-1, ch, slength */
    434  0x08, 0x03, 0x00, 0x02, /* sequ_regs */
    435  0x67, /* miscreg */
    436  0x2d, 0x27, 0x28, 0x90, 0x2b, 0xa0, 0xbf, 0x1f,
    437  0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
    438  0x9c, 0x8e, 0x8f, 0x14, 0x1f, 0x96, 0xb9, 0xa3,
    439  0xff, /* crtc_regs */
    440  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
    441  0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
    442  0x0c, 0x00, 0x0f, 0x08, /* actl_regs */
    443  0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x0f, 0xff, /* grdc_regs */
    444 },
    445 {
    446  /* index=0x18 vga mode 0x03 */
    447  80, 24, 16, 0x00, 0x10, /* tw, th-1, ch, slength */
    448  0x00, 0x03, 0x00, 0x02, /* sequ_regs */
    449  0x67, /* miscreg */
    450  0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
    451  0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
    452  0x9c, 0x8e, 0x8f, 0x28, 0x1f, 0x96, 0xb9, 0xa3,
    453  0xff, /* crtc_regs */
    454  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
    455  0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
    456  0x0c, 0x00, 0x0f, 0x08, /* actl_regs */
    457  0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x0f, 0xff, /* grdc_regs */
    458 },
    459 {
    460  /* index=0x19 vga mode 0x07 */
    461  80, 24, 16, 0x00, 0x10, /* tw, th-1, ch, slength */
    462  0x00, 0x03, 0x00, 0x02, /* sequ_regs */
    463  0x66, /* miscreg */
    464  0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
    465  0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
    466  0x9c, 0x8e, 0x8f, 0x28, 0x0f, 0x96, 0xb9, 0xa3,
    467  0xff, /* crtc_regs */
    468  0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
    469  0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
    470  0x0e, 0x00, 0x0f, 0x08, /* actl_regs */
    471  0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x0f, 0xff, /* grdc_regs */
    472 },
    473 {
    474  /* index=0x1a vga mode 0x11 */
    475  80, 29, 16, 0x00, 0x00, /* tw, th-1, ch, slength */
    476  0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
    477  0xe3, /* miscreg */
    478  0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0x0b, 0x3e,
    479  0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    480  0xea, 0x8c, 0xdf, 0x28, 0x00, 0xe7, 0x04, 0xe3,
    481  0xff, /* crtc_regs */
    482  0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f,
    483  0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f,
    484  0x01, 0x00, 0x0f, 0x00, /* actl_regs */
    485  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
    486 },
    487 {
    488  /* index=0x1b vga mode 0x12 */
    489  80, 29, 16, 0x00, 0x00, /* tw, th-1, ch, slength */
    490  0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
    491  0xe3, /* miscreg */
    492  0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0x0b, 0x3e,
    493  0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    494  0xea, 0x8c, 0xdf, 0x28, 0x00, 0xe7, 0x04, 0xe3,
    495  0xff, /* crtc_regs */
    496  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
    497  0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
    498  0x01, 0x00, 0x0f, 0x00, /* actl_regs */
    499  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
    500 },
    501 {
    502  /* index=0x1c vga mode 0x13 */
    503  40, 24, 8, 0x00, 0x00, /* tw, th-1, ch, slength */
    504  0x01, 0x0f, 0x00, 0x0e, /* sequ_regs */
    505  0x63, /* miscreg */
    506  0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
    507  0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    508  0x9c, 0x8e, 0x8f, 0x28, 0x40, 0x96, 0xb9, 0xa3,
    509  0xff, /* crtc_regs */
    510  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
    511  0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
    512  0x41, 0x00, 0x0f, 0x00, /* actl_regs */
    513  0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0f, 0xff, /* grdc_regs */
    514 },
    515 {
    516  /* index=0x1d vga mode 0x6a */
    517  100, 36, 16, 0x00, 0x00, /* tw, th-1, ch, slength */
    518  0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
    519  0xe3, /* miscreg */
    520  0x7f, 0x63, 0x63, 0x83, 0x6b, 0x1b, 0x72, 0xf0,
    521  0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    522  0x59, 0x8d, 0x57, 0x32, 0x00, 0x57, 0x73, 0xe3,
    523  0xff, /* crtc_regs */
    524  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
    525  0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
    526  0x01, 0x00, 0x0f, 0x00, /* actl_regs */
    527  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
    528 },
    529 };
    530 
    531 /* Mono */
    532 static Bit8u palette0[63+1][3]=
    533 {
    534   0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00,
    535   0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
    536   0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
    537   0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f,
    538   0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00,
    539   0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
    540   0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
    541   0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f
    542 };
    543 
    544 static Bit8u palette1[63+1][3]=
    545 {
    546   0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
    547   0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
    548   0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f,
    549   0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f,
    550   0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
    551   0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
    552   0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f,
    553   0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f
    554 };
    555 
    556 static Bit8u palette2[63+1][3]=
    557 {
    558   0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x2a,0x00, 0x2a,0x2a,0x2a,
    559   0x00,0x00,0x15, 0x00,0x00,0x3f, 0x00,0x2a,0x15, 0x00,0x2a,0x3f, 0x2a,0x00,0x15, 0x2a,0x00,0x3f, 0x2a,0x2a,0x15, 0x2a,0x2a,0x3f,
    560   0x00,0x15,0x00, 0x00,0x15,0x2a, 0x00,0x3f,0x00, 0x00,0x3f,0x2a, 0x2a,0x15,0x00, 0x2a,0x15,0x2a, 0x2a,0x3f,0x00, 0x2a,0x3f,0x2a,
    561   0x00,0x15,0x15, 0x00,0x15,0x3f, 0x00,0x3f,0x15, 0x00,0x3f,0x3f, 0x2a,0x15,0x15, 0x2a,0x15,0x3f, 0x2a,0x3f,0x15, 0x2a,0x3f,0x3f,
    562   0x15,0x00,0x00, 0x15,0x00,0x2a, 0x15,0x2a,0x00, 0x15,0x2a,0x2a, 0x3f,0x00,0x00, 0x3f,0x00,0x2a, 0x3f,0x2a,0x00, 0x3f,0x2a,0x2a,
    563   0x15,0x00,0x15, 0x15,0x00,0x3f, 0x15,0x2a,0x15, 0x15,0x2a,0x3f, 0x3f,0x00,0x15, 0x3f,0x00,0x3f, 0x3f,0x2a,0x15, 0x3f,0x2a,0x3f,
    564   0x15,0x15,0x00, 0x15,0x15,0x2a, 0x15,0x3f,0x00, 0x15,0x3f,0x2a, 0x3f,0x15,0x00, 0x3f,0x15,0x2a, 0x3f,0x3f,0x00, 0x3f,0x3f,0x2a,
    565   0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f
    566 };
    567 
    568 static Bit8u palette3[256][3]=
    569 {
    570   0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
    571   0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f,
    572   0x00,0x00,0x00, 0x05,0x05,0x05, 0x08,0x08,0x08, 0x0b,0x0b,0x0b, 0x0e,0x0e,0x0e, 0x11,0x11,0x11, 0x14,0x14,0x14, 0x18,0x18,0x18,
    573   0x1c,0x1c,0x1c, 0x20,0x20,0x20, 0x24,0x24,0x24, 0x28,0x28,0x28, 0x2d,0x2d,0x2d, 0x32,0x32,0x32, 0x38,0x38,0x38, 0x3f,0x3f,0x3f,
    574   0x00,0x00,0x3f, 0x10,0x00,0x3f, 0x1f,0x00,0x3f, 0x2f,0x00,0x3f, 0x3f,0x00,0x3f, 0x3f,0x00,0x2f, 0x3f,0x00,0x1f, 0x3f,0x00,0x10,
    575   0x3f,0x00,0x00, 0x3f,0x10,0x00, 0x3f,0x1f,0x00, 0x3f,0x2f,0x00, 0x3f,0x3f,0x00, 0x2f,0x3f,0x00, 0x1f,0x3f,0x00, 0x10,0x3f,0x00,
    576   0x00,0x3f,0x00, 0x00,0x3f,0x10, 0x00,0x3f,0x1f, 0x00,0x3f,0x2f, 0x00,0x3f,0x3f, 0x00,0x2f,0x3f, 0x00,0x1f,0x3f, 0x00,0x10,0x3f,
    577   0x1f,0x1f,0x3f, 0x27,0x1f,0x3f, 0x2f,0x1f,0x3f, 0x37,0x1f,0x3f, 0x3f,0x1f,0x3f, 0x3f,0x1f,0x37, 0x3f,0x1f,0x2f, 0x3f,0x1f,0x27,
    578 
    579   0x3f,0x1f,0x1f, 0x3f,0x27,0x1f, 0x3f,0x2f,0x1f, 0x3f,0x37,0x1f, 0x3f,0x3f,0x1f, 0x37,0x3f,0x1f, 0x2f,0x3f,0x1f, 0x27,0x3f,0x1f,
    580   0x1f,0x3f,0x1f, 0x1f,0x3f,0x27, 0x1f,0x3f,0x2f, 0x1f,0x3f,0x37, 0x1f,0x3f,0x3f, 0x1f,0x37,0x3f, 0x1f,0x2f,0x3f, 0x1f,0x27,0x3f,
    581   0x2d,0x2d,0x3f, 0x31,0x2d,0x3f, 0x36,0x2d,0x3f, 0x3a,0x2d,0x3f, 0x3f,0x2d,0x3f, 0x3f,0x2d,0x3a, 0x3f,0x2d,0x36, 0x3f,0x2d,0x31,
    582   0x3f,0x2d,0x2d, 0x3f,0x31,0x2d, 0x3f,0x36,0x2d, 0x3f,0x3a,0x2d, 0x3f,0x3f,0x2d, 0x3a,0x3f,0x2d, 0x36,0x3f,0x2d, 0x31,0x3f,0x2d,
    583   0x2d,0x3f,0x2d, 0x2d,0x3f,0x31, 0x2d,0x3f,0x36, 0x2d,0x3f,0x3a, 0x2d,0x3f,0x3f, 0x2d,0x3a,0x3f, 0x2d,0x36,0x3f, 0x2d,0x31,0x3f,
    584   0x00,0x00,0x1c, 0x07,0x00,0x1c, 0x0e,0x00,0x1c, 0x15,0x00,0x1c, 0x1c,0x00,0x1c, 0x1c,0x00,0x15, 0x1c,0x00,0x0e, 0x1c,0x00,0x07,
    585   0x1c,0x00,0x00, 0x1c,0x07,0x00, 0x1c,0x0e,0x00, 0x1c,0x15,0x00, 0x1c,0x1c,0x00, 0x15,0x1c,0x00, 0x0e,0x1c,0x00, 0x07,0x1c,0x00,
    586   0x00,0x1c,0x00, 0x00,0x1c,0x07, 0x00,0x1c,0x0e, 0x00,0x1c,0x15, 0x00,0x1c,0x1c, 0x00,0x15,0x1c, 0x00,0x0e,0x1c, 0x00,0x07,0x1c,
    587 
    588   0x0e,0x0e,0x1c, 0x11,0x0e,0x1c, 0x15,0x0e,0x1c, 0x18,0x0e,0x1c, 0x1c,0x0e,0x1c, 0x1c,0x0e,0x18, 0x1c,0x0e,0x15, 0x1c,0x0e,0x11,
    589   0x1c,0x0e,0x0e, 0x1c,0x11,0x0e, 0x1c,0x15,0x0e, 0x1c,0x18,0x0e, 0x1c,0x1c,0x0e, 0x18,0x1c,0x0e, 0x15,0x1c,0x0e, 0x11,0x1c,0x0e,
    590   0x0e,0x1c,0x0e, 0x0e,0x1c,0x11, 0x0e,0x1c,0x15, 0x0e,0x1c,0x18, 0x0e,0x1c,0x1c, 0x0e,0x18,0x1c, 0x0e,0x15,0x1c, 0x0e,0x11,0x1c,
    591   0x14,0x14,0x1c, 0x16,0x14,0x1c, 0x18,0x14,0x1c, 0x1a,0x14,0x1c, 0x1c,0x14,0x1c, 0x1c,0x14,0x1a, 0x1c,0x14,0x18, 0x1c,0x14,0x16,
    592   0x1c,0x14,0x14, 0x1c,0x16,0x14, 0x1c,0x18,0x14, 0x1c,0x1a,0x14, 0x1c,0x1c,0x14, 0x1a,0x1c,0x14, 0x18,0x1c,0x14, 0x16,0x1c,0x14,
    593   0x14,0x1c,0x14, 0x14,0x1c,0x16, 0x14,0x1c,0x18, 0x14,0x1c,0x1a, 0x14,0x1c,0x1c, 0x14,0x1a,0x1c, 0x14,0x18,0x1c, 0x14,0x16,0x1c,
    594   0x00,0x00,0x10, 0x04,0x00,0x10, 0x08,0x00,0x10, 0x0c,0x00,0x10, 0x10,0x00,0x10, 0x10,0x00,0x0c, 0x10,0x00,0x08, 0x10,0x00,0x04,
    595   0x10,0x00,0x00, 0x10,0x04,0x00, 0x10,0x08,0x00, 0x10,0x0c,0x00, 0x10,0x10,0x00, 0x0c,0x10,0x00, 0x08,0x10,0x00, 0x04,0x10,0x00,
    596 
    597   0x00,0x10,0x00, 0x00,0x10,0x04, 0x00,0x10,0x08, 0x00,0x10,0x0c, 0x00,0x10,0x10, 0x00,0x0c,0x10, 0x00,0x08,0x10, 0x00,0x04,0x10,
    598   0x08,0x08,0x10, 0x0a,0x08,0x10, 0x0c,0x08,0x10, 0x0e,0x08,0x10, 0x10,0x08,0x10, 0x10,0x08,0x0e, 0x10,0x08,0x0c, 0x10,0x08,0x0a,
    599   0x10,0x08,0x08, 0x10,0x0a,0x08, 0x10,0x0c,0x08, 0x10,0x0e,0x08, 0x10,0x10,0x08, 0x0e,0x10,0x08, 0x0c,0x10,0x08, 0x0a,0x10,0x08,
    600   0x08,0x10,0x08, 0x08,0x10,0x0a, 0x08,0x10,0x0c, 0x08,0x10,0x0e, 0x08,0x10,0x10, 0x08,0x0e,0x10, 0x08,0x0c,0x10, 0x08,0x0a,0x10,
    601   0x0b,0x0b,0x10, 0x0c,0x0b,0x10, 0x0d,0x0b,0x10, 0x0f,0x0b,0x10, 0x10,0x0b,0x10, 0x10,0x0b,0x0f, 0x10,0x0b,0x0d, 0x10,0x0b,0x0c,
    602   0x10,0x0b,0x0b, 0x10,0x0c,0x0b, 0x10,0x0d,0x0b, 0x10,0x0f,0x0b, 0x10,0x10,0x0b, 0x0f,0x10,0x0b, 0x0d,0x10,0x0b, 0x0c,0x10,0x0b,
    603   0x0b,0x10,0x0b, 0x0b,0x10,0x0c, 0x0b,0x10,0x0d, 0x0b,0x10,0x0f, 0x0b,0x10,0x10, 0x0b,0x0f,0x10, 0x0b,0x0d,0x10, 0x0b,0x0c,0x10,
    604   0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00
    605 };
    606 
    607 static Bit8u static_functionality[0x10]=
    608 {
    609  /* 0 */ 0xff,  // All modes supported #1
    610  /* 1 */ 0xe0,  // All modes supported #2
    611  /* 2 */ 0x0f,  // All modes supported #3
    612  /* 3 */ 0x00, 0x00, 0x00, 0x00,  // reserved
    613  /* 7 */ 0x07,  // 200, 350, 400 scan lines
    614  /* 8 */ 0x02,  // mamimum number of visible charsets in text mode
    615  /* 9 */ 0x08,  // total number of charset blocks in text mode
    616  /* a */ 0xe7,  // Change to add new functions
    617  /* b */ 0x0c,  // Change to add new functions
    618  /* c */ 0x00,  // reserved
    619  /* d */ 0x00,  // reserved
    620  /* e */ 0x00,  // Change to add new functions
    621  /* f */ 0x00   // reserved
    622 };
    623