mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-10 21:43:23 -05:00
Compare commits
321
Commits
8fe961a1ea
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
527526a8e2 | ||
|
|
f5a5d6f4bd | ||
|
|
840f9ceaf6 | ||
|
|
40b46d1d78 | ||
|
|
6a39264fa6 | ||
|
|
fd8db894d8 | ||
|
|
15842d6402 | ||
|
|
c64e146a43 | ||
|
|
61cba2d3c1 | ||
|
|
8380f63f97 | ||
|
|
c38c790945 | ||
|
|
88d7ca4814 | ||
|
|
14b32b38ba | ||
|
|
3d0170264a | ||
|
|
2c2f284414 | ||
|
|
315549a5b0 | ||
|
|
26ea5336a7 | ||
|
|
de795262d7 | ||
|
|
b00352754c | ||
|
|
e26ee44229 | ||
|
|
b5f9095633 | ||
|
|
0057a82fe1 | ||
|
|
1cedc9930b | ||
|
|
c2bdef4db4 | ||
|
|
556d4a45aa | ||
|
|
befb23b492 | ||
|
|
65d396e996 | ||
|
|
2a049dc9c9 | ||
|
|
ffa6516e09 | ||
|
|
836c56b3fa | ||
|
|
bbce3902dd | ||
|
|
f6da2cff3a | ||
|
|
be45eda62d | ||
|
|
c3f3d16999 | ||
|
|
d7cc757d22 | ||
|
|
e0dab891ee | ||
|
|
707c81d2cf | ||
|
|
e6905f48e7 | ||
|
|
9002a4a4bb | ||
|
|
e8bdcb405d | ||
|
|
1cd743242f | ||
|
|
e8bac256e7 | ||
|
|
884c43c109 | ||
|
|
a213898c6d | ||
|
|
203e75c1f4 | ||
|
|
7e079e789e | ||
|
|
af7b3133a4 | ||
|
|
8a661932f2 | ||
|
|
06ad1d10d3 | ||
|
|
c38b8f980f | ||
|
|
81a989c56c | ||
|
|
1a182a1e33 | ||
|
|
31e2d4235a | ||
|
|
22cad6ee01 | ||
|
|
748562e71d | ||
|
|
d2a61b4a89 | ||
|
|
4de21e1157 | ||
|
|
20ba21c710 | ||
|
|
8c324706c5 | ||
|
|
a493111820 | ||
|
|
77b9abfa49 | ||
|
|
a00f57ad37 | ||
|
|
170b7d93ae | ||
|
|
6c75f5ae15 | ||
|
|
6fca4149f5 | ||
|
|
788a6dd4df | ||
|
|
537600730c | ||
|
|
a116743471 | ||
|
|
ece2c06aaf | ||
|
|
b0bd20f403 | ||
|
|
bfa741a9c9 | ||
|
|
6a80f3ed08 | ||
|
|
55eb953447 | ||
|
|
60ce4dff27 | ||
|
|
f1d2b8adab | ||
|
|
8b76ea0310 | ||
|
|
ac0c92e60a | ||
|
|
6a2f9bf2e7 | ||
|
|
d3e3c08b6c | ||
|
|
ed49b26c12 | ||
|
|
fab7d4eb2f | ||
|
|
5c72a85ad6 | ||
|
|
3dd17ddead | ||
|
|
cc04ff78c9 | ||
|
|
4a30cbf882 | ||
|
|
1a862bc318 | ||
|
|
c13d5c5368 | ||
|
|
d295e51ad6 | ||
|
|
6207e81d9c | ||
|
|
8fb65b8e97 | ||
|
|
3baec1794b | ||
|
|
9cb152ef23 | ||
|
|
8a0c3b34ea | ||
|
|
45275811f0 | ||
|
|
82bdcfa1b1 | ||
|
|
be2daab00c | ||
|
|
6e6ae77ccd | ||
|
|
b9cf7c7415 | ||
|
|
f47088fe37 | ||
|
|
53bd42b2f4 | ||
|
|
5090208a64 | ||
|
|
5ebb141dbf | ||
|
|
8944486597 | ||
|
|
606d91ebab | ||
|
|
3dc353dc73 | ||
|
|
919f00a6ee | ||
|
|
5e0ec6f442 | ||
|
|
d8ad89902b | ||
|
|
ba7c185d8a | ||
|
|
12feecd3d5 | ||
|
|
87a591a1ae | ||
|
|
71aaf4bb04 | ||
|
|
0f6b948ca5 | ||
|
|
6f9e2b3fc9 | ||
|
|
4117589405 | ||
|
|
707a3e0447 | ||
|
|
4dcc329e7e | ||
|
|
1937f0c509 | ||
|
|
ed7ec8b6f8 | ||
|
|
580a082b0f | ||
|
|
c1b930a6fd | ||
|
|
29e2e13d65 | ||
|
|
ed7e83e99b | ||
|
|
a7de9b9c9c | ||
|
|
908d75a86c | ||
|
|
9304931845 | ||
|
|
e39ac455cd | ||
|
|
cfb038429d | ||
|
|
e071233567 | ||
|
|
0dc0813bcd | ||
|
|
fc4451c59f | ||
|
|
6fc879ce39 | ||
|
|
0c39fc479d | ||
|
|
ae333f80a6 | ||
|
|
c39588807f | ||
|
|
db26a1276e | ||
|
|
1d00516d96 | ||
|
|
8bf8fdba9e | ||
|
|
1e61b749cf | ||
|
|
0eecb23724 | ||
|
|
548ea5935b | ||
|
|
cb5ce96103 | ||
|
|
e787fcee8e | ||
|
|
4727734c24 | ||
|
|
ecdfbdf64f | ||
|
|
e476758f73 | ||
|
|
06de56002d | ||
|
|
b17d1f13ff | ||
|
|
bd669f6cee | ||
|
|
5b341dbe54 | ||
|
|
500535b7a6 | ||
|
|
f3d01aeeeb | ||
|
|
70d6f431e3 | ||
|
|
79cdbc24cf | ||
|
|
a24e17535f | ||
|
|
55983f6b01 | ||
|
|
c6681c0a63 | ||
|
|
3730fa78c1 | ||
|
|
5c89ac6edc | ||
|
|
e9653069a2 | ||
|
|
892cff38bc | ||
|
|
7822de38fb | ||
|
|
a70ff264d2 | ||
|
|
a848730a80 | ||
|
|
aac09aa6ad | ||
|
|
d085fd895b | ||
|
|
e4616f7098 | ||
|
|
c9689ebad7 | ||
|
|
a4009e3bbe | ||
|
|
4e3ae6a941 | ||
|
|
3183ad982c | ||
|
|
7a21b8d814 | ||
|
|
7224114a4b | ||
|
|
2d000b8056 | ||
|
|
5bf25d1964 | ||
|
|
cdecb096a1 | ||
|
|
38ee085722 | ||
|
|
0c53142585 | ||
|
|
bb6669c362 | ||
|
|
2e2fe2944c | ||
|
|
d205d0bbc8 | ||
|
|
3b2a232a9d | ||
|
|
9419cd94c7 | ||
|
|
0dd6abab2c | ||
|
|
74bc75fb7c | ||
|
|
177896a021 | ||
|
|
5a776fc06e | ||
|
|
947fd23421 | ||
|
|
776e50f3c2 | ||
|
|
dc41a75615 | ||
|
|
354aa30bfb | ||
|
|
05ae30ce48 | ||
|
|
c8a30de493 | ||
|
|
ebe4a1bbcc | ||
|
|
8d98e1c659 | ||
|
|
0eb824c69c | ||
|
|
49a4b181bf | ||
|
|
fb9426dfb7 | ||
|
|
a711f8c456 | ||
|
|
2c602596d1 | ||
|
|
d3c4198eb9 | ||
|
|
20dc2654f5 | ||
|
|
b9086262b7 | ||
|
|
226a5df74a | ||
|
|
a5f3a5db25 | ||
|
|
70bd093a59 | ||
|
|
b788078590 | ||
|
|
6b57377111 | ||
|
|
2c0f37ff85 | ||
|
|
d3e02c8c5e | ||
|
|
240a30f1d7 | ||
|
|
29a285d37e | ||
|
|
7f9e68dc4a | ||
|
|
8f4dd17507 | ||
|
|
969026b88d | ||
|
|
95b5a038f2 | ||
|
|
c67fd96b0f | ||
|
|
b307de5719 | ||
|
|
1e4ffa3db1 | ||
|
|
3067865b02 | ||
|
|
62bae63bbf | ||
|
|
64516f2bdc | ||
|
|
0e7ed498e3 | ||
|
|
9a8c60e12e | ||
|
|
683ba4ef62 | ||
|
|
217fff8e06 | ||
|
|
ec41f28f3e | ||
|
|
456eefa656 | ||
|
|
7bc5e795f1 | ||
|
|
df70a1458c | ||
|
|
883c812b70 | ||
|
|
6bffa5d2d8 | ||
|
|
21cb6dca39 | ||
|
|
a1ce1d2fa0 | ||
|
|
c9f8f4b230 | ||
|
|
ce135b788f | ||
|
|
e8884e4341 | ||
|
|
d130f43705 | ||
|
|
c37d7fc95a | ||
|
|
c5566b7d06 | ||
|
|
7498304e44 | ||
|
|
7b62f7f702 | ||
|
|
a6e321c1d6 | ||
|
|
4a32ef2bb3 | ||
|
|
fe877ff79c | ||
|
|
619c282477 | ||
|
|
2cafeb1d33 | ||
|
|
1373964746 | ||
|
|
b5feaccc2a | ||
|
|
ac4776b2d0 | ||
|
|
dbc8d63318 | ||
|
|
b2e488e0a4 | ||
|
|
93f3560d19 | ||
|
|
ab75123320 | ||
|
|
a2e5d73bf5 | ||
|
|
ae0d4cbd82 | ||
|
|
f004e9f400 | ||
|
|
b14a35b788 | ||
|
|
33184102c9 | ||
|
|
820ed9cff0 | ||
|
|
2a25274fcf | ||
|
|
d6afb09663 | ||
|
|
4bde2f0080 | ||
|
|
077351bab3 | ||
|
|
e0141fab15 | ||
|
|
d257ecc6ab | ||
|
|
fdc7fc8326 | ||
|
|
2a56fccc85 | ||
|
|
403c7ff910 | ||
|
|
6b0cb815aa | ||
|
|
41474596d0 | ||
|
|
ec9bbd3424 | ||
|
|
5771f195b0 | ||
|
|
236d8322b0 | ||
|
|
16be9476cb | ||
|
|
cd2919400a | ||
|
|
6d818d4da0 | ||
|
|
25692f98fc | ||
|
|
96f538c2f3 | ||
|
|
e6fa6c76c9 | ||
|
|
58f49e421b | ||
|
|
9934109c84 | ||
|
|
aee3c09b57 | ||
|
|
b59fede88d | ||
|
|
95d10ee812 | ||
|
|
bb789872b2 | ||
|
|
7437df78b3 | ||
|
|
6d6cd7d668 | ||
|
|
7da259ec6a | ||
|
|
9e4b321886 | ||
|
|
ce90dae4b9 | ||
|
|
d0a3563c3e | ||
|
|
d18cd82d4b | ||
|
|
5c5e95218b | ||
|
|
f259634c38 | ||
|
|
1879c984f4 | ||
|
|
c4a080b0f4 | ||
|
|
64f84e7ca6 | ||
|
|
9be5a9bd0e | ||
|
|
8b7e16caf6 | ||
|
|
533dd7586f | ||
|
|
15e9f5486b | ||
|
|
8e532db6aa | ||
|
|
f625039190 | ||
|
|
c61d35c41e | ||
|
|
30223faa00 | ||
|
|
8e41ddc297 | ||
|
|
138260c788 | ||
|
|
29940abed6 | ||
|
|
ed469ad8c9 | ||
|
|
b12a3280e6 | ||
|
|
3177a57103 | ||
|
|
012bf2fec2 | ||
|
|
54016ad89b | ||
|
|
eab1c03a52 | ||
|
|
e53eb8a43c | ||
|
|
3f65defbf0 | ||
|
|
15568b37aa | ||
|
|
a116192b3d | ||
|
|
0d3a2b87ed | ||
|
|
0d7939588e |
No files matched your search
@@ -22,6 +22,7 @@ on:
|
||||
- "scripts/hashing.py"
|
||||
- "scripts/largefiles.py"
|
||||
- "scripts/list_platforms.py"
|
||||
- "scripts/manifestselect.py"
|
||||
- "scripts/nativemode.py"
|
||||
- "scripts/packextras.py"
|
||||
- "scripts/packpaths.py"
|
||||
@@ -84,7 +85,7 @@ jobs:
|
||||
|
||||
# mkdocs-material >= 9.7.5 caps mkdocs < 2; the upper bound keeps a major
|
||||
# theme release from changing the site without a deliberate bump here.
|
||||
- run: pip install pyyaml jsonschema==4.26.0 "mkdocs-material>=9.7.5,<10" "pymdown-extensions>=10.14"
|
||||
- run: pip install pyyaml "jsonschema[format-nongpl]==4.26.0" "mkdocs-material>=9.7.5,<10" "pymdown-extensions>=10.14"
|
||||
|
||||
- name: Validate data contracts
|
||||
run: python scripts/validate_schemas.py
|
||||
|
||||
@@ -112,7 +112,7 @@ jobs:
|
||||
python-version: "3.12"
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip install pyyaml jsonschema==4.26.0
|
||||
run: pip install pyyaml "jsonschema[format-nongpl]==4.26.0"
|
||||
|
||||
- name: Validate platform configs and emulator profiles
|
||||
run: python scripts/validate_schemas.py --source-only
|
||||
@@ -127,7 +127,7 @@ jobs:
|
||||
python-version: "3.12"
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip install pyyaml jsonschema==4.26.0
|
||||
run: pip install pyyaml "jsonschema[format-nongpl]==4.26.0"
|
||||
|
||||
# The exporter fidelity cases compare what we hand back against the
|
||||
# file each platform publishes, so they need those files. They skip
|
||||
|
||||
@@ -32,7 +32,7 @@ The script auto-detects your platform, downloads only missing files, and verifie
|
||||
|
||||
## Download BIOS packs
|
||||
|
||||
One pack per platform, and it holds everything the platform runs: its own BIOS list plus every file its emulator cores load. Pick your platform, download the ZIP, extract to the BIOS path. The installer above does the same file by file, and `--target` narrows it to one machine; for a region or a bare minimum, build your own pack below.
|
||||
One pack per platform, and it holds everything the platform runs: its own BIOS list plus every file its emulator cores load. Pick your platform, download the ZIP, extract to the BIOS path. The installer above does the same file by file. At a terminal it asks whether to install everything or to choose systems, cores and regions, and `--system`, `--core`, `--region` and `--target` make the same choice without questions; for a bare minimum, build your own pack below.
|
||||
Files is how many the pack holds once extracted, the figure a file manager shows for the folder. It differs from one platform to the next because a pack carries only what that platform's emulators load. The size is what the files occupy once extracted; the ZIP itself downloads smaller.
|
||||
|
||||
A pack over 2 GB comes in several parts, and every part is needed. How to open them depends on their name:
|
||||
@@ -44,20 +44,20 @@ Every release ships `SHA256SUMS.txt` and a detached signature of it, checkable a
|
||||
|
||||
| Platform | Files | Extracted size | Extract to | Download |
|
||||
|----------|------:|---------------:|-----------|----------|
|
||||
| Batocera | 1,839 | 4.0 GB | `/userdata/bios/` | [Download](../../releases/latest) |
|
||||
| BizHawk | 542 | 2.2 GB | `Firmware/` | [Download](../../releases/latest) |
|
||||
| EmuDeck | 624 | 3.2 GB | `~/Emulation/bios/` | [Download](../../releases/latest) |
|
||||
| Lakka | 4,525 | 5.5 GB | `/storage/system/` | [Download](../../releases/latest) |
|
||||
| MiSTer FPGA | 74 | 24 MB | `/media/fat/games/` | [Download](../../releases/latest) |
|
||||
| ROCKNIX | 1,741 | 5.3 GB | `/storage/roms/bios/` | [Download](../../releases/latest) |
|
||||
| Recalbox | 1,330 | 3.6 GB | `/recalbox/share/bios/` | [Download](../../releases/latest) |
|
||||
| RetroArch | 4,525 | 5.5 GB | `system/` | [Download](../../releases/latest) |
|
||||
| RetroBat | 1,466 | 4.4 GB | `bios/` | [Download](../../releases/latest) |
|
||||
| RetroDECK | 3,519 | 6.2 GB | `~/retrodeck/` | [Download](../../releases/latest) |
|
||||
| RetroPie * | 4,525 | 5.5 GB | `~/RetroPie/BIOS/` | [Download](../../releases/latest) |
|
||||
| RomM | 617 | 1.3 GB | `bios/{platform_slug}/` | [Download](../../releases/latest) |
|
||||
| Batocera | 12,810 | 7.5 GB | `/userdata/bios/` | [Download](../../releases/latest) |
|
||||
| BizHawk | 950 | 2.4 GB | `Firmware/` | [Download](../../releases/latest) |
|
||||
| EmuDeck | 620 | 3.2 GB | `~/Emulation/bios/` | [Download](../../releases/latest) |
|
||||
| Lakka | 8,504 | 6.0 GB | `/storage/system/` | [Download](../../releases/latest) |
|
||||
| MiSTer FPGA | 83 | 29 MB | `/media/fat/games/` | [Download](../../releases/latest) |
|
||||
| ROCKNIX | 5,804 | 6.1 GB | `/storage/roms/bios/` | [Download](../../releases/latest) |
|
||||
| Recalbox | 3,222 | 3.9 GB | `/recalbox/share/bios/` | [Download](../../releases/latest) |
|
||||
| RetroArch | 8,504 | 6.0 GB | `system/` | [Download](../../releases/latest) |
|
||||
| RetroBat | 12,399 | 7.9 GB | `bios/` | [Download](../../releases/latest) |
|
||||
| RetroDECK | 7,793 | 8.0 GB | `~/retrodeck/` | [Download](../../releases/latest) |
|
||||
| RetroPie * | 12,533 | 8.1 GB | `~/RetroPie/BIOS/` | [Download](../../releases/latest) |
|
||||
| RomM | 1,087 | 1.5 GB | `library/bios/` | [Download](../../releases/latest) |
|
||||
|
||||
The RetroDECK pack already contains its own `bios/` folder, so it extracts into `~/retrodeck/` rather than into the BIOS folder.
|
||||
The RetroDECK pack already carries its own `bios/` folder, so it extracts into `~/retrodeck/` rather than into the BIOS folder.
|
||||
|
||||
\* Archived: the configuration is kept and packs are still built, but upstream is no longer scraped on a schedule.
|
||||
|
||||
@@ -68,17 +68,17 @@ These are the files an emulator loads from disk instead of carrying inside itsel
|
||||
|
||||
Each file is checked the way your platform checks it. Most compare a checksum, the fingerprint of a file's contents, which catches a corrupt or unexpected copy. RetroArch, Lakka and RetroPie only look for the filename, because that is all their code does: the Coverage table says which applies to you. Independently of that, the collection records five fingerprints per file, and wherever an emulator's code states an expected size or hash, that value is read from its source and rechecked here.
|
||||
|
||||
- **392 files** the platforms' emulators load are still to be found, and 51 more cannot be sourced at all (per-user keys, user-filled slots, dumps nobody has made); both are named in the [gap analysis](https://abdess.github.io/retrobios/gaps/)
|
||||
- **393 files** the platforms' emulators load are still to be found, and 51 more cannot be sourced at all (per-user keys, user-filled slots, dumps nobody has made); both are named in the [gap analysis](https://abdess.github.io/retrobios/gaps/)
|
||||
- **12 platforms** supported with platform-specific verification
|
||||
- **506 emulators** profiled from source (RetroArch cores + standalone)
|
||||
- **546 systems** handled by those emulators (NES, SNES, PlayStation, Saturn, Dreamcast, ...)
|
||||
- **18,990 files in the collection**, each with its SHA1, MD5, SHA256, CRC32 and Adler-32 fingerprints: 5,252 system files, 2,810 arcade ROM sets, 10,928 game and engine data files. That is every platform and emulator together, so no pack holds them all: each carries what its own emulators load, counted in the download table
|
||||
- **562 of 5,252 system files** matched to dump-preservation catalogs (No-Intro, Redump, TOSEC); arcade sets and engine data fall outside what those catalogs index
|
||||
- **16672 MB** total collection size
|
||||
- **544 systems** handled by those emulators (NES, SNES, PlayStation, Saturn, Dreamcast, ...)
|
||||
- **19,005 files in the collection**, each with its SHA1, MD5, SHA256, CRC32 and Adler-32 fingerprints: 5,269 system files, 2,808 arcade ROM sets, 10,928 game and engine data files. That is every platform and emulator together, so no pack holds them all: each carries what its own emulators load, counted in the download table
|
||||
- **562 of 5,269 system files** matched to dump-preservation catalogs (No-Intro, Redump, TOSEC); arcade sets and engine data fall outside what those catalogs index
|
||||
- **16687 MB** total collection size
|
||||
|
||||
## Supported systems
|
||||
|
||||
NES, SNES, Nintendo 64, GameCube, Wii, Game Boy, Game Boy Advance, Nintendo DS, Nintendo 3DS, Switch, PlayStation, PlayStation 2, PlayStation 3, PSP, PS Vita, Mega Drive, Saturn, Dreamcast, Game Gear, Master System, Neo Geo, Atari 2600, Atari 7800, Atari Lynx, Atari ST, MSX, PC Engine, TurboGrafx-16, ColecoVision, Intellivision, Commodore 64, Amiga, ZX Spectrum, Arcade (MAME), and 512+ more.
|
||||
NES, SNES, Nintendo 64, GameCube, Wii, Game Boy, Game Boy Advance, Nintendo DS, Nintendo 3DS, Switch, PlayStation, PlayStation 2, PlayStation 3, PSP, PS Vita, Mega Drive, Saturn, Dreamcast, Game Gear, Master System, Neo Geo, Atari 2600, Atari 7800, Atari Lynx, Atari ST, MSX, PC Engine, TurboGrafx-16, ColecoVision, Intellivision, Commodore 64, Amiga, ZX Spectrum, Arcade (MAME), and 510+ more.
|
||||
|
||||
Full list with per-file details: **[https://abdess.github.io/retrobios/](https://abdess.github.io/retrobios/)**
|
||||
|
||||
@@ -86,18 +86,18 @@ Full list with per-file details: **[https://abdess.github.io/retrobios/](https:/
|
||||
|
||||
| Platform | On its BIOS list | Files its emulators load | Checked by |
|
||||
|----------|-----------------:|-------------------------:|------------|
|
||||
| Batocera | 353/353 | 12,307/12,738 | MD5 hash |
|
||||
| BizHawk | 118/118 | 649/650 | SHA1 hash |
|
||||
| EmuDeck | 168/168 | 381/383 | MD5 hash |
|
||||
| Lakka | 527/527 | 5,263/5,293 | file presence |
|
||||
| Batocera | 353/353 | 12,295/12,726 | MD5 hash |
|
||||
| BizHawk | 118/118 | 800/801 | SHA1 hash |
|
||||
| EmuDeck | 168/168 | 430/432 | MD5 hash |
|
||||
| Lakka | 526/526 | 5,260/5,290 | file presence |
|
||||
| MiSTer FPGA | 81/81 | - | MD5 hash |
|
||||
| ROCKNIX | 38/38 | 5,702/5,732 | MD5 hash |
|
||||
| Recalbox | 351/351 | 2,728/2,736 | MD5 hash |
|
||||
| RetroArch | 527/527 | 5,263/5,293 | file presence |
|
||||
| RetroBat | 348/348 | 11,749/12,179 | MD5 hash |
|
||||
| RetroDECK | 2,008/2,008 | 5,296/5,346 | MD5 hash |
|
||||
| RetroPie * | 527/527 | 9,182/9,324 | file presence |
|
||||
| RomM | 381/381 | 624/630 | MD5 hash |
|
||||
| ROCKNIX | 38/38 | 5,697/5,727 | MD5 hash |
|
||||
| Recalbox | 351/351 | 2,731/2,739 | MD5 hash |
|
||||
| RetroArch | 526/526 | 5,260/5,290 | file presence |
|
||||
| RetroBat | 348/348 | 11,885/12,316 | MD5 hash |
|
||||
| RetroDECK | 2,008/2,008 | 5,400/5,450 | MD5 hash |
|
||||
| RetroPie * | 526/526 | 9,181/9,323 | file presence |
|
||||
| RomM | 381/381 | 753/760 | MD5 hash |
|
||||
|
||||
Each fraction is what the pack has over what is needed, counting required and optional files alike since both ship. The first column is the BIOS list the platform publishes. The second counts files its emulators load that this list never mentions, found by reading their source code, and it is routinely several times larger. A short fraction means files are still missing, and they are named in the [gap analysis](https://abdess.github.io/retrobios/gaps/).
|
||||
That second number is a floor, not a ceiling: an emulator that accepts any file handed to it names none in its code, so nothing there can be counted.
|
||||
@@ -180,4 +180,4 @@ The scripts and tooling are released under the [MIT License](LICENSE).
|
||||
The BIOS and firmware files are not covered by that license: they are third-party system software, preserved and provided for personal backup, archival, and interoperability with emulation software. [NOTICE](NOTICE) sets out their status and how to ask for a file to be removed.
|
||||
The reasoning, and where it is weakest, is in the [FAQ](https://abdess.github.io/retrobios/wiki/faq/#is-this-legal).
|
||||
|
||||
*Auto-generated on 2026-10-06T03:31:49Z*
|
||||
*Auto-generated on 2026-10-10T10:40:24Z*
|
||||
File renamed without changes.
File renamed without changes.
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
Binary file not shown.
@@ -0,0 +1,150 @@
|
||||
# Default keys file bundled with Azahar.
|
||||
|
||||
# DISCLAIMER: The keys present in this document are used exclusively for interoperability
|
||||
# with the user's legally obtained software, as well as to perform cryptographic operations
|
||||
# on other 3DS-related data of non creative nature (data structures, numbers, etc).
|
||||
|
||||
:AES
|
||||
|
||||
# Generator constant
|
||||
|
||||
generatorConstant=1ff9e9aac5fe0408024591dc5d52768a
|
||||
|
||||
# OTP
|
||||
|
||||
otpKey=06457901d485a367ac4f2ad01c53cf74
|
||||
otpIV=ba4f599b0ae1122c80e13f6865c4fa49
|
||||
|
||||
# Movable
|
||||
|
||||
movableKeyY=a717802dea9776137ba16cd389141cf0
|
||||
movableCmacY=6e1e6bcb9ee098dd67ae771ad73b2cc9
|
||||
|
||||
# KeyX
|
||||
|
||||
slot0x18KeyX=82e9c9bebfb8bdb875ecc0a07d474374
|
||||
slot0x19KeyX=f5367fce73142e66ed13917914b7f2ef
|
||||
slot0x1AKeyX=eaba984c9cb766d4a3a7e974e2e713a3
|
||||
slot0x1BKeyX=45ad04953992c7c893724a9a7bce6182
|
||||
slot0x1CKeyX=c3830f8156e3543b723f0bc046741e8f
|
||||
slot0x1DKeyX=d6b38bc759417596d619d6029d13e0d8
|
||||
slot0x1EKeyX=bb623a97ddd793d757c4104b8d9fb969
|
||||
slot0x1FKeyX=4c28ec6effa3c23646078bba350c7995
|
||||
slot0x25KeyX=cee7d8ab30c00dae850ef5e382ac5af3
|
||||
slot0x2CKeyX=b98e95ceca3e4d171f76a94de934c053
|
||||
slot0x2DKeyX=b98e95ceca3e4d171f76a94de934c053
|
||||
slot0x2EKeyX=b98e95ceca3e4d171f76a94de934c053
|
||||
slot0x2FKeyX=b98e95ceca3e4d171f76a94de934c053
|
||||
slot0x30KeyX=c66e23128f289133f04cdb877a3749f2
|
||||
slot0x31KeyX=c66e23128f289133f04cdb877a3749f2
|
||||
slot0x32KeyX=c66e23128f289133f04cdb877a3749f2
|
||||
slot0x33KeyX=c66e23128f289133f04cdb877a3749f2
|
||||
slot0x34KeyX=6fbb01f872caf9c01834eec04065ee53
|
||||
slot0x35KeyX=6fbb01f872caf9c01834eec04065ee53
|
||||
slot0x36KeyX=6fbb01f872caf9c01834eec04065ee53
|
||||
slot0x37KeyX=6fbb01f872caf9c01834eec04065ee53
|
||||
slot0x38KeyX=b529221cddb5db5a1bf26eff2041e875
|
||||
slot0x39KeyX=b529221cddb5db5a1bf26eff2041e875
|
||||
slot0x3AKeyX=b529221cddb5db5a1bf26eff2041e875
|
||||
slot0x3BKeyX=b529221cddb5db5a1bf26eff2041e875
|
||||
slot0x3CKeyX=c35d6d15680b1ad4e912a341836121b3
|
||||
slot0x3DKeyX=617085719b7cfb316df4df2e8362c6e2
|
||||
slot0x3EKeyX=24baf628d06889bf282d0aa35dc55650
|
||||
slot0x3FKeyX=a31233280bb4daa7761393f78c424952
|
||||
|
||||
# KeyY
|
||||
|
||||
slot0x04KeyY=ff3388ecd21705bb339e967986dc4907
|
||||
slot0x05KeyY=54ef035f30260e0e9b5e004fc985dc22
|
||||
slot0x06KeyY=24b05aaaac0b099252030c02d1040317
|
||||
slot0x07KeyY=e9acc5abd4ad3f0660c83c8934882f3f
|
||||
slot0x08KeyY=4803050106d482dcd75f85c5aadff9b3
|
||||
slot0x09KeyY=af6346efdddfa9806e3c6b6855b78930
|
||||
slot0x0AKeyY=0a870a2c4b2fc3172e5f0335d8c5085d
|
||||
slot0x0BKeyY=fda0152fcd6ddb3133b887ba727c0ada
|
||||
slot0x24KeyY=74ca074884f4228deb2a1ca72d287762
|
||||
slot0x2EKeyY=7462553f9e5a7904b8647cca736da1f5
|
||||
slot0x2FKeyY=c369baa21e188a88a9aa94e5506a9f16
|
||||
slot0x31KeyY=7462553f9e5a7904b8647cca736da1f5
|
||||
|
||||
# DLP/NFC KeyY (slot 0x39)
|
||||
|
||||
dlpKeyY=7462553f9e5a7904b8647cca736da1f5
|
||||
nfcKeyY=ed7858a8bba7eed7fc970c5979bc0af2
|
||||
|
||||
# Ticket Common KeyY (slot 0x3D)
|
||||
|
||||
common0=d07b337f9ca4385932a2e25723232eb9
|
||||
common1=0c767230f0998f1c46828202faacbe4c
|
||||
common2=c475cb3ab8c788bb575e12a10907b8a4
|
||||
common3=e486eee3d0c09c902f6686d4c06f649f
|
||||
common4=ed31ba9c04b067506c4497a35b7804fc
|
||||
common5=5e66998ab4e8931606850fd7a16dd755
|
||||
|
||||
# KeyN
|
||||
|
||||
slot0x0CKeyN=e7c9ff9d4f5b6f4dc5e2f50e856f0ab2
|
||||
slot0x0DKeyN=e7c9ff9d4f5b6f4dc5e2f50e856f0ab2
|
||||
slot0x0EKeyN=e7c9ff9d4f5b6f4dc5e2f50e856f0ab2
|
||||
slot0x0FKeyN=e7c9ff9d4f5b6f4dc5e2f50e856f0ab2
|
||||
slot0x10KeyN=285713db53051c089bdfb3b6aa638fda
|
||||
slot0x11KeyN=285713db53051c089bdfb3b6aa638fda
|
||||
slot0x12KeyN=285713db53051c089bdfb3b6aa638fda
|
||||
slot0x13KeyN=285713db53051c089bdfb3b6aa638fda
|
||||
slot0x14KeyN=2af3bbd32cd59c06fd4abe58651987ad
|
||||
slot0x15KeyN=be2836751c734ba8da18e1887f888bd6
|
||||
slot0x16KeyN=e3a18eb1c1dc8a3d27c3967e6e362de3
|
||||
slot0x17KeyN=d0294cfb7be0b4fb7324d986fd3993bb
|
||||
slot0x20KeyN=7c92f6272551c4614db0b345edd2e869
|
||||
slot0x21KeyN=7c92f6272551c4614db0b345edd2e869
|
||||
slot0x22KeyN=7c92f6272551c4614db0b345edd2e869
|
||||
slot0x23KeyN=7c92f6272551c4614db0b345edd2e869
|
||||
slot0x26KeyN=bbe8b4e09d0937816b234d8eb3cd3ca2
|
||||
slot0x27KeyN=bbe8b4e09d0937816b234d8eb3cd3ca2
|
||||
slot0x28KeyN=bbe8b4e09d0937816b234d8eb3cd3ca2
|
||||
slot0x29KeyN=5218127e133ce3b85bb8c018ce76b7e2
|
||||
slot0x2AKeyN=4a4264cf32e84170666f29ac88ef3f7e
|
||||
slot0x2BKeyN=51af6c4c8b13da3228bd29b371cf84e1
|
||||
slot0x2DKeyN=3ed6f5cf2cc37c54655000b7c8b52e0d
|
||||
slot0x32KeyN=b87e64018b190ffe048a8124c6454196
|
||||
slot0x36KeyN=28c0d59b736657bcdf50ff174979958a
|
||||
slot0x38KeyN=6e78a3be9bddda09bfd569483f24fce0
|
||||
|
||||
# NFC Secrets
|
||||
|
||||
nfcSecret0Phrase=756e666978656420696e666f7300
|
||||
nfcSecret0Seed=db4b9e3f45278f397eff9b4fb993
|
||||
nfcSecret0HmacKey=1d164b375b72a55728b91d64b6a3c205
|
||||
nfcSecret1Phrase=6c6f636b65642073656372657400
|
||||
nfcSecret1Seed=fdc8a07694b89e4c47d37de8ce5c74c1
|
||||
nfcSecret1HmacKey=7f752d2873a20017fef85c0575904b6d
|
||||
nfcIv=4fd39a6e79fceaad99904db8ee38e9db
|
||||
|
||||
:RSA
|
||||
|
||||
# Slots
|
||||
|
||||
slot0x00X=c034829a11c7116a08633e89a78ca0919779da8cc967077afc60e1786247e5068b9a76588a15f0304b3887b5147c259f7a2e6e480aceb0be35f0c5885ea2d8838fd6aafe45ac58fc08d4d0569d3cd3b09f9c6985fcd5c7152ebc54a885d6b11129b503611510bbfa0b07552d5800ecf636ef90d101cd475a3f4274e0c1e828b2bb516c8cd80f95f5db6a239083435509c0190e5d218b19c3bebc2a3aa73cebf53e7e4998d9be01a440f3f1c0f3157ba6f65a7be9e059d4d26f9de997141979df2ceaa175d91db2079051978f805d6f97741b6db4e96e3305611392b4b7ca76f0b45387c40d5879cde6b1509062216cb9ac21f3510ccd6df4da8f581ff86d2f31
|
||||
slot0x00M=c12e4877ff0fedb98afa6dbe5d7ac86489a4e0901dba22d2e7ba945c830126ca71976f284a5e57e386b4778fbb78e3f1750ecd8b6ed3984f3cd363f801dd9ed5271ea859f49ff4da02d88445efba774b3a46279167cb905300d0903ecb71772b78cfe918921e2bef699f87d9cbef273fbc0e320d177e925021e869bb827f227f17da206ae9ce5de262566c4fab0be86866f7218fd48c248c0d8cbdeb3adbc423a6cd1b572f82c0172d23e32b1b4f0c30b04c20749126851dba39b31a2918c23f91034969e601c0a1099742e8fd31cfe4a02cd9e6bd7b646c52465567c7463b2a9e7e9fa53a0e260d4daee68091ee7adfa1c1491538276161e1c10293f4592a33
|
||||
|
||||
# Ticket wrap
|
||||
|
||||
ticketWrapExp=010001
|
||||
ticketWrapMod=d24cb2e48feaf004d4bb08f8f3defcbb0c934a146b15366c9ddc1eb1649b9feb964b569c2283954d3d2b8a1ab21dc1159c2e6cb4cdd4c0bb96dbad4f02d31f45573892af855273aca20c459b9bd3126425c05d766bfd2fad87986c08416aea8d4266cd9d4ffc3f20f7b5672b686793141edde1b11689aca2f6469c9b0ea4577150235185ed4e7e4f2f9036c165a20c73e160c644a47303d2ed9bb0ba2fc90989bd87eb4563d8f7a61d889a7807b155e7f2107d048d828fcba23090839341385614fde4fabe84f2f0532da34750f32ab11fbe084c0083edbf0b50e96a49dd9d1e293e2249ee954db8afd139461ead4f11a2d06836446473140ed3867e4e5ead3b
|
||||
|
||||
# Secure info
|
||||
|
||||
secureInfoExp=010001
|
||||
secureInfoMod=b1791a6d1eadd429ba89a1cd433630174bc68730c5e70560197b50d8c4546710a6e8a101bc2ceb0376f005c70ce0b6d6dffd26df33468bdbb2391e7ec01aa1a5a091e807da378676ba390a25429d5961e161d40485a74bb20186beb11a3572c1c2ea28ab7a1015325c9e712b7df965eae6c6fb8baed76c2a94a6c5ece40eaf987e06f20f884fd20635a476e9f70aba5c5b1461520054044593e468270435355aad5809d1193f5a0728d6db6b551f77945dc3be6fae5bcc0863e476dfa29b36ea853403e616eaa905e07f3a3e7e7077cf166a61d17e4d354c744485d4f67b0eee32f1c2d5790248e9621a33baa39b02b02294057ff6b43888e301e55a237c9c0b
|
||||
|
||||
# Local friend code seed
|
||||
lfcsExp=010001
|
||||
lfcsMod=a3759a3546cfa7fe30ec55a1b64e08e9449d0c72fcd191fd610a288975bce6a9b21556e9c7670255adfc3cee5edb78259a4b221b71e7e9515b2a6793b21868ce5e5e12ffd86806af318d56f9549902346a17e7837496a05aaf6efde6bed686aafd7a65a8ebe11c983a15c17ab540c23d9b7cfdd463c5e6deb77824c629473335b2e937e054ee9fa53dd793ca3eae4db60f5a11e70cdfba03b21e2b31b65906db5f940bf76e74cad4ab55d940058f10fe06050c81bb422190ba4f5c5382e1e10fbc949f60695d1303aae2e0c108424c200b9baa552d55276e24e5d60457588ff75f0cec819f6d2d28f31055f83b7662d4e4a69369b5da6b4023af07eb9cbfa9c9
|
||||
|
||||
:ECC
|
||||
|
||||
# Root public
|
||||
|
||||
rootPublicXY=004e3bb74d5d959e68ce900434fe9e4a3f094a33771fa7c0e4b023264d98014ca1fc799d3fa52171d5f9bd5b1777ec0fef7a38d1669bbf830325843a
|
||||
|
||||
# Padding......
|
||||
@@ -0,0 +1,154 @@
|
||||
# Default keys file bundled with Azahar.
|
||||
|
||||
# DISCLAIMER: The keys present in this document are used exclusively for interoperability
|
||||
# with the user's legally obtained software, as well as to perform cryptographic operations
|
||||
# on other 3DS-related data of non creative nature (data structures, numbers, etc).
|
||||
|
||||
:AES
|
||||
|
||||
# Generator constant
|
||||
|
||||
generatorConstant=1ff9e9aac5fe0408024591dc5d52768a
|
||||
|
||||
# OTP
|
||||
|
||||
otpKey=06457901d485a367ac4f2ad01c53cf74
|
||||
otpIV=ba4f599b0ae1122c80e13f6865c4fa49
|
||||
|
||||
# Movable
|
||||
|
||||
movableKeyY=a717802dea9776137ba16cd389141cf0
|
||||
movableCmacY=6e1e6bcb9ee098dd67ae771ad73b2cc9
|
||||
|
||||
# KeyX
|
||||
|
||||
slot0x18KeyX=82e9c9bebfb8bdb875ecc0a07d474374
|
||||
slot0x19KeyX=f5367fce73142e66ed13917914b7f2ef
|
||||
slot0x1AKeyX=eaba984c9cb766d4a3a7e974e2e713a3
|
||||
slot0x1BKeyX=45ad04953992c7c893724a9a7bce6182
|
||||
slot0x1CKeyX=c3830f8156e3543b723f0bc046741e8f
|
||||
slot0x1DKeyX=d6b38bc759417596d619d6029d13e0d8
|
||||
slot0x1EKeyX=bb623a97ddd793d757c4104b8d9fb969
|
||||
slot0x1FKeyX=4c28ec6effa3c23646078bba350c7995
|
||||
slot0x25KeyX=cee7d8ab30c00dae850ef5e382ac5af3
|
||||
slot0x2CKeyX=b98e95ceca3e4d171f76a94de934c053
|
||||
slot0x2DKeyX=b98e95ceca3e4d171f76a94de934c053
|
||||
slot0x2EKeyX=b98e95ceca3e4d171f76a94de934c053
|
||||
slot0x2FKeyX=b98e95ceca3e4d171f76a94de934c053
|
||||
slot0x30KeyX=c66e23128f289133f04cdb877a3749f2
|
||||
slot0x31KeyX=c66e23128f289133f04cdb877a3749f2
|
||||
slot0x32KeyX=c66e23128f289133f04cdb877a3749f2
|
||||
slot0x33KeyX=c66e23128f289133f04cdb877a3749f2
|
||||
slot0x34KeyX=6fbb01f872caf9c01834eec04065ee53
|
||||
slot0x35KeyX=6fbb01f872caf9c01834eec04065ee53
|
||||
slot0x36KeyX=6fbb01f872caf9c01834eec04065ee53
|
||||
slot0x37KeyX=6fbb01f872caf9c01834eec04065ee53
|
||||
slot0x38KeyX=b529221cddb5db5a1bf26eff2041e875
|
||||
slot0x39KeyX=b529221cddb5db5a1bf26eff2041e875
|
||||
slot0x3AKeyX=b529221cddb5db5a1bf26eff2041e875
|
||||
slot0x3BKeyX=b529221cddb5db5a1bf26eff2041e875
|
||||
slot0x3CKeyX=c35d6d15680b1ad4e912a341836121b3
|
||||
slot0x3DKeyX=617085719b7cfb316df4df2e8362c6e2
|
||||
slot0x3EKeyX=24baf628d06889bf282d0aa35dc55650
|
||||
slot0x3FKeyX=a31233280bb4daa7761393f78c424952
|
||||
|
||||
# KeyY
|
||||
|
||||
slot0x04KeyY=ff3388ecd21705bb339e967986dc4907
|
||||
slot0x05KeyY=54ef035f30260e0e9b5e004fc985dc22
|
||||
slot0x06KeyY=24b05aaaac0b099252030c02d1040317
|
||||
slot0x07KeyY=e9acc5abd4ad3f0660c83c8934882f3f
|
||||
slot0x08KeyY=4803050106d482dcd75f85c5aadff9b3
|
||||
slot0x09KeyY=af6346efdddfa9806e3c6b6855b78930
|
||||
slot0x0AKeyY=0a870a2c4b2fc3172e5f0335d8c5085d
|
||||
slot0x0BKeyY=fda0152fcd6ddb3133b887ba727c0ada
|
||||
slot0x24KeyY=74ca074884f4228deb2a1ca72d287762
|
||||
slot0x2EKeyY=7462553f9e5a7904b8647cca736da1f5
|
||||
slot0x2FKeyY=c369baa21e188a88a9aa94e5506a9f16
|
||||
slot0x31KeyY=7462553f9e5a7904b8647cca736da1f5
|
||||
|
||||
# DLP/NFC KeyY (slot 0x39)
|
||||
|
||||
dlpKeyY=7462553f9e5a7904b8647cca736da1f5
|
||||
nfcKeyY=ed7858a8bba7eed7fc970c5979bc0af2
|
||||
|
||||
# Ticket Common KeyY (slot 0x3D)
|
||||
|
||||
common0=d07b337f9ca4385932a2e25723232eb9
|
||||
common1=0c767230f0998f1c46828202faacbe4c
|
||||
common2=c475cb3ab8c788bb575e12a10907b8a4
|
||||
common3=e486eee3d0c09c902f6686d4c06f649f
|
||||
common4=ed31ba9c04b067506c4497a35b7804fc
|
||||
common5=5e66998ab4e8931606850fd7a16dd755
|
||||
|
||||
# KeyN
|
||||
|
||||
slot0x0CKeyN=e7c9ff9d4f5b6f4dc5e2f50e856f0ab2
|
||||
slot0x0DKeyN=e7c9ff9d4f5b6f4dc5e2f50e856f0ab2
|
||||
slot0x0EKeyN=e7c9ff9d4f5b6f4dc5e2f50e856f0ab2
|
||||
slot0x0FKeyN=e7c9ff9d4f5b6f4dc5e2f50e856f0ab2
|
||||
slot0x10KeyN=285713db53051c089bdfb3b6aa638fda
|
||||
slot0x11KeyN=285713db53051c089bdfb3b6aa638fda
|
||||
slot0x12KeyN=285713db53051c089bdfb3b6aa638fda
|
||||
slot0x13KeyN=285713db53051c089bdfb3b6aa638fda
|
||||
slot0x14KeyN=2af3bbd32cd59c06fd4abe58651987ad
|
||||
slot0x15KeyN=be2836751c734ba8da18e1887f888bd6
|
||||
slot0x16KeyN=e3a18eb1c1dc8a3d27c3967e6e362de3
|
||||
slot0x17KeyN=d0294cfb7be0b4fb7324d986fd3993bb
|
||||
slot0x20KeyN=7c92f6272551c4614db0b345edd2e869
|
||||
slot0x21KeyN=7c92f6272551c4614db0b345edd2e869
|
||||
slot0x22KeyN=7c92f6272551c4614db0b345edd2e869
|
||||
slot0x23KeyN=7c92f6272551c4614db0b345edd2e869
|
||||
slot0x26KeyN=bbe8b4e09d0937816b234d8eb3cd3ca2
|
||||
slot0x27KeyN=bbe8b4e09d0937816b234d8eb3cd3ca2
|
||||
slot0x28KeyN=bbe8b4e09d0937816b234d8eb3cd3ca2
|
||||
slot0x29KeyN=5218127e133ce3b85bb8c018ce76b7e2
|
||||
slot0x2AKeyN=4a4264cf32e84170666f29ac88ef3f7e
|
||||
slot0x2BKeyN=51af6c4c8b13da3228bd29b371cf84e1
|
||||
slot0x2DKeyN=3ed6f5cf2cc37c54655000b7c8b52e0d
|
||||
slot0x32KeyN=b87e64018b190ffe048a8124c6454196
|
||||
slot0x36KeyN=28c0d59b736657bcdf50ff174979958a
|
||||
slot0x38KeyN=6e78a3be9bddda09bfd569483f24fce0
|
||||
|
||||
# NFC Secrets
|
||||
|
||||
nfcSecret0Phrase=756e666978656420696e666f7300
|
||||
nfcSecret0Seed=db4b9e3f45278f397eff9b4fb993
|
||||
nfcSecret0HmacKey=1d164b375b72a55728b91d64b6a3c205
|
||||
nfcSecret1Phrase=6c6f636b65642073656372657400
|
||||
nfcSecret1Seed=fdc8a07694b89e4c47d37de8ce5c74c1
|
||||
nfcSecret1HmacKey=7f752d2873a20017fef85c0575904b6d
|
||||
nfcIv=4fd39a6e79fceaad99904db8ee38e9db
|
||||
|
||||
# DLP Checksum
|
||||
|
||||
dlpChecksumModIv=fe449ac13ae3b4095011d18944107833
|
||||
|
||||
:RSA
|
||||
|
||||
# Slots
|
||||
|
||||
slot0x00X=c034829a11c7116a08633e89a78ca0919779da8cc967077afc60e1786247e5068b9a76588a15f0304b3887b5147c259f7a2e6e480aceb0be35f0c5885ea2d8838fd6aafe45ac58fc08d4d0569d3cd3b09f9c6985fcd5c7152ebc54a885d6b11129b503611510bbfa0b07552d5800ecf636ef90d101cd475a3f4274e0c1e828b2bb516c8cd80f95f5db6a239083435509c0190e5d218b19c3bebc2a3aa73cebf53e7e4998d9be01a440f3f1c0f3157ba6f65a7be9e059d4d26f9de997141979df2ceaa175d91db2079051978f805d6f97741b6db4e96e3305611392b4b7ca76f0b45387c40d5879cde6b1509062216cb9ac21f3510ccd6df4da8f581ff86d2f31
|
||||
slot0x00M=c12e4877ff0fedb98afa6dbe5d7ac86489a4e0901dba22d2e7ba945c830126ca71976f284a5e57e386b4778fbb78e3f1750ecd8b6ed3984f3cd363f801dd9ed5271ea859f49ff4da02d88445efba774b3a46279167cb905300d0903ecb71772b78cfe918921e2bef699f87d9cbef273fbc0e320d177e925021e869bb827f227f17da206ae9ce5de262566c4fab0be86866f7218fd48c248c0d8cbdeb3adbc423a6cd1b572f82c0172d23e32b1b4f0c30b04c20749126851dba39b31a2918c23f91034969e601c0a1099742e8fd31cfe4a02cd9e6bd7b646c52465567c7463b2a9e7e9fa53a0e260d4daee68091ee7adfa1c1491538276161e1c10293f4592a33
|
||||
|
||||
# Ticket wrap
|
||||
|
||||
ticketWrapExp=010001
|
||||
ticketWrapMod=d24cb2e48feaf004d4bb08f8f3defcbb0c934a146b15366c9ddc1eb1649b9feb964b569c2283954d3d2b8a1ab21dc1159c2e6cb4cdd4c0bb96dbad4f02d31f45573892af855273aca20c459b9bd3126425c05d766bfd2fad87986c08416aea8d4266cd9d4ffc3f20f7b5672b686793141edde1b11689aca2f6469c9b0ea4577150235185ed4e7e4f2f9036c165a20c73e160c644a47303d2ed9bb0ba2fc90989bd87eb4563d8f7a61d889a7807b155e7f2107d048d828fcba23090839341385614fde4fabe84f2f0532da34750f32ab11fbe084c0083edbf0b50e96a49dd9d1e293e2249ee954db8afd139461ead4f11a2d06836446473140ed3867e4e5ead3b
|
||||
|
||||
# Secure info
|
||||
|
||||
secureInfoExp=010001
|
||||
secureInfoMod=b1791a6d1eadd429ba89a1cd433630174bc68730c5e70560197b50d8c4546710a6e8a101bc2ceb0376f005c70ce0b6d6dffd26df33468bdbb2391e7ec01aa1a5a091e807da378676ba390a25429d5961e161d40485a74bb20186beb11a3572c1c2ea28ab7a1015325c9e712b7df965eae6c6fb8baed76c2a94a6c5ece40eaf987e06f20f884fd20635a476e9f70aba5c5b1461520054044593e468270435355aad5809d1193f5a0728d6db6b551f77945dc3be6fae5bcc0863e476dfa29b36ea853403e616eaa905e07f3a3e7e7077cf166a61d17e4d354c744485d4f67b0eee32f1c2d5790248e9621a33baa39b02b02294057ff6b43888e301e55a237c9c0b
|
||||
|
||||
# Local friend code seed
|
||||
lfcsExp=010001
|
||||
lfcsMod=a3759a3546cfa7fe30ec55a1b64e08e9449d0c72fcd191fd610a288975bce6a9b21556e9c7670255adfc3cee5edb78259a4b221b71e7e9515b2a6793b21868ce5e5e12ffd86806af318d56f9549902346a17e7837496a05aaf6efde6bed686aafd7a65a8ebe11c983a15c17ab540c23d9b7cfdd463c5e6deb77824c629473335b2e937e054ee9fa53dd793ca3eae4db60f5a11e70cdfba03b21e2b31b65906db5f940bf76e74cad4ab55d940058f10fe06050c81bb422190ba4f5c5382e1e10fbc949f60695d1303aae2e0c108424c200b9baa552d55276e24e5d60457588ff75f0cec819f6d2d28f31055f83b7662d4e4a69369b5da6b4023af07eb9cbfa9c9
|
||||
|
||||
:ECC
|
||||
|
||||
# Root public
|
||||
|
||||
rootPublicXY=004e3bb74d5d959e68ce900434fe9e4a3f094a33771fa7c0e4b023264d98014ca1fc799d3fa52171d5f9bd5b1777ec0fef7a38d1669bbf830325843a
|
||||
|
||||
# Padding...................
|
||||
File diff suppressed because it is too large.
Load diff
File renamed without changes.
Binary file not shown.
@@ -0,0 +1,498 @@
|
||||
// SPDX-FileCopyrightText: 2002-2025 PCSX2 Dev Team
|
||||
// SPDX-License-Identifier: GPL-3.0+
|
||||
|
||||
#ifndef FXAA_HLSL
|
||||
#define FXAA_HLSL 0
|
||||
#endif
|
||||
#ifndef FXAA_GLSL_130
|
||||
#define FXAA_GLSL_130 0
|
||||
#endif
|
||||
#ifndef FXAA_GLSL_VK
|
||||
#define FXAA_GLSL_VK 0
|
||||
#endif
|
||||
|
||||
#define UHQ_FXAA 1 //High Quality Fast Approximate Anti Aliasing. Adapted for GS from Timothy Lottes FXAA 3.11.
|
||||
#define FxaaSubpixMax 0.0 //[0.00 to 1.00] Amount of subpixel aliasing removal. 0.00: Edge only antialiasing (no blurring)
|
||||
#define FxaaEarlyExit 1 //[0 or 1] Use Fxaa early exit pathing. When disabled, the entire scene is antialiased(FSAA). 0 is off, 1 is on.
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
[GLOBALS|FUNCTIONS]
|
||||
------------------------------------------------------------------------------*/
|
||||
#if (FXAA_GLSL_130 == 1)
|
||||
|
||||
in vec2 PSin_t;
|
||||
|
||||
layout(location = 0) out vec4 SV_Target0;
|
||||
layout(binding = 0) uniform sampler2D TextureSampler;
|
||||
|
||||
#elif (FXAA_GLSL_VK == 1)
|
||||
|
||||
layout(location = 0) in vec2 PSin_t;
|
||||
layout(location = 0) out vec4 SV_Target0;
|
||||
layout(set = 0, binding = 0) uniform sampler2D TextureSampler;
|
||||
|
||||
#elif (FXAA_HLSL == 1)
|
||||
Texture2D Texture : register(t0);
|
||||
SamplerState TextureSampler : register(s0);
|
||||
|
||||
struct VS_INPUT
|
||||
{
|
||||
float4 p : POSITION;
|
||||
float2 t : TEXCOORD0;
|
||||
};
|
||||
|
||||
struct VS_OUTPUT
|
||||
{
|
||||
float4 p : SV_Position;
|
||||
float2 t : TEXCOORD0;
|
||||
};
|
||||
|
||||
struct PS_OUTPUT
|
||||
{
|
||||
float4 c : SV_Target0;
|
||||
};
|
||||
|
||||
#elif defined(__METAL_VERSION__)
|
||||
static constexpr sampler MAIN_SAMPLER(coord::normalized, address::clamp_to_edge, filter::linear);
|
||||
#endif
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
[FXAA CODE SECTION]
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
#if (FXAA_HLSL == 1)
|
||||
struct FxaaTex { SamplerState smpl; Texture2D tex; };
|
||||
#define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)
|
||||
#define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)
|
||||
#define FxaaDiscard clip(-1)
|
||||
#define FxaaSat(x) saturate(x)
|
||||
|
||||
#elif (FXAA_GLSL_130 == 1 || FXAA_GLSL_VK == 1)
|
||||
#define int2 ivec2
|
||||
#define float2 vec2
|
||||
#define float3 vec3
|
||||
#define float4 vec4
|
||||
#define FxaaDiscard discard
|
||||
#define FxaaSat(x) clamp(x, 0.0, 1.0)
|
||||
#define FxaaTex sampler2D
|
||||
#define FxaaTexTop(t, p) textureLod(t, p, 0.0)
|
||||
#define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o)
|
||||
|
||||
#elif defined(__METAL_VERSION__)
|
||||
#define FxaaTex texture2d<float>
|
||||
#define FxaaTexTop(t, p) t.sample(MAIN_SAMPLER, p)
|
||||
#define FxaaTexOff(t, p, o, r) t.sample(MAIN_SAMPLER, p, o)
|
||||
#define FxaaDiscard discard_fragment()
|
||||
#define FxaaSat(x) saturate(x)
|
||||
#endif
|
||||
|
||||
#define FxaaEdgeThreshold 0.063
|
||||
#define FxaaEdgeThresholdMin 0.00
|
||||
#define FXAA_QUALITY_P0 1.0
|
||||
#define FXAA_QUALITY_P1 1.5
|
||||
#define FXAA_QUALITY_P2 2.0
|
||||
#define FXAA_QUALITY_P3 2.0
|
||||
#define FXAA_QUALITY_P4 2.0
|
||||
#define FXAA_QUALITY_P5 2.0
|
||||
#define FXAA_QUALITY_P6 2.0
|
||||
#define FXAA_QUALITY_P7 2.0
|
||||
#define FXAA_QUALITY_P8 2.0
|
||||
#define FXAA_QUALITY_P9 2.0
|
||||
#define FXAA_QUALITY_P10 4.0
|
||||
#define FXAA_QUALITY_P11 8.0
|
||||
#define FXAA_QUALITY_P12 8.0
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
[GAMMA PREPASS CODE SECTION]
|
||||
------------------------------------------------------------------------------*/
|
||||
float RGBLuminance(float3 color)
|
||||
{
|
||||
const float3 lumCoeff = float3(0.2126729, 0.7151522, 0.0721750);
|
||||
return dot(color.rgb, lumCoeff);
|
||||
}
|
||||
|
||||
float3 RGBGammaToLinear(float3 color, float gamma)
|
||||
{
|
||||
color = FxaaSat(color);
|
||||
color.r = (color.r <= 0.0404482362771082) ?
|
||||
color.r / 12.92 : pow((color.r + 0.055) / 1.055, gamma);
|
||||
color.g = (color.g <= 0.0404482362771082) ?
|
||||
color.g / 12.92 : pow((color.g + 0.055) / 1.055, gamma);
|
||||
color.b = (color.b <= 0.0404482362771082) ?
|
||||
color.b / 12.92 : pow((color.b + 0.055) / 1.055, gamma);
|
||||
|
||||
return color;
|
||||
}
|
||||
|
||||
float3 LinearToRGBGamma(float3 color, float gamma)
|
||||
{
|
||||
color = FxaaSat(color);
|
||||
color.r = (color.r <= 0.00313066844250063) ?
|
||||
color.r * 12.92 : 1.055 * pow(color.r, 1.0 / gamma) - 0.055;
|
||||
color.g = (color.g <= 0.00313066844250063) ?
|
||||
color.g * 12.92 : 1.055 * pow(color.g, 1.0 / gamma) - 0.055;
|
||||
color.b = (color.b <= 0.00313066844250063) ?
|
||||
color.b * 12.92 : 1.055 * pow(color.b, 1.0 / gamma) - 0.055;
|
||||
|
||||
return color;
|
||||
}
|
||||
|
||||
float4 PreGammaPass(float4 color)
|
||||
{
|
||||
const float GammaConst = 2.233;
|
||||
color.rgb = RGBGammaToLinear(color.rgb, GammaConst);
|
||||
color.rgb = LinearToRGBGamma(color.rgb, GammaConst);
|
||||
color.a = RGBLuminance(color.rgb);
|
||||
|
||||
return color;
|
||||
}
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
[FXAA CODE SECTION]
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
float FxaaLuma(float4 rgba)
|
||||
{
|
||||
rgba.w = RGBLuminance(rgba.xyz);
|
||||
return rgba.w;
|
||||
}
|
||||
|
||||
float4 FxaaPixelShader(float2 pos, FxaaTex tex, float2 fxaaRcpFrame, float fxaaSubpix, float fxaaEdgeThreshold, float fxaaEdgeThresholdMin)
|
||||
{
|
||||
float2 posM = pos;
|
||||
float4 rgbyM = FxaaTexTop(tex, posM);
|
||||
rgbyM.w = RGBLuminance(rgbyM.xyz);
|
||||
#define lumaM rgbyM.w
|
||||
|
||||
float lumaS = FxaaLuma(FxaaTexOff(tex, posM, int2( 0, 1), fxaaRcpFrame.xy));
|
||||
float lumaE = FxaaLuma(FxaaTexOff(tex, posM, int2( 1, 0), fxaaRcpFrame.xy));
|
||||
float lumaN = FxaaLuma(FxaaTexOff(tex, posM, int2( 0,-1), fxaaRcpFrame.xy));
|
||||
float lumaW = FxaaLuma(FxaaTexOff(tex, posM, int2(-1, 0), fxaaRcpFrame.xy));
|
||||
|
||||
float maxSM = max(lumaS, lumaM);
|
||||
float minSM = min(lumaS, lumaM);
|
||||
float maxESM = max(lumaE, maxSM);
|
||||
float minESM = min(lumaE, minSM);
|
||||
float maxWN = max(lumaN, lumaW);
|
||||
float minWN = min(lumaN, lumaW);
|
||||
|
||||
float rangeMax = max(maxWN, maxESM);
|
||||
float rangeMin = min(minWN, minESM);
|
||||
float range = rangeMax - rangeMin;
|
||||
float rangeMaxScaled = rangeMax * fxaaEdgeThreshold;
|
||||
float rangeMaxClamped = max(fxaaEdgeThresholdMin, rangeMaxScaled);
|
||||
|
||||
#if (FxaaEarlyExit == 1)
|
||||
// Potential optimization, early exit.
|
||||
if (range < rangeMaxClamped)
|
||||
return rgbyM;
|
||||
#endif
|
||||
|
||||
float lumaNW = FxaaLuma(FxaaTexOff(tex, posM, int2(-1,-1), fxaaRcpFrame.xy));
|
||||
float lumaSE = FxaaLuma(FxaaTexOff(tex, posM, int2( 1, 1), fxaaRcpFrame.xy));
|
||||
float lumaNE = FxaaLuma(FxaaTexOff(tex, posM, int2( 1,-1), fxaaRcpFrame.xy));
|
||||
float lumaSW = FxaaLuma(FxaaTexOff(tex, posM, int2(-1, 1), fxaaRcpFrame.xy));
|
||||
|
||||
float lumaNS = lumaN + lumaS;
|
||||
float lumaWE = lumaW + lumaE;
|
||||
float subpixRcpRange = 1.0/range;
|
||||
float subpixNSWE = lumaNS + lumaWE;
|
||||
float edgeHorz1 = (-2.0 * lumaM) + lumaNS;
|
||||
float edgeVert1 = (-2.0 * lumaM) + lumaWE;
|
||||
float lumaNESE = lumaNE + lumaSE;
|
||||
float lumaNWNE = lumaNW + lumaNE;
|
||||
float edgeHorz2 = (-2.0 * lumaE) + lumaNESE;
|
||||
float edgeVert2 = (-2.0 * lumaN) + lumaNWNE;
|
||||
|
||||
float lumaNWSW = lumaNW + lumaSW;
|
||||
float lumaSWSE = lumaSW + lumaSE;
|
||||
float edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);
|
||||
float edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);
|
||||
float edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;
|
||||
float edgeVert3 = (-2.0 * lumaS) + lumaSWSE;
|
||||
float edgeHorz = abs(edgeHorz3) + edgeHorz4;
|
||||
float edgeVert = abs(edgeVert3) + edgeVert4;
|
||||
|
||||
float subpixNWSWNESE = lumaNWSW + lumaNESE;
|
||||
float lengthSign = fxaaRcpFrame.x;
|
||||
bool horzSpan = edgeHorz >= edgeVert;
|
||||
float subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;
|
||||
if(!horzSpan) lumaN = lumaW;
|
||||
if(!horzSpan) lumaS = lumaE;
|
||||
if(horzSpan) lengthSign = fxaaRcpFrame.y;
|
||||
float subpixB = (subpixA * (1.0/12.0)) - lumaM;
|
||||
|
||||
float gradientN = lumaN - lumaM;
|
||||
float gradientS = lumaS - lumaM;
|
||||
float lumaNN = lumaN + lumaM;
|
||||
float lumaSS = lumaS + lumaM;
|
||||
bool pairN = abs(gradientN) >= abs(gradientS);
|
||||
float gradient = max(abs(gradientN), abs(gradientS));
|
||||
if(pairN) lengthSign = -lengthSign;
|
||||
float subpixC = FxaaSat(abs(subpixB) * subpixRcpRange);
|
||||
|
||||
float2 posB;
|
||||
posB.x = posM.x;
|
||||
posB.y = posM.y;
|
||||
float2 offNP;
|
||||
offNP.x = (!horzSpan) ? 0.0 : fxaaRcpFrame.x;
|
||||
offNP.y = ( horzSpan) ? 0.0 : fxaaRcpFrame.y;
|
||||
if(!horzSpan) posB.x += lengthSign * 0.5;
|
||||
if( horzSpan) posB.y += lengthSign * 0.5;
|
||||
|
||||
float2 posN;
|
||||
posN.x = posB.x - offNP.x * FXAA_QUALITY_P0;
|
||||
posN.y = posB.y - offNP.y * FXAA_QUALITY_P0;
|
||||
float2 posP;
|
||||
posP.x = posB.x + offNP.x * FXAA_QUALITY_P0;
|
||||
posP.y = posB.y + offNP.y * FXAA_QUALITY_P0;
|
||||
float subpixD = ((-2.0)*subpixC) + 3.0;
|
||||
float lumaEndN = FxaaLuma(FxaaTexTop(tex, posN));
|
||||
float subpixE = subpixC * subpixC;
|
||||
float lumaEndP = FxaaLuma(FxaaTexTop(tex, posP));
|
||||
|
||||
if(!pairN) lumaNN = lumaSS;
|
||||
float gradientScaled = gradient * 1.0/4.0;
|
||||
float lumaMM = lumaM - lumaNN * 0.5;
|
||||
float subpixF = subpixD * subpixE;
|
||||
bool lumaMLTZero = lumaMM < 0.0;
|
||||
lumaEndN -= lumaNN * 0.5;
|
||||
lumaEndP -= lumaNN * 0.5;
|
||||
bool doneN = abs(lumaEndN) >= gradientScaled;
|
||||
bool doneP = abs(lumaEndP) >= gradientScaled;
|
||||
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P1;
|
||||
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P1;
|
||||
bool doneNP = (!doneN) || (!doneP);
|
||||
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P1;
|
||||
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P1;
|
||||
|
||||
if(doneNP) {
|
||||
if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
|
||||
if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
|
||||
if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
|
||||
if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
|
||||
doneN = abs(lumaEndN) >= gradientScaled;
|
||||
doneP = abs(lumaEndP) >= gradientScaled;
|
||||
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P2;
|
||||
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P2;
|
||||
doneNP = (!doneN) || (!doneP);
|
||||
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P2;
|
||||
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P2;
|
||||
|
||||
if(doneNP) {
|
||||
if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
|
||||
if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
|
||||
if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
|
||||
if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
|
||||
doneN = abs(lumaEndN) >= gradientScaled;
|
||||
doneP = abs(lumaEndP) >= gradientScaled;
|
||||
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P3;
|
||||
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P3;
|
||||
doneNP = (!doneN) || (!doneP);
|
||||
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P3;
|
||||
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P3;
|
||||
|
||||
if(doneNP) {
|
||||
if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
|
||||
if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
|
||||
if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
|
||||
if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
|
||||
doneN = abs(lumaEndN) >= gradientScaled;
|
||||
doneP = abs(lumaEndP) >= gradientScaled;
|
||||
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P4;
|
||||
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P4;
|
||||
doneNP = (!doneN) || (!doneP);
|
||||
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P4;
|
||||
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P4;
|
||||
|
||||
if(doneNP) {
|
||||
if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
|
||||
if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
|
||||
if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
|
||||
if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
|
||||
doneN = abs(lumaEndN) >= gradientScaled;
|
||||
doneP = abs(lumaEndP) >= gradientScaled;
|
||||
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P5;
|
||||
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P5;
|
||||
doneNP = (!doneN) || (!doneP);
|
||||
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P5;
|
||||
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P5;
|
||||
|
||||
if(doneNP) {
|
||||
if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
|
||||
if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
|
||||
if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
|
||||
if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
|
||||
doneN = abs(lumaEndN) >= gradientScaled;
|
||||
doneP = abs(lumaEndP) >= gradientScaled;
|
||||
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P6;
|
||||
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P6;
|
||||
doneNP = (!doneN) || (!doneP);
|
||||
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P6;
|
||||
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P6;
|
||||
|
||||
if(doneNP) {
|
||||
if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
|
||||
if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
|
||||
if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
|
||||
if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
|
||||
doneN = abs(lumaEndN) >= gradientScaled;
|
||||
doneP = abs(lumaEndP) >= gradientScaled;
|
||||
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P7;
|
||||
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P7;
|
||||
doneNP = (!doneN) || (!doneP);
|
||||
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P7;
|
||||
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P7;
|
||||
|
||||
if(doneNP) {
|
||||
if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
|
||||
if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
|
||||
if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
|
||||
if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
|
||||
doneN = abs(lumaEndN) >= gradientScaled;
|
||||
doneP = abs(lumaEndP) >= gradientScaled;
|
||||
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P8;
|
||||
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P8;
|
||||
doneNP = (!doneN) || (!doneP);
|
||||
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P8;
|
||||
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P8;
|
||||
|
||||
if(doneNP) {
|
||||
if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
|
||||
if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
|
||||
if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
|
||||
if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
|
||||
doneN = abs(lumaEndN) >= gradientScaled;
|
||||
doneP = abs(lumaEndP) >= gradientScaled;
|
||||
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P9;
|
||||
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P9;
|
||||
doneNP = (!doneN) || (!doneP);
|
||||
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P9;
|
||||
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P9;
|
||||
|
||||
if(doneNP) {
|
||||
if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
|
||||
if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
|
||||
if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
|
||||
if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
|
||||
doneN = abs(lumaEndN) >= gradientScaled;
|
||||
doneP = abs(lumaEndP) >= gradientScaled;
|
||||
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P10;
|
||||
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P10;
|
||||
doneNP = (!doneN) || (!doneP);
|
||||
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P10;
|
||||
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P10;
|
||||
|
||||
if(doneNP) {
|
||||
if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
|
||||
if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
|
||||
if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
|
||||
if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
|
||||
doneN = abs(lumaEndN) >= gradientScaled;
|
||||
doneP = abs(lumaEndP) >= gradientScaled;
|
||||
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P11;
|
||||
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P11;
|
||||
doneNP = (!doneN) || (!doneP);
|
||||
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P11;
|
||||
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P11;
|
||||
|
||||
if(doneNP) {
|
||||
if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
|
||||
if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
|
||||
if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
|
||||
if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
|
||||
doneN = abs(lumaEndN) >= gradientScaled;
|
||||
doneP = abs(lumaEndP) >= gradientScaled;
|
||||
if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P12;
|
||||
if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P12;
|
||||
doneNP = (!doneN) || (!doneP);
|
||||
if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P12;
|
||||
if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P12;
|
||||
}}}}}}}}}}}
|
||||
|
||||
float dstN = posM.x - posN.x;
|
||||
float dstP = posP.x - posM.x;
|
||||
if(!horzSpan) dstN = posM.y - posN.y;
|
||||
if(!horzSpan) dstP = posP.y - posM.y;
|
||||
|
||||
bool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;
|
||||
float spanLength = (dstP + dstN);
|
||||
bool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;
|
||||
float spanLengthRcp = 1.0/spanLength;
|
||||
|
||||
bool directionN = dstN < dstP;
|
||||
float dst = min(dstN, dstP);
|
||||
bool goodSpan = directionN ? goodSpanN : goodSpanP;
|
||||
float subpixG = subpixF * subpixF;
|
||||
float pixelOffset = (dst * (-spanLengthRcp)) + 0.5;
|
||||
float subpixH = subpixG * fxaaSubpix;
|
||||
|
||||
float pixelOffsetGood = goodSpan ? pixelOffset : 0.0;
|
||||
float pixelOffsetSubpix = max(pixelOffsetGood, subpixH);
|
||||
if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;
|
||||
if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;
|
||||
|
||||
return float4(FxaaTexTop(tex, posM).xyz, lumaM);
|
||||
}
|
||||
|
||||
#if (FXAA_GLSL_130 == 1 || FXAA_GLSL_VK == 1)
|
||||
float4 FxaaPass(float4 FxaaColor, float2 uv0)
|
||||
#elif (FXAA_HLSL == 1)
|
||||
float4 FxaaPass(float4 FxaaColor : COLOR0, float2 uv0 : TEXCOORD0)
|
||||
#elif defined(__METAL_VERSION__)
|
||||
float4 FxaaPass(float4 FxaaColor, float2 uv0, texture2d<float> tex)
|
||||
#endif
|
||||
{
|
||||
|
||||
#if (FXAA_HLSL == 1)
|
||||
FxaaTex tex;
|
||||
tex.tex = Texture;
|
||||
tex.smpl = TextureSampler;
|
||||
|
||||
float2 PixelSize;
|
||||
Texture.GetDimensions(PixelSize.x, PixelSize.y);
|
||||
FxaaColor = FxaaPixelShader(uv0, tex, 1.0/PixelSize.xy, FxaaSubpixMax, FxaaEdgeThreshold, FxaaEdgeThresholdMin);
|
||||
|
||||
#elif (FXAA_GLSL_130 == 1 || FXAA_GLSL_VK == 1)
|
||||
vec2 PixelSize = vec2(textureSize(TextureSampler, 0));
|
||||
FxaaColor = FxaaPixelShader(uv0, TextureSampler, 1.0/PixelSize.xy, FxaaSubpixMax, FxaaEdgeThreshold, FxaaEdgeThresholdMin);
|
||||
#elif defined(__METAL_VERSION__)
|
||||
float2 PixelSize = float2(tex.get_width(), tex.get_height());
|
||||
FxaaColor = FxaaPixelShader(uv0, tex, 1.f/PixelSize, FxaaSubpixMax, FxaaEdgeThreshold, FxaaEdgeThresholdMin);
|
||||
#endif
|
||||
|
||||
return FxaaColor;
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
[MAIN() & COMBINE PASS CODE SECTION]
|
||||
------------------------------------------------------------------------------*/
|
||||
#if (FXAA_GLSL_130 == 1 || FXAA_GLSL_VK == 1)
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 color = texture(TextureSampler, PSin_t);
|
||||
color = PreGammaPass(color);
|
||||
color = FxaaPass(color, PSin_t);
|
||||
|
||||
SV_Target0 = float4(color.rgb, 1.0);
|
||||
}
|
||||
|
||||
#elif (FXAA_HLSL == 1)
|
||||
PS_OUTPUT main(VS_OUTPUT input)
|
||||
{
|
||||
PS_OUTPUT output;
|
||||
|
||||
float4 color = Texture.Sample(TextureSampler, input.t);
|
||||
|
||||
color = PreGammaPass(color);
|
||||
color = FxaaPass(color, input.t);
|
||||
|
||||
output.c = float4(color.rgb, 1.0);
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
// Metal main function in in fxaa.metal
|
||||
#endif
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,470 @@
|
||||
// SPDX-FileCopyrightText: 2002-2026 PCSX2 Dev Team
|
||||
// SPDX-License-Identifier: GPL-3.0+
|
||||
|
||||
//#version 420 // Keep it for text editor detection
|
||||
|
||||
layout(std140, binding = 1) uniform cb20
|
||||
{
|
||||
vec2 VertexScale;
|
||||
vec2 VertexOffset;
|
||||
|
||||
vec2 TextureScale;
|
||||
vec2 TextureOffset;
|
||||
|
||||
vec2 PointSize;
|
||||
|
||||
uint MaxDepth;
|
||||
float LineAA1Width;
|
||||
};
|
||||
|
||||
#ifdef VERTEX_SHADER
|
||||
|
||||
#ifndef VS_EXPAND_NONE
|
||||
#define VS_EXPAND_NONE 0
|
||||
#define VS_EXPAND_POINT 1
|
||||
#define VS_EXPAND_LINE 2
|
||||
#define VS_EXPAND_SPRITE 3
|
||||
#define VS_EXPAND_LINE_AA1 4
|
||||
#define VS_EXPAND_TRIANGLE_AA1 5
|
||||
#endif
|
||||
|
||||
out SHADER
|
||||
{
|
||||
vec4 t_float;
|
||||
vec4 t_int;
|
||||
#if VS_IIP != 0
|
||||
vec4 c;
|
||||
#else
|
||||
flat vec4 c;
|
||||
#endif
|
||||
float inv_cov; // We use the inverse to make it simpler to interpolate.
|
||||
flat uint interior; // 1 for triangle interior; 0 for edge.
|
||||
} VSout;
|
||||
|
||||
const float exp_min32 = exp2(-32.0f);
|
||||
|
||||
#if VS_EXPAND == VS_EXPAND_NONE
|
||||
|
||||
layout(location = 0) in vec2 i_st;
|
||||
layout(location = 2) in vec4 i_c;
|
||||
layout(location = 3) in float i_q;
|
||||
layout(location = 4) in uvec2 i_p;
|
||||
layout(location = 5) in uint i_z;
|
||||
layout(location = 6) in uvec2 i_uv;
|
||||
layout(location = 7) in vec4 i_f;
|
||||
|
||||
void texture_coord()
|
||||
{
|
||||
vec2 uv = vec2(i_uv) - TextureOffset;
|
||||
vec2 st = i_st - TextureOffset;
|
||||
|
||||
// Float coordinate
|
||||
VSout.t_float.xy = st;
|
||||
VSout.t_float.w = i_q;
|
||||
|
||||
// Integer coordinate => normalized
|
||||
VSout.t_int.xy = uv * TextureScale;
|
||||
#if VS_FST
|
||||
// Integer coordinate => integral
|
||||
VSout.t_int.zw = uv;
|
||||
#else
|
||||
// Some games uses float coordinate for post-processing effect
|
||||
VSout.t_int.zw = st / TextureScale;
|
||||
#endif
|
||||
}
|
||||
|
||||
void vs_main()
|
||||
{
|
||||
// Clamp to max depth, gs doesn't wrap
|
||||
highp uint z = min(i_z, MaxDepth);
|
||||
|
||||
// pos -= 0.05 (1/320 pixel) helps avoiding rounding problems (integral part of pos is usually 5 digits, 0.05 is about as low as we can go)
|
||||
// example: ceil(afterseveralvertextransformations(y = 133)) => 134 => line 133 stays empty
|
||||
// input granularity is 1/16 pixel, anything smaller than that won't step drawing up/left by one pixel
|
||||
// example: 133.0625 (133 + 1/16) should start from line 134, ceil(133.0625 - 0.05) still above 133
|
||||
gl_Position.xy = vec2(i_p) - vec2(0.05f, 0.05f);
|
||||
gl_Position.xy = gl_Position.xy * VertexScale - VertexOffset;
|
||||
|
||||
#if HAS_CLIP_CONTROL
|
||||
gl_Position.z = float(z) * exp_min32;
|
||||
#else
|
||||
gl_Position.z = (float(z) * exp_min32) * 2.0f - 1.0f;
|
||||
#endif
|
||||
|
||||
gl_Position.w = 1.0f;
|
||||
|
||||
texture_coord();
|
||||
|
||||
VSout.c = i_c;
|
||||
VSout.t_float.z = i_f.x; // pack for with texture
|
||||
|
||||
#if VS_POINT_SIZE
|
||||
gl_PointSize = PointSize.x;
|
||||
#endif
|
||||
}
|
||||
|
||||
#else // VS_EXPAND
|
||||
|
||||
struct RawVertex
|
||||
{
|
||||
vec2 ST;
|
||||
uint RGBA;
|
||||
float Q;
|
||||
uint XY;
|
||||
uint Z;
|
||||
uint UV;
|
||||
uint FOG;
|
||||
};
|
||||
|
||||
layout(std140, binding = 4) uniform cb22
|
||||
{
|
||||
uint BaseVertex;
|
||||
uint BaseIndex;
|
||||
uint pad_cb22_0;
|
||||
uint pad_cb22_1;
|
||||
};
|
||||
|
||||
layout(std140, binding = 2) readonly buffer VertexBuffer {
|
||||
RawVertex vertex_buffer[];
|
||||
};
|
||||
|
||||
// Warning: use std430 instead of std140 so that the ints are tightly packed.
|
||||
layout(std430, binding = 3) readonly buffer IndexBuffer {
|
||||
uint index_buffer[];
|
||||
};
|
||||
|
||||
struct ProcessedVertex
|
||||
{
|
||||
vec4 p;
|
||||
vec4 t_float;
|
||||
vec4 t_int;
|
||||
vec4 c;
|
||||
};
|
||||
|
||||
uint load_index(uint _i)
|
||||
{
|
||||
uint i = _i + BaseIndex;
|
||||
// i is even => load lower 16 bits; i odd => load upper 16 bits.
|
||||
uint shift = (i & 1u) << 4u;
|
||||
return (index_buffer[i >> 1u] >> shift) & 0xFFFFu;
|
||||
}
|
||||
|
||||
ProcessedVertex load_vertex(uint index)
|
||||
{
|
||||
RawVertex rvtx = vertex_buffer[BaseVertex + index];
|
||||
|
||||
vec2 i_st = rvtx.ST;
|
||||
vec4 i_c = vec4(uvec4(bitfieldExtract(rvtx.RGBA, 0, 8), bitfieldExtract(rvtx.RGBA, 8, 8),
|
||||
bitfieldExtract(rvtx.RGBA, 16, 8), bitfieldExtract(rvtx.RGBA, 24, 8)));
|
||||
float i_q = rvtx.Q;
|
||||
uvec2 i_p = uvec2(bitfieldExtract(rvtx.XY, 0, 16), bitfieldExtract(rvtx.XY, 16, 16));
|
||||
uint i_z = rvtx.Z;
|
||||
uvec2 i_uv = uvec2(bitfieldExtract(rvtx.UV, 0, 16), bitfieldExtract(rvtx.UV, 16, 16));
|
||||
vec4 i_f = unpackUnorm4x8(rvtx.FOG);
|
||||
|
||||
ProcessedVertex vtx;
|
||||
|
||||
uint z = min(i_z, MaxDepth);
|
||||
vtx.p.xy = vec2(i_p) - vec2(0.05f, 0.05f);
|
||||
vtx.p.xy = vtx.p.xy * VertexScale - VertexOffset;
|
||||
|
||||
#if HAS_CLIP_CONTROL
|
||||
vtx.p.z = float(z) * exp_min32;
|
||||
#else
|
||||
vtx.p.z = (float(z) * exp_min32) * 2.0f - 1.0f;
|
||||
#endif
|
||||
|
||||
vtx.p.w = 1.0f;
|
||||
|
||||
vec2 uv = vec2(i_uv) - TextureOffset;
|
||||
vec2 st = i_st - TextureOffset;
|
||||
|
||||
vtx.t_float.xy = st;
|
||||
vtx.t_float.w = i_q;
|
||||
|
||||
vtx.t_int.xy = uv * TextureScale;
|
||||
#if VS_FST
|
||||
vtx.t_int.zw = uv;
|
||||
#else
|
||||
vtx.t_int.zw = st / TextureScale;
|
||||
#endif
|
||||
|
||||
vtx.c = i_c;
|
||||
vtx.t_float.z = i_f.x;
|
||||
|
||||
return vtx;
|
||||
}
|
||||
|
||||
// Convert XY from NDC to GS pixel coordinates (i.e. 1.0 = 1 GS pixel).
|
||||
vec2 get_xy_unscaled(vec2 xy)
|
||||
{
|
||||
return round(xy / VertexScale) / 16.0f;
|
||||
}
|
||||
|
||||
// Get the XY deltas in GS pixel coordinates, using first vertex as the origin.
|
||||
mat2 get_xy_deltas_unscaled(ProcessedVertex v0, ProcessedVertex v1, ProcessedVertex v2)
|
||||
{
|
||||
vec2 xy0 = get_xy_unscaled(v0.p.xy);
|
||||
vec2 xy1 = get_xy_unscaled(v1.p.xy);
|
||||
vec2 xy2 = get_xy_unscaled(v2.p.xy);
|
||||
return mat2(xy1 - xy0, xy2 - xy0);
|
||||
}
|
||||
|
||||
// Get the AA1 outward expand direction to the edge formed by the first two vertices.
|
||||
// This is up or down for shallow (X dominant) edges, and right or left for steep (Y dominant) edges.
|
||||
// Similar expansion to line AA1 except instead of expanding on both sides of the line,
|
||||
// expand on on the side towards the outside of the triangle.
|
||||
vec2 get_aa1_triangle_expand_dir(ProcessedVertex v0, ProcessedVertex v1, ProcessedVertex v2)
|
||||
{
|
||||
mat2 xy_deltas = get_xy_deltas_unscaled(v0, v1, v2);
|
||||
vec2 line_delta = xy_deltas[0];
|
||||
vec2 line_opposite = xy_deltas[1];
|
||||
|
||||
vec2 line_normal = vec2(line_delta.y, -line_delta.x);
|
||||
vec2 line_expand = abs(line_delta.x) >= abs(line_delta.y) ? vec2(0.0f, 1.0f) : vec2(1.0f, 0.0f);
|
||||
|
||||
if ((dot(line_expand, line_normal) >= 0.0f) == (dot(line_opposite, line_normal) >= 0.0f))
|
||||
{
|
||||
// Expand direction point towards the interior so flip it.
|
||||
line_expand = -line_expand;
|
||||
}
|
||||
|
||||
return line_expand;
|
||||
}
|
||||
|
||||
mat2 get_inverse(mat2 mat, float det)
|
||||
{
|
||||
return mat2(mat[1][1], -mat[0][1], -mat[1][0], mat[0][0]) * (1.0f / det);
|
||||
}
|
||||
|
||||
// Extrapolate triangle attributes from the first vertex along the given direction.
|
||||
// dp_mat is derived from the input vertices, it is passed in to avoid recomputing.
|
||||
void extrapolate_aa1_triangle_edge(inout ProcessedVertex v0, ProcessedVertex v1, ProcessedVertex v2, mat2 dp_mat, vec2 dp)
|
||||
{
|
||||
// Get texture deltas
|
||||
#if VS_TME
|
||||
#if VS_FST
|
||||
mat2 dt = mat2(v1.t_int.zw - v0.t_int.zw, v2.t_int.zw - v0.t_int.zw);
|
||||
#else
|
||||
mat2 dt = mat2(v1.t_float.xy - v0.t_float.xy, v2.t_float.xy - v0.t_float.xy);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Get color delta if interpolating
|
||||
#if VS_IIP
|
||||
mat2x4 dc = mat2x4(v1.c - v0.c, v2.c - v0.c);
|
||||
#endif
|
||||
|
||||
vec2 dz = vec2(v1.p.z - v0.p.z, v2.p.z - v0.p.z); // Z deltas
|
||||
|
||||
vec2 df = vec2(v1.t_float.z - v0.t_float.z, v2.t_float.z - v0.t_float.z); // Fog deltas
|
||||
|
||||
vec2 dq = vec2(v1.t_float.w - v0.t_float.w, v2.t_float.w - v0.t_float.w); // Q deltas
|
||||
|
||||
// To prevent unstable extrapolation, do not extrapolate if the
|
||||
// minimum perpendicular length of the triangle is < 2 pixels.
|
||||
float dp_det = determinant(dp_mat); // Twice signed triangle area.
|
||||
float len0 = length(dp_mat[0]);
|
||||
float len1 = length(dp_mat[1]);
|
||||
float len2 = length(dp_mat[1] - dp_mat[0]);
|
||||
float min_perp_length = abs(dp_det) / max(max(len0, len1), len2);
|
||||
|
||||
// Get the position -> barycentric weight matrix
|
||||
mat2 inv_dp_mat = get_inverse(dp_mat, dp_det);
|
||||
|
||||
vec2 weights = min_perp_length < 2.0f ? vec2(0) : inv_dp_mat * dp;
|
||||
|
||||
v0.p.xy += dp * PointSize; // Extrapolate position
|
||||
|
||||
// Extrapolate texture coords
|
||||
#if VS_TME
|
||||
#if VS_FST
|
||||
v0.t_int.zw += dt * weights;
|
||||
v0.t_int.xy = v0.t_int.zw * TextureScale;
|
||||
#else
|
||||
v0.t_float.xy += dt * weights;
|
||||
v0.t_int.zw = v0.t_float.xy / TextureScale;
|
||||
v0.t_float.w += dot(dq, weights);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Extrapolate and clamp color
|
||||
#if VS_IIP
|
||||
v0.c += dc * weights;
|
||||
v0.c = clamp(v0.c, vec4(0), vec4(255));
|
||||
#endif
|
||||
|
||||
v0.p.z += dot(dz, weights); // Extrapolate depth
|
||||
|
||||
v0.t_float.z += dot(df, weights); // Extrapolate fog
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
ProcessedVertex vtx;
|
||||
|
||||
uint vid = uint(gl_VertexID);
|
||||
|
||||
#if VS_EXPAND == VS_EXPAND_POINT
|
||||
|
||||
vtx = load_vertex(vid >> 2);
|
||||
|
||||
vtx.p.x += ((vid & 1u) != 0u) ? PointSize.x : 0.0f;
|
||||
vtx.p.y += ((vid & 2u) != 0u) ? PointSize.y : 0.0f;
|
||||
|
||||
#elif (VS_EXPAND == VS_EXPAND_LINE) || (VS_EXPAND == VS_EXPAND_LINE_AA1)
|
||||
|
||||
uint vid_base = vid >> 2;
|
||||
bool is_bottom = (vid & 2u) != 0u;
|
||||
bool is_right = (vid & 1u) != 0u;
|
||||
uint vid_other = is_bottom ? vid_base - 1u : vid_base + 1u;
|
||||
vtx = load_vertex(vid_base);
|
||||
ProcessedVertex other = load_vertex(vid_other);
|
||||
|
||||
// Use bottom minus top for delta regardless of which vertex we are expanding.
|
||||
vec2 line_delta = is_bottom ? (vtx.p.xy - other.p.xy) : (other.p.xy - vtx.p.xy);
|
||||
vec2 line_vector = normalize(line_delta / VertexScale);
|
||||
vec2 line_expand = vec2(line_vector.y, -line_vector.x);
|
||||
#if VS_EXPAND == VS_EXPAND_LINE_AA1
|
||||
line_expand *= 2.0f * LineAA1Width;
|
||||
#endif
|
||||
vec2 line_width = (line_expand * PointSize) / 2.0f;
|
||||
vec2 offset = is_right ? line_width : -line_width;
|
||||
vtx.p.xy += offset;
|
||||
|
||||
#if VS_EXPAND == VS_EXPAND_LINE_AA1
|
||||
VSout.inv_cov = is_right ? 1.0f : -1.0f;
|
||||
#endif
|
||||
|
||||
// Lines will be run as (0 1 2) (1 2 3)
|
||||
// This means that both triangles will have a point based off the top line point as their first point
|
||||
// So we don't have to do anything for !IIP
|
||||
|
||||
#elif VS_EXPAND == VS_EXPAND_SPRITE
|
||||
|
||||
// Sprite points are always in pairs
|
||||
uint vid_base = vid >> 1;
|
||||
uint vid_lt = vid_base & ~1u;
|
||||
uint vid_rb = vid_base | 1u;
|
||||
|
||||
ProcessedVertex lt = load_vertex(vid_lt);
|
||||
ProcessedVertex rb = load_vertex(vid_rb);
|
||||
vtx = rb;
|
||||
|
||||
bool is_right = ((vid & 1u) != 0u);
|
||||
vtx.p.x = is_right ? lt.p.x : vtx.p.x;
|
||||
vtx.t_float.x = is_right ? lt.t_float.x : vtx.t_float.x;
|
||||
vtx.t_int.xz = is_right ? lt.t_int.xz : vtx.t_int.xz;
|
||||
|
||||
bool is_bottom = ((vid & 2u) != 0u);
|
||||
vtx.p.y = is_bottom ? lt.p.y : vtx.p.y;
|
||||
vtx.t_float.y = is_bottom ? lt.t_float.y : vtx.t_float.y;
|
||||
vtx.t_int.yw = is_bottom ? lt.t_int.yw : vtx.t_int.yw;
|
||||
|
||||
#elif VS_EXPAND == VS_EXPAND_TRIANGLE_AA1
|
||||
|
||||
// Triangles with AA1 are expanded as follows:
|
||||
// - Vertices 0-2: Interior of triangle (1 triangle).
|
||||
// - Vertices 3-8: First edge expanded (2 triangles).
|
||||
// - Vertices 9-14: Second edge expanded (2 triangles).
|
||||
// - Vertices 15-20: Third edge expanded (2 triangles).
|
||||
// - Vertices 21-26: First corner cap (2 triangles).
|
||||
// - Vertices 27-32: Second corner cap (2 triangles).
|
||||
// - Vertices 33-38: Third corner cap (2 triangles).
|
||||
|
||||
uint prim_id = vid / 39u;
|
||||
uint prim_offset = vid - 39u * prim_id; // range: 0-38
|
||||
bool interior = prim_offset < 3u;
|
||||
bool edge = 3u <= prim_offset && prim_offset < 21u;
|
||||
|
||||
if (interior)
|
||||
{
|
||||
vtx = load_vertex(load_index(3u * prim_id + prim_offset));
|
||||
VSout.inv_cov = 0.0f; // Full coverage
|
||||
VSout.interior = 1u;
|
||||
}
|
||||
else if (edge)
|
||||
{
|
||||
// Vertex indices for this edge. We need all 3 for determining exterior/interior.
|
||||
uint prim_offset_edges = prim_offset - 3u; // range: 0-17
|
||||
uint i0 = prim_offset_edges / 6u;
|
||||
uint i1 = (i0 >= 2u) ? i0 - 2u : i0 + 1u;
|
||||
uint i2 = (i0 >= 1u) ? i0 - 1u : i0 + 2u;
|
||||
uint edge_offset = prim_offset_edges - 6u * i0; // range: 0-5
|
||||
|
||||
// Note: order of top/bottom, inside/outside is arbitrary,
|
||||
// as long as it assembles into two triangles forming a quad.
|
||||
bool is_bottom = (2u <= edge_offset) && (edge_offset <= 4u);
|
||||
bool is_outside = (edge_offset & 1u) != 0u;
|
||||
|
||||
vtx = load_vertex(load_index(3u * prim_id + (is_bottom ? i1 : i0)));
|
||||
ProcessedVertex other = load_vertex(load_index(3u * prim_id + (is_bottom ? i0 : i1)));
|
||||
ProcessedVertex opposite = load_vertex(load_index(3u * prim_id + i2));
|
||||
|
||||
mat2 pos_deltas = get_xy_deltas_unscaled(vtx, other, opposite);
|
||||
|
||||
vec2 expand_dir = is_outside ? get_aa1_triangle_expand_dir(vtx, other, opposite) : vec2(0);
|
||||
|
||||
// Do actual extrapolation, or no-op if expand_dir == 0.
|
||||
extrapolate_aa1_triangle_edge(vtx, other, opposite, pos_deltas, expand_dir);
|
||||
|
||||
VSout.inv_cov = is_outside ? 1.0f : 0.0f; // No coverage on outside, otherwise full.
|
||||
|
||||
VSout.interior = 0u;
|
||||
}
|
||||
else // Corner cap
|
||||
{
|
||||
// Vertex indices for this cap. We need all 3 for determining exterior/interior.
|
||||
uint prim_offset_cap = prim_offset - 21u; // range: 0-17
|
||||
uint i0 = prim_offset_cap / 6u;
|
||||
uint i1 = (i0 >= 2u) ? i0 - 2u : i0 + 1u;
|
||||
uint i2 = (i0 >= 1u) ? i0 - 1u : i0 + 2u;
|
||||
uint cap_offset = prim_offset_cap - 6u * i0; // range: 0-5
|
||||
|
||||
bool is_near_corner = cap_offset == 0u || cap_offset == 3u;
|
||||
bool is_far_corner = cap_offset == 2u || cap_offset == 5u;
|
||||
bool is_first_tri = cap_offset < 3u;
|
||||
|
||||
// First triangle is on the side of vertex i1 and second is on the side of vertex i2.
|
||||
vtx = load_vertex(load_index(3u * prim_id + i0));
|
||||
ProcessedVertex other = load_vertex(load_index(3u * prim_id + (is_first_tri ? i1 : i2)));
|
||||
ProcessedVertex opposite = load_vertex(load_index(3u * prim_id + (is_first_tri ? i2 : i1)));
|
||||
|
||||
mat2 pos_deltas = get_xy_deltas_unscaled(vtx, other, opposite);
|
||||
|
||||
// Get the edge expansion directions of both incident edges.
|
||||
vec2 edge_expand_dir_0 = get_aa1_triangle_expand_dir(vtx, other, opposite);
|
||||
vec2 edge_expand_dir_1 = get_aa1_triangle_expand_dir(vtx, opposite, other);
|
||||
|
||||
// Check if the corner is already filled by the expanded edges.
|
||||
// This happens if the expand directions are the same.
|
||||
// If so we output a degenerate triangle at this corner.
|
||||
bool corner_filled = all(equal(edge_expand_dir_0, edge_expand_dir_1));
|
||||
|
||||
// Nothing if corner is filled, otherwise opposite to the bisector of the corner angle.
|
||||
vec2 far_corner_dir = corner_filled ? vec2(0) : -normalize((pos_deltas[0] + pos_deltas[1]) / 2.0f);
|
||||
|
||||
// Determine the expand direction.
|
||||
vec2 expand_dir = is_near_corner ? vec2(0) : // No extrapolation
|
||||
is_far_corner ? far_corner_dir : // Opposite to the angle bisector of corner
|
||||
edge_expand_dir_0; // Standard AA1 edge expansion
|
||||
|
||||
// Do the actual extrapolation (no-op if expand_dir == 0).
|
||||
extrapolate_aa1_triangle_edge(vtx, other, opposite, pos_deltas, expand_dir);
|
||||
|
||||
VSout.inv_cov = is_near_corner ? 0.0f : 1.0f; // Full coverage at near corner, otherwise none.
|
||||
|
||||
VSout.interior = 0u;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
gl_Position = vtx.p;
|
||||
VSout.t_float = vtx.t_float;
|
||||
VSout.t_int = vtx.t_int;
|
||||
VSout.c = vtx.c;
|
||||
}
|
||||
|
||||
#endif // VS_EXPAND
|
||||
|
||||
#endif // VERTEX_SHADER
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File renamed without changes.
Binary file not shown.
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
+493
-140
File diff suppressed because it is too large.
Load diff
@@ -88,7 +88,6 @@ files:
|
||||
- name: OS6128_UK.rom
|
||||
path: "private/firmware/OS6128_UK.rom"
|
||||
system: amstrad-cpc
|
||||
region: [uk]
|
||||
required: true
|
||||
min_size: 32768
|
||||
validation: [size]
|
||||
@@ -138,7 +137,6 @@ files:
|
||||
- name: OS464_UK.rom
|
||||
path: "private/firmware/OS464_UK.rom"
|
||||
system: amstrad-cpc
|
||||
region: [uk]
|
||||
required: false
|
||||
min_size: 32768
|
||||
validation: [size]
|
||||
@@ -150,7 +148,6 @@ files:
|
||||
- name: OS464_FR.rom
|
||||
path: "private/firmware/OS464_FR.rom"
|
||||
system: amstrad-cpc
|
||||
region: [france]
|
||||
required: false
|
||||
min_size: 32768
|
||||
validation: [size]
|
||||
@@ -164,7 +161,6 @@ files:
|
||||
- name: OS664_UK.rom
|
||||
path: "private/firmware/OS664_UK.rom"
|
||||
system: amstrad-cpc
|
||||
region: [uk]
|
||||
required: false
|
||||
min_size: 32768
|
||||
validation: [size]
|
||||
@@ -176,7 +172,6 @@ files:
|
||||
- name: XMEM_FW_3_15_UK.rom
|
||||
path: "private/firmware/XMEM_FW_3_15_UK.rom"
|
||||
system: amstrad-cpc
|
||||
region: [uk]
|
||||
required: false
|
||||
min_size: 32768
|
||||
validation: [size]
|
||||
@@ -188,7 +183,6 @@ files:
|
||||
- name: XMEM_FW_3_15_FR.rom
|
||||
path: "private/firmware/XMEM_FW_3_15_FR.rom"
|
||||
system: amstrad-cpc
|
||||
region: [france]
|
||||
required: false
|
||||
min_size: 32768
|
||||
validation: [size]
|
||||
@@ -224,7 +218,6 @@ files:
|
||||
- name: Amstrad_f4.cpr
|
||||
path: "private/firmware/Amstrad_f4.cpr"
|
||||
system: amstrad-cpc
|
||||
region: [france]
|
||||
required: false
|
||||
size: 131156
|
||||
md5: e7159fd674022ba05f9b347ae3cdafc6
|
||||
@@ -235,7 +228,6 @@ files:
|
||||
- name: Amstrad_s4.cpr
|
||||
path: "private/firmware/Amstrad_s4.cpr"
|
||||
system: amstrad-cpc
|
||||
region: [spain]
|
||||
required: false
|
||||
size: 131156
|
||||
md5: 6eeed3fdd4abc98a2a932da810410128
|
||||
@@ -257,7 +249,6 @@ files:
|
||||
- name: hackit400uk.rom
|
||||
path: "private/hacker/hackit400uk.rom"
|
||||
system: amstrad-cpc
|
||||
region: [uk]
|
||||
required: false
|
||||
size: 16384
|
||||
md5: 9a293eaaebca601f671070ad56cb81b6
|
||||
@@ -269,7 +260,6 @@ files:
|
||||
- name: hacker481fr.rom
|
||||
path: "private/hacker/hacker481fr.rom"
|
||||
system: amstrad-cpc
|
||||
region: [france]
|
||||
required: false
|
||||
size: 16384
|
||||
md5: dfdd9924295f491d54f30569874287f8
|
||||
|
||||
@@ -4,7 +4,7 @@ core_classification: enhanced_fork
|
||||
source: "https://github.com/amadvance/advancemame"
|
||||
upstream: "https://www.mamedev.org"
|
||||
profiled_date: "2026-08-08"
|
||||
source_commit: "0f6a7677ad42b4dfdfa36b046f74bef5238d5837"
|
||||
source_commit: "21f8f6f79d8a9abe9f23b1a070841963774cf65d"
|
||||
core_version: "5.0"
|
||||
mame_version: "0.106"
|
||||
display_name: "Arcade (AdvanceMAME)"
|
||||
|
||||
@@ -148,6 +148,9 @@ files:
|
||||
path: resources/GameIndex.yaml
|
||||
required: false
|
||||
bundled: true
|
||||
sha1:
|
||||
- 997fdfb1c1873c1a43972b2984ac0da61fd47b14
|
||||
- 71fc274cbe27f382afb0324024ebdc6f59aa666d
|
||||
description: "Game database"
|
||||
note: "Read from the resources folder, keyed by serial, and carrying the per-game fixes, patches and settings overrides. Parsed into gamedb.cache in the cache folder and reparsed whenever the modification time moves."
|
||||
source_ref: "aethersx2/pcsx2/GameDatabase.cpp:35-36, aethersx2/pcsx2/GameDatabase.cpp:348-352, aethersx2/pcsx2/GameDatabase.cpp:523-535"
|
||||
|
||||
+1
-40
@@ -61,7 +61,7 @@ notes: |
|
||||
Firmware path resolution: settings.paths.firmware (user override) or
|
||||
{userData}/ares/Firmware/ (default). Per-system firmware assigned in
|
||||
Settings > Firmware dialog or via scan-by-hash.
|
||||
ref: desktop-ui/settings/settings.hpp:89-101, desktop-ui/desktop-ui.cpp:68-75
|
||||
ref: desktop-ui/settings/settings.hpp:87-99, desktop-ui/desktop-ui.cpp:68-75
|
||||
|
||||
Systems with fully embedded firmware (no user files needed):
|
||||
Game Boy (boot.rom), Game Boy Color (boot.rom), Mega Drive (TMSS),
|
||||
@@ -93,7 +93,6 @@ files:
|
||||
- name: colecovision.rom
|
||||
system: colecovision
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "990bf1956f10207d8781b619eb74f89b00d921c8d45c95c334c16c8cceca09ad"
|
||||
validation: [sha256]
|
||||
description: "ColecoVision BIOS"
|
||||
@@ -103,7 +102,6 @@ files:
|
||||
- name: disksys.rom
|
||||
system: famicom-disk-system
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "fdc1a76e654feea993fcb38366e05ee5f4eb641f86fe6bebaeefd412e112dd72"
|
||||
validation: [sha256]
|
||||
description: "Famicom Disk System BIOS"
|
||||
@@ -113,7 +111,6 @@ files:
|
||||
- name: gba_bios.bin
|
||||
system: game-boy-advance
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "fd2547724b505f487e6dcb29ec2ecff3af35a841a77ab2e85fd87350abd36570"
|
||||
validation: [sha256]
|
||||
description: "GBA BIOS"
|
||||
@@ -123,7 +120,6 @@ files:
|
||||
- name: bios.gg
|
||||
system: game-gear
|
||||
required: false
|
||||
mode: standalone
|
||||
sha256: "8c8a21335038285cfa03dc076100c1f0bfadf3e4ff70796f11f3dfaaab60eee2"
|
||||
validation: [sha256]
|
||||
description: "Game Gear BIOS"
|
||||
@@ -134,7 +130,6 @@ files:
|
||||
system: master-system
|
||||
region: [north-america]
|
||||
required: false
|
||||
mode: standalone
|
||||
sha256: "477617917a12a30f9f43844909dc2de6e6a617430f5c9a36306c86414a670d50"
|
||||
validation: [sha256]
|
||||
description: "Master System BIOS (US)"
|
||||
@@ -144,7 +139,6 @@ files:
|
||||
system: master-system
|
||||
region: [japan]
|
||||
required: false
|
||||
mode: standalone
|
||||
sha256: "67846e26764bd862f19179294347f7353a4166b62ac4198a5ec32933b7da486e"
|
||||
validation: [sha256]
|
||||
description: "Master System BIOS (Japan)"
|
||||
@@ -154,7 +148,6 @@ files:
|
||||
system: master-system
|
||||
region: [europe]
|
||||
required: false
|
||||
mode: standalone
|
||||
sha256: "477617917a12a30f9f43844909dc2de6e6a617430f5c9a36306c86414a670d50"
|
||||
validation: [sha256]
|
||||
description: "Master System BIOS (Europe), same binary as US"
|
||||
@@ -166,7 +159,6 @@ files:
|
||||
system: mega-cd
|
||||
region: [north-america]
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "fb477cdbf94c84424c2feca4fe40656d85393fe7b7b401911b45ad2eb991258c"
|
||||
validation: [sha256]
|
||||
description: "Mega CD / Sega CD BIOS (US)"
|
||||
@@ -176,7 +168,6 @@ files:
|
||||
system: mega-cd
|
||||
region: [japan]
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "7133fc2dd2fe5b7d0acd53a5f10f3d00b5d31270239ad20d74ef32393e24af88"
|
||||
validation: [sha256]
|
||||
description: "Mega CD BIOS (Japan)"
|
||||
@@ -186,7 +177,6 @@ files:
|
||||
system: mega-cd
|
||||
region: [europe]
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "fe608a2a07676a23ab5fd5eee2f53c9e2526d69a28aa16ccd85c0ec42e6933cb"
|
||||
validation: [sha256]
|
||||
description: "Mega CD BIOS (Europe)"
|
||||
@@ -197,7 +187,6 @@ files:
|
||||
system: mega-ld
|
||||
region: [north-america]
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "e89b5a319f66406611ec82fe5c4aa6827c175a05135bd7bd177366cba0465021"
|
||||
validation: [sha256]
|
||||
description: "LaserActive SEGA PAC BIOS (US), v1.04"
|
||||
@@ -207,7 +196,6 @@ files:
|
||||
system: mega-ld
|
||||
region: [japan]
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "dca942d977217f703d8d1c6eb1aeb6b32c78ecc421486bbb46c459d385161c94"
|
||||
validation: [sha256]
|
||||
description: "LaserActive SEGA PAC BIOS (Japan), v1.02"
|
||||
@@ -217,7 +205,6 @@ files:
|
||||
- name: MSX.ROM
|
||||
system: msx
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "413a2b601a94b3792e054be2439cc77a1819cceadbfa9542f88d51c7480f2ef0"
|
||||
validation: [sha256]
|
||||
description: "MSX BIOS ROM (Japan)"
|
||||
@@ -227,7 +214,6 @@ files:
|
||||
- name: MSX2.ROM
|
||||
system: msx2
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "0c672d86ead61a97f49a583b88b7c1905da120645cd44f0c9f2baf4f4631e0b1"
|
||||
validation: [sha256]
|
||||
description: "MSX2 main BIOS ROM (Japan)"
|
||||
@@ -236,7 +222,6 @@ files:
|
||||
- name: MSX2EXT.ROM
|
||||
system: msx2
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "6c6f421a10c428d960b7ecc990f99af1c638147f747bddca7b0bf0e2ab738300"
|
||||
validation: [sha256]
|
||||
description: "MSX2 sub ROM (Japan)"
|
||||
@@ -246,7 +231,6 @@ files:
|
||||
- name: neo-epo.bin
|
||||
system: neo-geo
|
||||
required: true
|
||||
mode: standalone
|
||||
description: "Neo Geo AES BIOS. Accepts neogeo.zip (extracts neo-epo.bin) or direct file. Byte-swapped on load."
|
||||
source_ref: "desktop-ui/emulator/neo-geo-aes.cpp:14, mia/system/neo-geo-aes.cpp:16"
|
||||
|
||||
@@ -254,7 +238,6 @@ files:
|
||||
- name: sp-45.sp1
|
||||
system: neo-geo
|
||||
required: true
|
||||
mode: standalone
|
||||
description: "Neo Geo MVS BIOS. Accepts neogeo.zip (extracts sp-45.sp1) or direct file. Byte-swapped on load."
|
||||
source_ref: "desktop-ui/emulator/neo-geo-mvs.cpp:15, mia/system/neo-geo-mvs.cpp:16"
|
||||
|
||||
@@ -262,7 +245,6 @@ files:
|
||||
- name: ngp_bios.rom
|
||||
system: neo-geo-pocket
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "0293555b21c4fac516d25199df7809b26beeae150e1d4504a050db32264a6ad7"
|
||||
validation: [sha256]
|
||||
description: "Neo Geo Pocket BIOS"
|
||||
@@ -272,7 +254,6 @@ files:
|
||||
- name: ngpc_bios.rom
|
||||
system: neo-geo-pocket-color
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "8fb845a2f71514cec20728e2f0fecfade69444f8d50898b92c2259f1ba63e10d"
|
||||
validation: [sha256]
|
||||
description: "Neo Geo Pocket Color BIOS"
|
||||
@@ -283,7 +264,6 @@ files:
|
||||
system: nintendo-64dd
|
||||
region: [japan]
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "806400ec0df94b0755de6c5b8249d6b6a9866124c5ddbdac198bde22499bfb8b"
|
||||
validation: [sha256]
|
||||
description: "Nintendo 64DD IPL ROM (Japan retail)"
|
||||
@@ -293,7 +273,6 @@ files:
|
||||
system: nintendo-64dd
|
||||
region: [north-america]
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "e9fec87a45fba02399e88064b9e2f8cf0f2106e351c58279a87f05da5bc984ad"
|
||||
validation: [sha256]
|
||||
description: "Nintendo 64DD IPL ROM (US dev kit)"
|
||||
@@ -302,7 +281,6 @@ files:
|
||||
- name: 64dd_ipl_DEV.bin
|
||||
system: nintendo-64dd
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "9c2962a8b994a29e4cd04b3a6e4ed730a751414655ab6a9799ebf5fc08b79d44"
|
||||
validation: [sha256]
|
||||
description: "Nintendo 64DD IPL ROM (development)"
|
||||
@@ -312,7 +290,6 @@ files:
|
||||
- name: syscard1.pce
|
||||
system: pc-engine-cd
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "afe9f27f91ac918348555b86298b4f984643eafa2773196f2c5441ea84f0c3bb"
|
||||
validation: [sha256]
|
||||
description: "PC Engine CD-ROM2 System Card v1.0 (Japan). Also used by PC Engine LD."
|
||||
@@ -321,7 +298,6 @@ files:
|
||||
- name: syscard3.pce
|
||||
system: pc-engine-cd
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "e11527b3b96ce112a037138988ca72fd117a6b0779c2480d9e03eaebece3d9ce"
|
||||
validation: [sha256]
|
||||
description: "Super CD-ROM2 System Card v3.0 (Japan). Also used by SuperGrafx CD as Arcade Card."
|
||||
@@ -330,7 +306,6 @@ files:
|
||||
- name: syscard3u.pce
|
||||
system: pc-engine-cd
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "cadac2725711b3c442bcf237b02f5a5210c96f17625c35fa58f009e0ed39e4db"
|
||||
validation: [sha256]
|
||||
description: "TurboGrafx-CD Super System Card v3.0 (US)"
|
||||
@@ -339,7 +314,6 @@ files:
|
||||
- name: games_express.pce
|
||||
system: pc-engine-cd
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "4b86bb96a48a4ca8375fc0109631d0b1d64f255a03b01de70594d40788ba6c3d"
|
||||
validation: [sha256]
|
||||
description: "Games Express CD Card (Japan). Also used by PC Engine LD."
|
||||
@@ -349,7 +323,6 @@ files:
|
||||
- name: pac-n10.pce
|
||||
system: pc-engine-ld
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "0e87a3385a27b3a4cac51934819b7eefa5b3d690768d2495633838488cd0e2e4"
|
||||
validation: [sha256]
|
||||
description: "NEC PAC-N10 LaserActive module (US)"
|
||||
@@ -358,7 +331,6 @@ files:
|
||||
- name: pac-n1.pce
|
||||
system: pc-engine-ld
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "459325690a458baebd77495c91e37c4dddfdd542ba13a821ce954e5bb245627f"
|
||||
validation: [sha256]
|
||||
description: "NEC PAC-N1 LaserActive module (Japan)"
|
||||
@@ -367,7 +339,6 @@ files:
|
||||
- name: pce-lp1.pce
|
||||
system: pc-engine-ld
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "3f43b3b577117d84002e99cb0baeb97b0d65b1d70b4adadc68817185c6a687f0"
|
||||
validation: [sha256]
|
||||
description: "NEC PCE-LP1 LaserActive module (Japan)"
|
||||
@@ -377,7 +348,6 @@ files:
|
||||
- name: scph5501.bin
|
||||
system: sony-playstation
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "11052b6499e466bbf0a709b1f9cb6834a9418e66680387912451e971cf8a1fef"
|
||||
validation: [sha256]
|
||||
description: "PlayStation BIOS (US)"
|
||||
@@ -386,7 +356,6 @@ files:
|
||||
- name: scph5500.bin
|
||||
system: sony-playstation
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "9c0421858e217805f4abe18698afea8d5aa36ff0727eb8484944e00eb5e7eadb"
|
||||
validation: [sha256]
|
||||
description: "PlayStation BIOS (Japan)"
|
||||
@@ -395,7 +364,6 @@ files:
|
||||
- name: scph5502.bin
|
||||
system: sony-playstation
|
||||
required: true
|
||||
mode: standalone
|
||||
sha256: "1faaa18fa820a0225e488d9f086296b8e6c46df739666093987ff7d8fd352c09"
|
||||
validation: [sha256]
|
||||
description: "PlayStation BIOS (Europe)"
|
||||
@@ -406,7 +374,6 @@ files:
|
||||
system: saturn
|
||||
region: [north-america]
|
||||
required: true
|
||||
mode: standalone
|
||||
description: "Sega Saturn BIOS (US)"
|
||||
source_ref: "desktop-ui/emulator/saturn.cpp:14"
|
||||
|
||||
@@ -414,7 +381,6 @@ files:
|
||||
system: saturn
|
||||
region: [japan]
|
||||
required: true
|
||||
mode: standalone
|
||||
description: "Sega Saturn BIOS (Japan)"
|
||||
source_ref: "desktop-ui/emulator/saturn.cpp:15"
|
||||
|
||||
@@ -422,7 +388,6 @@ files:
|
||||
system: saturn
|
||||
region: [europe]
|
||||
required: true
|
||||
mode: standalone
|
||||
description: "Sega Saturn BIOS (Europe)"
|
||||
source_ref: "desktop-ui/emulator/saturn.cpp:16"
|
||||
|
||||
@@ -430,7 +395,6 @@ files:
|
||||
- name: SGB1.sfc
|
||||
system: super-famicom
|
||||
required: false
|
||||
mode: standalone
|
||||
category: game_data
|
||||
description: "Super Game Boy cartridge ROM. Loaded via CLI as SFC cartridge alongside GB game."
|
||||
source_ref: "EmuDeck emuDeckares.sh (launcher)"
|
||||
@@ -438,7 +402,6 @@ files:
|
||||
- name: SGB2.sfc
|
||||
system: super-famicom
|
||||
required: false
|
||||
mode: standalone
|
||||
category: game_data
|
||||
description: "Super Game Boy 2 cartridge ROM. Loaded via CLI as SFC cartridge alongside GB game."
|
||||
source_ref: "EmuDeck emuDeckares.sh (launcher)"
|
||||
@@ -446,7 +409,6 @@ files:
|
||||
- name: STBIOS.bin
|
||||
system: super-famicom
|
||||
required: false
|
||||
mode: standalone
|
||||
category: game_data
|
||||
description: "SuFami Turbo adapter BIOS. Loaded via CLI as SFC cartridge alongside SuFami games."
|
||||
source_ref: "EmuDeck emuDeckares.sh (launcher)"
|
||||
@@ -454,7 +416,6 @@ files:
|
||||
- name: BS-X.bin
|
||||
system: super-famicom
|
||||
required: false
|
||||
mode: standalone
|
||||
category: game_data
|
||||
description: "Satellaview BS-X Town cartridge ROM. Loaded via CLI as SFC cartridge for BS games."
|
||||
source_ref: "EmuDeck emuDeckares.sh (launcher)"
|
||||
@@ -272,6 +272,8 @@ files:
|
||||
standalone_path: resources/GameIndex.yaml
|
||||
required: false
|
||||
bundled: true
|
||||
sha1: 72bfdf91fa11a86e2810a7c167cdcf11e20418a8
|
||||
size: 2690355
|
||||
description: "Game database"
|
||||
note: >-
|
||||
Read from the resources folder, keyed by serial, carrying the per-game
|
||||
@@ -297,6 +299,8 @@ files:
|
||||
standalone_path: resources/RedumpDatabase.yaml
|
||||
required: false
|
||||
bundled: true
|
||||
sha1: bf2c73d668cd671df8adfe2ec3c7074e8ba9176a
|
||||
size: 1917242
|
||||
description: "Disc track hash database"
|
||||
note: >-
|
||||
Loaded on the first hash lookup and used to tell the user whether a dump
|
||||
@@ -308,6 +312,8 @@ files:
|
||||
standalone_path: resources/patches.zip
|
||||
required: false
|
||||
bundled: true
|
||||
sha1: f7d0f1606c87019f00109ebdf0f260299f0a72da
|
||||
size: 2007224
|
||||
description: "Game patch archive"
|
||||
note: >-
|
||||
Per-game pnach entries matched on serial and disc CRC. The patches and
|
||||
@@ -500,6 +506,7 @@ files:
|
||||
- name: cas.glsl
|
||||
path: pcsx2/resources/shaders/vulkan/cas.glsl
|
||||
standalone_path: resources/shaders/vulkan/cas.glsl
|
||||
sha1: "005cecf1a5e20b05407d55d0aad22cf81ad66c31"
|
||||
required: false
|
||||
bundled: true
|
||||
description: "Vulkan contrast adaptive sharpening shader"
|
||||
@@ -787,6 +794,8 @@ files:
|
||||
standalone_path: resources/sounds/achievements/unlock.wav
|
||||
required: false
|
||||
bundled: true
|
||||
sha1: da328a0a3074ec86fee2d6741bfc2e5a1f68d063
|
||||
size: 202702
|
||||
description: "Achievement unlock sound"
|
||||
source_ref: "pcsx2/Achievements.cpp:69, pcsx2/Achievements.cpp:1278-1284, pcsx2/Achievements.cpp:1581"
|
||||
|
||||
|
||||
@@ -38,8 +38,10 @@ files:
|
||||
system: nintendo-3ds
|
||||
required: false
|
||||
hle_fallback: true
|
||||
note: "embedded encrypted fallback if missing"
|
||||
source_ref: "src/core/hw/aes/key.cpp:283, src/common/common_paths.h:83"
|
||||
sha1: "5fab786695311433602028cd89898689c5df0898"
|
||||
md5: "cb52d323b13129a2f0bc3e3e911e567f"
|
||||
note: "embedded encrypted fallback if missing: default_keys_enc, AES-CBC with a zero key and IV; the hashes are those of the decrypted text without its PKCS#7 block"
|
||||
source_ref: "src/core/hw/aes/key.cpp:283-300, src/common/common_paths.h:83, src/core/hw/default_keys.h:4-5"
|
||||
|
||||
- name: shared_font.bin
|
||||
path: sysdata/shared_font.bin
|
||||
|
||||
@@ -56,8 +56,10 @@ files:
|
||||
system: nintendo-3ds
|
||||
required: false
|
||||
hle_fallback: true
|
||||
note: "AES key slots, common keys and NFC secrets; embedded encrypted blob used if missing"
|
||||
source_ref: "src/core/hw/aes/key.cpp:225-364, src/core/hw/aes/key.cpp:473-613"
|
||||
sha1: "5288772be438b86978a801e6dcb14228ad3a20af"
|
||||
md5: "4812e96097b7fc1bdd7b40366208b7a7"
|
||||
note: "AES key slots, common keys and NFC secrets; embedded encrypted blob used if missing: default_keys_enc, AES-CBC with a zero key and IV, the hashes are those of the decrypted text"
|
||||
source_ref: "src/core/hw/aes/key.cpp:225-364, src/core/hw/aes/key.cpp:473-613, src/core/hw/default_keys.h:11"
|
||||
|
||||
- name: aes_keys.txt
|
||||
path: sysdata/aes_keys.txt
|
||||
|
||||
@@ -101,7 +101,6 @@ files:
|
||||
|
||||
- name: "psxonpsp660.bin"
|
||||
description: "PSP embedded PS1 BIOS (region-free override)"
|
||||
region: [world]
|
||||
required: false
|
||||
size: 524288
|
||||
sha1: "96880d1ca92a016ff054be5159bb06fe03cb4e14"
|
||||
@@ -114,7 +113,6 @@ files:
|
||||
|
||||
- name: "ps1_rom.bin"
|
||||
description: "PS3 embedded PS1 BIOS, first 512KB extracted (region-free override)"
|
||||
region: [world]
|
||||
required: false
|
||||
sha1: "c40146361eb8cf670b19fdc9759190257803cab7"
|
||||
md5: "81bbe60ba7a3d1cea1d48c14cbcc647b"
|
||||
@@ -126,7 +124,6 @@ files:
|
||||
|
||||
- name: "openbios.bin"
|
||||
description: "OpenBIOS (open-source PS1 HLE BIOS, region-free override)"
|
||||
region: [world]
|
||||
required: false
|
||||
size: 524288
|
||||
mode: libretro
|
||||
|
||||
@@ -14,7 +14,7 @@ notes: |
|
||||
Libretro port of Mednafen's Virtual Boy emulation module.
|
||||
No external BIOS or firmware files. The Virtual Boy has no boot
|
||||
ROM; the V810 CPU executes directly from the game ROM mapped at
|
||||
0x07000000. Load() in libretro.cpp:1833 takes only ROM data.
|
||||
0x07000000. Load() in libretro.cpp:1810 takes only ROM data.
|
||||
Upstream Mednafen supports an optional vb.pal palette file
|
||||
(Documentation/vb.html); the libretro port handles palette via
|
||||
core options instead.
|
||||
|
||||
@@ -406,7 +406,6 @@ files:
|
||||
|
||||
- name: KANJI.rom
|
||||
path: "Machines/Shared Roms/KANJI.rom"
|
||||
region: [japan]
|
||||
size: 262144
|
||||
required: false
|
||||
note: "Kanji font ROM (256 KB). Used by MSX2+, turboR, and Japanese MSX2 machines."
|
||||
@@ -414,7 +413,6 @@ files:
|
||||
|
||||
- name: MSXKANJI.rom
|
||||
path: "Machines/Shared Roms/MSXKANJI.rom"
|
||||
region: [japan]
|
||||
size: 32768
|
||||
required: false
|
||||
note: "MSX-Kanji driver ROM. Used by MSX2+, turboR, and Japanese MSX2 for kanji display."
|
||||
@@ -456,7 +454,6 @@ files:
|
||||
|
||||
- name: HANGUL.rom
|
||||
path: "Machines/Shared Roms/HANGUL.rom"
|
||||
region: [south-korea]
|
||||
size: 131072
|
||||
required: false
|
||||
note: "Korean Hangul font ROM (128 KB)."
|
||||
|
||||
+6
-5
@@ -14,13 +14,14 @@ notes: >
|
||||
Doom 3 source port based on dhewm3 (GPL Doom 3 engine). The core accepts
|
||||
.pk4 extensions (retro_get_system_info sets valid_extensions = "pk4").
|
||||
Content is loaded directly from the .pk4 file path - the engine extracts
|
||||
the grandparent directory as fs_basepath (libretro.cpp:1097,1135-1136
|
||||
the grandparent directory as fs_basepath (libretro.cpp:2381,2449-2450
|
||||
via extract_directory called twice on info->path) and expects the standard
|
||||
Doom 3 directory layout with base/ containing pak000.pk4 through pak008.pk4.
|
||||
BASE_GAMEDIR is hardcoded to "base" (Licensee.h:58). The boom3_xp variant
|
||||
compiles with _D3XP defined, which passes "+set fs_game d3xp" at startup
|
||||
(libretro.cpp:538-544) to load the Resurrection of Evil expansion from a
|
||||
d3xp/ subdirectory alongside base/. The filesystem code (FileSystem.cpp:2125)
|
||||
BASE_GAMEDIR is hardcoded to "base" (Licensee.h:58). One binary serves both
|
||||
games: content in a directory named d3xp, or the doom_game core option,
|
||||
passes "+set fs_game d3xp" (libretro.cpp:1635-1643, 2384-2405) to load the
|
||||
Resurrection of Evil expansion from a d3xp/ subdirectory alongside base/.
|
||||
The filesystem code (FileSystem.cpp:2207)
|
||||
scans for .pk4 files in the game directory and loads them in order, with
|
||||
higher-numbered paks overriding lower ones. The core requires OpenGL
|
||||
(RETRO_ENVIRONMENT_SET_HW_RENDER) and XRGB8888 pixel format. All required
|
||||
|
||||
@@ -36,7 +36,7 @@ files:
|
||||
mode: standalone
|
||||
size: 256
|
||||
note: "Original Nintendo DMG boot ROM"
|
||||
source_ref: "src/gb.rs:1516, src/data.rs:14"
|
||||
source_ref: "src/gb.rs:1416, src/data.rs:14"
|
||||
|
||||
- name: sgb_boot.bin
|
||||
system: nintendo-gb
|
||||
@@ -45,7 +45,7 @@ files:
|
||||
mode: standalone
|
||||
size: 256
|
||||
note: "Super Game Boy boot ROM"
|
||||
source_ref: "src/gb.rs:1517, src/data.rs:29"
|
||||
source_ref: "src/gb.rs:1417, src/data.rs:29"
|
||||
|
||||
- name: dmg_bootix.bin
|
||||
system: nintendo-gb
|
||||
@@ -54,7 +54,7 @@ files:
|
||||
mode: standalone
|
||||
size: 256
|
||||
note: "Open-source DMG boot ROM from Bootix (default DMG)"
|
||||
source_ref: "src/gb.rs:1518, src/data.rs:44"
|
||||
source_ref: "src/gb.rs:1418, src/data.rs:44"
|
||||
|
||||
- name: mgb_bootix.bin
|
||||
system: nintendo-gb
|
||||
@@ -63,7 +63,7 @@ files:
|
||||
mode: standalone
|
||||
size: 256
|
||||
note: "Open-source MGB (Pocket) boot ROM from Bootix"
|
||||
source_ref: "src/gb.rs:1519, src/data.rs:59"
|
||||
source_ref: "src/gb.rs:1419, src/data.rs:59"
|
||||
|
||||
- name: cgb_boot.bin
|
||||
system: nintendo-gbc
|
||||
@@ -81,4 +81,4 @@ files:
|
||||
mode: standalone
|
||||
size: 2304
|
||||
note: "Custom open-source CGB boot ROM (default CGB)"
|
||||
source_ref: "src/gb.rs:1484, src/data.rs:177"
|
||||
source_ref: "src/gb.rs:1421, src/data.rs:177"
|
||||
@@ -24,30 +24,26 @@ mode: standalone
|
||||
files:
|
||||
- name: "prod.keys"
|
||||
required: true
|
||||
path: "switch/"
|
||||
mode: standalone
|
||||
path: "switch/prod.keys"
|
||||
note: "Production keys for NCA decryption (master, key area, header, titlekek)"
|
||||
source_ref: "src/core/crypto/key_manager.cpp:655-656"
|
||||
|
||||
- name: "title.keys"
|
||||
required: false
|
||||
path: "switch/"
|
||||
mode: standalone
|
||||
path: "switch/title.keys"
|
||||
note: "Per-title encryption keys (rights_id to titlekey mappings)"
|
||||
source_ref: "src/core/crypto/key_manager.cpp:659-660"
|
||||
|
||||
- name: "console.keys"
|
||||
required: false
|
||||
path: "switch/"
|
||||
mode: standalone
|
||||
path: "switch/console.keys"
|
||||
note: "Console-specific keys (BIS, SD seed)"
|
||||
source_ref: "src/core/crypto/key_manager.cpp:661-662"
|
||||
|
||||
- name: "key_retail.bin"
|
||||
required: false
|
||||
path: "switch/"
|
||||
path: "switch/key_retail.bin"
|
||||
size: 160
|
||||
mode: standalone
|
||||
note: "Amiibo decryption keys (two InternalKey structs, 0x50 bytes each)"
|
||||
source_ref: "src/core/hle/service/nfc/common/amiibo_crypto.cpp:274-292"
|
||||
|
||||
|
||||
+100
-118
File diff suppressed because it is too large.
Load diff
@@ -28,11 +28,11 @@ notes: |
|
||||
- ROMEXT[0] (upper ROM slot 0, 16KB): second half of cpc6128_bin (BASIC)
|
||||
- ROMEXT[7] (upper ROM slot 7, 16KB): romdisc_bin (AMSDOS)
|
||||
|
||||
Called from HardResetCPC() (crocods-core/platform.c:1009-1020) using
|
||||
Called from HardResetCPC() (crocods-core/platform.c:1024-1035) using
|
||||
the extern byte arrays directly. No filesystem ROM loading exists in
|
||||
the libretro path.
|
||||
|
||||
A Multiface ROM loader exists (crocods-core/multiface.c:51-61) that
|
||||
A Multiface ROM loader exists (crocods-core/multiface.c:53-64) that
|
||||
reads LocRomMulti via fopen(), but InitMultiface() is never called
|
||||
from the libretro build or platform.c. Dead code in libretro context.
|
||||
|
||||
@@ -45,7 +45,7 @@ files: []
|
||||
|
||||
platform_details:
|
||||
bios_mapping:
|
||||
source_ref: "crocods-core/vga.c:185-200, crocods-core/platform.c:1009-1020"
|
||||
source_ref: "crocods-core/vga.c:185-200, crocods-core/platform.c:1024-1035"
|
||||
note: |
|
||||
All ROMs are embedded. InitMemCPC() copies cpc6128_bin and romdisc_bin
|
||||
into ROMINF and ROMEXT arrays via memcpy. No filesystem lookup occurs.
|
||||
|
||||
@@ -135,8 +135,8 @@ files:
|
||||
required: false
|
||||
hle_fallback: true
|
||||
size: 8192
|
||||
validation: [size]
|
||||
known_hash_adler32: "0x66f334fe"
|
||||
validation: [size, adler32]
|
||||
known_hash_adler32: ["0x66f334fe", "0x128ea7a2"]
|
||||
adler32_byteswap: true
|
||||
description: "DSP instruction ROM"
|
||||
note: "DSP LLE only, and LLE aborts when the file is absent or not 8192 bytes. The adler32 is taken over the byte-swapped image and the value here is the Nintendo pair; five replacement pairs are also accepted."
|
||||
@@ -147,12 +147,12 @@ files:
|
||||
required: false
|
||||
hle_fallback: true
|
||||
size: 4096
|
||||
validation: [size]
|
||||
known_hash_adler32: "0xf3b93527"
|
||||
validation: [size, adler32]
|
||||
known_hash_adler32: ["0xf3b93527", "0xa4a575f5"]
|
||||
adler32_byteswap: true
|
||||
description: "DSP coefficient ROM"
|
||||
note: "Read by DSP LLE alongside the instruction ROM, and by the AX ucode under HLE for polyphase resampling, which drops any file that is not 0x1000 bytes and plays on without it."
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:109, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:120-152, Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp:45-70, Source/Core/Core/DSP/DSPCore.h:49"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:109, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:120-152, Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp:45-70, Source/Core/Core/DSP/DSPCore.h:49, Source/Core/Core/DSP/DSPCore.cpp:38-105"
|
||||
|
||||
- name: codehandler.bin
|
||||
path: null
|
||||
|
||||
@@ -171,8 +171,8 @@ files:
|
||||
required: false
|
||||
hle_fallback: true
|
||||
size: 8192
|
||||
validation: [size]
|
||||
known_hash_adler32: "0x66f334fe"
|
||||
validation: [size, adler32]
|
||||
known_hash_adler32: ["0x66f334fe", "0xe789b5a5"]
|
||||
adler32_byteswap: true
|
||||
description: "DSP instruction ROM"
|
||||
note: "DSP LLE only, and a file that is absent or not 8192 bytes fails initialisation, which aborts the emulation thread. The adler32 is taken over the byte-swapped image and the value here is the Nintendo pair; six replacement pairs are also accepted."
|
||||
@@ -183,12 +183,12 @@ files:
|
||||
required: false
|
||||
hle_fallback: true
|
||||
size: 4096
|
||||
validation: [size]
|
||||
known_hash_adler32: "0xf3b93527"
|
||||
validation: [size, adler32]
|
||||
known_hash_adler32: ["0xf3b93527", "0xa4a575f5"]
|
||||
adler32_byteswap: true
|
||||
description: "DSP coefficient ROM"
|
||||
note: "Read by DSP LLE alongside the instruction ROM, and by the AX ucode under HLE for polyphase resampling, which drops any file that is not 0x1000 bytes and plays on without it."
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:121, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:87-120, Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp:42-69, Source/Core/Core/DSP/DSPCore.h:58"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:121, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:87-120, Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp:42-69, Source/Core/Core/DSP/DSPCore.h:58, Source/Core/Core/DSP/DSPCore.cpp:28-102"
|
||||
|
||||
- name: codehandler.bin
|
||||
path: null
|
||||
|
||||
+11
-11
@@ -67,22 +67,22 @@ files:
|
||||
size: 8192
|
||||
required: false
|
||||
hle_fallback: true
|
||||
validation: [size]
|
||||
known_hash_adler32: "0x66f334fe"
|
||||
validation: [size, adler32]
|
||||
known_hash_adler32: ["0x66f334fe", "0xe789b5a5"]
|
||||
adler32_byteswap: true
|
||||
note: "DSP instruction ROM for LLE audio. Free replacement (v0.4) included"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:136, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:84-117"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:136, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:84-117, Source/Core/Core/DSP/DSPCore.cpp:28-102"
|
||||
|
||||
- name: "dsp_coef.bin"
|
||||
path: "GC/dsp_coef.bin"
|
||||
size: 4096
|
||||
required: false
|
||||
hle_fallback: true
|
||||
validation: [size]
|
||||
known_hash_adler32: "0xf3b93527"
|
||||
validation: [size, adler32]
|
||||
known_hash_adler32: ["0xf3b93527", "0xa4a575f5"]
|
||||
adler32_byteswap: true
|
||||
note: "DSP coefficient ROM for LLE audio and HLE polyphase resampling. Free replacement included"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:137, Source/Core/Core/DSP/DSPCore.cpp:32-33, Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp:55-62"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:137, Source/Core/Core/DSP/DSPCore.cpp:32-33, Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp:55-62, Source/Core/Core/DSP/DSPCore.cpp:28-102"
|
||||
|
||||
# -- GameCube Fonts --
|
||||
# Bundled free alternatives exist but have padding differences causing misplaced text.
|
||||
@@ -148,7 +148,7 @@ files:
|
||||
required: false
|
||||
hle_fallback: true
|
||||
note: "BootMii NAND backup. Can be imported to populate Wii NAND with channels, saves, system menu"
|
||||
source_ref: "Source/Core/DiscIO/NANDImporter.cpp:26-39,42-89"
|
||||
source_ref: "Source/Core/DiscIO/NANDImporter.cpp:27-45,47-92"
|
||||
|
||||
- name: "keys.bin"
|
||||
path: null
|
||||
@@ -156,7 +156,7 @@ files:
|
||||
required: false
|
||||
hle_fallback: true
|
||||
note: "OTP/SEEPROM dump (Wii encryption keys). Needed if not appended to nand.bin for NAND import"
|
||||
source_ref: "Source/Core/DiscIO/NANDImporter.cpp:20, Source/Core/DiscIO/NANDImporter.cpp:82-94, Source/Core/DiscIO/NANDImporter.h:46"
|
||||
source_ref: "Source/Core/DiscIO/NANDImporter.cpp:20, Source/Core/DiscIO/NANDImporter.cpp:77-91, Source/Core/DiscIO/NANDImporter.h:35-38"
|
||||
|
||||
# -- Wii SD Card Image --
|
||||
- name: "WiiSD.raw"
|
||||
@@ -189,21 +189,21 @@ files:
|
||||
required: false
|
||||
hle_fallback: true
|
||||
note: "SSL client certificate. Auto-extracted from IOS13 content during NAND import"
|
||||
source_ref: "Source/Core/DiscIO/NANDImporter.cpp:239-323"
|
||||
source_ref: "Source/Core/DiscIO/NANDImporter.cpp:220-304"
|
||||
|
||||
- name: "clientcakey.pem"
|
||||
path: "Wii/clientcakey.pem"
|
||||
required: false
|
||||
hle_fallback: true
|
||||
note: "SSL client private key. Auto-extracted from IOS13 content during NAND import"
|
||||
source_ref: "Source/Core/DiscIO/NANDImporter.cpp:275"
|
||||
source_ref: "Source/Core/DiscIO/NANDImporter.cpp:256"
|
||||
|
||||
- name: "rootca.pem"
|
||||
path: "Wii/rootca.pem"
|
||||
required: false
|
||||
hle_fallback: true
|
||||
note: "SSL root CA certificate. Auto-extracted from IOS13 content during NAND import"
|
||||
source_ref: "Source/Core/DiscIO/NANDImporter.cpp:276"
|
||||
source_ref: "Source/Core/DiscIO/NANDImporter.cpp:257"
|
||||
|
||||
# -- Realtek Bluetooth firmware (Wiimote passthrough) --
|
||||
# Required for real Wiimote connectivity via USB Bluetooth adapters with Realtek chipsets.
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
emulator: DOSBox Pure Unleashed
|
||||
type: standalone
|
||||
core_classification: official_port
|
||||
source: "https://github.com/schellingb/dosbox-pure-unleashed"
|
||||
upstream: "https://github.com/schellingb/dosbox-pure"
|
||||
source: "https://codeberg.org/schelling/dosbox-pure-unleashed"
|
||||
upstream: "https://codeberg.org/schelling/dosbox-pure"
|
||||
source_commit: "4a11412248ca4c862751a7d9e6818023795031e9"
|
||||
upstream_commit: "7f6e8fb7385fa446d1444d671063268520bf9b54"
|
||||
logo: "https://raw.githubusercontent.com/schellingb/dosbox-pure-unleashed/main/images/logo.png"
|
||||
|
||||
@@ -16,7 +16,7 @@ notes: |
|
||||
ref: src/gui/midi_mt32.cpp:35,51-66
|
||||
MUNT identifies ROMs by SHA1+size (libretro/deps/munt/mt32emu/src/ROMInfo.cpp:171-180).
|
||||
FluidSynth reads .sf2/.sf3/.dls/.gig from system/soundfonts/.
|
||||
ref: libretro/src/libretro.cpp:1112-1123
|
||||
ref: libretro/src/libretro.cpp:1099-1110
|
||||
BASSMIDI reads .sf2/.sfz from system/soundfonts/, requires BASS +
|
||||
BASSMIDI shared libs in system dir (dlopen'd at runtime).
|
||||
ref: libretro/src/midi_bassmidi.cpp:232-254
|
||||
|
||||
+87
-14
@@ -2,41 +2,54 @@ emulator: DOSBox Pure
|
||||
type: standalone + libretro
|
||||
core_classification: enhanced_fork
|
||||
source: "https://github.com/libretro/dosbox-pure"
|
||||
upstream: "https://github.com/schellingb/dosbox-pure"
|
||||
upstream: "https://codeberg.org/schelling/dosbox-pure"
|
||||
logo: "https://raw.githubusercontent.com/schellingb/dosbox-pure/main/images/logo.png"
|
||||
profiled_date: "2026-03-23"
|
||||
source_commit: "a4a0bab7f8931433588f2fcad9045c85b277373d"
|
||||
core_version: "1.0-preview5"
|
||||
source_commit: "cdaea10ce8cac231bc341ca05d4c5e4e5fe0fbd5"
|
||||
core_version: "1.0-preview7"
|
||||
display_name: "DOS (DOSBox-Pure)"
|
||||
cores: [dosbox_pure]
|
||||
systems: [dos]
|
||||
verification: sha1
|
||||
notes: |
|
||||
No BIOS required. MT-32 and SoundFont support is optional for MIDI music.
|
||||
No BIOS required. MT-32, Sound Canvas and SoundFont support is optional for
|
||||
MIDI music.
|
||||
|
||||
ROM scanning (both modes):
|
||||
Recursive scan of system directory for *_CONTROL.ROM and *.SF2/*.SF3.
|
||||
ref: dosbox_pure_libretro.cpp:1399-1410
|
||||
MT-32 requires matched pair: *_CONTROL.ROM + *_PCM.ROM (PCM name derived
|
||||
from CONTROL name by replacing CONTROL with PCM, preserving case).
|
||||
ref: midi_mt32.h:189-199
|
||||
ref: src/gui/midi_mt32.h:189-199
|
||||
ZIP archives also supported — scanned for files by size (65536/131072 =
|
||||
control, 524288/1048576 = PCM), not by name.
|
||||
ref: midi_mt32.h:160-166
|
||||
Files can also be on mounted C: drive (DOSBOX.SF2, MT32_CONTROL.ROM).
|
||||
ref: dosbox_pure_libretro.cpp:2803-2805
|
||||
ref: src/gui/midi_mt32.h:160-166
|
||||
Files can also be on mounted C: drive (DOSBOX.SF2, MT32_CONTROL.ROM,
|
||||
ROM1.BIN).
|
||||
ref: dosbox_pure_libretro.cpp:2806-2813
|
||||
Cache file DOSBoxPureMidiCache.txt written when scan >2s.
|
||||
ref: dosbox_pure_libretro.cpp:1425-1445
|
||||
ref: dosbox_pure_libretro.cpp:1449-1464
|
||||
|
||||
Sound Canvas: the scan also lists every file whose name ends in ROM1.BIN,
|
||||
WAVEROM1.BIN excepted, as "Sound Canvas SC-55". Selected, the Nuked-SC55
|
||||
driver opens it at exactly 32768 bytes, then ROM2, ROM2_ST, ROM_SM,
|
||||
WAVEROM1, WAVEROM2 and WAVEROM3 beside it, spelled with the capitalization
|
||||
and extension of ROM1.BIN. Each file fills the slot its size names. Byte 67
|
||||
of ROM1 selects the model, SC-55mkII/SC-55st, SC-55/SC-155, CM-300/SCC-1,
|
||||
JV-880 or SCB-55, and the sizes the other ROMs must have. The driver does
|
||||
not open without ROM1 and ROM2.
|
||||
ref: dosbox_pure_libretro.cpp:1405, src/gui/midi_sc55.h:38-47,
|
||||
src/gui/midi_sc55.h:71-95, src/gui/midi_sc55.h:97-134
|
||||
|
||||
Bundled MUNT (header-only mt32emu.h) for MT-32 emulation.
|
||||
SHA1+size validation at load: unrecognized ROMs rejected (Synth::open fails).
|
||||
ref: mt32emu.h:2982-2988,3016-3019,5183-5187
|
||||
ref: src/gui/mt32emu.h:2982-2988,3016-3019,5183-5187
|
||||
12 full control ROMs + 2 PCM ROMs supported (no split ROMs in this MUNT).
|
||||
TinySoundFont (tsf.h) for SF2/SF3 playback.
|
||||
No firmware entries in .info file — all MIDI files optional.
|
||||
|
||||
DBP_STANDALONE build mode exists (same MIDI logic, different I/O layer).
|
||||
ref: dosbox_pure_libretro.cpp:81,1590,2302
|
||||
ref: dosbox_pure_libretro.cpp:81,1588,2302
|
||||
|
||||
files:
|
||||
# -- MT-32 Control ROMs (64 KB) --
|
||||
@@ -168,7 +181,7 @@ files:
|
||||
note: >
|
||||
accepted by every MT-32 control ROM, v1.x and v2.x. Each control ROM
|
||||
fixes the PCM size it accepts through its pcmCount: 128 requires this
|
||||
524288 byte image. ref: mt32emu.h:2586-2598,3167,3025
|
||||
524288 byte image. ref: src/gui/mt32emu.h:2586-2598,3167,3025
|
||||
|
||||
- name: "CM32L_PCM.ROM"
|
||||
description: "CM-32L/CM-64/LAPC-I PCM ROM"
|
||||
@@ -183,7 +196,7 @@ files:
|
||||
accepted by the CM-32L and CM-32LN control ROMs, which carry pcmCount
|
||||
256 and require this 1048576 byte image. The alias covers the name
|
||||
derived from CM32LN_CONTROL.ROM.
|
||||
ref: mt32emu.h:2586-2598,3167,3025, midi_mt32.h:194-195
|
||||
ref: src/gui/mt32emu.h:2586-2598,3167,3025, src/gui/midi_mt32.h:194-195
|
||||
|
||||
# -- General MIDI SoundFont --
|
||||
|
||||
@@ -191,8 +204,68 @@ files:
|
||||
description: "General MIDI SoundFont (any .sf2/.sf3 accepted)"
|
||||
required: false
|
||||
hle_fallback: true
|
||||
source_ref: "dosbox_pure_libretro.cpp:1410 (scan classifies .SF* as a SoundFont), dosbox_pure_libretro.cpp:2492-2495 (path taken from the system directory), dosbox_pure_libretro.cpp:2803-2805 (auto-detected on the mounted C: drive)"
|
||||
source_ref: "dosbox_pure_libretro.cpp:1405 (scan classifies .SF* as a SoundFont), dosbox_pure_libretro.cpp:2495-2499 (path taken from the system directory), dosbox_pure_libretro.cpp:2806-2813 (auto-detected on the mounted C: drive)"
|
||||
note: >
|
||||
Any .SF2 or .SF3 file in the system directory works. The core lists all
|
||||
found SoundFonts in the MIDI config dropdown. DOSBOX.SF2 is the conventional
|
||||
name and is also auto-detected when placed inside game content on C: drive.
|
||||
|
||||
# -- Roland SC-55 family ROMs (Nuked-SC55 driver) --
|
||||
|
||||
- name: "ROM1.BIN"
|
||||
path: "SC-55/ROM1.BIN"
|
||||
aliases: ["rom1.bin"]
|
||||
description: "SC-55 family program ROM 1"
|
||||
required: false
|
||||
size: 32768
|
||||
validation: [size]
|
||||
source_ref: "dosbox_pure_libretro.cpp:1405, src/gui/midi_sc55.h:71-75, src/gui/midi_sc55.h:97-101"
|
||||
note: >-
|
||||
Any name ending in ROM1.BIN anywhere under the system directory is
|
||||
listed; byte 67 selects the emulated model.
|
||||
|
||||
- name: "ROM2.BIN"
|
||||
path: "SC-55/ROM2.BIN"
|
||||
aliases: ["rom2.bin", "ROM2_ST.BIN", "rom2_st.bin"]
|
||||
description: "SC-55 family program ROM 2"
|
||||
required: false
|
||||
size: [262144, 524288]
|
||||
validation: [size]
|
||||
source_ref: "src/gui/midi_sc55.h:41, src/gui/midi_sc55.h:78-93, src/gui/midi_sc55.h:95"
|
||||
note: "The driver does not open without ROM1 and ROM2. ROM2_ST fills the same slot when ROM2 did not."
|
||||
|
||||
- name: "ROM_SM.BIN"
|
||||
path: "SC-55/ROM_SM.BIN"
|
||||
aliases: ["rom_sm.bin"]
|
||||
description: "SC-55mkII/SC-55st sub-MCU ROM"
|
||||
required: false
|
||||
size: 4096
|
||||
validation: [size]
|
||||
source_ref: "src/gui/midi_sc55.h:42, src/gui/midi_sc55.h:78-93, src/gui/midi_sc55.h:113-116"
|
||||
|
||||
- name: "WAVEROM1.BIN"
|
||||
path: "SC-55/WAVEROM1.BIN"
|
||||
aliases: ["waverom1.bin"]
|
||||
description: "SC-55 family wave ROM 1"
|
||||
required: false
|
||||
size: [1048576, 2097152]
|
||||
validation: [size]
|
||||
source_ref: "src/gui/midi_sc55.h:43-45, src/gui/midi_sc55.h:78-93, src/gui/midi_sc55.h:111-134"
|
||||
|
||||
- name: "WAVEROM2.BIN"
|
||||
path: "SC-55/WAVEROM2.BIN"
|
||||
aliases: ["waverom2.bin"]
|
||||
description: "SC-55 family wave ROM 2"
|
||||
required: false
|
||||
size: [1048576, 2097152]
|
||||
validation: [size]
|
||||
source_ref: "src/gui/midi_sc55.h:43-45, src/gui/midi_sc55.h:78-93, src/gui/midi_sc55.h:111-134"
|
||||
|
||||
- name: "WAVEROM3.BIN"
|
||||
path: "SC-55/WAVEROM3.BIN"
|
||||
aliases: ["waverom3.bin"]
|
||||
description: "SC-55/SC-155/CM-300 wave ROM 3"
|
||||
required: false
|
||||
size: 1048576
|
||||
validation: [size]
|
||||
source_ref: "src/gui/midi_sc55.h:43-45, src/gui/midi_sc55.h:78-93, src/gui/midi_sc55.h:117-125"
|
||||
@@ -30,7 +30,7 @@ notes: |
|
||||
only by the two settings screens, which fall back to the real filename when it
|
||||
is null.
|
||||
ref: src/core/bios.h:41-43 (field declarations)
|
||||
ref: src/duckstation-qt/biossettingswidget.cpp:149, src/core/fullscreenui_settings.cpp:3301
|
||||
ref: src/duckstation-qt/biossettingswidget.cpp:149, src/core/fullscreenui_settings.cpp:3281
|
||||
Lower priority = preferred. PS2 deprioritized (>= 100) for dynamic fast boot.
|
||||
Late PAL deprioritized (>= 150) due to additional regional checks.
|
||||
OpenBIOS detected by signature at offset 0x78, not by hash.
|
||||
|
||||
@@ -24,7 +24,7 @@ notes: |
|
||||
"embedded" when that fails. The system directory is still passed to SelectGame,
|
||||
but for the game data search, not for the engine package.
|
||||
ref: src/libretro/ecwolf_pk3_data.c, src/wl_iwad.cpp:664-672,
|
||||
src/libretro/libretro.cpp:1028-1030
|
||||
src/libretro/libretro.cpp:1009-1011
|
||||
|
||||
Standalone: ecwolf.pk3 searched in progdir (binary directory).
|
||||
ref: src/libretro/wl_main.cpp:1247 (progdir passed to SelectGame)
|
||||
|
||||
+5
-10
@@ -27,37 +27,32 @@ mode: standalone
|
||||
files:
|
||||
- name: "prod.keys"
|
||||
required: true
|
||||
path: "switch/"
|
||||
mode: standalone
|
||||
path: "switch/prod.keys"
|
||||
note: "Production keys for NCA decryption (master, key area, header, titlekek)"
|
||||
source_ref: "src/core/crypto/key_manager.cpp:574-575, 853"
|
||||
|
||||
- name: "dev.keys"
|
||||
required: false
|
||||
path: "switch/"
|
||||
mode: standalone
|
||||
path: "switch/dev.keys"
|
||||
note: "Development-unit keys, read instead of prod.keys when use_dev_keys is set"
|
||||
source_ref: "src/core/crypto/key_manager.cpp:570-571, 852"
|
||||
|
||||
- name: "title.keys"
|
||||
required: false
|
||||
path: "switch/"
|
||||
mode: standalone
|
||||
path: "switch/title.keys"
|
||||
note: "Per-title encryption keys (rights_id to titlekey mappings)"
|
||||
source_ref: "src/core/crypto/key_manager.cpp:577-578, 850"
|
||||
|
||||
- name: "console.keys"
|
||||
required: false
|
||||
path: "switch/"
|
||||
mode: standalone
|
||||
path: "switch/console.keys"
|
||||
note: "Console-specific keys (BIS, SD seed)"
|
||||
source_ref: "src/core/crypto/key_manager.cpp:579-580"
|
||||
|
||||
- name: "key_retail.bin"
|
||||
required: false
|
||||
path: "switch/"
|
||||
path: "switch/key_retail.bin"
|
||||
size: 160
|
||||
mode: standalone
|
||||
note: "Amiibo decryption keys (two InternalKey structs, 0x50 bytes each)"
|
||||
source_ref: "src/core/hle/service/nfc/common/amiibo_crypto.cpp:281-302"
|
||||
|
||||
|
||||
+23
-23
@@ -8,9 +8,9 @@ upstream: "https://github.com/EKA2L1/EKA2L1"
|
||||
profiled_date: "2026-09-17"
|
||||
source_commit:
|
||||
standalone: "1fcfadbff7f8b81d8c17bc82d04b0c94d16803bf"
|
||||
libretro: "97ac3df6767f819c95405e4c86e7007d2e8ae61d"
|
||||
libretro: "1c49c1bcde3853273cd520a5360bff756f872e06"
|
||||
upstream_commit:
|
||||
libretro: "47b4ad76a6dd7d3656f52be86dfd5b9ff9a50c70"
|
||||
libretro: "11f5b6cd141c0884a130ee45743f1f5e17bb1783"
|
||||
core_version: "0.0.9"
|
||||
display_name: "Nokia - Symbian / N-Gage (EKA2L1)"
|
||||
cores:
|
||||
@@ -27,13 +27,13 @@ notes: |
|
||||
N-Gage 2.0 libraries and the game libraries from S60v1 to Symbian Belle. One
|
||||
tree builds the Qt desktop frontend, the Android and iOS applications, and a
|
||||
libretro core; the core lives on the libretro branch of the WizzardSK fork,
|
||||
merged from upstream at 47b4ad76. The tip of that branch, 7a40bb0d, merges
|
||||
upstream 0b7d9d67 and does not build the core: content.cpp still calls
|
||||
install_firmware and install_rom_with_optional_rpkg without the
|
||||
isolate_drives argument they take from that merge on. The libretro pin is the
|
||||
last revision of the branch that builds.
|
||||
rebased on the upstream revision named in its upstream.version, 11f5b6cd.
|
||||
content.cpp passes isolate_drives false to install_firmware and
|
||||
install_rom_with_optional_rpkg, so drives C, D and E are shared between
|
||||
devices.
|
||||
ref: README.md:20, README.md:29-32, src/emu/CMakeLists.txt:61-62,
|
||||
CMakeLists.txt:18, .gitlab-ci.yml:14-22, src/emu/libretro/src/content.cpp:96-100,
|
||||
CMakeLists.txt:18, .gitlab-ci.yml:17-25, src/emu/libretro/CMakeLists.txt:40-46,
|
||||
src/emu/libretro/src/content.cpp:178-184,
|
||||
src/emu/system/src/installation/rpkg.cpp:208-210,
|
||||
src/emu/system/src/installation/firmware.cpp:290-293
|
||||
|
||||
@@ -54,12 +54,12 @@ notes: |
|
||||
sw.txt or langsw.txt under z:\resource\versions, sw.txt or langsw.txt under
|
||||
z:\system\versions, or z:\system\install\sonyericssonp90xplatform.sis. That
|
||||
is the N-Gage case: its files are unpacked to drives/z/, the firmware code is
|
||||
read from them and the image is copied to SYM.ROM. The libretro pin tests
|
||||
z:\system\versions\sw.txt alone. Any other image needs the RPKG made by the
|
||||
Dumber tool beside it, which supplies the ROFS. A .vpl variant packing list
|
||||
names the .fpsx flash images of a factory firmware, from which the core image,
|
||||
the ROFS and the drive contents are extracted. The names of the dump files
|
||||
are free; SYM.ROM is the name the installers give the resident copy.
|
||||
read from them and the image is copied to SYM.ROM. Any other image needs
|
||||
the RPKG made by the Dumber tool beside it, which supplies the ROFS. A .vpl
|
||||
variant packing list names the .fpsx flash images of a factory firmware,
|
||||
from which the core image, the ROFS and the drive contents are extracted.
|
||||
The names of the dump files are free; SYM.ROM is the name the installers
|
||||
give the resident copy.
|
||||
ref: src/emu/system/src/installation/rpkg.cpp:44-68,
|
||||
src/emu/system/src/software.cpp:396-408,
|
||||
src/emu/system/src/installation/rpkg.cpp:132-199,
|
||||
@@ -97,11 +97,11 @@ notes: |
|
||||
<system>/eka2l1/libretro-content.txt against the UID it registered, or a
|
||||
.eka2l1 text shortcut naming the UID of an application already installed.
|
||||
supports_no_game is false. is_experimental is true in the .info.
|
||||
ref: src/emu/libretro/src/main.cpp:51-53, src/emu/libretro/src/state.cpp:12-17,
|
||||
src/emu/libretro/src/main.cpp:82-100, src/emu/libretro/src/content.cpp:44-111,
|
||||
src/emu/libretro/src/main.cpp:161-169, src/emu/libretro/src/main.cpp:68-69,
|
||||
src/emu/libretro/src/main.cpp:116-117, src/emu/libretro/src/content.cpp:119,
|
||||
src/emu/libretro/src/content.cpp:244-249
|
||||
ref: src/emu/libretro/src/main.cpp:55-57, src/emu/libretro/src/state.cpp:12-17,
|
||||
src/emu/libretro/src/main.cpp:92-110, src/emu/libretro/src/content.cpp:129-195,
|
||||
src/emu/libretro/src/main.cpp:173-181, src/emu/libretro/src/main.cpp:72-73,
|
||||
src/emu/libretro/src/main.cpp:126-127, src/emu/libretro/src/content.cpp:203,
|
||||
src/emu/libretro/src/content.cpp:350-355
|
||||
|
||||
At this revision the libretro build stages none of the shipped resource
|
||||
folders and never calls set_runtime_resource_root, so the GL shaders, the
|
||||
@@ -110,8 +110,8 @@ notes: |
|
||||
and creates no audio or controller driver, so the patch libraries, the Lua
|
||||
scripts, the MIDI banks and the controller database are not read there.
|
||||
Those entries carry mode standalone.
|
||||
ref: src/emu/libretro/CMakeLists.txt:8-45, src/emu/libretro/src/thread.cpp:19-38,
|
||||
src/emu/libretro/src/thread.cpp:41-60, src/emu/libretro/src/thread.cpp:83-89,
|
||||
ref: src/emu/libretro/CMakeLists.txt:8-72, src/emu/libretro/src/thread.cpp:20-61,
|
||||
src/emu/libretro/src/thread.cpp:87-93,
|
||||
src/emu/common/src/path.cpp:427-450, src/emu/system/src/epoc.cpp:1389-1410
|
||||
|
||||
Shipped runtime files are read at their own name below the working
|
||||
@@ -156,7 +156,7 @@ notes: |
|
||||
src/emu/config/src/panic_blacklist.cpp:27-35, src/emu/config/src/app_settings.cpp:82-114,
|
||||
src/emu/utils/src/panic.cpp:32-38, src/emu/scripting/src/manager.cpp:196-202,
|
||||
src/emu/scripting/src/manager.cpp:230-256, src/emu/services/src/fbs/fbs.cpp:443,
|
||||
src/emu/services/src/fbs/impls/font.cpp:1185-1208, .gitlab-ci.yml:19,
|
||||
src/emu/services/src/fbs/impls/font.cpp:1185-1208, .gitlab-ci.yml:22,
|
||||
src/emu/qt/CMakeLists.txt:264-278, src/emu/qt/CMakeLists.txt:289-290,
|
||||
src/emu/qt/CMakeLists.txt:376-377, cmake/Symbian.cmake:20-31
|
||||
|
||||
@@ -182,7 +182,7 @@ files:
|
||||
dump, an EKA2 image with its RPKG, or a VPL with its .fpsx images.
|
||||
source_ref:
|
||||
standalone: "src/emu/system/src/epoc.cpp:1486-1494, src/emu/system/src/epoc.cpp:824-848, src/emu/system/include/system/consts.h:23-25, src/emu/system/src/installation/rpkg.cpp:44-68, src/emu/system/src/installation/rpkg.cpp:196-199, src/emu/qt/src/device_install_dialog.cpp:162-172"
|
||||
libretro: "src/emu/libretro/src/main.cpp:82-100, src/emu/libretro/src/content.cpp:44-111, src/emu/libretro/src/main.cpp:161-169, src/emu/system/src/installation/rpkg.cpp:202-248"
|
||||
libretro: "src/emu/libretro/src/main.cpp:92-110, src/emu/libretro/src/content.cpp:129-195, src/emu/libretro/src/main.cpp:173-181, src/emu/system/src/installation/rpkg.cpp:208-255"
|
||||
|
||||
- name: audiooutputrouting.dll.map
|
||||
standalone_path: patch/audiooutputrouting.dll.map
|
||||
|
||||
@@ -289,6 +289,8 @@ files:
|
||||
system: sony-playstation-2
|
||||
required: false
|
||||
bundled: true
|
||||
sha1: 2d9878fdd70979ecf6dd0da7652efd3797c26039
|
||||
size: 2697551
|
||||
category: game_data
|
||||
description: "per-title compatibility and fix database"
|
||||
note: >-
|
||||
@@ -303,6 +305,8 @@ files:
|
||||
system: sony-playstation-2
|
||||
required: false
|
||||
bundled: true
|
||||
sha1: dceb4536fba7fb89452864fc512a4d071a19eae0
|
||||
size: 1906463
|
||||
category: game_data
|
||||
description: "disc hash database"
|
||||
note: >-
|
||||
@@ -315,6 +319,8 @@ files:
|
||||
system: sony-playstation-2
|
||||
required: false
|
||||
bundled: true
|
||||
sha1: a3d939af27fe0929e61b8e20d49ef58316c0a66c
|
||||
size: 2091144
|
||||
category: game_data
|
||||
description: "built-in game patch archive"
|
||||
note: >-
|
||||
@@ -554,6 +560,8 @@ files:
|
||||
|
||||
- name: unlock.wav
|
||||
path: resources/sounds/achievements/unlock.wav
|
||||
sha1: da328a0a3074ec86fee2d6741bfc2e5a1f68d063
|
||||
size: 202702
|
||||
system: sony-playstation-2
|
||||
required: false
|
||||
description: "achievement unlock sound"
|
||||
|
||||
+2
-2
@@ -21,7 +21,7 @@ systems:
|
||||
- coleco-colecovision
|
||||
- sinclair-spectrum
|
||||
- msx
|
||||
- nes-fds
|
||||
- nintendo-fds
|
||||
- super-kaneko-nova
|
||||
- deco-cassette
|
||||
- namco-na1
|
||||
@@ -1061,7 +1061,7 @@ files:
|
||||
# -------------------------------------------------------
|
||||
- name: "fdsbios.nes"
|
||||
archive: fdsbios.zip
|
||||
system: nes-fds
|
||||
system: nintendo-fds
|
||||
required: true
|
||||
size: 8192 # 0x2000
|
||||
crc32: "5e607dcf"
|
||||
|
||||
@@ -16,7 +16,7 @@ notes: |
|
||||
contributed by Joe Zbiciak (jzIntv), mask ROM embedded in source
|
||||
(src/ivoice.c:337-510, 4097-byte static array). No external ivoice ROM.
|
||||
|
||||
BIOS loading in retro_init() (src/libretro.c:1184-1192). Paths joined
|
||||
BIOS loading in retro_init() (src/libretro.c:1175-1183). Paths joined
|
||||
directly to system directory, no subdirectory.
|
||||
|
||||
loadExec() reads exec.bin as big-endian 16-bit words into 0x1000-0x1FFF.
|
||||
@@ -35,11 +35,11 @@ files:
|
||||
required: true
|
||||
size: 8192
|
||||
note: "Executive ROM. Big-endian 16-bit words loaded at 0x1000-0x1FFF."
|
||||
source_ref: "src/intv.c:55-142, src/libretro.c:1187"
|
||||
source_ref: "src/intv.c:51-96, src/libretro.c:1178"
|
||||
|
||||
- name: "grom.bin"
|
||||
system: intellivision
|
||||
required: true
|
||||
size: 2048
|
||||
note: "Graphics ROM. Raw bytes loaded at 0x3000-0x37FF."
|
||||
source_ref: "src/intv.c:144-190, src/libretro.c:1191"
|
||||
source_ref: "src/intv.c:98-144, src/libretro.c:1182"
|
||||
@@ -34,17 +34,17 @@ files:
|
||||
- name: "bios.sms"
|
||||
system: sega-mastersystem
|
||||
required: false
|
||||
source_ref: "platforms/libretro/libretro.cpp:777, platforms/libretro/libretro.cpp:780 (load_bootroms)"
|
||||
source_ref: "platforms/libretro/libretro.cpp:736, platforms/libretro/libretro.cpp:731-743 (load_bootroms)"
|
||||
|
||||
- name: "bios.gg"
|
||||
system: sega-gamegear
|
||||
required: false
|
||||
source_ref: "platforms/libretro/libretro.cpp:1067, platforms/libretro/libretro.cpp:780 (load_bootroms)"
|
||||
source_ref: "platforms/libretro/libretro.cpp:737, platforms/libretro/libretro.cpp:731-743 (load_bootroms)"
|
||||
|
||||
platform_details:
|
||||
mastersystem:
|
||||
bios_filename: "bios.sms"
|
||||
source_ref: "src/Memory.cpp:227-232"
|
||||
source_ref: "src/Memory.cpp:267-272"
|
||||
note: |
|
||||
Boot ROM loaded via LoadBootromSMS() -> LoadBootroom(path, false).
|
||||
Raw binary read, stored in m_pBootromSMS. Bank count computed as
|
||||
@@ -52,7 +52,7 @@ platform_details:
|
||||
|
||||
gamegear:
|
||||
bios_filename: "bios.gg"
|
||||
source_ref: "src/Memory.cpp:234-239"
|
||||
source_ref: "src/Memory.cpp:274-279"
|
||||
note: |
|
||||
Boot ROM loaded via LoadBootromGG() -> LoadBootroom(path, true).
|
||||
Raw binary read, stored in m_pBootromGG. Same bank computation.
|
||||
|
||||
@@ -64,22 +64,22 @@ files:
|
||||
size: 8192
|
||||
required: false
|
||||
hle_fallback: true
|
||||
validation: [size]
|
||||
known_hash_adler32: "0x66f334fe"
|
||||
validation: [size, adler32]
|
||||
known_hash_adler32: ["0x66f334fe", "0x128ea7a2"]
|
||||
adler32_byteswap: true
|
||||
note: "DSP instruction ROM for LLE audio. Free replacement included"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:112, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:142-150, Source/Core/Core/DSP/DSPCore.cpp:48,67"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:112, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:142-150, Source/Core/Core/DSP/DSPCore.cpp:48,67, Source/Core/Core/DSP/DSPCore.cpp:38-105"
|
||||
|
||||
- name: "dsp_coef.bin"
|
||||
path: "GC/dsp_coef.bin"
|
||||
size: 4096
|
||||
required: false
|
||||
hle_fallback: true
|
||||
validation: [size]
|
||||
known_hash_adler32: "0xf3b93527"
|
||||
validation: [size, adler32]
|
||||
known_hash_adler32: ["0xf3b93527", "0xa4a575f5"]
|
||||
adler32_byteswap: true
|
||||
note: "DSP coefficient ROM for LLE audio and HLE polyphase resampling. Free replacement included"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:113, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:143-153, Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp:43-72, Source/Core/Core/DSP/DSPCore.cpp:48,68"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:113, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:143-153, Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp:43-72, Source/Core/Core/DSP/DSPCore.cpp:48,68, Source/Core/Core/DSP/DSPCore.cpp:38-105"
|
||||
|
||||
# -- GameCube Fonts --
|
||||
# Bundled free alternatives exist but have padding differences causing misplaced text.
|
||||
|
||||
@@ -79,7 +79,6 @@ files:
|
||||
description: "Sega CD BIOS (US)"
|
||||
region: [north-america]
|
||||
required: true
|
||||
mode: standalone
|
||||
size: 131072
|
||||
validation: [size]
|
||||
source_ref: "frontend/jgenesis-native-driver/src/mainloop/genesis.rs:39-49 (read), frontend/jgenesis-native-driver/src/mainloop/genesis.rs:238-244 (bios_path_for_region), backend/segacd-core/src/api.rs:77-79 (BIOS_LEN check)"
|
||||
@@ -90,7 +89,6 @@ files:
|
||||
description: "Mega CD BIOS (Europe)"
|
||||
region: [europe]
|
||||
required: true
|
||||
mode: standalone
|
||||
size: 131072
|
||||
validation: [size]
|
||||
source_ref: "frontend/jgenesis-native-driver/src/mainloop/genesis.rs:238-244 (eu_bios_path), backend/segacd-core/src/api.rs:77-79"
|
||||
@@ -100,7 +98,6 @@ files:
|
||||
description: "Mega CD BIOS (Japan)"
|
||||
region: [japan]
|
||||
required: true
|
||||
mode: standalone
|
||||
size: 131072
|
||||
validation: [size]
|
||||
source_ref: "frontend/jgenesis-native-driver/src/mainloop/genesis.rs:238-244 (jp_bios_path), backend/segacd-core/src/api.rs:77-79"
|
||||
@@ -112,7 +109,6 @@ files:
|
||||
system: nintendo-gba
|
||||
description: "Game Boy Advance BIOS"
|
||||
required: true
|
||||
mode: standalone
|
||||
size: 16384
|
||||
validation: [size]
|
||||
source_ref: "frontend/jgenesis-native-driver/src/mainloop/gba.rs:29-33 (GbaNoBios), backend/gba-core/src/memory.rs:10,102-107 (BIOS_ROM_LEN check)"
|
||||
@@ -126,7 +122,6 @@ files:
|
||||
system: nintendo-snes
|
||||
description: "NEC uPD77C25 firmware for DSP-1"
|
||||
required: true
|
||||
mode: standalone
|
||||
size: 8192
|
||||
source_ref: "backend/snes-core/src/memory/cartridge.rs:336-353 (MissingDsp1Rom), backend/snes-coprocessors/src/upd77c25.rs:28-31,35-38,382-390"
|
||||
note: "0x1800 program plus 0x800 data. Also used by DSP-1B titles, which have no separate slot. Layout is sliced at a fixed offset, size is not checked."
|
||||
@@ -136,7 +131,6 @@ files:
|
||||
system: nintendo-snes
|
||||
description: "NEC uPD77C25 firmware for DSP-2"
|
||||
required: true
|
||||
mode: standalone
|
||||
size: 8192
|
||||
source_ref: "backend/snes-core/src/memory/cartridge.rs:340-342 (MissingDsp2Rom), :929 (Dungeon Master CRC32 match), backend/snes-coprocessors/src/upd77c25.rs:382-390"
|
||||
|
||||
@@ -145,7 +139,6 @@ files:
|
||||
system: nintendo-snes
|
||||
description: "NEC uPD77C25 firmware for DSP-3"
|
||||
required: true
|
||||
mode: standalone
|
||||
size: 8192
|
||||
source_ref: "backend/snes-core/src/memory/cartridge.rs:343-345 (MissingDsp3Rom), :931 (SD Gundam GX CRC32 match), backend/snes-coprocessors/src/upd77c25.rs:382-390"
|
||||
|
||||
@@ -154,7 +147,6 @@ files:
|
||||
system: nintendo-snes
|
||||
description: "NEC uPD77C25 firmware for DSP-4"
|
||||
required: true
|
||||
mode: standalone
|
||||
size: 8192
|
||||
source_ref: "backend/snes-core/src/memory/cartridge.rs:346-348 (MissingDsp4Rom), :933 (Top Gear 3000 CRC32 match), backend/snes-coprocessors/src/upd77c25.rs:382-390"
|
||||
|
||||
@@ -163,7 +155,6 @@ files:
|
||||
system: nintendo-snes
|
||||
description: "NEC uPD96050 firmware for ST010"
|
||||
required: true
|
||||
mode: standalone
|
||||
size: 53248
|
||||
source_ref: "backend/snes-core/src/memory/cartridge.rs:294-305 (MissingSt010Rom), :938-943 (variant detection), backend/snes-coprocessors/src/upd77c25.rs:28-31,35-38"
|
||||
note: "0xC000 program plus 0x1000 data. Used by F1 ROC II."
|
||||
@@ -173,7 +164,6 @@ files:
|
||||
system: nintendo-snes
|
||||
description: "NEC uPD96050 firmware for ST011"
|
||||
required: true
|
||||
mode: standalone
|
||||
size: 53248
|
||||
source_ref: "backend/snes-core/src/memory/cartridge.rs:298-300 (MissingSt011Rom), :938-943 (Hayazashi Nidan Morita Shougi CRC32 match)"
|
||||
|
||||
@@ -182,7 +172,6 @@ files:
|
||||
system: nintendo-snes
|
||||
description: "ARM firmware for ST018"
|
||||
required: true
|
||||
mode: standalone
|
||||
min_size: 163840
|
||||
validation: [size]
|
||||
source_ref: "backend/snes-core/src/memory/cartridge.rs:310-320 (MissingSt018Rom), backend/snes-coprocessors/src/st018.rs:18-22,346-352 (TOTAL_ROM_LEN check)"
|
||||
@@ -195,7 +184,6 @@ files:
|
||||
system: sega-mastersystem
|
||||
description: "Master System BIOS"
|
||||
required: false
|
||||
mode: standalone
|
||||
source_ref: "frontend/jgenesis-native-driver/src/mainloop/smsgg.rs:27-33,50-56,74-80,112-122, backend/smsgg-core/src/memory.rs:101-106,148-168"
|
||||
note: "Read only when sms_boot_from_bios is enabled or the emulator runs without a cartridge, both off by default. One slot accepts any regional dump, no size or content check."
|
||||
|
||||
@@ -203,7 +191,6 @@ files:
|
||||
system: sega-gamegear
|
||||
description: "Game Gear BIOS"
|
||||
required: false
|
||||
mode: standalone
|
||||
source_ref: "frontend/jgenesis-native-driver/src/mainloop/smsgg.rs:27-33,50-56,74-80,112-122"
|
||||
note: "Read only when gg_boot_from_bios is enabled or the emulator runs without a cartridge, both off by default."
|
||||
|
||||
@@ -214,7 +201,6 @@ files:
|
||||
system: nintendo-gb
|
||||
description: "Game Boy boot ROM"
|
||||
required: false
|
||||
mode: standalone
|
||||
size: 256
|
||||
validation: [size]
|
||||
source_ref: "frontend/jgenesis-native-driver/src/mainloop/gb.rs:29-33,77-89, backend/gb-core/src/memory.rs:9,45-63 (DMG_BOOT_ROM_LEN check)"
|
||||
@@ -224,7 +210,6 @@ files:
|
||||
system: nintendo-gbc
|
||||
description: "Game Boy Color boot ROM"
|
||||
required: false
|
||||
mode: standalone
|
||||
min_size: 2048
|
||||
max_size: 2304
|
||||
validation: [size]
|
||||
@@ -239,7 +224,6 @@ files:
|
||||
system: nintendo-nes
|
||||
description: "External NES color palette"
|
||||
required: false
|
||||
mode: standalone
|
||||
min_size: 192
|
||||
max_size: 1536
|
||||
validation: [size]
|
||||
|
||||
@@ -61,7 +61,7 @@ notes: |
|
||||
the JVM default soundbank in place. VlcDir points at a VLC installation that
|
||||
vlcj scans for libvlc.
|
||||
ref: src/media/emulator/media/EmulatorMIDI.java:26-36,
|
||||
src/main/emulator/ui/swt/Property.java:1860-1901
|
||||
src/main/emulator/ui/swt/Property.java:1863-1904
|
||||
|
||||
files:
|
||||
- name: M7_EmuSmw7.dll
|
||||
|
||||
@@ -187,7 +187,7 @@ files:
|
||||
|
||||
- name: "<CaCertificateId>.der"
|
||||
required: false
|
||||
path: system/ssl/
|
||||
path: "system/ssl/<CaCertificateId>.der"
|
||||
unsourceable: "replacement certificate the user picks for one certificate authority, with no canonical artefact behind the name"
|
||||
description: "Override for one built-in root certificate"
|
||||
note: >-
|
||||
@@ -199,7 +199,7 @@ files:
|
||||
|
||||
- name: "<driver>.zip"
|
||||
required: false
|
||||
path: drivers/
|
||||
path: "drivers/<driver>.zip"
|
||||
unsourceable: "third-party Vulkan driver built for one GPU family, not an emulator artefact"
|
||||
description: "Replacement Vulkan driver for the Android build"
|
||||
note: >-
|
||||
|
||||
@@ -2,9 +2,10 @@ emulator: Kronos
|
||||
type: libretro
|
||||
core_classification: official_port
|
||||
source: "https://github.com/libretro/yabause"
|
||||
source_branch: kronos
|
||||
upstream: "https://github.com/FCare/Kronos"
|
||||
profiled_date: "2026-03-24"
|
||||
source_commit: "8926b0c6c347f8c5c755911ddb0ac695420ffbf8"
|
||||
source_commit: "3791ffb2221fda61d70aec5cca376418caf05669"
|
||||
core_version: "v2.6.0"
|
||||
display_name: "Sega - Saturn/ST-V (Kronos)"
|
||||
cores:
|
||||
@@ -244,7 +245,7 @@ files:
|
||||
size: 2097152
|
||||
validation: [size]
|
||||
note: "ROM cartridge for The King of Fighters '95. Auto-detected via game DB."
|
||||
source_ref: "yabause/src/utils/src/db.c:43-44, yabause/src/cs0.c:1207-1216"
|
||||
source_ref: "yabause/src/utils/src/db.c:43-44, yabause/src/sys/memory/src/cs0.c:1526-1535"
|
||||
|
||||
- name: "mpr-19367-mx.ic1"
|
||||
system: sega-saturn
|
||||
@@ -252,4 +253,4 @@ files:
|
||||
size: 2097152
|
||||
validation: [size]
|
||||
note: "ROM cartridge for Ultraman: Hikari no Kyojin Densetsu. Auto-detected via game DB."
|
||||
source_ref: "yabause/src/utils/src/db.c:45, yabause/src/cs0.c:1207-1216"
|
||||
source_ref: "yabause/src/utils/src/db.c:45, yabause/src/sys/memory/src/cs0.c:1526-1535"
|
||||
+10
-10
@@ -30,57 +30,57 @@ notes: |
|
||||
|
||||
files:
|
||||
- name: "<bios>.bin"
|
||||
path: "pcsx2/bios/"
|
||||
path: "pcsx2/bios/<bios>.bin"
|
||||
required: true
|
||||
description: "PS2 BIOS binary"
|
||||
min_size: 4194304
|
||||
max_size: 8388608
|
||||
validation: [size]
|
||||
source_ref: "pcsx2/ps2/BiosTools.cpp:231-254,267-322"
|
||||
source_ref: "pcsx2/ps2/BiosTools.cpp:33-34,63-180,249-274,286-348"
|
||||
note: >
|
||||
Scans pcsx2/bios/ for any file between 4 MB and 8 MB. Validates via romdir
|
||||
structure parsing (RESET + ROMVER entries). User selects BIOS via core option
|
||||
pcsx2_bios. Falls back to first valid BIOS found if configured BIOS is missing.
|
||||
|
||||
- name: "<bios>.rom1"
|
||||
path: "pcsx2/bios/"
|
||||
path: "pcsx2/bios/<bios>.rom1"
|
||||
required: false
|
||||
max_size: 4194304
|
||||
description: "DVD player ROM"
|
||||
source_ref: "pcsx2/ps2/BiosTools.cpp:190-211,314"
|
||||
source_ref: "pcsx2/ps2/BiosTools.cpp:189-229,339"
|
||||
note: >
|
||||
DVD player ROM. Tries <biospath>.rom1 (appended) then <biosbase>.rom1
|
||||
(extension replaced). Silently skipped if not found.
|
||||
|
||||
- name: "<bios>.rom2"
|
||||
path: "pcsx2/bios/"
|
||||
path: "pcsx2/bios/<bios>.rom2"
|
||||
required: false
|
||||
max_size: 524288
|
||||
description: "Chinese ROM extension"
|
||||
source_ref: "pcsx2/ps2/BiosTools.cpp:190-211,315"
|
||||
source_ref: "pcsx2/ps2/BiosTools.cpp:189-229,340"
|
||||
note: >
|
||||
Chinese region ROM extension. Same naming convention as rom1.
|
||||
Only present on Chinese region consoles.
|
||||
|
||||
- name: "<bios>.nvm"
|
||||
path: "pcsx2/bios/"
|
||||
path: "pcsx2/bios/<bios>.nvm"
|
||||
required: false
|
||||
hle_fallback: true
|
||||
size: 1024
|
||||
description: "NVRAM / EEPROM data"
|
||||
source_ref: "pcsx2/CDVD/CDVD.cpp:224-267"
|
||||
source_ref: "pcsx2/CDVD/CDVD.cpp:196-227"
|
||||
note: >
|
||||
Console EEPROM data (language, timezone, region, iLink ID, OSD settings).
|
||||
Path derived from BIOS path with extension replaced to .nvm.
|
||||
Auto-created with region-appropriate defaults if missing or invalid.
|
||||
|
||||
- name: "<bios>.mec"
|
||||
path: "pcsx2/bios/"
|
||||
path: "pcsx2/bios/<bios>.mec"
|
||||
required: false
|
||||
hle_fallback: true
|
||||
size: 4
|
||||
description: "Mechacon version"
|
||||
source_ref: "pcsx2/CDVD/CDVD.cpp:255-266"
|
||||
source_ref: "pcsx2/CDVD/CDVD.cpp:229-245"
|
||||
note: >
|
||||
Mechacon (disc drive controller) version as u32.
|
||||
Auto-created with default 0x00020603 if missing.
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ notes: |
|
||||
standalone upstream.
|
||||
|
||||
retro_load_game() calls lutro_load(info->path) to load the game
|
||||
directory or archive (libretro.c:267). The core exposes
|
||||
directory or archive (libretro.c:241). The core exposes
|
||||
love.filesystem.getAppdataDirectory to games as the system_dir
|
||||
(filesystem.c:296) but does not load any files from it itself.
|
||||
No BIOS, firmware, or system files required.
|
||||
|
||||
+1113
-1010
File diff suppressed because it is too large.
Load diff
+410
-401
File diff suppressed because it is too large.
Load diff
@@ -680,7 +680,7 @@ files:
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: casio-loopy
|
||||
source_ref: "src/mame/casio/casloopy.cpp:2105-2462"
|
||||
source_ref: "src/mame/casio/casloopy.cpp:2097-2105"
|
||||
contents:
|
||||
- name: hd6437021.lsi302
|
||||
description: SH-1 CPU internal mask ROM
|
||||
|
||||
@@ -292,7 +292,7 @@ files:
|
||||
- name: "scph5502.bin"
|
||||
system: sony-playstation
|
||||
description: "SCPH-5502 / v3.0E BIOS"
|
||||
region: [europe]
|
||||
region: [europe, oceania]
|
||||
required: true
|
||||
size: 524288
|
||||
sha256: "1faaa18fa820a0225e488d9f086296b8e6c46df739666093987ff7d8fd352c09"
|
||||
@@ -376,7 +376,7 @@ files:
|
||||
- name: "epr-17952a.ic8"
|
||||
system: sega-stv
|
||||
description: "ST-V BIOS (North America)"
|
||||
region: [north-america]
|
||||
region: [north-america, south-korea, asia-pal, brazil, latin-america]
|
||||
required: true
|
||||
size: 524288
|
||||
validation: [size]
|
||||
|
||||
@@ -23,28 +23,24 @@ notes: >
|
||||
files:
|
||||
- name: "syscard3.pce"
|
||||
description: "CD-ROM System Card 3.0 (Japan)"
|
||||
region: [japan]
|
||||
required: true
|
||||
source_ref: "libretro.c:65, libretro.c:1896-1901"
|
||||
note: "Default value for pce_fast_cdbios option."
|
||||
|
||||
- name: "syscard2.pce"
|
||||
description: "CD-ROM System Card 2.0 (Japan)"
|
||||
region: [japan]
|
||||
required: false
|
||||
source_ref: "libretro.c:1903"
|
||||
note: "pce_fast_cdbios = 'System Card 2'."
|
||||
|
||||
- name: "syscard1.pce"
|
||||
description: "CD-ROM System Card 1.0 (Japan)"
|
||||
region: [japan]
|
||||
required: false
|
||||
source_ref: "libretro.c:1905"
|
||||
note: "pce_fast_cdbios = 'System Card 1'."
|
||||
|
||||
- name: "gexpress.pce"
|
||||
description: "Games Express CD Card"
|
||||
region: [japan]
|
||||
required: false
|
||||
aliases: ["gecard.pce"]
|
||||
source_ref: "libretro.c:1906-1907"
|
||||
@@ -52,14 +48,12 @@ files:
|
||||
|
||||
- name: "syscard3u.pce"
|
||||
description: "CD-ROM System Card 3.0 (US / TurboGrafx-CD)"
|
||||
region: [north-america]
|
||||
required: false
|
||||
source_ref: "libretro.c:1908-1909"
|
||||
note: "pce_fast_cdbios = 'System Card 3 US'. Not in .info."
|
||||
|
||||
- name: "syscard2u.pce"
|
||||
description: "CD-ROM System Card 2.0 (US / TurboGrafx-CD)"
|
||||
region: [north-america]
|
||||
required: false
|
||||
source_ref: "libretro.c:1910-1911"
|
||||
note: "pce_fast_cdbios = 'System Card 2 US'. Not in .info."
|
||||
+9
-9
@@ -30,7 +30,7 @@ notes: |
|
||||
mgba_skip_bios (default OFF) - skip the boot animation even if loaded
|
||||
|
||||
The libretro port resolves BIOS filenames in retro_load_game()
|
||||
(src/platform/libretro/libretro.c:2091-2148). It picks the filename
|
||||
(src/platform/libretro/libretro.c:2060-2118). It picks the filename
|
||||
based on detected model:
|
||||
GBA -> gba_bios.bin
|
||||
GB (DMG/MGB) -> gb_bios.bin
|
||||
@@ -38,7 +38,7 @@ notes: |
|
||||
SGB -> sgb_bios.bin
|
||||
SGB2 -> gb_bios.bin (falls to default, missing case)
|
||||
|
||||
The standalone core (src/gb/core.c:637-684) correctly maps SGB2 to
|
||||
The standalone core (src/gb/core.c:649-696) correctly maps SGB2 to
|
||||
sgb_bios.bin (marked TODO for a dedicated file). The libretro port
|
||||
omits GB_MODEL_SGB2 from its switch, so SGB2 falls to default.
|
||||
|
||||
@@ -57,7 +57,7 @@ files:
|
||||
size: 16384 # 16 KB (0x4000, GBA_SIZE_BIOS)
|
||||
validation: [size]
|
||||
note: "GBA BIOS. HLE replacement built in. Real BIOS adds boot logo and full SWI accuracy."
|
||||
source_ref: "src/platform/libretro/libretro.c:2099"
|
||||
source_ref: "src/platform/libretro/libretro.c:2068"
|
||||
|
||||
# -------------------------------------------------------
|
||||
# Game Boy - boot ROM (optional, skip fallback)
|
||||
@@ -68,7 +68,7 @@ files:
|
||||
size: 256 # 256 B (0x100)
|
||||
validation: [crc32]
|
||||
note: "DMG/MGB boot ROM. Scrolling Nintendo logo. Skipped if absent."
|
||||
source_ref: "src/platform/libretro/libretro.c:971"
|
||||
source_ref: "src/platform/libretro/libretro.c:2104"
|
||||
|
||||
# -------------------------------------------------------
|
||||
# Game Boy Color - boot ROM (optional, skip fallback)
|
||||
@@ -79,7 +79,7 @@ files:
|
||||
size: 2304 # 2304 B (0x900)
|
||||
validation: [crc32]
|
||||
note: "CGB boot ROM. Used for CGB, AGB (GBA in GB mode), and SCGB models."
|
||||
source_ref: "src/platform/libretro/libretro.c:2127"
|
||||
source_ref: "src/platform/libretro/libretro.c:2097"
|
||||
|
||||
# -------------------------------------------------------
|
||||
# Super Game Boy - boot ROM (optional, skip fallback)
|
||||
@@ -89,14 +89,14 @@ files:
|
||||
required: false
|
||||
size: 256 # 256 B (0x100)
|
||||
validation: [crc32]
|
||||
note: "SGB boot ROM. SGB2 maps here in standalone (src/gb/core.c:643) but falls to gb_bios.bin in libretro."
|
||||
source_ref: "src/platform/libretro/libretro.c:2130"
|
||||
note: "SGB boot ROM. SGB2 maps here in standalone (src/gb/core.c:655) but falls to gb_bios.bin in libretro."
|
||||
source_ref: "src/platform/libretro/libretro.c:2100"
|
||||
|
||||
platform_details:
|
||||
gba:
|
||||
bios_size: 16384 # 16 KB
|
||||
hle_bios: true
|
||||
source_ref: "src/gba/hle-bios.c, src/gba/gba.c:520-551"
|
||||
source_ref: "src/gba/hle-bios.c, src/gba/gba.c:513-552"
|
||||
note: |
|
||||
GBALoadBIOS() validates size (must be exactly 0x4000) then computes
|
||||
an internal checksum. Two official checksums are recognized:
|
||||
@@ -125,7 +125,7 @@ platform_details:
|
||||
sgb:
|
||||
bios_size: 256 # 256 B
|
||||
hle_bios: false
|
||||
source_ref: "src/gb/gb.c:570-605, src/gb/core.c:642-644"
|
||||
source_ref: "src/gb/gb.c:570-605, src/gb/core.c:654-656"
|
||||
note: |
|
||||
Accepted SGB CRC32 checksums:
|
||||
SGB = 0xEC8A83B9, SGB2 = 0x53D0DD63
|
||||
|
||||
@@ -98,7 +98,7 @@ notes: |
|
||||
MSX.emu/src/blueMSX/Memory/romMapperDRAM.c:88-99), and the Philips FDC, Panasonic
|
||||
FDC and MoonSound mappers test nothing at all
|
||||
(MSX.emu/src/blueMSX/Memory/romMapperPhilipsFdc.c:139-146,
|
||||
MSX.emu/src/blueMSX/Memory/romMapperTC8566AF.c:236-262,
|
||||
MSX.emu/src/blueMSX/Memory/romMapperTC8566AF.c:228-255,
|
||||
MSX.emu/src/blueMSX/Memory/romMapperMoonsound.c:129-158).
|
||||
|
||||
The ROM database is compiled in. mediaDbGuessRom matches a cartridge's SHA-1 against
|
||||
@@ -396,7 +396,7 @@ files:
|
||||
required: true
|
||||
size: 16384
|
||||
description: "Panasonic floppy disk ROM of the MSX2+ machine"
|
||||
source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperTC8566AF.c:236-262"
|
||||
source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperTC8566AF.c:228-255"
|
||||
|
||||
- name: "MSXTR.rom"
|
||||
path: "Machines/Shared Roms/MSXTR.rom"
|
||||
@@ -436,7 +436,7 @@ files:
|
||||
required: true
|
||||
size: 65536
|
||||
description: "MSX-DOS 2.3 disk ROM of the turbo R machine"
|
||||
source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperTC8566AF.c:236-262"
|
||||
source_ref: "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperTC8566AF.c:228-255"
|
||||
|
||||
- name: "coleco.rom"
|
||||
path: "Machines/COL - ColecoVision/coleco.rom"
|
||||
|
||||
@@ -151,16 +151,18 @@ files:
|
||||
source_ref: "cbus/ideio.c:1928-1930, cbus/ideio.c:1944-1981"
|
||||
|
||||
# -- SCSI BIOS ROM --
|
||||
# Loaded by scsiio.c:219. 16 KB (0x4000). Falls back to scsibios[] stub.
|
||||
# Read into a 0x4000 buffer; any non-empty read is kept. Falls back to the
|
||||
# scsibios[] stub.
|
||||
- name: "scsi.rom"
|
||||
path: "np2kai/scsi.rom"
|
||||
size: 16384
|
||||
max_size: 16384
|
||||
required: false
|
||||
hle_fallback: true
|
||||
note: >
|
||||
SCSI controller BIOS ROM (16 KB). The core includes a built-in
|
||||
SCSI controller BIOS ROM, up to 16 KB: the full-size test is commented
|
||||
out and a shorter file is used as read. The core includes a built-in
|
||||
SCSI BIOS stub as fallback.
|
||||
source_ref: "cbus/scsiio.c:214-231"
|
||||
source_ref: "cbus/scsiio.c:720-732"
|
||||
|
||||
# -- SASI BIOS ROM --
|
||||
# Loaded by sasiio.c:455. 4 KB (0x1000). Falls back to sasibios[] stub.
|
||||
@@ -213,4 +215,4 @@ files:
|
||||
note: >
|
||||
Keyboard remapping configuration (text file). User-created file
|
||||
for custom keyboard layout. The core uses built-in defaults if absent.
|
||||
source_ref: "keystat.c:43,113-148"
|
||||
source_ref: "keystat.c:46,116-151"
|
||||
@@ -20,7 +20,7 @@ notes: |
|
||||
Doukutsu.exe there (nxengine/libretro/libretro.cpp:289-294). When launched with a .exe
|
||||
content file, it uses the parent directory of that file (nxengine/libretro/libretro.cpp:272).
|
||||
|
||||
At startup (main.cpp:75-90), the core opens Doukutsu.exe and extracts:
|
||||
At startup (nxengine/main.cpp:75-90), the core opens Doukutsu.exe and extracts:
|
||||
ORG music (extractorg.c), PXT sound effects (extractpxt.c), stage tile
|
||||
attributes (extractstages.c), 18 credit BMPs + pixel.bmp (endpic/),
|
||||
and the wavetable (nxengine/extract-auto/cachefiles.c:464-485). All kept in memory.
|
||||
@@ -28,7 +28,7 @@ notes: |
|
||||
The data/ directory (399 files from the freeware release) is loaded into
|
||||
an in-memory cache at init (nxengine/extract-auto/cachefiles.c:38-439, 497-540). All subsequent
|
||||
file access goes through this cache. The core verifies data/ by checking
|
||||
for data/npc.tbl (main.cpp:47-58).
|
||||
for data/npc.tbl (nxengine/main.cpp:47-58).
|
||||
|
||||
The font is compiled-in (bitmap_font.h). The upstream standalone version
|
||||
uses font.ttf via SDL_ttf.
|
||||
@@ -45,7 +45,7 @@ files:
|
||||
size: 1478656
|
||||
md5: "38695d3d69d7a0ada8178072dad4c58b"
|
||||
sha1: "bb2d0441e073da9c584f23c2ad8c7ab8aac293bf"
|
||||
source_ref: "main.cpp:77-78 (opened for extraction), nxengine/libretro/libretro.cpp:290 (existence check)"
|
||||
source_ref: "nxengine/main.cpp:77-78 (opened for extraction), nxengine/libretro/libretro.cpp:278 (existence check)"
|
||||
note: "Placed in system/nxengine/. The core extracts ORG music, PXT sounds, stage tile attributes, BMP graphics, and wavetable from this binary at each launch."
|
||||
|
||||
- name: "data/"
|
||||
@@ -64,7 +64,7 @@ files:
|
||||
system: cave-story
|
||||
description: "NPC attribute table (entity behavior flags, HP, damage, display rect offsets)"
|
||||
required: true
|
||||
source_ref: "main.cpp:50 (existence check for data/ directory), ai/ai.cpp:56-59 (loaded for NPC properties)"
|
||||
source_ref: "nxengine/main.cpp:47-53 (existence check for data/ directory), nxengine/ai/ai.cpp:56-59 (loaded for NPC properties)"
|
||||
note: "Located in system/nxengine/data/. Used to validate data directory presence and to load NPC behavior attributes."
|
||||
|
||||
- name: "data/sprites.sif"
|
||||
@@ -84,5 +84,5 @@ files:
|
||||
description: "Tile attribute lookup table (maps tile codes to collision/behavior attributes)"
|
||||
required: false
|
||||
hle_fallback: true
|
||||
source_ref: "map.cpp:290-303 (loaded at init, hardcoded default if missing)"
|
||||
note: "Not part of the freeware distribution. Generated by the standalone NXEngine extraction tool. The libretro core has hardcoded defaults in map.cpp:30."
|
||||
source_ref: "nxengine/map.cpp:290-303 (loaded at init, hardcoded default if missing)"
|
||||
note: "Not part of the freeware distribution. Generated by the standalone NXEngine extraction tool. The libretro core has hardcoded defaults in nxengine/map.cpp:30."
|
||||
@@ -16,7 +16,7 @@ files:
|
||||
required: false
|
||||
description: "64DD IPL ROM"
|
||||
note: "Only loaded when a 64DD disk image (.ndd) is present via subsystem API. Core fails to load disk games without it."
|
||||
source_ref: "libretro/libretro.c:1021"
|
||||
source_ref: "libretro/libretro.c:848"
|
||||
|
||||
notes:
|
||||
hle_available: true
|
||||
|
||||
+5
-5
@@ -83,7 +83,7 @@ notes: |
|
||||
|
||||
files:
|
||||
- name: "<bios>.bin"
|
||||
path: "pcsx2/bios/"
|
||||
path: "pcsx2/bios/<bios>.bin"
|
||||
description: "PS2 BIOS image"
|
||||
min_size: 4194304
|
||||
max_size: 8388608
|
||||
@@ -96,7 +96,7 @@ files:
|
||||
auto selection accept any size that passes the romdir check.
|
||||
|
||||
- name: "<bios>.rom1"
|
||||
path: "pcsx2/bios/"
|
||||
path: "pcsx2/bios/<bios>.rom1"
|
||||
description: "DVD player ROM"
|
||||
max_size: 4194304
|
||||
required: false
|
||||
@@ -106,7 +106,7 @@ files:
|
||||
skipped with a console line when absent.
|
||||
|
||||
- name: "<bios>.rom2"
|
||||
path: "pcsx2/bios/"
|
||||
path: "pcsx2/bios/<bios>.rom2"
|
||||
description: "Chinese ROM extension"
|
||||
max_size: 4194304
|
||||
required: false
|
||||
@@ -115,7 +115,7 @@ files:
|
||||
Same lookup as rom1. Present on Chinese region consoles only.
|
||||
|
||||
- name: "<bios>.nvm"
|
||||
path: "pcsx2/bios/"
|
||||
path: "pcsx2/bios/<bios>.nvm"
|
||||
description: "Console NVRAM (region parameters, language, iLink ID, OSD settings)"
|
||||
size: 1024
|
||||
required: false
|
||||
@@ -127,7 +127,7 @@ files:
|
||||
on save.
|
||||
|
||||
- name: "<bios>.mec"
|
||||
path: "pcsx2/bios/"
|
||||
path: "pcsx2/bios/<bios>.mec"
|
||||
description: "Mechacon version, one u32"
|
||||
size: 4
|
||||
required: false
|
||||
|
||||
+26
-16
@@ -25,7 +25,7 @@ files:
|
||||
min_size: 4194304
|
||||
max_size: 8388608
|
||||
validation: [size]
|
||||
source_ref: "pcsx2/ps2/BiosTools.cpp:258-362"
|
||||
source_ref: "pcsx2/ps2/BiosTools.cpp:16-17,80-197,258-283,317-370"
|
||||
note: "Accepts any file 4-8 MB with valid romdir (RESET + ROMVER). Naming convention ps2-VVVVr-YYYYMMDD.bin (version, region, date)."
|
||||
|
||||
- name: ps2-0230a-20080220.rom1
|
||||
@@ -48,7 +48,7 @@ files:
|
||||
size: 1024
|
||||
description: "Console NVRAM"
|
||||
note: "Read at the BIOS path with the extension replaced by nvm, opened case-insensitively. Built in memory from region defaults when absent or blank."
|
||||
source_ref: "pcsx2/CDVD/CDVD.cpp:160-188"
|
||||
source_ref: "pcsx2/CDVD/CDVD.cpp:165-189"
|
||||
|
||||
- name: ps2-0230a-20080220.mec
|
||||
required: false
|
||||
@@ -66,22 +66,32 @@ files:
|
||||
note: "DEV9 network adapter EEPROM. Falls back to built-in defaults if missing."
|
||||
|
||||
- name: GameIndex.yaml
|
||||
path: pcsx2/resources/GameIndex.yaml
|
||||
path: resources/GameIndex.yaml
|
||||
required: false
|
||||
mode: libretro
|
||||
source_ref: "pcsx2/GameDatabase.cpp:46, pcsx2/GameDatabase.cpp:896"
|
||||
note: "Game compatibility database. OSD warning if missing."
|
||||
bundled: true
|
||||
sha1: 5e2d50a3376dc6a0750505bec68626d39a5bd4c1
|
||||
size: 2683897
|
||||
category: game_data
|
||||
description: "per-title compatibility and fix database"
|
||||
source_ref: "pcsx2/GameDatabase.cpp:39, pcsx2/GameDatabase.cpp:1026-1035"
|
||||
note: "Read from the resources directory shipped with the application. Console error and no per-title fixes if missing."
|
||||
|
||||
- name: cheats_ws.zip
|
||||
path: pcsx2/resources/cheats_ws.zip
|
||||
- name: RedumpDatabase.yaml
|
||||
path: resources/RedumpDatabase.yaml
|
||||
required: false
|
||||
mode: libretro
|
||||
source_ref: "pcsx2/VMManager.cpp:348-361"
|
||||
note: "Widescreen patches archive."
|
||||
bundled: true
|
||||
sha1: bf2c73d668cd671df8adfe2ec3c7074e8ba9176a
|
||||
size: 1917242
|
||||
category: game_data
|
||||
description: "disc hash database"
|
||||
source_ref: "pcsx2/GameDatabase.cpp:1133, pcsx2/GameDatabase.cpp:1188-1197"
|
||||
note: "Read from the resources directory shipped with the application, used to name a disc from its dump."
|
||||
|
||||
- name: cheats_ni.zip
|
||||
path: pcsx2/resources/cheats_ni.zip
|
||||
- name: patches.zip
|
||||
path: resources/patches.zip
|
||||
required: false
|
||||
mode: libretro
|
||||
source_ref: "pcsx2/VMManager.cpp:383-396"
|
||||
note: "No-interlacing patches archive."
|
||||
bundled: true
|
||||
category: game_data
|
||||
description: "built-in game patch archive"
|
||||
source_ref: "pcsx2/Patch.cpp:117, pcsx2/Patch.cpp:289-318"
|
||||
note: "Opened read only from the resources directory shipped with the application and searched for the pnach matching the running serial and CRC. Widescreen and no-interlacing patches live inside it."
|
||||
@@ -59,14 +59,14 @@ files:
|
||||
# -- Fallback BIOS filenames (searched in order after scph550x) --
|
||||
|
||||
- name: "psxonpsp660.bin"
|
||||
description: "PSP embedded PS1 BIOS (region detected at runtime)"
|
||||
region: [world]
|
||||
description: "PSP embedded PS1 BIOS, filed as the Japanese BIOS"
|
||||
region: [japan]
|
||||
size: 524288
|
||||
required: false
|
||||
hle_fallback: true
|
||||
validation: [size]
|
||||
source_ref: "frontend/libretro.c:3864-3867 (listed_bios[3])"
|
||||
note: "Region detected from content at runtime. Must be 512 KB in libretro context."
|
||||
source_ref: "frontend/libretro.c:3864-3867 (listed_bios[3]), frontend/libretro.c:3654-3669 (try_use_bios region guess)"
|
||||
note: "The core reads the region out of the image: bytes 0x7ff51 are ' J' in this dump, so it takes the JP slot (' E' takes EU, anything else US), one image per slot, first found kept. The disc licence picks the slot at boot (Config.Bios[Config.PsxRegion]); a US or EU disc only reaches this file when its own slot is empty. Must be 512 KB."
|
||||
|
||||
- name: "scph101.bin"
|
||||
description: "SCPH-101 (v4.4 03-24-00 A) - PSone US"
|
||||
|
||||
@@ -12,7 +12,7 @@ systems:
|
||||
- sega-megadrive
|
||||
- sega-genesis
|
||||
- sega-megacd
|
||||
- sega-segacd
|
||||
- sega-megacd
|
||||
- sega-32x
|
||||
- sega-mastersystem
|
||||
- sega-gamegear
|
||||
@@ -63,7 +63,7 @@ files:
|
||||
# Mega CD / Sega CD - US region
|
||||
# -------------------------------------------------------
|
||||
- name: "us_scd2_9306.bin"
|
||||
system: sega-segacd
|
||||
system: sega-megacd
|
||||
variant_group: "mega-cd-bios"
|
||||
region: [north-america]
|
||||
priority: 1
|
||||
@@ -73,7 +73,7 @@ files:
|
||||
source_ref: "platform/libretro/libretro.c:1273"
|
||||
|
||||
- name: "SegaCDBIOS9303.bin"
|
||||
system: sega-segacd
|
||||
system: sega-megacd
|
||||
variant_group: "mega-cd-bios"
|
||||
region: [north-america]
|
||||
priority: 2
|
||||
@@ -83,7 +83,7 @@ files:
|
||||
source_ref: "platform/libretro/libretro.c:1273"
|
||||
|
||||
- name: "us_scd1_9210.bin"
|
||||
system: sega-segacd
|
||||
system: sega-megacd
|
||||
variant_group: "mega-cd-bios"
|
||||
region: [north-america]
|
||||
priority: 3
|
||||
@@ -93,7 +93,7 @@ files:
|
||||
source_ref: "platform/libretro/libretro.c:1273"
|
||||
|
||||
- name: "bios_CD_U.bin"
|
||||
system: sega-segacd
|
||||
system: sega-megacd
|
||||
variant_group: "mega-cd-bios"
|
||||
region: [north-america]
|
||||
priority: 4
|
||||
|
||||
@@ -84,7 +84,7 @@ platform_details:
|
||||
size: 4096
|
||||
|
||||
load_priority:
|
||||
source_ref: "source/PokeMini.c:515-523"
|
||||
source_ref: "source/PokeMini.c:500-509"
|
||||
note: |
|
||||
During PokeMini_Reset(), the core first reloads FreeBIOS as a
|
||||
safe baseline, then attempts to load bios.min from disk. If
|
||||
|
||||
@@ -51,5 +51,5 @@ files:
|
||||
md5: "72ae1b47820fcc93cc0df9c428d0face"
|
||||
sha1: "5f4aed208301449c2e9514edfd325fe9dead76fa"
|
||||
crc32: "a5751b99"
|
||||
source_ref: "src/d_main.c:1438-1476 (PACKAGE .wad load), libretro/libretro.c:4254-4330 (I_FindFile search), src/config.h:39 (PACKAGE=prboom)"
|
||||
source_ref: "src/d_main.c:1449-1465 (PACKAGE .wad load), libretro/libretro.c:4171-4252 (I_FindFile search), src/config.h:39 (PACKAGE=prboom)"
|
||||
note: "Searched in system/prboom/ then system/. Falls back to internal defaults if missing, but menus and HUD may render incorrectly without it."
|
||||
+6
-39
@@ -37,7 +37,6 @@ files:
|
||||
region: [north-america]
|
||||
size: 2097152
|
||||
required: false
|
||||
mode: standalone
|
||||
hle_fallback: true
|
||||
note: "GameCube NTSC-U boot ROM. HLE available but real IPL needed for GC menu boot and accurate fonts"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:138, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:109-110"
|
||||
@@ -47,7 +46,6 @@ files:
|
||||
region: [europe]
|
||||
size: 2097152
|
||||
required: false
|
||||
mode: standalone
|
||||
hle_fallback: true
|
||||
note: "GameCube PAL boot ROM"
|
||||
source_ref: "Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:184"
|
||||
@@ -57,7 +55,6 @@ files:
|
||||
region: [japan]
|
||||
size: 2097152
|
||||
required: false
|
||||
mode: standalone
|
||||
hle_fallback: true
|
||||
note: "GameCube NTSC-J boot ROM. JAP is the legacy directory name"
|
||||
source_ref: "Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:186"
|
||||
@@ -70,25 +67,23 @@ files:
|
||||
path: "GC/dsp_rom.bin"
|
||||
size: 8192
|
||||
required: false
|
||||
mode: standalone
|
||||
hle_fallback: true
|
||||
validation: [size]
|
||||
known_hash_adler32: "0x66f334fe"
|
||||
validation: [size, adler32]
|
||||
known_hash_adler32: ["0x66f334fe", "0xe789b5a5"]
|
||||
adler32_byteswap: true
|
||||
note: "DSP instruction ROM for LLE audio. Free replacement (v0.4) included"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:135, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:87-117"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:135, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:87-117, Source/Core/Core/DSP/DSPCore.cpp:28-102"
|
||||
|
||||
- name: "dsp_coef.bin"
|
||||
path: "GC/dsp_coef.bin"
|
||||
size: 4096
|
||||
required: false
|
||||
mode: standalone
|
||||
hle_fallback: true
|
||||
validation: [size]
|
||||
known_hash_adler32: "0xf3b93527"
|
||||
validation: [size, adler32]
|
||||
known_hash_adler32: ["0xf3b93527", "0xa4a575f5"]
|
||||
adler32_byteswap: true
|
||||
note: "DSP coefficient ROM for LLE audio. Free replacement included"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:138, Source/Core/Core/DSP/DSPCore.cpp:32-38"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:138, Source/Core/Core/DSP/DSPCore.cpp:32-38, Source/Core/Core/DSP/DSPCore.cpp:28-102"
|
||||
|
||||
# -- GameCube Fonts --
|
||||
# Bundled free alternatives exist but have padding differences causing misplaced text.
|
||||
@@ -98,7 +93,6 @@ files:
|
||||
path: "GC/font_western.bin"
|
||||
size: 9589
|
||||
required: false
|
||||
mode: standalone
|
||||
hle_fallback: true
|
||||
note: "Windows-1252 font for GC/Wii text rendering. Free alternative bundled, real one from IPL dump preferred"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:132, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:131,203-218"
|
||||
@@ -107,7 +101,6 @@ files:
|
||||
path: "GC/font_japanese.bin"
|
||||
size: 303693
|
||||
required: false
|
||||
mode: standalone
|
||||
hle_fallback: true
|
||||
note: "Shift-JIS font for Japanese text. Free alternative bundled, real one from IPL dump preferred"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:135, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:130"
|
||||
@@ -118,7 +111,6 @@ files:
|
||||
- name: "gba_bios.bin"
|
||||
path: "GBA/gba_bios.bin"
|
||||
required: false
|
||||
mode: standalone
|
||||
hle_fallback: true
|
||||
note: "GBA BIOS for GC-GBA link feature (uses integrated mGBA). Path configurable in settings"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:144, Source/Core/Core/HW/GBACore.cpp:344-361"
|
||||
@@ -127,7 +119,6 @@ files:
|
||||
- name: "SYSCONF"
|
||||
path: "Wii/shared2/sys/SYSCONF"
|
||||
required: false
|
||||
mode: standalone
|
||||
hle_fallback: true
|
||||
note: "Wii system configuration. Auto-generated by PrimeHack, can be imported from NAND backup"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:118, Source/Core/Core/WiiRoot.cpp:266"
|
||||
@@ -136,7 +127,6 @@ files:
|
||||
path: "Wii/title/00000001/00000002/data/setting.txt"
|
||||
size: 256
|
||||
required: false
|
||||
mode: standalone
|
||||
hle_fallback: true
|
||||
note: "Wii region/language settings. Auto-generated during Wii boot emulation"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:152, Source/Core/Core/Boot/Boot_BS2Emu.cpp:377-454"
|
||||
@@ -145,7 +135,6 @@ files:
|
||||
- name: "nand.bin"
|
||||
path: null
|
||||
required: false
|
||||
mode: standalone
|
||||
hle_fallback: true
|
||||
note: "BootMii NAND backup. Can be imported to populate Wii NAND with channels, saves, system menu"
|
||||
source_ref: "Source/Core/DiscIO/NANDImporter.cpp:26-89"
|
||||
@@ -154,7 +143,6 @@ files:
|
||||
path: null
|
||||
size: 1024
|
||||
required: false
|
||||
mode: standalone
|
||||
hle_fallback: true
|
||||
note: "OTP/SEEPROM dump (Wii encryption keys). Needed if not appended to nand.bin for NAND import"
|
||||
source_ref: "Source/Core/DiscIO/NANDImporter.cpp:19,76-88"
|
||||
@@ -163,7 +151,6 @@ files:
|
||||
- name: "WiiSD.raw"
|
||||
path: "Load/WiiSD.raw"
|
||||
required: false
|
||||
mode: standalone
|
||||
hle_fallback: true
|
||||
note: "Virtual SD card image for Wii homebrew. Auto-created, supports SD/SDHC up to 4GB"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:149"
|
||||
@@ -172,7 +159,6 @@ files:
|
||||
- name: "codehandler.bin"
|
||||
path: null
|
||||
required: false
|
||||
mode: standalone
|
||||
hle_fallback: true
|
||||
note: "Gecko/Ocarina cheat code handler. Shipped with PrimeHack in Sys/"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:154, Source/Core/Core/GeckoCode.cpp:121"
|
||||
@@ -181,7 +167,6 @@ files:
|
||||
- name: "Wii System Menu"
|
||||
path: null
|
||||
required: false
|
||||
mode: standalone
|
||||
hle_fallback: true
|
||||
note: "Wii System Menu WAD. Installed to NAND via Tools > Install WAD, needed for Wii Menu boot"
|
||||
source_ref: "Source/Core/DolphinQt/MenuBar.cpp:335, Source/Core/DolphinQt/MenuBar.cpp:1582-1590"
|
||||
@@ -190,7 +175,6 @@ files:
|
||||
- name: "clientca.pem"
|
||||
path: "Wii/clientca.pem"
|
||||
required: false
|
||||
mode: standalone
|
||||
hle_fallback: true
|
||||
note: "SSL client certificate. Auto-extracted from IOS13 content during NAND import"
|
||||
source_ref: "Source/Core/DiscIO/NANDImporter.cpp:201-285"
|
||||
@@ -198,7 +182,6 @@ files:
|
||||
- name: "clientcakey.pem"
|
||||
path: "Wii/clientcakey.pem"
|
||||
required: false
|
||||
mode: standalone
|
||||
hle_fallback: true
|
||||
note: "SSL client private key. Auto-extracted from IOS13 content during NAND import"
|
||||
source_ref: "Source/Core/DiscIO/NANDImporter.cpp:237"
|
||||
@@ -206,7 +189,6 @@ files:
|
||||
- name: "rootca.pem"
|
||||
path: "Wii/rootca.pem"
|
||||
required: false
|
||||
mode: standalone
|
||||
hle_fallback: true
|
||||
note: "SSL root CA certificate. Auto-extracted from IOS13 content during NAND import"
|
||||
source_ref: "Source/Core/DiscIO/NANDImporter.cpp:238"
|
||||
@@ -220,105 +202,90 @@ files:
|
||||
- name: "rtl8723a_fw.bin"
|
||||
path: "Load/Firmware/rtl_bt/rtl8723a_fw.bin"
|
||||
required: false
|
||||
mode: standalone
|
||||
note: "Realtek 8723A BT firmware for Wiimote passthrough"
|
||||
source_ref: "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:379"
|
||||
|
||||
- name: "rtl8723b_fw.bin"
|
||||
path: "Load/Firmware/rtl_bt/rtl8723b_fw.bin"
|
||||
required: false
|
||||
mode: standalone
|
||||
note: "Realtek 8723B BT firmware for Wiimote passthrough"
|
||||
source_ref: "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:516-519"
|
||||
|
||||
- name: "rtl8723d_fw.bin"
|
||||
path: "Load/Firmware/rtl_bt/rtl8723d_fw.bin"
|
||||
required: false
|
||||
mode: standalone
|
||||
note: "Realtek 8723D BT firmware for Wiimote passthrough"
|
||||
source_ref: "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:383"
|
||||
|
||||
- name: "rtl8761a_fw.bin"
|
||||
path: "Load/Firmware/rtl_bt/rtl8761a_fw.bin"
|
||||
required: false
|
||||
mode: standalone
|
||||
note: "Realtek 8761A BT firmware for Wiimote passthrough"
|
||||
source_ref: "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:385"
|
||||
|
||||
- name: "rtl8761bu_fw.bin"
|
||||
path: "Load/Firmware/rtl_bt/rtl8761bu_fw.bin"
|
||||
required: false
|
||||
mode: standalone
|
||||
note: "Realtek 8761BU BT firmware for Wiimote passthrough"
|
||||
source_ref: "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:387"
|
||||
|
||||
- name: "rtl8821a_fw.bin"
|
||||
path: "Load/Firmware/rtl_bt/rtl8821a_fw.bin"
|
||||
required: false
|
||||
mode: standalone
|
||||
note: "Realtek 8821A BT firmware for Wiimote passthrough"
|
||||
source_ref: "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:389"
|
||||
|
||||
- name: "rtl8821c_fw.bin"
|
||||
path: "Load/Firmware/rtl_bt/rtl8821c_fw.bin"
|
||||
required: false
|
||||
mode: standalone
|
||||
note: "Realtek 8821C BT firmware for Wiimote passthrough"
|
||||
source_ref: "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:391"
|
||||
|
||||
- name: "rtl8822b_fw.bin"
|
||||
path: "Load/Firmware/rtl_bt/rtl8822b_fw.bin"
|
||||
required: false
|
||||
mode: standalone
|
||||
note: "Realtek 8822B BT firmware for Wiimote passthrough"
|
||||
source_ref: "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:395"
|
||||
|
||||
- name: "rtl8822cu_fw.bin"
|
||||
path: "Load/Firmware/rtl_bt/rtl8822cu_fw.bin"
|
||||
required: false
|
||||
mode: standalone
|
||||
note: "Realtek 8822CU BT firmware for Wiimote passthrough"
|
||||
source_ref: "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:393"
|
||||
|
||||
- name: "rtl8851bu_fw.bin"
|
||||
path: "Load/Firmware/rtl_bt/rtl8851bu_fw.bin"
|
||||
required: false
|
||||
mode: standalone
|
||||
note: "Realtek 8851BU BT firmware for Wiimote passthrough"
|
||||
source_ref: "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:397"
|
||||
|
||||
- name: "rtl8852au_fw.bin"
|
||||
path: "Load/Firmware/rtl_bt/rtl8852au_fw.bin"
|
||||
required: false
|
||||
mode: standalone
|
||||
note: "Realtek 8852AU BT firmware for Wiimote passthrough"
|
||||
source_ref: "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:399"
|
||||
|
||||
- name: "rtl8852bu_fw.bin"
|
||||
path: "Load/Firmware/rtl_bt/rtl8852bu_fw.bin"
|
||||
required: false
|
||||
mode: standalone
|
||||
note: "Realtek 8852BU BT firmware for Wiimote passthrough"
|
||||
source_ref: "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:401"
|
||||
|
||||
- name: "rtl8852cu_fw.bin"
|
||||
path: "Load/Firmware/rtl_bt/rtl8852cu_fw.bin"
|
||||
required: false
|
||||
mode: standalone
|
||||
note: "Realtek 8852CU BT firmware for Wiimote passthrough"
|
||||
source_ref: "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:403"
|
||||
|
||||
- name: "rtl8852btu_fw.bin"
|
||||
path: "Load/Firmware/rtl_bt/rtl8852btu_fw.bin"
|
||||
required: false
|
||||
mode: standalone
|
||||
note: "Realtek 8852BT/8852BE-VT BT firmware for Wiimote passthrough"
|
||||
source_ref: "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:405"
|
||||
|
||||
- name: "rtl8922au_fw.bin"
|
||||
path: "Load/Firmware/rtl_bt/rtl8922au_fw.bin"
|
||||
required: false
|
||||
mode: standalone
|
||||
note: "Realtek 8922AU BT firmware for Wiimote passthrough"
|
||||
source_ref: "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:407"
|
||||
|
||||
|
||||
+5
-5
@@ -56,7 +56,7 @@ notes: |
|
||||
capsimg.so/capsimg.dll is an optional shared library for IPF floppy image
|
||||
support (SPS/CAPS format). Not a BIOS file, loaded dynamically at runtime.
|
||||
|
||||
Source: libretro/libretro-core.h:140-245, libretro/libretro-core.c:5612-5752,
|
||||
Source: libretro/libretro-core.h:140-245, libretro/libretro-core.c:5609-5777,
|
||||
libretro/libretro-core.c:6044-6093
|
||||
|
||||
files:
|
||||
@@ -243,20 +243,20 @@ files:
|
||||
system: commodore-amiga
|
||||
required: false
|
||||
note: "Amiga Forever ROM decryption key. Copied to saves/WHDLoad/Devs/Kickstarts/ for WHDLoad."
|
||||
source_ref: "libretro/libretro-core.c:5969-5980"
|
||||
source_ref: "libretro/libretro-core.c:5963-5978"
|
||||
|
||||
- name: "WHDLoad.key"
|
||||
system: commodore-amiga
|
||||
required: false
|
||||
unsourceable: "per-user signed registration key, never distributed generically, WHDLoad free since v18.2"
|
||||
note: "WHDLoad license key. Copied to saves/WHDLoad/L/ for registered WHDLoad use."
|
||||
source_ref: "libretro/libretro-core.c:5985-5998"
|
||||
source_ref: "libretro/libretro-core.c:5979-5994"
|
||||
|
||||
- name: "WHDLoad.prefs"
|
||||
system: commodore-amiga
|
||||
required: false
|
||||
note: "WHDLoad preferences. Copied to saves/WHDLoad/S/ when present."
|
||||
source_ref: "libretro/libretro-core.c:6000-6023"
|
||||
source_ref: "libretro/libretro-core.c:5995-6018"
|
||||
|
||||
model_kickstart_map:
|
||||
A500: {kickstart: "kick34005.A500", ext: null}
|
||||
@@ -290,4 +290,4 @@ platform_details:
|
||||
amiga_forever: "amiga-os-{version}.rom"
|
||||
tosec: "Kickstart v{version} rev {rev} ({year})(Commodore)({model}).rom"
|
||||
scan_prefixes: ["kick", "amiga-os", "KS ROM"]
|
||||
source_ref: "libretro/libretro-core.c:2651-2678"
|
||||
source_ref: "libretro/libretro-core.c:2650-2677"
|
||||
@@ -60,8 +60,8 @@ notes: |
|
||||
capsimg.so/capsimg.dll is an optional shared library for IPF floppy image
|
||||
support (SPS/CAPS format). Not a BIOS file, loaded dynamically at runtime.
|
||||
|
||||
Source: libretro/libretro-core.h:140-245, libretro/libretro-core.c:5384-5550,
|
||||
libretro/libretro-core.c:5636-5795
|
||||
Source: libretro/libretro-core.h:140-245, libretro/libretro-core.c:5533-5701,
|
||||
libretro/libretro-core.c:5788-5879
|
||||
|
||||
files:
|
||||
# -------------------------------------------------------
|
||||
@@ -247,20 +247,20 @@ files:
|
||||
system: commodore-amiga
|
||||
required: false
|
||||
note: "Amiga Forever ROM decryption key. Copied to saves/WHDLoad/Devs/Kickstarts/ for WHDLoad."
|
||||
source_ref: "libretro/libretro-core.c:5735-5746"
|
||||
source_ref: "libretro/libretro-core.c:5887-5902"
|
||||
|
||||
- name: "WHDLoad.key"
|
||||
system: commodore-amiga
|
||||
required: false
|
||||
unsourceable: "per-user signed registration key, never distributed generically, WHDLoad free since v18.2"
|
||||
note: "WHDLoad license key. Copied to saves/WHDLoad/L/ for registered WHDLoad use."
|
||||
source_ref: "libretro/libretro-core.c:5751-5764"
|
||||
source_ref: "libretro/libretro-core.c:5903-5918"
|
||||
|
||||
- name: "WHDLoad.prefs"
|
||||
system: commodore-amiga
|
||||
required: false
|
||||
note: "WHDLoad preferences. Copied to saves/WHDLoad/S/ when present."
|
||||
source_ref: "libretro/libretro-core.c:5768-5791"
|
||||
source_ref: "libretro/libretro-core.c:5919-5942"
|
||||
|
||||
model_kickstart_map:
|
||||
A500: {kickstart: "kick34005.A500", ext: null}
|
||||
@@ -294,4 +294,4 @@ platform_details:
|
||||
amiga_forever: "amiga-os-{version}.rom"
|
||||
tosec: "Kickstart v{version} rev {rev} ({year})(Commodore)({model}).rom"
|
||||
scan_prefixes: ["kick", "amiga-os", "KS ROM"]
|
||||
source_ref: "libretro/libretro-core.c:2577-2616"
|
||||
source_ref: "libretro/libretro-core.c:2629-2656"
|
||||
@@ -20,22 +20,19 @@ mode: standalone
|
||||
files:
|
||||
- name: "prod.keys"
|
||||
required: true
|
||||
path: "switch/"
|
||||
mode: standalone
|
||||
path: "switch/prod.keys"
|
||||
note: "Switch production keys for NCA decryption"
|
||||
source_ref: "src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs:239"
|
||||
|
||||
- name: "title.keys"
|
||||
required: false
|
||||
path: "switch/"
|
||||
mode: standalone
|
||||
path: "switch/title.keys"
|
||||
note: "Per-title decryption keys, needed for specific game content"
|
||||
source_ref: "src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs:240"
|
||||
|
||||
- name: "console.keys"
|
||||
required: false
|
||||
path: "switch/"
|
||||
mode: standalone
|
||||
path: "switch/console.keys"
|
||||
note: "Console-specific keys for encrypted content"
|
||||
source_ref: "src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs:241"
|
||||
|
||||
|
||||
+26
-26
@@ -48,20 +48,20 @@ files:
|
||||
- name: "libSceLibcInternal.sprx"
|
||||
required: false
|
||||
hle_fallback: true
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceLibcInternal.sprx"
|
||||
description: "PS4 C standard library"
|
||||
source_ref: "src/core/linker.cpp:80-91"
|
||||
|
||||
- name: "libSceNgs2.sprx"
|
||||
required: false
|
||||
hle_fallback: true
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceNgs2.sprx"
|
||||
description: "PS4 next-generation audio system"
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:217"
|
||||
|
||||
- name: "libSceUlt.sprx"
|
||||
required: false
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceUlt.sprx"
|
||||
description: "PS4 user-level threading library"
|
||||
note: "No HLE implementation; the module is stubbed when absent."
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:218"
|
||||
@@ -69,13 +69,13 @@ files:
|
||||
- name: "libSceRtc.sprx"
|
||||
required: false
|
||||
hle_fallback: true
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceRtc.sprx"
|
||||
description: "PS4 real-time clock library"
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:221"
|
||||
|
||||
- name: "libSceJpegDec.sprx"
|
||||
required: false
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceJpegDec.sprx"
|
||||
description: "PS4 JPEG decoder"
|
||||
note: "No HLE implementation; the module is stubbed when absent."
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:222"
|
||||
@@ -83,83 +83,83 @@ files:
|
||||
- name: "libSceJpegEnc.sprx"
|
||||
required: false
|
||||
hle_fallback: true
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceJpegEnc.sprx"
|
||||
description: "PS4 JPEG encoder"
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:223"
|
||||
|
||||
- name: "libScePngEnc.sprx"
|
||||
required: false
|
||||
hle_fallback: true
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libScePngEnc.sprx"
|
||||
description: "PS4 PNG encoder"
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:225"
|
||||
|
||||
- name: "libSceJson.sprx"
|
||||
required: false
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceJson.sprx"
|
||||
description: "PS4 JSON parser"
|
||||
note: "No HLE implementation; the module is stubbed when absent."
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:226"
|
||||
|
||||
- name: "libSceJson2.sprx"
|
||||
required: false
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceJson2.sprx"
|
||||
description: "PS4 JSON v2 parser"
|
||||
note: "No HLE implementation; the module is stubbed when absent."
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:227"
|
||||
|
||||
- name: "libSceCesCs.sprx"
|
||||
required: false
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceCesCs.sprx"
|
||||
description: "PS4 character encoding conversion"
|
||||
note: "No HLE implementation; the module is stubbed when absent."
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:228"
|
||||
|
||||
- name: "libSceAt9Enc.sprx"
|
||||
required: false
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceAt9Enc.sprx"
|
||||
description: "PS4 ATRAC9 encoder"
|
||||
note: "No HLE implementation; the module is stubbed when absent."
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:229"
|
||||
|
||||
- name: "libSceAudiodec.sprx"
|
||||
required: false
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceAudiodec.sprx"
|
||||
description: "PS4 audio decoder"
|
||||
note: "No HLE implementation; the module is stubbed when absent."
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:230"
|
||||
|
||||
- name: "libSceAudiodecCpu.sprx"
|
||||
required: false
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceAudiodecCpu.sprx"
|
||||
description: "PS4 CPU audio decoder"
|
||||
note: "No HLE implementation; the module is stubbed when absent."
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:231"
|
||||
|
||||
- name: "libSceAudiodecCpuDdp.sprx"
|
||||
required: false
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceAudiodecCpuDdp.sprx"
|
||||
description: "PS4 CPU Dolby Digital Plus decoder"
|
||||
note: "No HLE implementation; the module is stubbed when absent."
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:232"
|
||||
|
||||
- name: "libSceAudiodecCpuM4aac.sprx"
|
||||
required: false
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceAudiodecCpuM4aac.sprx"
|
||||
description: "PS4 CPU AAC decoder"
|
||||
note: "No HLE implementation; the module is stubbed when absent."
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:233"
|
||||
|
||||
- name: "libSceAudiodecCpuDtsHdLbr.sprx"
|
||||
required: false
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceAudiodecCpuDtsHdLbr.sprx"
|
||||
description: "PS4 CPU DTS-HD LBR decoder"
|
||||
note: "No HLE implementation; the module is stubbed when absent."
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:234"
|
||||
|
||||
- name: "libSceAudiodecCpuHevag.sprx"
|
||||
required: false
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceAudiodecCpuHevag.sprx"
|
||||
description: "PS4 CPU HEVAG decoder"
|
||||
note: "No HLE implementation; the module is stubbed when absent."
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:235"
|
||||
@@ -167,34 +167,34 @@ files:
|
||||
- name: "libSceFont.sprx"
|
||||
required: false
|
||||
hle_fallback: true
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceFont.sprx"
|
||||
description: "PS4 font rendering library"
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:236"
|
||||
|
||||
- name: "libSceFontFt.sprx"
|
||||
required: false
|
||||
hle_fallback: true
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceFontFt.sprx"
|
||||
description: "PS4 FreeType font library"
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:237"
|
||||
|
||||
- name: "libSceFreeTypeOt.sprx"
|
||||
required: false
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceFreeTypeOt.sprx"
|
||||
description: "PS4 FreeType OpenType library"
|
||||
note: "No HLE implementation; the module is stubbed when absent."
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:238"
|
||||
|
||||
- name: "libSceFreeTypeOl.sprx"
|
||||
required: false
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceFreeTypeOl.sprx"
|
||||
description: "PS4 FreeType outline library"
|
||||
note: "No HLE implementation; the module is stubbed when absent."
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:239"
|
||||
|
||||
- name: "libSceFreeTypeOptOl.sprx"
|
||||
required: false
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceFreeTypeOptOl.sprx"
|
||||
description: "PS4 FreeType optimised outline library"
|
||||
note: "No HLE implementation; the module is stubbed when absent."
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:240"
|
||||
@@ -202,13 +202,13 @@ files:
|
||||
- name: "libSceRudp.sprx"
|
||||
required: false
|
||||
hle_fallback: true
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceRudp.sprx"
|
||||
description: "PS4 reliable UDP library"
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:243"
|
||||
|
||||
- name: "libSceWkFontConfig.sprx"
|
||||
required: false
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceWkFontConfig.sprx"
|
||||
description: "PS4 WebKit font configuration"
|
||||
note: "No HLE implementation; the module is stubbed when absent."
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:244"
|
||||
@@ -216,13 +216,13 @@ files:
|
||||
- name: "libSceSystemGesture.sprx"
|
||||
required: false
|
||||
hle_fallback: true
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceSystemGesture.sprx"
|
||||
description: "PS4 system gesture recognition"
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:249"
|
||||
|
||||
- name: "libSceXml.sprx"
|
||||
required: false
|
||||
path: "shadps4/sys_modules/"
|
||||
path: "shadps4/sys_modules/libSceXml.sprx"
|
||||
description: "PS4 XML parser"
|
||||
note: "No HLE implementation; the module is stubbed when absent."
|
||||
source_ref: "src/core/libraries/sysmodule/sysmodule_internal.cpp:250"
|
||||
+4
-8
@@ -25,30 +25,26 @@ mode: standalone
|
||||
files:
|
||||
- name: "prod.keys"
|
||||
required: true
|
||||
path: "switch/"
|
||||
mode: standalone
|
||||
path: "switch/prod.keys"
|
||||
note: "Production keys for NCA decryption (master, key area, header, titlekek)"
|
||||
source_ref: "src/core/crypto/key_manager.cpp:654"
|
||||
|
||||
- name: "title.keys"
|
||||
required: false
|
||||
path: "switch/"
|
||||
mode: standalone
|
||||
path: "switch/title.keys"
|
||||
note: "Per-title encryption keys (rights_id to titlekey mappings)"
|
||||
source_ref: "src/core/crypto/key_manager.cpp:657"
|
||||
|
||||
- name: "console.keys"
|
||||
required: false
|
||||
path: "switch/"
|
||||
mode: standalone
|
||||
path: "switch/console.keys"
|
||||
note: "Console-specific keys (BIS, SD seed)"
|
||||
source_ref: "src/core/crypto/key_manager.cpp:658"
|
||||
|
||||
- name: "key_retail.bin"
|
||||
required: false
|
||||
path: "switch/"
|
||||
path: "switch/key_retail.bin"
|
||||
size: 160
|
||||
mode: standalone
|
||||
note: "Amiibo decryption keys (two InternalKey structs, 0x50 bytes each)"
|
||||
source_ref: "src/core/hle/service/nfc/common/amiibo_crypto.cpp:273-294"
|
||||
|
||||
|
||||
@@ -227,12 +227,12 @@ files:
|
||||
path: "GC/dsp_rom.bin"
|
||||
description: "DSP instruction ROM"
|
||||
size: 8192
|
||||
validation: [size]
|
||||
known_hash_adler32: "0x66f334fe"
|
||||
validation: [size, adler32]
|
||||
known_hash_adler32: ["0x66f334fe", "0xe789b5a5"]
|
||||
adler32_byteswap: true
|
||||
required: false
|
||||
hle_fallback: true
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:145, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:87-105,109-118, Source/Core/Core/DSP/DSPCore.h:44, Source/Core/Core/DSP/DSPCore.cpp:36-38"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:145, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:87-105,109-118, Source/Core/Core/DSP/DSPCore.h:44, Source/Core/Core/DSP/DSPCore.cpp:36-38, Source/Core/Core/DSP/DSPCore.cpp:28-102"
|
||||
note: >
|
||||
LoadDSPRom rejects any file whose length differs from DSP_IROM_BYTE_SIZE and
|
||||
swaps every 16 bit word before storing it, so the Adler32 in the source is
|
||||
@@ -245,12 +245,12 @@ files:
|
||||
path: "GC/dsp_coef.bin"
|
||||
description: "DSP coefficient ROM"
|
||||
size: 4096
|
||||
validation: [size]
|
||||
known_hash_adler32: "0xf3b93527"
|
||||
validation: [size, adler32]
|
||||
known_hash_adler32: ["0xf3b93527", "0xa4a575f5"]
|
||||
adler32_byteswap: true
|
||||
required: false
|
||||
hle_fallback: true
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:146, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:87-105,110-119, Source/Core/Core/DSP/DSPCore.h:58, Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp:61-62"
|
||||
source_ref: "Source/Core/Common/CommonPaths.h:146, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:87-105,110-119, Source/Core/Core/DSP/DSPCore.h:58, Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp:61-62, Source/Core/Core/DSP/DSPCore.cpp:28-102"
|
||||
note: >
|
||||
Also read by the HLE AX ucode for polyphase resampling. Adler32 is taken over
|
||||
the byte-swapped data (Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:100-102).
|
||||
|
||||
+5
-5
@@ -74,7 +74,7 @@ notes: |
|
||||
Source: retrodep/embedded/*.c (embedded ROM tables),
|
||||
vice/src/*/rom.h (ROM name defines), vice/src/drive/driverom.h (drive ROMs),
|
||||
retrodep/ui.c:274-315 (JiffyDOS loading), retrodep/ui.c:258-271 (SCPU kernal),
|
||||
libretro/libretro-core.c:2807-2872 (core options for JiffyDOS/SCPU)
|
||||
libretro/libretro-core.c:2806-2871 (core options for JiffyDOS/SCPU)
|
||||
|
||||
files:
|
||||
# -------------------------------------------------------
|
||||
@@ -1082,7 +1082,7 @@ files:
|
||||
hle_fallback: true
|
||||
embedded: false
|
||||
note: "SuperCPU DOS v1.40 external kernal. Optional, selected via core option. Goes in system/vice/SCPU64/."
|
||||
source_ref: "retrodep/ui.c:266, libretro/libretro-core.c:2832"
|
||||
source_ref: "retrodep/ui.c:266, libretro/libretro-core.c:2830"
|
||||
|
||||
- name: "vice/SCPU64/scpu-dos-2.04.bin"
|
||||
system: commodore-c64
|
||||
@@ -1090,7 +1090,7 @@ files:
|
||||
hle_fallback: true
|
||||
embedded: false
|
||||
note: "SuperCPU DOS v2.04 external kernal. Optional, selected via core option. Goes in system/vice/SCPU64/."
|
||||
source_ref: "retrodep/ui.c:263, libretro/libretro-core.c:2834"
|
||||
source_ref: "retrodep/ui.c:263, libretro/libretro-core.c:2831"
|
||||
|
||||
# -------------------------------------------------------
|
||||
# Drive ROMs (shared across all cores with True Drive Emulation)
|
||||
@@ -1274,7 +1274,7 @@ files:
|
||||
hle_fallback: true
|
||||
embedded: false
|
||||
note: "JiffyDOS C64 kernal replacement. Optional, proprietary. Requires True Drive Emulation + 1541/1571/1581 drive."
|
||||
source_ref: "retrodep/ui.c:302, libretro/libretro-core.c:2862"
|
||||
source_ref: "retrodep/ui.c:302, libretro/libretro-core.c:2859"
|
||||
|
||||
- name: "vice/JiffyDOS_SX-64.bin"
|
||||
system: commodore-c64
|
||||
@@ -1290,7 +1290,7 @@ files:
|
||||
hle_fallback: true
|
||||
embedded: false
|
||||
note: "JiffyDOS C128 kernal replacement. Optional, proprietary. C128 core only."
|
||||
source_ref: "retrodep/ui.c:309, libretro/libretro-core.c:2864"
|
||||
source_ref: "retrodep/ui.c:309, libretro/libretro-core.c:2861"
|
||||
|
||||
- name: "vice/JiffyDOS_1541-II.bin"
|
||||
system: commodore-c64
|
||||
|
||||
@@ -112,10 +112,11 @@ files:
|
||||
required: false
|
||||
size: 131072
|
||||
validation: [size]
|
||||
aliases:
|
||||
- boot.rom
|
||||
sha1: "af643900fea84234e08b616a6d27f03f0a61db96"
|
||||
md5: "6e844759720226e58d55ecaf33608a13"
|
||||
crc32: "ae25bdf5"
|
||||
description: "Model-M cart boot ROM, read when the BIOS type is Model M"
|
||||
source_ref: "libretro.c:5358-5380"
|
||||
source_ref: "libretro.c:5358-5380, src/bios/jagbios_m.c:9"
|
||||
note: >-
|
||||
Read from the system directory only, as jagboot_m.rom, and only when
|
||||
biosType is BT_M_SERIES. A short read falls back to the embedded
|
||||
|
||||
+4
-8
@@ -26,30 +26,26 @@ mode: standalone
|
||||
files:
|
||||
- name: "prod.keys"
|
||||
required: true
|
||||
path: "switch/"
|
||||
mode: standalone
|
||||
path: "switch/prod.keys"
|
||||
note: "Production keys for NCA decryption (master, key area, header, titlekek)"
|
||||
source_ref: "src/core/crypto/key_manager.cpp:655-656"
|
||||
|
||||
- name: "title.keys"
|
||||
required: false
|
||||
path: "switch/"
|
||||
mode: standalone
|
||||
path: "switch/title.keys"
|
||||
note: "Per-title encryption keys (rights_id to titlekey mappings)"
|
||||
source_ref: "src/core/crypto/key_manager.cpp:659-660"
|
||||
|
||||
- name: "console.keys"
|
||||
required: false
|
||||
path: "switch/"
|
||||
mode: standalone
|
||||
path: "switch/console.keys"
|
||||
note: "Console-specific keys (BIS, SD seed)"
|
||||
source_ref: "src/core/crypto/key_manager.cpp:661-662"
|
||||
|
||||
- name: "key_retail.bin"
|
||||
required: false
|
||||
path: "switch/"
|
||||
path: "switch/key_retail.bin"
|
||||
size: 160
|
||||
mode: standalone
|
||||
note: "Amiibo decryption keys (two InternalKey structs, 0x50 bytes each)"
|
||||
source_ref: "src/core/hle/service/nfc/common/amiibo_crypto.cpp:273-294"
|
||||
|
||||
|
||||
@@ -90,6 +90,7 @@ files:
|
||||
# ============================================================
|
||||
|
||||
- name: "48.rom"
|
||||
sha1: "5ea7c2b824672e914525d1d5c419d71b84a426a2"
|
||||
size: 16384
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -100,6 +101,7 @@ files:
|
||||
note: "48K BASIC. Also loaded four times over as the TBBlue fast-boot image (src/cpu.c:3653-3662)."
|
||||
|
||||
- name: "48es.rom"
|
||||
sha1: "9e535e2e24231ccb65e33d107f6d0ceb23e99477"
|
||||
size: 16384
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -109,6 +111,7 @@ files:
|
||||
note: "Spanish 48K+ ROM, selected for MACHINE_ID_SPECTRUM_48_PLUS_SPA."
|
||||
|
||||
- name: "inves.rom"
|
||||
sha1: "d020440638aff4d39467128413ef795677be9c23"
|
||||
size: 16384
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -118,6 +121,7 @@ files:
|
||||
note: "Investronica Inves Spectrum+. Loaded at memoria_spectrum[65536] (src/cpu.c:3551-3557)."
|
||||
|
||||
- name: "128.rom"
|
||||
sha1: "16375d42ea109b47edded7a16028de7fdb3013a1"
|
||||
size: 32768
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -126,6 +130,7 @@ files:
|
||||
source_ref: "src/cpu.c:3312-3314, src/utils.c:4100"
|
||||
|
||||
- name: "128s.rom"
|
||||
sha1: "57c0b6681224378ce1d279fde13d644478423783"
|
||||
size: 32768
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -134,6 +139,7 @@ files:
|
||||
source_ref: "src/cpu.c:3316-3318, src/utils.c:4100"
|
||||
|
||||
- name: "p2.rom"
|
||||
sha1: "8cafb292af58617907b9e6b9093d3588a75849b8"
|
||||
size: 32768
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -143,6 +149,7 @@ files:
|
||||
note: "ZX Spectrum +2."
|
||||
|
||||
- name: "p2f.rom"
|
||||
sha1: "8a5be00921afd4e2c74059c217b31b9fb51c3d41"
|
||||
size: 32768
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -151,6 +158,7 @@ files:
|
||||
source_ref: "src/cpu.c:3327-3329, src/utils.c:4100"
|
||||
|
||||
- name: "p2s.rom"
|
||||
sha1: "baca5d798b3e786078feded19486d9fc29dbd4b7"
|
||||
size: 32768
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -159,6 +167,7 @@ files:
|
||||
source_ref: "src/cpu.c:3331-3333, src/utils.c:4100"
|
||||
|
||||
- name: "p2a40.rom"
|
||||
sha1: "929bf1a5e5687ebd8d7245f9b513a596c0ec21a4"
|
||||
size: 65536
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -168,6 +177,7 @@ files:
|
||||
note: "+2A/+3 ROM v4.0."
|
||||
|
||||
- name: "p2a41.rom"
|
||||
sha1: "500c0945760abeefcbd08bc22c0d07b14b336cf0"
|
||||
size: 65536
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -177,6 +187,7 @@ files:
|
||||
note: "+2A/+3 ROM v4.1."
|
||||
|
||||
- name: "p2as.rom"
|
||||
sha1: "a4b311135ccbe010318dcb872dae2c8f078c7447"
|
||||
size: 65536
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -185,6 +196,7 @@ files:
|
||||
source_ref: "src/cpu.c:3347-3350, src/utils.c:4102"
|
||||
|
||||
- name: "pentagon.rom"
|
||||
sha1: "a584272f21dc82c14b7d4f1ed440e23a976e71f0"
|
||||
size: 32768
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -193,6 +205,7 @@ files:
|
||||
source_ref: "src/cpu.c:3381-3383, src/utils.c:4100 (MACHINE_IS_SPECTRUM_128_P2 covers Pentagon, src/cpu.h:545)"
|
||||
|
||||
- name: "se.rom"
|
||||
sha1: "14321f2092b8af21b52b35c1518d9a753d6618d4"
|
||||
size: 32768
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -202,6 +215,7 @@ files:
|
||||
note: "Chloe 140SE/280SE, SE Basic IV."
|
||||
|
||||
- name: "chrome.rom"
|
||||
sha1: "fb305656769765224c58ca02445d4bf041891d18"
|
||||
size: 65536
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -210,6 +224,7 @@ files:
|
||||
source_ref: "src/cpu.c:3406-3408, src/utils.c:4112"
|
||||
|
||||
- name: "prism.rom"
|
||||
sha1: "6e03d87f868c40d5662ef6906931c77ba1b8b2c2"
|
||||
size: 327680
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -219,6 +234,7 @@ files:
|
||||
note: "20 pages of 16K. Page map documented at src/cpu.c:3622-3638."
|
||||
|
||||
- name: "prism_failsafe.rom"
|
||||
sha1: "d020440638aff4d39467128413ef795677be9c23"
|
||||
size: 16384
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -228,6 +244,7 @@ files:
|
||||
note: "Loaded straight after prism.rom by prism_load_failsafe_rom(). The only ROM whose absence is fatal: the loader calls cpu_panic both when the file is missing and when the read is not 16384 bytes."
|
||||
|
||||
- name: "zxuno_bootloader.rom"
|
||||
sha1: "0afcb798128e6587e7ea0787714568f7b68be012"
|
||||
size: 8126
|
||||
required: true
|
||||
bundled: true
|
||||
@@ -236,6 +253,7 @@ files:
|
||||
size_note: "Read caps at 8192 bytes and only errors when fewer than 1 byte is read, so no exact size check. get_rom_size returns 214 for ZX-Uno (src/utils.c:4104) but that value is unused on this path."
|
||||
|
||||
- name: "zxevo_tsconf.rom"
|
||||
sha1: "2551026b7d63a2627f79701e26688a7d715dc96a"
|
||||
size: 524288
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -244,6 +262,7 @@ files:
|
||||
source_ref: "src/cpu.c:3410-3412, src/utils.c:4114"
|
||||
|
||||
- name: "zxevo_baseconf.rom"
|
||||
sha1: "1570048704f11dc239060ee4f63190d199c94987"
|
||||
size: 524288
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -257,6 +276,7 @@ files:
|
||||
# ============================================================
|
||||
|
||||
- name: "tbblue_loader.rom"
|
||||
sha1: "8b2e927d0523bc27bffcc34c39527ab0d2362e0c"
|
||||
size: 8192
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -266,6 +286,7 @@ files:
|
||||
note: "FPGA loader, mirrored to 16K at src/cpu.c:3665. Bypassed when --tbblue-fast-boot-mode selects 48.rom instead."
|
||||
|
||||
- name: "tbblue.mmc"
|
||||
sha1: "e838e1d63dc9c1e518a79195c9512042dffb765f"
|
||||
size: 67108864
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -279,6 +300,7 @@ files:
|
||||
# ============================================================
|
||||
|
||||
- name: "tk90x.rom"
|
||||
sha1: "9a943a008be13194fb006bddffa7d22d2277813f"
|
||||
size: 16384
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -287,6 +309,7 @@ files:
|
||||
source_ref: "src/cpu.c:3294-3296, src/utils.c:4098"
|
||||
|
||||
- name: "tk90xs.rom"
|
||||
sha1: "a9421b9e3a17689b7392da1f72dc71dd46e09ab1"
|
||||
size: 16384
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -295,6 +318,7 @@ files:
|
||||
source_ref: "src/cpu.c:3298-3300, src/utils.c:4098"
|
||||
|
||||
- name: "tk95.rom"
|
||||
sha1: "94edc401d43b0e9a9cdc1d35de4b6462dc414ab3"
|
||||
size: 16384
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -303,6 +327,7 @@ files:
|
||||
source_ref: "src/cpu.c:3302-3304, src/utils.c:4098"
|
||||
|
||||
- name: "tk95es.rom"
|
||||
sha1: "54f3445374d1758a3133232672e8783cb4fc7a32"
|
||||
size: 16384
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -315,6 +340,7 @@ files:
|
||||
# ============================================================
|
||||
|
||||
- name: "tc2048.rom"
|
||||
sha1: "febb2d495b6eda7cdcb4074935d6e9d9f328972d"
|
||||
size: 16384
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -323,6 +349,7 @@ files:
|
||||
source_ref: "src/cpu.c:3418-3420, src/utils.c:4098 (TC2048 falls under MACHINE_IS_SPECTRUM_16_48, src/cpu.h:543)"
|
||||
|
||||
- name: "ts2068.rom"
|
||||
sha1: "34cd8113bf75b65a4da6eea355f9d46ad635f7e4"
|
||||
size: 24576
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -332,6 +359,7 @@ files:
|
||||
note: "Read as two blocks: 16384 into the main ROM table, then 8192 into the EX ROM table. Serves TS2068 and TC2068."
|
||||
|
||||
- name: "ts1500.rom"
|
||||
sha1: "3eb437359221b4406d236085ec66fa02278e7495"
|
||||
size: 8192
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -344,6 +372,7 @@ files:
|
||||
# ============================================================
|
||||
|
||||
- name: "zx80.rom"
|
||||
sha1: "b6769a3197c77009e0933e038c15b43cf4c98c7a"
|
||||
size: [4096, 8192]
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -353,6 +382,7 @@ files:
|
||||
note: "Serves ZX80, TK80 and TK82. An 8192-byte file is accepted as-is so the ZX81 ROM can run on a ZX80 (src/cpu.c:3758)."
|
||||
|
||||
- name: "zx81.rom"
|
||||
sha1: "7b143ee964e9ada89d1f9e88f0bd48d919184cfc"
|
||||
size: 8192
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -362,6 +392,7 @@ files:
|
||||
note: "Serves ZX81, Timex TS1000, TK82C, TK83 and the Czerweny CZ 1000/1500 models."
|
||||
|
||||
- name: "tk85.rom"
|
||||
sha1: "7b961a1733fc047eb682150a32e17bca10a018d2"
|
||||
size: 10240
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -371,6 +402,7 @@ files:
|
||||
note: "The TK85 test precedes the generic ZX81 test in get_rom_size, so 10240 wins over 8192."
|
||||
|
||||
- name: "zxpand_zx81.rom"
|
||||
sha1: "3bdbf55720cf9623431a4d4017fa8f165aac4a66"
|
||||
size: 8192
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -380,6 +412,7 @@ files:
|
||||
note: "ZXpand interface firmware. A short read disables ZXpand emulation."
|
||||
|
||||
- name: "zxpand_zx80.rom"
|
||||
sha1: "8968261beab240e8a06e8cfe9e070987d860064b"
|
||||
size: 8192
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -388,6 +421,7 @@ files:
|
||||
source_ref: "src/storage/zxpand.c:72, src/storage/zxpand.c:240, src/storage/zxpand.c:246-254"
|
||||
|
||||
- name: "ace.rom"
|
||||
sha1: "597ba8a15a292688333c84dc9fd35172abe5e7e6"
|
||||
size: 8192
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -400,6 +434,7 @@ files:
|
||||
# ============================================================
|
||||
|
||||
- name: "ql_js.rom"
|
||||
sha1: "6e1e3cae275d0cd58977258c0b13480c8e910138"
|
||||
size: 49152
|
||||
min_size: 16384
|
||||
validation: [size]
|
||||
@@ -410,6 +445,7 @@ files:
|
||||
size_note: "Reads up to 131072 bytes and errors only below 16384, so the check is a minimum rather than an exact size."
|
||||
|
||||
- name: "ql_jm.rom"
|
||||
sha1: "6a8468dcdb27dc1b194febba8c957c4ef4313538"
|
||||
size: 49152
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -418,6 +454,7 @@ files:
|
||||
note: "JM release. Reachable through --romfile; the switch selects ql_js.rom."
|
||||
|
||||
- name: "tkii220.rom"
|
||||
sha1: "f364472a81352479290e388e9a5afb57a0de8249"
|
||||
size: 16384
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -426,6 +463,7 @@ files:
|
||||
note: "QJUMP Toolkit II 2.20, the ROM ql.c names as the example for --ql-rom-c000-file. ql_load_extra_roms() runs after the system ROM and reads 16K into memoria_ql at 0xC000 from the path the option gives; the read count is not checked."
|
||||
|
||||
- name: "qsound_V1.94.rom"
|
||||
sha1: "622a81dce98524148f067780c17eddbaf46e27f6"
|
||||
aliases: ["Qsound_V1.94.rom"]
|
||||
size: 8192
|
||||
required: false
|
||||
@@ -435,6 +473,7 @@ files:
|
||||
note: "QL Qsound firmware, read into memoria_ql at 0xC0000 once --ql-qsound-enabled is set; the read count is not checked and --ql-qsound-rom points the loader at another file. QSOUND_ROM_FILE is spelled qsound_V1.94.rom while the shipped file is Qsound_V1.94.rom, so the default only resolves on a case-insensitive filesystem."
|
||||
|
||||
- name: "Z88OZ47.rom"
|
||||
sha1: "35e528e81d8f4e5860adf4160a3da0926525c8fa"
|
||||
size: 524288
|
||||
required: true
|
||||
bundled: true
|
||||
@@ -443,6 +482,7 @@ files:
|
||||
size_note: "Reads up to 512K and errors only when nothing is read; z88_internal_rom_size is derived from the byte count, so any size is accepted."
|
||||
|
||||
- name: "mk14.rom"
|
||||
sha1: "802dc637ce5391a2a6627f76f919b12a869b56ef"
|
||||
size: 512
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -455,6 +495,7 @@ files:
|
||||
# ============================================================
|
||||
|
||||
- name: "cpc464.rom"
|
||||
sha1: "56d39c463da60968d93e58b4ba0e675829412a20"
|
||||
size: 32768
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -464,6 +505,7 @@ files:
|
||||
note: "Serves CPC 464 and CPC 4128."
|
||||
|
||||
- name: "cpc664.rom"
|
||||
sha1: "4a38f7f5bf7fd0a95cf882433c69e67251a46868"
|
||||
size: 49152
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -472,6 +514,7 @@ files:
|
||||
source_ref: "src/cpu.c:3476-3478, src/utils.c:4142"
|
||||
|
||||
- name: "cpc6128.rom"
|
||||
sha1: "29dd0487dc5a96cd00966d074de8700ddd4ee18b"
|
||||
size: 49152
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -480,6 +523,7 @@ files:
|
||||
source_ref: "src/cpu.c:3480-3482, src/utils.c:4142"
|
||||
|
||||
- name: "pcw_boot.rom"
|
||||
sha1: "245a173cfc7976a4cae8d255f3d1422aeaf5f09a"
|
||||
size: 275
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -489,6 +533,7 @@ files:
|
||||
note: "Boot block the PCW pulls into RAM rather than a mapped ROM (src/cpu.c:3849). Serves PCW 8256 and 8512."
|
||||
|
||||
- name: "pcw_8x_boot1.dsk"
|
||||
sha1: "3be724b3bfa01d03931463b8501ffb5c3f3621b7"
|
||||
size: 194864
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -497,6 +542,7 @@ files:
|
||||
note: "LocoScript boot disc, inserted by pcw_boot_locoscript()."
|
||||
|
||||
- name: "pcw_8x_boot2.dsk"
|
||||
sha1: "4c13bba076897076322b375e34f87306640cf0d6"
|
||||
size: 194864
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -509,6 +555,7 @@ files:
|
||||
# ============================================================
|
||||
|
||||
- name: "samcoupe.rom"
|
||||
sha1: "c86601633fb61a8c517f7657aad9af4e6870f2ee"
|
||||
size: 32768
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -517,6 +564,7 @@ files:
|
||||
source_ref: "src/cpu.c:3484-3487, src/utils.c:4144"
|
||||
|
||||
- name: "atomlite.rom"
|
||||
sha1: "b2303b7200f5a17b54b841af9f0604db7bbdd1ab"
|
||||
size: 32768
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -526,6 +574,7 @@ files:
|
||||
note: "Replaces samcoupe.rom when Atom Lite emulation is on."
|
||||
|
||||
- name: "samram.rom"
|
||||
sha1: "acac00b8b342d19ce9bb35a8744a9c0060d5eedd"
|
||||
size: 32768
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -535,6 +584,7 @@ files:
|
||||
note: "SamRam interface firmware, opened from a path the user selects."
|
||||
|
||||
- name: "samram_eng.rom"
|
||||
sha1: "5344ee16523862fa66e9397d1f8cfa2b2cbaf341"
|
||||
size: 32768
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -548,6 +598,7 @@ files:
|
||||
# ============================================================
|
||||
|
||||
- name: "coleco.rom"
|
||||
sha1: "99ba9be24ada3e86e5c17aeecb7a2d68c5edfe59"
|
||||
size: 8192
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -556,6 +607,7 @@ files:
|
||||
source_ref: "src/cpu.c:3385-3387, src/utils.c:4120"
|
||||
|
||||
- name: "sg1000.rom"
|
||||
sha1: "fdea3168fda81e5f25f7dee3a7231192a492836e"
|
||||
size: 155
|
||||
required: true
|
||||
bundled: true
|
||||
@@ -564,6 +616,7 @@ files:
|
||||
size_note: "Nothing is read from this file. The SG-1000 branch is empty and the source comment states the file only has to exist for the open to succeed."
|
||||
|
||||
- name: "sms.rom"
|
||||
sha1: "c315672807d8ddb8d91443729405c766dd95cae7"
|
||||
size: 8192
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -572,6 +625,7 @@ files:
|
||||
source_ref: "src/cpu.c:3393-3395, src/utils.c:4124"
|
||||
|
||||
- name: "msx.rom"
|
||||
sha1: "e998f0c441f4f1800ef44e42cd1659150206cf79"
|
||||
size: 32768
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -580,6 +634,7 @@ files:
|
||||
source_ref: "src/cpu.c:3397-3399, src/utils.c:4126"
|
||||
|
||||
- name: "svi.rom"
|
||||
sha1: "7d8daf52f78371ca2c9443e04827c8e1f98c8f2c"
|
||||
size: 32768
|
||||
validation: [size]
|
||||
required: true
|
||||
@@ -593,6 +648,7 @@ files:
|
||||
# ============================================================
|
||||
|
||||
- name: "esxmmc085.rom"
|
||||
sha1: "aa4c31dc9b08d80d0107b580d5a9216d23214776"
|
||||
size: 8192
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -602,6 +658,7 @@ files:
|
||||
note: "divMMC esxdos firmware, the default when --divmmc-rom is unset. Needed by --enable-esxdos-handler, which the ES-DE zxnext command line sets."
|
||||
|
||||
- name: "esxide085.rom"
|
||||
sha1: "178bae9e9209c43282e12c09884562e4ddf07e68"
|
||||
size: 8192
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -611,6 +668,7 @@ files:
|
||||
note: "divIDE esxdos firmware, the default when --divide-rom is unset."
|
||||
|
||||
- name: "unodos3.rom"
|
||||
sha1: "cdb90bd05b073ec7a5f875444e29ab0f6bcee9ac"
|
||||
size: 8192
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -620,6 +678,7 @@ files:
|
||||
note: "divMMC firmware substituted for esxmmc085.rom on Chloe machines."
|
||||
|
||||
- name: "trdos.rom"
|
||||
sha1: "0a74bd34538a03d0e1d214b425d95c14ad10c8c4"
|
||||
size: 16384
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -629,6 +688,7 @@ files:
|
||||
note: "Beta Disk / TR-DOS firmware."
|
||||
|
||||
- name: "if1-v1.rom"
|
||||
sha1: "4ffd9ed9c00cdc6f92ce69fdd8b618ef1203f48e"
|
||||
size: [8192, 16384]
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -638,6 +698,7 @@ files:
|
||||
note: "Interface 1 firmware version 1, selected when if1_rom_version is 1. The load accepts 8192 or 16384 bytes and disables Interface 1 emulation otherwise."
|
||||
|
||||
- name: "if1-v2.rom"
|
||||
sha1: "5cfb6bca4177c45fefd571734576b55e3a127c08"
|
||||
size: [8192, 16384]
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -647,6 +708,7 @@ files:
|
||||
note: "Interface 1 firmware version 2, the default branch of if1_return_rom_name()."
|
||||
|
||||
- name: "hilow_datadrive.rom"
|
||||
sha1: "fd3f165860c2564847805cfa7a7f769a627a687c"
|
||||
size: 8192
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -656,6 +718,7 @@ files:
|
||||
note: "HiLow Data Drive firmware."
|
||||
|
||||
- name: "zxmmcplus.flash"
|
||||
sha1: "9f0697c261c37e92bf2e488e3db223443c341b9d"
|
||||
size: 1048576
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -666,6 +729,7 @@ files:
|
||||
size_note: "The image holds ROM and RAM together, so the check is ZXMMCPLUS_FLASHROM_SIZE + ZXMMCPLUS_RAM_SIZE, not the 512K ROM constant alone."
|
||||
|
||||
- name: "zxuno.flash"
|
||||
sha1: "bb6740f15b5ed8d1d60f7f61f0737f769215ca57"
|
||||
size: 4194304
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -679,6 +743,7 @@ files:
|
||||
# ============================================================
|
||||
|
||||
- name: "mf1.rom"
|
||||
sha1: "ba28754a3cc31a4ca579829ed4310c313409cf5d"
|
||||
size: 8192
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -688,6 +753,7 @@ files:
|
||||
note: "Multiface One. The file selector rejects anything that is not exactly 8 KB."
|
||||
|
||||
- name: "mf128.rom"
|
||||
sha1: "f03f4ecbcf4a654f4775d16bda0d4cc47f884379"
|
||||
size: 8192
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -697,6 +763,7 @@ files:
|
||||
note: "Multiface 128."
|
||||
|
||||
- name: "mf3.rom"
|
||||
sha1: "5d74d2e2e5a537639da92ff120f8a6d86f474495"
|
||||
size: 8192
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -706,6 +773,7 @@ files:
|
||||
note: "Multiface 3."
|
||||
|
||||
- name: "specmate.rom"
|
||||
sha1: "c8f128610eeb5142d4d80f28e5dd07b7a5ab6b84"
|
||||
size: 8192
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -714,6 +782,7 @@ files:
|
||||
source_ref: "src/copy_interfaces/specmate.h:27, src/copy_interfaces/specmate.h:29, src/copy_interfaces/specmate.c:189-205"
|
||||
|
||||
- name: "phoenix3.rom"
|
||||
sha1: "d4f01500e0383a1cf34683fb30d96230c14c7da3"
|
||||
size: 16384
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -722,6 +791,7 @@ files:
|
||||
source_ref: "src/copy_interfaces/phoenix.h:27, src/copy_interfaces/phoenix.h:29, src/copy_interfaces/phoenix.c:142"
|
||||
|
||||
- name: "defcon.rom"
|
||||
sha1: "4c7d702e295a3383326606b805eab74affc501ba"
|
||||
size: 16384
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -730,6 +800,7 @@ files:
|
||||
source_ref: "src/copy_interfaces/defcon.h:27, src/copy_interfaces/defcon.h:29, src/copy_interfaces/defcon.c:139"
|
||||
|
||||
- name: "dinamid3.rom"
|
||||
sha1: "9ee4ca7abee12ba6fb34aede2185f6aa3cb2800b"
|
||||
size: 2048
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -738,6 +809,7 @@ files:
|
||||
source_ref: "src/copy_interfaces/dinamid3.h:27, src/copy_interfaces/dinamid3.h:29, src/copy_interfaces/dinamid3.c:142"
|
||||
|
||||
- name: "interface007.rom"
|
||||
sha1: "81af60ecd412854069227487417eb80b6c89934d"
|
||||
size: 2048
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -746,6 +818,7 @@ files:
|
||||
source_ref: "src/copy_interfaces/interface007.h:27, src/copy_interfaces/interface007.h:29, src/copy_interfaces/interface007.c:143"
|
||||
|
||||
- name: "ramjet2.rom"
|
||||
sha1: "a3852ee24ab57e0e1d800c9d99cd244f7363449b"
|
||||
size: 16384
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -754,6 +827,7 @@ files:
|
||||
source_ref: "src/copy_interfaces/ramjet.h:27, src/copy_interfaces/ramjet.h:28-30, src/copy_interfaces/ramjet.c:165"
|
||||
|
||||
- name: "ramjet3.rom"
|
||||
sha1: "362589adb01ebbf006a162e76062921c03ceb26e"
|
||||
size: 16384
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -762,6 +836,7 @@ files:
|
||||
source_ref: "src/copy_interfaces/ramjet.h:28, src/copy_interfaces/ramjet.c:165"
|
||||
|
||||
- name: "transtape2.rom"
|
||||
sha1: "45d3e32d58b1c405b75ee72d80153dd0305bbd9d"
|
||||
size: 16384
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -771,6 +846,7 @@ files:
|
||||
note: "Selected when transtape_version is 2."
|
||||
|
||||
- name: "transtape3-vC.rom"
|
||||
sha1: "b7ec72fa0a55243a53c55d649e0555acea25d0c1"
|
||||
size: 16384
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -780,6 +856,7 @@ files:
|
||||
note: "Default for Transtape version 3."
|
||||
|
||||
- name: "transtape3-vA.rom"
|
||||
sha1: "c627527551e441a000184565a72df8ff37fce891"
|
||||
size: 16384
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -789,6 +866,7 @@ files:
|
||||
note: "Revision A, reached through the user-set transtape_rom_filename and loaded by the same size-checked path as the defaults."
|
||||
|
||||
- name: "transtape3-vB.rom"
|
||||
sha1: "82bf848bac698d1ffd9ca809c4293f004152645a"
|
||||
size: 16384
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -798,6 +876,7 @@ files:
|
||||
note: "Revision B, reached through the user-set transtape_rom_filename."
|
||||
|
||||
- name: "hilow_barbanegra.rom"
|
||||
sha1: "3b3862943758ad35f340537b742ca25a8286267a"
|
||||
size: 8192
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -806,6 +885,7 @@ files:
|
||||
source_ref: "src/copy_interfaces/hilow_barbanegra.h:27, src/copy_interfaces/hilow_barbanegra.h:30, src/copy_interfaces/hilow_barbanegra.c:282"
|
||||
|
||||
- name: "mhpokeador.rom"
|
||||
sha1: "557f91755ede646a89e1146904a6d713f38d6b05"
|
||||
size: 1024
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -814,6 +894,7 @@ files:
|
||||
source_ref: "src/copy_interfaces/mhpokeador.h:27, src/copy_interfaces/mhpokeador.h:39, src/copy_interfaces/mhpokeador.c:264"
|
||||
|
||||
- name: "mhpokeador-transfer.rom"
|
||||
sha1: "4099c5d8f65a25bc0053e5730b7c40a29bcfb614"
|
||||
size: 1024
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -822,6 +903,7 @@ files:
|
||||
source_ref: "src/copy_interfaces/mhpokeador.h:28, src/copy_interfaces/mhpokeador.c:264"
|
||||
|
||||
- name: "mhpokeador-salvapan.rom"
|
||||
sha1: "4e438541ec2da0c3b9cf2cbf0cc3f5bc6cfb295e"
|
||||
size: 1024
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -830,6 +912,7 @@ files:
|
||||
source_ref: "src/copy_interfaces/mhpokeador.h:29, src/copy_interfaces/mhpokeador.c:264"
|
||||
|
||||
- name: "mantransfev3.bin"
|
||||
sha1: "e134a38468ed84d53df164d97fa24990aa557da3"
|
||||
size: 200
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -842,6 +925,7 @@ files:
|
||||
# ============================================================
|
||||
|
||||
- name: "gs105a.rom"
|
||||
sha1: "1ba78923dc7d803e7995c165992e14e4608c2153"
|
||||
size: 32768
|
||||
validation: [size]
|
||||
required: false
|
||||
@@ -851,6 +935,7 @@ files:
|
||||
note: "General Sound firmware v1.05a. GS_ROM_SIZE is in KB and the read is GS_ROM_SIZE*1024."
|
||||
|
||||
- name: "gs104.rom"
|
||||
sha1: "c865121306eb3a7d811d82fbcc653b4dc1d6fa3d"
|
||||
size: 32768
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -864,6 +949,7 @@ files:
|
||||
# ============================================================
|
||||
|
||||
- name: "80-lec.rom"
|
||||
sha1: "bb7a77d66e95d2e28ebb610e543c065e0d428619"
|
||||
size: 16384
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -871,6 +957,7 @@ files:
|
||||
source_ref: "src/start.c:4876-4880, src/cpu.c:3520-3523"
|
||||
|
||||
- name: "tk90x_v1br.rom"
|
||||
sha1: "eab2eab803d8ec717b55a915de3bcb931b410a2f"
|
||||
size: 16384
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -878,6 +965,7 @@ files:
|
||||
source_ref: "src/ALTERNATEROMS:97, src/start.c:4876-4880, src/cpu.c:3520-3523"
|
||||
|
||||
- name: "tk90x_v2es.rom"
|
||||
sha1: "a9af9c4d38882e2bd85086fc0c2d8d9afe90afad"
|
||||
size: 16384
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -886,6 +974,7 @@ files:
|
||||
note: "Corrected TK90X ROM."
|
||||
|
||||
- name: "tk95es_modif.rom"
|
||||
sha1: "1dd39ee98e236389467e91a86cf5d8ed52583ba5"
|
||||
size: 16384
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -894,6 +983,7 @@ files:
|
||||
note: "TK95 Spanish ROM with message and symbol fixes by Rodolfo Edison Guerra."
|
||||
|
||||
- name: "Z88OZ431.rom"
|
||||
sha1: "82e12674ba91eb85d4904c3948e4167aea6fd1b7"
|
||||
size: 524288
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -901,6 +991,7 @@ files:
|
||||
source_ref: "src/ALTERNATEROMS:83-92, src/start.c:4876-4880"
|
||||
|
||||
- name: "Z88OZ441.rom"
|
||||
sha1: "778d188c201bd9eb6bf795e0cc8344a87600cd45"
|
||||
size: 524288
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -908,6 +999,7 @@ files:
|
||||
source_ref: "src/ALTERNATEROMS:83-92, src/start.c:4876-4880"
|
||||
|
||||
- name: "Z88OZ45.rom"
|
||||
sha1: "aecf46de3563c6c6443e9780d633d7b7507e79ef"
|
||||
size: 524288
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -915,6 +1007,7 @@ files:
|
||||
source_ref: "src/ALTERNATEROMS:83-92, src/start.c:4876-4880"
|
||||
|
||||
- name: "Z88OZ46.rom"
|
||||
sha1: "9e0e29baa3720abcbb8006cda8f19ea365faf20e"
|
||||
size: 524288
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -922,6 +1015,7 @@ files:
|
||||
source_ref: "src/ALTERNATEROMS:83-92, src/start.c:4876-4880"
|
||||
|
||||
- name: "Z88UK220.rom"
|
||||
sha1: "5d89e8d98d2cc0acb8cd42dbfca601b7bd09c51e"
|
||||
size: 131072
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -929,6 +1023,7 @@ files:
|
||||
source_ref: "src/ALTERNATEROMS:83-92, src/start.c:4876-4880"
|
||||
|
||||
- name: "Z88UK300.rom"
|
||||
sha1: "ceb688025b79454cf229cae4dbd0449df2747f79"
|
||||
size: 131072
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -936,6 +1031,7 @@ files:
|
||||
source_ref: "src/ALTERNATEROMS:83-92, src/start.c:4876-4880"
|
||||
|
||||
- name: "Z88UK400.rom"
|
||||
sha1: "23c63ceced72d0a9031cba08d2ebc72ca336921d"
|
||||
size: 131072
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -944,6 +1040,7 @@ files:
|
||||
|
||||
- name: "aszmice07.rom"
|
||||
path: "alternate_roms/aszmice07.rom"
|
||||
sha1: "7a37a248572689c8ac226c082b7026972d399b1c"
|
||||
size: 8192
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -953,6 +1050,7 @@ files:
|
||||
|
||||
- name: "sp-rom.rom"
|
||||
path: "alternate_roms/sp-rom.rom"
|
||||
sha1: "ef4b575b5b5cc18a3e6c71c241c65aa18957e2d5"
|
||||
size: 4096
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -962,6 +1060,7 @@ files:
|
||||
|
||||
- name: "ace.rom"
|
||||
path: "alternate_roms/ace.rom"
|
||||
sha1: "6e5c9416a1cc89fe4012627f496f71ff2bb07b81"
|
||||
size: 8192
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -972,6 +1071,7 @@ files:
|
||||
|
||||
- name: "opense.rom"
|
||||
path: "alternate_roms/opense.rom"
|
||||
sha1: "24a339c5c163a687a8fed50f93714c6450e2562d"
|
||||
size: 16384
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -981,6 +1081,7 @@ files:
|
||||
|
||||
- name: "sebasic4_rom1.rom"
|
||||
path: "alternate_roms/sebasic4_rom1.rom"
|
||||
sha1: "d7092d6d55ee8280057399362b5798d1f65d8eeb"
|
||||
size: 16384
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -990,6 +1091,7 @@ files:
|
||||
|
||||
- name: "derby_p_32K.rom"
|
||||
path: "alternate_roms/derby_p_32K.rom"
|
||||
sha1: "f9c337782f9a4781548528841babd5bd13f2b745"
|
||||
size: 32768
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -999,6 +1101,7 @@ files:
|
||||
|
||||
- name: "derby_pp_64K.rom"
|
||||
path: "alternate_roms/derby_pp_64K.rom"
|
||||
sha1: "7eaaf1ff19f74d5449033bacce9834d7b13022a9"
|
||||
size: 65536
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -1008,6 +1111,7 @@ files:
|
||||
|
||||
- name: "plus2c.rom"
|
||||
path: "alternate_roms/plus2c.rom"
|
||||
sha1: "98effb0e2dc4ecf6e9f70be9828a688341396c0c"
|
||||
size: 32768
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -1017,6 +1121,7 @@ files:
|
||||
|
||||
- name: "plus2b.rom"
|
||||
path: "alternate_roms/plus2b.rom"
|
||||
sha1: "420d8f1cd7bd75a79803eaa49e191d90cfd24f38"
|
||||
size: 65536
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -1026,6 +1131,7 @@ files:
|
||||
|
||||
- name: "plus3e_mmcen3eE.rom"
|
||||
path: "alternate_roms/plus3e_mmcen3eE.rom"
|
||||
sha1: "a579f9c3571669294dad37b04dcb889a9c147d94"
|
||||
size: 65536
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -1035,6 +1141,7 @@ files:
|
||||
|
||||
- name: "plus3e_mmces3eE.rom"
|
||||
path: "alternate_roms/plus3e_mmces3eE.rom"
|
||||
sha1: "44e98a3dfc966f7c8725c252487a44a2c0b450d6"
|
||||
size: 65536
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -1044,6 +1151,7 @@ files:
|
||||
|
||||
- name: "plus3e_sm8en3eE.rom"
|
||||
path: "alternate_roms/plus3e_sm8en3eE.rom"
|
||||
sha1: "89b6227798a88a6ad0e3b9e58db979694912ee04"
|
||||
size: 65536
|
||||
required: false
|
||||
bundled: true
|
||||
@@ -1053,6 +1161,7 @@ files:
|
||||
|
||||
- name: "plus3e_sm8es3eE.rom"
|
||||
path: "alternate_roms/plus3e_sm8es3eE.rom"
|
||||
sha1: "a5b62b647ccaec4af9989b8fd7857d5f6426ae5d"
|
||||
size: 65536
|
||||
required: false
|
||||
bundled: true
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ param(
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
$defaultInstallUrl = "https://raw.githubusercontent.com/Abdess/retrobios/main/install.py"
|
||||
$defaultInstallSha256 = "42b1747ae867d41da39b11daf783c0106daa6ed18861a2214c196f3a5c9a3c60"
|
||||
$defaultInstallSha256 = "d5f352fbe34cfd8ae40c0980c3986158ec1d9dd1babfe2bbc0918ffc0fa0bdf0"
|
||||
$maximumInstallerBytes = 2MB
|
||||
$installer = if ($PSScriptRoot) { Join-Path $PSScriptRoot "install.py" } else { $null }
|
||||
$temporary = $null
|
||||
|
||||
+578
-19
@@ -10,6 +10,7 @@ Usage:
|
||||
python install.py --platform retroarch --dest ~/custom/bios
|
||||
python install.py --check
|
||||
python install.py --list-platforms
|
||||
python install.py --platform retroarch --system sony-playstation --region us
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
@@ -81,9 +82,59 @@ MAX_TARGETS_BYTES = 4 * 1024 * 1024
|
||||
MAX_MANIFEST_FILES = 100_000
|
||||
MAX_DOWNLOAD_SIZE = 1024 * 1024 * 1024
|
||||
MAX_TOTAL_DOWNLOAD_SIZE = 64 * 1024 * 1024 * 1024
|
||||
# Why a manifest leaves a file out, as the installer words it. The manifest
|
||||
# schema and the generator are held to this list by the tests.
|
||||
OMISSION_REASONS = {
|
||||
"hash_mismatch": "hash mismatch",
|
||||
"not_found": "not found",
|
||||
"external": "external",
|
||||
"user_provided": "user provided",
|
||||
"no_platform_slug": "no platform folder",
|
||||
}
|
||||
_SHA1_RE = re.compile(r"^[0-9a-fA-F]{40}$")
|
||||
_SHA256_RE = re.compile(r"^[0-9a-fA-F]{64}$")
|
||||
|
||||
# The region vocabulary of scripts/region.py, which this file cannot import.
|
||||
# A test holds the two copies equal.
|
||||
WORLD_REGION = "world"
|
||||
REGION_TREE: dict[str, frozenset] = {
|
||||
"north-america": frozenset({"canada"}),
|
||||
"latin-america": frozenset({"brazil", "mexico", "argentina"}),
|
||||
"europe": frozenset({
|
||||
"uk", "france", "germany", "italy", "spain", "netherlands", "portugal",
|
||||
"greece", "poland", "russia", "sweden", "norway", "denmark", "finland",
|
||||
}),
|
||||
"asia": frozenset({
|
||||
"japan", "south-korea", "china", "taiwan", "hong-kong", "singapore",
|
||||
"india", "asia-ntsc", "asia-pal",
|
||||
}),
|
||||
"oceania": frozenset({"australia", "new-zealand"}),
|
||||
}
|
||||
REGION_ALIASES: dict[str, str] = {
|
||||
"jp": "japan",
|
||||
"ntsc-j": "japan",
|
||||
"us": "north-america",
|
||||
"usa": "north-america",
|
||||
"na": "north-america",
|
||||
"ntsc-u": "north-america",
|
||||
"eu": "europe",
|
||||
"pal": "europe",
|
||||
"kr": "south-korea",
|
||||
"korea": "south-korea",
|
||||
"auto": WORLD_REGION,
|
||||
"gb": "uk",
|
||||
}
|
||||
_REGION_PARENT = {
|
||||
member: parent for parent, members in REGION_TREE.items() for member in members
|
||||
}
|
||||
REGIONS = frozenset({WORLD_REGION} | set(REGION_TREE) | set(_REGION_PARENT))
|
||||
MAX_SELECTION_TAGS = 1000
|
||||
SELECTION_FIELDS = ("systems", "regions", "region_groups", "region_system_groups")
|
||||
# The files cores load for systems the platform does not list (game engines,
|
||||
# computers): no system of the platform owns them, and choosing systems
|
||||
# leaves them out unless this name is chosen too.
|
||||
OTHER_SYSTEMS = "other"
|
||||
|
||||
# Platforms with a manifest in install/. Manifest URLs are case sensitive,
|
||||
# so user input is normalized against this list before any fetch.
|
||||
AVAILABLE_PLATFORMS = (
|
||||
@@ -103,8 +154,36 @@ DEFAULT_DESTS = {
|
||||
"rocknix": Path("/storage/roms/bios"),
|
||||
"misterfpga": Path("/media/fat/games"),
|
||||
"retropie": Path.home() / "RetroPie" / "BIOS",
|
||||
"romm": Path("/romm/library/bios"),
|
||||
}
|
||||
|
||||
|
||||
def _os_default_dests(os_type: str) -> dict[str, Path]:
|
||||
"""Where a platform keeps its BIOS on this OS, when it is not detected.
|
||||
|
||||
The same folders the platform's detection looks for: a platform named on
|
||||
the command line but not found must not land in ~/bios, which none of
|
||||
them reads.
|
||||
"""
|
||||
home = Path.home()
|
||||
if os_type == "windows":
|
||||
profile = Path(os.environ.get("USERPROFILE", str(home)))
|
||||
appdata = Path(os.environ.get("APPDATA", str(home / "AppData" / "Roaming")))
|
||||
return {
|
||||
"retroarch": appdata / "RetroArch" / "system",
|
||||
# RetroBat's installer defaults to C:\RetroBat (installer.iss).
|
||||
"retrobat": Path("C:/RetroBat/bios"),
|
||||
"bizhawk": profile / "BizHawk" / "Firmware",
|
||||
}
|
||||
if os_type == "darwin":
|
||||
return {
|
||||
"retroarch": home / "Library" / "Application Support" / "RetroArch" / "system",
|
||||
}
|
||||
return {
|
||||
"retroarch": home / ".config" / "retroarch" / "system",
|
||||
"bizhawk": home / ".config" / "BizHawk" / "Firmware",
|
||||
}
|
||||
|
||||
# Set when the run is interrupted, so queued downloads end instead of draining
|
||||
# the pool: every future is submitted before the first one completes.
|
||||
_stop = threading.Event()
|
||||
@@ -776,6 +855,19 @@ def _destination_path(root: Path, value: object) -> Path:
|
||||
return root.resolve() / Path(*relative.parts)
|
||||
|
||||
|
||||
def _check_tags(entry: dict, field: str, where: str) -> None:
|
||||
"""A selection field is absent or a short list of short strings."""
|
||||
value = entry.get(field)
|
||||
if value is None:
|
||||
return
|
||||
if (
|
||||
not isinstance(value, list)
|
||||
or len(value) > MAX_SELECTION_TAGS
|
||||
or not all(isinstance(tag, str) and 0 < len(tag) <= 256 for tag in value)
|
||||
):
|
||||
raise ValueError(f"invalid {field} for {where}")
|
||||
|
||||
|
||||
def _validate_manifest(data: object, plat: str) -> dict:
|
||||
"""Validate the untrusted install-manifest boundary using stdlib only."""
|
||||
if not isinstance(data, dict):
|
||||
@@ -834,6 +926,8 @@ def _validate_manifest(data: object, plat: str) -> dict:
|
||||
not isinstance(cores, list) or not all(isinstance(core, str) for core in cores)
|
||||
):
|
||||
raise ValueError(f"invalid cores list for {dest}")
|
||||
for field in SELECTION_FIELDS:
|
||||
_check_tags(entry, field, dest)
|
||||
|
||||
declared_total_files = data.get("total_files")
|
||||
if declared_total_files is not None and declared_total_files != len(files):
|
||||
@@ -846,9 +940,6 @@ def _validate_manifest(data: object, plat: str) -> dict:
|
||||
if not isinstance(omitted, list) or len(omitted) > MAX_MANIFEST_FILES:
|
||||
raise ValueError("invalid omitted_files list")
|
||||
seen_omitted: set[str] = set()
|
||||
allowed_omission_reasons = {
|
||||
"hash_mismatch", "not_found", "external", "user_provided"
|
||||
}
|
||||
for index, entry in enumerate(omitted):
|
||||
if not isinstance(entry, dict):
|
||||
raise ValueError(f"omitted_files[{index}] must be an object")
|
||||
@@ -866,7 +957,7 @@ def _validate_manifest(data: object, plat: str) -> dict:
|
||||
raise ValueError(f"invalid omitted system for {dest}")
|
||||
if not isinstance(entry.get("required"), bool):
|
||||
raise ValueError(f"invalid omitted required flag for {dest}")
|
||||
if entry.get("reason") not in allowed_omission_reasons:
|
||||
if entry.get("reason") not in OMISSION_REASONS:
|
||||
raise ValueError(f"invalid omission reason for {dest}")
|
||||
cores = entry.get("cores")
|
||||
if cores is not None and (
|
||||
@@ -874,6 +965,8 @@ def _validate_manifest(data: object, plat: str) -> dict:
|
||||
or not all(isinstance(core, str) for core in cores)
|
||||
):
|
||||
raise ValueError(f"invalid omitted cores list for {dest}")
|
||||
for field in SELECTION_FIELDS:
|
||||
_check_tags(entry, field, dest)
|
||||
declared_total_omitted = data.get("total_omitted")
|
||||
if (
|
||||
declared_total_omitted is not None
|
||||
@@ -887,6 +980,24 @@ def _validate_manifest(data: object, plat: str) -> dict:
|
||||
for index, entry in enumerate(copies):
|
||||
if not isinstance(entry, dict):
|
||||
raise ValueError(f"standalone_copies[{index}] must be an object")
|
||||
# The shape do_standalone_copies reads, checked here: a note with a
|
||||
# list for detect, a copy naming neither file nor pattern, or a list
|
||||
# for emulator passed and crashed the copy step after the download.
|
||||
where = f"standalone_copies[{index}]"
|
||||
if "note" in entry:
|
||||
detect = entry.get("detect", {})
|
||||
if not isinstance(entry["note"], str) or not isinstance(detect, dict):
|
||||
raise ValueError(f"invalid note entry at {where}")
|
||||
for values in detect.values():
|
||||
if not isinstance(values, list) or not all(
|
||||
isinstance(value, str) for value in values
|
||||
):
|
||||
raise ValueError(f"invalid note entry at {where}")
|
||||
continue
|
||||
if "file" not in entry and "pattern" not in entry:
|
||||
raise ValueError(f"{where} names neither a file nor a pattern")
|
||||
if not isinstance(entry.get("emulator", ""), str):
|
||||
raise ValueError(f"invalid emulator at {where}")
|
||||
if "file" in entry:
|
||||
_safe_relative_path(
|
||||
entry["file"], f"standalone_copies[{index}].file"
|
||||
@@ -990,6 +1101,228 @@ def _filter_by_target(
|
||||
return result
|
||||
|
||||
|
||||
def canonical_region(raw: str) -> str:
|
||||
"""One region name or alias, spelled the way manifests spell it."""
|
||||
key = raw.strip().lower()
|
||||
key = REGION_ALIASES.get(key, key)
|
||||
if key not in REGIONS:
|
||||
raise ValueError(f"unknown region: {raw.strip()}")
|
||||
return key
|
||||
|
||||
|
||||
def _region_comparable(a: str, b: str) -> bool:
|
||||
return a == b or _REGION_PARENT.get(a) == b or _REGION_PARENT.get(b) == a
|
||||
|
||||
|
||||
def _region_rank(file_regions: set[str], requested: list[str]) -> int:
|
||||
for index, wanted in enumerate(requested):
|
||||
if any(_region_comparable(wanted, region) for region in file_regions):
|
||||
return index
|
||||
return len(requested)
|
||||
|
||||
|
||||
def region_drops(
|
||||
entries: list[dict], requested: list[str], systems: list[str] | None = None
|
||||
) -> set[str]:
|
||||
"""Destinations a region priority list withdraws.
|
||||
|
||||
The pack builder's rule (region.resolve_region_drops), replayed over the
|
||||
groups the manifest records. Per group, the best-ranked regional file
|
||||
stays; a world file beats unmatched regional ones the code does not search
|
||||
before it (`priority`, lower first); when nothing matches and no world
|
||||
file exists, every regional file stays, so a group is never emptied. A file with no region never competes and always stays.
|
||||
|
||||
A core extra competes whatever systems are chosen; a platform's own
|
||||
declaration competes only when its system is kept, as in the pack.
|
||||
"""
|
||||
if not requested:
|
||||
return set()
|
||||
kept_systems = set(systems) if systems else None
|
||||
groups: dict[str, list[tuple[set, str, object]]] = {}
|
||||
for entry in entries:
|
||||
regions = entry.get("regions")
|
||||
if not regions:
|
||||
continue
|
||||
joined = list(entry.get("region_groups") or [])
|
||||
joined += [
|
||||
group for group in entry.get("region_system_groups") or []
|
||||
if kept_systems is None or group in kept_systems
|
||||
]
|
||||
priority = entry.get("priority")
|
||||
if not isinstance(priority, int) or isinstance(priority, bool):
|
||||
priority = None
|
||||
for group in joined:
|
||||
groups.setdefault(group, []).append((set(regions), entry["dest"], priority))
|
||||
keep: set[str] = set()
|
||||
drop: set[str] = set()
|
||||
for members in groups.values():
|
||||
world = {dest for regions, dest, _p in members if WORLD_REGION in regions}
|
||||
ranks = {dest: priority for _regions, dest, priority in members}
|
||||
regional = [
|
||||
(_region_rank(regions, requested), dest)
|
||||
for regions, dest, _p in members
|
||||
if WORLD_REGION not in regions
|
||||
]
|
||||
keep |= world
|
||||
if not regional:
|
||||
continue
|
||||
matched = [(rank, dest) for rank, dest in regional if rank < len(requested)]
|
||||
if matched:
|
||||
best = min(rank for rank, _dest in matched)
|
||||
keep |= {dest for rank, dest in matched if rank == best}
|
||||
drop |= {dest for _rank, dest in regional}
|
||||
elif world:
|
||||
world_ranks = [ranks[dest] for dest in world]
|
||||
best_world = min(world_ranks) if None not in world_ranks else None
|
||||
for _rank, dest in regional:
|
||||
ours = ranks[dest]
|
||||
if best_world is not None and ours is not None and ours < best_world:
|
||||
keep.add(dest)
|
||||
else:
|
||||
drop.add(dest)
|
||||
else:
|
||||
keep |= {dest for _rank, dest in regional}
|
||||
return drop - keep
|
||||
|
||||
|
||||
def entry_systems(entry: dict) -> list[str]:
|
||||
"""The platform systems a file or an omission belongs to.
|
||||
|
||||
An omission's `system` is spelled the way its profile spells it; only
|
||||
`systems` names the platform's own, the ones --system accepts.
|
||||
"""
|
||||
return list(entry.get("systems") or [])
|
||||
|
||||
|
||||
def narrow(
|
||||
files: list[dict],
|
||||
omitted: list[dict],
|
||||
systems: list[str],
|
||||
cores: list[str],
|
||||
regions: list[str],
|
||||
) -> tuple[list[dict], list[dict]]:
|
||||
"""Keep what the chosen systems, cores and regions need.
|
||||
|
||||
A core choice keeps the platform's own list and narrows only the files
|
||||
cores load, the rule --target already follows. Regions are then decided
|
||||
the way the pack builder decides them under --system: over the chosen
|
||||
systems' declarations and every core extra. The system filter comes last.
|
||||
"""
|
||||
if cores:
|
||||
files = _filter_by_target(files, cores)
|
||||
omitted = _filter_by_target(omitted, cores)
|
||||
if regions:
|
||||
dropped = region_drops(files + omitted, regions, systems)
|
||||
files = [f for f in files if f["dest"] not in dropped]
|
||||
omitted = [o for o in omitted if o["dest"] not in dropped]
|
||||
if systems:
|
||||
wanted = set(systems)
|
||||
files = [f for f in files if _chosen(f, wanted)]
|
||||
omitted = [o for o in omitted if _chosen(o, wanted)]
|
||||
return files, omitted
|
||||
|
||||
|
||||
def _chosen(entry: dict, wanted: set[str]) -> bool:
|
||||
systems = entry_systems(entry)
|
||||
if not systems:
|
||||
return OTHER_SYSTEMS in wanted
|
||||
return bool(wanted & set(systems))
|
||||
|
||||
|
||||
def records_selection(files: list[dict]) -> bool:
|
||||
"""Whether a manifest carries what narrowing reads; older ones do not."""
|
||||
return any("systems" in entry for entry in files)
|
||||
|
||||
|
||||
def available_choices(files: list[dict], omitted: list[dict]) -> dict[str, list[str]]:
|
||||
"""The systems, cores and regions a manifest lets one narrow to."""
|
||||
systems = {s for e in files + omitted for s in entry_systems(e)}
|
||||
ordered = sorted(systems)
|
||||
if any(not entry_systems(f) for f in files):
|
||||
ordered.append(OTHER_SYSTEMS)
|
||||
cores = {c for f in files for c in (f.get("cores") or [])}
|
||||
regions = {
|
||||
r for e in files + omitted for r in (e.get("regions") or [])
|
||||
if r != WORLD_REGION
|
||||
}
|
||||
return {
|
||||
"systems": ordered,
|
||||
"cores": sorted(cores),
|
||||
"regions": sorted(regions),
|
||||
}
|
||||
|
||||
|
||||
def resolve_choices(values: list[str], known: list[str], label: str) -> list[str]:
|
||||
"""Names given on the command line, matched without regard to case.
|
||||
|
||||
Each value is one name or a comma-separated list. A whole value that is
|
||||
itself a name wins over splitting it: Recalbox names one system
|
||||
`msx1,msx2,msxturbor`. An unknown name is refused, never ignored, since
|
||||
carrying on would install something other than what was asked.
|
||||
"""
|
||||
by_lower = {name.lower(): name for name in known}
|
||||
chosen: list[str] = []
|
||||
unknown: list[str] = []
|
||||
for value in values:
|
||||
value = value.strip()
|
||||
tokens = [value] if value.lower() in by_lower else value.split(",")
|
||||
for token in (t.strip() for t in tokens):
|
||||
if not token:
|
||||
continue
|
||||
name = by_lower.get(token.lower())
|
||||
if name is None:
|
||||
unknown.append(token)
|
||||
elif name not in chosen:
|
||||
chosen.append(name)
|
||||
if unknown:
|
||||
available = ", ".join(known) if known else "none"
|
||||
raise ValueError(
|
||||
f"unknown {label}: {', '.join(unknown)} (available: {available})"
|
||||
)
|
||||
if values and not chosen:
|
||||
raise ValueError(f"--{label} needs at least one name")
|
||||
return chosen
|
||||
|
||||
|
||||
def resolve_regions(values: list[str]) -> list[str]:
|
||||
"""A region priority list, best first, from names or aliases."""
|
||||
chosen: list[str] = []
|
||||
for value in values:
|
||||
for token in value.split(","):
|
||||
if token.strip():
|
||||
region = canonical_region(token)
|
||||
if region not in chosen:
|
||||
chosen.append(region)
|
||||
if values and not chosen:
|
||||
raise ValueError("--region needs at least one region")
|
||||
return chosen
|
||||
|
||||
|
||||
def parse_selection(text: str, count: int, ordered: bool = False) -> list[int]:
|
||||
"""Numbers typed at a prompt: `3`, `1,4`, `2-5`, or `all`, 1-based.
|
||||
|
||||
Returned sorted, or in the typed order when the order is a priority.
|
||||
"""
|
||||
if text.strip().lower() in ("all", "*"):
|
||||
return list(range(1, count + 1))
|
||||
chosen: list[int] = []
|
||||
for token in (t.strip() for t in text.split(",")):
|
||||
if not token:
|
||||
continue
|
||||
low, sep, high = token.partition("-")
|
||||
try:
|
||||
start = int(low)
|
||||
end = int(high) if sep else start
|
||||
except ValueError:
|
||||
raise ValueError(f"not a number or range: {token}") from None
|
||||
if start > end or start < 1 or end > count:
|
||||
raise ValueError(f"out of range: {token} (1-{count})")
|
||||
for number in range(start, end + 1):
|
||||
if number not in chosen:
|
||||
chosen.append(number)
|
||||
return chosen if ordered else sorted(chosen)
|
||||
|
||||
|
||||
def _digest_file(path: Path, algorithms: tuple[str, ...]) -> dict[str, str]:
|
||||
"""Compute several digests of a file in a single read.
|
||||
|
||||
@@ -1267,7 +1600,7 @@ def download_files(
|
||||
def do_standalone_copies(
|
||||
manifest: dict, bios_path: Path, os_type: str,
|
||||
extra_dirs: dict[str, Path] | None = None,
|
||||
) -> tuple[int, int]:
|
||||
) -> tuple[int, int, int]:
|
||||
"""Copy BIOS files to standalone emulator directories.
|
||||
|
||||
Supports:
|
||||
@@ -1280,16 +1613,19 @@ def do_standalone_copies(
|
||||
default per-OS locations, for setups such as LaunchBox that keep their
|
||||
emulators outside them. The layout below the root is the same.
|
||||
|
||||
Returns (copied_count, skipped_count).
|
||||
Returns (copied, skipped, failed): skipped is a target directory that
|
||||
does not exist, failed a copy the system refused (permission, disk
|
||||
full, read-only mount), which used to be counted as "dir not found".
|
||||
"""
|
||||
from fnmatch import fnmatch
|
||||
|
||||
copies = manifest.get("standalone_copies", [])
|
||||
if not copies:
|
||||
return 0, 0
|
||||
return 0, 0, 0
|
||||
|
||||
copied = 0
|
||||
skipped = 0
|
||||
failed = 0
|
||||
|
||||
for entry in copies:
|
||||
# Note entries: print message if emulator detected
|
||||
@@ -1348,10 +1684,11 @@ def do_standalone_copies(
|
||||
try:
|
||||
shutil.copy2(src, dest)
|
||||
copied += 1
|
||||
except OSError:
|
||||
skipped += 1
|
||||
except OSError as exc:
|
||||
print(f" ERROR: {dest}: {exc.strerror or exc}")
|
||||
failed += 1
|
||||
|
||||
return copied, skipped
|
||||
return copied, skipped, failed
|
||||
|
||||
|
||||
def format_size(n: int) -> str:
|
||||
@@ -1385,7 +1722,7 @@ def _prompt_manual_platform(os_type: str) -> list[tuple[str, Path]]:
|
||||
plat = AVAILABLE_PLATFORMS[int(choice) - 1]
|
||||
elif choice in AVAILABLE_PLATFORMS:
|
||||
plat = choice
|
||||
default_dest = DEFAULT_DESTS.get(plat, Path.home() / "bios")
|
||||
default_dest = _default_dest(os_type, plat)
|
||||
try:
|
||||
raw = input(f"BIOS directory [{default_dest}]: ").strip()
|
||||
except (EOFError, KeyboardInterrupt):
|
||||
@@ -1405,7 +1742,9 @@ def _default_dest(os_type: str, platform_name: str) -> Path:
|
||||
"""
|
||||
if os_type == "android" and platform_name == "retroarch":
|
||||
return _android_storage_root() / "RetroArch" / "system"
|
||||
return DEFAULT_DESTS.get(platform_name, Path.home() / "bios")
|
||||
return _os_default_dests(os_type).get(
|
||||
platform_name, DEFAULT_DESTS.get(platform_name, Path.home() / "bios")
|
||||
)
|
||||
|
||||
|
||||
def _manual_usage_hint(os_type: str) -> list[str]:
|
||||
@@ -1458,6 +1797,155 @@ def _prompt_platform_choice(
|
||||
return platforms
|
||||
|
||||
|
||||
def _ask(prompt: str) -> str:
|
||||
try:
|
||||
return input(prompt).strip()
|
||||
except (EOFError, KeyboardInterrupt):
|
||||
print()
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
def _sized(files: list[dict]) -> str:
|
||||
return f"{_plural(len(files), 'file')}, {format_size(sum(f.get('size', 0) for f in files))}"
|
||||
|
||||
|
||||
def _pick(title: str, rows: list[tuple[str, list[dict]]], ordered: bool = False) -> list[str]:
|
||||
"""Numbered list of names; an empty answer keeps every one."""
|
||||
if not rows:
|
||||
return []
|
||||
print(f"\n{title}")
|
||||
width = len(str(len(rows)))
|
||||
name_width = min(max(len(name) for name, _files in rows), 32)
|
||||
for index, (name, files) in enumerate(rows, 1):
|
||||
print(f" {index:>{width}}) {name:<{name_width}} {_sized(files)}")
|
||||
hint = "order of preference, e.g. 2,1" if ordered else "e.g. 1,3-5"
|
||||
while True:
|
||||
text = _ask(f"Numbers ({hint}), Enter for all, q to quit: ")
|
||||
if not text:
|
||||
return []
|
||||
if text.lower() == "q":
|
||||
sys.exit(0)
|
||||
try:
|
||||
chosen = parse_selection(text, len(rows), ordered=ordered)
|
||||
except ValueError as exc:
|
||||
print(f" {exc}")
|
||||
continue
|
||||
if chosen:
|
||||
return [rows[number - 1][0] for number in chosen]
|
||||
|
||||
|
||||
def _prompt_custom_selection(
|
||||
plat: str, files: list[dict], omitted: list[dict]
|
||||
) -> tuple[list[str], list[str], list[str]] | None:
|
||||
"""Offer to narrow the install by system, core and region.
|
||||
|
||||
Enter installs everything, the default most runs want. Returns None
|
||||
then, or the three choices; each empty list keeps everything on its axis.
|
||||
"""
|
||||
print(f"\n{plat.capitalize()}: {_sized(files)}.")
|
||||
print(" Enter) install everything")
|
||||
print(" c) choose systems, cores and regions")
|
||||
print(" q) quit")
|
||||
while True:
|
||||
answer = _ask("> ").lower()
|
||||
if answer == "":
|
||||
return None
|
||||
if answer == "q":
|
||||
sys.exit(0)
|
||||
if answer == "c":
|
||||
break
|
||||
|
||||
choices = available_choices(files, omitted)
|
||||
if OTHER_SYSTEMS in choices["systems"]:
|
||||
print(f"\n'{OTHER_SYSTEMS}' holds what cores load for systems this platform")
|
||||
print("does not list, such as game engines and extra computers.")
|
||||
systems = _pick("Systems:", [
|
||||
(name, [f for f in files if _chosen(f, {name})])
|
||||
for name in choices["systems"]
|
||||
])
|
||||
kept, kept_omitted = narrow(files, omitted, systems, [], [])
|
||||
|
||||
cores: list[str] = []
|
||||
core_names = available_choices(kept, kept_omitted)["cores"]
|
||||
if core_names:
|
||||
print("\nThe platform's own files for these systems are always kept;")
|
||||
print("the extra files each core loads can be narrowed.")
|
||||
cores = _pick("Cores:", [
|
||||
(name, [f for f in kept if name in (f.get("cores") or [])])
|
||||
for name in core_names
|
||||
])
|
||||
kept, kept_omitted = narrow(kept, kept_omitted, [], cores, [])
|
||||
|
||||
regions: list[str] = []
|
||||
region_names = available_choices(kept, kept_omitted)["regions"]
|
||||
if region_names:
|
||||
print("\nSome systems have one BIOS per region. Keeping only the")
|
||||
print("preferred region removes the others where a match exists.")
|
||||
regions = _pick("Regions:", [
|
||||
(name, [f for f in kept if name in (f.get("regions") or [])])
|
||||
for name in region_names
|
||||
], ordered=True)
|
||||
return systems, cores, regions
|
||||
|
||||
|
||||
def _same_choice_hint(plat: str, systems: list[str], cores: list[str], regions: list[str]) -> str:
|
||||
"""The options that repeat a choice made at the prompts."""
|
||||
def quoted(value: str) -> str:
|
||||
return f'"{value}"' if any(c in value for c in " ;&|") else value
|
||||
|
||||
parts = [f"--platform {plat}"]
|
||||
parts += [f"--system {quoted(name)}" for name in systems]
|
||||
parts += [f"--core {quoted(name)}" for name in cores]
|
||||
if regions:
|
||||
parts.append(f"--region {','.join(regions)}")
|
||||
return " ".join(parts)
|
||||
|
||||
|
||||
def _print_choices(
|
||||
plat: str, files: list[dict], omitted: list[dict], systems: bool
|
||||
) -> None:
|
||||
"""What --system or --core accepts for a platform, with what each holds."""
|
||||
choices = available_choices(files, omitted)
|
||||
names = choices["systems"] if systems else choices["cores"]
|
||||
if not names:
|
||||
print(f" {plat} records no {'systems' if systems else 'cores'}")
|
||||
return
|
||||
width = min(max(len(name) for name in names), 40)
|
||||
for name in names:
|
||||
held = (
|
||||
[f for f in files if _chosen(f, {name})]
|
||||
if systems
|
||||
else [f for f in files if name in (f.get("cores") or [])]
|
||||
)
|
||||
print(f" {name:<{width}} {_sized(held)}")
|
||||
|
||||
|
||||
def _requested_narrowing(
|
||||
args: argparse.Namespace, plat: str, files: list[dict], omitted: list[dict]
|
||||
) -> tuple[list[str], list[str], list[str]] | None:
|
||||
"""The systems, cores and regions named on the command line, checked."""
|
||||
if not (args.system or args.core or args.region):
|
||||
return None
|
||||
if not records_selection(files):
|
||||
# Without the fields, a region filter would match nothing and install
|
||||
# everything: refused rather than ignored.
|
||||
print(
|
||||
f"Error: the {plat} file list records no systems or regions; "
|
||||
"narrowing needs a newer one",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(1)
|
||||
choices = available_choices(files, omitted)
|
||||
try:
|
||||
systems = resolve_choices(args.system or [], choices["systems"], "system")
|
||||
cores = resolve_choices(args.core or [], choices["cores"], "core")
|
||||
regions = resolve_regions(args.region or [])
|
||||
except ValueError as exc:
|
||||
print(f"Error: {plat}: {exc}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
return systems, cores, regions
|
||||
|
||||
|
||||
def main() -> None:
|
||||
"""Entry point."""
|
||||
parser = argparse.ArgumentParser(
|
||||
@@ -1507,10 +1995,56 @@ def main() -> None:
|
||||
action="store_true",
|
||||
help="opt in to copies into detected standalone-emulator directories",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--system",
|
||||
action="append",
|
||||
metavar="NAME",
|
||||
help="install only these systems (repeat or comma-separate; see --list-systems)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--core",
|
||||
action="append",
|
||||
metavar="NAME",
|
||||
help="keep only the extra files these cores load (see --list-cores)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--region",
|
||||
action="append",
|
||||
metavar="LIST",
|
||||
help="preferred regions, best first, e.g. us,eu,jp: keep one BIOS per "
|
||||
"region where a system has several",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--list-systems",
|
||||
action="store_true",
|
||||
help="list a platform's systems with their file counts and exit",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--list-cores",
|
||||
action="store_true",
|
||||
help="list the cores whose extra files a platform installs and exit",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--no-input",
|
||||
action="store_true",
|
||||
help="never ask a question; fail where an answer is needed",
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
if not 1 <= args.jobs <= 32:
|
||||
parser.error("--jobs must be between 1 and 32")
|
||||
if args.region:
|
||||
try:
|
||||
resolve_regions(args.region)
|
||||
except ValueError as exc:
|
||||
parser.error(f"{exc} (known: {', '.join(sorted(REGIONS))})")
|
||||
for option, values in (("--system", args.system), ("--core", args.core)):
|
||||
if values is not None and not any(
|
||||
token.strip() for value in values for token in value.split(",")
|
||||
):
|
||||
parser.error(f"{option} needs at least one name")
|
||||
interactive = sys.stdin.isatty() and not args.no_input
|
||||
listing = args.list_targets or args.list_systems or args.list_cores
|
||||
print("RetroBIOS\n")
|
||||
|
||||
os_type = detect_os()
|
||||
@@ -1558,7 +2092,7 @@ def main() -> None:
|
||||
platforms = detect_platforms(os_type)
|
||||
if not platforms:
|
||||
print(" No supported platform detected.")
|
||||
if not sys.stdin.isatty() or args.list_targets:
|
||||
if not interactive or listing:
|
||||
for line in _manual_usage_hint(os_type):
|
||||
print(line)
|
||||
sys.exit(1)
|
||||
@@ -1566,7 +2100,7 @@ def main() -> None:
|
||||
for name, path in platforms:
|
||||
print(f" Found {name.capitalize()} at {path}")
|
||||
|
||||
if len(platforms) > 1 and not args.list_targets and sys.stdin.isatty():
|
||||
if len(platforms) > 1 and not listing and interactive:
|
||||
platforms = _prompt_platform_choice(platforms)
|
||||
|
||||
total_downloaded = 0
|
||||
@@ -1632,6 +2166,27 @@ def main() -> None:
|
||||
omitted_files = _filter_by_target(omitted_files, target_cores)
|
||||
print(f" Filtered {before} -> {len(files)} files for target {args.target}")
|
||||
|
||||
selection = _requested_narrowing(args, plat_name, files, omitted_files)
|
||||
if (
|
||||
selection is None
|
||||
and interactive
|
||||
and not args.check
|
||||
and not listing
|
||||
and records_selection(files)
|
||||
):
|
||||
selection = _prompt_custom_selection(plat_name, files, omitted_files)
|
||||
if selection is not None:
|
||||
print("\n Same choice without questions: "
|
||||
+ _same_choice_hint(plat_name, *selection))
|
||||
if selection is not None:
|
||||
before = len(files)
|
||||
files, omitted_files = narrow(files, omitted_files, *selection)
|
||||
print(f" Narrowed {before} -> {len(files)} files")
|
||||
|
||||
if args.list_systems or args.list_cores:
|
||||
_print_choices(plat_name, files, omitted_files, args.list_systems)
|
||||
continue
|
||||
|
||||
total_size = sum(f.get("size", 0) for f in files)
|
||||
print(f" {len(files)} files ({format_size(total_size)})")
|
||||
if omitted_files:
|
||||
@@ -1643,7 +2198,7 @@ def main() -> None:
|
||||
reason = entry.get("reason", "unknown")
|
||||
reasons[reason] = reasons.get(reason, 0) + 1
|
||||
reason_summary = ", ".join(
|
||||
f"{reason.replace('_', ' ')}: {count}"
|
||||
f"{OMISSION_REASONS.get(reason, reason)}: {count}"
|
||||
for reason, count in sorted(reasons.items())
|
||||
)
|
||||
print(
|
||||
@@ -1709,18 +2264,22 @@ def main() -> None:
|
||||
print("\nStandalone emulators:")
|
||||
lb_root = launchbox_root(os_type)
|
||||
extra_dirs = launchbox_bios_dirs(lb_root) if lb_root else None
|
||||
copied, skipped = do_standalone_copies(
|
||||
copied, skipped, copy_failed = do_standalone_copies(
|
||||
manifest, bios_path, os_type, extra_dirs
|
||||
)
|
||||
if copied or skipped:
|
||||
print(f" {copied} copied, {skipped} skipped (dir not found)")
|
||||
if copied or skipped or copy_failed:
|
||||
print(
|
||||
f" {copied} copied, {skipped} skipped (dir not found), "
|
||||
f"{copy_failed} failed"
|
||||
)
|
||||
total_errors += copy_failed
|
||||
elif manifest.get("standalone_copies") and not args.check:
|
||||
print(
|
||||
"\nStandalone copies skipped "
|
||||
"(use --standalone-copies to opt in)."
|
||||
)
|
||||
|
||||
if not args.check and not args.list_targets:
|
||||
if not args.check and not listing:
|
||||
_report_outcome(
|
||||
installed_paths,
|
||||
total_downloaded,
|
||||
|
||||
+9
-2
@@ -18,7 +18,7 @@ esac
|
||||
TEMP_INSTALLER=""
|
||||
TEMP_DIRECTORY=""
|
||||
DEFAULT_INSTALL_URL="https://raw.githubusercontent.com/Abdess/retrobios/main/install.py"
|
||||
DEFAULT_INSTALL_SHA256="42b1747ae867d41da39b11daf783c0106daa6ed18861a2214c196f3a5c9a3c60"
|
||||
DEFAULT_INSTALL_SHA256="d5f352fbe34cfd8ae40c0980c3986158ec1d9dd1babfe2bbc0918ffc0fa0bdf0"
|
||||
MAX_INSTALLER_BYTES=2097152
|
||||
|
||||
cleanup() {
|
||||
@@ -97,4 +97,11 @@ if [ -z "$PYTHON" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
"$PYTHON" "$INSTALLER" "$@"
|
||||
# Piped from curl, standard input is this script, not the terminal: the
|
||||
# installer would skip every question it can ask. Hand it the terminal when
|
||||
# there is one.
|
||||
if [ ! -t 0 ] && (: </dev/tty) 2>/dev/null; then
|
||||
"$PYTHON" "$INSTALLER" "$@" </dev/tty
|
||||
else
|
||||
"$PYTHON" "$INSTALLER" "$@"
|
||||
fi
|
||||
+7254
-576
File diff suppressed because it is too large.
Load diff
+3945
-372
File diff suppressed because it is too large.
Load diff
+2529
-163
File diff suppressed because it is too large.
Load diff
+6225
-724
File diff suppressed because it is too large.
Load diff
+325
-82
@@ -5,7 +5,7 @@
|
||||
"platform": "misterfpga",
|
||||
"display_name": "MiSTer FPGA",
|
||||
"version": "1.0",
|
||||
"generated": "2026-10-04T20:41:16Z",
|
||||
"generated": "2026-10-10T05:24:26Z",
|
||||
"base_destination": "games",
|
||||
"detect": [
|
||||
{
|
||||
@@ -29,7 +29,10 @@
|
||||
"sha256": "41b5b8e7c44e55eaf5cfd4f2a58df42f4a1bbc776723368fb25bf118dd631b1b",
|
||||
"size": 1048576,
|
||||
"repo_path": "bios/3DO Company/3DO/panafz1.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"3do"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "3DO/kanji.rom",
|
||||
@@ -37,7 +40,10 @@
|
||||
"sha256": "8974193e76cf255ebc40fe20b95b405db2cc1ea07910584380e50c6d9ca181aa",
|
||||
"size": 1048576,
|
||||
"repo_path": "bios/3DO Company/3DO/panafz1j-kanji.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"3do"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Apple-IIgs/boot.rom",
|
||||
@@ -45,7 +51,10 @@
|
||||
"sha256": "01398a51b3aa16c40bb3d5df43494316cc12eebb87871712cecc396e1beb2df8",
|
||||
"size": 262144,
|
||||
"repo_path": "bios/Apple/Apple II/apple2gs.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"apple-iigs"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Apple-IIgs/boot1.rom",
|
||||
@@ -53,7 +62,10 @@
|
||||
"sha256": "34cd454c6201bfd26839d6ace2ff6b1231e09d6279e49b4890311756dc3825fb",
|
||||
"size": 131072,
|
||||
"repo_path": "bios/Apple/Apple IIGS/ROM",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"apple-iigs"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Jaguar/boot.rom",
|
||||
@@ -61,7 +73,10 @@
|
||||
"sha256": "f0bd29599b3dfca7f5620c011256c1dc45c9d82c428a318f965c2ba3ded2e9f9",
|
||||
"size": 131072,
|
||||
"repo_path": "bios/Atari/Jaguar/boot.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"atari-jaguar"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Jaguar/boot1.rom",
|
||||
@@ -69,7 +84,10 @@
|
||||
"sha256": "7ebadb56f8082c86d6f74e2c38e02b218db420d3049f8f9c988f6490dc7f9fc0",
|
||||
"size": 262144,
|
||||
"repo_path": "bios/Atari/Jaguar/boot1.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"atari-jaguar"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Jaguar/boot2.rom",
|
||||
@@ -77,7 +95,10 @@
|
||||
"sha256": "bf02591cfe4ab4f082ea23c447da5c53afbfddace6d700b785ba04b7ac5c64e0",
|
||||
"size": 131072,
|
||||
"repo_path": "bios/Atari/Jaguar/boot2.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"atari-jaguar"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "AtariLynx/boot.rom",
|
||||
@@ -85,7 +106,10 @@
|
||||
"sha256": "c26a36c1990bcf841155e5a6fea4d2ee1a4d53b3cc772e70f257a962ad43b383",
|
||||
"size": 512,
|
||||
"repo_path": "bios/Atari/Lynx/Atari_LYNX_boot.img",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"atari-lynx"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Astrocade/boot.rom",
|
||||
@@ -93,7 +117,10 @@
|
||||
"sha256": "f01220d94b82145a6d18f114ff59be9c178f69de24f8ad0f4d19eee8b86b17c7",
|
||||
"size": 8192,
|
||||
"repo_path": "bios/Bally/Astrocade/astro.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"bally-astrocade"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Casio_PV-2000/boot0.rom",
|
||||
@@ -101,7 +128,10 @@
|
||||
"sha256": "2587d206eb63917848ea30e14232448ed4f873c6796a22e2bf6543b01f46308e",
|
||||
"size": 16384,
|
||||
"repo_path": "bios/Casio/PV-2000/hn613128pc64.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"casio-pv2000"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "CreatiVision/boot.rom",
|
||||
@@ -109,7 +139,10 @@
|
||||
"sha256": "48a7fda99c1b9c0d90b70de0b4a9431a5a781f94d1874ee6d91830a638c9e5c3",
|
||||
"size": 16384,
|
||||
"repo_path": "bios/VTech/CreatiVision/laser2001.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"creativision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "SCV/boot.rom",
|
||||
@@ -117,7 +150,10 @@
|
||||
"sha256": "25c7ff2d735d1ae895af9262f31e083c5c1bd99a8f31b5b378dfbc0f166ec97f",
|
||||
"size": 6144,
|
||||
"repo_path": "bios/Epoch/Super Cassette Vision/boot.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"epoch-scv"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Gamate/boot.rom",
|
||||
@@ -125,7 +161,10 @@
|
||||
"sha256": "26f206fa4eedbe040f619e3af78efa1d38588535b1d746f6a462da639ced4b1e",
|
||||
"size": 4096,
|
||||
"repo_path": "bios/Bit Corporation/Gamate/gamate_bios_umc.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"gamate"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "GameKing/boot.rom",
|
||||
@@ -133,7 +172,10 @@
|
||||
"sha256": "7843fd082889cac046d446160f38755f7c8c4a8e4f9dd9d5104b185f0bc1dec4",
|
||||
"size": 524288,
|
||||
"repo_path": "bios/TimeTop/GameKing/boot.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"gameking"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Interact/boot.rom",
|
||||
@@ -141,7 +183,10 @@
|
||||
"sha256": "e0888ba82382aabb7557aa4a3445e613bd7f33bae1af5ece211e2cb6bc9ffa82",
|
||||
"size": 2048,
|
||||
"repo_path": "bios/Interact/Home Computer/interact.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"interact"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Loopy/boot0.rom",
|
||||
@@ -149,7 +194,10 @@
|
||||
"sha256": "82a8d6add06e324e36c71b0a7a92d607af3db5e65574a6892794d70df668e9d5",
|
||||
"size": 32768,
|
||||
"repo_path": "bios/Casio/Loopy/boot0.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"loopy"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Loopy/boot1.rom",
|
||||
@@ -157,7 +205,10 @@
|
||||
"sha256": "7540ff64268e500a34fb83c8642510d341440ac6258f6c36851e182870e40f75",
|
||||
"size": 524288,
|
||||
"repo_path": "bios/Casio/Loopy/boot1.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"loopy"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Marty/mrom.m36",
|
||||
@@ -165,7 +216,10 @@
|
||||
"sha256": "2cd7466183ba965259df35ff078b7b057a99086feea0050ddf87aebc6932f429",
|
||||
"size": 2097152,
|
||||
"repo_path": "bios/Fujitsu/FM Towns/mrom.m36",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"marty"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Marty/mrom.m37",
|
||||
@@ -173,7 +227,10 @@
|
||||
"sha256": "10fc6d984d0a440c3410d805f4bea247fb5dd5a509befff481164923f883797d",
|
||||
"size": 2097152,
|
||||
"repo_path": "bios/Fujitsu/FM Towns/mrom.m37",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"marty"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Intellivision/boot0.rom",
|
||||
@@ -181,7 +238,10 @@
|
||||
"sha256": "1aeb614856beba95463166daf09304b414d5617d3f37d221724b3337fc4b2722",
|
||||
"size": 8192,
|
||||
"repo_path": "bios/Mattel/Intellivision/INTV_EROM.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"mattel-intellivision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Intellivision/boot1.rom",
|
||||
@@ -189,7 +249,10 @@
|
||||
"sha256": "a80b6841182547d08635ad30a6af71441c4c9eed9391b3dd22feb30d8e50cc85",
|
||||
"size": 2048,
|
||||
"repo_path": "bios/Mattel/Intellivision/INTV_GROM.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"mattel-intellivision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Intellivision/boot2.rom",
|
||||
@@ -197,7 +260,10 @@
|
||||
"sha256": "dabade432af1523f43029057071ca8c1ed3604498c784603e8733023382ad7a5",
|
||||
"size": 2048,
|
||||
"repo_path": "bios/Mattel/Intellivision/IVOICE.BIN",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"mattel-intellivision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Intellivision/boot3.rom",
|
||||
@@ -205,7 +271,10 @@
|
||||
"sha256": "2fcea60039c4a8836b9bb71e391d70a145c724b4dae516be733fe842ba6687c7",
|
||||
"size": 24576,
|
||||
"repo_path": "bios/Mattel/Intellivision/ECS.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"mattel-intellivision"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "MSX1/boot.rom",
|
||||
@@ -213,7 +282,10 @@
|
||||
"sha256": "04fd77f02f652770cbb3cc6b4a594cc736d56486a106c1068965f1fe090746a5",
|
||||
"size": 32768,
|
||||
"repo_path": "bios/Microsoft/MSX/share/systemroms/vg8020_basic-bios1.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"microsoft-msx"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "PC8801/boot.rom",
|
||||
@@ -221,7 +293,10 @@
|
||||
"sha256": "0dc3fcf58c90c1f119a710babd54b57babf81ba8573c070b33f0cc21948b3086",
|
||||
"size": 393216,
|
||||
"repo_path": "bios/NEC/PC-88/PC8801 MKII SR BIOS.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"nec-pc-88"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "TGFX16-CD/cd_bios.rom",
|
||||
@@ -229,7 +304,10 @@
|
||||
"sha256": "b057e09822c3767120ba56f2ce02f089b5824d4b489ea3cd7ad9405b3a339a52",
|
||||
"size": 262144,
|
||||
"repo_path": "bios/NEC/PC Engine CD/Super CD 3.1.pce",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"nec-pc-engine-cd"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "NGPC/boot0.rom",
|
||||
@@ -237,7 +315,10 @@
|
||||
"sha256": "8fb845a2f71514cec20728e2f0fecfade69444f8d50898b92c2259f1ba63e10d",
|
||||
"size": 65536,
|
||||
"repo_path": "bios/SNK/Neo Geo Pocket/SNK Neo-Geo Pocket Color BIOS (1999)(SNK)(en-ja).bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"ngpc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "NGPC/boot1.rom",
|
||||
@@ -245,7 +326,10 @@
|
||||
"sha256": "0293555b21c4fac516d25199df7809b26beeae150e1d4504a050db32264a6ad7",
|
||||
"size": 65536,
|
||||
"repo_path": "bios/SNK/Neo Geo Pocket/SNK Neo-Geo Pocket BIOS (1998)(SNK)(en-ja).bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"ngpc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "N64/boot.rom",
|
||||
@@ -253,7 +337,10 @@
|
||||
"sha256": "fa7b09795ef1e54461e59f6f2d902368133e3f1cd980e34383e6a780d74beffd",
|
||||
"size": 1984,
|
||||
"repo_path": "bios/Nintendo/Nintendo 64/boot.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"nintendo-64"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "N64/boot1.rom",
|
||||
@@ -261,7 +348,10 @@
|
||||
"sha256": "79c81fffae934b6df251da6c3a394f52c6a0eaa07115a3b9677743e3c1335f4a",
|
||||
"size": 1984,
|
||||
"repo_path": "bios/Nintendo/Nintendo 64/boot1.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"nintendo-64"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "N64/boot3.rom",
|
||||
@@ -269,7 +359,10 @@
|
||||
"sha256": "806400ec0df94b0755de6c5b8249d6b6a9866124c5ddbdac198bde22499bfb8b",
|
||||
"size": 4194304,
|
||||
"repo_path": "bios/Nintendo/64DD/64DD_IPL_v12_JPN.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"nintendo-64"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "N64/boot4.rom",
|
||||
@@ -277,7 +370,10 @@
|
||||
"sha256": "9c2962a8b994a29e4cd04b3a6e4ed730a751414655ab6a9799ebf5fc08b79d44",
|
||||
"size": 4194304,
|
||||
"repo_path": "bios/Nintendo/64DD/64DD_IPL_DEV.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"nintendo-64"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "N64/boot5.rom",
|
||||
@@ -285,7 +381,10 @@
|
||||
"sha256": "e9fec87a45fba02399e88064b9e2f8cf0f2106e351c58279a87f05da5bc984ad",
|
||||
"size": 4194304,
|
||||
"repo_path": "bios/Nintendo/64DD/64DD_IPL_USA.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"nintendo-64"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "GAMEBOY/boot1.rom",
|
||||
@@ -293,7 +392,10 @@
|
||||
"sha256": "b4f2e416a35eef52cba161b159c7c8523a92594facb924b3ede0d722867c50c7",
|
||||
"size": 2304,
|
||||
"repo_path": "bios/Nintendo/Game Boy Color/GBC_cgb.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"nintendo-gb"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "GBA/boot.rom",
|
||||
@@ -301,7 +403,10 @@
|
||||
"sha256": "fd2547724b505f487e6dcb29ec2ecff3af35a841a77ab2e85fd87350abd36570",
|
||||
"size": 16384,
|
||||
"repo_path": "bios/Nintendo/Game Boy Advance/GBA_bios.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"nintendo-gba"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "NES/boot0.rom",
|
||||
@@ -309,7 +414,10 @@
|
||||
"sha256": "99c18490ed9002d9c6d999b9d8d15be5c051bdfa7cc7e73318053c9a994b0178",
|
||||
"size": 8192,
|
||||
"repo_path": "bios/Arcade/FBNeo/fdsbios.nes",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"nintendo-nes"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "PokemonMini/boot.rom",
|
||||
@@ -317,7 +425,10 @@
|
||||
"sha256": "45a1c7f28b9ad585e67f047abe9c1c956724bfcab8c9011002af4274e7c50e8f",
|
||||
"size": 4096,
|
||||
"repo_path": "bios/Nintendo/Pokemon Mini/bios.min",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"nintendo-pokemon-mini"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "SGB/Super Game Boy 2.sfc",
|
||||
@@ -325,7 +436,10 @@
|
||||
"sha256": "c172498a23d1176672931bab33b629c7d28f914a43dca9e540b8af1b37ccf2c6",
|
||||
"size": 524288,
|
||||
"repo_path": "bios/Nintendo/Super Game Boy/SGB2.sfc/program.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"nintendo-sgb"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "SGB/Super Game Boy.sfc",
|
||||
@@ -333,7 +447,10 @@
|
||||
"sha256": "a75160f7b89b1f0e20fd2f6441bb86285c7378db5035ef6885485eaff6059376",
|
||||
"size": 262144,
|
||||
"repo_path": "bios/Nintendo/Super Game Boy/SGB1.sfc/program.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"nintendo-sgb"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "SNES/bsx_bios.rom",
|
||||
@@ -341,7 +458,10 @@
|
||||
"sha256": "a49827b45ff9ac9cf5b4658190e1428e59251bc82d8a63d8e9e0f71e439f008f",
|
||||
"size": 1048576,
|
||||
"repo_path": "bios/Nintendo/SNES/BS-X.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"nintendo-snes"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "CD-i/boot0.rom",
|
||||
@@ -349,7 +469,10 @@
|
||||
"sha256": "fd123e66beadaf844cb220a44166ea33f9fd0d64bafb9e6399febff445429db2",
|
||||
"size": 524288,
|
||||
"repo_path": "bios/Philips/CD-i/cdi220b.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"philips-cdi"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "CD-i/boot1.rom",
|
||||
@@ -357,7 +480,10 @@
|
||||
"sha256": "15794460f2ad630f6dd483a02ef958818c7a5c65f8afe76364bc9ffb7ccad3cc",
|
||||
"size": 8192,
|
||||
"repo_path": "bios/Philips/CD-i/zx405042p__cdi_slave_2.0__b43t__zzmk9213.mc68hc705c8a_withtestrom.7206",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"philips-cdi"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "CD-i/boot2.rom",
|
||||
@@ -365,7 +491,10 @@
|
||||
"sha256": "e8a8cabb23650b53c2cb0763c3a1409f6c0d580a52fbe8ef834d44d4021db165",
|
||||
"size": 131072,
|
||||
"repo_path": "bios/Philips/CD-i/vmpega_split.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"philips-cdi"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "PocketChallengeV2/boot.rom",
|
||||
@@ -373,7 +502,10 @@
|
||||
"sha256": "bf4480dbea1c47c8b54ce7be9382bc1006148f431fbe4277e136351fa74f635e",
|
||||
"size": 4096,
|
||||
"repo_path": "bios/Bandai/WonderSwan/bootrom.ws",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"pocket-challenge-v2"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "PocketChallengeV2/boot1.rom",
|
||||
@@ -381,7 +513,10 @@
|
||||
"sha256": "f5a5c044d84ce1681f94e9ef74287cb989784497be5bd5108df17908dfa55db2",
|
||||
"size": 8192,
|
||||
"repo_path": "bios/Bandai/WonderSwan/bootrom.wsc",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"pocket-challenge-v2"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "MegaCD/Europe/cd_bios.rom",
|
||||
@@ -389,7 +524,10 @@
|
||||
"sha256": "fe608a2a07676a23ab5fd5eee2f53c9e2526d69a28aa16ccd85c0ec42e6933cb",
|
||||
"size": 131072,
|
||||
"repo_path": "bios/Sega/Mega CD/eu_mcd2_9303.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"sega-mega-cd"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "MegaCD/Japan/cd_bios.rom",
|
||||
@@ -397,7 +535,10 @@
|
||||
"sha256": "7133fc2dd2fe5b7d0acd53a5f10f3d00b5d31270239ad20d74ef32393e24af88",
|
||||
"size": 131072,
|
||||
"repo_path": "bios/Sega/Mega CD/jp_mcd2_921222.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"sega-mega-cd"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "MegaCD/USA/cd_bios.rom",
|
||||
@@ -405,7 +546,10 @@
|
||||
"sha256": "fb477cdbf94c84424c2feca4fe40656d85393fe7b7b401911b45ad2eb991258c",
|
||||
"size": 131072,
|
||||
"repo_path": "bios/Sega/Mega CD/SegaCDBIOS9303.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"sega-mega-cd"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "MegaCD/boot.rom",
|
||||
@@ -413,7 +557,10 @@
|
||||
"sha256": "59403e7f8be1d4e98d673cca17cfec072770a56415165ad7ac88dcd3f7273317",
|
||||
"size": 131072,
|
||||
"repo_path": "bios/Sega/Mega CD/US Sega CD 2 (Region Free) 930601 l_oliveira.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"sega-mega-cd"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Saturn/boot.rom",
|
||||
@@ -421,7 +568,10 @@
|
||||
"sha256": "37561c4444bec52ae1aae31de5579f1856d5b23002ee083ade42f9ed13c8616f",
|
||||
"size": 524288,
|
||||
"repo_path": "bios/Sega/Saturn/.variants/hisaturn_v103.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"sega-saturn"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "NEOGEO/000-lo.lo",
|
||||
@@ -429,7 +579,10 @@
|
||||
"sha256": "2a76f023dc578804c6bcd58ed514ffc04fcb433b3bd75d4452575ffda57a0707",
|
||||
"size": 131072,
|
||||
"repo_path": "bios/SNK/Neo Geo CD/000-lo.lo",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"snk-neogeo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "NEOGEO/neo-epo.sp1",
|
||||
@@ -437,7 +590,10 @@
|
||||
"sha256": "70f7906d68acbc3630b6e7792ebb485288b05ca72c6d4c243e07e230aae8d1e4",
|
||||
"size": 131072,
|
||||
"repo_path": "bios/SNK/Neo Geo/neo-epo.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"snk-neogeo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "NEOGEO/sfix.sfix",
|
||||
@@ -445,7 +601,10 @@
|
||||
"sha256": "fcf51e688c006408be92c5adaf37d4302d05e7e681193dd0623072e53915c90e",
|
||||
"size": 131072,
|
||||
"repo_path": "bios/SNK/Neo Geo/sfix.sfix",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"snk-neogeo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "NEOGEO/sp-s2.sp1",
|
||||
@@ -453,7 +612,10 @@
|
||||
"sha256": "ae1c5cc9a0acdead8a3d5a16ee84f575582f2209677464b05a2b8b0451f658a1",
|
||||
"size": 131072,
|
||||
"repo_path": "bios/SNK/Neo Geo/sp-s2.sp1",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"snk-neogeo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "NEOGEO/uni-bios.rom",
|
||||
@@ -461,7 +623,10 @@
|
||||
"sha256": "e016ce75097df0b5f5910e8eb4914439f5c77511de65df5a1e089eef147b256b",
|
||||
"size": 131072,
|
||||
"repo_path": "bios/SNK/Neo Geo/uni-bios_4_0.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"snk-neogeo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "NeoGeo-CD/neocd.bin",
|
||||
@@ -469,7 +634,10 @@
|
||||
"sha256": "2e93af5848080ea04d17a7841b742f009330d30e4ff40c3410547581d921c892",
|
||||
"size": 524288,
|
||||
"repo_path": "bios/SNK/Neo Geo CD/neocd.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"snk-neogeo-cd"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "NeoGeo-CD/top-sp1.bin",
|
||||
@@ -477,7 +645,10 @@
|
||||
"sha256": "c11c33589b2057008a7e4c7c700fcd989a8c0f95f869e7e7539fdd00414d99a7",
|
||||
"size": 524288,
|
||||
"repo_path": "bios/SNK/Neo Geo CD/top-sp1.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"snk-neogeo-cd"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "NeoGeo-CD/uni-bioscd.rom",
|
||||
@@ -485,7 +656,10 @@
|
||||
"sha256": "1c3ec20824a58e5f5cbf47ccc2c91a10f34d21cfa2791b3413cea89b0c920db8",
|
||||
"size": 524288,
|
||||
"repo_path": "bios/SNK/Neo Geo/uni-bioscd33.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"snk-neogeo-cd"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "PSX/boot.rom",
|
||||
@@ -493,7 +667,10 @@
|
||||
"sha256": "39dcc1a0717036c9b6ac52fefd1ee7a57d3808e8cfbc755879fa685a0a738278",
|
||||
"size": 524288,
|
||||
"repo_path": "bios/Sony/PlayStation/scph7001.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"sony-playstation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "PSX/boot1.rom",
|
||||
@@ -501,7 +678,10 @@
|
||||
"sha256": "e900504d1755f021f861b82c8258c5e6658c7b592f800cccd91f5d32ea380d28",
|
||||
"size": 524288,
|
||||
"repo_path": "bios/Sony/PlayStation/scph7000.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"sony-playstation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "PSX/boot2.rom",
|
||||
@@ -509,7 +689,10 @@
|
||||
"sha256": "5e84a94818cf5282f4217591fefd88be36b9b174b3cc7cb0bcd75199beb450f1",
|
||||
"size": 524288,
|
||||
"repo_path": "bios/Sony/PlayStation/scph7002.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"sony-playstation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "PSX/sbi.zip",
|
||||
@@ -517,7 +700,10 @@
|
||||
"sha256": "32db7bb64131623fa912ef30a85f7d70cee2abbca56c21d360d2025e12b8aca9",
|
||||
"size": 218953,
|
||||
"repo_path": "bios/Sony/PlayStation/sbi.zip",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"sony-playstation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Studio-II/boot0.rom",
|
||||
@@ -525,7 +711,10 @@
|
||||
"sha256": "1e7ae3cd972eb39681e6c6df5f1ac6f7d86c9e59788e40d6b4c948375e9ca5f7",
|
||||
"size": 2048,
|
||||
"repo_path": "bios/RCA/Studio II/boot0.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"studio-ii"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Studio-II/boot1.rom",
|
||||
@@ -533,7 +722,10 @@
|
||||
"sha256": "e90cb0c5be993689a2d4fa03e664f5943967160153520d435391aaefff06da35",
|
||||
"size": 4096,
|
||||
"repo_path": "bios/RCA/Studio II/boot1.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"studio-ii"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Studio-II/boot2.rom",
|
||||
@@ -541,7 +733,10 @@
|
||||
"sha256": "a0d6c1852fb407f86d25c802441ff15ec7fd041683c6a9ae0d23db0ca0df8c0b",
|
||||
"size": 4096,
|
||||
"repo_path": "bios/RCA/Studio II/boot2.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"studio-ii"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Studio-II/boot3.rom",
|
||||
@@ -549,7 +744,10 @@
|
||||
"sha256": "7a95530b9be7fe487e027a5ea7ffe4a7561762cc3fc8cdc535d6f36e5f23c8a0",
|
||||
"size": 2048,
|
||||
"repo_path": "bios/RCA/Studio II/boot3.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"studio-ii"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Studio-II/chip8.bin",
|
||||
@@ -557,7 +755,10 @@
|
||||
"sha256": "8764ba7e02fe00489997b45ac1f15f188f726cbcd5311e252225e62eb58d6d04",
|
||||
"size": 768,
|
||||
"repo_path": "bios/RCA/Studio II/boot4.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"studio-ii"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "Studio-II/openstudio2.bin",
|
||||
@@ -565,7 +766,10 @@
|
||||
"sha256": "36ddd9ffa17a194bd8103efb807e104a529134685502839a4f14ea4d5de648ad",
|
||||
"size": 2048,
|
||||
"repo_path": "bios/RCA/Studio II/openstudio2.bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"studio-ii"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "SuperAcan/boot0.rom",
|
||||
@@ -573,7 +777,10 @@
|
||||
"sha256": "2e4d88bec69b5e7e4803368c233ce0d20f6dd107c5af0cfcc0089d310c695d7c",
|
||||
"size": 4096,
|
||||
"repo_path": "bios/Funtech/Super A'Can/boot0.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"superacan"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "SuperAcan/boot1.rom",
|
||||
@@ -581,7 +788,10 @@
|
||||
"sha256": "219f51bcb8544fe733bf784e087544f97aa5457945260c7fa07a8639f30f3a68",
|
||||
"size": 8192,
|
||||
"repo_path": "bios/Funtech/Super A'Can/boot1.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"superacan"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "SuperAcan/boot2.rom",
|
||||
@@ -589,7 +799,10 @@
|
||||
"sha256": "9889590805a97b7bb439d853d9ae4d6b31067bacb8225ab0538f3491dedab4b8",
|
||||
"size": 8192,
|
||||
"repo_path": "bios/Funtech/Super A'Can/boot2.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"superacan"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "COCO3/boot0.rom",
|
||||
@@ -597,7 +810,10 @@
|
||||
"sha256": "ad358430568250eb8330a37f85361d9ce67e5ae6d5a28c17b31802cd3953a5d2",
|
||||
"size": 32768,
|
||||
"repo_path": "bios/Tandy/CoCo/coco3.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"tandy-coco"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "COCO3/boot1.rom",
|
||||
@@ -605,7 +821,10 @@
|
||||
"sha256": "1c40c5a74e72edaeecc2511fee1aab347eae2c3d5fc6778cb622e3df14d63157",
|
||||
"size": 8192,
|
||||
"repo_path": "bios/Tandy/CoCo/disk11.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"tandy-coco"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "COCO3/boot2.rom",
|
||||
@@ -613,7 +832,10 @@
|
||||
"sha256": "1a5a3e95522296f66a192e9a7ca0725ecc88862f9bb31f50ef37ae789404692f",
|
||||
"size": 8192,
|
||||
"repo_path": "bios/Tandy/CoCo/orch90.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"tandy-coco"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "TI-99_4A/boot0.rom",
|
||||
@@ -621,7 +843,10 @@
|
||||
"sha256": "53ad354861a62b9144e02e878845c7e1a5dd75342b715047db64b780954f7c88",
|
||||
"size": 196608,
|
||||
"repo_path": "bios/Texas Instruments/TI-99/boot0.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"ti99"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "GameCom/boot.rom",
|
||||
@@ -629,7 +854,10 @@
|
||||
"sha256": "64cbaa1a5e8bae8fae90a7affd6743df5d23edfc4e1e23002ca77c8b7ec1bb64",
|
||||
"size": 262144,
|
||||
"repo_path": "bios/Tiger/Game.com/GameCom External BIOS (Kitrinx v0.03).bin",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"tiger-game-com"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "VideoBrain/boot.rom",
|
||||
@@ -637,7 +865,10 @@
|
||||
"sha256": "545b466e7cc0c2cce7e9479857dbedee1476fc56245f0de45f816c1b99b75562",
|
||||
"size": 4096,
|
||||
"repo_path": "bios/VideoBrain/Family Computer/boot.rom",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"videobrain"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "WonderSwan/boot.rom",
|
||||
@@ -645,7 +876,10 @@
|
||||
"sha256": "bf4480dbea1c47c8b54ce7be9382bc1006148f431fbe4277e136351fa74f635e",
|
||||
"size": 4096,
|
||||
"repo_path": "bios/Bandai/WonderSwan/bootrom.ws",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"wonderswan"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "WonderSwan/boot1.rom",
|
||||
@@ -653,7 +887,10 @@
|
||||
"sha256": "f5a5c044d84ce1681f94e9ef74287cb989784497be5bd5108df17908dfa55db2",
|
||||
"size": 8192,
|
||||
"repo_path": "bios/Bandai/WonderSwan/bootrom.wsc",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"wonderswan"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "WonderSwanColor/boot.rom",
|
||||
@@ -661,7 +898,10 @@
|
||||
"sha256": "bf4480dbea1c47c8b54ce7be9382bc1006148f431fbe4277e136351fa74f635e",
|
||||
"size": 4096,
|
||||
"repo_path": "bios/Bandai/WonderSwan/bootrom.ws",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"wonderswan-color"
|
||||
]
|
||||
},
|
||||
{
|
||||
"dest": "WonderSwanColor/boot1.rom",
|
||||
@@ -669,7 +909,10 @@
|
||||
"sha256": "f5a5c044d84ce1681f94e9ef74287cb989784497be5bd5108df17908dfa55db2",
|
||||
"size": 8192,
|
||||
"repo_path": "bios/Bandai/WonderSwan/bootrom.wsc",
|
||||
"cores": null
|
||||
"cores": null,
|
||||
"systems": [
|
||||
"wonderswan-color"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
+5210
-475
File diff suppressed because it is too large.
Load diff
+6225
-724
File diff suppressed because it is too large.
Load diff
+7764
-537
File diff suppressed because it is too large.
Load diff
+14360
-2201
File diff suppressed because it is too large.
Load diff
+7148
-737
File diff suppressed because it is too large.
Load diff
+1994
-157
File diff suppressed because it is too large.
Load diff
Loaded 100 of 247 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user