1 ;;;;------------------------------------------------------------------
3 ;;;; Copyright (C) 2001-2004,
4 ;;;; Department of Computer Science, University of Tromso, Norway.
6 ;;;; For distribution policy, see the accompanying file COPYING.
8 ;;;; Filename: vga.lisp
9 ;;;; Description: Low-level VGA interfacing.
10 ;;;; Author: Frode Vatvedt Fjeld <frodef@acm.org>
11 ;;;; Created at: Tue Sep 25 14:08:20 2001
13 ;;;; $Id: vga.lisp,v 1.14 2007/04/13 22:59:26 ffjeld Exp $
15 ;;;;------------------------------------------------------------------
17 (require :x86-pc
/package
)
20 (in-package muerte.x86-pc
)
22 (defconstant +vga-base
+ #x3c0
)
24 (defmacro vga-port
(register)
25 `(io-register8 +vga-base
+ ,register
))
27 (defun vga-crt-controller-register (register)
28 (let* ((address-register (if (logbitp 0 (io-port #x3cc
:unsigned-byte8
)) #x3d4
#x3b4
))
29 (data-register (1+ address-register
)))
30 (setf (io-port address-register
:unsigned-byte8
) register
)
31 (io-port data-register
:unsigned-byte8
)))
33 (defun (setf vga-crt-controller-register
) (value register
)
34 (let* ((address-register (if (logbitp 0 (io-port #x3cc
:unsigned-byte8
)) #x3d4
#x3b4
))
35 (data-register (1+ address-register
)))
36 (setf (io-port address-register
:unsigned-byte8
) register
37 (io-port data-register
:unsigned-byte8
) value
)))
39 (defun vga-graphics-register (register)
40 (setf (io-port #x3ce
:unsigned-byte8
) register
)
41 (io-port #x3cf
:unsigned-byte8
))
43 (defun (setf vga-graphics-register
) (value register
)
44 (setf (io-port #x3ce
:unsigned-byte8
) register
45 (io-port #x3cf
:unsigned-byte8
) value
))
47 (defun vga-sequencer-register (register)
48 (setf (vga-port 4) register
)
51 (defun (setf vga-sequencer-register
) (value register
)
52 (setf (vga-port 4) register
55 (defun vga-attribute-register (register)
57 (setf (vga-port 0) register
)
60 (defun (setf vga-attribute-register
) (value register
)
62 (setf (vga-port 0) register
65 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
67 (defun (setf vga-cursor-location
) (value)
68 (setf (vga-crt-controller-register #x0e
) (ldb (byte 8 8) value
) ; high
69 (vga-crt-controller-register #x0f
) (ldb (byte 8 0) value
)) ; low
72 (defun vga-cursor-location ()
73 (dpb (vga-crt-controller-register #x0e
)
75 (vga-crt-controller-register #x0f
)))
77 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
79 (defun vga-memory-map ()
81 (vga-graphics-register 6))
82 (#b00
(values #xa0000
#xbffff
))
83 (#b01
(values #xa0000
#xaffff
))
84 (#b10
(values #xb0000
#xb7fff
))
85 (#b11
(values #xb8000
#xbffff
))))
87 (defun vga-horizontal-display-end ()
88 (1+ (vga-crt-controller-register 1)))
90 (defun vga-vertical-display-end ()
91 (let ((overflow (vga-crt-controller-register 7)))
93 (vga-crt-controller-register #x12
)
94 (if (logbitp 1 overflow
) #x100
0)
95 (if (logbitp 6 overflow
) #x200
0))))
97 (defun vga-character-height ()
99 (vga-crt-controller-register 9))))
101 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
104 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
106 ;;; VGA stuff ported from http://my.execpc.com/CE/AC/geezer/osd/graphics/modes.c
108 (defconstant +vga-state-80x25
+
111 #x03
#x00
#x03
#x00
#x02
)
113 #x5F
#x4F
#x50
#x82
#x55
#x81
#xBF
#x1F
114 #x00
#x4F
#x0D
#x0E
#x00
#x00
#x00
#x50
115 #x9C
#x0E
#x8F
#x28
#x1F
#x96
#xB9
#xA3
118 #x00
#x00
#x00
#x00
#x00
#x10
#x0E
#x00
121 #x00
#x01
#x02
#x03
#x04
#x05
#x14
#x07
122 #x38
#x39
#x3A
#x3B
#x3C
#x3D
#x3E
#x3F
123 #x0C
#x00
#x0F
#x08
#x00
)))
125 (defconstant +vga-state-80x50
+
128 #x03
#x00
#x03
#x00
#x02
)
130 #x5F
#x4F
#x50
#x82
#x55
#x81
#xBF
#x1F
131 #x00
#x47
#x06
#x07
#x00
#x00
#x01
#x40
132 #x9C
#x8E
#x8F
#x28
#x1F
#x96
#xB9
#xA3
135 #x00
#x00
#x00
#x00
#x00
#x10
#x0E
#x00
138 #x00
#x01
#x02
#x03
#x04
#x05
#x14
#x07
139 #x38
#x39
#x3A
#x3B
#x3C
#x3D
#x3E
#x3F
140 #x0C
#x00
#x0F
#x08
#x00
)))
142 (defconstant +vga-state-40x25
+
145 #x03
#x08
#x03
#x00
#x02
)
147 #x2D
#x27
#x28
#x90
#x2B
#xA0
#xBF
#x1F
148 #x00
#x4F
#x0D
#x0E
#x00
#x00
#x00
#xA0
149 #x9C
#x8E
#x8F
#x14
#x1F
#x96
#xB9
#xA3
152 #x00
#x00
#x00
#x00
#x00
#x10
#x0E
#x00
155 #x00
#x01
#x02
#x03
#x04
#x05
#x14
#x07
156 #x38
#x39
#x3A
#x3B
#x3C
#x3D
#x3E
#x3F
157 #x0C
#x00
#x0F
#x08
#x00
)))
159 (defconstant +vga-state-40x50
+
162 #x03
#x08
#x03
#x00
#x02
)
164 #x2D
#x27
#x28
#x90
#x2B
#xA0
#xBF
#x1F
165 #x00
#x47
#x06
#x07
#x00
#x00
#x04
#x60
166 #x9C
#x8E
#x8F
#x14
#x1F
#x96
#xB9
#xA3
169 #x00
#x00
#x00
#x00
#x00
#x10
#x0E
#x00
172 #x00
#x01
#x02
#x03
#x04
#x05
#x14
#x07
173 #x38
#x39
#x3A
#x3B
#x3C
#x3D
#x3E
#x3F
174 #x0C
#x00
#x0F
#x08
#x00
)))
176 (defconstant +vga-state-90x30
+
179 #x03
#x01
#x03
#x00
#x02
)
181 #x6B
#x59
#x5A
#x82
#x60
#x8D
#x0B
#x3E
182 #x00
#x4F
#x0D
#x0E
#x00
#x00
#x00
#x00
183 #xEA
#x0C
#xDF
#x2D
#x10
#xE8
#x05
#xA3
186 #x00
#x00
#x00
#x00
#x00
#x10
#x0E
#x00
189 #x00
#x01
#x02
#x03
#x04
#x05
#x14
#x07
190 #x38
#x39
#x3A
#x3B
#x3C
#x3D
#x3E
#x3F
191 #x0C
#x00
#x0F
#x08
#x00
)))
193 (defconstant +vga-state-90x60
+
196 #x03
#x01
#x03
#x00
#x02
)
198 #x6B
#x59
#x5A
#x82
#x60
#x8D
#x0B
#x3E
199 #x00
#x47
#x06
#x07
#x00
#x00
#x00
#x00
200 #xEA
#x0C
#xDF
#x2D
#x08
#xE8
#x05
#xA3
203 #x00
#x00
#x00
#x00
#x00
#x10
#x0E
#x00
206 #x00
#x01
#x02
#x03
#x04
#x05
#x14
#x07
207 #x38
#x39
#x3A
#x3B
#x3C
#x3D
#x3E
#x3F
208 #x0C
#x00
#x0F
#x08
#x00
)))
210 (defconstant +vga-state-320x200x256-modex
+
213 #x03
#x01
#x0F
#x00
#x06
)
215 #x5F
#x4F
#x50
#x82
#x54
#x80
#xBF
#x1F
216 #x00
#x41
#x00
#x00
#x00
#x00
#x00
#x00
217 #x9C
#x0E
#x8F
#x28
#x00
#x96
#xB9
#xE3
220 #x00
#x00
#x00
#x00
#x00
#x40
#x05
#x0F
223 #x00
#x01
#x02
#x03
#x04
#x05
#x06
#x07
224 #x08
#x09
#x0A
#x0B
#x0C
#x0D
#x0E
#x0F
225 #x41
#x00
#x0F
#x00
#x00
)))
228 ;; intended future wrapper for graphics modes
229 (defconstant +graphical-mode-modex
+
230 '(+vga-state-320x200x256-modex
+ ; vga state
236 (defvar *vga-current-page
* 0)
237 (defvar *vga-page-count
* 0)
238 (defvar *vga-width
* 0)
239 (defvar *vga-height
* 0)
240 (defvar *vga-viewport
* '(0 0 0 0))
242 (defconstant +vga-misc-read
+ #x0c
)
243 (defconstant +vga-misc-write
+ #x02
)
245 (defconstant VGA-MISC-WRITE
#x3C2
)
246 (defconstant VGA-AC-INDEX
#x3C0
)
247 (defconstant VGA-AC-WRITE
#x3C0
)
248 (defconstant VGA-AC-READ
#x3C1
)
249 (defconstant VGA-SEQ-INDEX
#x3C4
)
250 (defconstant VGA-SEQ-DATA
#x3C5
)
251 (defconstant VGA-DAC-READ-INDEX
#x3C7
)
252 (defconstant VGA-DAC-WRITE-INDEX
#x3C8
)
253 (defconstant VGA-DAC-DATA
#x3C9
)
254 (defconstant VGA-MISC-READ
#x3CC
)
255 (defconstant VGA-GC-INDEX
#x3CE
)
256 (defconstant VGA-GC-DATA
#x3CF
)
257 (defconstant VGA-CRTC-INDEX
#x3D4
)
258 (defconstant VGA-CRTC-DATA
#x3D5
)
259 (defconstant VGA-INSTAT-READ
#x3DA
)
262 "Dump the state of the VGA register set."
266 (vga-port +vga-misc-read
+))
268 (loop for i from
0 below
5
269 collect
(vga-sequencer-register i
)))
271 (loop for i from
0 below
25
272 collect
(vga-crt-controller-register i
)))
274 (loop for i from
0 below
9
275 collect
(vga-graphics-register i
)))
277 (loop for i from
0 below
21
278 collect
(vga-attribute-register i
))))
279 ;; lock 16-color palette and unblank display
280 (io-port VGA-INSTAT-READ
:unsigned-byte8
)
281 (setf (io-port VGA-AC-INDEX
:unsigned-byte8
) #x20
)))
283 (defun (setf vga-state
) (state &optional unsafe-p
)
284 "Initialize the state of the VGA register set."
285 (let ((old-state (if unsafe-p nil
(vga-state))))
286 (flet ((vga-reset (&optional c
)
289 (warn "Something bad happened, resetting VGA state..")
290 (setf (vga-state t
) old-state
292 (assert-register-set (state register-set
)
293 (let ((set (assoc register-set state
)))
294 (assert set
() "VGA state is missing ~A." register-set
)
297 (handler-bind ((serious-condition #'vga-reset
))
298 ;; write MISCELLANEOUS reg
299 (setf (vga-port +vga-misc-write
+)
300 (assert-register-set state
:misc
))
301 ;; write SEQUENCER regs
302 (loop for x in
(assert-register-set state
:sequencer
)
304 do
(setf (vga-sequencer-register i
) x
))
306 ;; unlock CRTC registers
307 initially
(setf (vga-crt-controller-register 3)
308 (logior #x80
(vga-crt-controller-register 3)))
309 (setf (vga-crt-controller-register #x11
)
310 (logand #x7f
(vga-crt-controller-register #x11
)))
311 for x in
(assert-register-set state
:crtc
)
313 do
(setf (vga-crt-controller-register i
)
315 ;; make sure they remain unlocked
316 (#x03
(logior #x80 x
))
317 (#x11
(logand #x7f x
))
319 ;; write GRAPHICS CONTROLLER regs
320 (loop for x in
(assert-register-set state
:graphics
)
322 do
(setf (vga-graphics-register i
) x
))
323 ;; write ATTRIBUTE CONTROLLER regs
324 (loop for x in
(assert-register-set state
:attribute
)
326 do
(setf (vga-attribute-register i
) x
))
327 ;; lock 16-color palette and unblank display
328 (io-port VGA-INSTAT-READ
:unsigned-byte8
)
329 (setf (io-port VGA-AC-INDEX
:unsigned-byte8
) #x20
)
330 (setf old-state nil
))
335 (check-type p
(integer 0 3))
336 (let* ((p (logand p
3))
339 (setf (io-port VGA-GC-INDEX
:unsigned-byte8
) 4)
340 (setf (io-port VGA-GC-DATA
:unsigned-byte8
) p
)
342 (setf (io-port VGA-SEQ-INDEX
:unsigned-byte8
) 2)
343 (setf (io-port VGA-SEQ-DATA
:unsigned-byte8
) pmask
))
346 (defun set-plane-by-bitmask (p)
347 (check-type p
(integer 0 15))
349 (setf (io-port VGA-GC-INDEX
:unsigned-byte8
) 4)
350 (setf (io-port VGA-GC-DATA
:unsigned-byte8
) p
)
352 (setf (io-port VGA-SEQ-INDEX
:unsigned-byte8
) 2)
353 (setf (io-port VGA-SEQ-DATA
:unsigned-byte8
) p
))
355 (defun vmemwr (dst-off src start end
)
356 (loop for i from start below end as dst upfrom dst-off
357 do
(setf (memref-int (vga-memory-map) :index dst
:type
:unsigned-byte8
)
361 (defun write-font (buf font-height
)
364 ;; set_plane() modifies GC 4 and SEQ 2, so save them as well
365 (setf (io-port VGA-SEQ-INDEX
:unsigned-byte8
) 2)
366 (io-port VGA-SEQ-DATA
:unsigned-byte8
)))
369 (setf (io-port VGA-SEQ-INDEX
:unsigned-byte8
) 4)
370 (io-port VGA-SEQ-DATA
:unsigned-byte8
)))
373 ;; turn off even-odd addressing (set flat addressing)
374 ;; assume: chain-4 addressing already off
375 (setf (io-port VGA-SEQ-DATA
:unsigned-byte8
)
377 (setf (io-port VGA-GC-INDEX
:unsigned-byte8
) 4)
378 (io-port VGA-GC-DATA
:unsigned-byte8
)))
381 (setf (io-port VGA-GC-INDEX
:unsigned-byte8
) 5)
382 (io-port VGA-GC-DATA
:unsigned-byte8
)))
385 ;; turn off even-odd addressing
386 (setf (io-port VGA-GC-DATA
:unsigned-byte8
)
387 (logand gc5
(logxor #x10
#xff
)))
388 (setf (io-port VGA-GC-INDEX
:unsigned-byte8
) 6)
389 (io-port VGA-GC-DATA
:unsigned-byte8
))))
390 ;; turn off even-odd addressing
391 (setf (io-port VGA-GC-DATA
:unsigned-byte8
)
392 (logand gc6
(logxor #xff
#x02
)))
393 ;; write font to plane P4
394 (set-plane 2) ; set_plane(2)
397 (vmemwr (* i
32) buf
(* i font-height
) (* (1+ i
) font-height
)))
400 (setf (io-port VGA-SEQ-INDEX
:unsigned-byte8
) 2)
401 (setf (io-port VGA-SEQ-DATA
:unsigned-byte8
) seq2
)
402 (setf (io-port VGA-SEQ-INDEX
:unsigned-byte8
) 4)
403 (setf (io-port VGA-SEQ-DATA
:unsigned-byte8
) seq4
)
404 (setf (io-port VGA-GC-INDEX
:unsigned-byte8
) 4)
405 (setf (io-port VGA-GC-DATA
:unsigned-byte8
) gc4
)
406 (setf (io-port VGA-GC-INDEX
:unsigned-byte8
) 5)
407 (setf (io-port VGA-GC-DATA
:unsigned-byte8
) gc5
)
408 (setf (io-port VGA-GC-INDEX
:unsigned-byte8
) 6)
409 (setf (io-port VGA-GC-DATA
:unsigned-byte8
) gc6
))
413 (defconstant +vga-font-8x8
+
414 #{#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
415 #x7E
#x81
#xA5
#x81
#xBD
#x99
#x81
#x7E
416 #x7E
#xFF
#xDB
#xFF
#xC3
#xE7
#xFF
#x7E
417 #x6C
#xFE
#xFE
#xFE
#x7C
#x38
#x10
#x00
418 #x10
#x38
#x7C
#xFE
#x7C
#x38
#x10
#x00
419 #x38
#x7C
#x38
#xFE
#xFE
#x92
#x10
#x7C
420 #x00
#x10
#x38
#x7C
#xFE
#x7C
#x38
#x7C
421 #x00
#x00
#x18
#x3C
#x3C
#x18
#x00
#x00
422 #xFF
#xFF
#xE7
#xC3
#xC3
#xE7
#xFF
#xFF
423 #x00
#x3C
#x66
#x42
#x42
#x66
#x3C
#x00
424 #xFF
#xC3
#x99
#xBD
#xBD
#x99
#xC3
#xFF
425 #x0F
#x07
#x0F
#x7D
#xCC
#xCC
#xCC
#x78
426 #x3C
#x66
#x66
#x66
#x3C
#x18
#x7E
#x18
427 #x3F
#x33
#x3F
#x30
#x30
#x70
#xF0
#xE0
428 #x7F
#x63
#x7F
#x63
#x63
#x67
#xE6
#xC0
429 #x99
#x5A
#x3C
#xE7
#xE7
#x3C
#x5A
#x99
430 #x80
#xE0
#xF8
#xFE
#xF8
#xE0
#x80
#x00
431 #x02
#x0E
#x3E
#xFE
#x3E
#x0E
#x02
#x00
432 #x18
#x3C
#x7E
#x18
#x18
#x7E
#x3C
#x18
433 #x66
#x66
#x66
#x66
#x66
#x00
#x66
#x00
434 #x7F
#xDB
#xDB
#x7B
#x1B
#x1B
#x1B
#x00
435 #x3E
#x63
#x38
#x6C
#x6C
#x38
#x86
#xFC
436 #x00
#x00
#x00
#x00
#x7E
#x7E
#x7E
#x00
437 #x18
#x3C
#x7E
#x18
#x7E
#x3C
#x18
#xFF
438 #x18
#x3C
#x7E
#x18
#x18
#x18
#x18
#x00
439 #x18
#x18
#x18
#x18
#x7E
#x3C
#x18
#x00
440 #x00
#x18
#x0C
#xFE
#x0C
#x18
#x00
#x00
441 #x00
#x30
#x60
#xFE
#x60
#x30
#x00
#x00
442 #x00
#x00
#xC0
#xC0
#xC0
#xFE
#x00
#x00
443 #x00
#x24
#x66
#xFF
#x66
#x24
#x00
#x00
444 #x00
#x18
#x3C
#x7E
#xFF
#xFF
#x00
#x00
445 #x00
#xFF
#xFF
#x7E
#x3C
#x18
#x00
#x00
446 #x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
447 #x18
#x3C
#x3C
#x18
#x18
#x00
#x18
#x00
448 #x6C
#x6C
#x6C
#x00
#x00
#x00
#x00
#x00
449 #x6C
#x6C
#xFE
#x6C
#xFE
#x6C
#x6C
#x00
450 #x18
#x7E
#xC0
#x7C
#x06
#xFC
#x18
#x00
451 #x00
#xC6
#xCC
#x18
#x30
#x66
#xC6
#x00
452 #x38
#x6C
#x38
#x76
#xDC
#xCC
#x76
#x00
453 #x30
#x30
#x60
#x00
#x00
#x00
#x00
#x00
454 #x18
#x30
#x60
#x60
#x60
#x30
#x18
#x00
455 #x60
#x30
#x18
#x18
#x18
#x30
#x60
#x00
456 #x00
#x66
#x3C
#xFF
#x3C
#x66
#x00
#x00
457 #x00
#x18
#x18
#x7E
#x18
#x18
#x00
#x00
458 #x00
#x00
#x00
#x00
#x00
#x18
#x18
#x30
459 #x00
#x00
#x00
#x7E
#x00
#x00
#x00
#x00
460 #x00
#x00
#x00
#x00
#x00
#x18
#x18
#x00
461 #x06
#x0C
#x18
#x30
#x60
#xC0
#x80
#x00
462 #x7C
#xCE
#xDE
#xF6
#xE6
#xC6
#x7C
#x00
463 #x30
#x70
#x30
#x30
#x30
#x30
#xFC
#x00
464 #x78
#xCC
#x0C
#x38
#x60
#xCC
#xFC
#x00
465 #x78
#xCC
#x0C
#x38
#x0C
#xCC
#x78
#x00
466 #x1C
#x3C
#x6C
#xCC
#xFE
#x0C
#x1E
#x00
467 #xFC
#xC0
#xF8
#x0C
#x0C
#xCC
#x78
#x00
468 #x38
#x60
#xC0
#xF8
#xCC
#xCC
#x78
#x00
469 #xFC
#xCC
#x0C
#x18
#x30
#x30
#x30
#x00
470 #x78
#xCC
#xCC
#x78
#xCC
#xCC
#x78
#x00
471 #x78
#xCC
#xCC
#x7C
#x0C
#x18
#x70
#x00
472 #x00
#x18
#x18
#x00
#x00
#x18
#x18
#x00
473 #x00
#x18
#x18
#x00
#x00
#x18
#x18
#x30
474 #x18
#x30
#x60
#xC0
#x60
#x30
#x18
#x00
475 #x00
#x00
#x7E
#x00
#x7E
#x00
#x00
#x00
476 #x60
#x30
#x18
#x0C
#x18
#x30
#x60
#x00
477 #x3C
#x66
#x0C
#x18
#x18
#x00
#x18
#x00
478 #x7C
#xC6
#xDE
#xDE
#xDC
#xC0
#x7C
#x00
479 #x30
#x78
#xCC
#xCC
#xFC
#xCC
#xCC
#x00
480 #xFC
#x66
#x66
#x7C
#x66
#x66
#xFC
#x00
481 #x3C
#x66
#xC0
#xC0
#xC0
#x66
#x3C
#x00
482 #xF8
#x6C
#x66
#x66
#x66
#x6C
#xF8
#x00
483 #xFE
#x62
#x68
#x78
#x68
#x62
#xFE
#x00
484 #xFE
#x62
#x68
#x78
#x68
#x60
#xF0
#x00
485 #x3C
#x66
#xC0
#xC0
#xCE
#x66
#x3A
#x00
486 #xCC
#xCC
#xCC
#xFC
#xCC
#xCC
#xCC
#x00
487 #x78
#x30
#x30
#x30
#x30
#x30
#x78
#x00
488 #x1E
#x0C
#x0C
#x0C
#xCC
#xCC
#x78
#x00
489 #xE6
#x66
#x6C
#x78
#x6C
#x66
#xE6
#x00
490 #xF0
#x60
#x60
#x60
#x62
#x66
#xFE
#x00
491 #xC6
#xEE
#xFE
#xFE
#xD6
#xC6
#xC6
#x00
492 #xC6
#xE6
#xF6
#xDE
#xCE
#xC6
#xC6
#x00
493 #x38
#x6C
#xC6
#xC6
#xC6
#x6C
#x38
#x00
494 #xFC
#x66
#x66
#x7C
#x60
#x60
#xF0
#x00
495 #x7C
#xC6
#xC6
#xC6
#xD6
#x7C
#x0E
#x00
496 #xFC
#x66
#x66
#x7C
#x6C
#x66
#xE6
#x00
497 #x7C
#xC6
#xE0
#x78
#x0E
#xC6
#x7C
#x00
498 #xFC
#xB4
#x30
#x30
#x30
#x30
#x78
#x00
499 #xCC
#xCC
#xCC
#xCC
#xCC
#xCC
#xFC
#x00
500 #xCC
#xCC
#xCC
#xCC
#xCC
#x78
#x30
#x00
501 #xC6
#xC6
#xC6
#xC6
#xD6
#xFE
#x6C
#x00
502 #xC6
#xC6
#x6C
#x38
#x6C
#xC6
#xC6
#x00
503 #xCC
#xCC
#xCC
#x78
#x30
#x30
#x78
#x00
504 #xFE
#xC6
#x8C
#x18
#x32
#x66
#xFE
#x00
505 #x78
#x60
#x60
#x60
#x60
#x60
#x78
#x00
506 #xC0
#x60
#x30
#x18
#x0C
#x06
#x02
#x00
507 #x78
#x18
#x18
#x18
#x18
#x18
#x78
#x00
508 #x10
#x38
#x6C
#xC6
#x00
#x00
#x00
#x00
509 #x00
#x00
#x00
#x00
#x00
#x00
#x00
#xFF
510 #x30
#x30
#x18
#x00
#x00
#x00
#x00
#x00
511 #x00
#x00
#x78
#x0C
#x7C
#xCC
#x76
#x00
512 #xE0
#x60
#x60
#x7C
#x66
#x66
#xDC
#x00
513 #x00
#x00
#x78
#xCC
#xC0
#xCC
#x78
#x00
514 #x1C
#x0C
#x0C
#x7C
#xCC
#xCC
#x76
#x00
515 #x00
#x00
#x78
#xCC
#xFC
#xC0
#x78
#x00
516 #x38
#x6C
#x64
#xF0
#x60
#x60
#xF0
#x00
517 #x00
#x00
#x76
#xCC
#xCC
#x7C
#x0C
#xF8
518 #xE0
#x60
#x6C
#x76
#x66
#x66
#xE6
#x00
519 #x30
#x00
#x70
#x30
#x30
#x30
#x78
#x00
520 #x0C
#x00
#x1C
#x0C
#x0C
#xCC
#xCC
#x78
521 #xE0
#x60
#x66
#x6C
#x78
#x6C
#xE6
#x00
522 #x70
#x30
#x30
#x30
#x30
#x30
#x78
#x00
523 #x00
#x00
#xCC
#xFE
#xFE
#xD6
#xD6
#x00
524 #x00
#x00
#xB8
#xCC
#xCC
#xCC
#xCC
#x00
525 #x00
#x00
#x78
#xCC
#xCC
#xCC
#x78
#x00
526 #x00
#x00
#xDC
#x66
#x66
#x7C
#x60
#xF0
527 #x00
#x00
#x76
#xCC
#xCC
#x7C
#x0C
#x1E
528 #x00
#x00
#xDC
#x76
#x62
#x60
#xF0
#x00
529 #x00
#x00
#x7C
#xC0
#x70
#x1C
#xF8
#x00
530 #x10
#x30
#xFC
#x30
#x30
#x34
#x18
#x00
531 #x00
#x00
#xCC
#xCC
#xCC
#xCC
#x76
#x00
532 #x00
#x00
#xCC
#xCC
#xCC
#x78
#x30
#x00
533 #x00
#x00
#xC6
#xC6
#xD6
#xFE
#x6C
#x00
534 #x00
#x00
#xC6
#x6C
#x38
#x6C
#xC6
#x00
535 #x00
#x00
#xCC
#xCC
#xCC
#x7C
#x0C
#xF8
536 #x00
#x00
#xFC
#x98
#x30
#x64
#xFC
#x00
537 #x1C
#x30
#x30
#xE0
#x30
#x30
#x1C
#x00
538 #x18
#x18
#x18
#x00
#x18
#x18
#x18
#x00
539 #xE0
#x30
#x30
#x1C
#x30
#x30
#xE0
#x00
540 #x76
#xDC
#x00
#x00
#x00
#x00
#x00
#x00
541 #x00
#x10
#x38
#x6C
#xC6
#xC6
#xFE
#x00
542 #x7C
#xC6
#xC0
#xC6
#x7C
#x0C
#x06
#x7C
543 #x00
#xCC
#x00
#xCC
#xCC
#xCC
#x76
#x00
544 #x1C
#x00
#x78
#xCC
#xFC
#xC0
#x78
#x00
545 #x7E
#x81
#x3C
#x06
#x3E
#x66
#x3B
#x00
546 #xCC
#x00
#x78
#x0C
#x7C
#xCC
#x76
#x00
547 #xE0
#x00
#x78
#x0C
#x7C
#xCC
#x76
#x00
548 #x30
#x30
#x78
#x0C
#x7C
#xCC
#x76
#x00
549 #x00
#x00
#x7C
#xC6
#xC0
#x78
#x0C
#x38
550 #x7E
#x81
#x3C
#x66
#x7E
#x60
#x3C
#x00
551 #xCC
#x00
#x78
#xCC
#xFC
#xC0
#x78
#x00
552 #xE0
#x00
#x78
#xCC
#xFC
#xC0
#x78
#x00
553 #xCC
#x00
#x70
#x30
#x30
#x30
#x78
#x00
554 #x7C
#x82
#x38
#x18
#x18
#x18
#x3C
#x00
555 #xE0
#x00
#x70
#x30
#x30
#x30
#x78
#x00
556 #xC6
#x10
#x7C
#xC6
#xFE
#xC6
#xC6
#x00
557 #x30
#x30
#x00
#x78
#xCC
#xFC
#xCC
#x00
558 #x1C
#x00
#xFC
#x60
#x78
#x60
#xFC
#x00
559 #x00
#x00
#x7F
#x0C
#x7F
#xCC
#x7F
#x00
560 #x3E
#x6C
#xCC
#xFE
#xCC
#xCC
#xCE
#x00
561 #x78
#x84
#x00
#x78
#xCC
#xCC
#x78
#x00
562 #x00
#xCC
#x00
#x78
#xCC
#xCC
#x78
#x00
563 #x00
#xE0
#x00
#x78
#xCC
#xCC
#x78
#x00
564 #x78
#x84
#x00
#xCC
#xCC
#xCC
#x76
#x00
565 #x00
#xE0
#x00
#xCC
#xCC
#xCC
#x76
#x00
566 #x00
#xCC
#x00
#xCC
#xCC
#x7C
#x0C
#xF8
567 #xC3
#x18
#x3C
#x66
#x66
#x3C
#x18
#x00
568 #xCC
#x00
#xCC
#xCC
#xCC
#xCC
#x78
#x00
569 #x18
#x18
#x7E
#xC0
#xC0
#x7E
#x18
#x18
570 #x38
#x6C
#x64
#xF0
#x60
#xE6
#xFC
#x00
571 #xCC
#xCC
#x78
#x30
#xFC
#x30
#xFC
#x30
572 #xF8
#xCC
#xCC
#xFA
#xC6
#xCF
#xC6
#xC3
573 #x0E
#x1B
#x18
#x3C
#x18
#x18
#xD8
#x70
574 #x1C
#x00
#x78
#x0C
#x7C
#xCC
#x76
#x00
575 #x38
#x00
#x70
#x30
#x30
#x30
#x78
#x00
576 #x00
#x1C
#x00
#x78
#xCC
#xCC
#x78
#x00
577 #x00
#x1C
#x00
#xCC
#xCC
#xCC
#x76
#x00
578 #x00
#xF8
#x00
#xB8
#xCC
#xCC
#xCC
#x00
579 #xFC
#x00
#xCC
#xEC
#xFC
#xDC
#xCC
#x00
580 #x3C
#x6C
#x6C
#x3E
#x00
#x7E
#x00
#x00
581 #x38
#x6C
#x6C
#x38
#x00
#x7C
#x00
#x00
582 #x18
#x00
#x18
#x18
#x30
#x66
#x3C
#x00
583 #x00
#x00
#x00
#xFC
#xC0
#xC0
#x00
#x00
584 #x00
#x00
#x00
#xFC
#x0C
#x0C
#x00
#x00
585 #xC6
#xCC
#xD8
#x36
#x6B
#xC2
#x84
#x0F
586 #xC3
#xC6
#xCC
#xDB
#x37
#x6D
#xCF
#x03
587 #x18
#x00
#x18
#x18
#x3C
#x3C
#x18
#x00
588 #x00
#x33
#x66
#xCC
#x66
#x33
#x00
#x00
589 #x00
#xCC
#x66
#x33
#x66
#xCC
#x00
#x00
590 #x22
#x88
#x22
#x88
#x22
#x88
#x22
#x88
591 #x55
#xAA
#x55
#xAA
#x55
#xAA
#x55
#xAA
592 #xDB
#xF6
#xDB
#x6F
#xDB
#x7E
#xD7
#xED
593 #x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
594 #x18
#x18
#x18
#x18
#xF8
#x18
#x18
#x18
595 #x18
#x18
#xF8
#x18
#xF8
#x18
#x18
#x18
596 #x36
#x36
#x36
#x36
#xF6
#x36
#x36
#x36
597 #x00
#x00
#x00
#x00
#xFE
#x36
#x36
#x36
598 #x00
#x00
#xF8
#x18
#xF8
#x18
#x18
#x18
599 #x36
#x36
#xF6
#x06
#xF6
#x36
#x36
#x36
600 #x36
#x36
#x36
#x36
#x36
#x36
#x36
#x36
601 #x00
#x00
#xFE
#x06
#xF6
#x36
#x36
#x36
602 #x36
#x36
#xF6
#x06
#xFE
#x00
#x00
#x00
603 #x36
#x36
#x36
#x36
#xFE
#x00
#x00
#x00
604 #x18
#x18
#xF8
#x18
#xF8
#x00
#x00
#x00
605 #x00
#x00
#x00
#x00
#xF8
#x18
#x18
#x18
606 #x18
#x18
#x18
#x18
#x1F
#x00
#x00
#x00
607 #x18
#x18
#x18
#x18
#xFF
#x00
#x00
#x00
608 #x00
#x00
#x00
#x00
#xFF
#x18
#x18
#x18
609 #x18
#x18
#x18
#x18
#x1F
#x18
#x18
#x18
610 #x00
#x00
#x00
#x00
#xFF
#x00
#x00
#x00
611 #x18
#x18
#x18
#x18
#xFF
#x18
#x18
#x18
612 #x18
#x18
#x1F
#x18
#x1F
#x18
#x18
#x18
613 #x36
#x36
#x36
#x36
#x37
#x36
#x36
#x36
614 #x36
#x36
#x37
#x30
#x3F
#x00
#x00
#x00
615 #x00
#x00
#x3F
#x30
#x37
#x36
#x36
#x36
616 #x36
#x36
#xF7
#x00
#xFF
#x00
#x00
#x00
617 #x00
#x00
#xFF
#x00
#xF7
#x36
#x36
#x36
618 #x36
#x36
#x37
#x30
#x37
#x36
#x36
#x36
619 #x00
#x00
#xFF
#x00
#xFF
#x00
#x00
#x00
620 #x36
#x36
#xF7
#x00
#xF7
#x36
#x36
#x36
621 #x18
#x18
#xFF
#x00
#xFF
#x00
#x00
#x00
622 #x36
#x36
#x36
#x36
#xFF
#x00
#x00
#x00
623 #x00
#x00
#xFF
#x00
#xFF
#x18
#x18
#x18
624 #x00
#x00
#x00
#x00
#xFF
#x36
#x36
#x36
625 #x36
#x36
#x36
#x36
#x3F
#x00
#x00
#x00
626 #x18
#x18
#x1F
#x18
#x1F
#x00
#x00
#x00
627 #x00
#x00
#x1F
#x18
#x1F
#x18
#x18
#x18
628 #x00
#x00
#x00
#x00
#x3F
#x36
#x36
#x36
629 #x36
#x36
#x36
#x36
#xFF
#x36
#x36
#x36
630 #x18
#x18
#xFF
#x18
#xFF
#x18
#x18
#x18
631 #x18
#x18
#x18
#x18
#xF8
#x00
#x00
#x00
632 #x00
#x00
#x00
#x00
#x1F
#x18
#x18
#x18
633 #xFF
#xFF
#xFF
#xFF
#xFF
#xFF
#xFF
#xFF
634 #x00
#x00
#x00
#x00
#xFF
#xFF
#xFF
#xFF
635 #xF0
#xF0
#xF0
#xF0
#xF0
#xF0
#xF0
#xF0
636 #x0F
#x0F
#x0F
#x0F
#x0F
#x0F
#x0F
#x0F
637 #xFF
#xFF
#xFF
#xFF
#x00
#x00
#x00
#x00
638 #x00
#x00
#x76
#xDC
#xC8
#xDC
#x76
#x00
639 #x00
#x78
#xCC
#xF8
#xCC
#xF8
#xC0
#xC0
640 #x00
#xFC
#xCC
#xC0
#xC0
#xC0
#xC0
#x00
641 #x00
#x00
#xFE
#x6C
#x6C
#x6C
#x6C
#x00
642 #xFC
#xCC
#x60
#x30
#x60
#xCC
#xFC
#x00
643 #x00
#x00
#x7E
#xD8
#xD8
#xD8
#x70
#x00
644 #x00
#x66
#x66
#x66
#x66
#x7C
#x60
#xC0
645 #x00
#x76
#xDC
#x18
#x18
#x18
#x18
#x00
646 #xFC
#x30
#x78
#xCC
#xCC
#x78
#x30
#xFC
647 #x38
#x6C
#xC6
#xFE
#xC6
#x6C
#x38
#x00
648 #x38
#x6C
#xC6
#xC6
#x6C
#x6C
#xEE
#x00
649 #x1C
#x30
#x18
#x7C
#xCC
#xCC
#x78
#x00
650 #x00
#x00
#x7E
#xDB
#xDB
#x7E
#x00
#x00
651 #x06
#x0C
#x7E
#xDB
#xDB
#x7E
#x60
#xC0
652 #x38
#x60
#xC0
#xF8
#xC0
#x60
#x38
#x00
653 #x78
#xCC
#xCC
#xCC
#xCC
#xCC
#xCC
#x00
654 #x00
#x7E
#x00
#x7E
#x00
#x7E
#x00
#x00
655 #x18
#x18
#x7E
#x18
#x18
#x00
#x7E
#x00
656 #x60
#x30
#x18
#x30
#x60
#x00
#xFC
#x00
657 #x18
#x30
#x60
#x30
#x18
#x00
#xFC
#x00
658 #x0E
#x1B
#x1B
#x18
#x18
#x18
#x18
#x18
659 #x18
#x18
#x18
#x18
#x18
#xD8
#xD8
#x70
660 #x18
#x18
#x00
#x7E
#x00
#x18
#x18
#x00
661 #x00
#x76
#xDC
#x00
#x76
#xDC
#x00
#x00
662 #x38
#x6C
#x6C
#x38
#x00
#x00
#x00
#x00
663 #x00
#x00
#x00
#x18
#x18
#x00
#x00
#x00
664 #x00
#x00
#x00
#x00
#x18
#x00
#x00
#x00
665 #x0F
#x0C
#x0C
#x0C
#xEC
#x6C
#x3C
#x1C
666 #x58
#x6C
#x6C
#x6C
#x6C
#x00
#x00
#x00
667 #x70
#x98
#x30
#x60
#xF8
#x00
#x00
#x00
668 #x00
#x00
#x3C
#x3C
#x3C
#x3C
#x00
#x00
669 #x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
})
671 (defconstant +vga-font-8x16
+
672 #{#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
673 #x00
#x00
#x7E
#x81
#xA5
#x81
#x81
#xBD
#x99
#x81
#x81
#x7E
#x00
#x00
#x00
#x00
674 #x00
#x00
#x7E
#xFF
#xDB
#xFF
#xFF
#xC3
#xE7
#xFF
#xFF
#x7E
#x00
#x00
#x00
#x00
675 #x00
#x00
#x00
#x00
#x6C
#xFE
#xFE
#xFE
#xFE
#x7C
#x38
#x10
#x00
#x00
#x00
#x00
676 #x00
#x00
#x00
#x00
#x10
#x38
#x7C
#xFE
#x7C
#x38
#x10
#x00
#x00
#x00
#x00
#x00
677 #x00
#x00
#x00
#x18
#x3C
#x3C
#xE7
#xE7
#xE7
#x99
#x18
#x3C
#x00
#x00
#x00
#x00
678 #x00
#x00
#x00
#x18
#x3C
#x7E
#xFF
#xFF
#x7E
#x18
#x18
#x3C
#x00
#x00
#x00
#x00
679 #x00
#x00
#x00
#x00
#x00
#x00
#x18
#x3C
#x3C
#x18
#x00
#x00
#x00
#x00
#x00
#x00
680 #xFF
#xFF
#xFF
#xFF
#xFF
#xFF
#xE7
#xC3
#xC3
#xE7
#xFF
#xFF
#xFF
#xFF
#xFF
#xFF
681 #x00
#x00
#x00
#x00
#x00
#x3C
#x66
#x42
#x42
#x66
#x3C
#x00
#x00
#x00
#x00
#x00
682 #xFF
#xFF
#xFF
#xFF
#xFF
#xC3
#x99
#xBD
#xBD
#x99
#xC3
#xFF
#xFF
#xFF
#xFF
#xFF
683 #x00
#x00
#x1E
#x0E
#x1A
#x32
#x78
#xCC
#xCC
#xCC
#xCC
#x78
#x00
#x00
#x00
#x00
684 #x00
#x00
#x3C
#x66
#x66
#x66
#x66
#x3C
#x18
#x7E
#x18
#x18
#x00
#x00
#x00
#x00
685 #x00
#x00
#x3F
#x33
#x3F
#x30
#x30
#x30
#x30
#x70
#xF0
#xE0
#x00
#x00
#x00
#x00
686 #x00
#x00
#x7F
#x63
#x7F
#x63
#x63
#x63
#x63
#x67
#xE7
#xE6
#xC0
#x00
#x00
#x00
687 #x00
#x00
#x00
#x18
#x18
#xDB
#x3C
#xE7
#x3C
#xDB
#x18
#x18
#x00
#x00
#x00
#x00
688 #x00
#x80
#xC0
#xE0
#xF0
#xF8
#xFE
#xF8
#xF0
#xE0
#xC0
#x80
#x00
#x00
#x00
#x00
689 #x00
#x02
#x06
#x0E
#x1E
#x3E
#xFE
#x3E
#x1E
#x0E
#x06
#x02
#x00
#x00
#x00
#x00
690 #x00
#x00
#x18
#x3C
#x7E
#x18
#x18
#x18
#x18
#x7E
#x3C
#x18
#x00
#x00
#x00
#x00
691 #x00
#x00
#x66
#x66
#x66
#x66
#x66
#x66
#x66
#x00
#x66
#x66
#x00
#x00
#x00
#x00
692 #x00
#x00
#x7F
#xDB
#xDB
#xDB
#x7B
#x1B
#x1B
#x1B
#x1B
#x1B
#x00
#x00
#x00
#x00
693 #x00
#x7C
#xC6
#x60
#x38
#x6C
#xC6
#xC6
#x6C
#x38
#x0C
#xC6
#x7C
#x00
#x00
#x00
694 #x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#xFE
#xFE
#xFE
#xFE
#x00
#x00
#x00
#x00
695 #x00
#x00
#x18
#x3C
#x7E
#x18
#x18
#x18
#x18
#x7E
#x3C
#x18
#x7E
#x00
#x00
#x00
696 #x00
#x00
#x18
#x3C
#x7E
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x00
#x00
#x00
#x00
697 #x00
#x00
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x7E
#x3C
#x18
#x00
#x00
#x00
#x00
698 #x00
#x00
#x00
#x00
#x00
#x18
#x0C
#xFE
#x0C
#x18
#x00
#x00
#x00
#x00
#x00
#x00
699 #x00
#x00
#x00
#x00
#x00
#x30
#x60
#xFE
#x60
#x30
#x00
#x00
#x00
#x00
#x00
#x00
700 #x00
#x00
#x00
#x00
#x00
#xC0
#xC0
#xC0
#xC0
#xFE
#x00
#x00
#x00
#x00
#x00
#x00
701 #x00
#x00
#x00
#x00
#x00
#x28
#x6C
#xFE
#x6C
#x28
#x00
#x00
#x00
#x00
#x00
#x00
702 #x00
#x00
#x00
#x00
#x10
#x38
#x38
#x7C
#x7C
#xFE
#xFE
#x00
#x00
#x00
#x00
#x00
703 #x00
#x00
#x00
#x00
#xFE
#xFE
#x7C
#x7C
#x38
#x38
#x10
#x00
#x00
#x00
#x00
#x00
704 #x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
705 #x00
#x00
#x18
#x3C
#x3C
#x3C
#x18
#x18
#x18
#x00
#x18
#x18
#x00
#x00
#x00
#x00
706 #x00
#x66
#x66
#x66
#x24
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
707 #x00
#x00
#x00
#x6C
#x6C
#xFE
#x6C
#x6C
#x6C
#xFE
#x6C
#x6C
#x00
#x00
#x00
#x00
708 #x18
#x18
#x7C
#xC6
#xC2
#xC0
#x7C
#x06
#x86
#xC6
#x7C
#x18
#x18
#x00
#x00
#x00
709 #x00
#x00
#x00
#x00
#xC2
#xC6
#x0C
#x18
#x30
#x60
#xC6
#x86
#x00
#x00
#x00
#x00
710 #x00
#x00
#x38
#x6C
#x6C
#x38
#x76
#xDC
#xCC
#xCC
#xCC
#x76
#x00
#x00
#x00
#x00
711 #x00
#x30
#x30
#x30
#x60
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
712 #x00
#x00
#x0C
#x18
#x30
#x30
#x30
#x30
#x30
#x30
#x18
#x0C
#x00
#x00
#x00
#x00
713 #x00
#x00
#x30
#x18
#x0C
#x0C
#x0C
#x0C
#x0C
#x0C
#x18
#x30
#x00
#x00
#x00
#x00
714 #x00
#x00
#x00
#x00
#x00
#x66
#x3C
#xFF
#x3C
#x66
#x00
#x00
#x00
#x00
#x00
#x00
715 #x00
#x00
#x00
#x00
#x00
#x18
#x18
#x7E
#x18
#x18
#x00
#x00
#x00
#x00
#x00
#x00
716 #x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x18
#x18
#x18
#x30
#x00
#x00
#x00
717 #x00
#x00
#x00
#x00
#x00
#x00
#x00
#xFE
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
718 #x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x18
#x18
#x00
#x00
#x00
#x00
719 #x00
#x00
#x00
#x00
#x02
#x06
#x0C
#x18
#x30
#x60
#xC0
#x80
#x00
#x00
#x00
#x00
720 #x00
#x00
#x7C
#xC6
#xC6
#xCE
#xD6
#xD6
#xE6
#xC6
#xC6
#x7C
#x00
#x00
#x00
#x00
721 #x00
#x00
#x18
#x38
#x78
#x18
#x18
#x18
#x18
#x18
#x18
#x7E
#x00
#x00
#x00
#x00
722 #x00
#x00
#x7C
#xC6
#x06
#x0C
#x18
#x30
#x60
#xC0
#xC6
#xFE
#x00
#x00
#x00
#x00
723 #x00
#x00
#x7C
#xC6
#x06
#x06
#x3C
#x06
#x06
#x06
#xC6
#x7C
#x00
#x00
#x00
#x00
724 #x00
#x00
#x0C
#x1C
#x3C
#x6C
#xCC
#xFE
#x0C
#x0C
#x0C
#x1E
#x00
#x00
#x00
#x00
725 #x00
#x00
#xFE
#xC0
#xC0
#xC0
#xFC
#x0E
#x06
#x06
#xC6
#x7C
#x00
#x00
#x00
#x00
726 #x00
#x00
#x38
#x60
#xC0
#xC0
#xFC
#xC6
#xC6
#xC6
#xC6
#x7C
#x00
#x00
#x00
#x00
727 #x00
#x00
#xFE
#xC6
#x06
#x06
#x0C
#x18
#x30
#x30
#x30
#x30
#x00
#x00
#x00
#x00
728 #x00
#x00
#x7C
#xC6
#xC6
#xC6
#x7C
#xC6
#xC6
#xC6
#xC6
#x7C
#x00
#x00
#x00
#x00
729 #x00
#x00
#x7C
#xC6
#xC6
#xC6
#x7E
#x06
#x06
#x06
#x0C
#x78
#x00
#x00
#x00
#x00
730 #x00
#x00
#x00
#x00
#x18
#x18
#x00
#x00
#x00
#x18
#x18
#x00
#x00
#x00
#x00
#x00
731 #x00
#x00
#x00
#x00
#x18
#x18
#x00
#x00
#x00
#x18
#x18
#x30
#x00
#x00
#x00
#x00
732 #x00
#x00
#x00
#x06
#x0C
#x18
#x30
#x60
#x30
#x18
#x0C
#x06
#x00
#x00
#x00
#x00
733 #x00
#x00
#x00
#x00
#x00
#x00
#xFE
#x00
#x00
#xFE
#x00
#x00
#x00
#x00
#x00
#x00
734 #x00
#x00
#x00
#x60
#x30
#x18
#x0C
#x06
#x0C
#x18
#x30
#x60
#x00
#x00
#x00
#x00
735 #x00
#x00
#x7C
#xC6
#xC6
#x0C
#x18
#x18
#x18
#x00
#x18
#x18
#x00
#x00
#x00
#x00
736 #x00
#x00
#x00
#x7C
#xC6
#xC6
#xDE
#xDE
#xDE
#xDC
#xC0
#x7C
#x00
#x00
#x00
#x00
737 #x00
#x00
#x10
#x38
#x6C
#xC6
#xC6
#xFE
#xC6
#xC6
#xC6
#xC6
#x00
#x00
#x00
#x00
738 #x00
#x00
#xFC
#x66
#x66
#x66
#x7C
#x66
#x66
#x66
#x66
#xFC
#x00
#x00
#x00
#x00
739 #x00
#x00
#x3C
#x66
#xC2
#xC0
#xC0
#xC0
#xC0
#xC2
#x66
#x3C
#x00
#x00
#x00
#x00
740 #x00
#x00
#xF8
#x6C
#x66
#x66
#x66
#x66
#x66
#x66
#x6C
#xF8
#x00
#x00
#x00
#x00
741 #x00
#x00
#xFE
#x66
#x62
#x68
#x78
#x68
#x60
#x62
#x66
#xFE
#x00
#x00
#x00
#x00
742 #x00
#x00
#xFE
#x66
#x62
#x68
#x78
#x68
#x60
#x60
#x60
#xF0
#x00
#x00
#x00
#x00
743 #x00
#x00
#x3C
#x66
#xC2
#xC0
#xC0
#xDE
#xC6
#xC6
#x66
#x3A
#x00
#x00
#x00
#x00
744 #x00
#x00
#xC6
#xC6
#xC6
#xC6
#xFE
#xC6
#xC6
#xC6
#xC6
#xC6
#x00
#x00
#x00
#x00
745 #x00
#x00
#x3C
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x3C
#x00
#x00
#x00
#x00
746 #x00
#x00
#x1E
#x0C
#x0C
#x0C
#x0C
#x0C
#xCC
#xCC
#xCC
#x78
#x00
#x00
#x00
#x00
747 #x00
#x00
#xE6
#x66
#x6C
#x6C
#x78
#x78
#x6C
#x66
#x66
#xE6
#x00
#x00
#x00
#x00
748 #x00
#x00
#xF0
#x60
#x60
#x60
#x60
#x60
#x60
#x62
#x66
#xFE
#x00
#x00
#x00
#x00
749 #x00
#x00
#xC6
#xEE
#xFE
#xFE
#xD6
#xC6
#xC6
#xC6
#xC6
#xC6
#x00
#x00
#x00
#x00
750 #x00
#x00
#xC6
#xE6
#xF6
#xFE
#xDE
#xCE
#xC6
#xC6
#xC6
#xC6
#x00
#x00
#x00
#x00
751 #x00
#x00
#x38
#x6C
#xC6
#xC6
#xC6
#xC6
#xC6
#xC6
#x6C
#x38
#x00
#x00
#x00
#x00
752 #x00
#x00
#xFC
#x66
#x66
#x66
#x7C
#x60
#x60
#x60
#x60
#xF0
#x00
#x00
#x00
#x00
753 #x00
#x00
#x7C
#xC6
#xC6
#xC6
#xC6
#xC6
#xC6
#xD6
#xDE
#x7C
#x0C
#x0E
#x00
#x00
754 #x00
#x00
#xFC
#x66
#x66
#x66
#x7C
#x6C
#x66
#x66
#x66
#xE6
#x00
#x00
#x00
#x00
755 #x00
#x00
#x7C
#xC6
#xC6
#x60
#x38
#x0C
#x06
#xC6
#xC6
#x7C
#x00
#x00
#x00
#x00
756 #x00
#x00
#x7E
#x7E
#x5A
#x18
#x18
#x18
#x18
#x18
#x18
#x3C
#x00
#x00
#x00
#x00
757 #x00
#x00
#xC6
#xC6
#xC6
#xC6
#xC6
#xC6
#xC6
#xC6
#xC6
#x7C
#x00
#x00
#x00
#x00
758 #x00
#x00
#xC6
#xC6
#xC6
#xC6
#xC6
#xC6
#xC6
#x6C
#x38
#x10
#x00
#x00
#x00
#x00
759 #x00
#x00
#xC6
#xC6
#xC6
#xC6
#xC6
#xD6
#xD6
#xFE
#x6C
#x6C
#x00
#x00
#x00
#x00
760 #x00
#x00
#xC6
#xC6
#x6C
#x6C
#x38
#x38
#x6C
#x6C
#xC6
#xC6
#x00
#x00
#x00
#x00
761 #x00
#x00
#x66
#x66
#x66
#x66
#x3C
#x18
#x18
#x18
#x18
#x3C
#x00
#x00
#x00
#x00
762 #x00
#x00
#xFE
#xC6
#x86
#x0C
#x18
#x30
#x60
#xC2
#xC6
#xFE
#x00
#x00
#x00
#x00
763 #x00
#x00
#x3C
#x30
#x30
#x30
#x30
#x30
#x30
#x30
#x30
#x3C
#x00
#x00
#x00
#x00
764 #x00
#x00
#x00
#x80
#xC0
#xE0
#x70
#x38
#x1C
#x0E
#x06
#x02
#x00
#x00
#x00
#x00
765 #x00
#x00
#x3C
#x0C
#x0C
#x0C
#x0C
#x0C
#x0C
#x0C
#x0C
#x3C
#x00
#x00
#x00
#x00
766 #x10
#x38
#x6C
#xC6
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
767 #x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#xFF
#x00
#x00
768 #x30
#x30
#x18
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
769 #x00
#x00
#x00
#x00
#x00
#x78
#x0C
#x7C
#xCC
#xCC
#xCC
#x76
#x00
#x00
#x00
#x00
770 #x00
#x00
#xE0
#x60
#x60
#x78
#x6C
#x66
#x66
#x66
#x66
#xDC
#x00
#x00
#x00
#x00
771 #x00
#x00
#x00
#x00
#x00
#x7C
#xC6
#xC0
#xC0
#xC0
#xC6
#x7C
#x00
#x00
#x00
#x00
772 #x00
#x00
#x1C
#x0C
#x0C
#x3C
#x6C
#xCC
#xCC
#xCC
#xCC
#x76
#x00
#x00
#x00
#x00
773 #x00
#x00
#x00
#x00
#x00
#x7C
#xC6
#xFE
#xC0
#xC0
#xC6
#x7C
#x00
#x00
#x00
#x00
774 #x00
#x00
#x38
#x6C
#x64
#x60
#xF0
#x60
#x60
#x60
#x60
#xF0
#x00
#x00
#x00
#x00
775 #x00
#x00
#x00
#x00
#x00
#x76
#xCC
#xCC
#xCC
#xCC
#xCC
#x7C
#x0C
#xCC
#x78
#x00
776 #x00
#x00
#xE0
#x60
#x60
#x6C
#x76
#x66
#x66
#x66
#x66
#xE6
#x00
#x00
#x00
#x00
777 #x00
#x00
#x18
#x18
#x00
#x38
#x18
#x18
#x18
#x18
#x18
#x3C
#x00
#x00
#x00
#x00
778 #x00
#x00
#x06
#x06
#x00
#x0E
#x06
#x06
#x06
#x06
#x06
#x06
#x66
#x66
#x3C
#x00
779 #x00
#x00
#xE0
#x60
#x60
#x66
#x6C
#x78
#x78
#x6C
#x66
#xE6
#x00
#x00
#x00
#x00
780 #x00
#x00
#x38
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x3C
#x00
#x00
#x00
#x00
781 #x00
#x00
#x00
#x00
#x00
#xEC
#xFE
#xD6
#xD6
#xD6
#xD6
#xD6
#x00
#x00
#x00
#x00
782 #x00
#x00
#x00
#x00
#x00
#xDC
#x66
#x66
#x66
#x66
#x66
#x66
#x00
#x00
#x00
#x00
783 #x00
#x00
#x00
#x00
#x00
#x7C
#xC6
#xC6
#xC6
#xC6
#xC6
#x7C
#x00
#x00
#x00
#x00
784 #x00
#x00
#x00
#x00
#x00
#xDC
#x66
#x66
#x66
#x66
#x66
#x7C
#x60
#x60
#xF0
#x00
785 #x00
#x00
#x00
#x00
#x00
#x76
#xCC
#xCC
#xCC
#xCC
#xCC
#x7C
#x0C
#x0C
#x1E
#x00
786 #x00
#x00
#x00
#x00
#x00
#xDC
#x76
#x62
#x60
#x60
#x60
#xF0
#x00
#x00
#x00
#x00
787 #x00
#x00
#x00
#x00
#x00
#x7C
#xC6
#x60
#x38
#x0C
#xC6
#x7C
#x00
#x00
#x00
#x00
788 #x00
#x00
#x10
#x30
#x30
#xFC
#x30
#x30
#x30
#x30
#x36
#x1C
#x00
#x00
#x00
#x00
789 #x00
#x00
#x00
#x00
#x00
#xCC
#xCC
#xCC
#xCC
#xCC
#xCC
#x76
#x00
#x00
#x00
#x00
790 #x00
#x00
#x00
#x00
#x00
#x66
#x66
#x66
#x66
#x66
#x3C
#x18
#x00
#x00
#x00
#x00
791 #x00
#x00
#x00
#x00
#x00
#xC6
#xC6
#xC6
#xD6
#xD6
#xFE
#x6C
#x00
#x00
#x00
#x00
792 #x00
#x00
#x00
#x00
#x00
#xC6
#x6C
#x38
#x38
#x38
#x6C
#xC6
#x00
#x00
#x00
#x00
793 #x00
#x00
#x00
#x00
#x00
#xC6
#xC6
#xC6
#xC6
#xC6
#xC6
#x7E
#x06
#x0C
#xF8
#x00
794 #x00
#x00
#x00
#x00
#x00
#xFE
#xCC
#x18
#x30
#x60
#xC6
#xFE
#x00
#x00
#x00
#x00
795 #x00
#x00
#x0E
#x18
#x18
#x18
#x70
#x18
#x18
#x18
#x18
#x0E
#x00
#x00
#x00
#x00
796 #x00
#x00
#x18
#x18
#x18
#x18
#x00
#x18
#x18
#x18
#x18
#x18
#x00
#x00
#x00
#x00
797 #x00
#x00
#x70
#x18
#x18
#x18
#x0E
#x18
#x18
#x18
#x18
#x70
#x00
#x00
#x00
#x00
798 #x00
#x00
#x76
#xDC
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
799 #x00
#x00
#x00
#x00
#x10
#x38
#x6C
#xC6
#xC6
#xC6
#xFE
#x00
#x00
#x00
#x00
#x00
800 #x00
#x00
#x3C
#x66
#xC2
#xC0
#xC0
#xC0
#xC2
#x66
#x3C
#x0C
#x06
#x7C
#x00
#x00
801 #x00
#x00
#xCC
#xCC
#x00
#xCC
#xCC
#xCC
#xCC
#xCC
#xCC
#x76
#x00
#x00
#x00
#x00
802 #x00
#x0C
#x18
#x30
#x00
#x7C
#xC6
#xFE
#xC0
#xC0
#xC6
#x7C
#x00
#x00
#x00
#x00
803 #x00
#x10
#x38
#x6C
#x00
#x78
#x0C
#x7C
#xCC
#xCC
#xCC
#x76
#x00
#x00
#x00
#x00
804 #x00
#x00
#xCC
#xCC
#x00
#x78
#x0C
#x7C
#xCC
#xCC
#xCC
#x76
#x00
#x00
#x00
#x00
805 #x00
#x60
#x30
#x18
#x00
#x78
#x0C
#x7C
#xCC
#xCC
#xCC
#x76
#x00
#x00
#x00
#x00
806 #x00
#x38
#x6C
#x38
#x00
#x78
#x0C
#x7C
#xCC
#xCC
#xCC
#x76
#x00
#x00
#x00
#x00
807 #x00
#x00
#x00
#x00
#x3C
#x66
#x60
#x60
#x66
#x3C
#x0C
#x06
#x3C
#x00
#x00
#x00
808 #x00
#x10
#x38
#x6C
#x00
#x7C
#xC6
#xFE
#xC0
#xC0
#xC6
#x7C
#x00
#x00
#x00
#x00
809 #x00
#x00
#xC6
#xC6
#x00
#x7C
#xC6
#xFE
#xC0
#xC0
#xC6
#x7C
#x00
#x00
#x00
#x00
810 #x00
#x60
#x30
#x18
#x00
#x7C
#xC6
#xFE
#xC0
#xC0
#xC6
#x7C
#x00
#x00
#x00
#x00
811 #x00
#x00
#x66
#x66
#x00
#x38
#x18
#x18
#x18
#x18
#x18
#x3C
#x00
#x00
#x00
#x00
812 #x00
#x18
#x3C
#x66
#x00
#x38
#x18
#x18
#x18
#x18
#x18
#x3C
#x00
#x00
#x00
#x00
813 #x00
#x60
#x30
#x18
#x00
#x38
#x18
#x18
#x18
#x18
#x18
#x3C
#x00
#x00
#x00
#x00
814 #x00
#xC6
#xC6
#x10
#x38
#x6C
#xC6
#xC6
#xFE
#xC6
#xC6
#xC6
#x00
#x00
#x00
#x00
815 #x38
#x6C
#x38
#x00
#x38
#x6C
#xC6
#xC6
#xFE
#xC6
#xC6
#xC6
#x00
#x00
#x00
#x00
816 #x18
#x30
#x60
#x00
#xFE
#x66
#x60
#x7C
#x60
#x60
#x66
#xFE
#x00
#x00
#x00
#x00
817 #x00
#x00
#x00
#x00
#x00
#xCC
#x76
#x36
#x7E
#xD8
#xD8
#x6E
#x00
#x00
#x00
#x00
818 #x00
#x00
#x3E
#x6C
#xCC
#xCC
#xFE
#xCC
#xCC
#xCC
#xCC
#xCE
#x00
#x00
#x00
#x00
819 #x00
#x10
#x38
#x6C
#x00
#x7C
#xC6
#xC6
#xC6
#xC6
#xC6
#x7C
#x00
#x00
#x00
#x00
820 #x00
#x00
#xC6
#xC6
#x00
#x7C
#xC6
#xC6
#xC6
#xC6
#xC6
#x7C
#x00
#x00
#x00
#x00
821 #x00
#x60
#x30
#x18
#x00
#x7C
#xC6
#xC6
#xC6
#xC6
#xC6
#x7C
#x00
#x00
#x00
#x00
822 #x00
#x30
#x78
#xCC
#x00
#xCC
#xCC
#xCC
#xCC
#xCC
#xCC
#x76
#x00
#x00
#x00
#x00
823 #x00
#x60
#x30
#x18
#x00
#xCC
#xCC
#xCC
#xCC
#xCC
#xCC
#x76
#x00
#x00
#x00
#x00
824 #x00
#x00
#xC6
#xC6
#x00
#xC6
#xC6
#xC6
#xC6
#xC6
#xC6
#x7E
#x06
#x0C
#x78
#x00
825 #x00
#xC6
#xC6
#x00
#x38
#x6C
#xC6
#xC6
#xC6
#xC6
#x6C
#x38
#x00
#x00
#x00
#x00
826 #x00
#xC6
#xC6
#x00
#xC6
#xC6
#xC6
#xC6
#xC6
#xC6
#xC6
#x7C
#x00
#x00
#x00
#x00
827 #x00
#x18
#x18
#x3C
#x66
#x60
#x60
#x60
#x66
#x3C
#x18
#x18
#x00
#x00
#x00
#x00
828 #x00
#x38
#x6C
#x64
#x60
#xF0
#x60
#x60
#x60
#x60
#xE6
#xFC
#x00
#x00
#x00
#x00
829 #x00
#x00
#x66
#x66
#x3C
#x18
#x7E
#x18
#x7E
#x18
#x18
#x18
#x00
#x00
#x00
#x00
830 #x00
#xF8
#xCC
#xCC
#xF8
#xC4
#xCC
#xDE
#xCC
#xCC
#xCC
#xC6
#x00
#x00
#x00
#x00
831 #x00
#x0E
#x1B
#x18
#x18
#x18
#x7E
#x18
#x18
#x18
#x18
#x18
#xD8
#x70
#x00
#x00
832 #x00
#x18
#x30
#x60
#x00
#x78
#x0C
#x7C
#xCC
#xCC
#xCC
#x76
#x00
#x00
#x00
#x00
833 #x00
#x0C
#x18
#x30
#x00
#x38
#x18
#x18
#x18
#x18
#x18
#x3C
#x00
#x00
#x00
#x00
834 #x00
#x18
#x30
#x60
#x00
#x7C
#xC6
#xC6
#xC6
#xC6
#xC6
#x7C
#x00
#x00
#x00
#x00
835 #x00
#x18
#x30
#x60
#x00
#xCC
#xCC
#xCC
#xCC
#xCC
#xCC
#x76
#x00
#x00
#x00
#x00
836 #x00
#x00
#x76
#xDC
#x00
#xDC
#x66
#x66
#x66
#x66
#x66
#x66
#x00
#x00
#x00
#x00
837 #x76
#xDC
#x00
#xC6
#xE6
#xF6
#xFE
#xDE
#xCE
#xC6
#xC6
#xC6
#x00
#x00
#x00
#x00
838 #x00
#x3C
#x6C
#x6C
#x3E
#x00
#x7E
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
839 #x00
#x38
#x6C
#x6C
#x38
#x00
#x7C
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
840 #x00
#x00
#x30
#x30
#x00
#x30
#x30
#x60
#xC0
#xC6
#xC6
#x7C
#x00
#x00
#x00
#x00
841 #x00
#x00
#x00
#x00
#x00
#x00
#xFE
#xC0
#xC0
#xC0
#xC0
#x00
#x00
#x00
#x00
#x00
842 #x00
#x00
#x00
#x00
#x00
#x00
#xFE
#x06
#x06
#x06
#x06
#x00
#x00
#x00
#x00
#x00
843 #x00
#xC0
#xC0
#xC2
#xC6
#xCC
#x18
#x30
#x60
#xCE
#x93
#x06
#x0C
#x1F
#x00
#x00
844 #x00
#xC0
#xC0
#xC2
#xC6
#xCC
#x18
#x30
#x66
#xCE
#x9A
#x3F
#x06
#x0F
#x00
#x00
845 #x00
#x00
#x18
#x18
#x00
#x18
#x18
#x18
#x3C
#x3C
#x3C
#x18
#x00
#x00
#x00
#x00
846 #x00
#x00
#x00
#x00
#x00
#x33
#x66
#xCC
#x66
#x33
#x00
#x00
#x00
#x00
#x00
#x00
847 #x00
#x00
#x00
#x00
#x00
#xCC
#x66
#x33
#x66
#xCC
#x00
#x00
#x00
#x00
#x00
#x00
848 #x11
#x44
#x11
#x44
#x11
#x44
#x11
#x44
#x11
#x44
#x11
#x44
#x11
#x44
#x11
#x44
849 #x55
#xAA
#x55
#xAA
#x55
#xAA
#x55
#xAA
#x55
#xAA
#x55
#xAA
#x55
#xAA
#x55
#xAA
850 #xDD
#x77
#xDD
#x77
#xDD
#x77
#xDD
#x77
#xDD
#x77
#xDD
#x77
#xDD
#x77
#xDD
#x77
851 #x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
852 #x18
#x18
#x18
#x18
#x18
#x18
#x18
#xF8
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
853 #x18
#x18
#x18
#x18
#x18
#xF8
#x18
#xF8
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
854 #x36
#x36
#x36
#x36
#x36
#x36
#x36
#xF6
#x36
#x36
#x36
#x36
#x36
#x36
#x36
#x36
855 #x00
#x00
#x00
#x00
#x00
#x00
#x00
#xFE
#x36
#x36
#x36
#x36
#x36
#x36
#x36
#x36
856 #x00
#x00
#x00
#x00
#x00
#xF8
#x18
#xF8
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
857 #x36
#x36
#x36
#x36
#x36
#xF6
#x06
#xF6
#x36
#x36
#x36
#x36
#x36
#x36
#x36
#x36
858 #x36
#x36
#x36
#x36
#x36
#x36
#x36
#x36
#x36
#x36
#x36
#x36
#x36
#x36
#x36
#x36
859 #x00
#x00
#x00
#x00
#x00
#xFE
#x06
#xF6
#x36
#x36
#x36
#x36
#x36
#x36
#x36
#x36
860 #x36
#x36
#x36
#x36
#x36
#xF6
#x06
#xFE
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
861 #x36
#x36
#x36
#x36
#x36
#x36
#x36
#xFE
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
862 #x18
#x18
#x18
#x18
#x18
#xF8
#x18
#xF8
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
863 #x00
#x00
#x00
#x00
#x00
#x00
#x00
#xF8
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
864 #x18
#x18
#x18
#x18
#x18
#x18
#x18
#x1F
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
865 #x18
#x18
#x18
#x18
#x18
#x18
#x18
#xFF
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
866 #x00
#x00
#x00
#x00
#x00
#x00
#x00
#xFF
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
867 #x18
#x18
#x18
#x18
#x18
#x18
#x18
#x1F
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
868 #x00
#x00
#x00
#x00
#x00
#x00
#x00
#xFF
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
869 #x18
#x18
#x18
#x18
#x18
#x18
#x18
#xFF
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
870 #x18
#x18
#x18
#x18
#x18
#x1F
#x18
#x1F
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
871 #x36
#x36
#x36
#x36
#x36
#x36
#x36
#x37
#x36
#x36
#x36
#x36
#x36
#x36
#x36
#x36
872 #x36
#x36
#x36
#x36
#x36
#x37
#x30
#x3F
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
873 #x00
#x00
#x00
#x00
#x00
#x3F
#x30
#x37
#x36
#x36
#x36
#x36
#x36
#x36
#x36
#x36
874 #x36
#x36
#x36
#x36
#x36
#xF7
#x00
#xFF
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
875 #x00
#x00
#x00
#x00
#x00
#xFF
#x00
#xF7
#x36
#x36
#x36
#x36
#x36
#x36
#x36
#x36
876 #x36
#x36
#x36
#x36
#x36
#x37
#x30
#x37
#x36
#x36
#x36
#x36
#x36
#x36
#x36
#x36
877 #x00
#x00
#x00
#x00
#x00
#xFF
#x00
#xFF
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
878 #x36
#x36
#x36
#x36
#x36
#xF7
#x00
#xF7
#x36
#x36
#x36
#x36
#x36
#x36
#x36
#x36
879 #x18
#x18
#x18
#x18
#x18
#xFF
#x00
#xFF
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
880 #x36
#x36
#x36
#x36
#x36
#x36
#x36
#xFF
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
881 #x00
#x00
#x00
#x00
#x00
#xFF
#x00
#xFF
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
882 #x00
#x00
#x00
#x00
#x00
#x00
#x00
#xFF
#x36
#x36
#x36
#x36
#x36
#x36
#x36
#x36
883 #x36
#x36
#x36
#x36
#x36
#x36
#x36
#x3F
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
884 #x18
#x18
#x18
#x18
#x18
#x1F
#x18
#x1F
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
885 #x00
#x00
#x00
#x00
#x00
#x1F
#x18
#x1F
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
886 #x00
#x00
#x00
#x00
#x00
#x00
#x00
#x3F
#x36
#x36
#x36
#x36
#x36
#x36
#x36
#x36
887 #x36
#x36
#x36
#x36
#x36
#x36
#x36
#xFF
#x36
#x36
#x36
#x36
#x36
#x36
#x36
#x36
888 #x18
#x18
#x18
#x18
#x18
#xFF
#x18
#xFF
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
889 #x18
#x18
#x18
#x18
#x18
#x18
#x18
#xF8
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
890 #x00
#x00
#x00
#x00
#x00
#x00
#x00
#x1F
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
891 #xFF
#xFF
#xFF
#xFF
#xFF
#xFF
#xFF
#xFF
#xFF
#xFF
#xFF
#xFF
#xFF
#xFF
#xFF
#xFF
892 #x00
#x00
#x00
#x00
#x00
#x00
#x00
#xFF
#xFF
#xFF
#xFF
#xFF
#xFF
#xFF
#xFF
#xFF
893 #xF0
#xF0
#xF0
#xF0
#xF0
#xF0
#xF0
#xF0
#xF0
#xF0
#xF0
#xF0
#xF0
#xF0
#xF0
#xF0
894 #x0F
#x0F
#x0F
#x0F
#x0F
#x0F
#x0F
#x0F
#x0F
#x0F
#x0F
#x0F
#x0F
#x0F
#x0F
#x0F
895 #xFF
#xFF
#xFF
#xFF
#xFF
#xFF
#xFF
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
896 #x00
#x00
#x00
#x00
#x00
#x76
#xDC
#xD8
#xD8
#xD8
#xDC
#x76
#x00
#x00
#x00
#x00
897 #x00
#x00
#x00
#x00
#x00
#xFC
#xC6
#xFC
#xC6
#xC6
#xFC
#xC0
#xC0
#xC0
#x00
#x00
898 #x00
#x00
#xFE
#xC6
#xC6
#xC0
#xC0
#xC0
#xC0
#xC0
#xC0
#xC0
#x00
#x00
#x00
#x00
899 #x00
#x00
#x00
#x00
#x80
#xFE
#x6C
#x6C
#x6C
#x6C
#x6C
#x6C
#x00
#x00
#x00
#x00
900 #x00
#x00
#x00
#xFE
#xC6
#x60
#x30
#x18
#x30
#x60
#xC6
#xFE
#x00
#x00
#x00
#x00
901 #x00
#x00
#x00
#x00
#x00
#x7E
#xD8
#xD8
#xD8
#xD8
#xD8
#x70
#x00
#x00
#x00
#x00
902 #x00
#x00
#x00
#x00
#x66
#x66
#x66
#x66
#x66
#x7C
#x60
#x60
#xC0
#x00
#x00
#x00
903 #x00
#x00
#x00
#x00
#x76
#xDC
#x18
#x18
#x18
#x18
#x18
#x18
#x00
#x00
#x00
#x00
904 #x00
#x00
#x00
#x7E
#x18
#x3C
#x66
#x66
#x66
#x3C
#x18
#x7E
#x00
#x00
#x00
#x00
905 #x00
#x00
#x00
#x38
#x6C
#xC6
#xC6
#xFE
#xC6
#xC6
#x6C
#x38
#x00
#x00
#x00
#x00
906 #x00
#x00
#x38
#x6C
#xC6
#xC6
#xC6
#x6C
#x6C
#x6C
#x6C
#xEE
#x00
#x00
#x00
#x00
907 #x00
#x00
#x1E
#x30
#x18
#x0C
#x3E
#x66
#x66
#x66
#x66
#x3C
#x00
#x00
#x00
#x00
908 #x00
#x00
#x00
#x00
#x00
#x7E
#xDB
#xDB
#xDB
#x7E
#x00
#x00
#x00
#x00
#x00
#x00
909 #x00
#x00
#x00
#x03
#x06
#x7E
#xCF
#xDB
#xF3
#x7E
#x60
#xC0
#x00
#x00
#x00
#x00
910 #x00
#x00
#x1C
#x30
#x60
#x60
#x7C
#x60
#x60
#x60
#x30
#x1C
#x00
#x00
#x00
#x00
911 #x00
#x00
#x00
#x7C
#xC6
#xC6
#xC6
#xC6
#xC6
#xC6
#xC6
#xC6
#x00
#x00
#x00
#x00
912 #x00
#x00
#x00
#x00
#xFE
#x00
#x00
#xFE
#x00
#x00
#xFE
#x00
#x00
#x00
#x00
#x00
913 #x00
#x00
#x00
#x00
#x18
#x18
#x7E
#x18
#x18
#x00
#x00
#xFF
#x00
#x00
#x00
#x00
914 #x00
#x00
#x00
#x30
#x18
#x0C
#x06
#x0C
#x18
#x30
#x00
#x7E
#x00
#x00
#x00
#x00
915 #x00
#x00
#x00
#x0C
#x18
#x30
#x60
#x30
#x18
#x0C
#x00
#x7E
#x00
#x00
#x00
#x00
916 #x00
#x00
#x0E
#x1B
#x1B
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
917 #x18
#x18
#x18
#x18
#x18
#x18
#x18
#x18
#xD8
#xD8
#xD8
#x70
#x00
#x00
#x00
#x00
918 #x00
#x00
#x00
#x00
#x18
#x18
#x00
#x7E
#x00
#x18
#x18
#x00
#x00
#x00
#x00
#x00
919 #x00
#x00
#x00
#x00
#x00
#x76
#xDC
#x00
#x76
#xDC
#x00
#x00
#x00
#x00
#x00
#x00
920 #x00
#x38
#x6C
#x6C
#x38
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
921 #x00
#x00
#x00
#x00
#x00
#x00
#x00
#x18
#x18
#x00
#x00
#x00
#x00
#x00
#x00
#x00
922 #x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x18
#x00
#x00
#x00
#x00
#x00
#x00
#x00
923 #x00
#x0F
#x0C
#x0C
#x0C
#x0C
#x0C
#xEC
#x6C
#x6C
#x3C
#x1C
#x00
#x00
#x00
#x00
924 #x00
#xD8
#x6C
#x6C
#x6C
#x6C
#x6C
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
925 #x00
#x70
#x98
#x30
#x60
#xC8
#xF8
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
926 #x00
#x00
#x00
#x00
#x7C
#x7C
#x7C
#x7C
#x7C
#x7C
#x7C
#x00
#x00
#x00
#x00
#x00
927 #x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
#x00
})
930 ;; run-length compressed: color count color count ...
931 (defvar *vga-g-splash
*
932 #{7 255 7 255 7 255 7 255 7 255 7 255 7 255 7 35 0 3 7 255 7 58 0 4 7 255 7 58 0
933 1 4 1 0 0 7 255 7 57 0 1 4 2 0 0 7 255 7 57 0 1 4 2 0 0 1 6 7 255 7 50 0 1 4 2
934 0 0 1 16 7 255 7 40 0 0 4 2 0 0 1 21 7 255 7 35 0 1 4 2 0 0 1 2 7 1 1 8 7 1 1
935 9 7 255 7 31 0 1 4 2 0 0 1 2 7 1 1 8 7 1 1 11 7 255 7 29 0 1 4 1 0 1 1 1 7 2 1
936 8 7 1 1 2 7 4 1 5 7 255 7 26 0 1 4 2 0 0 1 2 7 1 1 8 7 2 1 1 7 7 1 5 7 255 7
937 24 0 1 4 2 0 0 1 2 7 1 1 8 7 2 1 1 7 2 1 0 7 4 1 5 7 255 7 23 0 1 4 1 0 1 1 2
938 7 1 1 8 7 1 1 1 7 2 1 3 7 3 1 5 7 255 7 22 0 0 4 2 0 0 1 2 7 2 1 8 7 1 1 1 7 2
939 1 5 7 2 1 5 7 255 7 20 0 1 4 2 0 0 1 2 7 1 1 9 7 1 1 2 7 1 1 6 7 1 1 6 7 255 7
940 19 0 1 4 2 0 0 1 2 7 1 1 8 7 2 1 2 7 2 1 15 7 255 7 18 0 1 4 1 0 1 1 1 7 2 1 8
941 7 2 1 3 7 3 1 7 7 2 1 2 7 255 7 17 0 1 4 2 0 0 1 2 7 1 1 9 7 1 1 5 7 4 1 4 7 4
942 1 2 7 255 7 16 0 1 4 2 0 0 1 2 7 1 1 9 7 1 1 6 7 4 1 3 7 5 1 2 7 255 7 15 0 1
943 4 1 0 1 1 2 7 1 1 9 7 1 1 8 7 3 1 2 7 1 1 0 7 3 1 2 7 255 7 14 0 0 4 2 0 0 1 2
944 7 2 1 9 7 1 1 10 7 2 1 1 7 1 1 1 7 2 1 3 7 255 7 12 0 1 4 2 0 0 1 2 7 1 1 9 7
945 2 1 1 7 1 1 6 7 2 1 0 7 2 1 2 7 2 1 2 7 255 7 12 0 1 4 2 0 0 1 2 7 1 1 4 7 1 1
946 2 7 2 1 1 7 2 1 5 7 2 1 0 7 2 1 3 7 1 1 4 7 255 7 10 0 1 4 1 0 1 1 2 7 9 1 1 7
947 1 1 3 7 3 1 3 7 2 1 0 7 2 1 3 7 2 1 4 7 255 7 8 0 1 4 2 0 0 1 2 7 9 1 9 7 4 1
948 0 7 2 1 1 7 3 1 2 7 2 1 5 7 255 7 7 0 1 4 2 0 0 1 23 7 7 1 1 7 8 1 8 7 255 7 5
949 0 1 4 1 0 1 1 25 7 4 1 1 7 2 1 0 7 5 1 9 7 255 7 4 0 0 4 2 0 1 1 13 7 7 1 10 7
950 2 1 2 7 2 1 12 7 255 7 1 0 1 4 2 0 1 7 1 1 4 7 16 1 8 7 2 1 20 7 255 0 1 4 2 0
951 0 7 25 1 7 7 1 1 23 7 253 0 1 4 1 0 1 7 27 1 5 7 1 1 25 7 251 0 0 4 2 0 1 7 28
952 1 4 7 1 1 23 7 157 0 7 7 86 0 1 4 2 0 1 7 30 1 25 7 159 0 1 7 6 0 0 7 85 0 1 4
953 1 0 1 7 33 1 20 7 157 0 6 7 2 0 2 7 0 0 6 7 79 0 0 4 2 0 1 7 35 1 14 7 159 0 2
954 7 3 0 1 7 1 0 8 7 2 0 3 7 71 2 4 4 2 0 1 7 39 1 4 7 164 0 1 7 7 0 0 7 1 0 4 7
955 8 0 1 7 68 2 6 4 2 0 0 7 210 0 0 7 3 0 1 7 3 0 0 7 1 0 1 7 7 0 3 7 0 0 0 7 65
956 2 8 4 1 0 1 7 209 0 1 7 1 0 11 7 7 0 4 7 0 0 0 7 64 2 10 4 0 0 0 2 0 7 209 0 0
957 7 2 0 4 7 4 0 2 7 7 0 3 7 1 0 0 7 62 2 14 7 208 0 1 7 2 0 3 7 7 0 1 7 0 0 9 7
958 1 0 0 7 61 2 17 7 206 0 0 7 4 0 1 7 3 0 2 7 2 0 1 7 5 0 1 7 3 0 0 7 61 2 17 7
959 206 0 1 7 4 0 0 7 3 0 3 7 0 0 1 7 3 0 2 7 0 0 0 7 3 0 0 7 60 2 19 7 198 2 7 0
960 1 7 3 0 0 7 3 0 3 7 0 0 0 7 4 0 5 7 0 0 2 7 60 2 9 0 0 2 8 7 193 2 13 0 5 7 3
961 0 3 7 0 0 0 7 5 0 1 7 1 0 2 2 0 7 61 2 8 0 1 4 1 2 7 7 187 2 23 0 0 7 3 0 2 7
962 1 0 1 7 7 0 1 2 5 7 57 2 9 0 0 4 2 0 0 2 5 7 184 2 27 0 0 7 9 0 0 7 6 0 1 2 8
963 7 55 2 9 0 0 4 2 0 0 2 5 7 181 2 30 0 1 7 8 0 7 2 11 7 53 2 21 7 178 2 34 0 1
964 7 5 0 1 2 21 7 49 2 22 7 176 2 39 0 6 2 23 7 46 2 23 7 174 2 74 7 43 2 25 7
965 171 2 78 7 40 2 16 0 0 2 10 7 168 2 81 7 37 2 18 0 0 4 2 2 7 7 166 2 83 7 35 2
966 20 0 0 4 2 0 0 2 6 7 164 2 86 7 33 2 20 0 1 4 1 0 1 2 6 7 162 2 88 7 31 2 22 0
967 0 4 2 0 0 2 6 7 161 2 91 7 28 2 24 0 0 4 2 0 0 2 3 7 162 2 94 7 26 2 15 7 9 0
968 0 4 2 0 0 7 165 2 95 7 24 2 15 7 10 0 1 4 1 0 0 7 164 2 98 7 22 2 14 7 12 0 0
969 4 2 0 0 7 163 2 100 7 19 2 14 7 14 0 0 4 2 0 0 7 161 2 61 0 1 2 39 7 17 2 14 7
970 15 0 3 7 161 2 61 0 5 2 38 7 13 2 14 7 182 2 62 0 0 7 0 0 0 7 1 0 3 2 38 7 7 2
971 16 7 182 2 63 0 0 7 0 0 0 7 1 0 0 7 1 0 2 2 60 7 181 2 64 0 3 7 1 0 0 7 1 0 0
972 7 0 0 2 2 57 7 182 2 64 0 0 7 0 0 4 7 0 0 1 7 0 0 0 7 0 0 4 2 51 7 183 2 65 0
973 0 7 0 0 0 7 0 0 2 7 0 0 0 7 1 0 0 7 1 0 0 7 1 0 2 2 48 7 183 2 67 0 1 7 1 0 4
974 7 0 0 0 7 1 0 0 7 1 0 3 2 46 7 183 2 69 0 1 7 0 0 0 7 1 0 4 7 0 0 0 7 1 0 0 7
975 1 0 1 2 44 7 183 2 71 0 2 7 1 0 0 7 1 0 6 7 1 0 0 2 43 7 185 2 72 0 4 7 0 0 1
976 7 0 0 1 7 0 0 4 2 42 7 185 2 76 0 3 7 1 0 0 7 1 0 0 7 1 0 0 2 15 7 1 2 23 7
977 187 2 78 0 4 7 1 0 0 7 0 0 0 2 16 7 6 2 16 7 189 2 82 0 4 2 17 7 15 2 2 7 193
978 2 106 7 212 2 105 7 213 2 105 7 212 2 106 7 212 2 105 7 213 2 105 7 213 2 105
979 7 212 2 105 7 213 2 105 7 213 2 104 7 214 2 103 7 215 2 103 7 214 2 103 7 215
980 2 103 7 215 2 104 7 214 2 104 7 214 2 82 7 10 2 10 7 213 2 81 7 13 2 9 7 213 2
981 36 7 33 2 10 7 13 2 9 7 213 2 26 7 44 2 9 7 13 2 9 7 213 2 13 7 4 2 7 7 44 2 8
982 7 14 2 9 7 213 2 8 7 9 2 7 7 44 2 8 7 14 2 9 7 212 2 8 7 10 2 7 7 44 2 8 7 15
983 2 8 7 212 2 7 7 11 2 7 7 44 2 8 7 15 2 8 7 212 2 7 7 11 2 6 7 45 2 8 7 15 2 8
984 7 212 2 7 7 11 2 6 7 45 2 7 7 16 2 8 7 212 2 6 7 11 2 7 7 45 2 7 7 16 2 8 7
985 211 2 7 7 11 2 7 7 45 2 7 7 16 2 8 7 211 2 7 7 11 2 7 7 45 2 7 7 17 2 8 7 210
986 2 7 7 11 2 7 7 45 2 7 7 17 2 8 7 210 2 6 7 12 2 7 7 45 2 7 7 17 2 8 7 210 2 6
987 7 12 2 6 7 46 2 6 7 18 2 8 7 210 2 6 7 12 2 6 7 46 2 6 7 18 2 8 7 209 2 7 7 12
988 2 6 7 45 2 7 7 18 2 8 7 209 2 6 7 12 2 7 7 45 2 7 7 18 2 8 7 209 2 6 7 12 2 7
989 7 45 2 7 7 19 2 7 7 209 2 6 7 12 2 7 7 45 2 7 7 19 2 7 7 209 2 6 7 12 2 6 7 46
990 2 7 7 19 2 7 7 208 2 7 7 12 2 6 7 46 2 6 7 20 2 7 7 208 2 6 7 13 2 6 7 46 2 6
991 7 20 2 7 7 208 2 6 7 13 2 6 7 46 2 6 7 20 2 7 7 208 2 6 7 13 2 6 7 46 2 6 7 20
992 2 7 7 208 2 6 7 12 2 7 7 46 2 6 7 21 2 7 7 207 2 6 7 12 2 7 7 45 2 7 7 21 2 7
993 7 206 2 6 7 13 2 6 7 46 2 7 7 21 2 7 7 206 2 6 7 13 2 6 7 46 2 6 7 22 2 7 7
994 206 2 6 7 13 2 6 7 46 2 6 7 22 2 7 7 206 2 6 7 13 2 6 7 46 2 6 7 22 2 7 7 206
995 2 6 7 13 2 6 7 46 2 6 7 22 2 7 7 205 2 6 7 14 2 6 7 46 2 6 7 23 2 6 7 205 2 6
996 7 13 2 6 7 47 2 6 7 23 2 6 7 205 2 6 7 13 2 6 7 47 2 6 7 23 2 6 7 205 2 6 7 13
997 2 6 7 47 2 6 7 23 2 6 7 205 2 6 7 13 2 6 7 46 2 7 7 23 2 6 7 205 2 6 7 13 2 6
998 7 46 2 6 7 24 2 6 7 204 2 6 7 14 2 6 7 46 2 6 7 24 2 6 7 201 2 10 7 13 2 6 7
999 46 2 6 7 24 2 6 7 200 2 12 7 9 2 10 7 45 2 6 7 24 2 6 7 200 2 13 7 7 2 12 7 44
1000 2 6 7 24 2 7 7 198 2 15 7 5 2 14 7 43 2 6 7 21 2 11 7 197 2 15 7 5 2 14 7 41 2
1001 9 7 19 2 14 7 195 2 15 7 5 2 14 7 40 2 12 7 17 2 14 7 196 2 14 7 5 2 14 7 39 2
1002 14 7 15 2 16 7 195 2 13 7 6 2 14 7 39 2 14 7 15 2 16 7 197 2 3 7 1 2 4 7 8 2
1003 12 7 40 2 14 7 15 2 16 7 218 2 3 7 2 2 3 7 41 2 14 7 16 2 6 7 1 2 5 7 255 7 16
1004 2 14 7 17 2 4 7 3 2 2 7 255 7 19 2 12 7 255 7 51 2 3 7 1 2 4 7 255 7 255 7 255
1005 7 255 7 255 7 255 7 255 7 255 7 255 7 255 7 255 7 255 7 255 7 208 0 2 7 255 7
1006 50 0 1 7 6 0 3 7 72 0 1 7 230 0 2 7 5 0 4 7 72 0 1 7 1 0 4 7 222 0 3 7 4 0 4 7
1007 72 0 10 7 220 0 3 7 5 0 4 7 71 0 12 7 82 0 1 7 133 0 4 7 4 0 4 7 70 0 6 7 5 0
1008 2 7 80 0 2 7 132 0 4 7 4 0 5 7 69 0 5 7 8 0 1 7 79 0 2 7 132 0 5 7 3 0 2 7 0 0
1009 1 7 70 0 5 7 8 0 1 7 79 0 2 7 132 0 1 7 0 0 1 7 4 0 1 7 0 0 2 7 30 0 1 7 5 0 1
1010 7 29 0 1 7 0 0 1 7 9 0 1 7 78 0 2 7 132 0 1 7 0 0 1 7 4 0 1 7 1 0 1 7 30 0 2 7
1011 4 0 2 7 31 0 2 7 9 0 1 7 78 0 1 7 132 0 1 7 1 0 1 7 3 0 2 7 0 0 1 7 30 0 3 7 4
1012 0 1 7 32 0 1 7 9 0 1 7 78 0 2 7 131 0 2 7 0 0 1 7 4 0 1 7 0 0 2 7 30 0 2 7 4 0
1013 1 7 32 0 2 7 8 0 2 7 77 0 2 7 132 0 1 7 1 0 1 7 3 0 1 7 1 0 1 7 31 0 1 7 4 0 2
1014 7 32 0 2 7 8 0 2 7 77 0 2 7 131 0 1 7 1 0 2 7 2 0 1 7 1 0 2 7 38 0 6 7 27 0 2
1015 7 8 0 2 7 77 0 2 7 131 0 2 7 1 0 1 7 2 0 2 7 1 0 1 7 38 0 7 7 27 0 2 7 6 0 3 7
1016 78 0 2 7 130 0 2 7 1 0 2 7 2 0 1 7 1 0 2 7 36 0 5 7 30 0 2 7 6 0 3 7 78 0 2 7
1017 131 0 1 7 2 0 1 7 2 0 1 7 2 0 1 7 8 0 2 7 23 0 4 7 33 0 2 7 4 0 4 7 5 0 2 7 17
1018 0 1 7 50 0 2 7 130 0 2 7 2 0 1 7 1 0 2 7 2 0 1 7 7 0 4 7 4 0 1 7 2 0 1 7 5 0 1
1019 7 2 0 4 7 4 0 9 7 15 0 5 7 1 0 6 7 5 0 4 7 15 0 2 7 5 0 3 7 7 0 1 7 3 0 2 7 6
1020 0 3 7 7 0 6 7 131 0 1 7 2 0 2 7 1 0 1 7 2 0 2 7 6 0 5 7 4 0 1 7 1 0 2 7 5 0 1
1021 7 4 0 1 7 5 0 9 7 16 0 11 7 6 0 5 7 5 0 1 7 7 0 2 7 4 0 4 7 6 0 2 7 1 0 4 7 5
1022 0 4 7 6 0 6 7 131 0 1 7 3 0 1 7 1 0 1 7 3 0 1 7 6 0 2 7 1 0 1 7 3 0 2 7 1 0 2
1023 7 4 0 1 7 4 0 1 7 11 0 3 7 17 0 9 7 7 0 2 7 1 0 1 7 4 0 2 7 2 0 1 7 2 0 1 7 3
1024 0 2 7 1 0 1 7 6 0 1 7 1 0 3 7 5 0 2 7 1 0 1 7 5 0 1 7 2 0 2 7 130 0 2 7 3 0 1
1025 7 1 0 1 7 2 0 2 7 5 0 2 7 2 0 1 7 3 0 1 7 1 0 2 7 4 0 2 7 3 0 2 7 10 0 3 7 18
1026 0 6 7 9 0 2 7 2 0 1 7 3 0 2 7 2 0 2 7 1 0 2 7 2 0 2 7 2 0 0 7 6 0 1 7 0 0 3 7
1027 4 0 0 7 0 0 2 7 2 0 0 7 5 0 1 7 3 0 1 7 131 0 1 7 3 0 2 7 0 0 1 7 3 0 1 7 5 0
1028 2 7 2 0 1 7 3 0 2 7 1 0 2 7 2 0 0 7 0 0 1 7 4 0 1 7 10 0 2 7 19 0 2 7 13 0 2 7
1029 2 0 1 7 3 0 2 7 2 0 2 7 2 0 2 7 1 0 2 7 2 0 1 7 6 0 0 7 0 0 3 7 2 0 6 7 2 0 1
1030 7 4 0 1 7 3 0 2 7 130 0 2 7 3 0 5 7 2 0 2 7 5 0 1 7 2 0 2 7 3 0 1 7 2 0 2 7 0
1031 0 5 7 3 0 2 7 9 0 2 7 20 0 2 7 13 0 1 7 2 0 2 7 3 0 2 7 2 0 1 7 2 0 2 7 2 0 1
1032 7 2 0 1 7 6 0 12 7 0 0 1 7 2 0 1 7 5 0 1 7 3 0 1 7 131 0 1 7 4 0 1 7 0 0 1 7 3
1033 0 2 7 4 0 1 7 2 0 3 7 2 0 1 7 3 0 5 7 0 0 1 7 4 0 1 7 5 0 0 7 2 0 2 7 20 0 2 7
1034 13 0 1 7 2 0 3 7 2 0 2 7 2 0 2 7 2 0 2 7 1 0 2 7 1 0 1 7 7 0 3 7 0 0 5 7 1 0 2
1035 7 1 0 1 7 5 0 1 7 3 0 2 7 130 0 2 7 4 0 3 7 4 0 1 7 5 0 1 7 3 0 1 7 3 0 1 7 2
1036 0 5 7 0 0 2 7 4 0 1 7 4 0 1 7 1 0 2 7 21 0 2 7 13 0 1 7 3 0 1 7 2 0 2 7 2 0 2
1037 7 2 0 2 7 2 0 1 7 0 0 2 7 3 0 1 7 1 0 3 7 1 0 4 7 2 0 1 7 0 0 2 7 3 0 1 7 0 0
1038 1 7 3 0 2 7 130 0 1 7 5 0 3 7 3 0 2 7 4 0 1 7 3 0 1 7 4 0 0 7 3 0 1 7 4 0 1 7
1039 4 0 1 7 4 0 1 7 1 0 2 7 21 0 2 7 13 0 1 7 3 0 1 7 3 0 2 7 1 0 3 7 2 0 1 7 2 0
1040 5 7 3 0 1 7 2 0 2 7 9 0 5 7 3 0 1 7 0 0 1 7 3 0 2 7 130 0 2 7 5 0 2 7 4 0 2 7
1041 4 0 1 7 2 0 2 7 3 0 1 7 2 0 1 7 4 0 2 7 4 0 1 7 3 0 2 7 0 0 2 7 22 0 2 7 13 0
1042 1 7 2 0 2 7 2 0 2 7 1 0 3 7 2 0 2 7 2 0 3 7 4 0 1 7 2 0 3 7 9 0 3 7 4 0 1 7 1
1043 0 1 7 3 0 2 7 130 0 1 7 14 0 1 7 5 0 1 7 1 0 2 7 4 0 1 7 1 0 1 7 5 0 1 7 5 0 1
1044 7 2 0 2 7 0 0 2 7 22 0 2 7 14 0 1 7 1 0 2 7 3 0 2 7 0 0 1 7 0 0 1 7 1 0 2 7 3
1045 0 1 7 5 0 1 7 3 0 2 7 10 0 1 7 5 0 1 7 2 0 1 7 2 0 3 7 129 0 2 7 13 0 2 7 5 0
1046 5 7 5 0 5 7 5 0 1 7 5 0 1 7 1 0 2 7 1 0 1 7 0 0 5 7 16 0 2 7 14 0 5 7 4 0 4 7
1047 1 0 5 7 4 0 2 7 2 0 2 7 4 0 1 7 11 0 2 7 2 0 2 7 3 0 1 7 1 0 1 7 0 0 1 7 129 0
1048 1 7 14 0 2 7 5 0 4 7 6 0 4 7 5 0 2 7 5 0 5 7 1 0 9 7 16 0 1 7 15 0 4 7 5 0 3 7
1049 2 0 4 7 5 0 7 7 4 0 2 7 11 0 7 7 4 0 5 7 0 0 1 7 128 0 2 7 14 0 2 7 6 0 2 7 8
1050 0 1 7 7 0 1 7 7 0 2 7 3 0 2 7 22 0 2 7 16 0 2 7 7 0 1 7 3 0 3 7 7 0 4 7 6 0 1
1051 7 13 0 4 7 6 0 4 7 1 0 2 7 127 0 1 7 15 0 2 7 28 0 1 7 40 0 2 7 57 0 1 7 26 0
1052 2 7 3 0 1 7 126 0 2 7 15 0 2 7 71 0 1 7 223 0 1 7 17 0 0 7 255 7 255 7 255 7
1053 255 7 255 7 255 7 255 7 255 7 255 7 127
1058 (defun restore-textmode (textmode-state)
1059 (setf (vga-state) textmode-state
)
1060 (ecase (vga-character-height)
1061 (8 (write-font +vga-font-8x8
+ 8))
1062 (16 (write-font +vga-font-8x16
+ 16)))
1065 (defun invoke-debugger-with-textmode (debugger textmode-state condition
)
1066 (let ((interrupted-vga-state (vga-state))
1067 (muerte::*debugger-function
* debugger
))
1068 (restore-textmode textmode-state
)
1070 (invoke-debugger condition
)
1071 (setf (vga-state) interrupted-vga-state
)
1074 (defmacro with-textmode-restored
(options &body body
)
1075 "Reset current VGA textmode after body completes, or debugger is entered."
1076 (declare (ignore options
))
1077 (let ((real-debugger-var (gensym "real-debugger-"))
1078 (vga-state-var (gensym "vga-state-")))
1079 `(let* ((,vga-state-var
1082 muerte
::*debugger-function
*)
1083 (muerte::*debugger-function
*
1085 (invoke-debugger-with-textmode ,real-debugger-var
,vga-state-var c
))))
1088 (restore-textmode ,vga-state-var
)))))
1090 ;; graphics functions below
1095 ;; TODO: This can be optimised through two methods
1096 ;; 1. Either write all of plane 1, then plane 2 etc (plane switches are slow)
1097 ;; 2. Use multiple plane writes at once (see g-clear for idea)
1098 ;; - Probably better because of large areas of the same colour
1099 (defun rle-blit-splash (splash)
1100 (loop with index
= 0
1101 for i from
0 below
(length splash
) by
2
1102 for value
= (aref splash i
)
1103 for count
= (1+ (aref splash
(1+ i
)))
1104 do
(loop repeat count
1105 do
(setf (pixel (mod index
*vga-width
*) ; ugly hackitude :(
1106 (truncate index
*vga-width
*))
1111 ;; show the splash screen
1112 (defun g-show-splash ()
1113 (with-textmode-restored ()
1115 (rle-blit-splash *vga-g-splash
*)
1121 ;; read a pixel from the DISPLAYED page
1123 (memref-int (vga-memory-map)
1124 :index
(+ (* (truncate *vga-width
* 4) y
)
1126 (* (truncate *vga-width
* 2)
1128 (mod (1+ *vga-current-page
*)
1130 :type
:unsigned-byte8
))
1132 ;; set a pixel to a colour of our choice
1133 ;; write to the NEXT page
1134 (defun (setf pixel
) (color x y
)
1136 ((< x
(nth 0 (viewport))))
1137 ((>= x
(nth 1 (viewport))))
1138 ((< y
(nth 2 (viewport))))
1139 ((>= y
(nth 3 (viewport))))
1140 (t (set-plane (logand x
3))
1141 (setf (memref-int (vga-memory-map)
1142 :index
(+ (* (truncate *vga-width
* 4) y
) ; pixel
1144 (* (truncate *vga-width
* 2) ; page
1146 *vga-current-page
*))
1147 :type
:unsigned-byte8
)
1153 ; return the current viewport as a list
1159 ; rectangle is a list of left-bound, right-bound, top-bound, bottom-bound
1160 (defun (setf viewport
) (rectangle)
1161 (setf *vga-viewport
* rectangle
))
1166 ;; set read plane to all (bitmask 1111)
1167 (set-plane-by-bitmask 15)
1168 ;; writing to all 4 planes here thus 1/4 of the bytes
1169 ;; and by writing 16 bits a time we get double plus good optimisation :)
1170 ;; However, we wish to cover four planes, thus four times the memory
1171 (loop for x from
0 below
(* *vga-width
* *vga-height
*)
1172 do
(setf (memref-int (vga-memory-map)
1174 :type
:unsigned-byte16
)
1178 (defun unchain-video-mode ()
1180 (setf (io-port VGA-SEQ-INDEX
:unsigned-byte8
) #x04
)
1181 (setf (io-port VGA-SEQ-DATA
:unsigned-byte8
) #x06
)
1182 ;; disable long mode
1183 (setf (io-port VGA-CRTC-INDEX
:unsigned-byte8
) #x14
)
1184 (setf (io-port VGA-CRTC-DATA
:unsigned-byte8
) #x00
)
1186 (setf (io-port VGA-CRTC-INDEX
:unsigned-byte8
) #x17
)
1187 (setf (io-port VGA-CRTC-DATA
:unsigned-byte8
) #xE3
))
1190 (defun set-page (page)
1191 (setf (io-port VGA-CRTC-INDEX
:unsigned-byte8
) #x0C
)
1192 (setf (io-port VGA-CRTC-DATA
:unsigned-byte8
) (ldb (byte 8 8)
1194 (truncate *vga-width
* 2)
1196 (setf (io-port VGA-CRTC-INDEX
:unsigned-byte8
) #x00
)
1197 (setf (io-port VGA-CRTC-DATA
:unsigned-byte8
) (ldb (byte 8 0)
1199 (truncate *vga-width
* 2)
1203 ;; Simple wrapper to swap pages
1205 (set-page *vga-current-page
*)
1206 (setf *vga-current-page
*
1207 (mod (1+ *vga-current-page
*)
1211 ;; easy way to get into graphics mode
1213 (setf (vga-state) +vga-state-320x200x256-modex
+)
1214 (setf *vga-width
* 320)
1215 (setf *vga-height
* 200)
1216 (setf *vga-page-count
* 2)
1217 (setf *vga-current-page
* 0) ; writing page
1218 (setf (viewport) `(0 ,(1- *vga-width
*) 0 ,(1- *vga-height
*)))
1219 (unchain-video-mode)
1224 ;; draw-line from ch-image
1225 ;; originally written by Cyrus Harmon
1226 ;; modified for movitz by Martin Bealby
1227 (defun draw-line (y0 x0 y1 x1 col
)
1228 (let ((dx (- x1 x0
))
1230 (declare (type fixnum dx dy
))
1231 (let ((absdx (abs dx
))
1233 (declare (type fixnum absdx absdy
))
1234 (let ((xstep (if (minusp dx
) -
1 1))
1235 (ystep (if (minusp dy
) -
1 1)))
1236 (if (>= absdx absdy
)
1237 (let ((d (- (* 2 absdy
) absdx
))
1238 (incr-e (* 2 absdy
))
1239 (incr-ne (* 2 (- absdy absdx
)))
1242 (declare (type fixnum d incr-e incr-ne x y
))
1243 (setf (pixel y x
) col
)
1253 (setf (pixel y x
) col
)))
1254 (let ((d (- (* 2 absdy
) absdx
))
1255 (incr-n (* 2 absdx
))
1256 (incr-ne (* 2 (- absdx absdy
)))
1259 (declare (type fixnum d incr-n incr-ne x y
))
1260 (setf (pixel y x
) col
)
1270 (setf (pixel y x
) col
))))))))
1272 ;; draw-circle from ch-image
1273 ;; originally written by Cyrus Harmon
1274 ;; modified for movitz by Martin Bealby
1275 (defmethod draw-circle (center-y center-x radius col
)
1276 (declare (type fixnum center-y center-x radius
))
1277 (flet ((circle-points (y x col
)
1278 (setf (pixel (+ center-y y
) (+ center-x x
)) col
)
1279 (setf (pixel (+ center-y x
) (+ center-x y
)) col
)
1280 (setf (pixel (- center-y x
) (+ center-x y
)) col
)
1281 (setf (pixel (- center-y y
) (+ center-x x
)) col
)
1282 (setf (pixel (- center-y y
) (- center-x x
)) col
)
1283 (setf (pixel (- center-y x
) (- center-x y
)) col
)
1284 (setf (pixel (+ center-y x
) (- center-x y
)) col
)
1285 (setf (pixel (+ center-y y
) (- center-x x
)) col
)))
1290 (delta-se (+ (* -
2 radius
) 5)))
1291 (declare (type fixnum x y d delta-e delta-se
))
1292 (circle-points y x col
)
1305 (circle-points y x col
)))))
1307 ;; additional drawing functions (rectangle / triangle)
1308 (defmethod draw-rectangle (x1 y1 x2 y2 col
)
1309 (draw-line x1 y1 x1 y2 col
)
1310 (draw-line x1 y1 x2 y1 col
)
1311 (draw-line x1 y2 x2 y2 col
)
1312 (draw-line x2 y1 x2 y2 col
))
1315 (defmethod draw-triangle (x1 y1 x2 y2 x3 y3 col
)
1316 (draw-line x1 y1 x2 y2 col
)
1317 (draw-line x2 y2 x3 y3 col
)
1318 (draw-line x3 y3 x1 y1 col
))