feat: core profiles, data_dirs buildbot, cross_ref fix

profiles: amiberry (new), amiarcadia, atari800, azahar, b2,
bk, blastem, bluemsx, freeintv updated with source refs,
upstream field, mode field, data_directories.

_data_dirs.yml: buildbot source for retroarch platforms,
strip_components for nested ZIPs, freeintv-overlays fixed.

cross_reference.py: data_directories-aware gap analysis,
suppresses false gaps when emulator+platform share refs.

refresh_data_dirs.py: ZIP strip_components support,
for_platforms filter, ETag freshness for buildbot.

scraper: bluemsx single ref, freeintv overlays injection.
generate_pack.py: warning on missing data directory cache.
This commit is contained in:
Abdessamad Derraz
2026-03-18 21:20:02 +01:00
parent fbb2079f9b
commit 86dbdf28e5
16 changed files with 540 additions and 156 deletions
+5 -1
View File
@@ -35,4 +35,8 @@ notes: |
No BIOS files required. The emulator has no external firmware dependencies.
Game ROMs are identified by CRC32 for automatic machine configuration.
bios_files: []
files: []
# closed-source core — cannot verify via source code scan.
# firmware_count=0 in .info and docs confirm no BIOS needed.
# signetics 2636/2637 systems have no separate system ROM.
+122
View File
@@ -0,0 +1,122 @@
emulator: Amiberry
type: standalone + libretro
source: "https://github.com/BlitterStudio/amiberry"
upstream: "https://github.com/tonioni/WinUAE"
profiled_date: "2026-03-18"
core_version: "v6.3.4"
display_name: "Commodore - Amiga (Amiberry)"
cores: [amiberry]
systems:
- commodore-amiga
- commodore-cd32
- commodore-cdtv
notes: |
Amiberry is an Amiga emulator based on WinUAE, available as both
standalone and libretro core. No built-in kickstart fallback — a real
Kickstart ROM is required.
Core option "amiberry_kickstart" selects the ROM file:
auto, kick.rom, kick13.rom, kick20.rom, kick31.rom, kick205.rom,
kick40068.A1200, kick40068.A4000, cd32.rom, cdtv.rom.
"auto" selects based on the model option.
ref: BlitterStudio/amiberry/libretro/libretro.cpp:558,621-634
Standalone mode ships with data/ directory (UI icons, virtual keyboards,
floppy sounds, AmigaTopaz.ttf font, gamecontrollerdb.txt). These are
compiled into the standalone binary but the libretro core may look for
them in the system directory.
files:
# --- Required Kickstart ROMs (from .info) ---
# ref: BlitterStudio/amiberry/libretro/libretro.cpp:558
# ref: WinUAE rommgr.cpp for ROM identification
- name: kick34005.A500
system: commodore-amiga
required: true
size: 262144
crc32: c4f0f55f
note: "A500 Kickstart v1.3 rev 34.5"
source_ref: "libretro-super/dist/info/amiberry_libretro.info firmware0"
- name: kick37350.A600
system: commodore-amiga
required: true
size: 524288
crc32: 43b0df7b
note: "A600 Kickstart v2.05 rev 37.350"
source_ref: "amiberry_libretro.info firmware1"
- name: kick40068.A1200
system: commodore-amiga
required: true
size: 524288
crc32: 1483a091
note: "A1200 Kickstart v3.1 rev 40.68"
source_ref: "amiberry_libretro.info firmware2"
# --- Optional Kickstart ROMs ---
- name: kick33180.A500
system: commodore-amiga
required: false
size: 262144
crc32: a6ce1636
note: "A500 Kickstart v1.2 rev 33.180"
source_ref: "amiberry_libretro.info firmware3"
- name: kick40068.A4000
system: commodore-amiga
required: false
size: 524288
crc32: d6bae334
note: "A4000 Kickstart v3.1 rev 40.68"
source_ref: "amiberry_libretro.info firmware4"
- name: kick40060.CD32
system: commodore-cd32
required: false
size: 524288
crc32: 1e62d4a5
note: "CD32 Kickstart v3.1 rev 40.60"
source_ref: "amiberry_libretro.info firmware5"
- name: kick40060.CD32.ext
system: commodore-cd32
required: false
size: 524288
crc32: 87746be2
note: "CD32 Extended ROM rev 40.60"
source_ref: "amiberry_libretro.info firmware6"
# --- Alternative names accepted by core option ---
# these are common user-facing names, same ROMs as above
- name: kick13.rom
system: commodore-amiga
required: false
note: "alias for kick34005.A500 (v1.3)"
source_ref: "libretro.cpp:630"
- name: kick34005.CDTV
system: commodore-cdtv
required: false
note: "CDTV extended ROM"
source_ref: "libretro.cpp:558 cdtv.rom option"
# --- Standalone data files ---
- name: AmigaTopaz.ttf
system: commodore-amiga
required: false
mode: standalone
note: "Amiga Topaz font for UI rendering"
source_ref: "BlitterStudio/amiberry/data/AmigaTopaz.ttf"
- name: gamecontrollerdb.txt
system: commodore-amiga
required: false
mode: standalone
note: "SDL gamepad mapping database"
source_ref: "BlitterStudio/amiberry/controllers/gamecontrollerdb.txt"
+8 -2
View File
@@ -1,6 +1,7 @@
emulator: Atari800
type: libretro
type: standalone + libretro
source: "https://github.com/libretro/libretro-atari800"
upstream: "https://github.com/atari800/atari800"
profiled_date: "2026-03-18"
core_version: "3.1.0"
display_name: "Atari - 400/800/600XL/800XL/130XE/5200 (Atari800)"
@@ -80,8 +81,13 @@ files:
required: false
size: 10240
md5: 4177f386a3bac989a981d3fe3388cb6c
crc32: 0e86d61d
note: >
Atari 400/800 OS Rev B (NTSC). Preferred over Rev A for 400/800 mode.
Atari 400/800 OS Rev B (NTSC). CRC32 0x0e86d61d matches sysrom.c
SYSROM_B_NTSC. Preferred over Rev A for 400/800 mode.
Note: .info lists md5 a3e8d617c95d08031fe1b20d541434b2 which is a
different dump (crc32 3e28a1fe) — both in repo, the CRC32-matched
version is the one sysrom.c auto-detects.
source_ref: "atari800/src/sysrom.c:89, libretro info firmware3"
# -- Atari XL/XE OS --
+23 -3
View File
@@ -1,8 +1,28 @@
emulator: "azahar"
emulator: Azahar
type: alias
alias_of: "citra"
alias_of: citra
source: "https://github.com/azahar-emu/azahar"
upstream: "https://github.com/azahar-emu/azahar"
profiled_date: "2026-03-18"
core_version: "Git"
display_name: "Nintendo - 3DS (Azahar)"
note: "This core uses the same BIOS/firmware as citra. See emulators/citra.yml for details."
notes: |
Azahar is the successor to Citra (via Lime3DS). Same codebase, same
BIOS/firmware requirements. See emulators/citra.yml for the full file list.
Key difference: data directory changed from citra-emu/lime3ds-emu to
azahar-emu. Legacy dirs are still scanned as fallback.
ref: azahar/src/common/common_paths.h:41-47
Files needed (all optional, HLE fallback for most):
sysdata/keys.txt, sysdata/boot9.bin, sysdata/sector0x96.bin,
sysdata/shared_font.bin, sysdata/seeddb.bin, sysdata/otp.bin,
nand/private/movable.sed, nand/rw/sys/SecureInfo_A,
nand/rw/sys/LocalFriendCodeSeed_B
.info has firmware_count=0 but core uses RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY
(src/citra_libretro/environment.cpp:194) to locate system files.
files: []
# all files documented in emulators/citra.yml — same codebase
+33 -94
View File
@@ -1,106 +1,45 @@
emulator: b2
type: standalone
source: "https://github.com/tom-seddon/b2"
type: standalone + libretro
source: "https://github.com/zoltanvb/b2-libretro"
upstream: "https://github.com/tom-seddon/b2"
profiled_date: "2026-03-18"
core_version: "v0.1"
display_name: "Acorn - BBC Micro (b2)"
cores: []
cores: [b2]
systems:
- bbc-micro-b
- bbc-micro-bplus
- bbc-master-128
- bbc-master-compact
# b2 is a standalone BBC Micro emulator by Tom Seddon. It is NOT a libretro
# core -- there is no libretro port. The emulator uses SDL2 and Dear ImGui.
#
# Emulated models (src/b2/BeebConfig.cpp:211-433):
# - BBC Model B (with various disc interfaces: Acorn 1770, Watford, Opus)
# - BBC Model B+ / B+128
# - BBC Master 128 (MOS 3.20 and 3.50)
# - BBC Master Turbo (MOS 3.20 and 3.50, with 65C102 parasite)
# - BBC Model B + 6502 second processor
# - BBC Master Compact (MOS 5.00, 5.10, I5.10C)
# - Olivetti PC 128 S (Master Compact variant)
#
# ROM handling:
# All ROMs ship in the repo under etc/roms/. The emulator loads them via
# GetAssetPath("roms", path) at runtime. No external BIOS files needed.
# ROM paths are defined in src/b2/roms.cpp as BeebROM structs with
# {filename, display_name, StandardROM_enum}.
#
# ROM inventory (etc/roms/):
#
# BBC Model B:
# OS12.ROM 16384 md5:0a59a5ba15fe8557b5f7fee32bbd393a OS 1.20
# BASIC2.ROM 16384 md5:2cc67be4624df4dc66617742571a8e3d BASIC II
#
# BBC Model B+:
# B+MOS.rom 16384 md5:47a1eff6c7fbb47be780c87dfd50ece1 B+ MOS
# BASIC2.ROM 16384 (shared with Model B)
#
# Disc interfaces (sideways ROMs, slot 14):
# acorn/DFS-2.26.rom 16384 md5:f083f49d6fe66344c650d7e74249cb96 Acorn 1770 DFS
# watford/DDFS-1.53.rom 16384 md5:d2b71fa664f6cdf8c24b9b304777998c Watford DDFS (DDB2)
# watford/DDFS-1.54T.rom 16384 md5:e73a0417278504a6dfac2ccd9a73e9a9 Watford DDFS (DDB3)
# opus/OPUS-DDOS-3.45.rom 16384 md5:d98316eaff56ceab4fe3bfe54d2f92b2 Opus DDOS
# opus/challenger-1.01.rom 16384 md5:67e086a11834f8cc69175b601c4e5a5f Opus Challenger
#
# BBC Master 128 MOS 3.20 (M128/3.20/):
# mos.rom 16384 md5:9087f772447038a00178488b3591347b MOS 3.20 OS
# terminal.rom 16384 md5:7e053353b78b4631c274280931d96f02 Terminal (slot f)
# view.rom 16384 md5:178d09285727d596f8863f94a2fc8dad View (slot e)
# adfs.rom 16384 md5:10f08b255d6a6e3e888631946b628f1a ADFS (slot d)
# basic4.rom 16384 md5:63a6f43cbf491533cb03ceca2d2728d4 BASIC IV (slot c)
# edit.rom 16384 md5:cb3d762eaab6130d1360e1ac575589de Edit (slot b)
# viewsht.rom 16384 md5:7d5a80a8ce929d0a0f6ca8626cb9f436 Viewsheet (slot a)
# dfs.rom 16384 md5:865a0f7a5d6f10f48798801bf514d761 DFS (slot 9)
#
# BBC Master 128 MOS 3.50 (M128/3.50/):
# mos.rom 16384 md5:d7a046b1e6a9991748cee05332f1e258 MOS 3.50 OS
# terminal.rom 16384 md5:b1fa51fd49d31224ecb7e10e6908ec01 Terminal (slot f)
# view.rom 16384 md5:1566fab2f1827fb7ba61b283b828731d View (slot e)
# adfs.rom 16384 md5:fb8ceb72c5fbd9dd80eedd10d076b1a2 ADFS (slot d)
# basic4.rom 16384 md5:e11eed95d1caba8aa9772e9001590585 BASIC IV (slot c)
# edit.rom 16384 md5:8c72c7f24567cb4a2fb15eb0b0aeb55b Edit (slot b)
# viewsht.rom 16384 md5:1bc68b7c5eba6a2de2a43c9d1d9d983b Viewsheet (slot a)
# dfs.rom 16384 md5:22c2b7f14f244da21d630a7828541c79 DFS (slot 9)
#
# Parasite processors:
# MasterTurboParasite.rom 2048 md5:83d73e0e78693bb4b43e7cb18e58d556 65C102 TUBE 1.20
# TUBE110.rom 2048 md5:a77c7946128ca0b2c5e5a66b17c99dae 6502 TUBE 1.10
#
# BBC Master Compact MOS 5.00 (MCompact/5.00/):
# mos.rom 16384 md5:5d1b635e39aa461f17db2344870dda36 MOS 5.00 OS
# utils.rom 16384 md5:4f9ded16f44278a4ca0ef4e66822e316 UTILS (slot f)
# basic4.rom 16384 md5:64b3cd52e36b5262ac6ca3a9823c6ee2 BASIC IV (slot e)
# adfs.rom 16384 md5:bfbd0a7dbbfb1f1f4ba5ac0343c1f8ce ADFS (slot d)
#
# BBC Master Compact MOS 5.10 (MCompact/5.10/):
# mos.rom 16384 md5:f65eb89c7044e328b79f2ef8e51b7fd8 MOS 5.10 OS
# utils.rom 16384 md5:48a197850113b00a1eb141fb6d3ea135 UTILS (slot f)
# basic4.rom 16384 md5:64b3cd52e36b5262ac6ca3a9823c6ee2 BASIC IV (slot e, same as 5.00)
# adfs.rom 16384 md5:c2afc1cabb135e6f2254bcf9300a9b83 ADFS (slot d)
#
# Olivetti PC 128 S / MOS I5.10C (MCompact/I5.10C/):
# mos.rom 16384 md5:5e16a38bd7fd6f07f26b5a64826e4ec6 MOS I5.10C OS
# utils.rom 16384 md5:75364aa6fd5e134a40051d9ee772df37 UTILS (slot f)
# basic4.rom 16384 md5:717df34edae5b6bf5bbd8879c0d13022 BASIC IV (slot e)
# adfs.rom 16384 md5:10f23a239dde39b7fe09d72083709e93 ADFS (slot d)
#
# ROM type system (src/beeb/include/beeb/roms.inl):
# Sideways ROMs support banked mappers: 16KB (standard), CCIWORD (32KB),
# CCIBASE (64KB), CCISPELL (128KB), PALQST/PALWAP/PALTED, ABEP, ABE,
# Trilogy (64KB), MO2 (128KB). OS ROM types: 16KB, Compact (64KB),
# MegaROM (128KB), Multi-OS (512KB with 4 banks).
#
# Memory map (src/beeb/include/beeb/type.h):
# OS ROM mapped at $C000-$FFFF (MOS big pages). Sideways ROMs in 16 banks
# at $8000-$BFFF, selected via ROMSEL register at $FE30.
notes: |
b2 is a standalone BBC Micro emulator (SDL2 + Dear ImGui). Not a libretro core.
All required ROMs are bundled in the repository under etc/roms/.
No external BIOS files need to be provided by the user.
b2 is a BBC Micro emulator by Tom Seddon. Libretro port by Zoltan Balogh.
ref: zoltanvb/b2-libretro, tom-seddon/b2
bios_files: []
Standalone: loads ROMs from etc/roms/ via GetAssetPath().
ref: tom-seddon/b2/src/b2/roms.cpp:9-10
Libretro port (experimental): GetAssetPath stubbed in
src/libretro/adapters.cpp to return relative paths. LoadFile also
stubbed (returns false). ROM loading mechanism unclear — the 256 ROM
files are in the repo but the stub suggests they may not load at runtime.
is_experimental=true in .info.
ref: zoltanvb/b2-libretro/src/libretro/adapters.cpp
256 ROM files in etc/roms/ cover: BBC Model B (OS 1.20, BASIC II),
Model B+ (B+MOS), Master 128 (MOS 3.20, 3.50), Master Compact
(MOS 5.00, 5.10, I5.10C/Olivetti), parasite processors (65C102 TUBE,
6502 TUBE), disc interfaces (Acorn 1770, Watford, Opus).
All ROMs ship with both standalone and libretro repos.
No external BIOS files needed by the user for either mode.
files: []
# 256 ROMs bundled in repo etc/roms/ — not loaded from system dir
# standalone loads via GetAssetPath("roms", path) -> etc/roms/
# libretro port has LoadFile stubbed — ROM loading mechanism TBD
# is_experimental=true, core may not fully function
# closed-source analysis note: core binary on buildbot contains
# "Retro ROM DIRECTORY" and "system_dir" strings but LoadFile stub
# returns false. needs further investigation when port matures.
+4 -4
View File
@@ -19,16 +19,16 @@ systems:
# Slow BK-0011M (model 4) - same ROMs as model 3
# Terak 8510/a (model 9)
#
# ROM loading (boot.c:83-116):
# ROM loading (boot.c:84-117):
# BK-0010 models use load_rom() which maps ROM into emulated memory at
# specific addresses: monitor at 0100000 (8 KB), BASIC/FOCAL at 0120000
# (24448-24576 bytes), disk controller at 0160000 (4 KB).
# BK-0011M uses load_rom11() which loads into separate ROM buffer arrays.
#
# ROM file resolution (libretro.c:1051-1108):
# Files are loaded from {system_dir}/bk/{filename} (libretro.c:724-726).
# ROM file resolution (libretro.c:1051-1094):
# Files are loaded from {system_dir}/bk/{filename} (libretro.c:720-728).
# If not found with original casing, the loader retries with lowercase
# filename (libretro.c:1074-1079).
# filename (libretro.c:1071-1081).
#
# All ROM files are required for their respective model. The core calls
# environ_cb(RETRO_ENVIRONMENT_SHUTDOWN) if any ROM file is missing.
+24 -2
View File
@@ -1,6 +1,7 @@
emulator: BlastEm
type: libretro
type: standalone + libretro
source: "https://github.com/libretro/blastem"
upstream: "https://www.retrodev.com/blastem/"
profiled_date: "2026-03-18"
core_version: "v0.6.3-pre"
display_name: "Sega - Mega Drive - Genesis (BlastEm)"
@@ -28,7 +29,28 @@ notes: |
Sega CD / Mega CD is not supported (only a TODO comment in system.c:16).
No BIOS files are required or loaded by the libretro core.
files: []
files:
# rom.db is embedded in the libretro binary (libblastem.c:532-540,
# extern const char rom_db_data[]). The external file is an optional
# override — .info lists it as firmware0_opt=true.
# .info sha1 E5414FB1C4CC7D7F5101C07E4547316779BA3D97 does not match
# the version in our repo (sha1 02c287d1...) — rom.db changes between
# BlastEm releases.
- name: rom.db
system: sega-megadrive
required: false
note: "ROM feature database (game-specific mapper/save config). Embedded in core, external is optional override."
source_ref: "libblastem.c:532-540 read_bundled_file()"
# TMSS ROM — only used in standalone mode with tmss-enabled model
# libretro build returns NULL for tmss.md (libblastem.c:541)
- name: tmss.md
system: sega-megadrive
required: false
mode: standalone
size: 2048
note: "TMSS startup ROM. Standalone only (models md1va6, md2va1+). Libretro core uses md1va3 (tmss off), no way to change."
source_ref: "genesis.c:1910-1923"
analysis:
tmss:
+9 -1
View File
@@ -1,6 +1,7 @@
emulator: blueMSX
type: libretro
type: standalone + libretro
source: "https://github.com/libretro/blueMSX-libretro"
upstream: "http://bluemsx.msxblue.com/"
profiled_date: "2026-03-18"
core_version: "SVN"
display_name: "MSX/SVI/ColecoVision/SG-1000 (blueMSX)"
@@ -52,6 +53,13 @@ notes: |
C-BIOS machines work for cartridge-based games without any copyrighted BIOS.
For disk/tape support, real BIOS ROMs are required.
data_directories:
# 302 files: 296 in Machines/ (200 machine configs + ROMs) + 6 in Databases/
# buildbot source: https://buildbot.libretro.com/assets/system/blueMSX.zip
# ref: libretro.c:1118-1119 — system_dir/Machines/ + system_dir/Databases/
- ref: bluemsx
source_ref: "libretro.c:1118-1119"
files:
# ============================================================
# Shared ROMs (Machines/Shared Roms/)
+8 -1
View File
@@ -26,7 +26,10 @@ notes: |
ROM-specific overlays are optional 370x600 PNG files placed by the user in
system/freeintv_overlays/<rom_name>.png. These are cosmetic per-game keypad
images and are not BIOS files.
images loaded via stbi_load() (src/libretro.c:273). Core falls back to
embedded default_keypad_image.h if no per-game overlay found.
90 overlays available in Assets/Overlays.zip in the core repo.
Not on RetroArch buildbot — sourced from core repo via _data_dirs.yml.
BIOS loading is unchanged from the base FreeIntv core. retro_load_game()
(src/libretro.c:1169-1174) loads exec.bin and grom.bin from the system
@@ -34,6 +37,10 @@ notes: |
bios_identical_to: freeintv
data_directories:
- ref: freeintv-overlays
destination: freeintv_overlays
files:
- name: "exec.bin"
system: intellivision