Skip to content

RACE (Neo Geo Pocket)

RACE (Neo Geo Pocket) emulates SNK Neo Geo Pocket and SNK Neo Geo Pocket Color.

About this profile
Detail Value
Type libretro
Classification Community fork
Source https://github.com/libretro/RACE
Upstream https://github.com/8bitpsp/race
Version v2.16, stated in libretro/libretro.c
Revision libretro/RACE@c7810dd7f172, 8bitpsp/race@065db2eb614d
Profiled 2026-09-17
Profile YAML, JSON
Cores race
Systems SNK Neo Geo Pocket, SNK Neo Geo Pocket Color
Technical 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, but 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.

No BIOS or firmware files required.

Source analysis
  • npbios:

    • filename: NPBIOS.BIN
    • size: 65536
    • 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, and 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: no

.