feat: profile nine new buildbot cores

This commit is contained in:
Abdessamad Derraz committed 2026-09-03 22:04:14 +02:00
1 parent cad82f9103
commit 8c686dee48
10 files changed
+620

No files matched your search

Binary file not shown.
+124
View File
@@ -0,0 +1,124 @@
emulator: BBKEmu
type: standalone + libretro
core_classification: pure_libretro
source: "https://github.com/AloysHF/BBKEmu"
upstream: "https://github.com/AloysHF/BBKEmu"
profiled_date: "2026-09-03"
source_commit: "479e52953344329810dc0305a4c160e4badfc9bc"
core_version: "0.1.0"
display_name: "BBK - Electronic Dictionary (BBKEmu)"
cores:
- bbkemu
systems:
- bbk-longman-4980
- bbk-longman-4988
notes: |
BBK A-series electronic dictionary game emulator written in Rust by
AloysHF. The libretro core and the bbk-emu standalone binary share the
bbkemu-core crate. A .gam game is 6502 code that calls into the
dictionary's OS ROM for LCD, keyboard, audio, timer and file services.
Two ROM images are read from the system directory, in one subdirectory
per model: {system}/BBKEmu/<model>/8.BIN, the font ROM mapped at
physical 0x800000-0x9FFFFF, and E.BIN, the OS ROM mapped at
0xE00000-0xFFFFFF (crates/bbkemu-libretro/src/lib.rs:187-206,
crates/bbkemu-core/src/memory.rs:377-398). The libretro core always
loads content as the A4980 model (crates/bbkemu-libretro/src/lib.rs:470-471),
so only BBKEmu/A4980/ is ever read from RetroArch. Both reads are
std::fs::read guarded by `if let Ok`: a missing file is skipped without
any message to the frontend. The image is copied into a 2 MiB
zero-filled buffer (crates/bbkemu-core/src/memory.rs:197-209); nothing
checks its size or contents.
Without E.BIN, run_os_init (crates/bbkemu-core/src/emulator.rs:231-252)
sets PC to 0x350, reads zeros from the ROM window, never sees
_MTCT=0xFE and gives up after 10 million cycles; the bank registers
stay unmapped and the game exits at its first OS call. Measured by
running run_os_init from bbkemu-core against a dump: 1 092 023 cycles
to completion with E.BIN, timeout without it. Without 8.BIN the font
window reads as 0x00 and every glyph the OS draws is blank; execution
continues.
The standalone binary takes -8/--rom8 and -e/--rome explicit paths and
otherwise reads system/BBKEmu/<model>/8.BIN and E.BIN relative to the
working directory, --model 4980 (default) or 4988 selecting the
subdirectory (crates/bbkemu/src/main.rs:108-117, crates/bbkemu/src/main.rs:146-170).
The A4988 model differs by its flash save-area offset and key layout
(crates/bbkemu-core/src/emulator.rs:148-153,
crates/bbkemu-libretro/src/lib.rs:619-628).
During init the OS maps its own bank at logical bank D: 0xEA8 for the
A4980 OS, 0xE88 for the A4988 OS (crates/bbkemu-core/src/model.rs:11-13).
The core never reads that value back; detect_model
(crates/bbkemu-core/src/model.rs:37-49) has no caller. The
include_bytes! font in crates/bbkemu-core/src/font.rs is not declared in
lib.rs and is not compiled. Content arrives through the frontend buffer
(need_fullpath = false, crates/bbkemu-libretro/src/lib.rs:416). Save RAM
is the first 0x14000 bytes of the emulated flash
(crates/bbkemu-libretro/src/lib.rs:840-842).
files:
- name: 8.BIN
path: BBKEmu/A4980/8.BIN
standalone_path: system/BBKEmu/A4980/8.BIN
system: bbk-longman-4980
size: 2097152
required: true
description: "BBK A-series font ROM"
note: >-
Read whole from {system}/BBKEmu/A4980/8.BIN into the 2 MiB window at
physical 0x800000. A missing file is skipped silently; the window
then reads as 0x00 and text drawn through the OS is blank. No size
or hash check; size is the window the image fills.
source_ref: "crates/bbkemu-libretro/src/lib.rs:187-199, crates/bbkemu-libretro/src/lib.rs:470-471, crates/bbkemu-core/src/memory.rs:8, crates/bbkemu-core/src/memory.rs:197-202, crates/bbkemu-core/src/memory.rs:384-390, crates/bbkemu/src/main.rs:147-158"
- name: E.BIN
path: BBKEmu/A4980/E.BIN
standalone_path: system/BBKEmu/A4980/E.BIN
system: bbk-longman-4980
size: 2097152
required: true
description: "BBK A-series OS ROM"
note: >-
Read whole from {system}/BBKEmu/A4980/E.BIN into the 2 MiB window at
physical 0xE00000; the last 256 bytes also serve as the interrupt
vector page at 0x0300. A missing file is skipped silently, the OS
init loop times out after 10 million cycles and no game runs. No
size or hash check; size is the window the image fills.
source_ref: "crates/bbkemu-libretro/src/lib.rs:187-193, crates/bbkemu-libretro/src/lib.rs:201-206, crates/bbkemu-libretro/src/lib.rs:470-471, crates/bbkemu-core/src/memory.rs:9, crates/bbkemu-core/src/memory.rs:204-209, crates/bbkemu-core/src/memory.rs:224-226, crates/bbkemu-core/src/memory.rs:391-397, crates/bbkemu-core/src/emulator.rs:231-252, crates/bbkemu/src/main.rs:159-170"
- name: 8.BIN
standalone_path: system/BBKEmu/A4988/8.BIN
mode: standalone
system: bbk-longman-4988
size: 2097152
required: true
description: "BBK A-series font ROM, A4988 slot"
note: >-
Read by the standalone binary with --model 4988 from
system/BBKEmu/A4988/8.BIN relative to the working directory. The
libretro core has no model option and never opens this directory.
source_ref: "crates/bbkemu/src/main.rs:108-117, crates/bbkemu/src/main.rs:147-158, crates/bbkemu-core/src/model.rs:28-34"
- name: E.BIN
standalone_path: system/BBKEmu/A4988/E.BIN
mode: standalone
system: bbk-longman-4988
size: 2097152
required: true
description: "BBK A-series OS ROM, A4988 slot"
note: >-
Read by the standalone binary with --model 4988 from
system/BBKEmu/A4988/E.BIN relative to the working directory. The
libretro core has no model option and never opens this directory.
source_ref: "crates/bbkemu/src/main.rs:108-117, crates/bbkemu/src/main.rs:159-170, crates/bbkemu-core/src/model.rs:28-34, crates/bbkemu-core/src/emulator.rs:148-153"
platform_details:
memory_map:
source_ref: "crates/bbkemu-core/src/memory.rs:377-398"
note: |
Physical space seen through sixteen 4 KiB bank registers: RAM below
0x8000, 2 MiB flash at 0x200000, 8.BIN at 0x800000, E.BIN at
0xE00000. Reads outside a loaded image return 0x00; ROM windows
ignore writes.
+46
View File
@@ -0,0 +1,46 @@
emulator: DingooEmu
type: standalone + libretro
core_classification: pure_libretro
source: "https://github.com/AloysHF/DingooEmu"
upstream: "https://github.com/AloysHF/DingooEmu"
profiled_date: "2026-09-03"
source_commit: "746d6f116c707b9a2ede23c4b25468f90e26af26"
core_version: "0.2.0"
display_name: "Dingoo - A320 (DingooEmu)"
cores:
- dingooemu
systems:
- dingoo-a320
notes: |
Dingoo A320 emulator written in Rust by AloysHF. The libretro core and
the dingoo-emu standalone binary share the dingooemu-core crate. A .app
file is parsed from its full path (need_fullpath = true,
crates/dingooemu-libretro/src/api.rs:87; Emulator::from_path,
crates/dingooemu-core/src/emulator.rs:316-319;
crates/dingooemu-core/src/app_loader.rs:119-122) and its imports are
bound to Rust implementations of the Dingoo SDK
(crates/dingooemu-core/src/emulator/sdk_hle/mod.rs:22-30). No firmware
image, font or system file backs those calls.
The guest file API (crates/dingooemu-core/src/emulator/sdk_hle/files.rs:43-129)
resolves a name in three steps: a file under the save directory, a
resource packed inside the .app, then a host file relative to the .app's
own directory (crates/dingooemu-core/src/emulator.rs:1684-1706,
crates/dingooemu-core/src/emulator.rs:1433-1501). fsys_findfirst
enumerates the .app's directory and refuses to leave it
(crates/dingooemu-core/src/emulator.rs:1545-1591). Files the game
creates land in the frontend save directory
(crates/dingooemu-libretro/src/api.rs:152-155) or, when the frontend
gives none, beside the .app (crates/dingooemu-core/src/emulator.rs:411).
The core queries RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY only
(crates/dingooemu-libretro/src/constants.rs:30); no system directory
constant exists in the crate.
With the diagnostic core option on, dingooemu-diagnostic.txt is written
to the save directory (crates/dingooemu-libretro/src/diagnostics.rs:83-89,
crates/dingooemu-libretro/src/diagnostics.rs:311-316). No include_bytes!
data is compiled in.
exclusion_note: "No file is read outside the content: the .app path is the only input, guest file calls resolve to the save directory, the .app's resource table or the .app's own directory, nothing queries the system directory, no data is embedded with include_bytes!, and the .info declares firmware_count = 0."
files: []
+158
View File
@@ -0,0 +1,158 @@
emulator: Hatari 2014
type: libretro
core_classification: frozen_snapshot
source: "https://github.com/libretro/hatari"
source_branch: hitari2014-mercurial
upstream: "https://github.com/hatari/hatari"
profiled_date: "2026-09-03"
source_commit: "3919d702b7013e8d05222345066747d4f8559c3f"
upstream_commit: "c1a5c88bc06e56778b6b7f8483becfd58a7da2b4"
core_version: "1.8.0"
display_name: "Atari - ST/STE/TT/Falcon (Hatari 2014)"
cores:
- hatari2014
systems:
- atari-st
- atari-ste
- atari-tt
- atari-falcon
notes: |
Hatari 2014 is the libretro port of Hatari 1.8.0 (src/includes/version.h:16),
the July 2014 release, kept on the hitari2014-mercurial branch of
libretro/hatari after the main branch moved to a new port. The branch
carries the Mercurial history up to the 1.8.0 release commit plus the
port commits started in November 2014; it builds as hatari2014
(Makefile.libretro:22, .gitlab-ci-libretro.yml:12) and reports
library_name Hatari2014, version 1.8 (libretro/libretro.c:1466-1468).
No hatari2014 .info exists in libretro-core-info yet.
Directory layout under the libretro system directory: the Hatari working
and data directories are <system>/hatari (src/paths.c:323-324; the
system directory itself on Vita and PS3, src/paths.c:313-319), the
default TOS is <system>/tos.img, extra TOS images go in
<system>/hatari/tos, BOOT.ST in <system>/hatari, floppy.raw and the
global hatari.cfg in <system> and <system>/hatari. The Hatari home
directory, which holds the user hatari.cfg and hatari.nvram, is
$HOME/.hatari on desktop builds (src/paths.c:40, src/paths.c:283-284),
<system>/hatari on Wii U and Vita (src/paths.c:209-212,
src/paths.c:223-225), the system directory itself on PS3
(src/paths.c:237-239).
TOS selection: retro_set_environment lists <system>/tos.img and every
entry of <system>/hatari/tos (libretro/libretro.c:393-411); the
hatari_tosimage option offers those ending in img
(libretro/libretro.c:270-299) and the choice becomes RETRO_TOS
(libretro/libretro.c:640-649). retro_load_game refuses content when that
path does not exist (libretro/libretro.c:1602-1607) and hmain writes it
into szTosImageFileName after the configuration files, so hatari.cfg
cannot override it (src/main.c:905-907). TOS_LoadImage reads the file
whole, strips the 256-byte (or 34-byte for 4.92) loader of a RAM TOS,
detects EmuTOS by ETOS at offset 0x2c, and rejects an image whose version
word is outside 0x100-0x4FF, whose load address is neither 0xE00000 nor
0xFC0000, or which exceeds 1 MB; a 16 KB image with version 0 is the TOS
0.00 boot loader (src/tos.c:575-651). Machine type and CPU are coerced to
the TOS version unless the image is EmuTOS (src/tos.c:459-566), and ROM
patches are applied for TOS 1.00, 1.02, 1.04, 1.06, 1.62, 2.05, 2.06,
3.06, 4.00 to 4.04 and 4.92 (src/tos.c:146-220). HFile_Read also accepts
.img, .rom and .tos as fallback extensions and reads the first member of
a .zip or a .gz (src/file.c:203-230, libretro/include/config.h:20), which
only matters for a path picked in the in-core ROM dialog
(libretro/gui-retro/dlgRom.c:69-76). EmuTOS is not embedded.
The cartridge slot is empty by default (src/configuration.c:592) and is
filled through hatari.cfg or the in-core ROM dialog
(libretro/gui-retro/dlgRom.c:82-89). Cart_ResetImage installs the
built-in GEMDOS trampoline instead of the external image whenever GEMDOS
hard disk emulation, extended VDI or OS tracing is on (src/cart.c:121-133).
Floppy, ACSI, IDE and GEMDOS images are content. When a .gem folder is
loaded, <system>/hatari/BOOT.ST is inserted into drive A so TOS boots
with the GEMDOS drive (libretro/libretro.c:1663-1671). Memory snapshots
for retro_serialize stay in memory (libretro/libretro.c:1768-1793);
hatari.sav, auto.sav, hatari.prn, hatari.wav and hatari.avi are output
names under <system>/hatari. DESKTOP.INF and NEWDESK.INF are created or
rewritten inside the emulated C: directory when extended VDI is on
(src/vdi.c:955-988).
files:
- name: "tos.img"
path: "tos.img"
description: "Atari TOS ROM image"
required: true
max_size: 1048576
validation: [size]
source_ref: "libretro/libretro.c:393-411, libretro/libretro.c:640-649, libretro/libretro.c:1602-1607, src/main.c:905-907, src/tos.c:48-53, src/tos.c:575-651"
note: >
Any TOS 1.00 to 4.04, TOS 0.00, a RAM TOS or EmuTOS. Additional images
are read from <system>/hatari/tos and selected with the hatari_tosimage
option; only names ending in img are offered.
- name: "cartridge ROM"
path: null
config_key: "szCartridgeImageFileName"
description: "Atari ST cartridge image loaded at 0xFA0000"
required: false
min_size: 40
max_size: 131076
validation: [size]
source_ref: "src/cart.c:40-46, src/cart.c:53-88, src/cart.c:121-133, src/configuration.c:336, src/configuration.c:592, libretro/gui-retro/dlgRom.c:82-89"
note: >
Raw images up to 0x20000 bytes or .stc images of exactly 0x20004 bytes
whose 4-byte header is skipped; any other size is refused. Extensions
.img, .rom and .stc are tried when the configured path is missing.
- name: "BOOT.ST"
path: "hatari/BOOT.ST"
description: "Boot floppy inserted with GEMDOS hard disk folders"
required: false
source_ref: "libretro/libretro.c:1663-1671"
note: "Added as the first disk when the content is a .gem file."
- name: "floppy.raw"
path: "floppy.raw"
description: "Floppy drive seek sample, signed 16-bit little-endian stereo at 44100 Hz, no header"
required: false
has_builtin: true
storage: user_provided
unsourceable: "any headerless s16le stereo 44100 Hz sample the user records; no name or version the code expects beyond the filename"
source_ref: "libretro/floppy_sound.c:118-170, libretro/libretro.c:844-852, libretro/libretro.c:1379"
note: >
Read whole at retro_init; an empty or short read falls back to the
synthesised click (libretro/floppy_sound.c:31-95). Played on each drive
LED rising edge when hatari_floppy_sound is on.
- name: "hatari.cfg"
path: "hatari/hatari.cfg"
description: "Hatari configuration file"
required: false
storage: user_provided
unsourceable: "user settings in Hatari's INI format; no canonical contents"
source_ref: "libretro/libretro.c:945-951, src/main.c:805-831, src/main.c:892-894, src/configuration.c:630-633, src/configuration.c:768-777, src/paths.c:283-284"
note: >
Read only when the hatari_autoload_config option is on (off by default):
<system>/hatari/hatari.cfg first, then hatari.cfg in the Hatari home
directory. Every section is applied except the TOS path.
- name: "keymap file"
path: null
config_key: "szMappingFileName"
description: "Keyboard remap table, one PC key code and ST scan code pair per line"
required: false
storage: user_provided
unsourceable: "user-written mapping in the doc/keymap-sample.txt format; no canonical contents"
source_ref: "src/keymap.c:53-59, src/keymap.c:605-658, src/change.c:359, src/configuration.c:188, src/configuration.c:504"
note: "Empty by default; loaded at Keymap_Init and on configuration change when the path is set."
- name: "hatari.nvram"
path: null
description: "TT and Falcon NVRAM contents, 50 bytes"
required: false
has_builtin: true
min_size: 50
validation: [size]
unsourceable: "machine state the emulator writes itself at exit; no canonical contents"
source_ref: "src/falcon/nvram.c:63-85, src/falcon/nvram.c:186-216, src/falcon/nvram.c:223-226, src/main.c:752, src/paths.c:283-284"
note: >
Read from the Hatari home directory at NvRam_Init; a short read keeps
the built-in defaults adjusted to the monitor type. Saved back on exit.
+65
View File
@@ -0,0 +1,65 @@
emulator: IroGB
type: libretro
core_classification: official_port
source: "https://github.com/AlexSutila/IroGB"
upstream: "https://github.com/AlexSutila/IroGB"
profiled_date: "2026-09-03"
source_commit: "7b6bb9b1f9cbf04e49eea0dc89c54635c2b54056"
core_version: "1.0.0"
display_name: "Nintendo - Game Boy / Color (IroGB)"
cores:
- irogb
systems:
- nintendo-gb
- nintendo-gbc
notes: |
IroGB is a Game Boy and Game Boy Color emulator by Alex Sutila. The
libretro frontend lives in src/frontend/libretro of the same repository
as the SDL3, raylib and Python frontends. The buildbot builds the
repository default branch, release, with cmake -DBUILD_LIBRETRO=ON
-DNO_CORE_FILESYSTEM=ON (.gitlab-ci.yml:10-14).
Boot ROMs are read from the root of the system directory
(src/frontend/libretro/libretro_host.cpp:61-84). The irogb_bios core
option picks the file: dmg opens dmg_boot.bin, cgb opens cgb_boot.bin,
auto (the default) tries cgb_boot.bin then dmg_boot.bin, none opens
nothing (src/frontend/libretro/libretro_host.cpp:86-113). Under auto a
DMG cartridge boots through the CGB boot ROM whenever cgb_boot.bin is
present and gets the CGB colouring of monochrome games; the
irogb_monochrome_dmg option turns that off.
BootROM accepts a file of exactly 256 or 2304 bytes and rejects any
other size (src/memory/boot.cpp:10-24). The size also picks the machine:
a 2304-byte image starts in CGB mode (src/gbc.cpp:330-340). 256 bytes
covers DMG, DMG0, MGB and SGB dumps, 2304 bytes CGB, CGB0, AGB0 and AGB
dumps (includes/memory/boot.hpp:9-30); only the two names above are
ever opened. No hash is checked.
Without a boot ROM, or when the file fails to open or has another size,
the core continues with skip_bios(), which loads post-boot CPU and MMIO
values, unmaps the boot ROM and sets CGB mode from the cartridge header
(src/gbc.cpp:342-349, src/gbc.cpp:387-405, src/gbc.cpp:489-490).
The .info declares cgb_bios.bin; the code opens cgb_boot.bin.
files:
- name: "dmg_boot.bin"
system: nintendo-gb
description: "Game Boy (DMG) boot ROM"
required: false
hle_fallback: true
size: 256
validation: [size]
source_ref: "src/frontend/libretro/libretro_host.cpp:91, src/frontend/libretro/libretro_host.cpp:106, src/frontend/libretro/libretro_host.cpp:61-84, src/memory/boot.cpp:10-24"
note: "Opened with irogb_bios set to dmg, or to auto when cgb_boot.bin is absent."
- name: "cgb_boot.bin"
system: nintendo-gbc
description: "Game Boy Color (CGB) boot ROM"
required: false
hle_fallback: true
size: 2304
validation: [size]
source_ref: "src/frontend/libretro/libretro_host.cpp:97, src/frontend/libretro/libretro_host.cpp:104, src/frontend/libretro/libretro_host.cpp:61-84, src/memory/boot.cpp:10-24, src/gbc.cpp:330-340"
note: "Opened with irogb_bios set to cgb or auto. Under auto it also boots DMG cartridges in CGB mode."
+48
View File
@@ -0,0 +1,48 @@
emulator: Native32Emu
type: standalone + libretro
core_classification: pure_libretro
source: "https://github.com/AloysHF/Native32Emu"
upstream: "https://github.com/AloysHF/Native32Emu"
profiled_date: "2026-09-03"
source_commit: "f445ea34ba42ecb5b3d7fe7b5f28d544a8b0a2ea"
core_version: "1.3.0"
display_name: "Sunplus - Native32 (Native32Emu)"
cores:
- native32emu
systems:
- sunplus-native32
notes: |
Emulator for the Sunplus Native32 game format written in Rust by
AloysHF. The libretro core and the native32emu standalone binary share
the native32emu-core crate. Content (.smf, .sgm, .ssl or a .zip
package) is read from its full path (need_fullpath = true,
crates/native32emu-libretro/src/libretro/api.rs:107;
Emulator::from_path, crates/native32emu-core/src/emulator.rs:79-130).
The header is decrypted with DES keys compiled into the core
(crates/native32emu-core/src/header_decryptor.rs:136,
crates/native32emu-core/src/des_constants.rs).
A .zip package is extracted to a temporary directory
(crates/native32emu-core/src/archive_loader.rs:17-61) and booted from
the menu found at its root, FHUI.smf first, then NA32UI.smf
(crates/native32emu-core/src/archive_loader.rs:11,
crates/native32emu-core/src/archive_loader.rs:88-122). Every later file
is resolved relative to the running content and its parent directories,
case-insensitively with trailing spaces trimmed
(crates/native32emu-core/src/content_loader.rs:73-130): child .smf and
.ssl content (crates/native32emu-core/src/emulator.rs:597-607), .dat
thumbnails for the menu (crates/native32emu-core/src/emulator.rs:545-572),
.mpg cutscenes (crates/native32emu-core/src/emulator.rs:444-460) and
the menu's game listing (crates/native32emu-core/src/file_browser.rs:75-120).
All of them ship inside the game package. Saves are written to
<content>.ssl_sav beside the content
(crates/native32emu-core/src/save_manager.rs:10-46).
RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY and GET_SAVE_DIRECTORY are
defined (crates/native32emu-libretro/src/libretro/constants.rs:36,
crates/native32emu-libretro/src/libretro/constants.rs:47) but nothing
calls them. No include_bytes! data is compiled in.
exclusion_note: "No file is read outside the game package: content and every sibling it names (menu, child content, .dat thumbnails, .mpg cutscenes) resolve from the content's own directory tree, saves are written beside the content, the system directory is never queried, no data is embedded with include_bytes!, and the .info declares firmware_count = 0."
files: []
+44
View File
@@ -0,0 +1,44 @@
emulator: NicaiEmu
type: standalone + libretro
core_classification: pure_libretro
source: "https://github.com/AloysHF/NicaiEmu"
upstream: "https://github.com/AloysHF/NicaiEmu"
profiled_date: "2026-09-03"
source_commit: "d0b1a959e3756209e6f56b167bb6e5509805b275"
core_version: "0.1.0"
display_name: "MStar - Nicai (NicaiEmu)"
cores:
- nicaiemu
systems:
- mstar-nicai
notes: |
Emulator for Nicai/MStar CBE (Cool Bar Engine) phone games written in
Rust by AloysHF. The libretro core and the nicaiemu standalone binary
share the nicaiemu-core crate. A .cbe archive is read whole from its
full path (need_fullpath = true,
crates/nicaiemu-libretro/src/libretro/api.rs:108; load_machine,
crates/nicaiemu-libretro/src/libretro/api.rs:266-270; CbeArchive::load,
crates/nicaiemu-core/src/cbe/archive.rs:68-94). Code, scenes, maps,
actors, scripts, images and audio are sections of that archive, and
installed resource packages are parsed from the same bytes
(crates/nicaiemu-core/src/machine/packages.rs).
Phone services are implemented in Rust
(crates/nicaiemu-core/src/machine/services/). The guest file manager is
an in-memory sandbox that never touches the host disk
(crates/nicaiemu-core/src/machine/virtual_fs.rs:14-30). Text is decoded
as GBK and rasterised from the unifont crate compiled into the core
(crates/nicaiemu-core/src/machine/drawing.rs:41,
crates/nicaiemu-core/src/machine/drawing.rs:597). MIDI resources are
synthesised as decaying sine tones without a sound bank
(crates/nicaiemu-core/src/audio_engine.rs:238-243); WAV and MP3 are
decoded with symphonia.
The libretro crate asks the frontend for no directory. The standalone
binary reads and writes only the files named by --load-state and
--save-state (crates/nicaiemu/src/main.rs:114-118). No include_bytes!
data is compiled in.
exclusion_note: "No file is read outside the content: the .cbe archive is the only input, the guest filesystem is in-memory, glyphs come from the unifont crate and MIDI is synthesised without a bank, no directory is requested from the frontend, no data is embedded with include_bytes!, and the .info declares firmware_count = 0."
files: []
+45
View File
@@ -0,0 +1,45 @@
emulator: RustyNES
type: libretro
core_classification: official_port
source: "https://github.com/doublegate/RustyNES"
upstream: "https://github.com/doublegate/RustyNES"
profiled_date: "2026-09-03"
source_commit: "4e77905e045c0e971b53c5abee8d0a07a4b1bfdb"
core_version: "2.6.12"
display_name: "Nintendo - NES / Famicom (RustyNES)"
cores:
- rustynes
systems:
- nintendo-nes
- nintendo-fds
notes: |
RustyNES is a NES and Famicom emulator written in Rust by DoubleGate.
The libretro core is the crates/rustynes-libretro crate of the same
repository, built from the main branch
(crates/rustynes-libretro/Makefile, .gitlab-ci.yml). The crate pulls
rustynes-core with default features off, so the HD pack loader is not
compiled into the core and nothing else is read from disk.
Cartridge content needs no external file. A .fds disk image goes to
Nes::from_disk, which needs the Famicom Disk System BIOS: the core joins
disksys.rom to the frontend system directory and reads the whole file
(crates/rustynes-libretro/src/lib.rs:921-938). A missing file, or a
frontend without a system directory, makes retro_load_game fail with an
error. Fds::new rejects a BIOS that is not exactly 8192 bytes
(crates/rustynes-mappers/src/fds.rs:1351-1357); no hash is checked. The
FDS device maps the BIOS and boots from its reset vector.
The version comes from the workspace Cargo.toml. The .info in
libretro-core-info says v2.3.5 and the copy in the repository v2.6.12;
the md5 in the .info notes is not enforced by the code.
files:
- name: "disksys.rom"
system: nintendo-fds
description: "Famicom Disk System BIOS"
required: true
size: 8192
validation: [size]
source_ref: "crates/rustynes-libretro/src/lib.rs:921-945, crates/rustynes-core/src/nes.rs:356-358, crates/rustynes-core/src/bus.rs:1015-1021, crates/rustynes-mappers/src/fds.rs:121, crates/rustynes-mappers/src/fds.rs:1351-1357"
note: "Read only when the content extension is .fds. Any other size fails the load."
+61
View File
@@ -0,0 +1,61 @@
emulator: SPMP8000Emu
type: standalone + libretro
core_classification: pure_libretro
source: "https://github.com/AloysHF/SPMP8000Emu"
upstream: "https://github.com/AloysHF/SPMP8000Emu"
profiled_date: "2026-09-03"
source_commit: "00f5985b639a036cd255770fb56abc98fcde7513"
core_version: "1.0.0"
display_name: "Sunplus - SPMP8000 (SPMP8000Emu)"
cores:
- spmp8000emu
systems:
- sunplus-spmp8000
notes: |
Emulator for Sunplus SPMP8000 NGame1.0 games written in Rust by
AloysHF. The libretro core and the spmp8000-emu standalone binary share
the spmp8000emu-core crate. A .bin game is read from its full path
(need_fullpath = true, crates/spmp8000emu-libretro/src/libretro/api.rs:96;
from_path_with_config, crates/spmp8000emu-core/src/emulator.rs:63-68),
its header parsed, the payload DES-decrypted and LZ77/RLE-decompressed
with keys and tables compiled into the core, then loaded at the code
address. The system API (emuIf, NativeGE, eCos) is implemented in Rust
(crates/spmp8000emu-core/src/api/).
Guest file calls (emuIfFsFileOpen, NativeGE_fsOpen, NativeGE_readRecord,
NativeGE_writeRecord) resolve the guest path under the directory of the
loaded .bin (crates/spmp8000emu-core/src/emulator.rs:129-131,
crates/spmp8000emu-core/src/api/mod.rs:125-127,
crates/spmp8000emu-core/src/api/emu_fs.rs:9-13); what a game reads or
writes there is its own data and saves.
RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY and GET_SAVE_DIRECTORY are
defined (crates/spmp8000emu-libretro/src/libretro/constants.rs:36,
crates/spmp8000emu-libretro/src/libretro/constants.rs:47) but nothing
calls them.
MIDI resources are rendered by a sample-based synthesiser whose tone
bank is the SPMP8000 firmware's own PCM tone library, compiled into the
core with include_bytes! (crates/spmp8000emu-core/src/tone_library.rs:8,
crates/spmp8000emu-core/src/audio_resource.rs:498-499). It is the only
embedded data and the only firmware-derived component; nothing is read
from disk for it.
files:
- name: tonelib.bin
system: sunplus-spmp8000
required: false
embedded: true
size: 130500
md5: f276986a8ee7d29d9ba495c1cfe0b891
sha1: 6b52965081642630ef7aa30a90c9643f97c72410
sha256: 5924f1cea0a65086a48b10a6553e6493a43fcf63e265d974e447be1f4262c99a
crc32: 058a577b
description: "SPMP8000 firmware PCM tone bank"
note: >-
Compiled into the core from crates/spmp8000emu-core/assets/tonelib.bin
and never opened at run time. 256-entry patch table (128 melodic,
128 percussion) followed by per-zone PCM samples, read by the
NativeGE MIDI path. Hashes are of the file in the emulator
repository; the repository states the SHA-256.
source_ref: "crates/spmp8000emu-core/src/tone_library.rs:8, crates/spmp8000emu-core/src/tone_library.rs:24-26, crates/spmp8000emu-core/src/audio_resource.rs:498-499, crates/spmp8000emu-core/assets/README.md:3-9"
+29
View File
@@ -0,0 +1,29 @@
emulator: Tia
type: libretro
core_classification: pure_libretro
source: "https://github.com/warmenhoven/tia"
upstream: "https://github.com/warmenhoven/tia"
profiled_date: "2026-09-03"
source_commit: "6ae5bf998fe7a7842294089db17fc86fd73db1f0"
core_version: "52+6ae5bf9"
display_name: "Atari - 2600 (Tia)"
cores:
- tia
systems:
- atari-2600
files: []
exclusion_note: >
The core opens no file. src/ has no fopen, filestream or opendir call and
libretro.c never asks for RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY; its
environment calls cover options, logging, controller info, input
descriptors, messages, pixel format and AV info. The Supercharger BIOS is
a 294-byte routine compiled in (src/cart.c:195-235) and written into the
ROM bank of every AR tape image (src/cart.c:300-319), the default
tape-load header is a compiled table (src/cart.c:237-272), and the NTSC,
PAL and SECAM palettes in their standard and z26 variants are const tables
(src/palette.c). Content arrives in memory (src/libretro.c:596).
notes: |
Tia is an Atari 2600 core written for libretro by Eric Warmenhoven, with
no standalone build; the repository is its own upstream. The version
string is the commit count and short hash the Makefile bakes in
(Makefile:36-37, src/libretro.c:595). The .info shows 26.