Commit Graph
2335 Commits
Author SHA1 Message Date
Abdessamad Derraz 804534397f fix: write the MiSTer database on one line
The BiosDB is published as a single line of JSON without a final
newline. Written with indent=2 it came out as 1499 changed lines for a
database whose content had not changed, which would bury any real
correction. It is now written in MiSTer's own form: an empty truth
gives back the cached database byte for byte.
2026-10-20 18:54:28 +02:00
Abdessamad Derraz 3ed5f68b82 fix: hand RetroDECK manifests back as written
With nothing to correct, nine of ten manifests still changed: a final
newline was added where the original ends without one, "md5": null was
written 39 times where no md5 key was, and PPSSPP's single bios object
became a list rebuilt from our data. A manifest now ends as the
original does, keeps no key it did not have, and a single object stays
one while nothing is added. An empty truth gives back every cached
manifest byte for byte.
2026-10-20 18:41:26 +02:00
Abdessamad Derraz 85c2433c98 fix: write each export as its bytes and mode
write_text translated line ends on Windows, so FirmwareDatabase.cs's
CRLF would have come out CR CR LF; it replaced the published file in
place, so a run stopped mid-write left it truncated; and it dropped the
mode, while rocknix-systems is 100755 in ROCKNIX's tree. Files are
written atomically as UTF-8 bytes, and an exporter states the mode of
any file the platform does not publish as 0644.
2026-10-20 18:27:22 +02:00
Abdessamad Derraz cbe769e74c fix: read all RetroPie helps, propose only its own
Eight scriptmodules write "bios" in lower case (xm7, np2pi, quasi88,
minivmac, px68k...) and none was examined. A module reported "left as
is" for a name no profile documents was written all the same: the skip
had no continue. The cap of six names came from that case-sensitive
reading, where xm7 writes thirteen: a sentence now grows no longer than
the longest RetroPie writes. lr- was stripped whatever the build, so the
standalone minivmac package matched the libretro profile, which reads
another file. A file of a system RetroPie lacks is proposed to no
package: lr-geargrafx adds pcengine only (lr-geargrafx.sh:41-42) and
was given the LaserActive's pac-n1.bin and pac-n10.bin.
2026-10-20 18:12:56 +02:00
Abdessamad Derraz 95476afb28 fix: make the report directory before writing it
A platform with nothing left to correct writes no file, so its output
directory was never made: RetroPie's report then raised
FileNotFoundError into a fresh --output-dir and stopped --all.
2026-10-20 18:12:45 +02:00
Abdessamad Derraz d92291684c fix: dual-mode only what ROCKNIX runs both ways
The scraper declared every standalone package launched both ways,
reasoning that RetroArch carries every libretro core. package.mk says
otherwise: it adds ARMSX2 as armsx2-sa only (add_emu_core ps2 armsx2
armsx2-sa true), so the libretro build's pcsx2/resources entries
reached ROCKNIX's list as armsx2-sa files the standalone installs
itself. An emulator is now dual-mode only when package.mk also adds it
as a retroarch core: ten of the 63 standalone names.
2026-10-20 17:53:57 +02:00
Abdessamad Derraz a5d7a6572d fix: ask for no file the emulator installs
The pack leaves out what an emulator installs itself
(validation.deliverable); the truth did not. RetroPie's gngeopi help
asked users to copy gngeo_data.zip, which make install puts in the
package's data directory, and amiberry's whdboot tree, scummvm's extra
data and dosbox-x's FREECG98.BMP went into platform lists as files to
bring.

