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