From 4b1ab7cb74501d5acc9ec1ddbbefaa490265d7c8 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 11 Aug 2026 15:56:26 +0200 Subject: [PATCH] fix: separate findable gaps from unsourceable ones The README said 14 files were 'not in the collection yet', which implies somebody could still put them there. Nine of them cannot be: WHDLoad.key is a per-user signed registration, Custom.dat and key.txt are slots the emulator expects the user to fill, gpib.rom and dragonfly-2.3.rom have never been dumped, CARTS.CRC belongs to a dead code path. The profiles already record why, so the two are now counted apart: five still to be found, nine that cannot be. --- README.md | 12 ++++++------ mkdocs.yml | 6 ++++-- scripts/generate_readme.py | 16 ++++++++++++++-- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index bdb50410..21c86be2 100644 --- a/README.md +++ b/README.md @@ -59,17 +59,17 @@ These are the files an emulator loads from disk instead of carrying inside itsel Each file is checked the way your platform checks it. Most compare a checksum, the fingerprint of a file's contents, which catches a corrupt or unexpected copy. RetroArch, Lakka and RetroPie only look for the filename, because that is all their code does: the Coverage table says which applies to you. Independently of that, the collection records five fingerprints per file, and wherever an emulator's code states an expected size or hash, that value is read from its source and rechecked here. -- **14 files** the platforms' emulators load are not in the collection yet, named in the [gap analysis](https://abdess.github.io/retrobios/gaps/) +- **5 files** the platforms' emulators load are still to be found, and 9 more cannot be sourced at all (per-user keys, user-filled slots, dumps nobody has made); both are named in the [gap analysis](https://abdess.github.io/retrobios/gaps/) - **12 platforms** supported with platform-specific verification -- **385 emulators** profiled from source (RetroArch cores + standalone) -- **421 systems** handled by those emulators (NES, SNES, PlayStation, Saturn, Dreamcast, ...) +- **387 emulators** profiled from source (RetroArch cores + standalone) +- **440 systems** handled by those emulators (NES, SNES, PlayStation, Saturn, Dreamcast, ...) - **8,372 files**, each with its SHA1, MD5, SHA256, CRC32 and Adler-32 fingerprints: 3,030 system files, 2,803 arcade ROM sets, 2,539 game and engine data files - **542 of 3,030 system files** matched to dump-preservation catalogs (No-Intro, Redump, TOSEC); arcade sets and engine data fall outside what those catalogs index - **10010 MB** total collection size ## Supported systems -NES, SNES, Nintendo 64, GameCube, Wii, Game Boy, Game Boy Advance, Nintendo DS, Nintendo 3DS, Switch, PlayStation, PlayStation 2, PlayStation 3, PSP, PS Vita, Mega Drive, Saturn, Dreamcast, Game Gear, Master System, Neo Geo, Atari 2600, Atari 7800, Atari Lynx, Atari ST, MSX, PC Engine, TurboGrafx-16, ColecoVision, Intellivision, Commodore 64, Amiga, ZX Spectrum, Arcade (MAME), and 387+ more. +NES, SNES, Nintendo 64, GameCube, Wii, Game Boy, Game Boy Advance, Nintendo DS, Nintendo 3DS, Switch, PlayStation, PlayStation 2, PlayStation 3, PSP, PS Vita, Mega Drive, Saturn, Dreamcast, Game Gear, Master System, Neo Geo, Atari 2600, Atari 7800, Atari Lynx, Atari ST, MSX, PC Engine, TurboGrafx-16, ColecoVision, Intellivision, Commodore 64, Amiga, ZX Spectrum, Arcade (MAME), and 406+ more. Full list with per-file details: **[https://abdess.github.io/retrobios/](https://abdess.github.io/retrobios/)** @@ -128,7 +128,7 @@ The [documentation site](https://abdess.github.io/retrobios/) provides: - **Per-emulator profiles** with source code references for every file - **Per-system pages** showing which emulators and platforms cover each console - **Gap analysis** identifying missing files and undeclared core requirements -- **Cross-reference** mapping files across 12 platforms and 385 emulators +- **Cross-reference** mapping files across 12 platforms and 387 emulators - **Versioned data access** through JSON, CSV and SQLite exports with published SHA-256 checksums ## How it works @@ -166,4 +166,4 @@ The scripts and tooling are released under the [MIT License](LICENSE). The BIOS and firmware files are not covered by that license: they are third-party system software, preserved and provided for personal backup, archival, and interoperability with emulation software. [NOTICE](NOTICE) sets out their status and how to ask for a file to be removed. The reasoning, and where it is weakest, is in the [FAQ](https://abdess.github.io/retrobios/wiki/faq/#is-this-legal). -*Auto-generated on 2026-08-11T12:24:04Z* +*Auto-generated on 2026-08-11T13:47:40Z* diff --git a/mkdocs.yml b/mkdocs.yml index 72e2ad89..0f6486b9 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -440,7 +440,7 @@ nav: - MicroW8: emulators/uw8.md - uzem: emulators/uzem.md - VirtualXT: emulators/virtualxt.md - - Game engines (32): + - Game engines (33): - boom3: emulators/boom3.md - Cannonball: emulators/cannonball.md - ChaiLove: emulators/chailove.md @@ -451,6 +451,7 @@ nav: - FAKE-08: emulators/fake08.md - future-pinball: emulators/future-pinball.md - Gargoyle: emulators/gargoyle.md + - idTech4A++: emulators/idtech4a++.md - Jump 'n Bump: emulators/jumpnbump.md - lightspark: emulators/lightspark.md - Lutro: emulators/lutro.md @@ -547,7 +548,7 @@ nav: - ArcadeFlashWeb: emulators/arcadeflashweb.md - Dolphin Launcher: emulators/dolphin_launcher.md - Parallel Launcher: emulators/parallel-launcher.md - - Other (44): + - Other (45): - ares: emulators/ares.md - Basilisk II: emulators/basiliskii.md - beebem: emulators/beebem.md @@ -569,6 +570,7 @@ nav: - FPseNG: emulators/fpse-ng.md - Gopher2600: emulators/gopher2600.md - gopher64: emulators/gopher64.md + - iNES: emulators/ines.md - jgenesis: emulators/jgenesis.md - KEGS: emulators/kegs.md - Lexaloffle: emulators/lexaloffle.md diff --git a/scripts/generate_readme.py b/scripts/generate_readme.py index 3490d65b..818ea9e2 100644 --- a/scripts/generate_readme.py +++ b/scripts/generate_readme.py @@ -81,6 +81,7 @@ def compute_coverage( "core_missing": core_missing, "core_unsourceable": core_unsourceable, "missing_names": missing_names, + "unsourceable_names": unsourceable_names, "pack_files": present + core_present, "total_missing": missing + core_missing, "mode": config.get("verification_mode", "existence"), @@ -212,6 +213,15 @@ def generate_readme(db: dict, platforms_dir: str) -> str: emulator_count = len(profiles) comp = compute_composition(db) missing_total = len(set().union(*(c["missing_names"] for c in coverages.values()))) + # "Not in the collection yet" implies somebody could still put it there. + # Most of this figure cannot be: per-user registration keys, slots the + # emulator expects the user to fill, dumps nobody has made. Counting those + # beside genuinely acquirable files overstates what is actionable, so the + # two are reported apart. + unsourceable_total = len( + set().union(*(c["unsourceable_names"] for c in coverages.values())) + ) + acquirable_total = missing_total - unsourceable_total system_ids: set[str] = set() for p in profiles.values(): @@ -339,8 +349,10 @@ def generate_readme(db: dict, platforms_dir: str) -> str: " read from its source and rechecked here.", "", ( - f"- **{missing_total} files** the platforms' emulators load are" - f" not in the collection yet, named in the" + f"- **{acquirable_total} files** the platforms' emulators load" + f" are still to be found, and {unsourceable_total} more cannot" + f" be sourced at all (per-user keys, user-filled slots, dumps" + f" nobody has made); both are named in the" f" [gap analysis]({SITE_URL}gaps/)" if missing_total else "- **Nothing missing**: every file the platforms'"