MAME and ROM Merging - What Your Mother Never Told You  by Brad Oliver

This document will attempt to explain the changes to the ROM files,
including the reasoning behind the renaming, as well as what merging
entails and the pros and cons associated with it.

Recently, MAME has been taking greater lengths to document the hardware
that the games run on. It started with printing out the CPU and sound
chip information and now it has been extended to display the company and
year information for each game. As a logical extension of that, the
driver now also stores information about whether a game is a derivative,
or clone, of another driver.

To this end, MAME now supports several ways to load the ROM files it
needs. To make it all work, MAME now follows a standard ROM naming
procedure which was sorely lacking before. In a nutshell, for every ROM
with a unique checksum, MAME now requires that it have a unique filename.
This enables MAME to make sure it's loading the right ROM from the right
place. For example, there are a ton of Galaxian games and clones. Before,
they all had individual ROMs with names like galaxian.* and now they
have names like superg.* etc to differentiate between the sets.

Related to that, MAME now assumes that the latest revision of a ROM set
is the common name - the one that presumably contains bug fixes and was
in the widest distribution. It will continue to follow this standard in
the future. This is why, for example, the Asteroids ROM sets were
renamed. The old set, asteroid was revision 1 and the alternate,
asteroi2 was revision 2. They have been renamed to conform to the new
standard, so that revision 1 is now called asteroi1 and revision 2 is
asteroid.

To this end, it became apparent early on that for games which are
derivatives, a lot of redundant ROM information could be discarded since
it was shared amongst the sets. By discarded, I mean that since MAME now
knows that a game is a clone of another, it will use the ROMs from the
main set in instances where the checksums are identical to those in the
clone set. This has several consequences.

1. You can now remove these redundant ROMs from the clone sets. In doing
so, you are not losing anything unique since the redundant ROMs are
identical in every way to those in the main set. Deleting these ROMs is
entirely optional.

2. You can optionally store all related ROMs into one folder or .zip
file. Merging ROMs is entirely optional.

If you choose to merge or delete any ROMs, you are risking compatibility
problems with other emulators. If you intend to use games with MAME and
another emulator, you are better off not merging or deleting until that
other emulator supports the same features as MAME. The list following this
text explains any renaming you might have to do if you choose not to merge
your ROM sets.

Here is how MAME now looks for ROM files:

1. It looks in the directory for that ROM set for the files it needs.
2. If it doesn't find the files there and the game is a clone, it will
then look in the directory of the main set for the ROM files.
3. If it doesn't find it there, it reports the ROM as missing.

With these changes, you may find that some games, like the Popeye bootleg
now require the non-working main set. At first glance, you may think this
is a waste of space, but this isn't necessarily so. You can copy the ROMs
needed for the bootleg Popeye from the main set and then delete the
non-working main set. Alternatively, you can rename the ROMs in the
bootleg set to match the names in the main set. The checksums are
identical, so this doesn't change the gameplay at all.

Common Misconceptions:

* This new scheme is a waste of time.
It's a pain in the butt, yes, but it's a necessary evil. Having a
standard procedure for naming ROMs is a good thing. Remember, people who
actually own the PCBs use the ROMs too so having consistent names helps
them find what they need to repair a broken board.

* If I merge ROMs, they won't work with other emulators.
The simple solution is not to merge or delete the ROMs. Remember,
deleting redundant ROMs or placing them into one zip file or folder is
optional. If you anticipate using them with other emulators, then don't
merge or delete anything.

* No good will come of this
This is untrue. While Nicola was going through all the ROM sets and
comparing, he found several instances where a set had a bad ROM that has
slipped through the cracks. This whole process has uncovered several bad
ROMs that would have gone unnoticed otherwise.

* It's not worth the space savings.
Maybe it's not worth it for you, but some people appreciate it. There are
two pros to this aspect - you save space, and the downloads for cloned or
derivative sets are much shorter, particularly for large ROM sets like
the CPS1 games. There are no cons to merging - if you don't want to, you
don't have to do it. You can keep your old sets and take up all the space
you want :)

