Files
libretro/emulators/race.yml
Abdessamad Derraz 58f3006d20 docs: add core_version, display_name to all 260 emulator profiles
Every profile now has:
- profiled_date: date of source code analysis
- core_version: version from libretro-core-info .info files
- display_name: human-readable name from .info files

260/260 profiles complete. 294/294 libretro cores covered.
Standalone emulators (cemu, rpcs3, xemu, vita3k) versioned manually.
2026-03-18 05:20:05 +01:00

56 lines
2.1 KiB
YAML

emulator: RACE (Neo Geo Pocket)
type: libretro
source: "https://github.com/libretro/RACE"
profiled_date: "2026-03-18"
core_version: "v2.16"
display_name: "SNK - Neo Geo Pocket / Color (RACE)"
systems: [snk-ngp, snk-ngpc]
notes: |
RACE is a Neo Geo Pocket and Neo Geo Pocket Color emulator, originally
developed for PSP (forked from Akop Karapetyan's port), adapted for
libretro.
No external BIOS files are required. The core contains dead code in
race-memory.c that would load "NPBIOS.BIN" (64KB, loaded into cpurom
via filestream_open), but it is compiled out with #if 0 and loadBIOS()
unconditionally returns 0. The comment explains: "Using a real bios
file causes nothing but issues" and references Card Fighters' Clash
Test Mode as a known failure.
Instead, the core uses a software HLE approach:
- A built-in koyote_bin memory dump (RAM state from a real console
post-boot) is copied into mainram at startup
- A fake SWI jump table is constructed at cpurom[0xE000] using the
TLCS-900H 0x1A (reg) dummy opcode to trap BIOS calls
- doBios() in tlcs900h.c handles 33 BIOS functions in software:
shutdown, clock speed, RTC, screen mode, font rendering, flash
read/write, communication, and sound control
- Interrupt vectors are set up at cpurom[0xFF00] and interrupt
handler code at cpurom[0xF800]
- CPU RAM defaults (interrupt priorities, timers) are loaded from
the ngpcpuram[256] table
The Z80 sound CPU is emulated in software (cz80 or DrZ80 backend).
Flash memory for game saves is handled internally by flash.c.
The only core option affecting system behavior is ngp_language
(english/japanese), which sets a RAM flag at 0x6F87.
ROM extensions: .ngp, .ngc, .ngpc, .npc
files: []
analysis:
npbios:
filename: NPBIOS.BIN
size: 65536 # 64 KB (0x10000)
loaded_by: "race-memory.c:loadBIOS()"
status: disabled
source_ref: "race-memory.c:337-361"
notes: |
loadBIOS() is wrapped in #if 0 and always returns 0.
Even if re-enabled, the realBIOSloaded=1 path has known
compatibility issues (e.g. Puzzle Bobble fails to boot).
The HLE path is the only functional code path.