260 Commits

Author SHA1 Message Date
Abdessamad Derraz
9ce4724fc4 fix: sha1-based large file restore, fix broken data dir urls
Replace grep-based restore with SHA1 matching via database.json.
The old grep heuristic failed for assets with renamed basenames
(dsi_nand_batocera42.bin) or special characters (MAME dots vs
spaces), and only restored to the first .gitignore match when
multiple paths shared a basename.

Fix 3 broken data directory sources:
- opentyrian: buildbot URL 404, use release asset
- syobonaction: invalid git_subtree URL, use GitHub archive
- stonesoup: same fix, adds 532 game data files
2026-04-02 18:46:44 +02:00
Abdessamad Derraz
7e46c23f3a feat: restore large files and data dirs in site deploy
generate_site.py resolves files on disk for gap analysis.
Without large files and data directories, the deployed site
showed 148 missing platform files and 207 unsourced core
complement files.
2026-04-02 18:25:02 +02:00
Abdessamad Derraz
6f22dd7738 docs: fix --skip-packs comment in tools wiki 2026-04-02 17:55:23 +02:00
Abdessamad Derraz
c0e42ee4eb docs: fix factual errors in wiki pages 2026-04-02 17:13:59 +02:00
Abdessamad Derraz
92b270c054 Update docs, site generator & verification
Add and reorder BIOS path entries in the site generator (BizHawk, EmuDeck, RetroPie, RomM). Update the add-platform pipeline steps and CI workflow notes. Document verification behavior changes: FirmwareDatabase index now includes sha256; RomM uses MD5 verification (verify.py checks MD5 only); BizHawk uses SHA1; severity label for GREEN adjusted to WARNING. Clarify troubleshooting/verify output semantics (UNTESTED and mismatch reporting), add profiling fields (core_classification option and adler32), fix several path and link typos (RetroDECK path, README/CONTRIBUTING links), and other small docs polishing.
2026-04-02 16:26:12 +02:00
Abdessamad Derraz
2f11542ed3 chore: regenerate manifests, site, and docs after new BIOS files 2026-04-02 15:56:24 +02:00
Abdessamad Derraz
f9a612db4a refactor: simplify readme contributor section to avatars only 2026-04-02 15:39:34 +02:00
Abdessamad Derraz
812775f6b4 Add platform contribution steps and nav
Add an "Add a new platform" section to CONTRIBUTING.md (instructions to write a scraper in scripts/scraper/, create platform YAML in platforms/, register in platforms/_registry.yml, and submit a PR) and note contributor crediting. Update README: bump verified files from 7,296 to 7,302, add RomM and RetroDECK contributor credits with PR links, and refresh the auto-generated timestamp. Add sdlpal to the mkdocs.yml navigation.
2026-04-02 15:36:27 +02:00
Abdessamad Derraz
73ccb216f5 feat: align gap analysis coherence, add 7 BIOS files, unsourceable field
cross_reference.py: add bios_mode/agnostic/load_from filters, archive
grouping, unsourceable field support. verify.py: case-insensitive
by_name lookup, storage:release in_repo, unsourceable skip, trailing
slash fix. generate_site.py: enriched all_declared, platform-relevant
profile filtering, proper in_repo resolution on emulator pages,
acknowledged gaps section.

New BIOS: delta2.rom (XRoar), tilekey.dat + sprites.sif (NXEngine),
Gram Kracker.ctg + cf7+.ctg + ti-pcard.ctg (ti99sim), desc.dat
(SDLPAL). Profiles: hle_fallback on tilekey.dat/key.txt, unsourceable
on 7 files with source-verified reasons.
2026-04-02 15:35:24 +02:00
Abdessamad Derraz
5ee81b30c6 feat: add contributor credits to pack readme 2026-04-02 11:43:06 +02:00
Abdessamad Derraz
b5eae226cd feat: enrich readme contributors with platform attribution 2026-04-02 11:42:40 +02:00
Abdessamad Derraz
fd4606885e feat: add contributor credit to site platform pages 2026-04-02 11:42:31 +02:00
Abdessamad Derraz
ded903ed7a feat: add contributed_by field to retrodeck and romm 2026-04-02 11:41:19 +02:00
Abdessamad Derraz
077392bcd9 docs: add contributor attribution to romm and retrodeck scrapers 2026-04-02 11:41:15 +02:00
Abdessamad Derraz
f4626ce3bd Add MSX2J ROM and update manifests
Add MSX2J.rom (sha1: 0081ea0d25bc5cd8d70b60ad8cfdc7307812c0fd, size: 32768) to multiple install manifests and the RetroDECK bios list. Update generated timestamps and adjust total_files/total_size counts in batocera, lakka, recalbox, retroarch, retrobat, and retrodeck manifests. Also bump README verified file count and regenerate the auto-generated timestamp to reflect the new entry.
2026-04-02 10:44:25 +02:00
Abdessamad Derraz
9e184f76fc fix: swanstation ps1_rom.bin accepts multiple sizes
SwanStation accepts PS1 (512KB), PS2 (4MB), and PS3 (0x3E66F0)
BIOS sizes but only uses the first 512KB. MD5 validates the
extracted content, not the full file. List all accepted sizes
to eliminate the false size mismatch discrepancy.

validation.py: support size as list in emulator profiles.
generate_site.py: handle list sizes in emulator page display.

All 18 original hash mismatches are now resolved: 0 discrepancies.
2026-04-02 07:39:30 +02:00
Abdessamad Derraz
fa0ed63718 fix: add psx variant mappings, fix emulator verify path
scph3000.bin v2.1J and scph3500.bin v2.2J already existed under
different primary names (scph3500.bin and scph5000.bin respectively).
Add .variants/ entries so by_name resolves both filenames.

verify_single_emulator now calls _find_best_variant on hash mismatch,
matching the platform-level verification path.
2026-04-02 01:24:24 +02:00
Abdessamad Derraz
c3fa55bd46 feat: add msx2 japanese bios variant for ares
Source: Subtixx/RetroStation MSX2J.rom
SHA256 0c672d86 matches ares desktop-ui/emulator/msx2.cpp:15.
Resolves last MSX2.ROM discrepancy across all platforms.
2026-04-02 01:12:36 +02:00
Abdessamad Derraz
0401d058a1 feat: add by_sha256 index, fix reporting attribution
generate_db: add by_sha256 index for O(1) variant lookup.
verify: _find_best_variant uses indexed sha256 instead of O(n) scan.
validation: check_file_validation returns (reason, emulators) tuple,
attributing mismatch only to emulators whose check actually failed.
beetle_psx: remove incorrect size field for ps1_rom.bin (code does
not validate size, swanstation is sole size authority).
2026-04-02 00:59:01 +02:00
Abdessamad Derraz
95b7a9813c feat: add custom site stylesheet with theme and components 2026-04-02 00:48:02 +02:00
Abdessamad Derraz
22829cfab9 feat: improve site ux with cards, badges and hash truncation 2026-04-02 00:46:21 +02:00
Abdessamad Derraz
2326306f2b fix: adler32 byteswap for dolphin dsp validation
Dolphin computes adler32 on byte-swapped (16-bit) data, not raw
file bytes. Add adler32_byteswap flag to dolphin/primehack/ishiiruka
profiles and support it in validation.py.

Reduces hash mismatch discrepancies from 18 to 2.
2026-04-01 22:51:39 +02:00
Abdessamad Derraz
28ecf19f2b fix: variant resolution suppresses false discrepancies
_find_best_variant now searches by hash (md5, sha1, crc32, sha256)
across the entire database instead of only by filename. Finds
variants stored under different names (e.g. eu_mcd2_9306.bin for
bios_CD_E.bin, scph1001_v20.bin for scph1001.bin).

verify_entry_existence now also calls _find_best_variant to
suppress discrepancies when a matching variant exists in the repo.

Reduces false discrepancies from 22 to 11 (4 unique files where
the variant genuinely does not exist in the repo).
2026-04-01 22:45:43 +02:00
Abdessamad Derraz
91925120c9 feat: unify gap analysis with verify results and source provenance
Single source of truth for gap page: verification status from
verify.py (verified/untested/missing/mismatch), file provenance
from cross_reference (bios/data/large_file/missing).

cross_reference.py: _find_in_repo -> _resolve_source returning
source category, stop skipping storage: release/large_file,
add by_path_suffix lookup, all_declared param for global check.

generate_site.py: gap page now shows verification by platform,
18 hash mismatches, and core complement with provenance breakdown.
2026-04-01 22:33:37 +02:00
Abdessamad Derraz
cbb86c7746 docs: add missing CLI flags to wiki tools page 2026-04-01 18:51:44 +02:00
Abdessamad Derraz
9bbd39369d fix: alias-only files missing from full packs
find_undeclared_files was enriching declared_names with DB aliases,
filtering core extras that were never packed by Phase 1 under that
name. Pass strict YAML names to _collect_emulator_extras so alias-
only files (dc_bios.bin, amiga-os-310-a1200.rom, scph102.bin, etc.)
get packed at the emulator's expected path. Also fix truth mode
output message and --all-variants --verify-packs quick-exit bypass.
2026-04-01 18:39:36 +02:00
Abdessamad Derraz
a1333137a0 fix: truth mode skipping phases 2-3 due to indent 2026-04-01 15:12:45 +02:00
Abdessamad Derraz
1efe95228f feat: propagate source flags to pipeline 2026-04-01 14:52:39 +02:00
Abdessamad Derraz
074e3371f2 feat: source mode text in pack readme 2026-04-01 14:52:25 +02:00
Abdessamad Derraz
85cc23398a feat: source-aware pack verification 2026-04-01 14:52:02 +02:00
Abdessamad Derraz
47a68c1a11 feat: add --source and --all-variants flags 2026-04-01 14:50:33 +02:00
Abdessamad Derraz
5f579d1851 feat: add source param to manifest and split packs 2026-04-01 14:44:39 +02:00
Abdessamad Derraz
2c1c2a7bfe feat: add combined source+required variant tests 2026-04-01 14:42:52 +02:00
Abdessamad Derraz
423a1b201e feat: add source param to generate_pack 2026-04-01 14:39:04 +02:00
Abdessamad Derraz
9c6b3dfe96 feat: add include_all to _collect_emulator_extras 2026-04-01 14:33:54 +02:00
Abdessamad Derraz
b070fa41de feat: add include_all param to find_undeclared_files 2026-04-01 14:29:31 +02:00
Abdessamad Derraz
0a272dc4e9 chore: lint and format entire codebase
Run ruff check --fix: remove unused imports (F401), fix f-strings
without placeholders (F541), remove unused variables (F841), fix
duplicate dict key (F601).

