13static constexpr auto romTypeInfoArray = [] {
14 std::array<RomInfo::RomTypeInfo, RomType::ROM_LAST> r = {};
22 r[
ROM_KONAMI] = {0x2000,
"Konami",
"Konami MegaROM"};
24 r[
ROM_KBDMASTER] = {0x4000,
"KeyboardMaster",
"Konami Keyboard Master with VLM5030"};
25 r[
ROM_ASCII8] = {0x2000,
"ASCII8",
"ASCII 8kB"};
35 r[
ROM_ASCII16_2] = {0x4000,
"ASCII16SRAM2",
"ASCII 16kB with 2kB SRAM"};
36 r[
ROM_ASCII16_8] = {0x4000,
"ASCII16SRAM8",
"ASCII 16kB with 8kB SRAM"};
37 r[
ROM_ASCII8_8] = {0x2000,
"ASCII8SRAM8",
"ASCII 8kB with 8kB SRAM"};
38 r[
ROM_ASCII8_32] = {0x2000,
"ASCII8SRAM32",
"ASCII 8kB with 32kB SRAM"};
39 r[
ROM_ASCII8_2] = {0x2000,
"ASCII8SRAM2",
"ASCII 8kB with 2kB SRAM"};
40 r[
ROM_KOEI_8] = {0x2000,
"KoeiSRAM8",
"Koei with 8kB SRAM"};
41 r[
ROM_KOEI_32] = {0x2000,
"KoeiSRAM32",
"Koei with 32kB SRAM"};
46 r[
ROM_PLAYBALL] = {0x4000,
"PlayBall",
"Sony's PlayBall"};
48 r[
ROM_HOLY_QURAN] = {0x2000,
"AlQuranDecoded",
"Holy Qu'ran (pre-decrypted)"};
57 r[
ROM_MANBOW2_2] = {0x2000,
"Manbow2_2",
"Manbow2 - Second Release"};
63 r[
ROM_ARC] = {0x4000,
"Arc",
"Parallax' ARC"};
65 r[
ROM_DOOLY] = {0x4000,
"Dooly",
"Baby Dinosaur Dooly"};
66 r[
ROM_MSXTRA] = {0x0000,
"MSXtra",
"PTC MSXtra"};
67 r[
ROM_MSXWRITE] = {0x4000,
"MSXWrite",
"Japanese MSX Write"};
68 r[
ROM_MULTIROM] = {0x0000,
"MultiRom",
"MultiRom Collection"};
69 r[
ROM_RAMFILE] = {0x0000,
"RAMFILE",
"Tecall MSX RAMFILE"};
70 r[
ROM_RETROHARD31IN1] = {0x2000,
"RetroHardMultiCart31in1",
"RetroHard MultiCart 31 in 1"};
79 r[
ROM_PANASONIC] = {0x2000,
"Panasonic",
"Panasonic internal mapper"};
80 r[
ROM_NATIONAL] = {0x4000,
"National",
"National internal mapper"};
81 r[
ROM_FSA1FM1] = {0x0000,
"FSA1FM1",
"Panasonic FS-A1FM internal mapper 1"};
82 r[
ROM_FSA1FM2] = {0x2000,
"FSA1FM2",
"Panasonic FS-A1FM internal mapper 2"};
83 r[
ROM_DRAM] = {0x2000,
"DRAM",
"MSXturboR DRAM"};
86 r[
ROM_MIRRORED] = {0x2000,
"Mirrored",
"Plain rom, mirrored (any size)"};
87 r[
ROM_MIRRORED0000] = {0x2000,
"Mirrored0000",
"Plain rom, mirrored start at 0x0000"};
88 r[
ROM_MIRRORED4000] = {0x2000,
"Mirrored4000",
"Plain rom, mirrored start at 0x4000"};
89 r[
ROM_MIRRORED8000] = {0x2000,
"Mirrored8000",
"Plain rom, mirrored start at 0x8000"};
90 r[
ROM_MIRROREDC000] = {0x2000,
"MirroredC000",
"Plain rom, mirrored start at 0xC000"};
91 r[
ROM_NORMAL] = {0x2000,
"Normal",
"Plain rom (any size)"};
92 r[
ROM_NORMAL0000] = {0x2000,
"Normal0000",
"Plain rom start at 0x0000"};
93 r[
ROM_NORMAL4000] = {0x2000,
"Normal4000",
"Plain rom start at 0x4000"};
94 r[
ROM_NORMAL8000] = {0x2000,
"Normal8000",
"Plain rom start at 0x8000"};
95 r[
ROM_NORMALC000] = {0x2000,
"NormalC000",
"Plain rom start at 0xC000"};
96 r[
ROM_PAGE0] = {0x2000,
"Page0",
"Plain 16kB page 0"};
97 r[
ROM_PAGE1] = {0x2000,
"Page1",
"Plain 16kB page 1"};
98 r[
ROM_PAGE2] = {0x2000,
"Page2",
"Plain 16kB page 2 (BASIC)"};
99 r[
ROM_PAGE3] = {0x2000,
"Page3",
"Plain 16kB page 3"};
100 r[
ROM_PAGE01] = {0x2000,
"Page01",
"Plain 32kB page 0-1"};
101 r[
ROM_PAGE12] = {0x2000,
"Page12",
"Plain 32kB page 1-2"};
102 r[
ROM_PAGE23] = {0x2000,
"Page23",
"Plain 32kB page 2-3"};
103 r[
ROM_PAGE012] = {0x2000,
"Page012",
"Plain 48kB page 0-2"};
104 r[
ROM_PAGE123] = {0x2000,
"Page123",
"Plain 48kB page 1-3"};
110 return romTypeInfoArray;
117static constexpr std::array aliasTable = {
144static constexpr auto combinedRomTable = [] {
146 std::array<RomTypeAndName, N> result = {};
148 for (
const auto&
e : romTypeInfoArray) {
149 result[i].romType =
static_cast<RomType>(i);
150 result[i].name =
e.name;
153 for (
const auto&
e : aliasTable) {
160 [[nodiscard]]
constexpr uint32_t
operator()(std::string_view str)
const {
161 constexpr auto MASK = uint8_t(~(
'a' -
'A'));
164 d = (d ^ (c & MASK)) * 0x01000193;
171static constexpr auto pmh = [] {
172 auto getKey = [](
size_t i) {
return combinedRomTable[i].name; };
173 return PerfectMinimalHash::create<std::size(combinedRomTable)>(RomTypeNameHash{}, getKey);
178 auto idx = pmh.lookupIndex(name);
179 assert(idx <
std::size(combinedRomTable));
181 if (cmp(combinedRomTable[idx].name, name)) {
182 return combinedRomTable[idx].romType;
189 return romTypeInfoArray[type].name;
194 return romTypeInfoArray[type].description;
199 return romTypeInfoArray[type].blockSize;
static unsigned getBlockSize(RomType type)
static const std::array< RomInfo::RomTypeInfo, RomType::ROM_LAST > & getRomTypeInfo()
static std::string_view getDescription(RomType type)
static std::string_view romTypeToName(RomType type)
static RomType nameToRomType(std::string_view name)
This file implemented 3 utility functions:
@ ROM_MEGAFLASHROMSCCPLUS
@ ROM_KONAMI_ULTIMATE_COLLECTION
@ ROM_RBSC_FLASH_KONAMI_SCC
size_t size(std::string_view utf8)
constexpr uint32_t operator()(std::string_view str) const