From 3f676b75e8ac5786688c27b6c35bcb7937496aca Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Thu, 26 Mar 2026 00:44:21 +0100 Subject: [PATCH] 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. --- README.md | 12 +- database.json | 2 +- emulators/beetle_pcfx.yml | 2 +- emulators/beetle_vb.yml | 2 +- emulators/bsnes_hd_beta.yml | 2 +- emulators/clk.yml | 1248 +++++++++++++++++++++++++++ emulators/genesis_plus_gx.yml | 1 + emulators/genesis_plus_gx_wide.yml | 1 + emulators/hatari.yml | 2 +- emulators/mame.yml | 2 +- emulators/mame2003_plus.yml | 1 + emulators/mednafen_pce_fast.yml | 2 +- emulators/mesen-s.yml | 2 +- emulators/mupen64plus_next.yml | 3 +- emulators/opentyrian.yml | 2 +- emulators/vice_x128.yml | 2 +- emulators/vice_x64.yml | 2 +- emulators/vice_xcbm2.yml | 2 +- emulators/vice_xcbm5x0.yml | 2 +- emulators/vice_xpet.yml | 2 +- emulators/vice_xplus4.yml | 2 +- emulators/vice_xscpu64.yml | 2 +- emulators/vice_xvic.yml | 2 +- mkdocs.yml | 3 +- platforms/batocera.yml | 81 ++ scripts/common.py | 17 +- scripts/generate_pack.py | 2 +- scripts/generate_readme.py | 5 +- scripts/scraper/batocera_scraper.py | 26 +- scripts/verify.py | 20 +- tests/test_e2e.py | 78 ++ 31 files changed, 1492 insertions(+), 40 deletions(-) create mode 100644 emulators/clk.yml diff --git a/README.md b/README.md index f70e52f6..d22a81c7 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # RetroBIOS -Complete BIOS and firmware packs for RetroArch, Batocera, Recalbox, Lakka, RetroPie, EmuDeck, RetroBat, RetroDECK, and RomM. +Complete BIOS and firmware packs for Batocera, EmuDeck, Lakka, Recalbox, RetroArch, RetroBat, RetroDECK, RetroPie, and RomM. -**6,748** verified files across **294** systems, ready to extract into your emulator's BIOS directory. +**6,748** verified files across **305** systems, ready to extract into your emulator's BIOS directory. ## Download BIOS packs @@ -26,14 +26,14 @@ 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 -- **306 emulators** profiled from source (RetroArch cores + standalone) -- **294 systems** covered (NES, SNES, PlayStation, Saturn, Dreamcast, ...) +- **307 emulators** profiled from source (RetroArch cores + standalone) +- **305 systems** covered (NES, SNES, PlayStation, Saturn, Dreamcast, ...) - **6,748 files** verified with MD5, SHA1, CRC32 checksums - **5251 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 260+ 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 271+ more. Full list with per-file details: **[https://abdess.github.io/retrobios/](https://abdess.github.io/retrobios/)** @@ -79,4 +79,4 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. This repository provides BIOS files for personal backup and archival purposes. -*Auto-generated on 2026-03-25T22:12:06Z* +*Auto-generated on 2026-03-25T23:43:15Z* diff --git a/database.json b/database.json index 2b8f001e..006477a4 100644 --- a/database.json +++ b/database.json @@ -1,5 +1,5 @@ { - "generated_at": "2026-03-25T22:06:53Z", + "generated_at": "2026-03-25T23:42:57Z", "total_files": 6748, "total_size": 5505760050, "files": { diff --git a/emulators/beetle_pcfx.yml b/emulators/beetle_pcfx.yml index 04483080..57e9d219 100644 --- a/emulators/beetle_pcfx.yml +++ b/emulators/beetle_pcfx.yml @@ -1,7 +1,7 @@ emulator: Beetle PC-FX (Mednafen) type: libretro core_classification: community_fork -cores: [mednafen_pcfx] +cores: [mednafen_pcfx, pcfx] source: "https://github.com/libretro/beetle-pcfx-libretro" upstream: "https://mednafen.github.io/" profiled_date: "2026-03-24" diff --git a/emulators/beetle_vb.yml b/emulators/beetle_vb.yml index 57bd0345..0e6158b7 100644 --- a/emulators/beetle_vb.yml +++ b/emulators/beetle_vb.yml @@ -6,7 +6,7 @@ upstream: "https://mednafen.github.io/" profiled_date: "2026-03-24" core_version: "v0.9.36.1" display_name: "Nintendo - Virtual Boy (Beetle VB)" -cores: [mednafen_vb] +cores: [mednafen_vb, vb] systems: [nintendo-virtualboy] notes: | diff --git a/emulators/bsnes_hd_beta.yml b/emulators/bsnes_hd_beta.yml index dca7c56a..580102f0 100644 --- a/emulators/bsnes_hd_beta.yml +++ b/emulators/bsnes_hd_beta.yml @@ -6,7 +6,7 @@ upstream: "https://github.com/bsnes-emu/bsnes" profiled_date: "2026-03-23" core_version: "v10.6" display_name: "Nintendo - SNES / SFC (bsnes-hd beta)" -cores: [bsnes_hd_beta] +cores: [bsnes_hd_beta, bsneshd] systems: - nintendo-snes - nintendo-sgb diff --git a/emulators/clk.yml b/emulators/clk.yml new file mode 100644 index 00000000..b2accfde --- /dev/null +++ b/emulators/clk.yml @@ -0,0 +1,1248 @@ +emulator: Clock Signal (CLK) +type: standalone +source: "https://github.com/TomHarte/CLK" +upstream: "https://github.com/TomHarte/CLK" +profiled_date: "2026-03-26" +core_version: "2026-03-25" +display_name: "Clock Signal" +cores: [clk] +systems: + - amstrad-cpc + - acorn-archimedes + - acorn-electron + - acorn-bbc-micro + - amiga + - apple-ii + - apple-iigs + - apple-macintosh + - atari-2600 + - atari-st + - colecovision + - commodore-plus4 + - commodore-vic20 + - enterprise-64-128 + - microsoft-msx + - microsoft-msx2 + - oric + - pc-compatible + - sega-mastersystem + - sinclair-zx80-81 + - sinclair-zx-spectrum + - thomson-mo5 + +notes: | + Multi-system cycle-accurate emulator by Tom Harte. Used by Batocera and + RetroBat as a standalone emulator. Invoked as clksignal with --rompath + pointing to the BIOS directory. + + ROM resolution: {rompath}/{machine_name}/{filename}. Machine names are + fixed strings per system (e.g. "Enterprise", "Oric", "AmstradCPC"). + Batocera passes --rompath=/userdata/bios/. + + All ROMs are loaded via a centralized ROM::Request/ROMFetcher system. + No hash validation at runtime. CRC32s in the ROM catalogue are for host + platform identification only. Sizes are enforced via truncation/padding. + + Built-in ROMs (compiled into binary, no external file needed): + Amstrad CPC (all 7), ZX Spectrum (all 4), ZX80 + ZX81. These systems + function without external ROM files. User-supplied files override the + built-in copies. + + Atari 2600 requires no system ROM (cartridge-only). + +files: + # ------------------------------------------------------- + # Acorn Archimedes (machine_name: "Archimedes") + # ------------------------------------------------------- + - name: ROM311 + path: Archimedes/ROM311 + description: "RISC OS v3.11" + size: 2097152 + crc32: "54c0c963" + required: true + mode: standalone + source_ref: "Machines/Acorn/Archimedes/Archimedes.cpp:120-121,Machines/Utility/ROMCatalogue.cpp:59-65" + + # ------------------------------------------------------- + # Acorn BBC Micro (machine_name: "BBCMicro") + # ------------------------------------------------------- + - name: basic.rom + path: Acorn/basic.rom + description: "Acorn BASIC II ROM, shared by BBC Micro and Electron" + size: 16384 + crc32: "79434781" + required: true + aliases: [basic2.rom] + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:79-85" + + - name: os12.rom + path: BBCMicro/os12.rom + description: "BBC MOS v1.2" + size: 16384 + crc32: "3c14fc70" + required: true + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:426-432" + + - name: dfs09.rom + path: BBCMicro/dfs09.rom + description: "Acorn 8271 DFS 0.9 ROM" + size: 8192 + crc32: "3ce609cf" + required: false + note: "Conditional: only when using 8271 disk interface" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:434-440" + + - name: dfs-2.26.rom + path: BBCMicro/dfs-2.26.rom + description: "Acorn 1770 DFS 2.26 ROM" + size: 16384 + crc32: "5ae33e94" + required: false + note: "Conditional: needed for 1770 DFS or tube processor" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:442-448" + + - name: adfs-1.30.rom + path: BBCMicro/adfs-1.30.rom + description: "Acorn ADFS 1.30 ROM" + size: 16384 + crc32: "d3855588" + required: false + note: "Conditional: needed for ADFS support" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:450-456" + + - name: ADT-1.40.rom + path: BBCMicro/ADT-1.40.rom + description: "Advanced Disc Toolkit 1.40 ROM" + size: 16384 + crc32: "8314fed0" + required: false + note: "Optional: fetched separately, silently skipped if absent" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:458-464" + + - name: TUBE110.rom + path: BBCMicro/TUBE110.rom + description: "6502 Tube 1.10 Boot ROM" + size: 2048 + crc32: "9ec2dbd0" + required: false + note: "Conditional: needed for 6502 tube processor" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:466-472" + + - name: Z80_122.rom + path: BBCMicro/Z80_122.rom + description: "Z80 Tube 1.22 Boot ROM" + size: 4096 + crc32: "b5851efc" + required: false + note: "Conditional: needed for Z80 tube processor" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:474-480" + + # ------------------------------------------------------- + # Acorn Electron (machine_name: "Electron") + # ------------------------------------------------------- + - name: basic.rom + path: Electron/basic.rom + description: "Acorn BASIC II ROM (Electron copy)" + size: 16384 + crc32: "79434781" + required: true + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:91-97" + + - name: os.rom + path: Electron/os.rom + description: "Electron MOS ROM v1.00" + size: 16384 + crc32: "bf63fb1f" + required: true + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:148-153" + + - name: ADFS-E00_1.rom + path: Electron/ADFS-E00_1.rom + description: "E00 ADFS ROM, first slot" + size: 16384 + crc32: "51523993" + required: false + note: "Conditional: needed for PRES ADFS" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:99-105" + + - name: ADFS-E00_2.rom + path: Electron/ADFS-E00_2.rom + description: "E00 ADFS ROM, second slot" + size: 16384 + crc32: "8d17de0e" + required: false + note: "Conditional: needed for PRES ADFS" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:107-113" + + - name: adfs.rom + path: Electron/adfs.rom + description: "Acorn ADFS ROM" + size: 16384 + crc32: "3289bdc6" + required: false + note: "Conditional: needed for Acorn ADFS" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:115-121" + + - name: DFS-1770-2.20.rom + path: Electron/DFS-1770-2.20.rom + description: "1770 DFS ROM" + size: 16384 + crc32: "f3dc9bc5" + required: false + note: "Conditional: needed for DFS disk images" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:123-129" + + - name: ELK130E.rom + path: Electron/ELK130E.rom + description: "IDE-modified ADFS 1.03 ROM" + size: 16384 + crc32: "a923368d" + required: false + note: "Conditional: needed for IDE interface" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:131-137" + + - name: AP6v133.rom + path: Electron/AP6v133.rom + description: "Advanced Plus 6 ROM" + size: 8192 + crc32: "e0013cfc" + required: false + note: "Conditional: needed for AP6 commands" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:139-145" + + # ------------------------------------------------------- + # Amiga (machine_name: "Amiga") + # ------------------------------------------------------- + - name: Kickstart-v1.3-rev34.5-1987-Commodore-A500-A1000-A2000-CDTV.rom + path: Amiga/Kickstart-v1.3-rev34.5-1987-Commodore-A500-A1000-A2000-CDTV.rom + description: "A500/A1000/A2000/CDTV Kickstart 1.3 ROM" + size: 262144 + crc32: "c4f0f55f" + required: true + mode: standalone + source_ref: "Machines/Amiga/Amiga.cpp:60-61,Machines/Utility/ROMCatalogue.cpp:183-189" + + # ------------------------------------------------------- + # Amstrad CPC (machine_name: "AmstradCPC") + # Built into binary; external files override built-in copies + # ------------------------------------------------------- + - name: os464.rom + path: AmstradCPC/os464.rom + description: "CPC 464 firmware" + size: 16384 + crc32: "815752df" + required: false + note: "Built into binary. Required for CPC 464 model." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:251-256,Machines/Utility/ROMLibrary.cpp:14535" + + - name: basic464.rom + path: AmstradCPC/basic464.rom + description: "CPC 464 BASIC ROM" + size: 16384 + crc32: "7d9a3bac" + required: false + note: "Built into binary. Required for CPC 464 model." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:258-265,Machines/Utility/ROMLibrary.cpp:14532" + + - name: os664.rom + path: AmstradCPC/os664.rom + description: "CPC 664 firmware" + size: 16384 + crc32: "3f5a6dc4" + required: false + note: "Built into binary. Required for CPC 664 model." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:267-271,Machines/Utility/ROMLibrary.cpp:14536" + + - name: basic664.rom + path: AmstradCPC/basic664.rom + description: "CPC 664 BASIC ROM" + size: 16384 + crc32: "32fee492" + required: false + note: "Built into binary. Required for CPC 664 model." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:273-280,Machines/Utility/ROMLibrary.cpp:14534" + + - name: os6128.rom + path: AmstradCPC/os6128.rom + description: "CPC 6128 firmware" + size: 16384 + crc32: "0219bb74" + required: false + note: "Built into binary. Required for CPC 6128 model." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:282-288,Machines/Utility/ROMLibrary.cpp:14536" + + - name: basic6128.rom + path: AmstradCPC/basic6128.rom + description: "CPC 6128 BASIC ROM" + size: 16384 + crc32: "ca6af63d" + required: false + note: "Built into binary. Required for CPC 6128 model." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:290-296,Machines/Utility/ROMLibrary.cpp:14533" + + - name: amsdos.rom + path: AmstradCPC/amsdos.rom + description: "Amstrad Disk Operating System" + size: 16384 + crc32: "1fe22ecd" + required: false + note: "Built into binary. Needed for CPC 664/6128 disk support." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:243-249,Machines/Utility/ROMLibrary.cpp:14531" + + # ------------------------------------------------------- + # Apple II (machine_name: "AppleII") + # ------------------------------------------------------- + - name: apple2o.rom + path: AppleII/apple2o.rom + description: "Original Apple II ROM" + size: 12288 + crc32: "ba210588" + required: true + note: "Required for original Apple II model" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:326-332" + + - name: apple2.rom + path: AppleII/apple2.rom + description: "Apple II+ ROM" + size: 12288 + crc32: "f66f9c26" + required: true + note: "Required for Apple II+ model" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:318-324" + + - name: apple2eu.rom + path: AppleII/apple2eu.rom + description: "Apple IIe ROM" + size: 32768 + crc32: "e12be18d" + required: true + note: "Required for Apple IIe model" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:310-316" + + - name: apple2e.rom + path: AppleII/apple2e.rom + description: "Enhanced Apple IIe ROM" + size: 32768 + crc32: "65989942" + required: true + note: "Required for Enhanced IIe model" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:302-308" + + - name: apple2-character.rom + path: AppleII/apple2-character.rom + description: "Apple II/II+ character ROM" + size: 2048 + crc32: "64f415c6" + required: true + note: "Required for Apple II and II+ models" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:334-340" + + - name: apple2eu-character.rom + path: AppleII/apple2eu-character.rom + description: "Apple IIe character ROM" + size: 4096 + crc32: "816a86f1" + required: true + note: "Required for Apple IIe model" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:342-348" + + - name: apple2e-character.rom + path: AppleII/apple2e-character.rom + description: "Enhanced Apple IIe character ROM" + size: 4096 + crc32: "2651014d" + required: true + note: "Required for Enhanced IIe model. Also used by Apple IIgs." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:350-356" + + - name: scsi.rom + path: AppleII/scsi.rom + description: "Apple II SCSI card ROM" + size: 16384 + crc32: "5aff85d3" + required: false + note: "Conditional: needed for SCSI controller" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:358-364" + + # ------------------------------------------------------- + # Apple IIgs (machine_name: "AppleIIgs") + # ------------------------------------------------------- + - name: apple2gs.rom + path: AppleIIgs/apple2gs.rom + description: "Apple IIgs ROM01" + size: 131072 + crc32: "42f124b0" + required: true + note: "Required for ROM01 model" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:370-376" + + - name: apple2gs.rom2 + path: AppleIIgs/apple2gs.rom2 + description: "Apple IIgs ROM03" + size: 262144 + crc32: "de7ddf29" + required: true + note: "Required for ROM03 model (default)" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:378-384" + + - name: apple2gs.chr + path: AppleIIgs/apple2gs.chr + description: "Apple IIgs character ROM" + size: 4096 + crc32: "91e53cd8" + required: true + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:386-392" + + - name: "341s0632-2" + path: "AppleIIgs/341s0632-2" + description: "Apple IIgs ROM03 ADB microcontroller ROM" + size: 4096 + crc32: "e1c11fb0" + required: true + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:394-399" + + # ------------------------------------------------------- + # Atari ST (machine_name: "AtariST") + # ------------------------------------------------------- + - name: tos100.img + path: AtariST/tos100.img + description: "UK TOS 1.00 ROM" + size: 196608 + crc32: "1a586c64" + required: true + mode: standalone + source_ref: "Machines/Atari/ST/AtariST.cpp:96-97,Machines/Utility/ROMCatalogue.cpp:406-412" + + # ------------------------------------------------------- + # ColecoVision (machine_name: "ColecoVision") + # ------------------------------------------------------- + - name: coleco.rom + path: ColecoVision/coleco.rom + description: "ColecoVision BIOS" + size: 8192 + crc32: "3aa93ef3" + required: true + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:486-492" + + # ------------------------------------------------------- + # Commodore 1540/1541 (machine_name: "Commodore1540") + # Peripheral disk drive ROMs, used by VIC-20 and Plus/4 + # ------------------------------------------------------- + - name: 1540.bin + path: Commodore1540/1540.bin + description: "Commodore 1540 floppy drive ROM" + size: 16384 + crc32: "718d42b1" + required: false + note: "Conditional: needed when VIC-20 has 1540 drive" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:498-504" + + - name: 1541.bin + path: Commodore1540/1541.bin + description: "Commodore 1541 floppy drive ROM" + size: 16384 + crc32: "fb760019" + required: false + note: "Conditional: needed when Plus/4 has 1541 drive" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:506-512" + + # ------------------------------------------------------- + # Disk II (machine_name: "DiskII") + # Peripheral ROMs, used by Apple II and Oric Pravetz + # ------------------------------------------------------- + - name: boot-16.rom + path: DiskII/boot-16.rom + description: "Disk II 16-sector boot ROM" + size: 256 + crc32: "ce7144f6" + required: false + note: "Conditional: needed for 16-sector disk controller" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:518-524" + + - name: state-machine-16.rom + path: DiskII/state-machine-16.rom + description: "Disk II 16-sector state machine ROM" + size: 256 + crc32: "9796a238" + required: false + note: "Conditional: needed for disk controller. Also used by Oric Pravetz." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:526-532" + + - name: boot-13.rom + path: DiskII/boot-13.rom + description: "Disk II 13-sector boot ROM" + size: 256 + crc32: "d34eb2ff" + required: false + note: "Conditional: needed for 13-sector disk controller" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:534-540" + + - name: state-machine-13.rom + path: DiskII/state-machine-13.rom + description: "Disk II 13-sector state machine ROM" + size: 256 + crc32: "62e22620" + required: false + note: "Conditional: needed for 13-sector disk controller" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:542-548" + + # ------------------------------------------------------- + # Enterprise 64/128 (machine_name: "Enterprise") + # ------------------------------------------------------- + - name: exos10.bin + path: Enterprise/exos10.bin + description: "Enterprise EXOS ROM v1.0" + size: 32768 + crc32: "30b26387" + required: true + aliases: ["Exos (198x)(Enterprise).bin"] + note: "One EXOS version required. Selected by target or any available." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:554-563" + + - name: exos20.bin + path: Enterprise/exos20.bin + description: "Enterprise EXOS ROM v2.0" + size: 32768 + crc32: "d421795f" + required: true + aliases: ["Expandible OS v2.0 (1984)(Intelligent Software).bin"] + note: "Alternative EXOS version" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:565-574" + + - name: exos21.bin + path: Enterprise/exos21.bin + description: "Enterprise EXOS ROM v2.1" + size: 32768 + crc32: "982a3b44" + required: true + aliases: ["Expandible OS v2.1 (1985)(Intelligent Software).bin"] + note: "Alternative EXOS version" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:576-585" + + - name: exos23.bin + path: Enterprise/exos23.bin + description: "Enterprise EXOS ROM v2.3" + size: 65536 + crc32: "24838410" + required: true + aliases: ["Expandible OS v2.3 (1987)(Intelligent Software).bin"] + note: "Alternative EXOS version" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:587-596" + + - name: basic10.bin + path: Enterprise/basic10.bin + description: "Enterprise BASIC ROM v1.0" + size: 16384 + crc32: "d62e4fb7" + required: true + note: "One BASIC version required. v1.0 single-file version." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:599-605" + + - name: "BASIC 1.0 - EPROM 1-2 (198x)(Enterprise).bin" + path: "Enterprise/BASIC 1.0 - EPROM 1-2 (198x)(Enterprise).bin" + description: "Enterprise BASIC ROM v1.0, Part 1" + size: 8193 + crc32: "37bf48e1" + required: false + note: "Alternative: both parts needed together as substitute for basic10.bin" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:607-613" + + - name: "BASIC 1.0 - EPROM 2-2 (198x)(Enterprise).bin" + path: "Enterprise/BASIC 1.0 - EPROM 2-2 (198x)(Enterprise).bin" + description: "Enterprise BASIC ROM v1.0, Part 2" + size: 8193 + crc32: "c5298c79" + required: false + note: "Alternative: both parts needed together as substitute for basic10.bin" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:615-621" + + - name: basic11.bin + path: Enterprise/basic11.bin + description: "Enterprise BASIC ROM v1.1" + size: 16384 + crc32: "683cf455" + required: true + note: "Alternative BASIC version" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:623-629" + + - name: "BASIC 1.1 - EPROM 1.1 (198x)(Enterprise).bin" + path: "Enterprise/BASIC 1.1 - EPROM 1.1 (198x)(Enterprise).bin" + description: "Enterprise BASIC ROM v1.1, with trailing byte" + size: 16385 + crc32: "c96b7602" + required: false + note: "Alternative format of BASIC v1.1 with trailing byte" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:631-637" + + - name: basic21.bin + path: Enterprise/basic21.bin + description: "Enterprise BASIC ROM v2.1" + size: 16384 + crc32: "55f96251" + required: true + aliases: + - "BASIC Interpreter v2.1 (1985)(Intelligent Software).bin" + - "BASIC Interpreter v2.1 (1985)(Intelligent Software)[a].bin" + note: "Alternative BASIC version" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:639-649" + + - name: epdos.bin + path: Enterprise/epdos.bin + description: "Enterprise EPDOS ROM" + size: 32768 + crc32: "201319eb" + required: false + aliases: ["EPDOS v1.7 (19xx)(Haluska, Laszlo).bin"] + note: "Conditional: needed for EPDOS disk interface" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:651-661" + + - name: exdos.bin + path: Enterprise/exdos.bin + description: "Enterprise EXDOS ROM" + size: 16384 + crc32: "e6daa0e9" + required: false + aliases: ["EX-DOS EPROM (198x)(Enterprise).bin"] + note: "Conditional: needed when DOS is set to EXDOS" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:663-672" + + # ------------------------------------------------------- + # Apple Macintosh (machine_name: "Macintosh") + # ------------------------------------------------------- + - name: mac128k.rom + path: Macintosh/mac128k.rom + description: "Macintosh 128k ROM" + size: 65536 + crc32: "6d0c8a28" + required: true + note: "Required for Macintosh 128k model" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:678-684" + + - name: mac512k.rom + path: Macintosh/mac512k.rom + description: "Macintosh 512k ROM" + size: 65536 + crc32: "cf759e0d" + required: true + note: "Required for Macintosh 512k model" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:686-692" + + - name: macplus.rom + path: Macintosh/macplus.rom + description: "Macintosh Plus ROM" + size: 131072 + crc32: "4fa5b399" + required: true + note: "Required for Macintosh 512ke and Plus models" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:694-704" + + # ------------------------------------------------------- + # Master System (machine_name: "MasterSystem") + # ------------------------------------------------------- + - name: bios.sms + path: MasterSystem/bios.sms + description: "European/US Master System BIOS" + size: 8192 + crc32: "0072ed54" + required: false + note: "Optional. Boots cartridge directly if absent." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:718-724" + + - name: japanese-bios.sms + path: MasterSystem/japanese-bios.sms + description: "Japanese Master System BIOS" + size: 8192 + crc32: "48d44a13" + required: false + note: "Optional. Used for Japan region. Boots without if absent." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:710-716" + + # ------------------------------------------------------- + # MSX (machine_name: "MSX") + # ------------------------------------------------------- + - name: msx.rom + path: MSX/msx.rom + description: "Generic MSX BIOS" + size: 32768 + crc32: "94ee12f3" + required: true + note: "Required for MSX1. Region bytes patched in memory if regional BIOS absent." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:731-737" + + - name: msx-japanese.rom + path: MSX/msx-japanese.rom + description: "Japanese MSX BIOS" + size: 32768 + crc32: "ee229390" + required: false + note: "Alternative to msx.rom for Japanese region" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:739-745" + + - name: msx-american.rom + path: MSX/msx-american.rom + description: "American MSX BIOS" + size: 32768 + required: false + note: "Alternative to msx.rom for American region" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:747-753" + + - name: msx-european.rom + path: MSX/msx-european.rom + description: "European MSX BIOS" + size: 32768 + required: false + note: "Alternative to msx.rom for European region" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:755-761" + + - name: disk.rom + path: MSX/disk.rom + description: "MSX-DOS ROM" + size: 16384 + crc32: "721f61df" + required: false + note: "Conditional: needed for disk drive support" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:763-769" + + - name: msx2.rom + path: MSX/msx2.rom + description: "Generic MSX2 BIOS" + size: 32768 + crc32: "6cdaf3a5" + required: true + note: "Required for MSX2" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:771-778" + + - name: msx2ext.rom + path: MSX/msx2ext.rom + description: "MSX2 extension ROM" + size: 16384 + crc32: "66237ecf" + required: true + note: "Required for MSX2" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:780-786" + + - name: fmpac.rom + path: MSX/fmpac.rom + description: "MSX-MUSIC / FM-PAC ROM" + size: 65536 + crc32: "0e84505d" + required: false + note: "Conditional: needed for MSX-Music support" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:788-794" + + # ------------------------------------------------------- + # Oric (machine_name: "Oric") + # ------------------------------------------------------- + - name: basic10.rom + path: Oric/basic10.rom + description: "Oric BASIC 1.0" + size: 16384 + crc32: "f18710b4" + required: true + note: "Required for Oric-1 model" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:824-830" + + - name: basic11.rom + path: Oric/basic11.rom + description: "Oric BASIC 1.1" + size: 16384 + crc32: "c3a92bef" + required: true + note: "Required for Oric Atmos model" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:832-838" + + - name: pravetz.rom + path: Oric/pravetz.rom + description: "Pravetz BASIC" + size: 16384 + crc32: "58079502" + required: true + note: "Required for Pravetz 8D model" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:840-846" + + - name: colour.rom + path: Oric/colour.rom + description: "Oric colour ROM (128-byte version)" + size: 128 + crc32: "d50fca65" + required: false + note: "Optional. Enables colour video output." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:800-806" + + - name: ORIC.PAL-PROM-TBP24S10-1ab9b572.bin + path: Oric/ORIC.PAL-PROM-TBP24S10-1ab9b572.bin + description: "Oric colour ROM (256-byte version)" + size: 256 + crc32: "1ab9b572" + required: false + note: "Optional. Alternative colour ROM." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:808-814" + + - name: PRAVETZ-8D.PAL-PROM-82S129-1576a69b.bin + path: Oric/PRAVETZ-8D.PAL-PROM-82S129-1576a69b.bin + description: "Pravetz 8D colour ROM" + size: 256 + crc32: "1576a69b" + required: false + note: "Optional. Colour ROM for Pravetz model." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:816-822" + + - name: bd500.rom + path: Oric/bd500.rom + description: "Oric Byte Drive 500 ROM" + size: 8192 + crc32: "61952e34" + required: false + note: "Conditional: needed for Byte Drive 500 disk interface" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:848-854" + + - name: jasmin.rom + path: Oric/jasmin.rom + description: "Oric Jasmin ROM" + size: 2048 + crc32: "37220e89" + required: false + note: "Conditional: needed for Jasmin disk interface" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:856-862" + + - name: microdisc.rom + path: Oric/microdisc.rom + description: "Oric Microdisc ROM" + size: 8192 + crc32: "a9664a9c" + required: false + note: "Conditional: needed for Microdisc disk interface" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:864-870" + + - name: 8dos.rom + path: Oric/8dos.rom + description: "8DOS boot ROM" + size: 512 + crc32: "49a74c06" + required: false + note: "Conditional: needed for Pravetz 8-DOS disk interface" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:872-878" + + # ------------------------------------------------------- + # PC Compatible (machine_name: "PCCompatible") + # ------------------------------------------------------- + - name: GLABIOS_0.2.5_8T.ROM + path: PCCompatible/GLABIOS_0.2.5_8T.ROM + description: "8088 GLaBIOS 0.2.5" + size: 8192 + crc32: "9576944c" + required: true + note: "Required for XT-class emulation" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:884-890" + + - name: GLaTICK_0.8.5_AT.ROM + path: PCCompatible/GLaTICK_0.8.5_AT.ROM + description: "AT GLaTICK 0.8.5 RTC option ROM" + size: 2048 + crc32: "371ea3f1" + required: false + note: "XT-class RTC option ROM" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:892-898" + + - name: "Phoenix 80286 ROM BIOS Version 3.05.bin" + path: "PCCompatible/Phoenix 80286 ROM BIOS Version 3.05.bin" + description: "Phoenix 80286 BIOS 3.05" + size: 32768 + crc32: "8d0d318a" + required: true + note: "Required for AT-class emulation (alternative to IBM AT BIOS)" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:900-906" + + - name: at-bios.bin + path: PCCompatible/at-bios.bin + description: "IBM PC AT BIOS v3" + size: 65536 + crc32: "674426be" + required: true + note: "AT-class: single-file IBM AT BIOS (alternative to split U27/U47)" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:908-914" + + - name: BIOS_5170_15NOV85_U27_61X9266_27256.BIN + path: PCCompatible/BIOS_5170_15NOV85_U27_61X9266_27256.BIN + description: "IBM PC AT BIOS, Nov 1985, U27 chip" + size: 32768 + crc32: "4995be7a" + required: false + note: "AT-class: split BIOS, used with U47 chip" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:916-922" + + - name: BIOS_5170_15NOV85_U47_61X9265_27256.BIN + path: PCCompatible/BIOS_5170_15NOV85_U47_61X9265_27256.BIN + description: "IBM PC AT BIOS, Nov 1985, U47 chip" + size: 32768 + crc32: "c32713e4" + required: false + note: "AT-class: split BIOS, used with U27 chip" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:924-930" + + - name: CGA.F08 + path: PCCompatible/CGA.F08 + description: "IBM CGA font" + size: 2048 + crc32: "a362ffe6" + required: true + note: "Required for CGA video adapter" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:932-938" + + - name: EUMDA9.F14 + path: PCCompatible/EUMDA9.F14 + description: "IBM MDA font" + size: 3584 + crc32: "7754882a" + required: true + note: "Required for MDA video adapter" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:940-946" + + - name: ibm_6277356_ega_card_u44_27128.bin + path: PCCompatible/ibm_6277356_ega_card_u44_27128.bin + description: "IBM EGA BIOS" + size: 16384 + crc32: "2f2fbc40" + required: false + note: "Needed for EGA video adapter" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:948-954" + + - name: ibm_vga.bin + path: PCCompatible/ibm_vga.bin + description: "IBM VGA BIOS" + size: 32768 + crc32: "03b3f90d" + required: false + note: "Needed for VGA video adapter" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:956-962" + + - name: ibm-basic-1.10.rom + path: PCCompatible/ibm-basic-1.10.rom + description: "IBM ROM BASIC 1.10" + size: 32768 + crc32: "ebacb791" + required: false + note: "Required for AT-class with IBM BIOS (not needed with Phoenix)" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:964-970" + + # ------------------------------------------------------- + # Commodore Plus/4 (machine_name: "Plus4") + # ------------------------------------------------------- + - name: basic.318006-01.bin + path: Plus4/basic.318006-01.bin + description: "C16+4 BASIC ROM" + size: 16384 + crc32: "74eaae87" + required: true + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:999-1006" + + - name: kernal.318004-05.bin + path: Plus4/kernal.318004-05.bin + description: "C16+4 kernel, PAL-G revision 5" + size: 16384 + crc32: "71c07bd4" + required: true + note: "Default kernel version requested by machine code" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:992-998" + + - name: kernal.318004-03.bin + path: Plus4/kernal.318004-03.bin + description: "C16+4 kernel, PAL-G revision 3" + size: 16384 + crc32: "77bab934" + required: false + note: "Alternative kernel version (in catalogue but not default)" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:976-982" + + - name: kernal.318004-04.bin + path: Plus4/kernal.318004-04.bin + description: "C16+4 kernel, PAL-G revision 4" + size: 16384 + crc32: "be54ed79" + required: false + note: "Alternative kernel version (in catalogue but not default)" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:984-990" + + # ------------------------------------------------------- + # Thomson MO5 (machine_name: "Thomson") + # ------------------------------------------------------- + - name: mo5-v1.1.rom + path: Thomson/mo5-v1.1.rom + description: "Thomson MO5 ROM, version 1.1" + size: 16384 + crc32: "237c60bf" + required: true + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:1032-1038" + + - name: mo5-v1.0.rom + path: Thomson/mo5-v1.0.rom + description: "Thomson MO5 ROM, version 1" + size: 16384 + crc32: "f62d2f3a" + required: false + note: "In catalogue but machine requests v1.1 only" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:1024-1030" + + # ------------------------------------------------------- + # Commodore VIC-20 (machine_name: "Vic20") + # ------------------------------------------------------- + - name: basic.bin + path: Vic20/basic.bin + description: "VIC-20 BASIC ROM" + size: 8192 + crc32: "db4c43c1" + required: true + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:1044-1050" + + - name: characters-english.bin + path: Vic20/characters-english.bin + description: "English-language VIC-20 character ROM" + size: 4096 + crc32: "83e032a6" + required: true + note: "Required for English region" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:1052-1058" + + - name: kernel-pal.bin + path: Vic20/kernel-pal.bin + description: "English-language PAL VIC-20 kernel ROM" + size: 8192 + crc32: "4be07cb4" + required: true + note: "Required for English PAL region" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:1060-1066" + + - name: kernel-ntsc.bin + path: Vic20/kernel-ntsc.bin + description: "English-language NTSC VIC-20 kernel ROM" + size: 8192 + crc32: "e5e7c174" + required: true + note: "Required for English NTSC region" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:1068-1074" + + - name: characters-danish.bin + path: Vic20/characters-danish.bin + description: "Danish VIC-20 character ROM" + size: 4096 + crc32: "7fc11454" + required: false + note: "Required for Danish region" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:1076-1082" + + - name: kernel-danish.bin + path: Vic20/kernel-danish.bin + description: "Danish VIC-20 kernel ROM" + size: 8192 + crc32: "02adaf16" + required: false + note: "Required for Danish region" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:1084-1090" + + - name: characters-japanese.bin + path: Vic20/characters-japanese.bin + description: "Japanese VIC-20 character ROM" + size: 4096 + crc32: "fcfd8a4b" + required: false + note: "Required for Japanese region" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:1092-1098" + + - name: kernel-japanese.bin + path: Vic20/kernel-japanese.bin + description: "Japanese VIC-20 kernel ROM" + size: 8192 + crc32: "336900d7" + required: false + note: "Required for Japanese region" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:1100-1106" + + - name: characters-swedish.bin + path: Vic20/characters-swedish.bin + description: "Swedish VIC-20 character ROM" + size: 4096 + crc32: "d808551d" + required: false + note: "Required for Swedish region" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:1108-1114" + + - name: kernel-swedish.bin + path: Vic20/kernel-swedish.bin + description: "Swedish VIC-20 kernel ROM" + size: 8192 + crc32: "b2a60662" + required: false + note: "Required for Swedish region" + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:1116-1122" + + # ------------------------------------------------------- + # Sinclair ZX Spectrum (machine_name: "ZXSpectrum") + # Built into binary; external files override built-in copies + # ------------------------------------------------------- + - name: 48.rom + path: ZXSpectrum/48.rom + description: "ZX Spectrum 48K ROM" + size: 16384 + crc32: "ddee531f" + required: false + note: "Built into binary. Required for 16K/48K model." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:1128-1134,Machines/Utility/ROMLibrary.cpp:14539" + + - name: 128.rom + path: ZXSpectrum/128.rom + description: "ZX Spectrum 128K ROM" + size: 32768 + crc32: "2cbe8995" + required: false + note: "Built into binary. Required for 128K model." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:1136-1142,Machines/Utility/ROMLibrary.cpp:14540" + + - name: plus2.rom + path: ZXSpectrum/plus2.rom + description: "ZX Spectrum +2 ROM" + size: 32768 + crc32: "e7a517dc" + required: false + note: "Built into binary. Required for +2 model." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:1144-1150,Machines/Utility/ROMLibrary.cpp:14541" + + - name: plus3.rom + path: ZXSpectrum/plus3.rom + description: "ZX Spectrum +2a/+3 ROM" + size: 65536 + crc32: "96e3c17a" + required: false + note: "Built into binary. Required for +2a/+3 model." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:1152-1161,Machines/Utility/ROMLibrary.cpp:14542" + + # ------------------------------------------------------- + # Sinclair ZX80/ZX81 (machine_name: "ZX8081") + # Built into binary; external files override built-in copies + # ------------------------------------------------------- + - name: zx80.rom + path: ZX8081/zx80.rom + description: "ZX80 BASIC ROM" + size: 4096 + crc32: "4c7fc597" + required: false + note: "Built into binary. Required for ZX80 model." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:1167-1173,Machines/Utility/ROMLibrary.cpp:14544" + + - name: zx81.rom + path: ZX8081/zx81.rom + description: "ZX81 BASIC ROM" + size: 8192 + crc32: "4b1dd6eb" + required: false + note: "Built into binary. Required for ZX81 model." + mode: standalone + source_ref: "Machines/Utility/ROMCatalogue.cpp:1175-1181,Machines/Utility/ROMLibrary.cpp:14545" diff --git a/emulators/genesis_plus_gx.yml b/emulators/genesis_plus_gx.yml index 6fa979d5..6a053bfc 100644 --- a/emulators/genesis_plus_gx.yml +++ b/emulators/genesis_plus_gx.yml @@ -8,6 +8,7 @@ core_version: "v1.7.4" display_name: "Sega - MS/GG/MD/CD (Genesis Plus GX)" cores: - genesis_plus_gx + - genesisplusgx systems: - sega-megadrive - sega-megacd diff --git a/emulators/genesis_plus_gx_wide.yml b/emulators/genesis_plus_gx_wide.yml index d65c8c5e..24f782c1 100644 --- a/emulators/genesis_plus_gx_wide.yml +++ b/emulators/genesis_plus_gx_wide.yml @@ -8,6 +8,7 @@ core_version: "v1.7.4" display_name: "Sega - MS/GG/MD/CD (Genesis Plus GX Wide)" cores: - genesis_plus_gx_wide + - genesisplusgxwide systems: - sega-megadrive - sega-megacd diff --git a/emulators/hatari.yml b/emulators/hatari.yml index bd63faca..7d738b7c 100644 --- a/emulators/hatari.yml +++ b/emulators/hatari.yml @@ -1,5 +1,5 @@ emulator: Hatari -type: libretro +type: standalone + libretro core_classification: frozen_snapshot source: "https://github.com/libretro/hatari" upstream: "https://github.com/hatari/hatari" diff --git a/emulators/mame.yml b/emulators/mame.yml index 6a41a773..40554680 100644 --- a/emulators/mame.yml +++ b/emulators/mame.yml @@ -1,5 +1,5 @@ emulator: MAME -type: libretro +type: standalone + libretro core_classification: official_port source: "https://github.com/libretro/mame" upstream: "https://github.com/mamedev/mame" diff --git a/emulators/mame2003_plus.yml b/emulators/mame2003_plus.yml index 32489778..18ee6e36 100644 --- a/emulators/mame2003_plus.yml +++ b/emulators/mame2003_plus.yml @@ -11,6 +11,7 @@ mame_version: "0.78 (plus backports)" cores: - mame2003_plus + - mame078plus systems: - snk-neogeo-mvs diff --git a/emulators/mednafen_pce_fast.yml b/emulators/mednafen_pce_fast.yml index cc964b3b..f99c29ec 100644 --- a/emulators/mednafen_pce_fast.yml +++ b/emulators/mednafen_pce_fast.yml @@ -6,7 +6,7 @@ upstream: "https://mednafen.github.io/" profiled_date: "2026-03-24" core_version: "v1.31.0.0" display_name: "NEC - PC Engine / CD (Beetle PCE FAST)" -cores: [mednafen_pce_fast] +cores: [mednafen_pce_fast, pce_fast] systems: [nec-pc-engine] verification: existence notes: > diff --git a/emulators/mesen-s.yml b/emulators/mesen-s.yml index 9babde32..5e7206d5 100644 --- a/emulators/mesen-s.yml +++ b/emulators/mesen-s.yml @@ -9,7 +9,7 @@ source: "https://github.com/libretro/Mesen-S" upstream: "https://github.com/SourMesen/Mesen-S" profiled_date: "2026-03-24" core_version: "0.4.0" -cores: [mesen-s] +cores: [mesen-s, mesen_s] systems: [nintendo-snes, nintendo-gb, nintendo-gbc, nintendo-super-game-boy, nintendo-satellaview] notes: > diff --git a/emulators/mupen64plus_next.yml b/emulators/mupen64plus_next.yml index 0f1c4899..59423e61 100644 --- a/emulators/mupen64plus_next.yml +++ b/emulators/mupen64plus_next.yml @@ -12,10 +12,11 @@ cores: [mupen64plus_next, mupen64plus_next_develop, mupen64plus_next_gles3, mupe files: - name: "IPL.n64" path: "Mupen64plus/IPL.n64" + standalone_path: "64DD_IPL.bin" + aliases: ["64DD_IPL.bin"] size: 4194304 required: false description: "64DD IPL ROM" - note: "Only needed for N64 Disk Drive games (.ndd) via subsystem API. Accepts Z64, N64, and V64 byte-swap formats." source_ref: "mupen64plus-core/src/main/main.c:940-1024" - name: "font.ttf" diff --git a/emulators/opentyrian.yml b/emulators/opentyrian.yml index a17cfa81..fb0e0cc8 100644 --- a/emulators/opentyrian.yml +++ b/emulators/opentyrian.yml @@ -6,7 +6,7 @@ upstream: "https://github.com/opentyrian/opentyrian" profiled_date: "2026-03-24" core_version: "1.0.0.6" display_name: "Tyrian (OpenTyrian)" -cores: [opentyrian] +cores: [opentyrian, tyrian] systems: [tyrian] verification: existence diff --git a/emulators/vice_x128.yml b/emulators/vice_x128.yml index 2611c175..125e5137 100644 --- a/emulators/vice_x128.yml +++ b/emulators/vice_x128.yml @@ -6,7 +6,7 @@ upstream: "https://sourceforge.net/projects/vice-emu/" profiled_date: "2026-03-25" core_version: "3.10" display_name: "Commodore - C128 (VICE x128)" -cores: [vice_x128] +cores: [vice_x128, x128] systems: [commodore-c128] notes: > System ROMs embedded in binary: C128 kernal (318020-05), chargen (390059-01), diff --git a/emulators/vice_x64.yml b/emulators/vice_x64.yml index c345d0c7..2d830046 100644 --- a/emulators/vice_x64.yml +++ b/emulators/vice_x64.yml @@ -6,7 +6,7 @@ upstream: "https://sourceforge.net/projects/vice-emu/" profiled_date: "2026-03-25" core_version: "3.10" display_name: "Commodore - C64 (VICE x64, fast)" -cores: [vice_x64] +cores: [vice_x64, x64] systems: [commodore-c64] notes: > System ROMs embedded in binary: C64 BASIC (901226-01), chargen (901225-01), diff --git a/emulators/vice_xcbm2.yml b/emulators/vice_xcbm2.yml index 276d7457..303cefb6 100644 --- a/emulators/vice_xcbm2.yml +++ b/emulators/vice_xcbm2.yml @@ -6,7 +6,7 @@ upstream: "https://sourceforge.net/projects/vice-emu/" profiled_date: "2026-03-25" core_version: "3.10" display_name: "Commodore - CBM-II 6x0/7x0 (VICE xcbm2)" -cores: [vice_xcbm2] +cores: [vice_xcbm2, xcbm2] systems: [commodore-cbm-ii] notes: > System ROMs embedded in binary: chargen 600 (901237-01), chargen 700 (901232-01), diff --git a/emulators/vice_xcbm5x0.yml b/emulators/vice_xcbm5x0.yml index 265e8c0a..939af750 100644 --- a/emulators/vice_xcbm5x0.yml +++ b/emulators/vice_xcbm5x0.yml @@ -6,7 +6,7 @@ upstream: "https://sourceforge.net/projects/vice-emu/" profiled_date: "2026-03-25" core_version: "3.10" display_name: "Commodore - CBM-II 5x0 (VICE xcbm5x0)" -cores: [vice_xcbm5x0] +cores: [vice_xcbm5x0, xcbm5x0] systems: [commodore-cbm-ii] notes: > System ROMs embedded in binary: chargen 500 (901225-01), kernal 500 diff --git a/emulators/vice_xpet.yml b/emulators/vice_xpet.yml index 0a76ec3a..5927b9a4 100644 --- a/emulators/vice_xpet.yml +++ b/emulators/vice_xpet.yml @@ -6,7 +6,7 @@ upstream: "https://sourceforge.net/projects/vice-emu/" profiled_date: "2026-03-25" core_version: "3.10" display_name: "Commodore - PET (VICE xpet)" -cores: [vice_xpet] +cores: [vice_xpet, xpet] systems: [commodore-pet] notes: > System ROMs embedded in binary: kernal 1 (901439-04-07), kernal 2 (901465-03), diff --git a/emulators/vice_xplus4.yml b/emulators/vice_xplus4.yml index 5f057060..92102bdc 100644 --- a/emulators/vice_xplus4.yml +++ b/emulators/vice_xplus4.yml @@ -6,7 +6,7 @@ upstream: "https://sourceforge.net/projects/vice-emu/" profiled_date: "2026-03-25" core_version: "3.10" display_name: "Commodore - PLUS/4 (VICE xplus4)" -cores: [vice_xplus4] +cores: [vice_xplus4, xplus4] systems: [commodore-plus4] notes: > All system ROMs embedded in binary: BASIC (318006-01), kernal PAL (318004-05), diff --git a/emulators/vice_xscpu64.yml b/emulators/vice_xscpu64.yml index 4d29c36c..686da11b 100644 --- a/emulators/vice_xscpu64.yml +++ b/emulators/vice_xscpu64.yml @@ -6,7 +6,7 @@ upstream: "https://sourceforge.net/projects/vice-emu/" profiled_date: "2026-03-25" core_version: "3.10" display_name: "Commodore - C64 SuperCPU (VICE xscpu64)" -cores: [vice_xscpu64] +cores: [vice_xscpu64, xscpu64] systems: [commodore-c64-supercpu] notes: > Embedded SCPU64 ROM V0.07 (free replacement by Soci/Singular, 64 KB), chargen diff --git a/emulators/vice_xvic.yml b/emulators/vice_xvic.yml index 8f946b2f..50629423 100644 --- a/emulators/vice_xvic.yml +++ b/emulators/vice_xvic.yml @@ -6,7 +6,7 @@ upstream: "https://sourceforge.net/projects/vice-emu/" profiled_date: "2026-03-25" core_version: "3.10" display_name: "Commodore - VIC-20 (VICE xvic)" -cores: [vice_xvic] +cores: [vice_xvic, xvic] systems: [commodore-vic20] notes: > System ROMs embedded in binary: BASIC (901486-01), chargen (901460-03), diff --git a/mkdocs.yml b/mkdocs.yml index cecbd7b6..b333aa2c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -399,9 +399,10 @@ nav: - PCSX-ReARMed: emulators/pcsx_rearmed.md - Launchers (1): - Dolphin Launcher: emulators/dolphin_launcher.md - - Other (10): + - Other (11): - Beetle GBA (Mednafen): emulators/beetle_gba.md - Cemu: emulators/cemu.md + - Clock Signal (CLK): emulators/clk.md - ep128emu-core: emulators/ep128emu.md - PCSX2: emulators/pcsx2.md - Redream: emulators/redream.md diff --git a/platforms/batocera.yml b/platforms/batocera.yml index fc15b07d..74fff5a2 100644 --- a/platforms/batocera.yml +++ b/platforms/batocera.yml @@ -5,6 +5,87 @@ source: "https://raw.githubusercontent.com/batocera-linux/batocera.linux/master/ base_destination: bios hash_type: md5 verification_mode: md5 +standalone_cores: + - abuse + - azahar + - bstone + - cannonball + - catacombgl + - cdogs + - cemu + - cgenius + - citron + - clk + - corsixth + - demul + - devilutionx + - dhewm3 + - dolphin + - dxx-rebirth + - easyrpg + - ecwolf + - eduke32 + - eka2l1 + - etlegacy + - fallout1-ce + - fallout2-ce + - flatpak + - fury + - gsplus + - gzdoom + - hcl + - hurrican + - hypseus-singe + - ikemen + - ioquake3 + - iortcw + - jazz2-native + - lexaloffle + - lindbergh-loader + - mame + - model2emu + - moonlight + - mupen64plus + - odcommander + - openbor + - openjazz + - openjk + - openjkdf2 + - openmohaa + - pcsx2 + - play + - ppsspp + - pygame + - pyxel + - raze + - rpcs3 + - ruffle + - samcoupe + - scummvm + - sdlpop + - shadps4 + - solarus + - sonic-mania + - sonic2013 + - sonic3-air + - steam + - supermodel + - taradino + - theforceengine + - thextech + - tr1x + - tr2x + - tsugaru + - tyrian + - uqm + - vice + - vita3k + - vpinball + - x16emu + - xash3d_fwgs + - xemu + - xenia-canary + - yquake2 cores: - 81 - a5200 diff --git a/scripts/common.py b/scripts/common.py index dd4efcf9..ecc4dc90 100644 --- a/scripts/common.py +++ b/scripts/common.py @@ -508,11 +508,20 @@ def resolve_platform_cores( } if isinstance(cores_config, list): - core_set = set(cores_config) + core_set = {str(c) for c in cores_config} + # Build reverse index: platform core name -> profile name + # Uses profile filename (dict key) + all names in cores: field + core_to_profile: dict[str, str] = {} + for name, p in profiles.items(): + if p.get("type") == "alias": + continue + core_to_profile[name] = name + for core_name in p.get("cores", []): + core_to_profile[str(core_name)] = name return { - name for name in profiles - if name in core_set - and profiles[name].get("type") != "alias" + core_to_profile[c] + for c in core_set + if c in core_to_profile } # Fallback: system ID intersection diff --git a/scripts/generate_pack.py b/scripts/generate_pack.py index a66d9db9..e65f67fe 100644 --- a/scripts/generate_pack.py +++ b/scripts/generate_pack.py @@ -204,7 +204,7 @@ def _collect_emulator_extras( if not u["in_repo"]: continue name = u["name"] - dest = name + dest = u.get("path") or name full_dest = f"{base_dest}/{dest}" if base_dest else dest if full_dest in seen: continue diff --git a/scripts/generate_readme.py b/scripts/generate_readme.py index 0fc5a8c2..0b88c228 100644 --- a/scripts/generate_readme.py +++ b/scripts/generate_readme.py @@ -109,8 +109,9 @@ def generate_readme(db: dict, platforms_dir: str) -> str: lines = [ "# RetroBIOS", "", - f"Complete BIOS and firmware packs for RetroArch, Batocera, Recalbox, Lakka," - f" RetroPie, EmuDeck, RetroBat, and RetroDECK.", + f"Complete BIOS and firmware packs for " + f"{', '.join(c['platform'] for c in sorted(coverages.values(), key=lambda x: x['platform'])[:-1])}" + f", and {sorted(coverages.values(), key=lambda x: x['platform'])[-1]['platform']}.", "", f"**{total_files:,}** verified files across **{len(system_ids)}** systems," f" ready to extract into your emulator's BIOS directory.", diff --git a/scripts/scraper/batocera_scraper.py b/scripts/scraper/batocera_scraper.py index 7a2b4831..935283c4 100644 --- a/scripts/scraper/batocera_scraper.py +++ b/scripts/scraper/batocera_scraper.py @@ -127,8 +127,12 @@ class Scraper(BaseScraper): def __init__(self, url: str = SOURCE_URL): super().__init__(url=url) - def _fetch_cores(self) -> list[str]: - """Extract core names from Batocera configgen-defaults.yml.""" + def _fetch_cores(self) -> tuple[list[str], list[str]]: + """Extract core names and standalone cores from configgen-defaults.yml. + + Returns (all_cores, standalone_cores) where standalone_cores are + those with emulator != "libretro". + """ try: req = urllib.request.Request( CONFIGGEN_DEFAULTS_URL, @@ -142,13 +146,19 @@ class Scraper(BaseScraper): ) from e data = yaml.safe_load(raw) cores: set[str] = set() + standalone: set[str] = set() for system, cfg in data.items(): if system == "default" or not isinstance(cfg, dict): continue - core = cfg.get("core") + emulator = cfg.get("emulator", "") + core = cfg.get("core", "") if core: cores.add(core) - return sorted(cores) + if emulator and emulator != "libretro": + standalone.add(emulator) + if core and core != emulator: + standalone.add(core) + return sorted(cores), sorted(standalone) def _extract_systems_dict(self, raw: str) -> dict: """Extract and parse the 'systems' dict from the Python source via ast.literal_eval.""" @@ -295,7 +305,8 @@ class Scraper(BaseScraper): if num.isdigit(): batocera_version = num - return { + cores, standalone = self._fetch_cores() + result = { "platform": "Batocera", "version": batocera_version or "", "homepage": "https://batocera.org", @@ -303,9 +314,12 @@ class Scraper(BaseScraper): "base_destination": "bios", "hash_type": "md5", "verification_mode": "md5", - "cores": self._fetch_cores(), + "cores": cores, "systems": systems, } + if standalone: + result["standalone_cores"] = standalone + return result def main(): diff --git a/scripts/verify.py b/scripts/verify.py index 3c69b2d7..eb02471e 100644 --- a/scripts/verify.py +++ b/scripts/verify.py @@ -227,6 +227,7 @@ def find_undeclared_files( profiles = emu_profiles if emu_profiles is not None else load_emulator_profiles(emulators_dir) relevant = resolve_platform_cores(config, profiles) + standalone_set = set(str(c) for c in config.get("standalone_cores", [])) undeclared = [] seen = set() for emu_name, profile in sorted(profiles.items()): @@ -235,21 +236,36 @@ def find_undeclared_files( if emu_name not in relevant: continue + # Check if this profile is standalone: match profile name or any cores: alias + is_standalone = emu_name in standalone_set or bool( + standalone_set & {str(c) for c in profile.get("cores", [])} + ) + for f in profile.get("files", []): fname = f.get("name", "") if not fname or fname in seen: continue - # Skip standalone-only files for libretro platforms - if f.get("mode") == "standalone": + # Mode filtering: skip files incompatible with platform's usage + file_mode = f.get("mode") + if file_mode == "standalone" and not is_standalone: + continue + if file_mode == "libretro" and is_standalone: continue if fname in declared_names: continue + # Determine destination path based on mode + if is_standalone: + dest = f.get("standalone_path") or f.get("path") or fname + else: + dest = f.get("path") or fname + in_repo = fname in by_name or fname.rsplit("/", 1)[-1] in by_name seen.add(fname) undeclared.append({ "emulator": profile.get("emulator", emu_name), "name": fname, + "path": dest, "required": f.get("required", False), "hle_fallback": f.get("hle_fallback", False), "category": f.get("category", "bios"), diff --git a/tests/test_e2e.py b/tests/test_e2e.py index 45b56756..4f83e0ab 100644 --- a/tests/test_e2e.py +++ b/tests/test_e2e.py @@ -1098,5 +1098,83 @@ class TestE2E(unittest.TestCase): self.assertIn("d.bin", names) + def test_108_standalone_path_in_undeclared(self): + """Undeclared files use standalone_path when core is in standalone_cores.""" + # Create a platform with standalone_cores + config = { + "platform": "TestStandalone", + "verification_mode": "existence", + "cores": ["test_emu"], + "standalone_cores": ["test_emu"], + "systems": { + "console-a": { + "files": [ + {"name": "present_req.bin", "destination": "present_req.bin", + "required": True}, + ], + }, + }, + } + with open(os.path.join(self.platforms_dir, "test_standalone.yml"), "w") as fh: + yaml.dump(config, fh) + + # Create emulator with standalone_path divergence + emu = { + "emulator": "TestStandaloneEmu", + "type": "standalone + libretro", + "cores": ["test_emu"], + "systems": ["console-a"], + "files": [ + {"name": "libretro_file.bin", "path": "subdir/libretro_file.bin", + "standalone_path": "flat_file.bin", "required": True}, + {"name": "standalone_only.bin", "mode": "standalone", "required": False}, + {"name": "libretro_only.bin", "mode": "libretro", "required": False}, + ], + } + with open(os.path.join(self.emulators_dir, "test_standalone_emu.yml"), "w") as fh: + yaml.dump(emu, fh) + + config = load_platform_config("test_standalone", self.platforms_dir) + profiles = load_emulator_profiles(self.emulators_dir) + undeclared = find_undeclared_files(config, self.emulators_dir, self.db, profiles) + by_name = {u["name"]: u for u in undeclared} + + # standalone_path used for undeclared file (core is standalone) + self.assertIn("libretro_file.bin", by_name) + self.assertEqual(by_name["libretro_file.bin"]["path"], "flat_file.bin") + + # standalone-only file IS included (core is standalone) + self.assertIn("standalone_only.bin", by_name) + + # libretro-only file is EXCLUDED (core is standalone) + self.assertNotIn("libretro_only.bin", by_name) + + def test_109_no_standalone_cores_uses_libretro_path(self): + """Without standalone_cores, undeclared files use path: (libretro).""" + config = load_platform_config("test_existence", self.platforms_dir) + profiles = load_emulator_profiles(self.emulators_dir) + undeclared = find_undeclared_files(config, self.emulators_dir, self.db, profiles) + # standalone_only.bin should be excluded (platform has no standalone_cores) + names = {u["name"] for u in undeclared} + self.assertNotIn("standalone_only.bin", names) + + def test_110_cores_alias_reverse_index(self): + """resolve_platform_cores matches via cores: field aliases.""" + emu = { + "emulator": "TestAliasCore", + "type": "libretro", + "cores": ["test_alias_core", "shortname"], + "systems": ["console-a"], + "files": [], + } + with open(os.path.join(self.emulators_dir, "test_alias_core.yml"), "w") as fh: + yaml.dump(emu, fh) + + config = {"cores": ["shortname"]} + profiles = load_emulator_profiles(self.emulators_dir) + resolved = resolve_platform_cores(config, profiles) + self.assertIn("test_alias_core", resolved) + + if __name__ == "__main__": unittest.main()