openMSX
RomInfo.cc
Go to the documentation of this file.
1 #include "RomInfo.hh"
2 #include "StringOp.hh"
3 #include "hash_map.hh"
4 #include "ranges.hh"
5 #include "stl.hh"
6 #include "unreachable.hh"
7 #include "xxhash.hh"
8 #include <cassert>
9 
10 using std::string;
11 using std::string_view;
12 using std::vector;
13 
14 namespace openmsx {
15 
16 static inline RomType makeAlias(RomType type)
17 {
18  return static_cast<RomType>(ROM_ALIAS | type);
19 }
20 static inline RomType removeAlias(RomType type)
21 {
22  return static_cast<RomType>(type & ~ROM_ALIAS);
23 }
24 static inline bool isAlias(RomType type)
25 {
26  return (type & ROM_ALIAS) != 0;
27 }
28 
29 
30 static bool isInit = false;
31 
32 // This maps a name to a RomType. There can be multiple names (aliases) for the
33 // same type.
35 static RomTypeMap romTypeMap(256); // initial hashtable size
36  // (big enough so that no rehash is needed)
37 
38 // This contains extra information for each RomType. This structure only
39 // contains the primary (non-alias) romtypes.
40 using RomTypeInfo = std::tuple<
41  RomType, // rom type
42  string_view, // description
43  unsigned>; // blockSize
44 using RomTypeInfoMap = vector<RomTypeInfo>;
46 static RomTypeInfoMap romTypeInfoMap;
47 
48 static void init(RomType type, string_view name,
49  unsigned blockSize, string_view description)
50 {
51  romTypeMap.emplace_noCapacityCheck_noDuplicateCheck(name, type);
52  romTypeInfoMap.emplace_back(type, description, blockSize);
53 }
54 static void initAlias(RomType type, string_view name)
55 {
56  romTypeMap.emplace_noCapacityCheck_noDuplicateCheck(name, makeAlias(type));
57 }
58 static void init()
59 {
60  if (isInit) return;
61  isInit = true;
62 
63  // Generic ROM types that don't exist in real ROMs
64  // (should not occur in any database!)
65  init(ROM_GENERIC_8KB, "8kB", 0x2000, "Generic 8kB");
66  init(ROM_GENERIC_16KB, "16kB", 0x4000, "Generic 16kB");
67 
68  // ROM mapper types for normal software (mainly games)
69  init(ROM_KONAMI, "Konami", 0x2000, "Konami MegaROM");
70  init(ROM_KONAMI_SCC, "KonamiSCC", 0x2000, "Konami with SCC");
71  init(ROM_KBDMASTER, "KeyboardMaster", 0x4000, "Konami Keyboard Master with VLM5030"); // officially plain 16K
72  init(ROM_ASCII8, "ASCII8", 0x2000, "ASCII 8kB");
73  init(ROM_ASCII16, "ASCII16", 0x4000, "ASCII 16kB");
74  init(ROM_R_TYPE, "R-Type", 0x4000, "R-Type");
75  init(ROM_CROSS_BLAIM, "CrossBlaim", 0x4000, "Cross Blaim");
76  init(ROM_HARRY_FOX, "HarryFox", 0x4000, "Harry Fox");
77  init(ROM_HALNOTE, "Halnote", 0x2000, "Halnote");
78  init(ROM_ZEMINA80IN1, "Zemina80in1", 0x2000, "Zemina 80 in 1");
79  init(ROM_ZEMINA90IN1, "Zemina90in1", 0x2000, "Zemina 90 in 1");
80  init(ROM_ZEMINA126IN1, "Zemina126in1", 0x2000, "Zemina 126 in 1");
81  init(ROM_ASCII16_2, "ASCII16SRAM2", 0x4000, "ASCII 16kB with 2kB SRAM");
82  init(ROM_ASCII16_8, "ASCII16SRAM8", 0x4000, "ASCII 16kB with 8kB SRAM");
83  init(ROM_ASCII8_8, "ASCII8SRAM8", 0x2000, "ASCII 8kB with 8kB SRAM");
84  init(ROM_ASCII8_32, "ASCII8SRAM32", 0x2000, "ASCII 8kB with 32kB SRAM");
85  init(ROM_ASCII8_2, "ASCII8SRAM2", 0x2000, "ASCII 8kB with 2kB SRAM");
86  init(ROM_KOEI_8, "KoeiSRAM8", 0x2000, "Koei with 8kB SRAM");
87  init(ROM_KOEI_32, "KoeiSRAM32", 0x2000, "Koei with 32kB SRAM");
88  init(ROM_WIZARDRY, "Wizardry", 0x2000, "Wizardry");
89  init(ROM_GAME_MASTER2, "GameMaster2", 0x1000, "Konami's Game Master 2");
90  init(ROM_MAJUTSUSHI, "Majutsushi", 0x2000, "Hai no Majutsushi");
91  init(ROM_SYNTHESIZER, "Synthesizer", 0x4000, "Konami's Synthesizer"); // officially plain 32K
92  init(ROM_PLAYBALL, "PlayBall", 0x4000, "Sony's PlayBall"); // officially plain 32K
93  init(ROM_NETTOU_YAKYUU, "NettouYakyuu", 0x2000, "Nettou Yakuu");
94  init(ROM_HOLY_QURAN, "AlQuranDecoded", 0x2000, "Holy Qu'ran (pre-decrypted)");
95  init(ROM_HOLY_QURAN2, "AlQuran", 0x2000, "Holy Qu'ran");
96  init(ROM_PADIAL8, "Padial8", 0x2000, "Padial 8kB");
97  init(ROM_PADIAL16, "Padial16", 0x4000, "Padial 16kB");
98  init(ROM_SUPERLODERUNNER,"SuperLodeRunner",0x4000, "Super Lode Runner");
99  init(ROM_SUPERSWANGI, "SuperSwangi" ,0x4000, "Super Swangi");
100  init(ROM_MSXDOS2, "MSXDOS2", 0x4000, "MSX-DOS2");
101  init(ROM_MITSUBISHIMLTS2,"MitsubishiMLTS2",0x2000, "Mitsubishi ML-TS2 firmware");
102  init(ROM_MANBOW2, "Manbow2", 0x2000, "Manbow2");
103  init(ROM_MANBOW2_2, "Manbow2_2", 0x2000, "Manbow2 - Second Release");
104  init(ROM_RBSC_FLASH_KONAMI_SCC, "RBSC_Flash_KonamiSCC", 0x2000, "RBSC 2MB flash, Konami SCC mapper");
105  init(ROM_HAMARAJANIGHT, "HamarajaNight", 0x2000, "Best of Hamaraja Night");
106  init(ROM_MEGAFLASHROMSCC,"MegaFlashRomScc",0x2000, "Mega Flash ROM SCC");
107  init(ROM_MATRAINK, "MatraInk", 0x0000, "Matra Ink");
108  init(ROM_MATRACOMPILATION,"MatraCompilation",0x2000, "Matra Compilation");
109  init(ROM_ARC, "Arc", 0x4000, "Parallax' ARC"); // officially plain 32K
110  init(ROM_ROMHUNTERMK2, "ROMHunterMk2", 0x0000, "ROM Hunter Mk2");
111  init(ROM_DOOLY, "Dooly", 0x4000, "Baby Dinosaur Dooly"); // officially 32K blocksize, but spread over 2 pages
112  init(ROM_MSXTRA, "MSXtra", 0x0000, "PTC MSXtra");
113  init(ROM_MSXWRITE, "MSXWrite", 0x4000, "Japanese MSX Write");
114  init(ROM_MULTIROM, "MultiRom", 0x0000, "MultiRom Collection");
115  init(ROM_RAMFILE, "RAMFILE", 0x0000, "Tecall MSX RAMFILE");
116  init(ROM_COLECOMEGACART, "ColecoMegaCart", 0x4000, "ColecoVision MegaCart");
117  init(ROM_MEGAFLASHROMSCCPLUS,"MegaFlashRomSccPlus",0x0000, "Mega Flash ROM SCC Plus");
118  init(ROM_REPRO_CARTRIDGE1,"ReproCartridgeV1",0x0000, "Repro Cartridge V1");
119  init(ROM_REPRO_CARTRIDGE2,"ReproCartridgeV2",0x0000, "Repro Cartridge V2");
120  init(ROM_KONAMI_ULTIMATE_COLLECTION,"KonamiUltimateCollection",0x0000, "Konami Ultimate Collection");
121 
122  // ROM mapper types used for system ROMs in machines
123  init(ROM_PANASONIC, "Panasonic", 0x2000, "Panasonic internal mapper");
124  init(ROM_NATIONAL, "National", 0x4000, "National internal mapper");
125  init(ROM_FSA1FM1, "FSA1FM1", 0x0000, "Panasonic FS-A1FM internal mapper 1"); // TODO: romblocks debuggable?
126  init(ROM_FSA1FM2, "FSA1FM2", 0x2000, "Panasonic FS-A1FM internal mapper 2");
127  init(ROM_DRAM, "DRAM", 0x2000, "MSXturboR DRAM");
128 
129  // Non-mapper ROM types
130  init(ROM_MIRRORED, "Mirrored", 0x2000, "Plain rom, mirrored (any size)");
131  init(ROM_MIRRORED0000,"Mirrored0000",0x2000, "Plain rom, mirrored start at 0x0000");
132  init(ROM_MIRRORED4000,"Mirrored4000",0x2000, "Plain rom, mirrored start at 0x4000");
133  init(ROM_MIRRORED8000,"Mirrored8000",0x2000, "Plain rom, mirrored start at 0x8000");
134  init(ROM_MIRROREDC000,"MirroredC000",0x2000, "Plain rom, mirrored start at 0xC000");
135  init(ROM_NORMAL, "Normal", 0x2000, "Plain rom (any size)");
136  init(ROM_NORMAL0000, "Normal0000", 0x2000, "Plain rom start at 0x0000");
137  init(ROM_NORMAL4000, "Normal4000", 0x2000, "Plain rom start at 0x4000");
138  init(ROM_NORMAL8000, "Normal8000", 0x2000, "Plain rom start at 0x8000");
139  init(ROM_NORMALC000, "NormalC000", 0x2000, "Plain rom start at 0xC000");
140  init(ROM_PAGE0, "Page0", 0x2000, "Plain 16kB page 0");
141  init(ROM_PAGE1, "Page1", 0x2000, "Plain 16kB page 1");
142  init(ROM_PAGE2, "Page2", 0x2000, "Plain 16kB page 2 (BASIC)");
143  init(ROM_PAGE3, "Page3", 0x2000, "Plain 16kB page 3");
144  init(ROM_PAGE01, "Page01", 0x2000, "Plain 32kB page 0-1");
145  init(ROM_PAGE12, "Page12", 0x2000, "Plain 32kB page 1-2");
146  init(ROM_PAGE23, "Page23", 0x2000, "Plain 32kB page 2-3");
147  init(ROM_PAGE012, "Page012", 0x2000, "Plain 48kB page 0-2");
148  init(ROM_PAGE123, "Page123", 0x2000, "Plain 48kB page 1-3");
149  init(ROM_PAGE0123, "Page0123", 0x2000, "Plain 64kB");
150 
151  // Alternative names for rom types, mainly for backwards compatibility
152  initAlias(ROM_GENERIC_8KB, "0");
153  initAlias(ROM_GENERIC_8KB, "GenericKonami"); // probably actually used in a Zemina Box
154  initAlias(ROM_GENERIC_16KB,"1");
155  initAlias(ROM_KONAMI_SCC, "2");
156  initAlias(ROM_KONAMI_SCC, "SCC");
157  initAlias(ROM_KONAMI_SCC, "KONAMI5");
158  initAlias(ROM_KONAMI, "KONAMI4");
159  initAlias(ROM_KONAMI, "3");
160  initAlias(ROM_ASCII8, "4");
161  initAlias(ROM_ASCII16, "5");
162  initAlias(ROM_MIRRORED, "64kB");
163  initAlias(ROM_MIRRORED, "Plain");
164  initAlias(ROM_NORMAL0000, "0x0000");
165  initAlias(ROM_NORMAL4000, "0x4000");
166  initAlias(ROM_NORMAL8000, "0x8000");
167  initAlias(ROM_NORMALC000, "0xC000");
168  initAlias(ROM_ASCII16_2, "HYDLIDE2");
169  initAlias(ROM_GAME_MASTER2,"RC755");
170  initAlias(ROM_NORMAL8000, "ROMBAS");
171  initAlias(ROM_R_TYPE, "RTYPE");
172  initAlias(ROM_ZEMINA80IN1, "KOREAN80IN1");
173  initAlias(ROM_ZEMINA90IN1, "KOREAN90IN1");
174  initAlias(ROM_ZEMINA126IN1,"KOREAN126IN1");
175  initAlias(ROM_HOLY_QURAN, "HolyQuran");
176 
177  ranges::sort(romTypeInfoMap, RomTypeInfoMapLess());
178 }
179 static const RomTypeMap& getRomTypeMap()
180 {
181  init();
182  return romTypeMap;
183 }
184 static const RomTypeInfoMap& getRomTypeInfoMap()
185 {
186  init();
187  return romTypeInfoMap;
188 }
189 
191 {
192  auto v = lookup(getRomTypeMap(), name);
193  return v ? removeAlias(*v) : ROM_UNKNOWN;
194 }
195 
197 {
198  assert(!isAlias(type));
199  for (const auto& [name, romType] : getRomTypeMap()) {
200  if (romType == type) {
201  return name;
202  }
203  }
204  UNREACHABLE; return {};
205 }
206 
207 vector<string_view> RomInfo::getAllRomTypes()
208 {
209  vector<string_view> result;
210  for (const auto& [name, romType] : getRomTypeMap()) {
211  if (!isAlias(romType)) {
212  result.push_back(name);
213  }
214  }
215  return result;
216 }
217 
219 {
220  auto& m = getRomTypeInfoMap();
221  auto it = ranges::lower_bound(m, type, RomTypeInfoMapLess());
222  assert(it != end(m));
223  assert(std::get<0>(*it) == type);
224  return std::get<1>(*it);
225 }
226 
228 {
229  auto& m = getRomTypeInfoMap();
230  auto it = ranges::lower_bound(m, type, RomTypeInfoMapLess());
231  assert(it != end(m));
232  assert(std::get<0>(*it) == type);
233  return std::get<2>(*it);
234 }
235 
236 } // namespace openmsx
openmsx::ROM_PADIAL8
@ ROM_PADIAL8
Definition: RomTypes.hh:55
openmsx::ROM_ASCII8_8
@ ROM_ASCII8_8
Definition: RomTypes.hh:12
openmsx::ROM_PAGE123
@ ROM_PAGE123
Definition: RomTypes.hh:81
openmsx::ROM_SUPERLODERUNNER
@ ROM_SUPERLODERUNNER
Definition: RomTypes.hh:62
openmsx::ROM_MULTIROM
@ ROM_MULTIROM
Definition: RomTypes.hh:51
openmsx::ROM_MEGAFLASHROMSCCPLUS
@ ROM_MEGAFLASHROMSCCPLUS
Definition: RomTypes.hh:45
openmsx::ROM_PADIAL16
@ ROM_PADIAL16
Definition: RomTypes.hh:56
lookup
const Value * lookup(const hash_map< Key, Value, Hasher, Equal > &map, const Key2 &key)
Definition: hash_map.hh:91
openmsx::ROM_ASCII8_32
@ ROM_ASCII8_32
Definition: RomTypes.hh:11
xxhash.hh
openmsx::ROM_ARC
@ ROM_ARC
Definition: RomTypes.hh:8
openmsx::ROM_R_TYPE
@ ROM_R_TYPE
Definition: RomTypes.hh:59
openmsx::ROM_NETTOU_YAKYUU
@ ROM_NETTOU_YAKYUU
Definition: RomTypes.hh:53
ranges::sort
void sort(RandomAccessRange &&range)
Definition: ranges.hh:35
openmsx::ROM_NORMAL
@ ROM_NORMAL
Definition: RomTypes.hh:54
hash_set::emplace_noCapacityCheck_noDuplicateCheck
iterator emplace_noCapacityCheck_noDuplicateCheck(Args &&... args)
Definition: hash_set.hh:473
ranges::lower_bound
auto lower_bound(ForwardRange &&range, const T &value)
Definition: ranges.hh:71
openmsx::RomTypeInfoMap
vector< RomTypeInfo > RomTypeInfoMap
Definition: RomInfo.cc:44
openmsx::ROM_GAME_MASTER2
@ ROM_GAME_MASTER2
Definition: RomTypes.hh:22
openmsx::ROM_NORMAL4000
@ ROM_NORMAL4000
Definition: RomTypes.hh:88
openmsx::ROM_HOLY_QURAN
@ ROM_HOLY_QURAN
Definition: RomTypes.hh:28
openmsx::ROM_ASCII16_8
@ ROM_ASCII16_8
Definition: RomTypes.hh:15
openmsx::ROM_CROSS_BLAIM
@ ROM_CROSS_BLAIM
Definition: RomTypes.hh:17
openmsx::ROM_MIRRORED0000
@ ROM_MIRRORED0000
Definition: RomTypes.hh:83
ranges.hh
openmsx::ROM_ASCII16
@ ROM_ASCII16
Definition: RomTypes.hh:13
openmsx::ROM_MEGAFLASHROMSCC
@ ROM_MEGAFLASHROMSCC
Definition: RomTypes.hh:44
openmsx::ROM_MIRROREDC000
@ ROM_MIRROREDC000
Definition: RomTypes.hh:86
openmsx::ROM_ZEMINA126IN1
@ ROM_ZEMINA126IN1
Definition: RomTypes.hh:68
openmsx::ROM_HOLY_QURAN2
@ ROM_HOLY_QURAN2
Definition: RomTypes.hh:29
openmsx::ROM_DOOLY
@ ROM_DOOLY
Definition: RomTypes.hh:18
openmsx::ROM_SYNTHESIZER
@ ROM_SYNTHESIZER
Definition: RomTypes.hh:64
openmsx::ROM_ASCII16_2
@ ROM_ASCII16_2
Definition: RomTypes.hh:14
openmsx::ROM_MAJUTSUSHI
@ ROM_MAJUTSUSHI
Definition: RomTypes.hh:38
openmsx::ROM_MSXWRITE
@ ROM_MSXWRITE
Definition: RomTypes.hh:50
openmsx::ROM_WIZARDRY
@ ROM_WIZARDRY
Definition: RomTypes.hh:65
openmsx::ROM_MIRRORED
@ ROM_MIRRORED
Definition: RomTypes.hh:46
openmsx::ROM_PAGE2
@ ROM_PAGE2
Definition: RomTypes.hh:76
openmsx::ROM_KOEI_32
@ ROM_KOEI_32
Definition: RomTypes.hh:32
openmsx::ROM_FSA1FM2
@ ROM_FSA1FM2
Definition: RomTypes.hh:21
openmsx::ROM_MIRRORED4000
@ ROM_MIRRORED4000
Definition: RomTypes.hh:84
openmsx::ROM_ZEMINA90IN1
@ ROM_ZEMINA90IN1
Definition: RomTypes.hh:67
UNREACHABLE
#define UNREACHABLE
Definition: unreachable.hh:38
openmsx::ROM_NORMAL8000
@ ROM_NORMAL8000
Definition: RomTypes.hh:89
openmsx::ROM_MSXDOS2
@ ROM_MSXDOS2
Definition: RomTypes.hh:48
openmsx::RomTypeMap
hash_map< string_view, RomType, XXHasher_IgnoreCase, StringOp::casecmp > RomTypeMap
Definition: RomInfo.cc:34
openmsx::ROM_MITSUBISHIMLTS2
@ ROM_MITSUBISHIMLTS2
Definition: RomTypes.hh:47
openmsx::ROM_REPRO_CARTRIDGE2
@ ROM_REPRO_CARTRIDGE2
Definition: RomTypes.hh:36
openmsx::RomTypeInfoMapLess
LessTupleElement< 0 > RomTypeInfoMapLess
Definition: RomInfo.cc:45
openmsx::ROM_MANBOW2_2
@ ROM_MANBOW2_2
Definition: RomTypes.hh:40
openmsx::ROM_ASCII8_2
@ ROM_ASCII8_2
Definition: RomTypes.hh:10
openmsx::ROM_MATRAINK
@ ROM_MATRAINK
Definition: RomTypes.hh:42
openmsx::ROM_COLECOMEGACART
@ ROM_COLECOMEGACART
Definition: RomTypes.hh:16
openmsx::ROM_PAGE1
@ ROM_PAGE1
Definition: RomTypes.hh:74
openmsx::ROM_NATIONAL
@ ROM_NATIONAL
Definition: RomTypes.hh:52
openmsx::ROM_MSXTRA
@ ROM_MSXTRA
Definition: RomTypes.hh:49
openmsx::ROM_ROMHUNTERMK2
@ ROM_ROMHUNTERMK2
Definition: RomTypes.hh:61
openmsx::ROM_KONAMI_SCC
@ ROM_KONAMI_SCC
Definition: RomTypes.hh:34
openmsx::ROM_PANASONIC
@ ROM_PANASONIC
Definition: RomTypes.hh:57
openmsx::ROM_ALIAS
@ ROM_ALIAS
Definition: RomTypes.hh:93
openmsx::ROM_REPRO_CARTRIDGE1
@ ROM_REPRO_CARTRIDGE1
Definition: RomTypes.hh:35
openmsx::ROM_PAGE23
@ ROM_PAGE23
Definition: RomTypes.hh:80
openmsx::ROM_NORMAL0000
@ ROM_NORMAL0000
Definition: RomTypes.hh:87
openmsx::ROM_HARRY_FOX
@ ROM_HARRY_FOX
Definition: RomTypes.hh:27
openmsx::ROM_RBSC_FLASH_KONAMI_SCC
@ ROM_RBSC_FLASH_KONAMI_SCC
Definition: RomTypes.hh:41
openmsx::ROM_MANBOW2
@ ROM_MANBOW2
Definition: RomTypes.hh:39
openmsx::ROM_KONAMI_ULTIMATE_COLLECTION
@ ROM_KONAMI_ULTIMATE_COLLECTION
Definition: RomTypes.hh:37
openmsx::RomTypeInfo
std::tuple< RomType, string_view, unsigned > RomTypeInfo
Definition: RomInfo.cc:43
openmsx::ROM_PLAYBALL
@ ROM_PLAYBALL
Definition: RomTypes.hh:58
openmsx::ROM_ASCII8
@ ROM_ASCII8
Definition: RomTypes.hh:9
openmsx::RomInfo::nameToRomType
static RomType nameToRomType(std::string_view name)
Definition: RomInfo.cc:190
hash_map.hh
openmsx::RomInfo::getAllRomTypes
static std::vector< std::string_view > getAllRomTypes()
Definition: RomInfo.cc:207
CmpTupleElement
Definition: stl.hh:28
openmsx::ROM_SUPERSWANGI
@ ROM_SUPERSWANGI
Definition: RomTypes.hh:63
openmsx::ROM_RAMFILE
@ ROM_RAMFILE
Definition: RomTypes.hh:60
openmsx::ROM_PAGE012
@ ROM_PAGE012
Definition: RomTypes.hh:78
RomInfo.hh
StringOp.hh
openmsx::ROM_PAGE0
@ ROM_PAGE0
Definition: RomTypes.hh:73
openmsx::RomInfo::getBlockSize
static unsigned getBlockSize(RomType type)
Definition: RomInfo.cc:227
openmsx::ROM_MIRRORED8000
@ ROM_MIRRORED8000
Definition: RomTypes.hh:85
openmsx::ROM_FSA1FM1
@ ROM_FSA1FM1
Definition: RomTypes.hh:20
openmsx::ROM_PAGE0123
@ ROM_PAGE0123
Definition: RomTypes.hh:82
openmsx::RomInfo::getDescription
static std::string_view getDescription(RomType type)
Definition: RomInfo.cc:218
openmsx::ROM_PAGE01
@ ROM_PAGE01
Definition: RomTypes.hh:75
openmsx::ROM_UNKNOWN
@ ROM_UNKNOWN
Definition: RomTypes.hh:92
openmsx::ROM_ZEMINA80IN1
@ ROM_ZEMINA80IN1
Definition: RomTypes.hh:66
openmsx::ROM_KONAMI
@ ROM_KONAMI
Definition: RomTypes.hh:33
stl.hh
openmsx::ROM_KBDMASTER
@ ROM_KBDMASTER
Definition: RomTypes.hh:30
openmsx::ROM_NORMALC000
@ ROM_NORMALC000
Definition: RomTypes.hh:90
unreachable.hh
openmsx::RomType
RomType
Definition: RomTypes.hh:6
openmsx
Thanks to enen for testing this on a real cartridge:
Definition: Autofire.cc:5
openmsx::ROM_GENERIC_8KB
@ ROM_GENERIC_8KB
Definition: RomTypes.hh:23
openmsx::ROM_PAGE12
@ ROM_PAGE12
Definition: RomTypes.hh:77
openmsx::ROM_PAGE3
@ ROM_PAGE3
Definition: RomTypes.hh:79
hash_map
Definition: hash_map.hh:31
openmsx::ROM_HAMARAJANIGHT
@ ROM_HAMARAJANIGHT
Definition: RomTypes.hh:26
openmsx::ROM_GENERIC_16KB
@ ROM_GENERIC_16KB
Definition: RomTypes.hh:24
openmsx::ROM_MATRACOMPILATION
@ ROM_MATRACOMPILATION
Definition: RomTypes.hh:43
openmsx::RomInfo::romTypeToName
static std::string_view romTypeToName(RomType type)
Definition: RomInfo.cc:196
openmsx::ROM_KOEI_8
@ ROM_KOEI_8
Definition: RomTypes.hh:31
openmsx::ROM_HALNOTE
@ ROM_HALNOTE
Definition: RomTypes.hh:25
openmsx::ROM_DRAM
@ ROM_DRAM
Definition: RomTypes.hh:19