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:
Abdessamad Derraz committed 2026-10-17 15:38:07 +02:00
1 parent 7fd82d452f
commit d9c74888e8
17 files changed
+3597 -2

No files matched your search

Binary file not shown.
Binary file not shown.
+74
View File
@@ -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"
+137
View File
@@ -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"
+452
View File
@@ -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"
+180
View File
@@ -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"
+1 -1
View File
@@ -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.
+1 -1
View File
@@ -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"
+47
View File
@@ -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"
+133
View File
@@ -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"
+206
View File
@@ -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"
+1
View File
@@ -9,6 +9,7 @@ core_version: "0.60a"
display_name: "Sharp X1 (X Millennium)"
cores:
- x1
- xmil
systems:
- sharp-x1
+2
View File
@@ -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
+16
View File
@@ -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()
+57
View File
@@ -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.