feat: re-profile 40 emulators, harden CI workflows

profile emulators pd777 through tic80, add frozen snapshots
(puae2021, snes9x2002/2005/2010, stella2014/2023).

CI: replace github-script with gh CLI, add test execution,
job-level permissions, propagate changed output, pin jsonschema.
This commit is contained in:
Abdessamad Derraz
2026-03-25 07:00:17 +01:00
parent 0543165ed2
commit ebb55a445b
69 changed files with 2337 additions and 1544 deletions

View File

@@ -11,9 +11,7 @@ on:
type: boolean type: boolean
default: false default: false
permissions: permissions: {}
contents: write
pages: write
concurrency: concurrency:
group: build group: build
@@ -22,6 +20,11 @@ concurrency:
jobs: jobs:
regenerate: regenerate:
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions:
contents: write
pages: write
outputs:
changed: ${{ steps.commit.outputs.changed }}
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
@@ -57,6 +60,9 @@ jobs:
python scripts/generate_readme.py --db database.json --platforms-dir platforms python scripts/generate_readme.py --db database.json --platforms-dir platforms
python scripts/generate_site.py python scripts/generate_site.py
- name: Run tests
run: python -m unittest tests.test_e2e -v
- name: Deploy site to GitHub Pages - name: Deploy site to GitHub Pages
if: github.ref == 'refs/heads/main' if: github.ref == 'refs/heads/main'
run: mkdocs gh-deploy --force --clean run: mkdocs gh-deploy --force --clean
@@ -74,8 +80,10 @@ jobs:
release: release:
needs: regenerate needs: regenerate
if: needs.regenerate.result == 'success' || github.event.inputs.force_release == 'true' if: (needs.regenerate.outputs.changed == 'true' || github.event.inputs.force_release == 'true')
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions:
contents: write
steps: steps:
- name: Rate limit - name: Rate limit
if: github.event.inputs.force_release != 'true' if: github.event.inputs.force_release != 'true'
@@ -105,6 +113,10 @@ jobs:
with: with:
python-version: "3.12" python-version: "3.12"
- name: Install dependencies
if: steps.rate.outputs.skip != 'true'
run: pip install pyyaml
- name: Refresh data directories - name: Refresh data directories
if: steps.rate.outputs.skip != 'true' if: steps.rate.outputs.skip != 'true'
run: python scripts/refresh_data_dirs.py run: python scripts/refresh_data_dirs.py
@@ -113,7 +125,6 @@ jobs:
- name: Build packs - name: Build packs
if: steps.rate.outputs.skip != 'true' if: steps.rate.outputs.skip != 'true'
run: | run: |
pip install pyyaml
python scripts/generate_db.py --bios-dir bios --output database.json python scripts/generate_db.py --bios-dir bios --output database.json
python scripts/generate_pack.py --all --output-dir dist/ python scripts/generate_pack.py --all --output-dir dist/

View File

@@ -31,8 +31,11 @@ jobs:
- name: Get changed BIOS files - name: Get changed BIOS files
id: changed id: changed
env:
BASE_SHA: ${{ github.event.pull_request.base.sha }}
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
run: | run: |
files=$(git diff --name-only ${{ github.event.pull_request.base.sha }}...${{ github.event.pull_request.head.sha }} | grep '^bios/' || true) files=$(git diff --name-only "$BASE_SHA"..."$HEAD_SHA" | grep '^bios/' || true)
echo "files=$files" >> "$GITHUB_OUTPUT" echo "files=$files" >> "$GITHUB_OUTPUT"
echo "$files" > /tmp/changed_files.txt echo "$files" > /tmp/changed_files.txt
@@ -46,17 +49,11 @@ jobs:
fi fi
- name: Post validation report - name: Post validation report
uses: actions/github-script@v8 if: always()
with: run: |
script: | gh pr comment "${{ github.event.pull_request.number }}" --body-file /tmp/report.md
const fs = require('fs'); env:
const report = fs.readFileSync('/tmp/report.md', 'utf8'); GH_TOKEN: ${{ github.token }}
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: report
});
validate-configs: validate-configs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -68,7 +65,7 @@ jobs:
python-version: "3.12" python-version: "3.12"
- name: Install dependencies - name: Install dependencies
run: pip install pyyaml jsonschema run: pip install pyyaml jsonschema==4.23.0
- name: Validate platform configs - name: Validate platform configs
run: | run: |
@@ -88,15 +85,30 @@ jobs:
config = yaml.safe_load(f) config = yaml.safe_load(f)
try: try:
validate(config, schema) validate(config, schema)
print(f' {yml_file.name}') print(f'OK {yml_file.name}')
except ValidationError as e: except ValidationError as e:
errors.append(f'{yml_file.name}: {e.message}') errors.append(f'{yml_file.name}: {e.message}')
print(f' {yml_file.name}: {e.message}') print(f'FAIL {yml_file.name}: {e.message}')
if errors: if errors:
sys.exit(1) sys.exit(1)
" "
run-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Install dependencies
run: pip install pyyaml
- name: Run test suite
run: python -m unittest tests.test_e2e -v
label-pr: label-pr:
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions: permissions:
@@ -107,43 +119,25 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- name: Auto-label PR - name: Auto-label PR
uses: actions/github-script@v8 run: |
with: labels=""
script: | files=$(gh pr diff "${{ github.event.pull_request.number }}" --name-only)
const { data: files } = await github.rest.pulls.listFiles({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.issue.number,
});
const labels = new Set(); if echo "$files" | grep -q '^bios/'; then
labels="$labels bios"
for sys in $(echo "$files" | grep '^bios/' | cut -d/ -f2 | sort -u); do
labels="$labels system:$(echo "$sys" | tr '[:upper:]' '[:lower:]')"
done
fi
if echo "$files" | grep -q '^platforms/'; then
labels="$labels platform-config"
fi
if echo "$files" | grep -q '^scripts/'; then
labels="$labels automation"
fi
for (const file of files) { for label in $labels; do
if (file.filename.startsWith('bios/')) { gh pr edit "${{ github.event.pull_request.number }}" --add-label "$label" 2>/dev/null || true
labels.add('bios'); done
// Extract system from path env:
const parts = file.filename.split('/'); GH_TOKEN: ${{ github.token }}
if (parts.length >= 3) {
labels.add(`system:${parts[1].toLowerCase()}`);
}
}
if (file.filename.startsWith('platforms/')) {
labels.add('platform-config');
}
if (file.filename.startsWith('scripts/')) {
labels.add('automation');
}
}
if (labels.size > 0) {
try {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
labels: [...labels],
});
} catch (e) {
console.log('Could not add labels:', e.message);
}
}

View File

