26 Commits

Author SHA1 Message Date
Abdessamad Derraz
e90095abd9 fix: resolve bios case collisions
Delete duplicate lowercase variants (identical MD5) of 12 files
that prevented clean checkout on case-insensitive filesystems
(Windows, macOS).

Canonical chosen per upstream source code:
- Atari 2600 KV*.WAV: uppercase (stella2023 hardcode)
- Vectrex VEC_Minestorm.vec: lowercase (BizHawk hardcode)
- MSX MSX{,2,2EXT}.ROM: uppercase (fMSX hardcode, 6/7 platforms)
- Doom DOOM2.WAD: uppercase (matches dir convention)

Add aliases to stella2014 and clk profiles so resolution still
finds the canonical source. Correct retrodeck Vectrex casing to
match upstream. Merge Commodore/Vic-20 into VIC-20.

Add tests/test_no_case_collisions.py as a CI guard.

Closes #49
2026-04-18 10:01:29 +02:00
Abdessamad Derraz
c8b27cac5e docs: rename which-pack nav to download 2026-04-18 09:01:11 +02:00
Abdessamad Derraz
1d191ff190 chore: drop empty hash placeholders 2026-04-18 09:01:04 +02:00
Abdessamad Derraz
5a6b54c195 refactor: extract sizes to structured fields 2026-04-18 09:01:01 +02:00
Abdessamad Derraz
e5ef253892 feat: add vice rom hashes from source 2026-04-18 09:00:58 +02:00
Abdessamad Derraz
4ba8648ec2 feat: enrich bsnes with system and hashes 2026-04-18 09:00:55 +02:00
Abdessamad Derraz
617f5cc364 refactor: hash-anchor truth enrichment 2026-04-18 09:00:31 +02:00
Abdessamad Derraz
d4ce6df911 fix: remaining releases variable reference 2026-04-03 22:34:45 +02:00
Abdessamad Derraz
d0846ed78f fix: which-pack link text, paths, and table clarity 2026-04-03 22:29:16 +02:00
Abdessamad Derraz
07b4e55053 docs: rewrite which-pack as complete download guide 2026-04-03 22:27:00 +02:00
Abdessamad Derraz
690e897ca7 docs: rewrite which-pack page with real guidance 2026-04-03 22:23:06 +02:00
Abdessamad Derraz
7471c176c3 fix: generate which-pack page via generate_site.py 2026-04-03 22:20:23 +02:00
Abdessamad Derraz
e72773e46d fix: restore community tools section in readme generator 2026-04-03 15:00:38 +02:00
Abdessamad Derraz
3c0c1cec02 fix: generate banner header in readme and site scripts 2026-04-03 14:22:22 +02:00
Abdessamad Derraz
faf4236463 docs: add project logo and branding assets 2026-04-03 14:17:53 +02:00
Abdessamad Derraz
1c0c502258 docs: add community tools section
Reference BIOS Preservation Tool by monster-penguin in README,
wiki, and site nav.
2026-04-03 13:33:21 +02:00
Abdessamad Derraz
06c48e071a test: update grouping test for flat zip behavior 2026-04-03 12:06:38 +02:00
Abdessamad Derraz
8f93ee2239 feat: flatten zips, standalone copies, retropie grouping 2026-04-03 12:04:55 +02:00
Abdessamad Derraz
9ba8b02ff1 fix: verify functions handle flat zip extraction 2026-04-03 11:50:26 +02:00
Abdessamad Derraz
6fc2753f3e feat: add standalone copies for 9 emulators 2026-04-03 11:20:21 +02:00
Abdessamad Derraz
486b359c22 feat: extend do_standalone_copies with pattern, note, wsl fallback 2026-04-03 11:16:34 +02:00
Abdessamad Derraz
76a3543672 feat: verify functions handle flat and nested ZIPs 2026-04-03 11:15:32 +02:00
Abdessamad Derraz
48d185dd7d feat: flatten ZIP structure, strip base_dest prefix 2026-04-03 11:12:14 +02:00
Abdessamad Derraz
6dbc3f510b fix: retrodeck bios_path double prefix 2026-04-03 11:07:46 +02:00
Abdessamad Derraz
97e26103f5 fix: include source/req tags in grouped pack rename 2026-04-03 11:07:34 +02:00
Abdessamad Derraz
59d777a33d fix: restore wiki links for mkdocs context 2026-04-02 20:54:14 +02:00
57 changed files with 3130 additions and 462 deletions

BIN
.github/assets/banner-light.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB

BIN
.github/assets/banner.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

BIN
.github/assets/favicon.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
.github/assets/logo.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

BIN
.github/assets/social-preview.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

View File

