2 * COPYRIGHT: GPL - See COPYING in the top level directory
3 * PROJECT: ReactOS Virtual DOS Machine
5 * PURPOSE: VDM Video BIOS Support Library
6 * PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
7 * Hermes Belusca-Maito (hermes.belusca@sfr.fr)
10 /* INCLUDES *******************************************************************/
20 // #include "vidbios.h"
23 #include "hardware/video/vga.h"
25 /* DEFINES ********************************************************************/
28 #define BOP_VIDEO_INT 0x10
30 /* MACROS *********************************************************************/
33 // These macros are defined for ease-of-use of some VGA I/O ports
34 // whose addresses depend whether we are in Monochrome or Colour mode.
36 #define VGA_INSTAT1_READ Bda->CrtBasePort + 6 // VGA_INSTAT1_READ_MONO or VGA_INSTAT1_READ_COLOR
37 #define VGA_CRTC_INDEX Bda->CrtBasePort // VGA_CRTC_INDEX_MONO or VGA_CRTC_INDEX_COLOR
38 #define VGA_CRTC_DATA Bda->CrtBasePort + 1 // VGA_CRTC_DATA_MONO or VGA_CRTC_DATA_COLOR
40 /* PRIVATE VARIABLES **********************************************************/
43 * VGA Register Configurations for BIOS Video Modes.
44 * The configurations were checked against SeaBIOS VGA BIOS.
46 static VGA_REGISTERS VideoMode_40x25_text
=
48 /* Miscellaneous Register */
51 /* Sequencer Registers */
52 {0x00, 0x08, 0x03, 0x00, 0x02},
54 /* CRTC Registers */ /* CGA-compatible: 0xC7, 0x06, 0x07 */
55 {0x2D, 0x27, 0x28, 0x90, 0x2B, 0xA0, 0xBF, 0x1F, 0x00, 0x4F, 0x0D, 0x0E,
56 0x00, 0x00, 0x00, 0x00, 0x9C, 0x8E, 0x8F, 0x14, 0x1F, 0x96, 0xB9, 0xA3,
60 {0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0E, 0x0F, 0xFF},
63 {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x38, 0x39, 0x3A, 0x3B,
64 0x3C, 0x3D, 0x3E, 0x3F, 0x0C, 0x00, 0x0F, 0x08, 0x00}
67 static VGA_REGISTERS VideoMode_80x25_text
=
69 /* Miscellaneous Register */
72 /* Sequencer Registers */
73 {0x00, 0x00, 0x03, 0x00, 0x02},
75 /* CRTC Registers */ /* CGA-compatible: 0xC7, 0x06, 0x07 */
76 {0x5F, 0x4F, 0x50, 0x82, 0x55, 0x81, 0xBF, 0x1F, 0x00, 0x4F, 0x0D, 0x0E,
77 0x00, 0x00, 0x00, 0x00, 0x9C, 0x8E, 0x8F, 0x28, 0x1F, 0x96, 0xB9, 0xA3,
81 {0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0E, 0x0F, 0xFF},
84 {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x38, 0x39, 0x3A, 0x3B,
85 0x3C, 0x3D, 0x3E, 0x3F, 0x0C, 0x00, 0x0F, 0x08, 0x00}
88 static VGA_REGISTERS VideoMode_320x200_4color
=
90 /* Miscellaneous Register */
93 /* Sequencer Registers */
94 {0x00, 0x09, 0x03, 0x00, 0x02},
97 {0x2D, 0x27, 0x28, 0x90, 0x2B, 0x80, 0xBF, 0x1F, 0x00, 0xC1, 0x00, 0x00,
98 0x00, 0x00, 0x00, 0x00, 0x9C, 0x8E, 0x8F, 0x14, 0x00, 0x96, 0xB9, 0xA2,
102 {0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0F, 0x0F, 0xFF},
105 {0x00, 0x13, 0x15, 0x17, 0x02, 0x04, 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
106 0x14, 0x15, 0x16, 0x17, 0x01, 0x00, 0x03, 0x00, 0x00}
109 static VGA_REGISTERS VideoMode_640x200_2color
=
111 /* Miscellaneous Register */
114 /* Sequencer Registers */
115 {0x00, 0x01, 0x01, 0x00, 0x02},
118 {0x5F, 0x4F, 0x50, 0x82, 0x54, 0x80, 0xBF, 0x1F, 0x00, 0xC1, 0x00, 0x00,
119 0x00, 0x00, 0x00, 0x00, 0x9C, 0x8E, 0x8F, 0x28, 0x00, 0x96, 0xB9, 0xC2,
123 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0xFF},
126 {0x00, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
127 0x17, 0x17, 0x17, 0x17, 0x01, 0x00, 0x01, 0x00, 0x00}
130 static VGA_REGISTERS VideoMode_320x200_16color
=
132 /* Miscellaneous Register */
135 /* Sequencer Registers */
136 {0x00, 0x09, 0x0F, 0x00, 0x06},
139 {0x2D, 0x27, 0x28, 0x90, 0x2B, 0x80, 0xBF, 0x1F, 0x00, 0xC0, 0x00, 0x00,
140 0x00, 0x00, 0x00, 0x00, 0x9C, 0x8E, 0x8F, 0x14, 0x00, 0x96, 0xB9, 0xE3,
144 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0F, 0xFF},
147 {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
148 0x14, 0x15, 0x16, 0x17, 0x01, 0x00, 0x0F, 0x00, 0x00}
151 static VGA_REGISTERS VideoMode_640x200_16color
=
153 /* Miscellaneous Register */
156 /* Sequencer Registers */
157 {0x00, 0x01, 0x0F, 0x00, 0x06},
160 {0x5F, 0x4F, 0x50, 0x82, 0x54, 0x80, 0xBF, 0x1F, 0x00, 0xC0, 0x00, 0x00,
161 0x00, 0x00, 0x00, 0x00, 0x9C, 0x8E, 0x8F, 0x28, 0x00, 0x96, 0xB9, 0xE3,
165 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0F, 0xFF},
168 {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
169 0x14, 0x15, 0x16, 0x17, 0x01, 0x00, 0x0F, 0x00, 0x00}
172 static VGA_REGISTERS VideoMode_640x350_16color
=
174 /* Miscellaneous Register */
177 /* Sequencer Registers */
178 {0x00, 0x01, 0x0F, 0x00, 0x06},
181 {0x5F, 0x4F, 0x50, 0x82, 0x54, 0x80, 0xBF, 0x1F, 0x00, 0x40, 0x00, 0x00,
182 0x00, 0x00, 0x00, 0x00, 0x83, 0x85, 0x5D, 0x28, 0x0F, 0x63, 0xBA, 0xE3,
186 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0F, 0xFF},
189 {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x38, 0x39, 0x3A, 0x3B,
190 0x3C, 0x3D, 0x3E, 0x3F, 0x01, 0x00, 0x0F, 0x00, 0x00}
193 static VGA_REGISTERS VideoMode_640x480_2color
=
195 /* Miscellaneous Register */
198 /* Sequencer Registers */
199 {0x00, 0x01, 0x0F, 0x00, 0x06},
202 {0x5F, 0x4F, 0x50, 0x82, 0x54, 0x80, 0x0B, 0x3E, 0x00, 0x40, 0x00, 0x00,
203 0x00, 0x00, 0x00, 0x00, 0xEA, 0x8C, 0xDF, 0x28, 0x00, 0xE7, 0x04, 0xC3,
207 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0F, 0xFF},
210 // {0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
211 // 0x3F, 0x3F, 0x3F, 0x3F, 0x01, 0x00, 0x0F, 0x00, 0x00}
212 {0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F,
213 0x00, 0x3F, 0x00, 0x3F, 0x01, 0x00, 0x0F, 0x00, 0x00}
216 static VGA_REGISTERS VideoMode_640x480_16color
=
218 /* Miscellaneous Register */
221 /* Sequencer Registers */
222 {0x00, 0x01, 0x0F, 0x00, 0x06},
225 {0x5F, 0x4F, 0x50, 0x82, 0x54, 0x80, 0x0B, 0x3E, 0x00, 0x40, 0x00, 0x00,
226 0x00, 0x00, 0x00, 0x00, 0xEA, 0x8C, 0xDF, 0x28, 0x00, 0xE7, 0x04, 0xE3,
230 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0F, 0xFF},
233 {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x38, 0x39, 0x3A, 0x3B,
234 0x3C, 0x3D, 0x3E, 0x3F, 0x01, 0x00, 0x0F, 0x00, 0x00}
237 static VGA_REGISTERS VideoMode_320x200_256color
=
239 /* Miscellaneous Register */
242 /* Sequencer Registers */
243 {0x00, 0x01, 0x0F, 0x00, 0x0E},
246 {0x5F, 0x4F, 0x50, 0x82, 0x54, 0x80, 0xBF, 0x1F, 0x00, 0x41, 0x00, 0x00,
247 0x00, 0x00, 0x00, 0x00, 0x9C, 0x8E, 0x8F, 0x28, 0x40, 0x96, 0xB9, 0xA3,
251 {0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, 0xFF},
254 {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B,
255 0x0C, 0x0D, 0x0E, 0x0F, 0x41, 0x00, 0x0F, 0x00, 0x00}
258 /* See http://wiki.osdev.org/Drawing_In_Protected_Mode#Locating_Video_Memory */
259 static PVGA_REGISTERS VideoModes
[BIOS_MAX_VIDEO_MODE
+ 1] =
261 &VideoMode_40x25_text
, /* Mode 00h */ // 16 color (mono)
262 &VideoMode_40x25_text
, /* Mode 01h */ // 16 color
263 &VideoMode_80x25_text
, /* Mode 02h */ // 16 color (mono)
264 &VideoMode_80x25_text
, /* Mode 03h */ // 16 color
265 &VideoMode_320x200_4color
, /* Mode 04h */ // CGA 4 color
266 &VideoMode_320x200_4color
, /* Mode 05h */ // CGA same (m) (uses 3rd CGA palette)
267 &VideoMode_640x200_2color
, /* Mode 06h */ // CGA 640*200 2 color
268 NULL
, /* Mode 07h */ // MDA monochrome text 80*25
269 NULL
, /* Mode 08h */ // PCjr
270 NULL
, /* Mode 09h */ // PCjr
271 NULL
, /* Mode 0Ah */ // PCjr
272 NULL
, /* Mode 0Bh */ // Reserved
273 NULL
, /* Mode 0Ch */ // Reserved
274 &VideoMode_320x200_16color
, /* Mode 0Dh */ // EGA 320*200 16 color
275 &VideoMode_640x200_16color
, /* Mode 0Eh */ // EGA 640*200 16 color
276 NULL
, /* Mode 0Fh */ // EGA 640*350 mono
277 &VideoMode_640x350_16color
, /* Mode 10h */ // EGA 640*350 HiRes 16 color
278 &VideoMode_640x480_2color
, /* Mode 11h */ // VGA 640*480 mono
279 &VideoMode_640x480_16color
, /* Mode 12h */ // VGA
280 &VideoMode_320x200_256color
, /* Mode 13h */ // VGA
283 // FIXME: Are they computable with the previous data ??
284 // Values taken from DOSBox.
285 static WORD VideoModePageSize
[BIOS_MAX_VIDEO_MODE
+ 1] =
287 0x0800, 0x0800, 0x1000, 0x1000,
288 0x4000, 0x4000, 0x4000, 0x1000,
289 0x0000, 0x0000, 0x0000, 0x0000,
290 0x0000, 0x2000, 0x4000, 0x8000,
291 0x8000, 0xA000, 0xA000, 0x2000
297 * Many people have different versions of those palettes
298 * (e.g. DOSBox, http://www.brokenthorn.com/Resources/OSDevVid2.html ,
299 * etc...) A choice should be made at some point.
302 // This is the same as EgaPalette__HiRes
303 static CONST COLORREF TextPalette
[VGA_MAX_COLORS
/ 4] =
305 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0xAA), RGB(0x00, 0xAA, 0x00), RGB(0x00, 0xAA, 0xAA),
306 RGB(0xAA, 0x00, 0x00), RGB(0xAA, 0x00, 0xAA), RGB(0xAA, 0xAA, 0x00), RGB(0xAA, 0xAA, 0xAA),
307 RGB(0x00, 0x00, 0x55), RGB(0x00, 0x00, 0xFF), RGB(0x00, 0xAA, 0x55), RGB(0x00, 0xAA, 0xFF),
308 RGB(0xAA, 0x00, 0x55), RGB(0xAA, 0x00, 0xFF), RGB(0xAA, 0xAA, 0x55), RGB(0xAA, 0xAA, 0xFF),
310 RGB(0x00, 0x55, 0x00), RGB(0x00, 0x55, 0xAA), RGB(0x00, 0xFF, 0x00), RGB(0x00, 0xFF, 0xAA),
311 RGB(0xAA, 0x55, 0x00), RGB(0xAA, 0x55, 0xAA), RGB(0xAA, 0xFF, 0x00), RGB(0xAA, 0xFF, 0xAA),
312 RGB(0x00, 0x55, 0x55), RGB(0x00, 0x55, 0xFF), RGB(0x00, 0xFF, 0x55), RGB(0x00, 0xFF, 0xFF),
313 RGB(0xAA, 0x55, 0x55), RGB(0xAA, 0x55, 0xFF), RGB(0xAA, 0xFF, 0x55), RGB(0xAA, 0xFF, 0xFF),
316 RGB(0x55, 0x00, 0x00), RGB(0x55, 0x00, 0xAA), RGB(0x55, 0xAA, 0x00), RGB(0x55, 0xAA, 0xAA),
317 RGB(0xFF, 0x00, 0x00), RGB(0xFF, 0x00, 0xAA), RGB(0xFF, 0xAA, 0x00), RGB(0xFF, 0xAA, 0xAA),
318 RGB(0x55, 0x00, 0x55), RGB(0x55, 0x00, 0xFF), RGB(0x55, 0xAA, 0x55), RGB(0x55, 0xAA, 0xFF),
319 RGB(0xFF, 0x00, 0x55), RGB(0xFF, 0x00, 0xFF), RGB(0xFF, 0xAA, 0x55), RGB(0xFF, 0xAA, 0xFF),
321 RGB(0x55, 0x55, 0x00), RGB(0x55, 0x55, 0xAA), RGB(0x55, 0xFF, 0x00), RGB(0x55, 0xFF, 0xAA),
322 RGB(0xFF, 0x55, 0x00), RGB(0xFF, 0x55, 0xAA), RGB(0xFF, 0xFF, 0x00), RGB(0xFF, 0xFF, 0xAA),
323 RGB(0x55, 0x55, 0x55), RGB(0x55, 0x55, 0xFF), RGB(0x55, 0xFF, 0x55), RGB(0x55, 0xFF, 0xFF),
324 RGB(0xFF, 0x55, 0x55), RGB(0xFF, 0x55, 0xFF), RGB(0xFF, 0xFF, 0x55), RGB(0xFF, 0xFF, 0xFF)
327 // Unused at the moment
328 static CONST COLORREF mtext_palette
[64] =
330 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00),
331 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00),
332 RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA),
333 RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA),
334 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00),
335 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00),
336 RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF),
337 RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF),
339 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00),
340 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00),
341 RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA),
342 RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA),
343 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00),
344 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00),
345 RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF),
346 RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF)
349 // Unused at the moment
350 static CONST COLORREF mtext_s3_palette
[64] =
352 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00),
353 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00),
354 RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA),
355 RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA),
356 RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA),
357 RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA),
358 RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF),
359 RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF),
361 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00),
362 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00),
363 RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA),
364 RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA),
365 RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA),
366 RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA), RGB(0xAA, 0xAA, 0xAA),
367 RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF),
368 RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF), RGB(0xFF, 0xFF, 0xFF)
373 // Unused at the moment
374 static CONST COLORREF CgaPalette
[16] =
376 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0xAA), RGB(0x00, 0xAA, 0x00), RGB(0x00, 0xAA, 0xAA),
377 RGB(0xAA, 0x00, 0x00), RGB(0xAA, 0x00, 0xAA), RGB(0xAA, 0x55, 0x00), RGB(0xAA, 0xAA, 0xAA),
378 RGB(0x55, 0x55, 0x55), RGB(0x55, 0x55, 0xFF), RGB(0x55, 0xFF, 0x55), RGB(0x55, 0xFF, 0xFF),
379 RGB(0xFF, 0x55, 0x55), RGB(0xFF, 0x55, 0xFF), RGB(0xFF, 0xFF, 0x55), RGB(0xFF, 0xFF, 0xFF)
383 static CONST BYTE CgaPalette1
[] =
385 0x00, /* 0 - Black */
387 0x05, /* 2- Magenta */
388 0x07, /* 3 - White */
391 /* CGA palette 1 bright */
392 static CONST BYTE CgaPalette1i
[] =
394 0x00, /* 0 - Black */
395 0x13, /* 1 - Light cyan */
396 0x15, /* 2 - Light magenta */
397 0x17, /* 3 - Bright White */
401 static CONST BYTE CgaPalette2
[] =
403 0x00, /* 0 - Black */
404 0x02, /* 1 - Green */
406 0x06, /* 3 - Brown */
409 /* CGA palette 2 bright */
410 static CONST BYTE CgaPalette2i
[] =
412 0x00, /* 0 - Black */
413 0x12, /* 1 - Light green */
414 0x14, /* 2 - Light red */
415 0x16, /* 3 - Yellow */
418 // Unused at the moment; same palette as EgaPalette__16Colors
419 static CONST COLORREF CgaPalette2
[VGA_MAX_COLORS
/ 4] =
421 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0xAA), RGB(0x00, 0xAA, 0x00), RGB(0x00, 0xAA, 0xAA),
422 RGB(0xAA, 0x00, 0x00), RGB(0xAA, 0x00, 0xAA), RGB(0xAA, 0x55, 0x00), RGB(0xAA, 0xAA, 0xAA),
423 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0xAA), RGB(0x00, 0xAA, 0x00), RGB(0x00, 0xAA, 0xAA),
424 RGB(0xAA, 0x00, 0x00), RGB(0xAA, 0x00, 0xAA), RGB(0xAA, 0x55, 0x00), RGB(0xAA, 0xAA, 0xAA),
426 RGB(0x55, 0x55, 0x55), RGB(0x55, 0x55, 0xFF), RGB(0x55, 0xFF, 0x55), RGB(0x55, 0xFF, 0xFF),
427 RGB(0xFF, 0x55, 0x55), RGB(0xFF, 0x55, 0xFF), RGB(0xFF, 0xFF, 0x55), RGB(0xFF, 0xFF, 0xFF),
428 RGB(0x55, 0x55, 0x55), RGB(0x55, 0x55, 0xFF), RGB(0x55, 0xFF, 0x55), RGB(0x55, 0xFF, 0xFF),
429 RGB(0xFF, 0x55, 0x55), RGB(0xFF, 0x55, 0xFF), RGB(0xFF, 0xFF, 0x55), RGB(0xFF, 0xFF, 0xFF),
431 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0xAA), RGB(0x00, 0xAA, 0x00), RGB(0x00, 0xAA, 0xAA),
432 RGB(0xAA, 0x00, 0x00), RGB(0xAA, 0x00, 0xAA), RGB(0xAA, 0x55, 0x00), RGB(0xAA, 0xAA, 0xAA),
433 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0xAA), RGB(0x00, 0xAA, 0x00), RGB(0x00, 0xAA, 0xAA),
434 RGB(0xAA, 0x00, 0x00), RGB(0xAA, 0x00, 0xAA), RGB(0xAA, 0x55, 0x00), RGB(0xAA, 0xAA, 0xAA),
436 RGB(0x55, 0x55, 0x55), RGB(0x55, 0x55, 0xFF), RGB(0x55, 0xFF, 0x55), RGB(0x55, 0xFF, 0xFF),
437 RGB(0xFF, 0x55, 0x55), RGB(0xFF, 0x55, 0xFF), RGB(0xFF, 0xFF, 0x55), RGB(0xFF, 0xFF, 0xFF),
438 RGB(0x55, 0x55, 0x55), RGB(0x55, 0x55, 0xFF), RGB(0x55, 0xFF, 0x55), RGB(0x55, 0xFF, 0xFF),
439 RGB(0xFF, 0x55, 0x55), RGB(0xFF, 0x55, 0xFF), RGB(0xFF, 0xFF, 0x55), RGB(0xFF, 0xFF, 0xFF)
444 static CONST COLORREF EgaPalette__16Colors
[VGA_MAX_COLORS
/ 4] =
446 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0xAA), RGB(0x00, 0xAA, 0x00), RGB(0x00, 0xAA, 0xAA),
447 RGB(0xAA, 0x00, 0x00), RGB(0xAA, 0x00, 0xAA), RGB(0xAA, 0x55, 0x00), RGB(0xAA, 0xAA, 0xAA),
449 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0xAA), RGB(0x00, 0xAA, 0x00), RGB(0x00, 0xAA, 0xAA),
450 RGB(0xAA, 0x00, 0x00), RGB(0xAA, 0x00, 0xAA), RGB(0xAA, 0x55, 0x00), RGB(0xAA, 0xAA, 0xAA),
453 RGB(0x55, 0x55, 0x55), RGB(0x55, 0x55, 0xFF), RGB(0x55, 0xFF, 0x55), RGB(0x55, 0xFF, 0xFF),
454 RGB(0xFF, 0x55, 0x55), RGB(0xFF, 0x55, 0xFF), RGB(0xFF, 0xFF, 0x55), RGB(0xFF, 0xFF, 0xFF),
456 RGB(0x55, 0x55, 0x55), RGB(0x55, 0x55, 0xFF), RGB(0x55, 0xFF, 0x55), RGB(0x55, 0xFF, 0xFF),
457 RGB(0xFF, 0x55, 0x55), RGB(0xFF, 0x55, 0xFF), RGB(0xFF, 0xFF, 0x55), RGB(0xFF, 0xFF, 0xFF),
461 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0xAA), RGB(0x00, 0xAA, 0x00), RGB(0x00, 0xAA, 0xAA),
462 RGB(0xAA, 0x00, 0x00), RGB(0xAA, 0x00, 0xAA), RGB(0xAA, 0x55, 0x00), RGB(0xAA, 0xAA, 0xAA),
464 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0xAA), RGB(0x00, 0xAA, 0x00), RGB(0x00, 0xAA, 0xAA),
465 RGB(0xAA, 0x00, 0x00), RGB(0xAA, 0x00, 0xAA), RGB(0xAA, 0x55, 0x00), RGB(0xAA, 0xAA, 0xAA),
468 RGB(0x55, 0x55, 0x55), RGB(0x55, 0x55, 0xFF), RGB(0x55, 0xFF, 0x55), RGB(0x55, 0xFF, 0xFF),
469 RGB(0xFF, 0x55, 0x55), RGB(0xFF, 0x55, 0xFF), RGB(0xFF, 0xFF, 0x55), RGB(0xFF, 0xFF, 0xFF),
471 RGB(0x55, 0x55, 0x55), RGB(0x55, 0x55, 0xFF), RGB(0x55, 0xFF, 0x55), RGB(0x55, 0xFF, 0xFF),
472 RGB(0xFF, 0x55, 0x55), RGB(0xFF, 0x55, 0xFF), RGB(0xFF, 0xFF, 0x55), RGB(0xFF, 0xFF, 0xFF)
475 // This is the same as TextPalette
476 static CONST COLORREF EgaPalette__HiRes
[VGA_MAX_COLORS
/ 4] =
478 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0xAA), RGB(0x00, 0xAA, 0x00), RGB(0x00, 0xAA, 0xAA),
479 RGB(0xAA, 0x00, 0x00), RGB(0xAA, 0x00, 0xAA), RGB(0xAA, 0xAA, 0x00), RGB(0xAA, 0xAA, 0xAA),
480 RGB(0x00, 0x00, 0x55), RGB(0x00, 0x00, 0xFF), RGB(0x00, 0xAA, 0x55), RGB(0x00, 0xAA, 0xFF),
481 RGB(0xAA, 0x00, 0x55), RGB(0xAA, 0x00, 0xFF), RGB(0xAA, 0xAA, 0x55), RGB(0xAA, 0xAA, 0xFF),
483 RGB(0x00, 0x55, 0x00), RGB(0x00, 0x55, 0xAA), RGB(0x00, 0xFF, 0x00), RGB(0x00, 0xFF, 0xAA),
484 RGB(0xAA, 0x55, 0x00), RGB(0xAA, 0x55, 0xAA), RGB(0xAA, 0xFF, 0x00), RGB(0xAA, 0xFF, 0xAA),
485 RGB(0x00, 0x55, 0x55), RGB(0x00, 0x55, 0xFF), RGB(0x00, 0xFF, 0x55), RGB(0x00, 0xFF, 0xFF),
486 RGB(0xAA, 0x55, 0x55), RGB(0xAA, 0x55, 0xFF), RGB(0xAA, 0xFF, 0x55), RGB(0xAA, 0xFF, 0xFF),
489 RGB(0x55, 0x00, 0x00), RGB(0x55, 0x00, 0xAA), RGB(0x55, 0xAA, 0x00), RGB(0x55, 0xAA, 0xAA),
490 RGB(0xFF, 0x00, 0x00), RGB(0xFF, 0x00, 0xAA), RGB(0xFF, 0xAA, 0x00), RGB(0xFF, 0xAA, 0xAA),
491 RGB(0x55, 0x00, 0x55), RGB(0x55, 0x00, 0xFF), RGB(0x55, 0xAA, 0x55), RGB(0x55, 0xAA, 0xFF),
492 RGB(0xFF, 0x00, 0x55), RGB(0xFF, 0x00, 0xFF), RGB(0xFF, 0xAA, 0x55), RGB(0xFF, 0xAA, 0xFF),
494 RGB(0x55, 0x55, 0x00), RGB(0x55, 0x55, 0xAA), RGB(0x55, 0xFF, 0x00), RGB(0x55, 0xFF, 0xAA),
495 RGB(0xFF, 0x55, 0x00), RGB(0xFF, 0x55, 0xAA), RGB(0xFF, 0xFF, 0x00), RGB(0xFF, 0xFF, 0xAA),
496 RGB(0x55, 0x55, 0x55), RGB(0x55, 0x55, 0xFF), RGB(0x55, 0xFF, 0x55), RGB(0x55, 0xFF, 0xFF),
497 RGB(0xFF, 0x55, 0x55), RGB(0xFF, 0x55, 0xFF), RGB(0xFF, 0xFF, 0x55), RGB(0xFF, 0xFF, 0xFF)
500 #define USE_REACTOS_COLORS
501 // #define USE_DOSBOX_COLORS
504 * Same palette as the default one 'VgaDefaultPalette' in vga.c
506 #if defined(USE_REACTOS_COLORS)
509 static CONST COLORREF VgaPalette
[VGA_MAX_COLORS
] =
511 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0xAA), RGB(0x00, 0xAA, 0x00), RGB(0x00, 0xAA, 0xAA),
512 RGB(0xAA, 0x00, 0x00), RGB(0xAA, 0x00, 0xAA), RGB(0xAA, 0x55, 0x00), RGB(0xAA, 0xAA, 0xAA),
513 RGB(0x55, 0x55, 0x55), RGB(0x55, 0x55, 0xFF), RGB(0x55, 0xFF, 0x55), RGB(0x55, 0xFF, 0xFF),
514 RGB(0xFF, 0x55, 0x55), RGB(0xFF, 0x55, 0xFF), RGB(0xFF, 0xFF, 0x55), RGB(0xFF, 0xFF, 0xFF),
515 RGB(0x00, 0x00, 0x00), RGB(0x10, 0x10, 0x10), RGB(0x20, 0x20, 0x20), RGB(0x35, 0x35, 0x35),
516 RGB(0x45, 0x45, 0x45), RGB(0x55, 0x55, 0x55), RGB(0x65, 0x65, 0x65), RGB(0x75, 0x75, 0x75),
517 RGB(0x8A, 0x8A, 0x8A), RGB(0x9A, 0x9A, 0x9A), RGB(0xAA, 0xAA, 0xAA), RGB(0xBA, 0xBA, 0xBA),
518 RGB(0xCA, 0xCA, 0xCA), RGB(0xDF, 0xDF, 0xDF), RGB(0xEF, 0xEF, 0xEF), RGB(0xFF, 0xFF, 0xFF),
519 RGB(0x00, 0x00, 0xFF), RGB(0x41, 0x00, 0xFF), RGB(0x82, 0x00, 0xFF), RGB(0xBE, 0x00, 0xFF),
520 RGB(0xFF, 0x00, 0xFF), RGB(0xFF, 0x00, 0xBE), RGB(0xFF, 0x00, 0x82), RGB(0xFF, 0x00, 0x41),
521 RGB(0xFF, 0x00, 0x00), RGB(0xFF, 0x41, 0x00), RGB(0xFF, 0x82, 0x00), RGB(0xFF, 0xBE, 0x00),
522 RGB(0xFF, 0xFF, 0x00), RGB(0xBE, 0xFF, 0x00), RGB(0x82, 0xFF, 0x00), RGB(0x41, 0xFF, 0x00),
523 RGB(0x00, 0xFF, 0x00), RGB(0x00, 0xFF, 0x41), RGB(0x00, 0xFF, 0x82), RGB(0x00, 0xFF, 0xBE),
524 RGB(0x00, 0xFF, 0xFF), RGB(0x00, 0xBE, 0xFF), RGB(0x00, 0x82, 0xFF), RGB(0x00, 0x41, 0xFF),
525 RGB(0x82, 0x82, 0xFF), RGB(0x9E, 0x82, 0xFF), RGB(0xBE, 0x82, 0xFF), RGB(0xDF, 0x82, 0xFF),
526 RGB(0xFF, 0x82, 0xFF), RGB(0xFF, 0x82, 0xDF), RGB(0xFF, 0x82, 0xBE), RGB(0xFF, 0x82, 0x9E),
527 RGB(0xFF, 0x82, 0x82), RGB(0xFF, 0x9E, 0x82), RGB(0xFF, 0xBE, 0x82), RGB(0xFF, 0xDF, 0x82),
528 RGB(0xFF, 0xFF, 0x82), RGB(0xDF, 0xFF, 0x82), RGB(0xBE, 0xFF, 0x82), RGB(0x9E, 0xFF, 0x82),
529 RGB(0x82, 0xFF, 0x82), RGB(0x82, 0xFF, 0x9E), RGB(0x82, 0xFF, 0xBE), RGB(0x82, 0xFF, 0xDF),
530 RGB(0x82, 0xFF, 0xFF), RGB(0x82, 0xDF, 0xFF), RGB(0x82, 0xBE, 0xFF), RGB(0x82, 0x9E, 0xFF),
531 RGB(0xBA, 0xBA, 0xFF), RGB(0xCA, 0xBA, 0xFF), RGB(0xDF, 0xBA, 0xFF), RGB(0xEF, 0xBA, 0xFF),
532 RGB(0xFF, 0xBA, 0xFF), RGB(0xFF, 0xBA, 0xEF), RGB(0xFF, 0xBA, 0xDF), RGB(0xFF, 0xBA, 0xCA),
533 RGB(0xFF, 0xBA, 0xBA), RGB(0xFF, 0xCA, 0xBA), RGB(0xFF, 0xDF, 0xBA), RGB(0xFF, 0xEF, 0xBA),
534 RGB(0xFF, 0xFF, 0xBA), RGB(0xEF, 0xFF, 0xBA), RGB(0xDF, 0xFF, 0xBA), RGB(0xCA, 0xFF, 0xBA),
535 RGB(0xBA, 0xFF, 0xBA), RGB(0xBA, 0xFF, 0xCA), RGB(0xBA, 0xFF, 0xDF), RGB(0xBA, 0xFF, 0xEF),
536 RGB(0xBA, 0xFF, 0xFF), RGB(0xBA, 0xEF, 0xFF), RGB(0xBA, 0xDF, 0xFF), RGB(0xBA, 0xCA, 0xFF),
537 RGB(0x00, 0x00, 0x71), RGB(0x1C, 0x00, 0x71), RGB(0x39, 0x00, 0x71), RGB(0x55, 0x00, 0x71),
538 RGB(0x71, 0x00, 0x71), RGB(0x71, 0x00, 0x55), RGB(0x71, 0x00, 0x39), RGB(0x71, 0x00, 0x1C),
539 RGB(0x71, 0x00, 0x00), RGB(0x71, 0x1C, 0x00), RGB(0x71, 0x39, 0x00), RGB(0x71, 0x55, 0x00),
540 RGB(0x71, 0x71, 0x00), RGB(0x55, 0x71, 0x00), RGB(0x39, 0x71, 0x00), RGB(0x1C, 0x71, 0x00),
541 RGB(0x00, 0x71, 0x00), RGB(0x00, 0x71, 0x1C), RGB(0x00, 0x71, 0x39), RGB(0x00, 0x71, 0x55),
542 RGB(0x00, 0x71, 0x71), RGB(0x00, 0x55, 0x71), RGB(0x00, 0x39, 0x71), RGB(0x00, 0x1C, 0x71),
543 RGB(0x39, 0x39, 0x71), RGB(0x45, 0x39, 0x71), RGB(0x55, 0x39, 0x71), RGB(0x61, 0x39, 0x71),
544 RGB(0x71, 0x39, 0x71), RGB(0x71, 0x39, 0x61), RGB(0x71, 0x39, 0x55), RGB(0x71, 0x39, 0x45),
545 RGB(0x71, 0x39, 0x39), RGB(0x71, 0x45, 0x39), RGB(0x71, 0x55, 0x39), RGB(0x71, 0x61, 0x39),
546 RGB(0x71, 0x71, 0x39), RGB(0x61, 0x71, 0x39), RGB(0x55, 0x71, 0x39), RGB(0x45, 0x71, 0x39),
547 RGB(0x39, 0x71, 0x39), RGB(0x39, 0x71, 0x45), RGB(0x39, 0x71, 0x55), RGB(0x39, 0x71, 0x61),
548 RGB(0x39, 0x71, 0x71), RGB(0x39, 0x61, 0x71), RGB(0x39, 0x55, 0x71), RGB(0x39, 0x45, 0x71),
549 RGB(0x51, 0x51, 0x71), RGB(0x59, 0x51, 0x71), RGB(0x61, 0x51, 0x71), RGB(0x69, 0x51, 0x71),
550 RGB(0x71, 0x51, 0x71), RGB(0x71, 0x51, 0x69), RGB(0x71, 0x51, 0x61), RGB(0x71, 0x51, 0x59),
551 RGB(0x71, 0x51, 0x51), RGB(0x71, 0x59, 0x51), RGB(0x71, 0x61, 0x51), RGB(0x71, 0x69, 0x51),
552 RGB(0x71, 0x71, 0x51), RGB(0x69, 0x71, 0x51), RGB(0x61, 0x71, 0x51), RGB(0x59, 0x71, 0x51),
553 RGB(0x51, 0x71, 0x51), RGB(0x51, 0x71, 0x59), RGB(0x51, 0x71, 0x61), RGB(0x51, 0x71, 0x69),
554 RGB(0x51, 0x71, 0x71), RGB(0x51, 0x69, 0x71), RGB(0x51, 0x61, 0x71), RGB(0x51, 0x59, 0x71),
555 RGB(0x00, 0x00, 0x41), RGB(0x10, 0x00, 0x41), RGB(0x20, 0x00, 0x41), RGB(0x31, 0x00, 0x41),
556 RGB(0x41, 0x00, 0x41), RGB(0x41, 0x00, 0x31), RGB(0x41, 0x00, 0x20), RGB(0x41, 0x00, 0x10),
557 RGB(0x41, 0x00, 0x00), RGB(0x41, 0x10, 0x00), RGB(0x41, 0x20, 0x00), RGB(0x41, 0x31, 0x00),
558 RGB(0x41, 0x41, 0x00), RGB(0x31, 0x41, 0x00), RGB(0x20, 0x41, 0x00), RGB(0x10, 0x41, 0x00),
559 RGB(0x00, 0x41, 0x00), RGB(0x00, 0x41, 0x10), RGB(0x00, 0x41, 0x20), RGB(0x00, 0x41, 0x31),
560 RGB(0x00, 0x41, 0x41), RGB(0x00, 0x31, 0x41), RGB(0x00, 0x20, 0x41), RGB(0x00, 0x10, 0x41),
561 RGB(0x20, 0x20, 0x41), RGB(0x28, 0x20, 0x41), RGB(0x31, 0x20, 0x41), RGB(0x39, 0x20, 0x41),
562 RGB(0x41, 0x20, 0x41), RGB(0x41, 0x20, 0x39), RGB(0x41, 0x20, 0x31), RGB(0x41, 0x20, 0x28),
563 RGB(0x41, 0x20, 0x20), RGB(0x41, 0x28, 0x20), RGB(0x41, 0x31, 0x20), RGB(0x41, 0x39, 0x20),
564 RGB(0x41, 0x41, 0x20), RGB(0x39, 0x41, 0x20), RGB(0x31, 0x41, 0x20), RGB(0x28, 0x41, 0x20),
565 RGB(0x20, 0x41, 0x20), RGB(0x20, 0x41, 0x28), RGB(0x20, 0x41, 0x31), RGB(0x20, 0x41, 0x39),
566 RGB(0x20, 0x41, 0x41), RGB(0x20, 0x39, 0x41), RGB(0x20, 0x31, 0x41), RGB(0x20, 0x28, 0x41),
567 RGB(0x2D, 0x2D, 0x41), RGB(0x31, 0x2D, 0x41), RGB(0x35, 0x2D, 0x41), RGB(0x3D, 0x2D, 0x41),
568 RGB(0x41, 0x2D, 0x41), RGB(0x41, 0x2D, 0x3D), RGB(0x41, 0x2D, 0x35), RGB(0x41, 0x2D, 0x31),
569 RGB(0x41, 0x2D, 0x2D), RGB(0x41, 0x31, 0x2D), RGB(0x41, 0x35, 0x2D), RGB(0x41, 0x3D, 0x2D),
570 RGB(0x41, 0x41, 0x2D), RGB(0x3D, 0x41, 0x2D), RGB(0x35, 0x41, 0x2D), RGB(0x31, 0x41, 0x2D),
571 RGB(0x2D, 0x41, 0x2D), RGB(0x2D, 0x41, 0x31), RGB(0x2D, 0x41, 0x35), RGB(0x2D, 0x41, 0x3D),
572 RGB(0x2D, 0x41, 0x41), RGB(0x2D, 0x3D, 0x41), RGB(0x2D, 0x35, 0x41), RGB(0x2D, 0x31, 0x41),
573 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00),
574 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00)
577 #elif defined(USE_DOSBOX_COLORS)
580 static CONST COLORREF VgaPalette
[VGA_MAX_COLORS
] =
582 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0xAA), RGB(0x00, 0xAA, 0x00), RGB(0x00, 0xAA, 0xAA),
583 RGB(0xAA, 0x00, 0x00), RGB(0xAA, 0x00, 0xAA), RGB(0xAA, 0x55, 0x00), RGB(0xAA, 0xAA, 0xAA),
584 RGB(0x55, 0x55, 0x55), RGB(0x55, 0x55, 0xFF), RGB(0x55, 0xFF, 0x55), RGB(0x55, 0xFF, 0xFF),
585 RGB(0xFF, 0x55, 0x55), RGB(0xFF, 0x55, 0xFF), RGB(0xFF, 0xFF, 0x55), RGB(0xFF, 0xFF, 0xFF),
586 RGB(0x00, 0x00, 0x00), RGB(0x14, 0x14, 0x14), RGB(0x20, 0x20, 0x20), RGB(0x2C, 0x2C, 0x2C),
587 RGB(0x38, 0x38, 0x38), RGB(0x45, 0x45, 0x45), RGB(0x51, 0x51, 0x51), RGB(0x61, 0x61, 0x61),
588 RGB(0x71, 0x71, 0x71), RGB(0x82, 0x82, 0x82), RGB(0x92, 0x92, 0x92), RGB(0xA2, 0xA2, 0xA2),
589 RGB(0xB6, 0xB6, 0xB6), RGB(0xCB, 0xCB, 0xCB), RGB(0xE3, 0xE3, 0xE3), RGB(0xFF, 0xFF, 0xFF),
590 RGB(0x00, 0x00, 0xFF), RGB(0x41, 0x00, 0xFF), RGB(0x7D, 0x00, 0xFF), RGB(0xBE, 0x00, 0xFF),
591 RGB(0xFF, 0x00, 0xFF), RGB(0xFF, 0x00, 0xBE), RGB(0xFF, 0x00, 0x7D), RGB(0xFF, 0x00, 0x41),
592 RGB(0xFF, 0x00, 0x00), RGB(0xFF, 0x41, 0x00), RGB(0xFF, 0x7D, 0x00), RGB(0xFF, 0xBE, 0x00),
593 RGB(0xFF, 0xFF, 0x00), RGB(0xBE, 0xFF, 0x00), RGB(0x7D, 0xFF, 0x00), RGB(0x41, 0xFF, 0x00),
594 RGB(0x00, 0xFF, 0x00), RGB(0x00, 0xFF, 0x41), RGB(0x00, 0xFF, 0x7D), RGB(0x00, 0xFF, 0xBE),
595 RGB(0x00, 0xFF, 0xFF), RGB(0x00, 0xBE, 0xFF), RGB(0x00, 0x7D, 0xFF), RGB(0x00, 0x41, 0xFF),
596 RGB(0x7D, 0x7D, 0xFF), RGB(0x9E, 0x7D, 0xFF), RGB(0xBE, 0x7D, 0xFF), RGB(0xDF, 0x7D, 0xFF),
597 RGB(0xFF, 0x7D, 0xFF), RGB(0xFF, 0x7D, 0xDF), RGB(0xFF, 0x7D, 0xBE), RGB(0xFF, 0x7D, 0x9E),
599 RGB(0xFF, 0x7D, 0x7D), RGB(0xFF, 0x9E, 0x7D), RGB(0xFF, 0xBE, 0x7D), RGB(0xFF, 0xDF, 0x7D),
600 RGB(0xFF, 0xFF, 0x7D), RGB(0xDF, 0xFF, 0x7D), RGB(0xBE, 0xFF, 0x7D), RGB(0x9E, 0xFF, 0x7D),
601 RGB(0x7D, 0xFF, 0x7D), RGB(0x7D, 0xFF, 0x9E), RGB(0x7D, 0xFF, 0xBE), RGB(0x7D, 0xFF, 0xDF),
602 RGB(0x7D, 0xFF, 0xFF), RGB(0x7D, 0xDF, 0xFF), RGB(0x7D, 0xBE, 0xFF), RGB(0x7D, 0x9E, 0xFF),
603 RGB(0xB6, 0xB6, 0xFF), RGB(0xC7, 0xB6, 0xFF), RGB(0xDB, 0xB6, 0xFF), RGB(0xEB, 0xB6, 0xFF),
604 RGB(0xFF, 0xB6, 0xFF), RGB(0xFF, 0xB6, 0xEB), RGB(0xFF, 0xB6, 0xDB), RGB(0xFF, 0xB6, 0xC7),
605 RGB(0xFF, 0xB6, 0xB6), RGB(0xFF, 0xC7, 0xB6), RGB(0xFF, 0xDB, 0xB6), RGB(0xFF, 0xEB, 0xB6),
606 RGB(0xFF, 0xFF, 0xB6), RGB(0xEB, 0xFF, 0xB6), RGB(0xDB, 0xFF, 0xB6), RGB(0xC7, 0xFF, 0xB6),
607 RGB(0xB6, 0xFF, 0xB6), RGB(0xB6, 0xFF, 0xC7), RGB(0xB6, 0xFF, 0xDB), RGB(0xB6, 0xFF, 0xEB),
608 RGB(0xB6, 0xFF, 0xFF), RGB(0xB6, 0xEB, 0xFF), RGB(0xB6, 0xDB, 0xFF), RGB(0xB6, 0xC7, 0xFF),
609 RGB(0x00, 0x00, 0x71), RGB(0x1C, 0x00, 0x71), RGB(0x38, 0x00, 0x71), RGB(0x55, 0x00, 0x71),
610 RGB(0x71, 0x00, 0x71), RGB(0x71, 0x00, 0x55), RGB(0x71, 0x00, 0x38), RGB(0x71, 0x00, 0x1C),
611 RGB(0x71, 0x00, 0x00), RGB(0x71, 0x1C, 0x00), RGB(0x71, 0x38, 0x00), RGB(0x71, 0x55, 0x00),
612 RGB(0x71, 0x71, 0x00), RGB(0x55, 0x71, 0x00), RGB(0x38, 0x71, 0x00), RGB(0x1C, 0x71, 0x00),
613 RGB(0x00, 0x71, 0x00), RGB(0x00, 0x71, 0x1C), RGB(0x00, 0x71, 0x38), RGB(0x00, 0x71, 0x55),
614 RGB(0x00, 0x71, 0x71), RGB(0x00, 0x55, 0x71), RGB(0x00, 0x38, 0x71), RGB(0x00, 0x1C, 0x71),
616 RGB(0x38, 0x38, 0x71), RGB(0x45, 0x38, 0x71), RGB(0x55, 0x38, 0x71), RGB(0x61, 0x38, 0x71),
617 RGB(0x71, 0x38, 0x71), RGB(0x71, 0x38, 0x61), RGB(0x71, 0x38, 0x55), RGB(0x71, 0x38, 0x45),
618 RGB(0x71, 0x38, 0x38), RGB(0x71, 0x45, 0x38), RGB(0x71, 0x55, 0x38), RGB(0x71, 0x61, 0x38),
619 RGB(0x71, 0x71, 0x38), RGB(0x61, 0x71, 0x38), RGB(0x55, 0x71, 0x38), RGB(0x45, 0x71, 0x38),
620 RGB(0x38, 0x71, 0x38), RGB(0x38, 0x71, 0x45), RGB(0x38, 0x71, 0x55), RGB(0x38, 0x71, 0x61),
621 RGB(0x38, 0x71, 0x71), RGB(0x38, 0x61, 0x71), RGB(0x38, 0x55, 0x71), RGB(0x38, 0x45, 0x71),
622 RGB(0x51, 0x51, 0x71), RGB(0x59, 0x51, 0x71), RGB(0x61, 0x51, 0x71), RGB(0x69, 0x51, 0x71),
623 RGB(0x71, 0x51, 0x71), RGB(0x71, 0x51, 0x69), RGB(0x71, 0x51, 0x61), RGB(0x71, 0x51, 0x59),
624 RGB(0x71, 0x51, 0x51), RGB(0x71, 0x59, 0x51), RGB(0x71, 0x61, 0x51), RGB(0x71, 0x69, 0x51),
625 RGB(0x71, 0x71, 0x51), RGB(0x69, 0x71, 0x51), RGB(0x61, 0x71, 0x51), RGB(0x59, 0x71, 0x51),
626 RGB(0x51, 0x71, 0x51), RGB(0x51, 0x71, 0x59), RGB(0x51, 0x71, 0x61), RGB(0x51, 0x71, 0x69),
627 RGB(0x51, 0x71, 0x71), RGB(0x51, 0x69, 0x71), RGB(0x51, 0x61, 0x71), RGB(0x51, 0x59, 0x71),
628 RGB(0x00, 0x00, 0x41), RGB(0x10, 0x00, 0x41), RGB(0x20, 0x00, 0x41), RGB(0x30, 0x00, 0x41),
629 RGB(0x41, 0x00, 0x41), RGB(0x41, 0x00, 0x30), RGB(0x41, 0x00, 0x20), RGB(0x41, 0x00, 0x10),
630 RGB(0x41, 0x00, 0x00), RGB(0x41, 0x10, 0x00), RGB(0x41, 0x20, 0x00), RGB(0x41, 0x30, 0x00),
631 RGB(0x41, 0x41, 0x00), RGB(0x30, 0x41, 0x00), RGB(0x20, 0x41, 0x00), RGB(0x10, 0x41, 0x00),
633 RGB(0x00, 0x41, 0x00), RGB(0x00, 0x41, 0x10), RGB(0x00, 0x41, 0x20), RGB(0x00, 0x41, 0x30),
634 RGB(0x00, 0x41, 0x41), RGB(0x00, 0x30, 0x41), RGB(0x00, 0x20, 0x41), RGB(0x00, 0x10, 0x41),
635 RGB(0x20, 0x20, 0x41), RGB(0x28, 0x20, 0x41), RGB(0x30, 0x20, 0x41), RGB(0x38, 0x20, 0x41),
636 RGB(0x41, 0x20, 0x41), RGB(0x41, 0x20, 0x38), RGB(0x41, 0x20, 0x30), RGB(0x41, 0x20, 0x28),
637 RGB(0x41, 0x20, 0x20), RGB(0x41, 0x28, 0x20), RGB(0x41, 0x30, 0x20), RGB(0x41, 0x38, 0x20),
638 RGB(0x41, 0x41, 0x20), RGB(0x38, 0x41, 0x20), RGB(0x30, 0x41, 0x20), RGB(0x28, 0x41, 0x20),
639 RGB(0x20, 0x41, 0x20), RGB(0x20, 0x41, 0x28), RGB(0x20, 0x41, 0x30), RGB(0x20, 0x41, 0x38),
640 RGB(0x20, 0x41, 0x41), RGB(0x20, 0x38, 0x41), RGB(0x20, 0x30, 0x41), RGB(0x20, 0x28, 0x41),
641 RGB(0x2C, 0x2C, 0x41), RGB(0x30, 0x2C, 0x41), RGB(0x34, 0x2C, 0x41), RGB(0x3C, 0x2C, 0x41),
642 RGB(0x41, 0x2C, 0x41), RGB(0x41, 0x2C, 0x3C), RGB(0x41, 0x2C, 0x34), RGB(0x41, 0x2C, 0x30),
643 RGB(0x41, 0x2C, 0x2C), RGB(0x41, 0x30, 0x2C), RGB(0x41, 0x34, 0x2C), RGB(0x41, 0x3C, 0x2C),
644 RGB(0x41, 0x41, 0x2C), RGB(0x3C, 0x41, 0x2C), RGB(0x34, 0x41, 0x2C), RGB(0x30, 0x41, 0x2C),
645 RGB(0x2C, 0x41, 0x2C), RGB(0x2C, 0x41, 0x30), RGB(0x2C, 0x41, 0x34), RGB(0x2C, 0x41, 0x3C),
646 RGB(0x2C, 0x41, 0x41), RGB(0x2C, 0x3C, 0x41), RGB(0x2C, 0x34, 0x41), RGB(0x2C, 0x30, 0x41),
647 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00),
648 RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00), RGB(0x00, 0x00, 0x00)
653 static CONST UCHAR Font8x8
[VGA_FONT_CHARACTERS
* 8] =
655 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
656 0x7E, 0x81, 0xA5, 0x81, 0xBD, 0x99, 0x81, 0x7E,
657 0x7E, 0xFF, 0xDB, 0xFF, 0xC3, 0xE7, 0xFF, 0x7E,
658 0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00,
659 0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x10, 0x00,
660 0x38, 0x7C, 0x38, 0xFE, 0xFE, 0x92, 0x10, 0x7C,
661 0x00, 0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x7C,
662 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00,
663 0xFF, 0xFF, 0xE7, 0xC3, 0xC3, 0xE7, 0xFF, 0xFF,
664 0x00, 0x3C, 0x66, 0x42, 0x42, 0x66, 0x3C, 0x00,
665 0xFF, 0xC3, 0x99, 0xBD, 0xBD, 0x99, 0xC3, 0xFF,
666 0x0F, 0x07, 0x0F, 0x7D, 0xCC, 0xCC, 0xCC, 0x78,
667 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18,
668 0x3F, 0x33, 0x3F, 0x30, 0x30, 0x70, 0xF0, 0xE0,
669 0x7F, 0x63, 0x7F, 0x63, 0x63, 0x67, 0xE6, 0xC0,
670 0x99, 0x5A, 0x3C, 0xE7, 0xE7, 0x3C, 0x5A, 0x99,
671 0x80, 0xE0, 0xF8, 0xFE, 0xF8, 0xE0, 0x80, 0x00,
672 0x02, 0x0E, 0x3E, 0xFE, 0x3E, 0x0E, 0x02, 0x00,
673 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x7E, 0x3C, 0x18,
674 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00,
675 0x7F, 0xDB, 0xDB, 0x7B, 0x1B, 0x1B, 0x1B, 0x00,
676 0x3E, 0x63, 0x38, 0x6C, 0x6C, 0x38, 0x86, 0xFC,
677 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x00,
678 0x18, 0x3C, 0x7E, 0x18, 0x7E, 0x3C, 0x18, 0xFF,
679 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x00,
680 0x18, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00,
681 0x00, 0x18, 0x0C, 0xFE, 0x0C, 0x18, 0x00, 0x00,
682 0x00, 0x30, 0x60, 0xFE, 0x60, 0x30, 0x00, 0x00,
683 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xFE, 0x00, 0x00,
684 0x00, 0x24, 0x66, 0xFF, 0x66, 0x24, 0x00, 0x00,
685 0x00, 0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x00, 0x00,
686 0x00, 0xFF, 0xFF, 0x7E, 0x3C, 0x18, 0x00, 0x00,
687 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
688 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00,
689 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00,
690 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00,
691 0x18, 0x7E, 0xC0, 0x7C, 0x06, 0xFC, 0x18, 0x00,
692 0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00,
693 0x38, 0x6C, 0x38, 0x76, 0xDC, 0xCC, 0x76, 0x00,
694 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
695 0x18, 0x30, 0x60, 0x60, 0x60, 0x30, 0x18, 0x00,
696 0x60, 0x30, 0x18, 0x18, 0x18, 0x30, 0x60, 0x00,
697 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00,
698 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00,
699 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30,
700 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,
701 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00,
702 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x80, 0x00,
703 0x7C, 0xCE, 0xDE, 0xF6, 0xE6, 0xC6, 0x7C, 0x00,
704 0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0xFC, 0x00,
705 0x78, 0xCC, 0x0C, 0x38, 0x60, 0xCC, 0xFC, 0x00,
706 0x78, 0xCC, 0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00,
707 0x1C, 0x3C, 0x6C, 0xCC, 0xFE, 0x0C, 0x1E, 0x00,
708 0xFC, 0xC0, 0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00,
709 0x38, 0x60, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00,
710 0xFC, 0xCC, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00,
711 0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00,
712 0x78, 0xCC, 0xCC, 0x7C, 0x0C, 0x18, 0x70, 0x00,
713 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00,
714 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30,
715 0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00,
716 0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x00,
717 0x60, 0x30, 0x18, 0x0C, 0x18, 0x30, 0x60, 0x00,
718 0x3C, 0x66, 0x0C, 0x18, 0x18, 0x00, 0x18, 0x00,
719 0x7C, 0xC6, 0xDE, 0xDE, 0xDC, 0xC0, 0x7C, 0x00,
720 0x30, 0x78, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0x00,
721 0xFC, 0x66, 0x66, 0x7C, 0x66, 0x66, 0xFC, 0x00,
722 0x3C, 0x66, 0xC0, 0xC0, 0xC0, 0x66, 0x3C, 0x00,
723 0xF8, 0x6C, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00,
724 0xFE, 0x62, 0x68, 0x78, 0x68, 0x62, 0xFE, 0x00,
725 0xFE, 0x62, 0x68, 0x78, 0x68, 0x60, 0xF0, 0x00,
726 0x3C, 0x66, 0xC0, 0xC0, 0xCE, 0x66, 0x3A, 0x00,
727 0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00,
728 0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00,
729 0x1E, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00,
730 0xE6, 0x66, 0x6C, 0x78, 0x6C, 0x66, 0xE6, 0x00,
731 0xF0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xFE, 0x00,
732 0xC6, 0xEE, 0xFE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00,
733 0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00,
734 0x38, 0x6C, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x00,
735 0xFC, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00,
736 0x7C, 0xC6, 0xC6, 0xC6, 0xD6, 0x7C, 0x0E, 0x00,
737 0xFC, 0x66, 0x66, 0x7C, 0x6C, 0x66, 0xE6, 0x00,
738 0x7C, 0xC6, 0xE0, 0x78, 0x0E, 0xC6, 0x7C, 0x00,
739 0xFC, 0xB4, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00,
740 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xFC, 0x00,
741 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00,
742 0xC6, 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0x6C, 0x00,
743 0xC6, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0xC6, 0x00,
744 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x30, 0x78, 0x00,
745 0xFE, 0xC6, 0x8C, 0x18, 0x32, 0x66, 0xFE, 0x00,
746 0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x78, 0x00,
747 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x02, 0x00,
748 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00,
749 0x10, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00,
750 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
751 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
752 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00,
753 0xE0, 0x60, 0x60, 0x7C, 0x66, 0x66, 0xDC, 0x00,
754 0x00, 0x00, 0x78, 0xCC, 0xC0, 0xCC, 0x78, 0x00,
755 0x1C, 0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0x76, 0x00,
756 0x00, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00,
757 0x38, 0x6C, 0x64, 0xF0, 0x60, 0x60, 0xF0, 0x00,
758 0x00, 0x00, 0x76, 0xCC, 0xCC, 0x7C, 0x0C, 0xF8,
759 0xE0, 0x60, 0x6C, 0x76, 0x66, 0x66, 0xE6, 0x00,
760 0x30, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00,
761 0x0C, 0x00, 0x1C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78,
762 0xE0, 0x60, 0x66, 0x6C, 0x78, 0x6C, 0xE6, 0x00,
763 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00,
764 0x00, 0x00, 0xCC, 0xFE, 0xFE, 0xD6, 0xD6, 0x00,
765 0x00, 0x00, 0xB8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00,
766 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
767 0x00, 0x00, 0xDC, 0x66, 0x66, 0x7C, 0x60, 0xF0,
768 0x00, 0x00, 0x76, 0xCC, 0xCC, 0x7C, 0x0C, 0x1E,
769 0x00, 0x00, 0xDC, 0x76, 0x62, 0x60, 0xF0, 0x00,
770 0x00, 0x00, 0x7C, 0xC0, 0x70, 0x1C, 0xF8, 0x00,
771 0x10, 0x30, 0xFC, 0x30, 0x30, 0x34, 0x18, 0x00,
772 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00,
773 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00,
774 0x00, 0x00, 0xC6, 0xC6, 0xD6, 0xFE, 0x6C, 0x00,
775 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00,
776 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0xF8,
777 0x00, 0x00, 0xFC, 0x98, 0x30, 0x64, 0xFC, 0x00,
778 0x1C, 0x30, 0x30, 0xE0, 0x30, 0x30, 0x1C, 0x00,
779 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00,
780 0xE0, 0x30, 0x30, 0x1C, 0x30, 0x30, 0xE0, 0x00,
781 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
782 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0x00,
783 0x7C, 0xC6, 0xC0, 0xC6, 0x7C, 0x0C, 0x06, 0x7C,
784 0x00, 0xCC, 0x00, 0xCC, 0xCC, 0xCC, 0x76, 0x00,
785 0x1C, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00,
786 0x7E, 0x81, 0x3C, 0x06, 0x3E, 0x66, 0x3B, 0x00,
787 0xCC, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00,
788 0xE0, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00,
789 0x30, 0x30, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00,
790 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0x78, 0x0C, 0x38,
791 0x7E, 0x81, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00,
792 0xCC, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00,
793 0xE0, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00,
794 0xCC, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00,
795 0x7C, 0x82, 0x38, 0x18, 0x18, 0x18, 0x3C, 0x00,
796 0xE0, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00,
797 0xC6, 0x10, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
798 0x30, 0x30, 0x00, 0x78, 0xCC, 0xFC, 0xCC, 0x00,
799 0x1C, 0x00, 0xFC, 0x60, 0x78, 0x60, 0xFC, 0x00,
800 0x00, 0x00, 0x7F, 0x0C, 0x7F, 0xCC, 0x7F, 0x00,
801 0x3E, 0x6C, 0xCC, 0xFE, 0xCC, 0xCC, 0xCE, 0x00,
802 0x78, 0x84, 0x00, 0x78, 0xCC, 0xCC, 0x78, 0x00,
803 0x00, 0xCC, 0x00, 0x78, 0xCC, 0xCC, 0x78, 0x00,
804 0x00, 0xE0, 0x00, 0x78, 0xCC, 0xCC, 0x78, 0x00,
805 0x78, 0x84, 0x00, 0xCC, 0xCC, 0xCC, 0x76, 0x00,
806 0x00, 0xE0, 0x00, 0xCC, 0xCC, 0xCC, 0x76, 0x00,
807 0x00, 0xCC, 0x00, 0xCC, 0xCC, 0x7C, 0x0C, 0xF8,
808 0xC3, 0x18, 0x3C, 0x66, 0x66, 0x3C, 0x18, 0x00,
809 0xCC, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
810 0x18, 0x18, 0x7E, 0xC0, 0xC0, 0x7E, 0x18, 0x18,
811 0x38, 0x6C, 0x64, 0xF0, 0x60, 0xE6, 0xFC, 0x00,
812 0xCC, 0xCC, 0x78, 0x30, 0xFC, 0x30, 0xFC, 0x30,
813 0xF8, 0xCC, 0xCC, 0xFA, 0xC6, 0xCF, 0xC6, 0xC3,
814 0x0E, 0x1B, 0x18, 0x3C, 0x18, 0x18, 0xD8, 0x70,
815 0x1C, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00,
816 0x38, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00,
817 0x00, 0x1C, 0x00, 0x78, 0xCC, 0xCC, 0x78, 0x00,
818 0x00, 0x1C, 0x00, 0xCC, 0xCC, 0xCC, 0x76, 0x00,
819 0x00, 0xF8, 0x00, 0xB8, 0xCC, 0xCC, 0xCC, 0x00,
820 0xFC, 0x00, 0xCC, 0xEC, 0xFC, 0xDC, 0xCC, 0x00,
821 0x3C, 0x6C, 0x6C, 0x3E, 0x00, 0x7E, 0x00, 0x00,
822 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x7C, 0x00, 0x00,
823 0x18, 0x00, 0x18, 0x18, 0x30, 0x66, 0x3C, 0x00,
824 0x00, 0x00, 0x00, 0xFC, 0xC0, 0xC0, 0x00, 0x00,
825 0x00, 0x00, 0x00, 0xFC, 0x0C, 0x0C, 0x00, 0x00,
826 0xC6, 0xCC, 0xD8, 0x36, 0x6B, 0xC2, 0x84, 0x0F,
827 0xC3, 0xC6, 0xCC, 0xDB, 0x37, 0x6D, 0xCF, 0x03,
828 0x18, 0x00, 0x18, 0x18, 0x3C, 0x3C, 0x18, 0x00,
829 0x00, 0x33, 0x66, 0xCC, 0x66, 0x33, 0x00, 0x00,
830 0x00, 0xCC, 0x66, 0x33, 0x66, 0xCC, 0x00, 0x00,
831 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88,
832 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
833 0xDB, 0xF6, 0xDB, 0x6F, 0xDB, 0x7E, 0xD7, 0xED,
834 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
835 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0x18, 0x18,
836 0x18, 0x18, 0xF8, 0x18, 0xF8, 0x18, 0x18, 0x18,
837 0x36, 0x36, 0x36, 0x36, 0xF6, 0x36, 0x36, 0x36,
838 0x00, 0x00, 0x00, 0x00, 0xFE, 0x36, 0x36, 0x36,
839 0x00, 0x00, 0xF8, 0x18, 0xF8, 0x18, 0x18, 0x18,
840 0x36, 0x36, 0xF6, 0x06, 0xF6, 0x36, 0x36, 0x36,
841 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
842 0x00, 0x00, 0xFE, 0x06, 0xF6, 0x36, 0x36, 0x36,
843 0x36, 0x36, 0xF6, 0x06, 0xFE, 0x00, 0x00, 0x00,
844 0x36, 0x36, 0x36, 0x36, 0xFE, 0x00, 0x00, 0x00,
845 0x18, 0x18, 0xF8, 0x18, 0xF8, 0x00, 0x00, 0x00,
846 0x00, 0x00, 0x00, 0x00, 0xF8, 0x18, 0x18, 0x18,
847 0x18, 0x18, 0x18, 0x18, 0x1F, 0x00, 0x00, 0x00,
848 0x18, 0x18, 0x18, 0x18, 0xFF, 0x00, 0x00, 0x00,
849 0x00, 0x00, 0x00, 0x00, 0xFF, 0x18, 0x18, 0x18,
850 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x18, 0x18,
851 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
852 0x18, 0x18, 0x18, 0x18, 0xFF, 0x18, 0x18, 0x18,
853 0x18, 0x18, 0x1F, 0x18, 0x1F, 0x18, 0x18, 0x18,
854 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36,
855 0x36, 0x36, 0x37, 0x30, 0x3F, 0x00, 0x00, 0x00,
856 0x00, 0x00, 0x3F, 0x30, 0x37, 0x36, 0x36, 0x36,
857 0x36, 0x36, 0xF7, 0x00, 0xFF, 0x00, 0x00, 0x00,
858 0x00, 0x00, 0xFF, 0x00, 0xF7, 0x36, 0x36, 0x36,
859 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36,
860 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00,
861 0x36, 0x36, 0xF7, 0x00, 0xF7, 0x36, 0x36, 0x36,
862 0x18, 0x18, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00,
863 0x36, 0x36, 0x36, 0x36, 0xFF, 0x00, 0x00, 0x00,
864 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x18, 0x18, 0x18,
865 0x00, 0x00, 0x00, 0x00, 0xFF, 0x36, 0x36, 0x36,
866 0x36, 0x36, 0x36, 0x36, 0x3F, 0x00, 0x00, 0x00,
867 0x18, 0x18, 0x1F, 0x18, 0x1F, 0x00, 0x00, 0x00,
868 0x00, 0x00, 0x1F, 0x18, 0x1F, 0x18, 0x18, 0x18,
869 0x00, 0x00, 0x00, 0x00, 0x3F, 0x36, 0x36, 0x36,
870 0x36, 0x36, 0x36, 0x36, 0xFF, 0x36, 0x36, 0x36,
871 0x18, 0x18, 0xFF, 0x18, 0xFF, 0x18, 0x18, 0x18,
872 0x18, 0x18, 0x18, 0x18, 0xF8, 0x00, 0x00, 0x00,
873 0x00, 0x00, 0x00, 0x00, 0x1F, 0x18, 0x18, 0x18,
874 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
875 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
876 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
877 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
878 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
879 0x00, 0x00, 0x76, 0xDC, 0xC8, 0xDC, 0x76, 0x00,
880 0x00, 0x78, 0xCC, 0xF8, 0xCC, 0xF8, 0xC0, 0xC0,
881 0x00, 0xFC, 0xCC, 0xC0, 0xC0, 0xC0, 0xC0, 0x00,
882 0x00, 0x00, 0xFE, 0x6C, 0x6C, 0x6C, 0x6C, 0x00,
883 0xFC, 0xCC, 0x60, 0x30, 0x60, 0xCC, 0xFC, 0x00,
884 0x00, 0x00, 0x7E, 0xD8, 0xD8, 0xD8, 0x70, 0x00,
885 0x00, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0xC0,
886 0x00, 0x76, 0xDC, 0x18, 0x18, 0x18, 0x18, 0x00,
887 0xFC, 0x30, 0x78, 0xCC, 0xCC, 0x78, 0x30, 0xFC,
888 0x38, 0x6C, 0xC6, 0xFE, 0xC6, 0x6C, 0x38, 0x00,
889 0x38, 0x6C, 0xC6, 0xC6, 0x6C, 0x6C, 0xEE, 0x00,
890 0x1C, 0x30, 0x18, 0x7C, 0xCC, 0xCC, 0x78, 0x00,
891 0x00, 0x00, 0x7E, 0xDB, 0xDB, 0x7E, 0x00, 0x00,
892 0x06, 0x0C, 0x7E, 0xDB, 0xDB, 0x7E, 0x60, 0xC0,
893 0x38, 0x60, 0xC0, 0xF8, 0xC0, 0x60, 0x38, 0x00,
894 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x00,
895 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00,
896 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x7E, 0x00,
897 0x60, 0x30, 0x18, 0x30, 0x60, 0x00, 0xFC, 0x00,
898 0x18, 0x30, 0x60, 0x30, 0x18, 0x00, 0xFC, 0x00,
899 0x0E, 0x1B, 0x1B, 0x18, 0x18, 0x18, 0x18, 0x18,
900 0x18, 0x18, 0x18, 0x18, 0x18, 0xD8, 0xD8, 0x70,
901 0x18, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x18, 0x00,
902 0x00, 0x76, 0xDC, 0x00, 0x76, 0xDC, 0x00, 0x00,
903 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00,
904 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
905 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
906 0x0F, 0x0C, 0x0C, 0x0C, 0xEC, 0x6C, 0x3C, 0x1C,
907 0x58, 0x6C, 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00,
908 0x70, 0x98, 0x30, 0x60, 0xF8, 0x00, 0x00, 0x00,
909 0x00, 0x00, 0x3C, 0x3C, 0x3C, 0x3C, 0x00, 0x00,
910 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
913 static CONST UCHAR Font8x14
[VGA_FONT_CHARACTERS
* 14] =
915 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
916 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
917 0x00, 0x00, 0x00, 0x7E, 0x81, 0xA5, 0x81,
918 0x81, 0xBD, 0x99, 0x81, 0x7E, 0x00, 0x00,
919 0x00, 0x00, 0x00, 0x7E, 0xFF, 0xDB, 0xFF,
920 0xFF, 0xC3, 0xE7, 0xFF, 0x7E, 0x00, 0x00,
921 0x00, 0x00, 0x00, 0x00, 0x6C, 0xFE, 0xFE,
922 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00,
923 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7C,
924 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00,
925 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0xE7,
926 0xE7, 0xE7, 0x18, 0x18, 0x3C, 0x00, 0x00,
927 0x00, 0x00, 0x00, 0x18, 0x3C, 0x7E, 0xFF,
928 0xFF, 0x7E, 0x18, 0x18, 0x3C, 0x00, 0x00,
929 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
930 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00,
931 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7,
932 0xC3, 0xC3, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF,
933 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x66,
934 0x42, 0x42, 0x66, 0x3C, 0x00, 0x00, 0x00,
935 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0x99,
936 0xBD, 0xBD, 0x99, 0xC3, 0xFF, 0xFF, 0xFF,
937 0x00, 0x00, 0x00, 0x1E, 0x0E, 0x1A, 0x32,
938 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00,
939 0x00, 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66,
940 0x3C, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00,
941 0x00, 0x00, 0x00, 0x3F, 0x33, 0x3F, 0x30,
942 0x30, 0x30, 0x70, 0xF0, 0xE0, 0x00, 0x00,
943 0x00, 0x00, 0x00, 0x7F, 0x63, 0x7F, 0x63,
944 0x63, 0x63, 0x67, 0xE7, 0xE6, 0xC0, 0x00,
945 0x00, 0x00, 0x00, 0x18, 0x18, 0xDB, 0x3C,
946 0xE7, 0x3C, 0xDB, 0x18, 0x18, 0x00, 0x00,
947 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF8,
948 0xFE, 0xF8, 0xE0, 0xC0, 0x80, 0x00, 0x00,
949 0x00, 0x00, 0x00, 0x02, 0x06, 0x0E, 0x3E,
950 0xFE, 0x3E, 0x0E, 0x06, 0x02, 0x00, 0x00,
951 0x00, 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18,
952 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00, 0x00,
953 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66,
954 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00,
955 0x00, 0x00, 0x00, 0x7F, 0xDB, 0xDB, 0xDB,
956 0x7B, 0x1B, 0x1B, 0x1B, 0x1B, 0x00, 0x00,
957 0x00, 0x7C, 0xC6, 0x60, 0x38, 0x6C, 0xC6,
958 0x6C, 0x38, 0x0C, 0xC6, 0x7C, 0x00, 0x00,
959 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
960 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFE,
961 0x00, 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18,
962 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x7E, 0x00,
963 0x00, 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18,
964 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
965 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18,
966 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00, 0x00,
967 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0C,
968 0xFE, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00,
969 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60,
970 0xFE, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00,
971 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0,
972 0xC0, 0xC0, 0xFE, 0x00, 0x00, 0x00, 0x00,
973 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6C,
974 0xFE, 0x6C, 0x28, 0x00, 0x00, 0x00, 0x00,
975 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38,
976 0x7C, 0x7C, 0xFE, 0xFE, 0x00, 0x00, 0x00,
977 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x7C,
978 0x7C, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00,
979 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
980 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
981 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x3C,
982 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00,
983 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00,
984 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
985 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C,
986 0x6C, 0x6C, 0xFE, 0x6C, 0x6C, 0x00, 0x00,
987 0x00, 0x18, 0x18, 0x7C, 0xC6, 0xC2, 0xC0,
988 0x7C, 0x06, 0x86, 0xC6, 0x7C, 0x18, 0x18,
989 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0xC6,
990 0x0C, 0x18, 0x30, 0x66, 0xC6, 0x00, 0x00,
991 0x00, 0x00, 0x00, 0x38, 0x6C, 0x6C, 0x38,
992 0x76, 0xDC, 0xCC, 0xCC, 0x76, 0x00, 0x00,
993 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30,
994 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
995 0x00, 0x00, 0x00, 0x0C, 0x18, 0x30, 0x30,
996 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00, 0x00,
997 0x00, 0x00, 0x00, 0x30, 0x18, 0x0C, 0x0C,
998 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00, 0x00,
999 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3C,
1000 0xFF, 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00,
1001 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18,
1002 0x7E, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
1003 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1004 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00,
1005 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1006 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1007 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1008 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00,
1009 0x00, 0x00, 0x00, 0x02, 0x06, 0x0C, 0x18,
1010 0x30, 0x60, 0xC0, 0x80, 0x00, 0x00, 0x00,
1011 0x00, 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6,
1012 0xD6, 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0x00,
1013 0x00, 0x00, 0x00, 0x18, 0x38, 0x78, 0x18,
1014 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, 0x00,
1015 0x00, 0x00, 0x00, 0x7C, 0xC6, 0x06, 0x0C,
1016 0x18, 0x30, 0x60, 0xC6, 0xFE, 0x00, 0x00,
1017 0x00, 0x00, 0x00, 0x7C, 0xC6, 0x06, 0x06,
1018 0x3C, 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00,
1019 0x00, 0x00, 0x00, 0x0C, 0x1C, 0x3C, 0x6C,
1020 0xCC, 0xFE, 0x0C, 0x0C, 0x1E, 0x00, 0x00,
1021 0x00, 0x00, 0x00, 0xFE, 0xC0, 0xC0, 0xC0,
1022 0xFC, 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00,
1023 0x00, 0x00, 0x00, 0x38, 0x60, 0xC0, 0xC0,
1024 0xFC, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00,
1025 0x00, 0x00, 0x00, 0xFE, 0xC6, 0x06, 0x0C,
1026 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00,
1027 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6,
1028 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00,
1029 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6,
1030 0x7E, 0x06, 0x06, 0x0C, 0x78, 0x00, 0x00,
1031 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18,
1032 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00,
1033 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18,
1034 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00,
1035 0x00, 0x00, 0x00, 0x0C, 0x18, 0x30, 0x60,
1036 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x00, 0x00,
1037 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E,
1038 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,
1039 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0C,
1040 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00, 0x00,
1041 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x0C,
1042 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00,
1043 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xDE,
1044 0xDE, 0xDE, 0xDC, 0xC0, 0x7C, 0x00, 0x00,
1045 0x00, 0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6,
1046 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00,
1047 0x00, 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66,
1048 0x7C, 0x66, 0x66, 0x66, 0xFC, 0x00, 0x00,
1049 0x00, 0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0,
1050 0xC0, 0xC0, 0xC2, 0x66, 0x3C, 0x00, 0x00,
1051 0x00, 0x00, 0x00, 0xF8, 0x6C, 0x66, 0x66,
1052 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00, 0x00,
1053 0x00, 0x00, 0x00, 0xFE, 0x66, 0x62, 0x68,
1054 0x78, 0x68, 0x62, 0x66, 0xFE, 0x00, 0x00,
1055 0x00, 0x00, 0x00, 0xFE, 0x66, 0x62, 0x68,
1056 0x78, 0x68, 0x60, 0x60, 0xF0, 0x00, 0x00,
1057 0x00, 0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0,
1058 0xC0, 0xDE, 0xC6, 0x66, 0x3A, 0x00, 0x00,
1059 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6,
1060 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00,
1061 0x00, 0x00, 0x00, 0x3C, 0x18, 0x18, 0x18,
1062 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00,
1063 0x00, 0x00, 0x00, 0x1E, 0x0C, 0x0C, 0x0C,
1064 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00, 0x00,
1065 0x00, 0x00, 0x00, 0xE6, 0x66, 0x6C, 0x6C,
1066 0x78, 0x6C, 0x6C, 0x66, 0xE6, 0x00, 0x00,
1067 0x00, 0x00, 0x00, 0xF0, 0x60, 0x60, 0x60,
1068 0x60, 0x60, 0x62, 0x66, 0xFE, 0x00, 0x00,
1069 0x00, 0x00, 0x00, 0xC6, 0xEE, 0xFE, 0xD6,
1070 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00,
1071 0x00, 0x00, 0x00, 0xC6, 0xE6, 0xF6, 0xFE,
1072 0xDE, 0xCE, 0xC6, 0xC6, 0xC6, 0x00, 0x00,
1073 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6,
1074 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00,
1075 0x00, 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66,
1076 0x7C, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00,
1077 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6,
1078 0xC6, 0xC6, 0xD6, 0xDE, 0x7C, 0x0E, 0x00,
1079 0x00, 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66,
1080 0x7C, 0x6C, 0x66, 0x66, 0xE6, 0x00, 0x00,
1081 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x60,
1082 0x38, 0x0C, 0xC6, 0xC6, 0x7C, 0x00, 0x00,
1083 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x5A, 0x18,
1084 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00,
1085 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6,
1086 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00,
1087 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6,
1088 0xC6, 0xC6, 0x6C, 0x38, 0x10, 0x00, 0x00,
1089 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6,
1090 0xD6, 0xD6, 0xFE, 0x6C, 0x6C, 0x00, 0x00,
1091 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0x7C,
1092 0x38, 0x7C, 0xC6, 0xC6, 0xC6, 0x00, 0x00,
1093 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66,
1094 0x3C, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00,
1095 0x00, 0x00, 0x00, 0xFE, 0xC6, 0x8C, 0x18,
1096 0x30, 0x60, 0xC2, 0xC6, 0xFE, 0x00, 0x00,
1097 0x00, 0x00, 0x00, 0x3C, 0x30, 0x30, 0x30,
1098 0x30, 0x30, 0x30, 0x30, 0x3C, 0x00, 0x00,
1099 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0x70,
1100 0x38, 0x1C, 0x0E, 0x06, 0x02, 0x00, 0x00,
1101 0x00, 0x00, 0x00, 0x3C, 0x0C, 0x0C, 0x0C,
1102 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, 0x00, 0x00,
1103 0x38, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00,
1104 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1105 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1106 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00,
1107 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
1108 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1109 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78,
1110 0x0C, 0x7C, 0xCC, 0xCC, 0x76, 0x00, 0x00,
1111 0x00, 0x00, 0x00, 0xE0, 0x60, 0x60, 0x78,
1112 0x6C, 0x66, 0x66, 0x66, 0x7C, 0x00, 0x00,
1113 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C,
1114 0xC6, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00,
1115 0x00, 0x00, 0x00, 0x1C, 0x0C, 0x0C, 0x3C,
1116 0x6C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00,
1117 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C,
1118 0xC6, 0xFE, 0xC0, 0xC6, 0x7C, 0x00, 0x00,
1119 0x00, 0x00, 0x00, 0x1C, 0x36, 0x32, 0x30,
1120 0x7C, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00,
1121 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
1122 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0x78,
1123 0x00, 0x00, 0x00, 0xE0, 0x60, 0x60, 0x6C,
1124 0x76, 0x66, 0x66, 0x66, 0xE6, 0x00, 0x00,
1125 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x38,
1126 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00,
1127 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x0E,
1128 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3C,
1129 0x00, 0x00, 0x00, 0xE0, 0x60, 0x60, 0x66,
1130 0x6C, 0x78, 0x6C, 0x66, 0xE6, 0x00, 0x00,
1131 0x00, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18,
1132 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00,
1133 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC,
1134 0xFE, 0xD6, 0xD6, 0xD6, 0xD6, 0x00, 0x00,
1135 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC,
1136 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00,
1137 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C,
1138 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00,
1139 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC,
1140 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0xF0,
1141 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
1142 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0x1E,
1143 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC,
1144 0x76, 0x66, 0x60, 0x60, 0xF0, 0x00, 0x00,
1145 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C,
1146 0xC6, 0x70, 0x1C, 0xC6, 0x7C, 0x00, 0x00,
1147 0x00, 0x00, 0x00, 0x10, 0x30, 0x30, 0xFC,
1148 0x30, 0x30, 0x30, 0x36, 0x1C, 0x00, 0x00,
1149 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC,
1150 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00,
1151 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6,
1152 0xC6, 0xC6, 0x6C, 0x38, 0x10, 0x00, 0x00,
1153 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6,
1154 0xC6, 0xD6, 0xD6, 0xFE, 0x6C, 0x00, 0x00,
1155 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6,
1156 0x6C, 0x38, 0x38, 0x6C, 0xC6, 0x00, 0x00,
1157 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6,
1158 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x7C,
1159 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE,
1160 0xCC, 0x18, 0x30, 0x66, 0xFE, 0x00, 0x00,
1161 0x00, 0x00, 0x00, 0x0E, 0x18, 0x18, 0x18,
1162 0x70, 0x18, 0x18, 0x18, 0x0E, 0x00, 0x00,
1163 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18,
1164 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
1165 0x00, 0x00, 0x00, 0x70, 0x18, 0x18, 0x18,
1166 0x0E, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00,
1167 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00,
1168 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1169 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
1170 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0x00, 0x00,
1171 0x00, 0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0,
1172 0xC0, 0xC0, 0xC2, 0x66, 0x3C, 0x18, 0x70,
1173 0x00, 0x00, 0x00, 0x00, 0xCC, 0x00, 0xCC,
1174 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00,
1175 0x00, 0x00, 0x06, 0x0C, 0x18, 0x00, 0x7C,
1176 0xC6, 0xFE, 0xC0, 0xC6, 0x7C, 0x00, 0x00,
1177 0x00, 0x00, 0x10, 0x38, 0x6C, 0x00, 0x78,
1178 0x0C, 0x7C, 0xCC, 0xCC, 0x76, 0x00, 0x00,
1179 0x00, 0x00, 0x00, 0x00, 0xCC, 0x00, 0x78,
1180 0x0C, 0x7C, 0xCC, 0xCC, 0x76, 0x00, 0x00,
1181 0x00, 0x00, 0xC0, 0x60, 0x30, 0x00, 0x78,
1182 0x0C, 0x7C, 0xCC, 0xCC, 0x76, 0x00, 0x00,
1183 0x00, 0x00, 0x38, 0x6C, 0x38, 0x00, 0x78,
1184 0x0C, 0x7C, 0xCC, 0xCC, 0x76, 0x00, 0x00,
1185 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C,
1186 0xC6, 0xC0, 0xC0, 0xC6, 0x7C, 0x18, 0x70,
1187 0x00, 0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C,
1188 0xC6, 0xFE, 0xC0, 0xC6, 0x7C, 0x00, 0x00,
1189 0x00, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x7C,
1190 0xC6, 0xFE, 0xC0, 0xC6, 0x7C, 0x00, 0x00,
1191 0x00, 0x00, 0x60, 0x30, 0x18, 0x00, 0x7C,
1192 0xC6, 0xFE, 0xC0, 0xC6, 0x7C, 0x00, 0x00,
1193 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x38,
1194 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00,
1195 0x00, 0x00, 0x18, 0x3C, 0x66, 0x00, 0x38,
1196 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00,
1197 0x00, 0x00, 0x60, 0x30, 0x18, 0x00, 0x38,
1198 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00,
1199 0x00, 0xC6, 0x00, 0x10, 0x38, 0x6C, 0xC6,
1200 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00,
1201 0x38, 0x6C, 0x38, 0x10, 0x38, 0x6C, 0xC6,
1202 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00,
1203 0x0C, 0x18, 0x00, 0xFE, 0x66, 0x62, 0x68,
1204 0x78, 0x68, 0x62, 0x66, 0xFE, 0x00, 0x00,
1205 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC,
1206 0x36, 0x76, 0xDC, 0xD8, 0x6E, 0x00, 0x00,
1207 0x00, 0x00, 0x00, 0x3E, 0x6C, 0xCC, 0xCC,
1208 0xFE, 0xCC, 0xCC, 0xCC, 0xCE, 0x00, 0x00,
1209 0x00, 0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C,
1210 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00,
1211 0x00, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x7C,
1212 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00,
1213 0x00, 0x00, 0x60, 0x30, 0x18, 0x00, 0x7C,
1214 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00,
1215 0x00, 0x00, 0x30, 0x78, 0xCC, 0x00, 0xCC,
1216 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00,
1217 0x00, 0x00, 0xC0, 0x60, 0x30, 0x00, 0xCC,
1218 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00,
1219 0x00, 0x00, 0x00, 0x00, 0xC6, 0x00, 0xC6,
1220 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x7C,
1221 0x00, 0xC6, 0x00, 0x7C, 0xC6, 0xC6, 0xC6,
1222 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00,
1223 0x00, 0xC6, 0x00, 0xC6, 0xC6, 0xC6, 0xC6,
1224 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00,
1225 0x00, 0x00, 0x00, 0x18, 0x18, 0x7C, 0xC6,
1226 0xC0, 0xC6, 0x7C, 0x18, 0x18, 0x00, 0x00,
1227 0x00, 0x00, 0x00, 0x38, 0x6C, 0x64, 0x60,
1228 0xF0, 0x60, 0x60, 0x66, 0xFC, 0x00, 0x00,
1229 0x00, 0x00, 0x00, 0x66, 0x66, 0x3C, 0x18,
1230 0x7E, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00,
1231 0x00, 0x00, 0x00, 0xFC, 0x66, 0x66, 0x7C,
1232 0x62, 0x66, 0x6F, 0x66, 0xF3, 0x00, 0x00,
1233 0x00, 0x00, 0x00, 0x0E, 0x1B, 0x18, 0x18,
1234 0x7E, 0x18, 0x18, 0xD8, 0x70, 0x00, 0x00,
1235 0x00, 0x00, 0x0C, 0x18, 0x30, 0x00, 0x78,
1236 0x0C, 0x7C, 0xCC, 0xCC, 0x76, 0x00, 0x00,
1237 0x00, 0x00, 0x06, 0x0C, 0x18, 0x00, 0x38,
1238 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00,
1239 0x00, 0x00, 0x06, 0x0C, 0x18, 0x00, 0x7C,
1240 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00,
1241 0x00, 0x00, 0x0C, 0x18, 0x30, 0x00, 0xCC,
1242 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00,
1243 0x00, 0x00, 0x00, 0x76, 0xDC, 0x00, 0xDC,
1244 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00,
1245 0x76, 0xDC, 0x00, 0xC6, 0xE6, 0xF6, 0xFE,
1246 0xDE, 0xCE, 0xC6, 0xC6, 0xC6, 0x00, 0x00,
1247 0x00, 0x00, 0x00, 0x3C, 0x6C, 0x6C, 0x36,
1248 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,
1249 0x00, 0x00, 0x00, 0x38, 0x6C, 0x6C, 0x38,
1250 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00,
1251 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x30,
1252 0x30, 0x60, 0xC6, 0xC6, 0x7C, 0x00, 0x00,
1253 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE,
1254 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00,
1255 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE,
1256 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00,
1257 0x00, 0x60, 0xE0, 0x63, 0x66, 0x6C, 0x18,
1258 0x30, 0x6E, 0xC3, 0x06, 0x0C, 0x1F, 0x00,
1259 0x00, 0x60, 0xE0, 0x63, 0x66, 0x6C, 0x18,
1260 0x36, 0x6E, 0xDA, 0x3F, 0x06, 0x06, 0x00,
1261 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18,
1262 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x00, 0x00,
1263 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1264 0x36, 0x6C, 0xD8, 0x6C, 0x36, 0x00, 0x00,
1265 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1266 0xD8, 0x6C, 0x36, 0x6C, 0xD8, 0x00, 0x00,
1267 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11,
1268 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44,
1269 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55,
1270 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
1271 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD,
1272 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77,
1273 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1274 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1275 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1276 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1277 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18,
1278 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1279 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1280 0xF6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1281 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1282 0xFE, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1283 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x18,
1284 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1285 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x06,
1286 0xF6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1287 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1288 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1289 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x06,
1290 0xF6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1291 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x06,
1292 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1293 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1294 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1295 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18,
1296 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1297 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1298 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1299 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1300 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1301 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1302 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1303 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1304 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1305 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1306 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1307 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1308 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1309 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1310 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1311 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18,
1312 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1313 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1314 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1315 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30,
1316 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1317 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x30,
1318 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1319 0x36, 0x36, 0x36, 0x36, 0x36, 0xF7, 0x00,
1320 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1321 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00,
1322 0xF7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1323 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30,
1324 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1325 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00,
1326 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1327 0x36, 0x36, 0x36, 0x36, 0x36, 0xF7, 0x00,
1328 0xF7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1329 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x00,
1330 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1331 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1332 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1333 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00,
1334 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1335 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1336 0xFF, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1337 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1338 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1339 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18,
1340 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1341 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x18,
1342 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1343 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1344 0x3F, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1345 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1346 0xFF, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1347 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x18,
1348 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1349 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1350 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1351 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1352 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1353 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1354 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1355 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1356 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1357 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
1358 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
1359 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
1360 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
1361 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1362 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1363 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
1364 0xDC, 0xD8, 0xD8, 0xDC, 0x76, 0x00, 0x00,
1365 0x00, 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xD8,
1366 0xCC, 0xC6, 0xC6, 0xC6, 0xCC, 0x00, 0x00,
1367 0x00, 0x00, 0x00, 0xFE, 0xC6, 0xC6, 0xC0,
1368 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00,
1369 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE,
1370 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x00, 0x00,
1371 0x00, 0x00, 0x00, 0xFE, 0xC6, 0x60, 0x30,
1372 0x18, 0x30, 0x60, 0xC6, 0xFE, 0x00, 0x00,
1373 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E,
1374 0xD8, 0xD8, 0xD8, 0xD8, 0x70, 0x00, 0x00,
1375 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66,
1376 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0xC0,
1377 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76,
1378 0xDC, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
1379 0x00, 0x00, 0x00, 0x7E, 0x18, 0x3C, 0x66,
1380 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x00, 0x00,
1381 0x00, 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6,
1382 0xFE, 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0x00,
1383 0x00, 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6,
1384 0xC6, 0x6C, 0x6C, 0x6C, 0xEE, 0x00, 0x00,
1385 0x00, 0x00, 0x00, 0x1E, 0x30, 0x18, 0x0C,
1386 0x3E, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00,
1387 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xDB,
1388 0xDB, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,
1389 0x00, 0x00, 0x00, 0x03, 0x06, 0x7E, 0xDB,
1390 0xDB, 0xF3, 0x7E, 0x60, 0xC0, 0x00, 0x00,
1391 0x00, 0x00, 0x00, 0x1E, 0x30, 0x60, 0x60,
1392 0x7E, 0x60, 0x60, 0x30, 0x1E, 0x00, 0x00,
1393 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6,
1394 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00,
1395 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00,
1396 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00,
1397 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18,
1398 0x18, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00,
1399 0x00, 0x00, 0x00, 0x30, 0x18, 0x0C, 0x06,
1400 0x0C, 0x18, 0x30, 0x00, 0x7E, 0x00, 0x00,
1401 0x00, 0x00, 0x00, 0x0C, 0x18, 0x30, 0x60,
1402 0x30, 0x18, 0x0C, 0x00, 0x7E, 0x00, 0x00,
1403 0x00, 0x00, 0x0E, 0x1B, 0x1B, 0x18, 0x18,
1404 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1405 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1406 0x18, 0xD8, 0xD8, 0x70, 0x00, 0x00, 0x00,
1407 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00,
1408 0x7E, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00,
1409 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xDC,
1410 0x00, 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00,
1411 0x00, 0x00, 0x00, 0x38, 0x6C, 0x6C, 0x38,
1412 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1413 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1414 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
1415 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1416 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1417 0x00, 0x00, 0x0F, 0x0C, 0x0C, 0x0C, 0x0C,
1418 0x0C, 0xEC, 0x6C, 0x3C, 0x1C, 0x00, 0x00,
1419 0x00, 0x00, 0x00, 0x6C, 0x36, 0x36, 0x36,
1420 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00,
1421 0x00, 0x00, 0x00, 0x3C, 0x66, 0x0C, 0x18,
1422 0x32, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,
1423 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E,
1424 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00,
1425 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1426 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1429 static CONST UCHAR Font8x16
[VGA_FONT_CHARACTERS
* 16] =
1431 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1432 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1433 0x00, 0x00, 0x7E, 0x81, 0xA5, 0x81, 0x81, 0xBD,
1434 0x99, 0x81, 0x81, 0x7E, 0x00, 0x00, 0x00, 0x00,
1435 0x00, 0x00, 0x7C, 0xFE, 0xFE, 0xD6, 0xFE, 0xFE,
1436 0xBA, 0xC6, 0xFE, 0x7C, 0x00, 0x00, 0x00, 0x00,
1437 0x00, 0x00, 0x00, 0x6C, 0xEE, 0xFE, 0xFE, 0xFE,
1438 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
1439 0x00, 0x00, 0x00, 0x10, 0x38, 0x7C, 0xFE, 0x7C,
1440 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1441 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x10, 0x6C,
1442 0xEE, 0x6C, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
1443 0x00, 0x00, 0x10, 0x38, 0x7C, 0x7C, 0xFE, 0xFE,
1444 0xFE, 0x6C, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
1445 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C,
1446 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1447 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xC3, 0xC3,
1448 0xC3, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1449 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x66, 0x66,
1450 0x66, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
1451 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xC3, 0x99, 0x99,
1452 0x99, 0xC3, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1453 0x00, 0x00, 0x1E, 0x0E, 0x1E, 0x36, 0x78, 0xCC,
1454 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00,
1455 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x18,
1456 0x7E, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
1457 0x00, 0x00, 0x1E, 0x1A, 0x1E, 0x18, 0x18, 0x18,
1458 0x18, 0x78, 0xF8, 0x70, 0x00, 0x00, 0x00, 0x00,
1459 0x00, 0x00, 0x3E, 0x36, 0x3E, 0x36, 0x36, 0x76,
1460 0xF6, 0x66, 0x0E, 0x1E, 0x0C, 0x00, 0x00, 0x00,
1461 0x00, 0x00, 0x18, 0xDB, 0x7E, 0x3C, 0x66, 0x66,
1462 0x3C, 0x7E, 0xDB, 0x18, 0x00, 0x00, 0x00, 0x00,
1463 0x00, 0x00, 0x00, 0x80, 0xE0, 0xF0, 0xFC, 0xFE,
1464 0xFC, 0xF0, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00,
1465 0x00, 0x00, 0x00, 0x02, 0x0E, 0x3E, 0x7E, 0xFE,
1466 0x7E, 0x3E, 0x0E, 0x02, 0x00, 0x00, 0x00, 0x00,
1467 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18,
1468 0x18, 0x7E, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00,
1469 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
1470 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
1471 0x00, 0x00, 0x7F, 0xDB, 0xDB, 0xDB, 0xDB, 0x7B,
1472 0x1B, 0x1B, 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00,
1473 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x60, 0x7C, 0xF6,
1474 0xDE, 0x7C, 0x0C, 0xC6, 0xC6, 0x7C, 0x00, 0x00,
1475 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1476 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00,
1477 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18,
1478 0x7E, 0x3C, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00,
1479 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18,
1480 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
1481 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1482 0x18, 0x7E, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00,
1483 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0E, 0xFF,
1484 0x0E, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1485 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x70, 0xFE,
1486 0x70, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1487 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0,
1488 0xC0, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1489 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x66, 0xFF,
1490 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1491 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x38, 0x7C,
1492 0x7C, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00,
1493 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x7C, 0x7C, 0x7C,
1494 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
1495 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1496 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1497 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x3C, 0x3C, 0x18,
1498 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
1499 0x00, 0x36, 0x36, 0x36, 0x36, 0x14, 0x00, 0x00,
1500 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1501 0x00, 0x00, 0x6C, 0x6C, 0x6C, 0xFE, 0x6C, 0x6C,
1502 0xFE, 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00,
1503 0x00, 0x00, 0x18, 0x18, 0x7C, 0xC6, 0xC0, 0x78,
1504 0x3C, 0x06, 0xC6, 0x7C, 0x18, 0x18, 0x00, 0x00,
1505 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x66, 0x0C,
1506 0x18, 0x30, 0x66, 0xC6, 0x00, 0x00, 0x00, 0x00,
1507 0x00, 0x00, 0x38, 0x6C, 0x38, 0x30, 0x76, 0x7E,
1508 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00,
1509 0x00, 0x0C, 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00,
1510 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1511 0x00, 0x00, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x30,
1512 0x30, 0x30, 0x18, 0x0C, 0x00, 0x00, 0x00, 0x00,
1513 0x00, 0x00, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x0C,
1514 0x0C, 0x0C, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00,
1515 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x38, 0xFE,
1516 0x38, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1517 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E,
1518 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1519 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1520 0x00, 0x0C, 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00,
1521 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE,
1522 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1523 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1524 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
1525 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0C, 0x18,
1526 0x30, 0x60, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00,
1527 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xCE, 0xDE, 0xF6,
1528 0xE6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1529 0x00, 0x00, 0x18, 0x78, 0x18, 0x18, 0x18, 0x18,
1530 0x18, 0x18, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00,
1531 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x06, 0x0C, 0x18,
1532 0x30, 0x60, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00,
1533 0x00, 0x00, 0x7C, 0xC6, 0x06, 0x06, 0x3C, 0x06,
1534 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1535 0x00, 0x00, 0x0C, 0x1C, 0x3C, 0x6C, 0xCC, 0xCC,
1536 0xFE, 0x0C, 0x0C, 0x1E, 0x00, 0x00, 0x00, 0x00,
1537 0x00, 0x00, 0xFE, 0xC0, 0xC0, 0xC0, 0xFC, 0x06,
1538 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1539 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC0, 0xFC, 0xC6,
1540 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1541 0x00, 0x00, 0xFE, 0xC6, 0x06, 0x0C, 0x18, 0x30,
1542 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00,
1543 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0xC6,
1544 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1545 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E,
1546 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1547 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00,
1548 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
1549 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00,
1550 0x00, 0x0C, 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00,
1551 0x00, 0x00, 0x00, 0x0C, 0x18, 0x30, 0x60, 0xC0,
1552 0x60, 0x30, 0x18, 0x0C, 0x00, 0x00, 0x00, 0x00,
1553 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00,
1554 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1555 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06,
1556 0x0C, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00,
1557 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x0C, 0x18, 0x18,
1558 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
1559 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xDE, 0xDE,
1560 0xDE, 0xDC, 0xC0, 0x7E, 0x00, 0x00, 0x00, 0x00,
1561 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xC6, 0xFE,
1562 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
1563 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x66,
1564 0x66, 0x66, 0x66, 0xFC, 0x00, 0x00, 0x00, 0x00,
1565 0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0,
1566 0xC0, 0xC2, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00,
1567 0x00, 0x00, 0xF8, 0x6C, 0x66, 0x66, 0x66, 0x66,
1568 0x66, 0x66, 0x6C, 0xF8, 0x00, 0x00, 0x00, 0x00,
1569 0x00, 0x00, 0xFE, 0x66, 0x60, 0x64, 0x7C, 0x64,
1570 0x60, 0x60, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00,
1571 0x00, 0x00, 0xFE, 0x66, 0x60, 0x64, 0x7C, 0x64,
1572 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00,
1573 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC0, 0xC0, 0xC0,
1574 0xCE, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1575 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xFE, 0xC6,
1576 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
1577 0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18,
1578 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
1579 0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18,
1580 0x18, 0xD8, 0xD8, 0x70, 0x00, 0x00, 0x00, 0x00,
1581 0x00, 0x00, 0xC6, 0xC6, 0xCC, 0xD8, 0xF0, 0xF0,
1582 0xD8, 0xCC, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
1583 0x00, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60,
1584 0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00,
1585 0x00, 0x00, 0xC6, 0xC6, 0xEE, 0xEE, 0xFE, 0xD6,
1586 0xD6, 0xD6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
1587 0x00, 0x00, 0xC6, 0xC6, 0xE6, 0xE6, 0xF6, 0xDE,
1588 0xCE, 0xCE, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
1589 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
1590 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1591 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x66, 0x7C,
1592 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00,
1593 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
1594 0xC6, 0xD6, 0xD6, 0x7C, 0x06, 0x00, 0x00, 0x00,
1595 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x78,
1596 0x6C, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00,
1597 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC0, 0x70, 0x1C,
1598 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1599 0x00, 0x00, 0x7E, 0x5A, 0x18, 0x18, 0x18, 0x18,
1600 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
1601 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
1602 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1603 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
1604 0xC6, 0x6C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
1605 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xD6, 0xD6, 0xD6,
1606 0xFE, 0xEE, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
1607 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x38,
1608 0x6C, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
1609 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C,
1610 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
1611 0x00, 0x00, 0xFE, 0xC6, 0x86, 0x0C, 0x18, 0x30,
1612 0x60, 0xC2, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00,
1613 0x00, 0x00, 0x7C, 0x60, 0x60, 0x60, 0x60, 0x60,
1614 0x60, 0x60, 0x60, 0x7C, 0x00, 0x00, 0x00, 0x00,
1615 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x60, 0x30,
1616 0x18, 0x0C, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00,
1617 0x00, 0x00, 0x7C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
1618 0x0C, 0x0C, 0x0C, 0x7C, 0x00, 0x00, 0x00, 0x00,
1619 0x00, 0x10, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00,
1620 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1621 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1622 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00,
1623 0x00, 0x18, 0x18, 0x18, 0x0C, 0x00, 0x00, 0x00,
1624 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1625 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C,
1626 0xCC, 0xCC, 0xDC, 0x76, 0x00, 0x00, 0x00, 0x00,
1627 0x00, 0x00, 0xE0, 0x60, 0x60, 0x7C, 0x66, 0x66,
1628 0x66, 0x66, 0x66, 0xFC, 0x00, 0x00, 0x00, 0x00,
1629 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0,
1630 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1631 0x00, 0x00, 0x1C, 0x0C, 0x0C, 0x7C, 0xCC, 0xCC,
1632 0xCC, 0xCC, 0xCC, 0x7E, 0x00, 0x00, 0x00, 0x00,
1633 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6,
1634 0xFE, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1635 0x00, 0x00, 0x1C, 0x36, 0x30, 0x30, 0xFC, 0x30,
1636 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
1637 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCE, 0xC6,
1638 0xC6, 0xCE, 0x76, 0x06, 0xC6, 0x7C, 0x00, 0x00,
1639 0x00, 0x00, 0xE0, 0x60, 0x60, 0x7C, 0x66, 0x66,
1640 0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00,
1641 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18,
1642 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
1643 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x1C, 0x0C, 0x0C,
1644 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00, 0x00,
1645 0x00, 0x00, 0xE0, 0x60, 0x60, 0x66, 0x66, 0x6C,
1646 0x78, 0x6C, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00,
1647 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1648 0x18, 0x18, 0x18, 0x1C, 0x00, 0x00, 0x00, 0x00,
1649 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xFE, 0xD6,
1650 0xD6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
1651 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66,
1652 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
1653 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6,
1654 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1655 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66,
1656 0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00, 0x00,
1657 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC,
1658 0xCC, 0xCC, 0x7C, 0x0C, 0x0C, 0x1E, 0x00, 0x00,
1659 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x60,
1660 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00,
1661 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0,
1662 0x7C, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1663 0x00, 0x00, 0x30, 0x30, 0x30, 0xFC, 0x30, 0x30,
1664 0x30, 0x30, 0x36, 0x1C, 0x00, 0x00, 0x00, 0x00,
1665 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC,
1666 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00,
1667 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6,
1668 0xC6, 0x6C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
1669 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xD6,
1670 0xD6, 0xD6, 0xFE, 0x6C, 0x00, 0x00, 0x00, 0x00,
1671 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0x6C,
1672 0x38, 0x6C, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
1673 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6,
1674 0xC6, 0xCE, 0x76, 0x06, 0xC6, 0x7C, 0x00, 0x00,
1675 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x86, 0x0C,
1676 0x18, 0x30, 0x62, 0xFE, 0x00, 0x00, 0x00, 0x00,
1677 0x00, 0x00, 0x0E, 0x18, 0x18, 0x18, 0x70, 0x18,
1678 0x18, 0x18, 0x18, 0x0E, 0x00, 0x00, 0x00, 0x00,
1679 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18,
1680 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
1681 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0E, 0x18,
1682 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00,
1683 0x00, 0x00, 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00,
1684 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1685 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38,
1686 0x6C, 0x6C, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00,
1687 0x00, 0x00, 0x3C, 0x66, 0xC0, 0xC0, 0xC0, 0xC6,
1688 0x66, 0x3C, 0x18, 0x0C, 0xCC, 0x38, 0x00, 0x00,
1689 0x00, 0x00, 0xC6, 0x00, 0x00, 0xC6, 0xC6, 0xC6,
1690 0xC6, 0xC6, 0xCE, 0x76, 0x00, 0x00, 0x00, 0x00,
1691 0x00, 0x0C, 0x18, 0x30, 0x00, 0x7C, 0xC6, 0xC6,
1692 0xFE, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1693 0x00, 0x30, 0x78, 0xCC, 0x00, 0x78, 0x0C, 0x7C,
1694 0xCC, 0xCC, 0xDC, 0x76, 0x00, 0x00, 0x00, 0x00,
1695 0x00, 0x00, 0xCC, 0x00, 0x00, 0x78, 0x0C, 0x7C,
1696 0xCC, 0xCC, 0xDC, 0x76, 0x00, 0x00, 0x00, 0x00,
1697 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0C, 0x7C,
1698 0xCC, 0xCC, 0xDC, 0x76, 0x00, 0x00, 0x00, 0x00,
1699 0x00, 0x38, 0x6C, 0x38, 0x00, 0x78, 0x0C, 0x7C,
1700 0xCC, 0xCC, 0xDC, 0x76, 0x00, 0x00, 0x00, 0x00,
1701 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC0,
1702 0xC6, 0x7C, 0x18, 0x0C, 0x6C, 0x38, 0x00, 0x00,
1703 0x00, 0x30, 0x78, 0xCC, 0x00, 0x7C, 0xC6, 0xC6,
1704 0xFE, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1705 0x00, 0x00, 0xCC, 0x00, 0x00, 0x7C, 0xC6, 0xC6,
1706 0xFE, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1707 0x00, 0x30, 0x18, 0x0C, 0x00, 0x7C, 0xC6, 0xC6,
1708 0xFE, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1709 0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18,
1710 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
1711 0x00, 0x18, 0x3C, 0x66, 0x00, 0x38, 0x18, 0x18,
1712 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
1713 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x18, 0x18,
1714 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
1715 0x00, 0xC6, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xC6,
1716 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
1717 0x38, 0x6C, 0x38, 0x00, 0x38, 0x6C, 0xC6, 0xC6,
1718 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
1719 0x0C, 0x18, 0x30, 0x00, 0xFE, 0x60, 0x60, 0x7C,
1720 0x60, 0x60, 0x60, 0xFE, 0x00, 0x00, 0x00, 0x00,
1721 0x00, 0x00, 0x00, 0x00, 0x66, 0xDB, 0x1B, 0x7F,
1722 0xD8, 0xD8, 0xDF, 0x76, 0x00, 0x00, 0x00, 0x00,
1723 0x00, 0x00, 0x7E, 0xD8, 0xD8, 0xD8, 0xD8, 0xFE,
1724 0xD8, 0xD8, 0xD8, 0xDE, 0x00, 0x00, 0x00, 0x00,
1725 0x00, 0x30, 0x78, 0xCC, 0x00, 0x7C, 0xC6, 0xC6,
1726 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1727 0x00, 0x00, 0xC6, 0x00, 0x00, 0x7C, 0xC6, 0xC6,
1728 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1729 0x00, 0x30, 0x18, 0x0C, 0x00, 0x7C, 0xC6, 0xC6,
1730 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1731 0x00, 0x30, 0x78, 0xCC, 0x00, 0xC6, 0xC6, 0xC6,
1732 0xC6, 0xC6, 0xCE, 0x76, 0x00, 0x00, 0x00, 0x00,
1733 0x00, 0x60, 0x30, 0x18, 0x00, 0xC6, 0xC6, 0xC6,
1734 0xC6, 0xC6, 0xCE, 0x76, 0x00, 0x00, 0x00, 0x00,
1735 0x00, 0x18, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18,
1736 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
1737 0x00, 0xC6, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6,
1738 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1739 0x00, 0xC6, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
1740 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1741 0x00, 0x00, 0x18, 0x18, 0x7C, 0xC6, 0xC0, 0xC0,
1742 0xC6, 0x7C, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
1743 0x00, 0x38, 0x6C, 0x60, 0x60, 0xF0, 0x60, 0x60,
1744 0x60, 0x66, 0xF6, 0x6C, 0x00, 0x00, 0x00, 0x00,
1745 0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x7E,
1746 0x18, 0x3C, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
1747 0x00, 0x00, 0x3E, 0x63, 0x63, 0x30, 0x1C, 0x06,
1748 0x63, 0x63, 0x3E, 0x00, 0x1C, 0x00, 0x00, 0x00,
1749 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x63, 0x38,
1750 0x0E, 0x63, 0x3E, 0x00, 0x1C, 0x00, 0x00, 0x00,
1751 0x00, 0x0C, 0x18, 0x30, 0x00, 0x78, 0x0C, 0x7C,
1752 0xCC, 0xCC, 0xDC, 0x76, 0x00, 0x00, 0x00, 0x00,
1753 0x00, 0x0C, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18,
1754 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00,
1755 0x00, 0x0C, 0x18, 0x30, 0x00, 0x7C, 0xC6, 0xC6,
1756 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1757 0x00, 0x18, 0x30, 0x60, 0x00, 0xCC, 0xCC, 0xCC,
1758 0xCC, 0xCC, 0xDC, 0x76, 0x00, 0x00, 0x00, 0x00,
1759 0x00, 0x00, 0x76, 0xDC, 0x00, 0xBC, 0x66, 0x66,
1760 0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00,
1761 0x00, 0x76, 0xDC, 0x00, 0xC6, 0xC6, 0xE6, 0xF6,
1762 0xDE, 0xCE, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
1763 0x00, 0x21, 0x1E, 0x00, 0x1E, 0x33, 0x60, 0x60,
1764 0x67, 0x63, 0x33, 0x1D, 0x00, 0x00, 0x00, 0x00,
1765 0x00, 0x42, 0x3C, 0x00, 0x3B, 0x66, 0x66, 0x66,
1766 0x3E, 0x06, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00,
1767 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x30,
1768 0x60, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00,
1769 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E,
1770 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
1771 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E,
1772 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
1773 0x00, 0x60, 0x60, 0x62, 0x66, 0x6C, 0x18, 0x30,
1774 0x60, 0xDC, 0x36, 0x0C, 0x18, 0x3E, 0x00, 0x00,
1775 0x00, 0x60, 0x60, 0x62, 0x66, 0x6C, 0x18, 0x36,
1776 0x6E, 0xDE, 0x36, 0x7E, 0x06, 0x06, 0x00, 0x00,
1777 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x3C,
1778 0x3C, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00,
1779 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6C, 0xD8,
1780 0x6C, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1781 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x6C, 0x36,
1782 0x6C, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1783 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44,
1784 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44,
1785 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55,
1786 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55,
1787 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77,
1788 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77,
1789 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1790 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1791 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8,
1792 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1793 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0xF8,
1794 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1795 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6,
1796 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1797 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE,
1798 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1799 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x18, 0xF8,
1800 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1801 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x06, 0xF6,
1802 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1803 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1804 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1805 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x06, 0xF6,
1806 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1807 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x06, 0xFE,
1808 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1809 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFE,
1810 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1811 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0xF8,
1812 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1813 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8,
1814 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1815 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F,
1816 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1817 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF,
1818 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1819 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
1820 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1821 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F,
1822 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1823 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
1824 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1825 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF,
1826 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1827 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x1F,
1828 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1829 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37,
1830 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1831 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3F,
1832 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1833 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x30, 0x37,
1834 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1835 0x36, 0x36, 0x36, 0x36, 0x36, 0xF7, 0x00, 0xFF,
1836 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1837 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xF7,
1838 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1839 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37,
1840 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1841 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF,
1842 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1843 0x36, 0x36, 0x36, 0x36, 0x36, 0xF7, 0x00, 0xF7,
1844 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1845 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x00, 0xFF,
1846 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1847 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFF,
1848 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1849 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF,
1850 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1851 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
1852 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1853 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3F,
1854 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1855 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x1F,
1856 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1857 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x18, 0x1F,
1858 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1859 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F,
1860 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1861 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFF,
1862 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1863 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x18, 0xFF,
1864 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1865 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8,
1866 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1867 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
1868 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1869 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1870 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1871 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1872 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1873 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
1874 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
1875 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
1876 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
1877 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1878 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1879 0x00, 0x00, 0x00, 0x00, 0x76, 0xDC, 0xD8, 0xD8,
1880 0xD8, 0xD8, 0xDC, 0x76, 0x00, 0x00, 0x00, 0x00,
1881 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xD8, 0xFC, 0xC6,
1882 0xC6, 0xC6, 0xC6, 0xCC, 0x00, 0x00, 0x00, 0x00,
1883 0x00, 0x00, 0xFE, 0x66, 0x62, 0x60, 0x60, 0x60,
1884 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00,
1885 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x6C, 0x6C,
1886 0x6C, 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00,
1887 0x00, 0x00, 0xFE, 0xC6, 0x62, 0x30, 0x18, 0x18,
1888 0x30, 0x62, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00,
1889 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xD8, 0xCC,
1890 0xCC, 0xCC, 0xD8, 0x70, 0x00, 0x00, 0x00, 0x00,
1891 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66,
1892 0x66, 0x7C, 0x60, 0xC0, 0x80, 0x00, 0x00, 0x00,
1893 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xDC, 0x18,
1894 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
1895 0x00, 0x00, 0xFE, 0x38, 0x38, 0x6C, 0xC6, 0xC6,
1896 0x6C, 0x38, 0x38, 0xFE, 0x00, 0x00, 0x00, 0x00,
1897 0x00, 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE,
1898 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00,
1899 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xC6, 0xC6,
1900 0x6C, 0x6C, 0x6C, 0xEE, 0x00, 0x00, 0x00, 0x00,
1901 0x00, 0x00, 0x3E, 0x60, 0x60, 0x3C, 0x66, 0xC6,
1902 0xC6, 0xC6, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00,
1903 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xDB, 0xDB,
1904 0xDB, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1905 0x00, 0x00, 0x02, 0x06, 0x7C, 0xCE, 0xDE, 0xF6,
1906 0xF6, 0x7C, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00,
1907 0x00, 0x00, 0x00, 0x1C, 0x30, 0x60, 0x60, 0x7C,
1908 0x60, 0x60, 0x30, 0x1C, 0x00, 0x00, 0x00, 0x00,
1909 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
1910 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00,
1911 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE,
1912 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00,
1913 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18,
1914 0x18, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,
1915 0x00, 0x00, 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18,
1916 0x30, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,
1917 0x00, 0x00, 0x0C, 0x18, 0x30, 0x60, 0x30, 0x18,
1918 0x0C, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,
1919 0x00, 0x00, 0x00, 0x00, 0x0C, 0x1E, 0x1A, 0x18,
1920 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1921 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1922 0x18, 0x18, 0x58, 0x78, 0x30, 0x00, 0x00, 0x00,
1923 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7E,
1924 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
1925 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xDC,
1926 0x00, 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00,
1927 0x00, 0x00, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x00,
1928 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1929 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
1930 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1931 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1932 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1933 0x00, 0x00, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18,
1934 0xD8, 0xD8, 0x78, 0x38, 0x18, 0x00, 0x00, 0x00,
1935 0x00, 0x00, 0xD8, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C,
1936 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1937 0x00, 0x00, 0x70, 0xD8, 0x18, 0x30, 0x60, 0xF8,
1938 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1939 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E,
1940 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,
1941 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1942 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1945 /* PRIVATE FUNCTIONS **********************************************************/
1947 static BOOLEAN
VidBiosScrollWindow(SCROLL_DIRECTION Direction
,
1949 SMALL_RECT Rectangle
,
1954 DWORD VideoAddress
= TO_LINEAR(TEXT_VIDEO_SEG
, Page
* Bda
->VideoPageSize
);
1955 WORD FillCharacter
= MAKEWORD(' ', FillAttribute
);
1957 WORD WindowWidth
, WindowHeight
;
1959 /* Fixup the rectangle if needed */
1960 Rectangle
.Left
= min(max(Rectangle
.Left
, 0), Bda
->ScreenColumns
- 1);
1961 Rectangle
.Right
= min(max(Rectangle
.Right
, 0), Bda
->ScreenColumns
- 1);
1962 Rectangle
.Top
= min(max(Rectangle
.Top
, 0), Bda
->ScreenRows
);
1963 Rectangle
.Bottom
= min(max(Rectangle
.Bottom
, 0), Bda
->ScreenRows
);
1965 WindowWidth
= Rectangle
.Right
- Rectangle
.Left
+ 1;
1966 WindowHeight
= Rectangle
.Bottom
- Rectangle
.Top
+ 1;
1968 /* Amount == 0 means we clear all the rectangle */
1969 if ((Amount
== 0) ||
1970 (((Direction
== SCROLL_UP
) || (Direction
== SCROLL_DOWN
)) && (Amount
>= WindowHeight
)) ||
1971 (((Direction
== SCROLL_LEFT
) || (Direction
== SCROLL_RIGHT
)) && (Amount
>= WindowWidth
)))
1973 /* Fill the rectangle */
1974 for (i
= Rectangle
.Top
; i
<= Rectangle
.Bottom
; i
++)
1976 for (j
= Rectangle
.Left
; j
<= Rectangle
.Right
; j
++)
1978 EmulatorWriteMemory(&EmulatorContext
,
1979 VideoAddress
+ (i
* Bda
->ScreenColumns
+ j
) * sizeof(WORD
),
1980 (LPVOID
)&FillCharacter
,
1981 sizeof(FillCharacter
));
1992 /* Move text lines up */
1993 for (i
= Rectangle
.Top
+ Amount
; i
<= Rectangle
.Bottom
; i
++)
1995 EmulatorWriteMemory(&EmulatorContext
,
1996 VideoAddress
+ ((i
- Amount
) * Bda
->ScreenColumns
+ Rectangle
.Left
) * sizeof(WORD
),
1997 REAL_TO_PHYS(VideoAddress
+ ( i
* Bda
->ScreenColumns
+ Rectangle
.Left
) * sizeof(WORD
)),
1998 (Rectangle
.Right
- Rectangle
.Left
+ 1) * sizeof(WORD
));
2001 /* Fill the bottom of the rectangle */
2002 for (i
= Rectangle
.Bottom
- Amount
+ 1; i
<= Rectangle
.Bottom
; i
++)
2004 for (j
= Rectangle
.Left
; j
<= Rectangle
.Right
; j
++)
2006 EmulatorWriteMemory(&EmulatorContext
,
2007 VideoAddress
+ (i
* Bda
->ScreenColumns
+ j
) * sizeof(WORD
),
2008 (LPVOID
)&FillCharacter
,
2009 sizeof(FillCharacter
));
2020 /* Move text lines down */
2021 for (i
= Rectangle
.Bottom
- Amount
; i
>= Rectangle
.Top
; i
--)
2023 EmulatorWriteMemory(&EmulatorContext
,
2024 VideoAddress
+ ((i
+ Amount
) * Bda
->ScreenColumns
+ Rectangle
.Left
) * sizeof(WORD
),
2025 REAL_TO_PHYS(VideoAddress
+ ( i
* Bda
->ScreenColumns
+ Rectangle
.Left
) * sizeof(WORD
)),
2026 (Rectangle
.Right
- Rectangle
.Left
+ 1) * sizeof(WORD
));
2029 /* Fill the top of the rectangle */
2030 Bottom
= Rectangle
.Top
+ Amount
- 1;
2031 for (i
= Rectangle
.Top
; i
<= Bottom
; i
++)
2033 for (j
= Rectangle
.Left
; j
<= Rectangle
.Right
; j
++)
2035 EmulatorWriteMemory(&EmulatorContext
,
2036 VideoAddress
+ (i
* Bda
->ScreenColumns
+ j
) * sizeof(WORD
),
2037 (LPVOID
)&FillCharacter
,
2038 sizeof(FillCharacter
));
2047 /* Move text lines left */
2048 for (i
= Rectangle
.Top
; i
<= Rectangle
.Bottom
; i
++)
2050 EmulatorWriteMemory(&EmulatorContext
,
2051 VideoAddress
+ (i
* Bda
->ScreenColumns
+ Rectangle
.Left
) * sizeof(WORD
),
2052 REAL_TO_PHYS(VideoAddress
+ (i
* Bda
->ScreenColumns
+ Rectangle
.Left
+ Amount
) * sizeof(WORD
)),
2053 (Rectangle
.Right
- Rectangle
.Left
- Amount
+ 1) * sizeof(WORD
));
2056 /* Fill the right of the rectangle */
2057 for (i
= Rectangle
.Top
; i
<= Rectangle
.Bottom
; i
++)
2059 for (j
= Rectangle
.Right
- Amount
+ 1; j
<= Rectangle
.Right
; j
++)
2061 EmulatorWriteMemory(&EmulatorContext
,
2062 VideoAddress
+ (i
* Bda
->ScreenColumns
+ j
) * sizeof(WORD
),
2063 (LPVOID
)&FillCharacter
,
2064 sizeof(FillCharacter
));
2073 /* Move text lines right */
2074 for (i
= Rectangle
.Top
; i
<= Rectangle
.Bottom
; i
++)
2076 EmulatorWriteMemory(&EmulatorContext
,
2077 VideoAddress
+ (i
* Bda
->ScreenColumns
+ Rectangle
.Left
+ Amount
) * sizeof(WORD
),
2078 REAL_TO_PHYS(VideoAddress
+ (i
* Bda
->ScreenColumns
+ Rectangle
.Left
) * sizeof(WORD
)),
2079 (Rectangle
.Right
- Rectangle
.Left
- Amount
+ 1) * sizeof(WORD
));
2082 /* Fill the left of the rectangle */
2083 for (i
= Rectangle
.Top
; i
<= Rectangle
.Bottom
; i
++)
2085 INT Right
= Rectangle
.Left
+ Amount
- 1;
2086 for (j
= Rectangle
.Left
; j
<= Right
; j
++)
2088 EmulatorWriteMemory(&EmulatorContext
,
2089 VideoAddress
+ (i
* Bda
->ScreenColumns
+ j
) * sizeof(WORD
),
2090 (LPVOID
)&FillCharacter
,
2091 sizeof(FillCharacter
));
2102 static __inline VOID
VgaSetSinglePaletteRegister(BYTE Index
, BYTE Value
)
2104 /* Write the index */
2105 IOReadB(VGA_INSTAT1_READ
); // Put the AC register into index state
2106 IOWriteB(VGA_AC_INDEX
, Index
);
2108 /* Write the data */
2109 IOWriteB(VGA_AC_WRITE
, Value
);
2112 static BOOLEAN
VgaSetRegisters(PVGA_REGISTERS Registers
)
2116 if (Registers
== NULL
) return FALSE
;
2118 /* Disable interrupts */
2122 * Set the CRT base address according to the selected mode,
2123 * monochrome or color. The following macros:
2124 * VGA_INSTAT1_READ, VGA_CRTC_INDEX and VGA_CRTC_DATA are then
2125 * used to access the correct VGA I/O ports.
2127 Bda
->CrtBasePort
= (Registers
->Misc
& 0x01) ? VGA_CRTC_INDEX_COLOR
2128 : VGA_CRTC_INDEX_MONO
;
2129 /* Bit 1 indicates whether display is color (0) or monochrome (1) */
2130 Bda
->VGAOptions
= (Bda
->VGAOptions
& 0xFD) | (!(Registers
->Misc
& 0x01) << 1);
2132 /* Turn the video off */
2133 IOWriteB(VGA_SEQ_INDEX
, VGA_SEQ_CLOCK_REG
);
2134 IOWriteB(VGA_SEQ_DATA
, IOReadB(VGA_SEQ_DATA
) | VGA_SEQ_CLOCK_SD
);
2136 /* Write the misc register */
2137 IOWriteB(VGA_MISC_WRITE
, Registers
->Misc
);
2139 /* Synchronous reset on */
2140 IOWriteB(VGA_SEQ_INDEX
, VGA_SEQ_RESET_REG
);
2141 IOWriteB(VGA_SEQ_DATA
, VGA_SEQ_RESET_AR
);
2143 /* Write the sequencer registers */
2144 for (i
= 1; i
< VGA_SEQ_MAX_REG
; i
++)
2146 IOWriteB(VGA_SEQ_INDEX
, i
);
2147 IOWriteB(VGA_SEQ_DATA
, Registers
->Sequencer
[i
]);
2150 /* Synchronous reset off */
2151 IOWriteB(VGA_SEQ_INDEX
, VGA_SEQ_RESET_REG
);
2152 IOWriteB(VGA_SEQ_DATA
, VGA_SEQ_RESET_SR
| VGA_SEQ_RESET_AR
);
2154 /* Unlock CRTC registers 0-7 */
2155 IOWriteB(VGA_CRTC_INDEX
, VGA_CRTC_END_HORZ_BLANKING_REG
);
2156 IOWriteB(VGA_CRTC_DATA
, IOReadB(VGA_CRTC_DATA
) | 0x80);
2157 IOWriteB(VGA_CRTC_INDEX
, VGA_CRTC_VERT_RETRACE_END_REG
);
2158 IOWriteB(VGA_CRTC_DATA
, IOReadB(VGA_CRTC_DATA
) & ~0x80);
2159 // Make sure they remain unlocked
2160 Registers
->CRT
[VGA_CRTC_END_HORZ_BLANKING_REG
] |= 0x80;
2161 Registers
->CRT
[VGA_CRTC_VERT_RETRACE_END_REG
] &= ~0x80;
2163 /* Write the CRTC registers */
2164 for (i
= 0; i
< VGA_CRTC_MAX_REG
; i
++)
2166 IOWriteB(VGA_CRTC_INDEX
, i
);
2167 IOWriteB(VGA_CRTC_DATA
, Registers
->CRT
[i
]);
2170 /* Write the GC registers */
2171 for (i
= 0; i
< VGA_GC_MAX_REG
; i
++)
2173 IOWriteB(VGA_GC_INDEX
, i
);
2174 IOWriteB(VGA_GC_DATA
, Registers
->Graphics
[i
]);
2177 /* Write the AC registers */
2178 for (i
= 0; i
< VGA_AC_MAX_REG
; i
++)
2180 VgaSetSinglePaletteRegister(i
, Registers
->Attribute
[i
]);
2183 /* Set the PEL mask */
2184 IOWriteB(VGA_DAC_MASK
, 0xFF);
2186 /* Enable screen and disable palette access */
2187 IOReadB(VGA_INSTAT1_READ
); // Put the AC register into index state
2188 IOWriteB(VGA_AC_INDEX
, 0x20);
2190 /* Turn the video on */
2191 IOWriteB(VGA_SEQ_INDEX
, VGA_SEQ_CLOCK_REG
);
2192 IOWriteB(VGA_SEQ_DATA
, IOReadB(VGA_SEQ_DATA
) & ~VGA_SEQ_CLOCK_SD
);
2194 /* Enable interrupts */
2200 static VOID
VgaSetPalette(const COLORREF
* Palette
, ULONG Size
)
2204 // /* Disable screen and enable palette access */
2205 // IOReadB(VGA_INSTAT1_READ); // Put the AC register into index state
2206 // IOWriteB(VGA_AC_INDEX, 0x00);
2208 for (i
= 0; i
< Size
; i
++)
2210 IOWriteB(VGA_DAC_WRITE_INDEX
, i
);
2211 IOWriteB(VGA_DAC_DATA
, VGA_COLOR_TO_DAC(GetRValue(Palette
[i
])));
2212 IOWriteB(VGA_DAC_DATA
, VGA_COLOR_TO_DAC(GetGValue(Palette
[i
])));
2213 IOWriteB(VGA_DAC_DATA
, VGA_COLOR_TO_DAC(GetBValue(Palette
[i
])));
2216 /* The following step might be optional */
2217 for (i
= Size
; i
< VGA_MAX_COLORS
; i
++)
2219 IOWriteB(VGA_DAC_WRITE_INDEX
, i
);
2220 IOWriteB(VGA_DAC_DATA
, VGA_COLOR_TO_DAC(0x00));
2221 IOWriteB(VGA_DAC_DATA
, VGA_COLOR_TO_DAC(0x00));
2222 IOWriteB(VGA_DAC_DATA
, VGA_COLOR_TO_DAC(0x00));
2225 /* Enable screen and disable palette access */
2226 // IOReadB(VGA_INSTAT1_READ); // Put the AC register into index state
2227 // IOWriteB(VGA_AC_INDEX, 0x20);
2230 static VOID
VgaChangePalette(BYTE ModeNumber
)
2232 const COLORREF
* Palette
;
2235 if (ModeNumber
>= 0x13)
2238 Palette
= VgaPalette
;
2239 Size
= ARRAYSIZE(VgaPalette
);
2241 else if (ModeNumber
== 0x10) // || (ModeNumber == 0x0D) || (ModeNumber == 0x0E)
2243 /* EGA HiRes mode */
2244 Palette
= EgaPalette__HiRes
;
2245 Size
= ARRAYSIZE(EgaPalette__HiRes
);
2248 else if ((ModeNumber
== 0x04) || (ModeNumber
== 0x05))
2251 * CGA modes; this palette contains both normal and
2252 * bright versions of CGA palettes 0 and 1
2254 Palette
= CgaPalette2
;
2255 Size
= ARRAYSIZE(CgaPalette2
);
2258 else // if ((ModeNumber == 0x0D) || (ModeNumber == 0x0E))
2261 Palette
= EgaPalette__16Colors
;
2262 Size
= ARRAYSIZE(EgaPalette__16Colors
);
2265 VgaSetPalette(Palette
, Size
);
2268 static VOID
VidBiosGetCursorPosition(PBYTE Row
, PBYTE Column
, BYTE Page
)
2270 /* Make sure the selected video page is valid */
2271 if (Page
>= BIOS_MAX_PAGES
) return;
2273 /* Get the cursor location */
2274 *Row
= HIBYTE(Bda
->CursorPosition
[Page
]);
2275 *Column
= LOBYTE(Bda
->CursorPosition
[Page
]);
2278 static VOID
VidBiosSetCursorPosition(BYTE Row
, BYTE Column
, BYTE Page
)
2280 /* Make sure the selected video page is valid */
2281 if (Page
>= BIOS_MAX_PAGES
) return;
2283 /* Update the position in the BDA */
2284 Bda
->CursorPosition
[Page
] = MAKEWORD(Column
, Row
);
2286 /* Check if this is the current video page */
2287 if (Page
== Bda
->VideoPage
)
2289 WORD Offset
= Row
* Bda
->ScreenColumns
+ Column
;
2291 /* Modify the CRTC registers */
2292 IOWriteB(VGA_CRTC_INDEX
, VGA_CRTC_CURSOR_LOC_LOW_REG
);
2293 IOWriteB(VGA_CRTC_DATA
, LOBYTE(Offset
));
2294 IOWriteB(VGA_CRTC_INDEX
, VGA_CRTC_CURSOR_LOC_HIGH_REG
);
2295 IOWriteB(VGA_CRTC_DATA
, HIBYTE(Offset
));
2299 static VOID
VidBiosSetCursorShape(WORD CursorStartEnd
)
2301 /* Only valid in text-mode */
2302 if ((Bda
->VideoMode
> 0x03) && (Bda
->VideoMode
!= 0x07)) return;
2304 /* Update the BDA */
2305 Bda
->CursorStartLine
= HIBYTE(CursorStartEnd
) & 0x1F;
2306 Bda
->CursorEndLine
= LOBYTE(CursorStartEnd
) & 0x1F;
2309 * In cursor emulation mode, we suppose the cursor scanlines
2310 * to be in CGA mode, so that we need to adjust them
2314 * Contrary to what is mentioned in lots of literature out there, e.g. in:
2315 * http://webpages.charter.net/danrollins/techhelp/0072.HTM
2316 * http://www.bioscentral.com/misc/bda.htm
2317 * and in other various places, bit 0 of Bda->VGAOptions is 0 when
2318 * cursor emulation is ENABLED, and is 1 when it is DISABLED.
2320 * The following documentation is right about this fact:
2321 * http://www.cs.nyu.edu/~mwalfish/classes/ut/s12-cs372h/ref/hardware/vgadoc/VGABIOS.TXT
2322 * https://sites.google.com/site/pcdosretro/biosdata
2324 * A proof that it is OK is that in the following code samples it is
2325 * explicitely mentioned that setting bit 0 disables cursor emulation:
2326 * - Code snippets in PC Magazine vol.5 num.15 of 16/09/1986, p.291-292;
2327 * - CardFile DOS utility (Jeff Prosise, PC Magazine vol.6 num.17 of 13/10/1987, p.403-416):
2328 * https://ia600700.us.archive.org/1/items/srccode-00000020/cardfile.asm.txt
2329 * (function 'show_cursor', "or ega_info,1 ;disable EGA cursor emulation")
2331 if (!(Bda
->VGAOptions
& 0x01))
2333 // HACK: Quick "fix" for cursor scanline adjustment. This must be reworked.
2334 DPRINT1("HACK: Using HACK for cursor scanlines adjustment\n");
2335 CursorStartEnd
= MAKEWORD((LOBYTE(CursorStartEnd
) & 0x1F) * 2,
2336 (HIBYTE(CursorStartEnd
) & 0x1F) * 2 | (HIBYTE(CursorStartEnd
) & 0xE0));
2339 /* Modify the CRTC registers */
2340 IOWriteB(VGA_CRTC_INDEX
, VGA_CRTC_CURSOR_START_REG
);
2341 IOWriteB(VGA_CRTC_DATA
, HIBYTE(CursorStartEnd
));
2342 IOWriteB(VGA_CRTC_INDEX
, VGA_CRTC_CURSOR_END_REG
);
2343 IOWriteB(VGA_CRTC_DATA
, LOBYTE(CursorStartEnd
));
2346 VOID
VidBiosSyncCursorPosition(VOID
)
2350 SHORT ScreenColumns
= VgaGetDisplayResolution().X
;
2353 /* Get the cursor location */
2354 IOWriteB(VGA_CRTC_INDEX
, VGA_CRTC_CURSOR_LOC_LOW_REG
);
2355 Low
= IOReadB(VGA_CRTC_DATA
);
2356 IOWriteB(VGA_CRTC_INDEX
, VGA_CRTC_CURSOR_LOC_HIGH_REG
);
2357 High
= IOReadB(VGA_CRTC_DATA
);
2359 Offset
= MAKEWORD(Low
, High
);
2361 Row
= (BYTE
)(Offset
/ ScreenColumns
);
2362 Column
= (BYTE
)(Offset
% ScreenColumns
);
2364 /* Synchronize our cursor position with VGA */
2365 VidBiosSetCursorPosition(Row
, Column
, Bda
->VideoPage
);
2368 static inline BYTE
VidBiosGetVideoMode(VOID
)
2370 /* Bit 7 of VideoMode is determined by bit 7 of VGAOptions */
2371 return Bda
->VideoMode
| (Bda
->VGAOptions
& 0x80);
2374 static BOOLEAN
VidBiosSetVideoMode(BYTE ModeNumber
)
2378 PVGA_REGISTERS VgaMode
;
2380 BYTE OrgModeNumber
= ModeNumber
;
2383 * IBM standard modes do not clear the screen if the
2384 * high bit of AL is set (EGA or higher only).
2385 * See Ralf Brown: http://www.ctyme.com/intr/rb-0069.htm
2386 * for more information.
2388 BOOLEAN DoNotClear
= !!(ModeNumber
& 0x80);
2390 /* Retrieve the real mode number and check its validity */
2392 // if (ModeNumber >= ARRAYSIZE(VideoModes))
2393 if (ModeNumber
> BIOS_MAX_VIDEO_MODE
)
2395 DPRINT1("VidBiosSetVideoMode -- Mode %02Xh invalid\n", ModeNumber
);
2399 VgaMode
= VideoModes
[ModeNumber
];
2401 DPRINT1("Switching to mode %02Xh (%02Xh) %s clearing the screen; VgaMode = 0x%p\n",
2402 ModeNumber
, OrgModeNumber
, (DoNotClear
? "without" : "and"), VgaMode
);
2404 if (!VgaSetRegisters(VgaMode
)) return FALSE
;
2406 VgaChangePalette(ModeNumber
);
2408 /* Clear the VGA memory if needed */
2409 if (!DoNotClear
) VgaClearMemory();
2411 // Bda->CrtModeControl;
2412 // Bda->CrtColorPaletteMask;
2416 /* Update the values in the BDA */
2417 Bda
->VideoMode
= ModeNumber
;
2418 Bda
->VideoPageSize
= VideoModePageSize
[ModeNumber
];
2420 Bda
->VideoPageOffset
= Bda
->VideoPage
* Bda
->VideoPageSize
;
2422 /* 256 KB Video RAM; set bit 7 if we do not clear the screen */
2423 Bda
->VGAOptions
= 0x60 | (Bda
->VGAOptions
& 0x7F) | (DoNotClear
? 0x80 : 0x00);
2424 Bda
->VGASwitches
= 0xF9; /* High-resolution */
2426 /* Set the start address in the CRTC */
2427 IOWriteB(VGA_CRTC_INDEX
, VGA_CRTC_START_ADDR_LOW_REG
);
2428 IOWriteB(VGA_CRTC_DATA
, LOBYTE(Bda
->VideoPageOffset
));
2429 IOWriteB(VGA_CRTC_INDEX
, VGA_CRTC_START_ADDR_HIGH_REG
);
2430 IOWriteB(VGA_CRTC_DATA
, HIBYTE(Bda
->VideoPageOffset
));
2432 /* Update the character height */
2433 IOWriteB(VGA_CRTC_INDEX
, VGA_CRTC_MAX_SCAN_LINE_REG
);
2434 Bda
->CharacterHeight
= 1 + (IOReadB(VGA_CRTC_DATA
) & 0x1F);
2436 /* Update the screen size */
2437 Resolution
= VgaGetDisplayResolution();
2438 Bda
->ScreenColumns
= Resolution
.X
;
2439 Bda
->ScreenRows
= Resolution
.Y
- 1;
2442 * Update the cursor shape (text-mode only).
2443 * Use the default CGA cursor scanline values,
2444 * see: http://vitaly_filatov.tripod.com/ng/asm/asm_023.2.html
2446 if ((ModeNumber
>= 0x00 && ModeNumber
<= 0x03) || (ModeNumber
== 0x07))
2447 // FIXME: we might read the CRT registers and do the adjustment?
2448 VidBiosSetCursorShape(MAKEWORD(0x07, 0x06));
2450 /* Set the cursor position for each page */
2451 for (Page
= 0; Page
< BIOS_MAX_PAGES
; ++Page
)
2452 VidBiosSetCursorPosition(0, 0, Page
);
2454 // FIXME: We need to reset the fonts and the font vectors. (INT 1Fh and 43h).
2456 // HACK: We clear here all the text memory. TODO: Do it better!
2457 if (!DoNotClear
&& ((ModeNumber
>= 0x00 && ModeNumber
<= 0x03) || (ModeNumber
== 0x07)))
2461 WORD FillCharacter
= MAKEWORD(' ', DEFAULT_ATTRIBUTE
);
2463 for (Page
= 0; Page
< BIOS_MAX_PAGES
; ++Page
)
2465 VideoAddress
= TO_LINEAR(TEXT_VIDEO_SEG
, Page
* Bda
->VideoPageSize
);
2467 for (i
= 0; i
<= Bda
->ScreenRows
; i
++)
2469 for (j
= 0; j
<= Bda
->ScreenColumns
- 1; j
++)
2471 /* Write to video memory */
2472 EmulatorWriteMemory(&EmulatorContext
,
2473 VideoAddress
+ (i
* Bda
->ScreenColumns
+ j
) * sizeof(WORD
),
2474 (LPVOID
)&FillCharacter
,
2475 sizeof(FillCharacter
));
2481 /* Refresh display */
2482 VgaRefreshDisplay();
2487 static BOOLEAN
VidBiosSetVideoPage(BYTE PageNumber
)
2491 /* Check if the page exists */
2492 if (PageNumber
>= BIOS_MAX_PAGES
) return FALSE
;
2494 /* Check if this is the same page */
2495 if (PageNumber
== Bda
->VideoPage
) return TRUE
;
2497 /* Update the values in the BDA */
2498 Bda
->VideoPage
= PageNumber
;
2499 Bda
->VideoPageOffset
= Bda
->VideoPage
* Bda
->VideoPageSize
;
2501 /* Set the start address in the CRTC */
2502 IOWriteB(VGA_CRTC_INDEX
, VGA_CRTC_START_ADDR_LOW_REG
);
2503 IOWriteB(VGA_CRTC_DATA
, LOBYTE(Bda
->VideoPageOffset
));
2504 IOWriteB(VGA_CRTC_INDEX
, VGA_CRTC_START_ADDR_HIGH_REG
);
2505 IOWriteB(VGA_CRTC_DATA
, HIBYTE(Bda
->VideoPageOffset
));
2508 * Get the cursor location (we don't update anything on the BIOS side
2509 * but we update the cursor location on the VGA side).
2511 VidBiosGetCursorPosition(&Row
, &Column
, PageNumber
);
2512 VidBiosSetCursorPosition(Row
, Column
, PageNumber
);
2517 static VOID
VidBiosPrintCharacter(CHAR Character
, BYTE Attribute
, BYTE Page
)
2519 WORD CharData
= MAKEWORD(Character
, Attribute
);
2522 /* Make sure the page exists */
2523 if (Page
>= BIOS_MAX_PAGES
) return;
2525 /* Get the cursor location */
2526 VidBiosGetCursorPosition(&Row
, &Column
, Page
);
2528 if (Character
== '\a')
2530 /* Bell control character */
2531 // NOTE: We may use what the terminal emulator offers to us...
2535 else if (Character
== '\b')
2537 /* Backspace control character */
2544 Column
= Bda
->ScreenColumns
- 1;
2548 /* Erase the existing character */
2549 CharData
= MAKEWORD(' ', Attribute
);
2550 EmulatorWriteMemory(&EmulatorContext
,
2551 TO_LINEAR(TEXT_VIDEO_SEG
,
2552 Page
* Bda
->VideoPageSize
+
2553 (Row
* Bda
->ScreenColumns
+ Column
) * sizeof(WORD
)),
2557 else if (Character
== '\t')
2559 /* Horizontal Tabulation control character */
2562 // Taken from DOSBox
2563 VidBiosPrintCharacter(' ', Attribute
, Page
);
2564 VidBiosGetCursorPosition(&Row
, &Column
, Page
);
2565 } while (Column
% 8);
2567 else if (Character
== '\n')
2569 /* Line Feed control character */
2572 else if (Character
== '\r')
2574 /* Carriage Return control character */
2579 /* Default character */
2581 /* Write the character */
2582 EmulatorWriteMemory(&EmulatorContext
,
2583 TO_LINEAR(TEXT_VIDEO_SEG
,
2584 Page
* Bda
->VideoPageSize
+
2585 (Row
* Bda
->ScreenColumns
+ Column
) * sizeof(WORD
)),
2589 /* Advance the cursor */
2593 /* Check if it passed the end of the row */
2594 if (Column
>= Bda
->ScreenColumns
)
2596 /* Return to the first column and go to the next line */
2601 /* Scroll the screen up if needed */
2602 if (Row
> Bda
->ScreenRows
)
2604 /* The screen must be scrolled up */
2605 SMALL_RECT Rectangle
= { 0, 0, Bda
->ScreenColumns
- 1, Bda
->ScreenRows
};
2606 VidBiosScrollWindow(SCROLL_UP
, 1, Rectangle
, Page
, DEFAULT_ATTRIBUTE
/*Attribute*/);
2610 /* Set the cursor position */
2611 VidBiosSetCursorPosition(Row
, Column
, Page
);
2614 /* PUBLIC FUNCTIONS ***********************************************************/
2616 VOID WINAPI
VidBiosVideoService(LPWORD Stack
)
2620 /* Set Video Mode */
2623 VidBiosSetVideoMode(getAL());
2627 /* Set Text-Mode Cursor Shape */
2630 VidBiosSetCursorShape(getCX());
2634 /* Set Cursor Position */
2637 VidBiosSetCursorPosition(getDH(), getDL(), getBH());
2641 /* Get Cursor Position and Shape */
2644 /* Make sure the selected video page exists */
2645 if (getBH() >= BIOS_MAX_PAGES
) break;
2647 /* Return the result */
2648 setCX(MAKEWORD(Bda
->CursorEndLine
, Bda
->CursorStartLine
));
2649 setDX(Bda
->CursorPosition
[getBH()]);
2653 /* Query Light Pen */
2657 * On modern BIOSes, this function returns 0
2658 * so that we can ignore the other registers.
2664 /* Select Active Display Page */
2667 VidBiosSetVideoPage(getAL());
2671 /* Scroll Window Up/Down */
2675 SMALL_RECT Rectangle
= { getCL(), getCH(), getDL(), getDH() };
2677 VidBiosScrollWindow((getAH() == 0x06) ? SCROLL_UP
: SCROLL_DOWN
,
2678 getAL(), Rectangle
, Bda
->VideoPage
, getBH());
2683 /* Read Character and Attribute at Cursor Position */
2687 BYTE Page
= getBH();
2690 /* Check if the page exists */
2691 if (Page
>= BIOS_MAX_PAGES
) break;
2693 /* Find the offset of the character */
2694 Offset
= Page
* Bda
->VideoPageSize
+
2695 (HIBYTE(Bda
->CursorPosition
[Page
]) * Bda
->ScreenColumns
+
2696 LOBYTE(Bda
->CursorPosition
[Page
])) * 2;
2698 /* Read from the video memory */
2699 EmulatorReadMemory(&EmulatorContext
,
2700 TO_LINEAR(TEXT_VIDEO_SEG
, Offset
),
2701 (LPVOID
)&CharacterData
,
2704 /* Return the character data in AX */
2705 setAX(CharacterData
);
2710 /* Write Character and Attribute at Cursor Position */
2712 /* Write Character only (PCjr: + Attribute) at Cursor Position */
2715 WORD CharacterData
= MAKEWORD(getAL(), getBL());
2716 BYTE Page
= getBH();
2717 DWORD Offset
, Counter
= getCX();
2719 /* Check if the page exists */
2720 if (Page
>= BIOS_MAX_PAGES
) break;
2722 /* Find the offset of the character */
2723 Offset
= Page
* Bda
->VideoPageSize
+
2724 (HIBYTE(Bda
->CursorPosition
[Page
]) * Bda
->ScreenColumns
+
2725 LOBYTE(Bda
->CursorPosition
[Page
])) * 2;
2727 /* Write to video memory a certain number of times */
2730 EmulatorWriteMemory(&EmulatorContext
,
2731 TO_LINEAR(TEXT_VIDEO_SEG
, Offset
),
2732 (LPVOID
)&CharacterData
,
2733 (getAH() == 0x09) ? sizeof(WORD
) : sizeof(BYTE
));
2741 /* Set Video Colors */
2744 if (Bda
->VideoMode
< 0x04 || Bda
->VideoMode
> 0x06)
2746 DPRINT1("BIOS Function INT 10h, AH = 0Bh, BH = 0x%02X is unsupported for non-CGA modes\n",
2753 case 0x00: /* Set Background/Border Color */
2756 BYTE Index
= getBL();
2758 /* See: http://www.bioscentral.com/misc/bda.htm */
2759 Bda
->CrtColorPaletteMask
= (Bda
->CrtColorPaletteMask
& 0xE0) | (Index
& 0x1F);
2761 Index
= ((Index
<< 1) & 0x10) | (Index
& 0x7);
2763 /* Always set the overscan color */
2764 VgaSetSinglePaletteRegister(VGA_AC_OVERSCAN_REG
, Index
);
2766 /* Don't set any extra colors when in text mode */
2767 if (Bda
->VideoMode
<= 0x03) break;
2769 VgaSetSinglePaletteRegister(0x00, Index
);
2771 Index
= (Bda
->CrtColorPaletteMask
& 0x10) | 0x02 | ((Bda
->CrtColorPaletteMask
& 0x20) >> 5);
2773 VgaSetSinglePaletteRegister(0x01, Index
);
2775 VgaSetSinglePaletteRegister(0x02, Index
);
2777 VgaSetSinglePaletteRegister(0x03, Index
);
2779 /* Background/Border Color is modifiable via the first index */
2780 VgaSetSinglePaletteRegister(0x00, getBL());
2783 /* Enable screen and disable palette access */
2784 IOReadB(VGA_INSTAT1_READ
); // Put the AC register into index state
2785 IOWriteB(VGA_AC_INDEX
, 0x20);
2789 case 0x01: /* Set Palette */
2791 BYTE Index
= getBL();
2793 /* See: http://www.bioscentral.com/misc/bda.htm */
2794 /* Reset bit 5: foreground colors index (0: green/red/yellow; 1: cyan/magenta/white) */
2795 Bda
->CrtColorPaletteMask
= (Bda
->CrtColorPaletteMask
& 0xDF) | ((Index
& 1) ? 0x20 : 0x00);
2797 /* Don't set any extra colors when in text mode */
2798 if (Bda
->VideoMode
<= 0x03) break;
2800 Index
= (Bda
->CrtColorPaletteMask
& 0x10) | 0x02 | Index
;
2802 VgaSetSinglePaletteRegister(0x01, Index
);
2804 VgaSetSinglePaletteRegister(0x02, Index
);
2806 VgaSetSinglePaletteRegister(0x03, Index
);
2808 /* Enable screen and disable palette access */
2809 IOReadB(VGA_INSTAT1_READ
); // Put the AC register into index state
2810 IOWriteB(VGA_AC_INDEX
, 0x20);
2815 DPRINT1("BIOS Function INT 10h, AH = 0Bh, BH = 0x%02X NOT IMPLEMENTED\n",
2823 /* Teletype Output */
2826 VidBiosPrintCharacter(getAL(), getBL(), getBH());
2830 /* Get Current Video Mode */
2833 setAX(MAKEWORD(VidBiosGetVideoMode(), Bda
->ScreenColumns
));
2834 setBH(Bda
->VideoPage
);
2838 /* Palette Control */
2843 /* Set Single Palette Register */
2846 VgaSetSinglePaletteRegister(getBL(), getBH());
2848 /* Enable screen and disable palette access */
2849 IOReadB(VGA_INSTAT1_READ
); // Put the AC register into index state
2850 IOWriteB(VGA_AC_INDEX
, 0x20);
2854 /* Set Overscan Color */
2857 VgaSetSinglePaletteRegister(VGA_AC_OVERSCAN_REG
, getBH());
2859 /* Enable screen and disable palette access */
2860 IOReadB(VGA_INSTAT1_READ
); // Put the AC register into index state
2861 IOWriteB(VGA_AC_INDEX
, 0x20);
2865 /* Set All Palette Registers */
2869 LPBYTE Buffer
= SEG_OFF_TO_PTR(getES(), getDX());
2871 /* Set the palette registers */
2872 for (i
= 0; i
<= VGA_AC_PAL_F_REG
; i
++)
2874 VgaSetSinglePaletteRegister(i
, Buffer
[i
]);
2877 /* Set the overscan register */
2878 // VgaSetSinglePaletteRegister(VGA_AC_OVERSCAN_REG, Buffer[VGA_AC_PAL_F_REG + 1]);
2879 IOWriteB(VGA_AC_INDEX
, VGA_AC_OVERSCAN_REG
);
2880 IOWriteB(VGA_AC_WRITE
, Buffer
[VGA_AC_PAL_F_REG
+ 1]);
2882 /* Enable screen and disable palette access */
2883 IOReadB(VGA_INSTAT1_READ
); // Put the AC register into index state
2884 IOWriteB(VGA_AC_INDEX
, 0x20);
2888 /* Get Single Palette Register */
2891 /* Write the index */
2892 IOReadB(VGA_INSTAT1_READ
); // Put the AC register into index state
2893 IOWriteB(VGA_AC_INDEX
, getBL());
2896 setBH(IOReadB(VGA_AC_READ
));
2898 /* Enable screen and disable palette access */
2899 IOReadB(VGA_INSTAT1_READ
); // Put the AC register into index state
2900 IOWriteB(VGA_AC_INDEX
, 0x20);
2904 /* Get Overscan Color */
2907 /* Write the index */
2908 IOReadB(VGA_INSTAT1_READ
); // Put the AC register into index state
2909 IOWriteB(VGA_AC_INDEX
, VGA_AC_OVERSCAN_REG
);
2912 setBH(IOReadB(VGA_AC_READ
));
2914 /* Enable screen and disable palette access */
2915 IOReadB(VGA_INSTAT1_READ
); // Put the AC register into index state
2916 IOWriteB(VGA_AC_INDEX
, 0x20);
2920 /* Get All Palette Registers */
2924 LPBYTE Buffer
= SEG_OFF_TO_PTR(getES(), getDX());
2926 /* Get the palette registers */
2927 for (i
= 0; i
<= VGA_AC_PAL_F_REG
; i
++)
2929 /* Write the index */
2930 IOReadB(VGA_INSTAT1_READ
); // Put the AC register into index state
2931 IOWriteB(VGA_AC_INDEX
, i
);
2934 Buffer
[i
] = IOReadB(VGA_AC_READ
);
2937 /* Get the overscan register */
2938 IOWriteB(VGA_AC_INDEX
, VGA_AC_OVERSCAN_REG
);
2939 Buffer
[VGA_AC_PAL_F_REG
+ 1] = IOReadB(VGA_AC_READ
);
2941 /* Enable screen and disable palette access */
2942 IOReadB(VGA_INSTAT1_READ
); // Put the AC register into index state
2943 IOWriteB(VGA_AC_INDEX
, 0x20);
2947 /* Set Individual DAC Register */
2950 /* Write the index */
2951 // Certainly in BL and not in BX as said by Ralf Brown...
2952 IOWriteB(VGA_DAC_WRITE_INDEX
, getBL());
2954 /* Write the data in this order: Red, Green, Blue */
2955 IOWriteB(VGA_DAC_DATA
, getDH());
2956 IOWriteB(VGA_DAC_DATA
, getCH());
2957 IOWriteB(VGA_DAC_DATA
, getCL());
2962 /* Set Block of DAC Registers */
2966 LPBYTE Buffer
= SEG_OFF_TO_PTR(getES(), getDX());
2968 /* Write the index */
2969 // Certainly in BL and not in BX as said by Ralf Brown...
2970 IOWriteB(VGA_DAC_WRITE_INDEX
, getBL());
2972 for (i
= 0; i
< getCX(); i
++)
2974 /* Write the data in this order: Red, Green, Blue */
2975 IOWriteB(VGA_DAC_DATA
, *Buffer
++);
2976 IOWriteB(VGA_DAC_DATA
, *Buffer
++);
2977 IOWriteB(VGA_DAC_DATA
, *Buffer
++);
2983 /* Get Individual DAC Register */
2986 /* Write the index */
2987 IOWriteB(VGA_DAC_READ_INDEX
, getBL());
2989 /* Read the data in this order: Red, Green, Blue */
2990 setDH(IOReadB(VGA_DAC_DATA
));
2991 setCH(IOReadB(VGA_DAC_DATA
));
2992 setCL(IOReadB(VGA_DAC_DATA
));
2997 /* Get Block of DAC Registers */
3001 LPBYTE Buffer
= SEG_OFF_TO_PTR(getES(), getDX());
3003 /* Write the index */
3004 // Certainly in BL and not in BX as said by Ralf Brown...
3005 IOWriteB(VGA_DAC_READ_INDEX
, getBL());
3007 for (i
= 0; i
< getCX(); i
++)
3009 /* Write the data in this order: Red, Green, Blue */
3010 *Buffer
++ = IOReadB(VGA_DAC_DATA
);
3011 *Buffer
++ = IOReadB(VGA_DAC_DATA
);
3012 *Buffer
++ = IOReadB(VGA_DAC_DATA
);
3020 DPRINT1("BIOS Palette Control Sub-command AL = 0x%02X NOT IMPLEMENTED\n",
3034 /* Set User 8x8 Graphics Chars (Setup INT 1Fh Vector) */
3037 /* Update the BIOS INT 1Fh vector to user-defined ES:BP pointer */
3038 // Far pointer to the 8x8 characters 80h-FFh
3039 ((PULONG
)BaseAddress
)[0x1F] = MAKELONG(getBP(), getES());
3043 /* Setup ROM 8x8 Font for Graphics Mode */
3046 // FIXME: Use BL and DL for the number of screen rows
3048 /* Write the default font to the VGA font plane */
3049 VgaWriteFont(0, Font8x8
, ARRAYSIZE(Font8x8
) / VGA_FONT_CHARACTERS
);
3051 /* Update the BIOS INT 43h vector */
3052 // Far pointer to the 8x8 characters 00h-...
3053 ((PULONG
)BaseAddress
)[0x43] = MAKELONG(FONT_8x8_OFFSET
, VIDEO_BIOS_DATA_SEG
);
3058 /* Setup ROM 8x16 Font for Graphics Mode */
3061 // FIXME: Use BL and DL for the number of screen rows
3063 /* Write the default font to the VGA font plane */
3064 VgaWriteFont(0, Font8x16
, ARRAYSIZE(Font8x16
) / VGA_FONT_CHARACTERS
);
3066 /* Update the BIOS INT 43h vector */
3067 // Far pointer to the 8x16 characters 00h-...
3068 ((PULONG
)BaseAddress
)[0x43] = MAKELONG(FONT_8x16_OFFSET
, VIDEO_BIOS_DATA_SEG
);
3073 /* Get Current Character Font Information */
3076 ULONG Address
= (ULONG
)NULL
;
3080 /* 00h - INT 0x1F pointer */
3082 Address
= ((PULONG
)BaseAddress
)[0x1F];
3085 /* 01h - INT 0x43 pointer */
3087 Address
= ((PULONG
)BaseAddress
)[0x43];
3090 /* 02h - 8x14 font */
3092 Address
= MAKELONG(FONT_8x14_OFFSET
, VIDEO_BIOS_DATA_SEG
);
3095 /* 03h - 8x8 font */
3097 Address
= MAKELONG(FONT_8x8_OFFSET
, VIDEO_BIOS_DATA_SEG
);
3100 /* 04h - 8x8 font, upper half */
3102 Address
= MAKELONG(FONT_8x8_HIGH_OFFSET
, VIDEO_BIOS_DATA_SEG
);
3105 /* 05h - NOT IMPLEMENTED - 9x14 font */
3109 /* 06h - 8x16 font */
3111 Address
= MAKELONG(FONT_8x16_OFFSET
, VIDEO_BIOS_DATA_SEG
);
3114 /* 07h - NOT IMPLEMENTED - 9x16 font */
3119 DPRINT1("INT 10h, AL=30h Function BH = 0x%02X NOT IMPLEMENTED\n",
3123 /* Return the data */
3124 setES(HIWORD(Address
));
3125 setBP(LOWORD(Address
));
3126 setCX(Bda
->CharacterHeight
);
3127 setDL(Bda
->ScreenRows
);
3134 DPRINT1("BIOS Font Control Sub-command AL = 0x%02X NOT IMPLEMENTED\n",
3142 /* Alternate Function Select */
3147 /* Get EGA/VGA Information */
3150 setBH((Bda
->VGAOptions
& 0x02) >> 1); /* Color (0) or monochrome (1) display */
3151 setBL((Bda
->VGAOptions
& 0x60) >> 5); /* Video RAM size */
3152 setCH((Bda
->VGASwitches
& 0xF0) >> 4); /* Features settings */
3153 setCL( Bda
->VGASwitches
& 0x0F); /* Switches settings */
3157 /* Enable/Disable Cursor Emulation */
3160 BYTE State
= getAL();
3162 /* Check for validity */
3163 if (State
> 1) break;
3166 * Enable (State == 0) or disable (State == 1) cursor emulation.
3167 * Please read the WARNING in the 'VidBiosSetCursorShape'
3168 * function for more details.
3170 Bda
->VGAOptions
= (Bda
->VGAOptions
& 0xFE) | (State
& 0x01);
3172 /* Return success */
3177 /* Enable/Disable screen refresh */
3180 BYTE State
= getAL();
3183 /* Check for validity */
3184 if (State
> 1) break;
3186 /* Turn the video on (State == 0) or off (State == 1) */
3187 IOWriteB(VGA_SEQ_INDEX
, VGA_SEQ_CLOCK_REG
);
3188 Clocking
= IOReadB(VGA_SEQ_DATA
);
3191 Clocking
&= ~VGA_SEQ_CLOCK_SD
;
3193 Clocking
|= VGA_SEQ_CLOCK_SD
;
3195 IOWriteB(VGA_SEQ_DATA
, Clocking
);
3197 /* Return success */
3204 DPRINT1("BIOS Function INT 10h, AH = 12h (Alternate Function Select), BX = 0x%04X NOT IMPLEMENTED\n",
3216 DPRINT1("BIOS Function INT 13h (Write String) is UNIMPLEMENTED\n");
3220 /* Get/Set Display combination code */
3225 case 0x00: /* Get Display combination code */
3226 setAX(MAKEWORD(0x1A, 0x1A));
3227 setBX(MAKEWORD(0x08, 0x00)); /* VGA w/ color analog display */
3229 case 0x01: /* Set Display combination code */
3230 DPRINT1("Set Display combination code - Unsupported\n");
3240 DPRINT1("BIOS Function INT 10h, AH = 0x%02X, AL = 0x%02X, BH = 0x%02X NOT IMPLEMENTED\n",
3241 getAH(), getAL(), getBH());
3248 * Those attach / detach functions are work-in-progress
3251 static BOOL Attached
= TRUE
;
3253 VOID
VidBiosAttachToConsole(VOID
)
3255 // VgaRefreshDisplay();
3258 VgaAttachToConsole();
3262 VgaRefreshDisplay();
3263 VidBiosSyncCursorPosition();
3266 VOID
VidBiosDetachFromConsole(VOID
)
3268 /* Perform another screen refresh */
3269 VgaRefreshDisplay();
3271 /* Detach from the console */
3272 VgaDetachFromConsole(FALSE
);
3276 BOOLEAN
VidBiosInitialize(VOID
)
3278 /* Some interrupts are in fact addresses to tables */
3279 ((PULONG
)BaseAddress
)[0x1D] = (ULONG
)NULL
;
3280 // Far pointer to the 8x8 characters 80h-FFh
3281 ((PULONG
)BaseAddress
)[0x1F] = MAKELONG(FONT_8x8_HIGH_OFFSET
, VIDEO_BIOS_DATA_SEG
);
3282 // ((PULONG)BaseAddress)[0x42] = (ULONG)NULL;
3283 // Far pointer to the 8x16 characters 00h-...
3284 ((PULONG
)BaseAddress
)[0x43] = MAKELONG(FONT_8x16_OFFSET
, VIDEO_BIOS_DATA_SEG
);
3285 ((PULONG
)BaseAddress
)[0x44] = (ULONG
)NULL
;
3286 // ((PULONG)BaseAddress)[0x6D] = (ULONG)NULL;
3288 /* Fill the tables */
3289 RtlMoveMemory(SEG_OFF_TO_PTR(VIDEO_BIOS_DATA_SEG
, FONT_8x8_OFFSET
),
3290 Font8x8
, sizeof(Font8x8
));
3291 RtlMoveMemory(SEG_OFF_TO_PTR(VIDEO_BIOS_DATA_SEG
, FONT_8x16_OFFSET
),
3292 Font8x16
, sizeof(Font8x16
));
3293 RtlMoveMemory(SEG_OFF_TO_PTR(VIDEO_BIOS_DATA_SEG
, FONT_8x14_OFFSET
),
3294 Font8x14
, sizeof(Font8x14
));
3296 /* Write the default font to the VGA font plane */
3297 VgaWriteFont(0, Font8x16
, ARRAYSIZE(Font8x16
) / VGA_FONT_CHARACTERS
);
3300 // FIXME: At the moment we always set a VGA mode. In the future,
3301 // we should set this mode **only** when:
3302 // - an app starts to use directly the video memory
3303 // (that should be done in emulator.c)
3304 // - or starts to use non-stream I/O interrupts
3305 // (that should be done here, or maybe in VGA ??)
3308 /* Set the default video mode */
3309 VidBiosSetVideoMode(BIOS_DEFAULT_VIDEO_MODE
);
3311 /* Synchronize our cursor position with VGA */
3312 VidBiosSyncCursorPosition();
3314 /* Register the BIOS support BOPs */
3315 RegisterBop(BOP_VIDEO_INT
, VidBiosVideoService
);
3320 VOID
VidBiosCleanup(VOID
)