~pmdj/ubuntu/trusty/qemu/2.9+applesmc+fadtv3

« back to all changes in this revision

Viewing changes to roms/qemu-palcode/vgatables.c

  • Committer: Phil Dennis-Jordan
  • Date: 2017-07-21 08:03:43 UTC
  • mfrom: (1.1.1)
  • Revision ID: phil@philjordan.eu-20170721080343-2yr2vdj7713czahv
New upstream release 2.9.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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 "protos.h"
 
9
#include "vgatables.h" // struct VideoParamTableEntry_s
 
10
 
 
11
#define ARRAY_SIZE(var) (sizeof(var) / sizeof(var[0]))
 
12
#define GET_GLOBAL(var) (var)
 
13
#define VAR16
 
14
 
 
15
/****************************************************************
 
16
 * Video parameter table
 
17
 ****************************************************************/
 
18
 
 
19
struct VideoParam_s video_param_table[] VAR16 = {
 
20
    // index=0x00 no mode defined
 
21
    {},
 
22
    // index=0x01 no mode defined
 
23
    {},
 
24
    // index=0x02 no mode defined
 
25
    {},
 
26
    // index=0x03 no mode defined
 
27
    {},
 
28
    // index=0x04 vga mode 0x04
 
29
    { 40, 24, 8, 0x0800,      /* tw, th-1, ch, slength */
 
30
      { 0x09, 0x03, 0x00, 0x02 },    /* sequ_regs */
 
31
      0x63,                      /* miscreg */
 
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 */
 
40
    },
 
41
    /* index=0x05 vga mode 0x05 */
 
42
    { 40, 24, 8, 0x0800,     /* tw, th-1, ch, slength */
 
43
      { 0x09, 0x03, 0x00, 0x02 },    /* sequ_regs */
 
44
      0x63,                      /* miscreg */
 
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 */
 
53
    },
 
54
    /* index=0x06 vga mode 0x06 */
 
55
    { 80, 24, 8, 0x1000,     /* tw, th-1, ch, slength */
 
56
      { 0x01, 0x01, 0x00, 0x06 },    /* sequ_regs */
 
57
      0x63,                      /* miscreg */
 
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 */
 
66
     },
 
67
    /* index=0x07 vga mode 0x07 */
 
68
    { 80, 24, 16, 0x1000,    /* tw, th-1, ch, slength */
 
69
      { 0x00, 0x03, 0x00, 0x02 },    /* sequ_regs */
 
70
      0x66,                      /* miscreg */
 
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 */
 
79
     },
 
80
    /* index=0x08 no mode defined */
 
81
    {},
 
82
    /* index=0x09 no mode defined */
 
83
    {},
 
84
    /* index=0x0a no mode defined */
 
85
    {},
 
86
    /* index=0x0b no mode defined */
 
87
    {},
 
88
    /* index=0x0c no mode defined */
 
89
    {},
 
90
    /* index=0x0d vga mode 0x0d */
 
91
    { 40, 24, 8, 0x2000,     /* tw, th-1, ch, slength */
 
92
      { 0x09, 0x0f, 0x00, 0x06 },    /* sequ_regs */
 
93
      0x63,                      /* miscreg */
 
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 */
 
102
     },
 
103
    /* index=0x0e vga mode 0x0e */
 
104
    { 80, 24, 8, 0x4000,     /* tw, th-1, ch, slength */
 
105
      { 0x01, 0x0f, 0x00, 0x06 },    /* sequ_regs */
 
106
      0x63,                      /* miscreg */
 
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 */
 
115
     },
 
116
    /* index=0x0f no mode defined */
 
117
    {},
 
118
    /* index=0x10 no mode defined */
 
119
    {},
 
120
    /* index=0x11 vga mode 0x0f */
 
121
    { 80, 24, 14, 0x8000,    /* tw, th-1, ch, slength */
 
122
      { 0x01, 0x0f, 0x00, 0x06 },    /* sequ_regs */
 
123
      0xa3,                      /* miscreg */
 
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 */
 
132
     },
 
133
    /* index=0x12 vga mode 0x10 */
 
134
    { 80, 24, 14, 0x8000,    /* tw, th-1, ch, slength */
 
135
      { 0x01, 0x0f, 0x00, 0x06 },    /* sequ_regs */
 
136
      0xa3,                      /* miscreg */
 
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 */
 
145
     },
 
146
    /* index=0x13 no mode defined */
 
147
    {},
 
148
    /* index=0x14 no mode defined */
 
149
    {},
 
150
    /* index=0x15 no mode defined */
 
151
    {},
 
152
    /* index=0x16 no mode defined */
 
153
    {},
 
154
    /* index=0x17 vga mode 0x01 */
 
155
    { 40, 24, 16, 0x0800,    /* tw, th-1, ch, slength */
 
156
      { 0x08, 0x03, 0x00, 0x02 },    /* sequ_regs */
 
157
      0x67,                      /* miscreg */
 
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 */
 
166
    },
 
167
    /* index=0x18 vga mode 0x03 */
 
168
    { 80, 24, 16, 0x1000,    /* tw, th-1, ch, slength */
 
169
      { 0x00, 0x03, 0x00, 0x02 },    /* sequ_regs */
 
170
      0x67,                      /* miscreg */
 
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 */
 
179
     },
 
180
    /* index=0x19 vga mode 0x07 */
 
181
    { 80, 24, 16, 0x1000,    /* tw, th-1, ch, slength */
 
182
      { 0x00, 0x03, 0x00, 0x02 },    /* sequ_regs */
 
183
      0x66,                      /* miscreg */
 
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 */
 
192
    },
 
193
    /* index=0x1a vga mode 0x11 */
 
194
    { 80, 29, 16, 0x0000,    /* tw, th-1, ch, slength */
 
195
      { 0x01, 0x0f, 0x00, 0x06 },    /* sequ_regs */
 
196
      0xe3,                      /* miscreg */
 
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 */
 
205
    },
 
206
    /* index=0x1b vga mode 0x12 */
 
207
    { 80, 29, 16, 0x0000,    /* tw, th-1, ch, slength */
 
208
      { 0x01, 0x0f, 0x00, 0x06 },    /* sequ_regs */
 
209
      0xe3,                      /* miscreg */
 
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 */
 
218
     },
 
219
    /* index=0x1c vga mode 0x13 */
 
220
    { 40, 24, 8, 0x0000,     /* tw, th-1, ch, slength */
 
221
      { 0x01, 0x0f, 0x00, 0x0e },    /* sequ_regs */
 
222
      0x63,                      /* miscreg */
 
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 */
 
231
     },
 
232
    /* index=0x1d vga mode 0x6a */
 
233
    { 100, 36, 16, 0x0000,   /* tw, th-1, ch, slength */
 
234
      { 0x01, 0x0f, 0x00, 0x06 },    /* sequ_regs */
 
235
      0xe3,                      /* miscreg */
 
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 */
 
244
     },
 
245
};
 
246
 
 
247
 
 
248
/****************************************************************
 
249
 * Palette definitions
 
250
 ****************************************************************/
 
251
 
 
252
/* Mono */
 
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
 
270
};
 
271
 
 
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
 
289
};
 
290
 
 
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
 
308
};
 
309
 
 
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,
 
327
 
 
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,
 
344
 
 
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,
 
361
 
 
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
 
378
};
 
379
 
 
380
 
 
381
/****************************************************************
 
382
 * Video mode list
 
383
 ****************************************************************/
 
384
 
 
385
#define PAL(x) x, sizeof(x)
 
386
#define VPARAM(x) &video_param_table[x]
 
387
 
 
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)},
 
406
};
 
407
 
 
408
struct vgamode_s *
 
409
find_vga_entry(u8 mode)
 
410
{
 
411
    int i;
 
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)
 
415
            return vmode_g;
 
416
    }
 
417
    return NULL;
 
418
}
 
419
 
 
420
// u16 video_save_pointer_table[14] VAR16;
 
421
 
 
422
 
 
423
/****************************************************************
 
424
 * Static functionality table
 
425
 ****************************************************************/
 
426
 
 
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
 
441
};