@@ -1,4 +1,6 @@
# RetroBIOS
<p align="center">
<img src=".github/assets/banner.png" alt="RetroBIOS" width="400">
</p>
Complete BIOS and firmware packs for Batocera, BizHawk, EmuDeck, Lakka, Recalbox, RetroArch, RetroBat, RetroDECK, RetroPie, and RomM.
@@ -122,6 +124,10 @@ To keep packs accurate, each file is checked against the emulator's source code.
<a href="https://github.com/monster-penguin"><img src="https://avatars.githubusercontent.com/u/266009589?v=4" width="50" title="monster-penguin"></a>
## Community tools
- [BIOS Preservation Tool](https://github.com/monster-penguin/BIOS-Preservation-Tool) by [monster-penguin](https://github.com/monster-penguin) - scan, verify, and stage your own BIOS collection using RetroBIOS hash metadata
## Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
@@ -130,4 +136,4 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
This repository provides BIOS files for personal backup and archival purposes.
*Auto-generated on 2026-04-02T13:38:26Z*
*Auto-generated on 2026-04-03T12:59:52Z*

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.

View File

@@ -1,5 +1,5 @@
{
"generated_at": "2026-04-02T12:45:07Z",
"generated_at": "2026-04-18T07:32:14Z",
"total_files": 7302,
"total_size": 9190488848,
"files": {
@@ -30814,8 +30814,8 @@
"adler32": "87461161"
},
"65d07426b520ddd3115d40f255511e0fd2e20ae7": {
"path": "bios/GCE/Vectrex/VEC_MineStorm.vec",
"name": "VEC_MineStorm.vec",
"path": "bios/GCE/Vectrex/VEC_Minestorm.vec",
"name": "VEC_Minestorm.vec",
"size": 8192,
"sha1": "65d07426b520ddd3115d40f255511e0fd2e20ae7",
"md5": "ab082fa8c8e632dd68589a8c7741388f",
@@ -89077,7 +89077,7 @@
"VEC_Bios.bin": [
"b9bbf5bb0eac52d039a4a993a2d8064b862c9e28"
],
"VEC_MineStorm.vec": [
"VEC_Minestorm.vec": [
"65d07426b520ddd3115d40f255511e0fd2e20ae7"
],
"CHRGEN.BIN": [
@@ -89087,8 +89087,7 @@
"aea7a4c0c7ffe1f212f7b9faecfd728862ac6904"
],
"doom2.wad": [
"6d559b7ceece4f5ad457415049711992370d520a",
"7ec7652fcfce8ddc6e801839291f0e28ef1d5ae7"
"6d559b7ceece4f5ad457415049711992370d520a"
],
"freedoom1.wad": [
"97bb88094a51457a8dcad98c58be22a2d0fa9a37"
@@ -101523,27 +101522,6 @@
"samesame.zip": [
"cdb09d3ffaa867ff9e7387cf1934e9011565d546"
],
"kvb1.wav": [
"6a582aebcefd6e2a97bdd8968202aab9851a889c"
],
"kvb2.wav": [
"60a425c6bde3226ab731995562716321be20fc49"
],
"kvb3.wav": [
"5e34125c4d6c209b21d1c892f3df0ec1644fd0d8"
],
"kvs1.wav": [
"b094c2c1fca81a0e531e0541f302346150ec4604"
],
"kvs2.wav": [
"8b83b2eea01b3e08ceb885aeb153d4084bddb63c"
],
"kvs3.wav": [
"86896a1e272d8715489de9b407f0b8a42f82d4a0"
],
"kvshared.wav": [
"9adf10cdf1de833b194c7d8797ad1f041ad98dd3"
],
"atari_osb.rom": [
"db1031585968cfc6ec2ecda5c9a5a52f61444a3b"
],
@@ -101754,18 +101732,18 @@
"kernal.318004-05.bin": [
"7c7e07f016391174a557e790c4ef1cbe33512cdb"
],
"characters-japanese.bin": [
"dae61ac03065aa2904af5c123ce821855898c555"
],
"kernel-japanese.bin": [
"c9ead45e6674d1042ca6199160e8583c23aeac22"
],
"basic.bin": [
"587d1e90950675ab6b12d91248a3f0d640d02e8d"
],
"characters-english.bin": [
"4fd85ab6647ee2ac7ba40f729323f2472d35b9b4"
],
"characters-japanese.bin": [
"dae61ac03065aa2904af5c123ce821855898c555"
],
"kernel-japanese.bin": [
"c9ead45e6674d1042ca6199160e8583c23aeac22"
],
"kernel-ntsc.bin": [
"06de7ec017a5e78bd6746d89c2ecebb646efeb19"
],
@@ -101818,9 +101796,6 @@
"sl90025.bin": [
"759e2ed31fbde4a2d8daf8b9f3e0dffebc90dae2"
],
"VEC_Minestorm.vec": [
"65d07426b520ddd3115d40f255511e0fd2e20ae7"
],
"Vectrex_Bios.bin": [
"b9bbf5bb0eac52d039a4a993a2d8064b862c9e28"
],
@@ -101849,15 +101824,6 @@
"px-7_basic-bios1.rom": [
"302afb5d8be26c758309ca3df611ae69cced2821"
],
"msx.rom": [
"409e82adac40f6bdd18eb6c84e8b2fbdc7fb5498"
],
"Machines/Shared Roms/MSX.rom": [
"409e82adac40f6bdd18eb6c84e8b2fbdc7fb5498"
],
"msx2.rom": [
"6103b39f1e38d1aa2d84b1c3219c44f1abb5436e"
],
"nms8250_basic-bios2.rom": [
"6103b39f1e38d1aa2d84b1c3219c44f1abb5436e"
],
@@ -101867,9 +101833,6 @@
"nms8245_basic-bios2.rom": [
"6103b39f1e38d1aa2d84b1c3219c44f1abb5436e"
],
"msx2ext.rom": [
"5c1f9c7fb655e43d38e5dd1fcc6b942b2ff68b02"
],
"nms8250_msx2sub.rom": [
"5c1f9c7fb655e43d38e5dd1fcc6b942b2ff68b02"
],
@@ -103332,6 +103295,9 @@
"EXOS21.ROM": [
"55315b20fecb4441a07ee4bc5dc7153f396e0a2e"
],
"Machines/Shared Roms/MSX.rom": [
"409e82adac40f6bdd18eb6c84e8b2fbdc7fb5498"
],
"sony-playstation:239665b1a3dade1b5a52c06338011044": [
"343883a7b555646da8cee54aadd2795b6e7dd070"
],
@@ -132695,14 +132661,12 @@
"81193965a374d77b99b4743d317824b53c3e3c78",
"8f70d1b74483ba3a37e86cf16c849d601a8c3d2c",
"759e2ed31fbde4a2d8daf8b9f3e0dffebc90dae2",
"65d07426b520ddd3115d40f255511e0fd2e20ae7",
"5a65b922b562cb1f57dab51b73151283f0e20c7a",
"f9608bb4ad1cfe3640d02844c7ad8e0bcd974917",
"000ac11b702a4c42e40f135df12fa5f2f13e20a1",
"3656bb3bbc17d280d2016fe4f6ff3cded3082a41",
"e998f0c441f4f1800ef44e42cd1659150206cf79",
"302afb5d8be26c758309ca3df611ae69cced2821",
"409e82adac40f6bdd18eb6c84e8b2fbdc7fb5498",
"6103b39f1e38d1aa2d84b1c3219c44f1abb5436e",
"5c1f9c7fb655e43d38e5dd1fcc6b942b2ff68b02",
"5aff2d9b6efc723bc395b0f96f0adfa83cc54a49",
@@ -132865,6 +132829,7 @@
"9451a1a09d8f75944dbd6f91193fc360f1de80ac",
"03bbb386cf530e804363acdfc1d13e64cf28af2e",
"55315b20fecb4441a07ee4bc5dc7153f396e0a2e",
"409e82adac40f6bdd18eb6c84e8b2fbdc7fb5498",
"343883a7b555646da8cee54aadd2795b6e7dd070",
"15c94da3cc5a38a582429575af4198c487fe893c",
"73107d468fc7cb1d2c5b18b269715dd889ecef06",

View File

@@ -59,6 +59,7 @@ files:
path: sysdata/otp.bin
system: nintendo-3ds
required: false
size: 256
validation: [size, crypto]
note: "OTP data for console key derivation"
source_ref: "src/core/hw/unique_data.cpp:126-167, src/core/hw/unique_data.cpp:213"
@@ -67,6 +68,7 @@ files:
path: nand/private/movable.sed
system: nintendo-3ds
required: false
size: 320
validation: [size, signature]
note: "console-unique key seed"
source_ref: "src/core/hw/unique_data.cpp:170-200, src/core/hw/unique_data.cpp:217"
@@ -75,6 +77,7 @@ files:
path: nand/rw/sys/SecureInfo_A
system: nintendo-3ds
required: false
size: 273
validation: [size, signature]
note: "console serial and region data"
source_ref: "src/core/hw/unique_data.cpp:43-92, src/core/hw/unique_data.cpp:205"
@@ -83,6 +86,7 @@ files:
path: nand/rw/sys/LocalFriendCodeSeed_B
system: nintendo-3ds
required: false
size: 284
validation: [size, signature]
note: "friend code generation seed"
source_ref: "src/core/hw/unique_data.cpp:94-123, src/core/hw/unique_data.cpp:209"

View File

@@ -4,7 +4,7 @@ core_classification: official_port
source: "https://github.com/libretro/bsnes-libretro"
upstream: "https://github.com/bsnes-emu/bsnes"
logo: "https://raw.githubusercontent.com/bsnes-emu/bsnes/master/bsnes/target-bsnes/resource/bsnes.svg"
profiled_date: "2026-03-23"
profiled_date: "2026-04-05"
core_version: "115"
display_name: "Nintendo - SNES / SFC (bsnes)"
cores: [bsnes]
@@ -29,71 +29,91 @@ files:
# program ROM: 2048 x 24-bit words, data ROM: 1024 x 16-bit words
- name: "dsp1.program.rom"
size: 6144 # 0x1800
system: nintendo-snes
size: 6144
validation: [size]
required: false
hle_fallback: true
note: "NEC uPD7725 program ROM for DSP1. HLE fallback available"
note: "NEC uPD7725 program ROM for DSP1"
source_ref: "sfc/cartridge/load.cpp:490-494, heuristics/super-famicom.cpp:601"
- name: "dsp1.data.rom"
size: 2048 # 0x800
system: nintendo-snes
size: 2048
validation: [size]
required: false
hle_fallback: true
note: "NEC uPD7725 data ROM for DSP1. HLE fallback available"
note: "NEC uPD7725 data ROM for DSP1"
source_ref: "sfc/cartridge/load.cpp:498-503"
- name: "dsp1b.program.rom"
size: 6144 # 0x1800
system: nintendo-snes
size: 6144
validation: [size]
required: false
hle_fallback: true
note: "NEC uPD7725 program ROM for DSP1B (default NEC identifier). HLE fallback available"
note: "NEC uPD7725 program ROM for DSP1B (default NEC identifier)"
source_ref: "heuristics/super-famicom.cpp:606"
- name: "dsp1b.data.rom"
size: 2048 # 0x800
system: nintendo-snes
size: 2048
validation: [size]
required: false
hle_fallback: true
note: "NEC uPD7725 data ROM for DSP1B. HLE fallback available"
note: "NEC uPD7725 data ROM for DSP1B"
source_ref: "heuristics/super-famicom.cpp:606"
- name: "dsp2.program.rom"
size: 6144 # 0x1800
system: nintendo-snes
size: 6144
validation: [size]
required: false
hle_fallback: true
note: "NEC uPD7725 program ROM for DSP2 (Dungeon Master). HLE fallback available"
note: "NEC uPD7725 program ROM for DSP2 (Dungeon Master)"
source_ref: "sfc/cartridge/load.cpp:515-520, heuristics/super-famicom.cpp:602"
- name: "dsp2.data.rom"
size: 2048 # 0x800
system: nintendo-snes
size: 2048
validation: [size]
required: false
hle_fallback: true
note: "NEC uPD7725 data ROM for DSP2. HLE fallback available"
note: "NEC uPD7725 data ROM for DSP2"
source_ref: "sfc/cartridge/load.cpp:498-503"
- name: "dsp3.program.rom"
size: 6144 # 0x1800
system: nintendo-snes
size: 6144
validation: [size]
required: true
note: "NEC uPD7725 program ROM for DSP3 (SD Gundam GX). No HLE fallback"
source_ref: "sfc/cartridge/load.cpp:531-534"
- name: "dsp3.data.rom"
size: 2048 # 0x800
system: nintendo-snes
size: 2048
validation: [size]
required: true
note: "NEC uPD7725 data ROM for DSP3. No HLE fallback"
source_ref: "sfc/cartridge/load.cpp:531-534"
- name: "dsp4.program.rom"
size: 6144 # 0x1800
system: nintendo-snes
size: 6144
validation: [size]
required: false
hle_fallback: true
note: "NEC uPD7725 program ROM for DSP4 (Top Gear 3000). HLE fallback available"
note: "NEC uPD7725 program ROM for DSP4 (Top Gear 3000)"
source_ref: "sfc/cartridge/load.cpp:522-528, heuristics/super-famicom.cpp:604-605"
- name: "dsp4.data.rom"
size: 2048 # 0x800
system: nintendo-snes
size: 2048
validation: [size]
required: false
hle_fallback: true
note: "NEC uPD7725 data ROM for DSP4. HLE fallback available"
note: "NEC uPD7725 data ROM for DSP4"
source_ref: "sfc/cartridge/load.cpp:498-503"
# -- NEC uPD96050 coprocessor (ST010, ST011) --
@@ -101,27 +121,35 @@ files:
# program ROM: 16384 x 24-bit words, data ROM: 2048 x 16-bit words
- name: "st010.program.rom"
size: 49152 # 0xC000
system: nintendo-snes
size: 49152
validation: [size]
required: false
hle_fallback: true
note: "NEC uPD96050 program ROM for ST010. HLE fallback available"
note: "NEC uPD96050 program ROM for ST010"
source_ref: "sfc/cartridge/load.cpp:570-574, heuristics/super-famicom.cpp:583-587"
- name: "st010.data.rom"
size: 4096 # 0x1000
system: nintendo-snes
size: 4096
validation: [size]
required: false
hle_fallback: true
note: "NEC uPD96050 data ROM for ST010. HLE fallback available"
note: "NEC uPD96050 data ROM for ST010"
source_ref: "sfc/cartridge/load.cpp:578-583"
- name: "st011.program.rom"
size: 49152 # 0xC000
system: nintendo-snes
size: 49152
validation: [size]
required: true
note: "NEC uPD96050 program ROM for ST011 (2dan Morita Shougi). No HLE fallback"
source_ref: "sfc/cartridge/load.cpp:599-601, heuristics/super-famicom.cpp:586"
- name: "st011.data.rom"
size: 4096 # 0x1000
system: nintendo-snes
size: 4096
validation: [size]
required: true
note: "NEC uPD96050 data ROM for ST011. No HLE fallback"
source_ref: "sfc/cartridge/load.cpp:599-601"
@@ -131,13 +159,17 @@ files:
# No HLE fallback exists
- name: "st018.program.rom"
size: 131072 # 0x20000 (128 KB)
system: nintendo-snes
size: 131072
validation: [size]
required: true
note: "ARM6 program ROM for ST018 (Hayazashi Nidan Morita Shougi). No HLE fallback"
source_ref: "sfc/cartridge/load.cpp:379-385, armdsp/armdsp.hpp:31, heuristics/super-famicom.cpp:580"
- name: "st018.data.rom"
size: 32768 # 0x8000 (32 KB)
system: nintendo-snes
size: 32768
validation: [size]
required: true
note: "ARM6 data ROM for ST018. No HLE fallback"
source_ref: "sfc/cartridge/load.cpp:387-393, armdsp/armdsp.hpp:32"
@@ -148,11 +180,16 @@ files:
# Built-in staticDataROM fallback also present for LLE when file missing
- name: "cx4.data.rom"
size: 3072 # 0xC00
system: nintendo-snes
size: 3072
sha1: a002f4efba42775a31185d443f3ed1790b0e949a
md5: 037ac4296b6b6a5c47c440188d3c72e3
crc32: b6e76a6a
validation: [size]
required: false
hle_fallback: true
note: "Hitachi HG51BS169 data ROM for Cx4 (Mega Man X2/X3). HLE fallback and built-in static ROM available"
source_ref: "sfc/cartridge/load.cpp:444-456, hitachidsp/hitachidsp.hpp:49, heuristics/super-famicom.cpp:597"
source_ref: "sfc/cartridge/load.cpp:444-456, hitachidsp/hitachidsp.hpp:49, heuristics/super-famicom.cpp:597, hitachidsp/data-rom.cpp:3 (staticDataROM[3072])"
# -- Super Game Boy cartridge ROM --
# The SGB boot ROMs (256 bytes each) are embedded in icd/boot-roms.cpp.
@@ -160,23 +197,26 @@ files:
# Core option bsnes_sgb_bios selects between SGB1.sfc and SGB2.sfc.
- name: "SGB1.sfc"
system: nintendo-super-game-boy
required: false
note: "Super Game Boy 1 cartridge ROM. Needed to play Game Boy games via SGB mode"
source_ref: "target-libretro/libretro.cpp:689,933, target-libretro/libretro_core_options.h:689"
note: "Super Game Boy 1 cartridge ROM, loaded when playing .gb/.gbc via SGB mode"
source_ref: "target-libretro/libretro.cpp:926-935 (system_dir + sgb_bios), libretro.cpp:509 (core option bsnes_sgb_bios)"
- name: "SGB2.sfc"
system: nintendo-super-game-boy
required: false
note: "Super Game Boy 2 cartridge ROM. Uses dedicated oscillator for accurate GB speed"
source_ref: "target-libretro/libretro.cpp:690,933, target-libretro/libretro_core_options.h:690"
note: "Super Game Boy 2 cartridge ROM, uses dedicated oscillator for accurate GB speed"
source_ref: "target-libretro/libretro.cpp:926-935 (system_dir + sgb_bios), libretro.cpp:509 (core option bsnes_sgb_bios)"
# -- BS-X Satellaview BIOS --
# Required for loading .bs (BS Memory) format games.
# Hardcoded filename in libretro.cpp.
- name: "BS-X.bin"
system: nintendo-satellaview
required: true
note: "BS-X Satellaview BIOS ROM. Required for .bs games"
source_ref: "target-libretro/libretro.cpp:948"
note: "BS-X Satellaview BIOS ROM, loaded from system_dir when running .bs games"
source_ref: "target-libretro/libretro.cpp:944-951 (system_dir + BS-X.bin hardcoded, .bs extension branch)"
notes:
hle_available: true

View File

@@ -35,9 +35,10 @@ files:
system: nintendo-3ds
description: "ARM9 bootrom"
required: false
size: 65536
validation: [size]
source_ref: "src/core/hw/aes/key.cpp:162-172 LoadBootromKeys(), src/core/hw/rsa/rsa.cpp:55-65 InitSlots()"
note: "expected size 65536 bytes, provides AES and RSA keys"
note: "provides AES and RSA keys"
- name: shared_font.bin
path: "Citra/sysdata/shared_font.bin"

View File

@@ -720,7 +720,8 @@ files:
# MSX (machine_name: "MSX")
# -------------------------------------------------------
- name: msx.rom
path: MSX/msx.rom
aliases: [MSX.ROM]
path: MSX/MSX.ROM
description: "Generic MSX BIOS"
size: 32768
crc32: "94ee12f3"
@@ -768,7 +769,8 @@ files:
source_ref: "Machines/Utility/ROMCatalogue.cpp:763-769"
- name: msx2.rom
path: MSX/msx2.rom
aliases: [MSX2.ROM]
path: MSX/MSX2.ROM
description: "Generic MSX2 BIOS"
size: 32768
crc32: "6cdaf3a5"
@@ -778,7 +780,8 @@ files:
source_ref: "Machines/Utility/ROMCatalogue.cpp:771-778"
- name: msx2ext.rom
path: MSX/msx2ext.rom
aliases: [MSX2EXT.ROM]
path: MSX/MSX2EXT.ROM
description: "MSX2 extension ROM"
size: 16384
crc32: "66237ecf"

View File

@@ -53,6 +53,7 @@ files:
- name: "cromwell_1024.bin"
path: "cromwell_1024.bin"
size: 1048576
validation: [size]
required: true
note: >

View File

@@ -244,7 +244,7 @@ files:
- name: "fuse/128p-0.rom"
system: sinclair-zxspectrum
required: true
md5: ""
size: 16384
validation: [size]
note: "Pentagon 128K/512K/1024 ROM 0. Required for Pentagon machines."
@@ -253,7 +253,7 @@ files:
- name: "fuse/128p-1.rom"
system: sinclair-zxspectrum
required: true
md5: ""
size: 16384
validation: [size]
note: "Pentagon 128K/512K/1024 ROM 1. Required for Pentagon machines."
@@ -262,7 +262,7 @@ files:
- name: "fuse/trdos.rom"
system: sinclair-zxspectrum
required: true
md5: ""
size: 16384
validation: [size]
note: "TR-DOS ROM (Beta 128 disk interface). Used by Pentagon and Scorpion."
@@ -271,7 +271,7 @@ files:
- name: "fuse/gluck.rom"
system: sinclair-zxspectrum
required: true
md5: ""
size: 16384
validation: [size]
note: "Gluck ROM. Required for Pentagon 512K and 1024."
@@ -281,7 +281,7 @@ files:
- name: "fuse/256s-0.rom"
system: sinclair-zxspectrum
required: true
md5: ""
size: 16384
validation: [size]
note: "Scorpion 256K ROM 0. Required for Scorpion machine."
@@ -290,7 +290,7 @@ files:
- name: "fuse/256s-1.rom"
system: sinclair-zxspectrum
required: true
md5: ""
size: 16384
validation: [size]
note: "Scorpion 256K ROM 1. Required for Scorpion machine."
@@ -299,7 +299,7 @@ files:
- name: "fuse/256s-2.rom"
system: sinclair-zxspectrum
required: true
md5: ""
size: 16384
validation: [size]
note: "Scorpion 256K ROM 2. Required for Scorpion machine."
@@ -308,7 +308,7 @@ files:
- name: "fuse/256s-3.rom"
system: sinclair-zxspectrum
required: true
md5: ""
size: 16384
validation: [size]
note: "Scorpion 256K ROM 3 (TR-DOS). Required for Scorpion machine."
@@ -318,7 +318,7 @@ files:
- name: "fuse/if1-2.rom"
system: sinclair-zxspectrum
required: false
md5: ""
size: 8192
validation: [size]
note: "Interface 1 ROM (edition 2). Loaded by peripherals/if1.c:403."
@@ -347,7 +347,7 @@ files:
- name: "fuse/didaktik80.rom"
system: sinclair-zxspectrum
required: false
md5: ""
size: 14336
validation: [size]
note: "Didaktik 80 disk interface ROM. Not embedded."
@@ -356,7 +356,7 @@ files:
- name: "fuse/opus.rom"
system: sinclair-zxspectrum
required: false
md5: ""
size: 8192
validation: [size]
note: "Opus Discovery disk interface ROM. Not embedded."
@@ -365,7 +365,7 @@ files:
- name: "fuse/mf1.rom"
system: sinclair-zxspectrum
required: false
md5: ""
size: 8192
validation: [size]
note: "Multiface 1 ROM. Not embedded."
@@ -374,7 +374,7 @@ files:
- name: "fuse/mf128.rom"
system: sinclair-zxspectrum
required: false
md5: ""
size: 8192
validation: [size]
note: "Multiface 128 ROM. Not embedded."
@@ -383,7 +383,7 @@ files:
- name: "fuse/mf3.rom"
system: sinclair-zxspectrum
required: false
md5: ""
size: 8192
validation: [size]
note: "Multiface 3 ROM. Not embedded."
@@ -402,7 +402,7 @@ files:
- name: "fuse/ttx2000s.rom"
system: sinclair-zxspectrum
required: false
md5: ""
size: 8192
validation: [size]
note: "TTX2000S teletext adapter ROM. Not embedded."
@@ -411,7 +411,7 @@ files:
- name: "fuse/usource.rom"
system: sinclair-zxspectrum
required: false
md5: ""
size: 8192
validation: [size]
note: "Currah uSource ROM. Not embedded."

View File

@@ -24,7 +24,7 @@ files:
hle_fallback: true
size: 4096
validation: {core: [size], upstream: [size, crc32]}
crc32: "0x2ab23573"
crc32: 2ab23573
source_ref: "src/NDS.h:196, src/NDS.cpp:467-477, src/frontend/Util_ROM.cpp:99-111"
note: "FreeBIOS fallback (src/FreeBIOS.h); native needed for Key1 cartridge crypto"
@@ -35,7 +35,7 @@ files:
hle_fallback: true
size: 16384
validation: {core: [size], upstream: [size, crc32]}
crc32: "0x1280f0d5"
crc32: 1280f0d5
source_ref: "src/NDS.h:197, src/NDS.cpp:482-492, src/frontend/Util_ROM.cpp:117-131"
note: "FreeBIOS fallback (src/FreeBIOS.h); native needed for Key1 init at offset 0x0030"
@@ -44,6 +44,8 @@ files:
description: "NDS firmware image"
required: false
hle_fallback: true
min_size: 262144
max_size: 524288
validation: [size]
source_ref: "src/SPI.cpp:192-211, src/frontend/Util_ROM.cpp:174-195"
note: "Generated 128KB firmware as fallback; native must be 256KB or 512KB for boot"
@@ -55,7 +57,7 @@ files:
required: true
size: 65536
validation: {core: [size], upstream: [size, crc32]}
crc32: "0xBAE84F6C"
crc32: bae84f6c
source_ref: "src/DSi.h:33, src/DSi.cpp:587-599, src/frontend/Util_ROM.cpp:145-156"
- name: dsi_bios7.bin
@@ -64,7 +66,7 @@ files:
required: true
size: 65536
validation: {core: [size], upstream: [size, crc32]}
crc32: "0x4316CC42"
crc32: 4316cc42
source_ref: "src/DSi.h:34, src/DSi.cpp:604-620, src/frontend/Util_ROM.cpp:158-170"
note: "Contains eMMC key-Y at offset 0x8308 for NAND init"

View File

@@ -27,7 +27,7 @@ files:
hle_fallback: true
size: 16384
validation: [size]
crc32: "0x1280f0d5"
crc32: 1280f0d5
source_ref: "src/libretro/config/console.cpp:219, melonDS:src/MemConstants.h:31,36"
- name: bios9.bin
@@ -37,7 +37,7 @@ files:
hle_fallback: true
size: 4096
validation: [size]
crc32: "0x2ab23573"
crc32: 2ab23573
source_ref: "src/libretro/config/console.cpp:220, melonDS:src/MemConstants.h:30,37"
- name: firmware.bin
@@ -55,7 +55,7 @@ files:
required: true
size: 65536
validation: [size]
crc32: "0x4316CC42"
crc32: 4316cc42
source_ref: "src/libretro/config/console.cpp:333, melonDS:src/MemConstants.h:32,44"
note: "Contains eMMC key-Y at offset 0x8308 for NAND init"
@@ -65,7 +65,7 @@ files:
required: true
size: 65536
validation: [size]
crc32: "0xBAE84F6C"
crc32: bae84f6c
source_ref: "src/libretro/config/console.cpp:338, melonDS:src/MemConstants.h:32,45"
- name: dsi_firmware.bin

View File

@@ -65,5 +65,7 @@ files:
description: "External NES color palette"
required: false
source_ref: "Libretro/libretro.cpp:301-323 (load_custom_palette), Libretro/libretro.cpp:405-406 (called when mesen_palette == Custom)"
min_size: 192
max_size: 1536
validation: [size]
note: "Loaded when mesen_palette core option is Custom. Accepts exactly 192 bytes (64 RGB triplets) or 1536 bytes (512 entries for emphasis combos). Falls back to built-in default palette if size doesn't match."
note: "Accepts 192 bytes (64 RGB triplets) or 1536 bytes (512 emphasis combos). Falls back to built-in default if size doesn't match."

View File

@@ -533,7 +533,7 @@ files:
- name: "U-Boot LEON3"
path: "qemu/u-boot.bin"
sha1: ""
required: false
note: "U-Boot for LEON3 SPARC board. Not shipped with QEMU, user-supplied."
source_ref: "hw/sparc/leon3.c:53"
@@ -611,28 +611,28 @@ files:
# ========================================================
- name: "MIPS BIOS (big-endian)"
path: "qemu/mips_bios.bin"
sha1: ""
required: false
note: "Default BIOS for big-endian MIPS machines (Malta, MIPSsim, Jazz). Not shipped with QEMU."
source_ref: "hw/mips/malta.c:97"
- name: "MIPS BIOS (little-endian)"
path: "qemu/mipsel_bios.bin"
sha1: ""
required: false
note: "Default BIOS for little-endian MIPS machines (Malta, MIPSsim, Jazz). Not shipped with QEMU."
source_ref: "hw/mips/malta.c:99"
- name: "Loongson3 BIOS"
path: "qemu/bios_loongson3.bin"
sha1: ""
required: false
note: "Default BIOS for Loongson3 virtual MIPS machine. Not shipped with QEMU."
source_ref: "hw/mips/loongson3_virt.c:63"
- name: "PMON Fuloong2e"
path: "qemu/pmon_2e.bin"
sha1: ""
required: false
note: "PMON monitor for Fuloong2e MIPS board. Not shipped with QEMU."
source_ref: "hw/mips/fuloong2e.c:58"
@@ -642,7 +642,7 @@ files:
# ========================================================
- name: "Macintosh ROM"
path: "qemu/MacROM.bin"
sha1: ""
required: false
note: "Apple Macintosh ROM for Quadra 800 emulation. Not shipped with QEMU."
source_ref: "hw/m68k/q800.c:62"
@@ -652,7 +652,7 @@ files:
# ========================================================
- name: "Canon A1100 ROM"
path: "qemu/canon-a1100-rom1.bin"
sha1: ""
required: false
note: "Canon PowerShot A1100 IS DIGIC camera ROM. Not shipped with QEMU."
source_ref: "hw/arm/digic_boards.c:131"
@@ -702,7 +702,7 @@ files:
- name: "Virtex ML507 DTB (PPC)"
path: "qemu/virtex-ml507.dtb"
sha1: ""
required: false
note: "Device tree blob for Xilinx Virtex ML507 PowerPC board. Not shipped with QEMU."
source_ref: "hw/ppc/virtex_ml507.c:148"

View File

@@ -24,36 +24,43 @@ notes: |
files:
- name: kvs1.wav
aliases: [KVS1.WAV]
description: "KidVid Voice Module audio tape 1 (Smurfs Save the Day)"
required: false
category: game_data
source_ref: "stella/src/emucore/KidVid.cxx:167,182"
- name: kvs2.wav
aliases: [KVS2.WAV]
description: "KidVid Voice Module audio tape 2 (Smurfs Save the Day)"
required: false
category: game_data
source_ref: "stella/src/emucore/KidVid.cxx:167,182"
- name: kvs3.wav
aliases: [KVS3.WAV]
description: "KidVid Voice Module audio tape 3 (Smurfs Save the Day)"
required: false
category: game_data
source_ref: "stella/src/emucore/KidVid.cxx:167,182"
- name: kvb1.wav
aliases: [KVB1.WAV]
description: "KidVid Voice Module audio tape 1 (Berenstain Bears)"
required: false
category: game_data
source_ref: "stella/src/emucore/KidVid.cxx:167,182"
- name: kvb2.wav
aliases: [KVB2.WAV]
description: "KidVid Voice Module audio tape 2 (Berenstain Bears)"
required: false
category: game_data
source_ref: "stella/src/emucore/KidVid.cxx:167,182"
- name: kvb3.wav
aliases: [KVB3.WAV]
description: "KidVid Voice Module audio tape 3 (Berenstain Bears)"
required: false
category: game_data
source_ref: "stella/src/emucore/KidVid.cxx:167,182"
- name: kvshared.wav
aliases: [KVSHARED.WAV]
description: "KidVid Voice Module shared audio samples"
required: false
category: game_data

View File

@@ -86,6 +86,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: 79015323128650c742a3694c9429aa91f355905e
md5: 57af4ae21d4b705c2991d98ed5c1f7b8
crc32: f833d117
note: "C64 BASIC V2 ROM. Embedded in core."
source_ref: "vice/src/c64/c64rom.h:31"
@@ -95,6 +98,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: 1d503e56df85a62fee696e7618dc5b4e781df1bb
md5: 39065497630802346bce17963f13c092
crc32: dbe3e7c7
note: "C64 Kernal Rev 3 (default). Embedded in core."
source_ref: "vice/src/c64/c64rom.h:52"
@@ -104,6 +110,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: 87cc04d61fc748b82df09856847bb5c2754a2033
md5: 1ae0ea224f2b291dafa2c20b990bb7d4
crc32: dce782fa
note: "C64 Kernal Rev 1. Embedded in core."
source_ref: "vice/src/c64/c64rom.h:50"
@@ -113,6 +122,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: 0e2e4ee3f2d41f00bed72f9ab588b83e306fdb13
md5: 7360b296d64e18b88f6cf52289fd99a1
crc32: a5c687b3
note: "C64 Kernal Rev 2. Embedded in core."
source_ref: "vice/src/c64/c64rom.h:51"
@@ -122,6 +134,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: 3ad6cc1837c679a11f551ad1cf1a32dd84ace719
md5: ddee89b0fed19572da5245ea68ff11b5
crc32: 505365d4
note: "C64 GS (Games System) Kernal. Embedded in core."
source_ref: "vice/src/c64/c64rom.h:53"
@@ -131,6 +146,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: aa136e91ecf3c5ac64f696b3dbcbfc5ba0871c98
md5: 187b8c713b51931e070872bd390b472a
crc32: 2c5965d4
note: "SX-64 Kernal. Embedded in core."
source_ref: "vice/src/c64/c64rom.h:54"
@@ -140,6 +158,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: 6c4fa9465f6091b174df27dfe679499df447503c
md5: da92801e3a03b005b746a4dd0b639c7c
crc32: 789c8cc5
note: "PET64/Educator64 (4064) Kernal. Embedded in core."
source_ref: "vice/src/c64/c64rom.h:55"
@@ -149,6 +170,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: 4ff0f11e80f4b57430d8f0c3799ed0f0e0f4565d
md5: 479553fd53346ec84054f0b1c6237397
crc32: 3a9ef6f1
note: "C64 Japanese Kernal. Embedded in core."
source_ref: "vice/src/c64/c64rom.h:49"
@@ -158,6 +182,9 @@ files:
hle_fallback: true
embedded: true
size: 4096
sha1: adc7c31e18c7c7413d54802ef2f4193da14711aa
md5: 12a4202f5331d45af846af6c58fba946
crc32: ec4272ee
note: "C64 Character Generator ROM (default). Embedded in core."
source_ref: "vice/src/c64/c64rom.h:60"
@@ -167,6 +194,9 @@ files:
hle_fallback: true
embedded: true
size: 4096
sha1: 0fad19dbcdb12461c99657b2979dbb5c2e47b527
md5: cf32a93c0a693ed359a4f483ef6db53d
crc32: 1604f6c1
note: "C64 Japanese Character Generator ROM. Embedded in core."
source_ref: "vice/src/c64/c64rom.h:61"
@@ -180,6 +210,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: ceb6e1a1bf7e08eb9cbc651afa29e26adccf38ab
md5: 01f6903033b90cd506cde7802ec743c3
crc32: ba456b8e
note: "C128 Kernal (default international). Embedded in core."
source_ref: "vice/src/c128/c128rom.h:103"
@@ -189,6 +222,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: 3629b3fa28b6a30bcc027b647f26654929ed1b0f
md5: 9837409b6bdb7ce055409fa3eb3e9cf0
crc32: bff7550b
note: "C128 Kernal German. Embedded in core."
source_ref: "vice/src/c128/c128rom.h:105"
@@ -198,6 +234,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: 98c34e0dec9f52d7862b56bb287d2573eb3f6364
md5: 90907477d39db1b8fe1732692278a0e9
crc32: d311dab1
note: "C128 Kernal Swiss. Embedded in core."
source_ref: "vice/src/c128/c128rom.h:104"
@@ -207,6 +246,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: 925177c99ee7e02870c32ad62a054db1327cf0c2
md5: 7852922295c103f067ba3c0f56378a95
crc32: 1cf7f729
note: "C128 Kernal Swedish. Embedded in core."
source_ref: "vice/src/c128/c128rom.h:110"
@@ -216,6 +258,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: d08e7991a6df14a843e92daafaf6756337959ba4
md5: 0a0eb549ec08624de11cf1f249f6f3dc
crc32: d3ecea84
note: "C128 Kernal Finnish (unidentified part number). Embedded in core."
source_ref: "vice/src/c128/c128rom.h:106"
@@ -225,6 +270,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: a0680d04db3232fa9f58598e5c9f09c4fe94f601
md5: 7a7747aa70fd63402c6a95fba0bd6806
crc32: 2df282b8
note: "C128 Kernal French (unidentified part number). Embedded in core."
source_ref: "vice/src/c128/c128rom.h:107"
@@ -234,6 +282,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: 592a626eb2b5372596ac374d3505c3ce78dd040f
md5: 142c8bd5934e9d97addb6776a2f2e8b8
crc32: 74d6b084
note: "C128 Kernal Italian (unidentified part number). Embedded in core."
source_ref: "vice/src/c128/c128rom.h:108"
@@ -243,6 +294,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: 00fe2fd610a812121befab1e7238fa882c0f8257
md5: 498fdedaeab458931b6103d52d5a3ea1
crc32: a5406848
note: "C128 Kernal Norwegian (unidentified part number). Embedded in core."
source_ref: "vice/src/c128/c128rom.h:109"
@@ -252,6 +306,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: d53a7884404f7d18ebd60dd3080c8f8d71067441
md5: b86ce827c9108fbc7b9e02c690e81a23
crc32: 9f9c355b
note: "C128 BASIC low (BASIC part). Embedded in core."
source_ref: "vice/src/c128/c128rom.h:115"
@@ -261,6 +318,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: c4fb4a714e48a7bf6c28659de0302183a0e0d6c0
md5: 87bb251707d0a2c915d6e0c69fdb0fed
crc32: 6e2c91a7
note: "C128 BASIC high (Editor part). Embedded in core."
source_ref: "vice/src/c128/c128rom.h:116"
@@ -288,6 +348,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: b4862cac7b9319d8e912887c97fc270d4c239349
md5: 8fa940c39225d40f37ddf7082fba8b21
crc32: dd2976d2
note: "C128 C64-mode Kernal Norwegian. Embedded in core."
source_ref: "vice/src/c128/c128rom.h:136"
@@ -297,6 +360,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: e4f52d9b36c030eb94524eb49f6f0774c1d02e5e
md5: 27e26dbb267c8ebf1cd47105a6ca71e7
crc32: f10c2c25
note: "C128 C64-mode Kernal Swedish. Embedded in core."
source_ref: "vice/src/c128/c128rom.h:137"
@@ -306,6 +372,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: 29ed066d513f2d5c09ff26d9166ba23c2afb2b3f
md5: 46b3cb2140f244c0ed1150c819e7bdc4
crc32: 6aaaafe6
note: "C128 Character Generator (default international). Embedded in core."
source_ref: "vice/src/c128/c128rom.h:92"
@@ -315,6 +384,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: 638f8aff51c2ac4f99a55b12c4f8c985ef4bebd3
md5: ec9e71614010c4efb851b83bcd685e9c
crc32: fe5a2db1
note: "C128 Character Generator German. Embedded in core."
source_ref: "vice/src/c128/c128rom.h:95"
@@ -324,6 +396,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: 9119b27a1bf885fa4c76fff5d858c74c194dd2b8
md5: de3e110a48de76457dbc9ad320e2caa5
crc32: bad36b88
note: "C128 Character Generator Italian/French/Belgian. Embedded in core."
source_ref: "vice/src/c128/c128rom.h:93"
@@ -333,6 +408,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: 70eccd8b944146f6b60f1519b830a4ee8928d4fa
md5: 5cc3635e434fdc7023d0035e965ce76f
crc32: c8def186
note: "C128 Character Generator Swiss. Embedded in core."
source_ref: "vice/src/c128/c128rom.h:94"
@@ -342,6 +420,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: 5a87faa457979e7b6f434251a9e32f4483b337b3
md5: 7eead22a114154c809b33320c9250e26
crc32: ba95c625
note: "C128 Character Generator Norwegian. Embedded in core."
source_ref: "vice/src/c128/c128rom.h:99"
@@ -351,6 +432,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: aca3f7321ee7e6152f1f0afad646ae41964de4fb
md5: 06e46af13d13aa869218275e64d48b00
crc32: 7a70d9b8
note: "C128 Character Generator Finnish/Swedish. Embedded in core."
source_ref: "vice/src/c128/c128rom.h:96"
@@ -364,6 +448,9 @@ files:
hle_fallback: true
embedded: true
size: 2097152
sha1: 72b4c8da075646cc9940e4377004c81192c7b0b1
md5: d6efbc538195f53cfc209543640cde71
crc32: 242daa5a
note: "C64 DTV flash ROM (2 MB). Contains kernal, basic, chargen. Embedded in core."
source_ref: "vice/src/c64dtv/c64dtvflash.c:59-64"
@@ -373,6 +460,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: 79015323128650c742a3694c9429aa91f355905e
md5: 57af4ae21d4b705c2991d98ed5c1f7b8
crc32: f833d117
note: "C64 BASIC V2 ROM (DTV copy). Embedded in core."
source_ref: "vice/data/C64DTV/"
@@ -382,6 +472,9 @@ files:
hle_fallback: true
embedded: true
size: 4096
sha1: adc7c31e18c7c7413d54802ef2f4193da14711aa
md5: 12a4202f5331d45af846af6c58fba946
crc32: ec4272ee
note: "C64 Character Generator (DTV copy). Embedded in core."
source_ref: "vice/data/C64DTV/"
@@ -391,6 +484,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: 1d503e56df85a62fee696e7618dc5b4e781df1bb
md5: 39065497630802346bce17963f13c092
crc32: dbe3e7c7
note: "C64 Kernal Rev 3 (DTV copy). Embedded in core."
source_ref: "vice/data/C64DTV/"
@@ -404,6 +500,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: 587d1e90950675ab6b12d91248a3f0d640d02e8d
md5: 8b9237706f47a9b3498d8f881ef0244d
crc32: db4c43c1
note: "VIC-20 BASIC ROM. Embedded in core."
source_ref: "vice/src/vic20/vic20rom.h:43"
@@ -413,6 +512,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: ce0137ed69f003a299f43538fa9eee27898e621e
md5: f0587624dcd7685710a8fdb35939617f
crc32: 4be07cb4
note: "VIC-20 Kernal PAL (default). Embedded in core."
source_ref: "vice/src/vic20/vic20rom.h:53"
@@ -422,6 +524,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: 06de7ec017a5e78bd6746d89c2ecebb646efeb19
md5: 0313e31e5f31e1f739c2377792460d67
crc32: e5e7c174
note: "VIC-20 Kernal NTSC. Embedded in core."
source_ref: "vice/src/vic20/vic20rom.h:52"
@@ -431,6 +536,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: c9ead45e6674d1042ca6199160e8583c23aeac22
md5: 317f93bcbc5ee15da085a51a306f2c61
crc32: 336900d7
note: "VIC-20 Kernal Japanese NTSC Rev 2. Embedded in core."
source_ref: "vice/src/vic20/vic20rom.h:51"
@@ -440,6 +548,9 @@ files:
hle_fallback: true
embedded: true
size: 4096
sha1: 4fd85ab6647ee2ac7ba40f729323f2472d35b9b4
md5: d390e340e94e1bef0f2fdfe9fa850993
crc32: 83e032a6
note: "VIC-20 Character Generator (default). Embedded in core."
source_ref: "vice/src/vic20/vic20rom.h:56"
@@ -449,6 +560,9 @@ files:
hle_fallback: true
embedded: true
size: 4096
sha1: dae61ac03065aa2904af5c123ce821855898c555
md5: 7e6e41b5b60fec798743afd7063b42ed
crc32: fcfd8a4b
note: "VIC-20 Japanese Character Generator. Embedded in core."
source_ref: "vice/src/vic20/vic20rom.h:57"
@@ -462,6 +576,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: 161c96b4ad20f3a4f2321808e37a5ded26a135dd
md5: 44a4ae400e3b4f7533a47ae0df1be78c
crc32: 74eaae87
note: "Plus/4 BASIC ROM. Embedded in core."
source_ref: "vice/src/plus4/plus4rom.h:33"
@@ -471,6 +588,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: 7c7e07f016391174a557e790c4ef1cbe33512cdb
md5: 89f5263665a8dc10c8f8abc38f5f7eb9
crc32: 71c07bd4
note: "Plus/4 Kernal PAL Rev 5 (default PAL). Embedded in core."
source_ref: "vice/src/plus4/plus4rom.h:36"
@@ -480,6 +600,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: a3d9e5be091b98de39a046ab167fb7632d053682
md5: b3c450c36a88b491281d18fdf3e94ab0
crc32: 70295038
note: "Plus/4 Kernal NTSC Rev 5 (default NTSC). Embedded in core."
source_ref: "vice/src/plus4/plus4rom.h:37"
@@ -489,6 +612,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: 3c77caf72914c1c0a0875b3a7f6935cd30c54201
md5: a213823557421b66f9813ff19af48c01
crc32: dbdc3319
note: "Plus/4 Kernal NTSC Rev 1 (V232 prototype). Embedded in core."
source_ref: "vice/src/plus4/plus4rom.h:35"
@@ -498,6 +624,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: b9a5b5dacd57ca117ef0b3af29e91998bf4d7e5f
md5: 7abb51257595b233a1a63ae58c330a65
crc32: 84fd4f7a
note: "Commodore 364 prototype Kernal. Embedded in core."
source_ref: "vice/src/plus4/plus4rom.h:38"
@@ -507,6 +636,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: 3b69f6e7cb4c18bb08e203fb18b7dabfa853390f
md5: 2994d5463ef8524deb4231a9c764767c
crc32: 4fd1d8cb
note: "3-Plus-1 software ROM low. Embedded in core."
source_ref: "vice/src/plus4/plus4rom.h:40"
@@ -516,6 +648,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: 0ad7ac2db7da692d972e586ca0dfd747d82c7693
md5: ac34591c820fe607d527e04e95bce465
crc32: 109de2fc
note: "3-Plus-1 software ROM high. Embedded in core."
source_ref: "vice/src/plus4/plus4rom.h:41"
@@ -525,6 +660,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: 59af401cbb2194f689898271c6e8aafa28a7af11
md5: 0073ace3874a2c5ca5de9cf64cdfbbd4
crc32: 5227c2ee
note: "Commodore 364 prototype function ROM low. Embedded in core."
source_ref: "vice/src/plus4/plus4rom.h:43"
@@ -538,6 +676,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: 3be9cd41b646fefa00d80f1c3433a06146e97c59
md5: f328e785835907006604423222db7bbf
crc32: aff78300
note: "PET BASIC 1.0 ROM (PET 2001). Embedded in core."
source_ref: "vice/src/pet/petrom.h:55"
@@ -547,6 +688,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: 9322a9f0354b9049847d98d3a045fbec860a6264
md5: b69739387bebe999227ae0cf25aa1e91
crc32: cf35e68b
note: "PET BASIC 2.0 ROM. Embedded in core."
source_ref: "vice/src/pet/petrom.h:56"
@@ -556,6 +700,9 @@ files:
hle_fallback: true
embedded: true
size: 12288
sha1: d70bec479e1e3a0d0908a4897066e9959bbc11c8
md5: d22d2a1912a0cdbd9e7c8b103541b2c6
crc32: 2a940f0a
note: "PET BASIC 4.0 ROM. Embedded in core."
source_ref: "vice/src/pet/petrom.h:57"
@@ -565,6 +712,9 @@ files:
hle_fallback: true
embedded: true
size: 4096
sha1: 32dc08828e88c74d6433156e64d402b564556308
md5: 61b7e2fd04d63b0702951ba40899cd72
crc32: f0186492
note: "PET Kernal 1.0 (PET 2001). Embedded in core."
source_ref: "vice/src/pet/petrom.h:51"
@@ -574,6 +724,9 @@ files:
hle_fallback: true
embedded: true
size: 4096
sha1: 38742bdf449f629bcba6276ef24d3daeb7da6e84
md5: 51a38bfef8f9e72cb64bf7d874b4c8c6
crc32: f02238e2
note: "PET Kernal 2.0. Embedded in core."
source_ref: "vice/src/pet/petrom.h:52"
@@ -583,6 +736,9 @@ files:
hle_fallback: true
embedded: true
size: 4096
sha1: 96a0fa56e0c937da92971d9c99d504e44e898806
md5: 16ec21443ea5431ab63d511061054e6f
crc32: cc5298a1
note: "PET Kernal 4.0. Embedded in core."
source_ref: "vice/src/pet/petrom.h:53"
@@ -592,6 +748,9 @@ files:
hle_fallback: true
embedded: true
size: 2048
sha1: f02f5fb492ba93dbbd390f24c10f7a832dec432a
md5: ef9bd0e62dfc47eb463fef20d0344826
crc32: 9e1c5cea
note: "PET Editor 1.0 Normal (graphics keyboard). Embedded in core."
source_ref: "vice/src/pet/petrom.h:59"
@@ -601,6 +760,9 @@ files:
hle_fallback: true
embedded: true
size: 2048
sha1: 5e5502ce32f5a7e387d65efe058916282041e54b
md5: cb8e8404c0b28eda10469792dfd1dbc2
crc32: e459ab32
note: "PET Editor 2.0 Normal (graphics keyboard). Embedded in core."
source_ref: "vice/src/pet/petrom.h:60"
@@ -610,6 +772,9 @@ files:
hle_fallback: true
embedded: true
size: 2048
sha1: 174ace3a8c0348cd21d39cc864e2adc58b0101a9
md5: 7f87889ca7ee2537f0c1993d35d0fb18
crc32: 05db957e
note: "PET Editor 2.0 Business keyboard. Embedded in core."
source_ref: "vice/src/pet/petrom.h:61"
@@ -619,6 +784,9 @@ files:
hle_fallback: true
embedded: true
size: 2048
sha1: 05af284c914d53a52987b5f602466de75765f650
md5: b76d756e7ac8752ae0035f3ce5f1383c
crc32: 3370e359
note: "PET Editor 4.0, 40 col, Normal keyboard, 50Hz. Embedded in core."
source_ref: "vice/src/pet/petrom.h:62"
@@ -628,6 +796,9 @@ files:
hle_fallback: true
embedded: true
size: 2048
sha1: 9f91fbabfdd532d003d2508f399574ba8ec6ee5f
md5: 8e69e040489098522846b1b1c63682c2
crc32: 16fb070c
note: "PET Editor 4.0, 40 col, Business keyboard, 50Hz. Embedded in core."
source_ref: "vice/src/pet/petrom.h:65"
@@ -637,6 +808,9 @@ files:
hle_fallback: true
embedded: true
size: 2048
sha1: 81975eab31a8f4f51ae2a20d099a567c7b3f2dd1
md5: 3a0e2ef328040aa30b30a8134426879a
crc32: 845a44e6
note: "PET Editor 4.0, 80 col, Business keyboard, 50Hz. Embedded in core."
source_ref: "vice/src/pet/petrom.h:63"
@@ -646,6 +820,9 @@ files:
hle_fallback: true
embedded: true
size: 2048
sha1: 3e067cc621e4beafca2b90cb8f6dba975df2855b
md5: 29a82eb54e73ebc5673c718c489b174b
crc32: 54f32f45
note: "PET Character Generator 1 (original PET 2001). Embedded in core."
source_ref: "vice/src/pet/petrom.h:46"
@@ -655,6 +832,9 @@ files:
hle_fallback: true
embedded: true
size: 2048
sha1: 0157a2d55b7ac4eaeb38475889ebeea52e2593db
md5: 9880432e633b15998d58884ff34c4e70
crc32: d8408674
note: "PET Character Generator 2. Embedded in core."
source_ref: "vice/src/pet/petrom.h:47"
@@ -664,6 +844,9 @@ files:
hle_fallback: true
embedded: true
size: 4096
sha1: bf346f11595a3e65e55d6aeeaa2c0cec807b66c7
md5: dd30641d9e6a221edd725d1e529dcbdb
crc32: ee8229c4
note: "SuperPET Character Generator. Embedded in core."
source_ref: "vice/src/pet/petrom.h:48"
@@ -673,6 +856,9 @@ files:
hle_fallback: true
embedded: true
size: 4096
sha1: 0414b3ab847c8977eb05c2fcc72efcf2f9d92871
md5: 6eb1c1bfa6ce1444737794432966dfcc
crc32: 728a998b
note: "SuperPET Waterloo microEngine 6809 ROM at $A000. Embedded in core."
source_ref: "vice/src/pet/petrom.h:75"
@@ -682,6 +868,9 @@ files:
hle_fallback: true
embedded: true
size: 4096
sha1: df154939b934d0aeeb376813ec1ba0d43c2a3378
md5: 537498d75ecf761d4991f9ebd85129ca
crc32: 6beb7c62
note: "SuperPET Waterloo microEngine 6809 ROM at $B000. Embedded in core."
source_ref: "vice/src/pet/petrom.h:76"
@@ -691,6 +880,9 @@ files:
hle_fallback: true
embedded: true
size: 4096
sha1: 6c5b0cce97068f8841112ba6d5cd8e568b562fa3
md5: 3e8dd04902dc9fee172084698f84695f
crc32: 5db4983d
note: "SuperPET Waterloo microEngine 6809 ROM at $C000. Embedded in core."
source_ref: "vice/src/pet/petrom.h:77"
@@ -700,6 +892,9 @@ files:
hle_fallback: true
embedded: true
size: 4096
sha1: b42a2050a319a1ffca7868a8d8d635fadd37ec37
md5: 80f4d2351ee19673820989919c7c1e9b
crc32: f55fc559
note: "SuperPET Waterloo microEngine 6809 ROM at $D000. Embedded in core."
source_ref: "vice/src/pet/petrom.h:78"
@@ -709,6 +904,9 @@ files:
hle_fallback: true
embedded: true
size: 2048
sha1: e8ce8347451a001214a5e71a13081b38b4be23bc
md5: a740ff5d0d1132ab18cfc1974fca908d
crc32: b2cee903
note: "SuperPET Waterloo microEngine 6809 ROM at $E000. Embedded in core."
source_ref: "vice/src/pet/petrom.h:79"
@@ -718,6 +916,9 @@ files:
hle_fallback: true
embedded: true
size: 4096
sha1: 9b4a5134d20345171e7303445f87c4e0b9addc96
md5: 049e2d26fde71a741f6075ecbf0a432d
crc32: f42df0cb
note: "SuperPET Waterloo microEngine 6809 ROM at $F000. Embedded in core."
source_ref: "vice/src/pet/petrom.h:80"
@@ -731,6 +932,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: 9409f92e167984096fe4d5913714bff6214c3b2d
md5: 3ad5c7182006bcad1597583dbc8505c9
crc32: a8ff9372
note: "CBM-II BASIC 128 (CBM 610/620/710/720). Embedded in core."
source_ref: "vice/src/cbm2/cbm2rom.h:41"
@@ -740,6 +944,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: 53314b4d565cc405a67a0936b935e6e08955580d
md5: 6a505014e543c62e99668080a3b80b40
crc32: 5db15870
note: "CBM-II BASIC 256 (CBM 710/720 with 256K). Embedded in core."
source_ref: "vice/src/cbm2/cbm2rom.h:42"
@@ -749,6 +956,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: e69531d45f5993f8e53c6bd9ab2a7bc10fe2d02f
md5: 5a9559ceaf1a0bef0e721242c67a030d
crc32: 9a468e5d
note: "CBM-II BASIC 500 (CBM 510/P500). Embedded in core."
source_ref: "vice/src/cbm2/cbm2rom.h:43"
@@ -758,6 +968,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: abb26418b9e1614a8f52bdeee0822d4a96071439
md5: e0346953e77bd1353ebf53aaa5b6f0b0
crc32: 09a5667e
note: "CBM-II Kernal (CBM 610/620/710/720). Embedded in core."
source_ref: "vice/src/cbm2/cbm2rom.h:45"
@@ -767,6 +980,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: 097197d4d08e0b82e0466a5f1fbd49a24f3d2523
md5: 1a19593625acdc5af96a5e78b1a23f37
crc32: f46bbd2b
note: "CBM-II Kernal 500 (CBM 510/P500). Embedded in core."
source_ref: "vice/src/cbm2/cbm2rom.h:46"
@@ -776,6 +992,9 @@ files:
hle_fallback: true
embedded: true
size: 4096
sha1: adc7c31e18c7c7413d54802ef2f4193da14711aa
md5: 12a4202f5331d45af846af6c58fba946
crc32: ec4272ee
note: "CBM-II Character Generator 500 (VIC-II based, CBM 510/P500). Embedded in core."
source_ref: "vice/src/cbm2/cbm2rom.h:37"
@@ -785,6 +1004,9 @@ files:
hle_fallback: true
embedded: true
size: 4096
sha1: e63bf18da48e5a53c99ef127c1ae721333d1d102
md5: 2818722af27ceae6952c08cf83a076f9
crc32: 1acf5098
note: "CBM-II Character Generator 600 (CBM 610/620). Embedded in core."
source_ref: "vice/src/cbm2/cbm2rom.h:38"
@@ -794,6 +1016,9 @@ files:
hle_fallback: true
embedded: true
size: 4096
sha1: e7f3cbc8e282f79a00c3e95d75c8d725ee3c6287
md5: 03f32477905d77e2135857076ec31efa
crc32: 3a350bc3
note: "CBM-II Character Generator 700 (CBM 710/720). Embedded in core."
source_ref: "vice/src/cbm2/cbm2rom.h:39"
@@ -807,6 +1032,9 @@ files:
hle_fallback: true
embedded: true
size: 65536
sha1: f5b6da17ee8206ff0d2258e1d6e8b798147c2650
md5: 006862e9a52d987970435988e3803c71
crc32: 89c1a062
note: "SuperCPU64 internal ROM (default). Embedded in core."
source_ref: "retrodep/ui.c:269"
@@ -816,6 +1044,9 @@ files:
hle_fallback: true
embedded: true
size: 4096
sha1: adc7c31e18c7c7413d54802ef2f4193da14711aa
md5: 12a4202f5331d45af846af6c58fba946
crc32: ec4272ee
note: "C64 Character Generator (used by SCPU64). Embedded in core."
source_ref: "vice/src/scpu64/scpu64rom.h:36"
@@ -825,6 +1056,9 @@ files:
hle_fallback: true
embedded: true
size: 4096
sha1: 0fad19dbcdb12461c99657b2979dbb5c2e47b527
md5: cf32a93c0a693ed359a4f483ef6db53d
crc32: 1604f6c1
note: "C64 Japanese Character Generator (used by SCPU64). Embedded in core."
source_ref: "vice/src/scpu64/scpu64rom.h:37"
@@ -854,6 +1088,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: 3477c14e0c79faa445224dad16534f04ed143e44
md5: 87e849da3c87549848550fe4dd4d1aae
crc32: 718d42b1
note: "1540 drive DOS ROM. Embedded in core."
source_ref: "vice/src/drive/driverom.h:88"
@@ -863,6 +1100,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: ab16f56989b27d89babe5f89c5a8cb3da71a82f0
md5: a0ce8439d1b8dcf2e1430461f7233a72
crc32: 57224cde
note: "1541 drive DOS ROM. Embedded in core."
source_ref: "vice/src/drive/driverom.h:89"
@@ -872,6 +1112,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: d3b78c3dbac55f5199f33f3fe0036439811f7fb3
md5: ada295382a1f2df772a7e5c5c6f34215
crc32: 899fa3c5
note: "1541-II drive DOS ROM. Embedded in core."
source_ref: "vice/src/drive/driverom.h:90"
@@ -881,6 +1124,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: fae3c788ad9a6cc2dbdfbcf6c0264b2ca921d55e
md5: 0c767bf0a84d7751af056e53a074c9e2
crc32: 6d16d024
note: "1551 drive DOS ROM (Plus/4 specific). Embedded in core."
source_ref: "vice/src/drive/driverom.h:92"
@@ -890,6 +1136,9 @@ files:
hle_fallback: true
embedded: true
size: 32768
sha1: 5fc06dc82ff6840f183bd43a4d9b8a16956b2f56
md5: f0799353f0e22cf7d783e447adcafde2
crc32: 5a0c7937
note: "1570 drive DOS ROM. Embedded in core."
source_ref: "vice/src/drive/driverom.h:93"
@@ -899,6 +1148,9 @@ files:
hle_fallback: true
embedded: true
size: 32768
sha1: f1be619c106641a685f6609e4d43d6fc9eac1e70
md5: dae964d64b7843ff86c008d396dda208
crc32: 5755bae3
note: "1571 drive DOS ROM. Embedded in core."
source_ref: "vice/src/drive/driverom.h:94"
@@ -908,6 +1160,9 @@ files:
hle_fallback: true
embedded: true
size: 32768
sha1: 14ee7a0fb7e1c59c51fbf781f944387037daa3ee
md5: f9158328494b3e269f86ef419792c2e5
crc32: f24efcc4
note: "1571CR drive DOS ROM (cost-reduced, C128D internal). Embedded in core."
source_ref: "vice/src/drive/driverom.h:95"
@@ -917,6 +1172,9 @@ files:
hle_fallback: true
embedded: true
size: 32768
sha1: 01228eae6f066bd9b7b2b6a7fa3f667e41dad393
md5: 6a82f92aea2a3afa190fe32d565f39e7
crc32: a9011b84
note: "1581 drive DOS ROM. Embedded in core."
source_ref: "vice/src/drive/driverom.h:96"
@@ -926,6 +1184,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: d50b093828888146596f17ae0df9ef3dfde71b05
md5: 2d967790361aa77de87a24fb93e342f9
crc32: 87e6a94e
note: "CBM 1001 (SFD-1001) drive DOS ROM. Embedded in core."
source_ref: "vice/src/drive/driverom.h:70"
@@ -935,6 +1196,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: c53e180a96649ceb3f421739e8dc66faba7cba44
md5: 3454c06fd2275f5bcbfe936dcdf8059b
crc32: 21b80fdf
note: "CBM 2031 drive DOS ROM. Embedded in core."
source_ref: "vice/src/drive/driverom.h:73"
@@ -944,6 +1208,9 @@ files:
hle_fallback: true
embedded: true
size: 8192
sha1: e37b3bfd801eb19dea50cf8b4a6af8613c3520d3
md5: 3efff682000fd841b4dd6560bf53e37c
crc32: d04c1fbb
note: "CBM 2040 dual drive DOS ROM. Embedded in core."
source_ref: "vice/src/drive/driverom.h:76"
@@ -953,6 +1220,9 @@ files:
hle_fallback: true
embedded: true
size: 12288
sha1: 02bd4b0c8508b3874b95799a9a63caf369c837de
md5: 139e72a58b7ddb2f92ceb18c8735c53c
crc32: f4967a7f
note: "CBM 3040 dual drive DOS ROM. Embedded in core."
source_ref: "vice/src/drive/driverom.h:79"
@@ -962,6 +1232,9 @@ files:
hle_fallback: true
embedded: true
size: 12288
sha1: 245abbe76581558d270cdbb6fe55f56748403d8e
md5: 2fce6a76c738d1a10c189bf0660d868e
crc32: 40e0ebaa
note: "CBM 4040 dual drive DOS ROM. Embedded in core."
source_ref: "vice/src/drive/driverom.h:82"
@@ -971,6 +1244,9 @@ files:
hle_fallback: true
embedded: true
size: 16384
sha1: c48df2cbb0eea656c3243df7ea8bfefcd171b8e8
md5: d6d4df6f2811767de6f5bf46ad7fba69
crc32: 632a328e
note: "CBM D9090/D9060 hard drive DOS ROM. Embedded in core."
source_ref: "vice/src/drive/driverom.h:85"

View File

@@ -101,4 +101,50 @@ foreach ($f in $toDownload) {
}
}
# Standalone emulator copies
if ($manifest.standalone_copies) {
Write-Host "`nStandalone emulators:"
foreach ($entry in $manifest.standalone_copies) {
if ($entry.note) {
$detectPaths = @()
if ($entry.detect -and $entry.detect.windows) {
$detectPaths = $entry.detect.windows
}
foreach ($dp in $detectPaths) {
$expanded = [Environment]::ExpandEnvironmentVariables($dp)
if (Test-Path $expanded) {
Write-Host " $($entry.note)"
break
}
}
continue
}
$sources = @()
if ($entry.pattern) {
$sources = Get-ChildItem -Path $biosPath -Filter $entry.pattern -File -ErrorAction SilentlyContinue
} elseif ($entry.file) {
$src = Join-Path $biosPath $entry.file
if (Test-Path $src) { $sources = @(Get-Item $src) }
}
if ($sources.Count -eq 0) { continue }
$targetDirs = @()
if ($entry.targets -and $entry.targets.windows) {
$targetDirs = $entry.targets.windows
}
foreach ($td in $targetDirs) {
$expanded = [Environment]::ExpandEnvironmentVariables($td)
if (-not (Test-Path $expanded)) { continue }
foreach ($s in $sources) {
$dest = Join-Path $expanded $s.Name
try {
Copy-Item $s.FullName $dest -Force
Write-Host " $($s.Name) -> $expanded"
} catch {
Write-Host " $($s.Name) -> $expanded FAILED" -ForegroundColor Red
}
}
}
}
}
Write-Host "`nDone. $downloaded downloaded, $upToDate already up to date."

View File

@@ -192,9 +192,9 @@ def detect_platforms(os_type: str) -> list[tuple[str, Path]]:
if retrodeck_cfg.exists():
bios_path = _parse_bash_var(retrodeck_cfg, "rdhome")
if bios_path:
found.append(("retrodeck", Path(bios_path) / "bios"))
found.append(("retrodeck", Path(bios_path)))
else:
found.append(("retrodeck", home / "retrodeck" / "bios"))
found.append(("retrodeck", home / "retrodeck"))
# RetroArch Flatpak
flatpak_cfg = home / ".var" / "app" / "org.libretro.RetroArch" / "config" / "retroarch" / "retroarch.cfg"
@@ -390,8 +390,16 @@ def do_standalone_copies(
) -> tuple[int, int]:
"""Copy BIOS files to standalone emulator directories.
Supports:
- file: single file copy
- pattern: glob match (e.g. "scph*.bin")
- note: informational message when detect path exists
- WSL fallback to linux targets
Returns (copied_count, skipped_count).
"""
from fnmatch import fnmatch
copies = manifest.get("standalone_copies", [])
if not copies:
return 0, 0
@@ -400,21 +408,48 @@ def do_standalone_copies(
skipped = 0
for entry in copies:
src = bios_path / entry["file"]
if not src.exists():
# Note entries: print message if emulator detected
if "note" in entry:
detect_paths = entry.get("detect", {}).get(os_type, [])
if not detect_paths and os_type == "wsl":
detect_paths = entry.get("detect", {}).get("linux", [])
for dp in detect_paths:
expanded = Path(os.path.expandvars(os.path.expanduser(dp)))
if expanded.is_dir():
print(f" {entry['note']}")
break
continue
# Resolve source files
if "pattern" in entry:
sources = [
f for f in bios_path.rglob("*")
if fnmatch(f.name, entry["pattern"]) and f.is_file()
]
else:
src = bios_path / entry["file"]
sources = [src] if src.exists() else []
if not sources:
continue
# Resolve target directories with WSL fallback
targets = entry.get("targets", {}).get(os_type, [])
if not targets and os_type == "wsl":
targets = entry.get("targets", {}).get("linux", [])
for target_dir_str in targets:
target_dir = Path(os.path.expandvars(os.path.expanduser(target_dir_str)))
if target_dir.is_dir():
if not target_dir.is_dir():
skipped += len(sources)
continue
for src in sources:
dest = target_dir / src.name
try:
shutil.copy2(src, dest)
copied += 1
except OSError:
skipped += 1
else:
skipped += 1
return copied, skipped

View File

@@ -4,7 +4,7 @@
"platform": "batocera",
"display_name": "Batocera",
"version": "1.0",
"generated": "2026-04-02T13:52:15Z",
"generated": "2026-04-18T07:55:01Z",
"base_destination": "bios",
"detect": [
{
@@ -14,9 +14,224 @@
"bios_path": "/userdata/bios"
}
],
"standalone_copies": [],
"total_files": 1547,
"total_size": 4371484317,
"standalone_copies": [
{
"file": "prod.keys",
"targets": {
"linux": [
"$HOME/.local/share/yuzu/keys",
"$HOME/.local/share/eden/keys",
"$HOME/.local/share/citron/keys",
"$HOME/.local/share/suyu/keys",
"$HOME/.config/Ryujinx/system"
],
"windows": [
"%APPDATA%\\yuzu\\keys",
"%APPDATA%\\eden\\keys",
"%APPDATA%\\citron\\keys",
"%APPDATA%\\suyu\\keys",
"%APPDATA%\\Ryujinx\\system"
],
"darwin": [
"$HOME/Library/Application Support/yuzu/keys",
"$HOME/Library/Application Support/Ryujinx/system"
]
}
},
{
"file": "title.keys",
"targets": {
"linux": [
"$HOME/.local/share/yuzu/keys",
"$HOME/.local/share/eden/keys",
"$HOME/.local/share/citron/keys",
"$HOME/.local/share/suyu/keys"
],
"windows": [
"%APPDATA%\\yuzu\\keys",
"%APPDATA%\\eden\\keys",
"%APPDATA%\\citron\\keys",
"%APPDATA%\\suyu\\keys"
],
"darwin": [
"$HOME/Library/Application Support/yuzu/keys"
]
}
},
{
"file": "Citra/sysdata/aes_keys.txt",
"targets": {
"linux": [
"$HOME/.local/share/azahar/sysdata"
],
"windows": [
"%APPDATA%\\Azahar\\sysdata"
]
}
},
{
"file": "Citra/sysdata/boot9.bin",
"targets": {
"linux": [
"$HOME/.local/share/azahar/sysdata"
],
"windows": [
"%APPDATA%\\Azahar\\sysdata"
]
}
},
{
"pattern": "scph*.bin",
"targets": {
"linux": [
"$HOME/.local/share/duckstation/bios"
],
"windows": [
"%LOCALAPPDATA%\\DuckStation\\bios",
"%USERPROFILE%\\Documents\\DuckStation\\bios"
],
"darwin": [
"$HOME/Library/Application Support/DuckStation/bios"
]
}
},
{
"pattern": "ps2-*.bin",
"targets": {
"linux": [
"$HOME/.config/PCSX2/bios",
"$HOME/.var/app/net.pcsx2.PCSX2/config/PCSX2/bios"
],
"windows": [
"%USERPROFILE%\\Documents\\PCSX2\\bios"
],
"darwin": [
"$HOME/Library/Application Support/PCSX2/bios"
]
}
},
{
"note": "PS3 firmware (PS3UPDAT.PUP) found. Install via RPCS3 > File > Install Firmware.",
"detect": {
"linux": [
"$HOME/.config/rpcs3"
],
"windows": [
"%APPDATA%\\rpcs3"
]
}
},
{
"file": "GC/USA/IPL.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu/GC/USA"
],
"windows": [
"%APPDATA%\\Dolphin Emulator\\GC\\USA"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin/GC/USA"
]
}
},
{
"file": "GC/EUR/IPL.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu/GC/EUR"
],
"windows": [
"%APPDATA%\\Dolphin Emulator\\GC\\EUR"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin/GC/EUR"
]
}
},
{
"file": "GC/JAP/IPL.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu/GC/JAP"
],
"windows": [
"%APPDATA%\\Dolphin Emulator\\GC\\JAP"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin/GC/JAP"
]
}
},
{
"file": "dsp_rom.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu"
],
"windows": [
"%APPDATA%\\Dolphin Emulator"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin"
]
}
},
{
"file": "dsp_coef.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu"
],
"windows": [
"%APPDATA%\\Dolphin Emulator"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin"
]
}
},
{
"file": "PPSSPP/ppge_atlas.zim",
"targets": {
"linux": [
"$HOME/.config/ppsspp/PSP/SYSTEM"
],
"windows": [
"%USERPROFILE%\\Documents\\PPSSPP\\PSP\\SYSTEM"
],
"darwin": [
"$HOME/Library/Application Support/PPSSPP/PSP/SYSTEM"
]
}
},
{
"file": "dc/dc_boot.bin",
"targets": {
"linux": [
"$HOME/.local/share/flycast/data",
"$HOME/.var/app/org.flycast.Flycast/data/flycast"
],
"windows": [
"%APPDATA%\\flycast\\data"
]
}
},
{
"file": "dc/dc_nvmem.bin",
"targets": {
"linux": [
"$HOME/.local/share/flycast/data",
"$HOME/.var/app/org.flycast.Flycast/data/flycast"
],
"windows": [
"%APPDATA%\\flycast\\data"
]
}
}
],
"total_files": 1540,
"total_size": 4337691265,
"files": [
{
"dest": "panafz1.bin",
@@ -4507,7 +4722,7 @@
]
},
{
"dest": "MSX/msx.rom",
"dest": "MSX/MSX.ROM",
"sha1": "409e82adac40f6bdd18eb6c84e8b2fbdc7fb5498",
"size": 32768,
"repo_path": "bios/Microsoft/MSX/MSX.ROM",
@@ -4552,7 +4767,7 @@
]
},
{
"dest": "MSX/msx2.rom",
"dest": "MSX/MSX2.ROM",
"sha1": "6103b39f1e38d1aa2d84b1c3219c44f1abb5436e",
"size": 32768,
"repo_path": "bios/Microsoft/MSX/MSX2.ROM",
@@ -4561,7 +4776,7 @@
]
},
{
"dest": "MSX/msx2ext.rom",
"dest": "MSX/MSX2EXT.ROM",
"sha1": "5c1f9c7fb655e43d38e5dd1fcc6b942b2ff68b02",
"size": 16384,
"repo_path": "bios/Microsoft/MSX/MSX2EXT.ROM",
@@ -9160,69 +9375,6 @@
"SquirrelJME"
]
},
{
"dest": "kvs1.wav",
"sha1": "b094c2c1fca81a0e531e0541f302346150ec4604",
"size": 3436329,
"repo_path": "bios/Atari/2600/KVS1.WAV",
"cores": [
"Stella 2014"
]
},
{
"dest": "kvs2.wav",
"sha1": "8b83b2eea01b3e08ceb885aeb153d4084bddb63c",
"size": 2086275,
"repo_path": "bios/Atari/2600/KVS2.WAV",
"cores": [
"Stella 2014"
]
},
{
"dest": "kvs3.wav",
"sha1": "86896a1e272d8715489de9b407f0b8a42f82d4a0",
"size": 3720920,
"repo_path": "bios/Atari/2600/KVS3.WAV",
"cores": [
"Stella 2014"
]
},
{
"dest": "kvb1.wav",
"sha1": "6a582aebcefd6e2a97bdd8968202aab9851a889c",
"size": 4219542,
"repo_path": "bios/Atari/2600/KVB1.WAV",
"cores": [
"Stella 2014"
]
},
{
"dest": "kvb2.wav",
"sha1": "60a425c6bde3226ab731995562716321be20fc49",
"size": 9593878,
"repo_path": "bios/Atari/2600/KVB2.WAV",
"cores": [
"Stella 2014"
]
},
{
"dest": "kvb3.wav",
"sha1": "5e34125c4d6c209b21d1c892f3df0ec1644fd0d8",
"size": 7676992,
"repo_path": "bios/Atari/2600/KVB3.WAV",
"cores": [
"Stella 2014"
]
},
{
"dest": "kvshared.wav",
"sha1": "9adf10cdf1de833b194c7d8797ad1f041ad98dd3",
"size": 3059116,
"repo_path": "bios/Atari/2600/KVSHARED.WAV",
"cores": [
"Stella 2014"
]
},
{
"dest": "KVS1.WAV",
"sha1": "b094c2c1fca81a0e531e0541f302346150ec4604",

View File

@@ -4,7 +4,7 @@
"platform": "bizhawk",
"display_name": "BizHawk",
"version": "1.0",
"generated": "2026-04-02T13:52:21Z",
"generated": "2026-04-18T07:55:07Z",
"base_destination": "Firmware",
"detect": [
{
@@ -285,7 +285,7 @@
"dest": "VEC_Minestorm.vec",
"sha1": "65d07426b520ddd3115d40f255511e0fd2e20ae7",
"size": 8192,
"repo_path": "bios/GCE/Vectrex/VEC_MineStorm.vec",
"repo_path": "bios/GCE/Vectrex/VEC_Minestorm.vec",
"cores": null
},
{

View File

@@ -4,7 +4,7 @@
"platform": "emudeck",
"display_name": "EmuDeck",
"version": "1.0",
"generated": "2026-04-01T14:41:53Z",
"generated": "2026-04-03T09:43:22Z",
"base_destination": "bios",
"detect": [
{
@@ -34,19 +34,211 @@
"linux": [
"$HOME/.local/share/yuzu/keys",
"$HOME/.local/share/eden/keys",
"$HOME/.local/share/citron/keys",
"$HOME/.local/share/suyu/keys",
"$HOME/.config/Ryujinx/system"
],
"windows": [
"%APPDATA%\\yuzu\\keys",
"%APPDATA%\\eden\\keys"
"%APPDATA%\\eden\\keys",
"%APPDATA%\\citron\\keys",
"%APPDATA%\\suyu\\keys",
"%APPDATA%\\Ryujinx\\system"
],
"darwin": [
"$HOME/Library/Application Support/yuzu/keys",
"$HOME/Library/Application Support/Ryujinx/system"
]
}
},
{
"file": "aes_keys.txt",
"file": "title.keys",
"targets": {
"linux": [
"$HOME/Emulation/bios/citra/keys"
"$HOME/.local/share/yuzu/keys",
"$HOME/.local/share/eden/keys",
"$HOME/.local/share/citron/keys",
"$HOME/.local/share/suyu/keys"
],
"windows": [
"%APPDATA%\\yuzu\\keys",
"%APPDATA%\\eden\\keys",
"%APPDATA%\\citron\\keys",
"%APPDATA%\\suyu\\keys"
],
"darwin": [
"$HOME/Library/Application Support/yuzu/keys"
]
}
},
{
"file": "Citra/sysdata/aes_keys.txt",
"targets": {
"linux": [
"$HOME/.local/share/azahar/sysdata"
],
"windows": [
"%APPDATA%\\Azahar\\sysdata"
]
}
},
{
"file": "Citra/sysdata/boot9.bin",
"targets": {
"linux": [
"$HOME/.local/share/azahar/sysdata"
],
"windows": [
"%APPDATA%\\Azahar\\sysdata"
]
}
},
{
"pattern": "scph*.bin",
"targets": {
"linux": [
"$HOME/.local/share/duckstation/bios"
],
"windows": [
"%LOCALAPPDATA%\\DuckStation\\bios",
"%USERPROFILE%\\Documents\\DuckStation\\bios"
],
"darwin": [
"$HOME/Library/Application Support/DuckStation/bios"
]
}
},
{
"pattern": "ps2-*.bin",
"targets": {
"linux": [
"$HOME/.config/PCSX2/bios",
"$HOME/.var/app/net.pcsx2.PCSX2/config/PCSX2/bios"
],
"windows": [
"%USERPROFILE%\\Documents\\PCSX2\\bios"
],
"darwin": [
"$HOME/Library/Application Support/PCSX2/bios"
]
}
},
{
"note": "PS3 firmware (PS3UPDAT.PUP) found. Install via RPCS3 > File > Install Firmware.",
"detect": {
"linux": [
"$HOME/.config/rpcs3"
],
"windows": [
"%APPDATA%\\rpcs3"
]
}
},
{
"file": "GC/USA/IPL.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu/GC/USA"
],
"windows": [
"%APPDATA%\\Dolphin Emulator\\GC\\USA"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin/GC/USA"
]
}
},
{
"file": "GC/EUR/IPL.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu/GC/EUR"
],
"windows": [
"%APPDATA%\\Dolphin Emulator\\GC\\EUR"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin/GC/EUR"
]
}
},
{
"file": "GC/JAP/IPL.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu/GC/JAP"
],
"windows": [
"%APPDATA%\\Dolphin Emulator\\GC\\JAP"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin/GC/JAP"
]
}
},
{
"file": "dsp_rom.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu"
],
"windows": [
"%APPDATA%\\Dolphin Emulator"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin"
]
}
},
{
"file": "dsp_coef.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu"
],
"windows": [
"%APPDATA%\\Dolphin Emulator"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin"
]
}
},
{
"file": "PPSSPP/ppge_atlas.zim",
"targets": {
"linux": [
"$HOME/.config/ppsspp/PSP/SYSTEM"
],
"windows": [
"%USERPROFILE%\\Documents\\PPSSPP\\PSP\\SYSTEM"
],
"darwin": [
"$HOME/Library/Application Support/PPSSPP/PSP/SYSTEM"
]
}
},
{
"file": "dc/dc_boot.bin",
"targets": {
"linux": [
"$HOME/.local/share/flycast/data",
"$HOME/.var/app/org.flycast.Flycast/data/flycast"
],
"windows": [
"%APPDATA%\\flycast\\data"
]
}
},
{
"file": "dc/dc_nvmem.bin",
"targets": {
"linux": [
"$HOME/.local/share/flycast/data",
"$HOME/.var/app/org.flycast.Flycast/data/flycast"
],
"windows": [
"%APPDATA%\\flycast\\data"
]
}
}