The truth applies deliverable per platform and per build: an entry
nobody has to bring is kept and marked bundled, never added, still
corrected where the platform declares it. A rebuilt archive is
installed only when every member is. The runner written beside an
addition is the build that needs the file (_brought_by), and the
RetroPie sentence names only what its package's core must be given.
2026-10-20 17:39:21 +02:00
Abdessamad Derraz 9653385797 chore: regenerate the updated platform files 2026-10-20 17:21:39 +02:00
Abdessamad Derraz f957b5f893 fix: open no System.dat section libretro lacks
libretro titles each section with the system as it spells it,
"Commodore - Amiga". An addition for a system it has no section for
opened one under our slug: 21 sections came out as commodore-c64,
quake, laseractive or xrick, which no libretro DAT carries. An addition
now lands only in a section the original holds and is otherwise counted
as left out, so the export keeps the original's 66 sections. A platform
entry is always written, under its own section.
2026-10-20 17:21:16 +02:00
Abdessamad Derraz a8226dd367 chore: regenerate the README and site config 2026-10-20 17:12:58 +02:00
Abdessamad Derraz d08594318b feat: collect GSplus legacy's ROM and font
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.
2026-10-20 17:03:37 +02:00
Abdessamad Derraz db7413c33d feat: complete the CoCo and SCV MAME 0.289 sets
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.
2026-10-20 17:03:37 +02:00
Abdessamad Derraz 75e688f6ce chore: regenerate the database and manifests 2026-10-20 17:03:22 +02:00
Abdessamad Derraz 2827d28ceb chore: drop raine's bundled history.dat copy
Only raine's bundled entry reached it, and no platform, other profile entry or install manifest needs it (bundled_only.py).
2026-10-20 17:03:21 +02:00
Abdessamad Derraz 3014027d53 fix: serve the catalogued LaserActive PAC-S1 v1.05
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.
2026-10-20 17:03:21 +02:00
Abdessamad Derraz a8732ca9df feat: profile the GSplus legacy build
Recalbox builds digarok/gsplus-legacy-archive (gsplus.mk:8-9), Batocera a fork of it whose loading code matches, and RetroBat runs its gsplus-win-sdl release (GsPlus.Generator.cs:26-30). digarok/gsplus, which gsplus.yml documents, is a later KEGS 1.38 import sharing no history with it. The legacy build reads ROM, ROM1, ROM3, ROM01, ROM03, ROM.01, ROM.03 at 128 or 256 KB (src/config.c:863-908), refuses to start without one, and reads c600.rom, parallel.rom and printer fonts as optional.
2026-10-20 16:57:24 +02:00
Abdessamad Derraz f111e1c505 docs: built_by names who ships a build
The resolver reads built_by as the platforms on which a core name means this build. Its definition said platforms that compile a libretro build, which excludes a standalone build a platform installs from the project's release. The field now says what it decides: platforms that ship this build under its core name, compiled or installed from the release.
2026-10-20 16:57:24 +02:00
Abdessamad Derraz cee77bebe0 chore: regenerate the updated platform files 2026-10-20 16:49:59 +02:00
Abdessamad Derraz dfdb887fb8 fix: say which cores find their BIOS by content
DuckStation (bios.cpp:208, 397-427), SwanStation (host_interface.cpp:
136-194), rustation (lib.rs:107-160), FS-UAE (rommgr.cpp:92-151),
ares (firmware.cpp:116-136) and Altirra (uifirmwarescan.cpp:29-113)
scan a folder and identify firmware by hash; Ymir does in its
standalone build only. FS-UAE still opens rom.key by name
(rommgr.cpp:1397-1498). The export then stops writing their labels
into platform lists: Batocera's psx block goes from 106 entries to 10,
and System.dat's scph5000.bin keeps its own hashes.
2026-10-20 16:49:16 +02:00
Abdessamad Derraz 1b50170922 fix: give MAME and FBNeo data files their system
Entries without a system in multi-system profiles were left unattributed by the truth model, and four System.dat additions left the export. Each system is read from the core's code at its pin. hiscore.dat, cheats and history serve every running machine (mame2000 cpuintrf.c:664-666, mame2003 cpuexec.c:280-282, mame2003_plus cpuexec.c:296-298, fbneo hiscore.cpp:154-161 gated on BDF_HISCORE_SUPPORTED), all arcade in those builds, so arcade. BIOS sets take the id their driver gives in the other MAME profiles, and bctvidbs is barcrest-mpu4 everywhere. Files serving several systems of one build (groovymame data files, raine) keep no system. Core resolution is unchanged on every platform.
2026-10-20 16:45:54 +02:00
Abdessamad Derraz e5174a07bf feat: mark files a core finds by content
DuckStation identifies its BIOS by MD5 in a folder it scans
(bios.cpp:208), so its entries' names are labels. The export wrote them
into Batocera's and ROCKNIX's lists as files to hold: a user with only
scph5501.bin read 104 missing BIOS where DuckStation boots. Labels also
lent their md5 to a name another core opens, and paired by name they
replaced System.dat's scph5000.bin hashes.

