1
// Tables used by VGA bios
3
// Copyright (C) 2009 Kevin O'Connor <kevin@koconnor.net>
4
// Copyright (C) 2001-2008 the LGPL VGABios developers Team
6
// This file may be distributed under the terms of the GNU LGPLv3 license.
9
#include "vgatables.h" // struct VideoParamTableEntry_s
11
#define ARRAY_SIZE(var) (sizeof(var) / sizeof(var[0]))
12
#define GET_GLOBAL(var) (var)
15
/****************************************************************
16
* Video parameter table
17
****************************************************************/
19
struct VideoParam_s video_param_table[] VAR16 = {
20
// index=0x00 no mode defined
22
// index=0x01 no mode defined
24
// index=0x02 no mode defined
26
// index=0x03 no mode defined
28
// index=0x04 vga mode 0x04
29
{ 40, 24, 8, 0x0800, /* tw, th-1, ch, slength */
30
{ 0x09, 0x03, 0x00, 0x02 }, /* sequ_regs */
32
{ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0x80, 0xbf, 0x1f,
33
0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34
0x9c, 0x8e, 0x8f, 0x14, 0x00, 0x96, 0xb9, 0xa2,
35
0xff }, /* crtc_regs */
36
{ 0x00, 0x13, 0x15, 0x17, 0x02, 0x04, 0x06, 0x07,
37
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
38
0x01, 0x00, 0x03, 0x00 }, /* actl_regs */
39
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0f, 0x0f, 0xff }, /* grdc_regs */
41
/* index=0x05 vga mode 0x05 */
42
{ 40, 24, 8, 0x0800, /* tw, th-1, ch, slength */
43
{ 0x09, 0x03, 0x00, 0x02 }, /* sequ_regs */
45
{ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0x80, 0xbf, 0x1f,
46
0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
47
0x9c, 0x8e, 0x8f, 0x14, 0x00, 0x96, 0xb9, 0xa2,
48
0xff }, /* crtc_regs */
49
{ 0x00, 0x13, 0x15, 0x17, 0x02, 0x04, 0x06, 0x07,
50
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
51
0x01, 0x00, 0x03, 0x00 }, /* actl_regs */
52
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0f, 0x0f, 0xff }, /* grdc_regs */
54
/* index=0x06 vga mode 0x06 */
55
{ 80, 24, 8, 0x1000, /* tw, th-1, ch, slength */
56
{ 0x01, 0x01, 0x00, 0x06 }, /* sequ_regs */
58
{ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
59
0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
60
0x9c, 0x8e, 0x8f, 0x28, 0x00, 0x96, 0xb9, 0xc2,
61
0xff }, /* crtc_regs */
62
{ 0x00, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
63
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
64
0x01, 0x00, 0x01, 0x00 }, /* actl_regs */
65
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0f, 0xff }, /* grdc_regs */
67
/* index=0x07 vga mode 0x07 */
68
{ 80, 24, 16, 0x1000, /* tw, th-1, ch, slength */
69
{ 0x00, 0x03, 0x00, 0x02 }, /* sequ_regs */
71
{ 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
72
0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
73
0x9c, 0x8e, 0x8f, 0x28, 0x0f, 0x96, 0xb9, 0xa3,
74
0xff }, /* crtc_regs */
75
{ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
76
0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
77
0x0e, 0x00, 0x0f, 0x08 }, /* actl_regs */
78
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x0f, 0xff }, /* grdc_regs */
80
/* index=0x08 no mode defined */
82
/* index=0x09 no mode defined */
84
/* index=0x0a no mode defined */
86
/* index=0x0b no mode defined */
88
/* index=0x0c no mode defined */
90
/* index=0x0d vga mode 0x0d */
91
{ 40, 24, 8, 0x2000, /* tw, th-1, ch, slength */
92
{ 0x09, 0x0f, 0x00, 0x06 }, /* sequ_regs */
94
{ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0x80, 0xbf, 0x1f,
95
0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96
0x9c, 0x8e, 0x8f, 0x14, 0x00, 0x96, 0xb9, 0xe3,
97
0xff }, /* crtc_regs */
98
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
99
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
100
0x01, 0x00, 0x0f, 0x00 }, /* actl_regs */
101
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff }, /* grdc_regs */
103
/* index=0x0e vga mode 0x0e */
104
{ 80, 24, 8, 0x4000, /* tw, th-1, ch, slength */
105
{ 0x01, 0x0f, 0x00, 0x06 }, /* sequ_regs */
107
{ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
108
0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
109
0x9c, 0x8e, 0x8f, 0x28, 0x00, 0x96, 0xb9, 0xe3,
110
0xff }, /* crtc_regs */
111
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
112
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
113
0x01, 0x00, 0x0f, 0x00 }, /* actl_regs */
114
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff }, /* grdc_regs */
116
/* index=0x0f no mode defined */
118
/* index=0x10 no mode defined */
120
/* index=0x11 vga mode 0x0f */
121
{ 80, 24, 14, 0x8000, /* tw, th-1, ch, slength */
122
{ 0x01, 0x0f, 0x00, 0x06 }, /* sequ_regs */
124
{ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
125
0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
126
0x83, 0x85, 0x5d, 0x28, 0x0f, 0x63, 0xba, 0xe3,
127
0xff }, /* crtc_regs */
128
{ 0x00, 0x08, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00,
129
0x00, 0x08, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
130
0x01, 0x00, 0x01, 0x00 }, /* actl_regs */
131
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff }, /* grdc_regs */
133
/* index=0x12 vga mode 0x10 */
134
{ 80, 24, 14, 0x8000, /* tw, th-1, ch, slength */
135
{ 0x01, 0x0f, 0x00, 0x06 }, /* sequ_regs */
137
{ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
138
0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
139
0x83, 0x85, 0x5d, 0x28, 0x0f, 0x63, 0xba, 0xe3,
140
0xff }, /* crtc_regs */
141
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
142
0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
143
0x01, 0x00, 0x0f, 0x00 }, /* actl_regs */
144
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff }, /* grdc_regs */
146
/* index=0x13 no mode defined */
148
/* index=0x14 no mode defined */
150
/* index=0x15 no mode defined */
152
/* index=0x16 no mode defined */
154
/* index=0x17 vga mode 0x01 */
155
{ 40, 24, 16, 0x0800, /* tw, th-1, ch, slength */
156
{ 0x08, 0x03, 0x00, 0x02 }, /* sequ_regs */
158
{ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0xa0, 0xbf, 0x1f,
159
0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
160
0x9c, 0x8e, 0x8f, 0x14, 0x1f, 0x96, 0xb9, 0xa3,
161
0xff }, /* crtc_regs */
162
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
163
0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
164
0x0c, 0x00, 0x0f, 0x08 }, /* actl_regs */
165
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x0f, 0xff }, /* grdc_regs */
167
/* index=0x18 vga mode 0x03 */
168
{ 80, 24, 16, 0x1000, /* tw, th-1, ch, slength */
169
{ 0x00, 0x03, 0x00, 0x02 }, /* sequ_regs */
171
{ 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
172
0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
173
0x9c, 0x8e, 0x8f, 0x28, 0x1f, 0x96, 0xb9, 0xa3,
174
0xff }, /* crtc_regs */
175
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
176
0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
177
0x0c, 0x00, 0x0f, 0x08 }, /* actl_regs */
178
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x0f, 0xff }, /* grdc_regs */
180
/* index=0x19 vga mode 0x07 */
181
{ 80, 24, 16, 0x1000, /* tw, th-1, ch, slength */
182
{ 0x00, 0x03, 0x00, 0x02 }, /* sequ_regs */
184
{ 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
185
0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
186
0x9c, 0x8e, 0x8f, 0x28, 0x0f, 0x96, 0xb9, 0xa3,
187
0xff }, /* crtc_regs */
188
{ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
189
0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
190
0x0e, 0x00, 0x0f, 0x08 }, /* actl_regs */
191
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x0f, 0xff }, /* grdc_regs */
193
/* index=0x1a vga mode 0x11 */
194
{ 80, 29, 16, 0x0000, /* tw, th-1, ch, slength */
195
{ 0x01, 0x0f, 0x00, 0x06 }, /* sequ_regs */
197
{ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0x0b, 0x3e,
198
0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
199
0xea, 0x8c, 0xdf, 0x28, 0x00, 0xe7, 0x04, 0xe3,
200
0xff }, /* crtc_regs */
201
{ 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f,
202
0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f,
203
0x01, 0x00, 0x0f, 0x00 }, /* actl_regs */
204
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff }, /* grdc_regs */
206
/* index=0x1b vga mode 0x12 */
207
{ 80, 29, 16, 0x0000, /* tw, th-1, ch, slength */
208
{ 0x01, 0x0f, 0x00, 0x06 }, /* sequ_regs */
210
{ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0x0b, 0x3e,
211
0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
212
0xea, 0x8c, 0xdf, 0x28, 0x00, 0xe7, 0x04, 0xe3,
213
0xff }, /* crtc_regs */
214
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
215
0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
216
0x01, 0x00, 0x0f, 0x00 }, /* actl_regs */
217
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff }, /* grdc_regs */
219
/* index=0x1c vga mode 0x13 */
220
{ 40, 24, 8, 0x0000, /* tw, th-1, ch, slength */
221
{ 0x01, 0x0f, 0x00, 0x0e }, /* sequ_regs */
223
{ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
224
0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
225
0x9c, 0x8e, 0x8f, 0x28, 0x40, 0x96, 0xb9, 0xa3,
226
0xff }, /* crtc_regs */
227
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
228
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
229
0x41, 0x00, 0x0f, 0x00 }, /* actl_regs */
230
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0f, 0xff }, /* grdc_regs */
232
/* index=0x1d vga mode 0x6a */
233
{ 100, 36, 16, 0x0000, /* tw, th-1, ch, slength */
234
{ 0x01, 0x0f, 0x00, 0x06 }, /* sequ_regs */
236
{ 0x7f, 0x63, 0x63, 0x83, 0x6b, 0x1b, 0x72, 0xf0,
237
0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
238
0x59, 0x8d, 0x57, 0x32, 0x00, 0x57, 0x73, 0xe3,
239
0xff }, /* crtc_regs */
240
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
241
0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
242
0x01, 0x00, 0x0f, 0x00 }, /* actl_regs */
243
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff }, /* grdc_regs */
248
/****************************************************************
249
* Palette definitions
250
****************************************************************/
253
static u8 palette0[] VAR16 = {
254
0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00,
255
0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00,
256
0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
257
0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
258
0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
259
0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
260
0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f,
261
0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f,
262
0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00,
263
0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00,
264
0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
265
0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
266
0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
267
0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
268
0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f,
269
0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f
272
static u8 palette1[] VAR16 = {
273
0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a,
274
0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
275
0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a,
276
0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
277
0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f,
278
0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f,
279
0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f,
280
0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f,
281
0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a,
282
0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
283
0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a,
284
0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
285
0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f,
286
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,
288
0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f
291
static u8 palette2[] VAR16 = {
292
0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a,
293
0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x2a,0x00, 0x2a,0x2a,0x2a,
294
0x00,0x00,0x15, 0x00,0x00,0x3f, 0x00,0x2a,0x15, 0x00,0x2a,0x3f,
295
0x2a,0x00,0x15, 0x2a,0x00,0x3f, 0x2a,0x2a,0x15, 0x2a,0x2a,0x3f,
296
0x00,0x15,0x00, 0x00,0x15,0x2a, 0x00,0x3f,0x00, 0x00,0x3f,0x2a,
297
0x2a,0x15,0x00, 0x2a,0x15,0x2a, 0x2a,0x3f,0x00, 0x2a,0x3f,0x2a,
298
0x00,0x15,0x15, 0x00,0x15,0x3f, 0x00,0x3f,0x15, 0x00,0x3f,0x3f,
299
0x2a,0x15,0x15, 0x2a,0x15,0x3f, 0x2a,0x3f,0x15, 0x2a,0x3f,0x3f,
300
0x15,0x00,0x00, 0x15,0x00,0x2a, 0x15,0x2a,0x00, 0x15,0x2a,0x2a,
301
0x3f,0x00,0x00, 0x3f,0x00,0x2a, 0x3f,0x2a,0x00, 0x3f,0x2a,0x2a,
302
0x15,0x00,0x15, 0x15,0x00,0x3f, 0x15,0x2a,0x15, 0x15,0x2a,0x3f,
303
0x3f,0x00,0x15, 0x3f,0x00,0x3f, 0x3f,0x2a,0x15, 0x3f,0x2a,0x3f,
304
0x15,0x15,0x00, 0x15,0x15,0x2a, 0x15,0x3f,0x00, 0x15,0x3f,0x2a,
305
0x3f,0x15,0x00, 0x3f,0x15,0x2a, 0x3f,0x3f,0x00, 0x3f,0x3f,0x2a,
306
0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f,
307
0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f
310
static u8 palette3[] VAR16 = {
311
0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a,
312
0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
313
0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f,
314
0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f,
315
0x00,0x00,0x00, 0x05,0x05,0x05, 0x08,0x08,0x08, 0x0b,0x0b,0x0b,
316
0x0e,0x0e,0x0e, 0x11,0x11,0x11, 0x14,0x14,0x14, 0x18,0x18,0x18,
317
0x1c,0x1c,0x1c, 0x20,0x20,0x20, 0x24,0x24,0x24, 0x28,0x28,0x28,
318
0x2d,0x2d,0x2d, 0x32,0x32,0x32, 0x38,0x38,0x38, 0x3f,0x3f,0x3f,
319
0x00,0x00,0x3f, 0x10,0x00,0x3f, 0x1f,0x00,0x3f, 0x2f,0x00,0x3f,
320
0x3f,0x00,0x3f, 0x3f,0x00,0x2f, 0x3f,0x00,0x1f, 0x3f,0x00,0x10,
321
0x3f,0x00,0x00, 0x3f,0x10,0x00, 0x3f,0x1f,0x00, 0x3f,0x2f,0x00,
322
0x3f,0x3f,0x00, 0x2f,0x3f,0x00, 0x1f,0x3f,0x00, 0x10,0x3f,0x00,
323
0x00,0x3f,0x00, 0x00,0x3f,0x10, 0x00,0x3f,0x1f, 0x00,0x3f,0x2f,
324
0x00,0x3f,0x3f, 0x00,0x2f,0x3f, 0x00,0x1f,0x3f, 0x00,0x10,0x3f,
325
0x1f,0x1f,0x3f, 0x27,0x1f,0x3f, 0x2f,0x1f,0x3f, 0x37,0x1f,0x3f,
326
0x3f,0x1f,0x3f, 0x3f,0x1f,0x37, 0x3f,0x1f,0x2f, 0x3f,0x1f,0x27,
328
0x3f,0x1f,0x1f, 0x3f,0x27,0x1f, 0x3f,0x2f,0x1f, 0x3f,0x37,0x1f,
329
0x3f,0x3f,0x1f, 0x37,0x3f,0x1f, 0x2f,0x3f,0x1f, 0x27,0x3f,0x1f,
330
0x1f,0x3f,0x1f, 0x1f,0x3f,0x27, 0x1f,0x3f,0x2f, 0x1f,0x3f,0x37,
331
0x1f,0x3f,0x3f, 0x1f,0x37,0x3f, 0x1f,0x2f,0x3f, 0x1f,0x27,0x3f,
332
0x2d,0x2d,0x3f, 0x31,0x2d,0x3f, 0x36,0x2d,0x3f, 0x3a,0x2d,0x3f,
333
0x3f,0x2d,0x3f, 0x3f,0x2d,0x3a, 0x3f,0x2d,0x36, 0x3f,0x2d,0x31,
334
0x3f,0x2d,0x2d, 0x3f,0x31,0x2d, 0x3f,0x36,0x2d, 0x3f,0x3a,0x2d,
335
0x3f,0x3f,0x2d, 0x3a,0x3f,0x2d, 0x36,0x3f,0x2d, 0x31,0x3f,0x2d,
336
0x2d,0x3f,0x2d, 0x2d,0x3f,0x31, 0x2d,0x3f,0x36, 0x2d,0x3f,0x3a,
337
0x2d,0x3f,0x3f, 0x2d,0x3a,0x3f, 0x2d,0x36,0x3f, 0x2d,0x31,0x3f,
338
0x00,0x00,0x1c, 0x07,0x00,0x1c, 0x0e,0x00,0x1c, 0x15,0x00,0x1c,
339
0x1c,0x00,0x1c, 0x1c,0x00,0x15, 0x1c,0x00,0x0e, 0x1c,0x00,0x07,
340
0x1c,0x00,0x00, 0x1c,0x07,0x00, 0x1c,0x0e,0x00, 0x1c,0x15,0x00,
341
0x1c,0x1c,0x00, 0x15,0x1c,0x00, 0x0e,0x1c,0x00, 0x07,0x1c,0x00,
342
0x00,0x1c,0x00, 0x00,0x1c,0x07, 0x00,0x1c,0x0e, 0x00,0x1c,0x15,
343
0x00,0x1c,0x1c, 0x00,0x15,0x1c, 0x00,0x0e,0x1c, 0x00,0x07,0x1c,
345
0x0e,0x0e,0x1c, 0x11,0x0e,0x1c, 0x15,0x0e,0x1c, 0x18,0x0e,0x1c,
346
0x1c,0x0e,0x1c, 0x1c,0x0e,0x18, 0x1c,0x0e,0x15, 0x1c,0x0e,0x11,
347
0x1c,0x0e,0x0e, 0x1c,0x11,0x0e, 0x1c,0x15,0x0e, 0x1c,0x18,0x0e,
348
0x1c,0x1c,0x0e, 0x18,0x1c,0x0e, 0x15,0x1c,0x0e, 0x11,0x1c,0x0e,
349
0x0e,0x1c,0x0e, 0x0e,0x1c,0x11, 0x0e,0x1c,0x15, 0x0e,0x1c,0x18,
350
0x0e,0x1c,0x1c, 0x0e,0x18,0x1c, 0x0e,0x15,0x1c, 0x0e,0x11,0x1c,
351
0x14,0x14,0x1c, 0x16,0x14,0x1c, 0x18,0x14,0x1c, 0x1a,0x14,0x1c,
352
0x1c,0x14,0x1c, 0x1c,0x14,0x1a, 0x1c,0x14,0x18, 0x1c,0x14,0x16,
353
0x1c,0x14,0x14, 0x1c,0x16,0x14, 0x1c,0x18,0x14, 0x1c,0x1a,0x14,
354
0x1c,0x1c,0x14, 0x1a,0x1c,0x14, 0x18,0x1c,0x14, 0x16,0x1c,0x14,
355
0x14,0x1c,0x14, 0x14,0x1c,0x16, 0x14,0x1c,0x18, 0x14,0x1c,0x1a,
356
0x14,0x1c,0x1c, 0x14,0x1a,0x1c, 0x14,0x18,0x1c, 0x14,0x16,0x1c,
357
0x00,0x00,0x10, 0x04,0x00,0x10, 0x08,0x00,0x10, 0x0c,0x00,0x10,
358
0x10,0x00,0x10, 0x10,0x00,0x0c, 0x10,0x00,0x08, 0x10,0x00,0x04,
359
0x10,0x00,0x00, 0x10,0x04,0x00, 0x10,0x08,0x00, 0x10,0x0c,0x00,
360
0x10,0x10,0x00, 0x0c,0x10,0x00, 0x08,0x10,0x00, 0x04,0x10,0x00,
362
0x00,0x10,0x00, 0x00,0x10,0x04, 0x00,0x10,0x08, 0x00,0x10,0x0c,
363
0x00,0x10,0x10, 0x00,0x0c,0x10, 0x00,0x08,0x10, 0x00,0x04,0x10,
364
0x08,0x08,0x10, 0x0a,0x08,0x10, 0x0c,0x08,0x10, 0x0e,0x08,0x10,
365
0x10,0x08,0x10, 0x10,0x08,0x0e, 0x10,0x08,0x0c, 0x10,0x08,0x0a,
366
0x10,0x08,0x08, 0x10,0x0a,0x08, 0x10,0x0c,0x08, 0x10,0x0e,0x08,
367
0x10,0x10,0x08, 0x0e,0x10,0x08, 0x0c,0x10,0x08, 0x0a,0x10,0x08,
368
0x08,0x10,0x08, 0x08,0x10,0x0a, 0x08,0x10,0x0c, 0x08,0x10,0x0e,
369
0x08,0x10,0x10, 0x08,0x0e,0x10, 0x08,0x0c,0x10, 0x08,0x0a,0x10,
370
0x0b,0x0b,0x10, 0x0c,0x0b,0x10, 0x0d,0x0b,0x10, 0x0f,0x0b,0x10,
371
0x10,0x0b,0x10, 0x10,0x0b,0x0f, 0x10,0x0b,0x0d, 0x10,0x0b,0x0c,
372
0x10,0x0b,0x0b, 0x10,0x0c,0x0b, 0x10,0x0d,0x0b, 0x10,0x0f,0x0b,
373
0x10,0x10,0x0b, 0x0f,0x10,0x0b, 0x0d,0x10,0x0b, 0x0c,0x10,0x0b,
374
0x0b,0x10,0x0b, 0x0b,0x10,0x0c, 0x0b,0x10,0x0d, 0x0b,0x10,0x0f,
375
0x0b,0x10,0x10, 0x0b,0x0f,0x10, 0x0b,0x0d,0x10, 0x0b,0x0c,0x10,
376
0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00,
377
0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00
381
/****************************************************************
383
****************************************************************/
385
#define PAL(x) x, sizeof(x)
386
#define VPARAM(x) &video_param_table[x]
388
static struct vgamode_s vga_modes[] VAR16 = {
389
//mode vparam model bits sstart pelm dac
390
{0x00, VPARAM(0x17), CTEXT, 4, SEG_CTEXT, 0xFF, PAL(palette2)},
391
{0x01, VPARAM(0x17), CTEXT, 4, SEG_CTEXT, 0xFF, PAL(palette2)},
392
{0x02, VPARAM(0x18), CTEXT, 4, SEG_CTEXT, 0xFF, PAL(palette2)},
393
{0x03, VPARAM(0x18), CTEXT, 4, SEG_CTEXT, 0xFF, PAL(palette2)},
394
{0x04, VPARAM(0x04), CGA, 2, SEG_CTEXT, 0xFF, PAL(palette1)},
395
{0x05, VPARAM(0x05), CGA, 2, SEG_CTEXT, 0xFF, PAL(palette1)},
396
{0x06, VPARAM(0x06), CGA, 1, SEG_CTEXT, 0xFF, PAL(palette1)},
397
{0x07, VPARAM(0x07), MTEXT, 4, SEG_MTEXT, 0xFF, PAL(palette0)},
398
{0x0D, VPARAM(0x0d), PLANAR4, 4, SEG_GRAPH, 0xFF, PAL(palette1)},
399
{0x0E, VPARAM(0x0e), PLANAR4, 4, SEG_GRAPH, 0xFF, PAL(palette1)},
400
{0x0F, VPARAM(0x11), PLANAR1, 1, SEG_GRAPH, 0xFF, PAL(palette0)},
401
{0x10, VPARAM(0x12), PLANAR4, 4, SEG_GRAPH, 0xFF, PAL(palette2)},
402
{0x11, VPARAM(0x1a), PLANAR1, 1, SEG_GRAPH, 0xFF, PAL(palette2)},
403
{0x12, VPARAM(0x1b), PLANAR4, 4, SEG_GRAPH, 0xFF, PAL(palette2)},
404
{0x13, VPARAM(0x1c), LINEAR8, 8, SEG_GRAPH, 0xFF, PAL(palette3)},
405
{0x6A, VPARAM(0x1d), PLANAR4, 4, SEG_GRAPH, 0xFF, PAL(palette2)},
409
find_vga_entry(u8 mode)
412
for (i = 0; i < ARRAY_SIZE(vga_modes); i++) {
413
struct vgamode_s *vmode_g = &vga_modes[i];
414
if (GET_GLOBAL(vmode_g->svgamode) == mode)
420
// u16 video_save_pointer_table[14] VAR16;
423
/****************************************************************
424
* Static functionality table
425
****************************************************************/
427
u8 static_functionality[0x10] VAR16 = {
428
/* 0 */ 0xff, // All modes supported #1
429
/* 1 */ 0xe0, // All modes supported #2
430
/* 2 */ 0x0f, // All modes supported #3
431
/* 3 */ 0x00, 0x00, 0x00, 0x00, // reserved
432
/* 7 */ 0x07, // 200, 350, 400 scan lines
433
/* 8 */ 0x02, // mamimum number of visible charsets in text mode
434
/* 9 */ 0x08, // total number of charset blocks in text mode
435
/* a */ 0xe7, // Change to add new functions
436
/* b */ 0x0c, // Change to add new functions
437
/* c */ 0x00, // reserved
438
/* d */ 0x00, // reserved
439
/* e */ 0x00, // Change to add new functions
440
/* f */ 0x00 // reserved