View File

@@ -4,7 +4,7 @@
"platform": "lakka",
"display_name": "Lakka",
"version": "1.0",
"generated": "2026-04-02T13:52:45Z",
"generated": "2026-04-18T07:55:35Z",
"base_destination": "system",
"detect": [
{
@@ -9837,66 +9837,66 @@
]
},
{
"dest": "kvs1.wav",
"dest": "KVS1.WAV",
"sha1": "b094c2c1fca81a0e531e0541f302346150ec4604",
"size": 3436329,
"repo_path": "bios/Atari/2600/KVS1.WAV",
"cores": [
"Stella 2014"
"Stella 2023"
]
},
{
"dest": "kvs2.wav",
"dest": "KVS2.WAV",
"sha1": "8b83b2eea01b3e08ceb885aeb153d4084bddb63c",
"size": 2086275,
"repo_path": "bios/Atari/2600/KVS2.WAV",
"cores": [
"Stella 2014"
"Stella 2023"
]
},
{
"dest": "kvs3.wav",
"dest": "KVS3.WAV",
"sha1": "86896a1e272d8715489de9b407f0b8a42f82d4a0",
"size": 3720920,
"repo_path": "bios/Atari/2600/KVS3.WAV",
"cores": [
"Stella 2014"
"Stella 2023"
]
},
{
"dest": "kvb1.wav",
"dest": "KVB1.WAV",
"sha1": "6a582aebcefd6e2a97bdd8968202aab9851a889c",
"size": 4219542,
"repo_path": "bios/Atari/2600/KVB1.WAV",
"cores": [
"Stella 2014"
"Stella 2023"
]
},
{
"dest": "kvb2.wav",
"dest": "KVB2.WAV",
"sha1": "60a425c6bde3226ab731995562716321be20fc49",
"size": 9593878,
"repo_path": "bios/Atari/2600/KVB2.WAV",
"cores": [
"Stella 2014"
"Stella 2023"
]
},
{
"dest": "kvb3.wav",
"dest": "KVB3.WAV",
"sha1": "5e34125c4d6c209b21d1c892f3df0ec1644fd0d8",
"size": 7676992,
"repo_path": "bios/Atari/2600/KVB3.WAV",
"cores": [
"Stella 2014"
"Stella 2023"
]
},
{
"dest": "kvshared.wav",
"dest": "KVSHARED.WAV",
"sha1": "9adf10cdf1de833b194c7d8797ad1f041ad98dd3",
"size": 3059116,
"repo_path": "bios/Atari/2600/KVSHARED.WAV",
"cores": [
"Stella 2014"
"Stella 2023"
]
},
{

View File

@@ -4,7 +4,7 @@
"platform": "recalbox",
"display_name": "Recalbox",
"version": "1.0",
"generated": "2026-04-02T13:53:15Z",
"generated": "2026-04-18T07:56:06Z",
"base_destination": "bios",
"detect": [
{
@@ -14,9 +14,224 @@
"bios_path": "/recalbox/share/bios"
}
],
"standalone_copies": [],
"total_files": 1107,
"total_size": 3980096655,
"standalone_copies": [
{
"file": "prod.keys",
"targets": {
"linux": [
"$HOME/.local/share/yuzu/keys",
"$HOME/.local/share/eden/keys",
"$HOME/.local/share/citron/keys",
"$HOME/.local/share/suyu/keys",
"$HOME/.config/Ryujinx/system"
],
"windows": [
"%APPDATA%\\yuzu\\keys",
"%APPDATA%\\eden\\keys",
"%APPDATA%\\citron\\keys",
"%APPDATA%\\suyu\\keys",
"%APPDATA%\\Ryujinx\\system"
],
"darwin": [
"$HOME/Library/Application Support/yuzu/keys",
"$HOME/Library/Application Support/Ryujinx/system"
]
}
},
{
"file": "title.keys",
"targets": {
"linux": [
"$HOME/.local/share/yuzu/keys",
"$HOME/.local/share/eden/keys",
"$HOME/.local/share/citron/keys",
"$HOME/.local/share/suyu/keys"
],
"windows": [
"%APPDATA%\\yuzu\\keys",
"%APPDATA%\\eden\\keys",
"%APPDATA%\\citron\\keys",
"%APPDATA%\\suyu\\keys"
],
"darwin": [
"$HOME/Library/Application Support/yuzu/keys"
]
}
},
{
"file": "Citra/sysdata/aes_keys.txt",
"targets": {
"linux": [
"$HOME/.local/share/azahar/sysdata"
],
"windows": [
"%APPDATA%\\Azahar\\sysdata"
]
}
},
{
"file": "Citra/sysdata/boot9.bin",
"targets": {
"linux": [
"$HOME/.local/share/azahar/sysdata"
],
"windows": [
"%APPDATA%\\Azahar\\sysdata"
]
}
},
{
"pattern": "scph*.bin",
"targets": {
"linux": [
"$HOME/.local/share/duckstation/bios"
],
"windows": [
"%LOCALAPPDATA%\\DuckStation\\bios",
"%USERPROFILE%\\Documents\\DuckStation\\bios"
],
"darwin": [
"$HOME/Library/Application Support/DuckStation/bios"
]
}
},
{
"pattern": "ps2-*.bin",
"targets": {
"linux": [
"$HOME/.config/PCSX2/bios",
"$HOME/.var/app/net.pcsx2.PCSX2/config/PCSX2/bios"
],
"windows": [
"%USERPROFILE%\\Documents\\PCSX2\\bios"
],
"darwin": [
"$HOME/Library/Application Support/PCSX2/bios"
]
}
},
{
"note": "PS3 firmware (PS3UPDAT.PUP) found. Install via RPCS3 > File > Install Firmware.",
"detect": {
"linux": [
"$HOME/.config/rpcs3"
],
"windows": [
"%APPDATA%\\rpcs3"
]
}
},
{
"file": "GC/USA/IPL.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu/GC/USA"
],
"windows": [
"%APPDATA%\\Dolphin Emulator\\GC\\USA"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin/GC/USA"
]
}
},
{
"file": "GC/EUR/IPL.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu/GC/EUR"
],
"windows": [
"%APPDATA%\\Dolphin Emulator\\GC\\EUR"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin/GC/EUR"
]
}
},
{
"file": "GC/JAP/IPL.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu/GC/JAP"
],
"windows": [
"%APPDATA%\\Dolphin Emulator\\GC\\JAP"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin/GC/JAP"
]
}
},
{
"file": "dsp_rom.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu"
],
"windows": [
"%APPDATA%\\Dolphin Emulator"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin"
]
}
},
{
"file": "dsp_coef.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu"
],
"windows": [
"%APPDATA%\\Dolphin Emulator"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin"
]
}
},
{
"file": "PPSSPP/ppge_atlas.zim",
"targets": {
"linux": [
"$HOME/.config/ppsspp/PSP/SYSTEM"
],
"windows": [
"%USERPROFILE%\\Documents\\PPSSPP\\PSP\\SYSTEM"
],
"darwin": [
"$HOME/Library/Application Support/PPSSPP/PSP/SYSTEM"
]
}
},
{
"file": "dc/dc_boot.bin",
"targets": {
"linux": [
"$HOME/.local/share/flycast/data",
"$HOME/.var/app/org.flycast.Flycast/data/flycast"
],
"windows": [
"%APPDATA%\\flycast\\data"
]
}
},
{
"file": "dc/dc_nvmem.bin",
"targets": {
"linux": [
"$HOME/.local/share/flycast/data",
"$HOME/.var/app/org.flycast.Flycast/data/flycast"
],
"windows": [
"%APPDATA%\\flycast\\data"
]
}
}
],
"total_files": 1100,
"total_size": 3946303603,
"files": [
{
"dest": "3do/panafz1.bin",
@@ -6753,69 +6968,6 @@
"SAME CDi"
]
},
{
"dest": "kvs1.wav",
"sha1": "b094c2c1fca81a0e531e0541f302346150ec4604",
"size": 3436329,
"repo_path": "bios/Atari/2600/KVS1.WAV",
"cores": [
"Stella 2014"
]
},
{
"dest": "kvs2.wav",
"sha1": "8b83b2eea01b3e08ceb885aeb153d4084bddb63c",
"size": 2086275,
"repo_path": "bios/Atari/2600/KVS2.WAV",
"cores": [
"Stella 2014"
]
},
{
"dest": "kvs3.wav",
"sha1": "86896a1e272d8715489de9b407f0b8a42f82d4a0",
"size": 3720920,
"repo_path": "bios/Atari/2600/KVS3.WAV",
"cores": [
"Stella 2014"
]
},
{
"dest": "kvb1.wav",
"sha1": "6a582aebcefd6e2a97bdd8968202aab9851a889c",
"size": 4219542,
"repo_path": "bios/Atari/2600/KVB1.WAV",
"cores": [
"Stella 2014"
]
},
{
"dest": "kvb2.wav",
"sha1": "60a425c6bde3226ab731995562716321be20fc49",
"size": 9593878,
"repo_path": "bios/Atari/2600/KVB2.WAV",
"cores": [
"Stella 2014"
]
},
{
"dest": "kvb3.wav",
"sha1": "5e34125c4d6c209b21d1c892f3df0ec1644fd0d8",
"size": 7676992,
"repo_path": "bios/Atari/2600/KVB3.WAV",
"cores": [
"Stella 2014"
]
},
{
"dest": "kvshared.wav",
"sha1": "9adf10cdf1de833b194c7d8797ad1f041ad98dd3",
"size": 3059116,
"repo_path": "bios/Atari/2600/KVSHARED.WAV",
"cores": [
"Stella 2014"
]
},
{
"dest": "KVS1.WAV",
"sha1": "b094c2c1fca81a0e531e0541f302346150ec4604",

View File

@@ -4,7 +4,7 @@
"platform": "retroarch",
"display_name": "RetroArch",
"version": "1.0",
"generated": "2026-04-02T13:52:45Z",
"generated": "2026-04-18T07:55:35Z",
"base_destination": "system",
"detect": [
{
@@ -32,7 +32,222 @@
"parse_key": "system_directory"
}
],
"standalone_copies": [],
"standalone_copies": [
{
"file": "prod.keys",
"targets": {
"linux": [
"$HOME/.local/share/yuzu/keys",
"$HOME/.local/share/eden/keys",
"$HOME/.local/share/citron/keys",
"$HOME/.local/share/suyu/keys",
"$HOME/.config/Ryujinx/system"
],
"windows": [
"%APPDATA%\\yuzu\\keys",
"%APPDATA%\\eden\\keys",
"%APPDATA%\\citron\\keys",
"%APPDATA%\\suyu\\keys",
"%APPDATA%\\Ryujinx\\system"
],
"darwin": [
"$HOME/Library/Application Support/yuzu/keys",
"$HOME/Library/Application Support/Ryujinx/system"
]
}
},
{
"file": "title.keys",
"targets": {
"linux": [
"$HOME/.local/share/yuzu/keys",
"$HOME/.local/share/eden/keys",
"$HOME/.local/share/citron/keys",
"$HOME/.local/share/suyu/keys"
],
"windows": [
"%APPDATA%\\yuzu\\keys",
"%APPDATA%\\eden\\keys",
"%APPDATA%\\citron\\keys",
"%APPDATA%\\suyu\\keys"
],
"darwin": [
"$HOME/Library/Application Support/yuzu/keys"
]
}
},
{
"file": "Citra/sysdata/aes_keys.txt",
"targets": {
"linux": [
"$HOME/.local/share/azahar/sysdata"
],
"windows": [
"%APPDATA%\\Azahar\\sysdata"
]
}
},
{
"file": "Citra/sysdata/boot9.bin",
"targets": {
"linux": [
"$HOME/.local/share/azahar/sysdata"
],
"windows": [
"%APPDATA%\\Azahar\\sysdata"
]
}
},
{
"pattern": "scph*.bin",
"targets": {
"linux": [
"$HOME/.local/share/duckstation/bios"
],
"windows": [
"%LOCALAPPDATA%\\DuckStation\\bios",
"%USERPROFILE%\\Documents\\DuckStation\\bios"
],
"darwin": [
"$HOME/Library/Application Support/DuckStation/bios"
]
}
},
{
"pattern": "ps2-*.bin",
"targets": {
"linux": [
"$HOME/.config/PCSX2/bios",
"$HOME/.var/app/net.pcsx2.PCSX2/config/PCSX2/bios"
],
"windows": [
"%USERPROFILE%\\Documents\\PCSX2\\bios"
],
"darwin": [
"$HOME/Library/Application Support/PCSX2/bios"
]
}
},
{
"note": "PS3 firmware (PS3UPDAT.PUP) found. Install via RPCS3 > File > Install Firmware.",
"detect": {
"linux": [
"$HOME/.config/rpcs3"
],
"windows": [
"%APPDATA%\\rpcs3"
]
}
},
{
"file": "GC/USA/IPL.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu/GC/USA"
],
"windows": [
"%APPDATA%\\Dolphin Emulator\\GC\\USA"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin/GC/USA"
]
}
},
{
"file": "GC/EUR/IPL.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu/GC/EUR"
],
"windows": [
"%APPDATA%\\Dolphin Emulator\\GC\\EUR"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin/GC/EUR"
]
}
},
{
"file": "GC/JAP/IPL.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu/GC/JAP"
],
"windows": [
"%APPDATA%\\Dolphin Emulator\\GC\\JAP"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin/GC/JAP"
]
}
},
{
"file": "dsp_rom.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu"
],
"windows": [
"%APPDATA%\\Dolphin Emulator"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin"
]
}
},
{
"file": "dsp_coef.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu"
],
"windows": [
"%APPDATA%\\Dolphin Emulator"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin"
]
}
},
{
"file": "PPSSPP/ppge_atlas.zim",
"targets": {
"linux": [
"$HOME/.config/ppsspp/PSP/SYSTEM"
],
"windows": [
"%USERPROFILE%\\Documents\\PPSSPP\\PSP\\SYSTEM"
],
"darwin": [
"$HOME/Library/Application Support/PPSSPP/PSP/SYSTEM"
]
}
},
{
"file": "dc/dc_boot.bin",
"targets": {
"linux": [
"$HOME/.local/share/flycast/data",
"$HOME/.var/app/org.flycast.Flycast/data/flycast"
],
"windows": [
"%APPDATA%\\flycast\\data"
]
}
},
{
"file": "dc/dc_nvmem.bin",
"targets": {
"linux": [
"$HOME/.local/share/flycast/data",
"$HOME/.var/app/org.flycast.Flycast/data/flycast"
],
"windows": [
"%APPDATA%\\flycast\\data"
]
}
}
],
"total_files": 1627,
"total_size": 5735234905,
"files": [
@@ -9855,66 +10070,66 @@
]
},
{
"dest": "kvs1.wav",
"dest": "KVS1.WAV",
"sha1": "b094c2c1fca81a0e531e0541f302346150ec4604",
"size": 3436329,
"repo_path": "bios/Atari/2600/KVS1.WAV",
"cores": [
"Stella 2014"
"Stella 2023"
]
},
{
"dest": "kvs2.wav",
"dest": "KVS2.WAV",
"sha1": "8b83b2eea01b3e08ceb885aeb153d4084bddb63c",
"size": 2086275,
"repo_path": "bios/Atari/2600/KVS2.WAV",
"cores": [
"Stella 2014"
"Stella 2023"
]
},
{
"dest": "kvs3.wav",
"dest": "KVS3.WAV",
"sha1": "86896a1e272d8715489de9b407f0b8a42f82d4a0",
"size": 3720920,
"repo_path": "bios/Atari/2600/KVS3.WAV",
"cores": [
"Stella 2014"
"Stella 2023"
]
},
{
"dest": "kvb1.wav",
"dest": "KVB1.WAV",
"sha1": "6a582aebcefd6e2a97bdd8968202aab9851a889c",
"size": 4219542,
"repo_path": "bios/Atari/2600/KVB1.WAV",
"cores": [
"Stella 2014"
"Stella 2023"
]
},
{
"dest": "kvb2.wav",
"dest": "KVB2.WAV",
"sha1": "60a425c6bde3226ab731995562716321be20fc49",
"size": 9593878,
"repo_path": "bios/Atari/2600/KVB2.WAV",
"cores": [
"Stella 2014"
"Stella 2023"
]
},
{
"dest": "kvb3.wav",
"dest": "KVB3.WAV",
"sha1": "5e34125c4d6c209b21d1c892f3df0ec1644fd0d8",
"size": 7676992,
"repo_path": "bios/Atari/2600/KVB3.WAV",
"cores": [
"Stella 2014"
"Stella 2023"
]
},
{
"dest": "kvshared.wav",
"dest": "KVSHARED.WAV",
"sha1": "9adf10cdf1de833b194c7d8797ad1f041ad98dd3",
"size": 3059116,
"repo_path": "bios/Atari/2600/KVSHARED.WAV",
"cores": [
"Stella 2014"
"Stella 2023"
]
},
{

View File

@@ -4,7 +4,7 @@
"platform": "retrobat",
"display_name": "RetroBat",
"version": "1.0",
"generated": "2026-04-02T13:53:25Z",
"generated": "2026-04-03T09:44:16Z",
"base_destination": "bios",
"detect": [
{
@@ -13,7 +13,222 @@
"path": "%USERPROFILE%\\RetroBat\\bios"
}
],
"standalone_copies": [],
"standalone_copies": [
{
"file": "prod.keys",
"targets": {
"linux": [
"$HOME/.local/share/yuzu/keys",
"$HOME/.local/share/eden/keys",
"$HOME/.local/share/citron/keys",
"$HOME/.local/share/suyu/keys",
"$HOME/.config/Ryujinx/system"
],
"windows": [
"%APPDATA%\\yuzu\\keys",
"%APPDATA%\\eden\\keys",
"%APPDATA%\\citron\\keys",
"%APPDATA%\\suyu\\keys",
"%APPDATA%\\Ryujinx\\system"
],
"darwin": [
"$HOME/Library/Application Support/yuzu/keys",
"$HOME/Library/Application Support/Ryujinx/system"
]
}
},
{
"file": "title.keys",
"targets": {
"linux": [
"$HOME/.local/share/yuzu/keys",
"$HOME/.local/share/eden/keys",
"$HOME/.local/share/citron/keys",
"$HOME/.local/share/suyu/keys"
],
"windows": [
"%APPDATA%\\yuzu\\keys",
"%APPDATA%\\eden\\keys",
"%APPDATA%\\citron\\keys",
"%APPDATA%\\suyu\\keys"
],
"darwin": [
"$HOME/Library/Application Support/yuzu/keys"
]
}
},
{
"file": "Citra/sysdata/aes_keys.txt",
"targets": {
"linux": [
"$HOME/.local/share/azahar/sysdata"
],
"windows": [
"%APPDATA%\\Azahar\\sysdata"
]
}
},
{
"file": "Citra/sysdata/boot9.bin",
"targets": {
"linux": [
"$HOME/.local/share/azahar/sysdata"
],
"windows": [
"%APPDATA%\\Azahar\\sysdata"
]
}
},
{
"pattern": "scph*.bin",
"targets": {
"linux": [
"$HOME/.local/share/duckstation/bios"
],
"windows": [
"%LOCALAPPDATA%\\DuckStation\\bios",
"%USERPROFILE%\\Documents\\DuckStation\\bios"
],
"darwin": [
"$HOME/Library/Application Support/DuckStation/bios"
]
}
},
{
"pattern": "ps2-*.bin",
"targets": {
"linux": [
"$HOME/.config/PCSX2/bios",
"$HOME/.var/app/net.pcsx2.PCSX2/config/PCSX2/bios"
],
"windows": [
"%USERPROFILE%\\Documents\\PCSX2\\bios"
],
"darwin": [
"$HOME/Library/Application Support/PCSX2/bios"
]
}
},
{
"note": "PS3 firmware (PS3UPDAT.PUP) found. Install via RPCS3 > File > Install Firmware.",
"detect": {
"linux": [
"$HOME/.config/rpcs3"
],
"windows": [
"%APPDATA%\\rpcs3"
]
}
},
{
"file": "GC/USA/IPL.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu/GC/USA"
],
"windows": [
"%APPDATA%\\Dolphin Emulator\\GC\\USA"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin/GC/USA"
]
}
},
{
"file": "GC/EUR/IPL.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu/GC/EUR"
],
"windows": [
"%APPDATA%\\Dolphin Emulator\\GC\\EUR"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin/GC/EUR"
]
}
},
{
"file": "GC/JAP/IPL.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu/GC/JAP"
],
"windows": [
"%APPDATA%\\Dolphin Emulator\\GC\\JAP"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin/GC/JAP"
]
}
},
{
"file": "dsp_rom.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu"
],
"windows": [
"%APPDATA%\\Dolphin Emulator"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin"
]
}
},
{
"file": "dsp_coef.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu"
],
"windows": [
"%APPDATA%\\Dolphin Emulator"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin"
]
}
},
{
"file": "PPSSPP/ppge_atlas.zim",
"targets": {
"linux": [
"$HOME/.config/ppsspp/PSP/SYSTEM"
],
"windows": [
"%USERPROFILE%\\Documents\\PPSSPP\\PSP\\SYSTEM"
],
"darwin": [
"$HOME/Library/Application Support/PPSSPP/PSP/SYSTEM"
]
}
},
{
"file": "dc/dc_boot.bin",
"targets": {
"linux": [
"$HOME/.local/share/flycast/data",
"$HOME/.var/app/org.flycast.Flycast/data/flycast"
],
"windows": [
"%APPDATA%\\flycast\\data"
]
}
},
{
"file": "dc/dc_nvmem.bin",
"targets": {
"linux": [
"$HOME/.local/share/flycast/data",
"$HOME/.var/app/org.flycast.Flycast/data/flycast"
],
"windows": [
"%APPDATA%\\flycast\\data"
]
}
}
],
"total_files": 1169,
"total_size": 4777641221,
"files": [

View File

@@ -4,19 +4,234 @@
"platform": "retrodeck",
"display_name": "RetroDECK",
"version": "1.0",
"generated": "2026-04-02T13:53:43Z",
"generated": "2026-04-18T07:56:37Z",
"base_destination": "",
"detect": [
{
"os": "linux",
"method": "path_exists",
"path": "$HOME/.var/app/net.retrodeck.retrodeck",
"bios_path": "$HOME/retrodeck/bios"
"bios_path": "$HOME/retrodeck"
}
],
"standalone_copies": [],
"total_files": 3153,
"total_size": 6351500734,
"standalone_copies": [
{
"file": "prod.keys",
"targets": {
"linux": [
"$HOME/.local/share/yuzu/keys",
"$HOME/.local/share/eden/keys",
"$HOME/.local/share/citron/keys",
"$HOME/.local/share/suyu/keys",
"$HOME/.config/Ryujinx/system"
],
"windows": [
"%APPDATA%\\yuzu\\keys",
"%APPDATA%\\eden\\keys",
"%APPDATA%\\citron\\keys",
"%APPDATA%\\suyu\\keys",
"%APPDATA%\\Ryujinx\\system"
],
"darwin": [
"$HOME/Library/Application Support/yuzu/keys",
"$HOME/Library/Application Support/Ryujinx/system"
]
}
},
{
"file": "title.keys",
"targets": {
"linux": [
"$HOME/.local/share/yuzu/keys",
"$HOME/.local/share/eden/keys",
"$HOME/.local/share/citron/keys",
"$HOME/.local/share/suyu/keys"
],
"windows": [
"%APPDATA%\\yuzu\\keys",
"%APPDATA%\\eden\\keys",
"%APPDATA%\\citron\\keys",
"%APPDATA%\\suyu\\keys"
],
"darwin": [
"$HOME/Library/Application Support/yuzu/keys"
]
}
},
{
"file": "Citra/sysdata/aes_keys.txt",
"targets": {
"linux": [
"$HOME/.local/share/azahar/sysdata"
],
"windows": [
"%APPDATA%\\Azahar\\sysdata"
]
}
},
{
"file": "Citra/sysdata/boot9.bin",
"targets": {
"linux": [
"$HOME/.local/share/azahar/sysdata"
],
"windows": [
"%APPDATA%\\Azahar\\sysdata"
]
}
},
{
"pattern": "scph*.bin",
"targets": {
"linux": [
"$HOME/.local/share/duckstation/bios"
],
"windows": [
"%LOCALAPPDATA%\\DuckStation\\bios",
"%USERPROFILE%\\Documents\\DuckStation\\bios"
],
"darwin": [
"$HOME/Library/Application Support/DuckStation/bios"
]
}
},
{
"pattern": "ps2-*.bin",
"targets": {
"linux": [
"$HOME/.config/PCSX2/bios",
"$HOME/.var/app/net.pcsx2.PCSX2/config/PCSX2/bios"
],
"windows": [
"%USERPROFILE%\\Documents\\PCSX2\\bios"
],
"darwin": [
"$HOME/Library/Application Support/PCSX2/bios"
]
}
},
{
"note": "PS3 firmware (PS3UPDAT.PUP) found. Install via RPCS3 > File > Install Firmware.",
"detect": {
"linux": [
"$HOME/.config/rpcs3"
],
"windows": [
"%APPDATA%\\rpcs3"
]
}
},
{
"file": "GC/USA/IPL.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu/GC/USA"
],
"windows": [
"%APPDATA%\\Dolphin Emulator\\GC\\USA"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin/GC/USA"
]
}
},
{
"file": "GC/EUR/IPL.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu/GC/EUR"
],
"windows": [
"%APPDATA%\\Dolphin Emulator\\GC\\EUR"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin/GC/EUR"
]
}
},
{
"file": "GC/JAP/IPL.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu/GC/JAP"
],
"windows": [
"%APPDATA%\\Dolphin Emulator\\GC\\JAP"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin/GC/JAP"
]
}
},
{
"file": "dsp_rom.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu"
],
"windows": [
"%APPDATA%\\Dolphin Emulator"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin"
]
}
},
{
"file": "dsp_coef.bin",
"targets": {
"linux": [
"$HOME/.local/share/dolphin-emu"
],
"windows": [
"%APPDATA%\\Dolphin Emulator"
],
"darwin": [
"$HOME/Library/Application Support/Dolphin"
]
}
},
{
"file": "PPSSPP/ppge_atlas.zim",
"targets": {
"linux": [
"$HOME/.config/ppsspp/PSP/SYSTEM"
],
"windows": [
"%USERPROFILE%\\Documents\\PPSSPP\\PSP\\SYSTEM"
],
"darwin": [
"$HOME/Library/Application Support/PPSSPP/PSP/SYSTEM"
]
}
},
{
"file": "dc/dc_boot.bin",
"targets": {
"linux": [
"$HOME/.local/share/flycast/data",
"$HOME/.var/app/org.flycast.Flycast/data/flycast"
],
"windows": [
"%APPDATA%\\flycast\\data"
]
}
},
{
"file": "dc/dc_nvmem.bin",
"targets": {
"linux": [
"$HOME/.local/share/flycast/data",
"$HOME/.var/app/org.flycast.Flycast/data/flycast"
],
"windows": [
"%APPDATA%\\flycast\\data"
]
}
}
],
"total_files": 3146,
"total_size": 6317707682,
"files": [
{
"dest": "bios/panafz1.bin",
@@ -13664,10 +13879,10 @@
"cores": null
},
{
"dest": "bios/VEC_MineStorm.vec",
"dest": "bios/VEC_Minestorm.vec",
"sha1": "65d07426b520ddd3115d40f255511e0fd2e20ae7",
"size": 8192,
"repo_path": "bios/GCE/Vectrex/VEC_MineStorm.vec",
"repo_path": "bios/GCE/Vectrex/VEC_Minestorm.vec",
"cores": null
},
{
@@ -20221,69 +20436,6 @@
"SquirrelJME"
]
},
{
"dest": "kvs1.wav",
"sha1": "b094c2c1fca81a0e531e0541f302346150ec4604",
"size": 3436329,
"repo_path": "bios/Atari/2600/KVS1.WAV",
"cores": [
"Stella 2014"
]
},
{
"dest": "kvs2.wav",
"sha1": "8b83b2eea01b3e08ceb885aeb153d4084bddb63c",
"size": 2086275,
"repo_path": "bios/Atari/2600/KVS2.WAV",
"cores": [
"Stella 2014"
]
},
{
"dest": "kvs3.wav",
"sha1": "86896a1e272d8715489de9b407f0b8a42f82d4a0",
"size": 3720920,
"repo_path": "bios/Atari/2600/KVS3.WAV",
"cores": [
"Stella 2014"
]
},
{
"dest": "kvb1.wav",
"sha1": "6a582aebcefd6e2a97bdd8968202aab9851a889c",
"size": 4219542,
"repo_path": "bios/Atari/2600/KVB1.WAV",
"cores": [
"Stella 2014"
]
},
{
"dest": "kvb2.wav",
"sha1": "60a425c6bde3226ab731995562716321be20fc49",
"size": 9593878,
"repo_path": "bios/Atari/2600/KVB2.WAV",
"cores": [
"Stella 2014"
]
},
{
"dest": "kvb3.wav",
"sha1": "5e34125c4d6c209b21d1c892f3df0ec1644fd0d8",
"size": 7676992,
"repo_path": "bios/Atari/2600/KVB3.WAV",
"cores": [
"Stella 2014"
]
},
{
"dest": "kvshared.wav",
"sha1": "9adf10cdf1de833b194c7d8797ad1f041ad98dd3",
"size": 3059116,
"repo_path": "bios/Atari/2600/KVSHARED.WAV",
"cores": [
"Stella 2014"
]
},
{
"dest": "KVS1.WAV",
"sha1": "b094c2c1fca81a0e531e0541f302346150ec4604",

View File

@@ -20,6 +20,8 @@ theme:
icon: material/brightness-4
name: Switch to auto
font: false
logo: assets/images/logo.png
favicon: assets/images/favicon.png
icon:
logo: material/chip
features:
@@ -52,6 +54,7 @@ plugins:
- search
nav:
- Home: index.md
- Download: which-pack.md
- Platforms:
- Overview: platforms/index.md
- Batocera: platforms/batocera.md
@@ -480,4 +483,5 @@ nav:
- Adding a scraper: wiki/adding-a-scraper.md
- Testing guide: wiki/testing-guide.md
- Release process: wiki/release-process.md
- Community tools: wiki/community-tools.md
- Contributing: contributing.md

View File

@@ -32,6 +32,144 @@ platforms:
method: config_file
config: '%APPDATA%\RetroArch\retroarch.cfg'
parse_key: system_directory
standalone_copies:
# Switch emulators (keys)
- file: prod.keys
targets:
linux:
- $HOME/.local/share/yuzu/keys
- $HOME/.local/share/eden/keys
- $HOME/.local/share/citron/keys
- $HOME/.local/share/suyu/keys
- $HOME/.config/Ryujinx/system
windows:
- '%APPDATA%\yuzu\keys'
- '%APPDATA%\eden\keys'
- '%APPDATA%\citron\keys'
- '%APPDATA%\suyu\keys'
- '%APPDATA%\Ryujinx\system'
darwin:
- $HOME/Library/Application Support/yuzu/keys
- $HOME/Library/Application Support/Ryujinx/system
- file: title.keys
targets:
linux:
- $HOME/.local/share/yuzu/keys
- $HOME/.local/share/eden/keys
- $HOME/.local/share/citron/keys
- $HOME/.local/share/suyu/keys
windows:
- '%APPDATA%\yuzu\keys'
- '%APPDATA%\eden\keys'
- '%APPDATA%\citron\keys'
- '%APPDATA%\suyu\keys'
darwin:
- $HOME/Library/Application Support/yuzu/keys
# 3DS emulators
- file: Citra/sysdata/aes_keys.txt
targets:
linux:
- $HOME/.local/share/azahar/sysdata
windows:
- '%APPDATA%\Azahar\sysdata'
- file: Citra/sysdata/boot9.bin
targets:
linux:
- $HOME/.local/share/azahar/sysdata
windows:
- '%APPDATA%\Azahar\sysdata'
# DuckStation (PS1)
- pattern: 'scph*.bin'
targets:
linux:
- $HOME/.local/share/duckstation/bios
windows:
- '%LOCALAPPDATA%\DuckStation\bios'
- '%USERPROFILE%\Documents\DuckStation\bios'
darwin:
- $HOME/Library/Application Support/DuckStation/bios
# PCSX2 (PS2)
- pattern: 'ps2-*.bin'
targets:
linux:
- $HOME/.config/PCSX2/bios
- $HOME/.var/app/net.pcsx2.PCSX2/config/PCSX2/bios
windows:
- '%USERPROFILE%\Documents\PCSX2\bios'
darwin:
- $HOME/Library/Application Support/PCSX2/bios
# RPCS3 (PS3) - needs menu install
- note: 'PS3 firmware (PS3UPDAT.PUP) found. Install via RPCS3 > File > Install Firmware.'
detect:
linux:
- $HOME/.config/rpcs3
windows:
- '%APPDATA%\rpcs3'
# Dolphin (GameCube)
- file: GC/USA/IPL.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC/USA
windows:
- '%APPDATA%\Dolphin Emulator\GC\USA'
darwin:
- $HOME/Library/Application Support/Dolphin/GC/USA
- file: GC/EUR/IPL.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC/EUR
windows:
- '%APPDATA%\Dolphin Emulator\GC\EUR'
darwin:
- $HOME/Library/Application Support/Dolphin/GC/EUR
- file: GC/JAP/IPL.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC/JAP
windows:
- '%APPDATA%\Dolphin Emulator\GC\JAP'
darwin:
- $HOME/Library/Application Support/Dolphin/GC/JAP
- file: dsp_rom.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu
windows:
- '%APPDATA%\Dolphin Emulator'
darwin:
- $HOME/Library/Application Support/Dolphin
- file: dsp_coef.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu
windows:
- '%APPDATA%\Dolphin Emulator'
darwin:
- $HOME/Library/Application Support/Dolphin
# PPSSPP
- file: PPSSPP/ppge_atlas.zim
targets:
linux:
- $HOME/.config/ppsspp/PSP/SYSTEM
windows:
- '%USERPROFILE%\Documents\PPSSPP\PSP\SYSTEM'
darwin:
- $HOME/Library/Application Support/PPSSPP/PSP/SYSTEM
# Flycast (Dreamcast)
- file: dc/dc_boot.bin
targets:
linux:
- $HOME/.local/share/flycast/data
- $HOME/.var/app/org.flycast.Flycast/data/flycast
windows:
- '%APPDATA%\flycast\data'
- file: dc/dc_nvmem.bin
targets:
linux:
- $HOME/.local/share/flycast/data
- $HOME/.var/app/org.flycast.Flycast/data/flycast
windows:
- '%APPDATA%\flycast\data'
batocera:
config: batocera.yml
status: active
@@ -256,6 +394,144 @@ platforms:
method: file_exists
file: /etc/batocera-version
bios_path: /userdata/bios
standalone_copies:
# Switch emulators (keys)
- file: prod.keys
targets:
linux:
- $HOME/.local/share/yuzu/keys
- $HOME/.local/share/eden/keys
- $HOME/.local/share/citron/keys
- $HOME/.local/share/suyu/keys
- $HOME/.config/Ryujinx/system
windows:
- '%APPDATA%\yuzu\keys'
- '%APPDATA%\eden\keys'
- '%APPDATA%\citron\keys'
- '%APPDATA%\suyu\keys'
- '%APPDATA%\Ryujinx\system'
darwin:
- $HOME/Library/Application Support/yuzu/keys
- $HOME/Library/Application Support/Ryujinx/system
- file: title.keys
targets:
linux:
- $HOME/.local/share/yuzu/keys
- $HOME/.local/share/eden/keys
- $HOME/.local/share/citron/keys
- $HOME/.local/share/suyu/keys
windows:
- '%APPDATA%\yuzu\keys'
- '%APPDATA%\eden\keys'
- '%APPDATA%\citron\keys'
- '%APPDATA%\suyu\keys'
darwin:
- $HOME/Library/Application Support/yuzu/keys
# 3DS emulators
- file: Citra/sysdata/aes_keys.txt
targets:
linux:
- $HOME/.local/share/azahar/sysdata
windows:
- '%APPDATA%\Azahar\sysdata'
- file: Citra/sysdata/boot9.bin
targets:
linux:
- $HOME/.local/share/azahar/sysdata
windows:
- '%APPDATA%\Azahar\sysdata'
# DuckStation (PS1)
- pattern: 'scph*.bin'
targets:
linux:
- $HOME/.local/share/duckstation/bios
windows:
- '%LOCALAPPDATA%\DuckStation\bios'
- '%USERPROFILE%\Documents\DuckStation\bios'
darwin:
- $HOME/Library/Application Support/DuckStation/bios
# PCSX2 (PS2)
- pattern: 'ps2-*.bin'
targets:
linux:
- $HOME/.config/PCSX2/bios
- $HOME/.var/app/net.pcsx2.PCSX2/config/PCSX2/bios
windows:
- '%USERPROFILE%\Documents\PCSX2\bios'
darwin:
- $HOME/Library/Application Support/PCSX2/bios
# RPCS3 (PS3) - needs menu install
- note: 'PS3 firmware (PS3UPDAT.PUP) found. Install via RPCS3 > File > Install Firmware.'
detect:
linux:
- $HOME/.config/rpcs3
windows:
- '%APPDATA%\rpcs3'
# Dolphin (GameCube)
- file: GC/USA/IPL.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC/USA
windows:
- '%APPDATA%\Dolphin Emulator\GC\USA'
darwin:
- $HOME/Library/Application Support/Dolphin/GC/USA
- file: GC/EUR/IPL.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC/EUR
windows:
- '%APPDATA%\Dolphin Emulator\GC\EUR'
darwin:
- $HOME/Library/Application Support/Dolphin/GC/EUR
- file: GC/JAP/IPL.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC/JAP
windows:
- '%APPDATA%\Dolphin Emulator\GC\JAP'
darwin:
- $HOME/Library/Application Support/Dolphin/GC/JAP
- file: dsp_rom.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu
windows:
- '%APPDATA%\Dolphin Emulator'
darwin:
- $HOME/Library/Application Support/Dolphin
- file: dsp_coef.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu
windows:
- '%APPDATA%\Dolphin Emulator'
darwin:
- $HOME/Library/Application Support/Dolphin
# PPSSPP
- file: PPSSPP/ppge_atlas.zim
targets:
linux:
- $HOME/.config/ppsspp/PSP/SYSTEM
windows:
- '%USERPROFILE%\Documents\PPSSPP\PSP\SYSTEM'
darwin:
- $HOME/Library/Application Support/PPSSPP/PSP/SYSTEM
# Flycast (Dreamcast)
- file: dc/dc_boot.bin
targets:
linux:
- $HOME/.local/share/flycast/data
- $HOME/.var/app/org.flycast.Flycast/data/flycast
windows:
- '%APPDATA%\flycast\data'
- file: dc/dc_nvmem.bin
targets:
linux:
- $HOME/.local/share/flycast/data
- $HOME/.var/app/org.flycast.Flycast/data/flycast
windows:
- '%APPDATA%\flycast\data'
recalbox:
config: recalbox.yml
status: active
@@ -468,6 +744,144 @@ platforms:
method: file_exists
file: /usr/bin/recalbox-settings
bios_path: /recalbox/share/bios
standalone_copies:
# Switch emulators (keys)
- file: prod.keys
targets:
linux:
- $HOME/.local/share/yuzu/keys
- $HOME/.local/share/eden/keys
- $HOME/.local/share/citron/keys
- $HOME/.local/share/suyu/keys
- $HOME/.config/Ryujinx/system
windows:
- '%APPDATA%\yuzu\keys'
- '%APPDATA%\eden\keys'
- '%APPDATA%\citron\keys'
- '%APPDATA%\suyu\keys'
- '%APPDATA%\Ryujinx\system'
darwin:
- $HOME/Library/Application Support/yuzu/keys
- $HOME/Library/Application Support/Ryujinx/system
- file: title.keys
targets:
linux:
- $HOME/.local/share/yuzu/keys
- $HOME/.local/share/eden/keys
- $HOME/.local/share/citron/keys
- $HOME/.local/share/suyu/keys
windows:
- '%APPDATA%\yuzu\keys'
- '%APPDATA%\eden\keys'
- '%APPDATA%\citron\keys'
- '%APPDATA%\suyu\keys'
darwin:
- $HOME/Library/Application Support/yuzu/keys
# 3DS emulators
- file: Citra/sysdata/aes_keys.txt
targets:
linux:
- $HOME/.local/share/azahar/sysdata
windows:
- '%APPDATA%\Azahar\sysdata'
- file: Citra/sysdata/boot9.bin
targets:
linux:
- $HOME/.local/share/azahar/sysdata
windows:
- '%APPDATA%\Azahar\sysdata'
# DuckStation (PS1)
- pattern: 'scph*.bin'
targets:
linux:
- $HOME/.local/share/duckstation/bios
windows:
- '%LOCALAPPDATA%\DuckStation\bios'
- '%USERPROFILE%\Documents\DuckStation\bios'
darwin:
- $HOME/Library/Application Support/DuckStation/bios
# PCSX2 (PS2)
- pattern: 'ps2-*.bin'
targets:
linux:
- $HOME/.config/PCSX2/bios
- $HOME/.var/app/net.pcsx2.PCSX2/config/PCSX2/bios
windows:
- '%USERPROFILE%\Documents\PCSX2\bios'
darwin:
- $HOME/Library/Application Support/PCSX2/bios
# RPCS3 (PS3) - needs menu install
- note: 'PS3 firmware (PS3UPDAT.PUP) found. Install via RPCS3 > File > Install Firmware.'
detect:
linux:
- $HOME/.config/rpcs3
windows:
- '%APPDATA%\rpcs3'
# Dolphin (GameCube)
- file: GC/USA/IPL.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC/USA
windows:
- '%APPDATA%\Dolphin Emulator\GC\USA'
darwin:
- $HOME/Library/Application Support/Dolphin/GC/USA
- file: GC/EUR/IPL.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC/EUR
windows:
- '%APPDATA%\Dolphin Emulator\GC\EUR'
darwin:
- $HOME/Library/Application Support/Dolphin/GC/EUR
- file: GC/JAP/IPL.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC/JAP
windows:
- '%APPDATA%\Dolphin Emulator\GC\JAP'
darwin:
- $HOME/Library/Application Support/Dolphin/GC/JAP
- file: dsp_rom.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu
windows:
- '%APPDATA%\Dolphin Emulator'
darwin:
- $HOME/Library/Application Support/Dolphin
- file: dsp_coef.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu
windows:
- '%APPDATA%\Dolphin Emulator'
darwin:
- $HOME/Library/Application Support/Dolphin
# PPSSPP
- file: PPSSPP/ppge_atlas.zim
targets:
linux:
- $HOME/.config/ppsspp/PSP/SYSTEM
windows:
- '%USERPROFILE%\Documents\PPSSPP\PSP\SYSTEM'
darwin:
- $HOME/Library/Application Support/PPSSPP/PSP/SYSTEM
# Flycast (Dreamcast)
- file: dc/dc_boot.bin
targets:
linux:
- $HOME/.local/share/flycast/data
- $HOME/.var/app/org.flycast.Flycast/data/flycast
windows:
- '%APPDATA%\flycast\data'
- file: dc/dc_nvmem.bin
targets:
linux:
- $HOME/.local/share/flycast/data
- $HOME/.var/app/org.flycast.Flycast/data/flycast
windows:
- '%APPDATA%\flycast\data'
retrobat:
config: retrobat.yml
status: active
@@ -653,6 +1067,144 @@ platforms:
- os: windows
method: path_exists
path: '%USERPROFILE%\RetroBat\bios'
standalone_copies:
# Switch emulators (keys)
- file: prod.keys
targets:
linux:
- $HOME/.local/share/yuzu/keys
- $HOME/.local/share/eden/keys
- $HOME/.local/share/citron/keys
- $HOME/.local/share/suyu/keys
- $HOME/.config/Ryujinx/system
windows:
- '%APPDATA%\yuzu\keys'
- '%APPDATA%\eden\keys'
- '%APPDATA%\citron\keys'
- '%APPDATA%\suyu\keys'
- '%APPDATA%\Ryujinx\system'
darwin:
- $HOME/Library/Application Support/yuzu/keys
- $HOME/Library/Application Support/Ryujinx/system
- file: title.keys
targets:
linux:
- $HOME/.local/share/yuzu/keys
- $HOME/.local/share/eden/keys
- $HOME/.local/share/citron/keys
- $HOME/.local/share/suyu/keys
windows:
- '%APPDATA%\yuzu\keys'
- '%APPDATA%\eden\keys'
- '%APPDATA%\citron\keys'
- '%APPDATA%\suyu\keys'
darwin:
- $HOME/Library/Application Support/yuzu/keys
# 3DS emulators
- file: Citra/sysdata/aes_keys.txt
targets:
linux:
- $HOME/.local/share/azahar/sysdata
windows:
- '%APPDATA%\Azahar\sysdata'
- file: Citra/sysdata/boot9.bin
targets:
linux:
- $HOME/.local/share/azahar/sysdata
windows:
- '%APPDATA%\Azahar\sysdata'
# DuckStation (PS1)
- pattern: 'scph*.bin'
targets:
linux:
- $HOME/.local/share/duckstation/bios
windows:
- '%LOCALAPPDATA%\DuckStation\bios'
- '%USERPROFILE%\Documents\DuckStation\bios'
darwin:
- $HOME/Library/Application Support/DuckStation/bios
# PCSX2 (PS2)
- pattern: 'ps2-*.bin'
targets:
linux:
- $HOME/.config/PCSX2/bios
- $HOME/.var/app/net.pcsx2.PCSX2/config/PCSX2/bios
windows:
- '%USERPROFILE%\Documents\PCSX2\bios'
darwin:
- $HOME/Library/Application Support/PCSX2/bios
# RPCS3 (PS3) - needs menu install
- note: 'PS3 firmware (PS3UPDAT.PUP) found. Install via RPCS3 > File > Install Firmware.'
detect:
linux:
- $HOME/.config/rpcs3
windows:
- '%APPDATA%\rpcs3'
# Dolphin (GameCube)
- file: GC/USA/IPL.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC/USA
windows:
- '%APPDATA%\Dolphin Emulator\GC\USA'
darwin:
- $HOME/Library/Application Support/Dolphin/GC/USA
- file: GC/EUR/IPL.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC/EUR
windows:
- '%APPDATA%\Dolphin Emulator\GC\EUR'
darwin:
- $HOME/Library/Application Support/Dolphin/GC/EUR
- file: GC/JAP/IPL.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC/JAP
windows:
- '%APPDATA%\Dolphin Emulator\GC\JAP'
darwin:
- $HOME/Library/Application Support/Dolphin/GC/JAP
- file: dsp_rom.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu
windows:
- '%APPDATA%\Dolphin Emulator'
darwin:
- $HOME/Library/Application Support/Dolphin
- file: dsp_coef.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu
windows:
- '%APPDATA%\Dolphin Emulator'
darwin:
- $HOME/Library/Application Support/Dolphin
# PPSSPP
- file: PPSSPP/ppge_atlas.zim
targets:
linux:
- $HOME/.config/ppsspp/PSP/SYSTEM
windows:
- '%USERPROFILE%\Documents\PPSSPP\PSP\SYSTEM'
darwin:
- $HOME/Library/Application Support/PPSSPP/PSP/SYSTEM
# Flycast (Dreamcast)
- file: dc/dc_boot.bin
targets:
linux:
- $HOME/.local/share/flycast/data
- $HOME/.var/app/org.flycast.Flycast/data/flycast
windows:
- '%APPDATA%\flycast\data'
- file: dc/dc_nvmem.bin
targets:
linux:
- $HOME/.local/share/flycast/data
- $HOME/.var/app/org.flycast.Flycast/data/flycast
windows:
- '%APPDATA%\flycast\data'
emudeck:
config: emudeck.yml
status: active
@@ -681,19 +1233,143 @@ platforms:
parse_key: $emulationPath
bios_subdir: bios
standalone_copies:
# Switch emulators (keys)
- file: prod.keys
targets:
linux:
- $HOME/.local/share/yuzu/keys
- $HOME/.local/share/eden/keys
- $HOME/.local/share/citron/keys
- $HOME/.local/share/suyu/keys
- $HOME/.config/Ryujinx/system
windows:
- '%APPDATA%\yuzu\keys'
- '%APPDATA%\eden\keys'
- file: aes_keys.txt
- '%APPDATA%\citron\keys'
- '%APPDATA%\suyu\keys'
- '%APPDATA%\Ryujinx\system'
darwin:
- $HOME/Library/Application Support/yuzu/keys
- $HOME/Library/Application Support/Ryujinx/system
- file: title.keys
targets:
linux:
- $HOME/Emulation/bios/citra/keys
- $HOME/.local/share/yuzu/keys
- $HOME/.local/share/eden/keys
- $HOME/.local/share/citron/keys
- $HOME/.local/share/suyu/keys
windows:
- '%APPDATA%\yuzu\keys'
- '%APPDATA%\eden\keys'
- '%APPDATA%\citron\keys'
- '%APPDATA%\suyu\keys'
darwin:
- $HOME/Library/Application Support/yuzu/keys
# 3DS emulators
- file: Citra/sysdata/aes_keys.txt
targets:
linux:
- $HOME/.local/share/azahar/sysdata
windows:
- '%APPDATA%\Azahar\sysdata'
- file: Citra/sysdata/boot9.bin
targets:
linux:
- $HOME/.local/share/azahar/sysdata
windows:
- '%APPDATA%\Azahar\sysdata'
# DuckStation (PS1)
- pattern: 'scph*.bin'
targets:
linux:
- $HOME/.local/share/duckstation/bios
windows:
- '%LOCALAPPDATA%\DuckStation\bios'
- '%USERPROFILE%\Documents\DuckStation\bios'
darwin:
- $HOME/Library/Application Support/DuckStation/bios
# PCSX2 (PS2)
- pattern: 'ps2-*.bin'
targets:
linux:
- $HOME/.config/PCSX2/bios
- $HOME/.var/app/net.pcsx2.PCSX2/config/PCSX2/bios
windows:
- '%USERPROFILE%\Documents\PCSX2\bios'
darwin:
- $HOME/Library/Application Support/PCSX2/bios
# RPCS3 (PS3) - needs menu install
- note: 'PS3 firmware (PS3UPDAT.PUP) found. Install via RPCS3 > File > Install Firmware.'
detect:
linux:
- $HOME/.config/rpcs3
windows:
- '%APPDATA%\rpcs3'
# Dolphin (GameCube)
- file: GC/USA/IPL.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC/USA
windows:
- '%APPDATA%\Dolphin Emulator\GC\USA'
darwin:
- $HOME/Library/Application Support/Dolphin/GC/USA
- file: GC/EUR/IPL.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC/EUR
windows:
- '%APPDATA%\Dolphin Emulator\GC\EUR'
darwin:
- $HOME/Library/Application Support/Dolphin/GC/EUR
- file: GC/JAP/IPL.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC/JAP
windows:
- '%APPDATA%\Dolphin Emulator\GC\JAP'
darwin:
- $HOME/Library/Application Support/Dolphin/GC/JAP
- file: dsp_rom.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu
windows:
- '%APPDATA%\Dolphin Emulator'
darwin:
- $HOME/Library/Application Support/Dolphin
- file: dsp_coef.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu
windows:
- '%APPDATA%\Dolphin Emulator'
darwin:
- $HOME/Library/Application Support/Dolphin
# PPSSPP
- file: PPSSPP/ppge_atlas.zim
targets:
linux:
- $HOME/.config/ppsspp/PSP/SYSTEM
windows:
- '%USERPROFILE%\Documents\PPSSPP\PSP\SYSTEM'
darwin:
- $HOME/Library/Application Support/PPSSPP/PSP/SYSTEM
# Flycast (Dreamcast)
- file: dc/dc_boot.bin
targets:
linux:
- $HOME/.local/share/flycast/data
- $HOME/.var/app/org.flycast.Flycast/data/flycast
windows:
- '%APPDATA%\flycast\data'
- file: dc/dc_nvmem.bin
targets:
linux:
- $HOME/.local/share/flycast/data
- $HOME/.var/app/org.flycast.Flycast/data/flycast
windows:
- '%APPDATA%\flycast\data'
lakka:
config: lakka.yml
status: active
@@ -752,7 +1428,145 @@ platforms:
- os: linux
method: path_exists
path: $HOME/.var/app/net.retrodeck.retrodeck
bios_path: $HOME/retrodeck/bios
bios_path: $HOME/retrodeck
standalone_copies:
# Switch emulators (keys)
- file: prod.keys
targets:
linux:
- $HOME/.local/share/yuzu/keys
- $HOME/.local/share/eden/keys
- $HOME/.local/share/citron/keys
- $HOME/.local/share/suyu/keys
- $HOME/.config/Ryujinx/system
windows:
- '%APPDATA%\yuzu\keys'
- '%APPDATA%\eden\keys'
- '%APPDATA%\citron\keys'
- '%APPDATA%\suyu\keys'
- '%APPDATA%\Ryujinx\system'
darwin:
- $HOME/Library/Application Support/yuzu/keys
- $HOME/Library/Application Support/Ryujinx/system
- file: title.keys
targets:
linux:
- $HOME/.local/share/yuzu/keys
- $HOME/.local/share/eden/keys
- $HOME/.local/share/citron/keys
- $HOME/.local/share/suyu/keys
windows:
- '%APPDATA%\yuzu\keys'
- '%APPDATA%\eden\keys'
- '%APPDATA%\citron\keys'
- '%APPDATA%\suyu\keys'
darwin:
- $HOME/Library/Application Support/yuzu/keys
# 3DS emulators
- file: Citra/sysdata/aes_keys.txt
targets:
linux:
- $HOME/.local/share/azahar/sysdata
windows:
- '%APPDATA%\Azahar\sysdata'
- file: Citra/sysdata/boot9.bin
targets:
linux:
- $HOME/.local/share/azahar/sysdata
windows:
- '%APPDATA%\Azahar\sysdata'
# DuckStation (PS1)
- pattern: 'scph*.bin'
targets:
linux:
- $HOME/.local/share/duckstation/bios
windows:
- '%LOCALAPPDATA%\DuckStation\bios'
- '%USERPROFILE%\Documents\DuckStation\bios'
darwin:
- $HOME/Library/Application Support/DuckStation/bios
# PCSX2 (PS2)
- pattern: 'ps2-*.bin'
targets:
linux:
- $HOME/.config/PCSX2/bios
- $HOME/.var/app/net.pcsx2.PCSX2/config/PCSX2/bios
windows:
- '%USERPROFILE%\Documents\PCSX2\bios'
darwin:
- $HOME/Library/Application Support/PCSX2/bios
# RPCS3 (PS3) - needs menu install
- note: 'PS3 firmware (PS3UPDAT.PUP) found. Install via RPCS3 > File > Install Firmware.'
detect:
linux:
- $HOME/.config/rpcs3
windows:
- '%APPDATA%\rpcs3'
# Dolphin (GameCube)
- file: GC/USA/IPL.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC/USA
windows:
- '%APPDATA%\Dolphin Emulator\GC\USA'
darwin:
- $HOME/Library/Application Support/Dolphin/GC/USA
- file: GC/EUR/IPL.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC/EUR
windows:
- '%APPDATA%\Dolphin Emulator\GC\EUR'
darwin:
- $HOME/Library/Application Support/Dolphin/GC/EUR
- file: GC/JAP/IPL.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu/GC/JAP
windows:
- '%APPDATA%\Dolphin Emulator\GC\JAP'
darwin:
- $HOME/Library/Application Support/Dolphin/GC/JAP
- file: dsp_rom.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu
windows:
- '%APPDATA%\Dolphin Emulator'
darwin:
- $HOME/Library/Application Support/Dolphin
- file: dsp_coef.bin
targets:
linux:
- $HOME/.local/share/dolphin-emu
windows:
- '%APPDATA%\Dolphin Emulator'
darwin:
- $HOME/Library/Application Support/Dolphin
# PPSSPP
- file: PPSSPP/ppge_atlas.zim
targets:
linux:
- $HOME/.config/ppsspp/PSP/SYSTEM
windows:
- '%USERPROFILE%\Documents\PPSSPP\PSP\SYSTEM'
darwin:
- $HOME/Library/Application Support/PPSSPP/PSP/SYSTEM
# Flycast (Dreamcast)
- file: dc/dc_boot.bin
targets:
linux:
- $HOME/.local/share/flycast/data
- $HOME/.var/app/org.flycast.Flycast/data/flycast
windows:
- '%APPDATA%\flycast\data'
- file: dc/dc_nvmem.bin
targets:
linux:
- $HOME/.local/share/flycast/data
- $HOME/.var/app/org.flycast.Flycast/data/flycast
windows:
- '%APPDATA%\flycast\data'
romm:
config: romm.yml
status: active

View File

@@ -7978,8 +7978,8 @@ systems:
- name: Vectrex_Bios.bin
destination: bios/Vectrex_Bios.bin
required: false
- name: VEC_MineStorm.vec
destination: bios/VEC_MineStorm.vec
- name: VEC_Minestorm.vec
destination: bios/VEC_Minestorm.vec
required: false
vsmile:
files:

View File

@@ -743,15 +743,13 @@ def group_identical_platforms(
inherits[platform] = False
continue
base_dest = config.get("base_destination", "")
entries = []
for sys_id, system in sorted(config.get("systems", {}).items()):
for fe in system.get("files", []):
dest = fe.get("destination", fe.get("name", ""))
full_dest = f"{base_dest}/{dest}" if base_dest else dest
sha1 = fe.get("sha1", "")
md5 = fe.get("md5", "")
entries.append(f"{full_dest}|{sha1}|{md5}")
entries.append(f"{dest}|{sha1}|{md5}")
fp = hashlib.sha1("|".join(sorted(entries)).encode()).hexdigest()
if target_cores_cache:

View File

@@ -246,6 +246,13 @@ def _register_path(dest: str, seen_files: set[str], seen_parents: set[str]) -> N
seen_parents.add(parent)
def _flat(arcname: str, prefix: str, flatten: bool) -> str:
"""Strip base_destination prefix from ZIP arcname when flattening."""
if flatten and prefix and arcname.startswith(prefix + "/"):
return arcname[len(prefix) + 1:]
return arcname
def resolve_file(
file_entry: dict,
db: dict,
@@ -783,15 +790,14 @@ def _build_readme(
" 1. Find your RetroArch system directory:\n"
" - RetroArch > Settings > Directory > System/BIOS\n"
" - Default: retroarch/system/\n"
' 2. Open the "system" folder from this archive\n'
" 3. Copy ALL contents into your system directory\n"
" 4. Overwrite if asked\n\n"
" 2. Extract all files from this archive directly into your system directory\n"
" 3. Overwrite if asked\n\n"
" Option C: Manual (handheld / SD card)\n"
" -------------------------------------\n"
" Anbernic, Retroid, Miyoo, Trimui, etc.:\n"
" 1. Connect your SD card to your PC\n"
" 2. Find the BIOS folder (usually BIOS/ or system/)\n"
' 3. Copy ALL contents of "system" from this archive\n'
" 3. Extract all files from this archive directly into that folder\n"
" 4. Eject SD card and reboot your device\n\n"
" Common paths by device:\n"
" Anbernic (ArkOS/JELOS): BIOS/\n"
@@ -810,14 +816,13 @@ def _build_readme(
" 1. On your PC, open the Batocera network share:\n"
" - Windows: \\\\BATOCERA\\share\\bios\\\n"
" - Mac/Linux: smb://batocera/share/bios/\n"
' 2. Open the "bios" folder from this archive\n'
" 3. Copy ALL contents into the share\n"
" 4. Overwrite if asked\n\n"
" 2. Extract all files from this archive directly into the share\n"
" 3. Overwrite if asked\n\n"
" Option C: Manual (SD card)\n"
" --------------------------\n"
" 1. Put the SD card in your PC\n"
" 2. Navigate to /userdata/bios/ on the SHARE partition\n"
' 3. Copy ALL contents of "bios" from this archive\n\n'
" 3. Extract all files from this archive directly into that folder\n\n"
" NOTE: Dreamcast flash memory is named dc_nvmem.bin\n"
" (if your setup asks for dc_flash.bin, same file).\n\n"
),
@@ -831,13 +836,12 @@ def _build_readme(
" 1. On your PC, open the Recalbox network share:\n"
" - Windows: \\\\RECALBOX\\share\\bios\\\n"
" - Mac/Linux: smb://recalbox/share/bios/\n"
' 2. Open the "bios" folder from this archive\n'
" 3. Copy ALL contents into the share\n\n"
" 2. Extract all files from this archive directly into the share\n\n"
" Option C: Manual (SD card)\n"
" --------------------------\n"
" 1. Put the SD card in your PC\n"
" 2. Navigate to /recalbox/share/bios/\n"
' 3. Copy ALL contents of "bios" from this archive\n\n'
" 3. Extract all files from this archive directly into that folder\n\n"
),
"emudeck": (
"INSTALLATION GUIDE (Steam Deck / Linux)\n\n"
@@ -851,8 +855,7 @@ def _build_readme(
" ----------------\n"
" 1. Open Dolphin file manager\n"
" 2. Navigate to ~/Emulation/bios/\n"
' 3. Open the "bios" folder from this archive\n'
" 4. Copy ALL contents into ~/Emulation/bios/\n\n"
" 3. Extract all files from this archive directly into ~/Emulation/bios/\n\n"
" STANDALONE EMULATORS (extra step)\n"
" Switch and 3DS emulators need keys in specific folders:\n"
" prod.keys -> ~/.local/share/yuzu/keys/\n"
@@ -871,11 +874,8 @@ def _build_readme(
" ----------------\n"
" 1. Open Dolphin file manager\n"
" 2. Show hidden files (Ctrl+H)\n"
" 3. Navigate to ~/retrodeck/\n"
' 4. Open the "bios" folder from this archive\n'
" 5. Copy ALL contents into ~/retrodeck/bios/\n"
' 6. If the archive contains a "roms" folder, copy\n'
" its contents into ~/retrodeck/roms/\n\n"
" 3. Navigate to ~/retrodeck/bios/\n"
" 4. Extract all files from this archive directly into ~/retrodeck/bios/\n\n"
" NOTE: RetroDECK uses its own BIOS checker. After\n"
" copying, open RetroDECK > Tools > BIOS Checker to\n"
" verify everything is detected.\n\n"
@@ -891,9 +891,8 @@ def _build_readme(
" 1. Open your RetroBat installation folder\n"
" 2. Navigate to the bios\\ subfolder\n"
" (default: C:\\RetroBat\\bios\\)\n"
' 3. Open the "bios" folder from this archive\n'
" 4. Copy ALL contents into your bios\\ folder\n"
" 5. Overwrite if asked\n\n"
" 3. Extract all files from this archive directly into your bios\\ folder\n"
" 4. Overwrite if asked\n\n"
),
"bizhawk": (
"INSTALLATION GUIDE\n\n"
@@ -901,16 +900,15 @@ def _build_readme(
" 2. Navigate to the Firmware subfolder:\n"
" - Windows: BizHawk\\Firmware\\\n"
" - Linux: ~/.config/BizHawk/Firmware/\n"
' 3. Open the "Firmware" folder from this archive\n'
" 4. Copy ALL contents into your Firmware folder\n"
" 5. In BizHawk: Config > Paths > Firmware should\n"
" 3. Extract all files from this archive directly into your Firmware folder\n"
" 4. In BizHawk: Config > Paths > Firmware should\n"
" point to this folder\n\n"
),
"romm": (
"INSTALLATION GUIDE (RomM server)\n\n"
" 1. Locate your RomM library folder\n"
" 2. Navigate to the bios/ subdirectory\n"
' 3. Copy ALL contents of "bios" from this archive\n'
" 3. Extract all files from this archive directly into that folder\n"
" 4. Restart the RomM service to detect new files\n\n"
),
"retropie": (
@@ -918,7 +916,7 @@ def _build_readme(
" Option A: Via network share\n"
" --------------------------\n"
" 1. On your PC, open: \\\\RETROPIE\\bios\\\n"
' 2. Copy ALL contents of "BIOS" from this archive\n\n'
" 2. Extract all files from this archive directly into that folder\n\n"
" Option B: Via SSH\n"
" -----------------\n"
" 1. SSH into your Pi: ssh pi@retropie\n"
@@ -927,7 +925,7 @@ def _build_readme(
" ---------------------\n"
" 1. Put the SD card in your PC\n"
" 2. Navigate to /home/pi/RetroPie/BIOS/\n"
' 3. Copy ALL contents of "BIOS" from this archive\n\n'
" 3. Extract all files from this archive directly into that folder\n\n"
),
}
@@ -938,9 +936,8 @@ def _build_readme(
platform_name,
(
f"INSTALLATION\n\n"
f' 1. Open the "{base_dest or "files"}" folder in this archive\n'
f" 2. Copy ALL contents to your BIOS directory\n"
f" 3. Overwrite if asked\n\n"
f" 1. Extract all files from this archive directly into your BIOS directory\n"
f" 2. Overwrite if asked\n\n"
),
)
@@ -977,10 +974,7 @@ def _build_readme(
credits = "\nCONTRIBUTORS\n\n"
for cb in contributors:
username = cb.get("username", "")
contribution = cb.get("contribution", "")
pr = cb.get("pr")
pr_ref = f" (#{pr})" if pr else ""
credits += f" @{username} - {contribution}{pr_ref}\n"
credits += f" @{username}\n"
credits += "\n"
return header + source_info + guide + credits + footer
@@ -1022,6 +1016,7 @@ def generate_pack(
system_filter: list[str] | None = None,
precomputed_extras: list[dict] | None = None,
source: str = "full",
flatten: bool = True,
) -> str | None:
"""Generate a ZIP pack for a platform.
@@ -1157,7 +1152,7 @@ def generate_pack(
f"{base_dest}/{instr_name}" if base_dest else instr_name
)
zf.writestr(
instr_path,
_flat(instr_path, base_dest, flatten),
f"File needed: {file_entry['name']}\n\n{instructions}\n",
)
user_provided.append(file_entry["name"])
@@ -1183,9 +1178,9 @@ def generate_pack(
if download_external(file_entry, tmp_path):
extract = file_entry.get("extract", False)
if extract and tmp_path.endswith(".zip"):
_extract_zip_to_archive(tmp_path, full_dest, zf)
_extract_zip_to_archive(tmp_path, _flat(full_dest, base_dest, flatten), zf)
else:
zf.write(tmp_path, full_dest)
zf.write(tmp_path, _flat(full_dest, base_dest, flatten))
seen_destinations.add(dedup_key)
_register_path(dedup_key, seen_destinations, seen_parents)
if case_insensitive:
@@ -1263,7 +1258,7 @@ def generate_pack(
else readme_name
)
if readme_full not in seen_destinations:
zf.writestr(readme_full, readme_text)
zf.writestr(_flat(readme_full, base_dest, flatten), readme_text)
seen_destinations.add(readme_full)
status = "agnostic_fallback"
# Fall through to normal packing below
@@ -1349,12 +1344,13 @@ def generate_pack(
seen_lower.add(dedup_key.lower())
extract = file_entry.get("extract", False)
flat_dest = _flat(full_dest, base_dest, flatten)
if extract and local_path.endswith(".zip"):
_extract_zip_to_archive(local_path, full_dest, zf)
_extract_zip_to_archive(local_path, flat_dest, zf)
elif local_path.endswith(".zip"):
_normalize_zip_for_pack(local_path, full_dest, zf)
_normalize_zip_for_pack(local_path, flat_dest, zf)
else:
zf.write(local_path, full_dest)
zf.write(local_path, flat_dest)
total_files += 1
# Core requirements: files platform's cores need but YAML doesn't declare
@@ -1440,10 +1436,11 @@ def generate_pack(
if status in ("not_found", "external", "user_provided"):
continue
flat_dest = _flat(full_dest, base_dest, flatten)
if local_path.endswith(".zip"):
_normalize_zip_for_pack(local_path, full_dest, zf)
_normalize_zip_for_pack(local_path, flat_dest, zf)
else:
zf.write(local_path, full_dest)
zf.write(local_path, flat_dest)
seen_destinations.add(full_dest)
_register_path(full_dest, seen_destinations, seen_parents)
if case_insensitive:
@@ -1489,7 +1486,7 @@ def generate_pack(
_register_path(full, seen_destinations, seen_parents)
if case_insensitive:
seen_lower.add(full.lower())
zf.write(src, full)
zf.write(src, _flat(full, base_dest, flatten))
total_files += 1
# README.txt for users -personalized step-by-step per platform
@@ -2432,6 +2429,11 @@ def _run_verify_packs(args):
with zipfile.ZipFile(zip_path) as zf:
zf.extractall(extract_dir)
# Auto-detect flat vs nested extraction
is_flat = bool(base_dest) and not os.path.isdir(
os.path.join(extract_dir, base_dest)
)
missing = []
hash_fail = []
ok = 0
@@ -2442,7 +2444,7 @@ def _run_verify_packs(args):
continue
fp = (
os.path.join(extract_dir, base_dest, dest)
if base_dest
if base_dest and not is_flat
else os.path.join(extract_dir, dest)
)
# Case-insensitive fallback
@@ -2613,9 +2615,11 @@ def _run_platform_packs(
load_platform_config(p, args.platforms_dir).get("platform", p)
for p in group_platforms
]
source_tag = {"platform": "_Platform", "truth": "_Truth"}.get(source, "")
req_tag = "_Required" if required_only else ""
combined = (
"_".join(n.replace(" ", "") for n in all_names)
+ f"{ver_tag}_BIOS_Pack.zip"
+ f"{ver_tag}{source_tag}{req_tag}_BIOS_Pack.zip"
)
new_path = os.path.join(os.path.dirname(zip_path), combined)
if new_path != zip_path:
@@ -3275,7 +3279,11 @@ def verify_pack(
# Data directory: check against cached files
if status == "untracked" and _data_index:
_bn = os.path.basename(name)
_pr = name[len("system/") :] if name.startswith("system/") else name
_pr = name
for _known_prefix in ("system/", "bios/", "BIOS/", "Firmware/"):
if name.startswith(_known_prefix):
_pr = name[len(_known_prefix):]
break
_cands = []
if _pr in _data_path_index:
_cands.append(_data_path_index[_pr])
@@ -3442,6 +3450,13 @@ def verify_pack_against_platform(
zip_set = set(zf.namelist())
zip_lower = {n.lower(): n for n in zip_set}
# Auto-detect flat vs nested ZIP
is_flat = bool(base_dest) and not any(
n.startswith(base_dest + "/")
for n in zip_set
if n not in ("README.txt", "manifest.json") and not n.endswith("/")
)
# Structural checks
dupes = sum(1 for c in Counter(zf.namelist()).values() if c > 1)
if dupes:
@@ -3471,7 +3486,7 @@ def verify_pack_against_platform(
dest = fe.get("destination", fe.get("name", ""))
if not dest:
continue
expected = f"{base_dest}/{dest}" if base_dest else dest
expected = f"{base_dest}/{dest}" if base_dest and not is_flat else dest
baseline_checked += 1
if expected in zip_set or expected.lower() in zip_lower:
@@ -3498,7 +3513,7 @@ def verify_pack_against_platform(
continue
raw_dest = u.get("path") or u["name"]
dest = f"{raw_dest}{u['name']}" if raw_dest.endswith("/") else raw_dest
if extras_pfx:
if extras_pfx and not (is_flat and extras_pfx == base_dest):
if not dest.startswith(f"{extras_pfx}/"):
full = f"{extras_pfx}/{dest}"
else:

View File

@@ -143,7 +143,9 @@ def generate_readme(db: dict, platforms_dir: str) -> str:
pass
lines = [
"# RetroBIOS",
'<p align="center">',
' <img src=".github/assets/banner.png" alt="RetroBIOS" width="400">',
"</p>",
"",
f"Complete BIOS and firmware packs for "
f"{', '.join(c['platform'] for c in sorted(coverages.values(), key=lambda x: x[
@@ -349,6 +351,13 @@ def generate_readme(db: dict, platforms_dir: str) -> str:
lines.extend(
[
"",
"## Community tools",
"",
"- [BIOS Preservation Tool](https://github.com/monster-penguin/BIOS-Preservation-Tool)"
" by [monster-penguin](https://github.com/monster-penguin)"
" - scan, verify, and stage your own BIOS collection"
" using RetroBIOS hash metadata",
"",
"## Contributing",
"",

View File

@@ -2136,6 +2136,131 @@ def _build_emulator_file_index(profiles: dict) -> dict[str, dict]:
# mkdocs.yml nav generator
def generate_which_pack() -> str:
"""Generate the 'Which pack?' decision page."""
rel = "https://github.com/Abdess/retrobios/releases"
return f"""\
# Getting started
Some retro consoles need firmware files (commonly called BIOS) to run games.
Without them, the emulator either refuses to start the game or runs it with
reduced accuracy. This project collects and verifies those files so they are
ready to use.
## Quick install
The installer detects the platform, finds the BIOS folder, downloads what
is missing, and copies keys to standalone emulators (Yuzu, Eden, Ryujinx,
DuckStation, PCSX2, Dolphin, etc.) when they are present on the system.
**Linux / Mac / Steam Deck:**
```sh
curl -fsSL https://raw.githubusercontent.com/Abdess/retrobios/main/install.sh | sh
```
**Windows (PowerShell):**
```powershell
iwr -useb https://raw.githubusercontent.com/Abdess/retrobios/main/install.ps1 | iex
```
Nothing else needed. The installer handles everything.
---
## Manual download
Pick the pack that matches the setup from the [releases page]({rel}),
download it, and extract the files into the BIOS folder listed below.
After extraction, launch a game. If it needed BIOS, it will find it.
### Steam Deck
| Setup | What it is | Pack | Extract to |
|-------|-----------|------|-----------|
| [EmuDeck](https://www.emudeck.com/) | Installs and configures multiple emulators, adds each game to the Steam library | [EmuDeck]({rel}) | `~/Emulation/bios/` |
| [RetroDECK](https://retrodeck.net/) | Single Flatpak app, all emulators bundled, one-click install from Discover | [RetroDECK]({rel}) | `~/retrodeck/` |
| RetroArch standalone | Installed from Discover, Steam, or Flatpak | [RetroArch]({rel}) | Open RetroArch > Settings > Directory > System, that is the folder |
### Windows
| Setup | What it is | Pack | Extract to |
|-------|-----------|------|-----------|
| [RetroArch](https://www.retroarch.com/) | Multi-system emulator, loads different cores for each console | [RetroArch]({rel}) | The `system` folder next to `retroarch.exe` |
| [RetroBat](https://www.retrobat.org/) | Windows frontend with EmulationStation, includes RetroArch and standalone emulators | [RetroBat]({rel}) | The `bios` folder inside the RetroBat installation |
| [BizHawk](https://tasvideos.org/BizHawk) | Accuracy-focused multi-system emulator, popular for speedruns and TAS | [BizHawk]({rel}) | The `Firmware` folder inside the BizHawk installation |
| [LaunchBox](https://www.launchbox-app.com/) | Game library manager and launcher, uses RetroArch or standalone emulators behind the scenes | [RetroArch]({rel}) | Open RetroArch (via LaunchBox) > Settings > Directory > System |
### Linux
| Setup | What it is | Pack | Extract to |
|-------|-----------|------|-----------|
| RetroArch (native) | Installed via package manager or AppImage | [RetroArch]({rel}) | `~/.config/retroarch/system/` |
| RetroArch (Flatpak) | Installed from Flathub | [RetroArch]({rel}) | `~/.var/app/org.libretro.RetroArch/config/retroarch/system/` |
| [Batocera](https://batocera.org/) | Bootable OS dedicated to gaming, runs from USB or full install, supports PC and SBC | [Batocera]({rel}) | `/userdata/bios/` |
| [Recalbox](https://www.recalbox.com/) | Bootable OS for retro gaming, streamlined interface, auto-configured | [Recalbox]({rel}) | `/recalbox/share/bios/` |
### macOS
| Setup | What it is | Pack | Extract to |
|-------|-----------|------|-----------|
| [RetroArch](https://www.retroarch.com/) | Multi-system emulator | [RetroArch]({rel}) | `~/Library/Application Support/RetroArch/system/` |
### Raspberry Pi and single-board computers
| Setup | What it is | Pack | Extract to |
|-------|-----------|------|-----------|
| [RetroPie](https://retropie.org.uk/) | The classic Pi emulation setup, largest community, most online guides | [RetroArch]({rel}) | `~/RetroPie/BIOS/` |
| [Lakka](https://www.lakka.tv/) | Lightweight RetroArch OS, minimal config, boots straight into the UI | [RetroArch]({rel}) | `/storage/system/` |
| [Batocera](https://batocera.org/) | Easy setup, works on Pi 3/4/5 and many other boards (Odroid, etc.) | [Batocera]({rel}) | `/userdata/bios/` |
| [Recalbox](https://www.recalbox.com/) | Plug-and-play experience, good for a first build | [Recalbox]({rel}) | `/recalbox/share/bios/` |
### Android handheld (Retroid Pocket, R36S, Miyoo, etc.)
Most Android handhelds run RetroArch. Download the [RetroArch pack]({rel})
and extract into `RetroArch/system/` on internal storage or SD card.
### Self-hosted ROM manager
| Setup | What it is | Pack | Extract to |
|-------|-----------|------|-----------|
| [RomM](https://github.com/rommapp/romm) | Web-based ROM manager, plays games in the browser via EmulatorJS | [RomM]({rel}) | The `bios` folder in the RomM library, one subfolder per system |
---
## Full pack or Platform pack?
Each platform has two pack types on the [releases page]({rel}).
**Full pack** (recommended)
Contains the platform's own BIOS list plus all files needed by each
emulator core available on that platform. This covers alternate cores,
optional firmware that improves accuracy, and edge cases. Larger download,
but everything works out of the box with any core.
**Platform pack**
Contains only the files the platform officially checks for. Much smaller
download. Good for limited storage (SD cards, handhelds) or setups that
only use default cores.
When in doubt, take the full pack.
---
## After extraction
Launch a game. If it needed a BIOS file, the emulator will find it
automatically. No configuration needed.
If a game still asks for a missing file, check the
[platforms section](platforms/index.md) for the full file list, or the
[emulators section](emulators/index.md) for what each core expects.
"""
def generate_mkdocs_nav(
coverages: dict,
manufacturers: dict,
@@ -2211,10 +2336,12 @@ def generate_mkdocs_nav(
{"Adding a scraper": "wiki/adding-a-scraper.md"},
{"Testing guide": "wiki/testing-guide.md"},
{"Release process": "wiki/release-process.md"},
{"Community tools": "wiki/community-tools.md"},
]
return [
{"Home": "index.md"},
{"Download": "which-pack.md"},
{"Platforms": platform_nav},
{"Systems": system_nav},
{"Emulators": emu_nav},
@@ -2258,6 +2385,15 @@ def main():
css_dest.parent.mkdir(parents=True, exist_ok=True)
shutil.copy2(css_src, css_dest)
# Copy branding assets
images_dest = docs / "assets" / "images"
images_dest.mkdir(parents=True, exist_ok=True)
assets_src = Path(".github") / "assets"
for name, dest_name in [("logo.png", "logo.png"), ("favicon.png", "favicon.png")]:
src = assets_src / name
if src.exists():
shutil.copy2(src, images_dest / dest_name)
registry_path = Path(args.platforms_dir) / "_registry.yml"
registry = {}
if registry_path.exists():
@@ -2368,6 +2504,10 @@ def main():
str(wiki_dest / "data-model.md"), generate_wiki_data_model(db, profiles)
)
# Generate which-pack page
print("Generating which-pack page...")
write_if_changed(str(docs / "which-pack.md"), generate_which_pack())
# Generate contributing
print("Generating contributing page...")
write_if_changed(str(docs / "contributing.md"), generate_contributing())
@@ -2403,6 +2543,8 @@ theme:
icon: material/brightness-4
name: Switch to auto
font: false
logo: assets/images/logo.png
favicon: assets/images/favicon.png
icon:
logo: material/chip
features:

View File

@@ -12,6 +12,16 @@ from common import _norm_system_id, resolve_platform_cores
from validation import filter_files_by_mode
def _serialize_source_ref(sr: object) -> str:
"""Convert a source_ref value to a clean string for serialization."""
if isinstance(sr, str):
return sr
if isinstance(sr, dict):
parts = [f"{k}: {v}" for k, v in sr.items()]
return "; ".join(parts)
return str(sr)
def _determine_core_mode(
emu_name: str,
profile: dict,
@@ -35,31 +45,78 @@ def _determine_core_mode(
def _enrich_hashes(entry: dict, db: dict) -> None:
"""Fill missing hash fields from the database."""
sha1 = entry.get("sha1", "")
md5 = entry.get("md5", "")
"""Fill missing sibling hashes from the database, ground-truth preserving.
# Hashes can be lists (multi-hash) — use first string value
if isinstance(sha1, list):
sha1 = sha1[0] if sha1 else ""
if isinstance(md5, list):
md5 = md5[0] if md5 else ""
The profile's hashes come from the emulator source code (ground truth).
Any hash of a given file set of bytes is a projection of that same
ground truth — sha1, md5, crc32 all identify the same bytes. If the
profile has ONE ground-truth hash, the DB can supply its siblings.
Lookup order (all are hash-anchored, never name-based):
1. SHA1 direct
2. MD5 -> SHA1 via indexes.by_md5
3. CRC32 -> SHA1 via indexes.by_crc32 (weaker 32-bit anchor,
requires size match when profile has size)
Name-based enrichment is NEVER used: a name alone has no ground-truth
anchor, the file in bios/ may not match what the source code expects.
Multi-hash entries (lists of accepted variants) are left untouched to
preserve variant information.
"""
# Skip multi-hash entries — they express ground truth as "any of these N
# variants", enriching with a single sibling would lose that information.
for h in ("sha1", "md5", "crc32"):
if isinstance(entry.get(h), list):
return
files_db = db.get("files", {})
indexes = db.get("indexes", {})
record = None
if sha1 and isinstance(sha1, str) and db.get("files"):
record = db["files"].get(sha1)
if record is None and md5:
by_md5 = db.get("by_md5", {})
md5_str = md5 if isinstance(md5, str) else md5[0] if md5 else ""
ref_sha1 = by_md5.get(md5_str.lower()) if md5_str else None
if ref_sha1 and db.get("files"):
record = db["files"].get(ref_sha1)
# Anchor 1: SHA1 (strongest)
sha1 = entry.get("sha1")
if sha1 and isinstance(sha1, str):
record = files_db.get(sha1)
# Anchor 2: MD5 (strong)
if record is None:
md5 = entry.get("md5")
if md5 and isinstance(md5, str):
by_md5 = indexes.get("by_md5", {})
ref = by_md5.get(md5.lower())
if ref:
ref_sha1 = ref if isinstance(ref, str) else (ref[0] if ref else None)
if ref_sha1:
record = files_db.get(ref_sha1)
# Anchor 3: CRC32 (32-bit, collisions theoretically possible).
# Require size match when profile has a size to guard against collisions.
if record is None:
crc = entry.get("crc32")
if crc and isinstance(crc, str):
by_crc32 = indexes.get("by_crc32", {})
ref = by_crc32.get(crc.lower())
if ref:
ref_sha1 = ref if isinstance(ref, str) else (ref[0] if ref else None)
if ref_sha1:
candidate = files_db.get(ref_sha1)
if candidate is not None:
profile_size = entry.get("size")
if not profile_size or candidate.get("size") == profile_size:
record = candidate
if record is None:
return
# Copy sibling hashes and size from the anchored record.
# These are projections of the same ground-truth bytes.
for field in ("sha1", "md5", "sha256", "crc32"):
if not entry.get(field) and record.get(field):
entry[field] = record[field]
if not entry.get("size") and record.get("size"):
entry["size"] = record["size"]
def _merge_file_into_system(
@@ -82,7 +139,7 @@ def _merge_file_into_system(
existing["_cores"] = existing.get("_cores", set()) | {emu_name}
sr = file_entry.get("source_ref")
if sr is not None:
sr_key = str(sr) if not isinstance(sr, str) else sr
sr_key = _serialize_source_ref(sr)
existing["_source_refs"] = existing.get("_source_refs", set()) | {sr_key}
else:
existing.setdefault("_source_refs", set())
@@ -91,14 +148,41 @@ def _merge_file_into_system(
for h in ("sha1", "md5", "sha256", "crc32"):
theirs = file_entry.get(h, "")
ours = existing.get(h, "")
if theirs and ours and theirs.lower() != ours.lower():
# Skip empty strings
if not theirs or theirs == "":
continue
if not ours or ours == "":
existing[h] = theirs
continue
# Normalize to sets for multi-hash comparison
t_list = theirs if isinstance(theirs, list) else [theirs]
o_list = ours if isinstance(ours, list) else [ours]
t_set = {str(v).lower() for v in t_list}
o_set = {str(v).lower() for v in o_list}
if not t_set & o_set:
print(
f"WARNING: hash conflict for {file_entry['name']} "
f"({h}: {ours} vs {theirs}, core {emu_name})",
file=sys.stderr,
)
elif theirs and not ours:
existing[h] = theirs
# Merge non-hash data fields if existing lacks them.
# A core that creates an entry without size/path/validation may be
# enriched by a sibling core that has those fields.
for field in (
"size",
"min_size",
"max_size",
"path",
"validation",
"description",
"category",
"hle_fallback",
"note",
"aliases",
"contents",
):
if file_entry.get(field) is not None and existing.get(field) is None:
existing[field] = file_entry[field]
return
entry: dict = {"name": file_entry["name"]}
@@ -119,14 +203,25 @@ def _merge_file_into_system(
"min_size",
"max_size",
"aliases",
"contents",
):
val = file_entry.get(field)
if val is not None:
entry[field] = val
# Strip empty string hashes (profile says "" when hash is unknown)
for h in ("sha1", "md5", "sha256", "crc32"):
if entry.get(h) == "":
del entry[h]
# Normalize CRC32: strip 0x prefix, lowercase
crc = entry.get("crc32")
if isinstance(crc, str) and crc.startswith("0x"):
entry["crc32"] = crc[2:].lower()
elif isinstance(crc, str) and crc != crc.lower():
entry["crc32"] = crc.lower()
entry["_cores"] = {emu_name}
sr = file_entry.get("source_ref")
if sr is not None:
sr_key = str(sr) if not isinstance(sr, str) else sr
sr_key = _serialize_source_ref(sr)
entry["_source_refs"] = {sr_key}
else:
entry["_source_refs"] = set()
@@ -137,6 +232,23 @@ def _merge_file_into_system(
files.append(entry)
def _has_exploitable_data(entry: dict) -> bool:
"""Check if an entry has any data beyond its name that can drive verification.
Applied AFTER merging all cores so entries benefit from enrichment by
sibling cores before being judged empty.
"""
return bool(
any(entry.get(h) for h in ("sha1", "md5", "sha256", "crc32"))
or entry.get("path")
or entry.get("size")
or entry.get("min_size")
or entry.get("max_size")
or entry.get("validation")
or entry.get("contents")
)
def generate_platform_truth(
platform_name: str,
config: dict,
@@ -274,6 +386,15 @@ def generate_platform_truth(
)
sys_cov["unprofiled"].add(emu_name)
# Drop files with no exploitable data AFTER all cores have contributed.
# A file declared by one core without hash/size/path may be enriched by
# another core that has the same entry with data — the filter must run
# once at the end, not per-core at creation time.
for sys_data in systems.values():
files_list = sys_data.get("files", [])
if files_list:
sys_data["files"] = [fe for fe in files_list if _has_exploitable_data(fe)]
# Convert sets to sorted lists for serialization
for sys_id, sys_data in systems.items():
for fe in sys_data.get("files", []):

View File

@@ -994,8 +994,10 @@ class TestE2E(unittest.TestCase):
groups = group_identical_platforms(
["test_existence", "test_inherited"], self.platforms_dir
)
# Different base_destination ->separate groups
self.assertEqual(len(groups), 2)
# With flat ZIPs, base_destination no longer separates groups
# Platforms with same files (regardless of base_dest) are grouped
self.assertEqual(len(groups), 1)
self.assertEqual(len(groups[0][0]), 2)
def test_51_platform_grouping_same(self):
# Create two identical platforms
@@ -3093,20 +3095,23 @@ class TestE2E(unittest.TestCase):
"system": "test-system",
"required": True,
"mode": "both",
"sha1": "aaaa",
},
{
"name": "lr_only.bin",
"system": "test-system",
"required": True,
"mode": "libretro",
"sha1": "bbbb",
},
{
"name": "sa_only.bin",
"system": "test-system",
"required": True,
"mode": "standalone",
"sha1": "cccc",
},
{"name": "nomode.bin", "system": "test-system", "required": True},
{"name": "nomode.bin", "system": "test-system", "required": True, "sha1": "dddd"},
],
}
with open(os.path.join(self.emulators_dir, "dualmode.yml"), "w") as f:
@@ -3140,12 +3145,14 @@ class TestE2E(unittest.TestCase):
"system": "test-system",
"required": True,
"mode": "libretro",
"sha1": "aaaa",
},
{
"name": "sa_file.bin",
"system": "test-system",
"required": True,
"mode": "standalone",
"sha1": "bbbb",
},
],
}
@@ -3181,6 +3188,7 @@ class TestE2E(unittest.TestCase):
"system": "test-system",
"required": False,
"source_ref": "a.cpp:10",
"sha1": "aaaa",
},
],
}
@@ -3195,6 +3203,7 @@ class TestE2E(unittest.TestCase):
"system": "test-system",
"required": True,
"source_ref": "b.cpp:20",
"sha1": "aaaa",
},
],
}
@@ -3383,10 +3392,17 @@ class TestE2E(unittest.TestCase):
registry_path,
emulators_dir=self.emulators_dir,
)
# Detect flat vs nested ZIP to build expected paths
base = manifest.get("base_destination", "")
is_flat = bool(base) and not any(
n.startswith(base + "/") for n in zip_names
)
manifest_dests = set()
for f in manifest["files"]:
d = f"{base}/{f['dest']}" if base else f["dest"]
if base and not is_flat:
d = f"{base}/{f['dest']}"
else:
d = f["dest"]
manifest_dests.add(d)
self.assertEqual(manifest_dests, zip_names)

View File

@@ -0,0 +1,58 @@
from __future__ import annotations
import os
import unittest
from collections import defaultdict
from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parent.parent
BIOS_ROOT = REPO_ROOT / "bios"
class TestNoCaseCollisions(unittest.TestCase):
"""Guard against case-colliding paths in bios/.
On case-insensitive filesystems (Windows, macOS default), git can only
check out one path per casefold-equivalence class, silently corrupting
clones. Issue #33 and #49 both stemmed from this.
.variants/ subdirs are exempt: they intentionally hold genuine content
variants disambiguated by hash suffix (e.g., BIOS.ROM.910fae67).
"""
def test_bios_has_no_case_colliding_paths(self) -> None:
if not BIOS_ROOT.is_dir():
self.skipTest("bios/ directory not present")
collisions: list[str] = []
for root, dirs, files in os.walk(BIOS_ROOT):
if ".variants" in Path(root).parts:
continue
dir_groups: dict[str, list[str]] = defaultdict(list)
for d in dirs:
dir_groups[d.casefold()].append(d)
for variants in dir_groups.values():
if len(variants) > 1:
rel = Path(root).relative_to(REPO_ROOT)
collisions.append(f"DIR {rel}: {sorted(variants)}")
file_groups: dict[str, list[str]] = defaultdict(list)
for f in files:
file_groups[f.casefold()].append(f)
for variants in file_groups.values():
if len(variants) > 1:
rel = Path(root).relative_to(REPO_ROOT)
collisions.append(f"FILE {rel}: {sorted(variants)}")
self.assertEqual(
collisions,
[],
"Case-colliding paths in bios/ would break Windows/macOS clones:\n"
+ "\n".join(collisions),
)
if __name__ == "__main__":
unittest.main()

21
wiki/community-tools.md Normal file
View File

@@ -0,0 +1,21 @@
# Community tools
Projects built on RetroBIOS data.
---
## BIOS Preservation Tool
**Author:** [monster-penguin](https://github.com/monster-penguin)
**Repository:** [github.com/monster-penguin/BIOS-Preservation-Tool](https://github.com/monster-penguin/BIOS-Preservation-Tool)
**License:** MIT
A local tool for managing your own BIOS collection. Point it at your files, it verifies them against RetroBIOS platform YAMLs, stores them in a deduplicated database, and produces ready-to-use directories for each platform. Supports scanning directories, archives, and URLs.
See the project's [README](https://github.com/monster-penguin/BIOS-Preservation-Tool#readme) for setup and usage.
---
!!! note "Add your project"
Open an issue with a link to your repository.

View File

@@ -7,7 +7,7 @@ Technical documentation for the RetroBIOS toolchain.
- **[Getting started](getting-started.md)** - installation, BIOS directory paths per platform, verification
- **[FAQ](faq.md)** - common questions, troubleshooting, hash explanations
If you just want to download BIOS packs, see the [home page](../README.md).
If you just want to download BIOS packs, see the [home page](../index.md).
## Technical reference
@@ -26,7 +26,11 @@ If you just want to download BIOS packs, see the [home page](../README.md).
- **[Testing guide](testing-guide.md)** - run tests, fixture pattern, how to add tests, CI integration
- **[Release process](release-process.md)** - CI workflows, large files, manual release
See [contributing](../CONTRIBUTING.md) for submission guidelines.
See [contributing](../contributing.md) for submission guidelines.
## Community
- **[Community tools](community-tools.md)** - projects built on RetroBIOS data
## Glossary