openMSX
RomFactory.cc
Go to the documentation of this file.
1 #include "RomFactory.hh"
2 #include "RomTypes.hh"
3 #include "RomInfo.hh"
4 #include "RomPageNN.hh"
5 #include "RomPlain.hh"
6 #include "RomDRAM.hh"
7 #include "RomGeneric8kB.hh"
8 #include "RomGeneric16kB.hh"
9 #include "RomKonami.hh"
10 #include "RomKonamiSCC.hh"
12 #include "RomAscii8kB.hh"
13 #include "RomAscii8_8.hh"
14 #include "RomAscii16kB.hh"
15 #include "RomMSXWrite.hh"
16 #include "RomPadial8kB.hh"
17 #include "RomPadial16kB.hh"
18 #include "RomSuperLodeRunner.hh"
19 #include "RomSuperSwangi.hh"
20 #include "RomMitsubishiMLTS2.hh"
21 #include "RomMSXDOS2.hh"
22 #include "RomAscii16_2.hh"
23 #include "RomRType.hh"
24 #include "RomCrossBlaim.hh"
25 #include "RomHarryFox.hh"
26 #include "RomPanasonic.hh"
27 #include "RomNational.hh"
28 #include "RomMajutsushi.hh"
29 #include "RomSynthesizer.hh"
30 #include "RomPlayBall.hh"
31 #include "RomNettouYakyuu.hh"
32 #include "RomGameMaster2.hh"
33 #include "RomHalnote.hh"
34 #include "RomZemina25in1.hh"
35 #include "RomZemina80in1.hh"
36 #include "RomZemina90in1.hh"
37 #include "RomZemina126in1.hh"
38 #include "RomHolyQuran.hh"
39 #include "RomHolyQuran2.hh"
40 #include "RomFSA1FM.hh"
41 #include "RomManbow2.hh"
42 #include "RomMatraInk.hh"
43 #include "RomMatraCompilation.hh"
44 #include "RomArc.hh"
45 #include "ROMHunterMk2.hh"
46 #include "MegaFlashRomSCCPlus.hh"
47 #include "ReproCartridgeV1.hh"
48 #include "ReproCartridgeV2.hh"
50 #include "RomDooly.hh"
51 #include "RomMSXtra.hh"
52 #include "RomRamFile.hh"
53 #include "RomColecoMegaCart.hh"
54 #include "RomMultiRom.hh"
55 #include "Rom.hh"
56 #include "Reactor.hh"
57 #include "MSXMotherBoard.hh"
58 #include "RomDatabase.hh"
59 #include "DeviceConfig.hh"
60 #include "XMLElement.hh"
61 #include "MSXException.hh"
62 #include "one_of.hh"
63 #include <memory>
64 
65 using std::make_unique;
66 using std::move;
67 using std::string;
68 using std::unique_ptr;
69 
71 
72 static RomType guessRomType(const Rom& rom)
73 {
74  int size = rom.getSize();
75  if (size == 0) {
76  return ROM_NORMAL;
77  }
78  const byte* data = &rom[0];
79 
80  if (size < 0x10000) {
81  if ((size <= 0x4000) &&
82  (data[0] == 'A') && (data[1] == 'B')) {
83  word initAddr = data[2] + 256 * data[3];
84  word textAddr = data[8] + 256 * data[9];
85  if ((textAddr & 0xC000) == 0x8000) {
86  if ((initAddr == 0) ||
87  (((initAddr & 0xC000) == 0x8000) &&
88  (data[initAddr & (size - 1)] == 0xC9))) {
89  return ROM_PAGE2;
90  }
91  }
92  }
93  // not correct for Konami-DAC, but does this really need
94  // to be correct for _every_ rom?
95  return ROM_MIRRORED;
96  } else if (size == 0x10000 && !((data[0] == 'A') && (data[1] == 'B'))) {
97  // 64 kB ROMs can be plain or memory mapped...
98  // check here for plain, if not, try the auto detection
99  // (thanks for the hint, hap)
100  return ROM_MIRRORED;
101  } else {
102  // GameCartridges do their bankswitching by using the Z80
103  // instruction ld(nn),a in the middle of program code. The
104  // adress nn depends upon the GameCartridge mappertype used.
105  // To guess which mapper it is, we will look how much writes
106  // with this instruction to the mapper-registers-addresses
107  // occur.
108 
109  unsigned typeGuess[ROM_END_OF_UNORDERED_LIST] = {}; // 0-initialized
110  for (int i = 0; i < size - 3; ++i) {
111  if (data[i] == 0x32) {
112  word value = data[i + 1] + (data[i + 2] << 8);
113  switch (value) {
114  case 0x5000:
115  case 0x9000:
116  case 0xb000:
117  typeGuess[ROM_KONAMI_SCC]++;
118  break;
119  case 0x4000:
120  typeGuess[ROM_KONAMI]++;
121  break;
122  case 0x8000:
123  case 0xa000:
124  typeGuess[ROM_KONAMI]++;
125  break;
126  case 0x6800:
127  case 0x7800:
128  typeGuess[ROM_ASCII8]++;
129  break;
130  case 0x6000:
131  typeGuess[ROM_KONAMI]++;
132  typeGuess[ROM_ASCII8]++;
133  typeGuess[ROM_ASCII16]++;
134  break;
135  case 0x7000:
136  typeGuess[ROM_KONAMI_SCC]++;
137  typeGuess[ROM_ASCII8]++;
138  typeGuess[ROM_ASCII16]++;
139  break;
140  case 0x77ff:
141  typeGuess[ROM_ASCII16]++;
142  break;
143  }
144  }
145  }
146  if (typeGuess[ROM_ASCII8]) typeGuess[ROM_ASCII8]--; // -1 -> max_int
147  RomType type = ROM_GENERIC_8KB;
148  for (int i = 0; i < ROM_END_OF_UNORDERED_LIST; ++i) {
149  // debug: fprintf(stderr, "%d: %d\n", i, typeGuess[i]);
150  if (typeGuess[i] && (typeGuess[i] >= typeGuess[type])) {
151  type = static_cast<RomType>(i);
152  }
153  }
154  return type;
155  }
156 }
157 
158 unique_ptr<MSXDevice> create(const DeviceConfig& config)
159 {
160  Rom rom(config.getAttribute("id"), "rom", config);
161 
162  // Get specified mapper type from the config.
163  RomType type;
164  // if no type is mentioned, we assume 'mirrored' which works for most
165  // plain ROMs...
166  std::string_view typestr = config.getChildData("mappertype", "Mirrored");
167  if (typestr == "auto") {
168  // First check whether the (possibly patched) SHA1 is in the DB
169  const RomInfo* romInfo = config.getReactor().getSoftwareDatabase().fetchRomInfo(rom.getSHA1());
170  // If not found, try the original SHA1 in the DB
171  if (!romInfo) {
172  romInfo = config.getReactor().getSoftwareDatabase().fetchRomInfo(rom.getOriginalSHA1());
173  }
174  // If still not found, guess the mapper type
175  if (!romInfo) {
176  auto machineType = config.getMotherBoard().getMachineType();
177  if (machineType == "Coleco") {
178  if (rom.getSize() == one_of(128*1024u, 256*1024u, 512*1024u, 1024*1024u)) {
179  type = ROM_COLECOMEGACART;
180  } else {
181  type = ROM_PAGE23;
182  }
183  } else {
184  type = guessRomType(rom);
185  }
186  } else {
187  type = romInfo->getRomType();
188  }
189  } else {
190  // Use mapper type from config, even if this overrides DB.
191  type = RomInfo::nameToRomType(typestr);
192  if (type == ROM_UNKNOWN) {
193  throw MSXException("Unknown mappertype: ", typestr);
194  }
195  }
196 
197  // Store actual detected mapper type in config (override the possible
198  // 'auto' value). This way we're sure that on savestate/loadstate we're
199  // using the same mapper type (for example when the user's rom-database
200  // was updated).
201  // We do it at this point so that constructors used below can use this
202  // information for warning messages etc.
203  auto& writableConfig = const_cast<XMLElement&>(*config.getXML());
204  writableConfig.setChildData("mappertype", string(RomInfo::romTypeToName(type)));
205 
206  unique_ptr<MSXRom> result;
207  switch (type) {
208  case ROM_MIRRORED:
209  result = make_unique<RomPlain>(
210  config, move(rom), RomPlain::MIRRORED);
211  break;
212  case ROM_NORMAL:
213  result = make_unique<RomPlain>(
214  config, move(rom), RomPlain::NOT_MIRRORED);
215  break;
216  case ROM_MIRRORED0000:
217  case ROM_MIRRORED4000:
218  case ROM_MIRRORED8000:
219  case ROM_MIRROREDC000:
220  result = make_unique<RomPlain>(
221  config, move(rom), RomPlain::MIRRORED,
222  (type & 7) * 0x2000);
223  break;
224  case ROM_NORMAL0000:
225  case ROM_NORMAL4000:
226  case ROM_NORMAL8000:
227  case ROM_NORMALC000:
228  result = make_unique<RomPlain>(
229  config, move(rom), RomPlain::NOT_MIRRORED,
230  (type & 7) * 0x2000);
231  break;
232  case ROM_PAGE0:
233  case ROM_PAGE1:
234  case ROM_PAGE01:
235  case ROM_PAGE2:
236  case ROM_PAGE12:
237  case ROM_PAGE012:
238  case ROM_PAGE3:
239  case ROM_PAGE23:
240  case ROM_PAGE123:
241  case ROM_PAGE0123:
242  result = make_unique<RomPageNN>(config, move(rom), type & 0xF);
243  break;
244  case ROM_DRAM:
245  result = make_unique<RomDRAM>(config, move(rom));
246  break;
247  case ROM_GENERIC_8KB:
248  result = make_unique<RomGeneric8kB>(config, move(rom));
249  break;
250  case ROM_GENERIC_16KB:
251  result = make_unique<RomGeneric16kB>(config, move(rom));
252  break;
253  case ROM_KONAMI_SCC:
254  result = make_unique<RomKonamiSCC>(config, move(rom));
255  break;
256  case ROM_KONAMI:
257  result = make_unique<RomKonami>(config, move(rom));
258  break;
259  case ROM_KBDMASTER:
260  result = make_unique<RomKonamiKeyboardMaster>(config, move(rom));
261  break;
262  case ROM_ASCII8:
263  result = make_unique<RomAscii8kB>(config, move(rom));
264  break;
265  case ROM_ASCII16:
266  result = make_unique<RomAscii16kB>(config, move(rom));
267  break;
268  case ROM_MSXWRITE:
269  result = make_unique<RomMSXWrite>(config, move(rom));
270  break;
271  case ROM_PADIAL8:
272  result = make_unique<RomPadial8kB>(config, move(rom));
273  break;
274  case ROM_PADIAL16:
275  result = make_unique<RomPadial16kB>(config, move(rom));
276  break;
277  case ROM_SUPERLODERUNNER:
278  result = make_unique<RomSuperLodeRunner>(config, move(rom));
279  break;
280  case ROM_SUPERSWANGI:
281  result = make_unique<RomSuperSwangi>(config, move(rom));
282  break;
283  case ROM_MITSUBISHIMLTS2:
284  result = make_unique<RomMitsubishiMLTS2>(config, move(rom));
285  break;
286  case ROM_MSXDOS2:
287  result = make_unique<RomMSXDOS2>(config, move(rom));
288  break;
289  case ROM_R_TYPE:
290  result = make_unique<RomRType>(config, move(rom));
291  break;
292  case ROM_CROSS_BLAIM:
293  result = make_unique<RomCrossBlaim>(config, move(rom));
294  break;
295  case ROM_HARRY_FOX:
296  result = make_unique<RomHarryFox>(config, move(rom));
297  break;
298  case ROM_ASCII8_8:
299  result = make_unique<RomAscii8_8>(
300  config, move(rom), RomAscii8_8::ASCII8_8);
301  break;
302  case ROM_ASCII8_32:
303  result = make_unique<RomAscii8_8>(
304  config, move(rom), RomAscii8_8::ASCII8_32);
305  break;
306  case ROM_ASCII8_2:
307  result = make_unique<RomAscii8_8>(
308  config, move(rom), RomAscii8_8::ASCII8_2);
309  break;
310  case ROM_KOEI_8:
311  result = make_unique<RomAscii8_8>(
312  config, move(rom), RomAscii8_8::KOEI_8);
313  break;
314  case ROM_KOEI_32:
315  result = make_unique<RomAscii8_8>(
316  config, move(rom), RomAscii8_8::KOEI_32);
317  break;
318  case ROM_WIZARDRY:
319  result = make_unique<RomAscii8_8>(
320  config, move(rom), RomAscii8_8::WIZARDRY);
321  break;
322  case ROM_ASCII16_2:
323  result = make_unique<RomAscii16_2>(config, move(rom), RomAscii16_2::ASCII16_2);
324  break;
325  case ROM_ASCII16_8:
326  result = make_unique<RomAscii16_2>(config, move(rom), RomAscii16_2::ASCII16_8);
327  break;
328  case ROM_GAME_MASTER2:
329  result = make_unique<RomGameMaster2>(config, move(rom));
330  break;
331  case ROM_PANASONIC:
332  result = make_unique<RomPanasonic>(config, move(rom));
333  break;
334  case ROM_NATIONAL:
335  result = make_unique<RomNational>(config, move(rom));
336  break;
337  case ROM_MAJUTSUSHI:
338  result = make_unique<RomMajutsushi>(config, move(rom));
339  break;
340  case ROM_SYNTHESIZER:
341  result = make_unique<RomSynthesizer>(config, move(rom));
342  break;
343  case ROM_PLAYBALL:
344  result = make_unique<RomPlayBall>(config, move(rom));
345  break;
346  case ROM_NETTOU_YAKYUU:
347  result = make_unique<RomNettouYakyuu>(config, move(rom));
348  break;
349  case ROM_HALNOTE:
350  result = make_unique<RomHalnote>(config, move(rom));
351  break;
352  case ROM_ZEMINA25IN1:
353  result = make_unique<RomZemina25in1>(config, move(rom));
354  break;
355  case ROM_ZEMINA80IN1:
356  result = make_unique<RomZemina80in1>(config, move(rom));
357  break;
358  case ROM_ZEMINA90IN1:
359  result = make_unique<RomZemina90in1>(config, move(rom));
360  break;
361  case ROM_ZEMINA126IN1:
362  result = make_unique<RomZemina126in1>(config, move(rom));
363  break;
364  case ROM_HOLY_QURAN:
365  result = make_unique<RomHolyQuran>(config, move(rom));
366  break;
367  case ROM_HOLY_QURAN2:
368  result = make_unique<RomHolyQuran2>(config, move(rom));
369  break;
370  case ROM_FSA1FM1:
371  result = make_unique<RomFSA1FM1>(config, move(rom));
372  break;
373  case ROM_FSA1FM2:
374  result = make_unique<RomFSA1FM2>(config, move(rom));
375  break;
376  case ROM_MANBOW2:
377  case ROM_MANBOW2_2:
378  case ROM_HAMARAJANIGHT:
379  case ROM_MEGAFLASHROMSCC:
381  result = make_unique<RomManbow2>(config, move(rom), type);
382  break;
383  case ROM_MATRAINK:
384  result = make_unique<RomMatraInk>(config, move(rom));
385  break;
387  result = make_unique<RomMatraCompilation>(config, move(rom));
388  break;
389  case ROM_ARC:
390  result = make_unique<RomArc>(config, move(rom));
391  break;
392  case ROM_ROMHUNTERMK2:
393  result = make_unique<ROMHunterMk2>(config, move(rom));
394  break;
396  result = make_unique<MegaFlashRomSCCPlus>(config, move(rom));
397  break;
399  result = make_unique<ReproCartridgeV1>(config, move(rom));
400  break;
402  result = make_unique<ReproCartridgeV2>(config, move(rom));
403  break;
405  result = make_unique<KonamiUltimateCollection>(config, move(rom));
406  break;
407  case ROM_DOOLY:
408  result = make_unique<RomDooly>(config, move(rom));
409  break;
410  case ROM_MSXTRA:
411  result = make_unique<RomMSXtra>(config, move(rom));
412  break;
413  case ROM_MULTIROM:
414  result = make_unique<RomMultiRom>(config, move(rom));
415  break;
416  case ROM_RAMFILE:
417  result = make_unique<RomRamFile>(config, move(rom));
418  break;
419  case ROM_COLECOMEGACART:
420  result = make_unique<RomColecoMegaCart>(config, move(rom));
421  break;
422  default:
423  throw MSXException("Unknown ROM type");
424  }
425 
426  return result;
427 }
428 
429 } // namespace openmsx::RomFactory
openmsx::ROM_PADIAL8
@ ROM_PADIAL8
Definition: RomTypes.hh:55
openmsx::ROM_ASCII8_8
@ ROM_ASCII8_8
Definition: RomTypes.hh:12
openmsx::RomAscii8_8::ASCII8_32
@ ASCII8_32
Definition: RomAscii8_8.hh:11
openmsx::ROM_PAGE123
@ ROM_PAGE123
Definition: RomTypes.hh:82
one_of.hh
RomMajutsushi.hh
openmsx::ROM_SUPERLODERUNNER
@ ROM_SUPERLODERUNNER
Definition: RomTypes.hh:62
RomRType.hh
RomPadial8kB.hh
openmsx::RomAscii16_2::ASCII16_8
@ ASCII16_8
Definition: RomAscii16_2.hh:11
openmsx::RomAscii8_8::KOEI_32
@ KOEI_32
Definition: RomAscii8_8.hh:11
RomArc.hh
openmsx::ROM_MULTIROM
@ ROM_MULTIROM
Definition: RomTypes.hh:51
RomKonami.hh
openmsx::XMLElement::setChildData
void setChildData(std::string_view childName, std::string value)
Definition: XMLElement.cc:191
openmsx::ROM_ZEMINA25IN1
@ ROM_ZEMINA25IN1
Definition: RomTypes.hh:66
RomHalnote.hh
openmsx::ROM_MEGAFLASHROMSCCPLUS
@ ROM_MEGAFLASHROMSCCPLUS
Definition: RomTypes.hh:45
openmsx::ROM_PADIAL16
@ ROM_PADIAL16
Definition: RomTypes.hh:56
openmsx::ROM_ASCII8_32
@ ROM_ASCII8_32
Definition: RomTypes.hh:11
RomManbow2.hh
openmsx::ROM_ARC
@ ROM_ARC
Definition: RomTypes.hh:8
openmsx::ROM_R_TYPE
@ ROM_R_TYPE
Definition: RomTypes.hh:59
MegaFlashRomSCCPlus.hh
Rom.hh
openmsx::ROM_NETTOU_YAKYUU
@ ROM_NETTOU_YAKYUU
Definition: RomTypes.hh:53
openmsx::ROM_NORMAL
@ ROM_NORMAL
Definition: RomTypes.hh:54
RomAscii8_8.hh
openmsx::RomDatabase::fetchRomInfo
const RomInfo * fetchRomInfo(const Sha1Sum &sha1sum) const
Lookup an entry in the database by sha1sum.
Definition: RomDatabase.cc:615
openmsx::RomAscii8_8::WIZARDRY
@ WIZARDRY
Definition: RomAscii8_8.hh:11
openmsx::RomAscii8_8::ASCII8_8
@ ASCII8_8
Definition: RomAscii8_8.hh:11
RomFSA1FM.hh
openmsx::DeviceConfig
Definition: DeviceConfig.hh:20
utf8::unchecked::size
size_t size(std::string_view utf8)
Definition: utf8_unchecked.hh:227
RomPanasonic.hh
RomNational.hh
openmsx::DeviceConfig::getMotherBoard
MSXMotherBoard & getMotherBoard() const
Definition: DeviceConfig.cc:13
RomGeneric8kB.hh
openmsx::ROM_GAME_MASTER2
@ ROM_GAME_MASTER2
Definition: RomTypes.hh:22
openmsx::ROM_NORMAL4000
@ ROM_NORMAL4000
Definition: RomTypes.hh:89
RomPadial16kB.hh
RomHolyQuran2.hh
openmsx::ROM_HOLY_QURAN
@ ROM_HOLY_QURAN
Definition: RomTypes.hh:28
openmsx::RomInfo::getRomType
RomType getRomType() const
Definition: RomInfo.hh:50
openmsx::ROM_ASCII16_8
@ ROM_ASCII16_8
Definition: RomTypes.hh:15
RomRamFile.hh
openmsx::ROM_CROSS_BLAIM
@ ROM_CROSS_BLAIM
Definition: RomTypes.hh:17
openmsx::ROM_MIRRORED0000
@ ROM_MIRRORED0000
Definition: RomTypes.hh:84
MSXException.hh
openmsx::MSXException
Definition: MSXException.hh:10
RomDooly.hh
openmsx::ROM_ASCII16
@ ROM_ASCII16
Definition: RomTypes.hh:13
XMLElement.hh
RomKonamiSCC.hh
openmsx::ROM_MEGAFLASHROMSCC
@ ROM_MEGAFLASHROMSCC
Definition: RomTypes.hh:44
openmsx::DeviceConfig::getReactor
Reactor & getReactor() const
Definition: DeviceConfig.cc:30
RomAscii8kB.hh
openmsx::ROM_MIRROREDC000
@ ROM_MIRROREDC000
Definition: RomTypes.hh:87
openmsx::ROM_ZEMINA126IN1
@ ROM_ZEMINA126IN1
Definition: RomTypes.hh:69
openmsx::ROM_HOLY_QURAN2
@ ROM_HOLY_QURAN2
Definition: RomTypes.hh:29
openmsx::RomPlain::NOT_MIRRORED
@ NOT_MIRRORED
Definition: RomPlain.hh:11
openmsx::ROM_DOOLY
@ ROM_DOOLY
Definition: RomTypes.hh:18
openmsx::ROM_SYNTHESIZER
@ ROM_SYNTHESIZER
Definition: RomTypes.hh:64
openmsx::RomFactory
Definition: RomFactory.cc:70
ReproCartridgeV2.hh
RomSuperLodeRunner.hh
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:77
openmsx::ROM_KOEI_32
@ ROM_KOEI_32
Definition: RomTypes.hh:32
openmsx::DeviceConfig::getAttribute
const std::string & getAttribute(std::string_view attName) const
Definition: DeviceConfig.cc:65
RomColecoMegaCart.hh
openmsx::RomInfo
Definition: RomInfo.hh:13
openmsx::ROM_FSA1FM2
@ ROM_FSA1FM2
Definition: RomTypes.hh:21
Reactor.hh
openmsx::RomPlain::MIRRORED
@ MIRRORED
Definition: RomPlain.hh:11
RomDatabase.hh
openmsx::MSXMotherBoard::getMachineType
std::string getMachineType() const
Definition: MSXMotherBoard.cc:286
RomMSXWrite.hh
openmsx::ROM_MIRRORED4000
@ ROM_MIRRORED4000
Definition: RomTypes.hh:85
openmsx::ROM_ZEMINA90IN1
@ ROM_ZEMINA90IN1
Definition: RomTypes.hh:68
openmsx::ROM_NORMAL8000
@ ROM_NORMAL8000
Definition: RomTypes.hh:90
RomAscii16kB.hh
openmsx::ROM_MSXDOS2
@ ROM_MSXDOS2
Definition: RomTypes.hh:48
RomNettouYakyuu.hh
openmsx::ROM_MITSUBISHIMLTS2
@ ROM_MITSUBISHIMLTS2
Definition: RomTypes.hh:47
openmsx::XMLElement
Definition: XMLElement.hh:16
openmsx::ROM_REPRO_CARTRIDGE2
@ ROM_REPRO_CARTRIDGE2
Definition: RomTypes.hh:36
openmsx::ROM_MANBOW2_2
@ ROM_MANBOW2_2
Definition: RomTypes.hh:40
openmsx::RomFactory::create
unique_ptr< MSXDevice > create(const DeviceConfig &config)
Definition: RomFactory.cc:158
RomHolyQuran.hh
openmsx::ROM_ASCII8_2
@ ROM_ASCII8_2
Definition: RomTypes.hh:10
one_of
Definition: one_of.hh:7
openmsx::ROM_MATRAINK
@ ROM_MATRAINK
Definition: RomTypes.hh:42
openmsx::DeviceConfig::getChildData
const std::string & getChildData(std::string_view name) const
Definition: DeviceConfig.cc:43
openmsx::ROM_COLECOMEGACART
@ ROM_COLECOMEGACART
Definition: RomTypes.hh:16
RomCrossBlaim.hh
RomMSXDOS2.hh
openmsx::ROM_PAGE1
@ ROM_PAGE1
Definition: RomTypes.hh:75
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
RomMatraInk.hh
openmsx::ROM_PANASONIC
@ ROM_PANASONIC
Definition: RomTypes.hh:57
openmsx::ROM_REPRO_CARTRIDGE1
@ ROM_REPRO_CARTRIDGE1
Definition: RomTypes.hh:35
openmsx::ROM_PAGE23
@ ROM_PAGE23
Definition: RomTypes.hh:81
openmsx::ROM_NORMAL0000
@ ROM_NORMAL0000
Definition: RomTypes.hh:88
openmsx::ROM_HARRY_FOX
@ ROM_HARRY_FOX
Definition: RomTypes.hh:27
RomSuperSwangi.hh
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
Definition: Rom.hh:21
openmsx::ROM_KONAMI_ULTIMATE_COLLECTION
@ ROM_KONAMI_ULTIMATE_COLLECTION
Definition: RomTypes.hh:37
RomMatraCompilation.hh
openmsx::ROM_PLAYBALL
@ ROM_PLAYBALL
Definition: RomTypes.hh:58
openmsx::ROM_ASCII8
@ ROM_ASCII8
Definition: RomTypes.hh:9
RomTypes.hh
openmsx::RomInfo::nameToRomType
static RomType nameToRomType(std::string_view name)
Definition: RomInfo.cc:191
RomPageNN.hh
RomSynthesizer.hh
RomZemina25in1.hh
openmsx::ROM_SUPERSWANGI
@ ROM_SUPERSWANGI
Definition: RomTypes.hh:63
openmsx::ROM_RAMFILE
@ ROM_RAMFILE
Definition: RomTypes.hh:60
RomZemina126in1.hh
openmsx::ROM_PAGE012
@ ROM_PAGE012
Definition: RomTypes.hh:79
RomInfo.hh
openmsx::DeviceConfig::getXML
const XMLElement * getXML() const
Definition: DeviceConfig.hh:47
openmsx::ROM_PAGE0
@ ROM_PAGE0
Definition: RomTypes.hh:74
RomGameMaster2.hh
openmsx::ROM_MIRRORED8000
@ ROM_MIRRORED8000
Definition: RomTypes.hh:86
RomHarryFox.hh
openmsx::word
uint16_t word
16 bit unsigned integer
Definition: openmsx.hh:29
openmsx::ROM_FSA1FM1
@ ROM_FSA1FM1
Definition: RomTypes.hh:20
RomPlain.hh
KonamiUltimateCollection.hh
openmsx::ROM_PAGE0123
@ ROM_PAGE0123
Definition: RomTypes.hh:83
RomFactory.hh
openmsx::ROM_PAGE01
@ ROM_PAGE01
Definition: RomTypes.hh:76
RomGeneric16kB.hh
openmsx::ROM_UNKNOWN
@ ROM_UNKNOWN
Definition: RomTypes.hh:93
openmsx::ROM_ZEMINA80IN1
@ ROM_ZEMINA80IN1
Definition: RomTypes.hh:67
RomMSXtra.hh
openmsx::ROM_KONAMI
@ ROM_KONAMI
Definition: RomTypes.hh:33
RomMultiRom.hh
openmsx::ROM_KBDMASTER
@ ROM_KBDMASTER
Definition: RomTypes.hh:30
openmsx::RomAscii8_8::ASCII8_2
@ ASCII8_2
Definition: RomAscii8_8.hh:11
openmsx::Rom::getSHA1
const Sha1Sum & getSHA1() const
Definition: Rom.cc:362
RomAscii16_2.hh
openmsx::ROM_NORMALC000
@ ROM_NORMALC000
Definition: RomTypes.hh:91
ROMHunterMk2.hh
RomMitsubishiMLTS2.hh
DeviceConfig.hh
openmsx::RomType
RomType
Definition: RomTypes.hh:6
openmsx::Rom::getOriginalSHA1
const Sha1Sum & getOriginalSHA1() const
Definition: Rom.cc:354
openmsx::RomAscii16_2::ASCII16_2
@ ASCII16_2
Definition: RomAscii16_2.hh:11
openmsx::Rom::getSize
unsigned getSize() const
Definition: Rom.hh:32
openmsx::Reactor::getSoftwareDatabase
RomDatabase & getSoftwareDatabase()
Definition: Reactor.cc:298
openmsx::ROM_GENERIC_8KB
@ ROM_GENERIC_8KB
Definition: RomTypes.hh:23
RomZemina90in1.hh
MSXMotherBoard.hh
RomPlayBall.hh
RomZemina80in1.hh
openmsx::RomAscii8_8::KOEI_8
@ KOEI_8
Definition: RomAscii8_8.hh:11
openmsx::ROM_PAGE12
@ ROM_PAGE12
Definition: RomTypes.hh:78
openmsx::ROM_PAGE3
@ ROM_PAGE3
Definition: RomTypes.hh:80
ReproCartridgeV1.hh
RomKonamiKeyboardMaster.hh
openmsx::ROM_HAMARAJANIGHT
@ ROM_HAMARAJANIGHT
Definition: RomTypes.hh:26
openmsx::ROM_END_OF_UNORDERED_LIST
@ ROM_END_OF_UNORDERED_LIST
Definition: RomTypes.hh:71
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:197
openmsx::ROM_HALNOTE
@ ROM_HALNOTE
Definition: RomTypes.hh:25
openmsx::ROM_KOEI_8
@ ROM_KOEI_8
Definition: RomTypes.hh:31
openmsx::ROM_DRAM
@ ROM_DRAM
Definition: RomTypes.hh:19
RomDRAM.hh