Run isort --profile black: normalize import ordering across all files.

Run ruff format: apply consistent formatting (black-compatible) to
all 58 Python files.

3 intentional E402 remain (imports after require_yaml() must execute
after yaml is available).
2026-04-01 13:17:55 +02:00
Abdessamad Derraz
a2d30557e4 chore: remove unused imports from generate_site.py 2026-04-01 13:13:06 +02:00
Abdessamad Derraz
0e6db8abdf docs: sync wiki sources with pipeline changes
Update wiki source files (the single source of truth for the site):
- tools.md: renumber pipeline steps 1-8, add step 6 (pack integrity),
  add missing CLI flags for cross_reference.py and refresh_data_dirs.py
- architecture.md: update mermaid diagram with pack integrity step,
  fix test file count (5 files, 249 tests)
- testing-guide.md: add test_pack_integrity section, add step 5 to
  verification discipline checklist
2026-04-01 13:08:19 +02:00
Abdessamad Derraz
6eca4c416a chore: remove dead wiki generator functions, update docs
Remove 4 unused functions from generate_site.py (generate_wiki_index,
generate_wiki_architecture, generate_wiki_tools, generate_wiki_profiling)
that contained stale data. Wiki pages are sourced from wiki/ directory.

Update generate_site.py contributing section with correct test counts
(249 total, 186 E2E, 8 pack integrity) and pack integrity documentation.
2026-04-01 13:05:34 +02:00
Abdessamad Derraz
e5859eb761 refactor: dry pack integrity into cli and update docs
Move verification logic to generate_pack.py --verify-packs (single
source of truth). test_pack_integrity.py is now a thin wrapper that
calls the CLI. Pipeline step 6/8 uses the same CLI entry point.

Renumber all pipeline steps 1-8 (was skipping from 5 to 8/9).

Update generate_site.py with pack integrity test documentation.
2026-04-01 12:31:10 +02:00
Abdessamad Derraz
754e829b35 feat: add pack integrity test and integrate into pipeline
Extract each platform ZIP to tmp/ (real filesystem, not /tmp tmpfs)
and verify every declared file exists at the correct path with the
correct hash per the platform's native verification mode.

Handles ZIP inner content verification (checkInsideZip, md5_composite,
inner ROM MD5) and path collision deduplication.

Integrated as pipeline step 6/8. Renumber all pipeline steps to be
sequential (was skipping from 5 to 8).
2026-04-01 12:22:50 +02:00
Abdessamad Derraz
7beb651049 fix: correct core extras placement for retrodeck and romm packs
RetroDECK: core extras with subdirectory paths (e.g. vice/C64/,
fbneo/, dc/) were placed outside bios/ because the prefix was only
inferred for bare filenames. Add _detect_extras_prefix() to infer
the dominant BIOS prefix from YAML destinations.

RomM: core extras landed flat at bios/{file} instead of the required
bios/{platform_slug}/{file}. Add _detect_slug_structure() to detect
per-system slug layouts and _map_emulator_to_slug() to route each
extra to the correct slug subfolder.

