Files
libretro/emulators/spmp8000emu.yml
T
Abdessamad Derraz e7aa9e870b fix: state libretro core versions from their code
Each libretro profile records version_basis and core_version is read
there at its pin. snes9x states 1.63 in snes9x.h, nestopia 2.0.0, mgba
0.11.0, vice 3.10, atari800's libretro tree 7.0.0. Cores whose build
takes its version from git carry the nearest tag in describe form
(flycast v2.7-90-ge88b0ce, ppsspp, duckstation, gearcoleco), placeholders
copied from .info files (Git, SVN) are replaced by the code's statement,
and a code that states none is null with kind none.
2026-10-27 19:21:27 +01:00

66 lines
2.9 KiB
YAML

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: "65a93528ee33767bb9cf8faef516c8d1ad43fd13"
core_version: "1.0.0"
version_basis:
kind: file
path: "Cargo.toml"
pattern: 'version\s+=\s+"([^"]+)'
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, and 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, which 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"