mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-18 01:13:30 -05:00
feat: list rocknix cores per device
ROCKNIX builds a different emulator set per SoC, and without a target list an H700 handheld received the PS2, PS3 and GameCube firmware of emulators its image lacks. The new target scraper reads the emulators metapackage per device; seven cores ROCKNIX ships get profiles and the Super Famicom Box ROMs one of them needs are collected.
This commit is contained in:
1 parent
7fd82d452f
commit
d9c74888e8
17 files changed
+3597
-2
No files matched your search
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,74 @@
|
||||
emulator: "DaedalusX64"
|
||||
type: standalone
|
||||
core_classification: embedded_hle
|
||||
source: "https://github.com/DaedalusX64/daedalus"
|
||||
profiled_date: "2026-10-17"
|
||||
source_commit: "f17e9ed86f3806fadeb69abd29c9526ab2d4bd1b"
|
||||
pin_frozen: "ROCKNIX 20261001 builds this revision. Later upstream commits are not part of that build."
|
||||
core_version: "Git"
|
||||
display_name: "Nintendo - 64 (DaedalusX64)"
|
||||
cores:
|
||||
- "daedalusx64"
|
||||
- "daedalusx64-sa"
|
||||
systems:
|
||||
- nintendo-64
|
||||
|
||||
notes: |
|
||||
High-level Nintendo 64 emulator. The boot sequence and the RSP are emulated
|
||||
at high level: no PIF ROM or other console firmware is opened. The code
|
||||
carries no version string; the tree is 837 commits past tag 1.1.8.
|
||||
|
||||
Every data file is resolved against baseDir, which on Linux is the working
|
||||
directory at startup. ROCKNIX copies the package to /storage/.config/DaedalusX64
|
||||
and starts the binary from there.
|
||||
ref: Source/Utility/Paths.cpp:30-36, Source/Utility/Paths.cpp:40-42
|
||||
|
||||
Linux builds pick the renderer by architecture: OpenGL ES on aarch64 and arm,
|
||||
desktop OpenGL elsewhere. Each renderer installs its own n64.psh, the fragment
|
||||
shader library prepended to every shader the renderer compiles. The ES
|
||||
renderer fails graphics init without it; the desktop one goes on with an
|
||||
empty library and its shaders do not compile.
|
||||
ref: Source/CMakeLists.txt:132-137, Source/SysPosix/CMakeLists.txt:12-18,
|
||||
Source/SysGLES/HLEGraphics/RendererGL.cpp:77-110,
|
||||
Source/SysGLES/Graphics/GraphicsContextGL.cpp:151-156,
|
||||
Source/SysGL/HLEGraphics/RendererGL.cpp:86-120
|
||||
|
||||
roms.ini is the per-game settings database (name, save type, a few rendering
|
||||
and timing flags), keyed on the two header CRCs and the country code. A game
|
||||
it does not list runs on defaults.
|
||||
ref: Source/RomFile/RomSettings.cpp:149-157, Source/RomFile/RomSettings.cpp:218-228,
|
||||
Source/Core/ROM.cpp:481-484
|
||||
|
||||
The cheat reader is called with "Daedalus.cht" but ignores that argument and
|
||||
opens a file named cheat_file in the working directory, creating it empty, so
|
||||
the bundled Daedalus.cht is never read.
|
||||
ref: Source/Core/ROM.cpp:534, Source/Interface/Cheats.cpp:265, Source/Interface/Cheats.cpp:293-303
|
||||
|
||||
files:
|
||||
- name: "n64.psh"
|
||||
path: "n64.psh"
|
||||
system: nintendo-64
|
||||
required: true
|
||||
bundled: true
|
||||
description: "N64 fragment shader library"
|
||||
note: "Two different files share this name: Source/SysGLES/HLEGraphics/n64.psh for the OpenGL ES build, Source/SysGL/HLEGraphics/n64.psh for the desktop OpenGL build. Installed beside the binary."
|
||||
source_ref: "Source/SysGLES/HLEGraphics/RendererGL.cpp:103-110, Source/SysGL/HLEGraphics/RendererGL.cpp:116-120, Source/SysPosix/CMakeLists.txt:12-18"
|
||||
|
||||
- name: "roms.ini"
|
||||
path: "roms.ini"
|
||||
system: nintendo-64
|
||||
required: false
|
||||
bundled: true
|
||||
category: game_data
|
||||
description: "Per-game settings database"
|
||||
note: "Shipped in Data/. Without it every game runs with default settings."
|
||||
source_ref: "Source/RomFile/RomSettings.cpp:149-157, Source/RomFile/RomSettings.cpp:218-228, Source/Core/ROM.cpp:481-484"
|
||||
|
||||
- name: "OpenSans.ttf"
|
||||
path: "Resources/OpenSans.ttf"
|
||||
system: nintendo-64
|
||||
required: false
|
||||
bundled: true
|
||||
description: "UI font"
|
||||
note: "Opened through SDL_ttf for the on-screen menus; a failure is printed and emulation is not affected."
|
||||
source_ref: "Source/SysGL/Graphics/DrawTextSDL.cpp:30-41, Source/SysGLES/Graphics/DrawTextSDL.cpp:30-41"
|
||||
@@ -0,0 +1,137 @@
|
||||
emulator: "DSperate"
|
||||
type: standalone
|
||||
core_classification: other
|
||||
source: "https://github.com/beebono/DSperate"
|
||||
profiled_date: "2026-10-17"
|
||||
source_commit: "81b73832c2e68e2b10cb5850f0a6d393ffc6fbb7"
|
||||
pin_frozen: "ROCKNIX 20261001 ships the v2.0.1 release binaries, built by CI from the v2.0.1 tag at this commit."
|
||||
core_version: "2.0.1"
|
||||
display_name: "Nintendo - DS / DSi (DSperate)"
|
||||
cores:
|
||||
- "dsperate"
|
||||
- "dsperate-sa"
|
||||
systems:
|
||||
- nintendo-ds
|
||||
- nintendo-dsi
|
||||
|
||||
notes: |
|
||||
Nintendo DS emulator for ARM handhelds with a DSi mode. ROCKNIX installs the
|
||||
release tarball for its architecture and runs it with --config pointing at
|
||||
/storage/.config/dsperate/dsperate.ini.
|
||||
|
||||
No file name is built in: every system file is a [paths] key of the ini (or
|
||||
the matching command-line flag), and a key that is unset or names no file
|
||||
counts as absent. The names below are the ones ROCKNIX's dsperate.ini gives,
|
||||
all in /storage/roms/bios/.
|
||||
ref: src/frontend/sdl/config.cpp:184-205, src/frontend/sdl/main.cpp:1289-1303
|
||||
|
||||
DS BIOS: both halves or neither, the ARM9 image 4 KB and the ARM7 image 16 KB
|
||||
exactly. Without them the built-in FreeBIOS runs games by direct boot. The
|
||||
firmware may be any non-empty file; without one a firmware is generated from
|
||||
the [user] settings. Booting the DS menu needs both BIOS dumps and a real
|
||||
firmware. No hash is checked; an FNV-1a of the loaded regions only tags save
|
||||
states.
|
||||
ref: src/core/nds.cpp:101-133, src/core/mem/bus.h:121-131,
|
||||
src/frontend/sdl/main.cpp:1410, src/frontend/sdl/main.cpp:1440-1447
|
||||
|
||||
DSi: DSiWare and --dsi-mode need the DSi BIOS pair, 64 KB each, and the DS
|
||||
BIOS dumps as well; FreeBIOS cannot run a DSi session. dsi_firmware replaces
|
||||
firmware for a DSi session when no --firmware is given. The NAND is needed by
|
||||
--dsi-mode and by NAND title shortcuts only; it must carry the nocash footer
|
||||
(at the end, or at 0x000FF800). DSiWare without a NAND runs on a generated
|
||||
console whose system font is DSperate's own unless dsi_font names a
|
||||
TWLFontTable.dat.
|
||||
ref: src/frontend/sdl/main.cpp:1294-1308, src/frontend/sdl/main.cpp:1452-1460,
|
||||
src/core/nds_dsi.cpp:95-112, src/core/nds_dsi.cpp:121-127,
|
||||
src/core/io/dsi_sd.cpp:111-140, src/core/nds_dsi.cpp:356-373,
|
||||
src/frontend/sdl/main.cpp:1915-1919
|
||||
|
||||
Cheats come from usrcheat.dat: the [paths] cheats entry, else beside the ROM,
|
||||
else the config directory.
|
||||
ref: src/frontend/sdl/main.cpp:709-735
|
||||
|
||||
files:
|
||||
- name: "bios9.bin"
|
||||
system: nintendo-ds
|
||||
required: false
|
||||
hle_fallback: true
|
||||
size: 4096
|
||||
validation: [size]
|
||||
config_key: "paths.bios9"
|
||||
description: "DS ARM9 BIOS"
|
||||
note: "Loaded only together with bios7.bin. Absent, FreeBIOS runs games by direct boot. Needed to boot the DS menu and for any DSi session."
|
||||
source_ref: "src/core/nds.cpp:105-108, src/core/mem/bus.h:130, src/frontend/sdl/main.cpp:1440-1460"
|
||||
|
||||
- name: "bios7.bin"
|
||||
system: nintendo-ds
|
||||
required: false
|
||||
hle_fallback: true
|
||||
size: 16384
|
||||
validation: [size]
|
||||
config_key: "paths.bios7"
|
||||
description: "DS ARM7 BIOS"
|
||||
note: "Loaded only together with bios9.bin. Absent, FreeBIOS runs games by direct boot. Needed to boot the DS menu and for any DSi session."
|
||||
source_ref: "src/core/nds.cpp:105-109, src/core/mem/bus.h:131, src/frontend/sdl/main.cpp:1440-1460"
|
||||
|
||||
- name: "firmware.bin"
|
||||
system: nintendo-ds
|
||||
required: false
|
||||
hle_fallback: true
|
||||
config_key: "paths.firmware"
|
||||
description: "DS firmware"
|
||||
note: "Any non-empty file is accepted. Absent, a firmware is generated from [user]. Needed to boot the DS menu."
|
||||
source_ref: "src/core/nds.cpp:110, src/core/nds.cpp:124-125, src/frontend/sdl/main.cpp:1441-1447"
|
||||
|
||||
- name: "dsi_bios9.bin"
|
||||
system: nintendo-dsi
|
||||
required: false
|
||||
size: 65536
|
||||
validation: [size]
|
||||
config_key: "paths.bios9i"
|
||||
description: "DSi ARM9 BIOS"
|
||||
note: "Loaded only together with dsi_bios7.bin. Without the pair DSiWare and --dsi-mode are refused; DS games do not use it."
|
||||
source_ref: "src/core/nds_dsi.cpp:95-106, src/core/mem/bus.h:121, src/frontend/sdl/main.cpp:1301-1308"
|
||||
|
||||
- name: "dsi_bios7.bin"
|
||||
system: nintendo-dsi
|
||||
required: false
|
||||
size: 65536
|
||||
validation: [size]
|
||||
config_key: "paths.bios7i"
|
||||
description: "DSi ARM7 BIOS"
|
||||
note: "Loaded only together with dsi_bios9.bin. Without the pair DSiWare and --dsi-mode are refused; DS games do not use it."
|
||||
source_ref: "src/core/nds_dsi.cpp:95-106, src/core/mem/bus.h:122, src/frontend/sdl/main.cpp:1301-1308"
|
||||
|
||||
- name: "dsi_firmware.bin"
|
||||
system: nintendo-dsi
|
||||
required: false
|
||||
config_key: "paths.dsi_firmware"
|
||||
description: "DSi firmware"
|
||||
note: "Used instead of firmware.bin for a DSi session when no --firmware is given."
|
||||
source_ref: "src/frontend/sdl/main.cpp:1294-1298"
|
||||
|
||||
- name: "dsi_nand.bin"
|
||||
system: nintendo-dsi
|
||||
required: false
|
||||
config_key: "paths.dsi_nand"
|
||||
description: "DSi NAND image with nocash footer"
|
||||
note: "Read only by --dsi-mode and NAND title shortcuts; DSiWare run from the game list does without it. Opened read-only, rejected without the \"DSi eMMC CID/CPU\" footer."
|
||||
source_ref: "src/frontend/sdl/main.cpp:1263-1272, src/core/nds_dsi.cpp:121-127, src/core/io/dsi_sd.cpp:111-140"
|
||||
|
||||
- name: "TWLFontTable.dat"
|
||||
system: nintendo-dsi
|
||||
required: false
|
||||
hle_fallback: true
|
||||
config_key: "paths.dsi_font"
|
||||
description: "DSi system font"
|
||||
note: "Used for DSiWare run without a NAND. Absent, DSperate's own font table is generated. ROCKNIX's ini leaves the key unset."
|
||||
source_ref: "src/core/nds_dsi.cpp:356-373, src/frontend/sdl/main.cpp:1915-1919"
|
||||
|
||||
- name: "usrcheat.dat"
|
||||
system: nintendo-ds
|
||||
required: false
|
||||
category: game_data
|
||||
config_key: "paths.cheats"
|
||||
description: "Action Replay cheat database"
|
||||
note: "Looked up by game code and header checksum; nothing is enabled by its presence."
|
||||
source_ref: "src/frontend/sdl/main.cpp:709-735"
|
||||
@@ -0,0 +1,452 @@
|
||||
emulator: "FB Alpha 2019"
|
||||
type: libretro
|
||||
core_classification: frozen_snapshot
|
||||
source: "https://github.com/libretro/fbalpha"
|
||||
upstream: "https://github.com/barry65536/FBAlpha"
|
||||
profiled_date: "2026-10-17"
|
||||
source_commit: "0581797db6fdffd826086b053ced4b6b29bb6678"
|
||||
pin_frozen: "ROCKNIX 20261001 builds this revision as fbalpha2019. Later commits on libretro/fbalpha are not part of that build."
|
||||
core_version: "v0.2.97.44"
|
||||
display_name: "Arcade (FB Alpha 2019)"
|
||||
cores:
|
||||
- "fbalpha2019"
|
||||
systems:
|
||||
- arcade
|
||||
- snk-neogeo-mvs
|
||||
- snk-neogeo-cd
|
||||
- igs-pgm
|
||||
- super-kaneko-nova
|
||||
- midway-mcr
|
||||
- coleco-colecovision
|
||||
- sinclair-spectrum
|
||||
- msx
|
||||
- nmk16
|
||||
- deco-cassette
|
||||
- sega-system16b
|
||||
- taito-cchip
|
||||
- ym2608
|
||||
|
||||
notes: |
|
||||
Final Burn Alpha v0.2.97.44 as left in libretro/fbalpha, the repository the
|
||||
libretro project froze when development moved to FinalBurn Neo. The makefile
|
||||
builds fbalpha_libretro.so; ROCKNIX installs it as fbalpha2019_libretro.so.
|
||||
ref: src/burner/libretro/libretro.cpp:19
|
||||
|
||||
Each archive the driver names is looked for in three places, the first that
|
||||
opens wins: the content directory, <system>/fba/, then <system>/. A missing
|
||||
archive is only logged.
|
||||
ref: src/burner/libretro/libretro.cpp:560-587
|
||||
|
||||
The archives come from BurnDrvGetZipName: the game, its board ROM set
|
||||
(szBoardROM of the BurnDriver), then its parents. ColecoVision, MSX and
|
||||
Spectrum drivers have their own GetZipName that strips the system prefix, so
|
||||
cv_coleco opens coleco.zip, msx_msx opens msx.zip, spec_spectrum opens
|
||||
spectrum.zip and spec_spec128 opens spec128.zip. The PGM single board sets
|
||||
thegladpcb, dmnfrntpcb and svgpcb also open pgm.zip.
|
||||
ref: src/burn/burn.cpp:94-133, src/burn/drv/coleco/d_coleco.cpp:638-670,
|
||||
src/burn/drv/msx/d_msx.cpp:1680-1712, src/burn/drv/spectrum/d_spectrum.cpp:202-235,
|
||||
src/burner/libretro/libretro.cpp:603-617
|
||||
|
||||
Every ROM is matched by CRC32 across all opened archives first, then by name.
|
||||
A board ROM set is appended to the game's list at index 0x80, so its entries
|
||||
are checked like the game's own: any entry without BRF_OPT that is found in
|
||||
no archive aborts the load. The one exception is the Neo Geo MVS BIOS
|
||||
sp-s3.sp1, skipped when another MVS, AES or Universe BIOS was found.
|
||||
ref: src/burn/stdfunc.h:13-28, src/burner/libretro/libretro.cpp:635-657,
|
||||
src/burner/libretro/libretro.cpp:733-748, src/burner/libretro/retro_common.cpp:4-47
|
||||
|
||||
Four Midway MCR games (kickman, kickc, wacko, nflfoot) name "ssio" as their
|
||||
board ROM set instead of "midssio", so they open ssio.zip.
|
||||
ref: src/burn/drv/pre90s/d_mcr.cpp:1782, src/burn/drv/pre90s/d_mcr.cpp:1820,
|
||||
src/burn/drv/pre90s/d_mcr.cpp:2298, src/burn/drv/pre90s/d_mcr.cpp:3174
|
||||
|
||||
Neo Geo CD content runs the neocdz driver, whose board ROM set is neogeo: it
|
||||
opens neocdz.zip then neogeo.zip.
|
||||
ref: src/burner/libretro/libretro.cpp:1316-1317, src/burn/drv/neogeo/d_neogeo.cpp:1283-1299
|
||||
|
||||
Samples are read from <system>/fba/samples/<set>.zip and the high score
|
||||
table from <system>/fba/hiscore.dat (core option fba-hiscores, enabled by
|
||||
default).
|
||||
ref: src/burner/libretro/libretro.cpp:1158-1161, src/burn/hiscore.cpp:408,
|
||||
src/burner/libretro/retro_common.cpp:85
|
||||
|
||||
files:
|
||||
- name: "neogeo.zip"
|
||||
category: bios_zip
|
||||
system: snk-neogeo-mvs
|
||||
description: "Neo Geo system BIOS ROM set"
|
||||
required: true
|
||||
note: "sm1.sm1, sfix.sfix and 000-lo.lo are required. sp-s3.sp1 is required unless one of the other 68K BIOS images is present; all other members are BRF_OPT."
|
||||
source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:930-981, src/burn/drv/neogeo/d_neogeo.cpp:1207-1216, src/burner/libretro/libretro.cpp:733-748"
|
||||
contents:
|
||||
- name: "sp-s3.sp1"
|
||||
size: 131072
|
||||
crc32: "91b64be3"
|
||||
- name: "sp-s2.sp1"
|
||||
size: 131072
|
||||
crc32: "9036d879"
|
||||
- name: "sp-s.sp1"
|
||||
size: 131072
|
||||
crc32: "c7f2fa45"
|
||||
- name: "sp-u2.sp1"
|
||||
size: 131072
|
||||
crc32: "e72943de"
|
||||
- name: "sp1-u2"
|
||||
size: 131072
|
||||
crc32: "62f021f4"
|
||||
- name: "sp-e.sp1"
|
||||
size: 131072
|
||||
crc32: "2723a5b5"
|
||||
- name: "sp1-u4.bin"
|
||||
size: 131072
|
||||
crc32: "1179a30f"
|
||||
- name: "sp1-u3.bin"
|
||||
size: 131072
|
||||
crc32: "2025b7a2"
|
||||
- name: "vs-bios.rom"
|
||||
size: 131072
|
||||
crc32: "f0e8f27d"
|
||||
- name: "sp-j2.sp1"
|
||||
size: 131072
|
||||
crc32: "acede59c"
|
||||
- name: "sp1.jipan.1024"
|
||||
size: 131072
|
||||
crc32: "9fb0abe4"
|
||||
- name: "sp-45.sp1"
|
||||
size: 524288
|
||||
crc32: "03cc9f6a"
|
||||
- name: "sp-j3.sp1"
|
||||
size: 524288
|
||||
crc32: "486cb450"
|
||||
- name: "japan-j3.bin"
|
||||
size: 131072
|
||||
crc32: "dff6d41f"
|
||||
- name: "sp1-j3.bin"
|
||||
size: 131072
|
||||
crc32: "fbc6d469"
|
||||
- name: "neo-po.bin"
|
||||
size: 131072
|
||||
crc32: "16d0c132"
|
||||
- name: "neo-epo.bin"
|
||||
size: 131072
|
||||
crc32: "d27a71f1"
|
||||
- name: "neodebug.bin"
|
||||
size: 131072
|
||||
crc32: "698ebb7d"
|
||||
- name: "sp-1v1_3db8c.bin"
|
||||
size: 131072
|
||||
crc32: "162f0ebe"
|
||||
- name: "uni-bios_3_3.rom"
|
||||
size: 131072
|
||||
crc32: "24858466"
|
||||
- name: "uni-bios_3_2.rom"
|
||||
size: 131072
|
||||
crc32: "a4e8b9b3"
|
||||
- name: "uni-bios_3_1.rom"
|
||||
size: 131072
|
||||
crc32: "0c58093f"
|
||||
- name: "uni-bios_3_0.rom"
|
||||
size: 131072
|
||||
crc32: "a97c89a9"
|
||||
- name: "uni-bios_2_3.rom"
|
||||
size: 131072
|
||||
crc32: "27664eb5"
|
||||
- name: "uni-bios_2_3o.rom"
|
||||
size: 131072
|
||||
crc32: "601720ae"
|
||||
- name: "uni-bios_2_2.rom"
|
||||
size: 131072
|
||||
crc32: "2d50996a"
|
||||
- name: "uni-bios_2_1.rom"
|
||||
size: 131072
|
||||
crc32: "8dabf76b"
|
||||
- name: "uni-bios_2_0.rom"
|
||||
size: 131072
|
||||
crc32: "0c12c2ad"
|
||||
- name: "uni-bios_1_3.rom"
|
||||
size: 131072
|
||||
crc32: "b24b44a0"
|
||||
- name: "uni-bios_1_2.rom"
|
||||
size: 131072
|
||||
crc32: "4fa698e9"
|
||||
- name: "uni-bios_1_2o.rom"
|
||||
size: 131072
|
||||
crc32: "e19d3ce9"
|
||||
- name: "uni-bios_1_1.rom"
|
||||
size: 131072
|
||||
crc32: "5dda0d84"
|
||||
- name: "uni-bios_1_0.rom"
|
||||
size: 131072
|
||||
crc32: "0ce453a0"
|
||||
- name: "neopen.sp1"
|
||||
size: 131072
|
||||
crc32: "cb915e76"
|
||||
- name: "sm1.sm1"
|
||||
size: 131072
|
||||
crc32: "94416d67"
|
||||
- name: "sfix.sfix"
|
||||
size: 131072
|
||||
crc32: "c2ea0cfd"
|
||||
- name: "000-lo.lo"
|
||||
size: 131072
|
||||
crc32: "5a86cff2"
|
||||
|
||||
- name: "neocdz.zip"
|
||||
category: bios_zip
|
||||
system: snk-neogeo-cd
|
||||
description: "Neo Geo CDZ system ROM set"
|
||||
required: true
|
||||
note: "Both members are required. Matching is by CRC32 across neocdz.zip and neogeo.zip, so a neogeo.zip that also holds neocd.bin stands in for this archive."
|
||||
source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1283-1299, src/burner/libretro/libretro.cpp:1316-1317"
|
||||
contents:
|
||||
- name: "neocd.bin"
|
||||
size: 524288
|
||||
crc32: "df9de490"
|
||||
- name: "000-lo.lo"
|
||||
size: 131072
|
||||
crc32: "5a86cff2"
|
||||
|
||||
- name: "pgm.zip"
|
||||
category: bios_zip
|
||||
system: igs-pgm
|
||||
description: "IGS PolyGame Master system BIOS ROM set"
|
||||
required: true
|
||||
note: "No member carries BRF_OPT, so all six are required for every PGM game, ddp3_bios.u37 and bios.u42 included."
|
||||
source_ref: "src/burn/drv/pgm/d_pgm.cpp:511-524, src/burn/drv/pgm/d_pgm.cpp:529-538"
|
||||
contents:
|
||||
- name: "pgm_t01s.rom"
|
||||
size: 2097152
|
||||
crc32: "1a7123a0"
|
||||
- name: "pgm_m01s.rom"
|
||||
size: 2097152
|
||||
crc32: "45ae7159"
|
||||
- name: "pgm_p01s.u20"
|
||||
size: 131072
|
||||
crc32: "e42b166e"
|
||||
- name: "pgm_p02s.u20"
|
||||
size: 131072
|
||||
crc32: "78c15fa2"
|
||||
- name: "ddp3_bios.u37"
|
||||
size: 524288
|
||||
crc32: "b3cc5c8f"
|
||||
- name: "bios.u42"
|
||||
size: 131072
|
||||
crc32: "517cf7a2"
|
||||
|
||||
- name: "skns.zip"
|
||||
category: bios_zip
|
||||
system: super-kaneko-nova
|
||||
description: "Super Kaneko Nova System BIOS ROM set"
|
||||
required: true
|
||||
note: "The five regional BIOS images are all required: none carries BRF_OPT."
|
||||
source_ref: "src/burn/drv/pst90s/d_suprnova.cpp:1788-1799, src/burn/drv/pst90s/d_suprnova.cpp:1808-1817"
|
||||
contents:
|
||||
- name: "sknsj1.u10"
|
||||
size: 524288
|
||||
crc32: "7e2b836c"
|
||||
- name: "sknse2.u10"
|
||||
size: 524288
|
||||
crc32: "e2b9d7d1"
|
||||
- name: "sknsa1.u10"
|
||||
size: 524288
|
||||
crc32: "745e5212"
|
||||
- name: "sknsu1.u10"
|
||||
size: 524288
|
||||
crc32: "384d21ec"
|
||||
- name: "sknsk1.u10"
|
||||
size: 524288
|
||||
crc32: "ff1c9f79"
|
||||
|
||||
- name: "midssio.zip"
|
||||
category: bios_zip
|
||||
system: midway-mcr
|
||||
description: "Midway SSIO sound board PROM"
|
||||
required: true
|
||||
source_ref: "src/burn/drv/pre90s/d_mcr.cpp:1615-1621, src/burn/drv/pre90s/d_mcr.cpp:1626-1635"
|
||||
contents:
|
||||
- name: "82s123.12d"
|
||||
size: 32
|
||||
crc32: "e1281ee9"
|
||||
|
||||
- name: "ssio.zip"
|
||||
aliases: ["midssio.zip"]
|
||||
category: bios_zip
|
||||
system: midway-mcr
|
||||
description: "Midway SSIO sound board PROM, board name used by four games"
|
||||
required: true
|
||||
note: "Opened for kickman, kickc, wacko and nflfoot, whose driver names \"ssio\" as board ROM set. They pick the same SsiopromRomDesc entry as midssio."
|
||||
source_ref: "src/burn/drv/pre90s/d_mcr.cpp:1615-1621, src/burn/drv/pre90s/d_mcr.cpp:1778-1782"
|
||||
contents:
|
||||
- name: "82s123.12d"
|
||||
size: 32
|
||||
crc32: "e1281ee9"
|
||||
|
||||
- name: "coleco.zip"
|
||||
category: bios_zip
|
||||
system: coleco-colecovision
|
||||
description: "ColecoVision system BIOS ROM set"
|
||||
required: true
|
||||
note: "coleco.rom is required; colecoa.rom, svi603.rom and czz50.rom are BRF_OPT. Archive name from CVGetZipName, which drops the cv_ prefix of cv_coleco."
|
||||
source_ref: "src/burn/drv/coleco/d_coleco.cpp:638-670, src/burn/drv/coleco/d_coleco.cpp:675-680"
|
||||
contents:
|
||||
- name: "coleco.rom"
|
||||
size: 8192
|
||||
crc32: "3aa93ef3"
|
||||
- name: "colecoa.rom"
|
||||
size: 8192
|
||||
crc32: "39bb16fc"
|
||||
- name: "svi603.rom"
|
||||
size: 8192
|
||||
crc32: "19e91b82"
|
||||
- name: "czz50.rom"
|
||||
size: 16384
|
||||
crc32: "4999abc6"
|
||||
|
||||
- name: "msx.zip"
|
||||
category: bios_zip
|
||||
system: msx
|
||||
description: "MSX1 system BIOS ROM set"
|
||||
required: true
|
||||
note: "msx.rom is required; msxj.rom and kanji.rom are BRF_OPT. Archive name from MSXGetZipName, which drops the msx_ prefix of msx_msx."
|
||||
source_ref: "src/burn/drv/msx/d_msx.cpp:1680-1712, src/burn/drv/msx/d_msx.cpp:1716-1720"
|
||||
contents:
|
||||
- name: "msx.rom"
|
||||
size: 32768
|
||||
crc32: "a317e6b4"
|
||||
- name: "msxj.rom"
|
||||
size: 32768
|
||||
crc32: "071135e0"
|
||||
- name: "kanji.rom"
|
||||
size: 262144
|
||||
crc32: "1f6406fb"
|
||||
|
||||
- name: "spectrum.zip"
|
||||
category: bios_zip
|
||||
system: sinclair-spectrum
|
||||
description: "ZX Spectrum 48K ROM set"
|
||||
required: true
|
||||
note: "Archive name from SpectrumGetZipName, which drops the spec_ prefix of spec_spectrum."
|
||||
source_ref: "src/burn/drv/spectrum/d_spectrum.cpp:202-235, src/burn/drv/spectrum/d_spectrum.cpp:237-239"
|
||||
contents:
|
||||
- name: "spectrum.rom"
|
||||
size: 16384
|
||||
crc32: "ddee531f"
|
||||
|
||||
- name: "spec128.zip"
|
||||
category: bios_zip
|
||||
system: sinclair-spectrum
|
||||
description: "ZX Spectrum 128 ROM set"
|
||||
required: true
|
||||
note: "Opened by the 128K games. Archive name from SpectrumGetZipName, which drops the spec_ prefix of spec_spec128."
|
||||
source_ref: "src/burn/drv/spectrum/d_spectrum.cpp:202-235, src/burn/drv/spectrum/d_spectrum.cpp:244-247"
|
||||
contents:
|
||||
- name: "zx128_0.rom"
|
||||
size: 16384
|
||||
crc32: "e76799d2"
|
||||
- name: "zx128_1.rom"
|
||||
size: 16384
|
||||
crc32: "b96a36be"
|
||||
|
||||
- name: "nmk004.zip"
|
||||
category: bios_zip
|
||||
system: nmk16
|
||||
description: "NMK004 sound MCU internal ROM"
|
||||
required: true
|
||||
source_ref: "src/burn/drv/pst90s/d_nmk16.cpp:5982-5988, src/burn/drv/pst90s/d_nmk16.cpp:5993-6002"
|
||||
contents:
|
||||
- name: "nmk004.bin"
|
||||
size: 8192
|
||||
crc32: "83b6f611"
|
||||
|
||||
- name: "decocass.zip"
|
||||
category: bios_zip
|
||||
system: deco-cassette
|
||||
description: "DECO Cassette System BIOS ROM set"
|
||||
required: true
|
||||
note: "The program ROMs and cassmcu.1c are required; the six PROMs (v2.3m, v4.10d, v3.3j, dsp-3_p3-.e5, rms-3_p4-.f6, dsp-3_p5-.m4) are BRF_OPT."
|
||||
source_ref: "src/burn/drv/dataeast/d_decocass.cpp:3392-3446, src/burn/drv/dataeast/d_decocass.cpp:3456-3465"
|
||||
contents:
|
||||
- name: "v0a-.7e"
|
||||
size: 4096
|
||||
crc32: "3d33ac34"
|
||||
- name: "v1-.5a"
|
||||
size: 2048
|
||||
crc32: "b66b2c2a"
|
||||
- name: "v2.3m"
|
||||
size: 32
|
||||
crc32: "238fdb40"
|
||||
- name: "v4.10d"
|
||||
size: 32
|
||||
crc32: "3b5836b4"
|
||||
- name: "v3.3j"
|
||||
size: 32
|
||||
crc32: "51eef657"
|
||||
- name: "dsp-3_p0-a.m9"
|
||||
size: 2048
|
||||
crc32: "2541e34b"
|
||||
- name: "dsp-3_p1-.l9"
|
||||
size: 2048
|
||||
crc32: "3bfff5f3"
|
||||
- name: "rms-3_p2-.c9"
|
||||
size: 1024
|
||||
crc32: "6c4a891f"
|
||||
- name: "dsp-3_p3-.e5"
|
||||
size: 32
|
||||
crc32: "539a5a64"
|
||||
- name: "rms-3_p4-.f6"
|
||||
size: 32
|
||||
crc32: "9014c0fd"
|
||||
- name: "dsp-3_p5-.m4"
|
||||
size: 32
|
||||
crc32: "e52089a0"
|
||||
- name: "v0b-.7e"
|
||||
size: 4096
|
||||
crc32: "23d929b7"
|
||||
- name: "dsp-3_p0-b.m9"
|
||||
size: 2048
|
||||
crc32: "b67a91d9"
|
||||
- name: "cassmcu.1c"
|
||||
size: 1024
|
||||
crc32: "a6df18fd"
|
||||
|
||||
- name: "isgsm.zip"
|
||||
category: bios_zip
|
||||
system: sega-system16b
|
||||
description: "ISG Selection Master Type 2006 system BIOS"
|
||||
required: true
|
||||
source_ref: "src/burn/drv/sega/d_sys16b.cpp:10631-10633, src/burn/drv/sega/d_sys16b.cpp:11202-11211"
|
||||
contents:
|
||||
- name: "ism2006v00.u1"
|
||||
size: 131072
|
||||
crc32: "2292585c"
|
||||
|
||||
- name: "cchip.zip"
|
||||
category: bios_zip
|
||||
system: taito-cchip
|
||||
description: "Taito C-Chip uPD78C11 internal ROM"
|
||||
required: true
|
||||
note: "Named as board ROM set by Operation Wolf, Rainbow Islands, Volfied and others; there is no BurnDriver called cchip, the name comes from szBoardROM."
|
||||
source_ref: "src/burn/drv/taito/d_taitomisc.cpp:1369-1373, src/burn/drv/taito/d_taitomisc.cpp:6250"
|
||||
contents:
|
||||
- name: "cchip_upd78c11.bin"
|
||||
size: 4096
|
||||
crc32: "43021521"
|
||||
|
||||
- name: "ym2608.zip"
|
||||
category: bios_zip
|
||||
system: ym2608
|
||||
description: "Yamaha YM2608 internal ADPCM ROM"
|
||||
required: true
|
||||
source_ref: "src/burn/drv/pre90s/d_wc90.cpp:186-192, src/burn/drv/pre90s/d_wc90.cpp:1261-1270"
|
||||
contents:
|
||||
- name: "ym2608_adpcm_rom.bin"
|
||||
size: 8192
|
||||
crc32: "23c9e0d8"
|
||||
|
||||
- name: "hiscore.dat"
|
||||
path: "fba/hiscore.dat"
|
||||
system: arcade
|
||||
required: false
|
||||
description: "High score address database"
|
||||
note: "Read when the fba-hiscores option is enabled, which is the default. Without it no high score is kept."
|
||||
source_ref: "src/burn/hiscore.cpp:400-420, src/burner/libretro/libretro.cpp:1158"
|
||||
@@ -0,0 +1,180 @@
|
||||
emulator: "Flycast 2021"
|
||||
type: libretro
|
||||
core_classification: frozen_snapshot
|
||||
source: "https://github.com/metallic77/flycast"
|
||||
upstream: "https://github.com/libretro/flycast"
|
||||
profiled_date: "2026-10-17"
|
||||
source_commit: "603814c9f73b773c455d9a497f389d2f93a257fd"
|
||||
upstream_commit: "4c293f306bc16a265c2d768af5d0cea138426054"
|
||||
pin_frozen: "ROCKNIX 20261001 builds this revision. No branch of metallic77/flycast holds it any more: master was put back on the libretro merge base 4c293f30, so HEAD is the code before the fork's own commits."
|
||||
core_version: "0.1"
|
||||
display_name: "Sega - Dreamcast/Naomi (Flycast 2021)"
|
||||
cores:
|
||||
- "flycast2021"
|
||||
systems:
|
||||
- sega-dreamcast
|
||||
- sega-naomi
|
||||
- sega-atomiswave
|
||||
|
||||
notes: |
|
||||
The libretro/flycast tree as of April 2022 (merge base 4c293f30), from before
|
||||
the libretro fork was rebased on flyinghead's Flycast, with 22 commits by
|
||||
metallic77 on top that tune defaults and build flags for low-end handhelds.
|
||||
ROCKNIX renames the core option prefix from reicast to flycast2021 and
|
||||
installs the library as flycast2021_libretro.so.
|
||||
ref: core/libretro/libretro.cpp:2296-2300
|
||||
|
||||
Every system file lives in <system>/dc/.
|
||||
ref: core/libretro/libretro.cpp:1893-1896
|
||||
|
||||
Dreamcast: the boot ROM is looked for as dc_boot.bin, dc_boot.bin.bin,
|
||||
dc_bios.bin, dc_bios.bin.bin, the first that yields a full 2 MB read wins.
|
||||
The HLE BIOS core option (hle_bios) defaults to enabled, and when it is on, or
|
||||
when no boot ROM loads, reios boots the disc instead. Booting to the BIOS menu,
|
||||
or starting without a disc, needs the real boot ROM and fails with -3 without
|
||||
it.
|
||||
ref: core/hw/holly/sb_mem.cpp:32-65, core/hw/holly/sb_mem.cpp:215-233,
|
||||
core/hw/flashrom/flashrom.h:54-67, core/hw/flashrom/flashrom.h:84-118,
|
||||
core/nullDC.cpp:420-431, core/nullDC.cpp:455-463,
|
||||
core/libretro/libretro_core_options.h:133-145, core/libretro/libretro.cpp:726-731
|
||||
|
||||
NAOMI and Atomiswave: a BIOS archive is opened as <system>/dc/<name> with .7z
|
||||
then .zip appended. Each member is looked for in the game archive, its parent,
|
||||
then the BIOS archive, by CRC32 and then by name; the BIOS table carries no
|
||||
CRC32, so only the name matches. The member for the configured region is
|
||||
tried first, then the first member listed. A game whose table entry names a
|
||||
BIOS refuses to start without it; the others default to naomi. Five archive
|
||||
names are reachable from the game table: naomi, awbios, f355bios, f355dlx,
|
||||
hod2bios. airlbios and naomigd have table entries but no game names them.
|
||||
ref: core/hw/naomi/naomi_cart.cpp:76-176, core/hw/naomi/naomi_cart.cpp:227-247,
|
||||
core/archive/archive.cpp:26-42, core/hw/naomi/naomi_roms.h:76-217
|
||||
|
||||
LoadRomFiles also reads naomi_boot.bin, naomi_boot.bin.bin, naomi_bios.bin,
|
||||
naomi_bios.bin.bin and epr-21576d.bin for NAOMI, but naomi_cart_Close clears
|
||||
bios_loaded before the cartridge loads, so that file never stands in for
|
||||
naomi.zip.
|
||||
ref: core/hw/holly/sb_mem.cpp:59, core/hw/naomi/naomi_cart.cpp:427-444,
|
||||
core/hw/naomi/naomi_cart.cpp:472-484
|
||||
|
||||
files:
|
||||
- name: "dc_boot.bin"
|
||||
path: "dc/dc_boot.bin"
|
||||
aliases: ["dc_boot.bin.bin", "dc_bios.bin", "dc_bios.bin.bin"]
|
||||
system: sega-dreamcast
|
||||
required: false
|
||||
hle_fallback: true
|
||||
min_size: 2097152
|
||||
validation: [size]
|
||||
description: "Dreamcast boot ROM"
|
||||
note: "Read as 2 MB into the system ROM; a shorter file is rejected. Needed only to boot to the BIOS menu or when the HLE BIOS option is disabled."
|
||||
source_ref: "core/hw/holly/sb_mem.cpp:50-65, core/hw/holly/sb_mem.cpp:215-229, core/hw/flashrom/flashrom.h:54-67, core/nullDC.cpp:420-431"
|
||||
|
||||
- name: "dc_nvmem.bin"
|
||||
path: "dc/dc_nvmem.bin"
|
||||
aliases: ["dc_flash_wb.bin", "dc_flash.bin", "dc_flash.bin.bin"]
|
||||
system: sega-dreamcast
|
||||
required: false
|
||||
min_size: 131072
|
||||
validation: [size]
|
||||
description: "Dreamcast flash ROM"
|
||||
note: "Loaded with the boot ROM and by the HLE path; a missing file leaves the flash blank and the core runs. Written back as dc_nvmem.bin."
|
||||
source_ref: "core/hw/holly/sb_mem.cpp:196-213, core/hw/holly/sb_mem.cpp:231, core/hw/holly/sb_mem.cpp:236-243, core/hw/holly/sb_mem.cpp:271-278"
|
||||
|
||||
- name: "font.bin"
|
||||
path: "dc/font.bin"
|
||||
system: sega-dreamcast
|
||||
required: false
|
||||
description: "Dreamcast system font for the HLE BIOS"
|
||||
note: "Read whole into the font table of the reios ROM image. Absent, a built-in font is copied there."
|
||||
source_ref: "core/reios/reios.cpp:736-755"
|
||||
|
||||
- name: "naomi.zip"
|
||||
path: "dc/naomi.zip"
|
||||
category: bios_zip
|
||||
system: sega-naomi
|
||||
required: true
|
||||
description: "NAOMI BIOS archive"
|
||||
note: "Default BIOS of every NAOMI game whose table entry names none, cartridge, .lst, .bin and .dat images alike. One member is loaded: the one for the configured region, else epr-21576h.ic27."
|
||||
source_ref: "core/hw/naomi/naomi_roms.h:132-189, core/hw/naomi/naomi_cart.cpp:227-247, core/hw/naomi/naomi_cart.cpp:472-484"
|
||||
contents:
|
||||
- name: "epr-21576h.ic27"
|
||||
size: 2097152
|
||||
description: "Japan"
|
||||
- name: "epr-21578h.ic27"
|
||||
size: 2097152
|
||||
description: "Export"
|
||||
- name: "epr-21577h.ic27"
|
||||
size: 2097152
|
||||
description: "USA"
|
||||
- name: "epr-21579d.ic27"
|
||||
size: 2097152
|
||||
description: "Korea"
|
||||
|
||||
- name: "awbios.zip"
|
||||
path: "dc/awbios.zip"
|
||||
category: bios_zip
|
||||
system: sega-atomiswave
|
||||
required: true
|
||||
description: "Atomiswave BIOS archive"
|
||||
note: "Named by all 34 Atomiswave games. Loaded into the flash chip, whose writable part is then reloaded from the save directory."
|
||||
source_ref: "core/hw/naomi/naomi_roms.h:86-94, core/hw/naomi/naomi_cart.cpp:89-92, core/hw/naomi/naomi_cart.cpp:171-173"
|
||||
contents:
|
||||
- name: "bios0.ic23"
|
||||
size: 131072
|
||||
|
||||
- name: "f355bios.zip"
|
||||
path: "dc/f355bios.zip"
|
||||
category: bios_zip
|
||||
system: sega-naomi
|
||||
required: true
|
||||
description: "Ferrari F355 Challenge BIOS archive"
|
||||
note: "Named by three Ferrari F355 Challenge entries, which refuse to start without it."
|
||||
source_ref: "core/hw/naomi/naomi_roms.h:95-103, core/hw/naomi/naomi_cart.cpp:238-243"
|
||||
contents:
|
||||
- name: "epr-22851.ic27"
|
||||
size: 2097152
|
||||
description: "Export"
|
||||
- name: "epr-22850.ic27"
|
||||
size: 2097152
|
||||
description: "USA"
|
||||
- name: "epr-22849.ic27"
|
||||
size: 2097152
|
||||
description: "Japan"
|
||||
|
||||
- name: "f355dlx.zip"
|
||||
path: "dc/f355dlx.zip"
|
||||
category: bios_zip
|
||||
system: sega-naomi
|
||||
required: true
|
||||
description: "Ferrari F355 Challenge Deluxe BIOS archive"
|
||||
note: "Named by the f355 entry, which refuses to start without it."
|
||||
source_ref: "core/hw/naomi/naomi_roms.h:104-119, core/hw/naomi/naomi_roms.h:1701, core/hw/naomi/naomi_cart.cpp:238-243"
|
||||
contents:
|
||||
- name: "epr-21864.ic27"
|
||||
size: 2097152
|
||||
description: "Export"
|
||||
- name: "epr-21863.ic27"
|
||||
size: 2097152
|
||||
description: "USA"
|
||||
- name: "epr-21862.ic27"
|
||||
size: 2097152
|
||||
description: "Japan"
|
||||
|
||||
- name: "hod2bios.zip"
|
||||
path: "dc/hod2bios.zip"
|
||||
category: bios_zip
|
||||
system: sega-naomi
|
||||
required: true
|
||||
description: "The House of the Dead 2 BIOS archive"
|
||||
note: "Named by four House of the Dead 2 entries, which refuse to start without it."
|
||||
source_ref: "core/hw/naomi/naomi_roms.h:120-131, core/hw/naomi/naomi_cart.cpp:238-243"
|
||||
contents:
|
||||
- name: "epr-21331.ic27"
|
||||
size: 2097152
|
||||
description: "Export"
|
||||
- name: "epr-21330.ic27"
|
||||
size: 2097152
|
||||
description: "USA"
|
||||
- name: "epr-21329.ic27"
|
||||
size: 2097152
|
||||
description: "Japan"
|
||||
@@ -7,7 +7,7 @@ profiled_date: "2026-03-24"
|
||||
source_commit: "642d1d1b6684aa7e306a02a89885f3f5456a5157"
|
||||
core_version: "1.29.0"
|
||||
display_name: "Nintendo - SNES / SFC (Beetle Supafaust)"
|
||||
cores: [mednafen_supafaust, supafaust]
|
||||
cores: [mednafen_supafaust, supafaust, beetle_supafaust]
|
||||
systems: [nintendo-snes]
|
||||
|
||||
# Port of Mednafen's experimental snes_faust module.
|
||||
|
||||
@@ -8,7 +8,7 @@ source_commit: "12edd2c74a517ff86dfa8cfc71ad75e4c10486d5"
|
||||
core_version: "2.6.0"
|
||||
display_name: "Nintendo - Nintendo 64 (Mupen64Plus-Next)"
|
||||
systems: [nintendo-64, nintendo-64dd]
|
||||
cores: [mupen64plus_next, mupen64plus_next_develop, mupen64plus_next_gles3, mupen64plus_next_gles2, mupen64plus, mupen64plus-next]
|
||||
cores: [mupen64plus_next, mupen64plus_next_develop, mupen64plus_next_gles3, mupen64plus_next_gles2, mupen64plus, mupen64plus-next, mupen64plus_nx]
|
||||
|
||||
files:
|
||||
- name: "IPL.n64"
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
emulator: "NanoBoyAdvance"
|
||||
type: standalone
|
||||
core_classification: other
|
||||
source: "https://github.com/nba-emu/NanoBoyAdvance"
|
||||
profiled_date: "2026-10-17"
|
||||
source_commit: "3bb6f478f977dbfd3106508536e5fbce90d1898b"
|
||||
pin_frozen: "ROCKNIX 20261001 builds this revision of the SDL2 frontend (v1.6 plus four commits). Later upstream work is not part of that build."
|
||||
core_version: "1.6"
|
||||
display_name: "Nintendo - Game Boy Advance (NanoBoyAdvance)"
|
||||
cores:
|
||||
- "nanoboyadvance"
|
||||
- "nanoboyadvance-sa"
|
||||
systems:
|
||||
- nintendo-gba
|
||||
|
||||
notes: |
|
||||
Game Boy Advance emulator. ROCKNIX builds the SDL2 frontend only
|
||||
(PLATFORM_SDL2=ON, PLATFORM_QT=OFF).
|
||||
|
||||
The SDL2 frontend changes the working directory to the executable's
|
||||
directory, then reads config.toml there. The BIOS path is the general.bios_path
|
||||
key of that file, default "bios.bin", overridden by --bios on the command line.
|
||||
ref: src/platform/sdl/main.cpp:288-293, src/platform/core/src/config.cpp:36,
|
||||
src/platform/core/include/platform/config.hpp:17, src/platform/sdl/main.cpp:98-102
|
||||
|
||||
The BIOS is required. BIOSLoader refuses a missing path, a directory, and any
|
||||
size other than 16 KB; the frontend prints the reason and exits. There is no
|
||||
built-in replacement. bios_skip only jumps past the boot screen after the BIOS
|
||||
is loaded.
|
||||
ref: src/platform/core/src/loader/bios.cpp:17-48, src/platform/sdl/main.cpp:177-192,
|
||||
src/nba/src/core.cpp:42-44
|
||||
|
||||
ROCKNIX patches config.toml and keymap.toml to /storage/.config/nanoboyadvance/
|
||||
and its config.toml sets bios_path = /storage/roms/bios/gba_bios.bin.
|
||||
|
||||
files:
|
||||
- name: "bios.bin"
|
||||
path: "bios.bin"
|
||||
aliases: ["gba_bios.bin"]
|
||||
system: nintendo-gba
|
||||
required: true
|
||||
size: 16384
|
||||
validation: [size]
|
||||
config_key: "general.bios_path"
|
||||
description: "Game Boy Advance BIOS"
|
||||
note: "Any file name through general.bios_path or --bios; bios.bin beside the executable when neither is set. ROCKNIX points the key at gba_bios.bin in its BIOS directory."
|
||||
source_ref: "src/platform/core/src/loader/bios.cpp:17-48, src/platform/core/src/config.cpp:36, src/platform/sdl/main.cpp:177-192"
|
||||
@@ -0,0 +1,133 @@
|
||||
emulator: "SuperSnes9x"
|
||||
type: libretro
|
||||
core_classification: enhanced_fork
|
||||
source: "https://github.com/shanytc/snes9x"
|
||||
upstream: "https://github.com/snes9xgit/snes9x"
|
||||
profiled_date: "2026-10-17"
|
||||
source_commit: "691e47b40fb38fa522a5471462344a2f0206b7a8"
|
||||
pin_frozen: "ROCKNIX 20261001 builds this revision. Later commits on shanytc/snes9x rework the Super Famicom Box loader and are not part of that build."
|
||||
core_version: "1.63.29"
|
||||
display_name: "Nintendo - SNES / SFC / SGB / GB / GBC (SuperSnes9x)"
|
||||
cores:
|
||||
- "supersnes9x"
|
||||
systems:
|
||||
- nintendo-snes
|
||||
- nintendo-satellaview
|
||||
- nintendo-sufami-turbo
|
||||
- nintendo-sfcbox
|
||||
- nintendo-sgb
|
||||
- nintendo-gb
|
||||
- nintendo-gbc
|
||||
|
||||
notes: |
|
||||
Snes9x fork that adds a Game Boy core behind a Super Game Boy subsystem, the
|
||||
Super Famicom Box (HD64180 supervisor) and other boards. The libretro build
|
||||
compiles sfcbox.cpp, hd64180.cpp and the sgb/ tree.
|
||||
ref: snes9x.h:11-13, libretro/Makefile.common:53-69
|
||||
|
||||
BIOS_DIR is the frontend's system directory. LoadBIOS, used for BS-X.bin and
|
||||
STBIOS.bin, tries the content directory first and requires the read to fill
|
||||
the whole buffer it is given.
|
||||
ref: libretro/libretro.cpp:2320-2326, libretro/libretro.cpp:1145-1176
|
||||
|
||||
Game Boy content: with the snes9x_sgb_bios option at its default (auto) the
|
||||
core looks for an SGB2 BIOS, then an SGB1 BIOS, in the content directory,
|
||||
BIOS_DIR, then the working directory. A candidate is accepted only when its
|
||||
header at 0x7FC0 reads "Super GAMEBOY", the next byte deciding SGB2. Without
|
||||
one the built-in BIOS-less Game Boy core runs the cart. In BIOS mode a
|
||||
256-byte GB-side boot ROM is read too, and used only when it contains the
|
||||
3E F1 handshake sequence; otherwise an embedded SGB boot ROM is used.
|
||||
ref: libretro/libretro.cpp:657-671, memmap.cpp:1088-1155,
|
||||
memmap.cpp:1165-1213, memmap.cpp:1655-1686, memmap.cpp:1858-1883
|
||||
|
||||
Satellaview: a BS-X cart loads only with BS-X.bin (1 MB). The BS-X slot code
|
||||
reads BS-X.bin or BS-X.bios from BIOS_DIR.
|
||||
ref: libretro/libretro.cpp:1308-1311, bsx.cpp:1204-1235, bsx.cpp:1301-1307
|
||||
|
||||
Sufami Turbo: a cart loads only with STBIOS.bin (256 KB). The Sufami Turbo
|
||||
subsystem asks LoadBIOS for 0x100000 bytes, so a 256 KB STBIOS.bin fails that
|
||||
path; the plain content path and the two-cart path ask for 0x40000.
|
||||
ref: libretro/libretro.cpp:1302-1305, libretro/libretro.cpp:1413-1425,
|
||||
libretro/libretro.cpp:1445-1455
|
||||
|
||||
Super Famicom Box: the supervisor ROM is looked for in BIOS_DIR, the content
|
||||
directory, its BIOS and ../BIOS subfolders, then the directory of the loaded
|
||||
file. Without it the image is refused. The OSD font is optional.
|
||||
ref: sfcbox.cpp:1350-1407, memmap.cpp:2561-2562
|
||||
|
||||
files:
|
||||
- name: "BS-X.bin"
|
||||
aliases: ["BS-X.bios"]
|
||||
system: nintendo-satellaview
|
||||
required: true
|
||||
min_size: 1048576
|
||||
validation: [size]
|
||||
description: "Satellaview BS-X BIOS"
|
||||
note: "Required for BS-X carts. BS-X.bios is accepted by the slot code in bsx.cpp only."
|
||||
source_ref: "libretro/libretro.cpp:1145-1176, libretro/libretro.cpp:1308-1311, bsx.cpp:1204-1235"
|
||||
|
||||
- name: "STBIOS.bin"
|
||||
system: nintendo-sufami-turbo
|
||||
required: true
|
||||
min_size: 262144
|
||||
validation: [size]
|
||||
description: "Sufami Turbo BIOS"
|
||||
note: "Required for Sufami Turbo carts. The Sufami Turbo subsystem reads 1 MB and rejects a 256 KB file."
|
||||
source_ref: "libretro/libretro.cpp:1145-1176, libretro/libretro.cpp:1302-1305, libretro/libretro.cpp:1445-1455"
|
||||
|
||||
- name: "sgb2.sfc"
|
||||
aliases: ["SGB2.sfc", "Super Game Boy 2 (Japan).sfc"]
|
||||
system: nintendo-sgb
|
||||
required: false
|
||||
description: "Super Game Boy 2 SNES BIOS"
|
||||
note: "Preferred over sgb.sfc in auto mode. Header at 0x7FC0 must read \"Super GAMEBOY2\". Without an SGB BIOS, GB content runs on the BIOS-less core."
|
||||
source_ref: "memmap.cpp:1088-1155, memmap.cpp:1655-1665"
|
||||
|
||||
- name: "sgb.sfc"
|
||||
aliases: ["SGB.sfc", "sgb1.sfc", "SGB1.sfc", "Super Game Boy (World).sfc"]
|
||||
system: nintendo-sgb
|
||||
required: false
|
||||
description: "Super Game Boy SNES BIOS"
|
||||
note: "Used when no SGB2 BIOS is found, or alone with the option set to sgb1. Header at 0x7FC0 must read \"Super GAMEBOY\" not followed by '2'."
|
||||
source_ref: "memmap.cpp:1088-1155, memmap.cpp:1655-1665"
|
||||
|
||||
- name: "sgb2.boot.rom"
|
||||
aliases: ["sgb2_bios.bin"]
|
||||
system: nintendo-sgb
|
||||
required: false
|
||||
hle_fallback: true
|
||||
size: 256
|
||||
validation: [size]
|
||||
description: "Super Game Boy 2 GB-side boot ROM"
|
||||
note: "Read in SGB2 BIOS mode; used only when it contains the 3E F1 handshake bytes, else the embedded boot ROM runs."
|
||||
source_ref: "memmap.cpp:1165-1213, memmap.cpp:1858-1883"
|
||||
|
||||
- name: "sgb.boot.rom"
|
||||
aliases: ["sgb1.boot.rom", "sgb_bios.bin"]
|
||||
system: nintendo-sgb
|
||||
required: false
|
||||
hle_fallback: true
|
||||
size: 256
|
||||
validation: [size]
|
||||
description: "Super Game Boy GB-side boot ROM"
|
||||
note: "Read in SGB1 BIOS mode; used only when it contains the 3E F1 handshake bytes, else the embedded boot ROM runs."
|
||||
source_ref: "memmap.cpp:1165-1213, memmap.cpp:1858-1883"
|
||||
|
||||
- name: "KROM1.BIN"
|
||||
aliases: ["KROM.BIN", "krom1.bin"]
|
||||
system: nintendo-sfcbox
|
||||
required: true
|
||||
min_size: 65536
|
||||
validation: [size]
|
||||
description: "Super Famicom Box supervisor ROM (HD64180)"
|
||||
note: "Required for Super Famicom Box images: LoadSFCBox returns false without it."
|
||||
source_ref: "sfcbox.cpp:1350-1398, sfcbox.h:20, memmap.cpp:2561-2562"
|
||||
|
||||
- name: "MB90082.BIN"
|
||||
system: nintendo-sfcbox
|
||||
required: false
|
||||
min_size: 9216
|
||||
validation: [size]
|
||||
description: "Super Famicom Box OSD character ROM"
|
||||
note: "Absent, the supervisor overlay is not drawn."
|
||||
source_ref: "sfcbox.cpp:1400-1403, sfcbox.h:25"
|
||||
@@ -0,0 +1,206 @@
|
||||
emulator: "touchHLE"
|
||||
type: standalone
|
||||
core_classification: embedded_hle
|
||||
source: "https://github.com/touchHLE/touchHLE"
|
||||
profiled_date: "2026-10-17"
|
||||
source_commit: "3c5850585ba55615b17a58c58331b6d6f52d4a9d"
|
||||
pin_frozen: "ROCKNIX 20261001 builds this revision. Later upstream commits are not part of that build."
|
||||
core_version: "0.2.3"
|
||||
display_name: "Apple - iPhone OS (touchHLE)"
|
||||
cores:
|
||||
- "touchhle"
|
||||
- "touchhle-sa"
|
||||
systems:
|
||||
- apple-ios
|
||||
|
||||
notes: |
|
||||
High-level emulator for iPhone OS apps. The operating system and its
|
||||
frameworks are reimplemented in Rust, so no Apple firmware or system file is
|
||||
opened. What it reads besides the app are resources bundled with it: three
|
||||
Free Software ARMv6 libraries, fonts, and a table of default per-app options.
|
||||
ref: Cargo.toml:7, src/paths.rs:9-12, src/paths.rs:28-36
|
||||
|
||||
Resources are opened relative to the working directory, or the Resources
|
||||
folder of a macOS bundle. ROCKNIX patches the Linux base to /usr/lib/touchHLE.
|
||||
ref: src/paths.rs:63-82
|
||||
|
||||
The libraries are mapped into the guest at /usr/lib under their own names and
|
||||
aliases. An app binary that links one of them loads it from there, and fails
|
||||
to start with "Could not load bundled dylib" when the host file is missing.
|
||||
ref: src/fs.rs:588-622, src/environment.rs:384-413
|
||||
|
||||
Fonts are opened the first time an app draws text in that face, and a
|
||||
missing or unparsable file is a panic. The Liberation families stand in for
|
||||
the iPhone OS faces; Noto Sans JP is used for strings holding kana or kanji.
|
||||
ROCKNIX installs only the LiberationSans files, so an app that asks for a
|
||||
monospace, serif or Japanese face stops there.
|
||||
ref: src/font.rs:70-129, src/frameworks/uikit/ui_font.rs:26-43,
|
||||
src/frameworks/uikit/ui_font.rs:180-205
|
||||
|
||||
touchHLE_default_options.txt is read before the user's touchHLE_options.txt;
|
||||
when it cannot be opened a warning is printed and the app runs without it.
|
||||
ref: src/lib.rs:319-323
|
||||
|
||||
files:
|
||||
- name: "libgcc_s.1.dylib"
|
||||
path: "touchHLE_dylibs/libgcc_s.1.dylib"
|
||||
system: apple-ios
|
||||
required: false
|
||||
bundled: true
|
||||
description: "GCC runtime library from the iPhoneOS 4.0 SDK"
|
||||
note: "Exposed as /usr/lib/libgcc_s.1.dylib. Needed by apps that link it."
|
||||
source_ref: "src/fs.rs:588-622, src/environment.rs:384-413"
|
||||
|
||||
- name: "libstdc++.6.0.9.dylib"
|
||||
path: "touchHLE_dylibs/libstdc++.6.0.9.dylib"
|
||||
system: apple-ios
|
||||
required: false
|
||||
bundled: true
|
||||
description: "GNU C++ standard library from the iPhoneOS 4.0 SDK"
|
||||
note: "Exposed as /usr/lib/libstdc++.6.dylib and /usr/lib/libstdc++.6.0.9.dylib. Needed by apps that link it."
|
||||
source_ref: "src/fs.rs:588-622, src/environment.rs:384-413"
|
||||
|
||||
- name: "libz.1.2.3.dylib"
|
||||
path: "touchHLE_dylibs/libz.1.2.3.dylib"
|
||||
system: apple-ios
|
||||
required: false
|
||||
bundled: true
|
||||
description: "zlib built from Apple's zlib-23.0.1 sources"
|
||||
note: "Exposed as /usr/lib/libz.1.2.3.dylib, libz.1.dylib, libz.dylib and libz.1.1.3.dylib. Needed by apps that link it."
|
||||
source_ref: "src/fs.rs:588-622, src/environment.rs:384-413"
|
||||
|
||||
- name: "LiberationMono-Regular.ttf"
|
||||
path: "touchHLE_fonts/LiberationMono-Regular.ttf"
|
||||
system: apple-ios
|
||||
required: false
|
||||
bundled: true
|
||||
description: "Bundled font"
|
||||
note: "Opened on first use of its face; touchHLE panics when it is missing."
|
||||
source_ref: "src/font.rs:70-85, src/font.rs:88-90"
|
||||
|
||||
- name: "LiberationMono-Bold.ttf"
|
||||
path: "touchHLE_fonts/LiberationMono-Bold.ttf"
|
||||
system: apple-ios
|
||||
required: false
|
||||
bundled: true
|
||||
description: "Bundled font"
|
||||
note: "Opened on first use of its face; touchHLE panics when it is missing."
|
||||
source_ref: "src/font.rs:70-85, src/font.rs:91-93"
|
||||
|
||||
- name: "LiberationMono-BoldItalic.ttf"
|
||||
path: "touchHLE_fonts/LiberationMono-BoldItalic.ttf"
|
||||
system: apple-ios
|
||||
required: false
|
||||
bundled: true
|
||||
description: "Bundled font"
|
||||
note: "Opened on first use of its face; touchHLE panics when it is missing."
|
||||
source_ref: "src/font.rs:70-85, src/font.rs:94-96"
|
||||
|
||||
- name: "LiberationMono-Italic.ttf"
|
||||
path: "touchHLE_fonts/LiberationMono-Italic.ttf"
|
||||
system: apple-ios
|
||||
required: false
|
||||
bundled: true
|
||||
description: "Bundled font"
|
||||
note: "Opened on first use of its face; touchHLE panics when it is missing."
|
||||
source_ref: "src/font.rs:70-85, src/font.rs:97-99"
|
||||
|
||||
- name: "LiberationSans-Regular.ttf"
|
||||
path: "touchHLE_fonts/LiberationSans-Regular.ttf"
|
||||
system: apple-ios
|
||||
required: false
|
||||
bundled: true
|
||||
description: "Bundled font"
|
||||
note: "Opened on first use of its face; touchHLE panics when it is missing."
|
||||
source_ref: "src/font.rs:70-85, src/font.rs:100-102"
|
||||
|
||||
- name: "LiberationSans-Bold.ttf"
|
||||
path: "touchHLE_fonts/LiberationSans-Bold.ttf"
|
||||
system: apple-ios
|
||||
required: false
|
||||
bundled: true
|
||||
description: "Bundled font"
|
||||
note: "Opened on first use of its face; touchHLE panics when it is missing."
|
||||
source_ref: "src/font.rs:70-85, src/font.rs:103-105"
|
||||
|
||||
- name: "LiberationSans-BoldItalic.ttf"
|
||||
path: "touchHLE_fonts/LiberationSans-BoldItalic.ttf"
|
||||
system: apple-ios
|
||||
required: false
|
||||
bundled: true
|
||||
description: "Bundled font"
|
||||
note: "Opened on first use of its face; touchHLE panics when it is missing."
|
||||
source_ref: "src/font.rs:70-85, src/font.rs:106-108"
|
||||
|
||||
- name: "LiberationSans-Italic.ttf"
|
||||
path: "touchHLE_fonts/LiberationSans-Italic.ttf"
|
||||
system: apple-ios
|
||||
required: false
|
||||
bundled: true
|
||||
description: "Bundled font"
|
||||
note: "Opened on first use of its face; touchHLE panics when it is missing."
|
||||
source_ref: "src/font.rs:70-85, src/font.rs:109-111"
|
||||
|
||||
- name: "LiberationSerif-Regular.ttf"
|
||||
path: "touchHLE_fonts/LiberationSerif-Regular.ttf"
|
||||
system: apple-ios
|
||||
required: false
|
||||
bundled: true
|
||||
description: "Bundled font"
|
||||
note: "Opened on first use of its face; touchHLE panics when it is missing."
|
||||
source_ref: "src/font.rs:70-85, src/font.rs:112-114"
|
||||
|
||||
- name: "LiberationSerif-Bold.ttf"
|
||||
path: "touchHLE_fonts/LiberationSerif-Bold.ttf"
|
||||
system: apple-ios
|
||||
required: false
|
||||
bundled: true
|
||||
description: "Bundled font"
|
||||
note: "Opened on first use of its face; touchHLE panics when it is missing."
|
||||
source_ref: "src/font.rs:70-85, src/font.rs:115-117"
|
||||
|
||||
- name: "LiberationSerif-BoldItalic.ttf"
|
||||
path: "touchHLE_fonts/LiberationSerif-BoldItalic.ttf"
|
||||
system: apple-ios
|
||||
required: false
|
||||
bundled: true
|
||||
description: "Bundled font"
|
||||
note: "Opened on first use of its face; touchHLE panics when it is missing."
|
||||
source_ref: "src/font.rs:70-85, src/font.rs:118-120"
|
||||
|
||||
- name: "LiberationSerif-Italic.ttf"
|
||||
path: "touchHLE_fonts/LiberationSerif-Italic.ttf"
|
||||
system: apple-ios
|
||||
required: false
|
||||
bundled: true
|
||||
description: "Bundled font"
|
||||
note: "Opened on first use of its face; touchHLE panics when it is missing."
|
||||
source_ref: "src/font.rs:70-85, src/font.rs:121-123"
|
||||
|
||||
- name: "NotoSansJP-Regular.otf"
|
||||
path: "touchHLE_fonts/NotoSansJP-Regular.otf"
|
||||
system: apple-ios
|
||||
required: false
|
||||
bundled: true
|
||||
description: "Bundled font"
|
||||
note: "Opened on first use of its face; touchHLE panics when it is missing."
|
||||
source_ref: "src/font.rs:70-85, src/font.rs:124-126"
|
||||
|
||||
- name: "NotoSansJP-Bold.otf"
|
||||
path: "touchHLE_fonts/NotoSansJP-Bold.otf"
|
||||
system: apple-ios
|
||||
required: false
|
||||
bundled: true
|
||||
description: "Bundled font"
|
||||
note: "Opened on first use of its face; touchHLE panics when it is missing."
|
||||
source_ref: "src/font.rs:70-85, src/font.rs:127-129"
|
||||
|
||||
- name: "touchHLE_default_options.txt"
|
||||
path: "touchHLE_default_options.txt"
|
||||
system: apple-ios
|
||||
required: false
|
||||
bundled: true
|
||||
category: game_data
|
||||
description: "Default options per app"
|
||||
note: "Command-line style options keyed by app bundle identifier, applied before the user's own file."
|
||||
source_ref: "src/paths.rs:36, src/lib.rs:319-323"
|
||||
@@ -9,6 +9,7 @@ core_version: "0.60a"
|
||||
display_name: "Sharp X1 (X Millennium)"
|
||||
cores:
|
||||
- x1
|
||||
- xmil
|
||||
systems:
|
||||
- sharp-x1
|
||||
|
||||
|
||||
@@ -374,6 +374,8 @@ platforms:
|
||||
logo: https://avatars.githubusercontent.com/u/152618023
|
||||
scraper: rocknix
|
||||
schedule: weekly
|
||||
target_scraper: rocknix_targets
|
||||
target_source: https://github.com/ROCKNIX/distribution/blob/next/projects/ROCKNIX/packages/virtual/emulators/package.mk
|
||||
install:
|
||||
detect:
|
||||
- os: linux
|
||||
|
||||
@@ -112,3 +112,19 @@ retropie:
|
||||
_default:
|
||||
# Homebrew game scriptmodule, not an emulator.
|
||||
remove_cores: [superflappybirds]
|
||||
|
||||
rocknix:
|
||||
targets:
|
||||
_default:
|
||||
# Runtimes and launchers the emulators metapackage installs beside the
|
||||
# emulators: x86 translation (box64, box86), Windows (wine), the Steam
|
||||
# and Heroic clients, and PortMaster, which installs ports.
|
||||
remove_cores:
|
||||
- box64
|
||||
- box86
|
||||
- heroic
|
||||
- portmaster
|
||||
- steam
|
||||
- wine
|
||||
amd64:
|
||||
aliases: [x86_64, pc]
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,202 @@
|
||||
"""Scraper for ROCKNIX per-device emulator availability.
|
||||
|
||||
Sources (ROCKNIX/distribution, at the release tag platforms/rocknix.yml names):
|
||||
- projects/ROCKNIX/packages/virtual/emulators/package.mk -- the cores every
|
||||
image carries, those aarch64 adds, and a `case "${DEVICE}"` block per SoC
|
||||
- projects/ROCKNIX/devices/<DEVICE>/options -- ENABLE_32BIT, which the 32-bit
|
||||
cores of a device depend on (distributions/ROCKNIX/options defaults it on)
|
||||
|
||||
An H700 or RK3326 handheld carries neither Dolphin nor AetherSX2: without a
|
||||
target list, its pack shipped the PS2, GameCube and PS3 firmware anyway.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import re
|
||||
import sys
|
||||
from datetime import datetime, timezone
|
||||
|
||||
import yaml
|
||||
|
||||
from . import BaseTargetScraper
|
||||
|
||||
PLATFORM_NAME = "rocknix"
|
||||
|
||||
RAW_BASE = "https://raw.githubusercontent.com/ROCKNIX/distribution/{tag}"
|
||||
GITHUB_API = "https://api.github.com/repos/ROCKNIX/distribution/contents"
|
||||
EMULATORS_MK = "projects/ROCKNIX/packages/virtual/emulators/package.mk"
|
||||
DEVICES_DIR = "projects/ROCKNIX/devices"
|
||||
|
||||
try:
|
||||
from ..base_scraper import fetch_bytes, github_headers
|
||||
from ..rocknix_scraper import GITHUB_REPO
|
||||
except ImportError:
|
||||
from scraper.base_scraper import fetch_bytes, github_headers
|
||||
from scraper.rocknix_scraper import GITHUB_REPO
|
||||
|
||||
# `NAME="a b \
|
||||
# c"` or `NAME+=" a b"`, continuation lines joined first.
|
||||
_ASSIGN_RE = re.compile(r'^\s*(?:\[[^\]]*\]\s*&&\s*)?(\w+)(\+?=)"([^"]*)"', re.MULTILINE)
|
||||
_CASE_RE = re.compile(r'case "\$\{DEVICE\}" in(.*?)\besac\b', re.DOTALL)
|
||||
_ARM_RE = re.compile(r"^\s*([A-Z0-9|]+)\)\s*$", re.MULTILINE)
|
||||
_AARCH64_RE = re.compile(
|
||||
r'if \[ "\$\{ARCH\}" = "aarch64" \]; then(.*?)\bfi\b', re.DOTALL
|
||||
)
|
||||
|
||||
|
||||
def _assignments(text: str) -> list[tuple[str, str, list[str]]]:
|
||||
"""(variable, operator, words) of each quoted assignment, in order."""
|
||||
joined = re.sub(r"\\\n", " ", text)
|
||||
return [(name, op, value.split()) for name, op, value in _ASSIGN_RE.findall(joined)]
|
||||
|
||||
|
||||
def _apply(state: dict[str, list[str]], text: str, with_32bit: bool) -> None:
|
||||
for name, op, words in _assignments(text):
|
||||
if name == "EMUS_32BIT" and not with_32bit:
|
||||
continue
|
||||
if op == "=":
|
||||
state[name] = list(words)
|
||||
else:
|
||||
state.setdefault(name, []).extend(words)
|
||||
|
||||
|
||||
def parse_device_cores(
|
||||
package_mk: str, device: str, arch: str, with_32bit: bool
|
||||
) -> tuple[list[str], list[str]]:
|
||||
"""(libretro packages, standalone packages) one device's image carries."""
|
||||
case = _CASE_RE.search(package_mk)
|
||||
head = package_mk[: case.start()] if case else package_mk
|
||||
aarch64 = _AARCH64_RE.search(head)
|
||||
base = head if aarch64 is None else head[: aarch64.start()] + head[aarch64.end():]
|
||||
state: dict[str, list[str]] = {}
|
||||
_apply(state, base, with_32bit)
|
||||
if arch == "aarch64" and aarch64 is not None:
|
||||
_apply(state, aarch64.group(1), with_32bit)
|
||||
if case is not None:
|
||||
arms = list(_ARM_RE.finditer(case.group(1)))
|
||||
for index, arm in enumerate(arms):
|
||||
if device not in arm.group(1).split("|"):
|
||||
continue
|
||||
end = arms[index + 1].start() if index + 1 < len(arms) else len(case.group(1))
|
||||
_apply(state, case.group(1)[arm.end():end], with_32bit)
|
||||
libretro = state.get("LIBRETRO_CORES", []) + [
|
||||
p for p in state.get("EMUS_32BIT", []) if re.search(r"[-_]lr$", p)
|
||||
]
|
||||
standalone = state.get("PKG_EMUS", []) + [
|
||||
p for p in state.get("EMUS_32BIT", []) if not re.search(r"[-_]lr$", p)
|
||||
]
|
||||
return libretro, standalone
|
||||
|
||||
|
||||
def core_names(libretro: list[str], standalone: list[str]) -> list[str]:
|
||||
"""Package names as the profiles' cores: lists spell them.
|
||||
|
||||
A libretro package is the core's name with `-lr` (`beetle-psx-lr`,
|
||||
`neocd_lr`), spelled with underscores as the buildbot names it; a
|
||||
standalone package drops its `-sa` (`duckstation-sa`, `hatarisa`).
|
||||
"""
|
||||
names = {re.sub(r"[-_]lr$", "", package).replace("-", "_") for package in libretro}
|
||||
names.update(re.sub(r"-?sa$", "", package) for package in standalone)
|
||||
return sorted(names)
|
||||
|
||||
|
||||
# A package that builds nothing itself and pulls other cores in. idtech-lr
|
||||
# installs ecwolf, prboom, tyrquake and vitaquake2 (vitaquake3 and boom3 on
|
||||
# x86_64); no profile could name it.
|
||||
METAPACKAGES = {"idtech-lr": "projects/ROCKNIX/packages/emulators/libretro/idtech-lr/package.mk"}
|
||||
_IF_RE = re.compile(r'^if \[ "\$\{(\w+)\}" = "?([\w-]+)"? \]; then\n(.*?)^fi$',
|
||||
re.MULTILINE | re.DOTALL)
|
||||
|
||||
|
||||
def metapackage_cores(package_mk: str, arch: str) -> list[str]:
|
||||
"""The -lr packages a metapackage depends on for one architecture.
|
||||
|
||||
OPENGLES_SUPPORT is yes on every ROCKNIX device (config/graphic, from
|
||||
OPENGLES="mesa" in projects/ROCKNIX/options); TARGET_ARCH is the device's.
|
||||
"""
|
||||
found: list[str] = []
|
||||
for variable, value, body in _IF_RE.findall(package_mk):
|
||||
if variable == "TARGET_ARCH" and value != arch:
|
||||
continue
|
||||
if variable not in ("TARGET_ARCH", "OPENGLES_SUPPORT"):
|
||||
continue
|
||||
for _name, _op, words in _assignments(body):
|
||||
found += [w for w in words if re.search(r"[-_]lr$", w)]
|
||||
return found
|
||||
|
||||
|
||||
class Scraper(BaseTargetScraper):
|
||||
"""Per-device core lists from ROCKNIX's emulators metapackage."""
|
||||
|
||||
def __init__(self, url: str = "https://github.com/ROCKNIX/distribution"):
|
||||
super().__init__(url=url)
|
||||
self.tag = ""
|
||||
|
||||
def _raw(self, path: str) -> str:
|
||||
return fetch_bytes(f"{RAW_BASE.format(tag=self.tag)}/{path}").decode("utf-8")
|
||||
|
||||
def _devices(self) -> list[str]:
|
||||
import json # noqa: PLC0415
|
||||
|
||||
listing = json.loads(fetch_bytes(
|
||||
f"{GITHUB_API}/{DEVICES_DIR}?ref={self.tag}", headers=github_headers()
|
||||
))
|
||||
devices = [item["name"] for item in listing if item.get("type") == "dir"]
|
||||
if not devices:
|
||||
raise RuntimeError(f"no device in {DEVICES_DIR} at {self.tag}")
|
||||
return sorted(devices)
|
||||
|
||||
def fetch_targets(self) -> dict:
|
||||
from scraper.base_scraper import fetch_github_latest_version # noqa: PLC0415
|
||||
|
||||
self.tag = fetch_github_latest_version(GITHUB_REPO)
|
||||
if not self.tag:
|
||||
raise RuntimeError("cannot read ROCKNIX's latest release tag")
|
||||
package_mk = self._raw(EMULATORS_MK)
|
||||
if "LIBRETRO_CORES" not in package_mk:
|
||||
raise RuntimeError(f"no LIBRETRO_CORES in {EMULATORS_MK} at {self.tag}")
|
||||
|
||||
targets: dict[str, dict] = {}
|
||||
for device in self._devices():
|
||||
options = self._raw(f"{DEVICES_DIR}/{device}/options")
|
||||
arch = "x86_64" if device == "AMD64" else "aarch64"
|
||||
with_32bit = not re.search(r'ENABLE_32BIT="false"', options)
|
||||
libretro, standalone = parse_device_cores(package_mk, device, arch, with_32bit)
|
||||
for meta, path in METAPACKAGES.items():
|
||||
if meta in libretro:
|
||||
libretro.remove(meta)
|
||||
libretro += metapackage_cores(self._raw(path), arch)
|
||||
cores = core_names(libretro, standalone)
|
||||
targets[device.lower()] = {"architecture": arch, "cores": cores}
|
||||
print(f" {device.lower()} ({arch}): {len(cores)} cores", file=sys.stderr)
|
||||
|
||||
return {
|
||||
"platform": PLATFORM_NAME,
|
||||
"source": f"{self.url}/tree/{self.tag}/{EMULATORS_MK}",
|
||||
"scraped_at": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
|
||||
"targets": targets,
|
||||
}
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description="Scrape ROCKNIX per-device cores")
|
||||
parser.add_argument("--dry-run", action="store_true", help="Show target summary")
|
||||
parser.add_argument("--output", "-o", help="Output YAML file")
|
||||
args = parser.parse_args()
|
||||
|
||||
scraper = Scraper()
|
||||
data = scraper.fetch_targets()
|
||||
if args.dry_run:
|
||||
for name, info in data["targets"].items():
|
||||
print(f" {name} ({info['architecture']}): {len(info['cores'])} cores")
|
||||
return
|
||||
if args.output:
|
||||
scraper.write_output(data, args.output)
|
||||
print(f"Written to {args.output}")
|
||||
return
|
||||
print(yaml.dump(data, default_flow_style=False, sort_keys=False))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -176,6 +176,63 @@ class BatoceraKconfig(unittest.TestCase):
|
||||
"BR2_PACKAGE_RUFFLE"} & active)
|
||||
|
||||
|
||||
class RocknixPerDevice(unittest.TestCase):
|
||||
"""ROCKNIX had no target list: an H700 handheld got the PS2, GameCube
|
||||
and PS3 firmware of emulators its image does not carry."""
|
||||
|
||||
PACKAGE_MK = (
|
||||
'PKG_EMUS="amiberry duckstation-sa hatarisa"\n'
|
||||
'EMUS_32BIT=""\n'
|
||||
'LIBRETRO_CORES="81-lr beetle-psx-lr \\\n'
|
||||
' neocd_lr idtech-lr"\n'
|
||||
'if [ "${ARCH}" = "aarch64" ]; then\n'
|
||||
' LIBRETRO_CORES+=" duckstation-lr"\n'
|
||||
'fi\n'
|
||||
'case "${DEVICE}" in\n'
|
||||
' H700|RK3326)\n'
|
||||
' [ "${ENABLE_32BIT}" == "true" ] && EMUS_32BIT="box86 gpsp-lr"\n'
|
||||
' PKG_EMUS+=" drastic-sa"\n'
|
||||
' ;;\n'
|
||||
' SM8550)\n'
|
||||
' PKG_EMUS+=" aethersx2-sa dolphin-sa"\n'
|
||||
' ;;\n'
|
||||
' AMD64)\n'
|
||||
' PKG_EMUS+=" dolphin-sa"\n'
|
||||
'esac\n'
|
||||
)
|
||||
IDTECH = (
|
||||
'if [ "${OPENGLES_SUPPORT}" = yes ]; then\n'
|
||||
' PKG_DEPENDS_TARGET+=" ecwolf-lr prboom-lr"\n'
|
||||
'fi\n'
|
||||
'if [ "${TARGET_ARCH}" = "x86_64" ]; then\n'
|
||||
' PKG_DEPENDS_TARGET+=" vitaquake3-lr"\n'
|
||||
'fi\n'
|
||||
)
|
||||
|
||||
def test_each_device_gets_its_own_cores(self):
|
||||
from scraper.targets.rocknix_targets_scraper import ( # noqa: PLC0415
|
||||
core_names,
|
||||
parse_device_cores,
|
||||
)
|
||||
|
||||
h700 = core_names(*parse_device_cores(self.PACKAGE_MK, "H700", "aarch64", True))
|
||||
self.assertTrue({"drastic", "gpsp", "duckstation", "beetle_psx", "hatari",
|
||||
"81", "neocd"} <= set(h700))
|
||||
self.assertFalse({"aethersx2", "dolphin"} & set(h700))
|
||||
no32 = core_names(*parse_device_cores(self.PACKAGE_MK, "H700", "aarch64", False))
|
||||
self.assertNotIn("gpsp", no32)
|
||||
amd64 = core_names(*parse_device_cores(self.PACKAGE_MK, "AMD64", "x86_64", False))
|
||||
self.assertIn("dolphin", amd64)
|
||||
self.assertNotIn("drastic", amd64)
|
||||
|
||||
def test_a_metapackage_names_the_cores_it_installs(self):
|
||||
from scraper.targets.rocknix_targets_scraper import metapackage_cores # noqa: PLC0415
|
||||
|
||||
self.assertEqual(metapackage_cores(self.IDTECH, "aarch64"), ["ecwolf-lr", "prboom-lr"])
|
||||
self.assertEqual(metapackage_cores(self.IDTECH, "x86_64"),
|
||||
["ecwolf-lr", "prboom-lr", "vitaquake3-lr"])
|
||||
|
||||
|
||||
class RetroPieModuleFlags(unittest.TestCase):
|
||||
"""The RetroPie target list read flags as requirements and libretro alone.
|
||||
|
||||
|
||||
Reference in new issue
Block a user