79 Commits

Author SHA1 Message Date
Abdessamad Derraz
d4ce6df911 fix: remaining releases variable reference 2026-04-03 22:34:45 +02:00
Abdessamad Derraz
d0846ed78f fix: which-pack link text, paths, and table clarity 2026-04-03 22:29:16 +02:00
Abdessamad Derraz
07b4e55053 docs: rewrite which-pack as complete download guide 2026-04-03 22:27:00 +02:00
Abdessamad Derraz
690e897ca7 docs: rewrite which-pack page with real guidance 2026-04-03 22:23:06 +02:00
Abdessamad Derraz
7471c176c3 fix: generate which-pack page via generate_site.py 2026-04-03 22:20:23 +02:00
Abdessamad Derraz
e72773e46d fix: restore community tools section in readme generator 2026-04-03 15:00:38 +02:00
Abdessamad Derraz
3c0c1cec02 fix: generate banner header in readme and site scripts 2026-04-03 14:22:22 +02:00
Abdessamad Derraz
faf4236463 docs: add project logo and branding assets 2026-04-03 14:17:53 +02:00
Abdessamad Derraz
1c0c502258 docs: add community tools section
Reference BIOS Preservation Tool by monster-penguin in README,
wiki, and site nav.
2026-04-03 13:33:21 +02:00
Abdessamad Derraz
06c48e071a test: update grouping test for flat zip behavior 2026-04-03 12:06:38 +02:00
Abdessamad Derraz
8f93ee2239 feat: flatten zips, standalone copies, retropie grouping 2026-04-03 12:04:55 +02:00
Abdessamad Derraz
9ba8b02ff1 fix: verify functions handle flat zip extraction 2026-04-03 11:50:26 +02:00
Abdessamad Derraz
6fc2753f3e feat: add standalone copies for 9 emulators 2026-04-03 11:20:21 +02:00
Abdessamad Derraz
486b359c22 feat: extend do_standalone_copies with pattern, note, wsl fallback 2026-04-03 11:16:34 +02:00
Abdessamad Derraz
76a3543672 feat: verify functions handle flat and nested ZIPs 2026-04-03 11:15:32 +02:00
Abdessamad Derraz
48d185dd7d feat: flatten ZIP structure, strip base_dest prefix 2026-04-03 11:12:14 +02:00
Abdessamad Derraz
6dbc3f510b fix: retrodeck bios_path double prefix 2026-04-03 11:07:46 +02:00
Abdessamad Derraz
97e26103f5 fix: include source/req tags in grouped pack rename 2026-04-03 11:07:34 +02:00
Abdessamad Derraz
59d777a33d fix: restore wiki links for mkdocs context 2026-04-02 20:54:14 +02:00
Abdessamad Derraz
9ce4724fc4 fix: sha1-based large file restore, fix broken data dir urls
Replace grep-based restore with SHA1 matching via database.json.
The old grep heuristic failed for assets with renamed basenames
(dsi_nand_batocera42.bin) or special characters (MAME dots vs
spaces), and only restored to the first .gitignore match when
multiple paths shared a basename.

Fix 3 broken data directory sources:
- opentyrian: buildbot URL 404, use release asset
- syobonaction: invalid git_subtree URL, use GitHub archive
- stonesoup: same fix, adds 532 game data files
2026-04-02 18:46:44 +02:00
Abdessamad Derraz
7e46c23f3a feat: restore large files and data dirs in site deploy
generate_site.py resolves files on disk for gap analysis.
Without large files and data directories, the deployed site
showed 148 missing platform files and 207 unsourced core
complement files.
2026-04-02 18:25:02 +02:00
Abdessamad Derraz
6f22dd7738 docs: fix --skip-packs comment in tools wiki 2026-04-02 17:55:23 +02:00
Abdessamad Derraz
c0e42ee4eb docs: fix factual errors in wiki pages 2026-04-02 17:13:59 +02:00
Abdessamad Derraz
92b270c054 Update docs, site generator & verification
Add and reorder BIOS path entries in the site generator (BizHawk, EmuDeck, RetroPie, RomM). Update the add-platform pipeline steps and CI workflow notes. Document verification behavior changes: FirmwareDatabase index now includes sha256; RomM uses MD5 verification (verify.py checks MD5 only); BizHawk uses SHA1; severity label for GREEN adjusted to WARNING. Clarify troubleshooting/verify output semantics (UNTESTED and mismatch reporting), add profiling fields (core_classification option and adler32), fix several path and link typos (RetroDECK path, README/CONTRIBUTING links), and other small docs polishing.
2026-04-02 16:26:12 +02:00
Abdessamad Derraz
2f11542ed3 chore: regenerate manifests, site, and docs after new BIOS files 2026-04-02 15:56:24 +02:00
Abdessamad Derraz
f9a612db4a refactor: simplify readme contributor section to avatars only 2026-04-02 15:39:34 +02:00
Abdessamad Derraz
812775f6b4 Add platform contribution steps and nav
Add an "Add a new platform" section to CONTRIBUTING.md (instructions to write a scraper in scripts/scraper/, create platform YAML in platforms/, register in platforms/_registry.yml, and submit a PR) and note contributor crediting. Update README: bump verified files from 7,296 to 7,302, add RomM and RetroDECK contributor credits with PR links, and refresh the auto-generated timestamp. Add sdlpal to the mkdocs.yml navigation.
2026-04-02 15:36:27 +02:00
Abdessamad Derraz
73ccb216f5 feat: align gap analysis coherence, add 7 BIOS files, unsourceable field
cross_reference.py: add bios_mode/agnostic/load_from filters, archive
grouping, unsourceable field support. verify.py: case-insensitive
by_name lookup, storage:release in_repo, unsourceable skip, trailing
slash fix. generate_site.py: enriched all_declared, platform-relevant
profile filtering, proper in_repo resolution on emulator pages,
acknowledged gaps section.

New BIOS: delta2.rom (XRoar), tilekey.dat + sprites.sif (NXEngine),
Gram Kracker.ctg + cf7+.ctg + ti-pcard.ctg (ti99sim), desc.dat
(SDLPAL). Profiles: hle_fallback on tilekey.dat/key.txt, unsourceable
on 7 files with source-verified reasons.
2026-04-02 15:35:24 +02:00
Abdessamad Derraz
5ee81b30c6 feat: add contributor credits to pack readme 2026-04-02 11:43:06 +02:00
Abdessamad Derraz
b5eae226cd feat: enrich readme contributors with platform attribution 2026-04-02 11:42:40 +02:00
Abdessamad Derraz
fd4606885e feat: add contributor credit to site platform pages 2026-04-02 11:42:31 +02:00
Abdessamad Derraz
ded903ed7a feat: add contributed_by field to retrodeck and romm 2026-04-02 11:41:19 +02:00
Abdessamad Derraz
077392bcd9 docs: add contributor attribution to romm and retrodeck scrapers 2026-04-02 11:41:15 +02:00
Abdessamad Derraz
f4626ce3bd Add MSX2J ROM and update manifests
Add MSX2J.rom (sha1: 0081ea0d25bc5cd8d70b60ad8cfdc7307812c0fd, size: 32768) to multiple install manifests and the RetroDECK bios list. Update generated timestamps and adjust total_files/total_size counts in batocera, lakka, recalbox, retroarch, retrobat, and retrodeck manifests. Also bump README verified file count and regenerate the auto-generated timestamp to reflect the new entry.
2026-04-02 10:44:25 +02:00
Abdessamad Derraz
9e184f76fc fix: swanstation ps1_rom.bin accepts multiple sizes
SwanStation accepts PS1 (512KB), PS2 (4MB), and PS3 (0x3E66F0)
BIOS sizes but only uses the first 512KB. MD5 validates the
extracted content, not the full file. List all accepted sizes
to eliminate the false size mismatch discrepancy.

validation.py: support size as list in emulator profiles.
generate_site.py: handle list sizes in emulator page display.

All 18 original hash mismatches are now resolved: 0 discrepancies.
2026-04-02 07:39:30 +02:00
Abdessamad Derraz
fa0ed63718 fix: add psx variant mappings, fix emulator verify path
scph3000.bin v2.1J and scph3500.bin v2.2J already existed under
different primary names (scph3500.bin and scph5000.bin respectively).
Add .variants/ entries so by_name resolves both filenames.

verify_single_emulator now calls _find_best_variant on hash mismatch,
matching the platform-level verification path.
2026-04-02 01:24:24 +02:00
Abdessamad Derraz
c3fa55bd46 feat: add msx2 japanese bios variant for ares
Source: Subtixx/RetroStation MSX2J.rom
SHA256 0c672d86 matches ares desktop-ui/emulator/msx2.cpp:15.
Resolves last MSX2.ROM discrepancy across all platforms.
2026-04-02 01:12:36 +02:00
Abdessamad Derraz
0401d058a1 feat: add by_sha256 index, fix reporting attribution
generate_db: add by_sha256 index for O(1) variant lookup.
verify: _find_best_variant uses indexed sha256 instead of O(n) scan.
validation: check_file_validation returns (reason, emulators) tuple,
attributing mismatch only to emulators whose check actually failed.
beetle_psx: remove incorrect size field for ps1_rom.bin (code does
not validate size, swanstation is sole size authority).
2026-04-02 00:59:01 +02:00
Abdessamad Derraz
95b7a9813c feat: add custom site stylesheet with theme and components 2026-04-02 00:48:02 +02:00
Abdessamad Derraz
22829cfab9 feat: improve site ux with cards, badges and hash truncation 2026-04-02 00:46:21 +02:00
Abdessamad Derraz
2326306f2b fix: adler32 byteswap for dolphin dsp validation
Dolphin computes adler32 on byte-swapped (16-bit) data, not raw
file bytes. Add adler32_byteswap flag to dolphin/primehack/ishiiruka
profiles and support it in validation.py.

Reduces hash mismatch discrepancies from 18 to 2.
2026-04-01 22:51:39 +02:00
Abdessamad Derraz
28ecf19f2b fix: variant resolution suppresses false discrepancies
_find_best_variant now searches by hash (md5, sha1, crc32, sha256)
across the entire database instead of only by filename. Finds
variants stored under different names (e.g. eu_mcd2_9306.bin for
bios_CD_E.bin, scph1001_v20.bin for scph1001.bin).

verify_entry_existence now also calls _find_best_variant to
suppress discrepancies when a matching variant exists in the repo.

