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"};
77 r[
ROM_PANASONIC] = {0x2000,
"Panasonic",
"Panasonic internal mapper"};
78 r[
ROM_NATIONAL] = {0x4000,
"National",
"National internal mapper"};
79 r[
ROM_FSA1FM1] = {0x0000,
"FSA1FM1",
"Panasonic FS-A1FM internal mapper 1"};
80 r[
ROM_FSA1FM2] = {0x2000,
"FSA1FM2",
"Panasonic FS-A1FM internal mapper 2"};
81 r[
ROM_DRAM] = {0x2000,
"DRAM",
"MSXturboR DRAM"};
84 r[
ROM_MIRRORED] = {0x2000,
"Mirrored",
"Plain rom, mirrored (any size)"};
85 r[
ROM_MIRRORED0000] = {0x2000,
"Mirrored0000",
"Plain rom, mirrored start at 0x0000"};
86 r[
ROM_MIRRORED4000] = {0x2000,
"Mirrored4000",
"Plain rom, mirrored start at 0x4000"};
87 r[
ROM_MIRRORED8000] = {0x2000,
"Mirrored8000",
"Plain rom, mirrored start at 0x8000"};
88 r[
ROM_MIRROREDC000] = {0x2000,
"MirroredC000",
"Plain rom, mirrored start at 0xC000"};
89 r[
ROM_NORMAL] = {0x2000,
"Normal",
"Plain rom (any size)"};
90 r[
ROM_NORMAL0000] = {0x2000,
"Normal0000",
"Plain rom start at 0x0000"};
91 r[
ROM_NORMAL4000] = {0x2000,
"Normal4000",
"Plain rom start at 0x4000"};
92 r[
ROM_NORMAL8000] = {0x2000,
"Normal8000",
"Plain rom start at 0x8000"};
93 r[
ROM_NORMALC000] = {0x2000,
"NormalC000",
"Plain rom start at 0xC000"};
94 r[
ROM_PAGE0] = {0x2000,
"Page0",
"Plain 16kB page 0"};
95 r[
ROM_PAGE1] = {0x2000,
"Page1",
"Plain 16kB page 1"};
96 r[
ROM_PAGE2] = {0x2000,
"Page2",
"Plain 16kB page 2 (BASIC)"};
97 r[
ROM_PAGE3] = {0x2000,
"Page3",
"Plain 16kB page 3"};
98 r[
ROM_PAGE01] = {0x2000,
"Page01",
"Plain 32kB page 0-1"};
99 r[
ROM_PAGE12] = {0x2000,
"Page12",
"Plain 32kB page 1-2"};
100 r[
ROM_PAGE23] = {0x2000,
"Page23",
"Plain 32kB page 2-3"};
101 r[
ROM_PAGE012] = {0x2000,
"Page012",
"Plain 48kB page 0-2"};
102 r[
ROM_PAGE123] = {0x2000,
"Page123",
"Plain 48kB page 1-3"};
106const std::array<RomInfo::RomTypeInfo, RomType::ROM_LAST>& RomInfo::getRomTypeInfo()
108 return romTypeInfoArray;
115static constexpr std::array aliasTable = {
142static constexpr auto combinedRomTable = [] {
144 std::array<RomTypeAndName, N> result = {};
146 for (
const auto&
e : romTypeInfoArray) {
147 result[i].romType =
static_cast<RomType>(i);
148 result[i].name =
e.name;
151 for (
const auto&
e : aliasTable) {
158 [[nodiscard]]
constexpr uint32_t
operator()(std::string_view str)
const {
159 constexpr auto MASK = uint8_t(~(
'a' -
'A'));
162 d = (d ^ (c & MASK)) * 0x01000193;
169static constexpr auto pmh = [] {
170 auto getKey = [](
size_t i) {
return combinedRomTable[i].name; };
171 return PerfectMinimalHash::create<std::size(combinedRomTable)>(RomTypeNameHash{}, getKey);
176 auto idx = pmh.lookupIndex(name);
177 assert(idx <
std::size(combinedRomTable));
179 if (cmp(combinedRomTable[idx].name, name)) {
180 return combinedRomTable[idx].romType;
187 return romTypeInfoArray[type].name;
192 return romTypeInfoArray[type].description;
197 return romTypeInfoArray[type].blockSize;
static unsigned getBlockSize(RomType type)
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