/** \file MSXCharacterSets.cc
 * MSX Character Set Data implementation.
 * Extracted from Printer.cc for shared use.
 */

#include "MSXCharacterSets.hh"
#include "xrange.hh"
#include <algorithm>
#include <array>

namespace openmsx {

static constexpr std::array<uint8_t, 256 * 8> MSXFontRaw = {
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // 0
	0x3C, 0x42, 0xA5, 0x81, 0xA5, 0x99, 0x42, 0x3C,  // 1
	0x3C, 0x7E, 0xDB, 0xFF, 0xFF, 0xDB, 0x66, 0x3C,  // 2
	0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00,  // 3
	0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x10, 0x00,  // 4
	0x10, 0x38, 0x54, 0xFE, 0x54, 0x10, 0x38, 0x00,  // 5
	0x10, 0x38, 0x7C, 0xFE, 0xFE, 0x10, 0x38, 0x00,  // 6
	0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00,  // 7
	0xFF, 0xFF, 0xFF, 0xE7, 0xE7, 0xFF, 0xFF, 0xFF,  // 8
	0x38, 0x44, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00,  // 9
	0xC7, 0xBB, 0x7D, 0x7D, 0x7D, 0xBB, 0xC7, 0xFF,  // 10
	0x0F, 0x03, 0x05, 0x79, 0x88, 0x88, 0x88, 0x70,  // 11
	0x38, 0x44, 0x44, 0x44, 0x38, 0x10, 0x7C, 0x10,  // 12
	0x30, 0x28, 0x24, 0x24, 0x28, 0x20, 0xE0, 0xC0,  // 13
	0x3C, 0x24, 0x3C, 0x24, 0x24, 0xE4, 0xDC, 0x18,  // 14
	0x10, 0x54, 0x38, 0xEE, 0x38, 0x54, 0x10, 0x00,  // 15
	0x10, 0x10, 0x10, 0x7C, 0x10, 0x10, 0x10, 0x10,  // 16
	0x10, 0x10, 0x10, 0xFF, 0x00, 0x00, 0x00, 0x00,  // 17
	0x00, 0x00, 0x00, 0xFF, 0x10, 0x10, 0x10, 0x10,  // 18
	0x10, 0x10, 0x10, 0xF0, 0x10, 0x10, 0x10, 0x10,  // 19
	0x10, 0x10, 0x10, 0x1F, 0x10, 0x10, 0x10, 0x10,  // 20
	0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0x10,  // 21
	0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,  // 22
	0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,  // 23
	0x00, 0x00, 0x00, 0x1F, 0x10, 0x10, 0x10, 0x10,  // 24
	0x00, 0x00, 0x00, 0xF0, 0x10, 0x10, 0x10, 0x10,  // 25
	0x10, 0x10, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x00,  // 26
	0x10, 0x10, 0x10, 0xF0, 0x00, 0x00, 0x00, 0x00,  // 27
	0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81,  // 28
	0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,  // 29
	0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01,  // 30
	0x00, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x00, 0x00,  // 31
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // 32
	0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x20, 0x00,  // 33
	0x50, 0x50, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00,  // 34
	0x50, 0x50, 0xF8, 0x50, 0xF8, 0x50, 0x50, 0x00,  // 35
	0x20, 0x78, 0xA0, 0x70, 0x28, 0xF0, 0x20, 0x00,  // 36
	0xC0, 0xC8, 0x10, 0x20, 0x40, 0x98, 0x18, 0x00,  // 37
	0x40, 0xA0, 0x40, 0xA8, 0x90, 0x98, 0x60, 0x00,  // 38
	0x10, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,  // 39
	0x10, 0x20, 0x40, 0x40, 0x40, 0x20, 0x10, 0x00,  // 40
	0x40, 0x20, 0x10, 0x10, 0x10, 0x20, 0x40, 0x00,  // 41
	0x20, 0xA8, 0x70, 0x20, 0x70, 0xA8, 0x20, 0x00,  // 42
	0x00, 0x20, 0x20, 0xF8, 0x20, 0x20, 0x00, 0x00,  // 43
	0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x40,  // 44
	0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00,  // 45
	0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,  // 46
	0x00, 0x00, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00,  // 47
	0x70, 0x88, 0x98, 0xA8, 0xC8, 0x88, 0x70, 0x00,  // 48
	0x20, 0x60, 0xA0, 0x20, 0x20, 0x20, 0xF8, 0x00,  // 49
	0x70, 0x88, 0x08, 0x10, 0x60, 0x80, 0xF8, 0x00,  // 50
	0x70, 0x88, 0x08, 0x30, 0x08, 0x88, 0x70, 0x00,  // 51
	0x10, 0x30, 0x50, 0x90, 0xF8, 0x10, 0x10, 0x00,  // 52
	0xF8, 0x80, 0xE0, 0x10, 0x08, 0x10, 0xE0, 0x00,  // 53
	0x30, 0x40, 0x80, 0xF0, 0x88, 0x88, 0x70, 0x00,  // 54
	0xF8, 0x88, 0x10, 0x20, 0x20, 0x20, 0x20, 0x00,  // 55
	0x70, 0x88, 0x88, 0x70, 0x88, 0x88, 0x70, 0x00,  // 56
	0x70, 0x88, 0x88, 0x78, 0x08, 0x10, 0x60, 0x00,  // 57
	0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00,  // 58
	0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x20, 0x40,  // 59
	0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00,  // 60
	0x00, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0x00, 0x00,  // 61
	0xC0, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC0, 0x00,  // 62
	0x70, 0x88, 0x08, 0x10, 0x20, 0x00, 0x20, 0x00,  // 63
	0x70, 0x88, 0x08, 0x68, 0xA8, 0xA8, 0x70, 0x00,  // 64
	0x20, 0x50, 0x88, 0x88, 0xF8, 0x88, 0x88, 0x00,  // 65
	0xF0, 0x48, 0x48, 0x70, 0x48, 0x48, 0xF0, 0x00,  // 66
	0x30, 0x48, 0x80, 0x80, 0x80, 0x48, 0x30, 0x00,  // 67
	0xE0, 0x50, 0x48, 0x48, 0x48, 0x50, 0xE0, 0x00,  // 68
	0xF8, 0x80, 0x80, 0xF0, 0x80, 0x80, 0xF8, 0x00,  // 69
	0xF8, 0x80, 0x80, 0xF0, 0x80, 0x80, 0x80, 0x00,  // 70
	0x70, 0x88, 0x80, 0xB8, 0x88, 0x88, 0x70, 0x00,  // 71
	0x88, 0x88, 0x88, 0xF8, 0x88, 0x88, 0x88, 0x00,  // 72
	0x70, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x00,  // 73
	0x38, 0x10, 0x10, 0x10, 0x90, 0x90, 0x60, 0x00,  // 74
	0x88, 0x90, 0xA0, 0xC0, 0xA0, 0x90, 0x88, 0x00,  // 75
	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xF8, 0x00,  // 76
	0x88, 0xD8, 0xA8, 0xA8, 0x88, 0x88, 0x88, 0x00,  // 77
	0x88, 0xC8, 0xC8, 0xA8, 0x98, 0x98, 0x88, 0x00,  // 78
	0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00,  // 79
	0xF0, 0x88, 0x88, 0xF0, 0x80, 0x80, 0x80, 0x00,  // 80
	0x70, 0x88, 0x88, 0x88, 0xA8, 0x90, 0x68, 0x00,  // 81
	0xF0, 0x88, 0x88, 0xF0, 0xA0, 0x90, 0x88, 0x00,  // 82
	0x70, 0x88, 0x80, 0x70, 0x08, 0x88, 0x70, 0x00,  // 83
	0xF8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,  // 84
	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00,  // 85
	0x88, 0x88, 0x88, 0x88, 0x50, 0x50, 0x20, 0x00,  // 86
	0x88, 0x88, 0x88, 0xA8, 0xA8, 0xD8, 0x88, 0x00,  // 87
	0x88, 0x88, 0x50, 0x20, 0x50, 0x88, 0x88, 0x00,  // 88
	0x88, 0x88, 0x88, 0x70, 0x20, 0x20, 0x20, 0x00,  // 89
	0xF8, 0x08, 0x10, 0x20, 0x40, 0x80, 0xF8, 0x00,  // 90
	0x70, 0x40, 0x40, 0x40, 0x40, 0x40, 0x70, 0x00,  // 91
	0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x00,  // 92
	0x70, 0x10, 0x10, 0x10, 0x10, 0x10, 0x70, 0x00,  // 93
	0x20, 0x50, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00,  // 94
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00,  // 95
	0x40, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,  // 96
	0x00, 0x00, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00,  // 97
	0x80, 0x80, 0xB0, 0xC8, 0x88, 0xC8, 0xB0, 0x00,  // 98
	0x00, 0x00, 0x70, 0x88, 0x80, 0x88, 0x70, 0x00,  // 99
	0x08, 0x08, 0x68, 0x98, 0x88, 0x98, 0x68, 0x00,  // 100
	0x00, 0x00, 0x70, 0x88, 0xF8, 0x80, 0x70, 0x00,  // 101
	0x10, 0x28, 0x20, 0xF8, 0x20, 0x20, 0x20, 0x00,  // 102
	0x00, 0x00, 0x68, 0x98, 0x98, 0x68, 0x08, 0x70,  // 103
	0x80, 0x80, 0xF0, 0x88, 0x88, 0x88, 0x88, 0x00,  // 104
	0x20, 0x00, 0x60, 0x20, 0x20, 0x20, 0x70, 0x00,  // 105
	0x10, 0x00, 0x30, 0x10, 0x10, 0x10, 0x90, 0x60,  // 106
	0x40, 0x40, 0x48, 0x50, 0x60, 0x50, 0x48, 0x00,  // 107
	0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x00,  // 108
	0x00, 0x00, 0xD0, 0xA8, 0xA8, 0xA8, 0xA8, 0x00,  // 109
	0x00, 0x00, 0xB0, 0xC8, 0x88, 0x88, 0x88, 0x00,  // 110
	0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x70, 0x00,  // 111
	0x00, 0x00, 0xB0, 0xC8, 0xC8, 0xB0, 0x80, 0x80,  // 112
	0x00, 0x00, 0x68, 0x98, 0x98, 0x68, 0x08, 0x08,  // 113
	0x00, 0x00, 0xB0, 0xC8, 0x80, 0x80, 0x80, 0x00,  // 114
	0x00, 0x00, 0x78, 0x80, 0xF0, 0x08, 0xF0, 0x00,  // 115
	0x40, 0x40, 0xF0, 0x40, 0x40, 0x48, 0x30, 0x00,  // 116
	0x00, 0x00, 0x90, 0x90, 0x90, 0x90, 0x68, 0x00,  // 117
	0x00, 0x00, 0x88, 0x88, 0x88, 0x50, 0x20, 0x00,  // 118
	0x00, 0x00, 0x88, 0xA8, 0xA8, 0xA8, 0x50, 0x00,  // 119
	0x00, 0x00, 0x88, 0x50, 0x20, 0x50, 0x88, 0x00,  // 120
	0x00, 0x00, 0x88, 0x88, 0x98, 0x68, 0x08, 0x70,  // 121
	0x00, 0x00, 0xF8, 0x10, 0x20, 0x40, 0xF8, 0x00,  // 122
	0x18, 0x20, 0x20, 0x40, 0x20, 0x20, 0x18, 0x00,  // 123
	0x20, 0x20, 0x20, 0x00, 0x20, 0x20, 0x20, 0x00,  // 124
	0xC0, 0x20, 0x20, 0x10, 0x20, 0x20, 0xC0, 0x00,  // 125
	0x40, 0xA8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,  // 126
	0x00, 0x00, 0x20, 0x50, 0xF8, 0x00, 0x00, 0x00,  // 127
	0x70, 0x88, 0x80, 0x80, 0x88, 0x70, 0x20, 0x60,  // 128
	0x90, 0x00, 0x00, 0x90, 0x90, 0x90, 0x68, 0x00,  // 129
	0x10, 0x20, 0x70, 0x88, 0xF8, 0x80, 0x70, 0x00,  // 130
	0x20, 0x50, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00,  // 131
	0x48, 0x00, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00,  // 132
	0x20, 0x10, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00,  // 133
	0x20, 0x00, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00,  // 134
	0x00, 0x70, 0x80, 0x80, 0x80, 0x70, 0x10, 0x60,  // 135
	0x20, 0x50, 0x70, 0x88, 0xF8, 0x80, 0x70, 0x00,  // 136
	0x50, 0x00, 0x70, 0x88, 0xF8, 0x80, 0x70, 0x00,  // 137
	0x20, 0x10, 0x70, 0x88, 0xF8, 0x80, 0x70, 0x00,  // 138
	0x50, 0x00, 0x00, 0x60, 0x20, 0x20, 0x70, 0x00,  // 139
	0x20, 0x50, 0x00, 0x60, 0x20, 0x20, 0x70, 0x00,  // 140
	0x40, 0x20, 0x00, 0x60, 0x20, 0x20, 0x70, 0x00,  // 141
	0x50, 0x00, 0x20, 0x50, 0x88, 0xF8, 0x88, 0x00,  // 142
	0x20, 0x00, 0x20, 0x50, 0x88, 0xF8, 0x88, 0x00,  // 143
	0x10, 0x20, 0xF8, 0x80, 0xF0, 0x80, 0xF8, 0x00,  // 144
	0x00, 0x00, 0x6C, 0x12, 0x7E, 0x90, 0x6E, 0x00,  // 145
	0x3E, 0x50, 0x90, 0x9C, 0xF0, 0x90, 0x9E, 0x00,  // 146
	0x60, 0x90, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00,  // 147
	0x90, 0x00, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00,  // 148
	0x40, 0x20, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00,  // 149
	0x40, 0xA0, 0x00, 0xA0, 0xA0, 0xA0, 0x50, 0x00,  // 150
	0x40, 0x20, 0x00, 0xA0, 0xA0, 0xA0, 0x50, 0x00,  // 151
	0x90, 0x00, 0x90, 0x90, 0xB0, 0x50, 0x10, 0xE0,  // 152
	0x50, 0x00, 0x70, 0x88, 0x88, 0x88, 0x70, 0x00,  // 153
	0x50, 0x00, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00,  // 154
	0x20, 0x20, 0x78, 0x80, 0x80, 0x78, 0x20, 0x20,  // 155
	0x18, 0x24, 0x20, 0xF8, 0x20, 0xE2, 0x5C, 0x00,  // 156
	0x88, 0x50, 0x20, 0xF8, 0x20, 0xF8, 0x20, 0x00,  // 157
	0xC0, 0xA0, 0xA0, 0xC8, 0x9C, 0x88, 0x88, 0x8C,  // 158
	0x18, 0x20, 0x20, 0xF8, 0x20, 0x20, 0x20, 0x40,  // 159
	0x10, 0x20, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00,  // 160
	0x10, 0x20, 0x00, 0x60, 0x20, 0x20, 0x70, 0x00,  // 161
	0x20, 0x40, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00,  // 162
	0x20, 0x40, 0x00, 0x90, 0x90, 0x90, 0x68, 0x00,  // 163
	0x50, 0xA0, 0x00, 0xA0, 0xD0, 0x90, 0x90, 0x00,  // 164
	0x28, 0x50, 0x00, 0xC8, 0xA8, 0x98, 0x88, 0x00,  // 165
	0x00, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00, 0xF8,  // 166
	0x00, 0x60, 0x90, 0x90, 0x90, 0x60, 0x00, 0xF0,  // 167
	0x20, 0x00, 0x20, 0x40, 0x80, 0x88, 0x70, 0x00,  // 168
	0x00, 0x00, 0x00, 0xF8, 0x80, 0x80, 0x00, 0x00,  // 169
	0x00, 0x00, 0x00, 0xF8, 0x08, 0x08, 0x00, 0x00,  // 170
	0x84, 0x88, 0x90, 0xA8, 0x54, 0x84, 0x08, 0x1C,  // 171
	0x84, 0x88, 0x90, 0xA8, 0x58, 0xA8, 0x3C, 0x08,  // 172
	0x20, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x00,  // 173
	0x00, 0x00, 0x24, 0x48, 0x90, 0x48, 0x24, 0x00,  // 174
	0x00, 0x00, 0x90, 0x48, 0x24, 0x48, 0x90, 0x00,  // 175
	0x28, 0x50, 0x20, 0x50, 0x88, 0xF8, 0x88, 0x00,  // 176
	0x28, 0x50, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00,  // 177
	0x28, 0x50, 0x00, 0x70, 0x20, 0x20, 0x70, 0x00,  // 178
	0x28, 0x50, 0x00, 0x20, 0x20, 0x20, 0x70, 0x00,  // 179
	0x28, 0x50, 0x00, 0x70, 0x88, 0x88, 0x70, 0x00,  // 180
	0x50, 0xA0, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00,  // 181
	0x28, 0x50, 0x00, 0x88, 0x88, 0x88, 0x70, 0x00,  // 182
	0x50, 0xA0, 0x00, 0xA0, 0xA0, 0xA0, 0x50, 0x00,  // 183
	0xFC, 0x48, 0x48, 0x48, 0xE8, 0x08, 0x50, 0x20,  // 184
	0x00, 0x50, 0x00, 0x50, 0x50, 0x50, 0x10, 0x20,  // 185
	0xC0, 0x44, 0xC8, 0x54, 0xEC, 0x54, 0x9E, 0x04,  // 186
	0x10, 0xA8, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,  // 187
	0x00, 0x20, 0x50, 0x88, 0x50, 0x20, 0x00, 0x00,  // 188
	0x88, 0x10, 0x20, 0x40, 0x80, 0x28, 0x00, 0x00,  // 189
	0x7C, 0xA8, 0xA8, 0x68, 0x28, 0x28, 0x28, 0x00,  // 190
	0x38, 0x40, 0x30, 0x48, 0x48, 0x30, 0x08, 0x70,  // 191
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,  // 192
	0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F,  // 193
	0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // 194
	0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // 195
	0x00, 0x00, 0x00, 0x3C, 0x3C, 0x00, 0x00, 0x00,  // 196
	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,  // 197
	0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,  // 198
	0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0,  // 199
	0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,  // 200
	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,  // 201
	0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,  // 202
	0x11, 0x22, 0x44, 0x88, 0x11, 0x22, 0x44, 0x88,  // 203
	0x88, 0x44, 0x22, 0x11, 0x88, 0x44, 0x22, 0x11,  // 204
	0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,  // 205
	0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7C, 0xFE,  // 206
	0x80, 0xC0, 0xE0, 0xF0, 0xE0, 0xC0, 0x80, 0x00,  // 207
	0x01, 0x03, 0x07, 0x0F, 0x07, 0x03, 0x01, 0x00,  // 208
	0xFF, 0x7E, 0x3C, 0x18, 0x18, 0x3C, 0x7E, 0xFF,  // 209
	0x81, 0xC3, 0xE7, 0xFF, 0xFF, 0xE7, 0xC3, 0x81,  // 210
	0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00,  // 211
	0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F,  // 212
	0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00,  // 213
	0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0,  // 214
	0x33, 0x33, 0xCC, 0xCC, 0x33, 0x33, 0xCC, 0xCC,  // 215
	0x00, 0x20, 0x20, 0x50, 0x50, 0x88, 0xF8, 0x00,  // 216
	0x20, 0x20, 0x70, 0x20, 0x70, 0x20, 0x20, 0x00,  // 217
	0x00, 0x00, 0x00, 0x50, 0x88, 0xA8, 0x50, 0x00,  // 218
	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  // 219
	0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,  // 220
	0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,  // 221
	0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,  // 222
	0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,  // 223
	0x00, 0x00, 0x68, 0x90, 0x90, 0x90, 0x68, 0x00,  // 224
	0x30, 0x48, 0x48, 0x70, 0x48, 0x48, 0x70, 0xC0,  // 225
	0xF8, 0x88, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00,  // 226
	0xF8, 0x50, 0x50, 0x50, 0x50, 0x50, 0x98, 0x00,  // 227
	0xF8, 0x88, 0x40, 0x20, 0x40, 0x88, 0xF8, 0x00,  // 228
	0x00, 0x00, 0x78, 0x90, 0x90, 0x90, 0x60, 0x00,  // 229
	0x00, 0x50, 0x50, 0x50, 0x50, 0x68, 0x80, 0x80,  // 230
	0x00, 0x50, 0xA0, 0x20, 0x20, 0x20, 0x20, 0x00,  // 231
	0xF8, 0x20, 0x70, 0xA8, 0xA8, 0x70, 0x20, 0xF8,  // 232
	0x20, 0x50, 0x88, 0xF8, 0x88, 0x50, 0x20, 0x00,  // 233
	0x70, 0x88, 0x88, 0x88, 0x50, 0x50, 0xD8, 0x00,  // 234
	0x30, 0x40, 0x40, 0x20, 0x50, 0x50, 0x50, 0x20,  // 235
	0x00, 0x00, 0x00, 0x50, 0xA8, 0xA8, 0x50, 0x00,  // 236
	0x08, 0x70, 0xA8, 0xA8, 0xA8, 0x70, 0x80, 0x00,  // 237
	0x38, 0x40, 0x80, 0xF8, 0x80, 0x40, 0x38, 0x00,  // 238
	0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00,  // 239
	0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0x00,  // 240
	0x20, 0x20, 0xF8, 0x20, 0x20, 0x00, 0xF8, 0x00,  // 241
	0xC0, 0x30, 0x08, 0x30, 0xC0, 0x00, 0xF8, 0x00,  // 242
	0x18, 0x60, 0x80, 0x60, 0x18, 0x00, 0xF8, 0x00,  // 243
	0x10, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,  // 244
	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xA0, 0x40,  // 245
	0x00, 0x20, 0x00, 0xF8, 0x00, 0x20, 0x00, 0x00,  // 246
	0x00, 0x50, 0xA0, 0x00, 0x50, 0xA0, 0x00, 0x00,  // 247
	0x00, 0x18, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00,  // 248
	0x00, 0x30, 0x78, 0x78, 0x30, 0x00, 0x00, 0x00,  // 249
	0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,  // 250
	0x3E, 0x20, 0x20, 0x20, 0xA0, 0x60, 0x20, 0x00,  // 251
	0xA0, 0x50, 0x50, 0x50, 0x00, 0x00, 0x00, 0x00,  // 252
	0x40, 0xA0, 0x20, 0x40, 0xE0, 0x00, 0x00, 0x00,  // 253
	0x00, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00,  // 254
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // 255
};

std::span<const uint8_t, 8 * 256> getMSXFontRaw()
{
	return MSXFontRaw;
}

// The German DIN and International character sets are identical, apart from the style of zero (0) character.
// The international character set has a zero with a slash, while the DIN character set has a dotted zero.
static constexpr auto MSXDINFontRaw = []{
	auto result = MSXFontRaw;
	// character 48: 0x70, 0x88, 0x98, 0xA8, 0xC8, 0x88, 0x70, 0x00
	// replaces by:  0x70, 0x88, 0x88, 0xA8, 0x88, 0x88, 0x70, 0x00
	size_t offset = 48 * 8;
	result[offset + 2] = 0x88;
	result[offset + 4] = 0x88;
	return result;
}();

std::span<const uint8_t, 8 * 256> getMSXDINFontRaw()
{
	return MSXDINFontRaw;
}

static constexpr auto MSXAsciiFontRaw = []{
	std::array<uint8_t, 96 * 8> result = {};
	for (size_t i = 0; i < result.size(); ++i) {
		result[i] = MSXFontRaw[0x20 * 8 + i];
	}
	return result;
}();

static constexpr std::array<uint8_t, 32 * 8> MSXJPFontRawPrefix = {
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // 0
	0x7E, 0x42, 0x7E, 0x42, 0x7E, 0x42, 0x82, 0x00,  // 1
	0x10, 0x92, 0x54, 0x10, 0x28, 0x44, 0x82, 0x00,  // 2
	0x12, 0x14, 0xF8, 0x14, 0x34, 0x52, 0x92, 0x00,  // 3
	0x10, 0x10, 0xFE, 0x10, 0x38, 0x54, 0x92, 0x00,  // 4
	0x10, 0x28, 0x7C, 0x92, 0x38, 0x54, 0xFE, 0x00,  // 5
	0x10, 0x10, 0x10, 0x7C, 0x10, 0x10, 0xFE, 0x00,  // 6
	0x7E, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x7E, 0x00,  // 7
	0x40, 0x7E, 0x48, 0x3C, 0x28, 0x7E, 0x08, 0x00,  // 8
	0xFE, 0x92, 0x92, 0xFE, 0x82, 0x82, 0x86, 0x00,  // 9
	0x04, 0xEE, 0xA4, 0xEF, 0xA2, 0xEA, 0x06, 0x00,  // 10
	0x28, 0x44, 0x82, 0x3C, 0x14, 0x24, 0x4C, 0x00,  // 11
	0x28, 0xC8, 0x5C, 0xEA, 0x6C, 0xC8, 0x50, 0x00,  // 12
	0x7C, 0x20, 0x7C, 0x44, 0x7C, 0x44, 0x7C, 0x00,  // 13
	0x0C, 0x70, 0x10, 0xFE, 0x10, 0x10, 0x10, 0x00,  // 14
	0x7E, 0x10, 0x1E, 0x12, 0x22, 0x44, 0x08, 0x00,  // 15
	0x00, 0x7C, 0x28, 0x28, 0x28, 0x4E, 0x00, 0x00,  // 16
	0x10, 0x10, 0x10, 0xFF, 0x00, 0x00, 0x00, 0x00,  // 17
	0x00, 0x00, 0x00, 0xFF, 0x10, 0x10, 0x10, 0x10,  // 18
	0x10, 0x10, 0x10, 0xF0, 0x10, 0x10, 0x10, 0x10,  // 19
	0x10, 0x10, 0x10, 0x1F, 0x10, 0x10, 0x10, 0x10,  // 20
	0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0x10,  // 21
	0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,  // 22
	0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,  // 23
	0x00, 0x00, 0x00, 0x1F, 0x10, 0x10, 0x10, 0x10,  // 24
	0x00, 0x00, 0x00, 0xF0, 0x10, 0x10, 0x10, 0x10,  // 25
	0x10, 0x10, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x00,  // 26
	0x10, 0x10, 0x10, 0xF0, 0x00, 0x00, 0x00, 0x00,  // 27
	0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81,  // 28
	0x10, 0x7C, 0x10, 0x10, 0x28, 0x44, 0x82, 0x00,  // 29
	0x10, 0x10, 0xFE, 0x92, 0xFE, 0x10, 0x10, 0x00,  // 30
	0x10, 0x10, 0x54, 0x54, 0x92, 0x10, 0x30, 0x00,  // 31
};

static constexpr std::array<uint8_t, 128 * 8> MSXJPFontRawSuffix = {
	0x10, 0x38, 0x7C, 0xFE, 0xFE, 0x38, 0x7C, 0x00,  // 128
	0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00,  // 129
	0x38, 0x38, 0xFE, 0xFE, 0xD6, 0x10, 0x7C, 0x00,  // 130
	0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x10, 0x00,  // 131
	0x00, 0x78, 0x84, 0x84, 0x84, 0x84, 0x78, 0x00,  // 132
	0x00, 0x78, 0xFC, 0xFC, 0xFC, 0xFC, 0x78, 0x00,  // 133
	0x20, 0xF0, 0x4C, 0x70, 0xA8, 0x40, 0x3C, 0x00,  // 134
	0x00, 0x20, 0x78, 0x20, 0x78, 0xB4, 0x64, 0x00,  // 135
	0x00, 0x00, 0x88, 0x84, 0x84, 0x84, 0x40, 0x00,  // 136
	0x00, 0x70, 0x00, 0x70, 0x88, 0x08, 0x30, 0x00,  // 137
	0x00, 0x70, 0x00, 0xF0, 0x20, 0x60, 0x98, 0x00,  // 138
	0x00, 0x20, 0xF8, 0x24, 0x78, 0xA4, 0x68, 0x00,  // 139
	0x00, 0x90, 0x58, 0x64, 0xA8, 0x20, 0x10, 0x00,  // 140
	0x00, 0x10, 0xB8, 0xD4, 0x94, 0x18, 0x20, 0x00,  // 141
	0x00, 0x10, 0x1C, 0x10, 0x70, 0x98, 0x74, 0x00,  // 142
	0x00, 0x00, 0x00, 0x78, 0x04, 0x04, 0x38, 0x00,  // 143
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // 144
	0x20, 0x7C, 0x20, 0x7C, 0xAA, 0x92, 0x64, 0x00,  // 145
	0x00, 0x84, 0x82, 0x82, 0x82, 0x80, 0x40, 0x00,  // 146
	0x38, 0x00, 0x38, 0x44, 0x04, 0x08, 0x30, 0x00,  // 147
	0x70, 0x00, 0xF8, 0x10, 0x20, 0x60, 0x9C, 0x00,  // 148
	0x24, 0xFA, 0x20, 0x7C, 0xA2, 0xA2, 0x44, 0x00,  // 149
	0x40, 0x44, 0xF2, 0x4A, 0x48, 0x88, 0x30, 0x00,  // 150
	0x20, 0xFC, 0x10, 0xFC, 0x08, 0x80, 0x78, 0x00,  // 151
	0x08, 0x10, 0x20, 0x40, 0x20, 0x10, 0x08, 0x00,  // 152
	0x04, 0x84, 0x9E, 0x84, 0x84, 0x84, 0x48, 0x00,  // 153
	0x78, 0x04, 0x00, 0x00, 0x00, 0x80, 0x7C, 0x00,  // 154
	0x10, 0xFE, 0x08, 0x04, 0x04, 0x80, 0x78, 0x00,  // 155
	0x80, 0x80, 0x80, 0x80, 0x84, 0x88, 0x70, 0x00,  // 156
	0x08, 0xFE, 0x38, 0x48, 0x38, 0x08, 0x10, 0x00,  // 157
	0x44, 0x44, 0xFE, 0x44, 0x48, 0x40, 0x3C, 0x00,  // 158
	0x44, 0x28, 0xFE, 0x20, 0x40, 0x40, 0x3C, 0x00,  // 159
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // 160
	0x00, 0x00, 0x00, 0x00, 0x60, 0x90, 0x60, 0x00,  // 161
	0x38, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00,  // 162
	0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0xE0, 0x00,  // 163
	0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x00,  // 164
	0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00,  // 165
	0xF8, 0x08, 0xF8, 0x08, 0x10, 0x20, 0x40, 0x00,  // 166
	0x00, 0x00, 0xF0, 0x10, 0x60, 0x40, 0x80, 0x00,  // 167
	0x00, 0x10, 0x20, 0x60, 0xA0, 0x20, 0x20, 0x00,  // 168
	0x00, 0x20, 0xF0, 0x90, 0x10, 0x20, 0x40, 0x00,  // 169
	0x00, 0x00, 0xF0, 0x20, 0x20, 0x20, 0xF0, 0x00,  // 170
	0x00, 0x20, 0xF0, 0x60, 0xA0, 0xA0, 0x20, 0x00,  // 171
	0x00, 0x40, 0xF8, 0x48, 0x50, 0x40, 0x40, 0x00,  // 172
	0x00, 0x00, 0x70, 0x10, 0x10, 0x10, 0xF8, 0x00,  // 173
	0x00, 0x00, 0xF0, 0x10, 0xF0, 0x10, 0xF0, 0x00,  // 174
	0x00, 0x00, 0xA8, 0xA8, 0x08, 0x10, 0x20, 0x00,  // 175
	0x00, 0x00, 0x80, 0x7C, 0x00, 0x00, 0x00, 0x00,  // 176
	0xF8, 0x08, 0x28, 0x30, 0x20, 0x20, 0x40, 0x00,  // 177
	0x08, 0x10, 0x20, 0x60, 0xA0, 0x20, 0x20, 0x00,  // 178
	0x20, 0xF8, 0x88, 0x88, 0x08, 0x10, 0x20, 0x00,  // 179
	0x00, 0xF8, 0x20, 0x20, 0x20, 0x20, 0xF8, 0x00,  // 180
	0x10, 0xF8, 0x10, 0x30, 0x50, 0x90, 0x10, 0x00,  // 181
	0x20, 0xF8, 0x28, 0x28, 0x28, 0x48, 0x88, 0x00,  // 182
	0x20, 0xF8, 0x20, 0xF8, 0x20, 0x20, 0x20, 0x00,  // 183
	0x78, 0x48, 0x88, 0x08, 0x08, 0x10, 0x20, 0x00,  // 184
	0x40, 0x78, 0x50, 0x90, 0x10, 0x10, 0x20, 0x00,  // 185
	0x00, 0xF8, 0x08, 0x08, 0x08, 0x08, 0xF8, 0x00,  // 186
	0x50, 0xF8, 0x50, 0x50, 0x10, 0x10, 0x20, 0x00,  // 187
	0x00, 0xC0, 0x08, 0xC8, 0x08, 0x10, 0xE0, 0x00,  // 188
	0x00, 0xF8, 0x08, 0x10, 0x20, 0x50, 0x88, 0x00,  // 189
	0x40, 0xF8, 0x48, 0x50, 0x40, 0x40, 0x38, 0x00,  // 190
	0x88, 0x88, 0x48, 0x08, 0x10, 0x20, 0x40, 0x00,  // 191
	0x78, 0x48, 0x78, 0x88, 0x08, 0x10, 0x20, 0x00,  // 192
	0x10, 0xE0, 0x20, 0xF8, 0x20, 0x20, 0x40, 0x00,  // 193
	0xA8, 0xA8, 0xA8, 0x08, 0x08, 0x10, 0x20, 0x00,  // 194
	0x70, 0x00, 0xF8, 0x20, 0x20, 0x20, 0x40, 0x00,  // 195
	0x40, 0x40, 0x60, 0x50, 0x48, 0x40, 0x40, 0x00,  // 196
	0x20, 0xF8, 0x20, 0x20, 0x20, 0x20, 0x40, 0x00,  // 197
	0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00,  // 198
	0x00, 0xF8, 0x08, 0xD0, 0x20, 0x50, 0x88, 0x00,  // 199
	0x20, 0xF8, 0x08, 0x30, 0xE8, 0x20, 0x20, 0x00,  // 200
	0x08, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00,  // 201
	0x20, 0x10, 0x48, 0x48, 0x48, 0x48, 0x88, 0x00,  // 202
	0x80, 0x80, 0xF8, 0x80, 0x80, 0x80, 0x78, 0x00,  // 203
	0xF8, 0x08, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00,  // 204
	0x00, 0x40, 0xA0, 0x10, 0x08, 0x08, 0x00, 0x00,  // 205
	0x20, 0xF8, 0x20, 0x20, 0xA8, 0xA8, 0x20, 0x00,  // 206
	0x00, 0xF8, 0x08, 0x08, 0x50, 0x20, 0x10, 0x00,  // 207
	0xF0, 0x00, 0x60, 0x00, 0x00, 0xF0, 0x08, 0x00,  // 208
	0x10, 0x20, 0x40, 0x80, 0x90, 0x88, 0xF8, 0x00,  // 209
	0x08, 0x08, 0x08, 0x50, 0x20, 0x50, 0x80, 0x00,  // 210
	0x78, 0x20, 0xF8, 0x20, 0x20, 0x20, 0x18, 0x00,  // 211
	0x40, 0xF8, 0x48, 0x48, 0x50, 0x40, 0x40, 0x00,  // 212
	0x00, 0x70, 0x10, 0x10, 0x10, 0x10, 0xF8, 0x00,  // 213
	0x00, 0xF8, 0x08, 0xF8, 0x08, 0x08, 0xF8, 0x00,  // 214
	0x70, 0x00, 0xF8, 0x08, 0x08, 0x10, 0x20, 0x00,  // 215
	0x48, 0x48, 0x48, 0x48, 0x48, 0x10, 0x20, 0x00,  // 216
	0x10, 0x50, 0x50, 0x50, 0x50, 0x58, 0x90, 0x00,  // 217
	0x40, 0x40, 0x40, 0x48, 0x48, 0x50, 0x60, 0x00,  // 218
	0x00, 0xF8, 0x88, 0x88, 0x88, 0x88, 0xF8, 0x00,  // 219
	0xF8, 0x88, 0x88, 0x08, 0x08, 0x10, 0x20, 0x00,  // 220
	0x00, 0xC0, 0x00, 0x08, 0x08, 0x10, 0xE0, 0x00,  // 221
	0x90, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // 222
	0x60, 0x90, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,  // 223
	0x20, 0xF8, 0x20, 0x4E, 0x40, 0x90, 0x8E, 0x00,  // 224
	0x10, 0xFE, 0x20, 0x78, 0x04, 0x04, 0x78, 0x00,  // 225
	0x00, 0xFC, 0x02, 0x02, 0x02, 0x04, 0x18, 0x00,  // 226
	0xFE, 0x08, 0x10, 0x20, 0x20, 0x20, 0x1C, 0x00,  // 227
	0x20, 0x24, 0x38, 0x60, 0x80, 0x80, 0x7C, 0x00,  // 228
	0x2C, 0xF2, 0x44, 0x44, 0x9C, 0x26, 0x1C, 0x00,  // 229
	0x00, 0x9E, 0x80, 0x80, 0x80, 0x90, 0x4E, 0x00,  // 230
	0x48, 0x48, 0x7C, 0xD2, 0xB6, 0xAA, 0x4C, 0x00,  // 231
	0x40, 0x4C, 0xD2, 0x62, 0x4E, 0xD2, 0x4E, 0x00,  // 232
	0x00, 0x38, 0x54, 0x92, 0xA2, 0xA2, 0x44, 0x00,  // 233
	0x04, 0x9E, 0x84, 0x84, 0x8C, 0x96, 0x4C, 0x00,  // 234
	0x10, 0xE4, 0x26, 0x44, 0x44, 0x48, 0x30, 0x00,  // 235
	0x20, 0x10, 0x00, 0x20, 0x14, 0x52, 0xB2, 0x00,  // 236
	0x00, 0x00, 0x20, 0x50, 0x88, 0x04, 0x02, 0x00,  // 237
	0x1E, 0x84, 0x9E, 0x84, 0x8C, 0x96, 0x4C, 0x00,  // 238
	0x10, 0xFC, 0x10, 0xFC, 0x70, 0x98, 0x74, 0x00,  // 239
	0x70, 0x10, 0x14, 0x7E, 0xA4, 0xA4, 0x48, 0x00,  // 240
	0x20, 0xF4, 0x22, 0x60, 0xA2, 0x62, 0x1C, 0x00,  // 241
	0x48, 0x48, 0x7C, 0xAA, 0x92, 0xA2, 0x44, 0x00,  // 242
	0x20, 0xF8, 0x20, 0xF8, 0x20, 0x24, 0x18, 0x00,  // 243
	0x48, 0x5C, 0x6A, 0xE2, 0x24, 0x10, 0x10, 0x00,  // 244
	0x10, 0x9C, 0xB2, 0xD2, 0x92, 0x1C, 0x20, 0x00,  // 245
	0x10, 0x1C, 0x10, 0x10, 0x78, 0x94, 0x70, 0x00,  // 246
	0x60, 0x10, 0x80, 0xB8, 0xC4, 0x84, 0x38, 0x00,  // 247
	0x08, 0x84, 0x84, 0x84, 0x44, 0x08, 0x30, 0x00,  // 248
	0x78, 0x10, 0x38, 0x44, 0xB4, 0x4C, 0x38, 0x00,  // 249
	0x20, 0x2C, 0xF4, 0x24, 0x64, 0xA4, 0x26, 0x00,  // 250
	0x78, 0x10, 0x20, 0x78, 0x84, 0x04, 0x38, 0x00,  // 251
	0x40, 0x40, 0xDC, 0x62, 0x42, 0xC2, 0x44, 0x00,  // 252
	0x10, 0x10, 0x20, 0x20, 0x60, 0x52, 0x8C, 0x00,  // 253
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // 254
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // 255
};

static constexpr auto MSXJPFontRaw = []{
	std::array<uint8_t, 256 * 8> result = {};
	for (size_t i = 0; i < MSXJPFontRawPrefix.size(); ++i) {
		result[i] = MSXJPFontRawPrefix[i];
	}
	for (size_t i = 0; i < MSXAsciiFontRaw.size(); ++i) {
		result[0x20 * 8 + i] = MSXAsciiFontRaw[i];
	}
	constexpr std::array<uint8_t, 8> jpBackslash = {
		0x88, 0x50, 0x20, 0x70, 0x20, 0x70, 0x20, 0x00
	};
	for (size_t i = 0; i < jpBackslash.size(); ++i) {
		result[0x5C * 8 + i] = jpBackslash[i];
	}
	for (size_t i = 0; i < 8; ++i) {
		result[0x7F * 8 + i] = 0x00;
	}
	for (size_t i = 0; i < MSXJPFontRawSuffix.size(); ++i) {
		result[0x80 * 8 + i] = MSXJPFontRawSuffix[i];
	}
	return result;
}();

std::span<const uint8_t, 8 * 256> getMSXJPFontRaw()
{
	return MSXJPFontRaw;
}


// Convert MSX printer font to Epson printer font
// International MSX font, rotated 90 degrees and padded to 9 dots high.
static constexpr auto MSXFontRotated = []{
	std::array<uint8_t, 256 * 9> result = {};
	for (auto i : xrange(256)) {
		uint8_t oneBits = 0;
		int start = -1;
		int end = 0;

		// Rotate MSX character
		for (auto j : xrange(8)) {
			uint8_t charBits = 0;
			for (auto k : xrange(8)) {
				charBits |= uint8_t(((MSXFontRaw[8 * i + 7 - k] >> (7 - j)) & 1) << k);
			}

			oneBits |= charBits;
			if (oneBits  != 0 && start < 0) start = j;
			if (charBits != 0) end = j;
			result[9 * i + j + 1] = charBits;
		}

		end = end + 1;
		if (start < 0 || start >= 7) start = 0;
		if (end == 1) end = 5;
		end = std::min(end, 7);
		result[9 * i] = uint8_t((start << 4) | end);
	}
	return result;
}();

std::span<const uint8_t, 9 * 256> getMSXFontRotated()
{
	return MSXFontRotated;
}

} // namespace openmsx
