1 /* ScummVM - Graphic Adventure Engine
2  *
3  * ScummVM is the legal property of its developers, whose names
4  * are too numerous to list here. Please refer to the COPYRIGHT
5  * file distributed with this source distribution.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20  *
21  */
22 
23 
24 #include "common/system.h"
25 #include "common/events.h"
26 #include "common/stream.h"
27 #include "common/memstream.h"
28 
29 #include "graphics/cursorman.h"
30 #include "graphics/palette.h"
31 #include "graphics/surface.h"
32 
33 #include "image/iff.h"
34 #include "image/pcx.h"
35 
36 #include "queen/display.h"
37 #include "queen/input.h"
38 #include "queen/logic.h"
39 #include "queen/queen.h"
40 #include "queen/resource.h"
41 
42 namespace Queen {
43 
Display(QueenEngine * vm,OSystem * system)44 Display::Display(QueenEngine *vm, OSystem *system)
45 	: _fullscreen(true), _horizontalScroll(0), _bdWidth(0), _bdHeight(0),
46 	_system(system), _vm(vm), _rnd("queenDisplay") {
47 
48 	initFont();
49 
50 	_screenBuf   = new uint8[ SCREEN_W * SCREEN_H ];
51 	_panelBuf    = new uint8[ PANEL_W * PANEL_H ];
52 	_backdropBuf = new uint8[ BACKDROP_W * BACKDROP_H ];
53 	memset(_screenBuf,   0, SCREEN_W * SCREEN_H);
54 	memset(_panelBuf,    0, PANEL_W * PANEL_H);
55 	memset(_backdropBuf, 0, BACKDROP_W * BACKDROP_H);
56 
57 	_fullRefresh = 1;
58 	_dirtyBlocksWidth  = SCREEN_W / D_BLOCK_W;
59 	_dirtyBlocksHeight = SCREEN_H / D_BLOCK_H;
60 	_dirtyBlocks = new uint8[_dirtyBlocksWidth * _dirtyBlocksHeight];
61 	memset(_dirtyBlocks, 0, _dirtyBlocksWidth * _dirtyBlocksHeight);
62 
63 	_pal.room   = new uint8[ 256 * 3 ];
64 	_pal.screen = new uint8[ 256 * 3 ];
65 	_pal.panel  = new uint8[ 112 * 3 ];
66 	memset(_pal.room,   0, 256 * 3);
67 	memset(_pal.screen, 0, 256 * 3);
68 	memset(_pal.panel,  0, 112 * 3);
69 	_pal.dirtyMin = 0;
70 	_pal.dirtyMax = 255;
71 	_pal.scrollable = true;
72 
73 	_imageExt = (_vm->resource()->getPlatform() == Common::kPlatformAmiga) ? "LBM" : "PCX";
74 
75 	_curTextColor = 0;
76 	memset(_texts, 0, sizeof(_texts));
77 
78 	memset(&_dynalum, 0, sizeof(_dynalum));
79 
80 	setupInkColors();
81 }
82 
~Display()83 Display::~Display() {
84 	delete[] _backdropBuf;
85 	delete[] _panelBuf;
86 	delete[] _screenBuf;
87 
88 	delete[] _dirtyBlocks;
89 
90 	delete[] _pal.room;
91 	delete[] _pal.screen;
92 	delete[] _pal.panel;
93 
94 	delete[] _dynalum.mskBuf;
95 	delete[] _dynalum.lumBuf;
96 }
97 
dynalumInit(const char * roomName,uint16 roomNum)98 void Display::dynalumInit(const char *roomName, uint16 roomNum) {
99 	debug(9, "Display::dynalumInit(%s, %d)", roomName, roomNum);
100 
101 	_dynalum.valid = false;
102 	delete[] _dynalum.mskBuf;
103 	_dynalum.mskBuf = NULL;
104 	delete[] _dynalum.lumBuf;
105 	_dynalum.lumBuf = NULL;
106 
107 	if (!isPalFadingDisabled(roomNum)) {
108 		char filename[20];
109 		sprintf(filename, "%s.MSK", roomName);
110 		if (_vm->resource()->fileExists(filename)) {
111 			_dynalum.mskBuf = (uint8 *)_vm->resource()->loadFile(filename, 0, &_dynalum.mskSize);
112 			sprintf(filename, "%s.LUM", roomName);
113 			if (_vm->resource()->fileExists(filename)) {
114 				_dynalum.lumBuf = (int8 *)_vm->resource()->loadFile(filename, 0, &_dynalum.lumSize);
115 				_dynalum.valid = true;
116 				_dynalum.prevColMask = 0xFF;
117 			}
118 		}
119 	}
120 }
121 
dynalumUpdate(int16 x,int16 y)122 void Display::dynalumUpdate(int16 x, int16 y) {
123 	if (!_dynalum.valid)
124 		return;
125 
126 	if (x < 0) {
127 		x = 0;
128 	} else if (x > _bdWidth) {
129 		x = _bdWidth;
130 	}
131 	if (y < 0) {
132 		y = 0;
133 	} else if (y > ROOM_ZONE_HEIGHT - 1) {
134 		y = ROOM_ZONE_HEIGHT - 1;
135 	}
136 
137 	uint32 offset = (y / 4) * 160 + (x / 4);
138 	assert(offset < _dynalum.mskSize);
139 
140 	uint8 colMask = _dynalum.mskBuf[offset];
141 	debug(9, "Display::dynalumUpdate(%d, %d) - colMask = %d", x, y, colMask);
142 	if (colMask != _dynalum.prevColMask) {
143 		for (int i = 144; i < 160; ++i) {
144 			for (int j = 0; j < 3; ++j) {
145 				int16 c = (int16)(_pal.room[i * 3 + j] + _dynalum.lumBuf[colMask * 3 + j] * 4);
146 				if (c < 0) {
147 					c = 0;
148 				} else if (c > 255) {
149 					c = 255;
150 				}
151 				_pal.screen[i * 3 + j] = (uint8)c;
152 			}
153 		}
154 		_pal.dirtyMin = MIN(_pal.dirtyMin, 144);
155 		_pal.dirtyMax = MAX(_pal.dirtyMax, 159);
156 		_dynalum.prevColMask = colMask;
157 	}
158 }
159 
palSet(const uint8 * pal,int start,int end,bool updateScreen)160 void Display::palSet(const uint8 *pal, int start, int end, bool updateScreen) {
161 	debug(9, "Display::palSet(%d, %d)", start, end);
162 	const int numColors = end - start + 1;
163 	assert(numColors <= 256);
164 	_system->getPaletteManager()->setPalette(pal + start * 3, start, numColors);
165 	if (updateScreen) {
166 		_vm->input()->delay(20);
167 	}
168 }
169 
palSetJoeDress()170 void Display::palSetJoeDress() {
171 	if (_vm->resource()->getPlatform() == Common::kPlatformDOS) {
172 		memcpy(_pal.room + 144 * 3, _palJoeDress, 16 * 3);
173 		memcpy(_pal.screen + 144 * 3, _palJoeDress, 16 * 3);
174 		palSet(_pal.screen, 144, 159, true);
175 	}
176 }
177 
palSetJoeNormal()178 void Display::palSetJoeNormal() {
179 	if (_vm->resource()->getPlatform() == Common::kPlatformDOS) {
180 		memcpy(_pal.room + 144 * 3, _palJoeClothes, 16 * 3);
181 		memcpy(_pal.screen + 144 * 3, _palJoeClothes, 16 * 3);
182 		palSet(_pal.screen, 144, 159, true);
183 	}
184 }
185 
palSetPanel()186 void Display::palSetPanel() {
187 	memcpy(_pal.room + 144 * 3, _pal.panel, (256 - 144) * 3);
188 	memcpy(_pal.screen + 144 * 3, _pal.panel, (256 - 144) * 3);
189 }
190 
palFadeIn(uint16 roomNum,bool dynalum,int16 dynaX,int16 dynaY)191 void Display::palFadeIn(uint16 roomNum, bool dynalum, int16 dynaX, int16 dynaY) {
192 	debug(9, "Display::palFadeIn(%d)", roomNum);
193 	int n = getNumColorsForRoom(roomNum);
194 	memcpy(_pal.screen, _pal.room, n * 3);
195 	if (!isPalFadingDisabled(roomNum)) {
196 		if (dynalum) {
197 			dynalumUpdate(dynaX, dynaY);
198 		}
199 		uint8 tempPal[256 * 3];
200 		for (int i = 0; i <= FADE_SPEED; ++i) {
201 			for (int j = 0; j < n * 3; ++j) {
202 				tempPal[j] = _pal.screen[j] * i / FADE_SPEED;
203 			}
204 			palSet(tempPal, 0, n - 1, true);
205 		}
206 	}
207 	_pal.dirtyMin = 0;
208 	_pal.dirtyMax = n - 1;
209 	_pal.scrollable = true;
210 }
211 
palFadeOut(uint16 roomNum)212 void Display::palFadeOut(uint16 roomNum) {
213 	debug(9, "Display::palFadeOut(%d)", roomNum);
214 	_pal.scrollable = false;
215 	int n = getNumColorsForRoom(roomNum);
216 	if (isPalFadingDisabled(roomNum)) {
217 		memset(_pal.screen, 0, n * 3);
218 		palSet(_pal.screen, 0, n - 1, true);
219 	} else {
220 		uint8 tempPal[256 * 3];
221 		memcpy(tempPal, _pal.screen, n * 3);
222 		for (int i = FADE_SPEED; i >= 0; --i) {
223 			for (int j = 0; j < n * 3; ++j) {
224 				_pal.screen[j] = tempPal[j] * i / FADE_SPEED;
225 			}
226 			palSet(_pal.screen, 0, n - 1, true);
227 		}
228 	}
229 }
230 
palGreyPanel()231 void Display::palGreyPanel() {
232 	debug(9, "Display::palGreyPanel()");
233 	uint8 tempPal[256 * 3];
234 	for (int i = 224 * 3; i < 256 * 3; i += 3) {
235 		tempPal[i] = tempPal[i + 1] = tempPal[i + 2] = _pal.screen[i + 1] * 2 / 3;
236 	}
237 	palSet(tempPal, 224, 255, true);
238 }
239 
palScroll(int start,int end)240 void Display::palScroll(int start, int end) {
241 	debug(9, "Display::palScroll(%d, %d)", start, end);
242 
243 	uint8 *palEnd = _pal.screen + end * 3;
244 	uint8 *palStart = _pal.screen + start * 3;
245 
246 	uint8 r = *palEnd++;
247 	uint8 g = *palEnd++;
248 	uint8 b = *palEnd;
249 
250 	int n = (end - start) * 3;
251 	while (n--) {
252 		*palEnd = *(palEnd - 3);
253 		--palEnd;
254 	}
255 
256 	*palStart++ = r;
257 	*palStart++ = g;
258 	*palStart   = b;
259 }
260 
palSetAmigaColor(uint8 color,uint16 rgb)261 void Display::palSetAmigaColor(uint8 color, uint16 rgb) {
262 	uint8 b = rgb & 0xF; rgb >>= 4;
263 	uint8 g = rgb & 0xF; rgb >>= 4;
264 	uint8 r = rgb & 0xF;
265 	_pal.room[color * 3] = (r << 4) | r;
266 	_pal.room[color * 3 + 1] = (g << 4) | g;
267 	_pal.room[color * 3 + 2] = (b << 4) | b;
268 }
269 
palCustomColors(uint16 roomNum)270 void Display::palCustomColors(uint16 roomNum) {
271 	debug(9, "Display::palCustomColors(%d)", roomNum);
272 	if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
273 		switch (roomNum) {
274 		case 28:
275 			palSetAmigaColor(27, 0xC60);
276 			palSetAmigaColor(28, 0xA30);
277 			palSetAmigaColor(29, 0x810);
278 			palSetAmigaColor(30, 0x600);
279 			break;
280 		case 29:
281 			palSetAmigaColor(27, 0x58B);
282 			palSetAmigaColor(28, 0x369);
283 			palSetAmigaColor(29, 0x158);
284 			palSetAmigaColor(30, 0x046);
285 			break;
286 		case 30:
287 			palSetAmigaColor(27, 0x5A4);
288 			palSetAmigaColor(28, 0x384);
289 			palSetAmigaColor(29, 0x171);
290 			palSetAmigaColor(30, 0x056);
291 			break;
292 		case 31:
293 			palSetAmigaColor(27, 0xDA4);
294 			palSetAmigaColor(28, 0xB83);
295 			palSetAmigaColor(29, 0x873);
296 			palSetAmigaColor(30, 0x652);
297 			break;
298 		case 45:
299 			palSetAmigaColor(20, 0xA58);
300 			palSetAmigaColor(21, 0x845);
301 			break;
302 		}
303 		return;
304 	}
305 	switch (roomNum) {
306 	case 31:
307 		for (int i = 72; i < 84; i++) {
308 			_pal.room[i * 3 + 1] = _pal.room[i * 3 + 1] * 90 / 100;
309 			_pal.room[i * 3 + 2] = _pal.room[i * 3 + 2] * 70 / 100;
310 		}
311 		break;
312 	case 29:
313 		for (int i = 72; i < 84; i++) {
314 			_pal.room[i * 3 + 1] = _pal.room[i * 3 + 1] * 60 / 100;
315 			_pal.room[i * 3 + 2] = _pal.room[i * 3 + 2] * 60 / 100;
316 		}
317 		break;
318 	case 30:
319 		for (int i = 72; i < 84; i++) {
320 			_pal.room[i * 3 + 0] = _pal.room[i * 3 + 0] * 60 / 100;
321 			_pal.room[i * 3 + 1] = _pal.room[i * 3 + 1] * 80 / 100;
322 		}
323 		break;
324 	case 28:
325 		for (int i = 72; i < 84; i++) {
326 			_pal.room[i * 3 + 0] = _pal.room[i * 3 + 0] * 80 / 100;
327 			_pal.room[i * 3 + 2] = _pal.room[i * 3 + 1] * 60 / 100;
328 		}
329 		break;
330 	}
331 }
332 
palCustomScroll(uint16 roomNum)333 void Display::palCustomScroll(uint16 roomNum) {
334 	debug(9, "Display::palCustomScroll(%d)", roomNum);
335 	static int16 scrollx = 0;
336 
337 	if (!_pal.scrollable) {
338 		return;
339 	}
340 
341 	int hiPal = 0;
342 	int loPal = 255;
343 	int i;
344 
345 	++scrollx;
346 
347 	if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
348 		switch (roomNum) {
349 		case 4:
350 			if ((scrollx & 1) == 0) {
351 				palScroll(24, 26);
352 				loPal = 24;
353 				hiPal = 26;
354 			}
355 			break;
356 		case 74:
357 			palScroll(28, 31);
358 			loPal = 28;
359 			hiPal = 31;
360 			break;
361 		}
362 		_pal.dirtyMin = MIN(_pal.dirtyMin, loPal);
363 		_pal.dirtyMax = MAX(_pal.dirtyMax, hiPal);
364 		return;
365 	}
366 
367 	switch (roomNum) {
368 	case 123: {
369 			static int16 j = 0, jdir = 2;
370 			for (i = 96; i < 111; ++i) {
371 				_pal.screen[i * 3 + 0] = MIN(255, _pal.room[i * 3 + 0] + j * 8);
372 				_pal.screen[i * 3 + 1] = MIN(255, _pal.room[i * 3 + 1] + j * 4);
373 			}
374 			j += jdir;
375 			if (j <= 0 || j >= 18) {
376 				jdir = -jdir;
377 			}
378 			loPal = 96;
379 			hiPal = 111;
380 		}
381 		break;
382 	case 124: {
383 			static int16 j = 0,jdir = 2;
384 			for (i = 80; i < 144; ++i) {
385 				_pal.screen[i * 3 + 0] = MIN(255, _pal.room[i * 3 + 0] + j * 8);
386 				_pal.screen[i * 3 + 1] = MIN(255, _pal.room[i * 3 + 1] + j * 4);
387 			}
388 			j += jdir;
389 			if (j <= 0 || j >= 14) {
390 				jdir = -jdir;
391 				if (_rnd.getRandomNumber(1)) {
392 					if (ABS(jdir) == 1) {
393 						jdir *= 2;
394 					} else {
395 						jdir /= 2;
396 					}
397 				}
398 			}
399 			loPal = 80;
400 			hiPal = 143;
401 		}
402 		break;
403 	case 125:
404 		palScroll(32, 63);
405 		palScroll(64, 95);
406 		loPal = 32;
407 		hiPal = 95;
408 		break;
409 	case 100:
410 		if (scrollx & 1) {
411 			palScroll(128, 132);
412 			palScroll(133, 137);
413 			palScroll(138, 143);
414 			loPal = 128;
415 			hiPal = 143;
416 		}
417 		break;
418 	case 102:
419 		if (scrollx & 1) {
420 			palScroll(112, 127);
421 			loPal = 112;
422 			hiPal = 127;
423 		}
424 		break;
425 	case 62:
426 		if (scrollx & 1) {
427 			palScroll(108, 119);
428 			loPal = 108;
429 			hiPal = 119;
430 		}
431 		break;
432 	case 25:
433 		palScroll(116, 123);
434 		loPal = 116;
435 		hiPal = 123;
436 		break;
437 	case 59:
438 		if (scrollx & 1) {
439 			palScroll(56, 63);
440 			loPal = 56;
441 			hiPal = 63;
442 		}
443 		break;
444 	case 39:
445 		palScroll(112, 143);
446 		loPal = 112;
447 		hiPal = 143;
448 		break;
449 	case 74:
450 		palScroll(28, 31);
451 		palScroll(88, 91);
452 		palScroll(92, 95);
453 		palScroll(128, 135);
454 		if (scrollx & 1) {
455 			palScroll(136, 143);
456 		}
457 		loPal = 28;
458 		hiPal = 143;
459 		break;
460 	case 40:
461 		if (scrollx & 1) {
462 			palScroll(96, 103);
463 		}
464 		if (scrollx & 3) {
465 			palScroll(104, 107);
466 		}
467 		loPal = 96;
468 		hiPal = 107;
469 		break;
470 	case 97:
471 		if (scrollx & 1) {
472 			palScroll(96, 107);
473 			palScroll(108, 122);
474 			loPal = 96;
475 			hiPal = 122;
476 		}
477 		break;
478 	case 55:
479 		palScroll(128, 143);
480 		loPal = 128;
481 		hiPal = 143;
482 		break;
483 	case 57:
484 		palScroll(128, 143);
485 		if (scrollx & 1) {
486 			palScroll(96, 103);
487 		}
488 		loPal = 96;
489 		hiPal = 143;
490 		break;
491 	case 76:
492 		palScroll(88, 95);
493 		loPal = 88;
494 		hiPal = 95;
495 		break;
496 	case 2:
497 		if (scrollx & 1) {
498 			palScroll(120, 127);
499 			loPal = 120;
500 			hiPal = 127;
501 		}
502 		break;
503 	case 3:
504 	case 5:
505 		if (scrollx & 1) {
506 			palScroll(128, 135);
507 			palScroll(136, 143);
508 			loPal = 128;
509 			hiPal = 143;
510 		}
511 		break;
512 	case 7:
513 		if (scrollx & 1) {
514 			palScroll(119, 127);
515 			loPal = 119;
516 			hiPal = 127;
517 		}
518 		break;
519 	case 42:
520 		if (scrollx & 1) {
521 			palScroll(118, 127);
522 			palScroll(136, 143);
523 			loPal = 118;
524 			hiPal = 143;
525 		}
526 		break;
527 	case 4:
528 		if (scrollx & 1) {
529 			palScroll(32,47);
530 		}
531 		palScroll(64, 70);
532 		palScroll(71, 79);
533 		loPal = 32;
534 		hiPal = 79;
535 		break;
536 	case 8:
537 		if (scrollx & 1) {
538 			palScroll(120, 127);
539 		}
540 		loPal = 120;
541 		hiPal = 127;
542 		break;
543 	case 12:
544 	case 64:
545 		if (scrollx & 1) {
546 			palScroll(112, 119);
547 			palScroll(120, 127);
548 			loPal = 112;
549 			hiPal = 127;
550 		}
551 		break;
552 	case 49:
553 		palScroll(101, 127);
554 		loPal = 101;
555 		hiPal = 127;
556 		break;
557 	}
558 	_pal.dirtyMin = MIN(_pal.dirtyMin, loPal);
559 	_pal.dirtyMax = MAX(_pal.dirtyMax, hiPal);
560 }
561 
palCustomFlash()562 void Display::palCustomFlash() {
563 	uint8 tempPal[256 * 3];
564 	memset(tempPal, 255, 17 * 3);
565 	memset(tempPal + 17 * 3, 0, 67 * 3);
566 	memset(tempPal + 67 * 3, 255, 172 * 3);
567 	// set flash palette
568 	palSet(tempPal, 0, 255, true);
569 	// restore original palette
570 	palSet(_pal.screen, 0, 255, true);
571 }
572 
palCustomLightsOff(uint16 roomNum)573 void Display::palCustomLightsOff(uint16 roomNum) {
574 	if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
575 		memset(_pal.screen, 0, 31 * 3);
576 		_pal.screen[31 * 3] = 15;
577 		_pal.screen[31 * 3 + 1] = 15;
578 		_pal.screen[31 * 3 + 2] = 0;
579 		palSet(_pal.screen, 0, 31, true);
580 	} else {
581 		const int end = 223;
582 		const int start = (roomNum == ROOM_FLODA_FRONTDESK) ? 32 : 16;
583 		const int n = end - start + 1;
584 		memset(_pal.screen + start * 3, 0, n * 3);
585 		palSet(_pal.screen, start, end, true);
586 	}
587 	_pal.scrollable = false;
588 }
589 
palCustomLightsOn(uint16 roomNum)590 void Display::palCustomLightsOn(uint16 roomNum) {
591 	if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
592 		memcpy(_pal.screen, _pal.room, 32 * 3);
593 		palSet(_pal.screen, 0, 31, true);
594 	} else {
595 		const int end = 223;
596 		const int start = (roomNum == ROOM_FLODA_FRONTDESK) ? 32 : 0;
597 		const int n = end - start + 1;
598 		memcpy(_pal.screen + start * 3, _pal.room + start * 3, n * 3);
599 		palSet(_pal.screen, start, end, true);
600 	}
601 	_pal.dirtyMin = 0;
602 	_pal.dirtyMax = 223;
603 	_pal.scrollable = true;
604 }
605 
getNumColorsForRoom(uint16 room) const606 int Display::getNumColorsForRoom(uint16 room) const {
607 	int n = 224;
608 	if (room >= 114 && room <= 125) {
609 		n = 256;
610 	}
611 	return n;
612 }
613 
isPalFadingDisabled(uint16 room) const614 bool Display::isPalFadingDisabled(uint16 room) const {
615 	// introduction rooms don't fade palette
616 	return (room >= 90 && room <= 94) || (room >= 115 && room <= 125);
617 }
618 
screenMode(int comPanel,bool inCutaway)619 void Display::screenMode(int comPanel, bool inCutaway) {
620 	debug(6, "Display::screenMode(%d, %d)", comPanel, inCutaway);
621 
622 	if (comPanel == 2 && inCutaway) {
623 		fullscreen((_bdHeight == GAME_SCREEN_HEIGHT));
624 	} else if (comPanel == 1) {
625 		fullscreen(false);
626 	}
627 }
628 
prepareUpdate()629 void Display::prepareUpdate() {
630 	int h = GAME_SCREEN_HEIGHT;
631 	if (!_fullscreen) {
632 		h = ROOM_ZONE_HEIGHT;
633 		memcpy(_screenBuf + SCREEN_W * ROOM_ZONE_HEIGHT, _panelBuf, PANEL_W * PANEL_H);
634 	}
635 	uint8 *dst = _screenBuf;
636 	const uint8 *src = _backdropBuf + _horizontalScroll;
637 
638 	while (h--) {
639 		memcpy(dst, src, SCREEN_W);
640 		dst += SCREEN_W;
641 		src += BACKDROP_W;
642 	}
643 }
644 
update(bool dynalum,int16 dynaX,int16 dynaY)645 void Display::update(bool dynalum, int16 dynaX, int16 dynaY) {
646 	drawTexts();
647 	if (_pal.scrollable && dynalum) {
648 		dynalumUpdate(dynaX, dynaY);
649 	}
650 	if (_pal.dirtyMin != 144 || _pal.dirtyMax != 144) {
651 		palSet(_pal.screen, _pal.dirtyMin, _pal.dirtyMax);
652 		_pal.dirtyMin = 144;
653 		_pal.dirtyMax = 144;
654 	}
655 	// uncomment this line to disable the dirty blocks rendering
656 //	_fullRefresh = 1;
657 	if (_fullRefresh) {
658 		_system->copyRectToScreen(_screenBuf, SCREEN_W, 0, 0, SCREEN_W, SCREEN_H);
659 		_system->updateScreen();
660 		--_fullRefresh;
661 		if (_fullRefresh) {
662 			memset(_dirtyBlocks, 0, _dirtyBlocksWidth * _dirtyBlocksHeight);
663 		}
664 		debug(9, "Display::update() - Full blit (%d)", _fullRefresh);
665 	} else {
666 		uint16 count = 0;
667 		uint8 *scrBuf = _screenBuf;
668 		uint8 *dbBuf = _dirtyBlocks;
669 		for (int j = 0; j < _dirtyBlocksHeight; ++j) {
670 			uint16 accW = 0;
671 			for (int i = 0; i < _dirtyBlocksWidth; ++i) {
672 				if (dbBuf[i] != 0) {
673 					--dbBuf[i];
674 					++accW;
675 				} else if (accW != 0) {
676 					int x = (i - accW) * D_BLOCK_W;
677 					_system->copyRectToScreen(scrBuf + x, SCREEN_W, x, j * D_BLOCK_H, accW * D_BLOCK_W, D_BLOCK_H);
678 					accW = 0;
679 					++count;
680 				}
681 			}
682 			if (accW != 0) {
683 				int x = (_dirtyBlocksWidth - accW) * D_BLOCK_W;
684 				_system->copyRectToScreen(scrBuf + x, SCREEN_W, x, j * D_BLOCK_H, accW * D_BLOCK_W, D_BLOCK_H);
685 				++count;
686 			}
687 			dbBuf += _dirtyBlocksWidth;
688 			scrBuf += SCREEN_W * D_BLOCK_H;
689 		}
690 		if (count != 0) {
691 			_system->updateScreen();
692 		}
693 		debug(9, "Display::update() - Dirtyblocks blit (%d)", count);
694 	}
695 }
696 
setupPanel()697 void Display::setupPanel() {
698 	uint16 panelWidth, panelHeight;
699 
700 	uint32 dataSize;
701 	char dataName[20];
702 	sprintf(dataName, "PANEL.%s", _imageExt);
703 	uint8 *data = _vm->resource()->loadFile(dataName, 0, &dataSize);
704 
705 	if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
706 		decodeIFF(data, dataSize, _panelBuf, PANEL_W, &panelWidth, &panelHeight, _pal.panel, 0, 32, 144);
707 	} else {
708 		WRITE_LE_UINT16(data + 14, PANEL_H - 10);
709 		decodePCX(data, dataSize, _panelBuf + PANEL_W * 10, PANEL_W, &panelWidth, &panelHeight, _pal.panel, 144, 256);
710 	}
711 	palSetPanel();
712 
713 	delete[] data;
714 }
715 
setupNewRoom(const char * name,uint16 room)716 void Display::setupNewRoom(const char *name, uint16 room) {
717 	dynalumInit(name, room);
718 
719 	uint32 dataSize;
720 	char dataName[20];
721 	sprintf(dataName, "%s.%s", name, _imageExt);
722 	uint8 *data = _vm->resource()->loadFile(dataName, 0, &dataSize);
723 
724 	if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
725 		decodeIFF(data, dataSize, _backdropBuf, BACKDROP_W, &_bdWidth, &_bdHeight, _pal.room, 0, 32);
726 		if (_bdHeight < BACKDROP_H) {
727 			memset(_backdropBuf + _bdHeight * BACKDROP_W, 0, (BACKDROP_H - _bdHeight) * BACKDROP_W);
728 		}
729 	} else {
730 		int n = getNumColorsForRoom(room);
731 		if (n != 256) {
732 			n = 144;
733 		}
734 		decodePCX(data, dataSize, _backdropBuf, BACKDROP_W, &_bdWidth, &_bdHeight, _pal.room, 0, n);
735 	}
736 
737 	delete[] data;
738 	palCustomColors(room);
739 	forceFullRefresh();
740 }
741 
drawBobSprite(const uint8 * data,uint16 x,uint16 y,uint16 w,uint16 h,uint16 pitch,bool xflip)742 void Display::drawBobSprite(const uint8 *data, uint16 x, uint16 y, uint16 w, uint16 h, uint16 pitch, bool xflip) {
743 	blit(_screenBuf, SCREEN_W, x, y, data, pitch, w, h, xflip, true);
744 	setDirtyBlock(xflip ? (x - w + 1) : x, y, w, h);
745 }
746 
drawBobPasteDown(const uint8 * data,uint16 x,uint16 y,uint16 w,uint16 h)747 void Display::drawBobPasteDown(const uint8 *data, uint16 x, uint16 y, uint16 w, uint16 h) {
748 	blit(_backdropBuf, BACKDROP_W, x, y, data, w, w, h, false, true);
749 }
750 
drawInventoryItem(const uint8 * data,uint16 x,uint16 y,uint16 w,uint16 h)751 void Display::drawInventoryItem(const uint8 *data, uint16 x, uint16 y, uint16 w, uint16 h) {
752 	if (data != NULL) {
753 		if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
754 			uint8 *dst = _panelBuf + y * PANEL_W + x;
755 			for (int j = 0; j < h; ++j) {
756 				for (int i = 0; i < w; ++i) {
757 					dst[i] = 144 + *data++;
758 				}
759 				dst += PANEL_W;
760 			}
761 		} else {
762 			blit(_panelBuf, PANEL_W, x, y, data, w, w, h, false, false);
763 		}
764 	} else {
765 		fill(_panelBuf, PANEL_W, x, y, w, h, getInkColor(INK_BG_PANEL));
766 	}
767 	setDirtyBlock(x, 150 + y, w, h);
768 }
769 
blit(uint8 * dstBuf,uint16 dstPitch,uint16 x,uint16 y,const uint8 * srcBuf,uint16 srcPitch,uint16 w,uint16 h,bool xflip,bool masked)770 void Display::blit(uint8 *dstBuf, uint16 dstPitch, uint16 x, uint16 y, const uint8 *srcBuf, uint16 srcPitch, uint16 w, uint16 h, bool xflip, bool masked) {
771 	assert(w <= dstPitch);
772 	dstBuf += dstPitch * y + x;
773 
774 	if (!masked) { // Unmasked always unflipped
775 		while (h--) {
776 			memcpy(dstBuf, srcBuf, w);
777 			srcBuf += srcPitch;
778 			dstBuf += dstPitch;
779 		}
780 	} else if (!xflip) { // Masked bitmap unflipped
781 		while (h--) {
782 			for (int i = 0; i < w; ++i) {
783 				uint8 b = *(srcBuf + i);
784 				if (b != 0) {
785 					*(dstBuf + i) = b;
786 				}
787 			}
788 			srcBuf += srcPitch;
789 			dstBuf += dstPitch;
790 		}
791 	} else { // Masked bitmap flipped
792 		while (h--) {
793 			for (int i = 0; i < w; ++i) {
794 				uint8 b = *(srcBuf + i);
795 				if (b != 0) {
796 					*(dstBuf - i) = b;
797 				}
798 			}
799 			srcBuf += srcPitch;
800 			dstBuf += dstPitch;
801 		}
802 	}
803 }
804 
fill(uint8 * dstBuf,uint16 dstPitch,uint16 x,uint16 y,uint16 w,uint16 h,uint8 color)805 void Display::fill(uint8 *dstBuf, uint16 dstPitch, uint16 x, uint16 y, uint16 w, uint16 h, uint8 color) {
806 	assert(w <= dstPitch);
807 	dstBuf += dstPitch * y + x;
808 	while (h--) {
809 		memset(dstBuf, color, w);
810 		dstBuf += dstPitch;
811 	}
812 }
813 
decodePCX(const uint8 * src,uint32 srcSize,uint8 * dst,uint16 dstPitch,uint16 * w,uint16 * h,uint8 * pal,uint16 palStart,uint16 palEnd)814 void Display::decodePCX(const uint8 *src, uint32 srcSize, uint8 *dst, uint16 dstPitch, uint16 *w, uint16 *h, uint8 *pal, uint16 palStart, uint16 palEnd) {
815 	Common::MemoryReadStream str(src, srcSize);
816 
817 	Image::PCXDecoder pcx;
818 	if (!pcx.loadStream(str))
819 		error("Error while reading PCX image");
820 
821 	const ::Graphics::Surface *pcxSurface = pcx.getSurface();
822 	if (pcxSurface->format.bytesPerPixel != 1)
823 		error("Invalid bytes per pixel in PCX surface (%d)", pcxSurface->format.bytesPerPixel);
824 	*w = pcxSurface->w;
825 	*h = pcxSurface->h;
826 
827 	assert(palStart <= palEnd && palEnd <= 256);
828 	memcpy(pal, pcx.getPalette() + palStart * 3, (palEnd - palStart) * 3);
829 	for (uint16 y = 0; y < pcxSurface->h; y++)
830 		memcpy(dst + y * dstPitch, pcxSurface->getBasePtr(0, y), pcxSurface->w);
831 }
832 
decodeIFF(const uint8 * src,uint32 srcSize,uint8 * dst,uint16 dstPitch,uint16 * w,uint16 * h,uint8 * pal,uint16 palStart,uint16 palEnd,uint8 colorBase)833 void Display::decodeIFF(const uint8 *src, uint32 srcSize, uint8 *dst, uint16 dstPitch, uint16 *w, uint16 *h, uint8 *pal, uint16 palStart, uint16 palEnd, uint8 colorBase) {
834 	Common::MemoryReadStream str(src, srcSize);
835 
836 	Image::IFFDecoder iff;
837 	if (!iff.loadStream(str))
838 		error("Error while reading IFF image");
839 
840 	const ::Graphics::Surface *iffSurface = iff.getSurface();
841 	*w	= iffSurface->w;
842 	*h	= iffSurface->h;
843 
844 	assert(palStart <= palEnd && palEnd <= 256);
845 	memcpy(pal, iff.getPalette() + palStart * 3, (palEnd - palStart) * 3);
846 	for (uint16 y = 0; y < iffSurface->h; y++)
847 		for(uint16 x = 0; x < iffSurface->w; x++)
848 			dst[(y * dstPitch) + x] = *(const byte *)iffSurface->getBasePtr(x, y) + colorBase;
849 }
850 
horizontalScrollUpdate(int16 xCamera)851 void Display::horizontalScrollUpdate(int16 xCamera) {
852 	debug(9, "Display::horizontalScrollUpdate(%d)", xCamera);
853 	if (_bdWidth <= 320) {
854 		horizontalScroll(0);
855 	} else {
856 		if (xCamera > 160 && xCamera < 480) {
857 			horizontalScroll(xCamera - 160);
858 		} else if (xCamera >= 480) {
859 			horizontalScroll(320);
860 		} else {
861 			horizontalScroll(0);
862 		}
863 	}
864 }
865 
horizontalScroll(int16 scroll)866 void Display::horizontalScroll(int16 scroll) {
867 	if (_horizontalScroll != scroll) {
868 		_fullRefresh = 2;
869 		_horizontalScroll = scroll;
870 	}
871 }
872 
setDirtyBlock(uint16 x,uint16 y,uint16 w,uint16 h)873 void Display::setDirtyBlock(uint16 x, uint16 y, uint16 w, uint16 h) {
874 	if (_fullRefresh < 2) {
875 		if (x >= SCREEN_W) {
876 			return;
877 		} else if (x + w > SCREEN_W) {
878 			w = SCREEN_W - x;
879 		}
880 		if (y >= SCREEN_H) {
881 			return;
882 		} else if (y + h > SCREEN_H) {
883 			h = SCREEN_H - y;
884 		}
885 		uint16 ex = (x + w - 1) / D_BLOCK_W;
886 		uint16 ey = (y + h - 1) / D_BLOCK_H;
887 		x /= D_BLOCK_W;
888 		y /= D_BLOCK_H;
889 		uint8 *p = _dirtyBlocks + _dirtyBlocksWidth * y + x;
890 		for (; y <= ey; ++y) {
891 			memset(p, 2, ex - x + 1);
892 			p += _dirtyBlocksWidth;
893 		}
894 	}
895 }
896 
setMouseCursor(uint8 * buf,uint16 w,uint16 h)897 void Display::setMouseCursor(uint8 *buf, uint16 w, uint16 h) {
898 	CursorMan.replaceCursor(buf, w, h, 1, 1, 0);
899 }
900 
showMouseCursor(bool show)901 void Display::showMouseCursor(bool show) {
902 	CursorMan.showMouse(show);
903 }
904 
initFont()905 void Display::initFont() {
906 	switch (_vm->resource()->getLanguage()) {
907 	case Common::HE_ISR:
908 		_font = _fontHebrew;
909 		break;
910 	case Common::RU_RUS:
911 		_font = _fontRussian;
912 		break;
913 	case Common::GR_GRE:
914 		_font = _fontGreek;
915 		break;
916 	default:
917 		_font = _fontRegular;
918 		break;
919 	}
920 	// calculate font justification sizes
921 	for (int i = 0; i < 256; ++i) {
922 		_charWidth[i] = 0;
923 		for (int y = 0; y < 8; ++y) {
924 			uint8 c = _font[i * 8 + y];
925 			for (int x = 0; x < 8; ++x) {
926 				if ((c & (0x80 >> x)) && (x > _charWidth[i])) {
927 					_charWidth[i] = x;
928 				}
929 			}
930 		}
931 		_charWidth[i] += 2;
932 	}
933 	_charWidth[0x20] = 4;
934 	--_charWidth[0x5E];
935 }
936 
setText(uint16 x,uint16 y,const char * text,bool outlined)937 void Display::setText(uint16 x, uint16 y, const char *text, bool outlined) {
938 	if (y < GAME_SCREEN_HEIGHT) {
939 		if (x == 0) x = 1;
940 		if (y == 0) y = 1;
941 		TextSlot *pts = &_texts[y];
942 		pts->x = x;
943 		pts->color = _curTextColor;
944 		pts->outlined = outlined;
945 		pts->text = text;
946 	}
947 }
948 
setTextCentered(uint16 y,const char * text,bool outlined)949 void Display::setTextCentered(uint16 y, const char *text, bool outlined) {
950 	int len = strlen(text);
951 	int16 x;
952 	while ((x = (GAME_SCREEN_WIDTH - textWidth(text, len)) / 2) <= 0) {
953 		++text;
954 		len -= 2;
955 	}
956 	assert(y < GAME_SCREEN_HEIGHT);
957 	TextSlot *pts = &_texts[y];
958 	pts->x = x;
959 	pts->color = _curTextColor;
960 	pts->outlined = outlined;
961 	pts->text = Common::String(text, len);
962 }
963 
drawTexts()964 void Display::drawTexts() {
965 	for (int y = GAME_SCREEN_HEIGHT - 1; y > 0; --y) {
966 		const TextSlot *pts = &_texts[y];
967 		if (!pts->text.empty()) {
968 			drawText(pts->x, y, pts->color, pts->text.c_str(), pts->outlined);
969 		}
970 	}
971 }
972 
clearTexts(uint16 y1,uint16 y2)973 void Display::clearTexts(uint16 y1, uint16 y2) {
974 	assert(y1 <= y2 && y2 < GAME_SCREEN_HEIGHT);
975 	while (y1 <= y2) {
976 		_texts[y1].text.clear();
977 		++y1;
978 	}
979 }
980 
setupInkColors()981 void Display::setupInkColors() {
982 	memset(_inkColors, 0, sizeof(_inkColors));
983 	if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
984 		_inkColors[INK_BG_PANEL] = 144 + 2;
985 		_inkColors[INK_JOURNAL] = 144 + 16;
986 		_inkColors[INK_PINNACLE_ROOM] = 144 + 14;
987 		_inkColors[INK_CMD_SELECT] = 144 + 17;
988 		_inkColors[INK_CMD_NORMAL] = 144 + 1;
989 		_inkColors[INK_TALK_NORMAL] = 144 + 1;
990 		_inkColors[INK_JOE] = 144 + 17;
991 		_inkColors[INK_OUTLINED_TEXT] = 0;
992 	} else {
993 		_inkColors[INK_BG_PANEL] = 226;
994 		_inkColors[INK_JOURNAL] = 248;
995 		_inkColors[INK_PINNACLE_ROOM] = 243;
996 		_inkColors[INK_CMD_SELECT] = 255;
997 		_inkColors[INK_CMD_NORMAL] = 225;
998 		_inkColors[INK_TALK_NORMAL] = 7;
999 		_inkColors[INK_JOE] = 14;
1000 		_inkColors[INK_OUTLINED_TEXT] = 16;
1001 	}
1002 }
1003 
setFocusRect(const Common::Rect & rect)1004 void Display::setFocusRect(const Common::Rect& rect) {
1005 	_system->setFocusRectangle(rect);
1006 }
1007 
textCenterX(const char * text) const1008 int Display::textCenterX(const char *text) const {
1009 	return (GAME_SCREEN_WIDTH - textWidth(text)) / 2;
1010 }
1011 
textWidth(const char * text) const1012 uint16 Display::textWidth(const char *text) const {
1013 	return textWidth(text, strlen(text));
1014 }
1015 
textWidth(const char * text,uint16 len) const1016 uint16 Display::textWidth(const char *text, uint16 len) const {
1017 	assert(len <= strlen(text));
1018 	uint16 width = 0;
1019 	for (uint16 i = 0; i < len; ++i) {
1020 		width += _charWidth[ (uint8)text[i] ];
1021 	}
1022 	return width;
1023 }
1024 
drawChar(uint16 x,uint16 y,uint8 color,const uint8 * chr)1025 void Display::drawChar(uint16 x, uint16 y, uint8 color, const uint8 *chr) {
1026 	uint8 *dstBuf = _screenBuf + SCREEN_W * y + x;
1027 	for (int j = 0; j < 8; ++j) {
1028 		uint8 *p = dstBuf;
1029 		uint8 c = *chr++;
1030 		if (c != 0) {
1031 			for (int i = 0; i < 8; ++i) {
1032 				if (c & 0x80) {
1033 					*p = color;
1034 				}
1035 				++p;
1036 				c <<= 1;
1037 			}
1038 		}
1039 		dstBuf += SCREEN_W;
1040 	}
1041 }
1042 
drawText(uint16 x,uint16 y,uint8 color,const char * text,bool outlined)1043 void Display::drawText(uint16 x, uint16 y, uint8 color, const char *text, bool outlined) {
1044 	static const int dx[] = { -1, 0, 1, 1, 1, 0, -1, -1 };
1045 	static const int dy[] = { -1, -1, -1, 0, 1, 1, 1, 0 };
1046 	const uint8 *str = (const uint8 *)text;
1047 	uint16 xs = x;
1048 	while (*str && x < SCREEN_W) {
1049 		const uint8 ch = *str++;
1050 		const uint8 *ftch = _font + ch * 8;
1051 		if (outlined) {
1052 			for (int i = 0; i < 8; ++i) {
1053 				drawChar(x + dx[i], y + dy[i], getInkColor(INK_OUTLINED_TEXT), ftch);
1054 			}
1055 		}
1056 		drawChar(x, y, color, ftch);
1057 		x += _charWidth[ch];
1058 	}
1059 	setDirtyBlock(xs - 1, y - 1, x - xs + 2, 8 + 2);
1060 }
1061 
drawBox(int16 x1,int16 y1,int16 x2,int16 y2,uint8 col)1062 void Display::drawBox(int16 x1, int16 y1, int16 x2, int16 y2, uint8 col) {
1063 	int i;
1064 	for (i = y1; i <= y2; ++i) {
1065 		_screenBuf[i * SCREEN_W + x1] = _screenBuf[i * SCREEN_W + x2] = col;
1066 	}
1067 	setDirtyBlock(x1, y1, 1, y2 - y1);
1068 	setDirtyBlock(x2, y1, 1, y2 - y1);
1069 	for (i = x1; i <= x2; ++i) {
1070 		_screenBuf[y1 * SCREEN_W + i] = _screenBuf[y2 * SCREEN_W + i] = col;
1071 	}
1072 	setDirtyBlock(x1, y1, x2 - x1, 1);
1073 	setDirtyBlock(x1, y2, x2 - x1, 1);
1074 }
1075 
shake(bool reset)1076 void Display::shake(bool reset) {
1077 	_system->setShakePos(0, reset ? 0 : 3);
1078 }
1079 
blankScreen()1080 void Display::blankScreen() {
1081 	static int current = 0;
1082 	typedef void (Display::*BlankerEffect)();
1083 	static const BlankerEffect effects[] = {
1084 		&Display::blankScreenEffect1,
1085 		&Display::blankScreenEffect2,
1086 		&Display::blankScreenEffect3
1087 	};
1088 	(this->*effects[current])();
1089 	current = (current + 1) % ARRAYSIZE(effects);
1090 	forceFullRefresh();
1091 }
1092 
blankScreenEffect1()1093 void Display::blankScreenEffect1() {
1094 	uint8 buf[32 * 32];
1095 	while (_vm->input()->idleTime() >= Input::DELAY_SCREEN_BLANKER) {
1096 		for (int i = 0; i < 2; ++i) {
1097 			int x = _rnd.getRandomNumber(SCREEN_W - 32 - 2) + 1;
1098 			int y = _rnd.getRandomNumber(SCREEN_H - 32 - 2) + 1;
1099 			const uint8 *p = _screenBuf + SCREEN_W * y + x;
1100 			for (int j = 0; j < 32; ++j) {
1101 				memcpy(buf + j * 32, p, 32);
1102 				p += SCREEN_W;
1103 			}
1104 			if (_rnd.getRandomNumber(1)) {
1105 				++x;
1106 			} else {
1107 				--x;
1108 			}
1109 			if (_rnd.getRandomNumber(1)) {
1110 				++y;
1111 			} else {
1112 				--y;
1113 			}
1114 			_system->copyRectToScreen(buf, 32, x, y, 32, 32);
1115 			_vm->input()->delay(10);
1116 		}
1117 	}
1118 }
1119 
blankScreenEffect2()1120 void Display::blankScreenEffect2() {
1121 	while (_vm->input()->idleTime() >= Input::DELAY_SCREEN_BLANKER) {
1122 		int x = _rnd.getRandomNumber(SCREEN_W - 2);
1123 		int y = _rnd.getRandomNumber(SCREEN_H - 2);
1124 		uint8 *p = _screenBuf + y * SCREEN_W + x;
1125 		uint8 c = 0;
1126 		switch (_rnd.getRandomNumber(3)) {
1127 		case 0:
1128 			c = *p;
1129 			break;
1130 		case 1:
1131 			c = *(p + 1);
1132 			break;
1133 		case 2:
1134 			c = *(p + SCREEN_W);
1135 			break;
1136 		case 3:
1137 			c = *(p + SCREEN_W + 1);
1138 			break;
1139 		}
1140 		memset(p, c, 2);
1141 		memset(p + SCREEN_W, c, 2);
1142 		_system->copyRectToScreen(p, SCREEN_W, x, y, 2, 2);
1143 		_vm->input()->delay(10);
1144 	}
1145 }
1146 
blankScreenEffect3()1147 void Display::blankScreenEffect3() {
1148 	uint32 i = 0;
1149 	while (_vm->input()->idleTime() >= Input::DELAY_SCREEN_BLANKER) {
1150 		if (i > 4000000) {
1151 			memset(_screenBuf, 0, SCREEN_W * SCREEN_H);
1152 			_system->copyRectToScreen(_screenBuf, SCREEN_W, 0, 0, SCREEN_W, SCREEN_H);
1153 		} else {
1154 			int x = _rnd.getRandomNumber(SCREEN_W - 2);
1155 			int y = _rnd.getRandomNumber(SCREEN_H - 2);
1156 			uint8 *p = _screenBuf + SCREEN_W * y + x;
1157 			int sum = *p + *(p + 1) + *(p + SCREEN_W) + *(p + SCREEN_W + 1);
1158 			uint8 c = (uint8)(sum / 4);
1159 			memset(p, c, 2);
1160 			memset(p + SCREEN_W, c, 2);
1161 			++i;
1162 			_system->copyRectToScreen(p, SCREEN_W, x, y, 2, 2);
1163 		}
1164 		_vm->input()->delay(10);
1165 	}
1166 }
1167 
1168 const uint8 Display::_fontRegular[] = {
1169 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1170 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1171 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1172 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1173 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1174 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1175 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1176 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1177 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1178 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1179 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1180 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1181 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1182 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1183 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1184 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1185 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x00,
1186 	0xD8, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00,
1187 	0x30, 0x7C, 0xC0, 0x78, 0x0C, 0xF8, 0x30, 0x00, 0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00,
1188 	0x38, 0x6C, 0x68, 0x36, 0xDC, 0xCC, 0x76, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
1189 	0x30, 0x60, 0xC0, 0xC0, 0xC0, 0x60, 0x30, 0x00, 0xC0, 0x60, 0x30, 0x30, 0x30, 0x60, 0xC0, 0x00,
1190 	0x00, 0x6C, 0x38, 0xFE, 0x38, 0x6C, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0x00,
1191 	0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00,
1192 	0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x00,
1193 	0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x30, 0x70, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x00,
1194 	0x78, 0xCC, 0x0C, 0x78, 0xC0, 0xC0, 0xFC, 0x00, 0x78, 0xCC, 0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00,
1195 	0x1C, 0x3C, 0x6C, 0xCC, 0xFC, 0x0C, 0x0C, 0x00, 0xFC, 0xC0, 0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00,
1196 	0x78, 0xCC, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00, 0xFC, 0xCC, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00,
1197 	0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x78, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00,
1198 	0x00, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0xC0,
1199 	0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00,
1200 	0xC0, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x78, 0xCC, 0x0C, 0x18, 0x30, 0x00, 0x30, 0x00,
1201 	0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x38, 0x7C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
1202 	0xF8, 0xCC, 0xCC, 0xF8, 0xCC, 0xCC, 0xF8, 0x00, 0x78, 0xCC, 0xC0, 0xC0, 0xC0, 0xCC, 0x78, 0x00,
1203 	0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xFC, 0x00,
1204 	0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xC0, 0xDC, 0xCC, 0xCC, 0x7C, 0x00,
1205 	0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00,
1206 	0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00, 0xC6, 0xCC, 0xD8, 0xF8, 0xD8, 0xCC, 0xC6, 0x00,
1207 	0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFC, 0x00, 0x82, 0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00,
1208 	0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
1209 	0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xDC, 0x78, 0x0C,
1210 	0xF8, 0xCC, 0xCC, 0xF8, 0xD8, 0xCC, 0xCC, 0x00, 0x78, 0xCC, 0xC0, 0x78, 0x0C, 0xCC, 0x78, 0x00,
1211 	0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00,
1212 	0xC6, 0xC6, 0x6C, 0x6C, 0x38, 0x38, 0x10, 0x00, 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00,
1213 	0xC6, 0x6C, 0x38, 0x10, 0x38, 0x6C, 0xC6, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x00,
1214 	0xFC, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xFC, 0x00, 0xF0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0x00,
1215 	0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x30, 0xF0, 0x00,
1216 	0xE8, 0x4D, 0x4A, 0x48, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
1217 	0xC0, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00,
1218 	0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xC0, 0xCC, 0x78, 0x00,
1219 	0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00,
1220 	0x38, 0x6C, 0x60, 0xF8, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x78,
1221 	0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00,
1222 	0x0C, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0x78, 0xC0, 0xC0, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0x00,
1223 	0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0xCC, 0xEE, 0xD6, 0xC6, 0xC6, 0x00,
1224 	0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
1225 	0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C,
1226 	0x00, 0x00, 0xF8, 0xCC, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x7C, 0xC0, 0x78, 0x0C, 0x78, 0x00,
1227 	0x30, 0x30, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00,
1228 	0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00, 0x00, 0x00, 0xC6, 0xD6, 0xD6, 0x6C, 0x6C, 0x00,
1229 	0x00, 0x00, 0xCC, 0x78, 0x30, 0x78, 0xCC, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0xE0,
1230 	0x00, 0x00, 0xFC, 0x18, 0x30, 0x60, 0xFC, 0x00, 0x38, 0x60, 0x60, 0xC0, 0x60, 0x60, 0x38, 0x00,
1231 	0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0xE0, 0x30, 0x30, 0x18, 0x30, 0x30, 0xE0, 0x00,
1232 	0x38, 0x44, 0xBA, 0xAA, 0xBA, 0x44, 0x38, 0x00, 0x00, 0x98, 0x30, 0x60, 0xC8, 0x98, 0x30, 0x00,
1233 	0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18, 0x00, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00,
1234 	0x0C, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x18, 0x66, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
1235 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
1236 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18,
1237 	0x18, 0x66, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x66, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00,
1238 	0x30, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x00, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
1239 	0x18, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
1240 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1241 	0x18, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1242 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00,
1243 	0x00, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x30, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00,
1244 	0x18, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00,
1245 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1246 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1247 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1248 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1249 	0x18, 0x30, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
1250 	0x18, 0x30, 0x00, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x18, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0x7C, 0x00,
1251 	0x71, 0x8E, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x00, 0x71, 0xCE, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0x00,
1252 	0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x3C, 0x60, 0x3C, 0x66, 0x3C, 0x06, 0x3C, 0x00,
1253 	0x18, 0x00, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00, 0x3F, 0x40, 0x4E, 0x58, 0x4E, 0x40, 0x3F, 0x00,
1254 	0x1C, 0xA4, 0xC4, 0xBC, 0x80, 0xFE, 0x00, 0x00, 0x00, 0x33, 0x66, 0xCC, 0x66, 0x33, 0x00, 0x00,
1255 	0x3E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00,
1256 	0x81, 0xB9, 0xA5, 0xB9, 0xA5, 0x81, 0x7E, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1257 	0x78, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0xFC, 0x00,
1258 	0xF0, 0x18, 0x30, 0x60, 0xF8, 0x00, 0x00, 0x00, 0xF0, 0x18, 0x30, 0x18, 0xF0, 0x00, 0x00, 0x00,
1259 	0x30, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xFE, 0xC0,
1260 	0x3E, 0x7A, 0x7A, 0x3A, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
1261 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x60, 0xE0, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00,
1262 	0x38, 0x44, 0x44, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xCC, 0x66, 0x33, 0x66, 0xCC, 0x00, 0x00,
1263 	0x40, 0xC6, 0x4C, 0x58, 0x32, 0x66, 0xCF, 0x02, 0x40, 0xC6, 0x4C, 0x58, 0x3E, 0x62, 0xC4, 0x0E,
1264 	0xC0, 0x23, 0x66, 0x2C, 0xD9, 0x33, 0x67, 0x01, 0x18, 0x00, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00,
1265 	0x60, 0x30, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x0C, 0x18, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
1266 	0x38, 0xC6, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x71, 0x8E, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
1267 	0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x38, 0x44, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
1268 	0x1F, 0x3C, 0x3C, 0x6F, 0x7C, 0xCC, 0xCF, 0x00, 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18,
1269 	0x60, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0x18, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00,
1270 	0x30, 0xCC, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0xCC, 0x00, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00,
1271 	0x60, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0x18, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00,
1272 	0x30, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0xCC, 0x00, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00,
1273 	0x78, 0x6C, 0x66, 0xF6, 0x66, 0x6C, 0x78, 0x00, 0x71, 0xCE, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0x00,
1274 	0x30, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00,
1275 	0x18, 0x66, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00,
1276 	0xC3, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00, 0x00,
1277 	0x3F, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0xFC, 0x00, 0x30, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00,
1278 	0x0C, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00,
1279 	0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x06, 0x08, 0xC3, 0x66, 0x3C, 0x18, 0x18, 0x00,
1280 	0x60, 0x60, 0x7E, 0x63, 0x7E, 0x60, 0x60, 0x00, 0x3C, 0x66, 0x66, 0x6C, 0x66, 0x66, 0x6C, 0x60,
1281 	0x30, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
1282 	0x18, 0x66, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x71, 0x8E, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
1283 	0x66, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
1284 	0x00, 0x00, 0x7E, 0x1B, 0x7F, 0xD8, 0x77, 0x00, 0x00, 0x00, 0x3C, 0x60, 0x60, 0x60, 0x3C, 0x18,
1285 	0x30, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00,
1286 	0x18, 0x66, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x66, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00,
1287 	0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
1288 	0x18, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
1289 	0x60, 0xFC, 0x18, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x00,
1290 	0x30, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00,
1291 	0x18, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00,
1292 	0x00, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x00,
1293 	0x00, 0x02, 0x7C, 0xCE, 0xD6, 0xE6, 0x7C, 0x80, 0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00,
1294 	0x0C, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00,
1295 	0x00, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30,
1296 	0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x00, 0x66, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30
1297 };
1298 
1299 const uint8 Display::_fontGreek[] = {
1300 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1301 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1302 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1303 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1304 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1305 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1306 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1307 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1308 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1309 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1310 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1311 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1312 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1313 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1314 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1315 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1316 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x00,
1317 	0xD8, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00,
1318 	0x30, 0x7C, 0xC0, 0x78, 0x0C, 0xF8, 0x30, 0x00, 0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00,
1319 	0x38, 0x6C, 0x68, 0x36, 0xDC, 0xCC, 0x76, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
1320 	0x30, 0x60, 0xC0, 0xC0, 0xC0, 0x60, 0x30, 0x00, 0xC0, 0x60, 0x30, 0x30, 0x30, 0x60, 0xC0, 0x00,
1321 	0x00, 0x6C, 0x38, 0xFE, 0x38, 0x6C, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0x00,
1322 	0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00,
1323 	0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x00,
1324 	0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x30, 0x70, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x00,
1325 	0x78, 0xCC, 0x0C, 0x78, 0xC0, 0xC0, 0xFC, 0x00, 0x78, 0xCC, 0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00,
1326 	0x1C, 0x3C, 0x6C, 0xCC, 0xFC, 0x0C, 0x0C, 0x00, 0xFC, 0xC0, 0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00,
1327 	0x78, 0xCC, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00, 0xFC, 0xCC, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00,
1328 	0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x78, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00,
1329 	0x00, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0xC0,
1330 	0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00,
1331 	0xC0, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x78, 0xCC, 0x0C, 0x18, 0x30, 0x00, 0x30, 0x00,
1332 	0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x38, 0x7C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
1333 	0xF8, 0xCC, 0xCC, 0xF8, 0xCC, 0xCC, 0xF8, 0x00, 0x78, 0xCC, 0xC0, 0xC0, 0xC0, 0xCC, 0x78, 0x00,
1334 	0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xFC, 0x00,
1335 	0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xC0, 0xDC, 0xCC, 0xCC, 0x7C, 0x00,
1336 	0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00,
1337 	0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00, 0xC6, 0xCC, 0xD8, 0xF8, 0xD8, 0xCC, 0xC6, 0x00,
1338 	0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFC, 0x00, 0x82, 0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00,
1339 	0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
1340 	0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xDC, 0x78, 0x0C,
1341 	0xF8, 0xCC, 0xCC, 0xF8, 0xD8, 0xCC, 0xCC, 0x00, 0x78, 0xCC, 0xC0, 0x78, 0x0C, 0xCC, 0x78, 0x00,
1342 	0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00,
1343 	0xC6, 0xC6, 0x6C, 0x6C, 0x38, 0x38, 0x10, 0x00, 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00,
1344 	0xC6, 0x6C, 0x38, 0x10, 0x38, 0x6C, 0xC6, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x00,
1345 	0xFC, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xFC, 0x00, 0xF0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0x00,
1346 	0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x30, 0xF0, 0x00,
1347 	0xE8, 0x4D, 0x4A, 0x48, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
1348 	0xC0, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00,
1349 	0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xC0, 0xCC, 0x78, 0x00,
1350 	0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00,
1351 	0x38, 0x6C, 0x60, 0xF8, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x78,
1352 	0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00,
1353 	0x0C, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0x78, 0xC0, 0xC0, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0x00,
1354 	0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0xCC, 0xEE, 0xD6, 0xC6, 0xC6, 0x00,
1355 	0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
1356 	0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C,
1357 	0x00, 0x00, 0xF8, 0xCC, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x7C, 0xC0, 0x78, 0x0C, 0x78, 0x00,
1358 	0x30, 0x30, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00,
1359 	0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00, 0x00, 0x00, 0xC6, 0xD6, 0xD6, 0x6C, 0x6C, 0x00,
1360 	0x00, 0x00, 0xCC, 0x78, 0x30, 0x78, 0xCC, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0xE0,
1361 	0x00, 0x00, 0xFC, 0x18, 0x30, 0x60, 0xFC, 0x00, 0x38, 0x60, 0x60, 0xC0, 0x60, 0x60, 0x38, 0x00,
1362 	0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0xE0, 0x30, 0x30, 0x18, 0x30, 0x30, 0xE0, 0x00,
1363 	0x38, 0x44, 0xBA, 0xAA, 0xBA, 0x44, 0x38, 0x00, 0x00, 0x98, 0x30, 0x60, 0xC8, 0x98, 0x30, 0x00,
1364 	0x38, 0x64, 0xF0, 0x60, 0xF0, 0x64, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1365 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1366 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1367 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1368 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1369 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1370 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1371 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1372 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
1373 	0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1374 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1375 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1376 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1377 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1378 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1379 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1380 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1381 	0x9C, 0xBE, 0x63, 0x63, 0x7F, 0x63, 0x63, 0x00, 0x38, 0x6C, 0x60, 0xF0, 0x60, 0x60, 0xFC, 0x00,
1382 	0x42, 0x3C, 0x66, 0x3C, 0x42, 0x00, 0x00, 0x00, 0xC3, 0x66, 0x3C, 0x18, 0x3C, 0x18, 0x18, 0x00,
1383 	0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x3C, 0x60, 0x3C, 0x66, 0x3C, 0x06, 0x3C, 0x00,
1384 	0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x3F, 0x40, 0x4E, 0x58, 0x4E, 0x40, 0x3F, 0x00,
1385 	0x1C, 0xA4, 0xC4, 0xBC, 0x80, 0xFE, 0x00, 0x00, 0x00, 0x33, 0x66, 0xCC, 0x66, 0x33, 0x00, 0x00,
1386 	0x3E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,
1387 	0x81, 0xB9, 0xA5, 0xB9, 0xA5, 0x81, 0x7E, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1388 	0x78, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0xFC, 0x00,
1389 	0xF0, 0x18, 0x30, 0x60, 0xF8, 0x00, 0x00, 0x00, 0xF0, 0x18, 0x30, 0x18, 0xF0, 0x00, 0x00, 0x00,
1390 	0x30, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xFE, 0xC0,
1391 	0x3E, 0x7A, 0x7A, 0x3A, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
1392 	0xBF, 0xB0, 0x30, 0x3C, 0x30, 0x30, 0x3F, 0x00, 0xB3, 0xB3, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00,
1393 	0xBC, 0x98, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0xCC, 0x66, 0x33, 0x66, 0xCC, 0x00, 0x00,
1394 	0x9E, 0xB3, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x00, 0x40, 0xC6, 0x4C, 0x58, 0x3E, 0x62, 0xC4, 0x0E,
1395 	0xB3, 0xB3, 0x33, 0x1E, 0x0C, 0x0C, 0x0C, 0x00, 0x9E, 0xB3, 0x33, 0x33, 0x1E, 0x00, 0x3F, 0x00,
1396 	0xB4, 0x00, 0x30, 0x30, 0x30, 0x30, 0x18, 0x00, 0x38, 0x7C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
1397 	0xF8, 0xCC, 0xCC, 0xF8, 0xCC, 0xCC, 0xF8, 0x00, 0xFC, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00,
1398 	0x38, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xFE, 0x00, 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xFC, 0x00,
1399 	0xFC, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xFC, 0x00, 0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00,
1400 	0x78, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0x78, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00,
1401 	0xC6, 0xCC, 0xD8, 0xF8, 0xD8, 0xCC, 0xC6, 0x00, 0x38, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00,
1402 	0x82, 0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00, 0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00,
1403 	0xFC, 0xFC, 0x00, 0x78, 0x00, 0xFC, 0xFC, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
1404 	0xFC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0xC0, 0x00,
1405 	0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0xFC, 0x60, 0x30, 0x18, 0x30, 0x60, 0xFC, 0x00,
1406 	0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x00,
1407 	0x10, 0x7C, 0xD6, 0xD6, 0xD6, 0x7C, 0x10, 0x00, 0xC6, 0x6C, 0x38, 0x10, 0x38, 0x6C, 0xC6, 0x00,
1408 	0xC6, 0xD6, 0xD6, 0xD6, 0x7C, 0x10, 0x10, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0xFC, 0x00,
1409 	0xBD, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0xB4, 0xCC, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x00,
1410 	0x30, 0x00, 0x7A, 0xCC, 0xCC, 0xCC, 0x7A, 0x00, 0x30, 0x00, 0x78, 0xCC, 0x60, 0xCC, 0x78, 0x00,
1411 	0x30, 0x00, 0xB8, 0xEC, 0xCC, 0xCC, 0xCC, 0x0C, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x60, 0x00,
1412 	0xB4, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x7A, 0xCC, 0xCC, 0xCC, 0x7A, 0x00,
1413 	0x70, 0xD8, 0xD8, 0xF0, 0xD8, 0xD8, 0xF0, 0xC0, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x30,
1414 	0xF8, 0x60, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x78, 0xCC, 0x60, 0xCC, 0x78, 0x00,
1415 	0xF8, 0x18, 0x30, 0x60, 0x60, 0x30, 0x18, 0x30, 0x00, 0x00, 0xB8, 0xEC, 0xCC, 0xCC, 0xCC, 0x0C,
1416 	0x70, 0xD8, 0xD8, 0xF8, 0xD8, 0xD8, 0x70, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x60, 0x00,
1417 	0x00, 0x00, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0x00, 0xF0, 0x18, 0x3C, 0x6C, 0xCC, 0xCC, 0xCC, 0x00,
1418 	0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xFA, 0xC0, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00,
1419 	0xF8, 0x18, 0x30, 0x18, 0x30, 0x18, 0x08, 0x10, 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
1420 	0x00, 0x00, 0xFC, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xF8, 0xC0,
1421 	0x00, 0x00, 0x7C, 0xE0, 0x78, 0x1C, 0xF8, 0x00, 0x00, 0x00, 0x7E, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
1422 	0x00, 0x00, 0xFC, 0x30, 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
1423 	0x00, 0x00, 0x4C, 0xD6, 0xD6, 0xD6, 0x7C, 0x10, 0x00, 0x00, 0xCC, 0xCC, 0x30, 0x30, 0xCC, 0xCC,
1424 	0x00, 0x00, 0x54, 0xD6, 0xD6, 0xD6, 0x7C, 0x10, 0x00, 0x00, 0x6C, 0xC6, 0xD6, 0xFE, 0x6C, 0x00,
1425 	0x90, 0x00, 0x60, 0x60, 0x60, 0x60, 0x30, 0x00, 0x48, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
1426 	0x30, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
1427 	0x18, 0x00, 0x6C, 0xC6, 0xD6, 0xFE, 0x6C, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00
1428 };
1429 
1430 const uint8 Display::_fontHebrew[] = {
1431 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1432 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1433 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1434 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1435 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1436 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1437 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1438 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1439 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1440 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1441 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1442 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1443 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1444 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1445 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1446 	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
1447 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x00,
1448 	0xD8, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00,
1449 	0x30, 0x7C, 0xC0, 0x78, 0x0C, 0xF8, 0x30, 0x00, 0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00,
1450 	0x38, 0x6C, 0x68, 0x36, 0xDC, 0xCC, 0x76, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
1451 	0x30, 0x60, 0xC0, 0xC0, 0xC0, 0x60, 0x30, 0x00, 0xC0, 0x60, 0x30, 0x30, 0x30, 0x60, 0xC0, 0x00,
1452 	0x00, 0x6C, 0x38, 0xFE, 0x38, 0x6C, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0x00,
1453 	0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00,
1454 	0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x00,
1455 	0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x30, 0x70, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x00,
1456 	0x78, 0xCC, 0x0C, 0x78, 0xC0, 0xC0, 0xFC, 0x00, 0x78, 0xCC, 0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00,
1457 	0x1C, 0x3C, 0x6C, 0xCC, 0xFC, 0x0C, 0x0C, 0x00, 0xFC, 0xC0, 0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00,
1458 	0x78, 0xCC, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00, 0xFC, 0xCC, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00,
1459 	0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x78, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00,
1460 	0x00, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0xC0,
1461 	0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00,
1462 	0xC0, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x78, 0xCC, 0x0C, 0x18, 0x30, 0x00, 0x30, 0x00,
1463 	0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x38, 0x7C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
1464 	0xF8, 0xCC, 0xCC, 0xF8, 0xCC, 0xCC, 0xF8, 0x00, 0x78, 0xCC, 0xC0, 0xC0, 0xC0, 0xCC, 0x78, 0x00,
1465 	0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xFC, 0x00,
1466 	0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xC0, 0xDC, 0xCC, 0xCC, 0x7C, 0x00,
1467 	0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00,
1468 	0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00, 0xC6, 0xCC, 0xD8, 0xF8, 0xD8, 0xCC, 0xC6, 0x00,
1469 	0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFC, 0x00, 0x82, 0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00,
1470 	0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
1471 	0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xDC, 0x78, 0x0C,
1472 	0xF8, 0xCC, 0xCC, 0xF8, 0xD8, 0xCC, 0xCC, 0x00, 0x78, 0xCC, 0xC0, 0x78, 0x0C, 0xCC, 0x78, 0x00,
1473 	0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00,
1474 	0xC6, 0xC6, 0x6C, 0x6C, 0x38, 0x38, 0x10, 0x00, 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00,
1475 	0xC6, 0x6C, 0x38, 0x10, 0x38, 0x6C, 0xC6, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x00,
1476 	0xFC, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xFC, 0x00, 0xF0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0x00,
1477 	0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x30, 0xF0, 0x00,
1478 	0xE8, 0x4D, 0x4A, 0x48, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
1479 	0xC0, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00,
1480 	0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xC0, 0xCC, 0x78, 0x00,
1481 	0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00,
1482 	0x38, 0x6C, 0x60, 0xF8, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x78,
1483 	0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00,
1484 	0x0C, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0x78, 0xC0, 0xC0, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0x00,
1485 	0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0xCC, 0xEE, 0xD6, 0xC6, 0xC6, 0x00,
1486 	0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
1487 	0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C,
1488 	0x00, 0x00, 0xF8, 0xCC, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x7C, 0xC0, 0x78, 0x0C, 0x78, 0x00,
1489 	0x30, 0x30, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00,
1490 	0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00, 0x00, 0x00, 0xC6, 0xD6, 0xD6, 0x6C, 0x6C, 0x00,
1491 	0x00, 0x00, 0xCC, 0x78, 0x30, 0x78, 0xCC, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0xE0,
1492 	0x00, 0x00, 0xFC, 0x18, 0x30, 0x60, 0xFC, 0x00, 0x38, 0x60, 0x60, 0xC0, 0x60, 0x60, 0x38, 0x00,
1493 	0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0xE0, 0x30, 0x30, 0x18, 0x30, 0x30, 0xE0, 0x00,
1494 	0x38, 0x44, 0xBA, 0xAA, 0xBA, 0x44, 0x38, 0x00, 0x00, 0x98, 0x30, 0x60, 0xC8, 0x98, 0x30, 0x00,
1495 	0xCC, 0x66, 0x76, 0xBC, 0x98, 0x8C, 0xE6, 0x00, 0xFC, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xFE, 0x00,
1496 	0x78, 0x18, 0x18, 0x18, 0x38, 0x78, 0xD8, 0x00, 0xFE, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
1497 	0xFE, 0x06, 0x06, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
1498 	0x7C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00,
1499 	0xDC, 0x66, 0xE6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0xF0, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
1500 	0xFE, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0xF8, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xF8, 0x00,
1501 	0xC0, 0xFE, 0x06, 0x06, 0x0C, 0x18, 0x18, 0x00, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7E, 0x00,
1502 	0xFC, 0x76, 0x66, 0x66, 0x66, 0x66, 0x6E, 0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1503 	0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00,
1504 	0xEE, 0x66, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00, 0xFE, 0xC6, 0xC6, 0xF6, 0x06, 0x06, 0x06, 0x06,
1505 	0xFE, 0xC6, 0xC6, 0xFE, 0x06, 0x06, 0xFE, 0x00, 0xFE, 0x66, 0x6C, 0x78, 0x60, 0x60, 0x60, 0x60,
1506 	0xEE, 0x66, 0x3C, 0x18, 0x0C, 0x06, 0xFE, 0x00, 0xFE, 0x06, 0x0E, 0xD8, 0xF0, 0xF0, 0xC0, 0xC0,
1507 	0xFC, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x00, 0xEE, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x7C, 0x00,
1508 	0xFF, 0x67, 0x67, 0x67, 0x67, 0x67, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1509 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1510 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1511 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
1512 	0x00, 0x0C, 0x3E, 0x6C, 0x3E, 0x0C, 0x00, 0x00, 0x38, 0x6C, 0x60, 0xF0, 0x60, 0x60, 0xFC, 0x00,
1513 	0x42, 0x3C, 0x66, 0x3C, 0x42, 0x00, 0x00, 0x00, 0xC3, 0x66, 0x3C, 0x18, 0x3C, 0x18, 0x18, 0x00,
1514 	0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x3C, 0x60, 0x3C, 0x66, 0x3C, 0x06, 0x3C, 0x00,
1515 	0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x40, 0x4E, 0x58, 0x4E, 0x40, 0x3F, 0x00,
1516 	0x1C, 0xA4, 0xC4, 0xBC, 0x80, 0xFE, 0x00, 0x00, 0x00, 0x33, 0x66, 0xCC, 0x66, 0x33, 0x00, 0x00,
1517 	0x3E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,
1518 	0x81, 0xB9, 0xA5, 0xB9, 0xA5, 0x81, 0x7E, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1519 	0x78, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0xFC, 0x00,
1520 	0xF0, 0x18, 0x30, 0x60, 0xF8, 0x00, 0x00, 0x00, 0xF0, 0x18, 0x30, 0x18, 0xF0, 0x00, 0x00, 0x00,
1521 	0x30, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xFE, 0xC0,
1522 	0x3E, 0x7A, 0x7A, 0x3A, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
1523 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x60, 0xE0, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00,
1524 	0x38, 0x44, 0x44, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xCC, 0x66, 0x33, 0x66, 0xCC, 0x00, 0x00,
1525 	0x40, 0xC6, 0x4C, 0x58, 0x32, 0x66, 0xCF, 0x02, 0x40, 0xC6, 0x4C, 0x58, 0x3E, 0x62, 0xC4, 0x0E,
1526 	0xC0, 0x23, 0x66, 0x2C, 0xD9, 0x33, 0x67, 0x01, 0x18, 0x00, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00,
1527 	0x60, 0x30, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x0C, 0x18, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
1528 	0x38, 0xC6, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x71, 0x8E, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
1529 	0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x38, 0x44, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
1530 	0x1F, 0x3C, 0x3C, 0x6F, 0x7C, 0xCC, 0xCF, 0x00, 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18,
1531 	0x60, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0x18, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00,
1532 	0x30, 0xCC, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0xCC, 0x00, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00,
1533 	0x60, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0x18, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00,
1534 	0x30, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0xCC, 0x00, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00,
1535 	0x78, 0x6C, 0x66, 0xF6, 0x66, 0x6C, 0x78, 0x00, 0x71, 0xCE, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0x00,
1536 	0x30, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00,
1537 	0x18, 0x66, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00,
1538 	0xC3, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00, 0x00,
1539 	0x3F, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0xFC, 0x00, 0x30, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00,
1540 	0x0C, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00,
1541 	0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x06, 0x08, 0xC3, 0x66, 0x3C, 0x18, 0x18, 0x00,
1542 	0x60, 0x60, 0x7E, 0x63, 0x7E, 0x60, 0x60, 0x00, 0x3C, 0x66, 0x66, 0x6C, 0x66, 0x66, 0x6C, 0x60,
1543 	0x30, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
1544 	0x18, 0x66, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x71, 0x8E, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
1545 	0x66, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
1546 	0x00, 0x00, 0x7E, 0x1B, 0x7F, 0xD8, 0x77, 0x00, 0x00, 0x00, 0x3C, 0x60, 0x60, 0x60, 0x3C, 0x18,
1547 	0x30, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00,
1548 	0x18, 0x66, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x66, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00,
1549 	0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
1550 	0x18, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
1551 	0x60, 0xFC, 0x18, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x00,
1552 	0x30, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00,
1553 	0x18, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00,
1554 	0x00, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x00,
1555 	0x00, 0x02, 0x7C, 0xCE, 0xD6, 0xE6, 0x7C, 0x80, 0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00,
1556 	0x0C, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00,
1557 	0x00, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30,
1558 	0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x00, 0x66, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30
1559 };
1560 
1561 const uint8 Display::_fontRussian[] = {
1562 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e,
1563 	0x7e, 0xff, 0xdb, 0xff, 0xc3, 0xe7, 0xff, 0x7e, 0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00,
1564 	0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x38, 0x7c, 0x38, 0xfe, 0xfe, 0xd6, 0x10, 0x38,
1565 	0x10, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x10, 0x38, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00,
1566 	0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00,
1567 	0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, 0x0f, 0x07, 0x0f, 0x7d, 0xcc, 0xcc, 0xcc, 0x78,
1568 	0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x70, 0xf0, 0xe0,
1569 	0x7f, 0x63, 0x7f, 0x63, 0x63, 0x67, 0xe6, 0xc0, 0x18, 0xdb, 0x3c, 0xe7, 0xe7, 0x3c, 0xdb, 0x18,
1570 	0x80, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0x80, 0x00, 0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00,
1571 	0x18, 0x3c, 0x7e, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00,
1572 	0x7f, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x00, 0x3e, 0x63, 0x38, 0x6c, 0x6c, 0x38, 0xcc, 0x78,
1573 	0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x7e, 0x3c, 0x18, 0xff,
1574 	0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00,
1575 	0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00,
1576 	0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00,
1577 	0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18, 0x00, 0x00,
1578 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x38, 0x00,
1579 	0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00,
1580 	0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00, 0x00, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xc6, 0x00,
1581 	0x70, 0xd8, 0xd8, 0x70, 0xdb, 0xce, 0x7b, 0x00, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
1582 	0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00,
1583 	0x18, 0xdb, 0x3c, 0xff, 0x3c, 0xdb, 0x18, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00,
1584 	0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1c, 0x38, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00,
1585 	0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x00,
1586 	0x7c, 0xc6, 0xce, 0xd6, 0xe6, 0xc6, 0x7c, 0x00, 0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
1587 	0x7c, 0xc6, 0x06, 0x1c, 0x70, 0xc0, 0xfe, 0x00, 0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x00,
1588 	0x0e, 0x1e, 0x36, 0x66, 0xff, 0x06, 0x06, 0x00, 0xfe, 0xc0, 0xfc, 0x06, 0x06, 0xc6, 0x7c, 0x00,
1589 	0x3c, 0x60, 0xc0, 0xfc, 0xc6, 0xc6, 0x7c, 0x00, 0xfe, 0xc6, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00,
1590 	0x7c, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0x7c, 0x00, 0x7c, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00,
1591 	0x00, 0x00, 0x38, 0x38, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x38, 0x38, 0x70,
1592 	0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x7e, 0x00, 0x00, 0x00,
1593 	0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0x06, 0x1c, 0x30, 0x00, 0x30, 0x00,
1594 	0x3e, 0x63, 0xcb, 0xd7, 0xce, 0x60, 0x3e, 0x00, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00,
1595 	0xfc, 0xc6, 0xc6, 0xfc, 0xc6, 0xc6, 0xfc, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00,
1596 	0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xfc, 0x00, 0xfe, 0xc0, 0xc0, 0xf8, 0xc0, 0xc0, 0xfe, 0x00,
1597 	0xfe, 0xc0, 0xc0, 0xf8, 0xc0, 0xc0, 0xc0, 0x00, 0x7c, 0xc6, 0xc0, 0xde, 0xc6, 0xc6, 0x7c, 0x00,
1598 	0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
1599 	0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x3c, 0x00, 0xc6, 0xcc, 0xd8, 0xf0, 0xd8, 0xcc, 0xc6, 0x00,
1600 	0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0xc3, 0xe7, 0xff, 0xdb, 0xdb, 0xc3, 0xc3, 0x00,
1601 	0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00,
1602 	0xfc, 0xc6, 0xc6, 0xfc, 0xc0, 0xc0, 0xc0, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xda, 0xcc, 0x76, 0x00,
1603 	0xfc, 0xc6, 0xc6, 0xfc, 0xd8, 0xcc, 0xc6, 0x00, 0x7c, 0xc6, 0xc0, 0x7c, 0x06, 0xc6, 0x7c, 0x00,
1604 	0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00,
1605 	0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x00, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0xe7, 0xc3, 0x00,
1606 	0xc6, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0xc6, 0x00, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x00,
1607 	0xfe, 0x06, 0x0c, 0x38, 0x60, 0xc0, 0xfe, 0x00, 0x3e, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3e, 0x00,
1608 	0x00, 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x7c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x7c, 0x00,
1609 	0x18, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
1610 	0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x06, 0x7e, 0xc6, 0x7e, 0x00,
1611 	0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x3e, 0x60, 0x60, 0x60, 0x3e, 0x00,
1612 	0x06, 0x06, 0x7e, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7e, 0x00,
1613 	0x1c, 0x36, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x7e, 0x06, 0x7c,
1614 	0xc0, 0xc0, 0xdc, 0xe6, 0xc6, 0xc6, 0xc6, 0x00, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
1615 	0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x66, 0x3c, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0x00,
1616 	0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x66, 0xdb, 0xdb, 0xdb, 0xdb, 0x00,
1617 	0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00,
1618 	0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xfc, 0xc0, 0xc0, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x7e, 0x06, 0x06,
1619 	0x00, 0x00, 0xdc, 0xe6, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x7e, 0xc0, 0x7c, 0x06, 0xfc, 0x00,
1620 	0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00,
1621 	0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xdb, 0xdb, 0x66, 0x00,
1622 	0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xce, 0x76, 0x06, 0x7c,
1623 	0x00, 0x00, 0xfe, 0x0c, 0x38, 0x60, 0xfe, 0x00, 0x0e, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0e, 0x00,
1624 	0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x1e, 0x18, 0x18, 0x70, 0x00,
1625 	0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xee, 0xc6, 0xfe, 0xfe, 0x00,
1626 	0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0xfc, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xfc, 0x00,
1627 	0xfc, 0xc6, 0xc6, 0xfc, 0xc6, 0xc6, 0xfc, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00,
1628 	0x1e, 0x26, 0x66, 0x66, 0x66, 0x66, 0xff, 0x00, 0xfe, 0xc0, 0xc0, 0xf8, 0xc0, 0xc0, 0xfe, 0x00,
1629 	0xd6, 0xd6, 0xd6, 0x7c, 0xd6, 0xd6, 0xd6, 0x00, 0x7c, 0xc6, 0x06, 0x1c, 0x06, 0xc6, 0x7c, 0x00,
1630 	0xc6, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0xc6, 0x00, 0xd6, 0xd6, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0x00,
1631 	0xc6, 0xcc, 0xd8, 0xf0, 0xd8, 0xcc, 0xc6, 0x00, 0x3c, 0x66, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00,
1632 	0xc3, 0xe7, 0xff, 0xdb, 0xdb, 0xc3, 0xc3, 0x00, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00,
1633 	0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00,
1634 	0xfc, 0xc6, 0xc6, 0xc6, 0xfc, 0xc0, 0xc0, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00,
1635 	0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x7c, 0x00,
1636 	0x7c, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x00, 0xc6, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0xc6, 0x00,
1637 	0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xff, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x00,
1638 	0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xfe, 0x00, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xff, 0x01,
1639 	0xe0, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x7c, 0x00, 0xc6, 0xc6, 0xc6, 0xf6, 0xde, 0xde, 0xf6, 0x00,
1640 	0xc0, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xfc, 0x00, 0x7c, 0xc6, 0x06, 0x3e, 0x06, 0xc6, 0x7c, 0x00,
1641 	0xcc, 0xd6, 0xd6, 0xf6, 0xd6, 0xd6, 0xcc, 0x00, 0x7e, 0xc6, 0xc6, 0x7e, 0x36, 0x66, 0xc6, 0x00,
1642 	0x00, 0x00, 0x7c, 0x06, 0x7e, 0xc6, 0x7e, 0x00, 0x3e, 0x60, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00,
1643 	0x00, 0x00, 0x7c, 0x66, 0x7c, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x00,
1644 	0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0xff, 0x81, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7e, 0x00,
1645 	0x00, 0x00, 0xd6, 0xd6, 0x7c, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x3c, 0x46, 0x1c, 0x46, 0x3c, 0x00,
1646 	0x00, 0x00, 0x66, 0x66, 0x6e, 0x76, 0x66, 0x00, 0x00, 0x18, 0x66, 0x66, 0x6e, 0x76, 0x66, 0x00,
1647 	0x00, 0x00, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0xc6, 0x00,
1648 	0x00, 0x00, 0xe7, 0xdb, 0xdb, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x00,
1649 	0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x00,
1650 	0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa,
1651 	0xdb, 0x77, 0xdb, 0xee, 0xdb, 0x77, 0xdb, 0xee, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1652 	0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18,
1653 	0x66, 0x66, 0x66, 0x66, 0xe6, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x66, 0x66, 0x66,
1654 	0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x66, 0x66, 0xe6, 0x06, 0xe6, 0x66, 0x66, 0x66,
1655 	0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0xfe, 0x06, 0xe6, 0x66, 0x66, 0x66,
1656 	0x66, 0x66, 0xe6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0xfe, 0x00, 0x00, 0x00,
1657 	0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18,
1658 	0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00,
1659 	0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18,
1660 	0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18,
1661 	0x18, 0x18, 0x1e, 0x18, 0x1e, 0x18, 0x18, 0x18, 0x66, 0x66, 0x66, 0x66, 0x67, 0x66, 0x66, 0x66,
1662 	0x66, 0x66, 0x67, 0x60, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x60, 0x67, 0x66, 0x66, 0x66,
1663 	0x66, 0x66, 0xe7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xe7, 0x66, 0x66, 0x66,
1664 	0x66, 0x66, 0x67, 0x60, 0x67, 0x66, 0x66, 0x66, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
1665 	0x66, 0x66, 0xe7, 0x00, 0xe7, 0x66, 0x66, 0x66, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
1666 	0x66, 0x66, 0x66, 0x66, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18,
1667 	0x00, 0x00, 0x00, 0x00, 0xff, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7f, 0x00, 0x00, 0x00,
1668 	0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18,
1669 	0x00, 0x00, 0x00, 0x00, 0x7f, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xff, 0x66, 0x66, 0x66,
1670 	0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00,
1671 	0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1672 	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
1673 	0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
1674 	0x00, 0x00, 0xfc, 0xc6, 0xc6, 0xfc, 0xc0, 0xc0, 0x00, 0x00, 0x3e, 0x60, 0x60, 0x60, 0x3e, 0x00,
1675 	0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x06, 0x7c,
1676 	0x00, 0x00, 0x7c, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00,
1677 	0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7f, 0x00, 0x00, 0x00, 0x66, 0x66, 0x3e, 0x06, 0x06, 0x00,
1678 	0x00, 0x00, 0xd6, 0xd6, 0xd6, 0xd6, 0xfe, 0x00, 0x00, 0x00, 0xd6, 0xd6, 0xd6, 0xd6, 0xff, 0x01,
1679 	0x00, 0x00, 0x70, 0x30, 0x3c, 0x36, 0x3c, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xf6, 0xde, 0xf6, 0x00,
1680 	0x00, 0x00, 0x60, 0x60, 0x7c, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x7c, 0x06, 0x7e, 0x06, 0x7c, 0x00,
1681 	0x00, 0x00, 0xcc, 0xd6, 0xf6, 0xd6, 0xcc, 0x00, 0x00, 0x00, 0x3e, 0x66, 0x3e, 0x36, 0x66, 0x00,
1682 	0x48, 0xfc, 0xc0, 0xf8, 0xc0, 0xc0, 0xfc, 0x00, 0x28, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0x7e, 0x00,
1683 	0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x30, 0x18,
1684 	0x18, 0x30, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00,
1685 	0x00, 0x00, 0x04, 0x02, 0xff, 0x02, 0x04, 0x00, 0x00, 0x00, 0x20, 0x40, 0xff, 0x40, 0x20, 0x00,
1686 	0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00,
1687 	0x00, 0x18, 0x00, 0xff, 0x00, 0x18, 0x00, 0x00, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x00, 0x7c, 0x00,
1688 	0x00, 0x8e, 0x88, 0xc9, 0xa9, 0x98, 0x88, 0x00, 0x00, 0x00, 0x42, 0x3c, 0x42, 0x3c, 0x42, 0x00,
1689 	0x00, 0x00, 0x1c, 0x1c, 0x1c, 0x1c, 0x00, 0x00, 0x51, 0x8a, 0x51, 0x8a, 0x51, 0x8a, 0x51, 0x9a
1690 };
1691 
1692 const uint8 Display::_palJoeClothes[] = {
1693 	0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x87, 0x87, 0x87, 0xB0, 0xB0, 0xB0, 0xDA, 0xDA, 0xDA, 0x43,
1694 	0x34, 0x20,	0x77, 0x33, 0x1F, 0xA3, 0x43, 0x27, 0x80, 0x45, 0x45, 0x9E, 0x5D, 0x5B, 0xB9, 0x78,
1695 	0x75, 0xDF, 0x97, 0x91,	0x17, 0x27, 0x63, 0x1F, 0x3F, 0x83, 0x27, 0x5B, 0xA7, 0x98, 0xD4, 0xFF
1696 };
1697 
1698 const uint8 Display::_palJoeDress[] = {
1699 	0x00, 0x00, 0x00, 0x50, 0x50, 0x50, 0x70, 0x70, 0x70, 0x90, 0x90, 0x90, 0xC6, 0xC6, 0xC6, 0xFF,
1700 	0xFF, 0xFF,	0x30, 0x30, 0x90, 0x47, 0x49, 0xD0, 0x40, 0x24, 0x00, 0x79, 0x34, 0x0B, 0xB2, 0x3D,
1701 	0x22, 0xED, 0x42, 0x42,	0x80, 0x45, 0x45, 0xA3, 0x5F, 0x5F, 0xC8, 0x7C, 0x7C, 0xEC, 0x9C, 0x9C
1702 };
1703 
1704 } // End of namespace Queen
1705