@@ -1,5 +1,5 @@
{ {
"generated_at": "2026-03-24T21:16:05Z", "generated_at": "2026-03-25T05:56:02Z",
"total_files": 6733, "total_files": 6733,
"total_size": 5288644732, "total_size": 5288644732,
"files": { "files": {
@@ -93684,6 +93684,10 @@
"4ed31ec6b0b175bb109c0eb5fd3d193da823339f", "4ed31ec6b0b175bb109c0eb5fd3d193da823339f",
"1db57a1e8b6e4096f811587f9eab0c6675fd9755" "1db57a1e8b6e4096f811587f9eab0c6675fd9755"
], ],
"dmg0_rom.bin": [
"4ed31ec6b0b175bb109c0eb5fd3d193da823339f",
"1db57a1e8b6e4096f811587f9eab0c6675fd9755"
],
"sgb_bios.bin": [ "sgb_bios.bin": [
"aa2f50a77dfb4823da96ba99309085a3c6278515", "aa2f50a77dfb4823da96ba99309085a3c6278515",
"369e6eb5e0c975eaa52a4a3f6ee07b2a3c3c16de", "369e6eb5e0c975eaa52a4a3f6ee07b2a3c3c16de",
@@ -95178,9 +95182,6 @@
"DMG_ROM.bin": [ "DMG_ROM.bin": [
"1db57a1e8b6e4096f811587f9eab0c6675fd9755" "1db57a1e8b6e4096f811587f9eab0c6675fd9755"
], ],
"dmg0_rom.bin": [
"1db57a1e8b6e4096f811587f9eab0c6675fd9755"
],
"amiga-os-300-a4000.rom": [ "amiga-os-300-a4000.rom": [
"f0b4e9e29e12218c2d5bd7020e4e785297d91fd7" "f0b4e9e29e12218c2d5bd7020e4e785297d91fd7"
], ],
@@ -95211,6 +95212,9 @@
"terak.rom": [ "terak.rom": [
"273a9933b68a290c5aedcd6d69faa7b1d22c0344" "273a9933b68a290c5aedcd6d69faa7b1d22c0344"
], ],
"BS-X.bios": [
"604556b2e62860af18db5a77f2956ebc75450020"
],
"upd7801g.bin": [ "upd7801g.bin": [
"6e89d1227581c76441a53d605f9e324185f1da33" "6e89d1227581c76441a53d605f9e324185f1da33"
], ],
@@ -95220,9 +95224,6 @@
"FdsBios.bin": [ "FdsBios.bin": [
"57fe1bdee955bb48d357e463ccbf129496930b62" "57fe1bdee955bb48d357e463ccbf129496930b62"
], ],
"BS-X.bios": [
"604556b2e62860af18db5a77f2956ebc75450020"
],
"N88_0.ROM": [ "N88_0.ROM": [
"d1ae642aed4f0584eeb81ff50180db694e5101d4" "d1ae642aed4f0584eeb81ff50180db694e5101d4"
], ],
@@ -95292,6 +95293,14 @@
"2608_RYM.WAV": [ "2608_RYM.WAV": [
"c65592330c9dd84011151daed52f9aec926b7e56" "c65592330c9dd84011151daed52f9aec926b7e56"
], ],
"cgb0_boot.bin": [
"80e3ee82416c1a74827a5459fde32f04bf51a1f6",
"1293d68bf9643bc4f36954c1e80e38f39864528d"
],
"cgb_agb_boot.bin": [
"80e3ee82416c1a74827a5459fde32f04bf51a1f6",
"1293d68bf9643bc4f36954c1e80e38f39864528d"
],
"dc_flash_wb.bin": [ "dc_flash_wb.bin": [
"72c65f2a11ee7b72b77b9945187b7a332632e14a" "72c65f2a11ee7b72b77b9945187b7a332632e14a"
], ],
@@ -95310,12 +95319,6 @@
"epr-21576d.bin": [ "epr-21576d.bin": [
"6d27d71aec4dfba98f66316ae74a1426d567698a" "6d27d71aec4dfba98f66316ae74a1426d567698a"
], ],
"cgb0_boot.bin": [
"1293d68bf9643bc4f36954c1e80e38f39864528d"
],
"cgb_agb_boot.bin": [
"1293d68bf9643bc4f36954c1e80e38f39864528d"
],
"nds_sd_card.bin": [ "nds_sd_card.bin": [
"3b71f43ff30f4b15b5cd85dd9e95ebc7e84eb5a3" "3b71f43ff30f4b15b5cd85dd9e95ebc7e84eb5a3"
], ],
@@ -115616,9 +115619,9 @@
"9d76f3eefd64e032c763fa1ebf9cd3d9bd22317a", "9d76f3eefd64e032c763fa1ebf9cd3d9bd22317a",
"34fa37599f2f9eb607390ef2458a3c22d87f09a9", "34fa37599f2f9eb607390ef2458a3c22d87f09a9",
"273a9933b68a290c5aedcd6d69faa7b1d22c0344", "273a9933b68a290c5aedcd6d69faa7b1d22c0344",
"604556b2e62860af18db5a77f2956ebc75450020",
"6e89d1227581c76441a53d605f9e324185f1da33", "6e89d1227581c76441a53d605f9e324185f1da33",
"57fe1bdee955bb48d357e463ccbf129496930b62", "57fe1bdee955bb48d357e463ccbf129496930b62",
"604556b2e62860af18db5a77f2956ebc75450020",
"d1ae642aed4f0584eeb81ff50180db694e5101d4", "d1ae642aed4f0584eeb81ff50180db694e5101d4",
"4ae4d37409ff99411a623da9f6a44192170a854e", "4ae4d37409ff99411a623da9f6a44192170a854e",
"e94278682ef9e9bbb82201f72c50382748dcea2a", "e94278682ef9e9bbb82201f72c50382748dcea2a",
@@ -115636,6 +115639,7 @@
"db1031585968cfc6ec2ecda5c9a5a52f61444a3b", "db1031585968cfc6ec2ecda5c9a5a52f61444a3b",
"b4f14e58030ed40fff2dc312b58ea4440bdf8cc5", "b4f14e58030ed40fff2dc312b58ea4440bdf8cc5",
"c65592330c9dd84011151daed52f9aec926b7e56", "c65592330c9dd84011151daed52f9aec926b7e56",
"80e3ee82416c1a74827a5459fde32f04bf51a1f6",
"72c65f2a11ee7b72b77b9945187b7a332632e14a", "72c65f2a11ee7b72b77b9945187b7a332632e14a",
"6d27d71aec4dfba98f66316ae74a1426d567698a", "6d27d71aec4dfba98f66316ae74a1426d567698a",
"1293d68bf9643bc4f36954c1e80e38f39864528d", "1293d68bf9643bc4f36954c1e80e38f39864528d",

View File

@@ -1,7 +1,9 @@
emulator: PD777 emulator: PD777
type: libretro type: libretro
source: "https://github.com/W88DodPECuThLOl/PD777" core_classification: community_fork
profiled_date: "2026-03-18" source: "https://github.com/mittonk/PD777"
upstream: "https://github.com/W88DodPECuThLOl/PD777"
profiled_date: "2026-03-24"
core_version: "v1.0.0" core_version: "v1.0.0"
display_name: "Epoch - Cassette Vision (PD777)" display_name: "Epoch - Cassette Vision (PD777)"
cores: cores:
@@ -10,12 +12,12 @@ systems:
- epochcv - epochcv
notes: | notes: |
PD777 is an Epoch Cassette Vision emulator (NEC uPD777C CPU) with a libretro PD777 is an Epoch Cassette Vision emulator (NEC uPD777C CPU), by
interface, by W88DodPECuThLOl. W88DodPECuThLOl. Libretro port by Ken Mitton (mittonk).
No BIOS or firmware files required. The .info file declares firmware_count = 0. No BIOS or firmware files required. The .info file declares firmware_count = 0.
Game loading in source/libretro/libretro.cpp:retro_load_game() (line 386-474). Game loading in source/libretro/libretro.cpp:retro_load_game() (line 404-532).
The core loads a code ROM file (.bin777) directly from the content path, then The core loads a code ROM file (.bin777) directly from the content path, then
attempts to load a pattern ROM file (.ptn777) by replacing the extension. attempts to load a pattern ROM file (.ptn777) by replacing the extension.

View File

@@ -1,63 +1,34 @@
# Play! emulator BIOS profile emulator: play
# Generated from source analysis of https://github.com/jpd002/Play-
# Commit analyzed: HEAD as of 2026-03-17
emulator: "Play!"
type: libretro type: libretro
core_name: play_libretro core_classification: official_port
source: "https://github.com/jpd002/Play-" source: "https://github.com/jpd002/Play-"
profiled_date: "2026-03-18" upstream: "https://github.com/jpd002/Play-"
profiled_date: "2026-03-24"
core_version: "Git" core_version: "Git"
display_name: "Sony - PlayStation 2 (Play!)" display_name: "Sony - PlayStation 2 (Play!)"
systems: [sony-playstation-2] cores:
- play
systems:
- sony-playstation-2
bios_directory: null # Full HLE PS2 emulator by Jean-Philip Desjardins.
bios_detection: "hle" # All PS2 subsystems are reimplemented in C++: EE kernel (PS2OS.cpp),
bios_selection: "not_applicable" # IOP BIOS modules (IopBios.cpp), GS, SPU2, VU units.
# The libretro core never calls RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY.
validation: #
method: "none" # LoadBIOS() exists in Ee_SubSystem.cpp:832 but is commented out at line 232.
note: > # IOP modules (SIO2MAN, PADMAN, MCMAN, MCSERV, CDVDMAN, CDVDFSV, etc.)
Play! is a full HLE (High-Level Emulation) PS2 emulator. It does not load or # are all HLE-replaced via m_hleModules in IopBios.cpp:279-290.
require any real PS2 BIOS dump. The LoadBIOS() function in Ee_SubSystem.cpp # _IOP_EMULATE_MODULES=1 is unconditionally defined in CMakeLists.txt:24.
(which would read ./vfs/rom0/scph10000.bin) is commented out in PS2VM.cpp:ResetVM(). #
# source_ref: Source/ee/Ee_SubSystem.cpp:232 (LoadBIOS commented out)
files: [] # source_ref: Source/iop/IopBios.cpp:279-290 (HLE module table)
# No BIOS files required. # source_ref: Source/PS2VM.cpp:483-537 (ResetVM — no BIOS loading)
# IOP modules (rom0:SIO2MAN, rom0:PADMAN, rom0:MCMAN, rom0:MCSERV, etc.) # source_ref: Source/ui_libretro/main_libretro.cpp:546-568 (retro_init — no file I/O)
# are all replaced by HLE implementations in Source/iop/IopBios.cpp. # source_ref: README.md:4 ("Using an external BIOS file is not necessary or possible.")
# The EE kernel/OS is reimplemented in Source/ee/PS2OS.cpp. # source_ref: play_libretro.info (firmware_count absent = 0)
virtual_filesystem:
# Play! uses a virtual filesystem for memory cards and disc access,
# but these are runtime directories, not BIOS files.
mc0: {default: "vfs/mc0", purpose: "Memory card slot 0 (save data)"}
mc1: {default: "vfs/mc1", purpose: "Memory card slot 1 (save data)"}
host: {default: "vfs/host", purpose: "Host filesystem access"}
cdrom0: {default: null, purpose: "Disc image (set per-game)"}
memory_layout:
EE_RAM: {size: "32 MB (0x02000000)"}
EE_BIOS: {size: "4 MB (0x00400000)", note: "Allocated but unused, HLE replaces real BIOS"}
IOP_RAM: {size: "2 MB (0x00200000)"}
SPU_RAM: {size: "2 MB (0x00200000)"}
notes: | notes: |
Play! does not require any PS2 BIOS files. Unlike PCSX2, it uses High-Level Full HLE emulator. No BIOS or firmware files required. firmware_count=0 confirmed by source.
Emulation to reimplement the PS2 kernel, IOP BIOS modules, and system services
entirely in C++.
Key HLE components: files: []
- EE kernel: Source/ee/PS2OS.cpp (handles BootFromCDROM, BootFromFile, syscalls)
- IOP BIOS: Source/iop/IopBios.cpp (HLE modules for rom0:PADMAN, MCMAN, MCSERV, etc.)
- No rom0/rom1/erom files are loaded at runtime
The legacy LoadBIOS() function in Source/ee/Ee_SubSystem.cpp references
"./vfs/rom0/scph10000.bin" but this call is commented out in PS2VM::ResetVM()
and has no effect on emulation.
mc2_ings.ico is not referenced anywhere in Play! source code. That file is
specific to PCSX2's memory card icon handling, not Play!.
The libretro core supports: .elf, .iso, .cso, .isz, .bin disc images.
Extensions handled in main_libretro.cpp:retro_get_system_info().

View File

@@ -1,14 +1,15 @@
emulator: PocketCDG emulator: PocketCDG
type: utility type: utility
core_classification: pure_libretro
source: "https://github.com/libretro/libretro-pocketcdg" source: "https://github.com/libretro/libretro-pocketcdg"
profiled_date: "2026-03-18" upstream: "https://github.com/redbug26/libretro-pocketcdg"
profiled_date: "2026-03-24"
core_version: "Git" core_version: "Git"
display_name: "PocketCDG" display_name: "PocketCDG"
cores: [pocketcdg] cores: [pocketcdg]
systems: [] systems: []
files: [] files: []
notes: > notes: >
CD+G (CD+Graphics) karaoke player for libretro. Renders the subcode CD+G (CD+Graphics) karaoke player. Renders subcode graphics from .cdg
graphics channel from .cdg files synchronized with audio. files synchronized with MP3 audio. Font and MP3 decoder (libmad)
Loads .cdg content files directly. embedded in the binary.
No BIOS, firmware, or system directory files required.

View File

@@ -1,8 +1,9 @@
emulator: Potator emulator: Potator
type: libretro type: libretro
core_classification: community_fork core_classification: community_fork
source: "https://github.com/libretro/potern" source: "https://github.com/libretro/potator"
profiled_date: "2026-03-21" upstream: "https://github.com/alekmaul/potator"
profiled_date: "2026-03-24"
core_version: "1.0.5" core_version: "1.0.5"
display_name: "Watara - Supervision (Potator)" display_name: "Watara - Supervision (Potator)"
cores: cores:
@@ -12,5 +13,6 @@ systems:
notes: | notes: |
Watara Supervision emulator. No BIOS required. Watara Supervision emulator. No BIOS required.
The Supervision has no BIOS ROM; games execute directly from cartridge.
files: [] files: []

View File

@@ -1,141 +1,44 @@
# PPSSPP emulator firmware profile
# Generated from source analysis of https://github.com/hrydgard/ppsspp
# Commit analyzed: HEAD as of 2026-03-17
emulator: PPSSPP emulator: PPSSPP
type: standalone type: standalone + libretro
source: "https://github.com/hrydgard/ppsspp" core_classification: official_port
logo: "https://raw.githubusercontent.com/hrydgard/ppsspp/master/icons/icon-512.svg" source: "https://github.com/libretro/ppsspp"
profiled_date: "2026-03-18" upstream: "https://github.com/hrydgard/ppsspp"
profiled_date: "2026-03-24"
core_version: "Git" core_version: "Git"
display_name: "Sony - PlayStation Portable (PPSSPP)" display_name: "Sony - PlayStation Portable (PPSSPP)"
cores:
- ppsspp
systems: [sony-psp] systems: [sony-psp]
firmware_required: false pack_structure:
firmware_detection: "none" libretro: "PPSSPP"
bios_directory: "N/A"
bios_selection: "N/A"
note: >
PPSSPP is a full HLE emulator - it does not require PSP firmware or BIOS files.
All PSP kernel modules (flash0:/kd/*.prx) are reimplemented in C++.
The emulator ships its own flash0/ directory with replacement fonts and assets.
default_firmware_version: 660 # PSP_DEFAULT_FIRMWARE in ConfigValues.h data_directories:
source_ref_firmware: "Core/ConfigValues.h:40" - ref: ppsspp-assets
destination: ""
# Bundled assets (shipped with PPSSPP, not from Sony) source_ref: "libretro/libretro.cpp:537,549"
bundled_assets:
ppge_atlas:
files:
- {name: "ppge_atlas.zim", purpose: "UI texture atlas for dialogs, buttons, icons"}
- {name: "ppge_atlas.meta", purpose: "Atlas metadata (glyph positions, UV coords)"}
source_ref: "Core/Util/PPGeDraw.cpp:256-266"
note: >
PPGE (PlayStation Portable Graphics Engine) is PPSSPP's reimplementation of the
PSP system dialog renderer. The atlas contains button icons, dialog backgrounds,
and a basic font for system dialogs (save/load, network, etc).
Without ppge_atlas.zim, system dialogs render without graphics.
flash0_fonts:
path: "assets/flash0/font/"
source_ref: "Core/HLE/sceFont.cpp:88-106"
note: >
Replacement PGF font files shipped with PPSSPP. These are not the original Sony
fonts but open-source replacements that satisfy the sceFont API. Located in the
assets/flash0/font/ directory, mounted as flash0:/font/ at runtime.
files:
# Japanese
- {name: "jpn0.pgf", type: "FTT-NewRodin Pro DB", language: "Japanese", size: "standard"}
# Chinese
- {name: "zh_gb.pgf", type: "FTT-NewRodin Pro DB", language: "Chinese GB", note: "Also loaded from disc0: if present"}
# Korean
- {name: "kr0.pgf", type: "AsiaNHH(512Johab)", language: "Korean", size: "standard"}
# Latin - Standard size (0x288 height)
- {name: "ltn0.pgf", type: "FTT-NewRodin Pro Latin", style: "regular"}
- {name: "ltn1.pgf", type: "FTT-Matisse Pro Latin", style: "regular"}
- {name: "ltn2.pgf", type: "FTT-NewRodin Pro Latin", style: "italic"}
- {name: "ltn3.pgf", type: "FTT-Matisse Pro Latin", style: "italic"}
- {name: "ltn4.pgf", type: "FTT-NewRodin Pro Latin", style: "bold"}
- {name: "ltn5.pgf", type: "FTT-Matisse Pro Latin", style: "bold"}
- {name: "ltn6.pgf", type: "FTT-NewRodin Pro Latin", style: "bold_italic"}
- {name: "ltn7.pgf", type: "FTT-Matisse Pro Latin", style: "bold_italic"}
# Latin - Small size (0x1c0 height)
- {name: "ltn8.pgf", type: "FTT-NewRodin Pro Latin", style: "regular", size: "small"}
- {name: "ltn9.pgf", type: "FTT-Matisse Pro Latin", style: "regular", size: "small"}
- {name: "ltn10.pgf", type: "FTT-NewRodin Pro Latin", style: "italic", size: "small"}
- {name: "ltn11.pgf", type: "FTT-Matisse Pro Latin", style: "italic", size: "small"}
- {name: "ltn12.pgf", type: "FTT-NewRodin Pro Latin", style: "bold", size: "small"}
- {name: "ltn13.pgf", type: "FTT-Matisse Pro Latin", style: "bold", size: "small"}
- {name: "ltn14.pgf", type: "FTT-NewRodin Pro Latin", style: "bold_italic", size: "small"}
- {name: "ltn15.pgf", type: "FTT-Matisse Pro Latin", style: "bold_italic", size: "small"}
# HLE kernel modules (reimplemented, not loaded from firmware)
hle_modules:
source_ref: "Core/HLE/sceKernelModule.cpp:100-113"
note: >
When a PSP game tries to load these flash0:/kd/*.prx modules, PPSSPP intercepts
the load call and activates its built-in HLE implementation instead. No actual
PRX files are loaded from disk.
flash0_kd:
- {prx: "audiocodec.prx", hle: "sceAudiocodec_Driver"}
- {prx: "audiocodec_260.prx", hle: "sceAudiocodec_Driver"}
- {prx: "libatrac3plus.prx", hle: "sceATRAC3plus_Library"}
- {prx: "ifhandle.prx", hle: "sceNet_Service"}
- {prx: "pspnet.prx", hle: "sceNet_Library"}
- {prx: "pspnet_inet.prx", hle: "sceNetInet_Library"}
- {prx: "pspnet_apctl.prx", hle: "sceNetApctl_Library"}
- {prx: "pspnet_resolver.prx", hle: "sceNetResolver_Library"}
- {prx: "pspnet_adhoc.prx", hle: "sceNetAdhoc_Library"}
- {prx: "pspnet_adhocctl.prx", hle: "sceNetAdhocctl_Library"}
- {prx: "pspnet_adhoc_matching.prx", hle: "sceNetAdhocMatching_Library"}
- {prx: "pspnet_adhoc_download.prx", hle: "sceNetAdhocDownload_Library"}
- {prx: "pspnet_adhoc_discover.prx", hle: "sceNetAdhocDiscover_Library"}
# Flash0 filesystem layout
flash0_layout:
source_ref: "Core/HLE/sceIo.cpp:87,654"
note: >
flash0: is the PSP system partition. PPSSPP maps it to g_Config.flash0Directory
which is typically assets/flash0/ bundled with the emulator. The filesystem is
mounted read-only with FLASH flag.
directories:
font: "PGF/BWFON font files (mounted as flash0:/font/)"
kd: "Kernel drivers/modules (intercepted by HLE, not actually loaded)"
vsh: "Visual Shell resources"
dic: "Dictionary files"
data: "System data files"
# Font override path
font_override:
path: "ms0:/PSP/flash0/font/"
source_ref: "Core/HLE/sceFont.cpp:881"
note: >
Users can override bundled fonts by placing real PSP PGF files at
ms0:/PSP/flash0/font/ (inside the memory stick directory). PPSSPP
checks this path before falling back to the bundled flash0:/font/.
# Registry defaults relevant to fonts
registry_defaults:
font_path: "flash0:/font"
default_jpn_font: "jpn0.pgf"
default_latin_font: "ltn0.pgf"
source_ref: "Core/HLE/sceReg.cpp:81-281"
notes: | notes: |
PPSSPP does NOT require any firmware files, BIOS, or system software from Sony. Full HLE emulator. No Sony firmware or BIOS required.
It is a complete HLE (High Level Emulation) implementation of the PSP operating system. All PSP kernel modules (flash0:/kd/*.prx) are reimplemented in C++.
Libretro core loads assets from system/PPSSPP/ via VFS.
Assets include replacement PGF fonts (18 files in flash0/font/),
game compatibility database (compat.ini), language mapping (langregion.ini),
and post-processing shaders (shaders/).
Libretro fork (2020-03-18) behind upstream.
PSP_DEFAULT_FIRMWARE = 660 (Core/ConfigValues.h:40).
All PSP kernel modules (flash0:/kd/*.prx) are reimplemented in C++ within PPSSPP. files:
When games attempt to load these modules via sceKernelLoadModule, PPSSPP intercepts - name: "ppge_atlas.zim"
the call and activates its built-in HLE implementation. path: "PPSSPP/ppge_atlas.zim"
description: "PPGe dialog texture atlas for save/load dialogs, on-screen keyboard, system UI"
required: false
source_ref: "Core/Util/PPGeDraw.cpp:227-228"
note: "PanicAlert if missing. System dialogs render without graphics but core continues running."
The bundled flash0/font/*.pgf files are open-source replacements for the original - name: "ppge_atlas.meta"
Sony PSP fonts. They satisfy the sceFont API but are not identical to real PSP fonts. path: "PPSSPP/ppge_atlas.meta"
For pixel-perfect font rendering, users can place original PGF files in the description: "PPGe atlas metadata (glyph positions, UV coords)"
ms0:/PSP/flash0/font/ override directory. required: false
source_ref: "Core/Util/PPGeDraw.cpp:235-237"
The ppge_atlas.zim/meta files provide PPSSPP's system dialog rendering (save/load note: "Loaded after ppge_atlas.zim. Without it, dialog UI has no glyph layout."
dialogs, on-screen keyboard, etc). These are PPSSPP-specific assets, not Sony firmware.
PPSSPP also exists as a libretro core (ppsspp_libretro), which uses the same HLE
approach and bundled assets.

View File

@@ -1,9 +1,12 @@
emulator: PrBoom emulator: PrBoom
type: libretro type: libretro
core_classification: game_engine
source: "https://github.com/libretro/libretro-prboom" source: "https://github.com/libretro/libretro-prboom"
profiled_date: "2026-03-18" upstream: "http://prboom.sourceforge.net/"
profiled_date: "2026-03-24"
core_version: "v2.5.0" core_version: "v2.5.0"
display_name: "Doom (PrBoom)" display_name: "Doom (PrBoom)"
cores: [prboom]
systems: [doom] systems: [doom]
notes: | notes: |
@@ -22,7 +25,7 @@ notes: |
(d_main.c:1073-1074), so the file is technically optional but expected (d_main.c:1073-1074), so the file is technically optional but expected
for correct rendering of menus, HUD digits, and extended features. for correct rendering of menus, HUD digits, and extended features.
File search order (libretro.c I_FindFile, line 1743): File search order (libretro.c I_FindFile, line 1742):
1. WAD directory (same folder as the loaded game WAD) 1. WAD directory (same folder as the loaded game WAD)
2. system/prboom/ subdirectory 2. system/prboom/ subdirectory
3. system/ directory directly 3. system/ directory directly
@@ -47,5 +50,5 @@ files:
md5: "72ae1b47820fcc93cc0df9c428d0face" md5: "72ae1b47820fcc93cc0df9c428d0face"
sha1: "5f4aed208301449c2e9514edfd325fe9dead76fa" sha1: "5f4aed208301449c2e9514edfd325fe9dead76fa"
crc32: "a5751b99" crc32: "a5751b99"
source_ref: "d_main.c:1069-1078 (PACKAGE .wad load), libretro.c:1743-1780 (I_FindFile search), config.h:46 (PACKAGE=prboom)" source_ref: "d_main.c:1069-1078 (PACKAGE .wad load), libretro.c:1742-1784 (I_FindFile search), config.h:46 (PACKAGE=prboom)"
notes: "Searched in system/prboom/ then system/. Falls back to internal defaults if missing, but menus and HUD may render incorrectly without it." notes: "Searched in system/prboom/ then system/. Falls back to internal defaults if missing, but menus and HUD may render incorrectly without it."

View File

@@ -1,7 +1,9 @@
emulator: ProSystem emulator: ProSystem
type: libretro type: libretro
core_classification: community_fork
source: "https://github.com/libretro/prosystem-libretro" source: "https://github.com/libretro/prosystem-libretro"
profiled_date: "2026-03-18" upstream: "https://github.com/gstanton/ProSystem1_3"
profiled_date: "2026-03-24"
core_version: "1.3e" core_version: "1.3e"
display_name: "Atari - 7800 (ProSystem)" display_name: "Atari - 7800 (ProSystem)"
cores: cores:
@@ -10,51 +12,37 @@ systems:
- atari-7800 - atari-7800
notes: | notes: |
ProSystem is an Atari 7800 emulator ported to libretro. Atari 7800 emulator by Greg Stanton, ported to libretro by community
contributors. The upstream is a Windows-only application with a single
user-configured BIOS path. The libretro port adds automatic region-based
BIOS selection: PAL carts get (E), everything else gets (U).
BIOS loading is in core/libretro.c:579-588. Region is read from the Region is read from cartridge header byte 57 (core/Cartridge.c:214) or
cartridge header byte 57 (core/Cartridge.c:214) or overridden by the overridden by the internal database (core/Database.c:1739-1757).
internal database (core/Database.c). PAL carts get the (E) BIOS,
everything else gets (U).
Both BIOS files are optional. The core runs games without them, but Both BIOS files are optional. The core runs without them but some titles
some titles may have compatibility issues without the real BIOS have compatibility issues (startup encryption check). bios_Store() maps
(startup encryption check, etc). bios_Store() maps the BIOS data the BIOS into ROM at address (65536 - bios_size).
into the top of the 64K address space (65536 - bios_size).
No core option controls BIOS loading -- if the file exists in the No core option controls BIOS loading. If the file exists in the system
system directory, it is loaded automatically. directory, it is loaded automatically. No hash or size validation is
performed on the BIOS file.
The .info declares firmware_count=1 (U only), missing the PAL BIOS.
files: files:
- name: "7800 BIOS (U).rom" - name: "7800 BIOS (U).rom"
system: atari-7800 system: atari-7800
required: false required: false
hle_fallback: true hle_fallback: true
size: 4096 # 4 KB size: 4096
note: "NTSC/US Atari 7800 BIOS. Loaded when cartridge_region != REGION_PAL." description: "NTSC/US BIOS, loaded when cartridge_region != REGION_PAL"
source_ref: "core/libretro.c:585" source_ref: "core/libretro.c:585"
- name: "7800 BIOS (E).rom" - name: "7800 BIOS (E).rom"
system: atari-7800 system: atari-7800
required: false required: false
hle_fallback: true hle_fallback: true
size: 16384 # 16 KB (PAL BIOS is larger than NTSC) size: 16384
note: "PAL/EU Atari 7800 BIOS. Loaded when cartridge_region == REGION_PAL." description: "PAL/EU BIOS, loaded when cartridge_region == REGION_PAL"
source_ref: "core/libretro.c:583" source_ref: "core/libretro.c:583"
platform_details:
bios_mapping:
target: "top of 64K memory (65536 - bios_size)"
source_ref: "core/Bios.c:88"
notes: |
bios_Store() writes the BIOS into ROM at address (65536 - bios_size).
The BIOS size is read dynamically from the file, not hardcoded.
bios_enabled flag is set only if bios_Load() succeeds (file found
and read without error).
region_detection:
source_ref: "core/Cartridge.c:214, core/Database.c"
notes: |
Region byte is at offset 57 in the A7800 cartridge header.
The internal database (Database.c) can override the header value.
REGION_NTSC = 0, REGION_PAL = 1 (defined in Region.h).

View File

@@ -1,9 +1,11 @@
emulator: PUAE (P-UAE) emulator: PUAE (P-UAE)
type: libretro type: libretro
cores: [puae, puae2021] core_classification: community_fork
cores: [puae]
source: "https://github.com/libretro/libretro-uae" source: "https://github.com/libretro/libretro-uae"
profiled_date: "2026-03-18" upstream: "https://github.com/GnoStiC/PUAE"
core_version: "5.3.0" profiled_date: "2026-03-24"
core_version: "5.3.1"
display_name: "Commodore - Amiga (PUAE)" display_name: "Commodore - Amiga (PUAE)"
systems: systems:
- commodore-amiga - commodore-amiga
@@ -41,7 +43,8 @@ notes: |
WHDLoad support copies kick33180.A500, kick34005.A500, kick40063.A600, WHDLoad support copies kick33180.A500, kick34005.A500, kick40063.A600,
kick40068.A1200 into saves/WHDLoad/Devs/Kickstarts/ for use by WHDLoad kick40068.A1200 into saves/WHDLoad/Devs/Kickstarts/ for use by WHDLoad
slave files. slave files. Also copies rom.key (Amiga Forever decryption) and WHDLoad.key
(license) from the system directory.
ROM search order (libretro-core.c retro_config_kickstart): ROM search order (libretro-core.c retro_config_kickstart):
1. Exact filename in system directory 1. Exact filename in system directory
@@ -232,6 +235,27 @@ files:
- "CD32 Extended-ROM rev 40.60 (1993)(Commodore)(CD32).rom" - "CD32 Extended-ROM rev 40.60 (1993)(Commodore)(CD32).rom"
source_ref: "libretro/libretro-core.h:241-244" source_ref: "libretro/libretro-core.h:241-244"
# -------------------------------------------------------
# WHDLoad support files
# -------------------------------------------------------
- name: "rom.key"
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"
- name: "WHDLoad.key"
system: commodore-amiga
required: false
note: "WHDLoad license key. Copied to saves/WHDLoad/L/ for registered WHDLoad use."
source_ref: "libretro/libretro-core.c:5985-5998"
- name: "WHDLoad.prefs"
system: commodore-amiga
required: false
note: "WHDLoad preferences. Copied to saves/WHDLoad/S/ when present."
source_ref: "libretro/libretro-core.c:6002-6025"
model_kickstart_map: model_kickstart_map:
A500: {kickstart: "kick34005.A500", ext: null} A500: {kickstart: "kick34005.A500", ext: null}
A500OG: {kickstart: "kick34005.A500", ext: null} A500OG: {kickstart: "kick34005.A500", ext: null}

295
emulators/puae2021.yml Normal file
View File

@@ -0,0 +1,295 @@
emulator: PUAE 2021
type: libretro
core_classification: frozen_snapshot
cores: [puae2021]
source: "https://github.com/libretro/libretro-uae/tree/2.6.1"
upstream: "https://github.com/GnoStiC/PUAE"
profiled_date: "2026-03-24"
core_version: "2.6.1"
display_name: "Commodore - Amiga (PUAE 2021)"
systems:
- commodore-amiga
- commodore-amiga-cd32
- commodore-cdtv
notes: |
Frozen snapshot of PUAE at WinUAE 2.6.1 era. Less accurate than current PUAE
(5.x), intended for weaker devices. BIOS handling is identical to the current
version.
PUAE is a port of UAE (Unix Amiga Emulator) to libretro, continuing E-UAE.
Emulates A500, 500+, 600, 1200, 2000, 4000, CD32, and CDTV. Kickstart ROMs
are loaded from the RetroArch system directory.
AROS (open-source Kickstart replacement) is available as a built-in fallback
when no Kickstart ROM is found. Compatibility is limited compared to real ROMs.
The core scans the system directory for files starting with "kick", "amiga-os",
or "KS ROM". Each filename is matched against a table of known naming
conventions: standard (kick*.A*), Amiga Forever (amiga-os-*.rom), and
TOSEC (Kickstart v*.rom). The first valid match is used.
Default kickstart per model (automatic selection):
A500, A500OG, A2000OG, CDTV -> kick34005.A500 (KS 1.3)
A500+ -> kick37175.A500 (KS 2.04)
A600 -> kick40063.A600 (KS 3.1)
A1200, A1200OG -> kick40068.A1200 (KS 3.1)
A2000 -> kick40063.A600 (KS 3.1)
A4030, A4040 -> kick40068.A4000 (KS 3.1)
CD32, CD32FR -> kick40060.CD32 (KS 3.1)
CDTV (ext) -> kick34005.CDTV
CD32 (ext) -> kick40060.CD32.ext
Extended ROM handling: CD32 and CDTV require an extended ROM in addition
to the main kickstart. If the main ROM filesize is <= 512 KB, the extended
ROM is loaded separately. Combined ROMs (main + ext in one file) skip the
extended ROM search.
WHDLoad support copies kick33180.A500, kick34005.A500, kick40063.A600,
kick40068.A1200 into saves/WHDLoad/Devs/Kickstarts/ for use by WHDLoad
slave files. Also copies rom.key (Amiga Forever decryption) and WHDLoad.key
(license) from the system directory.
ROM search order (libretro-core.c retro_config_kickstart):
1. Exact filename in system directory
2. Amiga Forever naming (amiga-os-*.rom)
3. TOSEC modified naming (with [!] suffix)
4. TOSEC naming (without [!] suffix)
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:5534-5700,
libretro/libretro-core.c:5786-5945
files:
# -------------------------------------------------------
# Amiga 1000
# -------------------------------------------------------
- name: "kick31034.A1000"
system: commodore-amiga
required: false
hle_fallback: true
size: 262144 # 256 KB
note: "Kickstart 1.1 rev 31.34 (1985) NTSC. A1000 only."
aliases:
- "amiga-os-110-ntsc.rom"
- "Kickstart v1.1 rev 31.34 (1985)(Commodore)(A1000)(NTSC).rom"
source_ref: "libretro/libretro-core.h:170-174"
- name: "kick32034.A1000"
system: commodore-amiga
required: false
hle_fallback: true
size: 262144 # 256 KB
note: "Kickstart 1.1 rev 32.34 (1986) PAL. A1000 only."
aliases:
- "amiga-os-110-pal.rom"
- "Kickstart v1.1 rev 32.34 (1986)(Commodore)(A1000)(PAL).rom"
source_ref: "libretro/libretro-core.h:176-179"
# -------------------------------------------------------
# Amiga 500 / 2000
# -------------------------------------------------------
- name: "kick33180.A500"
system: commodore-amiga
required: false
hle_fallback: true
size: 262144 # 256 KB
note: "Kickstart 1.2 rev 33.180 (1986). A500/A2000. Also used by WHDLoad."
aliases:
- "amiga-os-120.rom"
- "Kickstart v1.2 rev 33.180 (1986)(Commodore)(A500-A2000)[!].rom"
- "Kickstart v1.2 rev 33.180 (1986)(Commodore)(A500-A1000-A2000).rom"
source_ref: "libretro/libretro-core.h:182-185"
- name: "kick34005.A500"
system: commodore-amiga
required: true
size: 262144 # 256 KB
note: "Kickstart 1.3 rev 34.5 (1987). Default for A500/A2000OG/CDTV models. Also used by WHDLoad."
aliases:
- "amiga-os-130.rom"
- "Kickstart v1.3 rev 34.5 (1987)(Commodore)(A500-A1000-A2000-CDTV)[!].rom"
- "Kickstart v1.3 rev 34.5 (1987)(Commodore)(A500-A1000-A2000-CDTV).rom"
source_ref: "libretro/libretro-core.h:187-190"
- name: "kick37175.A500"
system: commodore-amiga
required: false
hle_fallback: true
size: 262144 # 256 KB
note: "Kickstart 2.04 rev 37.175 (1991). Default for A500+ model."
aliases:
- "amiga-os-204.rom"
- "Kickstart v2.04 rev 37.175 (1991)(Commodore)(A500+)[!].rom"
- "Kickstart v2.04 rev 37.175 (1991)(Commodore)(A500+).rom"
source_ref: "libretro/libretro-core.h:192-195"
# -------------------------------------------------------
# Amiga 600
# -------------------------------------------------------
- name: "kick37350.A600"
system: commodore-amiga
required: false
hle_fallback: true
size: 262144 # 256 KB
note: "Kickstart 2.05 rev 37.350 (1992). A600HD."
aliases:
- "amiga-os-205-a600.rom"
- "Kickstart v2.05 rev 37.350 (1992)(Commodore)(A600HD)[!].rom"
source_ref: "libretro/libretro-core.h:198-201"
- name: "kick40063.A600"
system: commodore-amiga
required: false
hle_fallback: true
size: 524288 # 512 KB
note: "Kickstart 3.1 rev 40.63 (1993). Default for A600/A2000 models. Also used by WHDLoad."
aliases:
- "amiga-os-310-a600.rom"
- "Kickstart v3.1 rev 40.63 (1993)(Commodore)(A500-A600-A2000)[!].rom"
- "Kickstart v3.1 rev 40.63 (1993)(Commodore)(A500-A600-A2000).rom"
source_ref: "libretro/libretro-core.h:203-206"
# -------------------------------------------------------
# Amiga 1200
# -------------------------------------------------------
- name: "kick39106.A1200"
system: commodore-amiga
required: false
hle_fallback: true
size: 524288 # 512 KB
note: "Kickstart 3.0 rev 39.106 (1992). A1200."
aliases:
- "amiga-os-300-a1200.rom"
- "Kickstart v3.0 rev 39.106 (1992)(Commodore)(A1200)[!].rom"
source_ref: "libretro/libretro-core.h:209-212"
- name: "kick40068.A1200"
system: commodore-amiga
required: true
size: 524288 # 512 KB
note: "Kickstart 3.1 rev 40.68 (1993). Default for A1200/A1200OG models. Also used by WHDLoad."
aliases:
- "amiga-os-310-a1200.rom"
- "Kickstart v3.1 rev 40.68 (1993)(Commodore)(A1200)[!].rom"
- "Kickstart v3.1 rev 40.68 (1993)(Commodore)(A1200).rom"
source_ref: "libretro/libretro-core.h:214-217"
# -------------------------------------------------------
# Amiga 4000
# -------------------------------------------------------
- name: "kick39106.A4000"
system: commodore-amiga
required: false
hle_fallback: true
size: 524288 # 512 KB
note: "Kickstart 3.0 rev 39.106 (1992). A4000."
aliases:
- "amiga-os-300-a4000.rom"
- "Kickstart v3.0 rev 39.106 (1992)(Commodore)(A4000)[!].rom"
source_ref: "libretro/libretro-core.h:220-223"
- name: "kick40068.A4000"
system: commodore-amiga
required: false
hle_fallback: true
size: 524288 # 512 KB
note: "Kickstart 3.1 rev 40.68 (1993). Default for A4030/A4040 models."
aliases:
- "amiga-os-310-a4000.rom"
- "Kickstart v3.1 rev 40.68 (1993)(Commodore)(A4000).rom"
source_ref: "libretro/libretro-core.h:225-228"
# -------------------------------------------------------
# Commodore CDTV
# -------------------------------------------------------
- name: "kick34005.CDTV"
system: commodore-cdtv
required: true
size: 262144 # 256 KB
note: "CDTV Extended ROM v1.0 (1991). Required as extended ROM for CDTV model. Main kickstart is kick34005.A500."
aliases:
- "amiga-os-130-cdtv-ext.rom"
- "CDTV Extended-ROM v1.0 (1991)(Commodore)(CDTV)[!].rom"
- "CDTV Extended-ROM v1.0 (1992)(Commodore)(CDTV).rom"
source_ref: "libretro/libretro-core.h:231-234"
# -------------------------------------------------------
# Amiga CD32
# -------------------------------------------------------
- name: "kick40060.CD32"
system: commodore-amiga-cd32
required: true
size: 524288 # 512 KB
note: "CD32 Kickstart 3.1 rev 40.60 (1993). Main ROM for CD32 and CD32FR models."
aliases:
- "amiga-os-310-cd32.rom"
- "Kickstart v3.1 rev 40.60 (1993)(Commodore)(CD32).rom"
source_ref: "libretro/libretro-core.h:236-239"
- name: "kick40060.CD32.ext"
system: commodore-amiga-cd32
required: true
size: 524288 # 512 KB
note: "CD32 Extended ROM rev 40.60 (1993). Required when main ROM is <= 512 KB (not combined)."
aliases:
- "amiga-os-310-cd32-ext.rom"
- "CD32 Extended-ROM rev 40.60 (1993)(Commodore)(CD32).rom"
source_ref: "libretro/libretro-core.h:241-244"
# -------------------------------------------------------
# WHDLoad support files
# -------------------------------------------------------
- name: "rom.key"
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:5887-5898"
- name: "WHDLoad.key"
system: commodore-amiga
required: false
note: "WHDLoad license key. Copied to saves/WHDLoad/L/ for registered WHDLoad use."
source_ref: "libretro/libretro-core.c:5903-5916"
- name: "WHDLoad.prefs"
system: commodore-amiga
required: false
note: "WHDLoad preferences. Copied to saves/WHDLoad/S/ when present."
source_ref: "libretro/libretro-core.c:5920-5943"
model_kickstart_map:
A500: {kickstart: "kick34005.A500", ext: null}
A500OG: {kickstart: "kick34005.A500", ext: null}
A500PLUS: {kickstart: "kick37175.A500", ext: null}
A600: {kickstart: "kick40063.A600", ext: null}
A1200: {kickstart: "kick40068.A1200", ext: null}
A1200OG: {kickstart: "kick40068.A1200", ext: null}
A2000: {kickstart: "kick40063.A600", ext: null}
A2000OG: {kickstart: "kick34005.A500", ext: null}
A4030: {kickstart: "kick40068.A4000", ext: null}
A4040: {kickstart: "kick40068.A4000", ext: null}
CDTV: {kickstart: "kick34005.A500", ext: "kick34005.CDTV"}
CD32: {kickstart: "kick40060.CD32", ext: "kick40060.CD32.ext"}
CD32FR: {kickstart: "kick40060.CD32", ext: "kick40060.CD32.ext"}
whdload_kickstarts:
- "kick33180.A500" # KS 1.2, 256 KB
- "kick34005.A500" # KS 1.3, 256 KB
- "kick40063.A600" # KS 3.1, 512 KB
- "kick40068.A1200" # KS 3.1, 512 KB
platform_details:
rom_sizes:
ROM_SIZE_128: 131072 # 128 KB
ROM_SIZE_256: 262144 # 256 KB
ROM_SIZE_512: 524288 # 512 KB
aros_fallback: true
naming_conventions:
standard: "kick{rev}.{model}"
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:2617-2656"

View File

@@ -1,20 +1,21 @@
emulator: PuzzleScript emulator: PuzzleScript
type: game type: game
source: "https://github.com/libretro/puzzlescript-libretro" core_classification: game_engine
profiled_date: "2026-03-18" source: "https://github.com/nwhitehead/pzretro"
core_version: "" upstream: "https://github.com/increpare/PuzzleScript"
display_name: "PuzzleScript (pzretro)" profiled_date: "2026-03-25"
core_version: "0.2.1"
display_name: "PuzzleScript (pzretro)" display_name: "PuzzleScript (pzretro)"
cores: cores:
- puzzlescript - puzzlescript
systems: [] systems: []
notes: | notes: |
Libretro port of PuzzleScript, an open-source HTML5 puzzle game Libretro port of PuzzleScript, an open-source HTML5 puzzle game engine
engine by Stephen Lavelle (increpare). Runs .puz puzzle definition by Stephen Lavelle (increpare). Runs .pz and .pzp puzzle definition files.
files within RetroArch. Also supports PuzzleScript Plus (Auroriax fork) for .pzp files.
No BIOS or system files required. The puzzle engine and renderer The PuzzleScript and PuzzleScript Plus JavaScript engines are compiled into
are self-contained. the binary via QuickJS. No external files required.
files: [] files: []

View File

@@ -1,7 +1,9 @@
emulator: px68k emulator: px68k
type: libretro type: libretro
core_classification: community_fork
source: "https://github.com/libretro/px68k-libretro" source: "https://github.com/libretro/px68k-libretro"
profiled_date: "2026-03-18" upstream: "https://github.com/hissorii/px68k"
profiled_date: "2026-03-25"
core_version: "0.15+" core_version: "0.15+"
display_name: "Sharp - X68000 (PX68k)" display_name: "Sharp - X68000 (PX68k)"
cores: cores:

View File

@@ -1,19 +1,27 @@
emulator: QEMU emulator: QEMU
type: libretro type: libretro
core_classification: community_fork
source: "https://github.com/io12/qemu-libretro" source: "https://github.com/io12/qemu-libretro"
profiled_date: "2026-03-18" upstream: "https://github.com/qemu/qemu"
profiled_date: "2026-03-25"
core_version: "0.1.0" core_version: "0.1.0"
display_name: "QEMU" display_name: "QEMU"
systems: [ibm-pc, x86, x86-64, ppc, sparc, sparc64, arm, aarch64, mips, riscv, s390x, m68k, alpha, hppa] cores: [qemu]
systems: [ibm-pc, x86, x86-64, ppc, ppc64, sparc, sparc64, arm, aarch64, mips, mips64, riscv32, riscv64, s390x, m68k, alpha, hppa]
# QEMU (Quick Emulator) libretro core, based on QEMU 9.0.50. # QEMU (Quick Emulator) libretro core, based on QEMU 9.0.50.
# Supports x86_64, i386, PPC, Sparc, ARM, AArch64, MIPS, RISC-V, S390x, M68K, Alpha, HPPA. # Builds 17 targets: aarch64, alpha, arm, i386, m68k, mips(el), mips64(el),
# Opens .iso, .img, .qcow, .qcow2 files or custom .qemu_cmd_line for any architecture. # ppc, ppc64, riscv32, riscv64, s390x, sparc, sparc64, x86_64.
# Opens .iso, .img, .qcow, .qcow2 or custom .qemu_cmd_line for any architecture.
# Default architecture is x86_64 when loading .iso/.img/.qcow directly. # Default architecture is x86_64 when loading .iso/.img/.qcow directly.
# #
# All BIOS/firmware files are loaded from {retroarch_system_dir}/qemu/ # All BIOS/firmware files are loaded from {retroarch_system_dir}/qemu/
# via qemu_add_data_dir(system_dir + "/qemu") in ui/libretro.c:659-660. # via qemu_add_data_dir(system_dir + "/qemu") in ui/libretro.c:659-660.
# QEMU resolves firmware by name through its data directory search path. # QEMU resolves firmware by name through its data directory search path.
# No hash/size validation is performed on any firmware file.
#
# .info declares firmware_count=0. All firmware is loaded by QEMU's internal
# machine/device code, not declared in the .info.
files: files:
# ======================================================== # ========================================================
@@ -58,9 +66,7 @@ files:
md5: "387c48aef9497c6c2b914b1e6b9bc7aa" md5: "387c48aef9497c6c2b914b1e6b9bc7aa"
size: 16384 size: 16384
required: false required: false
note: > note: "Minimal x86 firmware for fast Linux kernel booting."
Minimal x86 firmware for fast Linux kernel booting.
Alternative to SeaBIOS for Linux-only workloads.
source_ref: "pc-bios/meson.build:32" source_ref: "pc-bios/meson.build:32"
# ======================================================== # ========================================================
@@ -83,9 +89,7 @@ files:
md5: "fcd3d3c0b07a9096693d69425cd940f6" md5: "fcd3d3c0b07a9096693d69425cd940f6"
size: 38912 size: 38912
required: false required: false
note: > note: "Cirrus Logic GD5446 VGA BIOS."
Cirrus Logic GD5446 VGA BIOS. Used by the cirrus-vga PCI
device and cirrus-vga-isa ISA device.
source_ref: "hw/display/cirrus_vga.c:3001, hw/display/cirrus_vga_isa.c:67" source_ref: "hw/display/cirrus_vga.c:3001, hw/display/cirrus_vga_isa.c:67"
- name: "VGA BIOS stdvga" - name: "VGA BIOS stdvga"
@@ -94,9 +98,7 @@ files:
md5: "8117c3fd986fbbe327badfe38e77db1d" md5: "8117c3fd986fbbe327badfe38e77db1d"
size: 39424 size: 39424
required: false required: false
note: > note: "Standard VGA PCI BIOS (Bochs VBE extensions)."
Standard VGA PCI BIOS (Bochs VBE extensions). Used by the
VGA PCI device, the most common display adapter for x86.
source_ref: "hw/display/vga-pci.c:387" source_ref: "hw/display/vga-pci.c:387"
- name: "VGA BIOS bochs-display" - name: "VGA BIOS bochs-display"
@@ -105,7 +107,7 @@ files:
md5: "83e39bd3e056291ee50d2b5d937bab3e" md5: "83e39bd3e056291ee50d2b5d937bab3e"
size: 28672 size: 28672
required: false required: false
note: "Bochs display device VGA BIOS. Simpler non-VGA display adapter." note: "Bochs display device VGA BIOS."
source_ref: "hw/display/bochs-display.c:365" source_ref: "hw/display/bochs-display.c:365"
- name: "VGA BIOS ramfb" - name: "VGA BIOS ramfb"
@@ -114,7 +116,7 @@ files:
md5: "c55512e313c4cb08ec5a36198fdfef33" md5: "c55512e313c4cb08ec5a36198fdfef33"
size: 28672 size: 28672
required: false required: false
note: "RAM framebuffer VGA BIOS for simple display output." note: "RAM framebuffer VGA BIOS."
source_ref: "hw/display/ramfb.c:150" source_ref: "hw/display/ramfb.c:150"
- name: "VGA BIOS ATI" - name: "VGA BIOS ATI"
@@ -154,7 +156,7 @@ files:
source_ref: "hw/display/vmware_vga.c:1349" source_ref: "hw/display/vmware_vga.c:1349"
# ======================================================== # ========================================================
# x86 OPTION ROMs (loaded on demand) # x86 OPTION ROMs
# ======================================================== # ========================================================
- name: "KVM VAPIC" - name: "KVM VAPIC"
path: "qemu/kvmvapic.bin" path: "qemu/kvmvapic.bin"
@@ -162,9 +164,7 @@ files:
md5: "b8cec9572e408a3259914f9aba8664cb" md5: "b8cec9572e408a3259914f9aba8664cb"
size: 9216 size: 9216
required: false required: false
note: > note: "KVM virtual APIC option ROM for APIC acceleration on x86."
KVM virtual APIC option ROM. Loaded as option ROM for
APIC acceleration on x86.
source_ref: "hw/i386/vapic.c:733" source_ref: "hw/i386/vapic.c:733"
- name: "Linux boot ROM" - name: "Linux boot ROM"
@@ -200,7 +200,7 @@ files:
md5: "e942cc4f612050c7331d33a34b0d5192" md5: "e942cc4f612050c7331d33a34b0d5192"
size: 1024 size: 1024
required: false required: false
note: "DMA-capable option ROM for Multiboot kernel loading." note: "DMA-capable Multiboot option ROM."
source_ref: "hw/i386/multiboot.c:406" source_ref: "hw/i386/multiboot.c:406"
- name: "PVH boot ROM" - name: "PVH boot ROM"
@@ -213,7 +213,7 @@ files:
source_ref: "hw/i386/x86-common.c:735" source_ref: "hw/i386/x86-common.c:735"
# ======================================================== # ========================================================
# PXE NETWORK BOOT ROMs (iPXE) # PXE NETWORK BOOT ROMs (iPXE legacy BIOS)
# ======================================================== # ========================================================
- name: "PXE e1000" - name: "PXE e1000"
path: "qemu/pxe-e1000.rom" path: "qemu/pxe-e1000.rom"
@@ -222,7 +222,7 @@ files:
size: 67072 size: 67072
required: false required: false
note: "iPXE PXE boot ROM for Intel e1000 NIC (8086:100e)." note: "iPXE PXE boot ROM for Intel e1000 NIC (8086:100e)."
source_ref: "pc-bios/README" source_ref: "pc-bios/meson.build:47"
- name: "PXE eepro100" - name: "PXE eepro100"
path: "qemu/pxe-eepro100.rom" path: "qemu/pxe-eepro100.rom"
@@ -230,8 +230,8 @@ files:
md5: "2f8279177fdc2ce5abc47d9f1e303db1" md5: "2f8279177fdc2ce5abc47d9f1e303db1"
size: 61440 size: 61440
required: false required: false
note: "iPXE PXE boot ROM for Intel eepro100 NIC (8086:1209)." note: "iPXE PXE boot ROM for Intel eepro100 NIC (8086:1209). Device default romfile."
source_ref: "pc-bios/README" source_ref: "hw/net/eepro100.c:2077"
- name: "PXE ne2k_pci" - name: "PXE ne2k_pci"
path: "qemu/pxe-ne2k_pci.rom" path: "qemu/pxe-ne2k_pci.rom"
@@ -240,7 +240,7 @@ files:
size: 61440 size: 61440
required: false required: false
note: "iPXE PXE boot ROM for NE2000 PCI NIC (1050:0940)." note: "iPXE PXE boot ROM for NE2000 PCI NIC (1050:0940)."
source_ref: "pc-bios/README" source_ref: "pc-bios/meson.build:49"
- name: "PXE pcnet" - name: "PXE pcnet"
path: "qemu/pxe-pcnet.rom" path: "qemu/pxe-pcnet.rom"
@@ -249,7 +249,7 @@ files:
size: 61440 size: 61440
required: false required: false
note: "iPXE PXE boot ROM for AMD PCnet NIC (1022:2000)." note: "iPXE PXE boot ROM for AMD PCnet NIC (1022:2000)."
source_ref: "pc-bios/README" source_ref: "pc-bios/meson.build:50"
- name: "PXE rtl8139" - name: "PXE rtl8139"
path: "qemu/pxe-rtl8139.rom" path: "qemu/pxe-rtl8139.rom"
@@ -258,7 +258,7 @@ files:
size: 61440 size: 61440
required: false required: false
note: "iPXE PXE boot ROM for Realtek RTL8139 NIC (10ec:8139)." note: "iPXE PXE boot ROM for Realtek RTL8139 NIC (10ec:8139)."
source_ref: "pc-bios/README" source_ref: "pc-bios/meson.build:51"
- name: "PXE virtio" - name: "PXE virtio"
path: "qemu/pxe-virtio.rom" path: "qemu/pxe-virtio.rom"
@@ -267,7 +267,7 @@ files:
size: 60416 size: 60416
required: false required: false
note: "iPXE PXE boot ROM for VirtIO NIC (1af4:1000)." note: "iPXE PXE boot ROM for VirtIO NIC (1af4:1000)."
source_ref: "pc-bios/README" source_ref: "pc-bios/meson.build:52"
# ======================================================== # ========================================================
# EFI NETWORK BOOT ROMs (iPXE UEFI) # EFI NETWORK BOOT ROMs (iPXE UEFI)
@@ -278,7 +278,7 @@ files:
md5: "d8330b99643e31b51e7710fa26c7e859" md5: "d8330b99643e31b51e7710fa26c7e859"
size: 159232 size: 159232
required: false required: false
note: "iPXE EFI boot ROM for Intel e1000 NIC." note: "iPXE EFI boot ROM for Intel e1000 NIC. Device default romfile."
source_ref: "hw/net/e1000.c:1708" source_ref: "hw/net/e1000.c:1708"
- name: "EFI e1000e" - name: "EFI e1000e"
@@ -287,7 +287,7 @@ files:
md5: "a55bf3f4988d4a736c71a1300636cd69" md5: "a55bf3f4988d4a736c71a1300636cd69"
size: 159232 size: 159232
required: false required: false
note: "iPXE EFI boot ROM for Intel e1000e NIC." note: "iPXE EFI boot ROM for Intel e1000e NIC. Device default romfile."
source_ref: "hw/net/e1000e.c:689" source_ref: "hw/net/e1000e.c:689"
- name: "EFI eepro100" - name: "EFI eepro100"
@@ -297,7 +297,7 @@ files:
size: 159232 size: 159232
required: false required: false
note: "iPXE EFI boot ROM for Intel eepro100 NIC." note: "iPXE EFI boot ROM for Intel eepro100 NIC."
source_ref: "hw/net/eepro100.c:2077" source_ref: "pc-bios/meson.build:54"
- name: "EFI ne2k_pci" - name: "EFI ne2k_pci"
path: "qemu/efi-ne2k_pci.rom" path: "qemu/efi-ne2k_pci.rom"
@@ -305,7 +305,7 @@ files:
md5: "10b66275b3644af301c64a3c545c3daf" md5: "10b66275b3644af301c64a3c545c3daf"
size: 157696 size: 157696
required: false required: false
note: "iPXE EFI boot ROM for NE2000 PCI NIC." note: "iPXE EFI boot ROM for NE2000 PCI NIC. Device default romfile."
source_ref: "hw/net/ne2000-pci.c:111" source_ref: "hw/net/ne2000-pci.c:111"
- name: "EFI pcnet" - name: "EFI pcnet"
@@ -314,7 +314,7 @@ files:
md5: "374696f4fffa83c9cf18272212c21d83" md5: "374696f4fffa83c9cf18272212c21d83"
size: 157696 size: 157696
required: false required: false
note: "iPXE EFI boot ROM for AMD PCnet NIC." note: "iPXE EFI boot ROM for AMD PCnet NIC. Device default romfile."
source_ref: "hw/net/pcnet-pci.c:267" source_ref: "hw/net/pcnet-pci.c:267"
- name: "EFI rtl8139" - name: "EFI rtl8139"
@@ -323,7 +323,7 @@ files:
md5: "f81dbbd7001a8db631f2a548b7d08c4e" md5: "f81dbbd7001a8db631f2a548b7d08c4e"
size: 160768 size: 160768
required: false required: false
note: "iPXE EFI boot ROM for Realtek RTL8139 NIC." note: "iPXE EFI boot ROM for Realtek RTL8139 NIC. Device default romfile."
source_ref: "hw/net/rtl8139.c:3423" source_ref: "hw/net/rtl8139.c:3423"
- name: "EFI virtio" - name: "EFI virtio"
@@ -332,8 +332,8 @@ files:
md5: "d3887f04c23035cae3f0e1075deea459" md5: "d3887f04c23035cae3f0e1075deea459"
size: 160768 size: 160768
required: false required: false
note: "iPXE EFI boot ROM for VirtIO NIC." note: "iPXE EFI boot ROM for VirtIO NIC. Device default romfile."
source_ref: "pc-bios/meson.build:58" source_ref: "hw/virtio/virtio-net-pci.c:73"
- name: "EFI vmxnet3" - name: "EFI vmxnet3"
path: "qemu/efi-vmxnet3.rom" path: "qemu/efi-vmxnet3.rom"
@@ -341,57 +341,132 @@ files:
md5: "ea1ba222dbd5aa356ea1f29393ae55e1" md5: "ea1ba222dbd5aa356ea1f29393ae55e1"
size: 156672 size: 156672
required: false required: false
note: "iPXE EFI boot ROM for VMware vmxnet3 NIC." note: "iPXE EFI boot ROM for VMware vmxnet3 NIC. Device default romfile."
source_ref: "hw/net/vmxnet3.c:2508" source_ref: "hw/net/vmxnet3.c:2508"
# ========================================================
# EDK2 UEFI FIRMWARE
# ========================================================
- name: "EDK2 x86_64 UEFI"
path: "qemu/edk2-x86_64-code.fd"
sha1: "eac1a94b8e0d7c53fd5df001c36794ec34c7c724"
size: 3653632
required: false
note: "TianoCore UEFI firmware for x86_64. Built from edk2-stable202302."
source_ref: "pc-bios/meson.build:12"
- name: "EDK2 x86_64 Secure Boot UEFI"
path: "qemu/edk2-x86_64-secure-code.fd"
sha1: "617abe2746696bb4a309d72cecb446dc76a2a61e"
size: 3653632
required: false
note: "TianoCore UEFI firmware for x86_64 with Secure Boot support."
source_ref: "pc-bios/meson.build:13"
- name: "EDK2 i386 UEFI"
path: "qemu/edk2-i386-code.fd"
sha1: "45b8faebdfaaf19d16e3a7c5f60d69214685071c"
size: 3653632
required: false
note: "TianoCore UEFI firmware for i386."
source_ref: "pc-bios/meson.build:9"
- name: "EDK2 i386 Secure Boot UEFI"
path: "qemu/edk2-i386-secure-code.fd"
sha1: "6982abec8ef2ed7c8293163d5a0bd69a01a2126f"
size: 3653632
required: false
note: "TianoCore UEFI firmware for i386 with Secure Boot support."
source_ref: "pc-bios/meson.build:10"
- name: "EDK2 i386 UEFI vars template"
path: "qemu/edk2-i386-vars.fd"
sha1: "b62e676c9317a32aaa9ee1d76268d8c55663bd6e"
size: 540672
required: false
note: "UEFI variable store template for i386/x86_64 EDK2 firmware."
source_ref: "pc-bios/meson.build:11"
- name: "EDK2 AArch64 UEFI"
path: "qemu/edk2-aarch64-code.fd"
sha1: "514edbce58bfa877170673c1799351a7dab3b6df"
size: 67108864
required: false
note: "TianoCore UEFI firmware for AArch64 (ARM 64-bit)."
source_ref: "pc-bios/meson.build:4"
- name: "EDK2 ARM UEFI"
path: "qemu/edk2-arm-code.fd"
sha1: "c20f01c28b59b388abb9d0febeec45d801a632f0"
size: 67108864
required: false
note: "TianoCore UEFI firmware for ARM (32-bit)."
source_ref: "pc-bios/meson.build:5"
- name: "EDK2 ARM UEFI vars template"
path: "qemu/edk2-arm-vars.fd"
sha1: "b051167e0e57bd13d77ed92ef7b474872f44ec6d"
size: 67108864
required: false
note: "UEFI variable store template for ARM/AArch64 EDK2 firmware."
source_ref: "pc-bios/meson.build:6"
- name: "EDK2 RISC-V UEFI"
path: "qemu/edk2-riscv-code.fd"
sha1: "2c8633d881ece0c4794d740138a318f7e9af480c"
size: 33554432
required: false
note: "TianoCore UEFI firmware for RISC-V 64-bit."
source_ref: "pc-bios/meson.build:7"
- name: "EDK2 RISC-V UEFI vars template"
path: "qemu/edk2-riscv-vars.fd"
sha1: "c4e6cce4247ba8f32f528c1c69f49228f616677f"
size: 33554432
required: false
note: "UEFI variable store template for RISC-V EDK2 firmware."
source_ref: "pc-bios/meson.build:8"
# ======================================================== # ========================================================
# POWERPC FIRMWARE # POWERPC FIRMWARE
# ======================================================== # ========================================================
- name: "OpenBIOS PowerPC" - name: "OpenBIOS PowerPC"
path: "qemu/openbios-ppc" path: "qemu/openbios-ppc"
sha1: "0ef5051dcb318c0bc45d1908f8318d6eece8686a" sha1: "0ef5051dcb318c0bc45d1908f8318d6eece8686a"
md5: ""
size: 677196 size: 677196
required: false required: false
note: > note: >
OpenBIOS (IEEE 1275 Open Firmware) for PowerPC emulation. OpenBIOS (IEEE 1275 Open Firmware) for PowerPC emulation.
Required for -M mac99, -M g3beige and other PPC machines. Default for -M mac99, -M g3beige and other PPC machines.
source_ref: "pc-bios/README" source_ref: "hw/ppc/mac_oldworld.c:60, hw/ppc/mac_newworld.c:86"
- name: "SLOF (Slimline Open Firmware)" - name: "SLOF (Slimline Open Firmware)"
path: "qemu/slof.bin" path: "qemu/slof.bin"
sha1: "a03a94acfe555804d66cc6c74760ae1375a71a64" sha1: "a03a94acfe555804d66cc6c74760ae1375a71a64"
md5: ""
size: 995000 size: 995000
required: false required: false
note: > note: "IBM SLOF firmware for pSeries (POWER) machine type. Built from qemu-slof-20230918."
IBM SLOF firmware for pSeries (POWER) machine type. source_ref: "hw/ppc/spapr.c:106"
Built from qemu-slof-20230918 tag.
source_ref: "pc-bios/README"
- name: "skiboot" - name: "skiboot"
path: "qemu/skiboot.lid" path: "qemu/skiboot.lid"
sha1: "8052069aa9714c23be05b4e62fb245a3d572cb0f" sha1: "8052069aa9714c23be05b4e62fb245a3d572cb0f"
md5: ""
size: 2527328 size: 2527328
required: false required: false
note: > note: "OPAL firmware for OpenPOWER PowerNV (non-virtualized) machine type."
OPAL firmware for OpenPOWER PowerNV (non-virtualized) machine type. source_ref: "hw/ppc/pnv.c:63"
source_ref: "pc-bios/README"
- name: "VOF (Virtual Open Firmware)" - name: "VOF (Virtual Open Firmware)"
path: "qemu/vof.bin" path: "qemu/vof.bin"
sha1: "fc737b34a390f5752cb7e35b33d71f4f438ab607" sha1: "fc737b34a390f5752cb7e35b33d71f4f438ab607"
md5: ""
size: 3456 size: 3456
required: false required: false
note: "Minimal Open Firmware shim for -machine pseries,x-vof=on." note: "Minimal Open Firmware shim for -machine pseries,x-vof=on. Also default for Pegasos II."
source_ref: "pc-bios/README" source_ref: "hw/ppc/spapr.c:107, hw/ppc/pegasos2.c:43"
- name: "VOF NVRAM" - name: "VOF NVRAM"
path: "qemu/vof-nvram.bin" path: "qemu/vof-nvram.bin"
sha1: "5d1184609b87f78635f0575467a1c3f440900ff0" sha1: "5d1184609b87f78635f0575467a1c3f440900ff0"
md5: ""
size: 16384 size: 16384
required: false required: false
note: "NVRAM template for VOF (Virtual Open Firmware)." note: "NVRAM template for VOF (Virtual Open Firmware)."
@@ -400,18 +475,14 @@ files:
- name: "U-Boot e500" - name: "U-Boot e500"
path: "qemu/u-boot.e500" path: "qemu/u-boot.e500"
sha1: "9ea03f249f856cdcb4399cc1f5a5031729379911" sha1: "9ea03f249f856cdcb4399cc1f5a5031729379911"
md5: ""
size: 421720 size: 421720
required: false required: false
note: > note: "U-Boot for PowerPC e500 (qemu-ppce500 target). Built from upstream denx u-boot, commit 2072e72."
U-Boot for PowerPC e500 (qemu-ppce500 target). source_ref: "hw/ppc/e500.c:1184"
Built from upstream denx u-boot, commit 2072e72.
source_ref: "pc-bios/README"
- name: "U-Boot SAM460" - name: "U-Boot SAM460"
path: "qemu/u-boot-sam460-20100605.bin" path: "qemu/u-boot-sam460-20100605.bin"
sha1: "0399a79ac0cf77f0da70af9baec7548a3b368f0a" sha1: "0399a79ac0cf77f0da70af9baec7548a3b368f0a"
md5: ""
size: 524288 size: 524288
required: false required: false
note: "U-Boot for Sam460ex (AmigaOne) PowerPC board." note: "U-Boot for Sam460ex (AmigaOne) PowerPC board."
@@ -420,11 +491,10 @@ files:
- name: "QEMU VGA Mac driver" - name: "QEMU VGA Mac driver"
path: "qemu/qemu_vga.ndrv" path: "qemu/qemu_vga.ndrv"
sha1: "638c6262a6eb579ec3d1c9292566ac94c942dc15" sha1: "638c6262a6eb579ec3d1c9292566ac94c942dc15"
md5: ""
size: 18752 size: 18752
required: false required: false
note: "QemuMacDrivers VGA driver for PPC MacOS guests." note: "QemuMacDrivers VGA driver for PPC MacOS guests."
source_ref: "pc-bios/README" source_ref: "hw/ppc/mac_oldworld.c:58, hw/ppc/mac_newworld.c:84"
# ======================================================== # ========================================================
# SPARC FIRMWARE # SPARC FIRMWARE
@@ -432,38 +502,41 @@ files:
- name: "OpenBIOS Sparc32" - name: "OpenBIOS Sparc32"
path: "qemu/openbios-sparc32" path: "qemu/openbios-sparc32"
sha1: "5a4f2124c8f093f8aee99fbcebcf5d17d789ff26" sha1: "5a4f2124c8f093f8aee99fbcebcf5d17d789ff26"
md5: ""
size: 382080 size: 382080
required: false required: false
note: > note: "OpenBIOS for Sparc32 emulation (sun4m)."
OpenBIOS for Sparc32 emulation. Includes QEMU,tcx.bin source_ref: "hw/sparc/sun4m.c:79"
and QEMU,cgthree.bin display drivers.
source_ref: "pc-bios/README"
- name: "OpenBIOS Sparc64" - name: "OpenBIOS Sparc64"
path: "qemu/openbios-sparc64" path: "qemu/openbios-sparc64"
sha1: "c6e215fe460629d35688ab8e51faf6f765827cd6" sha1: "c6e215fe460629d35688ab8e51faf6f765827cd6"
md5: ""
size: 1593408 size: 1593408
required: false required: false
note: "OpenBIOS for Sparc64 (UltraSPARC) emulation." note: "OpenBIOS for Sparc64 (UltraSPARC) emulation (sun4u)."
source_ref: "pc-bios/README" source_ref: "hw/sparc64/sun4u.c:67"
- name: "QEMU TCX display" - name: "QEMU TCX display"
path: "qemu/QEMU,tcx.bin" path: "qemu/QEMU,tcx.bin"
sha1: "" sha1: "5f1792a73ee47d78b2160191ecb2c92f353f93ad"
md5: "" size: 1402
required: false required: false
note: "TCX framebuffer FCode driver for Sparc32 OpenBIOS." note: "TCX framebuffer FCode driver for Sparc32 OpenBIOS."
source_ref: "pc-bios/meson.build:45" source_ref: "hw/display/tcx.c:38,827"
- name: "QEMU cgthree display" - name: "QEMU cgthree display"
path: "qemu/QEMU,cgthree.bin" path: "qemu/QEMU,cgthree.bin"
sha1: "" sha1: "619b86fb02faf8f682474be3f0653b58015008ba"
md5: "" size: 850
required: false required: false
note: "CG3 framebuffer FCode driver for Sparc32 OpenBIOS." note: "CG3 framebuffer FCode driver for Sparc32 OpenBIOS."
source_ref: "pc-bios/meson.build:46" source_ref: "hw/display/cg3.c:44,303"
- name: "U-Boot LEON3"
path: "qemu/u-boot.bin"
sha1: ""
required: false
note: "U-Boot for LEON3 SPARC board. Not shipped with QEMU, user-supplied."
source_ref: "hw/sparc/leon3.c:53"
# ======================================================== # ========================================================
# ALPHA FIRMWARE # ALPHA FIRMWARE
@@ -471,11 +544,10 @@ files:
- name: "Alpha PALcode" - name: "Alpha PALcode"
path: "qemu/palcode-clipper" path: "qemu/palcode-clipper"
sha1: "47b0870aaa45a7aa0d48847fd905908fb06f3e9f" sha1: "47b0870aaa45a7aa0d48847fd905908fb06f3e9f"
md5: ""
size: 153728 size: 153728
required: false required: false
note: "PALcode firmware for Alpha (Clipper/DP264) machine emulation." note: "PALcode firmware for Alpha (Clipper/DP264) machine emulation."
source_ref: "pc-bios/README" source_ref: "hw/alpha/dp264.c:139"
# ======================================================== # ========================================================
# RISC-V FIRMWARE # RISC-V FIRMWARE
@@ -483,24 +555,18 @@ files:
- name: "OpenSBI RISC-V 32" - name: "OpenSBI RISC-V 32"
path: "qemu/opensbi-riscv32-generic-fw_dynamic.bin" path: "qemu/opensbi-riscv32-generic-fw_dynamic.bin"
sha1: "7a23dfdeef3d78ffc89d86e89fc06a36f1e4386f" sha1: "7a23dfdeef3d78ffc89d86e89fc06a36f1e4386f"
md5: ""
size: 268312 size: 268312
required: false required: false
note: > note: "OpenSBI (Supervisor Binary Interface) firmware for RISC-V 32-bit."
OpenSBI (Supervisor Binary Interface) firmware for RISC-V 32-bit. source_ref: "hw/riscv/boot.c:92"
Required for riscv32-softmmu machine types.
source_ref: "pc-bios/README"
- name: "OpenSBI RISC-V 64" - name: "OpenSBI RISC-V 64"
path: "qemu/opensbi-riscv64-generic-fw_dynamic.bin" path: "qemu/opensbi-riscv64-generic-fw_dynamic.bin"
sha1: "6883bfd1991c0ef0d67b0967e7dcbd60420dd480" sha1: "6883bfd1991c0ef0d67b0967e7dcbd60420dd480"
md5: ""
size: 272504 size: 272504
required: false required: false
note: > note: "OpenSBI firmware for RISC-V 64-bit."
OpenSBI firmware for RISC-V 64-bit. source_ref: "hw/riscv/boot.c:92"
Required for riscv64-softmmu machine types.
source_ref: "pc-bios/README"
# ======================================================== # ========================================================
# S390X FIRMWARE # S390X FIRMWARE
@@ -508,20 +574,18 @@ files:
- name: "S390 CCW firmware" - name: "S390 CCW firmware"
path: "qemu/s390-ccw.img" path: "qemu/s390-ccw.img"
sha1: "7b4fa888d32ca8ddbc752f7442e4d055cee1871a" sha1: "7b4fa888d32ca8ddbc752f7442e4d055cee1871a"
md5: ""
size: 42608 size: 42608
required: false required: false
note: "Channel Command Word boot firmware for s390x emulation." note: "Channel Command Word boot firmware for s390x emulation."
source_ref: "pc-bios/meson.build:68" source_ref: "hw/s390x/ipl.c:149"
- name: "S390 network boot" - name: "S390 network boot"
path: "qemu/s390-netboot.img" path: "qemu/s390-netboot.img"
sha1: "f6cec671408117bd9a31e982682662f27ef4fb2c" sha1: "f6cec671408117bd9a31e982682662f27ef4fb2c"
md5: ""
size: 67232 size: 67232
required: false required: false
note: "Network boot firmware for s390x emulation." note: "Network boot firmware for s390x emulation."
source_ref: "pc-bios/meson.build:69" source_ref: "hw/s390x/ipl.c:497"
# ======================================================== # ========================================================
# HP-PA FIRMWARE # HP-PA FIRMWARE
@@ -529,20 +593,77 @@ files:
- name: "HP-PA firmware (32-bit)" - name: "HP-PA firmware (32-bit)"
path: "qemu/hppa-firmware.img" path: "qemu/hppa-firmware.img"
sha1: "605c36ede6c120c6cc7efe147a75a3dc4b7e4fb0" sha1: "605c36ede6c120c6cc7efe147a75a3dc4b7e4fb0"
md5: ""
size: 167820 size: 167820
required: false required: false
note: "SeaBIOS-hppa firmware for 32-bit HP-PARISC emulation." note: "SeaBIOS-hppa firmware for 32-bit HP-PARISC emulation."
source_ref: "pc-bios/README" source_ref: "hw/hppa/machine.c:424"
- name: "HP-PA firmware (64-bit)" - name: "HP-PA firmware (64-bit)"
path: "qemu/hppa-firmware64.img" path: "qemu/hppa-firmware64.img"
sha1: "b42f6d4ca74073de6c038579b4a9323ad0a6b398" sha1: "b42f6d4ca74073de6c038579b4a9323ad0a6b398"
md5: ""
size: 206024 size: 206024
required: false required: false
note: "SeaBIOS-hppa firmware for 64-bit HP-PARISC emulation." note: "SeaBIOS-hppa firmware for 64-bit HP-PARISC emulation."
source_ref: "pc-bios/README" source_ref: "hw/hppa/machine.c:424"
# ========================================================
# MIPS FIRMWARE (not shipped, user-supplied)
# ========================================================
- name: "MIPS BIOS (big-endian)"
path: "qemu/mips_bios.bin"
sha1: ""
required: false
note: "Default BIOS for big-endian MIPS machines (Malta, MIPSsim, Jazz). Not shipped with QEMU."
source_ref: "hw/mips/malta.c:97"
- name: "MIPS BIOS (little-endian)"
path: "qemu/mipsel_bios.bin"
sha1: ""
required: false
note: "Default BIOS for little-endian MIPS machines (Malta, MIPSsim, Jazz). Not shipped with QEMU."
source_ref: "hw/mips/malta.c:99"
- name: "Loongson3 BIOS"
path: "qemu/bios_loongson3.bin"
sha1: ""
required: false
note: "Default BIOS for Loongson3 virtual MIPS machine. Not shipped with QEMU."
source_ref: "hw/mips/loongson3_virt.c:63"
- name: "PMON Fuloong2e"
path: "qemu/pmon_2e.bin"
sha1: ""
required: false
note: "PMON monitor for Fuloong2e MIPS board. Not shipped with QEMU."
source_ref: "hw/mips/fuloong2e.c:58"
# ========================================================
# M68K FIRMWARE (not shipped, user-supplied)
# ========================================================
- name: "Macintosh ROM"
path: "qemu/MacROM.bin"
sha1: ""
required: false
note: "Apple Macintosh ROM for Quadra 800 emulation. Not shipped with QEMU."
source_ref: "hw/m68k/q800.c:62"
# ========================================================
# ARM FIRMWARE (non-NPCM7xx, not shipped)
# ========================================================
- name: "Canon A1100 ROM"
path: "qemu/canon-a1100-rom1.bin"
sha1: ""
required: false
note: "Canon PowerShot A1100 IS DIGIC camera ROM. Not shipped with QEMU."
source_ref: "hw/arm/digic_boards.c:131"
- name: "NPCM7xx boot ROM"
path: "qemu/npcm7xx_bootrom.bin"
sha1: "22a75d26a0591d2c7763765b6381fa2f73de43e1"
size: 768
required: false
note: "Boot ROM for Nuvoton NPCM7xx BMC (ARM Cortex-A9)."
source_ref: "hw/arm/npcm7xx_boards.c:56"
# ======================================================== # ========================================================
# DEVICE TREE BLOBS # DEVICE TREE BLOBS
@@ -550,50 +671,41 @@ files:
- name: "Bamboo DTB (PPC)" - name: "Bamboo DTB (PPC)"
path: "qemu/bamboo.dtb" path: "qemu/bamboo.dtb"
sha1: "ebdf1745479f4ec88459bbd9ef16ee1114018508" sha1: "ebdf1745479f4ec88459bbd9ef16ee1114018508"
md5: ""
size: 3211 size: 3211
required: false required: false
note: "Device tree blob for PowerPC Bamboo (440EP) board." note: "Device tree blob for PowerPC Bamboo (440EP) board."
source_ref: "pc-bios/meson.build:88" source_ref: "hw/ppc/ppc440_bamboo.c:38"
- name: "Canyonlands DTB (PPC)" - name: "Canyonlands DTB (PPC)"
path: "qemu/canyonlands.dtb" path: "qemu/canyonlands.dtb"
sha1: "8a2fda0b4f23a92eb44776b5d7ffe951987062da" sha1: "8a2fda0b4f23a92eb44776b5d7ffe951987062da"
md5: ""
size: 9779 size: 9779
required: false required: false
note: "Device tree blob for PowerPC Canyonlands (460EX) board." note: "Device tree blob for PowerPC Canyonlands (460EX) / Sam460ex board."
source_ref: "pc-bios/meson.build:89" source_ref: "hw/ppc/sam460ex.c:45"
- name: "Petalogix ML605 DTB (MicroBlaze)" - name: "Petalogix ML605 DTB (MicroBlaze)"
path: "qemu/petalogix-ml605.dtb" path: "qemu/petalogix-ml605.dtb"
sha1: "892d265838866869b8a8ef104252ff5b2fda156f" sha1: "892d265838866869b8a8ef104252ff5b2fda156f"
md5: ""
size: 9882 size: 9882
required: false required: false
note: "Device tree blob for Xilinx Petalogix ML605 MicroBlaze board." note: "Device tree blob for Xilinx Petalogix ML605 MicroBlaze board. MicroBlaze target not built in libretro core."
source_ref: "pc-bios/meson.build:91" source_ref: "pc-bios/meson.build:91"
- name: "Petalogix S3ADSP1800 DTB (MicroBlaze)" - name: "Petalogix S3ADSP1800 DTB (MicroBlaze)"
path: "qemu/petalogix-s3adsp1800.dtb" path: "qemu/petalogix-s3adsp1800.dtb"
sha1: "976600e3f89ecc1f3564b7077f53c58e0b565280" sha1: "976600e3f89ecc1f3564b7077f53c58e0b565280"
md5: ""
size: 8161 size: 8161
required: false required: false
note: "Device tree blob for Xilinx Petalogix S3ADSP1800 MicroBlaze board." note: "Device tree blob for Xilinx Petalogix S3ADSP1800 MicroBlaze board. MicroBlaze target not built in libretro core."
source_ref: "pc-bios/meson.build:90" source_ref: "pc-bios/meson.build:90"
# ======================================================== - name: "Virtex ML507 DTB (PPC)"
# OTHER path: "qemu/virtex-ml507.dtb"
# ======================================================== sha1: ""
- name: "NPCM7xx boot ROM"
path: "qemu/npcm7xx_bootrom.bin"
sha1: "22a75d26a0591d2c7763765b6381fa2f73de43e1"
md5: ""
size: 768
required: false required: false
note: "Boot ROM for Nuvoton NPCM7xx BMC (ARM Cortex-A9)." note: "Device tree blob for Xilinx Virtex ML507 PowerPC board. Not shipped with QEMU."
source_ref: "pc-bios/README" source_ref: "hw/ppc/virtex_ml507.c:148"
notes: notes:
bios_directory: > bios_directory: >
@@ -605,10 +717,12 @@ notes:
Other VGA BIOS variants are loaded depending on the emulated GPU. Other VGA BIOS variants are loaded depending on the emulated GPU.
PXE/EFI ROMs are only needed for network booting. PXE/EFI ROMs are only needed for network booting.
multi_arch: > multi_arch: >
The libretro build supports 16 target architectures. Non-x86 firmware The libretro build targets 17 architectures. Non-x86 firmware
is only needed when using .qemu_cmd_line files that invoke a different is only needed when using .qemu_cmd_line files that invoke a different
qemu-system-* binary (e.g. qemu-system-ppc for MacOS 9). qemu-system-* binary (e.g. qemu-system-ppc for MacOS 9).
experimental: > edk2: >
This core is marked is_experimental=true in its .info file. EDK2 UEFI firmware is shipped as bz2-compressed blobs in pc-bios/. These
Savestates are not supported. provide UEFI boot for x86, ARM, and RISC-V machine types. Users specify
them via -bios or pflash in .qemu_cmd_line files.
experimental: "This core is marked is_experimental=true in its .info file."
version: "Based on QEMU 9.0.50 (io12/qemu-libretro)" version: "Based on QEMU 9.0.50 (io12/qemu-libretro)"

View File

@@ -1,7 +1,9 @@
emulator: QUASI88 emulator: QUASI88
type: libretro type: libretro
core_classification: community_fork
source: "https://github.com/libretro/quasi88-libretro" source: "https://github.com/libretro/quasi88-libretro"
profiled_date: "2026-03-18" upstream: "https://www.retropc.net/showzoh/quasi88/"
profiled_date: "2026-03-25"
core_version: "0.6.4" core_version: "0.6.4"
display_name: "NEC - PC-8000 / PC-8800 series (QUASI88)" display_name: "NEC - PC-8000 / PC-8800 series (QUASI88)"
cores: cores:
@@ -9,69 +11,63 @@ cores:
systems: systems:
- pc-8801 - pc-8801
# QUASI88 is a NEC PC-8801 emulator. The libretro port includes a pseudo-BIOS # QUASI88 by Showzoh Fukunaga, libretro port by Celerizer.
# (pbios_n88, pbios_disk) compiled into the core that provides basic compatibility # Includes pseudo-BIOS (pbios_n88, pbios_disk) by cisc compiled into the core.
# when real BIOS files are missing. With the pseudo-BIOS, many disk-based games # With pseudo-BIOS, some disk-based games boot but compatibility is limited.
# will boot, but compatibility is lower than with real ROMs.
# #
# ROM file search order (libretro.c:444-491): # ROM search order (libretro.c:444-491):
# 1. <download_dir>/<filename> # 1. <download_dir>/<filename>
# 2. <system_dir>/quasi88/<filename> # 2. <system_dir>/quasi88/<filename>
# 3. <system_dir>/<filename> # 3. <system_dir>/<filename>
# Each ROM entry has up to 4 alternate filenames tried in order. # Each ROM entry has up to 4 alternate filenames tried in order.
# #
# ROM loading (libretro.c:550-594): # ROM loading (libretro.c:550-594):
# N88.ROM and DISK.ROM (SUB_ROM) are the only two checked for failure. # N88.ROM and DISK.ROM have pseudo-BIOS fallback if missing.
# If missing, the core falls back to the built-in pseudo-BIOS.
# All other ROMs are loaded silently if present, ignored if absent. # All other ROMs are loaded silently if present, ignored if absent.
# #
# The original QUASI88 (memory.c:80-95) uses uppercase-first filenames # The original QUASI88 (memory.c:80-95) uses uppercase-first filenames
# (N88.ROM, N88EXT0.ROM, etc.) while the libretro .info file standardizes # (N88.ROM, N88EXT0.ROM, etc.) while the libretro .info file uses
# on lowercase with underscore variants (n88.rom, n88_0.rom, etc.). # lowercase with underscore variants (n88.rom, n88_0.rom, etc.).
# The core tries both naming conventions. # The core tries both naming conventions.
# #
# FONT.ROM/FONT2.ROM/FONT3.ROM are not listed in the .info file. # FONT.ROM/FONT2.ROM/FONT3.ROM are not in the .info file.
# When missing, the core uses built-in fonts or falls back to kanji ROM glyphs. # When missing, the core uses built-in fonts (font.h) or kanji ROM glyphs.
#
# Upstream supports 2HD disk ROM (8 KB) via memory.c:356-368.
# The libretro port reads only 2 KB (2D type) at libretro.c:552.
notes: | notes: |
Files go in <system_dir>/quasi88/ or directly in <system_dir>/. Files go in <system_dir>/quasi88/ or directly in <system_dir>/.
The pseudo-BIOS built into the core covers N88-BASIC V2 and the disk The pseudo-BIOS covers N88-BASIC V2 and the disk subsystem at a basic
subsystem at a basic level. For full compatibility (N-BASIC, V1H/V1S modes, level. For full compatibility (N-BASIC, V1H/V1S modes, dictionary lookup,
dictionary lookup, kanji display), real ROM files are needed. kanji display), real ROM files are needed.
N88_0.ROM (EXT0) is marked required in the .info file because it contains Core option "quasi88_basic_mode" selects N88 V2, N88 V1H, N88 V1S,
the N88-BASIC V2 extension used by most software. EXT1-EXT3 are version- or N mode. Each mode requires its corresponding ROM.
specific extensions (V1H, V1S, older V2) needed only for specific titles.
The core option "quasi88_basic_mode" selects N88 V2, N88 V1H, N88 V1S,
or N mode. Each mode requires its corresponding ROM to be present.
files: files:
# -- Required for full operation --
- name: n88.rom - name: n88.rom
path: "quasi88/n88.rom" path: "quasi88/n88.rom"
size: 32768 size: 32768
required: true required: true
note: "N88-BASIC main ROM (32 KB). Core falls back to pseudo-BIOS if missing." hle_fallback: true
source_ref: "src/LIBRETRO/libretro.c:550" note: "N88-BASIC main ROM (32 KB). Falls back to pseudo-BIOS if missing."
source_ref: "src/LIBRETRO/libretro.c:550-551"
aliases: ["N88.ROM"] aliases: ["N88.ROM"]
- name: n88_0.rom - name: n88_0.rom
path: "quasi88/n88_0.rom" path: "quasi88/n88_0.rom"
size: 8192 size: 8192
required: true required: true
note: "N88-BASIC V2 extension ROM 0 (8 KB). Needed for most PC-8801 software." note: "N88-BASIC V2 extension ROM 0 (8 KB). Needed by most software."
source_ref: "src/LIBRETRO/libretro.c:555" source_ref: "src/LIBRETRO/libretro.c:555"
aliases: ["N88_0.ROM", "N88EXT0.ROM", "n88ext0.rom"] aliases: ["N88_0.ROM", "N88EXT0.ROM", "n88ext0.rom"]
# -- Optional extensions --
- name: n88_1.rom - name: n88_1.rom
path: "quasi88/n88_1.rom" path: "quasi88/n88_1.rom"
size: 8192 size: 8192
required: false required: false
note: "N88-BASIC V1H extension ROM 1 (8 KB). For V1 High-speed mode software." note: "N88-BASIC V1H extension ROM 1 (8 KB). For V1 High-speed mode."
source_ref: "src/LIBRETRO/libretro.c:556" source_ref: "src/LIBRETRO/libretro.c:556"
aliases: ["N88_1.ROM", "N88EXT1.ROM", "n88ext1.rom"] aliases: ["N88_1.ROM", "N88EXT1.ROM", "n88ext1.rom"]
@@ -79,7 +75,7 @@ files:
path: "quasi88/n88_2.rom" path: "quasi88/n88_2.rom"
size: 8192 size: 8192
required: false required: false
note: "N88-BASIC V1S extension ROM 2 (8 KB). For V1 Standard mode software." note: "N88-BASIC V1S extension ROM 2 (8 KB). For V1 Standard mode."
source_ref: "src/LIBRETRO/libretro.c:557" source_ref: "src/LIBRETRO/libretro.c:557"
aliases: ["N88_2.ROM", "N88EXT2.ROM", "n88ext2.rom"] aliases: ["N88_2.ROM", "N88EXT2.ROM", "n88ext2.rom"]
@@ -87,7 +83,7 @@ files:
path: "quasi88/n88_3.rom" path: "quasi88/n88_3.rom"
size: 8192 size: 8192
required: false required: false
note: "N88-BASIC extension ROM 3 (8 KB). Older V2 extension, rarely needed." note: "N88-BASIC extension ROM 3 (8 KB). Older V2 extension."
source_ref: "src/LIBRETRO/libretro.c:558" source_ref: "src/LIBRETRO/libretro.c:558"
aliases: ["N88_3.ROM", "N88EXT3.ROM", "n88ext3.rom"] aliases: ["N88_3.ROM", "N88EXT3.ROM", "n88ext3.rom"]
@@ -104,15 +100,15 @@ files:
size: 2048 size: 2048
required: false required: false
hle_fallback: true hle_fallback: true
note: "Disk subsystem ROM (2 KB, 2D type). Core falls back to pseudo-BIOS if missing. 8 KB variant (2HD type) also accepted." note: "Disk subsystem ROM (2 KB, 2D type). Falls back to pseudo-BIOS if missing."
source_ref: "src/LIBRETRO/libretro.c:552" source_ref: "src/LIBRETRO/libretro.c:552-553"
aliases: ["DISK.ROM", "N88SUB.ROM", "n88sub.rom"] aliases: ["DISK.ROM", "N88SUB.ROM", "n88sub.rom"]
- name: n88knj1.rom - name: n88knj1.rom
path: "quasi88/n88knj1.rom" path: "quasi88/n88knj1.rom"
size: 131072 size: 131072
required: false required: false
note: "Kanji ROM level 1 (128 KB). Required for Japanese text display. Also used as font fallback." note: "Kanji ROM level 1 (128 KB). Required for Japanese text display."
source_ref: "src/LIBRETRO/libretro.c:560" source_ref: "src/LIBRETRO/libretro.c:560"
aliases: ["N88KNJ1.ROM", "KANJI1.ROM", "kanji1.rom"] aliases: ["N88KNJ1.ROM", "KANJI1.ROM", "kanji1.rom"]
@@ -128,18 +124,18 @@ files:
path: "quasi88/n88jisho.rom" path: "quasi88/n88jisho.rom"
size: 524288 size: 524288
required: false required: false
note: "Dictionary ROM (512 KB). Japanese dictionary lookup, very few titles use it." note: "Dictionary ROM (512 KB). Japanese dictionary lookup."
source_ref: "src/LIBRETRO/libretro.c:562" source_ref: "src/LIBRETRO/libretro.c:562"
aliases: ["N88JISHO.ROM", "JISYO.ROM", "jisyo.rom"] aliases: ["N88JISHO.ROM", "JISYO.ROM", "jisyo.rom"]
# -- Font ROMs (not in .info, core has built-in fallback) -- # Font ROMs (not in .info, core has built-in fallback via font.h)
- name: font.rom - name: font.rom
path: "quasi88/font.rom" path: "quasi88/font.rom"
size: 4096 size: 2048
required: false required: false
hle_fallback: true hle_fallback: true
note: "ANK font ROM (4 KB). Falls back to built-in font or kanji ROM glyphs." note: "ANK font ROM (2 KB). Falls back to built-in font or kanji ROM glyphs."
source_ref: "src/LIBRETRO/libretro.c:566" source_ref: "src/LIBRETRO/libretro.c:566"
aliases: ["FONT.ROM"] aliases: ["FONT.ROM"]
@@ -148,7 +144,7 @@ files:
size: 4096 size: 4096
required: false required: false
hle_fallback: true hle_fallback: true
note: "Second font ROM (4 KB). Falls back to built-in ANH font." note: "Second font ROM (up to 4 KB). Falls back to built-in ANH font."
source_ref: "src/LIBRETRO/libretro.c:576" source_ref: "src/LIBRETRO/libretro.c:576"
aliases: ["FONT2.ROM"] aliases: ["FONT2.ROM"]
@@ -157,6 +153,6 @@ files:
size: 4096 size: 4096
required: false required: false
hle_fallback: true hle_fallback: true
note: "Third font ROM (4 KB). Zeroed out if missing." note: "Third font ROM (up to 4 KB). Zeroed out if missing."
source_ref: "src/LIBRETRO/libretro.c:588" source_ref: "src/LIBRETRO/libretro.c:588"
aliases: ["FONT3.ROM"] aliases: ["FONT3.ROM"]

View File

@@ -2,7 +2,8 @@ emulator: QuickNES
type: libretro type: libretro
core_classification: community_fork core_classification: community_fork
source: "https://github.com/libretro/QuickNES_Core" source: "https://github.com/libretro/QuickNES_Core"
profiled_date: "2026-03-21" upstream: "https://github.com/kode54/QuickNES"
profiled_date: "2026-03-25"
core_version: "1.0-WIP" core_version: "1.0-WIP"
display_name: "Nintendo - NES / Famicom (QuickNES)" display_name: "Nintendo - NES / Famicom (QuickNES)"
cores: cores:
@@ -11,7 +12,7 @@ systems:
- nintendo-nes - nintendo-nes
notes: | notes: |
NES emulator by blargg (Shay Green). No BIOS required. NES emulator by blargg (Shay Green), maintained by kode54.
NES cartridge games are self-contained. NES has no BIOS. All palettes compiled in.
files: [] files: []

View File

@@ -1,43 +1,28 @@
emulator: RACE (Neo Geo Pocket) emulator: RACE (Neo Geo Pocket)
type: libretro type: libretro
core_classification: community_fork
source: "https://github.com/libretro/RACE" source: "https://github.com/libretro/RACE"
profiled_date: "2026-03-18" upstream: "https://github.com/8bitpsp/race"
profiled_date: "2026-03-25"
core_version: "v2.16" core_version: "v2.16"
display_name: "SNK - Neo Geo Pocket / Color (RACE)" display_name: "SNK - Neo Geo Pocket / Color (RACE)"
cores: [race]
systems: [snk-ngp, snk-ngpc] systems: [snk-ngp, snk-ngpc]
notes: | notes: |
RACE is a Neo Geo Pocket and Neo Geo Pocket Color emulator, originally RACE is a Neo Geo Pocket and Neo Geo Pocket Color emulator originally by
developed for PSP (forked from Akop Karapetyan's port), adapted for Judge_ (MHE), ported to GP2X by Flavor, to PSP by Akop Karapetyan, modified
libretro. by theelf, then adapted for libretro.
No external BIOS files are required. The core contains dead code in No external BIOS files are required. The upstream versions (GP2X, PSP) support
race-memory.c that would load "NPBIOS.BIN" (64KB, loaded into cpurom optional loading of NPBIOS.BIN, but the libretro port disabled it entirely
via filestream_open), but it is compiled out with #if 0 and loadBIOS() with #if 0 in race-memory.c:loadBIOS(). The comment explains: "Using a real
unconditionally returns 0. The comment explains: "Using a real bios bios file causes nothing but issues."
file causes nothing but issues" and references Card Fighters' Clash
Test Mode as a known failure.
Instead, the core uses a software HLE approach: The core uses a software HLE approach: a compiled-in koyote_bin RAM dump
- A built-in koyote_bin memory dump (RAM state from a real console (post-boot console state) is copied into mainram at startup, a fake SWI jump
post-boot) is copied into mainram at startup table is built at cpurom[0xE000], and doBios() in tlcs900h.c handles 33 BIOS
- A fake SWI jump table is constructed at cpurom[0xE000] using the functions in software. The Z80 sound CPU is emulated via cz80 or DrZ80.
TLCS-900H 0x1A (reg) dummy opcode to trap BIOS calls
- doBios() in tlcs900h.c handles 33 BIOS functions in software:
shutdown, clock speed, RTC, screen mode, font rendering, flash
read/write, communication, and sound control
- Interrupt vectors are set up at cpurom[0xFF00] and interrupt
handler code at cpurom[0xF800]
- CPU RAM defaults (interrupt priorities, timers) are loaded from
the ngpcpuram[256] table
The Z80 sound CPU is emulated in software (cz80 or DrZ80 backend).
Flash memory for game saves is handled internally by flash.c.
The only core option affecting system behavior is ngp_language
(english/japanese), which sets a RAM flag at 0x6F87.
ROM extensions: .ngp, .ngc, .ngpc, .npc
files: [] files: []
@@ -48,8 +33,9 @@ analysis:
loaded_by: "race-memory.c:loadBIOS()" loaded_by: "race-memory.c:loadBIOS()"
status: disabled status: disabled
source_ref: "race-memory.c:337-361" source_ref: "race-memory.c:337-361"
upstream_status: optional
upstream_ref: "memory.cpp:346-365 (8bitpsp/race)"
notes: | notes: |
loadBIOS() is wrapped in #if 0 and always returns 0. loadBIOS() is wrapped in #if 0 and always returns 0 in the libretro port.
Even if re-enabled, the realBIOSloaded=1 path has known In upstream (8bitpsp/race, alekmaul/race), the function is live and loads
compatibility issues (e.g. Puzzle Bobble fails to boot). NPBIOS.BIN optionally, falling back to HLE if not found.
The HLE path is the only functional code path.

View File

@@ -1,7 +1,8 @@
emulator: Redbook emulator: Redbook
type: utility type: utility
source: "https://github.com/libretro/RetroArch" core_classification: pure_libretro
profiled_date: "2026-03-18" source: "https://github.com/libretro/redbook"
profiled_date: "2026-03-25"
core_version: "1.0" core_version: "1.0"
display_name: "Redbook Audio Player" display_name: "Redbook Audio Player"
cores: cores:
@@ -9,10 +10,7 @@ cores:
systems: [] systems: []
notes: | notes: |
Redbook is an audio CD player core for RetroArch. Plays standard Audio CD player core. Plays Red Book audio CDs and CUE/BIN images.
Red Book audio CDs and CD image files (CUE/BIN) containing audio Original libretro creation by Brad Parker, no upstream emulator.
tracks.
No BIOS or system files required.
files: [] files: []

View File

@@ -1,7 +1,9 @@
emulator: REminiscence emulator: REminiscence
type: libretro type: libretro
core_classification: community_fork
source: "https://github.com/libretro/REminiscence" source: "https://github.com/libretro/REminiscence"
profiled_date: "2026-03-18" upstream: "https://github.com/cyxx/REminiscence"
profiled_date: "2026-03-25"
core_version: "0.3.6" core_version: "0.3.6"
display_name: "Flashback (REminiscence)" display_name: "Flashback (REminiscence)"
cores: cores:
@@ -10,23 +12,22 @@ systems:
- flashback - flashback
notes: | notes: |
REminiscence is a re-implementation of the Flashback (Delphine Software, 1992) game engine, Game engine re-implementation of Flashback (Delphine Software, 1992) by Gregory Montoir,
ported to libretro. Version 0.3.6. It is not a general-purpose emulator; it only runs the ported to libretro by Stuart Carnie. Version 0.3.6 (upstream is at 0.5.5).
original Flashback game data files.
The core sets need_fullpath = true and valid_extensions = "map" (libretro.cpp:67-68). The core sets need_fullpath = true and valid_extensions = "map" (libretro.cpp:66).
Content loading (retro_load_game) extracts the parent directory from the provided .MAP Content loading (retro_load_game) extracts the parent directory from the provided .MAP
file path and uses it as the data root via FileSystem (libretro.cpp:194-196). file path and uses it as the data root via FileSystem (libretro.cpp:194-196).
Version detection (libretro.cpp:126-149) probes for these files in order: Version detection (libretro.cpp:125-148) probes for these files in order:
DEMO_UK.ABA -> DOS Demo DEMO_UK.ABA -> DOS Demo
INTRO.SEQ -> DOS CD INTRO.SEQ -> DOS CD
LEVEL1.MAP -> DOS LEVEL1.MAP -> DOS
LEVEL1.LEV -> Amiga LEVEL1.LEV -> Amiga
DEMO.LEV -> Amiga Demo DEMO.LEV -> Amiga Demo
Only kResourceTypeDOS is accepted by retro_load_game (line 199); Amiga data is rejected. Only kResourceTypeDOS is accepted (line 199); Amiga data is rejected.
Language detection (libretro.cpp:151-175) probes for: Language detection (libretro.cpp:150-174) probes for:
ENGCINE.TXT -> English ENGCINE.TXT -> English
FR_CINE.TXT -> French FR_CINE.TXT -> French
GERCINE.TXT -> German GERCINE.TXT -> German
@@ -35,27 +36,38 @@ notes: |
FRCINE.TXT -> French (Amiga) FRCINE.TXT -> French (Amiga)
Falls back to English if none found. Falls back to English if none found.
All game data files are loaded from the content directory at runtime via FileSystem All game data files are loaded from the content directory via FileSystem (fs.cpp),
(fs.cpp), which recursively scans the directory and matches filenames case-insensitively which scans the directory and matches filenames case-insensitively (strcasecmp at
(strcasecmp at fs.cpp:52). The resource system (resource.cpp) loads files by constructing fs.cpp:52). The resource system (resource.cpp) loads files by constructing names
names like "LEVEL1.MAP", "GLOBAL.ICN", "PERSO.SPR", "FB_TXT.FNT", etc. like "LEVEL1.MAP", "GLOBAL.ICN", "PERSO.SPR", "FB_TXT.FNT", etc.
The core never calls RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. All data files must live The core never calls RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. All data files must live
alongside the loaded .MAP content file (or in subdirectories of its parent). There are alongside the loaded .MAP content file. No BIOS or firmware files; the required files
no BIOS or firmware files; the required files are the original Flashback game data. are the original Flashback DOS game data.
Music is loaded from .mod files or Amiga-format module files (mod_player.cpp, staticres.cpp Music loaded from .mod files (mod_player.cpp, staticres.cpp:3198-3225). Optional;
lines 3198-3225). These are optional; the core has a built-in SFX player for in-game the core has a built-in SFX player for in-game action music (sfx_player.cpp with
action music (sfx_player.cpp with embedded music data in staticres.cpp). embedded music data in staticres.cpp).
VOICE.VCE from the SegaCD version can optionally be placed in the data directory for VOICE.VCE from the SegaCD version can be placed in the data directory for in-game
in-game voice playback (resource.cpp:910). voice playback (resource.cpp:900-941). Optional.
INTRO.SEQ and other .SEQ files from the DOS CD version provide FMV cutscenes SEQ cutscene playback is disabled in the libretro build: g_options is zero-initialized
(seq_player.cpp). Without them, the core falls back to polygon-based cutscenes. (game.cpp:30) and rs.cfg is never parsed, so use_seq_cutscenes defaults to false.
The core always uses polygon-based cutscenes (cutscene.cpp).
Upstream (0.5.5) additionally supports Amiga, Macintosh, PC98 data, MIDI music,
OGG playback, SEQ cutscenes, and widescreen modes. None of these are in the
libretro port.
files: [] files: []
exclusion_note: >
Game engine core. All data files (game data, music, voice) are loaded from the content
directory alongside the .MAP file via FileSystem. The core never accesses the system
directory (RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY is never called). The .info declares
firmware_count=0, consistent with the code.
analysis: analysis:
content_type: game_data content_type: game_data
content_extensions: ["map"] content_extensions: ["map"]
@@ -77,7 +89,7 @@ analysis:
- "VOICE.VCE (SegaCD voice data)" - "VOICE.VCE (SegaCD voice data)"
dos_cd: dos_cd:
additional: additional:
- "INTRO.SEQ, CREDITS.SEQ, and other .SEQ cutscene videos" - "INTRO.SEQ, CREDITS.SEQ, and other .SEQ cutscene videos (SEQ playback disabled in libretro build)"
demo: demo:
archive: "DEMO_UK.ABA (contains all demo data in a single archive)" archive: "DEMO_UK.ABA (contains all demo data in a single archive)"
detection_order: detection_order:

View File

@@ -1,7 +1,9 @@
emulator: RemoteJoy emulator: RemoteJoy
type: utility type: utility
core_classification: pure_libretro
source: "https://github.com/libretro/libretro-remotejoy" source: "https://github.com/libretro/libretro-remotejoy"
profiled_date: "2026-03-18" upstream: "https://github.com/akiraink/RemoteJoyLite"
profiled_date: "2026-03-25"
core_version: "v1" core_version: "v1"
display_name: "PSP RemotePlay (RemoteJoy)" display_name: "PSP RemotePlay (RemoteJoy)"
cores: cores:
@@ -9,11 +11,9 @@ cores:
systems: [] systems: []
notes: | notes: |
RemoteJoy is a PSP remote display utility for libretro. It receives USB streaming receiver for PSP. Connects via libusb to a PSP running the
video output from a PSP running the RemoteJoy plugin over USB or RemoteJoy plugin (Sony VID 0x054C, PIDs 0x01C9/0x02D2) and displays
network, displaying it within RetroArch. video frames at 480x272. No file I/O. Protocol reimplemented from
RemoteJoyLite Win32 client constants, not a port.
No BIOS or system files required. Requires a PSP with the RemoteJoy
plugin installed on the device side.
files: [] files: []

View File

@@ -1,18 +1,23 @@
emulator: Retro8 emulator: Retro8
type: game type: libretro
core_classification: game_engine
source: "https://github.com/libretro/retro8" source: "https://github.com/libretro/retro8"
profiled_date: "2026-03-18" upstream: "https://github.com/Jakz/retro8"
core_version: "Git" profiled_date: "2026-03-25"
core_version: "0.1b"
display_name: "PICO-8 (Retro8)" display_name: "PICO-8 (Retro8)"
cores: cores:
- retro8 - retro8
systems: [] systems:
- pico8
notes: | notes: |
Retro8 is a PICO-8 compatible runtime for libretro. It can run .p8 Open-source PICO-8 fantasy console reimplementation by Jacopo Santoni.
and .p8.png cartridge files created for the PICO-8 fantasy console. Runs .p8 and .p8.png cartridge files. The PICO-8 font is compiled into the
binary as a byte array (gen/pico_font.h, loaded in gfx.cpp:9). The Lua API
No BIOS, firmware, or system files required. The virtual machine and shim is compiled as a string constant (gen/lua_api.h, loaded in
Lua interpreter are self-contained in the core binary. lua_bridge.cpp:1126). The core never calls GET_SYSTEM_DIRECTORY and performs
no file I/O from the system directory.
exclusion_note: "all engine resources (font, Lua API, color palette, audio synth) compiled into the binary"
files: [] files: []

View File

@@ -1,60 +1,54 @@
emulator: RetroDream emulator: RetroDream
type: libretro type: libretro
core_classification: community_fork
source: "https://github.com/libretro/redream-next" source: "https://github.com/libretro/redream-next"
profiled_date: "2026-03-18" upstream: "https://github.com/inolen/redream"
profiled_date: "2026-03-25"
core_version: "Git" core_version: "Git"
display_name: "Sega - Dreamcast (RetroDream)" display_name: "Sega - Dreamcast (RetroDream)"
cores:
- retrodream
systems: systems:
- sega-dreamcast - sega-dreamcast
notes: | notes: |
Fork of the final open-source redream release (pre-relicense). Experimental Fork of the last GPLv3 release of redream (inolen) before it went closed-source.
core with no HLE BIOS -- real BIOS files are required to boot games. The core has HLE bootstrap -- when boot.bin is missing, bios_invalid_instr()
Flycast is recommended over this core for actual gameplay. traps at PC=0x0 and calls bios_boot(), which loads IP.BIN and 1ST_READ.BIN
directly from disc, sets up syscall vectors, and starts execution at 0xac008300.
The libretro core sets appdir to the RetroArch system directory The fork sets appdir to the RetroArch system directory root
(src/host/retro_host.c:216-217). boot.bin and flash.bin are loaded (retro_host.c:216-217), unlike the upstream which appends /dc
directly from appdir (src/guest/rom/boot.c:17, src/guest/rom/flash.c:30). (upstream retro_host.c:196-198). The .info still declares dc/ prefix paths
matching the upstream, not this fork.
The .info file declares paths as dc/boot.bin and dc/flash.bin, which means boot.bin is validated against four known MD5 hashes (boot.c:25-30).
RetroArch resolves them under {system_dir}/dc/. Validation failure logs a warning but the core continues via HLE.
boot.bin is validated against four known MD5 hashes at load time flash.bin is read/write. If missing, bios_validate_flash() resets all
(src/guest/rom/boot.c:25-30). If validation fails, the core logs a warning partitions to defaults. Saved back to disk on shutdown (flash.c:197-199).
but still attempts to run via HLE syscall hooks (bios.c:440-447).
flash.bin is read/write -- the core saves modified flash data back to disk
on shutdown (src/guest/rom/flash.c:197-199).
Boot ROM size: 2 MB (0x200000). Flash ROM size: 128 KB (0x20000).
files: files:
- name: "boot.bin" - name: "boot.bin"
system: sega-dreamcast system: sega-dreamcast
path: "dc/boot.bin" path: "boot.bin"
required: true required: false
size: 2097152 # 2 MB (0x200000) hle_fallback: true
size: 2097152
validation: [size, md5]
md5: md5:
- e10c53c2f8b90bab96ead2d368858623 # original US/EU BIOS - a5c6a00818f97c5e3e91569ee22416dc
- a5c6a00818f97c5e3e91569ee22416dc # Chinese BIOS - 37c921eb47532cae8fb70e5d987ce91c
- 37c921eb47532cae8fb70e5d987ce91c # Japanese BIOS - f2cd29d09f3e29984bcea22ab2e006fe
- f2cd29d09f3e29984bcea22ab2e006fe # revised BIOS without MIL-CD - e10c53c2f8b90bab96ead2d368858623
note: "Dreamcast boot ROM. Validated against known MD5 hashes at load." note: "Dreamcast boot ROM. Four known variants accepted."
source_ref: "src/guest/rom/boot.c:12-80" source_ref: "src/guest/rom/boot.c:12-80"
- name: "flash.bin" - name: "flash.bin"
system: sega-dreamcast system: sega-dreamcast
path: "dc/flash.bin" path: "flash.bin"
required: true required: false
size: 131072 # 128 KB (0x20000) size: 131072
md5: validation: [size]
- 0a93f7940c455905bea6e392dfde92a4 note: "Dreamcast flash memory. Written back on shutdown."
note: "Dreamcast flash memory (date, time, language). Written back on shutdown." source_ref: "src/guest/rom/flash.c:25-71"
source_ref: "src/guest/rom/flash.c:25-35"
platform_details:
dreamcast:
bios_size: 2097152 # 2 MB
flash_size: 131072 # 128 KB
hle_available: false
source_ref: "src/guest/rom/boot.c, src/guest/rom/flash.c"

View File

@@ -1,7 +1,9 @@
emulator: ROM Cleaner emulator: ROM Cleaner
type: utility type: utility
source: "https://github.com/libretro/libretro-database" core_classification: pure_libretro
profiled_date: "2026-03-18" source: "https://github.com/JesseTG/rom-cleaner"
upstream: "https://github.com/JesseTG/rom-cleaner"
profiled_date: "2026-03-25"
core_version: "1.0.0" core_version: "1.0.0"
display_name: "ROM Cleaner" display_name: "ROM Cleaner"
cores: cores:
@@ -9,10 +11,8 @@ cores:
systems: [] systems: []
notes: | notes: |
ROM Cleaner is a utility core for identifying and cleaning ROM Utility core that simulates blowing dust off a cartridge via microphone
headers. Uses the libretro database for ROM identification via input. All visual and audio assets are compiled into the binary.
CRC32/SHA1 matching. No external files required.
No BIOS or system files required.
files: [] files: []

View File

@@ -1,21 +1,24 @@
emulator: Rustation emulator: Rustation
type: libretro type: libretro
core_classification: official_port
source: "https://github.com/libretro/rustation-libretro" source: "https://github.com/libretro/rustation-libretro"
profiled_date: "2026-03-18" upstream: "https://github.com/simias/rustation"
profiled_date: "2026-03-25"
core_version: "v1" core_version: "v1"
display_name: "Sony - PlayStation (Rustation)" display_name: "Sony - PlayStation (Rustation)"
cores: [rustation] cores: [rustation]
systems: [sony-playstation] systems: [sony-playstation]
bios_size: 524288 # 512 KB, enforced before SHA-256 check
verification: sha256
notes: > notes: >
No filename requirement: the core scans every file in the system directory, Scans every file in the system directory, filters by exact 512 KB size,
filters by exact 512 KB size, then validates the full binary against an internal then validates the full binary against an internal SHA-256 database
SHA-256 database (lifted from Mednafen). Region must match the loaded disc (lifted from Mednafen). Region must match the loaded disc. Known-bad
(Japan, NorthAmerica, Europe). Known-bad dumps are rejected even if hash matches. dumps are rejected. No filename requirement. No HLE fallback.
"Boot to BIOS menu" option allows booting without a disc. "Boot to BIOS menu" core option allows booting without a disc.
No HLE fallback: a real, database-matched BIOS is mandatory. Database contains 24 entries (22 good, 2 known-bad rejected)
Database contains 24 entries (22 good, 2 known_bad) covering BIOS versions 1.0 through 4.5. covering BIOS versions 1.0 through 4.5.
.info declares firmware_count=0; incorrect.
Project abandoned, superseded by rustation-ng.
files: files:
# -- Region: Japan -- # -- Region: Japan --
@@ -24,10 +27,11 @@ files:
description: "SCPH-5500 (v3.0 J)" description: "SCPH-5500 (v3.0 J)"
region: "NTSC-J" region: "NTSC-J"
required: true required: true
size: 524288
validation: [size, sha256]
md5: "8dd7d5296a650fac7319bce665a6a53c" md5: "8dd7d5296a650fac7319bce665a6a53c"
sha256: "9c0421858e217805f4abe18698afea8d5aa36ff0727eb8484944e00eb5e7eadb" sha256: "9c0421858e217805f4abe18698afea8d5aa36ff0727eb8484944e00eb5e7eadb"
source_ref: "rustation/src/bios/db.rs:226-232 (v3.0 Japan)" source_ref: "rustation/src/bios/db.rs:158-167 (v3.0 Japan)"
notes: "Any filename works. Core matches by SHA-256, not name. v3.0 is the standard JP BIOS."
# -- Region: North America -- # -- Region: North America --
@@ -35,10 +39,11 @@ files:
description: "SCPH-5501 (v3.0 A)" description: "SCPH-5501 (v3.0 A)"
region: "NTSC-U" region: "NTSC-U"
required: true required: true
size: 524288
validation: [size, sha256]
md5: "490f666e1afb15b7362b406ed1cea246" md5: "490f666e1afb15b7362b406ed1cea246"
sha256: "11052b6499e466bbf0a709b1f9cb6834a9418e66680387912451e971cf8a1fef" sha256: "11052b6499e466bbf0a709b1f9cb6834a9418e66680387912451e971cf8a1fef"
source_ref: "rustation/src/bios/db.rs:234-244 (v3.0 NorthAmerica)" source_ref: "rustation/src/bios/db.rs:168-177 (v3.0 NorthAmerica)"
notes: "Any filename works. Only NA BIOS with animation_jump_hook and debug UART patch support."
# -- Region: Europe -- # -- Region: Europe --
@@ -46,149 +51,185 @@ files:
description: "SCPH-5502 (v3.0 E)" description: "SCPH-5502 (v3.0 E)"
region: "PAL" region: "PAL"
required: true required: true
size: 524288
validation: [size, sha256]
md5: "32736f17079d0b2b7024407c39bd3050" md5: "32736f17079d0b2b7024407c39bd3050"
sha256: "1faaa18fa820a0225e488d9f086296b8e6c46df739666093987ff7d8fd352c09" sha256: "1faaa18fa820a0225e488d9f086296b8e6c46df739666093987ff7d8fd352c09"
source_ref: "rustation/src/bios/db.rs:246-256 (v3.0 Europe)" source_ref: "rustation/src/bios/db.rs:178-187 (v3.0 Europe)"
notes: "Any filename works. Core matches by SHA-256, not name."
# -- Additional accepted BIOS versions (all validated by SHA-256 scan) -- # -- Alternatives: any of the 22 good entries is accepted. One per region needed. --
# The core accepts any of the 22 good entries below. Only one per region is needed.
# Listed here for completeness; scph5500/5501/5502 above are the standard choices.
# Japan alternatives # Japan alternatives
- name: "scph1000.bin" - name: "scph1000.bin"
description: "SCPH-1000 (v1.0 J)" description: "SCPH-1000 (v1.0 J)"
region: "NTSC-J" region: "NTSC-J"
required: false required: false
size: 524288
validation: [size, sha256]
sha256: "cfc1fc38eb442f6f80781452119e931bcae28100c1c97e7e6c5f2725bbb0f8bb" sha256: "cfc1fc38eb442f6f80781452119e931bcae28100c1c97e7e6c5f2725bbb0f8bb"
source_ref: "rustation/src/bios/db.rs:77-88 (v1.0 Japan)" source_ref: "rustation/src/bios/db.rs:38-47 (v1.0 Japan)"
- name: "scph_v11j.bin" - name: "scph_v11j.bin"
description: "v1.1 J" description: "v1.1 J"
region: "NTSC-J" region: "NTSC-J"
required: false required: false
size: 524288
validation: [size, sha256]
sha256: "5eb3aee495937558312b83b54323d76a4a015190decd4051214f1b6df06ac34b" sha256: "5eb3aee495937558312b83b54323d76a4a015190decd4051214f1b6df06ac34b"
source_ref: "rustation/src/bios/db.rs:89-100 (v1.1 Japan)" source_ref: "rustation/src/bios/db.rs:48-57 (v1.1 Japan)"
- name: "scph3000.bin" - name: "scph3000.bin"
description: "SCPH-3000 (v2.1 J)" description: "SCPH-3000 (v2.1 J)"
region: "NTSC-J" region: "NTSC-J"
required: false required: false
size: 524288
validation: [size, sha256]
sha256: "6f71ca1e716da761dc53187bd39e00c213f566e55090708fd3e2b4b425c8c989" sha256: "6f71ca1e716da761dc53187bd39e00c213f566e55090708fd3e2b4b425c8c989"
source_ref: "rustation/src/bios/db.rs:126-136 (v2.1 Japan)" source_ref: "rustation/src/bios/db.rs:78-87 (v2.1 Japan)"
- name: "scph3500.bin" - name: "scph3500.bin"
description: "SCPH-3500 (v2.2 J)" description: "SCPH-3500 (v2.2 J)"
region: "NTSC-J" region: "NTSC-J"
required: false required: false
size: 524288
validation: [size, sha256]
sha256: "0c8359870cbac0ea091f1c87f188cd332dcc709753b91cafd9fd44a4a6188197" sha256: "0c8359870cbac0ea091f1c87f188cd332dcc709753b91cafd9fd44a4a6188197"
source_ref: "rustation/src/bios/db.rs:162-172 (v2.2 Japan, good)" source_ref: "rustation/src/bios/db.rs:108-117 (v2.2 Japan)"
notes: "A known-bad v2.2 J dump also exists in the DB but is rejected." notes: "A known-bad v2.2 J dump also exists in the DB but is rejected."
- name: "scph5000.bin" - name: "scph5000.bin"
description: "v2.2 J (alt)" description: "v2.2 J (alt)"
region: "NTSC-J" region: "NTSC-J"
required: false required: false
size: 524288
validation: [size, sha256]
sha256: "4018749b3698b8694387beebcbabfb48470513066840f9441459ee4c9f0f39bc" sha256: "4018749b3698b8694387beebcbabfb48470513066840f9441459ee4c9f0f39bc"
source_ref: "rustation/src/bios/db.rs:209-220 (v2.2 Japan, alt)" source_ref: "rustation/src/bios/db.rs:148-157 (v2.2 Japan alt)"
- name: "scph7000.bin" - name: "scph7000.bin"
description: "SCPH-7000 (v4.0 J)" description: "SCPH-7000 (v4.0 J)"
region: "NTSC-J" region: "NTSC-J"
required: false required: false
size: 524288
validation: [size, sha256]
sha256: "e900504d1755f021f861b82c8258c5e6658c7b592f800cccd91f5d32ea380d28" sha256: "e900504d1755f021f861b82c8258c5e6658c7b592f800cccd91f5d32ea380d28"
source_ref: "rustation/src/bios/db.rs:269-281 (v4.0 Japan)" source_ref: "rustation/src/bios/db.rs:198-207 (v4.0 Japan)"
notes: "Shares animation_jump_hook patch with NA v3.0."
- name: "scph7500.bin" - name: "scph7500.bin"
description: "SCPH-7500 (v4.1 J)" description: "SCPH-7500 (v4.1 J)"
region: "NTSC-J" region: "NTSC-J"
required: false required: false
size: 524288
validation: [size, sha256]
sha256: "b3aa63cf30c81e0a40641740f4a43e25fda0b21b792fa9aaef60ce1675761479" sha256: "b3aa63cf30c81e0a40641740f4a43e25fda0b21b792fa9aaef60ce1675761479"
source_ref: "rustation/src/bios/db.rs:283-293 (v4.1 Japan)" source_ref: "rustation/src/bios/db.rs:208-217 (v4.1 Japan)"
- name: "scph9000.bin" - name: "scph9000.bin"
description: "SCPH-9000 (v4.3 J)" description: "SCPH-9000 (v4.3 J)"
region: "NTSC-J" region: "NTSC-J"
required: false required: false
size: 524288
validation: [size, sha256]
sha256: "b29b4b5fcddef369bd6640acacda0865e0366fcf7ea54e40b2f1a8178004f89a" sha256: "b29b4b5fcddef369bd6640acacda0865e0366fcf7ea54e40b2f1a8178004f89a"
source_ref: "rustation/src/bios/db.rs:318-329 (v4.3 Japan)" source_ref: "rustation/src/bios/db.rs:238-247 (v4.3 Japan)"
# North America alternatives # North America alternatives
- name: "scph1001.bin" - name: "scph1001.bin"
description: "SCPH-1001 (v2.0 A)" description: "SCPH-1001 (v2.0 A)"
region: "NTSC-U" region: "NTSC-U"
required: false required: false
size: 524288
validation: [size, sha256]
sha256: "42e4124be7623e2e28b1db0d8d426539646faee49d74b71166d8ba5bd7c472ed" sha256: "42e4124be7623e2e28b1db0d8d426539646faee49d74b71166d8ba5bd7c472ed"
source_ref: "rustation/src/bios/db.rs:101-112 (v2.0 NorthAmerica)" source_ref: "rustation/src/bios/db.rs:58-67 (v2.0 NorthAmerica)"
- name: "scph5001.bin" - name: "scph5001.bin"
description: "SCPH-5001 (v2.1 A)" description: "SCPH-5001 (v2.1 A)"
region: "NTSC-U" region: "NTSC-U"
required: false required: false
size: 524288
validation: [size, sha256]
sha256: "6ad5521d105a6b86741f1af8da2e6ea1c732d34459940618c70305a105e8ec10" sha256: "6ad5521d105a6b86741f1af8da2e6ea1c732d34459940618c70305a105e8ec10"
source_ref: "rustation/src/bios/db.rs:138-148 (v2.1 NorthAmerica)" source_ref: "rustation/src/bios/db.rs:88-97 (v2.1 NorthAmerica)"
- name: "scph_v22a.bin" - name: "scph_v22a.bin"
description: "v2.2 A" description: "v2.2 A"
region: "NTSC-U" region: "NTSC-U"
required: false required: false
size: 524288
validation: [size, sha256]
sha256: "71af94d1e47a68c11e8fdb9f8368040601514a42a5a399cda48c7d3bff1e99d3" sha256: "71af94d1e47a68c11e8fdb9f8368040601514a42a5a399cda48c7d3bff1e99d3"
source_ref: "rustation/src/bios/db.rs:186-196 (v2.2 NorthAmerica)" source_ref: "rustation/src/bios/db.rs:128-137 (v2.2 NorthAmerica)"
- name: "scph7001.bin" - name: "scph7001.bin"
description: "SCPH-7001 (v4.1 A)" description: "SCPH-7001 (v4.1 A)"
region: "NTSC-U" region: "NTSC-U"
required: false required: false
size: 524288
validation: [size, sha256]
sha256: "39dcc1a0717036c9b6ac52fefd1ee7a57d3808e8cfbc755879fa685a0a738278" sha256: "39dcc1a0717036c9b6ac52fefd1ee7a57d3808e8cfbc755879fa685a0a738278"
source_ref: "rustation/src/bios/db.rs:294-305 (v4.1 NorthAmerica)" source_ref: "rustation/src/bios/db.rs:218-227 (v4.1 NorthAmerica)"
- name: "scph101.bin" - name: "scph101.bin"
description: "SCPH-101 (v4.5 A)" description: "SCPH-101 (v4.5 A)"
region: "NTSC-U" region: "NTSC-U"
required: false required: false
size: 524288
validation: [size, sha256]
sha256: "aca9cbfa974b933646baad6556a867eca9b81ce65d8af343a7843f7775b9ffc8" sha256: "aca9cbfa974b933646baad6556a867eca9b81ce65d8af343a7843f7775b9ffc8"
source_ref: "rustation/src/bios/db.rs:342-353 (v4.5 NorthAmerica)" source_ref: "rustation/src/bios/db.rs:258-267 (v4.5 NorthAmerica)"
# Europe alternatives # Europe alternatives
- name: "scph1002.bin" - name: "scph1002.bin"
description: "SCPH-1002 (v2.0 E)" description: "SCPH-1002 (v2.0 E)"
region: "PAL" region: "PAL"
required: false required: false
size: 524288
validation: [size, sha256]
sha256: "0af2be3468d30b6018b3c3b0d98b8b64347e255e16d874d55f0363648973dbf0" sha256: "0af2be3468d30b6018b3c3b0d98b8b64347e255e16d874d55f0363648973dbf0"
source_ref: "rustation/src/bios/db.rs:113-124 (v2.0 Europe)" source_ref: "rustation/src/bios/db.rs:68-77 (v2.0 Europe)"
- name: "scph_v21e.bin" - name: "scph_v21e.bin"
description: "v2.1 E" description: "v2.1 E"
region: "PAL" region: "PAL"
required: false required: false
size: 524288
validation: [size, sha256]
sha256: "1efb0cfc5db8a8751a884c5312e9c6265ca1bc580dc0c2663eb2dea3bde9fcf7" sha256: "1efb0cfc5db8a8751a884c5312e9c6265ca1bc580dc0c2663eb2dea3bde9fcf7"
source_ref: "rustation/src/bios/db.rs:149-160 (v2.1 Europe)" source_ref: "rustation/src/bios/db.rs:98-107 (v2.1 Europe)"
- name: "scph_v22e.bin" - name: "scph_v22e.bin"
description: "v2.2 E" description: "v2.2 E"
region: "PAL" region: "PAL"
required: false required: false
size: 524288
validation: [size, sha256]
sha256: "3d06d2c469313c2a2128d24fe2e0c71ff99bc2032be89a829a62337187f500b7" sha256: "3d06d2c469313c2a2128d24fe2e0c71ff99bc2032be89a829a62337187f500b7"
source_ref: "rustation/src/bios/db.rs:198-208 (v2.2 Europe)" source_ref: "rustation/src/bios/db.rs:138-147 (v2.2 Europe)"
- name: "scph7002.bin" - name: "scph7002.bin"
description: "SCPH-7002 (v4.1 E)" description: "SCPH-7002 (v4.1 E)"
region: "PAL" region: "PAL"
required: false required: false
size: 524288
validation: [size, sha256]
sha256: "5e84a94818cf5282f4217591fefd88be36b9b174b3cc7cb0bcd75199beb450f1" sha256: "5e84a94818cf5282f4217591fefd88be36b9b174b3cc7cb0bcd75199beb450f1"
source_ref: "rustation/src/bios/db.rs:306-317 (v4.1 Europe)" source_ref: "rustation/src/bios/db.rs:228-237 (v4.1 Europe)"
- name: "scph102.bin" - name: "scph102.bin"
description: "SCPH-102 (v4.4 E)" description: "SCPH-102 (v4.4 E)"
region: "PAL" region: "PAL"
required: false required: false
size: 524288
validation: [size, sha256]
sha256: "5c0166da24e27deaa82246de8ff0108267fe4bb59f6df0fdec50e05e62448ca4" sha256: "5c0166da24e27deaa82246de8ff0108267fe4bb59f6df0fdec50e05e62448ca4"
source_ref: "rustation/src/bios/db.rs:330-341 (v4.4 Europe)" source_ref: "rustation/src/bios/db.rs:248-257 (v4.4 Europe)"
- name: "scph102_v45.bin" - name: "scph102_v45.bin"
description: "v4.5 E" description: "v4.5 E"
region: "PAL" region: "PAL"
required: false required: false
size: 524288
validation: [size, sha256]
sha256: "42244b0c650821519751b7e77ad1d3222a0125e75586df2b4e84ba693b9809dc" sha256: "42244b0c650821519751b7e77ad1d3222a0125e75586df2b4e84ba693b9809dc"
source_ref: "rustation/src/bios/db.rs:354-365 (v4.5 Europe)" source_ref: "rustation/src/bios/db.rs:268-277 (v4.5 Europe)"

View File

@@ -1,21 +1,23 @@
emulator: RVVM emulator: RVVM
type: libretro type: libretro
core_classification: official_port
source: "https://github.com/LekKit/RVVM" source: "https://github.com/LekKit/RVVM"
profiled_date: "2026-03-18" upstream: "https://github.com/LekKit/RVVM"
profiled_date: "2026-03-25"
core_version: "0.6-git" core_version: "0.6-git"
display_name: "RVVM" display_name: "RVVM"
cores: [rvvm]
systems: [riscv] systems: [riscv]
# RVVM is a RISC-V virtual machine / emulator. The libretro core loads a # RVVM emulates a RISC-V machine (rv64imafdcb or rv32ima). The libretro core
# ".rvvm" config file that specifies bootrom, kernel, nvme drives, memory, # loads a .rvvm plain-text config file specifying bootrom, kernel, nvme drives,
# CPU mode (rv32/rv64), cmdline, and framebuffer resolution. # memory, CPU mode, cmdline, and framebuffer resolution.
# #
# The core itself does NOT bundle any firmware. Users must supply: # The core does NOT use the RetroArch system directory. All firmware paths are
# 1. A bootrom (M-mode firmware): typically OpenSBI fw_payload.bin or fw_jump.bin # specified in the .rvvm config file and resolved relative to its directory.
# 2. Optionally a kernel payload (S-mode): Linux Image, U-Boot, etc. # The core chdir()s to the .rvvm file's parent before initializing the VM.
# 3. Optionally a custom DTB (the core auto-generates one if not provided)
# #
# The .rvvm file is a plain-text key=value config parsed by retro_load_game(): # The .rvvm config format (parsed by retro_load_game):
# bootrom=/path/to/fw_payload.bin # bootrom=/path/to/fw_payload.bin
# kernel=/path/to/Image # kernel=/path/to/Image
# nvme=/path/to/rootfs.img # nvme=/path/to/rootfs.img
@@ -24,80 +26,54 @@ systems: [riscv]
# rv64 # rv64
# cmdline=root=/dev/nvme0n1 rootflags=discard rw console=tty0 # cmdline=root=/dev/nvme0n1 rootflags=discard rw console=tty0
# #
# Paths in the .rvvm file are resolved relative to the .rvvm file's directory # The libretro binding uses an older RVVM API (rvvm_load_bootrom, 4-param
# (the core chdir()s there before vm_init). The bootrom is mandatory - the core # rvvm_create_machine) that has been renamed in the current upstream
# shows "RVVM: No bootrom" if missing. # (rvvm_load_firmware, 3-param rvvm_create_machine). The binding may not
# compile against RVVM HEAD without updates.
# Source references: # Source references:
# libretro binding: src/bindings/libretro/libretro.c # libretro binding: src/bindings/libretro/libretro.c
# firmware loading: src/rvvm.c:rvvm_load_firmware() # config parsing: libretro.c:332-421 (retro_load_game)
# kernel loading: src/rvvm.c:rvvm_load_kernel() (offset 0x200000 rv64, 0x400000 rv32) # VM init + loading: libretro.c:288-330 (vm_init)
# FDT generation: src/rvvm.c:rvvm_init_fdt() (auto-generated if not provided) # firmware loading: rvvm.c:621-628 (rvvm_load_firmware)
# CLI help: src/main.c:rvvm_print_help() # kernel loading: rvvm.c:630-638 (rvvm_load_kernel)
# FDT loading: rvvm.c:641-648 (rvvm_load_fdt, standalone only)
# standalone CLI: main.c:213-282 (rvvm_cli_configure)
files: files:
# -- OpenSBI firmware (required) --
# M-mode firmware loaded at RESET_PC (0x80000000). This is the first code
# executed by the virtual machine. The standard choice is OpenSBI with
# U-Boot as payload (fw_payload.bin) or OpenSBI standalone (fw_jump.bin).
# The core calls rvvm_load_bootrom() which maps to rvvm_load_firmware().
- name: "fw_payload.bin" - name: "fw_payload.bin"
path: "rvvm/fw_payload.bin" path: "rvvm/fw_payload.bin"
required: true required: true
source_ref: "libretro.c:309-315, rvvm.c:621-628" source_ref: "libretro.c:309-314, rvvm.c:621-628"
note: > note: >
OpenSBI firmware with U-Boot payload. This is the M-mode bootrom M-mode firmware loaded at 0x80000000. Typically OpenSBI with U-Boot
loaded at physical address 0x80000000. Without this file, the VM payload (fw_payload.bin) or standalone (fw_jump.bin). Referenced by
cannot start. Common builds: opensbi fw_payload (includes U-Boot), the bootrom= key in the .rvvm config.
or fw_jump.bin (jumps to kernel directly). The file is referenced
by the bootrom= key in the .rvvm config file.
# -- Kernel image (optional) --
# S-mode kernel loaded at offset 0x200000 (rv64) or 0x400000 (rv32) from
# RAM base. Used with fw_jump.bin to boot Linux directly without U-Boot.
- name: "Image" - name: "Image"
path: "rvvm/Image" path: "rvvm/Image"
required: false required: false
source_ref: "libretro.c:316-318, rvvm.c:630-638" source_ref: "libretro.c:316-318, rvvm.c:630-638"
note: > note: >
Linux kernel image or other S-mode payload. Loaded at a fixed offset S-mode kernel payload loaded at offset 0x200000 (rv64) or 0x400000
from RAM base (0x200000 for rv64, 0x400000 for rv32). Only needed (rv32) from RAM base. Only needed with fw_jump.bin as bootrom.
when using fw_jump.bin as bootrom. Referenced by the kernel= key Referenced by the kernel= key in the .rvvm config.
in the .rvvm config file.
# -- Device Tree Blob (optional) --
# Custom FDT passed to the guest. The core auto-generates a complete DTB
# with cpu topology, memory map, and all attached devices if not provided.
- name: "machine.dtb" - name: "machine.dtb"
path: "rvvm/machine.dtb" path: "rvvm/machine.dtb"
required: false required: false
source_ref: "rvvm.c:641-648, main.c:230" mode: standalone
source_ref: "main.c:230, rvvm.c:641-648"
note: > note: >
Custom Flattened Device Tree. The core generates a DTB automatically Custom Flattened Device Tree. The core auto-generates a DTB based on
based on the machine configuration (cpus, memory, devices), so this machine configuration. The libretro binding does not parse a dtb= key
is only needed for special setups. The FDT address is passed to the in the .rvvm config, so this is only usable via the standalone CLI
firmware in register a1 at boot. (-dtb flag).
notes: notes:
emulation_target: >
RVVM emulates a RISC-V machine with rv64imafdcb (or rv32ima) ISA,
SiFive PLIC interrupt controller, NVMe storage, RTL8169 networking,
framebuffer display, HID keyboard/mouse, UART, Goldfish RTC, and
PCI bus. It includes a tracing JIT with x86_64/ARM64/RISC-V backends.
firmware_sources: > firmware_sources: >
OpenSBI builds: https://github.com/riscv-software-src/opensbi/releases OpenSBI: https://github.com/riscv-software-src/opensbi/releases.
Pre-built fw_payload.bin (OpenSBI + U-Boot) for RVVM: Pre-built images for RVVM: https://github.com/LekKit/RVVM/wiki/Running
https://github.com/LekKit/RVVM/wiki/Running info_firmware_count: >
config_format: > .info declares 0 firmware. Correct: the core loads firmware via
The .rvvm file is a plain-text key=value config. Supported keys: user-specified paths in the .rvvm config, not from system_dir.
bootrom, kernel, nvme (up to 4), mem (MB), smp, cmdline, rv64/rv32.
Default: rv64, 256 MB RAM, 1 core, 640x480 framebuffer.
libretro_info: >
Core name: rvvm_libretro. Extension: .rvvm. Experimental: yes.
No save states, no cheats, needs_fullpath=true.
The core does not use the RetroArch system directory for firmware -
all paths are specified in the .rvvm config file relative to its
own directory.

View File

@@ -1,226 +1,179 @@
emulator: SAME CDi emulator: SAME CDi
type: libretro type: libretro
cores: [same_cdi] core_classification: community_fork
source: "https://github.com/libretro/same_cdi" source: "https://github.com/libretro/same_cdi"
profiled_date: "2026-03-18" upstream: "https://github.com/mamedev/mame"
profiled_date: "2026-03-25"
core_version: "Git" core_version: "Git"
display_name: "Philips - CDi (SAME CDi)" display_name: "Philips - CDi (SAME CDi)"
cores: [same_cdi]
systems: systems:
- cdi - cdi
notes: | notes: |
SAME CDi is a Single Arcade Machine Emulator fork of MAME libretro, stripped SAME CDi is a Single Arcade Machine Emulator fork of MAME libretro, stripped
down to just the Philips CD-i driver. The core hardcodes "cdimono1" as the down to just the Philips CD-i driver. The core hardcodes "cdimono1" as the
forced system (retro_init.cpp:86) and searches for MAME ROM ZIPs in: forced system (retro_init.cpp:86,454) and searches for MAME ROM ZIPs in:
<system_dir>/same_cdi/bios/ <system_dir>/same_cdi/bios/
The ROM path (-rp) is built at retro_init.cpp:534 as: The ROM path (-rp) is built at retro_init.cpp:534 as:
<game_path>;<system_dir>/same_cdi/bios/ <game_path>;<system_dir>/same_cdi/bios/
MAME expects each romset as a ZIP containing the individual ROM files listed MAME expects each romset as a ZIP containing the individual ROM files.
below. The ZIP filenames (cdimono1.zip, cdimono2.zip, cdibios.zip) match The ZIP filenames match the MAME driver names. Only cdimono1.zip is required
the MAME driver names. Only cdimono1.zip is required for consumer CD-i games; for consumer CD-i games; other ZIPs are for alternate hardware models or
cdimono2.zip and cdibios.zip are optional (Mono-II and Quizard arcade). Quizard arcade (unreachable without boot_from_cli core option).
cdi2015 is an older MAME 2015-based CD-i core with the same BIOS layout. The driver includes 5 system ROM sets (cdimono1, cdi910, cdimono2, cdi490a,
cdibios) plus Quizard arcade game ROM sets (clones of cdibios with i8751
protection MCU dumps). Upstream MAME has additional ROM sets not present
in this fork (gpi1200, Italian Quizard variants, cdimono2 alternate BIOS).
ROM definitions: src/mame/drivers/cdi.cpp lines 574-650. ROM definitions: src/mame/drivers/cdi.cpp:574-640.
System forced: src/osd/libretro/libretro-internal/retro_init.cpp:86. Quizard game ROMs: src/mame/drivers/cdi.cpp:662-820.
BIOS path: src/osd/libretro/libretro-internal/retro_init.cpp:534. System forced: retro_init.cpp:86,454,525.
Firmware list: same_cdi_libretro.info firmware0-2. BIOS path: retro_init.cpp:534.
files: files:
# ===================================================== - name: cdimono1.zip
# cdimono1.zip - Philips CD-i Mono-I (PAL) - REQUIRED category: bios_zip
# Contains main CPU BIOS + servo/slave MCU dumps
# =====================================================
# Main CPU BIOS (one of three, selected via MAME BIOS switch)
- name: "cdi200.rom"
zip: "cdimono1.zip"
system: cdi
region: [north-america]
required: true
size: 524288 # 0x80000
crc32: "40c4e6b9"
sha1: "d961de803c89b3d1902d656ceb9ce7c02dccb40a"
note: "Magnavox CD-i 200 BIOS. Default BIOS for cdimono1."
source_ref: "src/mame/drivers/cdi.cpp:577"
- name: "cdi220b.rom"
zip: "cdimono1.zip"
system: cdi
region: [europe]
required: true
size: 524288 # 0x80000
crc32: "279683ca"
sha1: "53360a1f21ddac952e95306ced64186a3fc0b93e"
note: "Philips CD-i 220 F2 BIOS. Alternate BIOS for cdimono1."
source_ref: "src/mame/drivers/cdi.cpp:579"
- name: "cdi220.rom"
zip: "cdimono1.zip"
system: cdi
region: [europe]
required: false
size: 524288 # 0x80000
crc32: "584c0af8"
sha1: "5d757ab46b8c8fc36361555d978d7af768342d47"
note: "Philips CD-i 220 BIOS (alternate, does not boot). Marked non-working."
source_ref: "src/mame/drivers/cdi.cpp:581"
# Servo MCU (MC68HC705C8A) - shared with cdi910 dump, BAD_DUMP
- name: "zx405037p__cdi_servo_2.1__b43t__llek9215.mc68hc705c8a_withtestrom.7201"
zip: "cdimono1.zip"
system: cdi system: cdi
required: true required: true
size: 8192 # 0x2000 note: "Forced system. Main CPU BIOS (3 region variants via MAME BIOS switch) + servo/slave MCU dumps."
crc32: "7a3af407" source_ref: "src/mame/drivers/cdi.cpp:574-589"
sha1: "fdf8d78d6a0df4a56b5b963d72eabd39fcec163f" contents:
note: "Servo MCU 2.1, taken from cdi910 (BAD_DUMP, no Mono-I specific dump)." - name: cdi200.rom
source_ref: "src/mame/drivers/cdi.cpp:584" description: Magnavox CD-i 200 BIOS (default, US)
size: 524288
crc32: "40c4e6b9"
sha1: "d961de803c89b3d1902d656ceb9ce7c02dccb40a"
- name: cdi220b.rom
description: Philips CD-i 220 F2 BIOS (alternate, PAL)
size: 524288
crc32: "279683ca"
sha1: "53360a1f21ddac952e95306ced64186a3fc0b93e"
- name: cdi220.rom
description: Philips CD-i 220 BIOS (non-working, does not boot)
size: 524288
crc32: "584c0af8"
sha1: "5d757ab46b8c8fc36361555d978d7af768342d47"
- name: "zx405037p__cdi_servo_2.1__b43t__llek9215.mc68hc705c8a_withtestrom.7201"
description: Servo MCU 2.1 MC68HC705C8A (BAD_DUMP, from cdi910)
size: 8192
crc32: "7a3af407"
sha1: "fdf8d78d6a0df4a56b5b963d72eabd39fcec163f"
- name: "zx405042p__cdi_slave_2.0__b43t__zzmk9213.mc68hc705c8a_withtestrom.7206"
description: Slave MCU 2.0 MC68HC705C8A (BAD_DUMP, from cdi910)
size: 8192
crc32: "688cda63"
sha1: "56d0acd7caad51c7de703247cd6d842b36173079"
# Slave MCU (MC68HC705C8A) - shared with cdi910 dump, BAD_DUMP - name: cdimono2.zip
- name: "zx405042p__cdi_slave_2.0__b43t__zzmk9213.mc68hc705c8a_withtestrom.7206" category: bios_zip
zip: "cdimono1.zip"
system: cdi
required: true
size: 8192 # 0x2000
crc32: "688cda63"
sha1: "56d0acd7caad51c7de703247cd6d842b36173079"
note: "Slave MCU 2.0, taken from cdi910 (BAD_DUMP, no Mono-I specific dump)."
source_ref: "src/mame/drivers/cdi.cpp:587"
# =====================================================
# cdimono2.zip - Philips CD-i Mono-II (NTSC) - OPTIONAL
# MACHINE_NOT_WORKING in MAME
# =====================================================
- name: "philips__cdi-220_ph3_r1.2__mb834200b-15__02f_aa__9402_z04.tc574200-le._1.7211"
zip: "cdimono2.zip"
system: cdi system: cdi
required: false required: false
size: 524288 # 0x80000 note: "CD-i Mono-II (NTSC). MACHINE_NOT_WORKING. Listed in .info as optional."
crc32: "17d723e7" source_ref: "src/mame/drivers/cdi.cpp:609-618"
sha1: "6c317a82e35d60ca5e7a74fc99f665055693169d" contents:
note: "Mono-II main CPU BIOS. Philips CDI-220 PH3 R1.2." - name: "philips__cdi-220_ph3_r1.2__mb834200b-15__02f_aa__9402_z04.tc574200-le._1.7211"
source_ref: "src/mame/drivers/cdi.cpp:623" description: Mono-II main CPU BIOS, Philips CDI-220 PH3 R1.2
size: 524288
crc32: "17d723e7"
sha1: "6c317a82e35d60ca5e7a74fc99f665055693169d"
- name: "zc405351p__servo_cdi_4.1__0d67p__lluk9404.mc68hc705c8a.7490"
description: Mono-II servo MCU 4.1
size: 8192
crc32: "2bc8e4e9"
sha1: "8cd052b532fc052d6b0077261c12f800e8655bb1"
- name: "zc405352p__slave_cdi_4.1__0d67p__lltr9403.mc68hc705c8a.7206"
description: Mono-II slave MCU 4.1
size: 8192
crc32: "5b19da07"
sha1: "cf02d84977050c71e87a38f1249e83c43a93949b"
- name: "zc405351p__servo_cdi_4.1__0d67p__lluk9404.mc68hc705c8a.7490" - name: cdibios.zip
zip: "cdimono2.zip" category: bios_zip
system: cdi system: cdi
required: false required: false
size: 8192 # 0x2000 note: "CD-i BIOS for Quizard arcade. MACHINE_IS_BIOS_ROOT. Subset of cdimono1 + slave MCU."
crc32: "2bc8e4e9" source_ref: "src/mame/drivers/cdi.cpp:630-640"
sha1: "8cd052b532fc052d6b0077261c12f800e8655bb1" contents:
note: "Mono-II servo MCU 4.1." - name: cdi200.rom
source_ref: "src/mame/drivers/cdi.cpp:626" description: Magnavox CD-i 200 BIOS (same as cdimono1)
size: 524288
crc32: "40c4e6b9"
sha1: "d961de803c89b3d1902d656ceb9ce7c02dccb40a"
- name: cdi220b.rom
description: Philips CD-i 220 F2 BIOS (same as cdimono1)
size: 524288
crc32: "279683ca"
sha1: "53360a1f21ddac952e95306ced64186a3fc0b93e"
- name: "zx405042p__cdi_slave_2.0__b43t__zzmk9213.mc68hc705c8a_withtestrom.7206"
description: Slave MCU 2.0 (BAD_DUMP, same as cdimono1)
size: 8192
crc32: "688cda63"
sha1: "56d0acd7caad51c7de703247cd6d842b36173079"
- name: "zc405352p__slave_cdi_4.1__0d67p__lltr9403.mc68hc705c8a.7206" - name: cdi910.zip
zip: "cdimono2.zip" category: bios_zip
system: cdi system: cdi
required: false required: false
size: 8192 # 0x2000 note: "CD-i 910-17P Mini-MMC (PAL). MACHINE_NOT_WORKING. Not in .info firmware list."
crc32: "5b19da07" source_ref: "src/mame/drivers/cdi.cpp:591-607"
sha1: "cf02d84977050c71e87a38f1249e83c43a93949b" contents:
note: "Mono-II slave MCU 4.1." - name: "philips__cd-i_2.1__mb834200b-15__26b_aa__9224_z01.tc574200.7211"
source_ref: "src/mame/drivers/cdi.cpp:629" description: CD-i 910-17P Mini-MMC BIOS (default)
size: 524288
crc32: "4ae3bee3"
sha1: "9729b4ee3ce0c17172d062339c47b1ab822b222b"
- name: cdi910.rom
description: CD-i 910 alternate BIOS
size: 524288
crc32: "2f3048d2"
sha1: "11c4c3e602060518b52e77156345fa01f619e793"
- name: "zx405037p__cdi_servo_2.1__b43t__llek9215.mc68hc705c8a_withtestrom.7201"
description: Servo MCU 2.1 (same ROM as cdimono1, not BAD_DUMP here)
size: 8192
crc32: "7a3af407"
sha1: "fdf8d78d6a0df4a56b5b963d72eabd39fcec163f"
- name: "zx405042p__cdi_slave_2.0__b43t__zzmk9213.mc68hc705c8a_withtestrom.7206"
description: Slave MCU 2.0 (same ROM as cdimono1, not BAD_DUMP here)
size: 8192
crc32: "688cda63"
sha1: "56d0acd7caad51c7de703247cd6d842b36173079"
- name: "ti_portugal_206xf__tibpal20l8-15cnt__m7205n.7205.bin"
description: PAL chip dump
size: 324
crc32: "dd167e0d"
sha1: "2ba82a4619d7a0f19e62e02a2841afd4d45d56ba"
- name: "ti_portugal_774_206xf__tibpal16l8-10cn_m7204n.7204.bin"
description: PAL chip dump
size: 260
crc32: "04e6bd37"
sha1: "153d1a977291bedb7420484a9f889325dbd3628e"
# ===================================================== - name: cdi490a.zip
# cdibios.zip - CD-i BIOS for Quizard arcade - OPTIONAL category: bios_zip
# Subset of cdimono1 ROMs + slave MCU, used by Quizard games
# =====================================================
# cdibios reuses cdi200.rom and cdi220b.rom (same hashes as cdimono1)
# plus the slave MCU. Listed here for completeness of the ZIP contents.
- name: "cdi200.rom"
zip: "cdibios.zip"
system: cdi system: cdi
required: false required: false
size: 524288 # 0x80000 note: "CD-i 490. MACHINE_NOT_WORKING. Not in .info firmware list."
crc32: "40c4e6b9" source_ref: "src/mame/drivers/cdi.cpp:620-628"
sha1: "d961de803c89b3d1902d656ceb9ce7c02dccb40a" contents:
note: "Magnavox CD-i 200 BIOS (same as cdimono1). For Quizard arcade." - name: cdi490a.rom
source_ref: "src/mame/drivers/cdi.cpp:639" description: CD-i 490 main CPU BIOS
size: 524288
- name: "cdi220b.rom" crc32: "e2f200f6"
zip: "cdibios.zip" sha1: "c9bf3c4c7e4fe5cbec3fe3fc993c77a4522ca547"
system: cdi - name: impega.rom
required: false description: MPEG audio decoder ROM
size: 524288 # 0x80000 size: 262144
crc32: "279683ca" crc32: "84d6f6aa"
sha1: "53360a1f21ddac952e95306ced64186a3fc0b93e" sha1: "02526482a0851ea2a7b582d8afaa8ef14a8bd914"
note: "Philips CD-i 220 F2 BIOS (same as cdimono1). For Quizard arcade." - name: vmpega.rom
source_ref: "src/mame/drivers/cdi.cpp:641" description: MPEG video decoder ROM
size: 262144
- name: "zx405042p__cdi_slave_2.0__b43t__zzmk9213.mc68hc705c8a_withtestrom.7206" crc32: "db264e8b"
zip: "cdibios.zip" sha1: "be407fbc102f1731a0862554855e963e5a47c17b"
system: cdi
required: false
size: 8192 # 0x2000
crc32: "688cda63"
sha1: "56d0acd7caad51c7de703247cd6d842b36173079"
note: "Slave MCU 2.0 (BAD_DUMP, same as cdimono1). For Quizard arcade."
source_ref: "src/mame/drivers/cdi.cpp:645"
# =====================================================
# Additional MAME romsets (not in libretro .info firmware list)
# These are part of the MAME driver but not declared as
# required firmware by the libretro core.
# =====================================================
# cdi910 - CD-i 910-17P Mini-MMC (PAL) - MACHINE_NOT_WORKING
- name: "philips__cd-i_2.1__mb834200b-15__26b_aa__9224_z01.tc574200.7211"
zip: "cdi910.zip"
system: cdi
required: false
size: 524288 # 0x80000
crc32: "4ae3bee3"
sha1: "9729b4ee3ce0c17172d062339c47b1ab822b222b"
note: "CD-i 910-17P Mini-MMC BIOS. Not listed in libretro firmware."
source_ref: "src/mame/drivers/cdi.cpp:594"
- name: "cdi910.rom"
zip: "cdi910.zip"
system: cdi
required: false
size: 524288 # 0x80000
crc32: "2f3048d2"
sha1: "11c4c3e602060518b52e77156345fa01f619e793"
note: "CD-i 910 alternate BIOS. Not listed in libretro firmware."
source_ref: "src/mame/drivers/cdi.cpp:596"
# cdi490a - CD-i 490 - MACHINE_NOT_WORKING
- name: "cdi490a.rom"
zip: "cdi490a.zip"
system: cdi
required: false
size: 524288 # 0x80000
crc32: "e2f200f6"
sha1: "c9bf3c4c7e4fe5cbec3fe3fc993c77a4522ca547"
note: "CD-i 490 BIOS. Not listed in libretro firmware."
source_ref: "src/mame/drivers/cdi.cpp:633"
- name: "impega.rom"
zip: "cdi490a.zip"
system: cdi
required: false
size: 262144 # 0x40000
crc32: "84d6f6aa"
sha1: "02526482a0851ea2a7b582d8afaa8ef14a8bd914"
note: "CD-i 490 MPEG audio decoder ROM."
source_ref: "src/mame/drivers/cdi.cpp:636"
- name: "vmpega.rom"
zip: "cdi490a.zip"
system: cdi
required: false
size: 262144 # 0x40000
crc32: "db264e8b"
sha1: "be407fbc102f1731a0862554855e963e5a47c17b"
note: "CD-i 490 MPEG video decoder ROM."
source_ref: "src/mame/drivers/cdi.cpp:637"
platform_details: platform_details:
cdi: cdi:
@@ -232,4 +185,4 @@ platform_details:
rom_path_flag: "-rp" rom_path_flag: "-rp"
rom_search_path: "<game_path>;<system_dir>/same_cdi/bios/" rom_search_path: "<game_path>;<system_dir>/same_cdi/bios/"
supported_extensions: ["chd", "iso", "cue"] supported_extensions: ["chd", "iso", "cue"]
source_ref: "retro_init.cpp:86,534 same_cdi_libretro.info" source_ref: "retro_init.cpp:86,454,525,534"

View File

@@ -1,8 +1,10 @@
emulator: SameBoy emulator: SameBoy
type: libretro type: libretro
core_classification: official_port
source: "https://github.com/libretro/SameBoy" source: "https://github.com/libretro/SameBoy"
profiled_date: "2026-03-18" upstream: "https://github.com/LIJI32/SameBoy"
core_version: "0.14.7" profiled_date: "2026-03-25"
core_version: "0.15.4"
display_name: "Nintendo - Game Boy / Color (SameBoy)" display_name: "Nintendo - Game Boy / Color (SameBoy)"
cores: cores:
- sameboy - sameboy
@@ -13,128 +15,90 @@ systems:
notes: | notes: |
SameBoy is a high-accuracy Game Boy, Game Boy Color and Super Game Boy SameBoy is a high-accuracy Game Boy, Game Boy Color and Super Game Boy
emulator written by Lior Halphon (LIJI32). emulator by LIJI32 (official_port: same author maintains upstream and
libretro fork).
All boot ROMs are optional. SameBoy ships its own open-source boot ROM All boot ROMs are optional. SameBoy compiles open-source boot ROM
replacements compiled from BootROMs/*.asm and embedded directly into replacements from BootROMs/*.asm and embeds them into the libretro
the libretro core binary (extern arrays dmg_boot, cgb_boot, agb_boot, binary (extern arrays dmg_boot, cgb_boot, agb_boot, sgb_boot,
sgb_boot, sgb2_boot in libretro.c:129-130). These built-in boot ROMs sgb2_boot in libretro.c:129-130). These are SameBoy-authored
are SameBoy-authored replacements, not Nintendo originals. replacements, not Nintendo originals.
The libretro port (libretro.c boot_rom_load(), line 513) tries to load The libretro port (boot_rom_load, libretro.c:512-588) tries to load
an external boot ROM from the system directory first. The filename is an external boot ROM from the system directory first. Filename is
constructed as "{model}_boot.bin" where model is one of: dmg0, dmg, constructed as "{model}_boot.bin". If missing, the embedded boot ROM
mgb, sgb, sgb2, cgb0, cgb, agb. If the file is missing or unreadable, is used as fallback.
the embedded boot ROM is used as fallback.
Boot ROM type selection depends on the emulated model configured via Boot ROM selection depends on the sameboy_model core option
the sameboy_model core option (request_boot_rom in Core/gb.c:1588): (request_boot_rom in Core/gb.c:1587-1625):
DMG_B -> GB_BOOT_ROM_DMG -> dmg_boot.bin DMG_B -> GB_BOOT_ROM_DMG -> dmg_boot.bin
MGB -> GB_BOOT_ROM_MGB -> mgb_boot.bin SGB_NTSC/PAL -> GB_BOOT_ROM_SGB -> sgb_boot.bin
SGB/SGB_NTSC -> GB_BOOT_ROM_SGB -> sgb_boot.bin
SGB2 -> GB_BOOT_ROM_SGB2 -> sgb2_boot.bin SGB2 -> GB_BOOT_ROM_SGB2 -> sgb2_boot.bin
CGB_0 -> GB_BOOT_ROM_CGB_0 -> cgb0_boot.bin CGB_A..E -> GB_BOOT_ROM_CGB -> cgb_boot.bin
CGB_A..CGB_E -> GB_BOOT_ROM_CGB -> cgb_boot.bin AGB_A/GBP_A -> GB_BOOT_ROM_AGB -> agb_boot.bin
AGB_A (GBA) -> GB_BOOT_ROM_AGB -> agb_boot.bin
Built-in fallback mapping (some models share a boot ROM): .info declares firmware_count=2 (dmg, cgb only). Actual reachable
DMG_0 and MGB reuse dmg_boot (not yet separately implemented) files in the libretro port are 5 (adds sgb, sgb2, agb).
CGB_0 reuses cgb_boot (not yet separately implemented)
The boot ROM buffer is 0x900 (2304) bytes. DMG/MGB/SGB/SGB2 boot ROMs Unreachable boot ROMs in the libretro port (array entries exist in
are 256 bytes (mapped at 0x0000-0x00FF). CGB/AGB boot ROMs are 2304 boot_rom_load but no model option triggers them):
bytes (mapped at 0x0000-0x00FF and 0x0200-0x08FF). - dmg0_boot.bin: GB_MODEL_DMG_0 commented out (Core/gb.h:100)
- mgb_boot.bin: GB_MODEL_MGB active but not exposed by core options
- cgb0_boot.bin: GB_MODEL_CGB_0 active but not exposed by core options
Upstream standalone (v1.0.3) supports these plus cgbE_boot.bin and
agb0_boot.bin (10 boot ROM types total).
SameDuck (MegaDuck emulator) is a separate project, not part of this No validation performed on loaded boot ROMs. GB_load_boot_rom_from_buffer
core. (Core/gb.c:266-273) does a plain memcpy capped at 0x900 bytes.
files: files:
# --- DMG boot ROM (optional, built-in fallback) ---
- name: "dmg_boot.bin" - name: "dmg_boot.bin"
system: nintendo-gb system: nintendo-gb
description: "Original Game Boy (DMG) boot ROM" description: "Game Boy (DMG) boot ROM"
required: false required: false
hle_fallback: true hle_fallback: true
size: 256 size: 256
source_ref: "libretro.c:519,530,556 (boot_rom_load)" source_ref: "libretro.c:519,530,556 (boot_rom_load); Core/gb.c:1594 (request_boot_rom)"
notes: "Also used as fallback for DMG_0 and MGB models when dedicated boot ROMs are absent."
# --- MGB boot ROM (optional, built-in fallback) ---
- name: "mgb_boot.bin"
system: nintendo-gb
description: "Game Boy Pocket (MGB) boot ROM"
required: false
hle_fallback: true
size: 256
source_ref: "libretro.c:520,531,556"
notes: "Built-in fallback reuses dmg_boot (mgb not separately implemented yet)."
# --- SGB boot ROM (optional, built-in fallback) ---
- name: "sgb_boot.bin" - name: "sgb_boot.bin"
system: nintendo-sgb system: nintendo-sgb
description: "Super Game Boy (SGB) boot ROM" description: "Super Game Boy (SGB) boot ROM"
required: false required: false
hle_fallback: true hle_fallback: true
size: 256 size: 256
source_ref: "libretro.c:521,532,556" source_ref: "libretro.c:521,532,556; Core/gb.c:1600-1604"
notes: "Used for SGB and SGB_NTSC models. Also loaded temporarily when borrowing SGB border for non-SGB games." notes: "Used for SGB_NTSC, SGB_PAL models. Also loaded when borrowing SGB border (Core/gb.c:264)."
# --- SGB2 boot ROM (optional, built-in fallback) ---
- name: "sgb2_boot.bin" - name: "sgb2_boot.bin"
system: nintendo-sgb system: nintendo-sgb
description: "Super Game Boy 2 (SGB2) boot ROM" description: "Super Game Boy 2 (SGB2) boot ROM"
required: false required: false
hle_fallback: true hle_fallback: true
size: 256 size: 256
source_ref: "libretro.c:522,533,556" source_ref: "libretro.c:522,533,556; Core/gb.c:1607"
notes: "Separate from sgb_boot.bin, unlike some other cores that merge SGB/SGB2."
# --- CGB boot ROM (optional, built-in fallback) ---
- name: "cgb_boot.bin" - name: "cgb_boot.bin"
system: nintendo-gbc system: nintendo-gbc
description: "Game Boy Color (CGB) boot ROM" description: "Game Boy Color (CGB) boot ROM"
required: false required: false
hle_fallback: true hle_fallback: true
size: 2304 size: 2304
source_ref: "libretro.c:524,535,556" source_ref: "libretro.c:524,535,556; Core/gb.c:1613-1618"
notes: "Also used as fallback for CGB_0 model (not separately implemented yet)." notes: "Used for CGB revisions A through E in the libretro port."
# --- CGB0 boot ROM (optional, built-in fallback) ---
- name: "cgb0_boot.bin"
system: nintendo-gbc
description: "Game Boy Color early revision (CGB-0) boot ROM"
required: false
hle_fallback: true
size: 2304
source_ref: "libretro.c:523,534,556"
notes: "Built-in fallback reuses cgb_boot (cgb0 not separately implemented yet)."
# --- AGB boot ROM (optional, built-in fallback) ---
- name: "agb_boot.bin" - name: "agb_boot.bin"
system: nintendo-gbc system: nintendo-gbc
description: "Game Boy Advance in GBC mode (AGB) boot ROM" description: "Game Boy Advance in GBC mode (AGB) boot ROM"
required: false required: false
hle_fallback: true hle_fallback: true
size: 2304 size: 2304
source_ref: "libretro.c:525,536,556" source_ref: "libretro.c:525,536,556; Core/gb.c:1621"
notes: "Used when emulating a GBA running GB/GBC software. Enables GBA-enhanced palettes in compatible GBC games." notes: "Enables GBA-enhanced palettes in compatible GBC games."
# --- DMG0 boot ROM (optional, built-in fallback) ---
- name: "dmg0_boot.bin"
system: nintendo-gb
description: "Original Game Boy early revision (DMG-0) boot ROM"
required: false
hle_fallback: true
size: 256
source_ref: "SDL/main.c:640 (standalone), libretro.c:518,529"
notes: "Only referenced in standalone SDL build filename list. Built-in fallback reuses dmg_boot."
builtin_boot_roms: builtin_boot_roms:
description: | description: |
SameBoy includes open-source boot ROM replacements compiled from Open-source boot ROM replacements compiled from BootROMs/ assembly.
assembly source in BootROMs/ directory. These are NOT Nintendo Not Nintendo originals.
originals. They reproduce the boot animation and hardware
initialization but are clean-room implementations.
sources: sources:
- "BootROMs/dmg_boot.asm -> dmg_boot (256 bytes)" - "BootROMs/dmg_boot.asm -> dmg_boot (256 bytes)"
- "BootROMs/sgb_boot.asm -> sgb_boot (256 bytes)" - "BootROMs/sgb_boot.asm -> sgb_boot (256 bytes)"
@@ -157,4 +121,3 @@ builtin_boot_roms:
agb_boot.bin: agb_boot.bin:
md5: "7e095aa30941da3086fa0e9221335370" md5: "7e095aa30941da3086fa0e9221335370"
sha1: "3b6231bdf840fb889f402d0ae89f21adb077323a" sha1: "3b6231bdf840fb889f402d0ae89f21adb077323a"
notes: "These are SameBoy's own boot ROMs, not Nintendo originals. The hashes above identify the built-in versions."

View File

@@ -1,8 +1,25 @@
emulator: "sameduck" emulator: sameduck
type: alias type: libretro
alias_of: "sameboy" core_classification: official_port
profiled_date: "2026-03-18" source: "https://github.com/LIJI32/SameBoy"
core_version: "git" upstream: "https://github.com/LIJI32/SameBoy"
profiled_date: "2026-03-25"
core_version: "0.13.6"
display_name: "Mega Duck / Cougar Boy (SameDuck)" display_name: "Mega Duck / Cougar Boy (SameDuck)"
note: "This core uses the same BIOS/firmware as sameboy. See emulators/sameboy.yml for details." cores:
- sameduck
systems:
- mega-duck
notes: |
SameDuck is the Mega Duck / Cougar Boy branch of SameBoy by LIJI32.
Built from the SameDuck branch of the upstream repo (no separate
libretro fork). The Mega Duck hardware has no boot ROM. All boot ROM
loading functions are stubs in this branch (GB_load_boot_rom returns 0,
request_boot_rom is empty, no BootROMs/ directory exists).
The libretro port loads only game ROMs via GB_load_rom(). No
boot_rom_load_callback is set. retro_system_directory is stored but
never used for file loading.
files: [] files: []

View File

@@ -1,10 +1,13 @@
emulator: ScummVM emulator: ScummVM
type: libretro type: libretro
core_classification: game_engine
source: "https://github.com/libretro/scummvm" source: "https://github.com/libretro/scummvm"
upstream: "https://github.com/scummvm/scummvm"
logo: "https://raw.githubusercontent.com/scummvm/scummvm/master/icons/scummvm.svg" logo: "https://raw.githubusercontent.com/scummvm/scummvm/master/icons/scummvm.svg"
profiled_date: "2026-03-18" profiled_date: "2026-03-25"
core_version: "2.8.0git" core_version: "2.8.0git"
display_name: "ScummVM" display_name: "ScummVM"
cores: [scummvm]
systems: [scummvm] systems: [scummvm]
# ScummVM is a multi-engine point-and-click adventure game interpreter. # ScummVM is a multi-engine point-and-click adventure game interpreter.

View File

@@ -1,7 +1,9 @@
emulator: SDLPAL emulator: SDLPAL
type: libretro type: libretro
core_classification: official_port
source: "https://github.com/sdlpal/sdlpal" source: "https://github.com/sdlpal/sdlpal"
profiled_date: "2026-03-18" upstream: "https://github.com/sdlpal/sdlpal"
profiled_date: "2026-03-25"
core_version: "v2.0.1" core_version: "v2.0.1"
display_name: "SDLPAL" display_name: "SDLPAL"
cores: cores:
@@ -9,175 +11,171 @@ cores:
systems: systems:
- sdlpal - sdlpal
# SDLPAL is an open-source reimplementation of the classic Chinese RPG
# "Xian Jian Qi Xia Zhuan" (Sword and Fairy / PAL) by SoftStar Inc.
#
# It does NOT include any game data. The original game files are proprietary
# and must be obtained separately (e.g. from the Steam release).
#
# The core accepts a .cfg file pointing to the game directory (needs_fullpath).
# When launched without a game (supports_no_game = true), it looks for data
# in <system_dir>/sdlpal/ (libretro.c:201-204).
#
# Data file search (util.c:728-781, UTIL_CheckResourceFiles):
# Required: 13 common .mkf archives + message file (word.dat or m.msg)
# Optional: sound files (voc.mkf, sounds.mkf), music files (midi.mkf, mus.mkf)
#
# Additional optional files loaded at runtime:
# desc.dat - object descriptions (global.c:204, DOS version only)
# mus.mkf - MIDI music archive (audio.c:305)
#
# All files are game data, not BIOS or firmware. No system files are needed
# beyond the original game resource files.
notes: | notes: |
No BIOS or firmware required. SDLPAL is a game engine that needs the Game engine reimplementing the classic Chinese RPG PAL (Sword and Fairy)
original PAL (Sword and Fairy) game data files to run. by SoftStar Inc. No BIOS or firmware required. All files are proprietary
game data from the original 1995 DOS or 1998 Win95 release.
Place game files in <system_dir>/sdlpal/ or point a .cfg file at the Place game files in <system_dir>/sdlpal/ or point a .cfg at the game
game directory. The game is available on Steam (app 1546570). directory. The game is available on Steam (app 1546570). Auto-detects
DOS vs Win95 game data.
The core supports both DOS (original 1995) and Win95 (1998 remake) The libretro port disables MP3, OGG, OPUS, native MIDI, and CD audio
versions of the game data. It auto-detects which version is present. backends (pal_config.h). Only RIX (mus.mkf) and software MIDI synthesis
via Timidity/TinySoundFont (midi.mkf + user-provided soundfont) are
available for music.
files: files:
# ================================================================ # ================================================================
# Required game data archives (proprietary, not distributable) # Required game data archives
# util.c:733-737 - UTIL_CheckResourceFiles common_files[] # util.c:733-737 UTIL_CheckResourceFiles common_files[]
# global.c:175-182 PAL_InitGlobals
# ================================================================ # ================================================================
- name: "abc.mkf" - name: "abc.mkf"
category: game_data category: game_data
path: "sdlpal/abc.mkf" path: "sdlpal/abc.mkf"
required: true required: true
source_ref: "util.c:734, battle.c:879, global.c:55" source_ref: "util.c:734, global.c:55, battle.c:879"
note: > note: "Animation and battle character data archive."
Animation/battle character data archive. Required for battle scenes
and character animations.
- name: "ball.mkf" - name: "ball.mkf"
category: game_data category: game_data
path: "sdlpal/ball.mkf" path: "sdlpal/ball.mkf"
required: true required: true
source_ref: "util.c:734, global.c:177" source_ref: "util.c:734, global.c:177"
note: > note: "Magic effect graphics archive."
Ball/magic effect graphics archive.
- name: "data.mkf" - name: "data.mkf"
category: game_data category: game_data
path: "sdlpal/data.mkf" path: "sdlpal/data.mkf"
required: true required: true
source_ref: "util.c:734, global.c:178" source_ref: "util.c:734, global.c:178"
note: > note: "Core game data archive (scripts, events, game logic)."
Core game data archive containing scripts, events, and game logic.
- name: "f.mkf" - name: "f.mkf"
category: game_data category: game_data
path: "sdlpal/f.mkf" path: "sdlpal/f.mkf"
required: true required: true
source_ref: "util.c:734, global.c:179" source_ref: "util.c:734, global.c:179"
note: > note: "Face/portrait graphics archive."
Face/portrait graphics archive for character dialog.
- name: "fbp.mkf" - name: "fbp.mkf"
category: game_data category: game_data
path: "sdlpal/fbp.mkf" path: "sdlpal/fbp.mkf"
required: true required: true
source_ref: "util.c:735, global.c:175" source_ref: "util.c:735, global.c:175"
note: > note: "Full-screen background picture archive (cutscenes, title)."
Full-screen background picture archive (cutscenes, title screen).
- name: "fire.mkf" - name: "fire.mkf"
category: game_data category: game_data
path: "sdlpal/fire.mkf" path: "sdlpal/fire.mkf"
required: true required: true
source_ref: "util.c:735, global.c:180" source_ref: "util.c:735, global.c:180"
note: > note: "Fire/spell effect graphics archive."
Fire/spell effect graphics archive.
- name: "gop.mkf" - name: "gop.mkf"
category: game_data category: game_data
path: "sdlpal/gop.mkf" path: "sdlpal/gop.mkf"
required: true required: true
source_ref: "util.c:735, res.c:234" source_ref: "util.c:735, res.c:234"
note: > note: "Game object palette/graphics archive."
GOP (game object palette/graphics) archive.
- name: "map.mkf" - name: "map.mkf"
category: game_data category: game_data
path: "sdlpal/map.mkf" path: "sdlpal/map.mkf"
required: true required: true
source_ref: "util.c:735, res.c:233, global.c:55" source_ref: "util.c:735, global.c:55, res.c:233"
note: > note: "Map tile and layout data archive."
Map tile and layout data archive for all game locations.
- name: "mgo.mkf" - name: "mgo.mkf"
category: game_data category: game_data
path: "sdlpal/mgo.mkf" path: "sdlpal/mgo.mkf"
required: true required: true
source_ref: "util.c:736, global.c:176" source_ref: "util.c:736, global.c:176"
note: > note: "Map graphic object (sprite overlay) archive."
Map graphic object (sprite overlay) archive.
- name: "pat.mkf" - name: "pat.mkf"
category: game_data category: game_data
path: "sdlpal/pat.mkf" path: "sdlpal/pat.mkf"
required: true required: true
source_ref: "util.c:736, palette.c:53" source_ref: "util.c:736, palette.c:53"
note: > note: "Palette data archive."
Palette data archive for color management.
- name: "rgm.mkf" - name: "rgm.mkf"
category: game_data category: game_data
path: "sdlpal/rgm.mkf" path: "sdlpal/rgm.mkf"
required: true required: true
source_ref: "util.c:736, global.c:181" source_ref: "util.c:736, global.c:181"
note: > note: "RGM graphics archive."
RGM graphics archive.
- name: "rng.mkf" - name: "rng.mkf"
category: game_data category: game_data
path: "sdlpal/rng.mkf" path: "sdlpal/rng.mkf"
required: true required: true
source_ref: "util.c:736, rngplay.c:402" source_ref: "util.c:736, rngplay.c:402"
note: > note: "RNG animation/cutscene sequence archive."
RNG animation/cutscene sequence archive.
- name: "sss.mkf" - name: "sss.mkf"
category: game_data category: game_data
path: "sdlpal/sss.mkf" path: "sdlpal/sss.mkf"
required: true required: true
source_ref: "util.c:737, global.c:182" source_ref: "util.c:737, global.c:182"
note: > note: "SSS data archive (message offsets in chunk 3)."
SSS data archive.
# ================================================================ # ================================================================
# Message/text data (one of these is required) # Message/text data (both required in default mode)
# util.c:739-741 - msg_files[] # text.c:718-719 PAL_InitText
# ================================================================ # ================================================================
- name: "m.msg"
category: game_data
path: "sdlpal/m.msg"
required: true
source_ref: "util.c:740, text.c:718"
note: "Message text data (dialog, story). Opened via UTIL_OpenRequiredFile in default mode."
- name: "word.dat" - name: "word.dat"
category: game_data category: game_data
path: "sdlpal/word.dat" path: "sdlpal/word.dat"
required: true required: true
source_ref: "util.c:741, text.c:719, global.c:197" source_ref: "util.c:741, text.c:719, global.c:197"
note: > note: "Word data (menu items, status labels, item/spell names)."
Game text/dialog data file (DOS version). Contains all in-game text
strings. Either word.dat or m.msg is needed depending on game version.
- name: "m.msg" # ================================================================
# Object descriptions (DOS version only)
# global.c:204 PAL_LoadObjectDesc -> ui.c:864
# ================================================================
- name: "desc.dat"
category: game_data category: game_data
path: "sdlpal/m.msg" path: "sdlpal/desc.dat"
required: false required: false
source_ref: "util.c:740" source_ref: "global.c:204, ui.c:864"
note: > note: "Object description strings. DOS version only (skipped for Win95). Returns NULL if absent."
Alternative message file format. Used by some game distributions
instead of word.dat. The core checks for a configured message file # ================================================================
first, then falls back to word.dat. # Embedded font files (optional, DOS game data)
# font.c:102-197 PAL_LoadEmbeddedFont
# ================================================================
- name: "wor16.asc"
category: game_data
path: "sdlpal/wor16.asc"
required: false
source_ref: "font.c:114"
note: "Chinese character code mapping for embedded font. Silently skipped if absent."
- name: "wor16.fon"
category: game_data
path: "sdlpal/wor16.fon"
required: false
source_ref: "font.c:172"
note: "Chinese character bitmap font data. Used with wor16.asc for DOS font rendering."
# ================================================================ # ================================================================
# Sound effect files (optional, at least one recommended) # Sound effect files (optional, at least one recommended)
# util.c:743 - sound_files[] # sound.c:962-975 SOUND_Init
# ================================================================ # ================================================================
- name: "voc.mkf" - name: "voc.mkf"
@@ -185,37 +183,78 @@ files:
path: "sdlpal/voc.mkf" path: "sdlpal/voc.mkf"
required: false required: false
source_ref: "util.c:743, sound.c:969" source_ref: "util.c:743, sound.c:969"
note: > note: "VOC format sound effects archive (DOS version). Preferred for DOS game data."
VOC format sound effects archive (DOS version). One of voc.mkf or
sounds.mkf is needed for sound effects.
- name: "sounds.mkf" - name: "sounds.mkf"
category: game_data category: game_data
path: "sdlpal/sounds.mkf" path: "sdlpal/sounds.mkf"
required: false required: false
source_ref: "util.c:743, sound.c:964" source_ref: "util.c:743, sound.c:964"
note: > note: "WAV format sound effects archive (Win95 version). Preferred for Win95 game data."
WAV format sound effects archive (Win95 version). Alternative to
voc.mkf with higher quality audio.
# ================================================================ # ================================================================
# Music files (optional, at least one recommended) # Music files (optional, at least one recommended)
# util.c:744 - music_files[] # audio.c:302-305 AUDIO_OpenDevice
# ================================================================ # ================================================================
- name: "midi.mkf"
category: game_data
path: "sdlpal/midi.mkf"
required: false
source_ref: "util.c:744, midi.c:78, midi_tsf.c:68"
note: >
MIDI music archive. Used when Music type is set to MIDI.
- name: "mus.mkf" - name: "mus.mkf"
category: game_data category: game_data
path: "sdlpal/mus.mkf" path: "sdlpal/mus.mkf"
required: false required: false
source_ref: "util.c:744, audio.c:305" source_ref: "util.c:744, audio.c:305"
note: > note: "RIX/OPL music archive. Default music source, played through OPL emulation."
RIX/OPL music archive. Default music source for the game. Contains
FM synthesizer music data played through OPL emulation. - name: "midi.mkf"
category: game_data
path: "sdlpal/midi.mkf"
required: false
source_ref: "util.c:744, midi.c:78, midi_tsf.c:68, midi_timidity.c:130"
note: "MIDI music archive. Used when Music=MIDI is configured in sdlpal.cfg."
# ================================================================
# AVI cutscene videos (Win95 version only, optional)
# aviplay.c:641-772 PAL_PlayAVI
# Guarded by fEnableAviPlay && fIsWIN95 (global.c:192)
# ================================================================
- name: "1.avi"
category: game_data
path: "sdlpal/1.avi"
required: false
source_ref: "main.c:197"
note: "Trademark screen video (Win95 only). Falls back to RNG animation if absent."
- name: "2.avi"
category: game_data
path: "sdlpal/2.avi"
required: false
source_ref: "main.c:237"
note: "Splash screen video (Win95 only). Falls back to sprite animation if absent."
- name: "3.avi"
category: game_data
path: "sdlpal/3.avi"
required: false
source_ref: "uigame.c:162"
note: "In-game event video (Win95 only)."
- name: "4.avi"
category: game_data
path: "sdlpal/4.avi"
required: false
source_ref: "ending.c:418"
note: "Ending sequence video part 1 (Win95 only)."
- name: "5.avi"
category: game_data
path: "sdlpal/5.avi"
required: false
source_ref: "ending.c:420"
note: "Ending sequence video part 2 (Win95 only)."
- name: "6.avi"
category: game_data
path: "sdlpal/6.avi"
required: false
source_ref: "ending.c:485"
note: "Ending sequence video part 3 (Win95 only)."

View File

@@ -1,7 +1,9 @@
emulator: SimCoupe emulator: SimCoupe
type: libretro type: libretro
core_classification: community_fork
source: "https://github.com/libretro/libretro-simcoupe" source: "https://github.com/libretro/libretro-simcoupe"
profiled_date: "2026-03-18" upstream: "https://github.com/simonowen/simcoupe"
profiled_date: "2026-03-25"
core_version: "Git" core_version: "Git"
display_name: "SAM Coupe (SimCoupe)" display_name: "SAM Coupe (SimCoupe)"
cores: cores:
@@ -10,15 +12,15 @@ systems:
- sam-coupe - sam-coupe
notes: | notes: |
SimCoupe is an emulator for the SAM Coupe, a British 8-bit home SAM Coupe emulator by Simon Owen. Port based on old pre-1.0 SimCoupe
computer by Miles Gordon Technology (1989). The SAM Coupe was codebase. Experimental, incomplete (no sound, partial input).
designed as a successor to the ZX Spectrum with a Z80B CPU at 6 MHz
and custom ASIC graphics.
No external BIOS or ROM files required. The SAM Coupe ROM is built SAM Coupe ROM v3.0 and SAMDOS 2.0 embedded in the binary (SAMROM.h,
into the emulator. The libretro wrapper does not request any files SAMDOS.h). HDBOOT patches for Atom Lite also embedded (HDBOOT.h).
from the system directory. The libretro wrapper never accesses the system directory.
Loads .dsk, .sad, .mgt, .sbt, and .cpm disk images as content. Upstream v1.2.x loads external resource files (samcoupe.rom,
sp0256-al2.bin for VoiceBox speech synthesis). The libretro port
lacks VoiceBox/SP0256 support (commented out in IO.cpp).
files: [] files: []

View File

@@ -1,8 +1,70 @@
emulator: "skyemu" emulator: skyemu
type: alias type: standalone + libretro
alias_of: "mgba" core_classification: official_port
profiled_date: "2026-03-18" source: https://github.com/skylersaleh/SkyEmu/blob/v5/src/libretro.c
core_version: "Git" upstream: https://github.com/skylersaleh/SkyEmu
profiled_date: "2026-03-25"
core_version: "v5"
display_name: "Nintendo - Game Boy/GBA/NDS (SkyEmu)" display_name: "Nintendo - Game Boy/GBA/NDS (SkyEmu)"
note: "This core uses the same BIOS/firmware as mgba. See emulators/mgba.yml for details."
files: [] cores:
- skyemu
systems:
- nintendo-gb
- nintendo-gbc
- nintendo-gba
- nintendo-ds
notes: |
Multi-system emulator by skylersaleh. Libretro core built from the upstream repo.
All BIOS optional; bundles Cult-of-GBA BIOS (GBA), DraStic free BIOS (NDS ARM7/ARM9),
stub firmware (NDS), and HLE boot skip (GB/GBC). BIOS loading controlled by core options
(default: on). Files loaded from system_dir/SkyEmu/ subdirectory.
Standalone validates exact BIOS file size; libretro only rejects files exceeding buffer.
.info missing gb_bios.bin (gb.h:1603).
files:
- name: cgb_boot.bin
description: GBC boot ROM
path: SkyEmu/cgb_boot.bin
required: false
hle_fallback: true
aliases: [gbc_bios.bin, cgb0_boot.bin, cgb_agb_boot.bin]
source_ref: "src/gb.h:1593-1596, 1605-1608"
- name: dmg_rom.bin
description: DMG boot ROM
path: SkyEmu/dmg_rom.bin
required: false
hle_fallback: true
aliases: [dmg0_rom.bin, gb_bios.bin]
source_ref: "src/gb.h:1601-1603"
- name: gba_bios.bin
description: GBA BIOS
path: SkyEmu/gba_bios.bin
required: false
hle_fallback: true
source_ref: "src/gba.h:1726-1730"
- name: nds7.bin
description: NDS ARM7 BIOS
path: SkyEmu/nds7.bin
required: false
hle_fallback: true
source_ref: "src/nds.h:3088-3089"
- name: nds9.bin
description: NDS ARM9 BIOS
path: SkyEmu/nds9.bin
required: false
hle_fallback: true
source_ref: "src/nds.h:3091-3092"
- name: firmware.bin
description: NDS firmware
path: SkyEmu/firmware.bin
required: false
hle_fallback: true
source_ref: "src/nds.h:3094, 3200-3268"

View File

@@ -1,7 +1,9 @@
emulator: SMS Plus GX emulator: SMS Plus GX
type: libretro type: standalone + libretro
core_classification: enhanced_fork
source: "https://github.com/libretro/smsplus-gx" source: "https://github.com/libretro/smsplus-gx"
profiled_date: "2026-03-18" upstream: "https://github.com/ekeeke/smsplus-gx"
profiled_date: "2026-03-25"
core_version: "1.8" core_version: "1.8"
display_name: "Sega - MS/GG (SMS Plus GX)" display_name: "Sega - MS/GG (SMS Plus GX)"
cores: cores:
@@ -11,42 +13,35 @@ systems:
- sega-game-gear - sega-game-gear
- colecovision - colecovision
- sega-sg1000 - sega-sg1000
- sord-m5
notes: | notes: |
SMS Plus GX is a Sega Master System / Game Gear emulator with additional Enhanced fork of Charles MacDonald's SMS Plus 1.3 by Eke-Eke (GX) and
support for ColecoVision, SG-1000 and Sord M5 via TMS9918 VDP emulation. gameblabla. Master System, Game Gear, ColecoVision and SG-1000 emulator.
Standalone ports also support Sord M5 (behind SORDM5_EMU compile flag,
not compiled in libretro build).
BIOS loading happens in bios_init() (smsplus_libretro.c:203-252). BIOS loading in bios_init() (smsplus_libretro.c:203-252). bios.sms is
Two BIOS files are supported: always attempted but only activated when core option smsplus_sms_bios is
"auto" (default: disabled). BIOS.col is loaded only for ColecoVision
ROMs and required for them. Standalone ports use BIOS.sms (uppercase)
instead of bios.sms.
1. bios.sms -- Sega Master System boot ROM. Optional. Loaded for all .info marks BIOS.col as optional (firmware1_opt=true) but the libretro
console types. A core option "smsplus_sms_bios" (default: disabled) code returns false from retro_load_game() when BIOS.col is missing for
controls whether it is used. When set to "auto" and the file exists, .col ROMs.
bios.enabled is set and the SMS boot sequence plays before games.
2. BIOS.col -- ColecoVision BIOS. Required for ColecoVision ROMs only.
Loaded into coleco.rom (0x2000 bytes = 8 KB). Without it, ColecoVision
games will not start and the core logs an error. The filename is
case-sensitive (uppercase BIOS, lowercase .col).
Both files are read from the system directory root (no subdirectory).
Path is built as: system_dir + "/" + filename (smsplus_libretro.c:211,234).
Console type is auto-detected from ROM file extension:
.col -> CONSOLE_COLECO
.sg -> CONSOLE_SG1000
Or forced via the "smsplus_hardware" core option.
files: files:
- name: "bios.sms" - name: "bios.sms"
system: sega-master-system system: sega-master-system
description: "Sega Master System boot ROM" description: "Sega Master System boot ROM"
required: false required: false
aliases: ["BIOS.sms"]
source_ref: "smsplus_libretro.c:211-229" source_ref: "smsplus_libretro.c:211-229"
notes: | notes: |
Loaded into bios.rom (up to 1 MB allocated). Only active when the Loaded into bios.rom (up to 1 MB allocated). Only active when core
core option smsplus_sms_bios is set to "auto". Displays the Sega option smsplus_sms_bios is "auto". Displays SMS startup screen
Master System startup screen before game execution. before game execution. Standalone ports use BIOS.sms (uppercase).
- name: "BIOS.col" - name: "BIOS.col"
system: colecovision system: colecovision
@@ -55,30 +50,18 @@ files:
size: 8192 size: 8192
source_ref: "smsplus_libretro.c:232-248" source_ref: "smsplus_libretro.c:232-248"
notes: | notes: |
Required for ColecoVision games. Read as 0x2000 (8192) raw bytes Required for ColecoVision games. Read as 0x2000 (8192) bytes into
into coleco.rom. Without this file, retro_load_game() returns false coleco.rom. Without this file, retro_load_game() returns false for
when loading .col files. Filename is case-sensitive on Linux. .col files.
platform_details: - name: "BIOS_sordm5.bin"
bios_mapping: system: sord-m5
sms: description: "Sord M5 BIOS ROM"
target: "bios.rom buffer, mapped via slot system" required: false
source_ref: "smsplus_libretro.c:208-229, source/memz80.c" size: 8192
notes: | mode: standalone
When bios.enabled has both bits set (file present + option enabled), source_ref: "ports/sdl/smsplus.c:321-329"
the BIOS ROM is paged into the Z80 address space at startup. The
BIOS executes the boot animation, then hands off to the cartridge.
coleco:
target: "coleco.rom, mapped at 0x0000-0x1FFF"
source_ref: "smsplus_libretro.c:245, source/memz80.c"
notes: |
The ColecoVision BIOS provides the interrupt handler, I/O routines
and startup code. Mapped into the first 8 KB of Z80 address space.
console_detection:
source_ref: "smsplus_libretro.c:605-609, source/loadrom.c:402"
notes: | notes: |
File extension .col forces CONSOLE_COLECO with MAPPER_NONE. Read as 0x2000 (8192) bytes into coleco.rom (shared buffer). Only
Extension .sg forces CONSOLE_SG1000. in standalone builds (SORDM5_EMU define). Not compiled in libretro.
The core option smsplus_hardware can override to: master system, Code does not enforce presence but system needs BIOS to function.
master system II, game gear, game gear (sms compatibility), coleco.

View File

@@ -1,137 +1,49 @@
emulator: snes9x emulator: snes9x
type: libretro type: libretro
core_classification: official_port
source: "https://github.com/libretro/snes9x" source: "https://github.com/libretro/snes9x"
upstream: "https://github.com/snes9xgit/snes9x"
logo: "https://raw.githubusercontent.com/snes9xgit/snes9x/master/gtk/data/snes9x.svg" logo: "https://raw.githubusercontent.com/snes9xgit/snes9x/master/gtk/data/snes9x.svg"
profiled_date: "2026-03-18" profiled_date: "2026-03-25"
core_version: "1.61" core_version: "1.61"
display_name: "Nintendo - SNES / SFC (Snes9x)" display_name: "Nintendo - SNES / SFC (Snes9x)"
systems: [nintendo-snes, nintendo-satellaview, nintendo-sufami-turbo] systems: [nintendo-snes, nintendo-satellaview, nintendo-sufami-turbo]
# snes9x uses HLE for all coprocessors: DSP1-4, ST010, ST011, ST018, CX4.
# No external firmware files are needed for these chips - the emulation
# logic and lookup tables are hardcoded in dsp1.cpp, dsp2.cpp, dsp3.cpp,
# dsp4.cpp, seta010.cpp, seta011.cpp, seta018.cpp, c4emu.cpp.
#
# Unlike bsnes, snes9x does NOT support LLE coprocessor firmware.
# It also does NOT support Super Game Boy (RETRO_GAME_TYPE_SUPER_GAME_BOY
# is defined but never loads a SGB BIOS or boot ROM).
#
# The only external BIOS files used are for Satellaview (BS-X) and
# Sufami Turbo, loaded by LoadBIOS() in libretro/libretro.cpp and
# BSX_LoadBIOS() in bsx.cpp.
#
# BIOS lookup order (LoadBIOS):
# 1. ROM directory (same folder as the game)
# 2. RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY (system dir)
cores: cores:
snes9x: snes9x:
source: "https://github.com/libretro/snes9x" source: "https://github.com/libretro/snes9x"
firmware_loading: true firmware_loading: true
hle_only: true hle_only: true
notes: | notes: |
Current snes9x. Loads BS-X.bin (tries BS-X.bios as fallback) Loads BS-X.bin and STBIOS.bin via LoadBIOS() in libretro.cpp.
and STBIOS.bin via LoadBIOS() in libretro.cpp. BSX_LoadBIOS() in bsx.cpp tries BS-X.bios as fallback.
Auto-detects Sufami Turbo carts (is_SufamiTurbo_Cart) and Auto-detects Satellaview and Sufami Turbo carts on load.
BS-X games (is_bsx) when loading via retro_load_game(). Subsystem support via retro_load_game_special() for
Also handles retro_load_game_special() for multi-cart and RETRO_GAME_TYPE_BSX, RETRO_GAME_TYPE_SUFAMI_TURBO,
subsystem types (RETRO_GAME_TYPE_BSX, RETRO_GAME_TYPE_SUFAMI_TURBO, RETRO_GAME_TYPE_MULTI_CART.
RETRO_GAME_TYPE_MULTI_CART).
snes9x2010:
source: "https://github.com/libretro/snes9x2010"
firmware_loading: true
hle_only: true
notes: |
Based on snes9x 1.52. Same BIOS loading as snes9x current.
BSX_LoadBIOS() in src/bsx.c loads BS-X.bin (fallback BS-X.bios).
STBIOS.bin loaded in src/memmap.c for Sufami Turbo.
snes9x2005:
source: "https://github.com/libretro/snes9x2005"
firmware_loading: false
hle_only: true
notes: |
Based on snes9x 1.43. Detects BS-X and Sufami Turbo ROM headers
in source/memmap.c but has no LoadBIOS function - does not load
external BIOS files. No firmware needed.
snes9x2005_plus:
source: "https://github.com/libretro/snes9x2005"
firmware_loading: false
hle_only: true
notes: |
Same codebase as snes9x2005 with video enhancements.
No external BIOS loading. No firmware needed.
snes9x2002:
source: "https://github.com/libretro/snes9x2002"
firmware_loading: false
hle_only: true
notes: |
Based on snes9x 1.39 (PocketSNES). Minimal core for low-end
devices. No BS-X, no Sufami Turbo, no external BIOS loading.
No firmware needed.
files: files:
# -- BS-X Satellaview BIOS --
# Required by: snes9x, snes9x2010
# Loaded by: LoadBIOS() in libretro.cpp (snes9x) / BSX_LoadBIOS() in bsx.c (snes9x2010)
# Auto-detected when game ROM header matches BS-X signature at 0x7FC0 or 0xFFC0.
# Size validated: must be exactly BIOS_SIZE (0x100000 = 1048576 bytes).
# Filename fallback: BS-X.bin -> BS-X.bios (bsx.cpp:1209-1215)
- name: "BS-X.bin" - name: "BS-X.bin"
system: nintendo-satellaview system: nintendo-satellaview
description: "Satellaview BS-X BIOS (Japanese)" description: "Satellaview BS-X BIOS"
required: false required: false
size: 1048576 size: 1048576
md5: "fed4d8242cfbed61343d53d48432aced" validation: [size]
sha1: "604556b2e62860af18db5a77f2956ebc75450020" source_ref: "libretro.cpp:1209, bsx.cpp:1209,1214"
source_ref: "libretro.cpp:1209 (LoadBIOS, 'BS-X.bin'), bsx.cpp:1209-1215 (BSX_LoadBIOS)"
aliases: ["BS-X.bios"] aliases: ["BS-X.bios"]
notes: "Needed for Satellaview (.bs) game support. Without this file, BS-X games will fail to load." notes: "Needed for Satellaview (.bs) games."
# -- Sufami Turbo BIOS --
# Required by: snes9x, snes9x2010
# Loaded by: LoadBIOS() in libretro.cpp (snes9x) / memmap.c (snes9x2010)
# Auto-detected when cart has "BANDAI SFC-ADX" at offset 0, without "SFC-ADX BACKUP" at 0x10.
# Size: 0x40000 (262144 bytes). Validated by is_SufamiTurbo_BIOS().
- name: "STBIOS.bin" - name: "STBIOS.bin"
system: nintendo-sufami-turbo system: nintendo-sufami-turbo
description: "Bandai SuFami Turbo BIOS (Mini Cartridge add-on)" description: "Sufami Turbo BIOS"
required: false required: false
size: 262144 size: 262144
md5: "d3a44ba7d42a74d3ac58cb9c14c6a5ca" validation: [size]
sha1: "ef86ea192eed03d5c413fdbbfd46043be1d7a127" source_ref: "libretro.cpp:1203,1317, memmap.cpp:1672"
source_ref: "libretro.cpp:1203,1317,1348 (LoadBIOS, 'STBIOS.bin'), memmap.cpp:1672" notes: "Needed for Sufami Turbo multi-cart games."
notes: "Needed for Sufami Turbo multi-cart games. Validated by is_SufamiTurbo_BIOS() which checks for 'BANDAI SFC-ADX' + 'SFC-ADX BACKUP' headers."
notes: notes:
coprocessor_hle: | coprocessor_hle: |
All SNES coprocessor chips are emulated in software (HLE) across All coprocessors are HLE (DSP1-4, ST010, ST011, ST018, CX4).
every snes9x variant. No external firmware files are needed for: No external firmware files needed. Lookup tables and math
- DSP1/DSP1B (dsp1.cpp, static DSP1ROM[1024] lookup table) emulation hardcoded in dsp1-4.cpp, seta010-018.cpp, c4emu.cpp.
- DSP2 (dsp2.cpp)
- DSP3 (dsp3.cpp)
- DSP4 (dsp4.cpp)
- ST010 (seta010.cpp, static ST010_SinTable)
- ST011 (seta011.cpp)
- ST018 (seta018.cpp)
- CX4/Cx4 (c4.cpp, c4emu.cpp, math-based HLE)
This is the key difference from bsnes, which supports both HLE and
LLE (with optional external firmware ROM files).
sgb_status: |
RETRO_GAME_TYPE_SUPER_GAME_BOY (0x104) is defined in libretro.cpp
but no actual SGB emulation exists. No SGB BIOS or boot ROM is
loaded or used by any snes9x variant.
bsx_detection: |
BS-X games are auto-detected by is_bsx() which checks for the
"Satellaview BS-X" signature in the ROM header. When detected,
the BIOS is loaded automatically without user intervention.
sufami_detection: |
Sufami Turbo carts are auto-detected by is_SufamiTurbo_Cart()
which checks for "BANDAI SFC-ADX" at ROM offset 0 and absence
of "SFC-ADX BACKUP" at offset 0x10 (which would indicate BIOS,
not cart). Multi-cart support uses retro_load_game_special().

23
emulators/snes9x2002.yml Normal file
View File

@@ -0,0 +1,23 @@
emulator: Snes9x 2002
type: libretro
core_classification: frozen_snapshot
source: "https://github.com/libretro/snes9x2002"
upstream: "https://github.com/snes9xgit/snes9x"
profiled_date: "2026-03-25"
core_version: "7.2.0"
display_name: "Nintendo - SNES / SFC (Snes9x 2002)"
cores:
- snes9x2002
systems:
- snes
- sufami-turbo
- satellaview
notes: |
Frozen snapshot of Snes9x 1.39 via PocketSNES, optimized for ARM.
SPC700 IPL ROM (64 bytes) embedded in globals.c:283 as APUROM[64].
All ROM I/O via memstream (snes9x.h:54-57). The core never calls
GET_SYSTEM_DIRECTORY and performs no file I/O from the system directory.
exclusion_note: "SPC700 IPL ROM embedded in binary (globals.c:283); no system_directory access"
files: []

25
emulators/snes9x2005.yml Normal file
View File

@@ -0,0 +1,25 @@
emulator: Snes9x 2005
type: libretro
core_classification: frozen_snapshot
source: "https://github.com/libretro/snes9x2005"
upstream: "https://github.com/ShadauxCat/CATSFC"
profiled_date: "2026-03-25"
core_version: "v1.36"
display_name: "Nintendo - SNES / SFC (Snes9x 2005)"
cores:
- snes9x2005
systems:
- snes
- sufami-turbo
- satellaview
notes: |
Frozen snapshot of Snes9x 1.43 via CATSFC (NDS/PSP port by ShadauxCat/Nebuleon).
SPC700 IPL ROM (64 bytes) embedded in globals.c:191 as APUROM[64].
DSP-1 ROM data (1024 x uint16) embedded in dsp1emu.c:8 as DSP1ROM[1024].
All coprocessors (DSP-1/2/4, CX4, ST010/011/018, SuperFX, SPC7110, SA-1, OBC-1)
are pure HLE. The core never calls GET_SYSTEM_DIRECTORY and performs no file I/O
from the system directory.
exclusion_note: "all coprocessor ROMs embedded in binary; no system_directory access"
files: []

View File

@@ -0,0 +1,26 @@
emulator: Snes9x 2005 Plus
type: libretro
core_classification: frozen_snapshot
source: "https://github.com/libretro/snes9x2005"
upstream: "https://github.com/ShadauxCat/CATSFC"
profiled_date: "2026-03-25"
core_version: "v1.36"
display_name: "Nintendo - SNES / SFC (Snes9x 2005 Plus)"
cores:
- snes9x2005_plus
systems:
- snes
- sufami-turbo
- satellaview
notes: |
Same codebase as Snes9x 2005 built with USE_BLARGG_APU=1 for more accurate audio.
Frozen snapshot of Snes9x 1.43 via CATSFC (NDS/PSP port by ShadauxCat/Nebuleon).
SPC700 IPL ROM (64 bytes) embedded in apu_blargg.c:3272 as APUROM[64].
DSP-1 ROM data (1024 x uint16) embedded in dsp1emu.c:8 as DSP1ROM[1024].
All coprocessors (DSP-1/2/4, CX4, ST010/011/018, SuperFX, SPC7110, SA-1, OBC-1)
are pure HLE. The core never calls GET_SYSTEM_DIRECTORY and performs no file I/O
from the system directory.
exclusion_note: "all coprocessor ROMs embedded in binary; no system_directory access"
files: []

40
emulators/snes9x2010.yml Normal file
View File

@@ -0,0 +1,40 @@
emulator: Snes9x 2010
type: libretro
core_classification: frozen_snapshot
source: "https://github.com/libretro/snes9x2010"
upstream: "https://github.com/snes9xgit/snes9x"
profiled_date: "2026-03-25"
core_version: "v1.52.4"
display_name: "Nintendo - SNES / SFC (Snes9x 2010)"
cores:
- snes9x2010
systems:
- snes
- sufami-turbo
- satellaview
notes: |
Frozen snapshot of Snes9x 1.52.4, rewritten in C with optimizations
for PS3 (originally called SNES9x Next).
SPC700 IPL ROM (64 bytes) embedded in src/apu.c:3442 as APUROM[64].
DSP-1 ROM data (1024 x uint16) embedded in src/dsp.c:219 as DSP1ROM[1024].
All coprocessors (DSP-1/2/3/4, CX4, ST010/011/018, SuperFX, SPC7110,
SA-1, S-DD1, S-RTC, OBC-1) are pure HLE.
Sufami Turbo support disabled: LoadSufamiTurbo in src/memmap.c is behind
#if SNES_SUPPORT_MULTI_CART which defaults to 0 and is never enabled in
any Makefile. retro_load_game_special returns false.
Upstream snes9x 1.52 supports Sufami Turbo (loads STBIOS.bin).
files:
- name: "BS-X.bin"
system: satellaview
description: "Satellaview BS-X BIOS"
required: false
size: 1048576
validation: [size]
aliases: ["BS-X.bios"]
source_ref: "src/bsx.c:959-993 (BSX_LoadBIOS), src/bsx.c:1068 (caller in S9xInitBSX)"
notes: |
Loaded when a BS game is auto-detected (is_bsx checks ROM header at
0x7FC0/0xFFC0). Without this file, BSX.bootup is set to FALSE and
BIOSROM is zeroed. BS games still load but lack the boot menu.

View File

@@ -1,94 +1,70 @@
emulator: SquirrelJME emulator: SquirrelJME
type: libretro type: libretro
core_classification: official_port
source: "https://github.com/SquirrelJME/SquirrelJME" source: "https://github.com/SquirrelJME/SquirrelJME"
profiled_date: "2026-03-18" upstream: "https://github.com/SquirrelJME/SquirrelJME"
profiled_date: "2026-03-25"
core_version: "0.3.0" core_version: "0.3.0"
display_name: "Java ME (SquirrelJME)" display_name: "Java ME (SquirrelJME)"
cores: [squirreljme] cores: [squirreljme]
systems: [j2me] systems: [j2me]
verification: existence verification: existence
notes: | notes: |
Java ME 8 virtual machine for libretro. Runs J2ME MIDlets and older flip-phone games. Java ME 8 virtual machine. Runs J2ME MIDlets and older flip-phone games.
The core needs a class library JAR placed in RetroArch's system directory. Requires a class library JAR in the system directory. The core searches
It searches for the JAR using a priority list: versioned-fast first, then versioned, sjme_nvm_romNames[] in priority order and uses the first match found.
then unversioned variants. The first match wins. All entries are optional: without a class library, the core runs a built-in
modeless stars demo but cannot execute J2ME software.
Search order (from nanocoat/src/boot.c sjme_nvm_romNames[]): The .info declares firmware_count=8 but the code defines 10 search names
1. squirreljme-{version}-fast.jar (squirreljme-{version}-test.jar and squirreljme-test.jar are missing from .info).
2. squirreljme-{version}.jar
3. squirreljme-{version}-test.jar
4. squirreljme-{version}-slow.jar
5. squirreljme-{version}-slow-test.jar
6. squirreljme-fast.jar
7. squirreljme.jar
8. squirreljme-test.jar
9. squirreljme-slow.jar
10. squirreljme-slow-test.jar
Current version: 0.3.0. All firmware entries are marked optional in the .info file
because the core can launch its built-in modeless stars demo without a class library.
For actual J2ME software, one of these JARs is required.
The class library JAR is built from the SquirrelJME project itself (not a third-party
BIOS dump). It is open source under MPL-2.0.
files: files:
# -- Versioned JARs (v0.3.0, preferred) --
- name: "squirreljme-0.3.0-fast.jar" - name: "squirreljme-0.3.0-fast.jar"
description: "SquirrelJME class library v0.3.0 (fast/optimized build)" description: "Class library v0.3.0, fast/optimized build"
required: false required: false
bundled: false source_ref: "nanocoat/src/boot.c:102"
source_ref: "nanocoat/src/boot.c:102, squirreljme_libretro.info:firmware5"
note: "Highest priority versioned JAR. Optimized runtime, recommended for normal use."
- name: "squirreljme-0.3.0.jar" - name: "squirreljme-0.3.0.jar"
description: "SquirrelJME class library v0.3.0 (standard build)" description: "Class library v0.3.0, standard build"
required: false required: false
bundled: false source_ref: "nanocoat/src/boot.c:103"
source_ref: "nanocoat/src/boot.c:103, squirreljme_libretro.info:firmware4"
note: "Standard versioned build. Second in search priority." - name: "squirreljme-0.3.0-test.jar"
description: "Class library v0.3.0, standard build with test suites"
required: false
source_ref: "nanocoat/src/boot.c:104"
- name: "squirreljme-0.3.0-slow.jar" - name: "squirreljme-0.3.0-slow.jar"
description: "SquirrelJME class library v0.3.0 (slow/interpreter build)" description: "Class library v0.3.0, slow/interpreter build"
required: false required: false
bundled: false source_ref: "nanocoat/src/boot.c:105"
source_ref: "nanocoat/src/boot.c:105, squirreljme_libretro.info:firmware6"
note: "Pure interpreter mode, no optimizations. Useful for debugging."
- name: "squirreljme-0.3.0-slow-test.jar" - name: "squirreljme-0.3.0-slow-test.jar"
description: "SquirrelJME class library v0.3.0 (slow build with tests)" description: "Class library v0.3.0, slow build with test suites"
required: false required: false
bundled: false source_ref: "nanocoat/src/boot.c:106"
source_ref: "nanocoat/src/boot.c:106, squirreljme_libretro.info:firmware7"
note: "Interpreter mode with built-in test suites."
# -- Unversioned JARs (fallback) --
- name: "squirreljme-fast.jar" - name: "squirreljme-fast.jar"
description: "SquirrelJME class library (fast/optimized, unversioned)" description: "Class library, fast/optimized build (unversioned)"
required: false required: false
bundled: false source_ref: "nanocoat/src/boot.c:107"
source_ref: "nanocoat/src/boot.c:107, squirreljme_libretro.info:firmware1"
note: "Highest priority unversioned JAR. Renamed from a versioned build."
- name: "squirreljme.jar" - name: "squirreljme.jar"
description: "SquirrelJME class library (standard, unversioned)" description: "Class library, standard build (unversioned)"
required: false required: false
bundled: false source_ref: "nanocoat/src/boot.c:108"
source_ref: "nanocoat/src/boot.c:108, squirreljme_libretro.info:firmware0"
note: "Most common filename. If only one JAR is provided, use this name." - name: "squirreljme-test.jar"
description: "Class library, standard build with test suites (unversioned)"
required: false
source_ref: "nanocoat/src/boot.c:109"
- name: "squirreljme-slow.jar" - name: "squirreljme-slow.jar"
description: "SquirrelJME class library (slow/interpreter, unversioned)" description: "Class library, slow/interpreter build (unversioned)"
required: false required: false
bundled: false source_ref: "nanocoat/src/boot.c:110"
source_ref: "nanocoat/src/boot.c:110, squirreljme_libretro.info:firmware2"
note: "Pure interpreter, unversioned."
- name: "squirreljme-slow-test.jar" - name: "squirreljme-slow-test.jar"
description: "SquirrelJME class library (slow with tests, unversioned)" description: "Class library, slow build with test suites (unversioned)"
required: false required: false
bundled: false source_ref: "nanocoat/src/boot.c:111"
source_ref: "nanocoat/src/boot.c:111, squirreljme_libretro.info:firmware3"
note: "Interpreter with tests, unversioned."

View File

@@ -1,57 +1,18 @@
emulator: Stella emulator: Stella
type: libretro type: alias
source: "https://github.com/libretro/stella2014-libretro" alias_of: stella2014
profiled_date: "2026-03-18" source: "https://github.com/libretro/stella-libretro"
core_version: "6.6" profiled_date: "2026-03-25"
core_version: "3.9.3"
display_name: "Atari - 2600 (Stella)" display_name: "Atari - 2600 (Stella)"
cores: cores:
- stella - stella
- stella2014
- stella2023
systems: systems:
- atari-2600 - atari-2600
notes: | note: |
Stella is an Atari 2600 (VCS) emulator. The libretro port available is Identical codebase to stella2014-libretro. Both repos share the same HEAD
stella2014, which is a fork frozen at the 2014 codebase. The upstream commit and produce a binary reporting library_name "Stella 2014". The
"stella-libretro" repo redirects to stella2014-libretro. There is no stella_libretro.info incorrectly lists display_version "6.6"; the actual
separate stella2023 libretro core published at this time. embedded version is 3.9.3. See stella2014.yml for firmware requirements
and KidVid audio files.
The Atari 2600 console has no BIOS ROM. Games run directly on the
hardware with no boot firmware.
The Starpath/Arcadia Supercharger add-on had a 2K BIOS ROM on the
physical hardware. Stella does NOT load this BIOS from an external
file. Instead, the core contains a built-in dummy BIOS
(ourDummyROMCode, 294 bytes in CartAR.cxx) that simulates the
Supercharger load sequence. The initializeROM() function copies this
dummy code into the ROM bank (bank 3) at reset, sets up the 6502
reset vector to 0xF80A, and handles multiload via a hotspot at
address 0x1850.
The "fastscbios" setting (offset 109 in the dummy ROM) controls
whether the SC load progress bars are shown (0x00) or skipped
(0xFF). This is toggled automatically during ROM format detection
(Console.cxx:119-120).
The real Supercharger BIOS ROM (MD5 4565c1a7abce773e53c75b35414adefd)
is recognized in DefProps.hxx as a known cartridge entry but is not
required or loaded as a system file.
The libretro interface (retro_set_environment) does not call
RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY and declares no firmware
requirements. No core option references BIOS loading.
files: []
platform_details:
supercharger_emulation:
source_ref: "stella/src/emucore/CartAR.cxx, CartAR.hxx"
notes: |
The Supercharger (type AR) uses 4 banks: 3x 2K RAM + 1x 2K ROM.
The ROM bank is filled with ourDummyROMCode at reset. SC games
are multi-load images (8448 bytes per load: 8192 data + 256 header).
loadIntoRAM() handles loading game data when the hotspot at 0x1850
is accessed with the ROM bank mapped. The bank switching byte and
start address are written to zero-page RAM (0xFE, 0xFF, 0x80) for
the dummy BIOS to read.

60
emulators/stella2014.yml Normal file
View File

@@ -0,0 +1,60 @@
emulator: Stella 2014
type: libretro
core_classification: frozen_snapshot
source: "https://github.com/libretro/stella2014-libretro"
upstream: "https://github.com/stella-emu/stella"
profiled_date: "2026-03-25"
core_version: "3.9.3"
display_name: "Atari - 2600 (Stella 2014)"
cores:
- stella2014
systems:
- atari_2600
notes: |
Frozen snapshot of Stella 3.9.3. The Atari 2600 has no BIOS ROM; the TIA,
RIOT, and 6507 CPU are fully emulated in software. The SuperCharger (Starpath)
BIOS is emulated via a built-in dummy ROM (ourDummyROMCode in CartAR.cxx:518).
Game properties database (stella.pro) is compiled into DefProps.hxx; external
loading is disabled in the libretro port (PropsSet.cxx:35). The core does not
call GET_SYSTEM_DIRECTORY. KidVid Voice Module audio tapes (7 WAV files) are
loaded via rfopen with relative filenames from the content directory
(KidVid.cxx:166-185); absence is handled gracefully. EEPROM save data for
AtariVox and SaveKey peripherals is managed as NVRAM, not user-supplied.
files:
- name: kvs1.wav
description: "KidVid Voice Module audio tape 1 (Smurfs Save the Day)"
required: false
category: game_data
source_ref: "stella/src/emucore/KidVid.cxx:167,182"
- name: kvs2.wav
description: "KidVid Voice Module audio tape 2 (Smurfs Save the Day)"
required: false
category: game_data
source_ref: "stella/src/emucore/KidVid.cxx:167,182"
- name: kvs3.wav
description: "KidVid Voice Module audio tape 3 (Smurfs Save the Day)"
required: false
category: game_data
source_ref: "stella/src/emucore/KidVid.cxx:167,182"
- name: kvb1.wav
description: "KidVid Voice Module audio tape 1 (Berenstain Bears)"
required: false
category: game_data
source_ref: "stella/src/emucore/KidVid.cxx:167,182"
- name: kvb2.wav
description: "KidVid Voice Module audio tape 2 (Berenstain Bears)"
required: false
category: game_data
source_ref: "stella/src/emucore/KidVid.cxx:167,182"
- name: kvb3.wav
description: "KidVid Voice Module audio tape 3 (Berenstain Bears)"
required: false
category: game_data
source_ref: "stella/src/emucore/KidVid.cxx:167,182"
- name: kvshared.wav
description: "KidVid Voice Module shared audio samples"
required: false
category: game_data
source_ref: "stella/src/emucore/KidVid.cxx:185"

73
emulators/stella2023.yml Normal file
View File

@@ -0,0 +1,73 @@
emulator: Stella 2023
type: libretro
core_classification: frozen_snapshot
source: "https://github.com/libretro/stella2023"
upstream: "https://github.com/stella-emu/stella"
profiled_date: "2026-03-25"
core_version: "7.0_pre"
display_name: "Atari - 2600 (Stella 2023)"
cores:
- stella2023
systems:
- atari_2600
notes: |
Frozen snapshot of Stella development branch (7.0_pre, copyright 2024).
The .info reports display_version 6.6 which does not match the source
(src/common/Version.hxx defines STELLA_VERSION as "7.0_pre").
The Atari 2600 has no BIOS ROM; TIA, RIOT, and 6507 CPU are fully
emulated in software. The SuperCharger (Starpath) BIOS is emulated via
a built-in dummy ROM (ourDummyROMCode in CartAR.cxx:279). The game
properties database is compiled into DefProps.hxx; external loading is
disabled in the libretro port (OSystemLIBRETRO returns
CompositeKeyValueRepositoryNoop for the property repository).
The libretro interface does not call RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY
and declares no firmware requirements (firmware_count=0 in .info).
KidVid Voice Module audio tapes (7 WAV files) are checked via
FSNode::exists() in baseDir (resolves to content directory in the
libretro port). SoundLIBRETRO does not override playWav()/wavSize()
from the base Sound class, so WAV playback is non-functional. Games
work without WAV files using a timing-based fallback in KidVid::setNextSong().
EEPROM save data for AtariVox and SaveKey peripherals is managed as
NVRAM, not user-supplied.
files:
- name: KVS1.WAV
description: "KidVid Voice Module audio tape 1 (Smurfs Save the Day)"
required: false
category: game_data
source_ref: "stella2023/src/emucore/KidVid.cxx:245,273"
- name: KVS2.WAV
description: "KidVid Voice Module audio tape 2 (Smurfs Save the Day)"
required: false
category: game_data
source_ref: "stella2023/src/emucore/KidVid.cxx:245,273"
- name: KVS3.WAV
description: "KidVid Voice Module audio tape 3 (Smurfs Save the Day)"
required: false
category: game_data
source_ref: "stella2023/src/emucore/KidVid.cxx:245,273"
- name: KVB1.WAV
description: "KidVid Voice Module audio tape 1 (Berenstain Bears)"
required: false
category: game_data
source_ref: "stella2023/src/emucore/KidVid.cxx:246,273"
- name: KVB2.WAV
description: "KidVid Voice Module audio tape 2 (Berenstain Bears)"
required: false
category: game_data
source_ref: "stella2023/src/emucore/KidVid.cxx:246,273"
- name: KVB3.WAV
description: "KidVid Voice Module audio tape 3 (Berenstain Bears)"
required: false
category: game_data
source_ref: "stella2023/src/emucore/KidVid.cxx:246,273"
- name: KVSHARED.WAV
description: "KidVid Voice Module shared audio samples"
required: false
category: game_data
source_ref: "stella2023/src/emucore/KidVid.cxx:274"

View File

@@ -1,20 +1,41 @@
emulator: Stone Soup emulator: Stone Soup
type: game type: game
core_classification: frozen_snapshot
source: "https://github.com/libretro/crawl-ref" source: "https://github.com/libretro/crawl-ref"
profiled_date: "2026-03-18" upstream: "https://github.com/crawl/crawl"
core_version: "Git" profiled_date: "2026-03-25"
core_version: "0.16-a0"
display_name: "Dungeon Crawl Stone Soup" display_name: "Dungeon Crawl Stone Soup"
cores: [stonesoup] cores: [stonesoup]
systems: [] systems: []
notes: > notes: |
Dungeon Crawl Stone Soup, a roguelike dungeon crawler. The libretro port is Roguelike dungeon crawler. Fork frozen at DCSS 0.16-a0 (upstream now ~0.32).
built from the crawl-ref source tree (crawl-ref/source/) with TILES=y and Last libretro commit: Oct 2019. Marked experimental.
the libretro backend. The core accepts no content extensions - it launches
directly into a new game or save selection. All game data (tiles, databases, Accepts .crawlrc config files as content (supported_extensions: crawlrc).
descriptions, lua scripts, des files for level generation) is compiled into The libretro wrapper sets -dir to the content directory.
the core binary or loaded from the bundled dat/ directory built alongside ref: libretro/libretro.cc:178-198 — main_wrap() passes -dir content_dir
the core. No BIOS, firmware, or external system files are required. Save
files are stored in the RetroArch save directory. Game data loaded at runtime from dat/ tree via datafile_path().
ref: source/files.cc:375-458 — _get_base_dirs() + datafile_path()
No DATA_DIR_PATH defined in Makefile.libretro — falls back to SysEnv.crawl_dir.
Data is NOT compiled into the binary.
dat/ tree contents (532 files, 16 MB):
- dat/tiles/*.png (floor, wall, feat, player, main, gui, icons) — tiletex.cc:89-97
- dat/DejaVuSans.ttf, dat/DejaVuSansMono.ttf — fontwrapper-ft.cc:79
- dat/descript/*.txt, dat/database/*.txt — database.cc:72-140
- dat/des/*.des (level generation) — maps.cc:1457
- dat/dlua/*.lua, dat/clua/*.lua — maps.cc:1465
- dat/defaults/ (settings)
Not on buildbot.libretro.com/assets/system/.
No divergence in file loading between upstream and libretro fork.
data_directories:
- ref: stonesoup
source_ref: "source/files.cc:375-458"
files: [] files: []
# no BIOS/firmware — game data loaded via data_directories

View File

@@ -1,14 +1,16 @@
emulator: Super Bros War emulator: Super Bros War
type: game type: game
core_classification: game_engine
source: "https://github.com/libretro/superbroswar-libretro" source: "https://github.com/libretro/superbroswar-libretro"
profiled_date: "2026-03-18" upstream: "https://github.com/mmatyas/supermariowar"
profiled_date: "2026-03-25"
core_version: "v0.1" core_version: "v0.1"
display_name: "Super Bros War" display_name: "Super Bros War"
cores: [superbroswar] cores: [superbroswar]
systems: [] systems: []
files: [] files: []
notes: > notes: >
Libretro port of Super Mario War, a fan-made multiplayer battle game Libretro port of Super Mario War, a fan-made multiplayer battle game.
where players stomp each other in Mario-style arenas. All game data (maps, sprites, sounds, tilesets, skins) loads from the
Game data (maps, sprites, sounds) ships with the core repository. content directory via convertPath(). System directory not used for game
No BIOS, firmware, or system directory files required. data, only as save directory fallback.

View File

@@ -1,8 +1,80 @@
emulator: "swanstation" emulator: swanstation
type: alias type: libretro
alias_of: "beetle_psx" core_classification: community_fork
profiled_date: "2026-03-18" source: "https://github.com/libretro/swanstation"
upstream: "https://github.com/stenzek/duckstation"
profiled_date: "2026-03-25"
core_version: "v0.1" core_version: "v0.1"
display_name: "Sony - PlayStation (SwanStation)" display_name: "Sony - PlayStation (SwanStation)"
note: "This core uses the same BIOS/firmware as beetle_psx. See emulators/beetle_psx.yml for details." cores: [swanstation]
files: [] systems: [sony-playstation]
notes: |
Fork of DuckStation maintained by the libretro community after stenzek removed
libretro support. Frozen at an early DuckStation state.
BIOS is required to boot. No HLE fallback.
ref: src/core/system.cpp:667-674 (GetBIOSImage fails = Shutdown)
Auto-detects BIOS by scanning system_dir for files of known sizes.
ref: src/core/host_interface.cpp:183-243 (FindBIOSImageInDirectory)
Accepts PS1 (512 KB), PS2 (4 MB), and PS3 (0x3E66F0) BIOS images.
Only the first 512 KB are loaded (bios.cpp:83, Image(BIOS_SIZE)).
ref: src/core/bios.h:9 (BIOS_SIZE=0x80000, BIOS_SIZE_PS2=0x400000, BIOS_SIZE_PS3=0x3E66F0)
27 known BIOS entries identified by MD5 hash (all PS1 variants).
ref: src/core/bios.cpp:27-70 (s_image_infos)
Each entry has: description, region, hash, patch_compatible flag.
Upstream DuckStation has evolved significantly (105 entries, PS2 BIOS, OpenBIOS,
priority system). SwanStation is frozen at the fork point.
files:
- name: "scph5500.bin"
description: "SCPH-5500 (v3.0 09-09-96 J)"
region: "NTSC-J"
required: false
md5: "8dd7d5296a650fac7319bce665a6a53c"
size: 524288
validation: [size, md5]
source_ref: "src/core/bios.cpp:47"
aliases: []
- name: "scph5501.bin"
description: "SCPH-5501, 5503, 7003 (v3.0 11-18-96 A)"
region: "NTSC-U"
required: false
md5: "490f666e1afb15b7362b406ed1cea246"
size: 524288
validation: [size, md5]
source_ref: "src/core/bios.cpp:48-49"
aliases: []
- name: "scph5502.bin"
description: "SCPH-5502, 5552 (v3.0 01-06-97 E)"
region: "PAL"
required: false
md5: "32736f17079d0b2b7024407c39bd3050"
size: 524288
validation: [size, md5]
source_ref: "src/core/bios.cpp:50-51"
aliases: []
- name: "psxonpsp660.bin"
description: "PSP, SCPH-1000R (v4.5 05-25-00 J)"
region: "Auto"
required: false
md5: "c53ca5908936d412331790f4426c6c33"
size: 524288
validation: [size, md5]
source_ref: "src/core/bios.cpp:65-66"
aliases: []
- name: "ps1_rom.bin"
description: "PS3 (v5.0 06-23-03 A)"
region: "Auto"
required: false
md5: "81bbe60ba7a3d1cea1d48c14cbcc647b"
size: 4089584
validation: [size, md5]
source_ref: "src/core/bios.cpp:70"
aliases: []

View File

@@ -1,14 +1,250 @@
emulator: Syobon Action emulator: Syobon Action
type: game type: game
source: "https://github.com/libretro/syobonaction-libretro" core_classification: community_fork
profiled_date: "2026-03-18" source: "https://github.com/iyzsong/syobonaction-libretro"
core_version: "0.1" upstream: "https://github.com/akemin-dayo/OpenSyobonAction"
profiled_date: "2026-03-25"
core_version: "0.3"
display_name: "Syobon Action" display_name: "Syobon Action"
cores: [syobonaction] cores: [syobonaction]
systems: [] systems: []
files: []
notes: > notes: >
Libretro port of Syobon Action (Cat Mario), a parody platformer known Libretro port of Open Syobon Action (Cat Mario), the SDL port of the
for deceptive traps and unfair level design by z_gundam_tanosii. Japanese platformer by z_gundam_tanosii. Game assets required in
Game data (maps, sprites, sounds) ships with the core repository. system_dir/SyobonAction/ with BGM/, SE/, and res/ subdirectories.
No BIOS, firmware, or system directory files required. Level data hardcoded in source. The original libretro/syobonaction-libretro
repo was deleted; source points to the archived original by iyzsong.
The .info display_version is "0.1" but the code reports "0.3".
files:
# ── res/ - Graphics (required: LoadGraph → exit(1) on failure) ──
- name: player.PNG
path: SyobonAction/res/player.PNG
description: "Player character sprites"
required: true
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:40"
- name: brock.PNG
path: SyobonAction/res/brock.PNG
description: "Block tileset"
required: true
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:42"
- name: item.PNG
path: SyobonAction/res/item.PNG
description: "Item sprites"
required: true
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:44"
- name: teki.PNG
path: SyobonAction/res/teki.PNG
description: "Enemy sprites"
required: true
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:46"
- name: haikei.PNG
path: SyobonAction/res/haikei.PNG
description: "Background graphics"
required: true
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:48"
- name: brock2.PNG
path: SyobonAction/res/brock2.PNG
description: "Alternate block tileset"
required: true
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:50"
- name: omake.PNG
path: SyobonAction/res/omake.PNG
description: "Bonus sprites"
required: true
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:52"
- name: omake2.PNG
path: SyobonAction/res/omake2.PNG
description: "Bonus sprites (set 2)"
required: true
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:54"
- name: syobon3.PNG
path: SyobonAction/res/syobon3.PNG
description: "Title screen"
required: true
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:56"
# ── res/ - Font (required: TTF_OpenFont → exit(1) on failure) ──
- name: sazanami-gothic.ttf
path: SyobonAction/res/sazanami-gothic.ttf
description: "Sazanami Gothic Japanese font for text rendering"
required: true
category: game_data
source_ref: "OpenSyobonAction/DxLib.cpp:73"
# ── BGM/ - Music (optional: LoadMusicMem → NULL on failure, game continues) ──
- name: field.ogg
path: SyobonAction/BGM/field.ogg
description: "Field stage music"
required: false
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:220"
- name: dungeon.ogg
path: SyobonAction/BGM/dungeon.ogg
description: "Dungeon stage music"
required: false
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:221"
- name: star4.ogg
path: SyobonAction/BGM/star4.ogg
description: "Star power music"
required: false
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:222"
- name: castle.ogg
path: SyobonAction/BGM/castle.ogg
description: "Castle stage music"
required: false
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:223"
- name: puyo.ogg
path: SyobonAction/BGM/puyo.ogg
description: "Puyo stage music"
required: false
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:224"
# ── SE/ - Sound effects (optional: LoadSoundMem → NULL on failure, game continues) ──
- name: jump.ogg
path: SyobonAction/SE/jump.ogg
description: "Jump sound"
required: false
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:228"
- name: brockbreak.ogg
path: SyobonAction/SE/brockbreak.ogg
description: "Block break sound"
required: false
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:230"
- name: coin.ogg
path: SyobonAction/SE/coin.ogg
description: "Coin sound"
required: false
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:231"
- name: humi.ogg
path: SyobonAction/SE/humi.ogg
description: "Stomp sound"
required: false
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:232"
- name: koura.ogg
path: SyobonAction/SE/koura.ogg
description: "Shell sound"
required: false
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:233"
- name: dokan.ogg
path: SyobonAction/SE/dokan.ogg
description: "Pipe sound"
required: false
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:234"
- name: brockkinoko.ogg
path: SyobonAction/SE/brockkinoko.ogg
description: "Mushroom from block sound"
required: false
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:235"
- name: powerup.ogg
path: SyobonAction/SE/powerup.ogg
description: "Power-up sound"
required: false
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:236"
- name: kirra.ogg
path: SyobonAction/SE/kirra.ogg
description: "Star sound"
required: false
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:237"
- name: goal.ogg
path: SyobonAction/SE/goal.ogg
description: "Goal sound"
required: false
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:238"
- name: death.ogg
path: SyobonAction/SE/death.ogg
description: "Death sound"
required: false
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:239"
- name: Pswitch.ogg
path: SyobonAction/SE/Pswitch.ogg
description: "P-switch sound"
required: false
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:240"
- name: jumpBlock.ogg
path: SyobonAction/SE/jumpBlock.ogg
description: "Jump block sound"
required: false
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:241"
- name: hintBlock.ogg
path: SyobonAction/SE/hintBlock.ogg
description: "Hint block sound"
required: false
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:242"
- name: 4-clear.ogg
path: SyobonAction/SE/4-clear.ogg
description: "Stage clear sound"
required: false
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:243"
- name: allclear.ogg
path: SyobonAction/SE/allclear.ogg
description: "All stages clear sound"
required: false
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:244"
- name: tekifire.ogg
path: SyobonAction/SE/tekifire.ogg
description: "Enemy fire sound"
required: false
category: game_data
source_ref: "OpenSyobonAction/loadg.cpp:245"

View File

@@ -1,14 +1,17 @@
emulator: TamaLIBretro emulator: TamaLIBretro
type: game type: libretro
source: "https://github.com/libretro/tamern-libretro" core_classification: community_fork
profiled_date: "2026-03-18" source: "https://github.com/celerizer/tamalibretro"
upstream: "https://github.com/jcrona/tamalib"
source_ref: "main.c:345-365 (retro_load_game)"
profiled_date: "2026-03-25"
core_version: "1.0" core_version: "1.0"
display_name: "Bandai - Tamagotchi P1 (TamaLIBretro)" display_name: "Bandai - Tamagotchi P1 (TamaLIBretro)"
cores: [tamalibretro] cores: [tamalibretro]
systems: [] systems: [tamagotchi-p1]
files: [] files: []
notes: > notes: >
Tamagotchi P1 virtual pet simulator for libretro based on TamaLIB. Emulates Bandai Tamagotchi P1 hardware (Epson E0C6S46 CPU) via TamaLIB.
Emulates the Bandai Tamagotchi P1 hardware (E0C6S46 CPU). Loads the Tamagotchi ROM (tama.b from MAME set) as content.
The original Tamagotchi ROM is compiled into the binary. No BIOS or system directory files required.
No content file, BIOS, or system directory files required. .info firmware_count=0 matches the code.

View File

@@ -1,7 +1,9 @@
emulator: TempGBA emulator: TempGBA
type: libretro type: libretro
core_classification: community_fork
source: "https://github.com/libretro/TempGBA-libretro" source: "https://github.com/libretro/TempGBA-libretro"
profiled_date: "2026-03-18" upstream: "https://github.com/Nebuleon/ReGBA"
profiled_date: "2026-03-25"
core_version: "26731013" core_version: "26731013"
display_name: "Nintendo - Game Boy Advance (TempGBA)" display_name: "Nintendo - Game Boy Advance (TempGBA)"
cores: cores:
@@ -10,22 +12,16 @@ systems:
- nintendo-gba - nintendo-gba
notes: | notes: |
TempGBA is a Game Boy Advance emulator forked from gpSP. Originally Fork chain: gpSP (Exophase) -> gpSP Kai (takka) -> TempGBA NDS
developed for the Nintendo DS homebrew scene, the libretro port wraps (Nebuleon) -> TempGBA4PSP (unknown) -> TempGBA-libretro.
the dynarec-based GBA engine for use in RetroArch. PSP-optimized GBA emulator. No HLE BIOS: SWI calls execute from
the real BIOS ROM. The NDS version (ReGBA) added an open-source
The GBA BIOS (gba_bios.bin) is optional. TempGBA includes HLE BIOS BIOS replacement (Normmatt), but TempGBA4PSP did not carry it over.
stubs inherited from gpSP that handle most SWI calls. The real BIOS Boot sequence skipped by default (PC starts at 0x08000000).
improves boot logo display and SWI accuracy for a small number of
titles.
BIOS file goes in the system directory as gba_bios.bin (same path
used by gpSP and mGBA).
files: files:
- name: gba_bios.bin - name: gba_bios.bin
system: nintendo-gba system: nintendo-gba
required: false required: true
hle_fallback: true
size: 16384 size: 16384
note: "GBA BIOS. Optional, HLE stubs cover most software." source_ref: "memory.c:3308-3323 (load_bios), libretro.c:238-314 (retro_load_game returns false if missing)"

View File

@@ -1,7 +1,9 @@
emulator: test emulator: test
type: test type: test
core_classification: pure_libretro
source: "https://github.com/libretro/libretro-samples" source: "https://github.com/libretro/libretro-samples"
profiled_date: "2026-03-18" upstream: "https://github.com/libretro/libretro-samples"
profiled_date: "2026-03-25"
core_version: "v1" core_version: "v1"
display_name: "Test" display_name: "Test"
cores: cores:
@@ -9,10 +11,10 @@ cores:
systems: [] systems: []
notes: | notes: |
Basic test core from libretro-samples. Minimal software-rendered core Test core from libretro-samples. Software-rendered checkerboard pattern
used for sanity-checking the libretro frontend loop (frame timing, input with sine wave audio and input device testing (joypad, mouse, analog,
polling, audio sample generation). lightgun, keyboard, rumble). No emulation, no system files.
No system files, BIOS, or firmware required. Not an emulator. Source: tests/test/libretro-test.c. Single file, no file I/O.
files: [] files: []

View File

@@ -1,7 +1,7 @@
emulator: test_netplay emulator: test_netplay
type: test type: test
source: "https://github.com/libretro/libretro-samples" core_classification: pure_libretro
profiled_date: "2026-03-18" profiled_date: "2026-03-25"
core_version: "1" core_version: "1"
display_name: "Test for netplay" display_name: "Test for netplay"
cores: cores:
@@ -9,11 +9,15 @@ cores:
systems: [] systems: []
notes: | notes: |
Netplay test core from libretro-samples. Designed to validate the libretro Phantom .info: declared in libretro-core-info since 2017 but no source code,
netplay subsystem: deterministic frame stepping, input synchronization, build recipe, or compiled binary exists anywhere in the libretro organization.
savestate serialization for rollback. Renders a simple interactive scene Not on the buildbot. The .info has empty authors, license, and extensions.
where two players can verify sync.
No system files, BIOS, or firmware required. Not an emulator. No system files required.
exclusion_note: >
.info declares no firmware (firmware_count absent). No source code found
to analyze — searched libretro-samples, RetroArch cores, libretro-super,
and the full libretro GitHub org.
files: [] files: []

View File

@@ -1,7 +1,9 @@
emulator: testaudio_callback emulator: testaudio_callback
type: test type: test
core_classification: pure_libretro
source: "https://github.com/libretro/libretro-samples" source: "https://github.com/libretro/libretro-samples"
profiled_date: "2026-03-18" upstream: "https://github.com/libretro/libretro-samples"
profiled_date: "2026-03-25"
core_version: "v1" core_version: "v1"
display_name: "TestAudio Callback" display_name: "TestAudio Callback"
cores: cores:
@@ -11,9 +13,7 @@ systems: []
notes: | notes: |
Audio callback test core from libretro-samples. Tests the Audio callback test core from libretro-samples. Tests the
RETRO_ENVIRONMENT_SET_AUDIO_CALLBACK path where audio runs on a RETRO_ENVIRONMENT_SET_AUDIO_CALLBACK path where audio runs on a
separate thread managed by the frontend. Generates a simple tone separate thread managed by the frontend. Generates a 300 Hz sine
to validate callback-driven audio output. tone to validate callback-driven audio output.
No system files, BIOS, or firmware required. Not an emulator.
files: [] files: []

View File

@@ -1,7 +1,9 @@
emulator: testaudio_no_callback emulator: testaudio_no_callback
type: test type: test
core_classification: pure_libretro
source: "https://github.com/libretro/libretro-samples" source: "https://github.com/libretro/libretro-samples"
profiled_date: "2026-03-18" upstream: "https://github.com/libretro/libretro-samples"
profiled_date: "2026-03-25"
core_version: "v1" core_version: "v1"
display_name: "TestAudio NoCallback" display_name: "TestAudio NoCallback"
cores: cores:
@@ -9,11 +11,8 @@ cores:
systems: [] systems: []
notes: | notes: |
Audio no-callback test core from libretro-samples. Tests the standard Audio test core from libretro-samples. Tests the synchronous audio path
synchronous audio path using retro_audio_sample/retro_audio_sample_batch using retro_audio_sample (no threaded callback). Generates a 300 Hz sine
(no threaded callback). Generates a simple tone to validate the default wave at 30 kHz sample rate.
audio output mode.
No system files, BIOS, or firmware required. Not an emulator.
files: [] files: []

View File

@@ -1,7 +1,9 @@
emulator: testaudio_playback_wav emulator: testaudio_playback_wav
type: test type: test
core_classification: pure_libretro
source: "https://github.com/libretro/libretro-samples" source: "https://github.com/libretro/libretro-samples"
profiled_date: "2026-03-18" upstream: "https://github.com/libretro/libretro-samples"
profiled_date: "2026-03-25"
core_version: "v1" core_version: "v1"
display_name: "TestAudio Playback Wav" display_name: "TestAudio Playback Wav"
cores: cores:
@@ -9,11 +11,10 @@ cores:
systems: [] systems: []
notes: | notes: |
Audio WAV playback test core from libretro-samples. Loads a .wav file WAV playback test core from libretro-samples. Loads a .wav file as content
as content and plays it back through the libretro audio interface. Tests and plays it back through the libretro audio interface. Renders a progress
audio sample rate conversion, buffer management, and content loading for bar on a 320x240 framebuffer. No emulation, no system files.
non-ROM file types.
No system files, BIOS, or firmware required. Not an emulator. Source: audio/audio_playback_wav/libretro-test.c. Single file, no file I/O.
files: [] files: []

View File

@@ -1,7 +1,9 @@
emulator: testgl emulator: testgl
type: test type: test
core_classification: pure_libretro
source: "https://github.com/libretro/libretro-samples" source: "https://github.com/libretro/libretro-samples"
profiled_date: "2026-03-18" upstream: "https://github.com/libretro/libretro-samples"
profiled_date: "2026-03-25"
core_version: "v1" core_version: "v1"
display_name: "TestGL" display_name: "TestGL"
cores: cores:
@@ -9,10 +11,8 @@ cores:
systems: [] systems: []
notes: | notes: |
OpenGL test core from libretro-samples. Validates the hardware-accelerated OpenGL programmable pipeline test core from libretro-samples. Renders two
OpenGL rendering path in the frontend. Renders a spinning triangle or cube spinning quads via GL 2.0+ / GLES 2.0+ shaders through the libretro
using GL calls through the libretro hw_render interface. hw_render interface. Shaders are embedded as string constants in the source.
No system files, BIOS, or firmware required. Not an emulator.
files: [] files: []

View File

@@ -1,7 +1,9 @@
emulator: testgl_compute_shaders emulator: testgl_compute_shaders
type: test type: test
core_classification: pure_libretro
source: "https://github.com/libretro/libretro-samples" source: "https://github.com/libretro/libretro-samples"
profiled_date: "2026-03-18" upstream: "https://github.com/libretro/libretro-samples"
profiled_date: "2026-03-25"
core_version: "v1" core_version: "v1"
display_name: "TestGL ComputeShaders" display_name: "TestGL ComputeShaders"
cores: cores:
@@ -12,8 +14,7 @@ notes: |
OpenGL compute shader test core from libretro-samples. Validates compute OpenGL compute shader test core from libretro-samples. Validates compute
shader support through the libretro hw_render interface. Runs a compute shader support through the libretro hw_render interface. Runs a compute
shader kernel and renders the output, testing GL 4.3+ / GLES 3.1+ shader kernel and renders the output, testing GL 4.3+ / GLES 3.1+
capability in the frontend. capability in the frontend. All visual assets (shaders, textures, mesh)
are bundled in the core's app/ directory alongside the binary.
No system files, BIOS, or firmware required. Not an emulator.
files: [] files: []

View File

@@ -1,7 +1,10 @@
emulator: testgl_ff emulator: testgl_ff
type: test type: test
core_classification: pure_libretro
source: "https://github.com/libretro/libretro-samples" source: "https://github.com/libretro/libretro-samples"
profiled_date: "2026-03-18" upstream: null
source_ref: "video/opengl/libretro_test_gl_fixedfunction/libretro_gl_ff_test.c"
profiled_date: "2026-03-25"
core_version: "v1" core_version: "v1"
display_name: "TestGL (FF)" display_name: "TestGL (FF)"
cores: cores:
@@ -9,11 +12,8 @@ cores:
systems: [] systems: []
notes: | notes: |
OpenGL fixed-function test core from libretro-samples. Similar to testgl OpenGL fixed-function pipeline test core from libretro-samples.
but uses the legacy OpenGL fixed-function pipeline (glBegin/glEnd, matrix Renders a colored quad using glBegin/glEnd and matrix stack (GL 1.4+ / GLES 1.x+).
stack) instead of shaders. Tests frontend compatibility with older GL code No file loading of any kind. supports_no_game.
paths.
No system files, BIOS, or firmware required. Not an emulator.
files: [] files: []

View File

@@ -1,7 +1,9 @@
emulator: testinput_buttontest emulator: testinput_buttontest
type: test type: test
core_classification: pure_libretro
source: "https://github.com/libretro/libretro-samples" source: "https://github.com/libretro/libretro-samples"
profiled_date: "2026-03-18" upstream: "https://github.com/libretro/libretro-samples"
profiled_date: "2026-03-25"
core_version: "v1" core_version: "v1"
display_name: "Button Test" display_name: "Button Test"
cores: cores:
@@ -9,11 +11,10 @@ cores:
systems: [] systems: []
notes: | notes: |
Input button test core from libretro-samples. Displays a visual Input button test core from libretro-samples. Renders an RLE-encoded
representation of all libretro input bindings (joypad buttons, analog controller image and highlights buttons in real time as pressed. Polls
sticks, triggers) and highlights them in real time as they are pressed. joypad and analog inputs. No file I/O.
Used to debug controller mapping and input driver issues.
No system files, BIOS, or firmware required. Not an emulator. Source: input/button_test/libretro.c. Single file, no external dependencies.
files: [] files: []

View File

@@ -1,7 +1,9 @@
emulator: testretroluxury emulator: testretroluxury
type: test type: test
source: "https://github.com/libretro/libretro-samples" core_classification: pure_libretro
profiled_date: "2026-03-18" source: "https://github.com/libretro/retroluxury"
upstream: "https://github.com/leiradel/retroluxury"
profiled_date: "2026-03-25"
core_version: "v1" core_version: "v1"
display_name: "Test RetroLuxury" display_name: "Test RetroLuxury"
cores: cores:
@@ -9,11 +11,8 @@ cores:
systems: [] systems: []
notes: | notes: |
RetroLuxury test core from libretro-samples. Demonstrates the rluxury Tech demo for the retroluxury middleware layer. All resources (sprites, audio,
(RetroLuxury) middleware layer for libretro, which provides a simplified fonts) are embedded in the binary via xxd -i at compile time. No external
game development framework on top of the core API. Used as a reference files loaded at runtime.
implementation for the middleware.
No system files, BIOS, or firmware required. Not an emulator.
files: [] files: []

View File

@@ -1,7 +1,10 @@
emulator: testsw emulator: testsw
type: test type: test
core_classification: pure_libretro
source: "https://github.com/libretro/libretro-samples" source: "https://github.com/libretro/libretro-samples"
profiled_date: "2026-03-18" source_ref: "video/software/rendering/libretro-test.c"
upstream: null
profiled_date: "2026-03-25"
core_version: "v1" core_version: "v1"
display_name: "TestSW" display_name: "TestSW"
cores: cores:
@@ -9,10 +12,8 @@ cores:
systems: [] systems: []
notes: | notes: |
Software rendering test core from libretro-samples. Validates the basic Software rendering test core from libretro-samples. Allocates a 320x240
software framebuffer path (RETRO_HW_FRAME_BUFFER_VALID). Writes pixel XRGB8888 framebuffer and renders a moving checkered pattern. Reference
data directly to the framebuffer without any hardware acceleration. implementation for core authors testing the software rendering path.
No system files, BIOS, or firmware required. Not an emulator.
files: [] files: []

View File

@@ -1,7 +1,10 @@
emulator: testsw_vram emulator: testsw_vram
type: test type: test
core_classification: pure_libretro
source: "https://github.com/libretro/libretro-samples" source: "https://github.com/libretro/libretro-samples"
profiled_date: "2026-03-18" upstream: "https://github.com/libretro/libretro-samples"
source_ref: "video/software/rendering_direct_to_vram/libretro-test.c"
profiled_date: "2026-03-25"
core_version: "v1" core_version: "v1"
display_name: "TestSW VRAM" display_name: "TestSW VRAM"
cores: cores:
@@ -9,10 +12,8 @@ cores:
systems: [] systems: []
notes: | notes: |
Software VRAM test core from libretro-samples. Tests the software rendering Software rendering test core. Renders a checkered pattern directly to VRAM
path with VRAM access patterns, validating how the frontend handles direct via RETRO_ENVIRONMENT_GET_CURRENT_SOFTWARE_FRAMEBUFFER, with fallback to
video memory writes and buffer management. standard framebuffer copy. Single source file, no file I/O.
No system files, BIOS, or firmware required. Not an emulator.
files: [] files: []

View File

@@ -1,7 +1,9 @@
emulator: testvulkan emulator: testvulkan
type: test type: test
core_classification: pure_libretro
source: "https://github.com/libretro/libretro-samples" source: "https://github.com/libretro/libretro-samples"
profiled_date: "2026-03-18" upstream: "https://github.com/libretro/libretro-samples"
profiled_date: "2026-03-25"
core_version: "v1" core_version: "v1"
display_name: "TestVulkan" display_name: "TestVulkan"
cores: cores:
@@ -11,8 +13,8 @@ systems: []
notes: | notes: |
Vulkan test core from libretro-samples. Validates the Vulkan hardware Vulkan test core from libretro-samples. Validates the Vulkan hardware
rendering path in the frontend via the libretro hw_render_interface_vulkan rendering path in the frontend via the libretro hw_render_interface_vulkan
API. Renders a basic scene using Vulkan command buffers and swapchain API. Renders a rotating triangle using Vulkan command buffers and swapchain
integration. integration. Shaders embedded at compile time (SPIR-V).
No system files, BIOS, or firmware required. Not an emulator. No system files, BIOS, or firmware required. Not an emulator.

View File

@@ -1,7 +1,9 @@
emulator: testvulkan_async_compute emulator: testvulkan_async_compute
type: test type: test
core_classification: pure_libretro
source: "https://github.com/libretro/libretro-samples" source: "https://github.com/libretro/libretro-samples"
profiled_date: "2026-03-18" upstream: "https://github.com/libretro/libretro-samples"
profiled_date: "2026-03-25"
core_version: "v1" core_version: "v1"
display_name: "TestVulkan AsyncCompute" display_name: "TestVulkan AsyncCompute"
cores: cores:
@@ -9,10 +11,10 @@ cores:
systems: [] systems: []
notes: | notes: |
Vulkan async compute test core from libretro-samples. Extends testvulkan Vulkan async compute test core from libretro-samples. Exercises async
to exercise async compute queue support in the Vulkan rendering path. compute queue support via the libretro hw_render_interface_vulkan API.
Tests concurrent graphics and compute workloads through the libretro Renders a raymarching demo using concurrent graphics and compute workloads.
hw_render_interface_vulkan API. Compute shader embedded at compile time (SPIR-V).
No system files, BIOS, or firmware required. Not an emulator. No system files, BIOS, or firmware required. Not an emulator.

View File

@@ -1,7 +1,9 @@
emulator: TGB Dual emulator: TGB Dual
type: libretro type: libretro
core_classification: community_fork
source: "https://github.com/libretro/tgbdual-libretro" source: "https://github.com/libretro/tgbdual-libretro"
profiled_date: "2026-03-18" upstream: "http://gigo.retrogames.com/download.html#tgb-dual"
profiled_date: "2026-03-25"
core_version: "v0.8.3" core_version: "v0.8.3"
display_name: "Nintendo - Game Boy / Color (TGB Dual)" display_name: "Nintendo - Game Boy / Color (TGB Dual)"
cores: cores:
@@ -11,22 +13,11 @@ systems:
- nintendo-gbc - nintendo-gbc
notes: | notes: |
TGB Dual is a Game Boy / Game Boy Color emulator by GIGO and Hii with Game Boy / Game Boy Color emulator by GIGO and Hii with link cable support
link cable support for two Game Boy units side by side. for two units side by side. Libretro port based on shinichiro.h's SDL port.
No BIOS or boot ROM files are required or supported. The core does not cpu::reset() initializes PC to 0x100 and sets post-boot register values
call RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY for firmware loading and does (AF=0x01B0 DMG, 0x11B0 CGB), bypassing the boot ROM via HLE.
not attempt to open any files from the system directory. No system directory access, no file I/O for firmware.
In cpu.cpp:57, the program counter is initialized to 0x100 (post-boot ROM
entry point), and cpu::reset() sets all registers to their post-boot
values directly (AF=0x01B0 for DMG, 0x11B0 for CGB). This means the
core completely bypasses the boot ROM sequence via HLE register setup.
The load_rom() path in libretro.cpp passes ROM data directly to the gb
class without any BIOS file concatenation or boot ROM mapping.
Supported extensions: gb, dmg, gbc, cgb, sgb.
Library version: v0.8.3.
files: [] files: []

View File

@@ -1,12 +1,15 @@
emulator: Theodore emulator: Theodore
type: libretro type: libretro
core_classification: pure_libretro
source: "https://github.com/Zlika/theodore" source: "https://github.com/Zlika/theodore"
profiled_date: "2026-03-18" upstream: "http://dcmoto.free.fr/"
core_version: "v4.1" profiled_date: "2026-03-25"
core_version: "Git (post-3.1)"
display_name: "Thomson - MO/TO (Theodore)" display_name: "Thomson - MO/TO (Theodore)"
cores: [theodore] cores: [theodore]
systems: [thomson-to7, thomson-to770, thomson-to8, thomson-to8d, thomson-to9, thomson-to9plus, thomson-mo5, thomson-mo6, olivetti-pc128] systems: [thomson-to7, thomson-to770, thomson-to8, thomson-to8d, thomson-to9, thomson-to9plus, thomson-mo5, thomson-mo6, olivetti-pc128]
notes: > notes: >
All system ROMs (monitor + BASIC) are compiled into the binary. All system ROMs (monitor, BASIC, disk drive controller) are compiled into the binary
No external BIOS files needed. as C arrays in src/rom/*.inc. Derived from Daniel Coulom's DCTO8D/DCTO9P/DCMO5 emulators.
The .info declares no firmware (firmware_count absent), consistent with the code.
files: [] files: []

View File

@@ -1,14 +1,15 @@
emulator: The Powder Toy emulator: The Powder Toy
type: game type: game
core_classification: pure_libretro
source: "https://github.com/libretro/ThePowderToy" source: "https://github.com/libretro/ThePowderToy"
profiled_date: "2026-03-18" upstream: "https://github.com/ThePowderToy/The-Powder-Toy"
profiled_date: "2026-03-25"
core_version: "v92.5.336" core_version: "v92.5.336"
display_name: "The Powder Toy" display_name: "The Powder Toy"
cores: [thepowdertoy] cores: [thepowdertoy]
systems: [] systems: []
files: [] files: []
notes: > notes: >
Libretro port of The Powder Toy, a falling-sand physics simulation game. Falling-sand physics simulation game. All resources (fonts, shaders,
Simulate various materials (powder, liquid, gas, explosive, electronic) images) compiled into the binary. GetSystemDir() declared but never
interacting with each other. Can load .cps save files as content. called. No external files loaded from system directory.
No BIOS, firmware, or system directory files required.

View File

@@ -1,7 +1,9 @@
emulator: TIC-80 emulator: TIC-80
type: libretro type: libretro
core_classification: game_engine
source: "https://github.com/libretro/TIC-80" source: "https://github.com/libretro/TIC-80"
profiled_date: "2026-03-18" upstream: "https://github.com/nesbox/TIC-80"
profiled_date: "2026-03-25"
core_version: "0.80.0" core_version: "0.80.0"
display_name: "TIC-80" display_name: "TIC-80"
cores: cores:
@@ -10,22 +12,17 @@ systems:
- tic80 - tic80
notes: | notes: |
TIC-80 is a fantasy computer for making, playing and sharing tiny games. Fantasy computer for making, playing and sharing tiny games.
The libretro port wraps the nesbox/TIC-80 engine as a submodule. The libretro repo wraps nesbox/TIC-80 as a submodule; the libretro
wrapper (tic80_libretro.c) lives in the upstream repo itself.
The core loads .tic cartridge files (and .png for cart-as-image format) Content loaded entirely via libretro data buffer (need_fullpath = false,
entirely through the libretro data buffer (need_fullpath = false, tic80_libretro.c:340). No call to RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY.
tic80_libretro.c:340). Content bytes are passed directly to tic80_load() No code path reads any file from the system directory. All VM resources
at retro_load_game() (tic80_libretro.c:1152). (sprites, palette, font, sound engine) are compiled into the binary.
The core never calls RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. There is no TIC_MODULE_EXT (dynamic scripting plugins) is disabled in libretro
code path that reads any file from the system directory. No BIOS, firmware, builds via #if !defined(__LIBRETRO__) in tic80_config.h:36.
or boot ROM exists for this platform -- TIC-80 is a self-contained virtual
machine with all system resources built into the engine binary.
The TIC-80 VM provides 80x45 tilemap, 240x136 screen, 256 8x8 sprites,
4 channels of sound, and supports Lua, Moonscript, JavaScript, Wren,
Fennel, Squirrel, Ruby, Python, and Janet as scripting languages.
files: [] files: []
@@ -34,14 +31,12 @@ platform_details:
extensions: "tic, png" extensions: "tic, png"
source_ref: "tic80_libretro.c:339" source_ref: "tic80_libretro.c:339"
notes: | notes: |
.tic is the native cartridge format containing code, sprites, map, .tic is the native cartridge format. .png loads cartridges
sound, and music data. .png support allows loading cartridges
encoded as cover images (code stored in PNG metadata). encoded as cover images (code stored in PNG metadata).
runtime: runtime:
source_ref: "nesbox/TIC-80 (submodule at core/)" source_ref: "nesbox/TIC-80 (submodule at core/)"
notes: | notes: |
The entire TIC-80 runtime (CPU, GPU, APU, scripting engines) is Entire runtime compiled into the binary. No external dependencies.
compiled into the core binary. No external dependencies at runtime.
State serialization uses TIC_PERSISTENT_SIZE * 4 bytes of pmem() State serialization uses TIC_PERSISTENT_SIZE * 4 bytes of pmem()
data (tic80_libretro.c:1203-1243). data (tic80_libretro.c:1203-1243).

View File

@@ -159,6 +159,16 @@ data_directories:
strip_components: 1 strip_components: 1
description: "FreeIntv per-game controller overlay PNGs" description: "FreeIntv per-game controller overlay PNGs"
# ref: crawl-ref/source/files.cc:375-458 — datafile_path() dat/ tree
# Not on buildbot — sourced from libretro repo
# 532 files (tiles, fonts, databases, lua scripts, level descriptions)
stonesoup:
source_url: "https://github.com/libretro/crawl-ref"
source_type: git_subtree
source_path: "crawl-ref/source/dat"
local_cache: data/stonesoup
description: "DCSS game data (tiles, fonts, databases, lua, level descriptions)"
# ref: dirksimple — system/ # ref: dirksimple — system/
dirksimple: dirksimple:
source_url: "https://buildbot.libretro.com/assets/system/DirkSimple.zip" source_url: "https://buildbot.libretro.com/assets/system/DirkSimple.zip"

View File

@@ -557,13 +557,21 @@ def _build_validation_index(profiles: dict) -> dict[str, dict]:
# Hash checks — collect all accepted hashes as sets (multiple valid # Hash checks — collect all accepted hashes as sets (multiple valid
# versions of the same file, e.g. MT-32 ROM versions) # versions of the same file, e.g. MT-32 ROM versions)
if "crc32" in checks and f.get("crc32"): if "crc32" in checks and f.get("crc32"):
norm = f["crc32"].lower() crc_val = f["crc32"]
if norm.startswith("0x"): crc_list = crc_val if isinstance(crc_val, list) else [crc_val]
norm = norm[2:] for cv in crc_list:
index[fname]["crc32"].add(norm) norm = str(cv).lower()
if norm.startswith("0x"):
norm = norm[2:]
index[fname]["crc32"].add(norm)
for hash_type in ("md5", "sha1", "sha256"): for hash_type in ("md5", "sha1", "sha256"):
if hash_type in checks and f.get(hash_type): if hash_type in checks and f.get(hash_type):
index[fname][hash_type].add(f[hash_type].lower()) val = f[hash_type]
if isinstance(val, list):
for h in val:
index[fname][hash_type].add(str(h).lower())
else:
index[fname][hash_type].add(str(val).lower())
# Adler32 — stored as known_hash_adler32 field (not in validation: list # Adler32 — stored as known_hash_adler32 field (not in validation: list
# for Dolphin, but support it in both forms for future profiles) # for Dolphin, but support it in both forms for future profiles)
adler_val = f.get("known_hash_adler32") or f.get("adler32") adler_val = f.get("known_hash_adler32") or f.get("adler32")