Files
libretro/emulators/race.yml
T

62 lines
2.6 KiB
YAML

emulator: RACE (Neo Geo Pocket)
type: libretro
core_classification: community_fork
source: "https://github.com/libretro/RACE"
upstream: "https://github.com/8bitpsp/race"
profiled_date: "2026-09-17"
source_commit: "c7810dd7f172827bfa2004813bc000b13786636b"
upstream_commit: "065db2eb614d4414ed49a1a9e241022450bb844d"
core_version: "v2.16"
display_name: "SNK - Neo Geo Pocket / Color (RACE)"
cores: [race]
systems: [snk-ngp, snk-ngpc]
notes: |
RACE is a Neo Geo Pocket and Neo Geo Pocket Color emulator originally by
Judge_ (MHE), ported to GP2X by Flavor, to PSP by Akop Karapetyan, modified
by theelf, then adapted for libretro.
No external BIOS files are required. The upstream versions (GP2X, PSP) load
NPBIOS.BIN optionally; the libretro port's loadBIOS() returns 0
unconditionally, and the disabled file-reading body it once carried under
#if 0 was removed in June 2026, so the port no longer names the file. The
core never queries the system directory: the only files it opens are the
ROM and the .ngf flash save in the save directory.
The core boots through a software HLE path: a compiled-in koyote_bin RAM
snapshot (12 KB of main RAM captured after a real BIOS has booted) is copied
into mainram, a fake SWI jump table is built at cpurom[0xE000], doBios() in
tlcs900h.c answers 14 BIOS call numbers in software, and the system font
is an embedded table in ngpBios.c. The Z80 sound CPU is emulated via cz80
or DrZ80.
files: []
analysis:
npbios:
filename: NPBIOS.BIN
size: 65536 # 64 KB (0x10000)
loaded_by: "race-memory.c:loadBIOS()"
status: disabled
source_ref: "race-memory.c:330-340, race-memory.c:354-357"
upstream_status: optional
upstream_ref: "memory.cpp:346-366 (8bitpsp/race)"
note: |
loadBIOS() returns 0 unconditionally in the libretro port, so mem_init()
always takes the HLE branch. The #if 0 body that opened NPBIOS.BIN with
filestream_open() was dropped by commit 0e4783a on 2026-06-15; the
libretro tree no longer contains the name. In upstream, loadBIOS() opens
NPBIOS.BIN from the working directory with fopen(), requires exactly
0x10000 bytes, and falls back to HLE when the file is absent or short.
hle:
ram_snapshot: "koyote_bin.h:1-6"
ram_snapshot_size: 12288
ram_snapshot_copy: "race-memory.c:406-407"
jump_table: "race-memory.c:360-369"
interrupt_vectors: "race-memory.c:318-328"
bios_calls: "tlcs900h.c:5837-5921"
bios_call_count: 14
system_font: "ngpBios.c:15"
filesystem_access: "ROM at main.c:266-268, .ngf flash save at flash.c:231-233 and flash.c:344-346"
system_directory_used: false