Add initial port of the "open source vga bios" project.
[seabios.git] / vgasrc / vgatables.c
1 // Tables used by VGA bios
2 //
3 // Copyright (C) 2009  Kevin O'Connor <kevin@koconnor.net>
4 // Copyright (C) 2001-2008 the LGPL VGABios developers Team
5 //
6 // This file may be distributed under the terms of the GNU LGPLv3 license.
7
8 #include "vgatables.h"
9
10 u16 video_save_pointer_table[14] VAR16;
11
12 struct vgamodes_s vga_modes[MODE_MAX + 1] VAR16 = {   //mode  class  model bits sstart  pelm  dac
13     {0x00, TEXT, CTEXT, 4, 0xB800, 0xFF, 0x02},
14     {0x01, TEXT, CTEXT, 4, 0xB800, 0xFF, 0x02},
15     {0x02, TEXT, CTEXT, 4, 0xB800, 0xFF, 0x02},
16     {0x03, TEXT, CTEXT, 4, 0xB800, 0xFF, 0x02},
17     {0x04, GRAPH, CGA, 2, 0xB800, 0xFF, 0x01},
18     {0x05, GRAPH, CGA, 2, 0xB800, 0xFF, 0x01},
19     {0x06, GRAPH, CGA, 1, 0xB800, 0xFF, 0x01},
20     {0x07, TEXT, MTEXT, 4, 0xB000, 0xFF, 0x00},
21     {0x0D, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x01},
22     {0x0E, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x01},
23     {0x0F, GRAPH, PLANAR1, 1, 0xA000, 0xFF, 0x00},
24     {0x10, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x02},
25     {0x11, GRAPH, PLANAR1, 1, 0xA000, 0xFF, 0x02},
26     {0x12, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x02},
27     {0x13, GRAPH, LINEAR8, 8, 0xA000, 0xFF, 0x03},
28     {0x6A, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x02}
29 };
30
31 /* convert index in vga_modes[] to index in video_param_table[] */
32 u8 line_to_vpti[MODE_MAX + 1] VAR16 = {
33     0x17, 0x17, 0x18, 0x18, 0x04, 0x05, 0x06, 0x07,
34     0x0d, 0x0e, 0x11, 0x12, 0x1a, 0x1b, 0x1c, 0x1d,
35 };
36
37 u8 dac_regs[DAC_MAX_MODEL + 1] VAR16 = { 0x3f, 0x3f, 0x3f, 0xff };
38
39 struct VideoParamTableEntry_s video_param_table[30] VAR16 = {
40     // index=0x00 no mode defined
41     {},
42     // index=0x01 no mode defined
43     {},
44     // index=0x02 no mode defined
45     {},
46     // index=0x03 no mode defined
47     {},
48     // index=0x04 vga mode 0x04
49     { 40, 24, 8, 0x0800,      /* tw, th-1, ch, slength */
50       { 0x09, 0x03, 0x00, 0x02 },    /* sequ_regs */
51       0x63,                      /* miscreg */
52       { 0x2d, 0x27, 0x28, 0x90, 0x2b, 0x80, 0xbf, 0x1f,
53         0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
54         0x9c, 0x8e, 0x8f, 0x14, 0x00, 0x96, 0xb9, 0xa2,
55         0xff },                      /* crtc_regs */
56       { 0x00, 0x13, 0x15, 0x17, 0x02, 0x04, 0x06, 0x07,
57         0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
58         0x01, 0x00, 0x03, 0x00 },    /* actl_regs */
59       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0f, 0x0f, 0xff }, /* grdc_regs */
60     },
61     /* index=0x05 vga mode 0x05 */
62     { 40, 24, 8, 0x0800,     /* tw, th-1, ch, slength */
63       { 0x09, 0x03, 0x00, 0x02 },    /* sequ_regs */
64       0x63,                      /* miscreg */
65       { 0x2d, 0x27, 0x28, 0x90, 0x2b, 0x80, 0xbf, 0x1f,
66         0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
67         0x9c, 0x8e, 0x8f, 0x14, 0x00, 0x96, 0xb9, 0xa2,
68         0xff },                      /* crtc_regs */
69       { 0x00, 0x13, 0x15, 0x17, 0x02, 0x04, 0x06, 0x07,
70         0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
71         0x01, 0x00, 0x03, 0x00 },    /* actl_regs */
72       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0f, 0x0f, 0xff }, /* grdc_regs */
73     },
74     /* index=0x06 vga mode 0x06 */
75     { 80, 24, 8, 0x1000,     /* tw, th-1, ch, slength */
76       { 0x01, 0x01, 0x00, 0x06 },    /* sequ_regs */
77       0x63,                      /* miscreg */
78       { 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
79         0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
80         0x9c, 0x8e, 0x8f, 0x28, 0x00, 0x96, 0xb9, 0xc2,
81         0xff },                      /* crtc_regs */
82       { 0x00, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
83         0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
84         0x01, 0x00, 0x01, 0x00 },    /* actl_regs */
85       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0f, 0xff }, /* grdc_regs */
86      },
87     /* index=0x07 vga mode 0x07 */
88     { 80, 24, 16, 0x1000,    /* tw, th-1, ch, slength */
89       { 0x00, 0x03, 0x00, 0x02 },    /* sequ_regs */
90       0x66,                      /* miscreg */
91       { 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
92         0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
93         0x9c, 0x8e, 0x8f, 0x28, 0x0f, 0x96, 0xb9, 0xa3,
94         0xff },                      /* crtc_regs */
95       { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
96         0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
97         0x0e, 0x00, 0x0f, 0x08 },    /* actl_regs */
98       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x0f, 0xff }, /* grdc_regs */
99      },
100     /* index=0x08 no mode defined */
101     {},
102     /* index=0x09 no mode defined */
103     {},
104     /* index=0x0a no mode defined */
105     {},
106     /* index=0x0b no mode defined */
107     {},
108     /* index=0x0c no mode defined */
109     {},
110     /* index=0x0d vga mode 0x0d */
111     { 40, 24, 8, 0x2000,     /* tw, th-1, ch, slength */
112       { 0x09, 0x0f, 0x00, 0x06 },    /* sequ_regs */
113       0x63,                      /* miscreg */
114       { 0x2d, 0x27, 0x28, 0x90, 0x2b, 0x80, 0xbf, 0x1f,
115         0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
116         0x9c, 0x8e, 0x8f, 0x14, 0x00, 0x96, 0xb9, 0xe3,
117         0xff },                      /* crtc_regs */
118       { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
119         0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
120         0x01, 0x00, 0x0f, 0x00 },    /* actl_regs */
121       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff }, /* grdc_regs */
122      },
123     /* index=0x0e vga mode 0x0e */
124     { 80, 24, 8, 0x4000,     /* tw, th-1, ch, slength */
125       { 0x01, 0x0f, 0x00, 0x06 },    /* sequ_regs */
126       0x63,                      /* miscreg */
127       { 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
128         0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
129         0x9c, 0x8e, 0x8f, 0x28, 0x00, 0x96, 0xb9, 0xe3,
130         0xff },                      /* crtc_regs */
131       { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
132         0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
133         0x01, 0x00, 0x0f, 0x00 },    /* actl_regs */
134       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff }, /* grdc_regs */
135      },
136     /* index=0x0f no mode defined */
137     {},
138     /* index=0x10 no mode defined */
139     {},
140     /* index=0x11 vga mode 0x0f */
141     { 80, 24, 14, 0x8000,    /* tw, th-1, ch, slength */
142       { 0x01, 0x0f, 0x00, 0x06 },    /* sequ_regs */
143       0xa3,                      /* miscreg */
144       { 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
145         0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
146         0x83, 0x85, 0x5d, 0x28, 0x0f, 0x63, 0xba, 0xe3,
147         0xff },                      /* crtc_regs */
148       { 0x00, 0x08, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00,
149         0x00, 0x08, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
150         0x01, 0x00, 0x01, 0x00 },    /* actl_regs */
151       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff }, /* grdc_regs */
152      },
153     /* index=0x12 vga mode 0x10 */
154     { 80, 24, 14, 0x8000,    /* tw, th-1, ch, slength */
155       { 0x01, 0x0f, 0x00, 0x06 },    /* sequ_regs */
156       0xa3,                      /* miscreg */
157       { 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
158         0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
159         0x83, 0x85, 0x5d, 0x28, 0x0f, 0x63, 0xba, 0xe3,
160         0xff },                      /* crtc_regs */
161       { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
162         0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
163         0x01, 0x00, 0x0f, 0x00 },    /* actl_regs */
164       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff }, /* grdc_regs */
165      },
166     /* index=0x13 no mode defined */
167     {},
168     /* index=0x14 no mode defined */
169     {},
170     /* index=0x15 no mode defined */
171     {},
172     /* index=0x16 no mode defined */
173     {},
174     /* index=0x17 vga mode 0x01 */
175     { 40, 24, 16, 0x0800,    /* tw, th-1, ch, slength */
176       { 0x08, 0x03, 0x00, 0x02 },    /* sequ_regs */
177       0x67,                      /* miscreg */
178       { 0x2d, 0x27, 0x28, 0x90, 0x2b, 0xa0, 0xbf, 0x1f,
179         0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
180         0x9c, 0x8e, 0x8f, 0x14, 0x1f, 0x96, 0xb9, 0xa3,
181         0xff },                      /* crtc_regs */
182       { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
183         0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
184         0x0c, 0x00, 0x0f, 0x08 },    /* actl_regs */
185       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x0f, 0xff }, /* grdc_regs */
186     },
187     /* index=0x18 vga mode 0x03 */
188     { 80, 24, 16, 0x1000,    /* tw, th-1, ch, slength */
189       { 0x00, 0x03, 0x00, 0x02 },    /* sequ_regs */
190       0x67,                      /* miscreg */
191       { 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
192         0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
193         0x9c, 0x8e, 0x8f, 0x28, 0x1f, 0x96, 0xb9, 0xa3,
194         0xff },                      /* crtc_regs */
195       { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
196         0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
197         0x0c, 0x00, 0x0f, 0x08 },    /* actl_regs */
198       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x0f, 0xff }, /* grdc_regs */
199      },
200     /* index=0x19 vga mode 0x07 */
201     { 80, 24, 16, 0x1000,    /* tw, th-1, ch, slength */
202       { 0x00, 0x03, 0x00, 0x02 },    /* sequ_regs */
203       0x66,                      /* miscreg */
204       { 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
205         0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
206         0x9c, 0x8e, 0x8f, 0x28, 0x0f, 0x96, 0xb9, 0xa3,
207         0xff },                      /* crtc_regs */
208       { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
209         0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
210         0x0e, 0x00, 0x0f, 0x08 },    /* actl_regs */
211       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x0f, 0xff }, /* grdc_regs */
212     },
213     /* index=0x1a vga mode 0x11 */
214     { 80, 29, 16, 0x0000,    /* tw, th-1, ch, slength */
215       { 0x01, 0x0f, 0x00, 0x06 },    /* sequ_regs */
216       0xe3,                      /* miscreg */
217       { 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0x0b, 0x3e,
218         0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
219         0xea, 0x8c, 0xdf, 0x28, 0x00, 0xe7, 0x04, 0xe3,
220         0xff },                      /* crtc_regs */
221       { 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f,
222         0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f,
223         0x01, 0x00, 0x0f, 0x00 },    /* actl_regs */
224       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff }, /* grdc_regs */
225     },
226     /* index=0x1b vga mode 0x12 */
227     { 80, 29, 16, 0x0000,    /* tw, th-1, ch, slength */
228       { 0x01, 0x0f, 0x00, 0x06 },    /* sequ_regs */
229       0xe3,                      /* miscreg */
230       { 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0x0b, 0x3e,
231         0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
232         0xea, 0x8c, 0xdf, 0x28, 0x00, 0xe7, 0x04, 0xe3,
233         0xff },                      /* crtc_regs */
234       { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
235         0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
236         0x01, 0x00, 0x0f, 0x00 },    /* actl_regs */
237       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff }, /* grdc_regs */
238      },
239     /* index=0x1c vga mode 0x13 */
240     { 40, 24, 8, 0x0000,     /* tw, th-1, ch, slength */
241       { 0x01, 0x0f, 0x00, 0x0e },    /* sequ_regs */
242       0x63,                      /* miscreg */
243       { 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
244         0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
245         0x9c, 0x8e, 0x8f, 0x28, 0x40, 0x96, 0xb9, 0xa3,
246         0xff },                      /* crtc_regs */
247       { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
248         0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
249         0x41, 0x00, 0x0f, 0x00 },    /* actl_regs */
250       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0f, 0xff }, /* grdc_regs */
251      },
252     /* index=0x1d vga mode 0x6a */
253     { 100, 36, 16, 0x0000,   /* tw, th-1, ch, slength */
254       { 0x01, 0x0f, 0x00, 0x06 },    /* sequ_regs */
255       0xe3,                      /* miscreg */
256       { 0x7f, 0x63, 0x63, 0x83, 0x6b, 0x1b, 0x72, 0xf0,
257         0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
258         0x59, 0x8d, 0x57, 0x32, 0x00, 0x57, 0x73, 0xe3,
259         0xff },                      /* crtc_regs */
260       { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
261         0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
262         0x01, 0x00, 0x0f, 0x00 },    /* actl_regs */
263       { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff }, /* grdc_regs */
264      },
265 };
266
267 /* Mono */
268 u8 palette0[] VAR16 = {
269   0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00,
270   0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
271   0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
272   0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f,
273   0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00,
274   0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
275   0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
276   0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f 
277 };
278
279 u8 palette1[] VAR16 = {
280   0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
281   0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
282   0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f,
283   0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f,
284   0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
285   0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
286   0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f,
287   0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f 
288 };
289
290 u8 palette2[] VAR16 = {
291   0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x2a,0x00, 0x2a,0x2a,0x2a,
292   0x00,0x00,0x15, 0x00,0x00,0x3f, 0x00,0x2a,0x15, 0x00,0x2a,0x3f, 0x2a,0x00,0x15, 0x2a,0x00,0x3f, 0x2a,0x2a,0x15, 0x2a,0x2a,0x3f,
293   0x00,0x15,0x00, 0x00,0x15,0x2a, 0x00,0x3f,0x00, 0x00,0x3f,0x2a, 0x2a,0x15,0x00, 0x2a,0x15,0x2a, 0x2a,0x3f,0x00, 0x2a,0x3f,0x2a,
294   0x00,0x15,0x15, 0x00,0x15,0x3f, 0x00,0x3f,0x15, 0x00,0x3f,0x3f, 0x2a,0x15,0x15, 0x2a,0x15,0x3f, 0x2a,0x3f,0x15, 0x2a,0x3f,0x3f,
295   0x15,0x00,0x00, 0x15,0x00,0x2a, 0x15,0x2a,0x00, 0x15,0x2a,0x2a, 0x3f,0x00,0x00, 0x3f,0x00,0x2a, 0x3f,0x2a,0x00, 0x3f,0x2a,0x2a,
296   0x15,0x00,0x15, 0x15,0x00,0x3f, 0x15,0x2a,0x15, 0x15,0x2a,0x3f, 0x3f,0x00,0x15, 0x3f,0x00,0x3f, 0x3f,0x2a,0x15, 0x3f,0x2a,0x3f,
297   0x15,0x15,0x00, 0x15,0x15,0x2a, 0x15,0x3f,0x00, 0x15,0x3f,0x2a, 0x3f,0x15,0x00, 0x3f,0x15,0x2a, 0x3f,0x3f,0x00, 0x3f,0x3f,0x2a,
298   0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f 
299 };
300
301 u8 palette3[] VAR16 = {
302   0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
303   0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f,
304   0x00,0x00,0x00, 0x05,0x05,0x05, 0x08,0x08,0x08, 0x0b,0x0b,0x0b, 0x0e,0x0e,0x0e, 0x11,0x11,0x11, 0x14,0x14,0x14, 0x18,0x18,0x18,
305   0x1c,0x1c,0x1c, 0x20,0x20,0x20, 0x24,0x24,0x24, 0x28,0x28,0x28, 0x2d,0x2d,0x2d, 0x32,0x32,0x32, 0x38,0x38,0x38, 0x3f,0x3f,0x3f,
306   0x00,0x00,0x3f, 0x10,0x00,0x3f, 0x1f,0x00,0x3f, 0x2f,0x00,0x3f, 0x3f,0x00,0x3f, 0x3f,0x00,0x2f, 0x3f,0x00,0x1f, 0x3f,0x00,0x10,
307   0x3f,0x00,0x00, 0x3f,0x10,0x00, 0x3f,0x1f,0x00, 0x3f,0x2f,0x00, 0x3f,0x3f,0x00, 0x2f,0x3f,0x00, 0x1f,0x3f,0x00, 0x10,0x3f,0x00,
308   0x00,0x3f,0x00, 0x00,0x3f,0x10, 0x00,0x3f,0x1f, 0x00,0x3f,0x2f, 0x00,0x3f,0x3f, 0x00,0x2f,0x3f, 0x00,0x1f,0x3f, 0x00,0x10,0x3f,
309   0x1f,0x1f,0x3f, 0x27,0x1f,0x3f, 0x2f,0x1f,0x3f, 0x37,0x1f,0x3f, 0x3f,0x1f,0x3f, 0x3f,0x1f,0x37, 0x3f,0x1f,0x2f, 0x3f,0x1f,0x27,
310
311   0x3f,0x1f,0x1f, 0x3f,0x27,0x1f, 0x3f,0x2f,0x1f, 0x3f,0x37,0x1f, 0x3f,0x3f,0x1f, 0x37,0x3f,0x1f, 0x2f,0x3f,0x1f, 0x27,0x3f,0x1f,
312   0x1f,0x3f,0x1f, 0x1f,0x3f,0x27, 0x1f,0x3f,0x2f, 0x1f,0x3f,0x37, 0x1f,0x3f,0x3f, 0x1f,0x37,0x3f, 0x1f,0x2f,0x3f, 0x1f,0x27,0x3f,
313   0x2d,0x2d,0x3f, 0x31,0x2d,0x3f, 0x36,0x2d,0x3f, 0x3a,0x2d,0x3f, 0x3f,0x2d,0x3f, 0x3f,0x2d,0x3a, 0x3f,0x2d,0x36, 0x3f,0x2d,0x31,
314   0x3f,0x2d,0x2d, 0x3f,0x31,0x2d, 0x3f,0x36,0x2d, 0x3f,0x3a,0x2d, 0x3f,0x3f,0x2d, 0x3a,0x3f,0x2d, 0x36,0x3f,0x2d, 0x31,0x3f,0x2d,
315   0x2d,0x3f,0x2d, 0x2d,0x3f,0x31, 0x2d,0x3f,0x36, 0x2d,0x3f,0x3a, 0x2d,0x3f,0x3f, 0x2d,0x3a,0x3f, 0x2d,0x36,0x3f, 0x2d,0x31,0x3f,
316   0x00,0x00,0x1c, 0x07,0x00,0x1c, 0x0e,0x00,0x1c, 0x15,0x00,0x1c, 0x1c,0x00,0x1c, 0x1c,0x00,0x15, 0x1c,0x00,0x0e, 0x1c,0x00,0x07,
317   0x1c,0x00,0x00, 0x1c,0x07,0x00, 0x1c,0x0e,0x00, 0x1c,0x15,0x00, 0x1c,0x1c,0x00, 0x15,0x1c,0x00, 0x0e,0x1c,0x00, 0x07,0x1c,0x00,
318   0x00,0x1c,0x00, 0x00,0x1c,0x07, 0x00,0x1c,0x0e, 0x00,0x1c,0x15, 0x00,0x1c,0x1c, 0x00,0x15,0x1c, 0x00,0x0e,0x1c, 0x00,0x07,0x1c,
319
320   0x0e,0x0e,0x1c, 0x11,0x0e,0x1c, 0x15,0x0e,0x1c, 0x18,0x0e,0x1c, 0x1c,0x0e,0x1c, 0x1c,0x0e,0x18, 0x1c,0x0e,0x15, 0x1c,0x0e,0x11,
321   0x1c,0x0e,0x0e, 0x1c,0x11,0x0e, 0x1c,0x15,0x0e, 0x1c,0x18,0x0e, 0x1c,0x1c,0x0e, 0x18,0x1c,0x0e, 0x15,0x1c,0x0e, 0x11,0x1c,0x0e,
322   0x0e,0x1c,0x0e, 0x0e,0x1c,0x11, 0x0e,0x1c,0x15, 0x0e,0x1c,0x18, 0x0e,0x1c,0x1c, 0x0e,0x18,0x1c, 0x0e,0x15,0x1c, 0x0e,0x11,0x1c,
323   0x14,0x14,0x1c, 0x16,0x14,0x1c, 0x18,0x14,0x1c, 0x1a,0x14,0x1c, 0x1c,0x14,0x1c, 0x1c,0x14,0x1a, 0x1c,0x14,0x18, 0x1c,0x14,0x16,
324   0x1c,0x14,0x14, 0x1c,0x16,0x14, 0x1c,0x18,0x14, 0x1c,0x1a,0x14, 0x1c,0x1c,0x14, 0x1a,0x1c,0x14, 0x18,0x1c,0x14, 0x16,0x1c,0x14,
325   0x14,0x1c,0x14, 0x14,0x1c,0x16, 0x14,0x1c,0x18, 0x14,0x1c,0x1a, 0x14,0x1c,0x1c, 0x14,0x1a,0x1c, 0x14,0x18,0x1c, 0x14,0x16,0x1c,
326   0x00,0x00,0x10, 0x04,0x00,0x10, 0x08,0x00,0x10, 0x0c,0x00,0x10, 0x10,0x00,0x10, 0x10,0x00,0x0c, 0x10,0x00,0x08, 0x10,0x00,0x04,
327   0x10,0x00,0x00, 0x10,0x04,0x00, 0x10,0x08,0x00, 0x10,0x0c,0x00, 0x10,0x10,0x00, 0x0c,0x10,0x00, 0x08,0x10,0x00, 0x04,0x10,0x00,
328
329   0x00,0x10,0x00, 0x00,0x10,0x04, 0x00,0x10,0x08, 0x00,0x10,0x0c, 0x00,0x10,0x10, 0x00,0x0c,0x10, 0x00,0x08,0x10, 0x00,0x04,0x10,
330   0x08,0x08,0x10, 0x0a,0x08,0x10, 0x0c,0x08,0x10, 0x0e,0x08,0x10, 0x10,0x08,0x10, 0x10,0x08,0x0e, 0x10,0x08,0x0c, 0x10,0x08,0x0a,
331   0x10,0x08,0x08, 0x10,0x0a,0x08, 0x10,0x0c,0x08, 0x10,0x0e,0x08, 0x10,0x10,0x08, 0x0e,0x10,0x08, 0x0c,0x10,0x08, 0x0a,0x10,0x08,
332   0x08,0x10,0x08, 0x08,0x10,0x0a, 0x08,0x10,0x0c, 0x08,0x10,0x0e, 0x08,0x10,0x10, 0x08,0x0e,0x10, 0x08,0x0c,0x10, 0x08,0x0a,0x10,
333   0x0b,0x0b,0x10, 0x0c,0x0b,0x10, 0x0d,0x0b,0x10, 0x0f,0x0b,0x10, 0x10,0x0b,0x10, 0x10,0x0b,0x0f, 0x10,0x0b,0x0d, 0x10,0x0b,0x0c,
334   0x10,0x0b,0x0b, 0x10,0x0c,0x0b, 0x10,0x0d,0x0b, 0x10,0x0f,0x0b, 0x10,0x10,0x0b, 0x0f,0x10,0x0b, 0x0d,0x10,0x0b, 0x0c,0x10,0x0b,
335   0x0b,0x10,0x0b, 0x0b,0x10,0x0c, 0x0b,0x10,0x0d, 0x0b,0x10,0x0f, 0x0b,0x10,0x10, 0x0b,0x0f,0x10, 0x0b,0x0d,0x10, 0x0b,0x0c,0x10,
336   0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00
337 };
338
339 u8 static_functionality[0x10] VAR16 = {
340  /* 0 */ 0xff,  // All modes supported #1
341  /* 1 */ 0xe0,  // All modes supported #2
342  /* 2 */ 0x0f,  // All modes supported #3
343  /* 3 */ 0x00, 0x00, 0x00, 0x00,  // reserved
344  /* 7 */ 0x07,  // 200, 350, 400 scan lines
345  /* 8 */ 0x02,  // mamimum number of visible charsets in text mode
346  /* 9 */ 0x08,  // total number of charset blocks in text mode
347  /* a */ 0xe7,  // Change to add new functions
348  /* b */ 0x0c,  // Change to add new functions
349  /* c */ 0x00,  // reserved
350  /* d */ 0x00,  // reserved
351  /* e */ 0x00,  // Change to add new functions
352  /* f */ 0x00   // reserved
353 };