Reduces false discrepancies from 22 to 11 (4 unique files where
the variant genuinely does not exist in the repo).
2026-04-01 22:45:43 +02:00
Abdessamad Derraz
91925120c9 feat: unify gap analysis with verify results and source provenance
Single source of truth for gap page: verification status from
verify.py (verified/untested/missing/mismatch), file provenance
from cross_reference (bios/data/large_file/missing).

cross_reference.py: _find_in_repo -> _resolve_source returning
source category, stop skipping storage: release/large_file,
add by_path_suffix lookup, all_declared param for global check.

generate_site.py: gap page now shows verification by platform,
18 hash mismatches, and core complement with provenance breakdown.
2026-04-01 22:33:37 +02:00
Abdessamad Derraz
cbb86c7746 docs: add missing CLI flags to wiki tools page 2026-04-01 18:51:44 +02:00
Abdessamad Derraz
9bbd39369d fix: alias-only files missing from full packs
find_undeclared_files was enriching declared_names with DB aliases,
filtering core extras that were never packed by Phase 1 under that
name. Pass strict YAML names to _collect_emulator_extras so alias-
only files (dc_bios.bin, amiga-os-310-a1200.rom, scph102.bin, etc.)
get packed at the emulator's expected path. Also fix truth mode
output message and --all-variants --verify-packs quick-exit bypass.
2026-04-01 18:39:36 +02:00
Abdessamad Derraz
a1333137a0 fix: truth mode skipping phases 2-3 due to indent 2026-04-01 15:12:45 +02:00
Abdessamad Derraz
1efe95228f feat: propagate source flags to pipeline 2026-04-01 14:52:39 +02:00
Abdessamad Derraz
074e3371f2 feat: source mode text in pack readme 2026-04-01 14:52:25 +02:00
Abdessamad Derraz
85cc23398a feat: source-aware pack verification 2026-04-01 14:52:02 +02:00
Abdessamad Derraz
47a68c1a11 feat: add --source and --all-variants flags 2026-04-01 14:50:33 +02:00
Abdessamad Derraz
5f579d1851 feat: add source param to manifest and split packs 2026-04-01 14:44:39 +02:00
Abdessamad Derraz
2c1c2a7bfe feat: add combined source+required variant tests 2026-04-01 14:42:52 +02:00
Abdessamad Derraz
423a1b201e feat: add source param to generate_pack 2026-04-01 14:39:04 +02:00
Abdessamad Derraz
9c6b3dfe96 feat: add include_all to _collect_emulator_extras 2026-04-01 14:33:54 +02:00
Abdessamad Derraz
b070fa41de feat: add include_all param to find_undeclared_files 2026-04-01 14:29:31 +02:00
Abdessamad Derraz
0a272dc4e9 chore: lint and format entire codebase
Run ruff check --fix: remove unused imports (F401), fix f-strings
without placeholders (F541), remove unused variables (F841), fix
duplicate dict key (F601).

Run isort --profile black: normalize import ordering across all files.

Run ruff format: apply consistent formatting (black-compatible) to
all 58 Python files.

3 intentional E402 remain (imports after require_yaml() must execute
after yaml is available).
2026-04-01 13:17:55 +02:00
Abdessamad Derraz
a2d30557e4 chore: remove unused imports from generate_site.py 2026-04-01 13:13:06 +02:00
Abdessamad Derraz
0e6db8abdf docs: sync wiki sources with pipeline changes
Update wiki source files (the single source of truth for the site):
- tools.md: renumber pipeline steps 1-8, add step 6 (pack integrity),
  add missing CLI flags for cross_reference.py and refresh_data_dirs.py
- architecture.md: update mermaid diagram with pack integrity step,
  fix test file count (5 files, 249 tests)
- testing-guide.md: add test_pack_integrity section, add step 5 to
  verification discipline checklist
2026-04-01 13:08:19 +02:00
Abdessamad Derraz
6eca4c416a chore: remove dead wiki generator functions, update docs
Remove 4 unused functions from generate_site.py (generate_wiki_index,
generate_wiki_architecture, generate_wiki_tools, generate_wiki_profiling)
that contained stale data. Wiki pages are sourced from wiki/ directory.

Update generate_site.py contributing section with correct test counts
(249 total, 186 E2E, 8 pack integrity) and pack integrity documentation.
2026-04-01 13:05:34 +02:00
Abdessamad Derraz
e5859eb761 refactor: dry pack integrity into cli and update docs
Move verification logic to generate_pack.py --verify-packs (single
source of truth). test_pack_integrity.py is now a thin wrapper that
calls the CLI. Pipeline step 6/8 uses the same CLI entry point.

Renumber all pipeline steps 1-8 (was skipping from 5 to 8/9).

Update generate_site.py with pack integrity test documentation.
2026-04-01 12:31:10 +02:00
Abdessamad Derraz
754e829b35 feat: add pack integrity test and integrate into pipeline
Extract each platform ZIP to tmp/ (real filesystem, not /tmp tmpfs)
and verify every declared file exists at the correct path with the
correct hash per the platform's native verification mode.

Handles ZIP inner content verification (checkInsideZip, md5_composite,
inner ROM MD5) and path collision deduplication.

Integrated as pipeline step 6/8. Renumber all pipeline steps to be
sequential (was skipping from 5 to 8).
2026-04-01 12:22:50 +02:00
Abdessamad Derraz
7beb651049 fix: correct core extras placement for retrodeck and romm packs
RetroDECK: core extras with subdirectory paths (e.g. vice/C64/,
fbneo/, dc/) were placed outside bios/ because the prefix was only
inferred for bare filenames. Add _detect_extras_prefix() to infer
the dominant BIOS prefix from YAML destinations.

RomM: core extras landed flat at bios/{file} instead of the required
bios/{platform_slug}/{file}. Add _detect_slug_structure() to detect
per-system slug layouts and _map_emulator_to_slug() to route each
extra to the correct slug subfolder.