found_by: name | content, on a profile or a file and keyed by build like
load_from. The truth records which cores open each name (_named_by). A
label pairs with a platform entry by hash only, is never added, merges
with an opened name only on a shared hash, and is counted in the export
report rather than listed as missing.
2026-10-20 16:32:22 +02:00
Abdessamad Derraz eaf6d1859d chore: regenerate the README and site config 2026-10-20 16:28:45 +02:00
Abdessamad Derraz 0eec5ab4be fix: file a truth entry by content, not by name
A name the platform declares filed an entry under that system before
its own system:, and the last declaration of a name won. fmsx's 16 KB
DISK.ROM went to nec-pc-88 for quasi88's 2 KB disk.rom and came out as
a second DISK.ROM line under "NEC - PC-8801"; dosbox's SC-55
ROM1.BIN/ROM2.BIN went to galaksija.

A declaration now files an entry only when it can be the same file: a
shared hash, or no size both admit. The same content declared under two
systems is filed under both, an entry's own system stands against a
refuted homonym, and a systemless profile's placeholder takes only names
the platform does not declare. Merging reads the same size rule, so a
24 KB ROM and an entry capped at 16 KB stay two files.
2026-10-20 16:14:55 +02:00
Abdessamad Derraz f758efd062 fix: write no export its validator refuses
validate() ran after the files were written, so an export the
exporter's own validator refused still replaced the published one in
exports/, and only the exit code said so. The platform now fails before
anything is cleared or written.
2026-10-20 15:55:29 +02:00
Abdessamad Derraz 49b79a6d52 fix: refuse a file read off the pinned revision
pinned_base returned an empty base when the platform's source named no
revision or no longer ended in the exported file, and the exporter's
own branch URL was then patched without a word. Every file an export
reads must now carry the revision the platform YAML records, or the
platform fails and asks for a rescrape. The check covers every file of
every platform: ROCKNIX's second file, RetroDECK's manifests and
RetroPie's tarball were checked by nothing before.
2026-10-20 15:40:28 +02:00
Abdessamad Derraz dd5680300a feat: collect the missing MAME 0.289 device sets
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.
2026-10-20 15:35:08 +02:00
Abdessamad Derraz 4da40c471d fix: isolate an unreadable original per platform
A cached bios_db.json.zip that was not a zip raised BadZipFile out of
run(): --all stopped and the platforms after it were never exported.
fetch() also cached any 200 reply, so an error page replaced a good
archive and was served on every later run, and an IncompleteRead or an
oversized reply escaped the same way. An archive is now read before it
is cached, and an unreadable file fails its own platform with the
--refresh-cache remedy.
2026-10-20 15:24:30 +02:00
Abdessamad Derraz 194ed23ded feat: list the 1,254 MAME 0.289 device sets
Generated by mame_hash_scraper --devices from mame0289lx.zip, the release asset whose sha256 matches GitHub's digest. Each set is optional: the core runs without it, and only a machine using the device needs it. 1,252 cite their ROM block, two are written without a ref because two blocks hold the same ROMs. Two note citations now carry their full upstream path.
2026-10-20 15:12:23 +02:00
Abdessamad Derraz 8de45b6f45 feat: generate MAME device sets from -listxml
A machine that instantiates a device loads the device's ROMs from <shortname>.zip (src/emu/device.cpp:140-152), and a missing required ROM stops that machine (romload.cpp:529-570, 667-671). The BIOS root scan never sees these sets. mame_hash_scraper --devices --listxml reads them from the -listxml of the release mame.yml pins, refuses another release, and cites each set at the ROM_START block holding its ROMs. The BIOS root merge also wrote refs without the upstream prefix and would have rewritten all 171 of them in mame.yml.
2026-10-20 15:12:23 +02:00
Abdessamad Derraz 7a65a2cf83 fix: refuse an export without its original
System.dat, RomM, Recalbox and RetroBat were rebuilt from our data when
their file was not cached: libretro's quoted names, Recalbox's comments
and one of its two zxspectrum blocks were lost, and the run said OK.
needs_original now follows native_sources, so every format we patch
fails without the file it patches and writes nothing.
2026-10-20 15:09:16 +02:00
Abdessamad Derraz 77deef1820 chore: file vMac.ROM under the Macintosh Plus
Its first 128 KB are byte-identical to macplus.rom, the Mac Plus ROM, and Mini vMac's Plus build reads it. It was filed under Macintosh II.
2026-10-20 15:08:25 +02:00
Abdessamad Derraz 60dfba51f3 feat: profile px68k SDL standalone
IPL search order iplrom, iplromxv, iplromco, iplrom30 and font cgrom30, cgrom30.tmp, cgrom, cgrom.tmp (SDL/SDL2/winx68k.cpp:277-331), SCSI ROMs (:140-271), all from $HOME/.keropi (SDL/prop.c:172-194). One IPL and one font are required: without them the CPU loop never starts.
2026-10-20 15:07:21 +02:00
Abdessamad Derraz f61c3d9ca5 feat: profile QUASI88kai standalone
The ROM list is src/memory.cpp:87-100. A missing ROM is filled with 0xFF and the emulator starts, so only N88.ROM, N88SUB.ROM and N88EXT0.ROM, without which nothing boots, are required. The directory is QUASI88_ROM_DIR, else <home>/rom (src/file-op.cpp:444-521). The CMake ROMDIR setting only appears in the help text.
2026-10-20 15:07:21 +02:00
Abdessamad Derraz 78fd70ae50 feat: profile Mini vMac 37 standalone
The SDL build reads vMac.ROM, fixed at build time to the Mac Plus ROM name and 128 KB (setup/SPCNFGAP.i:60-63), and checks it against three Mac Plus checksums (src/CONTROLM.h:1344-1388). Search order: --rom, the executable's directory, mnvm_rom/ under the SDL pref path, the working directory (src/OSGLUSDL.c:546-620).
2026-10-20 15:07:21 +02:00
Abdessamad Derraz a5c66bab46 fix: geargrafx reads PAC firmware for LaserActive
load_pac_bios runs only for .mmi content (platforms/libretro/libretro.cpp:507, 521-522), so pac-n1, pce-lp1 and pac-n10 carry system laseractive, and the system cards nec-pc-engine-cd.
2026-10-20 14:56:38 +02:00
Abdessamad Derraz 50beb0ca27 fix: o2em reads one BIOS, chosen by an option
o2em_bios defaults to o2rom.bin and only the chosen file is opened (libretro_core_options.h:52-64, libretro.c:989). Loading fails when it is missing or under 1024 bytes (libretro.c:160-189, 1043-1044). The four files share a variant group, o2rom.bin stays required, the others are optional. Only the first 1024 bytes are read and an unknown CRC still loads, so size becomes min_size and crc32 leaves validation.
2026-10-20 14:56:38 +02:00
Abdessamad Derraz 920f0eb67c fix: give mame2010's system-less sets their system
hiscore.dat and cheat.zip serve every machine (machine.c:361-363), so arcade. The other twenty BIOS sets take the system ids the other MAME profiles give the same sets, from their drivers (naomi.c:4654-4661 for hod2bios, f355bios, airlbios). mac2bios is declared in macs.c:514, 740, not suprnova.c.
2026-10-20 14:56:38 +02:00
Abdessamad Derraz 07f1e881f1 fix: give each DOSBox-X file the system it serves
The profile set no system on its entries, so the truth model filed every one under the only profile system a platform has (nec-pc-98 on Batocera, truth.py:487-499). system.rom boots only on PCjr (dos_programs.cpp:2995-2996), MIDI ROMs and SoundFonts serve every machine (mpu401.cpp:678-793), FONT.ROM and the PC-98 bitmaps serve PC-98, the VGA and ROM BASIC images serve the IBM PC. The system BIOS image boots either kind and keeps no system.
2026-10-20 14:56:38 +02:00
Abdessamad Derraz 19b88ca055 fix: refuse an export without its truth
dist/ is not committed and exports/ is. On a fresh clone, or with a
mistyped --truth-dir, the export copied each platform's file back
uncorrected, said OK and replaced the corrected export in exports/.
check_freshness then reported a stale export instead of the missing
model. The platform now fails, writes nothing, and names the
generate_truth command.
2026-10-20 14:54:16 +02:00
Abdessamad Derraz 63556b4873 fix: fuse runs without its model ROMs
A Pentagon, Pentagon 512/1024 or Scorpion reset returns an error when a ROM is missing (fuse/machines/pentagon.c:131-139, pentagon512.c:76-91, pentagon1024.c:72-87, scorpion.c:76-78), machine_select_machine fails (fuse/machine.c:237) and machine_select falls back to the built-in 48K machine (fuse/machine.c:150-162). The core keeps running, so the eight model ROMs are optional.
2026-10-20 14:42:30 +02:00
Abdessamad Derraz b0dd3ab6f8 chore: regenerate the updated platform files 2026-10-20 14:41:12 +02:00
Abdessamad Derraz e81c63804a fix: correct no hash the code does not check
validation: names what the code verifies. dosbox checks
MT32_CONTROL.ROM against nine sha1 and size; the truth's one md5 and
crc32 describe one of those revisions, and the export wrote them beside
System.dat's own sha1, a rom line no file satisfies, and replaced
Batocera's md5. pcsx_rearmed and DuckStation check scph1001.bin by size,
and the v2.0 md5 platforms name was replaced by v4.1's.

