emulator: nekop2 type: libretro core_classification: community_fork source: "https://github.com/libretro/libretro-meowPC98" upstream: "https://np2.yui.ne.jp (dead; source preserved in libretro repo)" profiled_date: "2026-03-24" source_commit: "5fdbb2187f6b14ca7bf668dd52b36c820b989995" core_version: "0.86" display_name: "NEC - PC-98 (Neko Project II)" cores: [nekop2] systems: [pc-98] # Neko Project II (NP2) by Yui, ported to libretro by meepingsnesroms. # PC-9801/9821 emulator (80286/IA-32 CPU). All files load from /np2/. # The libretro shim sets np2cfg.biospath to "/np2/" and # file_setcd() to the same path (libretro/libretro.c:856-864,196). # # BIOS_SIMULATE is hardcoded (bios/bios.c:26), so the core always has # a built-in BIOS simulator and ITF ROM is never loaded from disk. # Font data falls back to built-in 8x8 tables. Sound ROM falls back # to a 9-byte stub. IDE/SCSI/SASI all have built-in stubs. # # .info declares firmware_count=0; the core loads several BIOS, font and # sound files, each with a built-in fallback. files: # -- Main BIOS ROM -- # Loaded in bios/bios.c:232-237 via getbiospath(). 96 KB (0x18000) # mapped at 0xe8000. Without this, the built-in BIOS simulator # (nosyscode + BIOS_SIMULATE) is used (bios/bios.c:253). - name: "bios.rom" path: "np2/bios.rom" min_size: 98304 validation: [size] required: false hle_fallback: true note: > PC-9801 system BIOS ROM. The first 0x18000 bytes are read to 0xe8000; a file shorter than that is ignored and the built-in BIOS simulator is used, as when the file is absent. source_ref: "bios/bios.c:232-237, common/strres.c:53" # -- PC-9821 IDE BIOS, the ROM at D8000h -- # Opened in bios/bios.c:263-264 via getbiospath(). The first 0x2000 # bytes are read to 0xd8000 (bios/bios.c:266), then the word at 0xd8009 # is cleared (bios/bios.c:269); the comment above that line reads # "crush the IDE BIOS". Only compiled when SUPPORT_PC9821 is defined # (libretro/compiler.h:169). GETBIOS writes BIOS9821.ROM on a PC-9821 # from segment D800h, length 0x2000 (np2tool/GETBIOS.ASM:96-106). - name: "bios9821.rom" path: "np2/bios9821.rom" description: "PC-9821 IDE BIOS, the 8 KB ROM at D8000h-D9FFFh" min_size: 8192 validation: [size] required: false note: > Dump of D8000h-D9FFFh from a PC-9821, 8192 bytes as GETBIOS writes it. The first 0x2000 bytes are read to 0xd8000 and the word at 0xd8009 is then zeroed, which leaves the ROM mapped with its IDE BIOS disabled. A file shorter than 0x2000 bytes fails the read test and the word is left alone; nothing past 0x2000 is read. No other file name is tried. source_ref: "bios/bios.c:262-272, np2tool/GETBIOS.ASM:96-106, libretro/compiler.h:169" # -- Font file -- # Set in libretro.c:862 as "/np2/font.bmp". # font_load() in font/font.c:113 determines type by extension: # .bmp = PC98 format, FONT.ROM = V98 format. # Without any font file, built-in fontdata_8 provides 8x8 ASCII only. - name: "font.bmp" path: "np2/font.bmp" required: false hle_fallback: true aliases: ["FONT.ROM"] note: > PC-98 font bitmap (288 KB). Required for correct Japanese kanji display. Without this, only basic ASCII renders using built-in 8x8 data. FONT.ROM (V98 format) is also accepted. source_ref: "libretro/libretro.c:872, font/font.c:113, font/fontdata.c:12" # -- Sound BIOS ROM -- # Loaded by soundrom_load() via loadsoundrom() in sound/soundrom.c:21-55. # Filename built as "sound" + optional board name + ".rom". # Board-specific variants: sound26.rom (PC-9801-26K), sound86.rom (86), # sound118.rom (118), soundSPB.rom (Speak Board), sound14.rom (14). # The code tries the board-specific name first, falls back to sound.rom. # 16 KB (0x4000). Fallback: 9-byte defsoundrom stub. - name: "sound.rom" path: "np2/sound.rom" required: false hle_fallback: true note: > FM sound board BIOS ROM (16 KB). The core tries board-specific variants first (sound26.rom, sound86.rom, sound118.rom, soundSPB.rom, sound14.rom) then falls back to sound.rom. source_ref: "sound/soundrom.c:15-16,21-55,65-78" # -- YM2608 OPNA rhythm samples -- # Loaded by rhythm_load() in sound/rhythmc.c:60-71 via getbiospath(). # The core has no fmgen engine; only lowercase filenames are used. - name: "2608_bd.wav" path: "np2/2608_bd.wav" required: false note: "YM2608 OPNA rhythm sample: bass drum" source_ref: "sound/rhythmc.c:11,60-71" - name: "2608_sd.wav" path: "np2/2608_sd.wav" required: false note: "YM2608 OPNA rhythm sample: snare drum" source_ref: "sound/rhythmc.c:12" - name: "2608_top.wav" path: "np2/2608_top.wav" required: false note: "YM2608 OPNA rhythm sample: top cymbal" source_ref: "sound/rhythmc.c:13" - name: "2608_hh.wav" path: "np2/2608_hh.wav" required: false note: "YM2608 OPNA rhythm sample: hi-hat" source_ref: "sound/rhythmc.c:14" - name: "2608_tom.wav" path: "np2/2608_tom.wav" required: false note: "YM2608 OPNA rhythm sample: tom" source_ref: "sound/rhythmc.c:15" - name: "2608_rim.wav" path: "np2/2608_rim.wav" required: false note: "YM2608 OPNA rhythm sample: rim shot" source_ref: "sound/rhythmc.c:16" # -- SCSI controller BIOS -- # Loaded in cbus/scsiio.c:219 via file_open_rb_c(). 16 KB (0x4000). # Falls back to built-in scsibios[] stub. - name: "scsi.rom" path: "np2/scsi.rom" required: false hle_fallback: true note: > SCSI controller BIOS ROM (16 KB). The core includes a built-in SCSI BIOS stub as fallback. source_ref: "cbus/scsiio.c:208-233" # -- SASI controller BIOS -- # Loaded in cbus/sasiio.c:453 via file_open_rb_c(). 4 KB (0x1000). # Falls back to built-in sasibios[] stub. - name: "sasi.rom" path: "np2/sasi.rom" required: false hle_fallback: true note: > SASI controller BIOS ROM (4 KB). The core includes a built-in SASI BIOS stub as fallback. source_ref: "cbus/sasiio.c:442-465"