Also skip manifest writes when only the generated timestamp changed,
preventing unnecessary diffs in install/*.json.
2026-04-01 11:08:01 +02:00
Abdessamad Derraz
5eeaf87a3a fix: resolve all untested and missing bios across platforms
Batocera: fix sc3000.rom md5 (no dump matches upstream hash),
remove erroneous bk0010.zip mame entries (upstream confirmed
mame needs no bios for bk), add PSP2UPDAT.PUP correct version.
Recalbox: add MSX2R2.ROM from blueMSX v2.82.
RetroDECK: fix stale peribox_ev/gen.zip md5 hashes.

Regenerate database, manifests, readme.
2026-04-01 01:42:39 +02:00
Abdessamad Derraz
ab3255b0c7 chore: regenerate readme, manifests after md5 resolution fix 2026-03-31 14:37:52 +02:00
Abdessamad Derraz
2d17e0e9d9 fix: trust full MD5 for cross-name variant resolution 2026-03-31 14:17:24 +02:00
Abdessamad Derraz
03002515fe fix: readme and site coverage use data_dir and supplemental indexes 2026-03-31 13:58:52 +02:00
Abdessamad Derraz
eb354128e2 fix: consistency check allows pack to resolve more than verify 2026-03-31 13:46:12 +02:00
Abdessamad Derraz
6b5c3d8bf2 fix: pack conformance matches builder logic for perfect stats 2026-03-31 12:25:07 +02:00
Abdessamad Derraz
d685ad111d feat: add 63 missing BIOS files from multiple sources
MAME/MESS ROM sets (23 ZIPs from archive.org MESS 0.151 + MAME 0.285 split),
Dolphin BT firmware (15 files from linux-firmware), Commodore VIC-20/Plus4
regional ROMs (8 from zimmers.net), IBM AT 5170 BIOS + BASIC (3 from
minuszerodegrees.net + PCem), Apple DiskII boot/state-machine ROMs (4 from
Asimov mirror), Commodore 1540/1541 drive ROMs (2 reconstructed from MAME
chips), Oric Microdisc ROM, SMS Japanese BIOS, Videoton TVC64 + BK-0010
enriched ZIPs. All platforms at 0 required missing except Batocera bk0010.zip
(2/11 ROM chips unavailable).
2026-03-31 11:00:31 +02:00
Abdessamad Derraz
b56f8dd05f feat: add archive_prefix for core-specific BIOS subdirectories
Closes #43

FBNeo and Kronos expect BIOS archives in core-specific subdirectories
(system/fbneo/, system/kronos/). RetroArch firmware check uses .info
paths which include these prefixes, so files at root show as Missing.

Add archive_prefix field to emulator profiles. The pack code now places
archive copies in the prefixed subdirectory while keeping root copies
for cores that expect them there (e.g. Geolith for neogeo.zip).
2026-03-31 09:17:54 +02:00
Abdessamad Derraz
40ff2b5307 Merge branch 'main' of https://github.com/Abdess/retrobios 2026-03-30 23:58:20 +02:00
Abdessamad Derraz
d0dd05ddf6 docs: add wiki pages for all audiences, fix .old.yml leak
9 new wiki pages: getting-started, faq, troubleshooting,
advanced-usage, verification-modes, adding-a-platform,
adding-a-scraper, testing-guide, release-process.

Updated architecture.md with mermaid diagrams, tools.md with
full pipeline and target/exporter sections, profiling.md with
missing fields, index.md with glossary and nav links.

Expanded CONTRIBUTING.md from stub to full contributor guide.

Filter .old.yml from load_emulator_profiles, generate_db alias
collection, and generate_readme counts. Fix BizHawk sha1 mode
in tools.md, fix RetroPie path, fix export_truth.py typos.
2026-03-30 23:58:12 +02:00
Abdessamad Derraz
d4b0af0a38 docs: add wiki pages for all audiences, fix .old.yml leak
9 new wiki pages: getting-started, faq, troubleshooting,
advanced-usage, verification-modes, adding-a-platform,
adding-a-scraper, testing-guide, release-process.

Updated architecture.md with mermaid diagrams, tools.md with
full pipeline and target/exporter sections, profiling.md with
missing fields, index.md with glossary and nav links.

Expanded CONTRIBUTING.md from stub to full contributor guide.

Filter .old.yml from load_emulator_profiles, generate_db alias
collection, and generate_readme counts. Fix BizHawk sha1 mode
in tools.md, fix RetroPie path, fix export_truth.py typos.
2026-03-30 23:42:00 +02:00
Abdessamad Derraz
038c3d3b40 feat: enrich MAME/FBNeo profiles with upstream BIOS contents
auto-fetched from mamedev/mame 0.287 and finalburnneo/FBNeo v1.0.0.2.
mame: +20 new BIOS root sets, 96 entries enriched with contents.
mamearcade: 47 entries enriched with contents.
mamemess: 20 entries enriched with contents.
fbneo: +13 new ROM entries from upstream BIOS sets.
2026-03-30 21:39:02 +02:00
Abdessamad Derraz
427fef5669 fix: text-based YAML patching preserves formatting
replace yaml.dump with surgical text edits for contents/source_ref.
preserves comments, block scalars, quoting, indentation.
fix FBNeo new entry detection using parsed keys instead of text search.
2026-03-30 21:35:41 +02:00
Abdessamad Derraz
75e34898ee feat: add MAME/FBNeo hash auto-fetch scrapers
sparse clone upstream repos, parse BIOS root sets from C source,
cache as JSON, merge into emulator profiles with backup.
covers macro expansion, version detection, subset profile protection.
2026-03-30 19:11:26 +02:00
Abdessamad Derraz
94c3ac9834 feat: add hash merge for MAME and FBNeo profiles 2026-03-30 18:33:09 +02:00
Abdessamad Derraz
319a1d2041 feat: add MAME source code parser for BIOS root sets 2026-03-30 18:29:31 +02:00
Abdessamad Derraz
00d7b57884 feat: add FBNeo source parser for BIOS sets 2026-03-30 18:29:06 +02:00
190 changed files with 51843 additions and 6928 deletions

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

View File

@@ -58,16 +58,32 @@ jobs:
run: |
mkdir -p .cache/large
gh release download large-files -D .cache/large/ 2>/dev/null || true
for f in .cache/large/*; do
[ -f "$f" ] || continue
name=$(basename "$f")
target=$(grep "$name" .gitignore | head -1)
if [ -n "$target" ] && [ ! -f "$target" ]; then
mkdir -p "$(dirname "$target")"
cp "$f" "$target"
echo "Restored: $target"
fi
done
python3 -c "
import hashlib, json, os, shutil
db = json.load(open('database.json'))
with open('.gitignore') as f:
ignored = {l.strip() for l in f if l.strip().startswith('bios/')}
cache = '.cache/large'
if not os.path.isdir(cache):
exit(0)
idx = {}
for fn in os.listdir(cache):
fp = os.path.join(cache, fn)
if os.path.isfile(fp):
h = hashlib.sha1(open(fp, 'rb').read()).hexdigest()
idx[h] = fp
restored = 0
for sha1, entry in db['files'].items():
path = entry['path']
if path in ignored and not os.path.exists(path):
src = idx.get(sha1)
if src:
os.makedirs(os.path.dirname(path), exist_ok=True)
shutil.copy2(src, path)
print(f'Restored: {path}')
restored += 1
print(f'Total: {restored} files restored')
"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -36,6 +36,43 @@ jobs:
- run: pip install pyyaml mkdocs-material pymdown-extensions
- name: Restore large files from release
run: |
mkdir -p .cache/large
gh release download large-files -D .cache/large/ 2>/dev/null || true
python3 -c "
import hashlib, json, os, shutil
db = json.load(open('database.json'))
with open('.gitignore') as f:
ignored = {l.strip() for l in f if l.strip().startswith('bios/')}
cache = '.cache/large'
if not os.path.isdir(cache):
exit(0)
idx = {}
for fn in os.listdir(cache):
fp = os.path.join(cache, fn)
if os.path.isfile(fp):
h = hashlib.sha1(open(fp, 'rb').read()).hexdigest()
idx[h] = fp
restored = 0
for sha1, entry in db['files'].items():
path = entry['path']
if path in ignored and not os.path.exists(path):
src = idx.get(sha1)
if src:
os.makedirs(os.path.dirname(path), exist_ok=True)
shutil.copy2(src, path)
print(f'Restored: {path}')
restored += 1
print(f'Total: {restored} files restored')
"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Refresh data directories
run: python scripts/refresh_data_dirs.py
continue-on-error: true
- name: Generate site
run: |
python scripts/generate_site.py

3
.gitignore vendored
View File

@@ -29,13 +29,14 @@ data/
# Large files stored as GitHub Release assets (additional)
bios/Arcade/MAME/artwork/snspell.zip
bios/Arcade/MAME/MAME 0.174 Arcade XML.dat
bios/Sony/PlayStation Vita/.variants/PSP2UPDAT.PUP
bios/Sony/PlayStation Vita/.variants/PSP2UPDAT.PUP.3ae832c9
bios/Nintendo/DS/DSi_Nand_JPN.bin
bios/Nintendo/DS/DSi_Nand_EUR.bin
bios/Nintendo/DS/DSi_Nand_USA.bin
bios/Nintendo/DS/DSi_Nand_AUS.bin
bios/Nintendo/DS/DSi_Nand_CHN.bin
bios/Nintendo/DS/DSi_Nand_KOR.bin
bios/Nintendo/DS/dsi_nand.bin
# QEMU EDK2 firmware (64MB each)
bios/QEMU/edk2-aarch64-code.fd

View File

@@ -7,6 +7,16 @@
3. Variants (alternate hashes): `bios/Manufacturer/Console/.variants/`
4. Create a Pull Request - checksums are verified automatically
## Add a new platform
1. Write a scraper in `scripts/scraper/`
2. Create the platform YAML in `platforms/`
3. Register in `platforms/_registry.yml`
4. Submit a Pull Request
Contributors who add platform support are credited in the README,
on the documentation site, and in the BIOS packs.
## File conventions
- Files >50 MB go in GitHub release assets (`large-files` release)

View File

@@ -1,8 +1,10 @@
# RetroBIOS
<p align="center">
<img src=".github/assets/banner.png" alt="RetroBIOS" width="400">
</p>
Complete BIOS and firmware packs for Batocera, BizHawk, EmuDeck, Lakka, Recalbox, RetroArch, RetroBat, RetroDECK, RetroPie, and RomM.
**7,239** verified files across **396** systems, ready to extract into your emulator's BIOS directory.
**7,302** verified files across **396** systems, ready to extract into your emulator's BIOS directory.
## Quick Install
@@ -27,7 +29,7 @@ Pick your platform, download the ZIP, extract to the BIOS path.
| Platform | BIOS files | Extract to | Download |
|----------|-----------|-----------|----------|
| Batocera | 362 | `/userdata/bios/` | [Download](../../releases/latest) |
| Batocera | 361 | `/userdata/bios/` | [Download](../../releases/latest) |
| BizHawk | 118 | `Firmware/` | [Download](../../releases/latest) |
| EmuDeck | 161 | `Emulation/bios/` | [Download](../../releases/latest) |
| Lakka | 448 | `system/` | [Download](../../releases/latest) |
@@ -46,8 +48,8 @@ Each file is checked against the emulator's source code to match what the code a
- **10 platforms** supported with platform-specific verification
- **329 emulators** profiled from source (RetroArch cores + standalone)
- **396 systems** covered (NES, SNES, PlayStation, Saturn, Dreamcast, ...)
- **7,239 files** verified with MD5, SHA1, CRC32 checksums
- **8144 MB** total collection size
- **7,302 files** verified with MD5, SHA1, CRC32 checksums
- **8765 MB** total collection size
## Supported systems
@@ -59,16 +61,16 @@ Full list with per-file details: **[https://abdess.github.io/retrobios/](https:/
| Platform | Coverage | Verified | Untested | Missing |
|----------|----------|----------|----------|---------|
| Batocera | 356/362 (98.3%) | 349 | 7 | 6 |
| Batocera | 361/361 (100.0%) | 361 | 0 | 0 |
| BizHawk | 118/118 (100.0%) | 118 | 0 | 0 |
| EmuDeck | 161/161 (100.0%) | 161 | 0 | 0 |
| Lakka | 442/448 (98.7%) | 442 | 0 | 6 |
| Recalbox | 277/346 (80.1%) | 274 | 3 | 69 |
| RetroArch | 442/448 (98.7%) | 442 | 0 | 6 |
| RetroBat | 337/339 (99.4%) | 333 | 4 | 2 |
| RetroDECK | 1960/2006 (97.7%) | 1934 | 26 | 46 |
| RetroPie | 442/448 (98.7%) | 442 | 0 | 6 |
| RomM | 372/374 (99.5%) | 372 | 0 | 2 |
| Lakka | 448/448 (100.0%) | 448 | 0 | 0 |
| Recalbox | 346/346 (100.0%) | 346 | 0 | 0 |
| RetroArch | 448/448 (100.0%) | 448 | 0 | 0 |
| RetroBat | 339/339 (100.0%) | 339 | 0 | 0 |
| RetroDECK | 2006/2006 (100.0%) | 2006 | 0 | 0 |
| RetroPie | 448/448 (100.0%) | 448 | 0 | 0 |
| RomM | 374/374 (100.0%) | 374 | 0 | 0 |
## Build your own pack
@@ -122,6 +124,10 @@ To keep packs accurate, each file is checked against the emulator's source code.
<a href="https://github.com/monster-penguin"><img src="https://avatars.githubusercontent.com/u/266009589?v=4" width="50" title="monster-penguin"></a>
## Community tools
- [BIOS Preservation Tool](https://github.com/monster-penguin/BIOS-Preservation-Tool) by [monster-penguin](https://github.com/monster-penguin) - scan, verify, and stage your own BIOS collection using RetroBIOS hash metadata
## Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
@@ -130,4 +136,4 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
This repository provides BIOS files for personal backup and archival purposes.
*Auto-generated on 2026-03-30T12:09:51Z*
*Auto-generated on 2026-04-03T12:59:52Z*

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,65 @@
ИИ<EFBFBD>Ш
<EFBFBD>Щ<EFBFBD>Щ<EFBFBD>Ы<EFBFBD>Ы<EFBFBD>ШШ
<EFBFBD>Щ<EFBFBD>Щ<EFBFBD>Ы<EFBFBD>ЫИ=ИИ
<EFBFBD>й<EFBFBD>й<EFBFBD>л<EFBFBD>л<EFBFBD>н<EFBFBD>и
<EFBFBD>й<EFBFBD>й<EFBFBD>л<EFBFBD>лИИИИ
ЈшЈшЈшЈшЈшЈш
ЈшЈшЈшЈшЙ§Иј
ИјИјИјИјЙ§Pј
ИјИјИјИјИИHИ
H(H(H(H(H(H(
H(H(H(H(ИЙИИ
X8X8X8X8 ЩX8
X8X8X8X8ИИИИ
hhhhhh
hhhh<18>Нxp
xxxx
-xp

View File

@@ -0,0 +1,65 @@
Ш
99;;8(
99;;-Ш8H
(H(H(H(H-H8H
(H(H(H(HШШШШ
XxXxXxXxXxXx
XxXxXxXxШШШШ
hh€hh€h€h€
hh€hh€ШНШШ
<EFBFBD><EFBFBD><EFBFBD>»<EFBFBD>»<EFBFBD>Ѕ<EFBFBD>ё
<EFBFBD><EFBFBD><EFBFBD>»<EFBFBD>»ШЩШШ
ЁИЁИЁИЁИ)YЁИ
ЁИЁИЁИЁИЩэШш
ШшШшШшШшЩэ ш
ШшШшШшШшШЭиа
и€ии€иа
и€ии€и

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
bios/Arcade/MAME/bk0010.zip Normal file

Binary file not shown.

Binary file not shown.

BIN
bios/Arcade/MAME/cp500.zip Normal file

Binary file not shown.

BIN
bios/Arcade/MAME/eg3003.zip Normal file

Binary file not shown.

BIN
bios/Arcade/MAME/fmnew7.zip Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
bios/Arcade/MAME/pc6601.zip Normal file

Binary file not shown.

Binary file not shown.

BIN
bios/Arcade/MAME/pc8001.zip Normal file

Binary file not shown.

Binary file not shown.

BIN
bios/Arcade/MAME/sys80.zip Normal file

Binary file not shown.

BIN
bios/Arcade/MAME/ti99_4.zip Normal file

Binary file not shown.

Binary file not shown.

BIN
bios/Arcade/MAME/tvc64.zip Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
bios/NEC/PC-8001/pc8001.zip Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
bios/Videoton/TVC/tvc64.zip Normal file

Binary file not shown.

301
bios/sdlpal/desc.dat Normal file
View File

@@ -0,0 +1,301 @@
本說明檔由 Eric-Chen 整理
http://hi.baidu.com/eric_chensoft
適用於 SDLPAL (http://sdlpal.codeplex.com)
3d(觀音符)=以觀音聖水書寫的靈符。*HP+150
3e(聖靈符)=具有女媧神強大靈力的符咒。*全體HP+300
3f(金剛符)=使用後如有金鐘鐵罩護身。*增加防禦七回合。
40(淨衣符)=具有祛病、驅邪的法力,*可解赤毒、屍毒、瘴毒。
41(靈心符)=具有寧神、驅邪的靈效,*可解瘋魔、妖縛、昏睡、封咒。
42(天師符)=茅山道士用來對付妖怪的符咒。
43(風靈符)=產生風系法術的符咒。
44(雷靈符)=產生雷系法術的符咒。
45(水靈符)=產生冰系法術的符咒。
46(火靈符)=產生火系法術的符咒。
47(土靈符)=產生土系法術的符咒。
48(舍利子)=得道高僧佛身火化後,*結成如珠狀的東西。*最大真氣值+3
49(玉菩提)=墨玉菩提樹的種籽。*最大真氣值+5
4a(銀杏子)=銀杏樹所結的白色核果。*最大體力值+3
4b(糯米)=糯稻的米,富於黏性,*可解屍毒。
4c(糯米糕)=糯米加麥芽、甜豆所煮的米糕,*可解屍毒。HP+25
4d(鹽巴)=取海水煎熬或曝曬而成,用來調*味,有時可解毒。
4e(茶葉蛋)=雞蛋水煮後,以茶葉入味。*便宜而好吃的食物。*HPMP+15
4f(雞蛋)=便宜而常見的食物。*HPMP+10
50(糖葫蘆)=以竹簽串李子,裹上麥芽糖,*形如葫蘆,故稱「糖葫蘆」。*HPMP+22
51(蠟燭)=用蠟製的點火照明的東西。
52(符紙)=泛黃的空白符紙。
53(檀香)=含有檀香料的一種香,點燃用以*薰衣、薰室內,驅逐惡氣。
54(大蒜)=具有除穢、祛病、護身等功能,*可以入藥。*戰鬥中服食避毒率+30%
56(酒)=以米加酒麴釀製而成,*可解赤毒。HPMP+15
57(雄黃)=天然產的礦物,塊狀、色黃,*可解赤毒。
58(雄黃酒)=一點點的雄黃,撒在酒中,*習俗在端午節喝這種酒;*可解赤毒、瘴毒。
59(九節菖蒲)=一種水草,葉子狹長如劍,*可解赤毒、屍毒、瘴毒、毒絲。
5a(驅魔香)=以大蒜、雄黃、艾草、檀香等混合*煉製而成,點燃後發出魔物厭惡*的氣味,使魔物不敢接近。
5b(十里香)=以生血、內藏、肉桂等煉製,*點燃後散發出吸引魔物的香味。
5c(水果)=養顏美容、幫助消化。*HPMP+20
5d(燒肉)=以炭火熏烤的醬汁豬肉。*HPMP+30
5e(醃肉)=用鹽巴醃漬的豬肉。*HP+85
5f(還魂香)=點燃後會散發奇異的香氣,*能牽引離體魂魄回歸軀體。*HP恢復10%
60(贖魂燈)=以蓮燈作法與鬼差交涉,*贖回死者魂魄。*HP恢復30%
61(孟婆湯)=消除死者罪孽業障,*使死者復活。*HP恢復50%
62(天香續命露)=以大量珍貴秘藥精煉而成,*具有肉白骨、藥死人之奇效。*HP恢復100%
63(止血草)=嚼碎後敷在傷口上,可迅速止血。*HP+50
64(行軍丹)=活血順氣的藥丸。*HP+100
65(金創藥)=上等刀傷藥,去腐生肌。*HP+200
66(蟠果)=西王母蟠桃園遺種,*籽小肉厚汁液香甜。*HP+450
67(紫菁玉蓉膏)=依宮廷秘方,采珍貴藥材煉製,*是療傷藥的極品。*HP+1000
68(鼠兒果)=產於山間野地,多為鼠類所食,*經人發現移種平地。*MP+36
69(還神丹)=寧神醒腦的藥丸。*MP+50
6a(龍涎草)=經蛟龍唾涎灌溉而生,*具有補中益氣之療效。*MP+110
6b(靈山仙芝)=寄生於枯木上的菌類,俗稱瑞草,*具有養氣培元之神效。*MP+260
6c(雪蓮子)=白玉雪蓮之蓮子,其形珠圓玉潤,*服食者真氣充盈,經脈通暢。*MP+400
6d(天仙玉露)=觀音菩薩淨瓶甘露水,*人間難求的仙界聖藥。*MP+700
6e(神仙茶)=神仙廣成子養生延壽之秘方。*HPMP+440
6f(靈葫仙丹)=修道隱士所煉丹藥。*HPMP+250
70(試煉果)=藥王神農氏嘗百草時,*最早發現的珍藥。*靈力最大值+3
71(女媧石)=女神媧皇煉石補天後,*所遺之五色石。*防禦最大值+3
72(八仙石)=八仙石洞中所采集之丹礦。*防禦最大值+2
73(蜂巢)=蜜蜂的窩,可以拿來丟敵人。
74(屍腐肉)=沾染屍毒的腐敗肉塊。*毒性: 屍毒
75(毒蛇卵)=煉蠱的材料。*毒性: 赤毒
76(毒蠍卵)=煉蠱的材料。*毒性: 赤毒
77(毒蟾卵)=煉蠱的材料。*毒性: 赤毒
78(蜘蛛卵)=煉蠱的材料。*毒性: 赤毒
79(蜈蚣卵)=煉蠱的材料。*毒性: 赤毒
7a(鶴頂紅)=七大毒蠱,中毒後每回合損血,*至死方休。*解藥: 血海棠 致命藥引: 孔雀膽
7b(孔雀膽)=七大毒蠱,中毒後每回合損血,*至死方休。*解藥: 金蠶蠱 致命藥引: 鶴頂紅
7c(血海棠)=七大毒蠱,中毒後每回合損血,*至死方休。*解藥: 斷腸草 致命藥引: 三屍蠱
7d(斷腸草)=七大毒蠱,中毒後每回合損血,*至死方休。*解藥: 三屍蠱 致命藥引: 金蠶蠱
7e(醍醐香)=紫葉小白花,散發濃鬱香氣,*聞到香氣,便如酒醉一般。*妖縛四回合。
7f(忘魂花)=青藍色小花,散發淡淡香氣,*聞到香氣,便會渾然忘我、*昏睡三回合。
80(紫罌粟)=服食者會產生幻覺,敵我不分。*瘋魔四回合。
81(鬼枯藤)=具毒性的黑褐色野生藤蔓,*可解赤毒、屍毒、瘴毒、毒絲。*HP-30
82(腹蛇涎)=腹蛇的毒涎。*毒性: 瘴毒
83(蜂王蜜)=蜜蜂所釀最好的蜜。*HPMP+150
84(雪蛤蟆)=生長於天山極寒之地,僅銅錢般大*小。武術最大值+2 防禦最大值+2*靈力最大值+2
85(赤蠍粉)=以整只赤尾蠍研磨成的粉末,*可使敵方全體中赤毒。
86(化屍水)=碰到傷口血水,便腐蝕潰爛,*受傷者沾染立斃。
87(迷魂香)=點燃蒙汗藥散發迷香,*可使敵人昏睡五回合。
88(九陰散)=服食前若已中毒,可補滿體力,*但無法解毒;*服食前若沒中毒,即刻斃命。
89(無影毒)=七大毒蠱,中毒後立即發作,*耗損一半體力。
8a(三屍蠱)=七大毒蠱;中毒後,潛伏片刻即*會發作,毒性非常猛烈。*解藥: 孔雀膽 致命藥引: 血海棠
8b(金蠶蠱)=七大毒蠱,中毒後每回合損血,*至死方休。*解藥: 鶴頂紅 致命藥引: 斷腸草
8c(幻蠱)=分泌的毒液會影響人的腦部,*使人敵我不分,*瘋魔五回合。
8d(隱蠱)=如帶刺甲蟲,將其身體捏破,*散發之煙霧可助我方隱匿形跡。*全體隱形三回合。
8e(冰蠶蠱)=以雪山冰洞內所產所冰蠶培養的*蠱蟲,可做為攻擊道具。
8f(火蠶蠱)=以麒麟炎洞內所產火蠶所培養的*蠱蟲,可做為攻擊道具。
90(食妖蟲)=寄生宿主吸取靈氣,九回合後,*可煉成靈蠱。
91(靈蠱)=以稀有藥物豢養的雌蠱。*全體MP+250
92(爆烈蠱)=預先將法力灌輸在蠱蟲體內,*投擲敵人產生強烈爆炸。
93(碧血蠶)=寄生宿主吸取血液,九回合後,*可煉成赤血蠶。
94(蠱)=巫師施法所需的材料。
95(赤血蠶)=吸血維生的毒蠱,*服食後體力完全恢復。
96(金蠶王)=蠱中之王,月夜散發金色磷光,*服食後可提升修行。
97(引路蜂)=跟隨引路蜂而行,*可回到迷宮起點。
98(傀儡蟲)=湘西雲貴巫師用以控制屍體,*可使死者繼續攻擊九回合。
99(梅花鏢)=形如梅花的暗器。*敵人HP-90
9a(袖裏劍)=暗藏在衣袖中的飛劍。*敵人HP-170
9b(透骨釘)=精鐵打造、三寸長的鐵針是*很鋒利的暗器。*敵人HP-250
9c(雷火珠)=填充火藥的鐵珠,投擲撞擊*後會爆裂傷人。*敵人HP-135
9d(毒龍砂)=以腹蛇毒煉製成的細砂,*可使敵方全體中瘴毒。*HP-55
9e(吸星鎖)=鐵製鋼抓,尾端系以靈蠱蠶絲,*可吸取敵人HP180
9f(纏魂絲)=千年蜘蛛的毒絲。*毒性: 毒絲
a0(捆仙繩)=施有咒術的粗麻繩,*可令妖怪動彈不得,*妖縛五回合。
a1(無影神針)=細如牛毛,傷人於無形。*敵人HP-400
a2(血玲瓏)=紅色鐵球,四周裝有鋒利刀片。*敵方全體HP-300
a3(長鞭)=生牛皮製的七尺軟鞭。*武術+20 身法+20
a4(九截鞭)=以鐵節鐵環組成的九節軟鞭。*武術+66 身法+33
a5(金蛇鞭)=以蛇皮絞以金絲編織成九尺軟鞭。*武術+99 身法+60
a6(木劍)=用木材雕刻的劍,小孩玩具。*武術+2 身法+3
a7(短刀)=一尺半長的鈍刀,可用來劈*砍木材。*武術+6 身法-5
a8(鐵劍)=一般鐵匠大量生產的劍,打造*得頗為粗劣。*武術+10 防禦+3
a9(大刀)=刀身寬而長,刃部鋒利,*背部厚重。*武術+16 防禦+1
aa(仙女劍)=一尺長的雙手劍,適合女子*使用,可發出兩次攻擊。*武術+8 防禦+5
ab(長劍)=一般鐵匠接受訂造的劍,*比鐵劍精致鋒利。*武術+25
ac(紅纓刀)=精鋼打造,背厚刃薄,*刀柄飾以紅色長穗。*武術+38
ad(越女劍)=劍身寬僅兩指,*專為女子打造。*武術+22 身法+8
ae(戒刀)=佛門中人練武所用之刀,*嚴禁傷生染血。*武術+55 防禦+5 靈力+10
af(玄鐵劍)=以珍貴的黑色鐵礦打造而成,*堅韌鋒利但極笨重。*武術+70 身法-20 靈力-15 防禦+9
b0(芙蓉刀)=百花派獨門兵器雙手彎刀,*可發出兩次攻擊。*武術+16 身法+8
b1(柳月刀)=細長鐵製雙刀,形如柳葉新月,*可發出兩次攻擊。*武術+28 身法+12 防禦+3
b2(青鋒劍)=名家精心打造的劍,輕薄鋒利。*武術+75 身法+15
b3(苗刀)=苗族戰士所慣用的佩刀。*武術+70 身法+32
b4(鳳鳴刀)=出鞘之聲有如鳳鳴,*故稱「鳳鳴刀」。武術+124*防禦+9 身法+32 靈力+16
b5(雙龍劍)=與一般劍長度相同的雙手劍,*可發出兩次攻擊。*武術+62 防禦+9 身法+9
b6(玉女劍)=鴛鴦雙劍中的雌劍,與金童劍為*一對。武術+100 靈力+15*身法+20 吉運+30
b7(金童劍)=鴛鴦雙劍中的雄劍,與玉女劍為*一對。武術+100 吉運+30*身法+20 靈力+15 防禦+3
b8(龍泉劍)=龍泉的水質非常適合造劍,*當地生產的劍叫龍泉劍。*武術+88 身法+20 吉運+22
b9(鬼牙刀)=苗刀的一種,刀尖倒鉤,*又稱「勾魂刀」。*武術+90 身法+26 吉運-9
ba(七星劍)=劍身鑲嵌七顆金黃寶石,可吸取北*斗七星之精氣。武術+120 靈力+50*身法+32 吉運+33 防禦+7
bb(玄冥寶刀)=可連續攻擊敵方全體兩次,*傳說是魔族的邪異兵器。*武術+98 身法+98 吉運+98
bc(巫月神刀)=苗族拜月教鎮教之寶。*武術+132 靈力+55 防禦+29*身法+45 吉運+36
bd(盤龍劍)=鑄劍宗師歐冶子所煉寶劍,劍身鑄*有青龍盤柱。武術+134 靈力+37*防禦+8 身法+40 吉運+32
be(太極劍)=道祖張陵之隨身配劍,天師仗以降*妖伏魔。武術+158 靈力+90*防禦+35 身法+50 吉運+33
bf(無塵劍)=上古神劍,指天天崩、劃地地裂。*武術+200 防禦+20 身法+77*吉運+33
c0(青蛇杖)=雕刻雙蛇纏繞的綠玉杖。*武術+50 靈力+62 防禦+6
c1(鬼頭杖)=苗族巫師役鬼煉蠱之法器,*頭顱中囚禁四十九條生魂。*武術+70 靈力+88 防禦+11
c2(冥蛇杖)=來自冥界之魔杖,號令群邪,*杖頭鑲嵌千年蛇王內丹。*武術+88 靈力+120 防禦+22
c3(天蛇杖)=女神媧皇煉化五色石所用法杖。*武術+100 靈力+150 防禦+33*吉運+36
c4(頭巾)=以剩餘布料縫製的頭巾。*防禦+1
c5(青絲巾)=青色的絲織髮帶。*防禦+2
c6(髮飾)=錫製的女子頭飾。*防禦+3
c7(銀釵)=純銀的髮釵。*防禦+5
c8(翠玉金釵)=鑲有綠翡翠的黃金髮釵。*防禦+9
c9(皮帽)=羊皮縫製的帽子,非常保暖。*防禦+4
ca(珍珠冠)=以珍珠縫綴的紅色錦冠。*防禦+13
cb(天師帽)=道士做法時所戴的帽子。*防禦+11 靈力+3
cc(紫金冠)=紫金冠以薄銅片鑄成,*外殼以紫飾金而成。*防禦+18
cd(天蠶絲帶)=以極珍貴的天蠶絲織成,*輕薄柔韌。*防禦+25 身法+8
ce(鳳凰羽毛)=金翅鳳凰腹部的銀色羽毛。*防禦+7 身法+24 吉運+9
cf(沖天冠)=天兵神將遺留的護頭金盔,*頂插雙雉尾羽。*防禦+28法+5 靈力+3 吉運+3
d0(布袍)=粗布縫製的交領長袖白袍。*防禦+3
d1(藤甲)=以荊藤編製的護甲。*防禦+7
d2(絲衣)=以蠶絲紡織而成,輕柔透氣。*防禦+3 身法+4
d3(鐵鎖衣)=以鐵環扣鎖製成的護甲。*防禦+13 身法-10
d4(夜行衣)=暗黑色的緊身衣靠,*便於隱匿夜色之中。*防禦+18 身法+12 吉運+12
d5(青銅甲)=青銅製的獸面紋胸護甲。*防禦+22 身法-13
d6(羅漢袍)=修行得道的和尚所穿的衣袍。*防禦+10 吉運+10 靈力+10
d7(鐵鱗甲)=以魚鱗形甲片編綴而成的鎧甲。*防禦+28 身法-4
d8(天師道袍)=天師道祖修行時所穿的法衣。*防禦+33 靈力+28
d9(精鐵戰甲)=以橢圓形的精鐵片編綴而成,*光亮照人,*又稱「光明鎧」。防禦+40 身法-7
da(金縷衣)=以金線穿玉片編製而成*又稱「金縷玉衣」。*防禦+7 身法-10
db(鬼針冑)=長滿倒刺的銅製盔甲。*防禦+55 武術+9
dc(天蠶寶衣)=以極珍貴的天蠶絲織成,*輕薄柔韌。*防禦+66
dd(青龍寶甲)=龍鱗編綴而成,世間絕頂*戰甲。*防禦+90
de(白虎之鎧)=以罕見的白虎皮製成的皮甲。*防禦+80
df(玄武戰袍)=以玄武的殼甲鍛造而成,*材質堅韌色黑而無光澤。*防禦+80
e0(朱雀戰衣)= 以南方火鳥的羽毛編織而成。*防禦+80
e1(披風)=無領對襟、無袖的披衣,*俗稱「斗篷」。*防禦+2
e2(護肩)=披於肩臂上的鎧甲,*又稱「掩膊」。*防禦+6
e3(武士披風)=將帥所穿有護肩軟甲的戰帔。*防禦+12
e4(護心鏡)=防護前胸要害的披甲,形如*銅鏡。防禦+20
e5(霓虹羽衣)=東海霓虹鳥的羽毛織成的*披肩。*防禦+18 身法+18 吉運+18
e6(菩提袈裟)=高等僧衣,又名「無垢衣」,*多為高僧與長老所穿。*防禦+31 靈力+16
e7(虎紋披風)=以整張千年白額虎虎皮製成,*毛皮呈黃色,帶黑色橫紋。*防禦+40
e8(鳳紋披風)=相傳為織女縫製的披風,*繡鳳織錦,光彩奪目。*防禦+52
e9(龍紋披風)=布面繡雙龍搶珠之彩紋,*有神龍護體之功效。*防禦+60
ea(聖靈披風)=巫后的遺物,潛藏神聖的力*量。防禦+66 靈力+30
eb(草鞋)=以藺草編織而成,十分便宜,*穿起來很輕便,適宜行走。*防禦+1
ec(木鞋)=以木材削製而成,鞋面刻有吉祥*圖案。*防禦+2
ed(布靴)=粗布縫製的長統靴。*防禦+3 身法+2
ee(繡花鞋)=以絲緞縫製,鞋面繡有龍頭鳳尾*花。*防禦+4
ef(鐵履)=鞋底夾縫鐵片,較普通布靴重。*防禦+6
f0(武僧靴)=羅漢僧練武所穿的布靴。*防禦+8 身法+6
f1(鹿皮靴)=鞋面以鹿皮毛縫製,質地輕柔,*行動可如鹿般迅捷。*防禦+11 身法+9
f2(疾風靴)=以薄如雲霧的蟬紗織成,*助穿者疾行如風。*防禦+14 身法+17
f3(蓮花靴)=飾以金蓮的長統繡花鞋。*防禦+18 身法+5
f4(虎皮靴)=取自東北虎的皮毛縫製。*防禦+21 身法+16
f5(龍鱗靴)=以龍鱗編綴而成。*防禦+25 身法+12
f6(步雲靴)=雲中子羽化登仙後,*所遺留之神靴。*防禦+28 身法+20
f7(魅影神靴)=妖魔附體,身如鬼魅。*防禦+32 身法+26
f8(香袋)=填充木屑、香粉的小布包,*常用來裝飾兼避邪的物品。*靈力+8 吉運+9 避毒率+20%
f9(護腕)=粗布縫製之腕部護套。*防禦+2
fa(鐵護腕)=精鋼打造之腕部護環。*防禦+5
fb(竹笛)=青竹削製之七孔橫笛。*吉運+18
fc(珍珠)=蚌類所生的球狀物,*是珍貴的裝飾品。*吉運+20
fd(玉鐲)=戴在手臂上的玉製環形首飾。*防禦+5 吉運+9
fe(唸珠)=佛教徒記數唸經咒或佛號次數的*計算珠。*靈力+5 防禦+5
ff(銀針)=用銀針刺肉,以痛楚喚醒神智,*可解妖縛、昏睡、瘋魔。HP-9
100(銅鏡)=青銅鑄造的照容用具。*防禦+6
101(八卦鏡)=用朱砂在鏡面畫八卦,*可借用自然界的靈氣。*靈力+8 防禦+8
102(幹坤鏡)=銅鏡背面鑄有太極乾坤圖,*可吸取天地陰陽靈氣。*靈力+14 防禦+14
103(豹牙手環)=收集花豹的利牙串成的手環。*防禦+9
104(聖靈珠)=女媧末族祖傳寶物,曆代聖魂歸依*之所。合體法術: 武神*靈力+128 防禦+15 避毒率+35%
105(金罡珠)=大羅金仙修煉千年的內丹。*防禦+90
106(五毒珠)=成精蟾怪的內丹,*佩戴後百毒不侵。
107(風靈珠)=女媧降伏風神後,禁制風神於內的*寶珠。合體法術: 風卷殘雲*避風率+50%
108(雷靈珠)=女媧降伏雷神後,禁制雷神於內的*寶珠。合體法術: 狂雷*避雷率+50%
109(水靈珠)=女媧降伏雪妖後,禁制雪妖於內的*寶珠。合體法術: 風雪冰天*避水率+50%
10a(火靈珠)=女媧降伏火神後,禁制火神於內的*寶珠。合體法術: 煉獄真火*避火率+50%
10b(土靈珠)=女媧降伏山神後,禁制山神於內的*寶珠。合體法術: 泰山壓頂*避土率+50% 可用於脫離洞窟
10c(煉蠱皿)=可將毒蛇卵、毒蠍卵、毒蟾卵、*蜘蛛卵、蜈蚣卵煉成蠱。
10d(壽葫蘆)=戰鬥中發出真氣補充持有者,*有提神振氣之奇效。*HPMP每回合+20
10e(紫金葫蘆)=收妖煉丹,需與靈葫咒配合。
10f(布包)=長安富商的行李。
110(桂花酒)=摻了水的酒。
111(紫金丹)=水月宮最珍貴的仙丹靈藥。
112(玉佛珠)=西方如來檀前的唸珠,經佛法薰陶*變化通靈。合體法術: 佛法無邊*靈力+88 防禦+18 避毒率+30%
113(金鳳凰蛋殼)=藥材。
114(火眼麒麟角)=藥材。
116(毒龍膽)=千年毒蛟的膽,以毒攻毒可解天下*所有的毒。*若沒中毒吃毒龍膽會斃命。
117(破天錘)=用來敲碎仙靈島石像的法寶。
118(包袱)=嬸嬸替逍遙收拾的行李。
119(銀杏果)=藥材。
11a(鯉魚)=藥材。
11b(鹿茸)=藥材。
11c(釣竿)=借來的,記得還!
11d(捕獸夾)=獵戶放置的捕鹿的道具。
11e(六神丹)=韓家藥鋪的祖傳婦女良藥。
11f(情書)=士兵委托的情書。
120(玉佩)=婢女委托的玉佩。
121(石鑰匙)=開啟隱龍窟後洞石門的鑰匙。
122(天書)=書中仙附身於書中。
123(香蕉)=誰喜歡吃香蕉?
124(鳳紋手絹)=某人交付的信物。
125(手卷)=李逍遙的父母親所留下的武功*秘笈。
126(蘆葦漂)=可載人漂浮水面的草席。
127(夢蛇)=女媧族的變身魔法,*能力大幅提升。
128(氣療術)=我方單人HP+75
129(觀音咒)=我方單人HP+150
12a(凝神歸元)=我方單人HP+220
12b(元靈歸心術)=我方單人HP+500
12c(五氣朝元)=我方全體HP+300
12d(還魂咒)=我方單人復活*HP恢復10%
12e(贖魂)=我方單人復活*HP恢復30%
12f(回夢)=敵方單人昏睡四回合。
130(奪魂)=吸取敵人魂魄,中者立斃。
131(鬼降)=敵方單人瘋魔四回合。
132(淨衣咒)=解赤毒、屍毒、瘴毒。
133(冰心訣)=解妖縛、昏睡、瘋魔、咒封。
134(靈血咒)=解赤毒、屍毒、瘴毒、毒絲、*麻痹、催眠、瘋魔、咒封。
135(金剛咒)=使用後如有金鐘鐵罩護身,*增加防禦七回合。
136(真元護體)=使用後如有鐵鎧金甲護體,*增加防禦九回合。
137(天罡戰氣)=七回合內,使用武器攻擊,*威力提升。
138(風咒)=風系初級法術,*攻擊敵方單人。
139(旋風咒)=風系中級法術,*攻擊敵方全體。
13a(風卷殘雲)=風系高級法術,*攻擊敵方全體。
13b(風神)=召喚風神,*最強的風系法術。
13c(雷咒)=雷系初級法術,*攻擊敵方單人。
13d(五雷咒)=雷系中級法術,*攻擊敵方全體。
13e(天雷破)=雷系高級法術,*攻擊敵方單人。
13f(狂雷)=雷系高級法術,*攻擊敵方全體。
140(雷神)=召喚雷神,*最強的雷系法術。
141(冰咒)=冰系初級法術,*攻擊敵方單人。
142(玄冰咒)=冰系中級法術,*攻擊敵方全體。
143(風雪冰天)=冰系高級法術,*攻擊敵方全體。
144(風雪冰天)=冰系高級法術,*攻擊敵方全體。
145(雪妖)=召喚雪妖,*最強的冰系法術。
147(炎咒)=火系初級法術,*攻擊敵方單人。
148(三昧真火)=火系中級法術,*攻擊敵方全體。
149(炎殺咒)=火系高級法術,*攻擊敵方單人。
14a(煉獄真火)=火系高級法術,*攻擊敵方全體。
14c(土咒)=土系初級法術,*攻擊敵方單人。
14d(飛岩術)=土系中級法術,*攻擊敵方全體。
14e(地裂天崩)=土系中級法術,*攻擊敵方全體。
14f(泰山壓頂)=土系高級法術,*攻擊敵方全體。
150(山神)=召喚山神,*最強的土系法術。
151(氣劍指)=蘇州林家的家傳武藝,*攻擊敵方全體。
154(一陽指)=聚勁食指,發出剛猛的氣芒,*攻擊敵方單人。
155(七訣劍氣)=以指代劍,發出裂地劍氣*攻擊敵方全體。
156(斬龍訣)=以雄渾氣勁橫掃群魔,*攻擊敵方全體。
158(銅錢鏢)=將金錢當做暗器,攻擊敵方*單人,一次使用五百文錢。
159(禦劍術)=蜀山派入門劍法,*攻擊敵方單人。
15a(萬劍訣)=劍芒如雨直落,*攻擊敵方全體。
15c(天劍)=人劍合一,身化利劍,*攻擊敵方全體。
15d(天師符法)=茅山道士用來對付妖怪*的符法,攻擊敵方單人。
15f(武神)=召喚武神,神刀斬魔。
160(三屍咒)=下蠱攻擊敵方單人,*有蠱時才能使用。
161(禦蜂術)=以笛音指揮毒蜂,*攻擊敵方全體。
162(萬蟻蝕象)=操縱食人毒蟻,*攻擊敵方單人。
16b(劍神)=召喚劍神,萬劍齊飛。
172(酒神)=召喚酒神,*用全身真氣爆發攻擊敵人。
174(萬蠱蝕天)=放蠱攻擊敵方全體,*有蠱時才能使用。
176(爆炸蠱)=預先將法力灌輸在蠱蟲體*內,投擲敵人產生強烈爆炸。
179(飛龍探雲手)=偷取敵人的物品或金錢。
180(靈葫咒)=當妖物體力低於四分之一時,*可將其收入紫金葫蘆中煉藥。
185(火神)=召喚火神,*最強的火系法術。
186(醉仙望月步)=五回合內,使用武器攻擊,*可連續出手兩次。
188(金蟬脫殼)=戰鬥中逃跑。
189(仙風雲體術)=身法暫時提升九回合。
18a(乾坤一擲)=使用金錢鏢攻擊敵方全體,*會耗損大量金錢。

File diff suppressed because it is too large Load Diff

578
docs_assets/extra.css Normal file
View File

@@ -0,0 +1,578 @@
/* RetroBIOS custom theme */
/* ── Color palette ── */
:root {
--rb-primary: #4a4e8a;
--rb-primary-light: #6366a0;
--rb-primary-dark: #363870;
--rb-accent: #e8594f;
--rb-success: #2e7d32;
--rb-warning: #f57c00;
--rb-danger: #c62828;
--rb-info: #1565c0;
--rb-muted: #78909c;
--rb-surface: #f5f6fa;
--rb-border: #e0e3eb;
--rb-text-secondary: #546e7a;
}
[data-md-color-scheme="slate"] {
--rb-surface: #1e1e2e;
--rb-border: #313244;
--rb-text-secondary: #a6adc8;
}
/* ── Material theme overrides ── */
[data-md-color-scheme="default"] {
--md-primary-fg-color: var(--rb-primary);
--md-primary-fg-color--light: var(--rb-primary-light);
--md-primary-fg-color--dark: var(--rb-primary-dark);
--md-accent-fg-color: var(--rb-accent);
}
[data-md-color-scheme="slate"] {
--md-primary-fg-color: var(--rb-primary-light);
--md-accent-fg-color: var(--rb-accent);
}
/* ── Hero section (home page) ── */
.rb-hero {
background: linear-gradient(135deg, var(--rb-primary) 0%, var(--rb-primary-dark) 100%);
color: white;
padding: 2.5rem 2rem;
border-radius: 12px;
margin-bottom: 2rem;
position: relative;
overflow: hidden;
}
.rb-hero::before {
content: "";
position: absolute;
top: 0;
right: 0;
width: 300px;
height: 100%;
background: linear-gradient(135deg, transparent 40%, rgba(255,255,255,0.04) 100%);
pointer-events: none;
}
.rb-hero h1 {
margin: 0 0 0.5rem;
font-size: 2rem;
font-weight: 700;
color: white !important;
border: none;
}
.rb-hero p {
margin: 0;
opacity: 0.9;
font-size: 1.1rem;
}
/* ── Stat cards ── */
.rb-stats {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
gap: 1rem;
margin: 1.5rem 0;
}
.rb-stat {
background: var(--rb-surface);
border: 1px solid var(--rb-border);
border-radius: 8px;
padding: 1.2rem;
text-align: center;
transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.rb-stat:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0,0,0,0.08);
}
.rb-stat .rb-stat-value {
font-size: 1.8rem;
font-weight: 700;
color: var(--rb-primary);
line-height: 1.2;
display: block;
}
[data-md-color-scheme="slate"] .rb-stat .rb-stat-value {
color: var(--rb-primary-light);
}
.rb-stat .rb-stat-label {
font-size: 0.8rem;
text-transform: uppercase;
letter-spacing: 0.05em;
color: var(--rb-text-secondary);
margin-top: 0.3rem;
display: block;
}
/* ── Progress bars (inline) ── */
.rb-progress {
display: inline-flex;
align-items: center;
gap: 0.5rem;
width: 100%;
}
.rb-progress-bar {
flex: 1;
height: 6px;
background: var(--rb-border);
border-radius: 3px;
overflow: hidden;
min-width: 60px;
}
.rb-progress-fill {
height: 100%;
border-radius: 3px;
transition: width 0.3s ease;
}
.rb-progress-fill[data-level="high"] { background: var(--rb-success); }
.rb-progress-fill[data-level="mid"] { background: var(--rb-warning); }
.rb-progress-fill[data-level="low"] { background: var(--rb-danger); }
.rb-progress-text {
font-size: 0.8rem;
font-weight: 600;
white-space: nowrap;
min-width: 3.5em;
text-align: right;
}
/* ── Status badges ── */
.rb-badge {
display: inline-block;
padding: 0.15em 0.6em;
border-radius: 10px;
font-size: 0.75rem;
font-weight: 600;
letter-spacing: 0.02em;
line-height: 1.5;
white-space: nowrap;
}
.rb-badge-success { background: #e8f5e9; color: #1b5e20; }
.rb-badge-warning { background: #fff3e0; color: #e65100; }
.rb-badge-danger { background: #ffebee; color: #b71c1c; }
.rb-badge-info { background: #e3f2fd; color: #0d47a1; }
.rb-badge-muted { background: #eceff1; color: #455a64; }
[data-md-color-scheme="slate"] .rb-badge-success { background: #1b5e20; color: #a5d6a7; }
[data-md-color-scheme="slate"] .rb-badge-warning { background: #e65100; color: #ffcc80; }
[data-md-color-scheme="slate"] .rb-badge-danger { background: #b71c1c; color: #ef9a9a; }
[data-md-color-scheme="slate"] .rb-badge-info { background: #0d47a1; color: #90caf9; }
[data-md-color-scheme="slate"] .rb-badge-muted { background: #37474f; color: #b0bec5; }
/* ── Tables ── */
.md-typeset table:not([class]) {
border-collapse: separate;
border-spacing: 0;
font-size: 0.85rem;
border: 1px solid var(--rb-border);
border-radius: 8px;
overflow: hidden;
}
.md-typeset table:not([class]) th {
background: var(--rb-surface);
font-weight: 600;
text-transform: uppercase;
font-size: 0.75rem;
letter-spacing: 0.04em;
color: var(--rb-text-secondary);
padding: 0.75rem 1rem;
position: sticky;
top: 0;
z-index: 1;
}
.md-typeset table:not([class]) td {
padding: 0.6rem 1rem;
border-top: 1px solid var(--rb-border);
}
.md-typeset table:not([class]) tbody tr:hover {
background: rgba(74, 78, 138, 0.04);
}
[data-md-color-scheme="slate"] .md-typeset table:not([class]) tbody tr:hover {
background: rgba(99, 102, 160, 0.08);
}
/* Zebra striping */
.md-typeset table:not([class]) tbody tr:nth-child(even) {
background: rgba(0, 0, 0, 0.015);
}
[data-md-color-scheme="slate"] .md-typeset table:not([class]) tbody tr:nth-child(even) {
background: rgba(255, 255, 255, 0.02);
}
/* ── Platform cards (home page) ── */
.rb-platform-row td:first-child img {
vertical-align: middle;
border-radius: 4px;
}
/* ── Quick start grid ── */
.rb-quickstart {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 0.75rem;
margin: 1rem 0;
}
.rb-quickstart-item {
background: var(--rb-surface);
border: 1px solid var(--rb-border);
border-radius: 8px;
padding: 0.8rem 1rem;
display: flex;
align-items: center;
gap: 0.6rem;
}
.rb-quickstart-item code {
background: transparent;
font-weight: 600;
color: var(--rb-primary);
}
/* ── Section separators ── */
.rb-section {
margin-top: 2rem;
padding-top: 1.5rem;
border-top: 1px solid var(--rb-border);
}
/* ── Methodology steps ── */
.rb-methodology ol {
counter-reset: method-step;
list-style: none;
padding-left: 0;
}
.rb-methodology ol li {
counter-increment: method-step;
padding: 0.6rem 0 0.6rem 2.5rem;
position: relative;
}
.rb-methodology ol li::before {
content: counter(method-step);
position: absolute;
left: 0;
top: 0.5rem;
width: 1.8rem;
height: 1.8rem;
background: var(--rb-primary);
color: white;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-weight: 700;
font-size: 0.8rem;
}
/* ── Classification badges (emulators) ── */
.rb-cls-official_port { border-left: 3px solid var(--rb-success); }
.rb-cls-community_fork { border-left: 3px solid var(--rb-info); }
.rb-cls-pure_libretro { border-left: 3px solid var(--rb-primary); }
.rb-cls-game_engine { border-left: 3px solid #7b1fa2; }
.rb-cls-enhanced_fork { border-left: 3px solid #00838f; }
.rb-cls-frozen_snapshot { border-left: 3px solid var(--rb-muted); }
.rb-cls-embedded_hle { border-left: 3px solid #4e342e; }
.rb-cls-launcher { border-left: 3px solid #37474f; }
/* ── Gap analysis priority markers ── */
.rb-gap-required {
color: var(--rb-danger);
font-weight: 600;
}
.rb-gap-optional {
color: var(--rb-muted);
}
/* ── Scrollable table container improvements ── */
.md-typeset__scrollwrap {
margin: 1rem 0;
}
/* ── Footer timestamp ── */
.rb-timestamp {
font-size: 0.8rem;
color: var(--rb-text-secondary);
margin-top: 2rem;
padding-top: 1rem;
border-top: 1px solid var(--rb-border);
}
/* ── Info card (platform/emulator metadata) ── */
.rb-info-card {
background: var(--rb-surface);
border: 1px solid var(--rb-border);
border-radius: 8px;
padding: 1rem 1.2rem;
margin: 1rem 0;
display: grid;
grid-template-columns: auto 1fr;
gap: 0.3rem 1.2rem;
font-size: 0.9rem;
}
.rb-info-card dt {
font-weight: 600;
color: var(--rb-text-secondary);
white-space: nowrap;
}
.rb-info-card dd {
margin: 0;
}
/* ── File entry cards (emulator detail) ── */
.rb-file-entry {
background: var(--rb-surface);
border: 1px solid var(--rb-border);
border-radius: 8px;
padding: 1rem 1.2rem;
margin: 0.75rem 0;
}
.rb-file-entry-required {
border-left: 3px solid var(--rb-danger);
}
.rb-file-entry-optional {
border-left: 3px solid var(--rb-muted);
}
.rb-file-header {
display: flex;
align-items: center;
gap: 0.5rem;
flex-wrap: wrap;
margin-bottom: 0.5rem;
}
.rb-file-header code {
font-size: 0.95rem;
font-weight: 700;
}
.rb-file-entry ul {
margin: 0.3rem 0 0;
padding-left: 1.2rem;
}
.rb-file-entry li {
font-size: 0.85rem;
margin: 0.15rem 0;
}
/* ── Hash display (truncated with tooltip) ── */
.rb-hash {
font-family: monospace;
font-size: 0.78rem;
color: var(--rb-text-secondary);
cursor: help;
letter-spacing: -0.02em;
}
/* System page file cards */
.rb-sys-file {
background: var(--rb-surface);
border: 1px solid var(--rb-border);
border-radius: 8px;
padding: 0.8rem 1rem;
margin: 0.6rem 0;
}
.rb-sys-file > p:first-child {
margin-top: 0;
}
.rb-sys-file ul {
margin: 0.3rem 0 0;
padding-left: 1rem;
font-size: 0.85rem;
}
.rb-sys-file li {
margin: 0.1rem 0;
}
/* Emulator metadata card */
.rb-meta-card {
background: var(--rb-surface);
border: 1px solid var(--rb-border);
border-radius: 8px;
padding: 0.8rem 0;
margin: 1rem 0;
overflow: hidden;
}
.rb-meta-card table {
border: none !important;
margin: 0 !important;
border-radius: 0 !important;
}
.rb-meta-card th {
display: none;
}
.rb-meta-card td:first-child {
font-weight: 600;
color: var(--rb-text-secondary);
white-space: nowrap;
width: 140px;
font-size: 0.8rem;
text-transform: uppercase;
letter-spacing: 0.03em;
}
.rb-meta-card td {
border-top: 1px solid var(--rb-border) !important;
}
.rb-meta-card tr:first-child td {
border-top: none !important;
}
/* ── Platform detail: coverage bar ── */
.rb-coverage-bar {
background: var(--rb-border);
border-radius: 4px;
height: 8px;
overflow: hidden;
margin: 0.5rem 0;
max-width: 300px;
}
.rb-coverage-fill {
height: 100%;
border-radius: 4px;
background: var(--rb-success);
}
/* ── Emulator index: section accent ── */
.md-typeset h2 .rb-cls-dot {
display: inline-block;
width: 10px;
height: 10px;
border-radius: 50%;
margin-right: 0.4rem;
vertical-align: middle;
}
.rb-dot-official_port { background: var(--rb-success); }
.rb-dot-community_fork { background: var(--rb-info); }
.rb-dot-pure_libretro { background: var(--rb-primary); }
.rb-dot-game_engine { background: #7b1fa2; }
.rb-dot-enhanced_fork { background: #00838f; }
.rb-dot-frozen_snapshot { background: var(--rb-muted); }
.rb-dot-embedded_hle { background: #4e342e; }
.rb-dot-launcher { background: #37474f; }
.rb-dot-other { background: #9e9e9e; }
/* ── Cross-ref: classification in table ── */
.rb-cls-label {
font-size: 0.8rem;
padding: 0.1em 0.5em;
border-radius: 4px;
background: var(--rb-surface);
border: 1px solid var(--rb-border);
white-space: nowrap;
}
/* ── Buttons ── */
.md-typeset .md-button {
border-radius: 6px;
font-weight: 600;
text-transform: none;
letter-spacing: 0;
}
/* Pack button in tables: smaller */
.md-typeset table .md-button {
font-size: 0.75rem;
padding: 0.3em 0.8em;
}
/* ── Hide permalink anchors in hero ── */
.rb-hero .headerlink {
display: none;
}
/* ── Compact stat variant ── */
.rb-stats-compact {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
margin: 1rem 0;
}
.rb-stats-compact .rb-stat {
padding: 0.6rem 1rem;
flex: 1;
min-width: 100px;
}
.rb-stats-compact .rb-stat-value {
font-size: 1.3rem;
}
.rb-stats-compact .rb-stat-label {
font-size: 0.7rem;
}
/* ── Responsive ── */
@media (max-width: 768px) {
.rb-hero {
padding: 1.5rem;
}
.rb-hero h1 {
font-size: 1.5rem;
}
.rb-stats {
grid-template-columns: repeat(2, 1fr);
gap: 0.5rem;
}
.rb-stat {
padding: 0.8rem;
}
.rb-stat .rb-stat-value {
font-size: 1.4rem;
}
.rb-stat .rb-stat-label {
font-size: 0.7rem;
}
.rb-file-entry {
padding: 0.7rem 0.8rem;
}
.rb-sys-file {
padding: 0.6rem 0.8rem;
}
}
@media (max-width: 480px) {
.rb-stats {
grid-template-columns: repeat(2, 1fr);
}
.rb-hero h1 {
font-size: 1.3rem;
}
}

View File

@@ -92,10 +92,9 @@ files:
note: "override_bios=1. Falls back to region BIOS if not found."
- name: "ps1_rom.bin"
description: "PS3 embedded PS1 BIOS (region-free override)"
description: "PS3 embedded PS1 BIOS, first 512KB extracted (region-free override)"
region: "Auto"
required: false
size: 524288
sha1: "c40146361eb8cf670b19fdc9759190257803cab7"
md5: "81bbe60ba7a3d1cea1d48c14cbcc647b"
validation: [sha1]

View File

@@ -65,6 +65,7 @@ files:
hle_fallback: true
validation: [size]
known_hash_adler32: "0x66f334fe"
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"
@@ -75,6 +76,7 @@ files:
hle_fallback: true
validation: [size]
known_hash_adler32: "0xf3b93527"
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"

View File

@@ -5,7 +5,7 @@ source: "https://github.com/libretro/FBNeo"
upstream: "https://github.com/finalburnneo/FBNeo"
logo: "https://raw.githubusercontent.com/finalburnneo/FBNeo/master/projectfiles/xcode/Emulator/Assets.xcassets/AppIcon.appiconset/icon_512.png"
profiled_date: "2026-03-23"
core_version: "v1.0.0.03"
core_version: "v1.0.0.2"
display_name: "Arcade (FinalBurn Neo)"
cores:
- fbneo
@@ -33,6 +33,8 @@ systems:
- taito-cchip
- ym2608
archive_prefix: fbneo
data_directories:
- ref: fbneo-cheats
destination: fbneo/cheats
@@ -1485,3 +1487,94 @@ files:
size: 155000000
note: "Two Tigers with Journey CD audio samples (2 WAVs)"
source_ref: "src/burn/snd/samples.cpp"
- name: "coleco.rom"
archive: cv_coleco.zip
required: true
size: 8192
crc32: "3aa93ef3"
source_ref: "src/burn/drv/coleco/d_coleco.cpp:1079"
- name: "colecoa.rom"
archive: cv_coleco.zip
required: true
size: 8192
crc32: "39bb16fc"
source_ref: "src/burn/drv/coleco/d_coleco.cpp:1079"
- name: "svi603.rom"
archive: cv_coleco.zip
required: true
size: 8192
crc32: "19e91b82"
source_ref: "src/burn/drv/coleco/d_coleco.cpp:1079"
- name: "czz50.rom"
archive: cv_coleco.zip
required: true
size: 16384
crc32: "4999abc6"
source_ref: "src/burn/drv/coleco/d_coleco.cpp:1079"
- name: "fdsbios.nes"
archive: fds_fdsbios.zip
required: true
size: 8192
crc32: "5e607dcf"
source_ref: "src/burn/drv/nes/d_nes.cpp:523"
- name: "st010.bin"
archive: snes_st010.zip
required: true
size: 69632
crc32: "aa11ee2d"
source_ref: "src/burn/drv/snes/d_snes.cpp:577"
- name: "st011.bin"
archive: snes_st011.zip
required: true
size: 69632
crc32: "34d2952c"
source_ref: "src/burn/drv/snes/d_snes.cpp:596"
- name: "msx.rom"
archive: msx_msx.zip
required: true
size: 32768
crc32: "a317e6b4"
source_ref: "src/burn/drv/msx/d_msx.cpp:1781"
- name: "msxj.rom"
archive: msx_msx.zip
required: true
size: 32768
crc32: "071135e0"
source_ref: "src/burn/drv/msx/d_msx.cpp:1781"
- name: "kanji.rom"
archive: msx_msx.zip
required: true
size: 262144
crc32: "1f6406fb"
source_ref: "src/burn/drv/msx/d_msx.cpp:1781"
- name: "supernova_modbios-japan.u10"
archive: skns.zip
required: true
size: 524288
crc32: "b8d3190c"
source_ref: "src/burn/drv/pst90s/d_suprnova.cpp:1865"
- name: "supernova-modbios-korea.u10"
archive: skns.zip
required: true
size: 524288
crc32: "1d90517c"
source_ref: "src/burn/drv/pst90s/d_suprnova.cpp:1865"
- name: "mcu"
archive: bubsys.zip
required: true
size: 4096
crc32: "00000000"
source_ref: "src/burn/drv/konami/d_nemesis.cpp:4539"

View File

@@ -32,6 +32,8 @@ notes: |
need_fullpath=false, extensions=zip|7z, savestate=deterministic.
archive_prefix: fbneo
files:
- name: "hiscore.dat"
path: "fbneo/hiscore.dat"

View File

@@ -38,6 +38,8 @@ notes: |
need_fullpath=false, extensions=zip|7z|cue|ccd, savestate=deterministic.
archive_prefix: fbneo
files:
# -------------------------------------------------------
# Neo Geo MVS/AES (neogeo.zip) — 68K BIOS ROMs

View File

@@ -238,6 +238,7 @@ files:
- name: CARTS.CRC
required: false
bundled: false
unsourceable: "dead legacy code path, never created or distributed, replaced by CARTS.SHA"
note: "CRC database for cartridge identification and mapper detection. Tried first, before CARTS.SHA (fMSX/MSX.c:2697)."
- name: CARTS.SHA

View File

@@ -62,6 +62,7 @@ files:
hle_fallback: true
validation: [size]
known_hash_adler32: "0x66f334fe"
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"
@@ -72,6 +73,7 @@ files:
hle_fallback: true
validation: [size]
known_hash_adler32: "0xf3b93527"
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"

View File

@@ -38,11 +38,14 @@ notes: |
Standalone supports MPEG card ROM loading (Video CD card); disabled in
libretro port (mpegpath = NULL in libretro.c:1578).
archive_prefix: kronos
files:
# -----------------------------------------------------------
# Saturn BIOS - primary (any region)
# -----------------------------------------------------------
- name: "saturn_bios.bin"
path: "kronos/saturn_bios.bin"
system: sega-saturn
required: true
size: 524288

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -186,6 +186,7 @@ files:
path: "np2kai/gpib.rom"
size: 8192
required: false
unsourceable: "never publicly dumped, GP-IB emulation is stub code (source comment: not implemented)"
note: >
GP-IB interface BIOS ROM (8 KB). If missing, GP-IB emulation
is disabled entirely.
@@ -198,6 +199,8 @@ files:
- name: "key.txt"
path: "np2kai/key.txt"
required: false
hle_fallback: true
unsourceable: "user-created keyboard config, no default distributed in any NP2kai release"
note: >
Keyboard remapping configuration (text file). User-created file
for custom keyboard layout. The core uses built-in defaults if absent.

View File

@@ -81,5 +81,6 @@ files:
system: cave-story
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."

View File

@@ -68,6 +68,7 @@ files:
hle_fallback: true
validation: [size]
known_hash_adler32: "0x66f334fe"
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"
@@ -79,6 +80,7 @@ files:
hle_fallback: true
validation: [size]
known_hash_adler32: "0xf3b93527"
adler32_byteswap: true
note: "DSP coefficient ROM for LLE audio. Free replacement included"
source_ref: "Source/Core/Common/CommonPaths.h:136, Source/Core/Core/DSP/DSPCore.cpp:32-38"

View File

@@ -247,6 +247,7 @@ files:
- 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"

Some files were not shown because too many files have changed in this diff Show More