diff --git a/MiSTer.ini b/MiSTer.ini index 8ef73f9d..3b8b94d7 100644 --- a/MiSTer.ini +++ b/MiSTer.ini @@ -24,6 +24,15 @@ menu_pal=0 ; 1 - PAL mode for menu core ;bootcore=lastcore ; uncomment to autoboot a core, as the last loaded core. bootcore_timeout=10 ; 10-30 timeout before autoboot, comment for autoboot without timeout. +; Option to load the custom font. Format is plain bitmap 8x8. +; Supported sizes of font: +; 768 bytes - chars 32-127 (only alpha + numeric) +; 1024 bytes - chars 0-127 +; 1136 bytes - chars 0-141 +; up to 2048 - only chars 0-141 will be used. +; if first 32 chars are empty (for sizes 1024 bytes and more) then they are skipped. +font=/font/myfont.pf + ; USER button emulation by keybaord. Usually it's reset button. ; 0 - lctrl+lalt+ralt (lctrl+lgui+rgui on keyrah) ; 1 - lctrl+lgui+rgui diff --git a/MiSTer.vcxproj b/MiSTer.vcxproj index b10acb14..0fe5bc95 100644 --- a/MiSTer.vcxproj +++ b/MiSTer.vcxproj @@ -52,6 +52,7 @@ + diff --git a/MiSTer.vcxproj.filters b/MiSTer.vcxproj.filters index ac1508bf..e783c6e6 100644 --- a/MiSTer.vcxproj.filters +++ b/MiSTer.vcxproj.filters @@ -130,6 +130,9 @@ Source Files + + Source Files + diff --git a/charrom.cpp b/charrom.cpp new file mode 100644 index 00000000..848398d7 --- /dev/null +++ b/charrom.cpp @@ -0,0 +1,207 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "hardware.h" +#include "file_io.h" + + +// *character font +unsigned char charfont[256][8] = +{ + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 0 [0x0] + { 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55 }, // 1 [0x1] + { 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A }, // 2 [0x2] + { 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14 }, // 3 [0x3] + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 4 [0x4] + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 5 [0x5] + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 6 [0x6] + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 7 [0x7] + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 8 [0x8] + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 9 [0x9] + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 10 [0xa] + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 11 [0xb] + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 12 [0xc] + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 13 [0xd] + { 0x00,0xc0,0xc0,0xe0,0x78,0x1f,0x00,0xff }, // 14 [0xe] atari logo left + { 0xff,0x00,0x1f,0x78,0xe0,0xc0,0xc0,0x00 }, // 15 [0xf] atari logo right + { 0x08,0x08,0x1C,0x1C,0x3E,0x3E,0x7F,0x7F }, // 16 [0x10] arrow left + { 0x7F,0x7F,0x3E,0x3E,0x1C,0x1C,0x08,0x08 }, // 17 [0x11] arrow right + { 0x00,0x10,0x18,0x7c,0x7c,0x18,0x10,0x00 }, // 18 [0x12] arrow up + { 0x00,0x10,0x30,0x7c,0x7c,0x30,0x10,0x00 }, // 19 [0x13] arrow down + { 0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x00,0x00 }, // 20 [0x14] + { 0x00,0x00,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C }, // 21 [0x15] + { 0x00,0x7C,0x7C,0x38,0x38,0x10,0x10,0x00 }, // 22 [0x16] mini arrow right + { 0x70,0x7c,0x72,0x72,0x72,0x7c,0x70,0x00 }, // 23 [0x17] write protect + { 0x70,0x70,0x70,0x70,0x7c,0x72,0x02,0x0c }, // 24 [0x18] write enable + { 0x3e,0x3e,0x22,0x22,0x22,0x3e,0x3e,0x00 }, // 25 [0x19] unchecked checkbox + { 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x00 }, // 26 [0x1a] checked checkbox + { 0x00,0x00,0x00,0x0c,0x0c,0x00,0x00,0x00 }, // 27 [0x1b] middle dot + { 0x68,0x78,0x6b,0x0f,0x6b,0x78,0x68,0x00 }, // 28 [0x1c] ethernet + { 0x02,0x09,0x25,0x95,0x95,0x25,0x09,0x02 }, // 29 [0x1d] wifi + { 0x00,0x90,0xD8,0x7C,0x3E,0x1B,0x09,0x00 }, // 30 [0x1e] charge + { 0x7E,0x72,0x73,0x73,0x73,0x72,0x7E,0x00 }, // 31 [0x1f] battery + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 32 [0x20] + { 0x00,0x00,0x6F,0x6F,0x00,0x00,0x00,0x00 }, // 33 [0x21] + { 0x05,0x03,0x00,0x00,0x05,0x03,0x00,0x00 }, // 34 [0x22] + { 0x14,0x7F,0x7F,0x14,0x7F,0x14,0x00,0x00 }, // 35 [0x23] + { 0x48,0xDC,0x74,0x5C,0x76,0x24,0x00,0x00 }, // 36 [0x24] + { 0x4C,0x2A,0x16,0x68,0x54,0x32,0x00,0x00 }, // 37 [0x25] + { 0x20,0x74,0x4A,0x5E,0x34,0x60,0x50,0x00 }, // 38 [0x26] + { 0x00,0x00,0x05,0x03,0x00,0x00,0x00,0x00 }, // 39 [0x27] + { 0x00,0x00,0x1C,0x3E,0x63,0x41,0x00,0x00 }, // 40 [0x28] + { 0x41,0x63,0x3E,0x1C,0x00,0x00,0x00,0x00 }, // 41 [0x29] + { 0x08,0x2A,0x1C,0x1C,0x2A,0x08,0x00,0x00 }, // 42 [0x2a] + { 0x08,0x08,0x3E,0x3E,0x08,0x08,0x00,0x00 }, // 43 [0x2b] + { 0x00,0x00,0xA0,0x60,0x00,0x00,0x00,0x00 }, // 44 [0x2c] + { 0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00 }, // 45 [0x2d] + { 0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00 }, // 46 [0x2e] + { 0x60,0x30,0x18,0x0C,0x06,0x03,0x00,0x00 }, // 47 [0x2f] + { 0x3E,0x7F,0x41,0x5D,0x7F,0x3E,0x00,0x00 }, // 48 [0x30] + { 0x00,0x01,0x7F,0x7F,0x00,0x00,0x00,0x00 }, // 49 [0x31] + { 0x71,0x79,0x49,0x49,0x4F,0x46,0x00,0x00 }, // 50 [0x32] + { 0x41,0x49,0x49,0x49,0x7F,0x36,0x00,0x00 }, // 51 [0x33] + { 0x1C,0x1E,0x13,0x7F,0x7F,0x10,0x00,0x00 }, // 52 [0x34] + { 0x4F,0x4F,0x49,0x49,0x79,0x31,0x00,0x00 }, // 53 [0x35] + { 0x3E,0x7F,0x49,0x49,0x79,0x31,0x00,0x00 }, // 54 [0x36] + { 0x01,0x01,0x79,0x7D,0x07,0x03,0x00,0x00 }, // 55 [0x37] + { 0x36,0x7F,0x49,0x49,0x7F,0x36,0x00,0x00 }, // 56 [0x38] + { 0x46,0x4F,0x49,0x49,0x7F,0x3E,0x00,0x00 }, // 57 [0x39] + { 0x00,0x00,0x6C,0x6C,0x00,0x00,0x00,0x00 }, // 58 [0x3a] + { 0x00,0x00,0xAC,0x6C,0x00,0x00,0x00,0x00 }, // 59 [0x3b] + { 0x08,0x1C,0x36,0x63,0x41,0x00,0x00,0x00 }, // 60 [0x3c] + { 0x00,0x14,0x14,0x14,0x14,0x00,0x00,0x00 }, // 61 [0x3d] + { 0x00,0x41,0x63,0x36,0x1C,0x08,0x00,0x00 }, // 62 [0x3e] + { 0x06,0x07,0x51,0x59,0x0F,0x06,0x00,0x00 }, // 63 [0x3f] + { 0x3E,0x7F,0x41,0x5D,0x5F,0x4E,0x00,0x00 }, // 64 [0x40] + { 0x7E,0x7F,0x09,0x09,0x7F,0x7E,0x00,0x00 }, // 65 [0x41] + { 0x7F,0x7F,0x49,0x49,0x7F,0x36,0x00,0x00 }, // 66 [0x42] + { 0x3E,0x7F,0x41,0x41,0x41,0x41,0x00,0x00 }, // 67 [0x43] + { 0x7F,0x7F,0x41,0x41,0x7F,0x3E,0x00,0x00 }, // 68 [0x44] + { 0x3E,0x7F,0x49,0x49,0x41,0x41,0x00,0x00 }, // 69 [0x45] + { 0x7E,0x7F,0x09,0x09,0x01,0x01,0x00,0x00 }, // 70 [0x46] + { 0x3E,0x7F,0x41,0x49,0x7B,0x7B,0x00,0x00 }, // 71 [0x47] + { 0x7F,0x7F,0x08,0x08,0x7F,0x7F,0x00,0x00 }, // 72 [0x48] + { 0x00,0x00,0x7F,0x7F,0x00,0x00,0x00,0x00 }, // 73 [0x49] + { 0x60,0x60,0x40,0x40,0x7F,0x3F,0x00,0x00 }, // 74 [0x4a] + { 0x7F,0x7F,0x08,0x1C,0x77,0x63,0x00,0x00 }, // 75 [0x4b] + { 0x3F,0x7F,0x40,0x40,0x40,0x40,0x00,0x00 }, // 76 [0x4c] + { 0x7F,0x7F,0x06,0x0C,0x06,0x7F,0x7F,0x00 }, // 77 [0x4d] + { 0x7F,0x7F,0x0C,0x18,0x7F,0x7F,0x00,0x00 }, // 78 [0x4e] + { 0x7E,0x7F,0x41,0x41,0x7F,0x3F,0x00,0x00 }, // 79 [0x4f] + { 0x7F,0x7F,0x09,0x09,0x0F,0x06,0x00,0x00 }, // 80 [0x50] + { 0x7E,0x7F,0x41,0xF1,0xFF,0x3F,0x00,0x00 }, // 81 [0x51] + { 0x7F,0x7F,0x09,0x09,0x7F,0x76,0x00,0x00 }, // 82 [0x52] + { 0x46,0x4F,0x49,0x49,0x79,0x31,0x00,0x00 }, // 83 [0x53] + { 0x01,0x01,0x7F,0x7F,0x01,0x01,0x00,0x00 }, // 84 [0x54] + { 0x3F,0x7F,0x40,0x40,0x7F,0x7F,0x00,0x00 }, // 85 [0x55] + { 0x1F,0x3F,0x60,0x60,0x3F,0x1F,0x00,0x00 }, // 86 [0x56] + { 0x7F,0x7F,0x30,0x18,0x30,0x7F,0x7F,0x00 }, // 87 [0x57] + { 0x63,0x77,0x1C,0x1C,0x77,0x63,0x00,0x00 }, // 88 [0x58] + { 0x07,0x0F,0x78,0x78,0x0F,0x07,0x00,0x00 }, // 89 [0x59] + { 0x61,0x71,0x59,0x4D,0x47,0x43,0x00,0x00 }, // 90 [0x5a] + { 0x00,0x00,0x7F,0x7F,0x41,0x41,0x00,0x00 }, // 91 [0x5b] + { 0x03,0x06,0x0C,0x18,0x30,0x60,0x00,0x00 }, // 92 [0x5c] + { 0x41,0x41,0x7F,0x7F,0x00,0x00,0x00,0x00 }, // 93 [0x5d] + { 0x08,0x0C,0x06,0x03,0x06,0x0C,0x08,0x00 }, // 94 [0x5e] + { 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00 }, // 95 [0x5f] + { 0x00,0x00,0x03,0x05,0x00,0x00,0x00,0x00 }, // 96 [0x60] + { 0x38,0x7C,0x44,0x44,0x7C,0x7C,0x00,0x00 }, // 97 [0x61] + { 0x3F,0x7F,0x44,0x44,0x7C,0x38,0x00,0x00 }, // 98 [0x62] + { 0x38,0x7C,0x44,0x44,0x44,0x44,0x00,0x00 }, // 99 [0x63] + { 0x38,0x7C,0x44,0x44,0x7F,0x3F,0x00,0x00 }, // 100 [0x64] + { 0x38,0x7C,0x54,0x54,0x5C,0x58,0x00,0x00 }, // 101 [0x65] + { 0x00,0x08,0x7E,0x7F,0x09,0x01,0x00,0x00 }, // 102 [0x66] + { 0x98,0xBC,0xA4,0xA4,0xFC,0x78,0x00,0x00 }, // 103 [0x67] + { 0x7F,0x7F,0x04,0x04,0x7C,0x78,0x00,0x00 }, // 104 [0x68] + { 0x00,0x00,0x7D,0x7D,0x00,0x00,0x00,0x00 }, // 105 [0x69] + { 0x80,0x80,0xFD,0x7D,0x00,0x00,0x00,0x00 }, // 106 [0x6a] + { 0x7F,0x7F,0x10,0x10,0x7C,0x6C,0x00,0x00 }, // 107 [0x6b] + { 0x00,0x00,0x7F,0x7F,0x40,0x00,0x00,0x00 }, // 108 [0x6c] + { 0x7C,0x7C,0x0C,0x18,0x0C,0x7C,0x78,0x00 }, // 109 [0x6d] + { 0x7C,0x7C,0x04,0x04,0x7C,0x78,0x00,0x00 }, // 110 [0x6e] + { 0x38,0x7C,0x44,0x44,0x7C,0x38,0x00,0x00 }, // 111 [0x6f] + { 0xF8,0xFC,0x44,0x44,0x7C,0x38,0x00,0x00 }, // 112 [0x70] + { 0x38,0x7C,0x44,0x44,0xFC,0xF8,0x00,0x00 }, // 113 [0x71] + { 0x7C,0x7C,0x08,0x04,0x04,0x04,0x00,0x00 }, // 114 [0x72] + { 0x48,0x5C,0x54,0x54,0x74,0x24,0x00,0x00 }, // 115 [0x73] + { 0x00,0x04,0x3F,0x7F,0x44,0x40,0x00,0x00 }, // 116 [0x74] + { 0x3C,0x7C,0x40,0x40,0x7C,0x7C,0x00,0x00 }, // 117 [0x75] + { 0x1C,0x3C,0x60,0x60,0x3C,0x1C,0x00,0x00 }, // 118 [0x76] + { 0x3C,0x7C,0x60,0x30,0x60,0x7C,0x3C,0x00 }, // 119 [0x77] + { 0x6C,0x6C,0x10,0x10,0x6C,0x6C,0x00,0x00 }, // 120 [0x78] + { 0x9C,0xBC,0xA0,0xA0,0xFC,0x7C,0x00,0x00 }, // 121 [0x79] + { 0x64,0x64,0x54,0x54,0x4C,0x4C,0x00,0x00 }, // 122 [0x7a] + { 0x08,0x08,0x3E,0x77,0x41,0x41,0x00,0x00 }, // 123 [0x7b] + { 0x00,0x00,0x77,0x77,0x00,0x00,0x00,0x00 }, // 124 [0x7c] + { 0x41,0x41,0x77,0x3E,0x08,0x08,0x00,0x00 }, // 125 [0x7d] + { 0x02,0x01,0x01,0x03,0x02,0x02,0x01,0x00 }, // 126 [0x7e] + { 0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x00 }, // 127 [0x7f] + + //dotted frame + { 0x00,0x00,0x00,0xA8,0x00,0x08,0x00,0x08 }, // 128 [0x80] TL + { 0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08 }, // 129 [0x81] T/B + { 0x00,0x08,0x00,0xA8,0x00,0x00,0x00,0x00 }, // 130 [0x82] TR + { 0x00,0x00,0x00,0xAA,0x00,0x00,0x00,0x00 }, // 131 [0x83] L/R + { 0x00,0x08,0x00,0x0A,0x00,0x00,0x00,0x00 }, // 132 [0x84] BR + { 0x00,0x00,0x00,0x0A,0x00,0x08,0x00,0x08 }, // 133 [0x85] BL + + //solid frame + { 0x00,0x00,0x00,0xF8,0x08,0x08,0x08,0x08 }, // 134 [0x86] TL + { 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08 }, // 135 [0x87] T/B + { 0x08,0x08,0x08,0xF8,0x00,0x00,0x00,0x00 }, // 136 [0x88] TR + { 0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 }, // 137 [0x89] L/R + { 0x08,0x08,0x08,0x0F,0x00,0x00,0x00,0x00 }, // 138 [0x8A] BR + { 0x00,0x00,0x00,0x0F,0x08,0x08,0x08,0x08 }, // 139 [0x8B] BL + + { 0x7F,0x41,0x41,0x41,0x41,0x41,0x7F,0x00 }, // 140 [0x8C] empty square + { 0x1C,0x1C,0x3E,0x7F,0x00,0x2A,0x49,0x00 }, // 141 [0x8D] speaker +}; + +static unsigned char tempfont[2048]; + +void LoadFont(char* name) +{ + memset(tempfont, 0, sizeof(tempfont)); + + int sz = FileLoad(name, tempfont, sizeof(tempfont)); + if (sz <= 0) return; + + int ch = 32; + int start = 0; + if (sz != 768) + { + start = 32 * 8; + for (int i = 0; i < 32 * 8; i++) if (tempfont[i]) + { + ch = 0; + start = 0; + break; + } + } + + for (int pos = start; pos < sz; pos += 8) + { + int n = 0; + for (int i = 128; i != 0; i >>= 1) + { + unsigned char b = 0; + if (tempfont[pos + 0] & i) b |= 1; + if (tempfont[pos + 1] & i) b |= 2; + if (tempfont[pos + 2] & i) b |= 4; + if (tempfont[pos + 3] & i) b |= 8; + if (tempfont[pos + 4] & i) b |= 16; + if (tempfont[pos + 5] & i) b |= 32; + if (tempfont[pos + 6] & i) b |= 64; + if (tempfont[pos + 7] & i) b |= 128; + + charfont[ch][n++] = b; + } + + ch++; + } +} diff --git a/charrom.h b/charrom.h index d703d4fe..0c6a1dec 100644 --- a/charrom.h +++ b/charrom.h @@ -1,192 +1,8 @@ #ifndef CHARROM_H #define CHARROM_H -/* -Write protect. Characters are defined in columns, not rows, LSB first -. . . . . . . . -. . * * * . . . -. * . . . * . . -. * . . . * . . -* * * * * * * . -* * * * * * * . -* * * * * * * . -. . . . . . . . -0x70,0x7c,0x72,0x72,0x72,0x7c,0x70,0x00,0x00 +extern unsigned char charfont[256][8]; -Write enable -. . . . . . . . -. . . . . * * . -. . . . * . . * -. . . . * . . * -* * * * * * . . -* * * * * * . . -* * * * * * . . -. . . . . . . . -0x70,0x70,0x70,0x70,0x7c,0x72,0x02,0x0c - -Middle Dot -. . . . . . . . -. . . . . . . . -. . . * * . . . -. . . * * . . . -. . . . . . . . -. . . . . . . . -. . . . . . . . -. . . . . . . . -0x00,0x00,0x00,0x0c,0x0c,0x00,0x00,0x00 - -*/ - -// *character font -unsigned char charfont[256][8] = -{ - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 0 [0x0] - { 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55 }, // 1 [0x1] - { 0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A }, // 2 [0x2] - { 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14 }, // 3 [0x3] - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 4 [0x4] - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 5 [0x5] - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 6 [0x6] - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 7 [0x7] - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 8 [0x8] - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 9 [0x9] - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 10 [0xa] - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 11 [0xb] - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 12 [0xc] - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 13 [0xd] - { 0x00,0xc0,0xc0,0xe0,0x78,0x1f,0x00,0xff }, // 14 [0xe] atari logo left - { 0xff,0x00,0x1f,0x78,0xe0,0xc0,0xc0,0x00 }, // 15 [0xf] atari logo right - { 0x08,0x08,0x1C,0x1C,0x3E,0x3E,0x7F,0x7F }, // 16 [0x10] arrow left - { 0x7F,0x7F,0x3E,0x3E,0x1C,0x1C,0x08,0x08 }, // 17 [0x11] arrow right - { 0x00,0x10,0x18,0x7c,0x7c,0x18,0x10,0x00 }, // 18 [0x12] arrow up - { 0x00,0x10,0x30,0x7c,0x7c,0x30,0x10,0x00 }, // 19 [0x13] arrow down - { 0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x00,0x00 }, // 20 [0x14] - { 0x00,0x00,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C }, // 21 [0x15] - { 0x00,0x7C,0x7C,0x38,0x38,0x10,0x10,0x00 }, // 22 [0x16] mini arrow right - { 0x70,0x7c,0x72,0x72,0x72,0x7c,0x70,0x00 }, // 23 [0x17] write protect - { 0x70,0x70,0x70,0x70,0x7c,0x72,0x02,0x0c }, // 24 [0x18] write enable - { 0x3e,0x3e,0x22,0x22,0x22,0x3e,0x3e,0x00 }, // 25 [0x19] unchecked checkbox - { 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x00 }, // 26 [0x1a] checked checkbox - { 0x00,0x00,0x00,0x0c,0x0c,0x00,0x00,0x00 }, // 27 [0x1b] middle dot - { 0x68,0x78,0x6b,0x0f,0x6b,0x78,0x68,0x00 }, // 28 [0x1c] ethernet - { 0x02,0x09,0x25,0x95,0x95,0x25,0x09,0x02 }, // 29 [0x1d] wifi - { 0x00,0x90,0xD8,0x7C,0x3E,0x1B,0x09,0x00 }, // 30 [0x1e] charge - { 0x7E,0x72,0x73,0x73,0x73,0x72,0x7E,0x00 }, // 31 [0x1f] battery - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, // 32 [0x20] - { 0x00,0x00,0x6F,0x6F,0x00,0x00,0x00,0x00 }, // 33 [0x21] - { 0x05,0x03,0x00,0x00,0x05,0x03,0x00,0x00 }, // 34 [0x22] - { 0x14,0x7F,0x7F,0x14,0x7F,0x14,0x00,0x00 }, // 35 [0x23] - { 0x48,0xDC,0x74,0x5C,0x76,0x24,0x00,0x00 }, // 36 [0x24] - { 0x4C,0x2A,0x16,0x68,0x54,0x32,0x00,0x00 }, // 37 [0x25] - { 0x20,0x74,0x4A,0x5E,0x34,0x60,0x50,0x00 }, // 38 [0x26] - { 0x00,0x00,0x05,0x03,0x00,0x00,0x00,0x00 }, // 39 [0x27] - { 0x00,0x00,0x1C,0x3E,0x63,0x41,0x00,0x00 }, // 40 [0x28] - { 0x41,0x63,0x3E,0x1C,0x00,0x00,0x00,0x00 }, // 41 [0x29] - { 0x08,0x2A,0x1C,0x1C,0x2A,0x08,0x00,0x00 }, // 42 [0x2a] - { 0x08,0x08,0x3E,0x3E,0x08,0x08,0x00,0x00 }, // 43 [0x2b] - { 0x00,0x00,0xA0,0x60,0x00,0x00,0x00,0x00 }, // 44 [0x2c] - { 0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00 }, // 45 [0x2d] - { 0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00 }, // 46 [0x2e] - { 0x60,0x30,0x18,0x0C,0x06,0x03,0x00,0x00 }, // 47 [0x2f] - { 0x3E,0x7F,0x41,0x5D,0x7F,0x3E,0x00,0x00 }, // 48 [0x30] - { 0x00,0x01,0x7F,0x7F,0x00,0x00,0x00,0x00 }, // 49 [0x31] - { 0x71,0x79,0x49,0x49,0x4F,0x46,0x00,0x00 }, // 50 [0x32] - { 0x41,0x49,0x49,0x49,0x7F,0x36,0x00,0x00 }, // 51 [0x33] - { 0x1C,0x1E,0x13,0x7F,0x7F,0x10,0x00,0x00 }, // 52 [0x34] - { 0x4F,0x4F,0x49,0x49,0x79,0x31,0x00,0x00 }, // 53 [0x35] - { 0x3E,0x7F,0x49,0x49,0x79,0x31,0x00,0x00 }, // 54 [0x36] - { 0x01,0x01,0x79,0x7D,0x07,0x03,0x00,0x00 }, // 55 [0x37] - { 0x36,0x7F,0x49,0x49,0x7F,0x36,0x00,0x00 }, // 56 [0x38] - { 0x46,0x4F,0x49,0x49,0x7F,0x3E,0x00,0x00 }, // 57 [0x39] - { 0x00,0x00,0x6C,0x6C,0x00,0x00,0x00,0x00 }, // 58 [0x3a] - { 0x00,0x00,0xAC,0x6C,0x00,0x00,0x00,0x00 }, // 59 [0x3b] - { 0x08,0x1C,0x36,0x63,0x41,0x00,0x00,0x00 }, // 60 [0x3c] - { 0x00,0x14,0x14,0x14,0x14,0x00,0x00,0x00 }, // 61 [0x3d] - { 0x00,0x41,0x63,0x36,0x1C,0x08,0x00,0x00 }, // 62 [0x3e] - { 0x06,0x07,0x51,0x59,0x0F,0x06,0x00,0x00 }, // 63 [0x3f] - { 0x3E,0x7F,0x41,0x5D,0x5F,0x4E,0x00,0x00 }, // 64 [0x40] - { 0x7E,0x7F,0x09,0x09,0x7F,0x7E,0x00,0x00 }, // 65 [0x41] - { 0x7F,0x7F,0x49,0x49,0x7F,0x36,0x00,0x00 }, // 66 [0x42] - { 0x3E,0x7F,0x41,0x41,0x41,0x41,0x00,0x00 }, // 67 [0x43] - { 0x7F,0x7F,0x41,0x41,0x7F,0x3E,0x00,0x00 }, // 68 [0x44] - { 0x3E,0x7F,0x49,0x49,0x41,0x41,0x00,0x00 }, // 69 [0x45] - { 0x7E,0x7F,0x09,0x09,0x01,0x01,0x00,0x00 }, // 70 [0x46] - { 0x3E,0x7F,0x41,0x49,0x7B,0x7B,0x00,0x00 }, // 71 [0x47] - { 0x7F,0x7F,0x08,0x08,0x7F,0x7F,0x00,0x00 }, // 72 [0x48] - { 0x00,0x00,0x7F,0x7F,0x00,0x00,0x00,0x00 }, // 73 [0x49] - { 0x60,0x60,0x40,0x40,0x7F,0x3F,0x00,0x00 }, // 74 [0x4a] - { 0x7F,0x7F,0x08,0x1C,0x77,0x63,0x00,0x00 }, // 75 [0x4b] - { 0x3F,0x7F,0x40,0x40,0x40,0x40,0x00,0x00 }, // 76 [0x4c] - { 0x7F,0x7F,0x06,0x0C,0x06,0x7F,0x7F,0x00 }, // 77 [0x4d] - { 0x7F,0x7F,0x0C,0x18,0x7F,0x7F,0x00,0x00 }, // 78 [0x4e] - { 0x7E,0x7F,0x41,0x41,0x7F,0x3F,0x00,0x00 }, // 79 [0x4f] - { 0x7F,0x7F,0x09,0x09,0x0F,0x06,0x00,0x00 }, // 80 [0x50] - { 0x7E,0x7F,0x41,0xF1,0xFF,0x3F,0x00,0x00 }, // 81 [0x51] - { 0x7F,0x7F,0x09,0x09,0x7F,0x76,0x00,0x00 }, // 82 [0x52] - { 0x46,0x4F,0x49,0x49,0x79,0x31,0x00,0x00 }, // 83 [0x53] - { 0x01,0x01,0x7F,0x7F,0x01,0x01,0x00,0x00 }, // 84 [0x54] - { 0x3F,0x7F,0x40,0x40,0x7F,0x7F,0x00,0x00 }, // 85 [0x55] - { 0x1F,0x3F,0x60,0x60,0x3F,0x1F,0x00,0x00 }, // 86 [0x56] - { 0x7F,0x7F,0x30,0x18,0x30,0x7F,0x7F,0x00 }, // 87 [0x57] - { 0x63,0x77,0x1C,0x1C,0x77,0x63,0x00,0x00 }, // 88 [0x58] - { 0x07,0x0F,0x78,0x78,0x0F,0x07,0x00,0x00 }, // 89 [0x59] - { 0x61,0x71,0x59,0x4D,0x47,0x43,0x00,0x00 }, // 90 [0x5a] - { 0x00,0x00,0x7F,0x7F,0x41,0x41,0x00,0x00 }, // 91 [0x5b] - { 0x03,0x06,0x0C,0x18,0x30,0x60,0x00,0x00 }, // 92 [0x5c] - { 0x41,0x41,0x7F,0x7F,0x00,0x00,0x00,0x00 }, // 93 [0x5d] - { 0x08,0x0C,0x06,0x03,0x06,0x0C,0x08,0x00 }, // 94 [0x5e] - { 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00 }, // 95 [0x5f] - { 0x00,0x00,0x03,0x05,0x00,0x00,0x00,0x00 }, // 96 [0x60] - { 0x38,0x7C,0x44,0x44,0x7C,0x7C,0x00,0x00 }, // 97 [0x61] - { 0x3F,0x7F,0x44,0x44,0x7C,0x38,0x00,0x00 }, // 98 [0x62] - { 0x38,0x7C,0x44,0x44,0x44,0x44,0x00,0x00 }, // 99 [0x63] - { 0x38,0x7C,0x44,0x44,0x7F,0x3F,0x00,0x00 }, // 100 [0x64] - { 0x38,0x7C,0x54,0x54,0x5C,0x58,0x00,0x00 }, // 101 [0x65] - { 0x00,0x08,0x7E,0x7F,0x09,0x01,0x00,0x00 }, // 102 [0x66] - { 0x98,0xBC,0xA4,0xA4,0xFC,0x78,0x00,0x00 }, // 103 [0x67] - { 0x7F,0x7F,0x04,0x04,0x7C,0x78,0x00,0x00 }, // 104 [0x68] - { 0x00,0x00,0x7D,0x7D,0x00,0x00,0x00,0x00 }, // 105 [0x69] - { 0x80,0x80,0xFD,0x7D,0x00,0x00,0x00,0x00 }, // 106 [0x6a] - { 0x7F,0x7F,0x10,0x10,0x7C,0x6C,0x00,0x00 }, // 107 [0x6b] - { 0x00,0x00,0x7F,0x7F,0x40,0x00,0x00,0x00 }, // 108 [0x6c] - { 0x7C,0x7C,0x0C,0x18,0x0C,0x7C,0x78,0x00 }, // 109 [0x6d] - { 0x7C,0x7C,0x04,0x04,0x7C,0x78,0x00,0x00 }, // 110 [0x6e] - { 0x38,0x7C,0x44,0x44,0x7C,0x38,0x00,0x00 }, // 111 [0x6f] - { 0xF8,0xFC,0x44,0x44,0x7C,0x38,0x00,0x00 }, // 112 [0x70] - { 0x38,0x7C,0x44,0x44,0xFC,0xF8,0x00,0x00 }, // 113 [0x71] - { 0x7C,0x7C,0x08,0x04,0x04,0x04,0x00,0x00 }, // 114 [0x72] - { 0x48,0x5C,0x54,0x54,0x74,0x24,0x00,0x00 }, // 115 [0x73] - { 0x00,0x04,0x3F,0x7F,0x44,0x40,0x00,0x00 }, // 116 [0x74] - { 0x3C,0x7C,0x40,0x40,0x7C,0x7C,0x00,0x00 }, // 117 [0x75] - { 0x1C,0x3C,0x60,0x60,0x3C,0x1C,0x00,0x00 }, // 118 [0x76] - { 0x3C,0x7C,0x60,0x30,0x60,0x7C,0x3C,0x00 }, // 119 [0x77] - { 0x6C,0x6C,0x10,0x10,0x6C,0x6C,0x00,0x00 }, // 120 [0x78] - { 0x9C,0xBC,0xA0,0xA0,0xFC,0x7C,0x00,0x00 }, // 121 [0x79] - { 0x64,0x64,0x54,0x54,0x4C,0x4C,0x00,0x00 }, // 122 [0x7a] - { 0x08,0x08,0x3E,0x77,0x41,0x41,0x00,0x00 }, // 123 [0x7b] - { 0x00,0x00,0x77,0x77,0x00,0x00,0x00,0x00 }, // 124 [0x7c] - { 0x41,0x41,0x77,0x3E,0x08,0x08,0x00,0x00 }, // 125 [0x7d] - { 0x02,0x01,0x01,0x03,0x02,0x02,0x01,0x00 }, // 126 [0x7e] - { 0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x00 }, // 127 [0x7f] - - //dotted frame - { 0x00,0x00,0x00,0xA8,0x00,0x08,0x00,0x08 }, // 128 [0x80] TL - { 0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08 }, // 129 [0x81] T/B - { 0x00,0x08,0x00,0xA8,0x00,0x00,0x00,0x00 }, // 130 [0x82] TR - { 0x00,0x00,0x00,0xAA,0x00,0x00,0x00,0x00 }, // 131 [0x83] L/R - { 0x00,0x08,0x00,0x0A,0x00,0x00,0x00,0x00 }, // 132 [0x84] BR - { 0x00,0x00,0x00,0x0A,0x00,0x08,0x00,0x08 }, // 133 [0x85] BL - - //solid frame - { 0x00,0x00,0x00,0xF8,0x08,0x08,0x08,0x08 }, // 134 [0x86] TL - { 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08 }, // 135 [0x87] T/B - { 0x08,0x08,0x08,0xF8,0x00,0x00,0x00,0x00 }, // 136 [0x88] TR - { 0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00 }, // 137 [0x89] L/R - { 0x08,0x08,0x08,0x0F,0x00,0x00,0x00,0x00 }, // 138 [0x8A] BR - { 0x00,0x00,0x00,0x0F,0x08,0x08,0x08,0x08 }, // 139 [0x8B] BL - - { 0x7F,0x41,0x41,0x41,0x41,0x41,0x7F,0x00 }, // 140 [0x8C] empty square - { 0x1C,0x1C,0x3E,0x7F,0x00,0x2A,0x49,0x00 }, // 141 [0x8D] speaker -}; +void LoadFont(char* name); #endif diff --git a/user_io.cpp b/user_io.cpp index cb6de1dc..1084a3d9 100644 --- a/user_io.cpp +++ b/user_io.cpp @@ -25,6 +25,7 @@ #include "sxmlc.h" #include "tzx2wav.h" #include "bootcore.h" +#include "charrom.h" #include "support.h" @@ -459,8 +460,6 @@ void SetMidiLinkMode(int mode) } } -extern unsigned char charfont[256][8]; - void user_io_init(const char *path) { char *name; @@ -509,7 +508,7 @@ void user_io_init(const char *path) bootcore_init(path); } parse_video_mode(); - if(strlen(cfg.font)) FileLoad(cfg.font, &charfont, sizeof(charfont)); + if(strlen(cfg.font)) LoadFont(cfg.font); FileLoadConfig("Volume.dat", &vol_att, 1); vol_att &= 0x1F; if (!cfg.volumectl) vol_att = 0;