DS and DSi split into Nintendo DS and Nintendo DSi. 64DD, Mega-CD,
ZXSpectrum, VSmile, BBC and Game Engines/DOOM merge into the folder
of the same console. Same-named dumps with other bytes are kept:
BBC Micro's earlier zips in .variants/, the vsmilem set in vsmilem/,
the Doom II 1.666 IWAD in v1.666/, BizHawk's DSi firmware in bizhawk/.
Galaksija and Vircon get a console folder, sdlpal's desc.dat joins
its tree, VICE's PET and CBM-II ROMs leave C128 with their vice/ tail.
Database and manifests regenerated together. Verify and cross
reference give the same result once moved paths are mapped.
level2/3/4/4P.rom are the TRS-80 Model I, III, 4 and 4P ROMs (groovymame names two by hash) and sat under Mattel/Intellivision. dedup.py removes ten byte-identical MAME archives and records them in the clone map.
EmuELEC declares 19 files of the Tyrian 2.1 distribution (setup.ini,
netterm.int, the net*.pcx screens...) that bios/ did not hold. They
resolved only at the data directory step, against data/opentyrian, the
cache refresh_data_dirs.py fills from the opentyrian-data.zip asset. verify
gave 544/572 in a checkout holding that cache and 525/572 in one without
it, for the same commit.
The 19 files are taken from the freeware tyrian21.zip (camanis.net, sha1
29827de9), each equal to the cached copy. netset.pcx and tyrset.pcx are
the same bytes under two names, so the folder joins NODEDUP_DIRS. A test
resolves every platform entry with the data directory caches present and
fails on any that only a cache answers.
The recipe check now fails on a single member outside every recipe of the
archive's name. 29 unpinned archives held one or two such members.
Device sets never have their sub-devices looked up in their own archive:
a device searches its own name, then the system's (device_t::searchpath,
src/emu/device.cpp:140-152). bbc_tube_a500, bbc_tube_a500d and sw1000xg are
rebuilt as TorrentZip from the mame profile recipe. The Arcade/ copies of
a2diskiing, a2mouse, coco_fdc_v11, hp82937, hp98034, pc8001 and mz80k go:
their recipe build already exists under the same name.
In a system set, a device ROM is found in the machine's archive: SAA5050
in bbcm, DragonDOS (default cartridge) in dragon32/64, PC-80S31 in
pc6001mk2sr and pc8001mk2sr. Those are listed as device ROMs in the test.
trs80.zip and trs80m3.zip are rebuilt from the mame recipe; level2.rom and
8041730.u12 stay held loose. The Arcade/ copies of trs80, dragon64 (with a
nested dragon32.zip), pcw9512 and tvc64, and the bk0010 variant, go: every
member is held elsewhere, the only bytes dropped being the empty tmctv
marker of a platform pack.
cvs.zip and aquarius_ar.zip become their recipe builds; the originals move
verbatim to .variants/ for cvs.txt (mame.dk banner) and TMCTV.png, held
nowhere else. The cvs build equals the old .variants/cvs.zip.95581230.
dc.zip (dc_boot.bin, dc_flash.bin) is not MAME's dc set and the bbcb
variant is MAME 0.150's
set; both stay, named in the test.
svg_bios.u49 is listed in svgpcbBIOSRomDesc (d_pgm.cpp:923-929), which only
STDROMPICKEXT(svgpcb, svgpcb, svgpcbBIOS) at line 7035 pulls in. The FBNeo
DAT likewise places it in svgpcb, and pgm's own list (pgmRomDesc, lines
879-892) has six members. The fbneo profile now files it under svgpcb.zip.
bios/Arcade/Arcade/pgm.zip is rebuilt as TorrentZip from the six members of
the FBNeo pgm recipe. The build is byte for byte the copy that was in
.variants/pgm.zip.6bbbce09, which goes. The two unpinned seven-member
copies (.variants/pgm.zip.931a4971 and MAME/.variants/pgm.zip.6ade4934)
go too: every member is still held, svg_bios.u49 as
bios/Arcade/FBNeo/svg_bios.u49. The pinned copies (87cc944e in MAME/,
68ef99a1 in .variants/) are untouched.
RetroDECK pins the container md5 of 170 of the archives 6ee162f8 imported, which carry the ROMs of every slot option reachable from the set. Those copies move verbatim to .variants/, where the md5 still resolves them, and the primary is rebuilt as TorrentZip from the recipe the profiles declare, each member checked by crc32 and sha1. Where a same-named copy in bios/Arcade/Arcade held the same pollution, it is rebuilt too.
Two members only these copies held stay in the older recipe that names them: pio_a72.bin in imds2ioc and presap2rb_123.rom in electron_romboxp (MAME 0.195 to 0.220), both under .variants/.
6ee162f8 imported MAME device and machine archives that each carried the ROMs of every slot option reachable from the set (H19 terminal ROMs in sys68k_cpu30.zip, 371 ISA card ROMs in slvrball.zip). MAME reads a slot card from the card's own archive, so those members were never read there.
Each archive is rebuilt as TorrentZip from the recipe its profiles declare (their union when profiles of several MAME versions differ), every member checked by crc32 and sha1. A copy whose recipe build already exists under the same name is removed, keeping the one filed under its manufacturer. 341-0057.bin, held only in these copies, stays in the MAME 0.220 a2pic recipe under .variants/. Every member removed is still held elsewhere in the collection.
Both pairs from the Real3D SDK disc (_SETUP.1): Bayou 0x64130009 at
Assets/, Orlando 0x64130005 in .variants/. The .pmem size check against
the .cmem header keeps a pair from mixing models.
chex.deh and french.deh come from idgames (themes/chex/chexdeh.zip, utils/exe_edit/patches/french.zip), both released with no restriction by their author.
The archive held 33 members of other sets (H19, Mockingboard...) next to its five CPU-30 ROMs. Every extra member is held elsewhere in the collection. Rebuilt as TorrentZip from the five members MAME 0.289's listxml names, checked by crc32 and sha1.
p1_p4.bin and p2.bin come from Group13 of the InstallShield archive on
the PRO-1000 SDK CD (archive.org item real3d, real3d.iso sha1
042fbf36). Both match the crc32 Config/Games.xml declares. Built as
TorrentZip.
EmuELEC pins bios/dc/naomi.zip at md5 e63d892c since its batocera-systems
of 2019-10-25 (8952db90), and AmberELEC inherits the entry. The archive is
an older MAME naomi set (20 members, dcnaodev.bios, epr-21578b) kept
verbatim from BatoceraPLUS/Batocera.PLUS-bios naomi.zip (602a91e9).
dinothawr.game is the content file or, without content, system_dir/dinothawr/dinothawr.game. The copy is the one at the pinned revision, which references bg.apng; the 2013 buildbot archive carries an older manifest.
A type 5 level event loads newsh<char>.shp through shapeFile[34] with dir_fopen_die. The 31 banks the Tyrian 2.1 levels name are listed, those of episode 1 required, and taken from the freeware tyrian21.zip. newsh1 and newsh6 load on every run and are required.
Each profile's contents list names one version of a MAME, AdvanceMAME,
FBA or MAME4droid set. MAME 0.278-0.289 sets come from the archive.org
non-merged romsets; the 0.37b5-0.139 sets are TorrentZip builds of the
listed members, taken from the 0.78 reference set, MAME 0.149 and the
MAME4droid 0.139 romset.
The archive held MAME's galgame set (sw97.lst), not the Galaxy Games
BIOS root galgames (src/mame/ces/galgames.cpp:1301). The new archive
holds the six v1.71/v1.80/v1.90 ROMs, TorrentZip, identical to the
MAME 0.289 romset on archive.org (item mame-0.289).
From archive.org msdos_DUKE2_shareware DUKE2.zip (md5 bc30f5520e452bac6866deb37ef918b2), the release RigelEngine points to. The archive holds neither LCR.MNI nor O1.MNI, the registered markers.
sf7000.rom is read only by the sega-sf7000 entries of blueMSX. It sat in bios/Microsoft/MSX because blueMSX keeps its machine folders together, which is a pack destination, not where the collection files a dump.
ROM_START(s8k_cpu) in src/devices/bus/zbi/s8k_cpu.cpp (mamedev f34f0250) names cpu_34-0715-03a.u76, cpu_34-0717-03a.u75 and cpu_34-0718-03a.u77 under two system BIOSes with the same CRC. The archive held them twice. Rebuilt with build_torrentzip from the 13 distinct members, each checked against the mame0289 recipe sha1.
Pin moves to 2de3bf8 (v8.4.2). roms/aros-ext.bin, roms/aros-rom.bin and whdboot/game-data/whdload_db.json changed upstream and are collected at that revision. The WHDLoad database is matched on the archive SHA1 first and refreshed from the bundled copy when newer. kick02019.AROS and its .ext are names the Recalbox launcher writes, so the profile now documents the kickstart_rom_file settings instead.
bios/Sharp/X68000/cgrom.tmp had cgrom.dat's sha1 (8d72c5b4). px68k reads cgrom.tmp only when cgrom.dat is absent (libretro.c:915-919, SDL/SDL2/winx68k.cpp:317-331), and a real cgrom.tmp is a font mkcgrom generates on the user's machine. No platform declares it.
21 device archives collected for MAME 0.289 are byte-identical to sets already held under another name: a set renamed in 0.289 (tms32030 to tms320c30, hardbox to gpib_hardbox) or one ROM set several devices share (sys68k_cpu21 family, voicebox). One copy stays and the other names go to the MAME clone map, through which each name still resolves.
40 files BizHawk 2.11.1's FirmwareDatabase.cs names that the collection lacked, each verified against the sha1 it states: Mega CD and Master System revisions, TI-83 and TI-83 Plus ROMs, Game Boy and Game Boy Color boot ROMs, Super Game Boy, NDS firmware, 64DD IPL, 3DO and LaserActive PAC-S10 v1.02 (No-Intro [BIOS] LaserActive (USA) (v1.02)). Sources: archive.org bizhawk-firmware-files_20250516 and pioneer-laseractive-bios-pack.
parallel.rom (slot 1, src/config.c:527) and lib/letgothl.ttf (default printer font, src/sim65816.c:166) taken from gsplus-legacy-archive at 48057205, the revision the profile pins.
coco.zip held only bas10.rom, the MAME 0.190 to 0.250 set, while 0.289's coco loads bas10, bas11, bas12, extbas10 and extbas11. The complete set is rebuilt with build_torrentzip from held ROMs plus extbas10.rom (crc32 6111a086) checked against the listxml sha1. The old archive goes to .variants, no platform pins its md5. RetroBat and RetroDECK pin scv.zip without upd1771c-017.s03, which 0.289 requires: the pinned copy stays and the complete set goes to .variants.
The primary (sha1 f7101b40) is named by no dump catalog and differs from the catalogued dump in 60 runs of 16 bytes. The variant (sha1 b3b1d880) is the dump No-Intro, TOSEC and MAME 0.289 (laseractj, v105) name and the only one BizHawk 2.11.1 accepts (FirmwareDatabase.cs:294). No platform pins either md5, so the catalogued dump becomes the primary.
55 device sets the collection lacked or held incomplete. 24 are rebuilt from ROMs already in bios/, 31 come from the archive.org item mame-roms-non-merged. Every member matches the 0.289 listxml size, crc32 and sha1, and each archive is built with build_torrentzip. The complete nss_tvinterface goes to .variants since RetroDECK pins the incomplete copy. The old at_keybc.zip held two of the three ROMs, its md5 is pinned by no platform, and is replaced by the complete set RetroDECK pins (63536a7d). Database and install manifests are regenerated with the files, including the vMac.ROM move.
Recalbox now resolves uae4all to its own libretro build, so only the bundled entries of the standalone uae4all2 reached these two AROS ROMs, which its release ships.
The libretro core passes system/mame/{hash,plugins,samples} (retro_init.cpp:111-155). Software lists are required in mamemess, where softlists are on by default. The trees and the 19 floppy samples are collected from libretro/mame at the pin.
Seven artwork zips from the core's metadata/artwork are read from mame2003-plus/artwork/ when Display Artwork is on, the default (artwork.c:2242-2258).
The libretro core copies whdboot from the system directory and uses a candidate only when WHDLoad, JST, AmiQuit, boot-data, the game database and the five RTB files are all there (amiberry.cpp:11510-11584). The core zip has none of them, so they are collected.
The A500 and LOUD floppy sound sets are read from uae_data/ (driveclick.c:77-104) when the option picks them, and capsimg is loaded from the system folder for IPF images (caps.c:37-96). The ten samples are collected from the core repository.
Since 3fffeb1 prboom.wad is compiled into the core (d_main.c:1449-1465). The IWADs it searches beside the content, in system/prboom/ and in system/ are now listed, with the ZDoom pk3 loaded before a pk3 mod.
The profile listed none. id1/pak0.pak is required (host.c:711-760), the retail and mission pack paks are read in order until one is missing, and Quoth 2.2 is mounted when the content path names it (common.c:1017-1020, 1724-1725). The three Quoth paks are collected, pak1.pak as a release asset.
The pin (1e0de94d) already loads Sega CD, 32X, ColecoVision and LaserActive firmware from the system directory, and the profile still described the earlier core with no BIOS at all. Each file now carries its code reference, required flag and build. The LaserActive player firmware (uPD78237, 64 KiB) is collected from the dump its author published.
A file that arrives with the emulator is already on the user's machine
and the packs leave it out. 4558 collected copies (1.4 GB) were reached
only by such entries, with no platform, other profile entry or install
manifest needing them. They are removed, and two release-asset copies
leave the ignore list. bundled_only.py now lists every copy of a listed
file, since the database keeps one path per content, and pipeline step
4d fails while one remains.
Each platform's own packages were read at the revision our data pins, for every emulator and core it ships: Batocera, Recalbox, RetroPie, ROCKNIX, Lakka, RetroDECK, RetroBat and EmuDeck. Files a package installs where the emulator reads them are recorded with installed_on, and files a release bundles but a package leaves out with not_bundled_on, so each platform's pack brings what its users lack and nothing they already have. The standalone profiles never checked before were held against their releases the same way. Batocera's imame4all is the mame2000 core. The primary neogeo.zip was a 7.7 KB placeholder no platform pins and no pack served: removed, the real dumps stay in .variants.
100 emulator names the two platforms run had no profile, so their packs carried nothing for them. Each was read from the platform's own launcher or scriptmodule: the same program as an existing profile takes the name in cores:, a different build gets its own profile read from that version, a launcher or self-contained game goes to remove_cores, and the rest are new profiles written from their source or shipped binary. The files they need that the collection lacked are collected from the upstream distributions. Bungie and splitwolf trees are read by path and stay out of dedup.
6.1.12 no longer bundles ROOT.chts and its seven cheat sets: the cheat browser reads the home folder, then unpacks Downloads/iNES-Cheats.zip. The seven sets are collected from the author-signed 6.1.4 package, each file covered by its signature. Controls.png and the backdrop pictures the app reads are documented.