summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2020-04-15 23:25:57 +1000
committer Vas Crabb <vas@vastheman.com>2020-04-16 00:11:41 +1000
commit8f393f526f725eca1ab20173fc899d5afbe6d2d6 (patch)
tree3fcec63a40a31428f01b43c3d836f119ed84656f
parent2abd76d57ce125291845387ba46cae48f774cc84 (diff)
softlist_dev.cpp: start adding validation for data areas
romload.cpp: reduce copy-pasta (nw) (nw) I fixed the errors found by adding validation to software list data areas. Most of them seem to be simple copy-paste errors hidden by the fact that the default device_image_interface loader ignores the data area size (as opposed to the "ROM" loader). There was one C64 cartridge with a missing zero on the data area size that was pretty clearly wrong.
-rw-r--r--hash/alice32.xml2
-rw-r--r--hash/c64_cart.xml2
-rw-r--r--hash/cpc_flop.xml2
-rw-r--r--hash/einstein.xml4
-rw-r--r--hash/fm77av.xml4
-rw-r--r--hash/fmtowns_cd.xml8
-rw-r--r--hash/ibm5150.xml4
-rw-r--r--hash/intv.xml96
-rw-r--r--hash/intvecs.xml22
-rw-r--r--hash/kayproii.xml22
-rw-r--r--hash/leapfrog_leappad_cart.xml2
-rw-r--r--hash/msx2_flop.xml2
-rw-r--r--hash/pc8801_cass.xml2
-rw-r--r--hash/pc8801_flop.xml6
-rw-r--r--hash/pc98.xml2
-rw-r--r--hash/sega_beena_cart.xml4
-rw-r--r--hash/specpls3_flop.xml4
-rw-r--r--hash/spectrum_cass.xml16
-rw-r--r--hash/svi318_cass.xml4
-rw-r--r--hash/tandy2k.xml2
-rw-r--r--hash/x1_cass.xml2
-rw-r--r--hash/x1_flop.xml20
-rw-r--r--src/devices/bus/intv/slot.cpp2
-rw-r--r--src/emu/diimage.cpp26
-rw-r--r--src/emu/romload.cpp189
-rw-r--r--src/emu/romload.h5
-rw-r--r--src/emu/softlist_dev.cpp140
-rw-r--r--src/emu/validity.cpp2
-rw-r--r--src/frontend/mame/audit.cpp28
-rw-r--r--src/mame/drivers/gsword.cpp2
30 files changed, 311 insertions, 315 deletions
diff --git a/hash/alice32.xml b/hash/alice32.xml
index da628c7f84e..bf9768907dd 100644
--- a/hash/alice32.xml
+++ b/hash/alice32.xml
@@ -233,7 +233,7 @@ TODO: split Alice 4k tapes into their own softlist
</part>
<part name="cass2" interface="mc10_cass">
<feature name="part_id" value="Tape 2"/>
- <dataarea name="cass" size="79023">
+ <dataarea name="cass" size="98152">
<rom name="maths1_b.k7" size="98152" crc="0a68e9c4" sha1="263c82d01e5883cf78c591b598f5fa5bf4d0c585"/>
</dataarea>
</part>
diff --git a/hash/c64_cart.xml b/hash/c64_cart.xml
index a4ce1fbbaca..5d949c3e6f8 100644
--- a/hash/c64_cart.xml
+++ b/hash/c64_cart.xml
@@ -6637,7 +6637,7 @@ license:CC0
<feature name="game" value="0" />
<feature name="exrom" value="1" />
- <dataarea name="rom" size="0x800">
+ <dataarea name="rom" size="0x8000">
<rom name="turbomst.bin" size="0x8000" status="nodump"/>
</dataarea>
</part>
diff --git a/hash/cpc_flop.xml b/hash/cpc_flop.xml
index b3214339e9a..333122daff3 100644
--- a/hash/cpc_flop.xml
+++ b/hash/cpc_flop.xml
@@ -280323,7 +280323,7 @@ Shortnames are chosen to "preview" the content:
<year>1989</year>
<publisher>Activision</publisher>
<part name="flop1" interface="floppy_3">
- <dataarea name="flop" size="63488">
+ <dataarea name="flop" size="199680">
<rom name="altered beast (nongoodcpc).dsk" size="199680" crc="877d621c" sha1="ff7ed8403c879062f44708eada63a8dea669d48c"/>
</dataarea>
</part>
diff --git a/hash/einstein.xml b/hash/einstein.xml
index 18d11a1d622..d25267f94b0 100644
--- a/hash/einstein.xml
+++ b/hash/einstein.xml
@@ -386,7 +386,7 @@ Xtal Systems (Xtal Research)
<year>19??</year>
<publisher>Konami</publisher>
<part name="flop1" interface="floppy_3">
- <dataarea name="flop" size="215296">
+ <dataarea name="flop" size="225536">
<rom name="4game.dsk" size="225536" crc="19cc28fa" sha1="fed6c4972fc72ac51952f3b800c43f1b1240643b"/>
</dataarea>
</part>
@@ -740,7 +740,7 @@ Xtal Systems (Xtal Research)
<year>1985</year>
<publisher>Orion Software</publisher>
<part name="flop1" interface="floppy_3">
- <dataarea name="flop" size="215296">
+ <dataarea name="flop" size="1722368">
<rom name="highway.dsk" size="1722368" crc="6a0b9186" sha1="dc88e7aa2cdf9d066fece5dc10092a41de077075"/>
</dataarea>
</part>
diff --git a/hash/fm77av.xml b/hash/fm77av.xml
index 0f9010da648..680031fa968 100644
--- a/hash/fm77av.xml
+++ b/hash/fm77av.xml
@@ -357,7 +357,7 @@ Titles, serial #s, publishers and release dates taken from:
<info name="release" value="198611xx"/>
<info name="alt_title" value="レイドック"/>
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="414992">
+ <dataarea name="flop" size="416048">
<rom name="laydocka1.d77" size="416048" crc="3b53877e" sha1="e2f3579fe93622a74fb07d0b8d2cd7bfb2b39132"/>
</dataarea>
</part>
@@ -379,7 +379,7 @@ Titles, serial #s, publishers and release dates taken from:
<!--rom name="laydock (1986)(t&amp;e)(jp).d77" size="538592" crc="60fc8306" sha1="65f73297d0ee4f07ec5f513eef54dfbc1d3a5094" offset="0"/-->
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="414992">
+ <dataarea name="flop" size="416048">
<rom name="laydock (disk 1).d77" size="416048" crc="3b53877e" sha1="e2f3579fe93622a74fb07d0b8d2cd7bfb2b39132"/>
</dataarea>
</part>
diff --git a/hash/fmtowns_cd.xml b/hash/fmtowns_cd.xml
index e2882959e9a..5a47e916f47 100644
--- a/hash/fmtowns_cd.xml
+++ b/hash/fmtowns_cd.xml
@@ -4775,7 +4775,7 @@ User/save disks that can be created from the game itself are not included.
<info name="usage" value="Requires 2 MB RAM"/>
<part name="flop1" interface="floppy_3_5">
<feature name="part_id" value="User Disk" />
- <dataarea name="flop" size="1261568">
+ <dataarea name="flop" size="1281968">
<rom name="opeurope.d88" size="1281968" crc="32174842" sha1="12fd4e6558e0bf7e47a9a27fa5c33db9c3a60cfd" offset="000000" />
</dataarea>
</part>
@@ -6724,7 +6724,7 @@ User/save disks that can be created from the game itself are not included.
<info name="usage" value="Requires 2 MB RAM"/>
<part name="flop1" interface="floppy_3_5">
<feature name="part_id" value="User Disk" />
- <dataarea name="flop" size="1261568">
+ <dataarea name="flop" size="1281968">
<rom name="inindo.d88" size="1281968" crc="8228d430" sha1="074d1fb23eb31b6d388deeeded545c4202cd5dee" offset="000000" />
</dataarea>
</part>
@@ -9737,7 +9737,7 @@ User/save disks that can be created from the game itself are not included.
<info name="usage" value="Requires 2 MB RAM"/>
<part name="flop1" interface="floppy_3_5">
<feature name="part_id" value="User Disk" />
- <dataarea name="flop" size="1261568">
+ <dataarea name="flop" size="1281968">
<rom name="nobubus.d88" size="1281968" crc="6ac325e5" sha1="c12389c6a34ed87155ab4db4831479f608e47d59" offset="000000" />
</dataarea>
</part>
@@ -11813,7 +11813,7 @@ User/save disks that can be created from the game itself are not included.
<info name="usage" value="Requires 2 MB RAM"/>
<part name="flop1" interface="floppy_3_5">
<feature name="part_id" value="Master Disk" />
- <dataarea name="flop" size="1261568">
+ <dataarea name="flop" size="3583660">
<rom name="shinjuku labyrinth (master disk).mfm" size="3583660" crc="78b7c26c" sha1="778befacd1534dc22edffccaebb2957823e488e7" offset="000000" />
</dataarea>
</part>
diff --git a/hash/ibm5150.xml b/hash/ibm5150.xml
index fe0ea5016f1..0fff0bcbedd 100644
--- a/hash/ibm5150.xml
+++ b/hash/ibm5150.xml
@@ -8797,12 +8797,12 @@ has been replaced with an all-zero block. -->
<publisher>Sega</publisher>
<info name="developer" value="Sega" />
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size = "327680">
+ <dataarea name="flop" size = "368640">
<rom name="Golden Axe [Sega] [1990] [5.25] [1 of 2].img" size="368640" crc="9d919d85" sha1="9203ecedd274d2436b6c39aa166fabd0e5d089d4"/>
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
- <dataarea name="flop" size = "327680">
+ <dataarea name="flop" size = "368640">
<rom name="Golden Axe [Sega] [1990] [5.25] [2 of 2].img" size="368640" crc="8684a3dd" sha1="3200f3a97d5912812dc4b53b8b733a371c2bf140"/>
</dataarea>
</part>
diff --git a/hash/intv.xml b/hash/intv.xml
index 5e8b79288a7..f0f0917a69c 100644
--- a/hash/intv.xml
+++ b/hash/intv.xml
@@ -142,7 +142,7 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="b-17 bomber.50" size="0x4000" crc="5f612afb" sha1="8b9b7d938590ede5fe651f165f405ffc9e41cabd"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="b-17 bomber.d0" size="0x2000" crc="3e932009" sha1="f0fcc934ba19a9e88b470a99a2d984820369c57c"/>
</dataarea>
</part>
@@ -240,7 +240,7 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="bomb squad.50" size="0x4000" crc="6f34430f" sha1="2c101e5241856691debc75b8012e35e696689c3d"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="bomb squad.d0" size="0x2000" crc="f99180e1" sha1="8d4a7ca33fc9ac5db8b1bdcf8806d899c898ae03"/>
</dataarea>
</part>
@@ -282,10 +282,10 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="bump n jump.50" size="0x4000" crc="6f667338" sha1="bdb657130dc9421fad842bbbc9ba7ac380ed0c86"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="bump n jump.d0" size="0x2000" crc="96265252" sha1="3919925e229e7ec57d726245f13c034f78b7d863"/>
</dataarea>
- <dataarea name="F000" size="0x2000">
+ <dataarea name="f000" size="0x2000">
<rom name="bump n jump.f0" size="0x2000" crc="038df644" sha1="cb60703bffcbfaec77098a9525136c32cbe260f8"/>
</dataarea>
</part>
@@ -354,7 +354,7 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="championship tennis.50" size="0x4000" crc="59d1eaf3" sha1="e836a9712238843a2e319d8d9618b58373ebacbd"/>
</dataarea>
- <dataarea name="D000" size="0x4000">
+ <dataarea name="d000" size="0x4000">
<rom name="championship tennis.d0" size="0x4000" crc="c7dd6388" sha1="446514366065262ea9658e4ba399e84b2a249fb8"/>
</dataarea>
</part>
@@ -496,7 +496,7 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="green demo cart.50" size="0x4000" crc="52609fec" sha1="780183183d4d1fc1a23a9a0435788c3b750003d1"/>
</dataarea>
- <dataarea name="D000" size="0x4000">
+ <dataarea name="d000" size="0x4000">
<rom name="green demo cart.d0" size="0x4000" crc="9b37afbe" sha1="ad5d06b040f2ddea2b4ab9f0e98d77ee7c310498"/>
</dataarea>
</part>
@@ -511,7 +511,7 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="international demo cart.50" size="0x4000" crc="5d575728" sha1="b663031fff53ff36942c5f325d25e913dd8367f1"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="international demo cart.d0" size="0x2000" crc="7a837bc9" sha1="dcc708901b391fc62bf799fa2e9db4551f93ba8f"/>
</dataarea>
</part>
@@ -763,7 +763,7 @@ license:CC0
<dataarea name="9000" size="0x6000">
<rom name="hover force.90" size="0x6000" crc="75d45110" sha1="f7d9d7c932be1cbf65dcfff0cfdab9e8b8f86661"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="hover force.d0" size="0x2000" crc="ed7c8fac" sha1="140986d67ba22e5c344e27ac74fa3e14f35097e7"/>
</dataarea>
</part>
@@ -883,10 +883,10 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="masters of the universe.50" size="0x4000" crc="143e8ca2" sha1="0f54ee719269ac96443ceab78f96224ce1516296"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="masters of the universe.d0" size="0x2000" crc="9c94b9f8" sha1="b18daefc51c709e7f0e20df0b937faded3a51fe9"/>
</dataarea>
- <dataarea name="F000" size="0x2000">
+ <dataarea name="f000" size="0x2000">
<rom name="masters of the universe.f0" size="0x2000" crc="7655e78a" sha1="c11533e250ab71ea27d0fec0225ddfbd69b17c41"/>
</dataarea>
</part>
@@ -972,7 +972,7 @@ license:CC0
<dataarea name="8800" size="0x6000">
<rom name="ms.88" size="0x6000" crc="714bc9b0" sha1="91d6ddd487fd8d5559a5abc3025af12f7aac889a"/>
</dataarea>
- <dataarea name="D000" size="0x6000">
+ <dataarea name="d000" size="0x6000">
<rom name="ms.d0" size="0x6000" crc="467e8990" sha1="68be9156d29925575ac2838a2cd52e7c87ac568e"/>
</dataarea>
</part>
@@ -1040,7 +1040,7 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="pinball.50" size="0x4000" crc="eea1a9a7" sha1="89a725d2c404a27ce5f931a896c1f411ea6707bd"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="pinball.d0" size="0x2000" crc="ce21806d" sha1="532cb88d9a6797ca218c5364275cb57691eb1322"/>
</dataarea>
</part>
@@ -1518,10 +1518,10 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="thin ice.50" size="0x4000" crc="0d2e9e57" sha1="211c6012c7d1a1216282bead1b01c58101dd11be"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="thin ice.d0" size="0x2000" crc="ab5d151b" sha1="807276b1180f8c90e10f5ba4c1a7cdec2b08e458"/>
</dataarea>
- <dataarea name="F000" size="0x2000">
+ <dataarea name="f000" size="0x2000">
<rom name="thin ice.f0" size="0x2000" crc="bc59178e" sha1="72d7ccbc4e00becae6ad0887da76f583eafbb895"/>
</dataarea>
</part>
@@ -1537,10 +1537,10 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="thunder castle.50" size="0x4000" crc="f77a5612" sha1="9a0b509b328aa0e9feff16cc0ce42150c8619e6c"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="thunder castle.d0" size="0x2000" crc="b2e18fed" sha1="2a6ba9e022bd5684eb7c2c38bdc267dee3e5b85a"/>
</dataarea>
- <dataarea name="F000" size="0x2000">
+ <dataarea name="f000" size="0x2000">
<rom name="thunder castle.f0" size="0x2000" crc="f305da4e" sha1="9be241701112e5fe9a3cbec874e64826fd02e25c"/>
</dataarea>
</part>
@@ -1559,10 +1559,10 @@ license:CC0
<dataarea name="9000" size="0x4000">
<rom name="tower of doom.90" size="0x4000" crc="df232856" sha1="7a612c7316b6fa56171fcfc6243cae5b097429db"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="tower of doom.d0" size="0x2000" crc="67a60cee" sha1="3b30d44d0b61bedb167f517440eb2662a2df69cf"/>
</dataarea>
- <dataarea name="F000" size="0x2000">
+ <dataarea name="f000" size="0x2000">
<rom name="tower of doom.f0" size="0x2000" crc="f683cbe6" sha1="6bea72aab5398dd0cd5c13eab57fc2f9d23fb952"/>
</dataarea>
</part>
@@ -1636,7 +1636,7 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="tron - solar sailer.50" size="0x4000" crc="96b2681e" sha1="08880cf77ed6ab9a20b9a2161ac2bb998b42bc78"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="tron - solar sailer.d0" size="0x2000" crc="0e45e775" sha1="a6d317c3e342c53d6ddbbf7bd774a84a6b44dfb8"/>
</dataarea>
</part>
@@ -1717,7 +1717,7 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="vectron.50" size="0x4000" crc="9ac88229" sha1="937300637b3fba2126be4ee119b9f1e902b9f15b"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="vectron.d0" size="0x2000" crc="eeaed70a" sha1="ef78c2159eb810853ba0e2c2bd0f27d15de8f7c3"/>
</dataarea>
</part>
@@ -1760,10 +1760,10 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="world cup football.50" size="0x4000" crc="ec17636c" sha1="f96ce3b97e2250d5a37710c55f59e29319f2cf28"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="world cup football.d0" size="0x2000" crc="0d5be7c7" sha1="9a03652e525316ec9e889b0989d22a35fb6a8358"/>
</dataarea>
- <dataarea name="F000" size="0x2000">
+ <dataarea name="f000" size="0x2000">
<rom name="world cup football.f0" size="0x2000" crc="4bb2b777" sha1="82ae81c3eb35e7e7e53c4f81a86bdf5ac3d925ff"/>
</dataarea>
</part>
@@ -1825,7 +1825,7 @@ license:CC0
<dataarea name="7000" size="0x2000">
<rom name="ecs_rom.70" size="0x2000" crc="46bb1f48" sha1="eda44a8476fdada1ae90fba0d0287611e2efa074" />
</dataarea>
- <dataarea name="E000" size="0x2000">
+ <dataarea name="e000" size="0x2000">
<rom name="ecs_rom.e0" size="0x2000" crc="c2ebcd90" sha1="b3c14955f56c57e6f0d8fbb695771946cfcf6582" />
</dataarea>
<dataarea name="ram" size="0x800">
@@ -1849,10 +1849,10 @@ license:CC0
<dataarea name="9000" size="16384">
<rom name="ad&amp;d tower of mystery.90" size="16384" crc="69ea443d" sha1="5348845531a326cf66991697c55efd9287b4874b" />
</dataarea>
- <dataarea name="D000" size="8192">
+ <dataarea name="d000" size="8192">
<rom name="ad&amp;d tower of mystery.d0" size="8192" crc="35f27a1e" sha1="2cfdee85347c1226c48d15cdfd6b8819136db130" />
</dataarea>
- <dataarea name="F000" size="8192">
+ <dataarea name="f000" size="8192">
<rom name="ad&amp;d tower of mystery.f0" size="8192" crc="c60bb7f6" sha1="9f53d330453807c18dcb4c0ed37ad0e77251213a" />
</dataarea>
</part>
@@ -1903,7 +1903,7 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="all star major league baseball.50" size="0x4000" crc="4a7e080a" sha1="ee2edd084c371d39dfcd725ed4aa5679e0c34a27"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="all star major league baseball.d0" size="0x2000" crc="31325854" sha1="fe7b5f3969e214ac23d20c5c137dc23f4515108d"/>
</dataarea>
</part>
@@ -1942,7 +1942,7 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="choplifter.50" size="0x4000" crc="b05cd576" sha1="61205b84aa3673d7a50da4f92ed0ed78e34ac951"/>
</dataarea>
- <dataarea name="D000" size="0x3000">
+ <dataarea name="d000" size="0x3000">
<rom name="choplifter.d0" size="0x3000" crc="9b09666e" sha1="a024e5189e52ae07aa666fdcba612a6e9d7da4bc"/>
</dataarea>
</part>
@@ -2047,7 +2047,7 @@ license:CC0
<dataarea name="9000" size="24576">
<rom name="hover force_3d.90" size="24576" crc="1cf011ef" sha1="5cfc7a9bb09937d499b3cdfd5e84a3e975f543a6" />
</dataarea>
- <dataarea name="D000" size="8192">
+ <dataarea name="d000" size="8192">
<rom name="hover force_3d.d0" size="8192" crc="d6e96ddc" sha1="2833c891028772d2a3acf23dce67e3cd597d486f" />
</dataarea>
</part>
@@ -2086,7 +2086,7 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="king of the mountain.50" size="0x4000" crc="3b689be9" sha1="794f7fbf5592a1c4962264db3b21d543763462ad"/>
</dataarea>
- <dataarea name="D000" size="0x4000">
+ <dataarea name="d000" size="0x4000">
<rom name="king of the mountain.d0" size="0x4000" crc="45e7021d" sha1="3e6c17470ce5a92b28fa476c94ae0b84ab01e9c2"/>
</dataarea>
</part>
@@ -2152,7 +2152,7 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="magic carousel.50" size="0x4000" crc="a1b985d2" sha1="2fdeb148f4376f1fa8eeff3a887465dfd8ffbb7d"/>
</dataarea>
- <dataarea name="D000" size="0x4000">
+ <dataarea name="d000" size="0x4000">
<rom name="magic carousel.d0" size="0x4000" crc="86bc2541" sha1="997a9b9ecb88df4f90f1f8c3cbf817c057c4a933"/>
</dataarea>
</part>
@@ -2230,7 +2230,7 @@ license:CC0
<dataarea name="5000" size="0x2000">
<rom name="blowout.50" size="0x2000" crc="f98d2330" sha1="20db3279fb6b792799722e5157c20d5b5227e059"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="blowout.d0" size="0x2000" crc="f257a189" sha1="3bfc013252af2b05c35be21b01ebaeadd5ce4d0b"/>
</dataarea>
</part>
@@ -2245,7 +2245,7 @@ license:CC0
<dataarea name="5000" size="0x2000">
<rom name="blowouta.50" size="0x2000" crc="25b7aa92" sha1="a232a43407bfa5781b30c5afded8df4af75e1788"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="blowouta.d0" size="0x2000" crc="b7e29589" sha1="4e1b1c2bf93952d52827b13752e61584a66672ea"/>
</dataarea>
</part>
@@ -2374,7 +2374,7 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="space shuttle.50" size="0x4000" crc="b16905d6" sha1="ec276c57a954c9bbe032ed166de660e77a7087be"/>
</dataarea>
- <dataarea name="D000" size="0x4000">
+ <dataarea name="d000" size="0x4000">
<rom name="space shuttle.d0" size="0x4000" crc="4b497d5e" sha1="1bc4d9af71b01cae44099297aeb0f00056463b03"/>
</dataarea>
</part>
@@ -2389,10 +2389,10 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="super soccer.50" size="0x4000" crc="02a2fb6c" sha1="b7f75755f019f5f89f99942924bc22bb2c78bd1e"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="super soccer.d0" size="0x2000" crc="fd061aff" sha1="2425e6bb365d3d617e80e29580f098eeb5af779b"/>
</dataarea>
- <dataarea name="F000" size="0x2000">
+ <dataarea name="f000" size="0x2000">
<rom name="super soccer.f0" size="0x2000" crc="3348dc4b" sha1="c723206a8f5b8e445b7ca45ad4bf05d1b36a5ab9"/>
</dataarea>
</part>
@@ -2431,10 +2431,10 @@ license:CC0
<dataarea name="5000" size="16384">
<rom name="yogi's frustration.50" size="16384" crc="7f4ba6ad" sha1="277a3ad0bdbad4fa8086655bb7508ff4bb0dde5c" />
</dataarea>
- <dataarea name="D000" size="8192">
+ <dataarea name="d000" size="8192">
<rom name="yogi's frustration.d0" size="8192" crc="cf15e8c5" sha1="bbc103a8fc3d979a05dc42aa5b773355ab11df60" />
</dataarea>
- <dataarea name="F000" size="8192">
+ <dataarea name="f000" size="8192">
<rom name="yogi's frustration.f0" size="8192" crc="2bc63759" sha1="463b7a8f2e139fcb8434c565b2b275b313a9d52e" />
</dataarea>
</part>
@@ -2494,10 +2494,10 @@ license:CC0
<dataarea name="9000" size="16384">
<rom name="dkinty.90" size="16384" crc="a927412f" sha1="acb7359db142c1b77c3a17d1547ecc8a259d3f02" />
</dataarea>
- <dataarea name="D000" size="8192">
+ <dataarea name="d000" size="8192">
<rom name="dkinty.d0" size="8192" crc="642d6557" sha1="5a2fa6bd9a6c173581da5d08699a44198da0231c" />
</dataarea>
- <dataarea name="F000" size="8192">
+ <dataarea name="f000" size="8192">
<rom name="dkinty.f0" size="8192" crc="3e39ee68" sha1="c266e320a9b2266c7db44bc0965e2b68ffa18e27" />
</dataarea>
</part>
@@ -2551,10 +2551,10 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="samegame and robots.50" size="0x4000" crc="9092f2e6" sha1="0c29a0b4de011874f27c517f1f9ef16b16fdb4fc"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="samegame and robots.d0" size="0x2000" crc="675698d3" sha1="dbcc9090a3614a86dfa9747079857fe6e0c65b97"/>
</dataarea>
- <dataarea name="F000" size="0x2000">
+ <dataarea name="f000" size="0x2000">
<rom name="samegame and robots.f0" size="0x2000" crc="1a198ae9" sha1="8553cdaae55e2c0d579a0f06f857c79323d7efb6"/>
</dataarea>
</part>
@@ -2594,10 +2594,10 @@ license:CC0
<dataarea name="5000" size="16384">
<rom name="space patrol teaser edition.50" size="16384" crc="3c3d75bf" sha1="761e379d43ba1551198dab8199764356fc615b1b" />
</dataarea>
- <dataarea name="D000" size="8192">
+ <dataarea name="d000" size="8192">
<rom name="space patrol teaser edition.d0" size="8192" crc="04101767" sha1="54f8dfe0d5413097c280f72b45f6684bc9e1a3d5" />
</dataarea>
- <dataarea name="F000" size="8192">
+ <dataarea name="f000" size="8192">
<rom name="space patrol teaser edition.f0" size="8192" crc="a6950b88" sha1="27891c3026f0a1fb34a13438502960485d33b24f" />
</dataarea>
</part>
@@ -2613,10 +2613,10 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="stonix.50" size="0x4000" crc="9af3ca58" sha1="46302bcdc15afc28968649cbdeb804e0190c251e"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="stonix.d0" size="0x2000" crc="9c5c4301" sha1="3eb7cb8a62080ff8ac2ac83c888cf5155a97d991"/>
</dataarea>
- <dataarea name="F000" size="0x2000">
+ <dataarea name="f000" size="0x2000">
<rom name="stonix.f0" size="0x2000" crc="baea7cb2" sha1="83a49852a6612be840e8ae75302784b99251946f"/>
</dataarea>
</part>
@@ -2631,7 +2631,7 @@ license:CC0
<dataarea name="5000" size="16384">
<rom name="burgrtm2.50" size="16384" crc="54848723" sha1="e791fe7ae0af267689fc831e60c407c02c5ee280" />
</dataarea>
- <dataarea name="D000" size="24576">
+ <dataarea name="d000" size="24576">
<rom name="burgrtm2.d0" size="24576" crc="53feb216" sha1="d462c44ddbe91fdbfad8ef26658dc07cea4a6dbc" />
</dataarea>
</part>
@@ -2662,7 +2662,7 @@ license:CC0
<dataarea name="5000" size="16384">
<rom name="king of the mountain (alt).50" size="16384" crc="3634697b" sha1="c20c17bd68e92b7f81a522c4c1d0dd4ae8926bdd" />
</dataarea>
- <dataarea name="D000" size="16896">
+ <dataarea name="d000" size="16896">
<rom name="king of the mountain (alt).d0" size="16896" crc="2c7f5de1" sha1="c86a04a969542a08b46ef50dd30c649ad6ef5b47" />
</dataarea>
</part>
@@ -2680,7 +2680,7 @@ license:CC0
<dataarea name="5000" size="16384">
<rom name="quest.50" size="16384" crc="6d5013df" sha1="c1535a9dd54d621ca3d44fd9ca1b5d5c745eb3ad" />
</dataarea>
- <dataarea name="D000" size="16384">
+ <dataarea name="d000" size="16384">
<rom name="quest.d0" size="16384" crc="869ce44f" sha1="43196b47bde3fccf281c355f2966c71099a6a436" />
</dataarea>
</part>
diff --git a/hash/intvecs.xml b/hash/intvecs.xml
index 4cbfa95c847..3fc77d6362e 100644
--- a/hash/intvecs.xml
+++ b/hash/intvecs.xml
@@ -16,7 +16,7 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="jetsons ways with words.50" size="0x4000" crc="3fc55c1e" sha1="35b92617f6ff725e1b7f5d255c21a4e7fa8a3bc7"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="jetsons ways with words.d0" size="0x2000" crc="e089cb46" sha1="275ac1f258aaa611163398d9b95a84bad69cd1ae"/>
</dataarea>
</part>
@@ -33,7 +33,7 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="melody blaster.50" size="0x4000" crc="52b96271" sha1="0a1557a2d5720b7116fab60d7ab528189a23be03"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="melody blaster.d0" size="0x2000" crc="7be551d9" sha1="ff2280d8894b996f6561e75544b62ec81b195e65"/>
</dataarea>
</part>
@@ -50,7 +50,7 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="mind strike.50" size="0x4000" crc="604ba84a" sha1="b3e84a8decdf0cc6fe6471671c256a18dc61f34a"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="mind strike.d0" size="0x2000" crc="297717bd" sha1="e38fd12edffe278a283e08b42965fab6fd65b03d"/>
</dataarea>
</part>
@@ -67,7 +67,7 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="mr basic meets bits n bytes.50" size="0x4000" crc="b11a5c27" sha1="66dc40f0cf3d6326452620912ac6aec0f21a0484"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="mr basic meets bits n bytes.d0" size="0x2000" crc="e6f08b02" sha1="b879b3ee76315b5369593cf142da6dab8eaebf71"/>
</dataarea>
</part>
@@ -98,11 +98,11 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="world series major league baseball.50" size="0x4000" crc="cc7ffde7" sha1="926971342db595baab8c352b6179935774ccbcdb"/>
</dataarea>
- <dataarea name="D000" size="0x4000">
+ <dataarea name="d000" size="0x4000">
<rom name="world series major league baseball.d0" size="0x4000" crc="839fa5c7" sha1="1ef12665079d1ce50bd2419b668344a08c9a872f"/>
</dataarea>
<!-- two ROM pages -->
- <dataarea name="F000" size="0x4000">
+ <dataarea name="f000" size="0x4000">
<rom name="world series major league baseball (page 0).f0" size="0x2000" crc="a0f2fe49" sha1="fab397b49c5a7db53a501caea42fce169da5a31a" offset="0x0000"/>
<rom name="world series major league baseball (page 1).f0" size="0x2000" crc="94d6b056" sha1="df2a8c950dd1c398db901a624c04322d2b4f2782" offset="0x2000"/>
</dataarea>
@@ -122,10 +122,10 @@ license:CC0
<dataarea name="9000" size="0x4000">
<rom name="game factory.90" size="0x4000" crc="5e491625" sha1="464798a8fefb6bf6e91f81ff6fd6caed4cfa002e"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="game factory.d0" size="0x2000" crc="71f48e85" sha1="3a8327cf2aee60a5ad98bf124784b50a8aff2fab"/>
</dataarea>
- <dataarea name="F000" size="0x2000">
+ <dataarea name="f000" size="0x2000">
<rom name="game factory.f0" size="0x2000" crc="7a8585e8" sha1="691ece0f6426ea5ada71f8615ca6eed24bef4578"/>
</dataarea>
<dataarea name="ram" size="0x800">
@@ -143,10 +143,10 @@ license:CC0
<dataarea name="5000" size="0x4000">
<rom name="number jumble.50" size="0x4000" crc="56ac640c" sha1="4cd87295b6c473a6d48b836c11e29169a2a28d11"/>
</dataarea>
- <dataarea name="D000" size="0x2000">
+ <dataarea name="d000" size="0x2000">
<rom name="number jumble.d0" size="0x2000" crc="2be04ed6" sha1="d86953713d178c287f502955458f9943d1dfe0a1"/>
</dataarea>
- <dataarea name="F000" size="0x2000">
+ <dataarea name="f000" size="0x2000">
<rom name="number jumble.f0" size="0x2000" crc="c5dac500" sha1="ff4a42b95f99f02cabcf8018b55f4d113404833a"/>
</dataarea>
</part>
@@ -163,7 +163,7 @@ license:CC0
<dataarea name="5000" size="16384">
<rom name="flintstones keyboard fun.50" size="16384" crc="87996f3a" sha1="ffc8986782a461e1c99de24f92578295216e7b5f" />
</dataarea>
- <dataarea name="D000" size="8192">
+ <dataarea name="d000" size="8192">
<rom name="flintstones keyboard fun.d0" size="8192" crc="e813510b" sha1="fa6203172faf46d89fd3a9276f642cbaf6b6f2ab" />
</dataarea>
</part>
diff --git a/hash/kayproii.xml b/hash/kayproii.xml
index b66b369dad3..d19c601bb12 100644
--- a/hash/kayproii.xml
+++ b/hash/kayproii.xml
@@ -12,7 +12,7 @@ license:CC0
<year>19??</year>
<publisher>Digital Research</publisher>
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="195328">
+ <dataarea name="flop" size="139911">
<rom name="cp-m 2.2 boot disk (19xx)(digital research)(de).td0" size="139911" crc="ab5d7ae0" sha1="b73622c17306e32b42cef31d58616378329605ef"/>
</dataarea>
</part>
@@ -23,7 +23,7 @@ license:CC0
<year>19??</year>
<publisher>Digital Research</publisher>
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="195328">
+ <dataarea name="flop" size="188479">
<rom name="cp-m 2.2 (19xx)(digital research).imd" size="188479" crc="602c4f18" sha1="c4158b4f84066514af2b74cb6d0915f661402819"/>
</dataarea>
</part>
@@ -36,7 +36,7 @@ license:CC0
<year>1982</year>
<publisher>Perfect Software</publisher>
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="195328">
+ <dataarea name="flop" size="163451">
<rom name="perfect calc v1.00 (1982)(perfect software).imd" size="163451" crc="d7c79f18" sha1="3666da3855bfc9c82a328fee67906ac04b6bd75b"/>
</dataarea>
</part>
@@ -47,7 +47,7 @@ license:CC0
<year>1982</year>
<publisher>Perfect Software</publisher>
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="195328">
+ <dataarea name="flop" size="150160">
<rom name="perfect speller (1982)(perfect software).imd" size="150160" crc="c03fc828" sha1="4a405c65a55b5ba9be17b638cfe9c0b539698fbc"/>
</dataarea>
</part>
@@ -58,7 +58,7 @@ license:CC0
<year>1982</year>
<publisher>Perfect Software</publisher>
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="195328">
+ <dataarea name="flop" size="197701">
<rom name="perfect writer (1982)(perfect software).imd" size="197701" crc="43cb00ac" sha1="67145d125f3f50e660ae8b2e299aad8200d59a7f"/>
</dataarea>
</part>
@@ -69,7 +69,7 @@ license:CC0
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="195328">
+ <dataarea name="flop" size="151202">
<rom name="perfect writer - docs and utilities (198x)(-).imd" size="151202" crc="94cda75d" sha1="46348510ff682ef3a8a1e5a27f1625beae21980e"/>
</dataarea>
</part>
@@ -80,7 +80,7 @@ license:CC0
<year>198?</year>
<publisher>Perfect Software</publisher>
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="195328">
+ <dataarea name="flop" size="180829">
<rom name="perfect writer - lessons (198x)(perfect software).imd" size="180829" crc="b8bba8ca" sha1="6e18f014337efcb70248b8cff2483bc1d5c8ec4f"/>
</dataarea>
</part>
@@ -91,7 +91,7 @@ license:CC0
<year>1982</year>
<publisher>Chang Laboratories</publisher>
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="195328">
+ <dataarea name="flop" size="113909">
<rom name="profit plan (1982)(chang laboratories).imd" size="113909" crc="1d967882" sha1="03d00c14e57e0e84e0e1fa127ab36b47d1731ea4"/>
</dataarea>
</part>
@@ -102,7 +102,7 @@ license:CC0
<year>1981</year>
<publisher>Select Information Systems</publisher>
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="195328">
+ <dataarea name="flop" size="148661">
<rom name="select - teach (1981)(select information systems).imd" size="148661" crc="459b51f0" sha1="7bb16452689cbb39a9c8a2088306a98b2f3ca31a"/>
</dataarea>
</part>
@@ -113,7 +113,7 @@ license:CC0
<year>1981</year>
<publisher>Select Information Systems</publisher>
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="195328">
+ <dataarea name="flop" size="106254">
<rom name="select - work processor (1981)(select information systems).imd" size="106254" crc="ebcb98c5" sha1="1c8d1a3228e6ac5fdffe7409d921499db22fea72"/>
</dataarea>
</part>
@@ -124,7 +124,7 @@ license:CC0
<year>1983</year>
<publisher>MicroPro</publisher>
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="195328">
+ <dataarea name="flop" size="202296">
<rom name="wordstar v3.3 (1983)(micropro).imd" size="202296" crc="64e0f3d6" sha1="6abf468d538e65e82bc0b85cc5d656282048ce3c"/>
</dataarea>
</part>
diff --git a/hash/leapfrog_leappad_cart.xml b/hash/leapfrog_leappad_cart.xml
index a48c73edc3e..70022990912 100644
--- a/hash/leapfrog_leappad_cart.xml
+++ b/hash/leapfrog_leappad_cart.xml
@@ -447,7 +447,7 @@ license:CC0
<dataarea name="rom" size="2097152">
<rom name="was ist das von richard scarry.u1" size="2097152" crc="744cd1f4" sha1="797b9856ef6f96c92978303c6604c2f1ae2e9278" />
</dataarea>
- <dataarea name="pages" size="0x2000000"> <!-- book pages -->
+ <dataarea name="pages" size="0x4000000"> <!-- book pages -->
<rom name="0 - 0001.png" size="47060702" crc="b6a82c67" sha1="ee6dd6a64b8c876298d4d987ec0944b94601a36d" offset="0"/>
<rom name="0 - 0002.png" size="25273650" crc="951c77cf" sha1="901996b902f3954442d76924c3f33930e98cc21c" offset="0"/>
<rom name="0 - 0003.png" size="21119566" crc="85eacf2a" sha1="1bc18385434c23e247024ad950b4cadb87339dba" offset="0"/>
diff --git a/hash/msx2_flop.xml b/hash/msx2_flop.xml
index 27a69241566..69e8e8aed5f 100644
--- a/hash/msx2_flop.xml
+++ b/hash/msx2_flop.xml
@@ -246,7 +246,7 @@ The following floppies came with the machines.
<year>1985</year>
<publisher>Sony</publisher>
<part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="73720">
+ <dataarea name="flop" size="737280">
<rom name="700sdsk1.dsk" size="737280" crc="cc7c0972" sha1="b9cbe7decaf796b8cde9a70de50d634b5e2b2a2b"/>
</dataarea>
</part>
diff --git a/hash/pc8801_cass.xml b/hash/pc8801_cass.xml
index 5b82fa840a6..76f8b1df291 100644
--- a/hash/pc8801_cass.xml
+++ b/hash/pc8801_cass.xml
@@ -1271,7 +1271,7 @@ NOTE: This list is here only to document available dumps and it's not used (yet)
<info name="release" value="198308xx"/>
<info name="alt_title" value="四次元の家"/>
<part name="cass" interface="pc8801_cass">
- <dataarea name="cass" size="19259">
+ <dataarea name="cass" size="24890">
<rom name="4 dimension house.t88" size="24890" crc="40e6938c" sha1="b642f87dc619975e60561499dc35b9b5d7afff07"/>
</dataarea>
</part>
diff --git a/hash/pc8801_flop.xml b/hash/pc8801_flop.xml
index 543a3eb7ac1..5b0c4150783 100644
--- a/hash/pc8801_flop.xml
+++ b/hash/pc8801_flop.xml
@@ -575,13 +575,13 @@ INVESTIGATE
<!--rom name="saito yuki demo.d88" size="697984" crc="e879576f" sha1="4f7344ce305d86c9492f0527c4120d5ac0ced37a" offset="0"/-->
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="31424"> <!-- Data CRC16: 2590 -->
+ <dataarea name="flop" size="349136"> <!-- Data CRC16: 2590 -->
<rom name="saito yuki demo (disk 1).d88" size="349136" crc="596501d6" sha1="b698d49dcdf16dbe97151d368a5f7f139a5b4dd6" offset="0"/>
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
- <dataarea name="flop" size="31424"> <!-- Data CRC16: 15660 -->
+ <dataarea name="flop" size="348848"> <!-- Data CRC16: 15660 -->
<rom name="saito yuki demo (disk 2).d88" size="348848" crc="0b6f69cb" sha1="f90808d7368a2c3d09a67570754b8e27f3ec4b98" offset="0"/>
</dataarea>
</part>
@@ -11129,7 +11129,7 @@ ExtractDisk [02]"MAPディスク " -> "duel kawanakajima_02.d88"
<year>1989?</year>
<publisher>バショウハウス (Bashou House)</publisher>
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="415824"> <!-- Data CRC16: 21332 -->
+ <dataarea name="flop" size="415840"> <!-- Data CRC16: 21332 -->
<rom name="emerald dragon music disk (19xx)(basho house).d88" size="415840" crc="6f1a87d3" sha1="c6c6ec5af97f3c1c0c1b9687d4cd7ac368051181"/>
</dataarea>
</part>
diff --git a/hash/pc98.xml b/hash/pc98.xml
index 07e4a7dcb18..0eca1241437 100644
--- a/hash/pc98.xml
+++ b/hash/pc98.xml
@@ -12767,7 +12767,7 @@ only have some part of Windows file and a Video driver(CLGD?).
<info name="alt_title" value="ダムバスターズ" />
<info name="release" value="198601xx" />
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="1086448">
+ <dataarea name="flop" size="3765072">
<rom name="dam busters [nfd r1].nfd" size="3765072" crc="2bd54d4e" sha1="3a1df219c32478405f7ae2797d46f1ec7262eb5f" offset="0" />
</dataarea>
</part>
diff --git a/hash/sega_beena_cart.xml b/hash/sega_beena_cart.xml
index b335aef1332..c7ea0d4e5b1 100644
--- a/hash/sega_beena_cart.xml
+++ b/hash/sega_beena_cart.xml
@@ -185,7 +185,7 @@ license:CC0
<dataarea name="rom" size="0x800000" width="32" endianness="big">
<rom loadflag="load16_word_swap" name="S-100039-1100 - Pocket Monsters Diamond and Pearl Pokemon o Sagase! Meiro de Daibouken!.bin" size="0x00800000" crc="7bbf9599" sha1="25aba3628c627c3ed603f14cb50cfe6101816db7" />
</dataarea>
- <dataarea name="pages" size="0x2000000"> <!-- book pages -->
+ <dataarea name="pages" size="0x4000000"> <!-- book pages -->
<rom name="0 - 0001.png" size="0x0204f417" crc="088c3d4c" sha1="d66a27f30374568998cff2ed89e494ac7f449687" />
<rom name="0 - 0002.png" size="0x020d5ff7" crc="3f992374" sha1="b5dd1f438afc18ac6ca78aa2757129bb1f53b54e" />
<rom name="0 - 0003.png" size="0x020912fe" crc="b064c6ea" sha1="a4107dbcdc40713a651da52653b9e639b2d9addc" />
@@ -210,7 +210,7 @@ license:CC0
<dataarea name="rom" size="0x800000" width="32" endianness="big">
<rom loadflag="load16_word_swap" name="T-110008-1101 - Yes! PreCure 5 Asonde Oboeyou Hiragana!.bin" size="0x00800000" crc="6ae77335" sha1="29650349b117b96105882da7b12cac8fe9a04813" />
</dataarea>
- <dataarea name="pages" size="0x2000000"> <!-- book pages -->
+ <dataarea name="pages" size="0x4000000"> <!-- book pages -->
<rom name="0 - 0001.png" size="0x01fd2372" crc="9290ac04" sha1="d106071e01ee790d85d46a2378ce5f638331b67a" />
<rom name="0 - 0002.png" size="0x0200a259" crc="d919d19b" sha1="20444680d29b6a66471cbdb77537ba054753b9d6" />
<rom name="0 - 0003.png" size="0x01fd80c8" crc="97c2ba5e" sha1="128b226187bfc53e4b1abf7be04c068a61c88240" />
diff --git a/hash/specpls3_flop.xml b/hash/specpls3_flop.xml
index a9ae1859021..76ceb0b1b69 100644
--- a/hash/specpls3_flop.xml
+++ b/hash/specpls3_flop.xml
@@ -1086,7 +1086,7 @@ license:CC0
<year>1990</year>
<publisher>Infogrames</publisher>
<part name="flop1" interface="floppy_3">
- <dataarea name="flop" size="12e901e">
+ <dataarea name="flop" size="126717">
<rom name="3530 - sim city (europe).ipf" size="126717" crc="12e901ee" sha1="7fd665f19a290994dfbf8ba02da19ac1905581be" offset="0" />
</dataarea>
</part>
@@ -1122,7 +1122,7 @@ license:CC0
<year>1991</year>
<publisher>The Edge</publisher>
<part name="flop1" interface="floppy_3">
- <dataarea name="flop" size="195328">
+ <dataarea name="flop" size="236460">
<rom name="3531 - snoopy - the cool computer game (europe).ipf" size="236460" crc="acdfe6d4" sha1="4ab0bd91d893964d957bf8c7ab3fa79d534220dc" offset="0" />
</dataarea>
</part>
diff --git a/hash/spectrum_cass.xml b/hash/spectrum_cass.xml
index 03133e05769..51fe638f9c1 100644
--- a/hash/spectrum_cass.xml
+++ b/hash/spectrum_cass.xml
@@ -3562,7 +3562,7 @@ license:CC0
<year>1983</year>
<publisher>AWA Software</publisher>
<part name="cass" interface="spectrum_cass">
- <dataarea name="cass" size="17857">
+ <dataarea name="cass" size="17901">
<rom name="beetlemania.tzx" size="17901" crc="ff1139a9" sha1="4efafa00f861c18df6b5361673ec5bfd726c53aa"/>
</dataarea>
</part>
@@ -6728,7 +6728,7 @@ license:CC0
<year>1987</year>
<publisher>Codemasters</publisher>
<part name="cass" interface="spectrum_cass">
- <dataarea name="cass" size="48857">
+ <dataarea name="cass" size="48885">
<rom name="dizzy - the ultimate cartoon adventure.tzx" size="48885" crc="80f651f4" sha1="accaa7d5adb2c8823e58ab4f22e22cc771d56db9"/>
</dataarea>
</part>
@@ -34979,19 +34979,19 @@ license:CC0
</part>
<part name="cass2" interface="spectrum_cass">
<feature name="part_id" value="Smash Tape 24 - Side 2 (WonderBoy level data)"/>
- <dataarea name="cass" size="142865"> <!-- identical to image in ys48sp::cass2 -->
+ <dataarea name="cass" size="29555"> <!-- identical to image in ys48sp::cass2 -->
<rom name="your sinclair (issue 48) - tape 1 - side 2.tzx" size="29555" crc="55c8583e" sha1="c6ffe2e41e37feee97dd8501ed99b23df4518cb7"/>
</dataarea>
</part>
<part name="cass3" interface="spectrum_cass">
<feature name="part_id" value="Tape 2 - Side 1 (Thing, Riding the Rapids)"/>
- <dataarea name="cass" size="95273">
+ <dataarea name="cass" size="95276">
<rom name="your sinclair (issue 48) - tape 2 - side 1.tzx" size="95276" crc="c7a7bed5" sha1="d3800e1d9471df9d5e33153a2c416aeb46388388"/>
</dataarea>
</part>
<part name="cass4" interface="spectrum_cass">
<feature name="part_id" value="Tape 2 - Side 2 (Heroes of Karn, Shark Your Sinclair Demo)"/>
- <dataarea name="cass" size="95208">
+ <dataarea name="cass" size="95211">
<rom name="your sinclair (issue 48) - tape 2 - side 2.tzx" size="95211" crc="2fb98fc4" sha1="a77b6025b9435d27427fb6e77d1c1dfe14e45891"/>
</dataarea>
</part>
@@ -35010,19 +35010,19 @@ license:CC0
</part>
<part name="cass2" interface="spectrum_cass">
<feature name="part_id" value="Smash Tape 24 - Side 2 (Wonder Boy level data)"/>
- <dataarea name="cass" size="142865"> <!-- identical to image in ys48::cass2 -->
+ <dataarea name="cass" size="29555"> <!-- identical to image in ys48::cass2 -->
<rom name="your sinclair (issue 48) - tape 1 - side 2.tzx" size="29555" crc="55c8583e" sha1="c6ffe2e41e37feee97dd8501ed99b23df4518cb7"/>
</dataarea>
</part>
<part name="cass3" interface="spectrum_cass">
<feature name="part_id" value="Smash Tape 25 Special Edition - Side 1 (Heroes of Karn, Forest at World's End, Warlord)"/>
- <dataarea name="cass" size="143664">
+ <dataarea name="cass" size="143670">
<rom name="your sinclair (issue 48) - tape 2 - special edition - side 1.tzx" size="143670" crc="237aa578" sha1="37b8cab069903f050074445118af8acaacdce76c"/>
</dataarea>
</part>
<part name="cass4" interface="spectrum_cass">
<feature name="part_id" value="Smash Tape 25 Special Edition - Side 2 (Anfractuos, Riding the Rapids, Thing, Shark Sinclair User Demo)"/>
- <dataarea name="cass" size="189985">
+ <dataarea name="cass" size="189994">
<rom name="your sinclair (issue 48) - tape 2 - special edition - side 2.tzx" size="189994" crc="301d2108" sha1="a32cbf27bc4927808a81eb575a4e42b11ea1fd77"/>
</dataarea>
</part>
diff --git a/hash/svi318_cass.xml b/hash/svi318_cass.xml
index e3b509bdebe..51e43600a37 100644
--- a/hash/svi318_cass.xml
+++ b/hash/svi318_cass.xml
@@ -701,7 +701,7 @@ Ballonies (198x)
<info name="serial" value="SD-669T" />
<part name="cass1" interface="svi318_cass">
- <dataarea name="cass" size="17124">
+ <dataarea name="cass" size="32768">
<rom name="planet patrol (1983)(spectravideo)[a][bload'cas-',r].cas" size="32768" crc="6adb5186" sha1="c26700c5159c9349d9be6cc4631067e43a2319fc"/>
</dataarea>
</part>
@@ -846,7 +846,7 @@ Ballonies (198x)
<info name="serial" value="SD-232C" />
<part name="cass1" interface="svi318_cass">
- <dataarea name="cass" size="16700">
+ <dataarea name="cass" size="32768">
<rom name="frantic freddy (1983)(spectravideo)[a][bload'cas-',r].cas" size="32768" crc="5bd12860" sha1="255d8a90d26eb9c1ecdda16ae4da68d44198b47f"/>
</dataarea>
</part>
diff --git a/hash/tandy2k.xml b/hash/tandy2k.xml
index 876b176cdb7..b5ac17c335b 100644
--- a/hash/tandy2k.xml
+++ b/hash/tandy2k.xml
@@ -31,7 +31,7 @@ license:CC0
</part> -->
<!-- repaired copy protected by hand -->
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="331572">
+ <dataarea name="flop" size="2002793">
<rom name="123_sys.mfm" size="2002793" crc="89e185f8" sha1="316ae07e5cbf02a4dcdbe322f9f0dced75b5f387" status="baddump"/>
</dataarea>
</part>
diff --git a/hash/x1_cass.xml b/hash/x1_cass.xml
index 40bee643446..a5e7695034e 100644
--- a/hash/x1_cass.xml
+++ b/hash/x1_cass.xml
@@ -1102,7 +1102,7 @@ Titles, publishers and release dates taken from:
<year>1984?</year>
<publisher>デービーソフト (dB-Soft)</publisher>
<part name="cass" interface="x1_cass">
- <dataarea name="side1" size="240004">
+ <dataarea name="side1" size="360004">
<rom name="hyper olympic '84 alt.tap" size="360004" crc="9eeb708b" sha1="b64040786430b0bec364f4af1b5fde108721033c"/>
</dataarea>
</part>
diff --git a/hash/x1_flop.xml b/hash/x1_flop.xml
index 10d1f7c39a4..6c0a110dea8 100644
--- a/hash/x1_flop.xml
+++ b/hash/x1_flop.xml
@@ -391,7 +391,7 @@ Plus, some games crash MESS at exit (e.g. some sorcer disks or some arcus disks)
<info name="alt_title" value="ちゃっくんぽっぷ"/>
<info name="usage" value="Type FILES then move the cursor to the line of the game and type LOAD (to load) and type RUN when loaded"/>
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="327680">
+ <dataarea name="flop" size="348848">
<rom name="chackn.d88" size="348848" crc="257df7de" sha1="2bd62b1c1bdeacdeeef80d603b1e1b34a99cbaa0"/>
</dataarea>
</part>
@@ -517,7 +517,7 @@ Plus, some games crash MESS at exit (e.g. some sorcer disks or some arcus disks)
<info name="release" value="198702xx"/>
<info name="alt_title" value="大戦略X1"/>
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="327680">
+ <dataarea name="flop" size="348848">
<rom name="daisenx1.d88" size="348848" crc="cf06fac8" sha1="19024c98bdd96842c8e035b7869de0df7ff03b39"/>
</dataarea>
</part>
@@ -1673,12 +1673,12 @@ Plus, some games crash MESS at exit (e.g. some sorcer disks or some arcus disks)
<info name="release" value="198807xx"/>
<info name="alt_title" value="まじゃべんちゃー ねぎ麻雀"/>
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="327680">
+ <dataarea name="flop" size="348848">
<rom name="disk1.d88" size="348848" crc="3c17cce4" sha1="defff082c7ba49ac0f5e807c3cd1e9a9f4c7f1ab"/>
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
- <dataarea name="flop" size="327680">
+ <dataarea name="flop" size="348848">
<rom name="disk2.d88" size="348848" crc="50f1b9c7" sha1="1b1bfbe1cd1b1891be78c78dba6f44b735a78b48"/>
</dataarea>
</part>
@@ -2260,17 +2260,17 @@ Plus, some games crash MESS at exit (e.g. some sorcer disks or some arcus disks)
<info name="release" value="198606xx"/>
<info name="alt_title" value="ザ・スクリーマー"/>
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="414992">
+ <dataarea name="flop" size="415792">
<rom name="the screamer system.d88" size="415792" crc="ee7c9ddb" sha1="4f42b5ac6eaa60290841038029ea5b6a9db96e99"/>
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
- <dataarea name="flop" size="414992">
+ <dataarea name="flop" size="415840">
<rom name="the screamer data 1.d88" size="415840" crc="5ed7c4cf" sha1="7764365c5603923c62c967b9a865d6cef8a1f796"/>
</dataarea>
</part>
<part name="flop3" interface="floppy_5_25">
- <dataarea name="flop" size="414992">
+ <dataarea name="flop" size="415840">
<rom name="the screamer data 2.d88" size="415840" crc="098b403d" sha1="fe0a943724e6df673dff18eceb1018817bd24e07"/>
</dataarea>
</part>
@@ -3352,7 +3352,7 @@ Plus, some games crash MESS at exit (e.g. some sorcer disks or some arcus disks)
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
- <dataarea name="flop" size="348848">
+ <dataarea name="flop" size="537520">
<rom name="wodydata.d88" size="537520" crc="3ff620b9" sha1="0a6682318141c08c3e8c0f8865d824a44417da44"/>
</dataarea>
</part>
@@ -5429,13 +5429,13 @@ Plus, some games crash MESS at exit (e.g. some sorcer disks or some arcus disks)
<year>1990</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="348848">
+ <dataarea name="flop" size="422160">
<rom name="xdos_sys.d88" size="422160" crc="a35c4f89" sha1="52d503c349132af1a5bf8bbca2ba480e4b5a8d6e"/>
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
- <dataarea name="flop" size="348848">
+ <dataarea name="flop" size="422160">
<rom name="xdosutil.d88" size="422160" crc="73617547" sha1="0cee25e4ef6bf9723687e8427ea0ce6892bdfd03"/>
</dataarea>
</part>
diff --git a/src/devices/bus/intv/slot.cpp b/src/devices/bus/intv/slot.cpp
index 0adca238eb1..c0c39d5613d 100644
--- a/src/devices/bus/intv/slot.cpp
+++ b/src/devices/bus/intv/slot.cpp
@@ -385,7 +385,7 @@ image_init_result intv_cart_slot_device::call_load()
else
{
uint16_t offset[] = { 0x400, 0x2000, 0x4000, 0x4800, 0x5000, 0x6000, 0x7000, 0x8000, 0x8800, 0x9000, 0xa000, 0xb000, 0xc000, 0xd000, 0xe000, 0xf000};
- const char* region_name[] = {"0400", "2000", "4000", "4800", "5000", "6000", "7000", "8000", "8800", "9000", "A000", "B000", "C000", "D000", "E000", "F000"};
+ const char* region_name[] = {"0400", "2000", "4000", "4800", "5000", "6000", "7000", "8000", "8800", "9000", "a000", "b000", "c000", "d000", "e000", "f000"};
const char *pcb_name = get_feature("slot");
bool extra_bank = false;
diff --git a/src/emu/diimage.cpp b/src/emu/diimage.cpp
index 4ec5ff7898c..8a38739933a 100644
--- a/src/emu/diimage.cpp
+++ b/src/emu/diimage.cpp
@@ -906,31 +906,7 @@ bool device_image_interface::load_software(software_list_device &swlist, const c
u32 crc = 0;
const bool has_crc = util::hash_collection(ROM_GETHASHDATA(romp)).crc(crc);
std::vector<const software_info *> parents;
- std::vector<std::string> searchpath;
-
- // search <rompath>/<list>/<software> following parents
- searchpath.emplace_back(util::string_format("%s" PATH_SEPARATOR "%s", swlist.list_name(), swname));
- for (const software_info *i = swinfo; i && !i->parentname().empty(); i = swlist.find(i->parentname()))
- {
- if (std::find(parents.begin(), parents.end(), i) != parents.end())
- {
- osd_printf_warning("WARNING: parent/clone relationships form a loop for software %s (in list %s)\n", swname, swlist.list_name());
- break;
- }
- parents.emplace_back(i);
- searchpath.emplace_back(util::string_format("%s" PATH_SEPARATOR "%s", swlist.list_name(), i->parentname()));
- }
-
- // search <rompath>/<software> following parents
- searchpath.emplace_back(swname);
- parents.clear();
- for (software_info const *i = swinfo; i && !i->parentname().empty(); i = swlist.find(i->parentname()))
- {
- if (std::find(parents.begin(), parents.end(), i) != parents.end())
- break;
- parents.emplace_back(i);
- searchpath.emplace_back(i->parentname());
- }
+ std::vector<std::string> searchpath = rom_load_manager::get_software_searchpath(swlist, *swinfo);
// for historical reasons, add the search path for the software list device's owner
const device_t *const listowner = swlist.owner();
diff --git a/src/emu/romload.cpp b/src/emu/romload.cpp
index 4018cdf923e..63c518a13fb 100644
--- a/src/emu/romload.cpp
+++ b/src/emu/romload.cpp
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Nicola Salmoria,Paul Priest,Aaron Giles
+// copyright-holders:Nicola Salmoria,Paul Priest,Aaron Giles,Vas Crabb
/*********************************************************************
romload.cpp
@@ -30,27 +30,72 @@
#define TEMPBUFFER_MAX_SIZE (1024 * 1024 * 1024)
/***************************************************************************
- HELPERS (also used by diimage.cpp)
+ HELPERS
***************************************************************************/
namespace {
-rom_entry const *next_parent_system(game_driver const *&system, std::vector<rom_entry> &rom_entries)
+auto next_parent_system(game_driver const &system)
{
- if (!system)
- return nullptr;
- int const parent(driver_list::find(system->parent));
- if (0 > parent)
- {
- system = nullptr;
- return nullptr;
- }
- else
+ return
+ [sys = &system, roms = std::vector<rom_entry>()] () mutable -> rom_entry const *
+ {
+ if (!sys)
+ return nullptr;
+ int const parent(driver_list::find(sys->parent));
+ if (0 > parent)
+ {
+ sys = nullptr;
+ return nullptr;
+ }
+ else
+ {
+ sys = &driver_list::driver(parent);
+ roms = rom_build_entries(sys->rom);
+ return &roms[0];
+ }
+ };
+}
+
+
+auto next_parent_software(std::vector<software_info const *> const &parents)
+{
+ auto part(parents.front()->parts().end());
+ return
+ [&parents, current = parents.cbegin(), part, end = part] () mutable -> const rom_entry *
+ {
+ if (part == end)
+ {
+ if (parents.end() == current)
+ return nullptr;
+ part = (*current)->parts().cbegin();
+ end = (*current)->parts().cend();
+ do { ++current; } while ((parents.cend() != current) && (*current)->parts().empty());
+ }
+ return &(*part++).romdata()[0];
+ };
+}
+
+
+std::vector<std::string> make_software_searchpath(software_list_device &swlist, software_info const &swinfo, std::vector<software_info const *> &parents)
+{
+ std::vector<std::string> result;
+
+ // search <rompath>/<list>/<software> following parents
+ for (software_info const *i = &swinfo; i; )
{
- system = &driver_list::driver(parent);
- rom_entries = rom_build_entries(system->rom);
- return &rom_entries[0];
+ if (std::find(parents.begin(), parents.end(), i) != parents.end())
+ break;
+ parents.emplace_back(i);
+ result.emplace_back(util::string_format("%s" PATH_SEPARATOR "%s", swlist.list_name(), i->shortname()));
+ i = i->parentname().empty() ? nullptr : swlist.find(i->parentname());
}
+
+ // search <rompath>/<software> following parents
+ for (software_info const *i : parents)
+ result.emplace_back(i->shortname());
+
+ return result;
}
@@ -1068,6 +1113,23 @@ void rom_load_manager::process_disk_entries(std::initializer_list<std::reference
}
+/*-------------------------------------------------
+ get_software_searchpath - get search path
+ for a software list item
+-------------------------------------------------*/
+
+std::vector<std::string> rom_load_manager::get_software_searchpath(software_list_device &swlist, const software_info &swinfo)
+{
+ std::vector<software_info const *> parents;
+ return make_software_searchpath(swlist, swinfo, parents);
+}
+
+
+/*-------------------------------------------------
+ open_disk_image - open a disk image for a
+ device
+-------------------------------------------------*/
+
chd_error rom_load_manager::open_disk_image(const emu_options &options, const device_t &device, const rom_entry *romp, chd_file &image_chd)
{
const std::vector<std::string> searchpath(device.searchpath());
@@ -1075,47 +1137,24 @@ chd_error rom_load_manager::open_disk_image(const emu_options &options, const de
driver_device const *const driver(dynamic_cast<driver_device const *>(&device));
std::function<const rom_entry * ()> next_parent;
if (driver)
- next_parent = [sys = &driver->system(), roms = std::vector<rom_entry>()] () mutable { return next_parent_system(sys, roms); };
+ next_parent = next_parent_system(driver->system());
else
next_parent = [] () { return nullptr; };
return do_open_disk(options, { searchpath }, romp, image_chd, std::move(next_parent));
}
+/*-------------------------------------------------
+ open_disk_image - open a disk image for a
+ software item
+-------------------------------------------------*/
+
chd_error rom_load_manager::open_disk_image(const emu_options &options, software_list_device &swlist, const software_info &swinfo, const rom_entry *romp, chd_file &image_chd)
{
std::vector<software_info const *> parents;
- std::vector<std::string> listsearch, freesearch, disksearch;
- disksearch.emplace_back(swlist.list_name());
-
- for (software_info const *i = &swinfo; i; )
- {
- if (std::find(parents.begin(), parents.end(), i) != parents.end())
- break;
- parents.emplace_back(i);
- listsearch.emplace_back(util::string_format("%s" PATH_SEPARATOR "%s", swlist.list_name(), i->shortname()));
- freesearch.emplace_back(i->shortname());
- i = i->parentname().empty() ? nullptr : swlist.find(i->parentname());
- }
-
- auto part(parents.front()->parts().end());
- return do_open_disk(
- options,
- { listsearch, freesearch, disksearch },
- romp,
- image_chd,
- [&parents, current = parents.cbegin(), part, end = part] () mutable -> const rom_entry *
- {
- if (part == end)
- {
- if (parents.end() == current)
- return nullptr;
- part = (*current)->parts().cbegin();
- end = (*current)->parts().cend();
- do { ++current; } while ((parents.cend() != current) && (*current)->parts().empty());
- }
- return &(*part++).romdata()[0];
- });
+ std::vector<std::string> searchpath = make_software_searchpath(swlist, swinfo, parents);
+ searchpath.emplace_back(swlist.list_name()); // look for loose disk images in software list directory
+ return do_open_disk(options, { searchpath }, romp, image_chd, next_parent_software(parents));
}
@@ -1175,10 +1214,8 @@ void rom_load_manager::load_software_part_region(device_t &device, software_list
m_romsloadedsize = 0;
std::vector<const software_info *> parents;
- std::vector<std::string> listsearch, freesearch, disksearch, devsearch;
- listsearch.emplace_back(util::string_format("%s" PATH_SEPARATOR "%s", swlist.list_name(), swname));
- freesearch.emplace_back(swname);
- const software_info *swinfo = swlist.find(swname);
+ std::vector<std::string> swsearch, disksearch, devsearch;
+ const software_info *const swinfo = swlist.find(swname);
if (swinfo)
{
// dispay a warning for unsupported software
@@ -1196,21 +1233,12 @@ void rom_load_manager::load_software_part_region(device_t &device, software_list
}
// walk the chain of parents and add them to the search path
- parents.emplace_back(swinfo);
- swinfo = !swinfo->parentname().empty() ? swlist.find(swinfo->parentname()) : nullptr;
- while (swinfo)
- {
- if (std::find(parents.begin(), parents.end(), swinfo) != parents.end())
- {
- m_errorstring.append(util::string_format("WARNING: parent/clone relationships form a loop for software %s (in list %s)\n", swname, swlist.list_name()));
- m_softwarningstring.append(util::string_format("Parent/clone relationships from a loop for software %s (in list %s)\n", swname, swlist.list_name()));
- break;
- }
- parents.emplace_back(swinfo);
- listsearch.emplace_back(util::string_format("%s" PATH_SEPARATOR "%s", swlist.list_name(), swinfo->shortname()));
- freesearch.emplace_back(swinfo->shortname());
- swinfo = !swinfo->parentname().empty() ? swlist.find(swinfo->parentname()) : nullptr;
- }
+ swsearch = make_software_searchpath(swlist, *swinfo, parents);
+ }
+ else
+ {
+ swsearch.emplace_back(util::string_format("%s" PATH_SEPARATOR "%s", swlist.list_name(), swname));
+ swsearch.emplace_back(swname);
}
// this is convenient for CD-only lists so you don't need an extra level of directories containing one file each
@@ -1269,40 +1297,23 @@ void rom_load_manager::load_software_part_region(device_t &device, software_list
if (ROMREGION_ISROMDATA(region))
{
if (devsearch.empty())
- process_rom_entries({ listsearch, freesearch }, 0U, region, region + 1, true);
+ process_rom_entries({ swsearch }, 0U, region, region + 1, true);
else
- process_rom_entries({ listsearch, freesearch, devsearch }, 0U, region, region + 1, true);
+ process_rom_entries({ swsearch, devsearch }, 0U, region, region + 1, true);
}
else if (ROMREGION_ISDISKDATA(region))
{
if (!next_parent)
{
if (!parents.empty())
- {
- auto part(parents.front()->parts().end());
- next_parent =
- [&parents, current = parents.cbegin(), part, end = part] () mutable -> const rom_entry *
- {
- if (part == end)
- {
- if (parents.end() == current)
- return nullptr;
- part = (*current)->parts().cbegin();
- end = (*current)->parts().cend();
- do { ++current; } while ((parents.cend() != current) && (*current)->parts().empty());
- }
- return &(*part++).romdata()[0];
- };
- }
+ next_parent = next_parent_software(parents);
else
- {
next_parent = [] () { return nullptr; };
- }
}
if (devsearch.empty())
- process_disk_entries({ listsearch, freesearch, disksearch }, regiontag.c_str(), region + 1, next_parent);
+ process_disk_entries({ swsearch, disksearch }, regiontag.c_str(), region + 1, next_parent);
else
- process_disk_entries({ listsearch, freesearch, disksearch, devsearch }, regiontag.c_str(), region + 1, next_parent);
+ process_disk_entries({ swsearch, disksearch, devsearch }, regiontag.c_str(), region + 1, next_parent);
}
}
@@ -1373,7 +1384,7 @@ void rom_load_manager::process_region_list()
{
driver_device const *const driver(dynamic_cast<driver_device const *>(&device));
if (driver)
- next_parent = [sys = &driver->system(), roms = std::vector<rom_entry>()] () mutable { return next_parent_system(sys, roms); };
+ next_parent = next_parent_system(driver->system());
else
next_parent = [] () { return nullptr; };
}
diff --git a/src/emu/romload.h b/src/emu/romload.h
index 7db106a52ce..ca725f0e0fb 100644
--- a/src/emu/romload.h
+++ b/src/emu/romload.h
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Nicola Salmoria,Aaron Giles
+// copyright-holders:Nicola Salmoria,Aaron Giles,Vas Crabb
/*********************************************************************
romload.h
@@ -423,6 +423,9 @@ public:
void load_software_part_region(device_t &device, software_list_device &swlist, const char *swname, const rom_entry *start_region);
+ /* get search path for a software item */
+ static std::vector<std::string> get_software_searchpath(software_list_device &swlist, const software_info &swinfo);
+
/* open a disk image, searching up the parent and loading by checksum */
static chd_error open_disk_image(const emu_options &options, const device_t &device, const rom_entry *romp, chd_file &image_chd);
static chd_error open_disk_image(const emu_options &options, software_list_device &swlist, const software_info &swinfo, const rom_entry *romp, chd_file &image_chd);
diff --git a/src/emu/softlist_dev.cpp b/src/emu/softlist_dev.cpp
index d33e357ebc7..f3c584d1c4a 100644
--- a/src/emu/softlist_dev.cpp
+++ b/src/emu/softlist_dev.cpp
@@ -421,14 +421,15 @@ void software_list_device::device_validity_check(validity_checker &valid) const
void software_list_device::internal_validity_check(validity_checker &valid)
{
- enum { NAME_LEN_PARENT = 16, NAME_LEN_CLONE = 16 };
+ enum { NAME_LEN_PARENT = 16, NAME_LEN_CLONE = 16, NAME_LEN_PART = 16 };
+ auto const valid_name_char = [] (char ch) { return ((ch >= '0') && (ch <= '9')) || ((ch >= 'a') && (ch <= 'z')) || (ch == '_'); };
+ auto const valid_tag_char = [] (char ch) { return ((ch >= '0') && (ch <= '9')) || ((ch >= 'a') && (ch <= 'z')) || strchr("$.:_", u8(ch)); };
+ auto const valid_year_char = [] (char ch) { return isdigit(u8(ch)) || (ch == '?') || (ch == '+'); };
softlist_map names;
softlist_map descriptions;
for (const software_info &swinfo : get_info())
{
- std::string const &shortname(swinfo.shortname());
-
// first parse and output core errors if any
if (m_errors.length() > 0)
{
@@ -437,48 +438,32 @@ void software_list_device::internal_validity_check(validity_checker &valid)
}
// Now check if the xml data is valid:
+ std::string const &shortname(swinfo.shortname());
- // Did we lost any description?
if (swinfo.longname().empty())
- {
osd_printf_error("%s: %s has no description\n", filename(), shortname);
- break;
- }
- // Did we lost any year?
if (swinfo.year().empty())
- {
osd_printf_error("%s: %s has no year\n", filename(), shortname);
- break;
- }
- // Did we lost any publisher?
if (swinfo.publisher().empty())
- {
osd_printf_error("%s: %s has no publisher\n", filename(), shortname);
- break;
- }
// Did we lost the software parts?
if (swinfo.parts().empty())
- {
- osd_printf_error("%s: %s has no part\n", filename(), shortname);
- break;
- }
+ osd_printf_error("%s: %s has no parts\n", filename(), shortname);
// Second, since the xml is fine, run additional checks:
// check for duplicate names
- if (!names.insert(std::make_pair(shortname, &swinfo)).second)
- {
- const software_info *match = names.find(shortname)->second;
- osd_printf_error("%s: %s is a duplicate name (%s)\n", filename(), shortname, match->shortname());
- }
+ auto const dupname(names.emplace(shortname, &swinfo));
+ if (!dupname.second)
+ osd_printf_error("%s: %s is a duplicate name (%s)\n", filename(), shortname, dupname.first->second->shortname());
// check for duplicate descriptions
- std::string longname(swinfo.longname());
- if (!descriptions.insert(std::make_pair(strmakelower(longname), &swinfo)).second)
- osd_printf_error("%s: %s is a duplicate description (%s)\n", filename(), swinfo.longname(), shortname);
+ auto const dupdesc(descriptions.emplace(swinfo.longname(), &swinfo));
+ if (!dupdesc.second)
+ osd_printf_error("%s: %s has duplicate description '%s' (%s)\n", filename(), shortname, swinfo.longname(), dupdesc.first->second->shortname());
bool const is_clone(!swinfo.parentname().empty());
if (is_clone)
@@ -486,16 +471,15 @@ void software_list_device::internal_validity_check(validity_checker &valid)
if (swinfo.parentname() == shortname)
{
osd_printf_error("%s: %s is set as a clone of itself\n", filename(), shortname);
- break;
}
-
- // make sure the parent exists
- const software_info *swinfo2 = find(swinfo.parentname());
-
- if (swinfo2 == nullptr)
- osd_printf_error("%s: parent '%s' software for '%s' not found\n", filename(), swinfo.parentname(), shortname);
- else if (!swinfo2->parentname().empty())
- osd_printf_error("%s: %s is a clone of a clone\n", filename(), shortname);
+ else
+ {
+ software_info const *const parent = find(swinfo.parentname());
+ if (!parent)
+ osd_printf_error("%s: %s is a clone of non-existent parent %s\n", filename(), shortname, swinfo.parentname());
+ else if (!parent->parentname().empty())
+ osd_printf_error("%s: %s is a clone %s which is a clone of %s\n", filename(), shortname, swinfo.parentname(), parent->parentname());
+ }
}
// make sure the driver name isn't too long
@@ -504,32 +488,80 @@ void software_list_device::internal_validity_check(validity_checker &valid)
is_clone ? "clone" : "parent", is_clone ? NAME_LEN_CLONE : NAME_LEN_PARENT);
// make sure the driver name doesn't contain invalid characters
- for (char ch : shortname)
- if (((ch < '0') || (ch > '9')) && ((ch < 'a') || (ch > 'z')) && (ch != '_'))
- {
- osd_printf_error("%s: %s contains invalid characters\n", filename(), shortname);
- break;
- }
+ if (std::find_if_not(shortname.begin(), shortname.end(), valid_name_char) != shortname.end())
+ osd_printf_error("%s: %s contains invalid characters\n", filename(), shortname);
// make sure the year is only digits, '?' or '+'
- for (char ch : swinfo.year())
- if (!isdigit(u8(ch)) && (ch != '?') && (ch != '+'))
- {
- osd_printf_error("%s: %s has an invalid year '%s'\n", filename(), shortname, swinfo.year());
- break;
- }
+ if (std::find_if_not(swinfo.year().begin(), swinfo.year().end(), valid_year_char) != swinfo.year().end())
+ osd_printf_error("%s: %s has an invalid year '%s'\n", filename(), shortname, swinfo.year());
- softlist_map part_names;
- for (const software_part &part : swinfo.parts())
+ std::set<std::string> part_names;
+ for (software_part const &part : swinfo.parts())
{
if (part.interface().empty())
- osd_printf_error("%s: %s has a part (%s) without interface\n", filename(), shortname, part.name());
+ osd_printf_error("%s: %s part %s has no interface\n", filename(), shortname, part.name());
if (part.romdata().empty())
- osd_printf_error("%s: %s has a part (%s) with no data\n", filename(), shortname, part.name());
+ osd_printf_error("%s: %s part %s has no data areas\n", filename(), shortname, part.name());
+
+ if (!part_names.emplace(part.name()).second)
+ osd_printf_error("%s: %s part %s has duplicate name\n", filename(), shortname, part.name());
+
+ if (part.name().length() > NAME_LEN_PART)
+ osd_printf_error("%s: %s part %s name must be %d characters or less\n", filename(), shortname, part.name(), NAME_LEN_PART);
+
+ if (std::find_if_not(part.name().begin(), part.name().end(), valid_name_char) != part.name().end())
+ osd_printf_error("%s: %s part %s contains invalid characters\n", filename(), shortname, part.name());
+
+ // validate data areas
+ // based on ROM validation code from validity.cpp but adapted to work with rom_entry and ignore unavailable features like BIOS
+ if (!part.romdata().empty())
+ {
+ std::map<std::string, u32> data_area_map;
+ char const *last_region_name = "???";
+ char const *last_name = "???";
+ u32 current_length = 0;
+ int items_since_region = 1;
+ for (rom_entry const *romp = &part.romdata().front(); romp && !ROMENTRY_ISEND(romp); ++romp)
+ {
+ if (ROMENTRY_ISREGION(romp)) // if this is a region, make sure it's valid, and record the length
+ {
+ // reset our region tracking states
+ items_since_region = (ROMREGION_ISERASE(romp) || ROMREGION_ISDISKDATA(romp)) ? 1 : 0;
+ last_region_name = romp->name().c_str();
- if (!part_names.insert(std::make_pair(part.name(), &swinfo)).second)
- osd_printf_error("%s: %s has a part (%s) whose name is duplicate\n", filename(), shortname, part.name());
+ // check for a valid tag
+ if (romp->name().size() < MIN_TAG_LENGTH)
+ osd_printf_error("%s: %s part %s data area name '%s' is too short (mut be at least %d characters)\n", filename(), shortname, part.name(), romp->name(), MIN_TAG_LENGTH);
+
+ if (std::find_if_not(romp->name().begin(), romp->name().end(), valid_tag_char) != romp->name().end())
+ osd_printf_error("%s: %s part %s data area name '%s' contains invalid characters\n", filename(), shortname, part.name(), romp->name());
+
+ // attempt to add it to the map, reporting duplicates as errors
+ current_length = ROMREGION_GETLENGTH(romp);
+ if (!data_area_map.emplace(romp->name(), current_length).second)
+ osd_printf_error("%s: %s part %s data area has duplicate name '%s'\n", filename(), shortname, part.name(), romp->name());
+ }
+ else if (ROMENTRY_ISFILE(romp)) // if this is a file, make sure it is properly formatted
+ {
+ // track the last filename we found
+ last_name = romp->name().c_str();
+
+ // make sure the hash is valid
+ util::hash_collection hashes;
+ if (!hashes.from_internal_string(romp->hashdata().c_str()))
+ osd_printf_error("%s: %s part %s ROM '%s' has invalid hash string '%s'\n", filename(), shortname, part.name(), romp->name(), romp->hashdata());
+ }
+
+ // for any non-region ending entries, make sure they don't extend past the end
+ if (!ROMENTRY_ISREGIONEND(romp) && current_length > 0)
+ {
+ items_since_region++;
+ if (!ROMENTRY_ISIGNORE(romp) && (ROM_GETOFFSET(romp) + ROM_GETLENGTH(romp) > current_length))
+ osd_printf_error("%s: %s part %s ROM '%s' extends past the defined data area\n", filename(), shortname, part.name(), last_name);
+ }
+ }
+ }
}
}
diff --git a/src/emu/validity.cpp b/src/emu/validity.cpp
index 868f7c96935..3c402487bf4 100644
--- a/src/emu/validity.cpp
+++ b/src/emu/validity.cpp
@@ -1550,7 +1550,7 @@ void validity_checker::validate_roms(device_t &root)
// attempt to add it to the map, reporting duplicates as errors
current_length = ROMREGION_GETLENGTH(romp);
- if (!m_region_map.insert(std::make_pair(fulltag, current_length)).second)
+ if (!m_region_map.emplace(fulltag, current_length).second)
osd_printf_error("Multiple ROM_REGIONs with the same tag '%s' defined\n", fulltag);
}
else if (ROMENTRY_ISSYSTEM_BIOS(romp)) // If this is a system bios, make sure it is using the next available bios number
diff --git a/src/frontend/mame/audit.cpp b/src/frontend/mame/audit.cpp
index 3ff706d2c8a..6f2157a3ac4 100644
--- a/src/frontend/mame/audit.cpp
+++ b/src/frontend/mame/audit.cpp
@@ -187,33 +187,7 @@ media_auditor::summary media_auditor::audit_software(software_list_device &swlis
if (ROMREGION_ISROMDATA(region))
{
if (searchpath.empty())
- {
- std::vector<software_info const *> parents;
-
- // search <rompath>/<list>/<software> following parents
- searchpath.emplace_back(util::string_format("%s" PATH_SEPARATOR "%s", swlist.list_name(), swinfo.shortname()));
- for (software_info const *i = &swinfo; i && !i->parentname().empty(); i = swlist.find(i->parentname()))
- {
- if (std::find(parents.begin(), parents.end(), i) != parents.end())
- {
- osd_printf_warning("WARNING: software parent/clone relationships form a loop (%s:%s)\n", swlist.list_name(), swinfo.shortname());
- break;
- }
- parents.emplace_back(i);
- searchpath.emplace_back(util::string_format("%s" PATH_SEPARATOR "%s", swlist.list_name(), i->parentname()));
- }
-
- // search <rompath>/<software> following parents
- searchpath.emplace_back(swinfo.shortname());
- parents.clear();
- for (software_info const *i = &swinfo; i && !i->parentname().empty(); i = swlist.find(i->parentname()))
- {
- if (std::find(parents.begin(), parents.end(), i) != parents.end())
- break;
- parents.emplace_back(i);
- searchpath.emplace_back(i->parentname());
- }
- }
+ searchpath = rom_load_manager::get_software_searchpath(swlist, swinfo);
return &audit_one_rom(searchpath, rom);
}
else if (ROMREGION_ISDISKDATA(region))
diff --git a/src/mame/drivers/gsword.cpp b/src/mame/drivers/gsword.cpp
index 6183e5ef561..a8f31293a9c 100644
--- a/src/mame/drivers/gsword.cpp
+++ b/src/mame/drivers/gsword.cpp
@@ -230,7 +230,7 @@ clock is supplied to both communication MCUs on T0. Outputs are set
after detecting a rising edge on T0, and inputs are read after detecting
a falling edge on T0.
-A frame consists to five bytes send LSB first. Each byte is followed by
+A frame consists to five bytes sent LSB first. Each byte is followed by
an odd parity bit. Useful addresses for debugging communication:
* $12A: Function for sending a frame from $21..$25
* $159: Function for receiving a frame to $29..$2D