mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-04-13 12:22:33 -05:00
Compare commits
19 Commits
v2026.04.0
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d4ce6df911 | ||
|
|
d0846ed78f | ||
|
|
07b4e55053 | ||
|
|
690e897ca7 | ||
|
|
7471c176c3 | ||
|
|
e72773e46d | ||
|
|
3c0c1cec02 | ||
|
|
faf4236463 | ||
|
|
1c0c502258 | ||
|
|
06c48e071a | ||
|
|
8f93ee2239 | ||
|
|
9ba8b02ff1 | ||
|
|
6fc2753f3e | ||
|
|
486b359c22 | ||
|
|
76a3543672 | ||
|
|
48d185dd7d | ||
|
|
6dbc3f510b | ||
|
|
97e26103f5 | ||
|
|
59d777a33d |
BIN
.github/assets/banner-light.png
vendored
Normal file
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
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
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
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
BIN
.github/assets/social-preview.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 75 KiB |
10
README.md
10
README.md
@@ -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.
|
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>
|
<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
|
## Contributing
|
||||||
|
|
||||||
See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
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.
|
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*
|
||||||
|
|||||||
46
install.ps1
46
install.ps1
@@ -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."
|
Write-Host "`nDone. $downloaded downloaded, $upToDate already up to date."
|
||||||
|
|||||||
49
install.py
49
install.py
@@ -192,9 +192,9 @@ def detect_platforms(os_type: str) -> list[tuple[str, Path]]:
|
|||||||
if retrodeck_cfg.exists():
|
if retrodeck_cfg.exists():
|
||||||
bios_path = _parse_bash_var(retrodeck_cfg, "rdhome")
|
bios_path = _parse_bash_var(retrodeck_cfg, "rdhome")
|
||||||
if bios_path:
|
if bios_path:
|
||||||
found.append(("retrodeck", Path(bios_path) / "bios"))
|
found.append(("retrodeck", Path(bios_path)))
|
||||||
else:
|
else:
|
||||||
found.append(("retrodeck", home / "retrodeck" / "bios"))
|
found.append(("retrodeck", home / "retrodeck"))
|
||||||
|
|
||||||
# RetroArch Flatpak
|
# RetroArch Flatpak
|
||||||
flatpak_cfg = home / ".var" / "app" / "org.libretro.RetroArch" / "config" / "retroarch" / "retroarch.cfg"
|
flatpak_cfg = home / ".var" / "app" / "org.libretro.RetroArch" / "config" / "retroarch" / "retroarch.cfg"
|
||||||
@@ -390,8 +390,16 @@ def do_standalone_copies(
|
|||||||
) -> tuple[int, int]:
|
) -> tuple[int, int]:
|
||||||
"""Copy BIOS files to standalone emulator directories.
|
"""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).
|
Returns (copied_count, skipped_count).
|
||||||
"""
|
"""
|
||||||
|
from fnmatch import fnmatch
|
||||||
|
|
||||||
copies = manifest.get("standalone_copies", [])
|
copies = manifest.get("standalone_copies", [])
|
||||||
if not copies:
|
if not copies:
|
||||||
return 0, 0
|
return 0, 0
|
||||||
@@ -400,21 +408,48 @@ def do_standalone_copies(
|
|||||||
skipped = 0
|
skipped = 0
|
||||||
|
|
||||||
for entry in copies:
|
for entry in copies:
|
||||||
src = bios_path / entry["file"]
|
# Note entries: print message if emulator detected
|
||||||
if not src.exists():
|
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
|
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, [])
|
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:
|
for target_dir_str in targets:
|
||||||
target_dir = Path(os.path.expandvars(os.path.expanduser(target_dir_str)))
|
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
|
dest = target_dir / src.name
|
||||||
try:
|
try:
|
||||||
shutil.copy2(src, dest)
|
shutil.copy2(src, dest)
|
||||||
copied += 1
|
copied += 1
|
||||||
except OSError:
|
except OSError:
|
||||||
skipped += 1
|
skipped += 1
|
||||||
else:
|
|
||||||
skipped += 1
|
|
||||||
|
|
||||||
return copied, skipped
|
return copied, skipped
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"platform": "batocera",
|
"platform": "batocera",
|
||||||
"display_name": "Batocera",
|
"display_name": "Batocera",
|
||||||
"version": "1.0",
|
"version": "1.0",
|
||||||
"generated": "2026-04-02T13:52:15Z",
|
"generated": "2026-04-03T09:43:11Z",
|
||||||
"base_destination": "bios",
|
"base_destination": "bios",
|
||||||
"detect": [
|
"detect": [
|
||||||
{
|
{
|
||||||
@@ -14,7 +14,222 @@
|
|||||||
"bios_path": "/userdata/bios"
|
"bios_path": "/userdata/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": 1547,
|
"total_files": 1547,
|
||||||
"total_size": 4371484317,
|
"total_size": 4371484317,
|
||||||
"files": [
|
"files": [
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"platform": "emudeck",
|
"platform": "emudeck",
|
||||||
"display_name": "EmuDeck",
|
"display_name": "EmuDeck",
|
||||||
"version": "1.0",
|
"version": "1.0",
|
||||||
"generated": "2026-04-01T14:41:53Z",
|
"generated": "2026-04-03T09:43:22Z",
|
||||||
"base_destination": "bios",
|
"base_destination": "bios",
|
||||||
"detect": [
|
"detect": [
|
||||||
{
|
{
|
||||||
@@ -34,19 +34,211 @@
|
|||||||
"linux": [
|
"linux": [
|
||||||
"$HOME/.local/share/yuzu/keys",
|
"$HOME/.local/share/yuzu/keys",
|
||||||
"$HOME/.local/share/eden/keys",
|
"$HOME/.local/share/eden/keys",
|
||||||
|
"$HOME/.local/share/citron/keys",
|
||||||
|
"$HOME/.local/share/suyu/keys",
|
||||||
"$HOME/.config/Ryujinx/system"
|
"$HOME/.config/Ryujinx/system"
|
||||||
],
|
],
|
||||||
"windows": [
|
"windows": [
|
||||||
"%APPDATA%\\yuzu\\keys",
|
"%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": {
|
"targets": {
|
||||||
"linux": [
|
"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"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"platform": "recalbox",
|
"platform": "recalbox",
|
||||||
"display_name": "Recalbox",
|
"display_name": "Recalbox",
|
||||||
"version": "1.0",
|
"version": "1.0",
|
||||||
"generated": "2026-04-02T13:53:15Z",
|
"generated": "2026-04-03T09:44:06Z",
|
||||||
"base_destination": "bios",
|
"base_destination": "bios",
|
||||||
"detect": [
|
"detect": [
|
||||||
{
|
{
|
||||||
@@ -14,7 +14,222 @@
|
|||||||
"bios_path": "/recalbox/share/bios"
|
"bios_path": "/recalbox/share/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": 1107,
|
"total_files": 1107,
|
||||||
"total_size": 3980096655,
|
"total_size": 3980096655,
|
||||||
"files": [
|
"files": [
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"platform": "retroarch",
|
"platform": "retroarch",
|
||||||
"display_name": "RetroArch",
|
"display_name": "RetroArch",
|
||||||
"version": "1.0",
|
"version": "1.0",
|
||||||
"generated": "2026-04-02T13:52:45Z",
|
"generated": "2026-04-03T09:43:38Z",
|
||||||
"base_destination": "system",
|
"base_destination": "system",
|
||||||
"detect": [
|
"detect": [
|
||||||
{
|
{
|
||||||
@@ -32,7 +32,222 @@
|
|||||||
"parse_key": "system_directory"
|
"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_files": 1627,
|
||||||
"total_size": 5735234905,
|
"total_size": 5735234905,
|
||||||
"files": [
|
"files": [
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"platform": "retrobat",
|
"platform": "retrobat",
|
||||||
"display_name": "RetroBat",
|
"display_name": "RetroBat",
|
||||||
"version": "1.0",
|
"version": "1.0",
|
||||||
"generated": "2026-04-02T13:53:25Z",
|
"generated": "2026-04-03T09:44:16Z",
|
||||||
"base_destination": "bios",
|
"base_destination": "bios",
|
||||||
"detect": [
|
"detect": [
|
||||||
{
|
{
|
||||||
@@ -13,7 +13,222 @@
|
|||||||
"path": "%USERPROFILE%\\RetroBat\\bios"
|
"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_files": 1169,
|
||||||
"total_size": 4777641221,
|
"total_size": 4777641221,
|
||||||
"files": [
|
"files": [
|
||||||
|
|||||||
@@ -4,17 +4,232 @@
|
|||||||
"platform": "retrodeck",
|
"platform": "retrodeck",
|
||||||
"display_name": "RetroDECK",
|
"display_name": "RetroDECK",
|
||||||
"version": "1.0",
|
"version": "1.0",
|
||||||
"generated": "2026-04-02T13:53:43Z",
|
"generated": "2026-04-03T09:44:33Z",
|
||||||
"base_destination": "",
|
"base_destination": "",
|
||||||
"detect": [
|
"detect": [
|
||||||
{
|
{
|
||||||
"os": "linux",
|
"os": "linux",
|
||||||
"method": "path_exists",
|
"method": "path_exists",
|
||||||
"path": "$HOME/.var/app/net.retrodeck.retrodeck",
|
"path": "$HOME/.var/app/net.retrodeck.retrodeck",
|
||||||
"bios_path": "$HOME/retrodeck/bios"
|
"bios_path": "$HOME/retrodeck"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"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"
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"standalone_copies": [],
|
|
||||||
"total_files": 3153,
|
"total_files": 3153,
|
||||||
"total_size": 6351500734,
|
"total_size": 6351500734,
|
||||||
"files": [
|
"files": [
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ theme:
|
|||||||
icon: material/brightness-4
|
icon: material/brightness-4
|
||||||
name: Switch to auto
|
name: Switch to auto
|
||||||
font: false
|
font: false
|
||||||
|
logo: assets/images/logo.png
|
||||||
|
favicon: assets/images/favicon.png
|
||||||
icon:
|
icon:
|
||||||
logo: material/chip
|
logo: material/chip
|
||||||
features:
|
features:
|
||||||
@@ -52,6 +54,7 @@ plugins:
|
|||||||
- search
|
- search
|
||||||
nav:
|
nav:
|
||||||
- Home: index.md
|
- Home: index.md
|
||||||
|
- Which pack?: which-pack.md
|
||||||
- Platforms:
|
- Platforms:
|
||||||
- Overview: platforms/index.md
|
- Overview: platforms/index.md
|
||||||
- Batocera: platforms/batocera.md
|
- Batocera: platforms/batocera.md
|
||||||
@@ -480,4 +483,5 @@ nav:
|
|||||||
- Adding a scraper: wiki/adding-a-scraper.md
|
- Adding a scraper: wiki/adding-a-scraper.md
|
||||||
- Testing guide: wiki/testing-guide.md
|
- Testing guide: wiki/testing-guide.md
|
||||||
- Release process: wiki/release-process.md
|
- Release process: wiki/release-process.md
|
||||||
|
- Community tools: wiki/community-tools.md
|
||||||
- Contributing: contributing.md
|
- Contributing: contributing.md
|
||||||
|
|||||||
@@ -32,6 +32,144 @@ platforms:
|
|||||||
method: config_file
|
method: config_file
|
||||||
config: '%APPDATA%\RetroArch\retroarch.cfg'
|
config: '%APPDATA%\RetroArch\retroarch.cfg'
|
||||||
parse_key: system_directory
|
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:
|
batocera:
|
||||||
config: batocera.yml
|
config: batocera.yml
|
||||||
status: active
|
status: active
|
||||||
@@ -256,6 +394,144 @@ platforms:
|
|||||||
method: file_exists
|
method: file_exists
|
||||||
file: /etc/batocera-version
|
file: /etc/batocera-version
|
||||||
bios_path: /userdata/bios
|
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:
|
recalbox:
|
||||||
config: recalbox.yml
|
config: recalbox.yml
|
||||||
status: active
|
status: active
|
||||||
@@ -468,6 +744,144 @@ platforms:
|
|||||||
method: file_exists
|
method: file_exists
|
||||||
file: /usr/bin/recalbox-settings
|
file: /usr/bin/recalbox-settings
|
||||||
bios_path: /recalbox/share/bios
|
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:
|
retrobat:
|
||||||
config: retrobat.yml
|
config: retrobat.yml
|
||||||
status: active
|
status: active
|
||||||
@@ -653,6 +1067,144 @@ platforms:
|
|||||||
- os: windows
|
- os: windows
|
||||||
method: path_exists
|
method: path_exists
|
||||||
path: '%USERPROFILE%\RetroBat\bios'
|
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:
|
emudeck:
|
||||||
config: emudeck.yml
|
config: emudeck.yml
|
||||||
status: active
|
status: active
|
||||||
@@ -681,19 +1233,143 @@ platforms:
|
|||||||
parse_key: $emulationPath
|
parse_key: $emulationPath
|
||||||
bios_subdir: bios
|
bios_subdir: bios
|
||||||
standalone_copies:
|
standalone_copies:
|
||||||
|
# Switch emulators (keys)
|
||||||
- file: prod.keys
|
- file: prod.keys
|
||||||
targets:
|
targets:
|
||||||
linux:
|
linux:
|
||||||
- $HOME/.local/share/yuzu/keys
|
- $HOME/.local/share/yuzu/keys
|
||||||
- $HOME/.local/share/eden/keys
|
- $HOME/.local/share/eden/keys
|
||||||
|
- $HOME/.local/share/citron/keys
|
||||||
|
- $HOME/.local/share/suyu/keys
|
||||||
- $HOME/.config/Ryujinx/system
|
- $HOME/.config/Ryujinx/system
|
||||||
windows:
|
windows:
|
||||||
- '%APPDATA%\yuzu\keys'
|
- '%APPDATA%\yuzu\keys'
|
||||||
- '%APPDATA%\eden\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:
|
targets:
|
||||||
linux:
|
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:
|
lakka:
|
||||||
config: lakka.yml
|
config: lakka.yml
|
||||||
status: active
|
status: active
|
||||||
@@ -752,7 +1428,145 @@ platforms:
|
|||||||
- os: linux
|
- os: linux
|
||||||
method: path_exists
|
method: path_exists
|
||||||
path: $HOME/.var/app/net.retrodeck.retrodeck
|
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:
|
romm:
|
||||||
config: romm.yml
|
config: romm.yml
|
||||||
status: active
|
status: active
|
||||||
|
|||||||
@@ -743,15 +743,13 @@ def group_identical_platforms(
|
|||||||
inherits[platform] = False
|
inherits[platform] = False
|
||||||
continue
|
continue
|
||||||
|
|
||||||
base_dest = config.get("base_destination", "")
|
|
||||||
entries = []
|
entries = []
|
||||||
for sys_id, system in sorted(config.get("systems", {}).items()):
|
for sys_id, system in sorted(config.get("systems", {}).items()):
|
||||||
for fe in system.get("files", []):
|
for fe in system.get("files", []):
|
||||||
dest = fe.get("destination", fe.get("name", ""))
|
dest = fe.get("destination", fe.get("name", ""))
|
||||||
full_dest = f"{base_dest}/{dest}" if base_dest else dest
|
|
||||||
sha1 = fe.get("sha1", "")
|
sha1 = fe.get("sha1", "")
|
||||||
md5 = fe.get("md5", "")
|
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()
|
fp = hashlib.sha1("|".join(sorted(entries)).encode()).hexdigest()
|
||||||
if target_cores_cache:
|
if target_cores_cache:
|
||||||
|
|||||||
@@ -246,6 +246,13 @@ def _register_path(dest: str, seen_files: set[str], seen_parents: set[str]) -> N
|
|||||||
seen_parents.add(parent)
|
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(
|
def resolve_file(
|
||||||
file_entry: dict,
|
file_entry: dict,
|
||||||
db: dict,
|
db: dict,
|
||||||
@@ -783,15 +790,14 @@ def _build_readme(
|
|||||||
" 1. Find your RetroArch system directory:\n"
|
" 1. Find your RetroArch system directory:\n"
|
||||||
" - RetroArch > Settings > Directory > System/BIOS\n"
|
" - RetroArch > Settings > Directory > System/BIOS\n"
|
||||||
" - Default: retroarch/system/\n"
|
" - Default: retroarch/system/\n"
|
||||||
' 2. Open the "system" folder from this archive\n'
|
" 2. Extract all files from this archive directly into your system directory\n"
|
||||||
" 3. Copy ALL contents into your system directory\n"
|
" 3. Overwrite if asked\n\n"
|
||||||
" 4. Overwrite if asked\n\n"
|
|
||||||
" Option C: Manual (handheld / SD card)\n"
|
" Option C: Manual (handheld / SD card)\n"
|
||||||
" -------------------------------------\n"
|
" -------------------------------------\n"
|
||||||
" Anbernic, Retroid, Miyoo, Trimui, etc.:\n"
|
" Anbernic, Retroid, Miyoo, Trimui, etc.:\n"
|
||||||
" 1. Connect your SD card to your PC\n"
|
" 1. Connect your SD card to your PC\n"
|
||||||
" 2. Find the BIOS folder (usually BIOS/ or system/)\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"
|
" 4. Eject SD card and reboot your device\n\n"
|
||||||
" Common paths by device:\n"
|
" Common paths by device:\n"
|
||||||
" Anbernic (ArkOS/JELOS): BIOS/\n"
|
" Anbernic (ArkOS/JELOS): BIOS/\n"
|
||||||
@@ -810,14 +816,13 @@ def _build_readme(
|
|||||||
" 1. On your PC, open the Batocera network share:\n"
|
" 1. On your PC, open the Batocera network share:\n"
|
||||||
" - Windows: \\\\BATOCERA\\share\\bios\\\n"
|
" - Windows: \\\\BATOCERA\\share\\bios\\\n"
|
||||||
" - Mac/Linux: smb://batocera/share/bios/\n"
|
" - Mac/Linux: smb://batocera/share/bios/\n"
|
||||||
' 2. Open the "bios" folder from this archive\n'
|
" 2. Extract all files from this archive directly into the share\n"
|
||||||
" 3. Copy ALL contents into the share\n"
|
" 3. Overwrite if asked\n\n"
|
||||||
" 4. Overwrite if asked\n\n"
|
|
||||||
" Option C: Manual (SD card)\n"
|
" Option C: Manual (SD card)\n"
|
||||||
" --------------------------\n"
|
" --------------------------\n"
|
||||||
" 1. Put the SD card in your PC\n"
|
" 1. Put the SD card in your PC\n"
|
||||||
" 2. Navigate to /userdata/bios/ on the SHARE partition\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"
|
" NOTE: Dreamcast flash memory is named dc_nvmem.bin\n"
|
||||||
" (if your setup asks for dc_flash.bin, same file).\n\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"
|
" 1. On your PC, open the Recalbox network share:\n"
|
||||||
" - Windows: \\\\RECALBOX\\share\\bios\\\n"
|
" - Windows: \\\\RECALBOX\\share\\bios\\\n"
|
||||||
" - Mac/Linux: smb://recalbox/share/bios/\n"
|
" - Mac/Linux: smb://recalbox/share/bios/\n"
|
||||||
' 2. Open the "bios" folder from this archive\n'
|
" 2. Extract all files from this archive directly into the share\n\n"
|
||||||
" 3. Copy ALL contents into the share\n\n"
|
|
||||||
" Option C: Manual (SD card)\n"
|
" Option C: Manual (SD card)\n"
|
||||||
" --------------------------\n"
|
" --------------------------\n"
|
||||||
" 1. Put the SD card in your PC\n"
|
" 1. Put the SD card in your PC\n"
|
||||||
" 2. Navigate to /recalbox/share/bios/\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": (
|
"emudeck": (
|
||||||
"INSTALLATION GUIDE (Steam Deck / Linux)\n\n"
|
"INSTALLATION GUIDE (Steam Deck / Linux)\n\n"
|
||||||
@@ -851,8 +855,7 @@ def _build_readme(
|
|||||||
" ----------------\n"
|
" ----------------\n"
|
||||||
" 1. Open Dolphin file manager\n"
|
" 1. Open Dolphin file manager\n"
|
||||||
" 2. Navigate to ~/Emulation/bios/\n"
|
" 2. Navigate to ~/Emulation/bios/\n"
|
||||||
' 3. Open the "bios" folder from this archive\n'
|
" 3. Extract all files from this archive directly into ~/Emulation/bios/\n\n"
|
||||||
" 4. Copy ALL contents into ~/Emulation/bios/\n\n"
|
|
||||||
" STANDALONE EMULATORS (extra step)\n"
|
" STANDALONE EMULATORS (extra step)\n"
|
||||||
" Switch and 3DS emulators need keys in specific folders:\n"
|
" Switch and 3DS emulators need keys in specific folders:\n"
|
||||||
" prod.keys -> ~/.local/share/yuzu/keys/\n"
|
" prod.keys -> ~/.local/share/yuzu/keys/\n"
|
||||||
@@ -871,11 +874,8 @@ def _build_readme(
|
|||||||
" ----------------\n"
|
" ----------------\n"
|
||||||
" 1. Open Dolphin file manager\n"
|
" 1. Open Dolphin file manager\n"
|
||||||
" 2. Show hidden files (Ctrl+H)\n"
|
" 2. Show hidden files (Ctrl+H)\n"
|
||||||
" 3. Navigate to ~/retrodeck/\n"
|
" 3. Navigate to ~/retrodeck/bios/\n"
|
||||||
' 4. Open the "bios" folder from this archive\n'
|
" 4. Extract all files from this archive directly into ~/retrodeck/bios/\n\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"
|
|
||||||
" NOTE: RetroDECK uses its own BIOS checker. After\n"
|
" NOTE: RetroDECK uses its own BIOS checker. After\n"
|
||||||
" copying, open RetroDECK > Tools > BIOS Checker to\n"
|
" copying, open RetroDECK > Tools > BIOS Checker to\n"
|
||||||
" verify everything is detected.\n\n"
|
" verify everything is detected.\n\n"
|
||||||
@@ -891,9 +891,8 @@ def _build_readme(
|
|||||||
" 1. Open your RetroBat installation folder\n"
|
" 1. Open your RetroBat installation folder\n"
|
||||||
" 2. Navigate to the bios\\ subfolder\n"
|
" 2. Navigate to the bios\\ subfolder\n"
|
||||||
" (default: C:\\RetroBat\\bios\\)\n"
|
" (default: C:\\RetroBat\\bios\\)\n"
|
||||||
' 3. Open the "bios" folder from this archive\n'
|
" 3. Extract all files from this archive directly into your bios\\ folder\n"
|
||||||
" 4. Copy ALL contents into your bios\\ folder\n"
|
" 4. Overwrite if asked\n\n"
|
||||||
" 5. Overwrite if asked\n\n"
|
|
||||||
),
|
),
|
||||||
"bizhawk": (
|
"bizhawk": (
|
||||||
"INSTALLATION GUIDE\n\n"
|
"INSTALLATION GUIDE\n\n"
|
||||||
@@ -901,16 +900,15 @@ def _build_readme(
|
|||||||
" 2. Navigate to the Firmware subfolder:\n"
|
" 2. Navigate to the Firmware subfolder:\n"
|
||||||
" - Windows: BizHawk\\Firmware\\\n"
|
" - Windows: BizHawk\\Firmware\\\n"
|
||||||
" - Linux: ~/.config/BizHawk/Firmware/\n"
|
" - Linux: ~/.config/BizHawk/Firmware/\n"
|
||||||
' 3. Open the "Firmware" folder from this archive\n'
|
" 3. Extract all files from this archive directly into your Firmware folder\n"
|
||||||
" 4. Copy ALL contents into your Firmware folder\n"
|
" 4. In BizHawk: Config > Paths > Firmware should\n"
|
||||||
" 5. In BizHawk: Config > Paths > Firmware should\n"
|
|
||||||
" point to this folder\n\n"
|
" point to this folder\n\n"
|
||||||
),
|
),
|
||||||
"romm": (
|
"romm": (
|
||||||
"INSTALLATION GUIDE (RomM server)\n\n"
|
"INSTALLATION GUIDE (RomM server)\n\n"
|
||||||
" 1. Locate your RomM library folder\n"
|
" 1. Locate your RomM library folder\n"
|
||||||
" 2. Navigate to the bios/ subdirectory\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"
|
" 4. Restart the RomM service to detect new files\n\n"
|
||||||
),
|
),
|
||||||
"retropie": (
|
"retropie": (
|
||||||
@@ -918,7 +916,7 @@ def _build_readme(
|
|||||||
" Option A: Via network share\n"
|
" Option A: Via network share\n"
|
||||||
" --------------------------\n"
|
" --------------------------\n"
|
||||||
" 1. On your PC, open: \\\\RETROPIE\\bios\\\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"
|
" Option B: Via SSH\n"
|
||||||
" -----------------\n"
|
" -----------------\n"
|
||||||
" 1. SSH into your Pi: ssh pi@retropie\n"
|
" 1. SSH into your Pi: ssh pi@retropie\n"
|
||||||
@@ -927,7 +925,7 @@ def _build_readme(
|
|||||||
" ---------------------\n"
|
" ---------------------\n"
|
||||||
" 1. Put the SD card in your PC\n"
|
" 1. Put the SD card in your PC\n"
|
||||||
" 2. Navigate to /home/pi/RetroPie/BIOS/\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,
|
platform_name,
|
||||||
(
|
(
|
||||||
f"INSTALLATION\n\n"
|
f"INSTALLATION\n\n"
|
||||||
f' 1. Open the "{base_dest or "files"}" folder in this archive\n'
|
f" 1. Extract all files from this archive directly into your BIOS directory\n"
|
||||||
f" 2. Copy ALL contents to your BIOS directory\n"
|
f" 2. Overwrite if asked\n\n"
|
||||||
f" 3. Overwrite if asked\n\n"
|
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -977,10 +974,7 @@ def _build_readme(
|
|||||||
credits = "\nCONTRIBUTORS\n\n"
|
credits = "\nCONTRIBUTORS\n\n"
|
||||||
for cb in contributors:
|
for cb in contributors:
|
||||||
username = cb.get("username", "")
|
username = cb.get("username", "")
|
||||||
contribution = cb.get("contribution", "")
|
credits += f" @{username}\n"
|
||||||
pr = cb.get("pr")
|
|
||||||
pr_ref = f" (#{pr})" if pr else ""
|
|
||||||
credits += f" @{username} - {contribution}{pr_ref}\n"
|
|
||||||
credits += "\n"
|
credits += "\n"
|
||||||
|
|
||||||
return header + source_info + guide + credits + footer
|
return header + source_info + guide + credits + footer
|
||||||
@@ -1022,6 +1016,7 @@ def generate_pack(
|
|||||||
system_filter: list[str] | None = None,
|
system_filter: list[str] | None = None,
|
||||||
precomputed_extras: list[dict] | None = None,
|
precomputed_extras: list[dict] | None = None,
|
||||||
source: str = "full",
|
source: str = "full",
|
||||||
|
flatten: bool = True,
|
||||||
) -> str | None:
|
) -> str | None:
|
||||||
"""Generate a ZIP pack for a platform.
|
"""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
|
f"{base_dest}/{instr_name}" if base_dest else instr_name
|
||||||
)
|
)
|
||||||
zf.writestr(
|
zf.writestr(
|
||||||
instr_path,
|
_flat(instr_path, base_dest, flatten),
|
||||||
f"File needed: {file_entry['name']}\n\n{instructions}\n",
|
f"File needed: {file_entry['name']}\n\n{instructions}\n",
|
||||||
)
|
)
|
||||||
user_provided.append(file_entry["name"])
|
user_provided.append(file_entry["name"])
|
||||||
@@ -1183,9 +1178,9 @@ def generate_pack(
|
|||||||
if download_external(file_entry, tmp_path):
|
if download_external(file_entry, tmp_path):
|
||||||
extract = file_entry.get("extract", False)
|
extract = file_entry.get("extract", False)
|
||||||
if extract and tmp_path.endswith(".zip"):
|
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:
|
else:
|
||||||
zf.write(tmp_path, full_dest)
|
zf.write(tmp_path, _flat(full_dest, base_dest, flatten))
|
||||||
seen_destinations.add(dedup_key)
|
seen_destinations.add(dedup_key)
|
||||||
_register_path(dedup_key, seen_destinations, seen_parents)
|
_register_path(dedup_key, seen_destinations, seen_parents)
|
||||||
if case_insensitive:
|
if case_insensitive:
|
||||||
@@ -1263,7 +1258,7 @@ def generate_pack(
|
|||||||
else readme_name
|
else readme_name
|
||||||
)
|
)
|
||||||
if readme_full not in seen_destinations:
|
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)
|
seen_destinations.add(readme_full)
|
||||||
status = "agnostic_fallback"
|
status = "agnostic_fallback"
|
||||||
# Fall through to normal packing below
|
# Fall through to normal packing below
|
||||||
@@ -1349,12 +1344,13 @@ def generate_pack(
|
|||||||
seen_lower.add(dedup_key.lower())
|
seen_lower.add(dedup_key.lower())
|
||||||
|
|
||||||
extract = file_entry.get("extract", False)
|
extract = file_entry.get("extract", False)
|
||||||
|
flat_dest = _flat(full_dest, base_dest, flatten)
|
||||||
if extract and local_path.endswith(".zip"):
|
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"):
|
elif local_path.endswith(".zip"):
|
||||||
_normalize_zip_for_pack(local_path, full_dest, zf)
|
_normalize_zip_for_pack(local_path, flat_dest, zf)
|
||||||
else:
|
else:
|
||||||
zf.write(local_path, full_dest)
|
zf.write(local_path, flat_dest)
|
||||||
total_files += 1
|
total_files += 1
|
||||||
|
|
||||||
# Core requirements: files platform's cores need but YAML doesn't declare
|
# 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"):
|
if status in ("not_found", "external", "user_provided"):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
flat_dest = _flat(full_dest, base_dest, flatten)
|
||||||
if local_path.endswith(".zip"):
|
if local_path.endswith(".zip"):
|
||||||
_normalize_zip_for_pack(local_path, full_dest, zf)
|
_normalize_zip_for_pack(local_path, flat_dest, zf)
|
||||||
else:
|
else:
|
||||||
zf.write(local_path, full_dest)
|
zf.write(local_path, flat_dest)
|
||||||
seen_destinations.add(full_dest)
|
seen_destinations.add(full_dest)
|
||||||
_register_path(full_dest, seen_destinations, seen_parents)
|
_register_path(full_dest, seen_destinations, seen_parents)
|
||||||
if case_insensitive:
|
if case_insensitive:
|
||||||
@@ -1489,7 +1486,7 @@ def generate_pack(
|
|||||||
_register_path(full, seen_destinations, seen_parents)
|
_register_path(full, seen_destinations, seen_parents)
|
||||||
if case_insensitive:
|
if case_insensitive:
|
||||||
seen_lower.add(full.lower())
|
seen_lower.add(full.lower())
|
||||||
zf.write(src, full)
|
zf.write(src, _flat(full, base_dest, flatten))
|
||||||
total_files += 1
|
total_files += 1
|
||||||
|
|
||||||
# README.txt for users -personalized step-by-step per platform
|
# 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:
|
with zipfile.ZipFile(zip_path) as zf:
|
||||||
zf.extractall(extract_dir)
|
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 = []
|
missing = []
|
||||||
hash_fail = []
|
hash_fail = []
|
||||||
ok = 0
|
ok = 0
|
||||||
@@ -2442,7 +2444,7 @@ def _run_verify_packs(args):
|
|||||||
continue
|
continue
|
||||||
fp = (
|
fp = (
|
||||||
os.path.join(extract_dir, base_dest, dest)
|
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)
|
else os.path.join(extract_dir, dest)
|
||||||
)
|
)
|
||||||
# Case-insensitive fallback
|
# Case-insensitive fallback
|
||||||
@@ -2613,9 +2615,11 @@ def _run_platform_packs(
|
|||||||
load_platform_config(p, args.platforms_dir).get("platform", p)
|
load_platform_config(p, args.platforms_dir).get("platform", p)
|
||||||
for p in group_platforms
|
for p in group_platforms
|
||||||
]
|
]
|
||||||
|
source_tag = {"platform": "_Platform", "truth": "_Truth"}.get(source, "")
|
||||||
|
req_tag = "_Required" if required_only else ""
|
||||||
combined = (
|
combined = (
|
||||||
"_".join(n.replace(" ", "") for n in all_names)
|
"_".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)
|
new_path = os.path.join(os.path.dirname(zip_path), combined)
|
||||||
if new_path != zip_path:
|
if new_path != zip_path:
|
||||||
@@ -3275,7 +3279,11 @@ def verify_pack(
|
|||||||
# Data directory: check against cached files
|
# Data directory: check against cached files
|
||||||
if status == "untracked" and _data_index:
|
if status == "untracked" and _data_index:
|
||||||
_bn = os.path.basename(name)
|
_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 = []
|
_cands = []
|
||||||
if _pr in _data_path_index:
|
if _pr in _data_path_index:
|
||||||
_cands.append(_data_path_index[_pr])
|
_cands.append(_data_path_index[_pr])
|
||||||
@@ -3442,6 +3450,13 @@ def verify_pack_against_platform(
|
|||||||
zip_set = set(zf.namelist())
|
zip_set = set(zf.namelist())
|
||||||
zip_lower = {n.lower(): n for n in zip_set}
|
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
|
# Structural checks
|
||||||
dupes = sum(1 for c in Counter(zf.namelist()).values() if c > 1)
|
dupes = sum(1 for c in Counter(zf.namelist()).values() if c > 1)
|
||||||
if dupes:
|
if dupes:
|
||||||
@@ -3471,7 +3486,7 @@ def verify_pack_against_platform(
|
|||||||
dest = fe.get("destination", fe.get("name", ""))
|
dest = fe.get("destination", fe.get("name", ""))
|
||||||
if not dest:
|
if not dest:
|
||||||
continue
|
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
|
baseline_checked += 1
|
||||||
|
|
||||||
if expected in zip_set or expected.lower() in zip_lower:
|
if expected in zip_set or expected.lower() in zip_lower:
|
||||||
@@ -3498,7 +3513,7 @@ def verify_pack_against_platform(
|
|||||||
continue
|
continue
|
||||||
raw_dest = u.get("path") or u["name"]
|
raw_dest = u.get("path") or u["name"]
|
||||||
dest = f"{raw_dest}{u['name']}" if raw_dest.endswith("/") else raw_dest
|
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}/"):
|
if not dest.startswith(f"{extras_pfx}/"):
|
||||||
full = f"{extras_pfx}/{dest}"
|
full = f"{extras_pfx}/{dest}"
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -143,7 +143,9 @@ def generate_readme(db: dict, platforms_dir: str) -> str:
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
lines = [
|
lines = [
|
||||||
"# RetroBIOS",
|
'<p align="center">',
|
||||||
|
' <img src=".github/assets/banner.png" alt="RetroBIOS" width="400">',
|
||||||
|
"</p>",
|
||||||
"",
|
"",
|
||||||
f"Complete BIOS and firmware packs for "
|
f"Complete BIOS and firmware packs for "
|
||||||
f"{', '.join(c['platform'] for c in sorted(coverages.values(), key=lambda x: x[
|
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(
|
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",
|
"## Contributing",
|
||||||
"",
|
"",
|
||||||
|
|||||||
@@ -2136,6 +2136,131 @@ def _build_emulator_file_index(profiles: dict) -> dict[str, dict]:
|
|||||||
# mkdocs.yml nav generator
|
# 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(
|
def generate_mkdocs_nav(
|
||||||
coverages: dict,
|
coverages: dict,
|
||||||
manufacturers: dict,
|
manufacturers: dict,
|
||||||
@@ -2211,10 +2336,12 @@ def generate_mkdocs_nav(
|
|||||||
{"Adding a scraper": "wiki/adding-a-scraper.md"},
|
{"Adding a scraper": "wiki/adding-a-scraper.md"},
|
||||||
{"Testing guide": "wiki/testing-guide.md"},
|
{"Testing guide": "wiki/testing-guide.md"},
|
||||||
{"Release process": "wiki/release-process.md"},
|
{"Release process": "wiki/release-process.md"},
|
||||||
|
{"Community tools": "wiki/community-tools.md"},
|
||||||
]
|
]
|
||||||
|
|
||||||
return [
|
return [
|
||||||
{"Home": "index.md"},
|
{"Home": "index.md"},
|
||||||
|
{"Download": "which-pack.md"},
|
||||||
{"Platforms": platform_nav},
|
{"Platforms": platform_nav},
|
||||||
{"Systems": system_nav},
|
{"Systems": system_nav},
|
||||||
{"Emulators": emu_nav},
|
{"Emulators": emu_nav},
|
||||||
@@ -2258,6 +2385,15 @@ def main():
|
|||||||
css_dest.parent.mkdir(parents=True, exist_ok=True)
|
css_dest.parent.mkdir(parents=True, exist_ok=True)
|
||||||
shutil.copy2(css_src, css_dest)
|
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_path = Path(args.platforms_dir) / "_registry.yml"
|
||||||
registry = {}
|
registry = {}
|
||||||
if registry_path.exists():
|
if registry_path.exists():
|
||||||
@@ -2368,6 +2504,10 @@ def main():
|
|||||||
str(wiki_dest / "data-model.md"), generate_wiki_data_model(db, profiles)
|
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
|
# Generate contributing
|
||||||
print("Generating contributing page...")
|
print("Generating contributing page...")
|
||||||
write_if_changed(str(docs / "contributing.md"), generate_contributing())
|
write_if_changed(str(docs / "contributing.md"), generate_contributing())
|
||||||
@@ -2403,6 +2543,8 @@ theme:
|
|||||||
icon: material/brightness-4
|
icon: material/brightness-4
|
||||||
name: Switch to auto
|
name: Switch to auto
|
||||||
font: false
|
font: false
|
||||||
|
logo: assets/images/logo.png
|
||||||
|
favicon: assets/images/favicon.png
|
||||||
icon:
|
icon:
|
||||||
logo: material/chip
|
logo: material/chip
|
||||||
features:
|
features:
|
||||||
|
|||||||
@@ -994,8 +994,10 @@ class TestE2E(unittest.TestCase):
|
|||||||
groups = group_identical_platforms(
|
groups = group_identical_platforms(
|
||||||
["test_existence", "test_inherited"], self.platforms_dir
|
["test_existence", "test_inherited"], self.platforms_dir
|
||||||
)
|
)
|
||||||
# Different base_destination ->separate groups
|
# With flat ZIPs, base_destination no longer separates groups
|
||||||
self.assertEqual(len(groups), 2)
|
# 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):
|
def test_51_platform_grouping_same(self):
|
||||||
# Create two identical platforms
|
# Create two identical platforms
|
||||||
@@ -3383,10 +3385,17 @@ class TestE2E(unittest.TestCase):
|
|||||||
registry_path,
|
registry_path,
|
||||||
emulators_dir=self.emulators_dir,
|
emulators_dir=self.emulators_dir,
|
||||||
)
|
)
|
||||||
|
# Detect flat vs nested ZIP to build expected paths
|
||||||
base = manifest.get("base_destination", "")
|
base = manifest.get("base_destination", "")
|
||||||
|
is_flat = bool(base) and not any(
|
||||||
|
n.startswith(base + "/") for n in zip_names
|
||||||
|
)
|
||||||
manifest_dests = set()
|
manifest_dests = set()
|
||||||
for f in manifest["files"]:
|
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)
|
manifest_dests.add(d)
|
||||||
|
|
||||||
self.assertEqual(manifest_dests, zip_names)
|
self.assertEqual(manifest_dests, zip_names)
|
||||||
|
|||||||
21
wiki/community-tools.md
Normal file
21
wiki/community-tools.md
Normal 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.
|
||||||
@@ -7,7 +7,7 @@ Technical documentation for the RetroBIOS toolchain.
|
|||||||
- **[Getting started](getting-started.md)** - installation, BIOS directory paths per platform, verification
|
- **[Getting started](getting-started.md)** - installation, BIOS directory paths per platform, verification
|
||||||
- **[FAQ](faq.md)** - common questions, troubleshooting, hash explanations
|
- **[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
|
## 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
|
- **[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
|
- **[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
|
## Glossary
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user