Created
February 13, 2023 14:35
-
-
Save LinuxJedi/64d8a6bd6fc9972973d6d3f2ca1f2fb1 to your computer and use it in GitHub Desktop.
Generate Amiga Topaz font for microcontrollers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: BSD-3-Clause | |
// This takes the font from AROS sources (under their APL license) and converts it to a format that can be used in microcontrollers. | |
// In AROS each line of each character is in a different block and the bytes are big endian. | |
// This code reassembles the font so that every line of the array is one character (each byte is a row of pixels), then reverses the endianess. | |
// Note that the font starts at ASCII char 32. | |
#include <stdio.h> | |
#define _EURO 1 | |
#ifdef _EURO | |
#define A4_0 0x1C /* ...***.. */ | |
#define A4_1 0x22 /* ..*...*. */ | |
#define A4_2 0x78 /* .****... */ | |
#define A4_3 0x20 /* ..*..... */ | |
#define A4_4 0x70 /* .***.... */ | |
#define A4_5 0x22 /* ..*...*. */ | |
#define A4_6 0x1C /* ...***.. */ | |
#define A4_7 0x00 /* ........ */ | |
#else | |
#define A4_0 0x42 /* .*....*. */ | |
#define A4_1 0x3C /* ..****.. */ | |
#define A4_2 0x66 /* .**..**. */ | |
#define A4_3 0x3C /* ..****.. */ | |
#define A4_4 0x42 /* .*....*. */ | |
#define A4_5 0x00 /* ........ */ | |
#define A4_6 0x00 /* ........ */ | |
#define A4_7 0x00 /* ........ */ | |
#endif | |
/****************************************************************************************/ | |
const unsigned char topaz8_chardata[] = | |
{ | |
0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x1c, 0x00, 0x0c, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x78, 0x00, 0x00, | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x18, 0x70, 0x00, 0x0f, | |
0x00, 0x18, 0x00, 0x1c, A4_0, 0xc3, 0x18, 0x3c, 0x66, 0x7e, 0x1c, 0x00, 0x3e, 0x7e, 0x7e, 0x3c, | |
0x18, 0x78, 0x78, 0x18, 0x00, 0x3e, 0x00, 0x00, 0x30, 0x38, 0x00, 0x40, 0x40, 0xc0, 0x18, 0x30, | |
0x0c, 0x18, 0x71, 0x66, 0x18, 0x1f, 0x1e, 0x30, 0x0c, 0x18, 0x66, 0x30, 0x0c, 0x18, 0x66, 0x78, | |
0x71, 0x30, 0x0c, 0x18, 0x71, 0x00, 0x00, 0x3f, 0x30, 0x0c, 0x18, 0x66, 0x06, 0xc0, 0x00, 0x30, | |
0x0c, 0x18, 0x71, 0x66, 0x18, 0x00, 0x00, 0x30, 0x0c, 0x18, 0x66, 0x30, 0x0c, 0x18, 0x00, 0x60, | |
0x71, 0x30, 0x0c, 0x18, 0x71, 0x00, 0x00, 0x00, 0x30, 0x0c, 0x18, 0x00, 0x0c, 0x60, 0x00, 0x00, | |
0x00, 0x18, 0x66, 0x66, 0x3e, 0x66, 0x36, 0x18, 0x18, 0x18, 0x66, 0x18, 0x00, 0x00, 0x00, 0x06, | |
0x3c, 0x18, 0x3c, 0x7e, 0x0c, 0x7e, 0x3c, 0x7e, 0x3c, 0x3c, 0x18, 0x18, 0x06, 0x00, 0x60, 0x3c, | |
0x3c, 0x18, 0x7c, 0x3c, 0x7c, 0x7e, 0x7e, 0x3c, 0x66, 0x7e, 0x06, 0x66, 0x60, 0x63, 0x46, 0x3c, | |
0x7c, 0x3c, 0x7c, 0x3c, 0x7e, 0x66, 0x66, 0x63, 0x66, 0x66, 0x7e, 0x18, 0x40, 0x18, 0x18, 0x00, | |
0x18, 0x00, 0x60, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x60, 0x18, 0x06, 0x60, 0x38, 0x00, 0x00, 0x00, | |
0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x00, 0x3c, | |
0x7e, 0x00, 0x0c, 0x36, A4_1, 0x66, 0x18, 0x60, 0x66, 0x81, 0x24, 0x33, 0x06, 0x81, 0x00, 0x66, | |
0x18, 0x0c, 0x0c, 0x30, 0x00, 0x7a, 0x00, 0x00, 0x70, 0x44, 0xcc, 0xc6, 0xc6, 0x23, 0x00, 0x18, | |
0x18, 0x66, 0x8e, 0x00, 0x24, 0x3c, 0x30, 0x18, 0x18, 0x66, 0x00, 0x18, 0x18, 0x66, 0x00, 0x6c, | |
0xce, 0x18, 0x18, 0x66, 0x8e, 0x66, 0xc6, 0x66, 0x18, 0x18, 0x24, 0x00, 0x08, 0xc0, 0x3c, 0x18, | |
0x18, 0x66, 0x8e, 0x00, 0x24, 0x00, 0x00, 0x18, 0x18, 0x66, 0x00, 0x18, 0x18, 0x66, 0x66, 0xfc, | |
0x8e, 0x18, 0x18, 0x66, 0x8e, 0x66, 0x18, 0x02, 0x18, 0x18, 0x66, 0x66, 0x18, 0x60, 0x66, 0x00, | |
0x00, 0x18, 0x66, 0xff, 0x60, 0x6c, 0x1c, 0x18, 0x30, 0x0c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x0c, | |
0x66, 0x38, 0x66, 0x0c, 0x1c, 0x60, 0x60, 0x06, 0x66, 0x66, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x66, | |
0x66, 0x3c, 0x66, 0x66, 0x66, 0x60, 0x60, 0x66, 0x66, 0x18, 0x06, 0x6c, 0x60, 0x77, 0x66, 0x66, | |
0x66, 0x66, 0x66, 0x60, 0x18, 0x66, 0x66, 0x63, 0x66, 0x66, 0x0c, 0x18, 0x60, 0x18, 0x3c, 0x00, | |
0x18, 0x3c, 0x60, 0x3c, 0x06, 0x3c, 0x18, 0x3e, 0x60, 0x00, 0x00, 0x60, 0x18, 0x7c, 0x7c, 0x3c, | |
0x7c, 0x3e, 0x7c, 0x3e, 0x7e, 0x66, 0x66, 0x42, 0x66, 0x66, 0x7e, 0x18, 0x18, 0x18, 0x32, 0xf0, | |
0x66, 0x18, 0x3e, 0x30, A4_2, 0x3c, 0x18, 0x3c, 0x00, 0x9d, 0x44, 0x66, 0x00, 0xb9, 0x00, 0x3c, | |
0x7e, 0x18, 0x18, 0x60, 0x66, 0x7a, 0x18, 0x00, 0x30, 0x44, 0x66, 0x4c, 0x4c, 0x66, 0x18, 0x3c, | |
0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x60, 0x7e, 0x7e, 0x7e, 0x7e, 0x3c, 0x3c, 0x3c, 0x3c, 0x66, | |
0xe6, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x6c, 0x6e, 0x66, 0x66, 0x66, 0x66, 0xc3, 0xfc, 0x66, 0x3c, | |
0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x7e, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x18, | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, | |
0x00, 0x18, 0x66, 0x66, 0x3c, 0x18, 0x38, 0x10, 0x30, 0x0c, 0xff, 0x7e, 0x00, 0x7e, 0x00, 0x18, | |
0x6e, 0x18, 0x0c, 0x18, 0x3c, 0x7c, 0x7c, 0x0c, 0x3c, 0x3e, 0x00, 0x00, 0x60, 0x00, 0x06, 0x0c, | |
0x6e, 0x66, 0x7c, 0x60, 0x66, 0x7c, 0x7c, 0x60, 0x7e, 0x18, 0x06, 0x78, 0x60, 0x7f, 0x76, 0x66, | |
0x66, 0x66, 0x66, 0x3c, 0x18, 0x66, 0x66, 0x6b, 0x3c, 0x3c, 0x18, 0x18, 0x30, 0x18, 0x7e, 0x00, | |
0x08, 0x06, 0x7c, 0x60, 0x3e, 0x66, 0x3e, 0x66, 0x7c, 0x38, 0x06, 0x6c, 0x18, 0x6a, 0x66, 0x66, | |
0x66, 0x66, 0x66, 0x60, 0x18, 0x66, 0x66, 0x42, 0x3c, 0x66, 0x0c, 0x70, 0x18, 0x0e, 0x4c, 0xc3, | |
0x66, 0x18, 0x6c, 0x78, A4_3, 0x18, 0x00, 0x66, 0x00, 0xb1, 0x3c, 0xcc, 0x00, 0xa5, 0x00, 0x00, | |
0x18, 0x30, 0x0c, 0x00, 0x66, 0x3a, 0x18, 0x00, 0x30, 0x38, 0x33, 0x58, 0x58, 0x2c, 0x30, 0x66, | |
0x66, 0x66, 0x66, 0x66, 0x66, 0x6f, 0x60, 0x60, 0x60, 0x60, 0x60, 0x18, 0x18, 0x18, 0x18, 0xf6, | |
0xf6, 0x66, 0x66, 0x66, 0x66, 0x66, 0x38, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0xc6, 0x7c, 0x06, | |
0x06, 0x06, 0x06, 0x06, 0x06, 0x1b, 0x60, 0x66, 0x66, 0x66, 0x66, 0x18, 0x18, 0x18, 0x18, 0x3c, | |
0x7c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x7e, 0xce, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, | |
0x00, 0x18, 0x00, 0x66, 0x06, 0x30, 0x6f, 0x00, 0x30, 0x0c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x30, | |
0x76, 0x18, 0x18, 0x0c, 0x6c, 0x06, 0x66, 0x18, 0x66, 0x06, 0x00, 0x00, 0x18, 0x7e, 0x18, 0x18, | |
0x6e, 0x66, 0x66, 0x60, 0x66, 0x60, 0x60, 0x6e, 0x66, 0x18, 0x06, 0x78, 0x60, 0x6b, 0x6e, 0x66, | |
0x7c, 0x66, 0x7c, 0x06, 0x18, 0x66, 0x66, 0x7f, 0x3c, 0x18, 0x30, 0x18, 0x18, 0x18, 0x00, 0x00, | |
0x00, 0x3e, 0x66, 0x60, 0x66, 0x7e, 0x18, 0x66, 0x66, 0x18, 0x06, 0x78, 0x18, 0x6a, 0x66, 0x66, | |
0x66, 0x66, 0x60, 0x3c, 0x18, 0x66, 0x66, 0x5a, 0x18, 0x66, 0x18, 0x18, 0x18, 0x18, 0x00, 0x0f, | |
0x66, 0x18, 0x3e, 0x30, A4_4, 0x3c, 0x18, 0x3c, 0x00, 0x9d, 0x00, 0x66, 0x00, 0xb9, 0x00, 0x00, | |
0x18, 0x7c, 0x78, 0x00, 0x66, 0x0a, 0x00, 0x00, 0x30, 0x00, 0x66, 0x32, 0x3e, 0xd9, 0x60, 0x7e, | |
0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7c, 0x30, 0x78, 0x78, 0x78, 0x78, 0x18, 0x18, 0x18, 0x18, 0x66, | |
0xde, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0x3c, 0xfc, 0x66, 0x3e, | |
0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x7f, 0x60, 0x7e, 0x7e, 0x7e, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x66, | |
0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0xd6, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, | |
0x00, 0x00, 0x00, 0xff, 0x7c, 0x66, 0x66, 0x00, 0x18, 0x18, 0x66, 0x18, 0x18, 0x00, 0x18, 0x60, | |
0x66, 0x18, 0x30, 0x66, 0x7e, 0x66, 0x66, 0x30, 0x66, 0x0c, 0x18, 0x18, 0x06, 0x00, 0x60, 0x00, | |
0x60, 0x7e, 0x66, 0x66, 0x66, 0x60, 0x60, 0x66, 0x66, 0x18, 0x66, 0x6c, 0x60, 0x63, 0x66, 0x66, | |
0x60, 0x6c, 0x6c, 0x06, 0x18, 0x66, 0x3c, 0x77, 0x66, 0x18, 0x60, 0x18, 0x0c, 0x18, 0x00, 0x00, | |
0x00, 0x66, 0x66, 0x60, 0x66, 0x60, 0x18, 0x3e, 0x66, 0x18, 0x06, 0x6c, 0x18, 0x6a, 0x66, 0x66, | |
0x7c, 0x3e, 0x60, 0x06, 0x18, 0x66, 0x3c, 0x7e, 0x3c, 0x3e, 0x30, 0x18, 0x18, 0x18, 0x00, 0x3c, | |
0x66, 0x18, 0x0c, 0x30, A4_5, 0x18, 0x18, 0x06, 0x00, 0x81, 0x7e, 0x33, 0x00, 0xa5, 0x00, 0x00, | |
0x00, 0x00, 0x00, 0x00, 0x66, 0x0a, 0x00, 0x00, 0x00, 0x7c, 0xcc, 0x66, 0x62, 0x33, 0x66, 0x66, | |
0x66, 0x66, 0x66, 0x66, 0x66, 0xcc, 0x1e, 0x60, 0x60, 0x60, 0x60, 0x18, 0x18, 0x18, 0x18, 0x6c, | |
0xce, 0x66, 0x66, 0x66, 0x66, 0x66, 0xc6, 0x66, 0x66, 0x66, 0x66, 0x66, 0x18, 0xc0, 0x66, 0x66, | |
0x66, 0x66, 0x66, 0x66, 0x66, 0xd8, 0x60, 0x60, 0x60, 0x60, 0x60, 0x18, 0x18, 0x18, 0x18, 0x66, | |
0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x18, 0xe6, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x7c, 0x3c, 0x00, | |
0x00, 0x18, 0x00, 0x66, 0x18, 0x46, 0x3b, 0x00, 0x0c, 0x30, 0x00, 0x00, 0x18, 0x00, 0x18, 0x40, | |
0x3c, 0x7e, 0x7e, 0x3c, 0x0c, 0x3c, 0x3c, 0x30, 0x3c, 0x38, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, | |
0x3e, 0x66, 0x7c, 0x3c, 0x7c, 0x7e, 0x60, 0x3c, 0x66, 0x7e, 0x3c, 0x66, 0x7e, 0x63, 0x66, 0x3c, | |
0x60, 0x36, 0x66, 0x3c, 0x18, 0x3c, 0x18, 0x63, 0x66, 0x18, 0x7e, 0x1e, 0x06, 0x78, 0x00, 0x7e, | |
0x00, 0x3e, 0x7c, 0x3c, 0x3e, 0x3c, 0x18, 0x06, 0x66, 0x3c, 0x06, 0x66, 0x3c, 0x6a, 0x66, 0x3c, | |
0x60, 0x06, 0x60, 0x7c, 0x0e, 0x3e, 0x18, 0x66, 0x66, 0x0c, 0x7e, 0x0e, 0x18, 0x70, 0x00, 0xf0, | |
0x7e, 0x18, 0x00, 0x7e, A4_6, 0x18, 0x18, 0x3c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, | |
0x7e, 0x00, 0x00, 0x00, 0x7f, 0x0a, 0x00, 0x18, 0x00, 0x00, 0x00, 0xcf, 0xc4, 0x67, 0x3c, 0x66, | |
0x66, 0x66, 0x66, 0x66, 0x66, 0xcf, 0x0c, 0x7e, 0x7e, 0x7e, 0x7e, 0x3c, 0x3c, 0x3c, 0x3c, 0x78, | |
0xc6, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0xfc, 0x3c, 0x3c, 0x3c, 0x3c, 0x18, 0xc0, 0x7c, 0x3e, | |
0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x77, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, | |
0x66, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x7c, 0x3e, 0x3e, 0x3e, 0x3e, 0x18, 0x60, 0x18, 0x00, | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, | |
0x60, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
0x00, 0x00, 0x00, 0x00, A4_7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, | |
0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x0e, 0x01, 0x00, 0x00, | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x30, 0x00 | |
}; | |
/****************************************************************************************/ | |
static unsigned char reverse(unsigned char b) { | |
b = (b & 0xF0) >> 4 | (b & 0x0F) << 4; | |
b = (b & 0xCC) >> 2 | (b & 0x33) << 2; | |
b = (b & 0xAA) >> 1 | (b & 0x55) << 1; | |
return b; | |
} | |
int main(void) | |
{ | |
int block_size = sizeof(topaz8_chardata) / 8; | |
printf("const unsigned char topaz[%d][8] = {\n", block_size); | |
for (int i = 0; i < block_size; i++) { | |
printf(" { 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x}, // %02x\n", reverse(topaz8_chardata[i]), reverse(topaz8_chardata[block_size+i]), reverse(topaz8_chardata[(block_size * 2) + i]), reverse(topaz8_chardata[(block_size * 3) + i]), reverse(topaz8_chardata[(block_size * 4) + i]), reverse(topaz8_chardata[(block_size * 5) + i]), reverse(topaz8_chardata[(block_size * 6) + i]), reverse(topaz8_chardata[(block_size * 7) + i]), i); | |
} | |
printf("};\n"); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment