Commit Graph
100 Commits
Author SHA1 Message Date
Abdessamad Derraz 74f48b8881 Add emulator profiles and update docs
Add new emulator profiles (ares, BigPEmu, Eden, Model2, PrimeHack, Supermodel, Suyu, Xenia Canary, Yuzu) under emulators/*.yml with metadata, notes, file lists and exclusion/hle details. Update README counts (emulators/systems/files summary and auto-generated timestamp) and bump generated_at in database.json. Adjust mkdocs.yml navigation counts and add Yuzu entry to the Emulators nav.
2026-03-26 13:22:11 +01:00
Abdessamad Derraz 0a1880f606 fix: filter baseline by platform-scoped cores, include retroarch cores in emudeck targets 2026-03-26 10:20:43 +01:00
Abdessamad Derraz 6402b77374 fix: filter baseline systems by target-available cores 2026-03-26 09:54:28 +01:00
Abdessamad Derraz a3de47dd88 fix: normalize core names in emudeck and retropie scrapers 2026-03-26 09:44:11 +01:00
Abdessamad Derraz 7e8491fdf7 fix: resolve upstream core names to profile keys via reverse index 2026-03-26 09:42:08 +01:00
Abdessamad Derraz bccea60f8d fix: add vita via recipe, rewrite retropie scraper via github api 2026-03-26 09:32:22 +01:00
Abdessamad Derraz 16b4dcc270 feat: rewrite retropie scraper using scriptmodules 2026-03-26 09:31:37 +01:00
Abdessamad Derraz 15e8c0eccb feat: add Vita target via libretro-super recipes 2026-03-26 09:31:34 +01:00
Abdessamad Derraz 14eaff73f7 feat: add retroarch target aliases to overrides 2026-03-26 09:25:39 +01:00
Abdessamad Derraz dfb7d9a25a fix: correct scraper paths and patterns, populate target files 2026-03-26 09:18:39 +01:00
Abdessamad Derraz 03a9fa3276 fix: batocera targets scraper es_systems path and condition parser
- Fix es_systems.yml URL (batocera-emulationstation -> batocera-es-system)
- Replace if/endif block parser with select-if condition parser that
  matches the actual Config.in structure (select PACKAGE if CONDITION)
- Add Kconfig boolean condition checker (handles &&, ||, !, parentheses)
- Add meta-flag expansion (X86_64_ANY, GLES3, ROCKCHIP_GLES3, etc.)
  iterated to fixpoint for chained derivations
- Fix es_systems.yml parser for the actual dict format with requireAnyOf
2026-03-26 09:16:06 +01:00
Abdessamad Derraz 2980100fba feat: add static target files for retrobat, retrodeck, romm 2026-03-26 08:56:00 +01:00
Abdessamad Derraz 6b86c543af feat: add emudeck and retropie target scrapers 2026-03-26 08:55:58 +01:00
Abdessamad Derraz 8e91552b16 feat: add batocera per-board emulator target scraper 2026-03-26 08:55:54 +01:00
Abdessamad Derraz c6ab8e9c3a feat: add target scraper infra and retroarch buildbot scraper 2026-03-26 08:55:50 +01:00
Abdessamad Derraz ac66f0b73b feat: add target fields to registry, create targets directory 2026-03-26 08:51:54 +01:00
Abdessamad Derraz de58f3f28e feat: add --platform and --target to cross_reference.py 2026-03-26 08:48:41 +01:00
Abdessamad Derraz 89054084b7 feat: target-aware fingerprint in group_identical_platforms 2026-03-26 08:48:40 +01:00
Abdessamad Derraz ea9cd93e83 feat: propagate --target through pipeline.py 2026-03-26 08:48:34 +01:00
Abdessamad Derraz 5ac14079d6 feat: add --target and --list-targets to generate_pack.py 2026-03-26 08:48:31 +01:00
Abdessamad Derraz 1e939f1470 feat: add --target and --list-targets to verify.py 2026-03-26 08:48:29 +01:00
Abdessamad Derraz 1c34790737 feat: propagate target_cores through find_undeclared_files, find_exclusion_notes, verify_platform, _collect_emulator_extras 2026-03-26 08:44:44 +01:00
Abdessamad Derraz e17d771710 feat: add target_cores filter to resolve_platform_cores
Optional target_cores parameter intersects the resolved core set,
enabling per-target filtering without changing existing call sites.
Includes 2 E2E tests covering intersection and None pass-through.
2026-03-26 08:42:08 +01:00
Abdessamad Derraz 0549b8945e feat: add load_target_config and list_available_targets to common.py
Loads per-platform target YAML files from platforms/targets/,
resolves aliases and applies add_cores/remove_cores from _overrides.yml.
Includes 7 E2E tests covering alias resolution, overrides, and error paths.
2026-03-26 08:41:37 +01:00
Abdessamad Derraz 8ac64d6143 docs: add build guide and documentation site section to readme
Quick start commands for generating packs by platform, emulator, or
system. Documentation site section explains what users can find there.
2026-03-26 07:15:01 +01:00
Abdessamad Derraz bbe4936cf2 feat: add 12 batocera standalone profiles, update 3 existing
New profiles: citron (Switch), clk (multi-system), demul (Hikaru),
eka2l1 (Symbian/N-Gage), gsplus (Apple IIGS), lexaloffle (PICO-8),
openmsx (MSX), ryujinx (Switch), shadps4 (PS4), tsugaru (FM Towns),
x16emu (Commander X16), xroar (Dragon/CoCo), zc210 (Zelda Classic).
Updated: amiberry, fsuae (standalone Amiga), ymir (Saturn standalone).
2026-03-26 07:01:16 +01:00
Abdessamad Derraz 3f676b75e8 feat: standalone emulator support for batocera and multi-platform name mapping
resolve_platform_cores() builds reverse index from profile cores: field,
fixing 17 name mismatches across Batocera, RetroBat, and Recalbox
(genesisplusgx, pce_fast, pcfx, vb, mame078plus, vice cores, etc.).

standalone_path field on file entries + standalone_cores on platform
YAMLs enable mode-aware pack generation. find_undeclared_files() uses
standalone_path for cores the platform runs standalone, filters by
mode: libretro/standalone per file.

batocera.yml gains standalone_cores (92 entries from configgen-defaults).
generate_readme.py dynamically lists platforms from registry.
3 profiles updated for standalone type/path (mame, hatari, mupen64plus_next).
78 E2E tests pass, pipeline verified.
2026-03-26 00:44:21 +01:00
Abdessamad Derraz 44dc946217 docs: add romm to platform references 2026-03-25 23:19:52 +01:00
Abdessamad Derraz d2cc9b8f29 feat: add doom engine wad files, emulatorjs base config 2026-03-25 23:12:53 +01:00
Abdessamad Derraz 1ad10eddb7 feat: include platform version in pack filenames 2026-03-25 18:55:35 +01:00
Abdessamad Derraz 69131f4ad1 fix: emulator validation is informational, not a platform failure 2026-03-25 17:34:56 +01:00
Abdessamad Derraz c61d40d8ef docs: rewrite readme for clarity and discoverability 2026-03-25 17:18:43 +01:00
Abdessamad Derraz 82ed2c5e62 fix: deploy-pages v5 does not exist, revert to v4 2026-03-25 16:57:01 +01:00
Abdessamad Derraz 38059e0fdf chore: regenerate database, readme, mkdocs nav 2026-03-25 16:49:49 +01:00
Abdessamad Derraz dfd8f8657c feat: re-profile 4 emulators, add ymir 2026-03-25 16:49:49 +01:00
Abdessamad Derraz 4b09205bc9 fix: zero warnings on mkdocs build, update actions to v4/v5 2026-03-25 16:30:08 +01:00
Abdessamad Derraz c5b267a6fb fix: anchor mismatches in platform and emulator index pages 2026-03-25 16:23:25 +01:00
Abdessamad Derraz 851f53ba7f refactor: extract wiki to source files, use deploy-pages action 2026-03-25 16:02:11 +01:00
Abdessamad Derraz 6e237e3b6d chore: regenerate database, readme, mkdocs nav 2026-03-25 15:54:17 +01:00
Abdessamad Derraz 9765bbc3da feat: add site deploy workflow, triggers only on content changes 2026-03-25 15:53:20 +01:00
Abdessamad Derraz 5529f8474a chore: regenerate database and readme 2026-03-25 15:41:46 +01:00
Abdessamad Derraz 8a8765c0ee feat: re-profile 9 emulators, add 9 vice machine profiles 2026-03-25 15:41:36 +01:00
Abdessamad Derraz a6150a43bd feat: group emulators by classification, slim mkdocs nav, add pymdownx extensions 2026-03-25 15:29:58 +01:00
Abdessamad Derraz 0196fff8c7 feat: improve site UX (quick start, system summary, collapsible sections, wiki index, actionable gaps) 2026-03-25 15:24:38 +01:00
Abdessamad Derraz 904edd65e4 docs: document CI workflows, inheritance, MAME clones, tests, scrapers 2026-03-25 15:14:29 +01:00
Abdessamad Derraz 02a7c58fca docs: complete wiki coverage, document all scripts and edge cases 2026-03-25 15:02:23 +01:00
Abdessamad Derraz f8a325260f feat: add wiki pages (architecture, tools, profiling, data model) 2026-03-25 14:56:37 +01:00
Abdessamad Derraz 313637663a docs: soften tone, explain methodology without dismissing other sources 2026-03-25 14:51:57 +01:00
Abdessamad Derraz 593466b655 feat: add methodology and ground truth narrative to readme and site 2026-03-25 14:50:09 +01:00
Abdessamad Derraz 23d76d54fd fix: correct rendering of complex YAML fields in site pages 2026-03-25 14:38:40 +01:00
Abdessamad Derraz 1cd43c3224 feat: exploit 100% of emulator YAML fields in site generation 2026-03-25 14:32:48 +01:00
Abdessamad Derraz b3c1462a5e feat: exploit all emulator YAML fields in site generation 2026-03-25 14:28:02 +01:00
Abdessamad Derraz 75bfd04687 feat: full cross-linking web between all site pages 2026-03-25 14:17:10 +01:00
Abdessamad Derraz 3d2762bbc3 feat: cross-reference platform -> core -> systems -> upstream 2026-03-25 14:03:36 +01:00
Abdessamad Derraz 0f4fed2f47 feat: enrich site with full YAML data, cross-references, classification stats 2026-03-25 13:56:28 +01:00
Abdessamad Derraz dbc26b11c1 refactor: move fetch_large_file to common, auto-download on db rebuild 2026-03-25 13:19:12 +01:00
Abdessamad Derraz 910428c6f1 fix: resolve large files from cache in database paths 2026-03-25 12:52:20 +01:00
Abdessamad Derraz 21465effff feat: add readme and site generation to pipeline 2026-03-25 12:34:03 +01:00
Abdessamad Derraz 3cba6b5c01 chore: disable build workflow until validated 2026-03-25 12:27:29 +01:00
Abdessamad Derraz cfec0c614f Revert "chore: disable auto-trigger on push, manual release only"
This reverts commit d4e5af2c74.
2026-03-25 12:26:39 +01:00
Abdessamad Derraz d4e5af2c74 chore: disable auto-trigger on push, manual release only 2026-03-25 12:25:44 +01:00
Abdessamad Derraz f27b3b6caf refactor: simplify build workflow, remove auto-commit 2026-03-25 12:25:13 +01:00
Abdessamad Derraz 47e6174ed4 fix: pack naming, large file preservation, discrepancy reporting 2026-03-25 12:23:40 +01:00
Abdessamad Derraz a7bcd9b252 feat: re-profile 20 emulators, add trident and vice_x128 2026-03-25 12:23:32 +01:00
Abdessamad Derraz 93b071730a fix: fallback to system tempdir for zip normalization 2026-03-25 08:38:06 +01:00
Abdessamad Derraz ebb55a445b feat: re-profile 40 emulators, harden CI workflows
profile emulators pd777 through tic80, add frozen snapshots
(puae2021, snes9x2002/2005/2010, stella2014/2023).

CI: replace github-script with gh CLI, add test execution,
job-level permissions, propagate changed output, pin jsonschema.
2026-03-25 07:00:17 +01:00
Abdessamad Derraz 0543165ed2 feat: re-profile 22 emulators, refactor validation to common.py
batch re-profiled nekop2 through pokemini. mupen64plus renamed to
mupen64plus_next. new profiles: nes, mupen64plus_next.
validation functions (_build_validation_index, check_file_validation)
consolidated in common.py — single source of truth for verify.py
and generate_pack.py. pipeline 100% consistent on all 6 platforms.
2026-03-24 22:31:22 +01:00
Abdessamad Derraz 94000bdaef fix: align verify and pack validation, pipeline 100% consistent
generate_pack.py now applies emulator-level validation (crc32, sha1,
adler32) matching verify.py behavior. existence mode: validation is
informational (file present = OK). md5 mode: validation downgrades
to UNTESTED. clone resolution moved to common.py resolve_local_file.
all 6 platforms pass consistency check.
2026-03-24 22:21:47 +01:00
Abdessamad Derraz ae4846550f fix: clone resolution in common.py, move clone map to root
moved _mame_clones.json out of bios/ (was indexed by generate_db.py
as BIOS file). clone resolution now in common.py resolve_local_file
so all tools (verify, pack, cross_reference) resolve clones
transparently. removed duplicate clone code from generate_pack.py.
added error handling on os.remove in dedup.py. consistency check
now passes for Batocera/EmuDeck/Lakka/RetroArch (4/6 platforms).
2026-03-24 21:57:49 +01:00
Abdessamad Derraz 85308edd73 fix: dedup edge cases — preserve non-ZIP different-name files
non-ZIP files with different names but same content (64DD_IPL_US.n64
vs IPL_USA.n64) are now preserved — each name may be needed by a
different emulator. only same-name duplicates and MAME ZIP clones
are removed. added empty directory cleanup post-dedup.
2026-03-24 21:39:25 +01:00
Abdessamad Derraz fb1007496d chore: deduplicate bios/ — remove 427 files, save 227 MB
true duplicates (same file in multiple dirs): removed copies, kept
canonical. MAME device clones (different names, identical content):
removed copies, created _mame_clones.json mapping for pack-time
assembly via deterministic ZIP rebuild. generate_pack.py resolves
clones transparently. 95 canonical ZIPs serve 392 clone names.
2026-03-24 21:35:50 +01:00
Abdessamad Derraz 8fcb86ba35 feat: deterministic MAME ZIP assembly in packs
all ZIP files (neogeo.zip, pgm.zip, etc.) are rebuilt with fixed
metadata before packing: sorted filenames, epoch timestamps, fixed
permissions, deflate level 9. same ROM atoms = same ZIP hash, always.
115 internal ZIPs verified identical across two independent builds.
enables version-agnostic ZIP assembly from ROM atoms indexed by CRC32.
2026-03-24 15:17:12 +01:00
Abdessamad Derraz 34e4c36f1c feat: pack integrity verification, manifests, SHA256SUMS
post-generation verification: reopen each ZIP, hash every file,
check against database.json. inject manifest.json inside each pack
(self-documenting: path, sha1, md5, size, status per file).
generate SHA256SUMS.txt alongside packs for download verification.

validation index now uses sets for hashes and sizes to support
multiple valid ROM versions (MT-32 v1.04-v2.07, CM-32L variants).
69 tests pass, pipeline complete.
2026-03-24 14:56:02 +01:00
Abdessamad Derraz 69987cc0bb feat: re-profile 30 emulators, beetle to parallel_n64
source-verified: mesen FdsBios.bin→alias, MesenDB.txt phantom (embedded).
mupen64plus 64DD_IPL.bin→IPL.n64 (code path fix). neocd 000-lo.lo/ng-lo.rom
phantoms (algorithmically generated). new profiles: mesen-s, mupen64plus
next develop/gles2/gles3. regenerate database.
2026-03-24 14:06:20 +01:00
Abdessamad Derraz cda012b10a fix: source-verified corrections from review
dosbox/dosbox_pure: added validation: [sha1, size] to MT-32 ROM
entries — MUNT rejects unrecognized SHA1 (ROMInfo.cpp:171-180).
duckstation: fixed BIOS count to 105 (24 PS1 + 80 PS2 + 1 OpenBIOS).
added exclusion_note to 6 profiles with files: [] (dosbox_svn,
dosbox_svn_ce, doukutsu_rs, emux_chip8, emux_nes, fake08).
2026-03-24 12:21:32 +01:00
Abdessamad Derraz 491ea2f9ba fix: source-verified corrections on 7 profiles
beetle_pce: +core_classification, +upstream, cores=[mednafen_pce],
alt_names→aliases. 6 files confirmed loaded by code.
mame: removed 19 phantom XaviX entries (MACHINE_IS_BIOS_ROOT commented
out in source). 80 real BIOS sets verified.
mame2010: fixed galgbios.zip source_ref, documented cheat.zip as
non-functional in libretro port (cheatpath never initialized).
ishiiruka: trimmed verbose advisory notes to factual descriptions.
mamearcade: added system: field to 29 bios_zip entries, 24 new systems.
mednafen_ngp: removed redundant cores: on alias, added note:.
mednafen_gba: normalized validation format to flow sequence.
2026-03-24 12:17:45 +01:00
Abdessamad Derraz 11db9892bf feat: add sha256 validation support to verify.py 2026-03-24 11:49:58 +01:00
Abdessamad Derraz 685713a7e6 feat: add sect233r1 ECDSA verification for 3DS OTP cert
pure python GF(2^233) field arithmetic, binary curve point operations,
and ECDSA-SHA256 on sect233r1. verifies OTP CTCert against nintendo
root CA public key. zero dependencies. sign+verify round-trip tested,
n*G=O verified, wrong key/message rejection confirmed.
2026-03-24 11:45:16 +01:00
Abdessamad Derraz ef25f8cebf feat: re-profile 40 emulators from fbalpha2012 to holani
batch re-profiled beetle, holani, kronos, mame variants, mednafen
cores with upstream verification. beetle_pce, mame, mame2010 excluded
(regressions detected, need manual review).
2026-03-24 11:36:58 +01:00
Abdessamad Derraz d4849681a7 feat: add 3DS signature/crypto verification to verify.py
pure python RSA-2048 PKCS1v15 SHA256 for SecureInfo_A,
LocalFriendCodeSeed_B, movable.sed. AES-128-CBC + SHA256 for otp.bin.
keys extracted from azahar default_keys.h, added RSA/ECC sections
to aes_keys.txt. sect233r1 ECC not reproducible (binary field curve).
2026-03-24 11:36:29 +01:00
Abdessamad Derraz 8141a34faa feat: full ground truth validation in verify.py
adler32 hash via zlib.adler32(), min_size/max_size range checks,
signature/crypto tracked as non-reproducible (console-specific keys).
compute_hashes now returns adler32. 69 tests pass including 3 new
tests for adler32, size ranges, and crypto tracking.
2026-03-24 11:11:38 +01:00
Abdessamad Derraz 470bb6ceb9 feat: support min_size/max_size validation in verify.py
reproduces ground truth size checks from emulator profiles: exact
size, min_size lower bound, max_size upper bound. all 66 tests pass.
2026-03-24 10:53:01 +01:00
Abdessamad Derraz ef365c6680 fix: restore 4 neo-geo BIOS removed by batch re-profile
trackball BIOS (236-bios.sp1, 236-bios_japan_hack.sp1) for irrmaze,
PCB BIOS (sp-4x.sp1, spj.sp1) for ms5pcb/svcpcb/kf2k3pcb. all carry
BRF_ESS flag in d_neogeo.cpp, verified against source.
2026-03-24 10:43:35 +01:00
Abdessamad Derraz 4c1caea621 feat: re-profile 40 emulators from fbalpha2012 to holani 2026-03-24 09:33:06 +01:00
Abdessamad Derraz 65b6ab9354 feat: re-profile 14 emulators, add dosbox and ep128emu_core
batch re-profiled dosbox_pure through fbalpha2012_cps1 with upstream
verification. new profiles: dosbox, ep128emu_core. regenerate database.
2026-03-23 15:04:43 +01:00
Abdessamad Derraz 7dce7499d0 feat: re-profile dosbox_core with full rom variant coverage
munt SHA1-identified rom variants (8 control + 3 cm32l + 2 pcm),
correct type: libretro, upstream to original dosbox sourceforge.
2026-03-23 12:40:03 +01:00
Abdessamad Derraz 438fb6e9af feat: re-profile 12 emulators, fix dosbox_core regression
batch re-profiled clownmdemu through dosbox_core with upstream
verification. restored dosbox_core mt-32/cm-32l rom halves removed
by batch (14 files), added core_classification. regenerate database.
2026-03-23 12:37:43 +01:00
Abdessamad Derraz 2612e9fe2d fix: restore dolphin profile files removed by batch
re-profile had incorrectly removed 25 files as "niche" or "standalone-only".
restored: wii system files, nand backup, ssl certs, realtek bt firmware,
gecko codehandler, wii system menu. kept new additions: cores, upstream,
core_classification, validation on dsp roms.
2026-03-23 12:30:26 +01:00
Abdessamad Derraz 88381b3b2c fix: remove incorrect size validation from desmume firmware.bin 2026-03-23 11:47:35 +01:00
Abdessamad Derraz 78fa5c3d0f feat: re-profile citra, regenerate database 2026-03-23 11:02:53 +01:00
Abdessamad Derraz 26f2824259 feat: re-profile 37 emulators with upstream verification
source-verified core_classification, upstream URLs, validation fields,
and hle_fallback flags. trimmed verbose notes. removed phantom files
(azahar boot9/sector0x96). added bsnes2014 variant profiles.
2026-03-23 10:58:32 +01:00
Abdessamad Derraz 06f5157c35 feat: profile mame, mame2010, mame2015, mame2016, fix aliases
source-verified BIOS root sets for all MAME cores:
- mame (0.286): 99 sets, official_port, new profile
- mame2010 (0.139): 51 sets, remove cvs.zip phantom
- mame2015 (0.160): 69 sets, replace false mame2016 alias
- mame2016 (0.174): 69 sets, fix 3 phantoms, add 2 missing
- mamearcade/mamemess: fix alias_of mame2016 to mame
2026-03-22 22:30:11 +01:00
Abdessamad Derraz 4883520dbf feat: profile mame2000, migrate bios_zips to structured files
Replace bios_zips section with structured files entries (category:
bios_zip, contents: with name/description/size/crc32) across all 4
MAME profiles. Profile mame2000 from source (was false alias of
mame2003_plus). Adds neogeo.zip, decocass.zip, hiscore.dat, cheat.dat.
2026-03-22 19:57:30 +01:00
Abdessamad Derraz c342b61cdf feat: profile jumpnbump, kronos, lowresnx, lutro, m2000
add core_classification and upstream to all five profiles. kronos:
add ROM cartridge files (mpr-18811-mx.ic1, mpr-19367-mx.ic1), add
archive: field to STV blobs, remove unverified MD5 hashes, fix
cores list (remove yabause_libretro). jumpnbump: fix incorrect
note about embedded data. lowresnx, lutro, m2000: add missing
classification fields.
2026-03-22 14:39:47 +01:00
Abdessamad Derraz 1d350f0578 feat: add emulator/system pack generation, validation checks, path resolution
add --emulator, --system, --standalone, --list-emulators, --list-systems
to verify.py and generate_pack.py. packs are RTU with data directories,
regional BIOS variants, and archive support.

validation: field per file (size, crc32, md5, sha1) with conflict
detection. by_path_suffix index in database.json for regional variant
resolution via dest_hint. restructure GameCube IPL to regional subdirs.

66 E2E tests, full pipeline verified.
2026-03-22 14:02:20 +01:00
Abdessamad Derraz d2adde9846 feat: update 47 emulator profiles with core_classification and fixes
add core_classification, cores, upstream fields. fix false aliases
(fixnes, fsuae, gearboy, higan_sfc, higan_sfc_balanced, potator,
quicknes). add new profiles (fbneo_neogeo, flycast_gles2,
genesis_plus_gx_wide). remove verbose notes and disclaimers.
2026-03-22 14:01:38 +01:00
Abdessamad Derraz 74f17694c2 feat: add category field to emulator profiles, source missing BIOS
Add category: game_data to sdlpal, nxengine, opentyrian, easyrpg,
mkxp_z profiles. verify.py separates game_data from bios in core
gap metrics for cleaner coverage numbers.

New BIOS files: Cemu fonts (4), QEMU bios-256k + vgabios-stdvga,
GAM4980 ROMs (2), SC-3000 Export variant.
2026-03-21 07:37:22 +01:00
Abdessamad Derraz 13a2938dc7 fix: correct 338 retrodeck hashes (sha1 truncation + stale mame 0.285) 2026-03-20 23:40:09 +01:00
Abdessamad Derraz 27df5c8fb5 fix: resolve case collisions on case-insensitive filesystems
Move 17 case-colliding BIOS variants to .variants/ so Windows
and macOS clones no longer lose files. Existence-based platforms
keep the primary, MD5-based platforms resolve from .variants/.

Also fix resolve_local_file zipped_file resolution: when multiple
ZIPs share a name, verify the inner ROM exists before accepting
a candidate. Fixes adam_fdc.zip resolving to the wrong archive.
2026-03-20 20:02:42 +01:00
Abdessamad Derraz 30c104ac8e fix: correct Jaguar BIOS MD5 in retrodeck platform 2026-03-20 13:05:09 +01:00