Skip to content

puNES - RetroBIOS

Type standalone
Classification Other
Source https://github.com/punesemu/puNES
Version 0.112
Profiled 2026-08-08
Cores punes
Systems nintendo-nes, nintendo-fds
Technical notes

Qt emulator of the NES, the Famicom and the Family Computer Disk System, also playing NSF and NSFE music files. A cartridge boots with nothing supplied: the 2A03, the PPU and every mapper are emulated in software.

Four names are fixed by the code. disksys.rom and gamegenie.rom share one four-step lookup (src/core/fds.c:265-309, src/core/cheat.c:74-108): the path recorded in the configuration, the working directory, the directory holding the loaded image, then the bios folder of the data directory. nes20db.xml and dip.cfg are read from the XDG data directories under a puNES subdirectory, then the base of the data directory, then the application directory (src/gui/nes20db.cpp:50-79, src/gui/dipswitch.cpp:61-85); the installer writes both into the shared data directory (CMakeLists.txt:227-228).

The data directory is the application directory under --portable, %APPDATA%/puNES on Windows and ~/.local/share/puNES elsewhere (src/gui/qt.cpp:561-575), so the bios folder is ~/.local/share/puNES/bios.

No length and no hash is ever compared. fds_load_bios computes a CRC32 of the BIOS it loaded (src/core/fds.c:329) and the only reader of that value is the log line at src/core/fds.c:502-503.

The iNES 1.0 game database is compiled in as src/core/database.h and carries the Vs. System PPU type and the region, so Vs. System titles need no external file. The uPD7756 ADPCM samples of mappers 018, 086 and 072 come from the Misc ROM area of the NES 2.0 dump itself (src/core/mappers/mapper_018.c:51, mapper_086.c:56, mapper_072.c:45). loadWaveFiles, which would read /samples//NN.wav (src/core/mappers/waveFile.cpp:76-84), is declared and defined but called from nowhere in the tree, so no wave file is ever opened.

Palettes, shaders, cheat imports and soft patches are opened from paths the user picks in a file dialog and no name is fixed by the code, so they carry no file entry here. A palette shorter than 192 bytes is refused and a built-in table is used instead (src/core/palette.c:39-64, src/video/gfx.c:323-334).

4 files | 1 required, 3 optional | 4 in repo, 0 missing

disksys.rom required in repo
Family Computer Disk System BIOS

gamegenie.rom optional in repo
Game Genie ROM, booted in place of the cartridge to reach the code entry screen

nes20db.xml optional in repo
NES 2.0 header database, matched by ROM hash

dip.cfg optional in repo
DIP switch database for multicart and Vs. System boards, keyed by CRC32

Generated on 2026-08-23T16:12:06Z