mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-10 13:33:24 -05:00
feat: profile nine new buildbot cores
This commit is contained in:
1 parent
cad82f9103
commit
8c686dee48
10 files changed
+620
No files matched your search
Binary file not shown.
@@ -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.
|
||||||
@@ -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: []
|
||||||
@@ -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.
|
||||||
@@ -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."
|
||||||
@@ -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: []
|
||||||
@@ -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: []
|
||||||
@@ -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."
|
||||||
@@ -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"
|
||||||
@@ -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.
|
||||||
Reference in new issue
Block a user