* It goes against MAME's goals as a documentation project.
This isn't true. Since MAME strives to document as many aspects of the
hardware as possible, keeping a list of clones is a natural extension of
that process. MAME isn't forcing anyone to delete ROM files or break up
their ROM sets if they don't want to. Remember, those steps are optional.

* What are color PROMs and how do they fit into all of this?
They are very small (usually 256 bytes or less) ROMs that contain the
color data for a lot of games. In the past, MAME stored the data
hardcoded into it's source. Now, MAME will start looking for these files
with the rest of the ROMs. This is a Good Thing because it means that
other emulators can use the files, as can people who actually own the
arcade boards. Expect to see MAME complain about missing color PROMs in
the future as more drivers are converted to load them from disk.

* This is all a big conspiracy to eliminate the competition
You've got us there. Despite the several compelling benefits (space
savings, download time savings, documentation of clones, finding of bad
ROMs), this is the true reason the changes were made. ;)



merged:
-------
1942/1942 alternate
exedexes/savgbees
commando/commandj
gng/gngcross/gngjap
gunsmoke/gunsmrom/gunsmokj
trojan/trojanj
srumbler/srumblr2
sidearms/sidearjp
1943/1943jap
blktiger/blkdrgon
ghouls/ghoulsj
strider/striderj
willow/willowj
ffight/ffightj <- ffightj wrong, uses LOAD_EVEN/LOAD_ODD for gfx
1941/1941j
mtwins/chikij
msword/mswordj
nemo/nemoj
qbert/qbertjp (RENAME: all qbertjp/qb-XXX.bin -> qbj-XXX.bin)
starforc/megaforc
tutankhm/tutankst
espial/espiale
matmania/excthour (COPY: excthour/E9->matmania/K9-00 which had one bad bit)
marble/marble2/marblea
klax/klaxalt
gauntlet/gauntir1/gauntir2/gaunt2p
crbaloon/crbalon2
panic/panica (RENAME: panica/spcpanic.1->panica.1 spcpanic.7->panica.7)
mrdo/mrdot/mrlo/mrdu (RENAME: all mrlo/XX-NN.bin -> mrloNN.bin)
docastle/docastl2 (EXCHANGE docastle.zip<->docastl2.zip. docastl2 was more complete)
pleiads/pleitek (RENAME: pleiads.zip->pleiadce.zip pleitek.zip->pleiads.zip)
phoenix/phoenixt/phoenix3 (RENAME: all phoenix3/phoenix.NN -> phoenix3.NN)
cclimber/ccjap
ckong and variations (this one is complex - just fetch the new set)
swimmer/swimmera (COPY: swimmera/sw13 and sw14 to swimmer since they were bad there and
                 RENAME all swimmera/swNN -> swaNN)
shaolins/kicker (kicker is the main set, some ROMs in shaolins were bad)
hbarrel/hbarrelj (RENAME hbarrel2.zip -> hbarrelj.zip)
baddudes/drgninja
hippodrm/ffantasy
astrob/astrob1
tempest/tempest1/tempest2 (fetch the new set)
mappy/mappyjp
yard/vsyard (RENAME: vsyard/yf-X-XX -> vyf-X-XX careful about names which look the
            same but are not)
mpatrol/mpatrolw/mranger (RENAME: mpatrolw/mp-X.XX -> mpw-X.XX)
kungfum/kungfub
travrusa/motorace (RENAME:
            travrusa/zippyrac.002 -> mr8.3c
            travrusa/zippyrac.003 -> mr9.3a
            travrusa/zippyrac.004 -> mr10.1a)
firetrap/firetpbl (NOTE: firetpbl/ft09.bin and ft10.bin were bad, however they are
            no longer used)
circusc/circusc2
congo/tiptop
gladiatr/ogonsiro
karnov/karnovj
chelnov/chelnovj
gyruss/gyrussce
gberet/rushatck
atetris/atetrisa/atetrisb
spacfury/spacfura (RENAME spacfury.zip -> spacfura.zip, spacufrc.zip -> spacfury.zip)
rygar/rygarj (RENAME all rygarj/cpu_XX.bin -> cpuj_XX.bin)
pooyan/pootan
gaiden/shadoww
asteroid/asteroi1 (fetch the new set)
llander/llander1 (fetch the new set)
quantum/quantum1 (fetch the new set)
mhavoc/mhavoc2/mhavocrv (fetch the new set)
junglek/jhunt
elevator/elevatob (NOTE: a couple of elevatob ROMs were bad, however they are no
                  longer used)