Also skip manifest writes when only the generated timestamp changed,
preventing unnecessary diffs in install/*.json.
2026-04-01 11:08:01 +02:00
Abdessamad Derraz
5eeaf87a3a fix: resolve all untested and missing bios across platforms
Batocera: fix sc3000.rom md5 (no dump matches upstream hash),
remove erroneous bk0010.zip mame entries (upstream confirmed
mame needs no bios for bk), add PSP2UPDAT.PUP correct version.
Recalbox: add MSX2R2.ROM from blueMSX v2.82.
RetroDECK: fix stale peribox_ev/gen.zip md5 hashes.

Regenerate database, manifests, readme.
2026-04-01 01:42:39 +02:00
Abdessamad Derraz
ab3255b0c7 chore: regenerate readme, manifests after md5 resolution fix 2026-03-31 14:37:52 +02:00
Abdessamad Derraz
2d17e0e9d9 fix: trust full MD5 for cross-name variant resolution 2026-03-31 14:17:24 +02:00
Abdessamad Derraz
03002515fe fix: readme and site coverage use data_dir and supplemental indexes 2026-03-31 13:58:52 +02:00
Abdessamad Derraz
eb354128e2 fix: consistency check allows pack to resolve more than verify 2026-03-31 13:46:12 +02:00
Abdessamad Derraz
6b5c3d8bf2 fix: pack conformance matches builder logic for perfect stats 2026-03-31 12:25:07 +02:00
Abdessamad Derraz
d685ad111d feat: add 63 missing BIOS files from multiple sources
MAME/MESS ROM sets (23 ZIPs from archive.org MESS 0.151 + MAME 0.285 split),
Dolphin BT firmware (15 files from linux-firmware), Commodore VIC-20/Plus4
regional ROMs (8 from zimmers.net), IBM AT 5170 BIOS + BASIC (3 from
minuszerodegrees.net + PCem), Apple DiskII boot/state-machine ROMs (4 from
Asimov mirror), Commodore 1540/1541 drive ROMs (2 reconstructed from MAME
chips), Oric Microdisc ROM, SMS Japanese BIOS, Videoton TVC64 + BK-0010
enriched ZIPs. All platforms at 0 required missing except Batocera bk0010.zip
(2/11 ROM chips unavailable).
2026-03-31 11:00:31 +02:00
Abdessamad Derraz
b56f8dd05f feat: add archive_prefix for core-specific BIOS subdirectories
Closes #43

FBNeo and Kronos expect BIOS archives in core-specific subdirectories
(system/fbneo/, system/kronos/). RetroArch firmware check uses .info
paths which include these prefixes, so files at root show as Missing.

Add archive_prefix field to emulator profiles. The pack code now places
archive copies in the prefixed subdirectory while keeping root copies
for cores that expect them there (e.g. Geolith for neogeo.zip).
2026-03-31 09:17:54 +02:00
Abdessamad Derraz
40ff2b5307 Merge branch 'main' of https://github.com/Abdess/retrobios 2026-03-30 23:58:20 +02:00
Abdessamad Derraz
d0dd05ddf6 docs: add wiki pages for all audiences, fix .old.yml leak
9 new wiki pages: getting-started, faq, troubleshooting,
advanced-usage, verification-modes, adding-a-platform,
adding-a-scraper, testing-guide, release-process.

Updated architecture.md with mermaid diagrams, tools.md with
full pipeline and target/exporter sections, profiling.md with
missing fields, index.md with glossary and nav links.

Expanded CONTRIBUTING.md from stub to full contributor guide.

Filter .old.yml from load_emulator_profiles, generate_db alias
collection, and generate_readme counts. Fix BizHawk sha1 mode
in tools.md, fix RetroPie path, fix export_truth.py typos.
2026-03-30 23:58:12 +02:00
Abdessamad Derraz
d4b0af0a38 docs: add wiki pages for all audiences, fix .old.yml leak
9 new wiki pages: getting-started, faq, troubleshooting,
advanced-usage, verification-modes, adding-a-platform,
adding-a-scraper, testing-guide, release-process.

Updated architecture.md with mermaid diagrams, tools.md with
full pipeline and target/exporter sections, profiling.md with
missing fields, index.md with glossary and nav links.

Expanded CONTRIBUTING.md from stub to full contributor guide.

Filter .old.yml from load_emulator_profiles, generate_db alias
collection, and generate_readme counts. Fix BizHawk sha1 mode
in tools.md, fix RetroPie path, fix export_truth.py typos.
2026-03-30 23:42:00 +02:00
Abdessamad Derraz
038c3d3b40 feat: enrich MAME/FBNeo profiles with upstream BIOS contents
auto-fetched from mamedev/mame 0.287 and finalburnneo/FBNeo v1.0.0.2.
mame: +20 new BIOS root sets, 96 entries enriched with contents.
mamearcade: 47 entries enriched with contents.
mamemess: 20 entries enriched with contents.
fbneo: +13 new ROM entries from upstream BIOS sets.
2026-03-30 21:39:02 +02:00
Abdessamad Derraz
427fef5669 fix: text-based YAML patching preserves formatting
replace yaml.dump with surgical text edits for contents/source_ref.
preserves comments, block scalars, quoting, indentation.
fix FBNeo new entry detection using parsed keys instead of text search.
2026-03-30 21:35:41 +02:00
Abdessamad Derraz
75e34898ee feat: add MAME/FBNeo hash auto-fetch scrapers
sparse clone upstream repos, parse BIOS root sets from C source,
cache as JSON, merge into emulator profiles with backup.
covers macro expansion, version detection, subset profile protection.
2026-03-30 19:11:26 +02:00
Abdessamad Derraz
94c3ac9834 feat: add hash merge for MAME and FBNeo profiles 2026-03-30 18:33:09 +02:00
Abdessamad Derraz
319a1d2041 feat: add MAME source code parser for BIOS root sets 2026-03-30 18:29:31 +02:00
Abdessamad Derraz
00d7b57884 feat: add FBNeo source parser for BIOS sets 2026-03-30 18:29:06 +02:00
Abdessamad Derraz
caf6285a04 fix: skip entries without md5 in batocera and retrobat exports 2026-03-30 17:46:48 +02:00
Abdessamad Derraz
529cb8a915 fix: recalbox paths from scrape, batocera md5 fallback from scrape 2026-03-30 17:35:39 +02:00
Abdessamad Derraz
1146fdf177 fix: rewrite emudeck exporter to match exact checkBIOS.sh format 2026-03-30 17:21:56 +02:00
Abdessamad Derraz
4fbb3571f8 fix: exporters use _dest fallback, merge colliding systems, per-platform subdirs 2026-03-30 17:15:44 +02:00
Abdessamad Derraz
0be68edad0 feat: add exporters for lakka, retropie, emudeck, retrodeck, romm 2026-03-30 17:07:08 +02:00
Abdessamad Derraz
1ffc4f89ca refactor: registry merge is fully flexible, no hardcoded lists 2026-03-30 16:38:13 +02:00
Abdessamad Derraz
f1ebfff5bd refactor: registry merge uses exclusion list instead of hardcoded fields 2026-03-30 16:36:40 +02:00
Abdessamad Derraz
425ea064ae fix: scrapers merge into existing YAML instead of overwriting 2026-03-30 16:31:40 +02:00
Abdessamad Derraz
6818a18a42 feat: load_platform_config merges all metadata from registry 2026-03-30 16:24:40 +02:00
Abdessamad Derraz
c11de6dba6 fix: restore retroarch.yml fields lost by scraper regeneration 2026-03-30 16:22:16 +02:00
Abdessamad Derraz
c4f3192020 fix: system.dat rom quoting, native_ids, acronym display names 2026-03-30 16:17:50 +02:00
Abdessamad Derraz
e2d0510f4e fix: exporters match exact native formats with display names 2026-03-30 16:09:02 +02:00
Abdessamad Derraz
74269bab84 fix: rewrite exporters to match exact native formats 2026-03-30 15:49:33 +02:00
Abdessamad Derraz
1e6b499602 feat: add batocera, recalbox, retrobat native exporters 2026-03-30 15:31:44 +02:00
Abdessamad Derraz
9b785ec785 feat: add missing laseractive sega pac bios files
v1.05 japan and v1.01 japan from archive.org.
v1.04 us variant alias for pioneer-named file.
resolves retrobat laseractive missing files.
2026-03-30 15:16:23 +02:00
Abdessamad Derraz
d415777f2c feat: add PS3UPDAT.PUP to rpcs3 profile
storage: large_file, validated via SCEUF magic + HMAC-SHA1
per entry (PUP.cpp:23-77). also adds missing standard fields
(cores, core_classification, upstream), removes non-standard
firmware_file/validation/firmware_version fields.
2026-03-30 15:06:51 +02:00
Abdessamad Derraz
eafabd20f3 refactor: skip writing generated files when content unchanged
write_if_changed in common.py compares content after stripping
timestamps (generated_at, Auto-generated on, Generated on).
applied to generate_db, generate_readme, generate_site.
eliminates timestamp-only diffs in database.json, README.md,
mkdocs.yml, and 423 docs pages.
2026-03-30 14:33:44 +02:00
Abdessamad Derraz
2aca4927c0 chore: regenerate database, readme, manifests, site 2026-03-30 14:19:00 +02:00
Abdessamad Derraz
17777f315b feat: agnostic bios mode for filename-agnostic emulators
bios_mode: agnostic (profile) and agnostic: true (file) for
emulators that accept any valid BIOS without specific filename.
find_undeclared_files skips agnostic entries, pack extras scan
includes all matching DB files by path prefix + size criteria,
resolve_local_file has agnostic fallback with rename README.
applied to pcsx2, lrps2 (bios_mode), melonds dsi_nand (file).
2026-03-30 14:18:54 +02:00
Abdessamad Derraz
692484d32d refactor: remove false aliases from pcsx2 and melonds profiles
aliases must be same-SHA1 alternative names, not distinct files.
pcsx2: 164 different BIOS dumps are separate DB entries, not aliases.
melonds: 6 regional NAND dumps are separate DB entries, not aliases.
also cleans pcsx2 non-standard fields, fixes display_name.
2026-03-30 12:37:32 +02:00
Abdessamad Derraz
a8430940f9 feat: add regional nand aliases to melonds profile
dsi_nand.bin aliases: DSi_Nand_USA/EUR/JPN/AUS/CHN/KOR.bin
for repo resolution. Code loads a single configurable path
(libretro.cpp:836, EmuInstance.cpp:1036-1050), validates
nocash footer (DSi_NAND.cpp:42-111). size + storage added.
2026-03-30 12:20:26 +02:00
Abdessamad Derraz
1f073f521d fix: preserve batocera version when github fetch fails 2026-03-30 11:55:57 +02:00
Abdessamad Derraz
903c49edcf feat: add tests for registry merge, all_libretro expansion, hash fallback, system normalization 2026-03-30 11:33:59 +02:00
Abdessamad Derraz
d3a2224dd2 chore: regenerate database, readme, manifests, site 2026-03-30 09:42:39 +02:00
Abdessamad Derraz
f898f26847 chore: regenerate retrobat.yml with corrected system slugs 2026-03-30 09:11:00 +02:00
Abdessamad Derraz
2712307420 feat: add tandy vis bios root set to mame profiles
vis.zip (p513bk0b.bin + p513bk1b.bin) from src/mame/trs/vis.cpp.
Driver added in MAME 0.180, not present in older cores.
2026-03-30 09:09:58 +02:00
Abdessamad Derraz
54022e9db1 feat: hash-based matching for cross-reference
expand_platform_declared_names resolves platform file MD5s
through the database to recover canonical names and aliases,
eliminating false positive undeclared files when a platform
renames a file (e.g. Batocera ROM1 vs gsplus ROM).
2026-03-30 08:25:54 +02:00
Abdessamad Derraz
4db9e4350c fix: add missing system slugs to batocera and retrobat scrapers 2026-03-30 07:58:46 +02:00
Abdessamad Derraz
6864ce6584 feat: diff hash fallback detects platform renames 2026-03-30 07:53:59 +02:00
Abdessamad Derraz
12196b6445 feat: add 55 missing cores across 6 platform registries 2026-03-30 07:17:57 +02:00
Abdessamad Derraz
7551e41a7b feat: load_platform_config merges cores from registry 2026-03-30 07:13:15 +02:00
Abdessamad Derraz
7b484605d4 feat: add 47 missing cores to batocera platform config 2026-03-30 07:09:52 +02:00
Abdessamad Derraz
b587381f05 feat: resolve_platform_cores expands all_libretro in list 2026-03-30 07:06:32 +02:00
Abdessamad Derraz
261f3c1671 chore: regenerate database 2026-03-30 06:15:02 +02:00
Abdessamad Derraz
d3bd68f6ad feat: add vsmile, tutor, vg5k, vgmplay profiles and system aliases 2026-03-30 06:14:58 +02:00
Abdessamad Derraz
8f29e0e85c Update DB timestamp; add ti99sim emulator
Bump database.json generated_at timestamp and add a new emulator metadata file emulators/ti99sim.yml. The new YAML registers the TI-99/Sim standalone emulator (ti99sim) with system info, core version, notes on ROM handling, and multiple required/optional ROM entries (with SHA1s, sizes and validation notes) for TI-99/4A support.
2026-03-29 23:33:12 +02:00
Abdessamad Derraz
f39b11955f feat: add ROM_OS_B_NTSC and fs-5500_disk.rom, fix retrodeck
Add Atari 800 OS Rev B NTSC (CRC32 0e86d61d, canonical sysrom.c
match) and National FS-5500 disk controller ROM for openMSX.
Remove ROM_400/800_CUSTOM from retrodeck.yml (config slot key with
forward slash in name, not a real file).
2026-03-29 23:23:52 +02:00
Abdessamad Derraz
83ccf17b11 feat: add ti99 and msx BIOS entries, add fs-5500 disk rom 2026-03-29 23:20:44 +02:00
Abdessamad Derraz
56bff1d013 feat: add ti99 system to mame profile 2026-03-29 23:16:33 +02:00
Abdessamad Derraz
3bd9c0ebef chore: regenerate database, add atari 400/800 BIOS 2026-03-29 23:16:19 +02:00
Abdessamad Derraz
3824193a11 feat: add socrates and vc4000 systems to mame profiles 2026-03-29 23:15:25 +02:00
Abdessamad Derraz
2e21d64a08 refactor: harden codebase and remove unicode artifacts
- fix urllib.parse.quote import (was urllib.request.quote)
- add operator precedence parens in generate_pack dedup check
- narrow bare except to specific types in batocera target scraper
- cache load_platform_config and build_zip_contents_index results
- add selective algorithm support to compute_hashes
- atomic write for fetch_large_file (tmp + rename)
- add response size limit to base scraper fetch
- extract build_target_cores_cache to common.py (dedup verify/pack)
- hoist _build_supplemental_index out of per-platform loop
- migrate function-attribute caches to module-level dicts
- add @abstractmethod to BaseTargetScraper.fetch_targets
- remove backward-compat re-exports from common.py
- replace em-dashes and unicode arrows with ASCII equivalents
- remove decorative section dividers and obvious comments
2026-03-29 23:15:20 +02:00
Abdessamad Derraz
0c5cde83e1 Add TRS-80, RX-78, Sega AI entries; refactor tools
Add many MAME/MESS BIOS entries (TRS-80 family, Bandai RX-78, Sega AI) and update docs/navigation counts (README, mkdocs). Remove empty supplemental file references from database.json and update generated timestamps and totals. Harden and refactor tooling: add MAX_RESPONSE_SIZE limited reader in base_scraper, make target scrapers an abstract base, narrow exception handling in the Batocera targets parser, and switch generate_pack.py and verify.py to use build_target_cores_cache (simplifies target config loading and error handling). verify.py also loads supplemental cross-reference names and accepts them through verify_platform. Update tests to import from updated modules (validation/truth). Misc: small bugfix for case-insensitive path conflict check.
2026-03-29 23:04:30 +02:00
Abdessamad Derraz
a08c730805 fix: case-insensitive data dir basename resolution 2026-03-29 23:01:32 +02:00
Abdessamad Derraz
84decad08d chore: remove zero-byte placeholder files from bios/ 2026-03-29 22:57:07 +02:00
Abdessamad Derraz
f3de3ead20 Add PV-2000 & Supracan BIOS; simplify Vita3K
Add Casio PV-2000 BIOS entry (pv2000.zip) to MAME and MESS profiles and update system lists/counts. Add Funtech Super A'Can BIOS entries (supracan.zip and umc6650.zip) with ROM contents to mamemess. Simplify and condense Vita3K emulator profile (rename fields, update profiled_date, add PSVUPDAT.PUP and optional PSP2UPDAT.PUP file entries, and clarify install/partition behavior). Bump database generated_at timestamp and add a system alias mapping "psvita" -> "sony-playstation-vita" in scripts/common.py.
2026-03-29 22:51:30 +02:00
Abdessamad Derraz
463fca7e7d Regenerate database and update emulator profiles
Regenerate database.json and update README counts/timestamps; add and normalize numerous BIOS entries and hashes. Key changes: update generated_at timestamp and system count (355→357) in README; add OpenBIOS / HLE fallback and additional aliases to beetle_psx, include beetle_psx core name and profiled_date update; add laseractive to ares systems; adjust atari800 systems and source_ref line numbers; mark dinothawr as a system and expand its note; update gsplus upstream/profile date, add apple-iie system and tweak source_refs; add pcsx2 core to lrps2; refresh mame profiled_date and add multiple systems and BIOS root sets. Miscellaneous script changes and other JSON normalization to reflect newly discovered/merged BIOS files.
2026-03-29 22:41:01 +02:00
Abdessamad Derraz
daa396618d refactor: deduplicate hash comparison loop in check_file_validation 2026-03-29 17:15:24 +02:00
Abdessamad Derraz
2c2b761e60 refactor: extract helpers from print_platform_result in verify.py 2026-03-29 17:11:33 +02:00
Abdessamad Derraz
be68ed19a3 refactor: extract dispatch functions from generate_pack main() 2026-03-29 17:10:01 +02:00
Abdessamad Derraz
b4c5d77e4b refactor: deduplicate yaml import pattern via require_yaml() 2026-03-29 17:07:27 +02:00
Abdessamad Derraz
3c7fc26354 refactor: extract validation and truth modules from common.py 2026-03-29 16:41:24 +02:00
Abdessamad Derraz
95e16c9e7a Add Adam/Advision/APF systems and update metadata
Add support for Coleco Adam, Entex Adventure Vision and APF M-1000 BIOS/ROM sets in MAME and MESS metadata (multiple Adam device MCU ROMs and optional FDC/SPI variants, Advision and APF BIOS entries). Update generated metadata across the repo: README coverage numbers and per-platform coverage rows, database generated timestamp and totals (total_files 7245), and various install manifests (notably batocera.json) with new timestamps, adjusted file counts/sizes, SHA1s, repo_path fixes and an added adam_fdc_320kb.zip entry. Also update notes to reflect the new system ROM sets in the emulators entries.
2026-03-29 16:07:15 +02:00
Abdessamad Derraz
f621f3db84 feat: truth includes systems with 0 files from resolved cores 2026-03-29 14:28:52 +02:00
Abdessamad Derraz
cd2a3bdfa2 chore: add acorn, gce, texas-instruments to manufacturer prefixes 2026-03-29 14:25:40 +02:00
Abdessamad Derraz
d274d8a65c fix: guard MD5 lookup against cross-name contamination
resolve_local_file step 2 (pure MD5 lookup) now verifies that the
found file's name matches the requested name or is a .variants/
derivative. Prevents serving wrong files when an unrelated file
shares the same MD5 in the index (e.g. spi.zip returned for
a7ports.zip because RetroDECK expected an MD5 we don't have).
2026-03-29 14:15:06 +02:00
Abdessamad Derraz
13b20c2742 fix: normalize system IDs in diff matching 2026-03-29 14:07:14 +02:00
Abdessamad Derraz
ae71a41b32 feat: verify_pack checks data dirs and rebuilt ZIPs
verify_pack now verifies files against data directory caches and
validates rebuilt MAME ZIPs by comparing inner ROM CRC32s against
source. Reduces false untracked count from 6242 to 0 for RetroArch.
2026-03-29 14:04:46 +02:00
Abdessamad Derraz
dee37c2530 fix: truth generation uses platform config not registry 2026-03-29 13:41:49 +02:00
Abdessamad Derraz
3bf6e5c961 feat: add truth and diff integration test 2026-03-29 13:27:32 +02:00
Abdessamad Derraz
a800ded477 chore: remove 4 remaining bios/data duplicates 2026-03-29 13:25:33 +02:00
Abdessamad Derraz
ac2502d767 feat: add --with-truth and --with-export to pipeline 2026-03-29 13:22:20 +02:00
Abdessamad Derraz
bb257f52ce feat: add export_native.py CLI 2026-03-29 13:21:08 +02:00
Abdessamad Derraz
e86d8d68af feat: add exporter plugin architecture 2026-03-29 13:19:38 +02:00
Abdessamad Derraz
2ce8db1754 feat: add native_id to scraper output 2026-03-29 13:15:57 +02:00
Abdessamad Derraz
5247512bea feat: add diff_truth.py CLI 2026-03-29 13:12:29 +02:00
Abdessamad Derraz
2aab7420d7 feat: add diff_platform_truth function and tests 2026-03-29 13:09:08 +02:00
Abdessamad Derraz
97eb4835be feat: add load_from field for non-system_dir files
Replaces mode: standalone hack with load_from: save_dir on Panda3DS
files. The load_from field documents which libretro directory callback
provides the base path (system_dir default, save_dir, content_dir).
Pack generator and cross-reference skip files not targeting system_dir.
2026-03-29 13:07:30 +02:00
Abdessamad Derraz
2dd2b724c1 feat: add generate_truth.py CLI 2026-03-29 13:05:51 +02:00
Abdessamad Derraz
525f51d5fb feat: add truth mode filtering and dedup tests 2026-03-29 13:01:37 +02:00
Abdessamad Derraz
d38f2b7180 fix: exclude save_dir paths from pack multi-dest 2026-03-29 12:02:30 +02:00
Abdessamad Derraz
abca70cb5b feat: add generate_platform_truth to common.py 2026-03-29 11:22:35 +02:00
Abdessamad Derraz
5ac48ef703 fix: recursive basename search in data dir fallback 2026-03-29 11:18:03 +02:00
Abdessamad Derraz
44145d41cd chore: remove 399 bios/ files now sourced from buildbot
Files verified by MD5 to be identical to their buildbot-fetched
copies in data/. resolve_local_file data directory fallback ensures
they remain resolvable for verify and pack generation.
2026-03-29 11:13:08 +02:00
Abdessamad Derraz
c513d6c0ad feat: resolve_local_file data directory fallback 2026-03-29 11:08:31 +02:00
Abdessamad Derraz
500e33d1ff feat: add --check-buildbot pipeline step 2026-03-29 11:04:04 +02:00
Abdessamad Derraz
b9be8b9783 feat: add buildbot system change detection 2026-03-29 11:03:15 +02:00
Abdessamad Derraz
44cb444a7b chore: regenerate install manifests after path fixes 2026-03-29 10:13:02 +02:00
Abdessamad Derraz
e13e8734b9 chore: standardize notes: to note: in file entries
240 file-level entries used notes: instead of the canonical note:
field. verify.py and cross_reference.py only read note:, so these
were silently ignored.
2026-03-29 10:02:20 +02:00
Abdessamad Derraz
b7528a71e7 fix: correct type and path fields across 58 emulator profiles
49 libretro cores had type: game/utility/test instead of type: libretro,
breaking the all_libretro filtering in resolve_platform_cores and
excluding them from platform packs (e.g. cannonball missing from
RetroArch). core_classification already carries the descriptive role.

9 profiles with subdirectory-loading cores (cannonball/, nxengine/,
Citra/sysdata/, mame2003/, mame2003-plus/, mame2010/) now have path:
fields so cross-reference places files at the correct destination.

resolve_local_file now tries basename when name contains a path
separator (e.g. res/tilemap.bin -> tilemap.bin), fixing resolution
of files with subdirectory names.
2026-03-29 09:53:46 +02:00
Abdessamad Derraz
36f6ad1379 fix: correct stale scummvm.zip and cpc464.rom hashes
RetroDECK had stale buildbot hash a17e0e01 for scummvm.zip
(from old 9.5MB build, current is 79MB) copied to cpc464.rom.
RomM had same stale hash. Updated to current verified values.
All 8 platforms now 100% OK, 0 untested.
2026-03-29 09:52:32 +02:00
Abdessamad Derraz
718ea2192d feat: add FDS original BIOS and GameCube DSP hardware dumps
disksys.rom non-Rev1 variant (SHA256 fdc1a76e, ares-compatible)
from Myrient No-Intro. GameCube dsp_rom.bin + dsp_coef.bin real
hardware dumps (adler32 match Dolphin) from Redump collection.
All placed as .variants/ — primaries unchanged.
2026-03-29 09:35:48 +02:00
Abdessamad Derraz
ce6c218942 fix: restore original ZIPs to match platform MD5 hashes
Agents enriched neogeo/pgm/stvbios/neocdz/nmk004/channelf
ZIPs with extra ROMs, breaking platform MD5 verification.
Restore originals from git history. RetroBat: 0 untested.
RetroDECK 2 untested remain (upstream scraper bug).
2026-03-29 09:28:52 +02:00
Abdessamad Derraz
536300984d feat: add howard.o Lynx development bootloader
513-byte BS93-format bootloader reconstructed from Handy
emulator source code analysis. Header verified: BRA +8,
load_addr 0x0212, magic BS93, SEI at code entry. CRam
reset simulation passed.
2026-03-29 09:18:30 +02:00
Abdessamad Derraz
7492777b47 fix: skip storage: release files in cross-reference
Files with storage: release are in GitHub release assets,
not in bios/. Eliminates donpachi/sfz3mix/twotiger false
positives. 149/149 tests pass. Cross-ref: 10 -> 7.
2026-03-29 07:28:12 +02:00
Abdessamad Derraz
a369defc15 fix: skip path: null entries in cross-reference
Files with explicit path: null are UI-imported (Dolphin NAND,
Hatari cartridge) and not resolvable by pack placement. Skip
them in find_undeclared_files and cross_reference. Also add
desc.dat (SDLPAL fan-made descriptions) to data/. 149/149 OK.
2026-03-29 07:26:40 +02:00
Abdessamad Derraz
c241a44c33 fix: fbneo data dir paths (hiscore, samples) 2026-03-29 06:50:36 +02:00
Abdessamad Derraz
1381a17f9c feat: complete fbneo samples (49 small + 3 large) 2026-03-29 01:24:25 +01:00
Abdessamad Derraz
bf72543d8f feat: add SquirrelJME test JARs built from source
squirreljme-0.3.0-test.jar and squirreljme-test.jar compiled
from SquirrelJME trunk using Gradle + JDK 17. No prebuilt
artifacts exist (v0.3.0 never released). Built with
romTestSpringCoatRelease target.
2026-03-29 01:20:22 +01:00
Abdessamad Derraz
ee033e152a feat: add Toaplan fireshrk and vimana WAV samples
ThunderMAME samples from original MediaFire links (still
alive). fireshrk.zip (180MB, = samesame.zip parent name)
and vimana.zip (279MB). Upload to large-files release.
2026-03-29 01:14:19 +01:00
Abdessamad Derraz
6830ba3db3 feat: add QEMU MIPS and LEON3 U-Boot firmware
mips_bios.bin and mipsel_bios.bin cross-compiled from U-Boot
v2024.10 (malta/maltael_defconfig). u-boot.bin for LEON3 SPARC
cross-compiled from U-Boot v2016.11 (grsim_defconfig) using
Gaisler sparc-gaisler-linux5.10 toolchain. All built in Docker.
2026-03-29 01:13:01 +01:00
Abdessamad Derraz
d0b3d59fa7 feat: add Canon A1100 barebox ROM for QEMU DIGIC4
4MB barebox bootloader from frantony/barebox GitHub repo.
Only publicly available ROM for QEMU canon-a1100 machine.
Matches FLASH_K8P3215UQB_SIZE in hw/arm/digic_boards.c.
2026-03-29 01:10:21 +01:00
Abdessamad Derraz
e92f6a5409 feat: add RISC-V Linux kernel for RVVM
Pre-built rv64 Linux Image (22MB) from Bootlin buildroot
stable 2025.08. S-mode kernel payload for fw_jump.bin mode.
2026-03-29 01:04:26 +01:00
Abdessamad Derraz
48598d61b0 feat: add Wii keys.bin from archive.org NAND dump
1024-byte OTP/SEEPROM dump for Dolphin/PrimeHack/Ishiiruka
NAND import. From archive.org nand_20240722 collection.
2026-03-29 01:01:47 +01:00
Abdessamad Derraz
a37bf11524 fix: add path fields for correct pack subdirectory placement
Cores that load files from system_dir subdirectories (same_cdi/bios/,
neocd/, cannonball/, Citra/sysdata/, mame2003/, etc.) need path: on
each file entry so cross-reference and pack generation place files at
the correct destination. Also fixes neocd.yml using non-standard dest:
field instead of path:.

Closes #41
2026-03-29 00:59:57 +01:00
Abdessamad Derraz
87d3c4c645 chore: regenerate database and revert agent profile violations
16 emulator profiles reverted to ground truth (agents modified
cannonball, citra, fbalpha2012, mame variants, neocd, nxengine,
same_cdi without source code verification). OpenTyrian residuals
moved from bios/ to data/. Database regenerated: 7616 files.
2026-03-29 00:54:44 +01:00
Abdessamad Derraz
b01a138f1c feat: add fbneo samples data directory 2026-03-29 00:53:27 +01:00
Abdessamad Derraz
459a745527 feat: add RVVM firmware and Hatari diagnostic cartridge
fw_payload.bin (OpenSBI + U-Boot 2023.4) from RVVM v0.5
release. ST Diagnostic v4.4 cartridge ROM for Hatari from
SidecarTridge ROM library.
2026-03-29 00:52:37 +01:00
Abdessamad Derraz
32a23a14ae chore: move OpenTyrian residuals from bios/ to data/
Agent placed Tyrian 2000 files in bios/Game Engines/ instead
of data/opentyrian/. Synced and removed duplicate. OpenTyrian
data lives in data/ via _data_dirs.yml, not in bios/.
2026-03-29 00:38:57 +01:00
Abdessamad Derraz
40b7badc1d feat: add Sharp X1 kanji font, PC-88 fonts, PC-98 PCI ROM
FNT1616.X1 (306KB) from NeoKobe X1turboZ BIOS via HTTP range
request on 934MB archive. font2/font3.rom split from M88 6KB
font.rom. pci.rom (32KB) from MAME 0.278 pc9821cx3.zip. All
previously declared "impossible" by multiple agents.
2026-03-29 00:33:22 +01:00
Abdessamad Derraz
c835336999 fix: correct OpenTyrian shapes profiling error
Remove 30 phantom shapes[2-v].dat entries. shapeFile[34] in
lvlmast.c maps to newsh?.shp (enemy sprites), NOT shapes?.dat
(level tilesets). Only 5 shapes exist: ), W, X, Y, Z — the
characters actually referenced by level data. Verified against
trapexit/libretro-opentyrian source. Cross-ref: 54 -> 24.
2026-03-29 00:30:06 +01:00
Abdessamad Derraz
a306f93a1b feat: add Amiga CD32 FMV cartridge ROM
cd32fmv.rom (v40.030, SHA1 03ca81c7) extracted from Amiga
Forever 11.0.22 ROM pack on archive.org. Verified against
WinUAE rommgr.cpp ROMTYPE_CD32CART entry. Previously
declared "impossible" by 4 separate agents.
2026-03-29 00:23:19 +01:00
Abdessamad Derraz
5413c6a5ac feat: add Cemu Wii U sound RPLs and Lexaloffle Voxatron
snd_user.rpl + snduser2.rpl from Cafe SDK 2.12.13 archive.org.
Voxatron v0.3.5b binaries (vox, vox_dyn, vox.dat) from
archive.org pico-8-tron-and-voxatron. libHoloPlayCore.so from
Looking Glass SDK GitHub. All 6 "impossible" files found.
2026-03-29 00:21:55 +01:00
Abdessamad Derraz
329deb82fd feat: add fbneo cheats data directory 2026-03-29 00:21:53 +01:00
Abdessamad Derraz
99c8fd62f0 feat: derive Amiga rom.key via XOR cryptanalysis
Cloanto decryption key (2069 bytes) derived by XOR-ing
encrypted and plain Kickstart ROM pairs from archive.org
commodore-amiga-firmware collection. Unlocks 5 emulators
(Amiberry, PUAE, PUAE2021, FS-UAE, uae4arm).
2026-03-29 00:20:00 +01:00
Abdessamad Derraz
abc997525b feat: wire fbneo-hiscore data dir to arcade system 2026-03-29 00:18:06 +01:00
Abdessamad Derraz
e91caa6444 feat: add Saturn AR4MP firmware and QEMU Virtex DTB
satar4mp.bin (256KB) extracted from existing ar_bios.zip
MAME ROM. virtex-ml507.dtb compiled from Linux 4.19 DTS
with dtc. Both resolve long-standing optional missing files.
2026-03-29 00:07:40 +01:00
Abdessamad Derraz
054cb940b0 feat: resolve last 3 required files + 26 optional
CLK os.rom (Acorn Electron MOS), exos10.bin and basic10.bin
(Enterprise EXOS/BASIC 1.0) from TOSEC/Myrient — zero
required missing across all platforms. Also add Enterprise
ROMs, ZX Spectrum 128/+2/+3, MSX CLK variants, FBA2012
samples from progettosnaps.
2026-03-28 22:18:19 +01:00
Abdessamad Derraz
c00f4bca80 feat: add PC-98 IDE/SCSI ROMs, OpenTyrian Tyrian 2000 data
PC-98 ide.rom and scsi.rom from archive.org np2kai_bios pack.
Tyrian 2000 Episode 5 data + shapes + sprites moved to data/
opentyrian/ (53 files from archive.org msdos_Tyrian_2000).
2026-03-28 22:00:35 +01:00
Abdessamad Derraz
9e331687a6 feat: generate defaults and extract compiled-in ROMs
WiiSD.raw/sd.raw (128MB FAT32), eeprom.dat (PCSX2 DEV9),
CMOS.ROM (fMSX RTC), key.txt (NP2kai), wildmidi.cfg
(EasyRPG), NXEngine sprites.sif+tilekey.dat extracted from
source headers, Frodo C64 ROMs extracted from compiled-in
arrays, Custom.dat (ZC210 empty default).
2026-03-28 21:30:30 +01:00
Abdessamad Derraz
7b0527bb0c feat: add FM Towns FMT_ALL.ROM combined container
Built from individual ROMs (FMT_SYS, FMT_DOS, FMT_FNT,
FMT_F20, FMT_DIC, MYTOWNS, MAR_EX0-3) using the tsugaru
structured container format (12-byte name + length + data).
2026-03-28 21:04:12 +01:00
Abdessamad Derraz
3eb6e0e530 feat: add Dolphin Wii certs, fMSX GameMaster ROMs
Wii SSL certs (clientca/clientcakey/rootca.pem) from archived
Nintendo HTTPS certs. SYSCONF and setting.txt generated with
correct format. Konami GameMaster 1+2 cartridge ROMs for fMSX.
2026-03-28 20:57:41 +01:00
Abdessamad Derraz
6c4f18056b feat: add Rustation PS1 aliases, FBNeo arcade BIOS, misc
8 Rustation PS1 BIOS (SHA256-verified copies of existing files
under Rustation-expected names). 4 FBNeo arcade BIOS extracted
from MAME game ROMs (236-bios.sp1, bios.u42, svg_bios.u49).
DuckStation ps2_scph18000.bin resolved from existing ps2-50j.
2026-03-28 20:53:23 +01:00
Abdessamad Derraz
9f229753b2 feat: platform-specific notes in zip readme 2026-03-28 19:27:49 +01:00
Abdessamad Derraz
ddf2937f41 fix: eliminate cross-reference false positives
Skip placeholder names (<bios>.bin), resolve by MD5/SHA1 hash
match for alias files, fix directory basename extraction for
trailing slash entries, index bios/ directory names for
directory-type file entries. 1011 -> 113 true missing.
149/149 tests pass.
2026-03-28 19:24:16 +01:00
Abdessamad Derraz
1825fff893 fix: repo_path fallback by name for normalized zips 2026-03-28 19:11:36 +01:00
Abdessamad Derraz
a418f7ef68 feat: add Dragon CoCo ROMs and mameinfo.dat
cdos20.rom (Cumana DOS 2.0), yados.rom (YA-DOS 0.5a),
dragonfly-1.3.rom (Ikon Ultra Drive v1.3) from World of
Dragon Archive and CCHDD GitHub. delta-premier.rom variant.
mameinfo.dat for MAME 2000/2003/2003-Plus game info.
2026-03-28 19:09:42 +01:00
Abdessamad Derraz
0419c6a780 fix: generate manifest aliases for grouped platforms 2026-03-28 18:58:24 +01:00
Abdessamad Derraz
63f2450943 feat: add Xbox BIOS variants and PC-98 sasi.rom
8 Xbox BIOS variants (mcpx-1.1, xbox-3944 through 5838)
from Myrient MAME bios-devices. PC-98 SASI controller ROM
for NP2kai/nekop2. Cross-reference: 146 true missing.
2026-03-28 18:50:59 +01:00
Abdessamad Derraz
6243271ab3 fix: regenerate manifests without base_dest prefix 2026-03-28 18:47:38 +01:00
Abdessamad Derraz
0a721fbef1 fix: url-encode repo paths with spaces 2026-03-28 18:46:36 +01:00
Abdessamad Derraz
2118571ca2 fix: emudeck detection path and base url override 2026-03-28 18:45:36 +01:00
Abdessamad Derraz
080cc8f19d fix: manifest dest paths relative to bios dir 2026-03-28 18:42:19 +01:00
Abdessamad Derraz
8777706a01 chore: generate initial install manifests 2026-03-28 18:29:01 +01:00
Abdessamad Derraz
2ff5be8420 feat: complete DuckStation PS1/PS2 BIOS coverage
Add 9 PS2 BIOS from Myrient (pre-shutdown raid), fix
incorrect scph5000.bin, add DuckStation-named symlinks
for 80 PS2 entries. Add Saturn cdb_rom, Fuse peripheral
ROMs, Amiberry MT-32 aliases, DOSBox soundfont. PS1
coverage: 25/25. PS2 coverage: 80/80 via MD5 matching.
2026-03-28 18:26:57 +01:00
Abdessamad Derraz
536c0c242e fix: resolve descriptive names via dest_hint basename fallback
resolve_local_file now tries the path: field basename when name:
lookup fails. Fixes 139 PCem false positives where descriptive
names ("MDA font ROM") didn't match actual filenames (mda.rom).
Also add 3 QEMU firmware (MacROM.bin, bios_loongson3, pmon_2e).
Cross-reference path: fallback already added. 149/149 tests pass.
2026-03-28 18:24:53 +01:00
Abdessamad Derraz
edd44d4137 feat: add manifest generation to pipeline 2026-03-28 18:13:05 +01:00
Abdessamad Derraz
f453a7c750 feat: include readme.txt in pack zips 2026-03-28 18:11:37 +01:00
Abdessamad Derraz
6ba2519c4e feat: add quick install section to readme 2026-03-28 18:09:40 +01:00
Abdessamad Derraz
8fe32103e6 feat: add install.ps1 powershell installer 2026-03-28 18:09:13 +01:00
Abdessamad Derraz
46426aa1e4 feat: add install.py universal installer engine 2026-03-28 18:07:28 +01:00
Abdessamad Derraz
42f2cc5617 fix: cross-reference resolves by path: field as fallback
Many emulator profiles use descriptive names (e.g., "SeaBIOS
(128 KB)") while files exist under their path: field basename
(e.g., "bios.bin"). Try path: when name: fails. Eliminates
206 false positives. True missing: 448 -> 242.
2026-03-28 18:06:04 +01:00
Abdessamad Derraz
7f46996b4d feat: add --manifest-targets for installer 2026-03-28 18:04:27 +01:00
Abdessamad Derraz
1a0eef563b feat: add install.sh posix bootstrap 2026-03-28 18:04:08 +01:00
Abdessamad Derraz
5763ce731d feat: add --manifest mode to generate_pack 2026-03-28 18:02:54 +01:00
Abdessamad Derraz
76fe7dd76f fix: cross-reference checks inside ZIP archives
_build_supplemental_index scans both data/ directories and
contents of bios/ ZIP files. Eliminates 197 false positives
where files existed inside archive ZIPs (neogeo.zip, pgm.zip,
stvbios.zip, etc.) but were counted as missing. True missing
drops from 645 to 448.
2026-03-28 18:00:11 +01:00
Abdessamad Derraz
c6a24446ba feat: add install metadata to platform registry 2026-03-28 17:58:05 +01:00
Abdessamad Derraz
68824bf3d4 chore: regenerate database after wave 2 collection
7545 files indexed. Cross-reference: 645 true missing (down
from 1011). All platform baselines at 100% or pre-existing
untested. Only required missing: 3 CLK Enterprise 128 ROMs.
2026-03-28 17:53:39 +01:00
Abdessamad Derraz
31ec407c91 feat: add FBNeo st010/st011/sfiii3na, PCem rivatnt, misc
sfiii3na.zip (CPS3 Asia No-CD), st010.zip and st011.zip
(SNES coprocessors) complete FBNeo required coverage.
rivatnt.bin completes PCem at 139/139. Also add QEMU
firmware (4), FM Towns Marty ROMs (4), Fuse mf1.rom,
Hatari BOOT.ST, PS1 extracts (2), ZC210 data (2).
2026-03-28 17:42:53 +01:00
Abdessamad Derraz
23dd7657aa fix: restore all emulator profiles to ground truth
Previous commit failed to fully revert fuse.yml (agent-added
MD5/SHA1 still present). Also revert qemu.yml and higan_sfc.yml.
All profiles now match their pre-collection state (2666ebd).
Emulator profiles are source-verified ground truth — agents
must never modify them without code verification.
2026-03-28 17:39:31 +01:00
Abdessamad Derraz
fea0338062 fix: revert agent modifications to fuse.yml and qemu.yml
Agents added MD5/SHA1 hashes to fuse.yml computed from downloaded
files, not from source code (ground truth violation: validation
is [size] only). Agents added firmware entries to qemu.yml without
source code verification. Profiles must reflect code, not files.
2026-03-28 17:36:39 +01:00
Abdessamad Derraz
3092d73122 fix: cross-reference checks data/ directories for false positives
_find_in_repo and _name_in_index now scan data/ in addition to
bios/ via database.json. Eliminates 129 false positives from
game data migrated to data/ (OpenTyrian, ScummVM, SDLPAL, Cave
Story, Syobon Action). True missing: 782 -> 653.
2026-03-28 17:31:22 +01:00
Abdessamad Derraz
3d5d5b601c feat: mass BIOS collection (+1020 files, 7520 total)
Add ~1500 BIOS, firmware and game data files sourced from
24 parallel agents. Migrate game engine data (ScummVM,
SDLPAL, OpenTyrian, Cave Story, Syobon Action) from bios/
to data/ via _data_dirs.yml. Add Roland MT-32/CM-32L ROMs
to bios/Roland/. Upload large files (EDK2, SDLPAL, ScummVM,
arcade ZIPs, EasyRPG soundfont) to large-files release.

New coverage: QEMU firmware (67), PCem (137), VICE (53),
Cemu Wii U (58), shadPS4 (14), Amiga (24), MAME ZIPs (724),
O2EM voice (270), Azahar 3DS (4), EightyOne ZX81 (35),
Stella KidVid (14), XRoar (12), and 77 emulators total.
2026-03-28 16:51:43 +01:00
Abdessamad Derraz
7dc8428ac1 refactor: fix cross-reference archive grouping and path resolution
Group archived files by archive unit in find_undeclared_files instead
of reporting individual ROMs. Add path-based fallback for descriptive
names (e.g. "SeaBIOS (128 KB)" resolves via path: bios.bin). Update
_collect_extras to use archive name for pack resolution. Regenerate
database with new bios files. 6 new E2E tests covering archive
in_repo, missing archives, descriptive names, and pack extras.
2026-03-28 14:00:08 +01:00
Abdessamad Derraz
1ee8623b2e feat: add 47 missing bios files and fix cross-reference false positives
Add BIOS files for CLK (Apple II, Mac, Atari ST, Enterprise, MSX,
Commodore, Thomson, PC, Acorn), FBNeo (CPS3 redearthn/sfiii2h),
and QEMU variants. Sources: Asimov mirror, MAME chip extraction,
86Box, Theodore, XRoar upstream, official QEMU repo.

Fix cross-reference in verify.py to group archived files by archive
unit instead of reporting individual ROMs as missing. Add path-based
fallback for descriptive names. Update generate_pack.py extras to
use archive name for resolution. 6 new E2E tests.

MISSING required: 321 -> 6 (zero false positives).
2026-03-28 13:59:48 +01:00
Abdessamad Derraz
543cb504bb fix: skip file/directory path conflicts in pack generation 2026-03-28 12:57:30 +01:00
Abdessamad Derraz
645dc013a4 feat: add qemu bios hash variants 2026-03-28 12:33:03 +01:00
Abdessamad Derraz
5b5b304288 feat: add dragon and coco clone bios variants 2026-03-28 12:33:02 +01:00
Abdessamad Derraz
e07842ac4b chore: add pyproject.toml for uv/pip compatibility 2026-03-28 12:33:00 +01:00
Abdessamad Derraz
366695b764 Update README.md 2026-03-28 12:12:05 +01:00
Abdessamad Derraz
460c49dbcb fix: bizhawk scraper lowercase sha1 + complete bios 2026-03-28 11:49:52 +01:00
Abdessamad Derraz
a5285a9fc0 feat: add ti83 v1.10 and doom2.wad, zero platform missing
TI-83 v1.10 ROM from TOSEC archive (sha1 verified).
DOOM II WAD from archive.org for prboom libretro core.
All platforms now at 0 missing files.
2026-03-28 11:40:06 +01:00
Abdessamad Derraz
84d344450f feat: add vice, qemu, pcem, freedoom, x16, iigs, dsi bios
VICE: basic, chargen, kernal for x64sdl libretro core.
QEMU: SeaBIOS 1.16.3 + VGA BIOS from system package.
PCem: MDA font ROM from PCem v17 ROM set.
Freedoom: freedoom1.wad + freedoom2.wad for prboom.
Commander X16: rom.bin R49 from x16-rom releases.
Apple IIGS: ROM01 from asimov mirrors.
DSi: NDS_Bios7i, NDS_Bios9i, DSi_Firmware, SGB_(JU).
2026-03-28 11:32:58 +01:00
Abdessamad Derraz
dd689bbd2a feat: add name aliases for bizhawk platform resolution
Copy existing BIOS files under BizHawk-expected names:
MCD_eu_100.bin, MCD_jp_100p.bin, PSX_DTLH2000.bin,
MSX_4000bios.rom, MSX_8020-20bios.rom.
2026-03-28 10:29:13 +01:00
Abdessamad Derraz
1f65662fd2 feat: add ~110 missing bios files from archive.org and bizhawk
Sources: emularity_bios_v1, mame-bios-0.282, mame-bios-devices,
mame251, MAME216, bizhawk-firmware-2.11.0, neogeo_bios, retrobat.

Neo Geo: neogeo.zip upgraded 6 to 38 files, ngp.zip added.
Arcade: dsp1-4, jojoa/jojoba/jojobar1, fdsbios, decocass, neocdz.
Multi-platform: 3DO, Atari 7800/Lynx, C64, Channel F, ColecoVision,
Vectrex, Intellivision, GB/GBC/GBA, NDS, N64DD, SNES DSP/Satellaview,
PC Engine CD, PC-FX, SMS, Game Gear, Mega Drive, Mega-CD, Saturn STV,
Videopac, MSX, Amiga, ZX Spectrum, TI-83.
2026-03-28 10:26:30 +01:00
Abdessamad Derraz
b854f71b44 feat: add bizhawk platform config 2026-03-28 09:45:12 +01:00
Abdessamad Derraz
2738a4d326 feat: add bizhawk scraper for FirmwareDatabase.cs 2026-03-28 09:41:52 +01:00
Abdessamad Derraz
b75f2b2a43 feat: add sha1 verification mode for bizhawk 2026-03-28 09:35:13 +01:00
Abdessamad Derraz
f1855641c5 docs: add granular pack options to tools reference 2026-03-28 09:29:31 +01:00
Abdessamad Derraz
2666ebd9b7 chore: regenerate readme and database timestamps 2026-03-28 09:24:01 +01:00
Abdessamad Derraz
22a1e7caf4 fix: sync NstDatabase.xml hashes in platform configs 2026-03-28 09:19:37 +01:00
Abdessamad Derraz
67186448a2 fix: verify and add manifests to split packs 2026-03-28 08:43:41 +01:00
Abdessamad Derraz
70891314d3 fix: include core extras in split packs 2026-03-28 08:29:37 +01:00
Abdessamad Derraz
97b9900f62 chore: update NstDatabase.xml from upstream nestopia
Closes #40
2026-03-28 08:24:13 +01:00
Abdessamad Derraz
a1aa97a70e fix: include core extras in split packs 2026-03-28 08:06:22 +01:00
Abdessamad Derraz
97b1c2c08a feat: add --from-md5 lookup and pack builder 2026-03-28 01:02:25 +01:00
Abdessamad Derraz
0624e9d87e test: add validation tests for pack arg combos 2026-03-28 00:59:02 +01:00
Abdessamad Derraz
3ded72f72b feat: add --group-by manufacturer for split packs 2026-03-28 00:45:12 +01:00
Abdessamad Derraz
94a28f5459 feat: add --split flag for per-system packs 2026-03-28 00:43:20 +01:00
Abdessamad Derraz
837ac80cca refactor: deduplicate manufacturer prefix list 2026-03-28 00:39:28 +01:00
Abdessamad Derraz
43cb7a9884 feat: allow --platform + --system combination 2026-03-28 00:36:51 +01:00
Abdessamad Derraz
020ff148c2 feat: add --required-only flag to generate_pack 2026-03-28 00:32:58 +01:00
Abdessamad Derraz
5cbd461a97 docs: update readme and database for ground truth feature 2026-03-27 23:55:30 +01:00
Abdessamad Derraz
6cbdd4c40c test: add integration tests for ground truth full chain 2026-03-27 23:41:06 +01:00
Abdessamad Derraz
37acc8d0fc feat: add --verbose flag and ground truth rendering 2026-03-27 23:38:43 +01:00
Abdessamad Derraz
2cf1398786 feat: attach ground truth to emulator verification results 2026-03-27 23:33:53 +01:00
Abdessamad Derraz
6b14b5e2b1 feat: attach ground truth to platform verification results 2026-03-27 23:30:49 +01:00
Abdessamad Derraz
6d959ff2b0 feat: add per-emulator ground truth to validation index 2026-03-27 23:25:42 +01:00
Abdessamad Derraz
3672912de7 chore: clean up sc3000 variant swap, update database 2026-03-27 22:50:54 +01:00
Abdessamad Derraz
569781c104 fix: rename misleading exclusion label in verify report 2026-03-27 22:44:05 +01:00
Abdessamad Derraz
7f265b3cb2 refactor: split pack check into baseline and cores with clear counts 2026-03-27 20:37:48 +01:00
Abdessamad Derraz
3ea1e09cb0 feat: verify core extras presence in pack alongside baseline 2026-03-27 19:41:47 +01:00
Abdessamad Derraz
89d6dd2eee feat: add platform conformance check to pack verification 2026-03-27 19:21:29 +01:00
Abdessamad Derraz
acd2daf7c1 fix: filter pattern placeholders, skip standalone exclusions for standalone platforms 2026-03-27 18:30:18 +01:00
Abdessamad Derraz
0ad8324d46 refactor: clearer verify report for core files coverage 2026-03-27 18:11:26 +01:00
Abdessamad Derraz
29749898f8 fix: correct sc3000, plus3 and plus3e hashes in platform configs 2026-03-27 17:47:39 +01:00
Abdessamad Derraz
59d7582c0e fix: swap sc3000.zip primary to batocera-compatible dump 2026-03-27 16:50:10 +01:00
Abdessamad Derraz
e94ce6b194 feat: source 10 missing bios variants for romm and retrobat coverage 2026-03-27 16:00:10 +01:00
Abdessamad Derraz
181248b6db fix: case-sensitive packs for linux platforms, remove empty bios placeholder 2026-03-27 12:58:08 +01:00
Abdessamad Derraz
a117b13b49 fix: data directory path construction avoids double slash duplicates 2026-03-27 12:42:21 +01:00
Abdessamad Derraz
8f1c7e47de fix: emudeck scraper outputs cores field, base_scraper uses generate_platform_yaml 2026-03-27 12:27:51 +01:00
Abdessamad Derraz
106130ca52 refactor: extract _norm_system_id, apply to resolve_platform_cores fallback 2026-03-27 12:23:18 +01:00
Abdessamad Derraz
79f2d82072 feat: add batocera standalone overrides for wine-dependent emulators 2026-03-27 12:18:08 +01:00
Abdessamad Derraz
c8cba9d519 fix: add beetle_supergrafx, caprice32, mess2016 aliases 2026-03-27 12:00:27 +01:00
Abdessamad Derraz
6b87c75e11 fix: add upstream buildbot aliases to 18 emulator profiles 2026-03-27 11:57:10 +01:00
Abdessamad Derraz
21fa98c82f fix: add missing buildbot aliases to avoid false target skips 2026-03-27 11:43:29 +01:00
Abdessamad Derraz
1bde69f173 fix: add mednafen_wswan alias to beetle_wswan profile 2026-03-27 11:26:47 +01:00
Abdessamad Derraz
5d6760d120 fix: populate romm target cores, normalize system IDs in filter 2026-03-27 11:15:41 +01:00
Abdessamad Derraz
17631f741c fix: normalize system IDs for target filtering cross-platform matching 2026-03-27 11:14:24 +01:00
Abdessamad Derraz
cdc71525d0 feat: add emulator profiles and update docs 2026-03-27 10:29:38 +01:00
2911 changed files with 2323951 additions and 88660 deletions

View File

@@ -58,16 +58,32 @@ jobs:
run: |
mkdir -p .cache/large
gh release download large-files -D .cache/large/ 2>/dev/null || true
for f in .cache/large/*; do
[ -f "$f" ] || continue
name=$(basename "$f")
target=$(grep "$name" .gitignore | head -1)
if [ -n "$target" ] && [ ! -f "$target" ]; then
mkdir -p "$(dirname "$target")"
cp "$f" "$target"
echo "Restored: $target"
fi
done
python3 -c "
import hashlib, json, os, shutil
db = json.load(open('database.json'))
with open('.gitignore') as f:
ignored = {l.strip() for l in f if l.strip().startswith('bios/')}
cache = '.cache/large'
if not os.path.isdir(cache):
exit(0)
idx = {}
for fn in os.listdir(cache):
fp = os.path.join(cache, fn)
if os.path.isfile(fp):
h = hashlib.sha1(open(fp, 'rb').read()).hexdigest()
idx[h] = fp
restored = 0
for sha1, entry in db['files'].items():
path = entry['path']
if path in ignored and not os.path.exists(path):
src = idx.get(sha1)
if src:
os.makedirs(os.path.dirname(path), exist_ok=True)
shutil.copy2(src, path)
print(f'Restored: {path}')
restored += 1
print(f'Total: {restored} files restored')
"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -36,6 +36,43 @@ jobs:
- run: pip install pyyaml mkdocs-material pymdown-extensions
- name: Restore large files from release
run: |
mkdir -p .cache/large
gh release download large-files -D .cache/large/ 2>/dev/null || true
python3 -c "
import hashlib, json, os, shutil
db = json.load(open('database.json'))
with open('.gitignore') as f:
ignored = {l.strip() for l in f if l.strip().startswith('bios/')}
cache = '.cache/large'
if not os.path.isdir(cache):
exit(0)
idx = {}
for fn in os.listdir(cache):
fp = os.path.join(cache, fn)
if os.path.isfile(fp):
h = hashlib.sha1(open(fp, 'rb').read()).hexdigest()
idx[h] = fp
restored = 0
for sha1, entry in db['files'].items():
path = entry['path']
if path in ignored and not os.path.exists(path):
src = idx.get(sha1)
if src:
os.makedirs(os.path.dirname(path), exist_ok=True)
shutil.copy2(src, path)
print(f'Restored: {path}')
restored += 1
print(f'Total: {restored} files restored')
"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Refresh data directories
run: python scripts/refresh_data_dirs.py
continue-on-error: true
- name: Generate site
run: |
python scripts/generate_site.py

43
.gitignore vendored
View File

@@ -29,4 +29,45 @@ data/
# Large files stored as GitHub Release assets (additional)
bios/Arcade/MAME/artwork/snspell.zip
bios/Arcade/MAME/MAME 0.174 Arcade XML.dat
bios/Sony/PlayStation Vita/.variants/PSP2UPDAT.PUP
bios/Sony/PlayStation Vita/.variants/PSP2UPDAT.PUP.3ae832c9
bios/Nintendo/DS/DSi_Nand_JPN.bin
bios/Nintendo/DS/DSi_Nand_EUR.bin
bios/Nintendo/DS/DSi_Nand_USA.bin
bios/Nintendo/DS/DSi_Nand_AUS.bin
bios/Nintendo/DS/DSi_Nand_CHN.bin
bios/Nintendo/DS/DSi_Nand_KOR.bin
bios/Nintendo/DS/dsi_nand.bin
# QEMU EDK2 firmware (64MB each)
bios/QEMU/edk2-aarch64-code.fd
bios/QEMU/edk2-arm-code.fd
bios/QEMU/edk2-arm-vars.fd
# ScummVM data bundle (79MB, fetched from large-files release)
bios/ScummVM/scummvm.zip
# Arcade BIOS ZIPs > 100MB
bios/Arcade/Arcade/svcpcb.zip
bios/Arcade/Arcade/ps2.zip
bios/Arcade/Arcade/kf2k3pcb.zip
bios/Arcade/Arcade/ms5pcb.zip
# Dolphin/Ishiiruka SD card images (128MB each)
bios/Nintendo/Wii/WiiSD.raw
bios/Nintendo/Wii/sd.raw
# EasyRPG soundfont (142MB)
bios/RPG Maker/easyrpg/easyrpg.soundfont
# Temporary files
tmp/
# FBA2012 Toaplan samples (>100MB)
bios/Arcade/fba2012/samples/fireshrk.zip
bios/Arcade/fba2012/samples/ghox.zip
bios/Arcade/fba2012/samples/samesame.zip
bios/Arcade/fba2012/samples/tekipaki.zip
bios/Arcade/fba2012/samples/vimana.zip
bios/Arcade/fba2012/samples/fireshrk.zip
bios/Arcade/fba2012/samples/samesame.zip
bios/Arcade/fba2012/samples/vimana.zip

View File

@@ -7,6 +7,16 @@
3. Variants (alternate hashes): `bios/Manufacturer/Console/.variants/`
4. Create a Pull Request - checksums are verified automatically
## Add a new platform
1. Write a scraper in `scripts/scraper/`
2. Create the platform YAML in `platforms/`
3. Register in `platforms/_registry.yml`
4. Submit a Pull Request
Contributors who add platform support are credited in the README,
on the documentation site, and in the BIOS packs.
## File conventions
- Files >50 MB go in GitHub release assets (`large-files` release)

View File

@@ -1,8 +1,25 @@
# RetroBIOS
Complete BIOS and firmware packs for Batocera, EmuDeck, Lakka, Recalbox, RetroArch, RetroBat, RetroDECK, RetroPie, and RomM.
Complete BIOS and firmware packs for Batocera, BizHawk, EmuDeck, Lakka, Recalbox, RetroArch, RetroBat, RetroDECK, RetroPie, and RomM.
**6,748** verified files across **352** systems, ready to extract into your emulator's BIOS directory.
**7,302** verified files across **396** systems, ready to extract into your emulator's BIOS directory.
## Quick Install
Copy one command into your terminal:
```bash
# Linux / macOS / Steam Deck
curl -fsSL https://raw.githubusercontent.com/Abdess/retrobios/main/install.sh | sh
# Windows (PowerShell)
irm https://raw.githubusercontent.com/Abdess/retrobios/main/install.ps1 | iex
# Handheld (SD card mounted on PC)
curl -fsSL https://raw.githubusercontent.com/Abdess/retrobios/main/install.sh | sh -s -- --platform retroarch --dest /path/to/sdcard
```
The script auto-detects your platform, downloads only missing files, and verifies checksums.
## Download BIOS packs
@@ -10,13 +27,14 @@ Pick your platform, download the ZIP, extract to the BIOS path.
| Platform | BIOS files | Extract to | Download |
|----------|-----------|-----------|----------|
| Batocera | 359 | `/userdata/bios/` | [Download](../../releases/latest) |
| Batocera | 361 | `/userdata/bios/` | [Download](../../releases/latest) |
| BizHawk | 118 | `Firmware/` | [Download](../../releases/latest) |
| EmuDeck | 161 | `Emulation/bios/` | [Download](../../releases/latest) |
| Lakka | 448 | `system/` | [Download](../../releases/latest) |
| Recalbox | 346 | `/recalbox/share/bios/` | [Download](../../releases/latest) |
| RetroArch | 448 | `system/` | [Download](../../releases/latest) |
| RetroBat | 331 | `bios/` | [Download](../../releases/latest) |
| RetroDECK | 2007 | `~/retrodeck/bios/` | [Download](../../releases/latest) |
| RetroBat | 339 | `bios/` | [Download](../../releases/latest) |
| RetroDECK | 2006 | `~/retrodeck/bios/` | [Download](../../releases/latest) |
| RetroPie | 448 | `BIOS/` | [Download](../../releases/latest) |
| RomM | 374 | `bios/{platform_slug}/` | [Download](../../releases/latest) |
@@ -25,15 +43,15 @@ Pick your platform, download the ZIP, extract to the BIOS path.
BIOS, firmware, and system files for consoles from Atari to PlayStation 3.
Each file is checked against the emulator's source code to match what the code actually loads at runtime.
- **9 platforms** supported with platform-specific verification
- **328 emulators** profiled from source (RetroArch cores + standalone)
- **352 systems** covered (NES, SNES, PlayStation, Saturn, Dreamcast, ...)
- **6,748 files** verified with MD5, SHA1, CRC32 checksums
- **5251 MB** total collection size
- **10 platforms** supported with platform-specific verification
- **329 emulators** profiled from source (RetroArch cores + standalone)
- **396 systems** covered (NES, SNES, PlayStation, Saturn, Dreamcast, ...)
- **7,302 files** verified with MD5, SHA1, CRC32 checksums
- **8765 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 318+ 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 362+ more.
Full list with per-file details: **[https://abdess.github.io/retrobios/](https://abdess.github.io/retrobios/)**
@@ -41,15 +59,16 @@ Full list with per-file details: **[https://abdess.github.io/retrobios/](https:/
| Platform | Coverage | Verified | Untested | Missing |
|----------|----------|----------|----------|---------|
| Batocera | 359/359 (100.0%) | 358 | 1 | 0 |
| Batocera | 361/361 (100.0%) | 361 | 0 | 0 |
| BizHawk | 118/118 (100.0%) | 118 | 0 | 0 |
| EmuDeck | 161/161 (100.0%) | 161 | 0 | 0 |
| Lakka | 448/448 (100.0%) | 448 | 0 | 0 |
| Recalbox | 346/346 (100.0%) | 346 | 0 | 0 |
| RetroArch | 448/448 (100.0%) | 448 | 0 | 0 |
| RetroBat | 331/331 (100.0%) | 331 | 0 | 0 |
| RetroDECK | 2007/2007 (100.0%) | 2007 | 0 | 0 |
| RetroBat | 339/339 (100.0%) | 339 | 0 | 0 |
| RetroDECK | 2006/2006 (100.0%) | 2006 | 0 | 0 |
| RetroPie | 448/448 (100.0%) | 448 | 0 | 0 |
| RomM | 374/374 (100.0%) | 359 | 15 | 0 |
| RomM | 374/374 (100.0%) | 374 | 0 | 0 |
## Build your own pack
@@ -72,6 +91,7 @@ python scripts/generate_pack.py --list-systems
python scripts/verify.py --all
python scripts/verify.py --platform batocera
python scripts/verify.py --emulator flycast
python scripts/verify.py --platform retroarch --verbose # emulator ground truth
```
Only dependency: Python 3 + `pyyaml`.
@@ -84,7 +104,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 9 platforms and 328 emulators
- **Cross-reference** mapping files across 10 platforms and 329 emulators
## How it works
@@ -110,4 +130,4 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
This repository provides BIOS files for personal backup and archival purposes.
*Auto-generated on 2026-03-26T12:17:35Z*
*Auto-generated on 2026-04-02T13:38:26Z*

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
bios/Acorn/Electron/os.rom Normal file

Binary file not shown.

BIN
bios/Amstrad/CPC/amsdos.rom Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
bios/Amstrad/CPC/os464.rom Normal file

Binary file not shown.

BIN
bios/Amstrad/CPC/os6128.rom Normal file

Binary file not shown.

BIN
bios/Amstrad/CPC/os664.rom Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,65 @@
ИИ<EFBFBD>Ш
<EFBFBD>Щ<EFBFBD>Щ<EFBFBD>Ы<EFBFBD>Ы<EFBFBD>ШШ
<EFBFBD>Щ<EFBFBD>Щ<EFBFBD>Ы<EFBFBD>ЫИ=ИИ
<EFBFBD>й<EFBFBD>й<EFBFBD>л<EFBFBD>л<EFBFBD>н<EFBFBD>и
<EFBFBD>й<EFBFBD>й<EFBFBD>л<EFBFBD>лИИИИ
ЈшЈшЈшЈшЈшЈш
ЈшЈшЈшЈшЙ§Иј
ИјИјИјИјЙ§Pј
ИјИјИјИјИИHИ
H(H(H(H(H(H(
H(H(H(H(ИЙИИ
X8X8X8X8 ЩX8
X8X8X8X8ИИИИ
hhhhhh
hhhh<18>Нxp
xxxx
-xp

View File

@@ -0,0 +1,65 @@
Ш
99;;8(
99;;-Ш8H
(H(H(H(H-H8H
(H(H(H(HШШШШ
XxXxXxXxXxXx
XxXxXxXxШШШШ
hh€hh€h€h€
hh€hh€ШНШШ
<EFBFBD><EFBFBD><EFBFBD>»<EFBFBD>»<EFBFBD>Ѕ<EFBFBD>ё
<EFBFBD><EFBFBD><EFBFBD>»<EFBFBD>»ШЩШШ
ЁИЁИЁИЁИ)YЁИ
ЁИЁИЁИЁИЩэШш
ШшШшШшШшЩэ ш
ШшШшШшШшШЭиа
и€ии€иа
и€ии€и

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
bios/Apple/Apple IIGS/ROM Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
bios/Arcade/Arcade/3do.zip Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More