Initial release of the VFD code
[de200vfd.git] / test / vfd.c
blob6f4c8d275ff312742cd9b446ae4c779e437c5b82
1 // ****************************************************************************
2 // vfd.c (C) 1992-2003 Christophe de Dinechin (ddd)
3 // VFD800 project
4 // ****************************************************************************
5 //
6 // File Description:
7 //
8 // Control functions for the VFD800 (Noritake)
9 //
10 //
11 //
12 //
13 //
14 //
15 //
16 //
17 // ****************************************************************************
18 // This document is confidential.
19 // Do not redistribute without written permission
20 // ****************************************************************************
21 // * File : $RCSFile$
22 // * Revision : $Revision$
23 // * Date : $Date$
24 // ****************************************************************************
26 #include "vfd.h"
27 #include <time.h>
28 #include <stdio.h>
29 #include <unistd.h>
30 #include <sys/io.h>
34 // ============================================================================
35 //
36 // High-level functions
37 //
38 // ============================================================================
40 int VFD_Init()
41 // ----------------------------------------------------------------------------
42 // Initialize the VFD
43 // ----------------------------------------------------------------------------
45 int error = 0;
46 int n;
48 if (ioperm(CONTROLPORT,1,1))
50 fprintf(stderr, "Couldn't get the port at %x\n", CONTROLPORT);
51 return 1;
53 if (ioperm(DATAPORT,1,1))
55 fprintf(stderr, "Couldn't get the port at %x\n", DATAPORT);
56 return 1;
59 // Start 800 init sequence
60 VFD_Command (INIT800A);
61 usleep (2 MS);
63 for(n=0;n<8;n++)
65 VFD_Command(INIT800B);
66 usleep (2 MS);
67 VFD_Command(INIT800C(n));
68 usleep (2 MS);
69 VFD_Data(INIT800D);
70 usleep (2 MS);
73 // Initialize for us
74 VFD_EnableScreen(1, 1); // Enable both screens
75 VFD_Command(ORON); // OR both screens
76 VFD_Command(HSHIFT); // Set horizontal shift
77 VFD_Command(0); // = 0
78 VFD_Command(VSHIFT); // Set vertical shift
80 VFD_Command(AUTOINCX); // Auto-increment X by default
81 VFD_Command(SETX); // Set X coordinate
82 VFD_Command(0x0); // to 0
83 VFD_Command(SETY); // Set Y coordinate
84 VFD_Command(0); // to 0
86 return 0;
90 void VFD_EnableScreen(int screen0, int screen1)
91 // ----------------------------------------------------------------------------
92 // Enable the given screen layers
93 // ----------------------------------------------------------------------------
95 int command = 0x20 | ((screen0<<2) + (screen1<<3));
96 VFD_Command(command);
97 VFD_Brightness(1.0);
101 void VFD_Brightness(float brightness)
102 // ----------------------------------------------------------------------------
103 // Select the brightness
104 // ----------------------------------------------------------------------------
106 if (brightness > 1.0)
107 brightness = 1.0;
108 if (brightness < 0.0)
109 brightness = 0.0;
111 VFD_Command(0x40 | (15 - (int) (15 * brightness)));
115 void VFD_SetX(int X)
116 // ----------------------------------------------------------------------------
117 // Move cursor on X axis
118 // ----------------------------------------------------------------------------
120 VFD_Command(SETX);
121 VFD_Command(X);
125 void VFD_SetY(int Y)
126 // ----------------------------------------------------------------------------
127 // Move cursor on X axis
128 // ----------------------------------------------------------------------------
130 VFD_Command(SETY);
131 VFD_Command(Y);
135 void VFD_SetXY(int X, int Y)
136 // ----------------------------------------------------------------------------
137 // Move cursor on X axis
138 // ----------------------------------------------------------------------------
140 VFD_SetX(X); VFD_SetY(Y);
144 void VFD_Char(char c)
145 // ----------------------------------------------------------------------------
146 // Emit a single character
147 // ----------------------------------------------------------------------------
149 char *ptr = VFD_Font[(unsigned char) c];
150 int col;
151 for (col = 0; col < 6; col++)
152 VFD_Data(*ptr++);
156 void VFD_Text(char *text)
157 // ----------------------------------------------------------------------------
158 // Emit the text at current position
159 // ----------------------------------------------------------------------------
161 char c;
162 while (c = *text++)
163 VFD_Char(c);
168 // ============================================================================
170 // Low-level functions
172 // ============================================================================
174 void VFD_Command(int command)
175 // ----------------------------------------------------------------------------
176 // Send the given command to the VFD
177 // ----------------------------------------------------------------------------
179 // Set C/D to C (control)
180 // outb(0x0, CONTROLPORT);
182 // Write data port
183 outb(command, DATAPORT);
185 // Set /WR
186 outb (0x01, CONTROLPORT);
188 // Reset /WR
189 outb (0x00, CONTROLPORT);
193 void VFD_Data(int data)
194 // ----------------------------------------------------------------------------
195 // Send the given command to the VFD
196 // ----------------------------------------------------------------------------
198 // Set C/D to D (data)
199 // outb(0x08, CONTROLPORT);
201 // Write data port
202 outb(data, DATAPORT);
204 // Set /WR
205 outb (0x09, CONTROLPORT);
207 // Reset /WR
208 outb (0x08, CONTROLPORT);
213 char VFD_Font[256][6] =
214 // ----------------------------------------------------------------------------
215 // The default ASCII charset for the VFD
216 // ----------------------------------------------------------------------------
218 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x00 */
219 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x01 */
220 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x02 */
221 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x03 */
222 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x04 */
223 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x05 */
224 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x06 */
225 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x07 */
226 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x08 */
227 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x09 */
228 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x0A */
229 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x0B */
230 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x0C */
231 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x0D */
232 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x0E */
233 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x0F */
234 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x10 */
235 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x11 */
236 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x12 */
237 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x13 */
238 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x14 */
239 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x15 */
240 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x16 */
241 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x17 */
242 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x18 */
243 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x19 */
244 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x1A */
245 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x1B */
246 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x1C */
247 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x1D */
248 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x1E */
249 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x1F */
250 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x20 */
251 { 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00 }, /* 0x21 ! */
252 { 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x00 }, /* 0x22 " */
253 { 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00 }, /* 0x23 # */
254 { 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00 }, /* 0x24 $ */
255 { 0x46, 0x26, 0x10, 0x68, 0x64, 0x00 }, /* 0x25 % */
256 { 0x36, 0x49, 0x55, 0x22, 0x50, 0x00 }, /* 0x26 & */
257 { 0x00, 0x0A, 0x06, 0x00, 0x00, 0x00 }, /* 0x27 ' */
258 { 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00 }, /* 0x28 ( */
259 { 0x00, 0x00, 0x41, 0x22, 0x1C, 0x00 }, /* 0x29 ) */
260 { 0x28, 0x10, 0x7C, 0x10, 0x28, 0x00 }, /* 0x2A * */
261 { 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00 }, /* 0x2B + */
262 { 0x00, 0x00, 0x50, 0x30, 0x00, 0x00 }, /* 0x2C , */
263 { 0x08, 0x08, 0x08, 0x08, 0x08, 0x00 }, /* 0x2D - */
264 { 0x00, 0x60, 0x60, 0x00, 0x00, 0x00 }, /* 0x2E . */
265 { 0x40, 0x20, 0x10, 0x08, 0x04, 0x00 }, /* 0x2F / */
266 { 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00 }, /* 0x30 0 */
267 { 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00 }, /* 0x31 1 */
268 { 0x42, 0x61, 0x51, 0x49, 0x46, 0x00 }, /* 0x32 2 */
269 { 0x21, 0x41, 0x45, 0x4B, 0x31, 0x00 }, /* 0x33 3 */
270 { 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00 }, /* 0x34 4 */
271 { 0x27, 0x45, 0x45, 0x45, 0x39, 0x00 }, /* 0x35 5 */
272 { 0x3C, 0x4A, 0x49, 0x49, 0x30, 0x00 }, /* 0x36 6 */
273 { 0x01, 0x71, 0x09, 0x05, 0x03, 0x00 }, /* 0x37 7 */
274 { 0x36, 0x49, 0x49, 0x49, 0x36, 0x00 }, /* 0x38 8 */
275 { 0x06, 0x49, 0x49, 0x29, 0x1E, 0x00 }, /* 0x39 9 */
276 { 0x00, 0x36, 0x36, 0x00, 0x00, 0x00 }, /* 0x3A : */
277 { 0x00, 0x56, 0x36, 0x00, 0x00, 0x00 }, /* 0x3B ; */
278 { 0x08, 0x14, 0x22, 0x41, 0x00, 0x00 }, /* 0x3C < */
279 { 0x14, 0x14, 0x14, 0x14, 0x14, 0x00 }, /* 0x3D = */
280 { 0x00, 0x41, 0x22, 0x14, 0x08, 0x00 }, /* 0x3E > */
281 { 0x02, 0x01, 0x51, 0x09, 0x06, 0x00 }, /* 0x3F ? */
282 { 0x32, 0x49, 0x79, 0x41, 0x3E, 0x00 }, /* 0x40 @ */
283 { 0x7E, 0x11, 0x11, 0x11, 0x7E, 0x00 }, /* 0x41 A */
284 { 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00 }, /* 0x42 B */
285 { 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00 }, /* 0x43 C */
286 { 0x7F, 0x41, 0x41, 0x22, 0x1C, 0x00 }, /* 0x44 D */
287 { 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00 }, /* 0x45 E */
288 { 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00 }, /* 0x46 F */
289 { 0x3E, 0x41, 0x49, 0x49, 0x7A, 0x00 }, /* 0x47 G */
290 { 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00 }, /* 0x48 H */
291 { 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00 }, /* 0x49 I */
292 { 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00 }, /* 0x4A J */
293 { 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00 }, /* 0x4B K */
294 { 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00 }, /* 0x4C L */
295 { 0x7F, 0x02, 0x0C, 0x02, 0x7F, 0x00 }, /* 0x4D M */
296 { 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00 }, /* 0x4E N */
297 { 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00 }, /* 0x4F O */
298 { 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00 }, /* 0x50 P */
299 { 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00 }, /* 0x51 Q */
300 { 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00 }, /* 0x52 R */
301 { 0x46, 0x49, 0x49, 0x49, 0x31, 0x00 }, /* 0x53 S */
302 { 0x01, 0x01, 0x7F, 0x01, 0x01, 0x00 }, /* 0x54 T */
303 { 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00 }, /* 0x55 U */
304 { 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00 }, /* 0x56 V */
305 { 0x3F, 0x40, 0x30, 0x40, 0x3F, 0x00 }, /* 0x57 W */
306 { 0x63, 0x14, 0x08, 0x14, 0x63, 0x00 }, /* 0x58 X */
307 { 0x07, 0x08, 0x70, 0x08, 0x07, 0x00 }, /* 0x59 Y */
308 { 0x61, 0x51, 0x49, 0x45, 0x43, 0x00 }, /* 0x5A Z */
309 { 0x7F, 0x41, 0x41, 0x00, 0x00, 0x00 }, /* 0x5B [ */
310 { 0x02, 0x04, 0x08, 0x10, 0x20, 0x00 }, /* 0x5C \ */
311 { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 }, /* 0x5D ] */
312 { 0x04, 0x02, 0x01, 0x02, 0x04, 0x00 }, /* 0x5E ^ */
313 { 0x40, 0x40, 0x40, 0x40, 0x40, 0x00 }, /* 0x5F _ */
314 { 0x00, 0x01, 0x02, 0x04, 0x00, 0x00 }, /* 0x60 ` */
315 { 0x20, 0x54, 0x54, 0x54, 0x78, 0x00 }, /* 0x61 a */
316 { 0x7F, 0x44, 0x44, 0x44, 0x38, 0x00 }, /* 0x62 b */
317 { 0x38, 0x44, 0x44, 0x44, 0x44, 0x00 }, /* 0x63 c */
318 { 0x38, 0x44, 0x44, 0x44, 0x7F, 0x00 }, /* 0x64 d */
319 { 0x38, 0x54, 0x54, 0x54, 0x58, 0x00 }, /* 0x65 e */
320 { 0x08, 0x7E, 0x09, 0x09, 0x02, 0x00 }, /* 0x66 f */
321 { 0x18, 0xA4, 0xA4, 0xA4, 0x7C, 0x00 }, /* 0x67 g */
322 { 0x7F, 0x04, 0x04, 0x04, 0x78, 0x00 }, /* 0x68 h */
323 { 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00 }, /* 0x69 i */
324 { 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00 }, /* 0x6A j */
325 { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, /* 0x6B k */
326 { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 }, /* 0x6C l */
327 { 0x7C, 0x04, 0x38, 0x04, 0x78, 0x00 }, /* 0x6D m */
328 { 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00 }, /* 0x6E n */
329 { 0x38, 0x44, 0x44, 0x44, 0x38, 0x00 }, /* 0x6F o */
330 { 0xFC, 0x24, 0x24, 0x24, 0x18, 0x00 }, /* 0x70 p */
331 { 0x18, 0x24, 0x24, 0x24, 0xFC, 0x00 }, /* 0x71 q */
332 { 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00 }, /* 0x72 r */
333 { 0x48, 0x54, 0x54, 0x54, 0x24, 0x00 }, /* 0x73 s */
334 { 0x04, 0x3F, 0x44, 0x44, 0x20, 0x00 }, /* 0x74 t */
335 { 0x3C, 0x40, 0x40, 0x40, 0x3C, 0x00 }, /* 0x75 u */
336 { 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00 }, /* 0x76 v */
337 { 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00 }, /* 0x77 w */
338 { 0x44, 0x28, 0x10, 0x28, 0x44, 0x00 }, /* 0x78 x */
339 { 0x1C, 0xA0, 0xA0, 0xA0, 0x7C, 0x00 }, /* 0x79 y */
340 { 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00 }, /* 0x7A z */
341 { 0x08, 0x36, 0x41, 0x41, 0x00, 0x00 }, /* 0x7B { */
342 { 0x00, 0x00, 0x77, 0x00, 0x00, 0x00 }, /* 0x7C | */
343 { 0x00, 0x41, 0x41, 0x36, 0x08, 0x00 }, /* 0x7D } */
344 { 0x08, 0x04, 0x04, 0x04, 0x02, 0x00 }, /* 0x7E ~ */
345 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x7F */
346 { 0x40, 0x40, 0x40, 0x40, 0x40, 0x00 }, /* 0x80 */
347 { 0x60, 0x60, 0x60, 0x60, 0x60, 0x00 }, /* 0x81 */
348 { 0x70, 0x70, 0x70, 0x70, 0x70, 0x00 }, /* 0x82 */
349 { 0x78, 0x78, 0x78, 0x78, 0x78, 0x00 }, /* 0x83 */
350 { 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00 }, /* 0x84 */
351 { 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00 }, /* 0x85 */
352 { 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x00 }, /* 0x86 */
353 { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00 }, /* 0x87 */
354 { 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0x88 */
355 { 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00 }, /* 0x89 */
356 { 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00 }, /* 0x8A */
357 { 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00 }, /* 0x8B */
358 { 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x00 }, /* 0x8C */
359 { 0x55, 0x2A, 0x55, 0x2A, 0x55, 0x00 }, /* 0x8D */
360 { 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55 }, /* 0x8E */
361 { 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10 }, /* 0x8F */
362 { 0x10, 0x10, 0x10, 0x1F, 0x10, 0x10 }, /* 0x90 */
363 { 0x10, 0x10, 0x10, 0xF8, 0x10, 0x10 }, /* 0x91 */
364 { 0x10, 0x10, 0x10, 0xFF, 0x00, 0x00 }, /* 0x92 */
365 { 0x00, 0x00, 0x00, 0xFF, 0x10, 0x10 }, /* 0x93 */
366 { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, /* 0x94 */
367 { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 }, /* 0x95 */
368 { 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00 }, /* 0x96 */
369 { 0x00, 0x00, 0x00, 0xF0, 0x10, 0x10 }, /* 0x97 */
370 { 0x10, 0x10, 0x10, 0xF0, 0x00, 0x00 }, /* 0x98 */
371 { 0x00, 0x00, 0x00, 0x1F, 0x10, 0x10 }, /* 0x99 */
372 { 0x10, 0x10, 0x10, 0x1F, 0x00, 0x00 }, /* 0x9A */
373 { 0x00, 0x00, 0x00, 0xE0, 0x10, 0x10 }, /* 0x9B */
374 { 0x10, 0x10, 0x20, 0xC0, 0x00, 0x00 }, /* 0x9C */
375 { 0x00, 0x00, 0x00, 0x0F, 0x10, 0x10 }, /* 0x9D */
376 { 0x20, 0x20, 0x10, 0x0F, 0x00, 0x00 }, /* 0x9E */
377 { 0x78, 0x15, 0x14, 0x15, 0x78, 0x00 }, /* 0x9F */
378 { 0x78, 0x14, 0x15, 0x14, 0x78, 0x00 }, /* 0xA0 */
379 { 0x78, 0x14, 0x16, 0x15, 0x78, 0x00 }, /* 0xA1 */
380 { 0x0E, 0x51, 0x31, 0x11, 0x11, 0x00 }, /* 0xA2 */
381 { 0x78, 0x16, 0x15, 0x16, 0x78, 0x00 }, /* 0xA3 */
382 { 0x7E, 0x09, 0x7E, 0x4A, 0x4A, 0x00 }, /* 0xA4 */
383 { 0x7C, 0x54, 0x56, 0x55, 0x44, 0x00 }, /* 0xA5 */
384 { 0x7C, 0x55, 0x56, 0x54, 0x44, 0x00 }, /* 0xA6 */
385 { 0x7C, 0x56, 0x55, 0x56, 0x44, 0x00 }, /* 0xA7 */
386 { 0x00, 0x45, 0x7C, 0x45, 0x00, 0x00 }, /* 0xA8 */
387 { 0x00, 0x44, 0x7E, 0x45, 0x00, 0x00 }, /* 0xA9 */
388 { 0x00, 0x45, 0x7E, 0x44, 0x00, 0x00 }, /* 0xAA */
389 { 0x00, 0x46, 0x7D, 0x46, 0x00, 0x00 }, /* 0xAB */
390 { 0x38, 0x45, 0x44, 0x45, 0x38, 0x00 }, /* 0xAC */
391 { 0x7A, 0x09, 0x13, 0x22, 0x79, 0x00 }, /* 0xAD */
392 { 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00 }, /* 0xAE */
393 { 0x38, 0x44, 0x46, 0x45, 0x38, 0x00 }, /* 0xAF */
394 { 0x38, 0x45, 0x46, 0x44, 0x38, 0x00 }, /* 0xB0 */
395 { 0x78, 0x15, 0x16, 0x14, 0x78, 0x00 }, /* 0xB1 */
396 { 0xFF, 0x01, 0x01, 0x49, 0x36, 0x00 }, /* 0xB2 */
397 { 0x7C, 0x55, 0x54, 0x55, 0x44, 0x00 }, /* 0xB3 */
398 { 0x3C, 0x41, 0x40, 0x41, 0x3C, 0x00 }, /* 0xB4 */
399 { 0x3C, 0x40, 0x42, 0x41, 0x3C, 0x00 }, /* 0xB5 */
400 { 0x3C, 0x41, 0x42, 0x40, 0x3C, 0x00 }, /* 0xB6 */
401 { 0x3C, 0x42, 0x41, 0x42, 0x3C, 0x00 }, /* 0xB7 */
402 { 0x00, 0x02, 0x05, 0x02, 0x00, 0x00 }, /* 0xB8 */
403 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xB9 */
404 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xBA */
405 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xBB */
406 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xBC */
407 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xBD */
408 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xBE */
409 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xBF */
410 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xC0 */
411 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xC1 */
412 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xC2 */
413 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xC3 */
414 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xC4 */
415 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xC5 */
416 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xC6 */
417 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xC7 */
418 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xC8 */
419 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xC9 */
420 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xCA */
421 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xCB */
422 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xCC */
423 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xCD */
424 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xCE */
425 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xCF */
426 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xD0 */
427 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xD1 */
428 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xD2 */
429 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xD3 */
430 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xD4 */
431 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xD5 */
432 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xD6 */
433 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xD7 */
434 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xD8 */
435 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xD9 */
436 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xDA */
437 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xDB */
438 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xDC */
439 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xDD */
440 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xDE */
441 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xDF */
442 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xE0 */
443 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xE1 */
444 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xE2 */
445 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xE3 */
446 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xE4 */
447 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xE5 */
448 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xE6 */
449 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xE7 */
450 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xE8 */
451 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xE9 */
452 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xEA */
453 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xEB */
454 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xEC */
455 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xED */
456 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xEE */
457 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xEF */
458 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xF0 */
459 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xF1 */
460 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xF2 */
461 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xF3 */
462 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xF4 */
463 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xF5 */
464 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xF6 */
465 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xF7 */
466 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xF8 */
467 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xF9 */
468 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xFA */
469 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xFB */
470 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xFC */
471 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xFD */
472 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* 0xFE */
473 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } /* 0xFF */