venture/venture2 (NOTE: venture2/vent_7a.vid was bad, however it is no longer used)
tmnt/tmntj/tmht2p/tmnt2pj (use the tmnt_complete.zip set)
xevious/xeviousa/sxevious (fetch the new set)
superqix/sqixbl
turtles/turpin
bagman/bagmans
robotron/robotryo
joust/joustr/joustwr
sinistar/oldsin
bubbles/bubblesr (RENAME: bubblesr/bubbles.XXX -> bubblesr.XXX)
colony7/colony7a
superpac/superpcn
mspacman/mspacatk
trackfld/hyprolym (RENAME: hyprolym/XXX_YYY-bin -> hyprolym.XXX)
rocnrope/ropeman
slapfigh/slapbtjp/slapbtuk (fetch the new set)
arkanoid/arknoidu/arkbl2/arkatayt
jumpbug/jbugsega
japirem/uniwars
bublbobl/boblbobl/sboblbob
popeye/popeyebl
bosco/bosconm
btime/btimea
bnj/brubber/caractn
timeplt/spaceplt (RENAME: spaceplt/tmX -> spX)
rainbow/rainbowe
chplft/chplftb/chplftbl (RENAME: chplftbl/7124.90 -> 7124bl.90)
centiped/centipd2 (RENAME centipd1.zip -> centipd2.zip)
digdug/digdugnm
ddragon/ddragonb
rastan/rastsaga (RENAME rastsaga/icXX_XX.bin -> rsXX_XX.bin)
pacland/paclandn/paclanda (REPLACE: paclandn/pl1-8/9/10/11 with
            paclanda/pl1_08/09/10/11.bin, note that pl1-10 was bad.
            RENAME: paclandn/pl1-XX -> pln1-XX)
stratgyx/stratgyb
bzone/bzone2 (RENAME: bzone2/036414.01 -> 036414a.01)
dkong/dkongjp
dkongjr/dkjrjp/dkngjrjp/dkjrbl (RENAME: dkjrjp/dkj.5X -> dkjp.5X)
mooncrst/mooncrsg/mooncrsb/fantazia/eagle (RENAME: mooncrsb/eprXXX -> beprXXX)
nemesis/nemesuk (RENAME: nemesuk/XXXX.bin -> XXXX.uk)
frogger/frogsega/frogger2
galaga/galagamw/galagads/gallag/galagab2 (fetch the new set)
galaxian/galmidw/galnamco/superg/galapx/galap1/galap4/galturbo (RENAME:
   galmidw/galaxian.X -> galmidw.X
   galnamco/galaxian.X -> galnamco.X
   superg/galaxian.X -> superg.X
   galturbo/galaxian.X -> galturbo.X)
moonal2/moonal2b
pengo/pengo2/pengo2u/penta
xsleena/solarwar (there were several bad ROMs; fetch the new set)
capbowl/clbowl (RENAME: clbowl/XX -> XX.cl
lwings/lwingsjp
missile/suprmatk (RENAME: suprmatk/XXXXXXXX.02 -> XXXXXXXX.sma)

added PROMs:
------------
vulgus
sonson
1942
exedexes
commando
gunsmoke
1943
1943kai
mrdo (they are in the mrdo set)
docastle (they are in the former docastl2 set, renamed to docastle)
douni (they are in the douni set - different from docastle!!)
nova2001 (they are in the nova20001 set)
pleiads (they are in the former pleitek set, renamed to pleiads)
phoenix (use the plaiads ones)
thepit (they are in the thepit set)
kungfum (they are in the kungfum set)
gyruss (they are in the gyruss set)
bagman/sbagman (they are in the new bagman set)
arkanoid (they are in the arkanoid set)
pacland (they are in the pacland set)
dkongjr (they are in the dkjrbl set)
frogger (they are in the frogger2 set)
froggers (they are in the froggers set)