checked_hashes keeps a hash the code does not name only where a checked
hash pins one content. Otherwise it still pairs a renamed file but never
corrects or fills a value the platform wrote. Additions keep every hash.
diff_truth reads the same rule.
2026-10-20 14:40:10 +02:00
Abdessamad Derraz cc31f9f863 fix: put ide250.zip under openMSX's systemroms
Every other openMSX entry documents the default file pool folder, share/systemroms. Batocera adds bios/openmsx to the pool and its pack keeps the destination it declares.
2026-10-20 14:35:28 +02:00
Abdessamad Derraz e607c6c8ad chore: regenerate the database
Indexes the aliases added to the profiles.
2026-10-20 14:26:25 +02:00
Abdessamad Derraz e05ce9c643 fix: list the MAME sets platforms run
Sets the platforms' MAME launches load: CoCo, SCV, BBC, Electron, Mac, Dragon 64, Archimedes and others, each with its members' crc32 from libretro/mame at the pin. The note now states the version the commits pin (0.289) instead of a hand-kept count.
2026-10-20 14:26:24 +02:00
Abdessamad Derraz 48969cabbd fix: list the Amiga and Mac images cores open
amiga-os-310.rom and Recalbox's kick02019.AROS pair are opened by amiberry's ROM scan (amiberry_gui.cpp, rommgr.cpp at the pin). MinivMacBootv2.dsk is opened by minivmac.
2026-10-20 14:26:24 +02:00
Abdessamad Derraz 43fee39139 fix: list the PS3 ps1_rom.bin swanstation reads
SwanStation hashes the first 512 KB of the 4 MB PS3 ps1_rom.bin, which is its table entry c02a6fbb (bios.cpp:70). Two refs pointed one line off: the hashes are on lines 66 and 71 at the pin.
2026-10-20 14:26:24 +02:00
Abdessamad Derraz 5129b967e6 fix: list the PS2 images PCSX2 builds accept
ps2-0250j-20100415.bin passes the folder scan of pcsx2, armsx2 and yaps2. EmuDeck's SCPH-70004 .BIN, .ROM1 and .ROM2 are aliases in pcsx2, and the .rom1 note now says the stat is case-sensitive.
2026-10-20 14:26:24 +02:00
Abdessamad Derraz b55e48b0bc fix: list LaserActive and Mega CD images for ares
RetroBat's ares launcher writes the LaserActive BIOS paths into ares's settings, and ares loads them with no hash check. Three EmuDeck Mega CD md5s are images ares's sha256 table names, so their md5 sits beside the sha256.
2026-10-20 14:26:24 +02:00
Abdessamad Derraz fb9198937a fix: name the ROMs Recalbox gives GSplus
Recalbox's GSplus launcher passes apple2gs1.rom or apple2gs3.rom as the ROM path. They are aliases of ROM.
2026-10-20 14:26:24 +02:00