1 /*
2 * xep80_fonts.c - XEP80 Font emulation
3 *
4 * Copyright (C) 2007 Mark Grebe
5 *
6 * This file is part of the Atari800 emulator project which emulates
7 * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers.
8 *
9 * Atari800 is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * Atari800 is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with Atari800; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 */
23
24 #include "config.h"
25 #ifdef XEP80_EMULATION
26 #include "atari.h"
27 #include "xep80_fonts.h"
28 #include <string.h>
29
30 #define NORM_FONT 0
31 #define REV_FONT XEP80_FONTS_REV_FONT_BIT
32 #define UNDER_FONT XEP80_FONTS_UNDER_FONT_BIT
33 #define REV_UNDER_FONT (XEP80_FONTS_REV_FONT_BIT | XEP80_FONTS_UNDER_FONT_BIT)
34 #define BLK_FONT XEP80_FONTS_BLK_FONT_BIT
35 #define REV_BLK_FONT (XEP80_FONTS_REV_FONT_BIT | XEP80_FONTS_BLK_FONT_BIT)
36 #define UNDER_BLK_FONT (XEP80_FONTS_UNDER_FONT_BIT | XEP80_FONTS_BLK_FONT_BIT)
37 #define REV_UNDER_BLK_FONT (XEP80_FONTS_REV_FONT_BIT | XEP80_FONTS_UNDER_FONT_BIT | XEP80_FONTS_BLK_FONT_BIT)
38
39 #define CHAR_SET_INTERNAL 2
40
41 /* The values below define shape of the block font */
42 enum {
43 BLOCK_FONT_MIDDLE_ROW = 3, /* Line at which middle row starts */
44 BLOCK_FONT_BOTTOM_ROW = 6, /* Line at which bottom row starts */
45 BLOCK_FONT_MIDDLE_COL = 2, /* Pixel at which middle column starts */
46 BLOCK_FONT_RIGHT_COL = 5 /* Pixel at which right column starts */
47 };
48
49 int XEP80_FONTS_inited = FALSE;
50
51 /* Internal character set of the NS405 chip */
52 UBYTE internal_font[XEP80_FONTS_CHAR_COUNT / 2][XEP80_MAX_CHAR_HEIGHT][XEP80_CHAR_WIDTH] = {
53 {{0,0,0,0,0,0,0}, /* 00 */
54 {0,0,1,0,0,1,0},
55 {0,0,1,0,0,1,0},
56 {0,0,1,0,0,1,0},
57 {0,0,1,0,0,1,0},
58 {0,0,1,0,0,1,0},
59 {0,0,1,0,1,1,0},
60 {0,1,0,1,0,1,0},
61 {0,0,0,0,0,0,0},
62 {0,0,0,0,0,0,0},
63 {0,0,0,0,0,0,0},
64 {0,0,0,0,0,0,0}
65 },
66 {{0,0,0,0,0,0,0}, /* 01 */
67 {0,0,0,1,0,0,0},
68 {0,0,1,1,1,0,0},
69 {0,1,1,1,1,1,0},
70 {0,0,0,1,0,0,0},
71 {0,0,0,1,0,0,0},
72 {0,0,0,1,0,0,0},
73 {0,0,0,1,0,0,0},
74 {0,0,0,0,0,0,0},
75 {0,0,0,0,0,0,0},
76 {0,0,0,0,0,0,0},
77 {0,0,0,0,0,0,0}
78 },
79 {{0,0,0,0,0,0,0}, /* 02 */
80 {0,0,0,0,0,1,0},
81 {0,0,1,1,1,0,0},
82 {0,1,0,0,1,1,0},
83 {0,1,0,1,0,1,0},
84 {0,1,1,0,0,1,0},
85 {0,0,1,1,1,0,0},
86 {0,1,0,0,0,0,0},
87 {0,0,0,0,0,0,0},
88 {0,0,0,0,0,0,0},
89 {0,0,0,0,0,0,0},
90 {0,0,0,0,0,0,0}
91 },
92 {{0,0,0,0,0,0,0}, /* 03 */
93 {0,0,0,1,0,0,0},
94 {0,0,1,0,1,0,0},
95 {0,0,1,0,0,0,0},
96 {0,1,1,1,0,0,0},
97 {0,0,1,0,0,0,0},
98 {0,0,1,0,0,0,0},
99 {0,1,1,1,1,1,0},
100 {0,0,0,0,0,0,0},
101 {0,0,0,0,0,0,0},
102 {0,0,0,0,0,0,0},
103 {0,0,0,0,0,0,0}
104 },
105 {{0,0,0,0,0,0,0}, /* 04 */
106 {0,0,0,0,0,0,0},
107 {0,1,0,0,0,1,0},
108 {0,0,1,1,1,0,0},
109 {0,0,1,0,1,0,0},
110 {0,0,1,1,1,0,0},
111 {0,1,0,0,0,1,0},
112 {0,0,0,0,0,0,0},
113 {0,0,0,0,0,0,0},
114 {0,0,0,0,0,0,0},
115 {0,0,0,0,0,0,0},
116 {0,0,0,0,0,0,0}
117 },
118 {{0,0,0,0,0,0,0}, /* 05 */
119 {0,0,1,1,1,0,0},
120 {0,0,0,0,0,0,0},
121 {0,0,0,0,0,0,0},
122 {0,0,0,0,0,0,0},
123 {0,0,0,0,0,0,0},
124 {0,0,0,0,0,0,0},
125 {0,0,0,0,0,0,0},
126 {0,0,0,0,0,0,0},
127 {0,0,0,0,0,0,0},
128 {0,0,0,0,0,0,0},
129 {0,0,0,0,0,0,0}
130 },
131 {{0,0,0,0,0,0,0}, /* 06 */
132 {0,0,0,1,0,0,0},
133 {0,0,1,0,1,0,0},
134 {0,0,0,1,0,0,0},
135 {0,0,0,0,0,0,0},
136 {0,0,0,0,0,0,0},
137 {0,0,0,0,0,0,0},
138 {0,0,0,0,0,0,0},
139 {0,0,0,0,0,0,0},
140 {0,0,0,0,0,0,0},
141 {0,0,0,0,0,0,0},
142 {0,0,0,0,0,0,0}
143 },
144 {{0,0,0,0,0,0,0}, /* 07 */
145 {0,0,1,1,1,1,0},
146 {0,1,0,0,0,0,0},
147 {0,0,1,1,1,0,0},
148 {0,1,0,0,0,1,0},
149 {0,0,1,1,1,0,0},
150 {0,0,0,0,0,1,0},
151 {0,1,1,1,1,0,0},
152 {0,0,0,0,0,0,0},
153 {0,0,0,0,0,0,0},
154 {0,0,0,0,0,0,0},
155 {0,0,0,0,0,0,0}
156 },
157 {{0,0,0,0,0,0,0}, /* 08 */
158 {0,0,1,1,1,0,0},
159 {0,1,0,0,0,1,0},
160 {0,1,0,0,0,0,0},
161 {0,1,0,0,0,0,0},
162 {0,1,0,0,0,0,0},
163 {0,1,0,0,0,1,0},
164 {0,0,1,1,1,0,0},
165 {0,0,0,1,0,0,0},
166 {0,0,1,0,0,0,0},
167 {0,0,0,0,0,0,0},
168 {0,0,0,0,0,0,0}
169 },
170 {{0,0,0,0,0,0,0}, /* 09 */
171 {0,0,1,1,0,1,0},
172 {0,1,0,0,1,0,0},
173 {0,0,0,0,0,0,0},
174 {0,1,0,0,0,1,0},
175 {0,1,1,0,0,1,0},
176 {0,1,0,1,0,1,0},
177 {0,1,0,0,1,1,0},
178 {0,0,0,0,0,0,0},
179 {0,0,0,0,0,0,0},
180 {0,0,0,0,0,0,0},
181 {0,0,0,0,0,0,0}
182 },
183 {{0,0,0,0,0,0,0}, /* 0a */
184 {0,0,1,1,1,1,0},
185 {0,1,0,1,0,0,0},
186 {0,1,0,1,0,0,0},
187 {0,1,0,1,1,1,0},
188 {0,1,1,1,0,0,0},
189 {0,1,0,1,0,0,0},
190 {0,1,0,1,1,1,0},
191 {0,0,0,0,0,0,0},
192 {0,0,0,0,0,0,0},
193 {0,0,0,0,0,0,0},
194 {0,0,0,0,0,0,0}
195 },
196 {{0,0,0,0,0,0,0}, /* 0b */
197 {0,0,1,0,1,0,0},
198 {0,0,0,0,0,0,0},
199 {0,0,0,1,0,0,0},
200 {0,0,1,0,1,0,0},
201 {0,1,1,1,1,1,0},
202 {0,1,0,0,0,1,0},
203 {0,1,0,0,0,1,0},
204 {0,0,0,0,0,0,0},
205 {0,0,0,0,0,0,0},
206 {0,0,0,0,0,0,0},
207 {0,0,0,0,0,0,0}
208 },
209 {{0,0,0,0,0,0,0}, /* 0c */
210 {0,0,1,0,1,0,0},
211 {0,0,0,0,0,0,0},
212 {0,0,1,1,1,0,0},
213 {0,1,0,0,0,1,0},
214 {0,1,0,0,0,1,0},
215 {0,1,0,0,0,1,0},
216 {0,0,1,1,1,0,0},
217 {0,0,0,0,0,0,0},
218 {0,0,0,0,0,0,0},
219 {0,0,0,0,0,0,0},
220 {0,0,0,0,0,0,0}
221 },
222 {{0,0,0,0,0,0,0}, /* 0d */
223 {0,0,0,1,0,0,0},
224 {0,0,1,0,1,0,0},
225 {0,0,0,1,0,0,0},
226 {0,0,1,0,1,0,0},
227 {0,1,1,1,1,1,0},
228 {0,1,0,0,0,1,0},
229 {0,1,0,0,0,1,0},
230 {0,0,0,0,0,0,0},
231 {0,0,0,0,0,0,0},
232 {0,0,0,0,0,0,0},
233 {0,0,0,0,0,0,0}
234 },
235 {{0,0,0,0,0,0,0}, /* 0e */
236 {0,0,1,0,1,0,0},
237 {0,0,0,0,0,0,0},
238 {0,1,0,0,0,1,0},
239 {0,1,0,0,0,1,0},
240 {0,1,0,0,0,1,0},
241 {0,1,0,0,0,1,0},
242 {0,0,1,1,1,0,0},
243 {0,0,0,0,0,0,0},
244 {0,0,0,0,0,0,0},
245 {0,0,0,0,0,0,0},
246 {0,0,0,0,0,0,0}
247 },
248 {{0,0,0,0,0,0,0}, /* 0f */
249 {0,0,1,1,1,1,0},
250 {0,1,0,1,0,0,0},
251 {0,1,0,1,0,0,0},
252 {0,1,0,1,1,1,0},
253 {0,1,0,1,0,0,0},
254 {0,1,0,1,0,0,0},
255 {0,0,1,1,1,1,0},
256 {0,0,0,0,0,0,0},
257 {0,0,0,0,0,0,0},
258 {0,0,0,0,0,0,0},
259 {0,0,0,0,0,0,0}
260 },
261 {{0,0,0,0,0,0,0}, /* 10 */
262 {0,1,0,0,0,1,0},
263 {0,0,0,0,0,0,0},
264 {0,1,0,0,1,1,0},
265 {0,1,0,0,0,1,0},
266 {0,1,0,0,0,1,0},
267 {0,1,0,0,0,1,0},
268 {0,1,0,0,0,1,0},
269 {0,0,0,1,0,1,0},
270 {0,0,0,0,1,0,0},
271 {0,0,0,0,0,0,0},
272 {0,0,0,0,0,0,0}
273 },
274 {{0,0,0,0,0,0,0}, /* 11 */
275 {0,0,1,1,1,0,0},
276 {0,1,0,0,0,1,0},
277 {0,1,0,0,0,1,0},
278 {0,1,1,1,1,0,0},
279 {0,1,0,0,0,1,0},
280 {0,1,0,0,0,1,0},
281 {0,1,1,1,1,0,0},
282 {0,1,0,0,0,0,0},
283 {0,1,0,0,0,0,0},
284 {0,0,0,0,0,0,0},
285 {0,0,0,0,0,0,0}
286 },
287 {{0,0,0,0,0,0,0}, /* 12 */
288 {0,0,1,0,0,0,0},
289 {0,0,0,1,0,0,0},
290 {0,0,1,1,1,0,0},
291 {0,0,0,0,0,1,0},
292 {0,0,1,1,1,1,0},
293 {0,1,0,0,0,1,0},
294 {0,0,1,1,1,1,0},
295 {0,0,0,0,0,0,0},
296 {0,0,0,0,0,0,0},
297 {0,0,0,0,0,0,0},
298 {0,0,0,0,0,0,0}
299 },
300 {{0,0,0,0,0,0,0}, /* 13 */
301 {0,0,1,0,0,0,0},
302 {0,0,0,1,0,0,0},
303 {0,0,1,1,1,0,0},
304 {0,1,0,0,0,1,0},
305 {0,1,1,1,1,1,0},
306 {0,1,0,0,0,0,0},
307 {0,0,1,1,1,1,0},
308 {0,0,0,0,0,0,0},
309 {0,0,0,0,0,0,0},
310 {0,0,0,0,0,0,0},
311 {0,0,0,0,0,0,0}
312 },
313 {{0,0,0,0,0,0,0}, /* 14 */
314 {0,0,1,0,0,0,0},
315 {0,0,0,1,0,0,0},
316 {0,0,0,0,0,0,0},
317 {0,0,1,1,0,0,0},
318 {0,0,0,1,0,0,0},
319 {0,0,0,1,0,0,0},
320 {0,0,1,1,1,0,0},
321 {0,0,0,0,0,0,0},
322 {0,0,0,0,0,0,0},
323 {0,0,0,0,0,0,0},
324 {0,0,0,0,0,0,0}
325 },
326 {{0,0,0,0,0,0,0}, /* 15 */
327 {0,0,1,0,1,0,0},
328 {0,0,0,0,0,0,0},
329 {0,0,1,1,1,0,0},
330 {0,0,0,1,0,0,0},
331 {0,0,0,1,0,0,0},
332 {0,0,0,1,0,0,0},
333 {0,0,1,1,1,0,0},
334 {0,0,0,0,0,0,0},
335 {0,0,0,0,0,0,0},
336 {0,0,0,0,0,0,0},
337 {0,0,0,0,0,0,0}
338 },
339 {{0,0,0,0,0,0,0}, /* 16 */
340 {0,0,1,0,0,0,0},
341 {0,0,0,1,0,0,0},
342 {0,1,0,0,0,1,0},
343 {0,1,0,0,0,1,0},
344 {0,1,0,0,0,1,0},
345 {0,1,0,0,1,1,0},
346 {0,0,1,1,0,1,0},
347 {0,0,0,0,0,0,0},
348 {0,0,0,0,0,0,0},
349 {0,0,0,0,0,0,0},
350 {0,0,0,0,0,0,0}
351 },
352 {{0,0,0,0,0,0,0}, /* 17 */
353 {0,0,0,0,1,0,0},
354 {0,0,0,1,0,0,0},
355 {0,0,1,1,1,0,0},
356 {0,1,0,0,0,1,0},
357 {0,1,1,1,1,1,0},
358 {0,1,0,0,0,0,0},
359 {0,0,1,1,1,1,0},
360 {0,0,0,0,0,0,0},
361 {0,0,0,0,0,0,0},
362 {0,0,0,0,0,0,0},
363 {0,0,0,0,0,0,0}
364 },
365 {{0,0,0,0,0,0,0}, /* 18 */
366 {0,0,0,0,0,0,0},
367 {0,0,0,0,0,0,0},
368 {0,0,1,1,1,1,0},
369 {0,1,0,0,0,0,0},
370 {0,1,0,0,0,0,0},
371 {0,1,0,0,0,0,0},
372 {0,0,1,1,1,1,0},
373 {0,0,0,1,0,0,0},
374 {0,0,1,0,0,0,0},
375 {0,0,0,0,0,0,0},
376 {0,0,0,0,0,0,0}
377 },
378 {{0,0,0,0,0,0,0}, /* 19 */
379 {0,0,1,1,0,1,0},
380 {0,1,0,0,1,0,0},
381 {0,0,0,0,0,0,0},
382 {0,1,0,1,1,0,0},
383 {0,1,1,0,0,1,0},
384 {0,1,0,0,0,1,0},
385 {0,1,0,0,0,1,0},
386 {0,0,0,0,0,0,0},
387 {0,0,0,0,0,0,0},
388 {0,0,0,0,0,0,0},
389 {0,0,0,0,0,0,0}
390 },
391 {{0,0,0,0,0,0,0}, /* 1a */
392 {0,0,0,0,0,0,0},
393 {0,0,0,0,0,0,0},
394 {0,0,1,1,1,0,0},
395 {0,0,0,1,0,1,0},
396 {0,0,1,1,1,1,0},
397 {0,1,0,1,0,0,0},
398 {0,0,1,1,1,0,0},
399 {0,0,0,0,0,0,0},
400 {0,0,0,0,0,0,0},
401 {0,0,0,0,0,0,0},
402 {0,0,0,0,0,0,0}
403 },
404 {{0,0,0,0,0,0,0}, /* 1b */
405 {0,0,1,0,1,0,0},
406 {0,0,0,0,0,0,0},
407 {0,0,1,1,1,0,0},
408 {0,0,0,0,0,1,0},
409 {0,0,1,1,1,1,0},
410 {0,1,0,0,0,1,0},
411 {0,0,1,1,1,1,0},
412 {0,0,0,0,0,0,0},
413 {0,0,0,0,0,0,0},
414 {0,0,0,0,0,0,0},
415 {0,0,0,0,0,0,0}
416 },
417 {{0,0,0,0,0,0,0}, /* 1c */
418 {0,0,0,0,0,0,0},
419 {0,0,1,0,1,0,0},
420 {0,0,0,0,0,0,0},
421 {0,0,1,1,1,0,0},
422 {0,1,0,0,0,1,0},
423 {0,1,0,0,0,1,0},
424 {0,0,1,1,1,0,0},
425 {0,0,0,0,0,0,0},
426 {0,0,0,0,0,0,0},
427 {0,0,0,0,0,0,0},
428 {0,0,0,0,0,0,0}
429 },
430 {{0,0,0,0,0,0,0}, /* 1d */
431 {0,0,0,1,0,0,0},
432 {0,0,1,0,1,0,0},
433 {0,0,1,1,1,0,0},
434 {0,0,0,0,0,1,0},
435 {0,0,1,1,1,1,0},
436 {0,1,0,0,0,1,0},
437 {0,0,1,1,1,1,0},
438 {0,0,0,0,0,0,0},
439 {0,0,0,0,0,0,0},
440 {0,0,0,0,0,0,0},
441 {0,0,0,0,0,0,0}
442 },
443 {{0,0,0,0,0,0,0}, /* 1e */
444 {0,0,1,0,1,0,0},
445 {0,0,0,0,0,0,0},
446 {0,1,0,0,0,1,0},
447 {0,1,0,0,0,1,0},
448 {0,1,0,0,0,1,0},
449 {0,1,0,0,1,1,0},
450 {0,0,1,1,0,1,0},
451 {0,0,0,0,0,0,0},
452 {0,0,0,0,0,0,0},
453 {0,0,0,0,0,0,0},
454 {0,0,0,0,0,0,0}
455 },
456 {{0,0,0,0,0,0,0}, /* 1f */
457 {0,0,0,0,0,0,0},
458 {0,0,0,0,0,0,0},
459 {0,0,1,1,1,0,0},
460 {0,1,0,1,0,1,0},
461 {0,1,0,1,1,1,0},
462 {0,1,0,1,0,0,0},
463 {0,0,1,1,1,0,0},
464 {0,0,0,0,0,0,0},
465 {0,0,0,0,0,0,0},
466 {0,0,0,0,0,0,0},
467 {0,0,0,0,0,0,0}
468 },
469 {{0,0,0,0,0,0,0}, /* 20 */
470 {0,0,0,0,0,0,0},
471 {0,0,0,0,0,0,0},
472 {0,0,0,0,0,0,0},
473 {0,0,0,0,0,0,0},
474 {0,0,0,0,0,0,0},
475 {0,0,0,0,0,0,0},
476 {0,0,0,0,0,0,0},
477 {0,0,0,0,0,0,0},
478 {0,0,0,0,0,0,0},
479 {0,0,0,0,0,0,0},
480 {0,0,0,0,0,0,0}
481 },
482 {{0,0,0,0,0,0,0}, /* 21 */
483 {0,0,0,1,0,0,0},
484 {0,0,0,1,0,0,0},
485 {0,0,0,1,0,0,0},
486 {0,0,0,1,0,0,0},
487 {0,0,0,1,0,0,0},
488 {0,0,0,0,0,0,0},
489 {0,0,0,1,0,0,0},
490 {0,0,0,0,0,0,0},
491 {0,0,0,0,0,0,0},
492 {0,0,0,0,0,0,0},
493 {0,0,0,0,0,0,0}
494 },
495 {{0,0,0,0,0,0,0}, /* 22 */
496 {0,0,1,0,1,0,0},
497 {0,0,1,0,1,0,0},
498 {0,0,0,0,0,0,0},
499 {0,0,0,0,0,0,0},
500 {0,0,0,0,0,0,0},
501 {0,0,0,0,0,0,0},
502 {0,0,0,0,0,0,0},
503 {0,0,0,0,0,0,0},
504 {0,0,0,0,0,0,0},
505 {0,0,0,0,0,0,0},
506 {0,0,0,0,0,0,0}
507 },
508 {{0,0,0,0,0,0,0}, /* 23 */
509 {0,0,1,0,1,0,0},
510 {0,0,1,0,1,0,0},
511 {0,1,1,1,1,1,0},
512 {0,0,1,0,1,0,0},
513 {0,1,1,1,1,1,0},
514 {0,0,1,0,1,0,0},
515 {0,0,1,0,1,0,0},
516 {0,0,0,0,0,0,0},
517 {0,0,0,0,0,0,0},
518 {0,0,0,0,0,0,0},
519 {0,0,0,0,0,0,0}
520 },
521 {{0,0,0,0,0,0,0}, /* 24 */
522 {0,0,0,1,0,0,0},
523 {0,0,1,1,1,1,0},
524 {0,1,0,1,0,0,0},
525 {0,0,1,1,1,0,0},
526 {0,0,0,1,0,1,0},
527 {0,1,1,1,1,0,0},
528 {0,0,0,1,0,0,0},
529 {0,0,0,0,0,0,0},
530 {0,0,0,0,0,0,0},
531 {0,0,0,0,0,0,0},
532 {0,0,0,0,0,0,0}
533 },
534 {{0,0,0,0,0,0,0}, /* 25 */
535 {0,1,1,0,0,0,0},
536 {0,1,1,0,0,1,0},
537 {0,0,0,0,1,0,0},
538 {0,0,0,1,0,0,0},
539 {0,0,1,0,0,0,0},
540 {0,1,0,0,1,1,0},
541 {0,0,0,0,1,1,0},
542 {0,0,0,0,0,0,0},
543 {0,0,0,0,0,0,0},
544 {0,0,0,0,0,0,0},
545 {0,0,0,0,0,0,0}
546 },
547 {{0,0,0,0,0,0,0}, /* 26 */
548 {0,0,1,0,0,0,0},
549 {0,1,0,1,0,0,0},
550 {0,1,0,1,0,0,0},
551 {0,0,1,0,0,0,0},
552 {0,1,0,1,0,1,0},
553 {0,1,0,0,1,0,0},
554 {0,0,1,1,0,1,0},
555 {0,0,0,0,0,0,0},
556 {0,0,0,0,0,0,0},
557 {0,0,0,0,0,0,0},
558 {0,0,0,0,0,0,0}
559 },
560 {{0,0,0,0,0,0,0}, /* 27 */
561 {0,0,0,1,0,0,0},
562 {0,0,0,1,0,0,0},
563 {0,0,1,0,0,0,0},
564 {0,0,0,0,0,0,0},
565 {0,0,0,0,0,0,0},
566 {0,0,0,0,0,0,0},
567 {0,0,0,0,0,0,0},
568 {0,0,0,0,0,0,0},
569 {0,0,0,0,0,0,0},
570 {0,0,0,0,0,0,0},
571 {0,0,0,0,0,0,0}
572 },
573 {{0,0,0,0,0,0,0}, /* 28 */
574 {0,0,0,0,1,0,0},
575 {0,0,0,1,0,0,0},
576 {0,0,1,0,0,0,0},
577 {0,0,1,0,0,0,0},
578 {0,0,1,0,0,0,0},
579 {0,0,0,1,0,0,0},
580 {0,0,0,0,1,0,0},
581 {0,0,0,0,0,0,0},
582 {0,0,0,0,0,0,0},
583 {0,0,0,0,0,0,0},
584 {0,0,0,0,0,0,0}
585 },
586 {{0,0,0,0,0,0,0}, /* 29 */
587 {0,0,1,0,0,0,0},
588 {0,0,0,1,0,0,0},
589 {0,0,0,0,1,0,0},
590 {0,0,0,0,1,0,0},
591 {0,0,0,0,1,0,0},
592 {0,0,0,1,0,0,0},
593 {0,0,1,0,0,0,0},
594 {0,0,0,0,0,0,0},
595 {0,0,0,0,0,0,0},
596 {0,0,0,0,0,0,0},
597 {0,0,0,0,0,0,0}
598 },
599 {{0,0,0,0,0,0,0}, /* 2a */
600 {0,0,0,1,0,0,0},
601 {0,1,0,1,0,1,0},
602 {0,0,1,1,1,0,0},
603 {0,0,0,1,0,0,0},
604 {0,0,1,1,1,0,0},
605 {0,1,0,1,0,1,0},
606 {0,0,0,1,0,0,0},
607 {0,0,0,0,0,0,0},
608 {0,0,0,0,0,0,0},
609 {0,0,0,0,0,0,0},
610 {0,0,0,0,0,0,0}
611 },
612 {{0,0,0,0,0,0,0}, /* 2b */
613 {0,0,0,0,0,0,0},
614 {0,0,0,1,0,0,0},
615 {0,0,0,1,0,0,0},
616 {0,1,1,1,1,1,0},
617 {0,0,0,1,0,0,0},
618 {0,0,0,1,0,0,0},
619 {0,0,0,0,0,0,0},
620 {0,0,0,0,0,0,0},
621 {0,0,0,0,0,0,0},
622 {0,0,0,0,0,0,0},
623 {0,0,0,0,0,0,0}
624 },
625 {{0,0,0,0,0,0,0}, /* 2c */
626 {0,0,0,0,0,0,0},
627 {0,0,0,0,0,0,0},
628 {0,0,0,0,0,0,0},
629 {0,0,0,0,0,0,0},
630 {0,0,0,0,0,0,0},
631 {0,0,0,0,0,0,0},
632 {0,0,0,1,0,0,0},
633 {0,0,0,1,0,0,0},
634 {0,0,1,0,0,0,0},
635 {0,0,0,0,0,0,0},
636 {0,0,0,0,0,0,0}
637 },
638 {{0,0,0,0,0,0,0}, /* 2d */
639 {0,0,0,0,0,0,0},
640 {0,0,0,0,0,0,0},
641 {0,0,0,0,0,0,0},
642 {0,1,1,1,1,1,0},
643 {0,0,0,0,0,0,0},
644 {0,0,0,0,0,0,0},
645 {0,0,0,0,0,0,0},
646 {0,0,0,0,0,0,0},
647 {0,0,0,0,0,0,0},
648 {0,0,0,0,0,0,0},
649 {0,0,0,0,0,0,0}
650 },
651 {{0,0,0,0,0,0,0}, /* 2e */
652 {0,0,0,0,0,0,0},
653 {0,0,0,0,0,0,0},
654 {0,0,0,0,0,0,0},
655 {0,0,0,0,0,0,0},
656 {0,0,0,0,0,0,0},
657 {0,0,0,0,0,0,0},
658 {0,0,0,1,0,0,0},
659 {0,0,0,0,0,0,0},
660 {0,0,0,0,0,0,0},
661 {0,0,0,0,0,0,0},
662 {0,0,0,0,0,0,0}
663 },
664 {{0,0,0,0,0,0,0}, /* 2f */
665 {0,0,0,0,0,0,0},
666 {0,0,0,0,0,1,0},
667 {0,0,0,0,1,0,0},
668 {0,0,0,1,0,0,0},
669 {0,0,1,0,0,0,0},
670 {0,1,0,0,0,0,0},
671 {0,0,0,0,0,0,0},
672 {0,0,0,0,0,0,0},
673 {0,0,0,0,0,0,0},
674 {0,0,0,0,0,0,0},
675 {0,0,0,0,0,0,0}
676 },
677 {{0,0,0,0,0,0,0}, /* 30 */
678 {0,0,1,1,1,0,0},
679 {0,1,0,0,0,1,0},
680 {0,1,0,0,1,1,0},
681 {0,1,0,1,0,1,0},
682 {0,1,1,0,0,1,0},
683 {0,1,0,0,0,1,0},
684 {0,0,1,1,1,0,0},
685 {0,0,0,0,0,0,0},
686 {0,0,0,0,0,0,0},
687 {0,0,0,0,0,0,0},
688 {0,0,0,0,0,0,0}
689 },
690 {{0,0,0,0,0,0,0}, /* 31 */
691 {0,0,0,1,0,0,0},
692 {0,0,1,1,0,0,0},
693 {0,0,0,1,0,0,0},
694 {0,0,0,1,0,0,0},
695 {0,0,0,1,0,0,0},
696 {0,0,0,1,0,0,0},
697 {0,0,1,1,1,0,0},
698 {0,0,0,0,0,0,0},
699 {0,0,0,0,0,0,0},
700 {0,0,0,0,0,0,0},
701 {0,0,0,0,0,0,0}
702 },
703 {{0,0,0,0,0,0,0}, /* 32 */
704 {0,0,1,1,1,0,0},
705 {0,1,0,0,0,1,0},
706 {0,0,0,0,0,1,0},
707 {0,0,0,0,1,0,0},
708 {0,0,0,1,0,0,0},
709 {0,0,1,0,0,0,0},
710 {0,1,1,1,1,1,0},
711 {0,0,0,0,0,0,0},
712 {0,0,0,0,0,0,0},
713 {0,0,0,0,0,0,0},
714 {0,0,0,0,0,0,0}
715 },
716 {{0,0,0,0,0,0,0}, /* 33 */
717 {0,1,1,1,1,1,0},
718 {0,0,0,0,0,1,0},
719 {0,0,0,0,1,0,0},
720 {0,0,0,1,1,0,0},
721 {0,0,0,0,0,1,0},
722 {0,1,0,0,0,1,0},
723 {0,0,1,1,1,0,0},
724 {0,0,0,0,0,0,0},
725 {0,0,0,0,0,0,0},
726 {0,0,0,0,0,0,0},
727 {0,0,0,0,0,0,0}
728 },
729 {{0,0,0,0,0,0,0}, /* 34 */
730 {0,0,0,0,1,0,0},
731 {0,0,0,1,1,0,0},
732 {0,0,1,0,1,0,0},
733 {0,1,0,0,1,0,0},
734 {0,1,1,1,1,1,0},
735 {0,0,0,0,1,0,0},
736 {0,0,0,0,1,0,0},
737 {0,0,0,0,0,0,0},
738 {0,0,0,0,0,0,0},
739 {0,0,0,0,0,0,0},
740 {0,0,0,0,0,0,0}
741 },
742 {{0,0,0,0,0,0,0}, /* 35 */
743 {0,1,1,1,1,1,0},
744 {0,1,0,0,0,0,0},
745 {0,1,1,1,1,0,0},
746 {0,0,0,0,0,1,0},
747 {0,0,0,0,0,1,0},
748 {0,0,0,0,0,1,0},
749 {0,1,1,1,1,0,0},
750 {0,0,0,0,0,0,0},
751 {0,0,0,0,0,0,0},
752 {0,0,0,0,0,0,0},
753 {0,0,0,0,0,0,0}
754 },
755 {{0,0,0,0,0,0,0}, /* 36 */
756 {0,0,1,1,1,0,0},
757 {0,1,0,0,0,0,0},
758 {0,1,0,0,0,0,0},
759 {0,1,1,1,1,0,0},
760 {0,1,0,0,0,1,0},
761 {0,1,0,0,0,1,0},
762 {0,0,1,1,1,0,0},
763 {0,0,0,0,0,0,0},
764 {0,0,0,0,0,0,0},
765 {0,0,0,0,0,0,0},
766 {0,0,0,0,0,0,0}
767 },
768 {{0,0,0,0,0,0,0}, /* 37 */
769 {0,1,1,1,1,1,0},
770 {0,0,0,0,0,1,0},
771 {0,0,0,0,1,0,0},
772 {0,0,0,1,0,0,0},
773 {0,0,1,0,0,0,0},
774 {0,0,1,0,0,0,0},
775 {0,0,1,0,0,0,0},
776 {0,0,0,0,0,0,0},
777 {0,0,0,0,0,0,0},
778 {0,0,0,0,0,0,0},
779 {0,0,0,0,0,0,0}
780 },
781 {{0,0,0,0,0,0,0}, /* 38 */
782 {0,0,1,1,1,0,0},
783 {0,1,0,0,0,1,0},
784 {0,1,0,0,0,1,0},
785 {0,0,1,1,1,0,0},
786 {0,1,0,0,0,1,0},
787 {0,1,0,0,0,1,0},
788 {0,0,1,1,1,0,0},
789 {0,0,0,0,0,0,0},
790 {0,0,0,0,0,0,0},
791 {0,0,0,0,0,0,0},
792 {0,0,0,0,0,0,0}
793 },
794 {{0,0,0,0,0,0,0}, /* 39 */
795 {0,0,1,1,1,0,0},
796 {0,1,0,0,0,1,0},
797 {0,1,0,0,0,1,0},
798 {0,0,1,1,1,1,0},
799 {0,0,0,0,0,1,0},
800 {0,0,0,0,1,0,0},
801 {0,0,1,1,0,0,0},
802 {0,0,0,0,0,0,0},
803 {0,0,0,0,0,0,0},
804 {0,0,0,0,0,0,0},
805 {0,0,0,0,0,0,0}
806 },
807 {{0,0,0,0,0,0,0}, /* 3a */
808 {0,0,0,0,0,0,0},
809 {0,0,0,0,0,0,0},
810 {0,0,0,0,0,0,0},
811 {0,0,0,1,0,0,0},
812 {0,0,0,0,0,0,0},
813 {0,0,0,0,0,0,0},
814 {0,0,0,1,0,0,0},
815 {0,0,0,0,0,0,0},
816 {0,0,0,0,0,0,0},
817 {0,0,0,0,0,0,0},
818 {0,0,0,0,0,0,0}
819 },
820 {{0,0,0,0,0,0,0}, /* 3b */
821 {0,0,0,0,0,0,0},
822 {0,0,0,0,0,0,0},
823 {0,0,0,0,0,0,0},
824 {0,0,0,1,0,0,0},
825 {0,0,0,0,0,0,0},
826 {0,0,0,0,0,0,0},
827 {0,0,0,1,0,0,0},
828 {0,0,0,1,0,0,0},
829 {0,0,1,0,0,0,0},
830 {0,0,0,0,0,0,0},
831 {0,0,0,0,0,0,0}
832 },
833 {{0,0,0,0,0,0,0}, /* 3c */
834 {0,0,0,0,1,0,0},
835 {0,0,0,1,0,0,0},
836 {0,0,1,0,0,0,0},
837 {0,1,0,0,0,0,0},
838 {0,0,1,0,0,0,0},
839 {0,0,0,1,0,0,0},
840 {0,0,0,0,1,0,0},
841 {0,0,0,0,0,0,0},
842 {0,0,0,0,0,0,0},
843 {0,0,0,0,0,0,0},
844 {0,0,0,0,0,0,0}
845 },
846 {{0,0,0,0,0,0,0}, /* 3d */
847 {0,0,0,0,0,0,0},
848 {0,0,0,0,0,0,0},
849 {0,1,1,1,1,1,0},
850 {0,0,0,0,0,0,0},
851 {0,1,1,1,1,1,0},
852 {0,0,0,0,0,0,0},
853 {0,0,0,0,0,0,0},
854 {0,0,0,0,0,0,0},
855 {0,0,0,0,0,0,0},
856 {0,0,0,0,0,0,0},
857 {0,0,0,0,0,0,0}
858 },
859 {{0,0,0,0,0,0,0}, /* 3e */
860 {0,0,1,0,0,0,0},
861 {0,0,0,1,0,0,0},
862 {0,0,0,0,1,0,0},
863 {0,0,0,0,0,1,0},
864 {0,0,0,0,1,0,0},
865 {0,0,0,1,0,0,0},
866 {0,0,1,0,0,0,0},
867 {0,0,0,0,0,0,0},
868 {0,0,0,0,0,0,0},
869 {0,0,0,0,0,0,0},
870 {0,0,0,0,0,0,0}
871 },
872 {{0,0,0,0,0,0,0}, /* 3f */
873 {0,0,1,1,1,0,0},
874 {0,1,0,0,0,1,0},
875 {0,0,0,0,0,1,0},
876 {0,0,0,0,1,0,0},
877 {0,0,0,1,0,0,0},
878 {0,0,0,0,0,0,0},
879 {0,0,0,1,0,0,0},
880 {0,0,0,0,0,0,0},
881 {0,0,0,0,0,0,0},
882 {0,0,0,0,0,0,0},
883 {0,0,0,0,0,0,0}
884 },
885 {{0,0,0,0,0,0,0}, /* 40 */
886 {0,0,1,1,1,0,0},
887 {0,1,0,0,0,1,0},
888 {0,1,0,1,0,1,0},
889 {0,1,0,1,1,1,0},
890 {0,1,0,1,1,0,0},
891 {0,1,0,0,0,0,0},
892 {0,0,1,1,1,1,0},
893 {0,0,0,0,0,0,0},
894 {0,0,0,0,0,0,0},
895 {0,0,0,0,0,0,0},
896 {0,0,0,0,0,0,0}
897 },
898 {{0,0,0,0,0,0,0}, /* 41 */
899 {0,0,0,1,0,0,0},
900 {0,0,1,0,1,0,0},
901 {0,1,0,0,0,1,0},
902 {0,1,0,0,0,1,0},
903 {0,1,1,1,1,1,0},
904 {0,1,0,0,0,1,0},
905 {0,1,0,0,0,1,0},
906 {0,0,0,0,0,0,0},
907 {0,0,0,0,0,0,0},
908 {0,0,0,0,0,0,0},
909 {0,0,0,0,0,0,0}
910 },
911 {{0,0,0,0,0,0,0}, /* 42 */
912 {0,1,1,1,1,0,0},
913 {0,0,1,0,0,1,0},
914 {0,0,1,0,0,1,0},
915 {0,0,1,1,1,0,0},
916 {0,0,1,0,0,1,0},
917 {0,0,1,0,0,1,0},
918 {0,1,1,1,1,0,0},
919 {0,0,0,0,0,0,0},
920 {0,0,0,0,0,0,0},
921 {0,0,0,0,0,0,0},
922 {0,0,0,0,0,0,0}
923 },
924 {{0,0,0,0,0,0,0}, /* 43 */
925 {0,0,1,1,1,0,0},
926 {0,1,0,0,0,1,0},
927 {0,1,0,0,0,0,0},
928 {0,1,0,0,0,0,0},
929 {0,1,0,0,0,0,0},
930 {0,1,0,0,0,1,0},
931 {0,0,1,1,1,0,0},
932 {0,0,0,0,0,0,0},
933 {0,0,0,0,0,0,0},
934 {0,0,0,0,0,0,0},
935 {0,0,0,0,0,0,0}
936 },
937 {{0,0,0,0,0,0,0}, /* 44 */
938 {0,1,1,1,1,0,0},
939 {0,0,1,0,0,1,0},
940 {0,0,1,0,0,1,0},
941 {0,0,1,0,0,1,0},
942 {0,0,1,0,0,1,0},
943 {0,0,1,0,0,1,0},
944 {0,1,1,1,1,0,0},
945 {0,0,0,0,0,0,0},
946 {0,0,0,0,0,0,0},
947 {0,0,0,0,0,0,0},
948 {0,0,0,0,0,0,0}
949 },
950 {{0,0,0,0,0,0,0}, /* 45 */
951 {0,1,1,1,1,1,0},
952 {0,1,0,0,0,0,0},
953 {0,1,0,0,0,0,0},
954 {0,1,1,1,1,0,0},
955 {0,1,0,0,0,0,0},
956 {0,1,0,0,0,0,0},
957 {0,1,1,1,1,1,0},
958 {0,0,0,0,0,0,0},
959 {0,0,0,0,0,0,0},
960 {0,0,0,0,0,0,0},
961 {0,0,0,0,0,0,0}
962 },
963 {{0,0,0,0,0,0,0}, /* 46 */
964 {0,1,1,1,1,1,0},
965 {0,1,0,0,0,0,0},
966 {0,1,0,0,0,0,0},
967 {0,1,1,1,1,0,0},
968 {0,1,0,0,0,0,0},
969 {0,1,0,0,0,0,0},
970 {0,1,0,0,0,0,0},
971 {0,0,0,0,0,0,0},
972 {0,0,0,0,0,0,0},
973 {0,0,0,0,0,0,0},
974 {0,0,0,0,0,0,0}
975 },
976 {{0,0,0,0,0,0,0}, /* 47 */
977 {0,0,1,1,1,0,0},
978 {0,1,0,0,0,1,0},
979 {0,1,0,0,0,0,0},
980 {0,1,0,0,0,0,0},
981 {0,1,0,0,1,1,0},
982 {0,1,0,0,0,1,0},
983 {0,0,1,1,1,1,0},
984 {0,0,0,0,0,0,0},
985 {0,0,0,0,0,0,0},
986 {0,0,0,0,0,0,0},
987 {0,0,0,0,0,0,0}
988 },
989 {{0,0,0,0,0,0,0}, /* 48 */
990 {0,1,0,0,0,1,0},
991 {0,1,0,0,0,1,0},
992 {0,1,0,0,0,1,0},
993 {0,1,1,1,1,1,0},
994 {0,1,0,0,0,1,0},
995 {0,1,0,0,0,1,0},
996 {0,1,0,0,0,1,0},
997 {0,0,0,0,0,0,0},
998 {0,0,0,0,0,0,0},
999 {0,0,0,0,0,0,0},
1000 {0,0,0,0,0,0,0}
1001 },
1002 {{0,0,0,0,0,0,0}, /* 49 */
1003 {0,0,1,1,1,0,0},
1004 {0,0,0,1,0,0,0},
1005 {0,0,0,1,0,0,0},
1006 {0,0,0,1,0,0,0},
1007 {0,0,0,1,0,0,0},
1008 {0,0,0,1,0,0,0},
1009 {0,0,1,1,1,0,0},
1010 {0,0,0,0,0,0,0},
1011 {0,0,0,0,0,0,0},
1012 {0,0,0,0,0,0,0},
1013 {0,0,0,0,0,0,0}
1014 },
1015 {{0,0,0,0,0,0,0}, /* 4a */
1016 {0,0,0,0,0,1,0},
1017 {0,0,0,0,0,1,0},
1018 {0,0,0,0,0,1,0},
1019 {0,0,0,0,0,1,0},
1020 {0,0,0,0,0,1,0},
1021 {0,1,0,0,0,1,0},
1022 {0,0,1,1,1,0,0},
1023 {0,0,0,0,0,0,0},
1024 {0,0,0,0,0,0,0},
1025 {0,0,0,0,0,0,0},
1026 {0,0,0,0,0,0,0}
1027 },
1028 {{0,0,0,0,0,0,0}, /* 4b */
1029 {0,1,0,0,0,1,0},
1030 {0,1,0,0,1,0,0},
1031 {0,1,0,1,0,0,0},
1032 {0,1,1,0,0,0,0},
1033 {0,1,0,1,0,0,0},
1034 {0,1,0,0,1,0,0},
1035 {0,1,0,0,0,1,0},
1036 {0,0,0,0,0,0,0},
1037 {0,0,0,0,0,0,0},
1038 {0,0,0,0,0,0,0},
1039 {0,0,0,0,0,0,0}
1040 },
1041 {{0,0,0,0,0,0,0}, /* 4c */
1042 {0,1,0,0,0,0,0},
1043 {0,1,0,0,0,0,0},
1044 {0,1,0,0,0,0,0},
1045 {0,1,0,0,0,0,0},
1046 {0,1,0,0,0,0,0},
1047 {0,1,0,0,0,0,0},
1048 {0,1,1,1,1,1,0},
1049 {0,0,0,0,0,0,0},
1050 {0,0,0,0,0,0,0},
1051 {0,0,0,0,0,0,0},
1052 {0,0,0,0,0,0,0}
1053 },
1054 {{0,0,0,0,0,0,0}, /* 4d */
1055 {0,1,0,0,0,1,0},
1056 {0,1,1,0,1,1,0},
1057 {0,1,0,1,0,1,0},
1058 {0,1,0,0,0,1,0},
1059 {0,1,0,0,0,1,0},
1060 {0,1,0,0,0,1,0},
1061 {0,1,0,0,0,1,0},
1062 {0,0,0,0,0,0,0},
1063 {0,0,0,0,0,0,0},
1064 {0,0,0,0,0,0,0},
1065 {0,0,0,0,0,0,0}
1066 },
1067 {{0,0,0,0,0,0,0}, /* 4e */
1068 {0,1,0,0,0,1,0},
1069 {0,1,0,0,0,1,0},
1070 {0,1,1,0,0,1,0},
1071 {0,1,0,1,0,1,0},
1072 {0,1,0,0,1,1,0},
1073 {0,1,0,0,0,1,0},
1074 {0,1,0,0,0,1,0},
1075 {0,0,0,0,0,0,0},
1076 {0,0,0,0,0,0,0},
1077 {0,0,0,0,0,0,0},
1078 {0,0,0,0,0,0,0}
1079 },
1080 {{0,0,0,0,0,0,0}, /* 4f */
1081 {0,0,1,1,1,0,0},
1082 {0,1,0,0,0,1,0},
1083 {0,1,0,0,0,1,0},
1084 {0,1,0,0,0,1,0},
1085 {0,1,0,0,0,1,0},
1086 {0,1,0,0,0,1,0},
1087 {0,0,1,1,1,0,0},
1088 {0,0,0,0,0,0,0},
1089 {0,0,0,0,0,0,0},
1090 {0,0,0,0,0,0,0},
1091 {0,0,0,0,0,0,0}
1092 },
1093 {{0,0,0,0,0,0,0}, /* 50 */
1094 {0,1,1,1,1,0,0},
1095 {0,1,0,0,0,1,0},
1096 {0,1,0,0,0,1,0},
1097 {0,1,1,1,1,0,0},
1098 {0,1,0,0,0,0,0},
1099 {0,1,0,0,0,0,0},
1100 {0,1,0,0,0,0,0},
1101 {0,0,0,0,0,0,0},
1102 {0,0,0,0,0,0,0},
1103 {0,0,0,0,0,0,0},
1104 {0,0,0,0,0,0,0}
1105 },
1106 {{0,0,0,0,0,0,0}, /* 51 */
1107 {0,0,1,1,1,0,0},
1108 {0,1,0,0,0,1,0},
1109 {0,1,0,0,0,1,0},
1110 {0,1,0,0,0,1,0},
1111 {0,1,0,1,0,1,0},
1112 {0,1,0,0,1,0,0},
1113 {0,0,1,1,0,1,0},
1114 {0,0,0,0,0,0,0},
1115 {0,0,0,0,0,0,0},
1116 {0,0,0,0,0,0,0},
1117 {0,0,0,0,0,0,0}
1118 },
1119 {{0,0,0,0,0,0,0}, /* 52 */
1120 {0,1,1,1,1,0,0},
1121 {0,1,0,0,0,1,0},
1122 {0,1,0,0,0,1,0},
1123 {0,1,1,1,1,0,0},
1124 {0,1,0,1,0,0,0},
1125 {0,1,0,0,1,0,0},
1126 {0,1,0,0,0,1,0},
1127 {0,0,0,0,0,0,0},
1128 {0,0,0,0,0,0,0},
1129 {0,0,0,0,0,0,0},
1130 {0,0,0,0,0,0,0}
1131 },
1132 {{0,0,0,0,0,0,0}, /* 53 */
1133 {0,0,1,1,1,0,0},
1134 {0,1,0,0,0,1,0},
1135 {0,1,0,0,0,0,0},
1136 {0,0,1,1,1,0,0},
1137 {0,0,0,0,0,1,0},
1138 {0,1,0,0,0,1,0},
1139 {0,0,1,1,1,0,0},
1140 {0,0,0,0,0,0,0},
1141 {0,0,0,0,0,0,0},
1142 {0,0,0,0,0,0,0},
1143 {0,0,0,0,0,0,0}
1144 },
1145 {{0,0,0,0,0,0,0}, /* 54 */
1146 {0,1,1,1,1,1,0},
1147 {0,0,0,1,0,0,0},
1148 {0,0,0,1,0,0,0},
1149 {0,0,0,1,0,0,0},
1150 {0,0,0,1,0,0,0},
1151 {0,0,0,1,0,0,0},
1152 {0,0,0,1,0,0,0},
1153 {0,0,0,0,0,0,0},
1154 {0,0,0,0,0,0,0},
1155 {0,0,0,0,0,0,0},
1156 {0,0,0,0,0,0,0}
1157 },
1158 {{0,0,0,0,0,0,0}, /* 55 */
1159 {0,1,0,0,0,1,0},
1160 {0,1,0,0,0,1,0},
1161 {0,1,0,0,0,1,0},
1162 {0,1,0,0,0,1,0},
1163 {0,1,0,0,0,1,0},
1164 {0,1,0,0,0,1,0},
1165 {0,0,1,1,1,0,0},
1166 {0,0,0,0,0,0,0},
1167 {0,0,0,0,0,0,0},
1168 {0,0,0,0,0,0,0},
1169 {0,0,0,0,0,0,0}
1170 },
1171 {{0,0,0,0,0,0,0}, /* 56 */
1172 {0,1,0,0,0,1,0},
1173 {0,1,0,0,0,1,0},
1174 {0,1,0,0,0,1,0},
1175 {0,0,1,0,1,0,0},
1176 {0,0,1,0,1,0,0},
1177 {0,0,0,1,0,0,0},
1178 {0,0,0,1,0,0,0},
1179 {0,0,0,0,0,0,0},
1180 {0,0,0,0,0,0,0},
1181 {0,0,0,0,0,0,0},
1182 {0,0,0,0,0,0,0}
1183 },
1184 {{0,0,0,0,0,0,0}, /* 57 */
1185 {0,1,0,0,0,1,0},
1186 {0,1,0,0,0,1,0},
1187 {0,1,0,0,0,1,0},
1188 {0,1,0,0,0,1,0},
1189 {0,1,0,1,0,1,0},
1190 {0,1,0,1,0,1,0},
1191 {0,0,1,0,1,0,0},
1192 {0,0,0,0,0,0,0},
1193 {0,0,0,0,0,0,0},
1194 {0,0,0,0,0,0,0},
1195 {0,0,0,0,0,0,0}
1196 },
1197 {{0,0,0,0,0,0,0}, /* 58 */
1198 {0,1,0,0,0,1,0},
1199 {0,1,0,0,0,1,0},
1200 {0,0,1,0,1,0,0},
1201 {0,0,0,1,0,0,0},
1202 {0,0,1,0,1,0,0},
1203 {0,1,0,0,0,1,0},
1204 {0,1,0,0,0,1,0},
1205 {0,0,0,0,0,0,0},
1206 {0,0,0,0,0,0,0},
1207 {0,0,0,0,0,0,0},
1208 {0,0,0,0,0,0,0}
1209 },
1210 {{0,0,0,0,0,0,0}, /* 59 */
1211 {0,1,0,0,0,1,0},
1212 {0,1,0,0,0,1,0},
1213 {0,0,1,0,1,0,0},
1214 {0,0,0,1,0,0,0},
1215 {0,0,0,1,0,0,0},
1216 {0,0,0,1,0,0,0},
1217 {0,0,0,1,0,0,0},
1218 {0,0,0,0,0,0,0},
1219 {0,0,0,0,0,0,0},
1220 {0,0,0,0,0,0,0},
1221 {0,0,0,0,0,0,0}
1222 },
1223 {{0,0,0,0,0,0,0}, /* 5a */
1224 {0,1,1,1,1,1,0},
1225 {0,0,0,0,0,1,0},
1226 {0,0,0,0,1,0,0},
1227 {0,0,0,1,0,0,0},
1228 {0,0,1,0,0,0,0},
1229 {0,1,0,0,0,0,0},
1230 {0,1,1,1,1,1,0},
1231 {0,0,0,0,0,0,0},
1232 {0,0,0,0,0,0,0},
1233 {0,0,0,0,0,0,0},
1234 {0,0,0,0,0,0,0}
1235 },
1236 {{0,0,0,0,0,0,0}, /* 5b */
1237 {0,0,1,1,1,1,0},
1238 {0,0,1,0,0,0,0},
1239 {0,0,1,0,0,0,0},
1240 {0,0,1,0,0,0,0},
1241 {0,0,1,0,0,0,0},
1242 {0,0,1,0,0,0,0},
1243 {0,0,1,1,1,1,0},
1244 {0,0,0,0,0,0,0},
1245 {0,0,0,0,0,0,0},
1246 {0,0,0,0,0,0,0},
1247 {0,0,0,0,0,0,0}
1248 },
1249 {{0,0,0,0,0,0,0}, /* 5c */
1250 {0,0,0,0,0,0,0},
1251 {0,1,0,0,0,0,0},
1252 {0,0,1,0,0,0,0},
1253 {0,0,0,1,0,0,0},
1254 {0,0,0,0,1,0,0},
1255 {0,0,0,0,0,1,0},
1256 {0,0,0,0,0,0,0},
1257 {0,0,0,0,0,0,0},
1258 {0,0,0,0,0,0,0},
1259 {0,0,0,0,0,0,0},
1260 {0,0,0,0,0,0,0}
1261 },
1262 {{0,0,0,0,0,0,0}, /* 5d */
1263 {0,1,1,1,1,0,0},
1264 {0,0,0,0,1,0,0},
1265 {0,0,0,0,1,0,0},
1266 {0,0,0,0,1,0,0},
1267 {0,0,0,0,1,0,0},
1268 {0,0,0,0,1,0,0},
1269 {0,1,1,1,1,0,0},
1270 {0,0,0,0,0,0,0},
1271 {0,0,0,0,0,0,0},
1272 {0,0,0,0,0,0,0},
1273 {0,0,0,0,0,0,0}
1274 },
1275 {{0,0,0,0,0,0,0}, /* 5e */
1276 {0,0,0,1,0,0,0},
1277 {0,0,1,0,1,0,0},
1278 {0,1,0,0,0,1,0},
1279 {0,0,0,0,0,0,0},
1280 {0,0,0,0,0,0,0},
1281 {0,0,0,0,0,0,0},
1282 {0,0,0,0,0,0,0},
1283 {0,0,0,0,0,0,0},
1284 {0,0,0,0,0,0,0},
1285 {0,0,0,0,0,0,0},
1286 {0,0,0,0,0,0,0}
1287 },
1288 {{0,0,0,0,0,0,0}, /* 5f */
1289 {0,0,0,0,0,0,0},
1290 {0,0,0,0,0,0,0},
1291 {0,0,0,0,0,0,0},
1292 {0,0,0,0,0,0,0},
1293 {0,0,0,0,0,0,0},
1294 {0,0,0,0,0,0,0},
1295 {0,0,0,0,0,0,0},
1296 {0,1,1,1,1,1,0},
1297 {0,0,0,0,0,0,0},
1298 {0,0,0,0,0,0,0},
1299 {0,0,0,0,0,0,0}
1300 },
1301 {{0,0,0,0,0,0,0}, /* 60 */
1302 {0,0,0,1,0,0,0},
1303 {0,0,0,0,0,0,0},
1304 {0,0,0,1,0,0,0},
1305 {0,0,0,1,0,0,0},
1306 {0,0,0,1,0,0,0},
1307 {0,0,0,1,0,0,0},
1308 {0,0,0,1,0,0,0},
1309 {0,0,0,0,0,0,0},
1310 {0,0,0,0,0,0,0},
1311 {0,0,0,0,0,0,0},
1312 {0,0,0,0,0,0,0}
1313 },
1314 {{0,0,0,0,0,0,0}, /* 61 */
1315 {0,0,0,0,0,0,0},
1316 {0,0,0,0,0,0,0},
1317 {0,0,1,1,1,0,0},
1318 {0,0,0,0,0,1,0},
1319 {0,0,1,1,1,1,0},
1320 {0,1,0,0,0,1,0},
1321 {0,0,1,1,1,1,0},
1322 {0,0,0,0,0,0,0},
1323 {0,0,0,0,0,0,0},
1324 {0,0,0,0,0,0,0},
1325 {0,0,0,0,0,0,0}
1326 },
1327 {{0,0,0,0,0,0,0}, /* 62 */
1328 {0,1,0,0,0,0,0},
1329 {0,1,0,0,0,0,0},
1330 {0,1,1,1,1,0,0},
1331 {0,1,0,0,0,1,0},
1332 {0,1,0,0,0,1,0},
1333 {0,1,0,0,0,1,0},
1334 {0,1,1,1,1,0,0},
1335 {0,0,0,0,0,0,0},
1336 {0,0,0,0,0,0,0},
1337 {0,0,0,0,0,0,0},
1338 {0,0,0,0,0,0,0}
1339 },
1340 {{0,0,0,0,0,0,0}, /* 63 */
1341 {0,0,0,0,0,0,0},
1342 {0,0,0,0,0,0,0},
1343 {0,0,1,1,1,1,0},
1344 {0,1,0,0,0,0,0},
1345 {0,1,0,0,0,0,0},
1346 {0,1,0,0,0,0,0},
1347 {0,0,1,1,1,1,0},
1348 {0,0,0,0,0,0,0},
1349 {0,0,0,0,0,0,0},
1350 {0,0,0,0,0,0,0},
1351 {0,0,0,0,0,0,0}
1352 },
1353 {{0,0,0,0,0,0,0}, /* 64 */
1354 {0,0,0,0,0,1,0},
1355 {0,0,0,0,0,1,0},
1356 {0,0,1,1,1,1,0},
1357 {0,1,0,0,0,1,0},
1358 {0,1,0,0,0,1,0},
1359 {0,1,0,0,0,1,0},
1360 {0,0,1,1,1,1,0},
1361 {0,0,0,0,0,0,0},
1362 {0,0,0,0,0,0,0},
1363 {0,0,0,0,0,0,0},
1364 {0,0,0,0,0,0,0}
1365 },
1366 {{0,0,0,0,0,0,0}, /* 65 */
1367 {0,0,0,0,0,0,0},
1368 {0,0,0,0,0,0,0},
1369 {0,0,1,1,1,0,0},
1370 {0,1,0,0,0,1,0},
1371 {0,1,1,1,1,1,0},
1372 {0,1,0,0,0,0,0},
1373 {0,0,1,1,1,0,0},
1374 {0,0,0,0,0,0,0},
1375 {0,0,0,0,0,0,0},
1376 {0,0,0,0,0,0,0},
1377 {0,0,0,0,0,0,0}
1378 },
1379 {{0,0,0,0,0,0,0}, /* 66 */
1380 {0,0,0,0,1,0,0},
1381 {0,0,0,1,0,0,0},
1382 {0,0,1,1,1,0,0},
1383 {0,0,0,1,0,0,0},
1384 {0,0,0,1,0,0,0},
1385 {0,0,0,1,0,0,0},
1386 {0,0,0,1,0,0,0},
1387 {0,0,0,0,0,0,0},
1388 {0,0,0,0,0,0,0},
1389 {0,0,0,0,0,0,0},
1390 {0,0,0,0,0,0,0}
1391 },
1392 {{0,0,0,0,0,0,0}, /* 67 */
1393 {0,0,0,0,0,0,0},
1394 {0,0,0,0,0,0,0},
1395 {0,0,1,1,1,1,0},
1396 {0,1,0,0,0,1,0},
1397 {0,1,0,0,0,1,0},
1398 {0,1,0,0,0,1,0},
1399 {0,0,1,1,1,1,0},
1400 {0,0,0,0,0,1,0},
1401 {0,0,0,1,1,0,0},
1402 {0,0,0,0,0,0,0},
1403 {0,0,0,0,0,0,0}
1404 },
1405 {{0,0,0,0,0,0,0}, /* 68 */
1406 {0,1,0,0,0,0,0},
1407 {0,1,0,0,0,0,0},
1408 {0,1,1,1,1,0,0},
1409 {0,1,0,0,0,1,0},
1410 {0,1,0,0,0,1,0},
1411 {0,1,0,0,0,1,0},
1412 {0,1,0,0,0,1,0},
1413 {0,0,0,0,0,0,0},
1414 {0,0,0,0,0,0,0},
1415 {0,0,0,0,0,0,0},
1416 {0,0,0,0,0,0,0}
1417 },
1418 {{0,0,0,0,0,0,0}, /* 69 */
1419 {0,0,0,1,0,0,0},
1420 {0,0,0,0,0,0,0},
1421 {0,0,1,1,0,0,0},
1422 {0,0,0,1,0,0,0},
1423 {0,0,0,1,0,0,0},
1424 {0,0,0,1,0,0,0},
1425 {0,0,1,1,1,0,0},
1426 {0,0,0,0,0,0,0},
1427 {0,0,0,0,0,0,0},
1428 {0,0,0,0,0,0,0},
1429 {0,0,0,0,0,0,0}
1430 },
1431 {{0,0,0,0,0,0,0}, /* 6a */
1432 {0,0,0,0,1,0,0},
1433 {0,0,0,0,0,0,0},
1434 {0,0,0,1,1,0,0},
1435 {0,0,0,0,1,0,0},
1436 {0,0,0,0,1,0,0},
1437 {0,0,0,0,1,0,0},
1438 {0,0,0,0,1,0,0},
1439 {0,1,0,0,1,0,0},
1440 {0,0,1,1,0,0,0},
1441 {0,0,0,0,0,0,0},
1442 {0,0,0,0,0,0,0}
1443 },
1444 {{0,0,0,0,0,0,0}, /* 6b */
1445 {0,1,0,0,0,0,0},
1446 {0,1,0,0,0,0,0},
1447 {0,1,0,0,1,0,0},
1448 {0,1,0,1,0,0,0},
1449 {0,1,1,0,0,0,0},
1450 {0,1,0,1,0,0,0},
1451 {0,1,0,0,1,0,0},
1452 {0,0,0,0,0,0,0},
1453 {0,0,0,0,0,0,0},
1454 {0,0,0,0,0,0,0},
1455 {0,0,0,0,0,0,0}
1456 },
1457 {{0,0,0,0,0,0,0}, /* 6c */
1458 {0,0,1,1,0,0,0},
1459 {0,0,0,1,0,0,0},
1460 {0,0,0,1,0,0,0},
1461 {0,0,0,1,0,0,0},
1462 {0,0,0,1,0,0,0},
1463 {0,0,0,1,0,0,0},
1464 {0,0,1,1,1,0,0},
1465 {0,0,0,0,0,0,0},
1466 {0,0,0,0,0,0,0},
1467 {0,0,0,0,0,0,0},
1468 {0,0,0,0,0,0,0}
1469 },
1470 {{0,0,0,0,0,0,0}, /* 6d */
1471 {0,0,0,0,0,0,0},
1472 {0,0,0,0,0,0,0},
1473 {0,1,1,0,1,0,0},
1474 {0,1,0,1,0,1,0},
1475 {0,1,0,1,0,1,0},
1476 {0,1,0,1,0,1,0},
1477 {0,1,0,1,0,1,0},
1478 {0,0,0,0,0,0,0},
1479 {0,0,0,0,0,0,0},
1480 {0,0,0,0,0,0,0},
1481 {0,0,0,0,0,0,0}
1482 },
1483 {{0,0,0,0,0,0,0}, /* 6e */
1484 {0,0,0,0,0,0,0},
1485 {0,0,0,0,0,0,0},
1486 {0,1,0,1,1,0,0},
1487 {0,1,1,0,0,1,0},
1488 {0,1,0,0,0,1,0},
1489 {0,1,0,0,0,1,0},
1490 {0,1,0,0,0,1,0},
1491 {0,0,0,0,0,0,0},
1492 {0,0,0,0,0,0,0},
1493 {0,0,0,0,0,0,0},
1494 {0,0,0,0,0,0,0}
1495 },
1496 {{0,0,0,0,0,0,0}, /* 6f */
1497 {0,0,0,0,0,0,0},
1498 {0,0,0,0,0,0,0},
1499 {0,0,1,1,1,0,0},
1500 {0,1,0,0,0,1,0},
1501 {0,1,0,0,0,1,0},
1502 {0,1,0,0,0,1,0},
1503 {0,0,1,1,1,0,0},
1504 {0,0,0,0,0,0,0},
1505 {0,0,0,0,0,0,0},
1506 {0,0,0,0,0,0,0},
1507 {0,0,0,0,0,0,0}
1508 },
1509 {{0,0,0,0,0,0,0}, /* 70 */
1510 {0,0,0,0,0,0,0},
1511 {0,0,0,0,0,0,0},
1512 {0,1,1,1,1,0,0},
1513 {0,1,0,0,0,1,0},
1514 {0,1,0,0,0,1,0},
1515 {0,1,0,0,0,1,0},
1516 {0,1,1,1,1,0,0},
1517 {0,1,0,0,0,0,0},
1518 {0,1,0,0,0,0,0},
1519 {0,0,0,0,0,0,0},
1520 {0,0,0,0,0,0,0}
1521 },
1522 {{0,0,0,0,0,0,0}, /* 71 */
1523 {0,0,0,0,0,0,0},
1524 {0,0,0,0,0,0,0},
1525 {0,0,1,1,1,1,0},
1526 {0,1,0,0,0,1,0},
1527 {0,1,0,0,0,1,0},
1528 {0,1,0,0,0,1,0},
1529 {0,0,1,1,1,1,0},
1530 {0,0,0,0,0,1,0},
1531 {0,0,0,0,0,1,0},
1532 {0,0,0,0,0,0,0},
1533 {0,0,0,0,0,0,0}
1534 },
1535 {{0,0,0,0,0,0,0}, /* 72 */
1536 {0,0,0,0,0,0,0},
1537 {0,0,0,0,0,0,0},
1538 {0,1,0,1,1,0,0},
1539 {0,1,1,0,0,1,0},
1540 {0,1,0,0,0,0,0},
1541 {0,1,0,0,0,0,0},
1542 {0,1,0,0,0,0,0},
1543 {0,0,0,0,0,0,0},
1544 {0,0,0,0,0,0,0},
1545 {0,0,0,0,0,0,0},
1546 {0,0,0,0,0,0,0}
1547 },
1548 {{0,0,0,0,0,0,0}, /* 73 */
1549 {0,0,0,0,0,0,0},
1550 {0,0,0,0,0,0,0},
1551 {0,0,1,1,1,1,0},
1552 {0,1,0,0,0,0,0},
1553 {0,0,1,1,1,0,0},
1554 {0,0,0,0,0,1,0},
1555 {0,1,1,1,1,0,0},
1556 {0,0,0,0,0,0,0},
1557 {0,0,0,0,0,0,0},
1558 {0,0,0,0,0,0,0},
1559 {0,0,0,0,0,0,0}
1560 },
1561 {{0,0,0,0,0,0,0}, /* 74 */
1562 {0,0,0,0,0,0,0},
1563 {0,0,0,1,0,0,0},
1564 {0,0,1,1,1,0,0},
1565 {0,0,0,1,0,0,0},
1566 {0,0,0,1,0,0,0},
1567 {0,0,0,1,0,0,0},
1568 {0,0,0,0,1,1,0},
1569 {0,0,0,0,0,0,0},
1570 {0,0,0,0,0,0,0},
1571 {0,0,0,0,0,0,0},
1572 {0,0,0,0,0,0,0}
1573 },
1574 {{0,0,0,0,0,0,0}, /* 75 */
1575 {0,0,0,0,0,0,0},
1576 {0,0,0,0,0,0,0},
1577 {0,1,0,0,0,1,0},
1578 {0,1,0,0,0,1,0},
1579 {0,1,0,0,0,1,0},
1580 {0,1,0,0,1,1,0},
1581 {0,0,1,1,0,1,0},
1582 {0,0,0,0,0,0,0},
1583 {0,0,0,0,0,0,0},
1584 {0,0,0,0,0,0,0},
1585 {0,0,0,0,0,0,0}
1586 },
1587 {{0,0,0,0,0,0,0}, /* 76 */
1588 {0,0,0,0,0,0,0},
1589 {0,0,0,0,0,0,0},
1590 {0,1,0,0,0,1,0},
1591 {0,1,0,0,0,1,0},
1592 {0,0,1,0,1,0,0},
1593 {0,0,1,0,1,0,0},
1594 {0,0,0,1,0,0,0},
1595 {0,0,0,0,0,0,0},
1596 {0,0,0,0,0,0,0},
1597 {0,0,0,0,0,0,0},
1598 {0,0,0,0,0,0,0}
1599 },
1600 {{0,0,0,0,0,0,0}, /* 77 */
1601 {0,0,0,0,0,0,0},
1602 {0,0,0,0,0,0,0},
1603 {0,1,0,0,0,1,0},
1604 {0,1,0,1,0,1,0},
1605 {0,1,0,1,0,1,0},
1606 {0,1,0,1,0,1,0},
1607 {0,0,1,0,1,0,0},
1608 {0,0,0,0,0,0,0},
1609 {0,0,0,0,0,0,0},
1610 {0,0,0,0,0,0,0},
1611 {0,0,0,0,0,0,0}
1612 },
1613 {{0,0,0,0,0,0,0}, /* 78 */
1614 {0,0,0,0,0,0,0},
1615 {0,0,0,0,0,0,0},
1616 {0,1,0,0,0,1,0},
1617 {0,0,1,0,1,0,0},
1618 {0,0,0,1,0,0,0},
1619 {0,0,1,0,1,0,0},
1620 {0,1,0,0,0,1,0},
1621 {0,0,0,0,0,0,0},
1622 {0,0,0,0,0,0,0},
1623 {0,0,0,0,0,0,0},
1624 {0,0,0,0,0,0,0}
1625 },
1626 {{0,0,0,0,0,0,0}, /* 79 */
1627 {0,0,0,0,0,0,0},
1628 {0,0,0,0,0,0,0},
1629 {0,1,0,0,0,1,0},
1630 {0,1,0,0,0,1,0},
1631 {0,1,0,0,0,1,0},
1632 {0,1,0,0,0,1,0},
1633 {0,0,1,1,1,1,0},
1634 {0,0,0,0,0,1,0},
1635 {0,0,1,1,1,0,0},
1636 {0,0,0,0,0,0,0},
1637 {0,0,0,0,0,0,0}
1638 },
1639 {{0,0,0,0,0,0,0}, /* 7a */
1640 {0,0,0,0,0,0,0},
1641 {0,0,0,0,0,0,0},
1642 {0,1,1,1,1,1,0},
1643 {0,0,0,0,1,0,0},
1644 {0,0,0,1,0,0,0},
1645 {0,0,1,0,0,0,0},
1646 {0,1,1,1,1,1,0},
1647 {0,0,0,0,0,0,0},
1648 {0,0,0,0,0,0,0},
1649 {0,0,0,0,0,0,0},
1650 {0,0,0,0,0,0,0}
1651 },
1652 {{0,0,0,0,0,0,0}, /* 7b */
1653 {0,0,0,0,1,0,0},
1654 {0,0,0,1,0,0,0},
1655 {0,0,0,1,0,0,0},
1656 {0,0,1,0,0,0,0},
1657 {0,0,0,1,0,0,0},
1658 {0,0,0,1,0,0,0},
1659 {0,0,0,0,1,0,0},
1660 {0,0,0,0,0,0,0},
1661 {0,0,0,0,0,0,0},
1662 {0,0,0,0,0,0,0},
1663 {0,0,0,0,0,0,0}
1664 },
1665 {{0,0,0,0,0,0,0}, /* 7c */
1666 {0,0,0,1,0,0,0},
1667 {0,0,0,1,0,0,0},
1668 {0,0,0,1,0,0,0},
1669 {0,0,0,0,0,0,0},
1670 {0,0,0,1,0,0,0},
1671 {0,0,0,1,0,0,0},
1672 {0,0,0,1,0,0,0},
1673 {0,0,0,0,0,0,0},
1674 {0,0,0,0,0,0,0},
1675 {0,0,0,0,0,0,0},
1676 {0,0,0,0,0,0,0}
1677 },
1678 {{0,0,0,0,0,0,0}, /* 7d */
1679 {0,0,0,1,0,0,0},
1680 {0,0,0,0,1,0,0},
1681 {0,0,0,0,1,0,0},
1682 {0,0,0,0,0,1,0},
1683 {0,0,0,0,1,0,0},
1684 {0,0,0,0,1,0,0},
1685 {0,0,0,1,0,0,0},
1686 {0,0,0,0,0,0,0},
1687 {0,0,0,0,0,0,0},
1688 {0,0,0,0,0,0,0},
1689 {0,0,0,0,0,0,0}
1690 },
1691 {{0,0,0,0,0,0,0}, /* 7e */
1692 {0,0,1,1,0,1,0},
1693 {0,1,0,0,1,0,0},
1694 {0,0,0,0,0,0,0},
1695 {0,0,0,0,0,0,0},
1696 {0,0,0,0,0,0,0},
1697 {0,0,0,0,0,0,0},
1698 {0,0,0,0,0,0,0},
1699 {0,0,0,0,0,0,0},
1700 {0,0,0,0,0,0,0},
1701 {0,0,0,0,0,0,0},
1702 {0,0,0,0,0,0,0}
1703 },
1704 {{0,0,0,0,0,0,0}, /* 7f */
1705 {0,1,0,1,0,1,0},
1706 {0,0,1,0,1,0,0},
1707 {0,1,0,1,0,1,0},
1708 {0,0,1,0,1,0,0},
1709 {0,1,0,1,0,1,0},
1710 {0,0,1,0,1,0,0},
1711 {0,1,0,1,0,1,0},
1712 {0,0,0,0,0,0,0},
1713 {0,0,0,0,0,0,0},
1714 {0,0,0,0,0,0,0},
1715 {0,0,0,0,0,0,0}
1716 }
1717 };
1718
1719 UBYTE XEP80_FONTS_atari_fonts[XEP80_FONTS_NUM_FONT_SETS][XEP80_FONTS_NUM_FONTS][XEP80_FONTS_CHAR_COUNT][XEP80_MAX_CHAR_HEIGHT][XEP80_CHAR_WIDTH];
1720
1721 UBYTE XEP80_FONTS_oncolor = 15;
1722 UBYTE XEP80_FONTS_offcolor = 0;
1723
InitExternalFonts(char const * charset_filename)1724 static int InitExternalFonts(char const *charset_filename)
1725 {
1726 int font_set, char_no, char_row, char_col;
1727 FILE *f;
1728 f = fopen(charset_filename, "rb");
1729 if (f == NULL)
1730 return FALSE;
1731
1732 for (font_set = 0; font_set < 2; ++font_set) {
1733 for (char_no = 0; char_no < XEP80_FONTS_CHAR_COUNT; ++char_no) {
1734 UBYTE char_data[16]; /* Each character in the ROM takes 16 bytes */
1735 if (fread(char_data, sizeof(UBYTE), 16, f) != 16) {
1736 fclose(f);
1737 return FALSE;
1738 }
1739 for (char_row = 0; char_row < XEP80_MAX_CHAR_HEIGHT; ++char_row) {
1740 UBYTE row_data = char_data[char_row];
1741 UBYTE mask = 0x80;
1742 for (char_col = 0; char_col < XEP80_CHAR_WIDTH; ++char_col) {
1743 int pixel_lit = row_data & mask; /* If !=0, then pixel is lit */
1744 /* Normal font */
1745 XEP80_FONTS_atari_fonts[font_set][NORM_FONT][char_no][char_row][char_col] =
1746 pixel_lit ? XEP80_FONTS_oncolor : XEP80_FONTS_offcolor;
1747 /* Inverse font */
1748 XEP80_FONTS_atari_fonts[font_set][REV_FONT][char_no][char_row][char_col] =
1749 pixel_lit ? XEP80_FONTS_offcolor : XEP80_FONTS_oncolor;
1750
1751 /* Normal and inverse underline fonts */
1752 if (char_row != XEP80_FONTS_UNDER_ROW) {
1753 XEP80_FONTS_atari_fonts[font_set][UNDER_FONT][char_no][char_row][char_col] =
1754 pixel_lit ? XEP80_FONTS_oncolor : XEP80_FONTS_offcolor;
1755 XEP80_FONTS_atari_fonts[font_set][REV_UNDER_FONT][char_no][char_row][char_col] =
1756 pixel_lit ? XEP80_FONTS_offcolor : XEP80_FONTS_oncolor;
1757 }
1758 else {
1759 XEP80_FONTS_atari_fonts[font_set][UNDER_FONT][char_no][char_row][char_col] =
1760 char_no < 128 ? XEP80_FONTS_oncolor : XEP80_FONTS_offcolor;
1761 XEP80_FONTS_atari_fonts[font_set][REV_UNDER_FONT][char_no][char_row][char_col] =
1762 char_no < 128 ? XEP80_FONTS_oncolor : XEP80_FONTS_offcolor;
1763 }
1764 mask >>= 1;
1765 }
1766 }
1767 }
1768 }
1769 fclose(f);
1770 return TRUE;
1771 }
1772
InitInternalFont(void)1773 static void InitInternalFont(void)
1774 {
1775 int char_no1, char_no2, char_row, char_col;
1776
1777 for (char_no1 = 0, char_no2 = XEP80_FONTS_CHAR_COUNT / 2; char_no1 < XEP80_FONTS_CHAR_COUNT / 2; ++char_no1, ++char_no2) {
1778 for (char_row = 0; char_row < XEP80_MAX_CHAR_HEIGHT; ++char_row) {
1779 for (char_col = 0; char_col < XEP80_CHAR_WIDTH; ++char_col) {
1780 int pixel_lit = internal_font[char_no1][char_row][char_col]; /* If !=0, then pixel is lit */
1781 /* Normal font */
1782 XEP80_FONTS_atari_fonts[CHAR_SET_INTERNAL][NORM_FONT][char_no1][char_row][char_col] =
1783 XEP80_FONTS_atari_fonts[CHAR_SET_INTERNAL][NORM_FONT][char_no2][char_row][char_col] =
1784 pixel_lit ? XEP80_FONTS_oncolor : XEP80_FONTS_offcolor;
1785 /* Inverse font */
1786 XEP80_FONTS_atari_fonts[CHAR_SET_INTERNAL][REV_FONT][char_no1][char_row][char_col] =
1787 XEP80_FONTS_atari_fonts[CHAR_SET_INTERNAL][REV_FONT][char_no2][char_row][char_col] =
1788 pixel_lit ? XEP80_FONTS_offcolor : XEP80_FONTS_oncolor;
1789
1790 /* Normal and inverse underline fonts */
1791 if (char_row != XEP80_FONTS_UNDER_ROW) {
1792 XEP80_FONTS_atari_fonts[CHAR_SET_INTERNAL][UNDER_FONT][char_no1][char_row][char_col] =
1793 XEP80_FONTS_atari_fonts[CHAR_SET_INTERNAL][UNDER_FONT][char_no2][char_row][char_col] =
1794 pixel_lit ? XEP80_FONTS_oncolor : XEP80_FONTS_offcolor;
1795 XEP80_FONTS_atari_fonts[CHAR_SET_INTERNAL][REV_UNDER_FONT][char_no1][char_row][char_col] =
1796 XEP80_FONTS_atari_fonts[CHAR_SET_INTERNAL][REV_UNDER_FONT][char_no2][char_row][char_col] =
1797 pixel_lit ? XEP80_FONTS_offcolor : XEP80_FONTS_oncolor;
1798 }
1799 else {
1800 XEP80_FONTS_atari_fonts[CHAR_SET_INTERNAL][UNDER_FONT][char_no1][char_row][char_col] = XEP80_FONTS_oncolor;
1801 XEP80_FONTS_atari_fonts[CHAR_SET_INTERNAL][UNDER_FONT][char_no2][char_row][char_col] = XEP80_FONTS_offcolor;
1802 XEP80_FONTS_atari_fonts[CHAR_SET_INTERNAL][REV_UNDER_FONT][char_no1][char_row][char_col] = XEP80_FONTS_oncolor;
1803 XEP80_FONTS_atari_fonts[CHAR_SET_INTERNAL][REV_UNDER_FONT][char_no2][char_row][char_col] = XEP80_FONTS_offcolor;
1804 }
1805 }
1806 }
1807 }
1808 }
1809
SetBlockFontPixel(int char_no,int row_start,int row_end,int col_start,int col_end,int pixel_lit)1810 static void SetBlockFontPixel(int char_no, int row_start, int row_end, int col_start, int col_end, int pixel_lit)
1811 {
1812 int char_row, char_col;
1813 for (char_row = row_start; char_row < row_end; ++char_row) {
1814 for (char_col = col_start; char_col < col_end; ++char_col) {
1815 /* Block Fonts */
1816 XEP80_FONTS_atari_fonts[0][BLK_FONT][char_no][char_row][char_col] =
1817 pixel_lit ? XEP80_FONTS_oncolor : XEP80_FONTS_offcolor;
1818 /* Inverse Block Fonts */
1819 XEP80_FONTS_atari_fonts[0][REV_BLK_FONT][char_no][char_row][char_col] =
1820 pixel_lit ? XEP80_FONTS_offcolor : XEP80_FONTS_oncolor;
1821 /* Normal Underline Block Fonts */
1822 /* Rev Underline Block Fonts */
1823 if (char_row != XEP80_FONTS_UNDER_ROW) {
1824 XEP80_FONTS_atari_fonts[0][UNDER_BLK_FONT][char_no][char_row][char_col] =
1825 pixel_lit ? XEP80_FONTS_oncolor : XEP80_FONTS_offcolor;
1826 XEP80_FONTS_atari_fonts[0][REV_UNDER_BLK_FONT][char_no][char_row][char_col] =
1827 pixel_lit ? XEP80_FONTS_offcolor : XEP80_FONTS_oncolor;
1828 }
1829 else {
1830 XEP80_FONTS_atari_fonts[0][UNDER_BLK_FONT][char_no][char_row][char_col] = XEP80_FONTS_oncolor;
1831 XEP80_FONTS_atari_fonts[0][REV_UNDER_BLK_FONT][char_no][char_row][char_col] = XEP80_FONTS_offcolor;
1832 }
1833 }
1834 }
1835 }
InitBlockFont(void)1836 static void InitBlockFont(void)
1837 {
1838 int char_no;
1839
1840 for (char_no = 0;char_no<XEP80_FONTS_CHAR_COUNT/2;char_no++) {
1841 if (char_no == 0x1b) {
1842 SetBlockFontPixel(char_no, 0, XEP80_MAX_CHAR_HEIGHT, 0, XEP80_CHAR_WIDTH, 0);
1843 }
1844 else {
1845 int pixel_lit = char_no & 0x01;
1846 SetBlockFontPixel(char_no, 0, BLOCK_FONT_MIDDLE_ROW, 0, BLOCK_FONT_MIDDLE_COL, pixel_lit);
1847 SetBlockFontPixel(char_no, 0, BLOCK_FONT_MIDDLE_ROW, BLOCK_FONT_RIGHT_COL, XEP80_CHAR_WIDTH, pixel_lit);
1848 pixel_lit = char_no & 0x02;
1849 SetBlockFontPixel(char_no, 0, BLOCK_FONT_MIDDLE_ROW, BLOCK_FONT_MIDDLE_COL, BLOCK_FONT_RIGHT_COL, pixel_lit);
1850 pixel_lit = char_no & 0x04;
1851 SetBlockFontPixel(char_no, BLOCK_FONT_MIDDLE_ROW, BLOCK_FONT_BOTTOM_ROW, 0, BLOCK_FONT_MIDDLE_COL, pixel_lit);
1852 pixel_lit = char_no & 0x08;
1853 SetBlockFontPixel(char_no, BLOCK_FONT_MIDDLE_ROW, BLOCK_FONT_BOTTOM_ROW, BLOCK_FONT_MIDDLE_COL, BLOCK_FONT_RIGHT_COL, pixel_lit);
1854 pixel_lit = char_no & 0x10;
1855 SetBlockFontPixel(char_no, BLOCK_FONT_MIDDLE_ROW, BLOCK_FONT_BOTTOM_ROW, BLOCK_FONT_RIGHT_COL, XEP80_CHAR_WIDTH, pixel_lit);
1856 pixel_lit = char_no & 0x20;
1857 SetBlockFontPixel(char_no, BLOCK_FONT_BOTTOM_ROW, XEP80_MAX_CHAR_HEIGHT, 0, BLOCK_FONT_MIDDLE_COL, pixel_lit);
1858 SetBlockFontPixel(char_no, BLOCK_FONT_BOTTOM_ROW, XEP80_MAX_CHAR_HEIGHT, BLOCK_FONT_RIGHT_COL, XEP80_CHAR_WIDTH, pixel_lit);
1859 pixel_lit = char_no & 0x40;
1860 SetBlockFontPixel(char_no, BLOCK_FONT_BOTTOM_ROW, XEP80_MAX_CHAR_HEIGHT, BLOCK_FONT_MIDDLE_COL, BLOCK_FONT_RIGHT_COL, pixel_lit);
1861 }
1862 }
1863 memcpy(XEP80_FONTS_atari_fonts[0][BLK_FONT][XEP80_FONTS_CHAR_COUNT/2], XEP80_FONTS_atari_fonts[0][BLK_FONT][0],
1864 XEP80_FONTS_CHAR_COUNT/2*XEP80_MAX_CHAR_HEIGHT*XEP80_CHAR_WIDTH);
1865 memcpy(XEP80_FONTS_atari_fonts[0][REV_BLK_FONT][XEP80_FONTS_CHAR_COUNT/2], XEP80_FONTS_atari_fonts[0][REV_BLK_FONT][0],
1866 XEP80_FONTS_CHAR_COUNT/2*XEP80_MAX_CHAR_HEIGHT*XEP80_CHAR_WIDTH);
1867 memcpy(XEP80_FONTS_atari_fonts[0][UNDER_BLK_FONT][XEP80_FONTS_CHAR_COUNT/2], XEP80_FONTS_atari_fonts[0][UNDER_BLK_FONT][0],
1868 XEP80_FONTS_CHAR_COUNT/2*XEP80_MAX_CHAR_HEIGHT*XEP80_CHAR_WIDTH);
1869 memcpy(XEP80_FONTS_atari_fonts[0][REV_UNDER_BLK_FONT][XEP80_FONTS_CHAR_COUNT/2], XEP80_FONTS_atari_fonts[0][REV_UNDER_BLK_FONT][0],
1870 XEP80_FONTS_CHAR_COUNT/2*XEP80_MAX_CHAR_HEIGHT*XEP80_CHAR_WIDTH);
1871 /* Copy Block fonts to international fonts */
1872 memcpy(XEP80_FONTS_atari_fonts[1][4], XEP80_FONTS_atari_fonts[0][4],
1873 4*XEP80_FONTS_CHAR_COUNT*XEP80_MAX_CHAR_HEIGHT*XEP80_CHAR_WIDTH);
1874 }
1875
XEP80_FONTS_InitFonts(char const * charset_filename)1876 int XEP80_FONTS_InitFonts(char const *charset_filename)
1877 {
1878
1879 if (!InitExternalFonts(charset_filename))
1880 return FALSE;
1881 InitInternalFont();
1882 InitBlockFont();
1883
1884 XEP80_FONTS_inited = TRUE;
1885 return TRUE;
1886 }
1887 #endif /* XEP80 */
1888