project64 - RetroBIOS¶
Technical notes
Nintendo 64 and 64DD emulator for Windows. Project64.exe plus the plugin DLLs the same solution builds, driven by the plugin spec in Source/Project64-plugin-spec. ES-DE passes the ROM as the only argument. AppVeyor builds Win32 and x64 only; Source/Android holds no build file.
Cartridge boot reads no file. PostPif is hardcoded true, so Reset seeds the general purpose registers from the CIC identified in the ROM image, points the program counter at 0xA4000040 and the boot block is copied into SP DMEM. The branch that would start at the PIF ROM address is unreachable and the PIF ROM read in the memory handler is commented out, so neither a PIF ROM nor a CIC ROM is opened (Source/Project64-core/N64System/N64System.cpp:911-916, Source/Project64-core/N64System/Mips/Register.cpp:342,371-373,395-535, Source/Project64-core/N64System/MemoryHandler/PifRamHandler.cpp:26).
The CIC is identified from the boot block. ByteSwapRom normalises the image so each 32-bit read yields the ROM's big-endian word, then GetCicChipID sums those words from 0x40 to 0x1000 and matches the total against a table of constants. Three of them are 64DD IPL images: 0xD2E53EF008 for the Japanese retail chip 8303, 0xD2E53E5DDA for the American retail chip 8501, 0xD2E53EF39F for the development chip 8401. IsLoadedRomDDIPL is that test (Source/Project64-core/N64System/N64Rom.cpp:240-273,281-305,500-511).
Aleck64 images are recognised by the same table, through a second sum taken at 0xC00, and get their own boot register seed. No arcade hardware is emulated and no Aleck64 file is opened (Source/Project64-core/N64System/N64Rom.cpp:283,310-316, Source/Project64-core/N64System/Mips/Register.cpp:477-479).
Transfer Pak reads a Game Boy cartridge image and its save from paths the user sets per game. Both are the user's own cartridge dump, and no Game Boy boot ROM is involved (Source/Project64-core/N64System/Mips/GBCart.cpp:695-698,744,788, Source/Project64-core/Settings.cpp:242-243).
The support files under Config ship in the installer and in the nightly package. CIniFile returns silently when the path does not exist, so each of them degrades to the defaults registered in AddHandler rather than failing (Source/Common/IniFile.cpp:493-522, Source/Project64-core/Settings.cpp:134-145).
GLideN64 ships as a bundled plugin, pinned as a submodule at gonetz/GLideN64 c8ef81c7d9aede9f67f6ed3d3426c90541f9f13e, and brings its own GLideN64.ini, GLideN64.custom.ini and translations. Project64's own code names none of them; only Installer.iss and package_zip.cmd copy them (Source/Installer/Installer.iss:38, Source/Script/package_zip.cmd:42-47).
Generated at runtime, never supplied: Project64.cfg, Project64.rdn, Project64.cache3, Project64.zcache, Config/Cheats-User, Config/Enhancements-User, Save, Screenshots, Logs and the texture caches.
12 files | 3 required, 9 optional | 3 in repo, 9 missing
64DD_IPL_v12_JPN.bin required in repo japan
64DD IPL ROM (Japanese retail)
- System: nintendo-64dd
- Aliases:
64DD_IPL.bin,64DD_IPL_JP.n64,64dd_ipl_J.bin - Validation: signature
- Source:
Source/Project64-core/Settings.cpp:316,Source/Project64-core/N64System/N64System.cpp:577,Source/Project64-core/N64System/N64System.cpp:599,Source/Project64-core/N64System/N64System.cpp:649-652,Source/Project64-core/N64System/N64System.cpp:673-677,Source/Project64-core/N64System/N64System.cpp:690-704,Source/Project64-core/N64System/N64Rom.cpp:303,Source/Project64-core/N64System/N64Rom.cpp:479-498,Source/Project64-core/N64System/N64Rom.cpp:500-511,Source/Project64/UserInterface/Settings/SettingsPage-DiskDrive.cpp:13,Source/Project64/UserInterface/Settings/SettingsPage-DiskDrive.cpp:18,Source/Project64/UserInterface/Settings/SettingsPage-DiskDrive.cpp:47,Source/Project64/UserInterface/Settings/SettingsPage-DiskDrive.cpp:140 - Platforms: bizhawk
- Loaded when the disk image reports Country_Japan. The path is the free text Disk IPL ROM Path setting, typed or pasted into a plain edit box, so the code fixes no filename and no directory. SelectAndLoadFileImageIPL tests that the path exists, warns and returns false if not, and the disk never starts. The file is accepted on two content checks and nothing else: the first word must be one of the four image magics, 0x40072780 being the 64DD one, and the boot block sum must be 0xD2E53EF008. Size is not checked and no file hash is computed.
64DD_IPL_USA.bin required in repo north-america
64DD IPL ROM (American retail)
- System: nintendo-64dd
- Aliases:
64DD_IPL_US.n64,64dd_ipl_U.bin - Validation: signature
- Source:
Source/Project64-core/Settings.cpp:317,Source/Project64-core/N64System/N64System.cpp:653-656,Source/Project64-core/N64System/N64System.cpp:673-677,Source/Project64-core/N64System/N64Rom.cpp:305,Source/Project64-core/N64System/N64Rom.cpp:369-372,Source/Project64-core/N64System/N64Rom.cpp:500-511,Source/Project64/UserInterface/Settings/SettingsPage-DiskDrive.cpp:14,Source/Project64/UserInterface/Settings/SettingsPage-DiskDrive.cpp:19,Source/Project64/UserInterface/Settings/SettingsPage-DiskDrive.cpp:56,Source/Project64/UserInterface/Settings/SettingsPage-DiskDrive.cpp:142 - Platforms: bizhawk
- Loaded when the disk image reports Country_NorthAmerica, from the Disk IPL USA ROM Path setting. Same acceptance path as the Japanese image, matched on boot block sum 0xD2E53E5DDA. The chip differs from the Japanese one, and CalculateRomCrc carries a separate seed and a 0xA0000 length for it.
64DD_IPL_DEV.bin required in repo
64DD IPL ROM (development)
- System: nintendo-64dd
- Aliases:
64DD_IPL_DEV.n64,64dd_ipl_DEV.bin - Validation: signature
- Source:
Source/Project64-core/Settings.cpp:318,Source/Project64-core/N64System/N64System.cpp:657-670,Source/Project64-core/N64System/N64System.cpp:673-677,Source/Project64-core/N64System/N64Rom.cpp:304,Source/Project64-core/N64System/N64Rom.cpp:377-380,Source/Project64-core/N64System/N64Rom.cpp:500-511,Source/Project64/UserInterface/Settings/SettingsPage-DiskDrive.cpp:15,Source/Project64/UserInterface/Settings/SettingsPage-DiskDrive.cpp:20,Source/Project64/UserInterface/Settings/SettingsPage-DiskDrive.cpp:65,Source/Project64/UserInterface/Settings/SettingsPage-DiskDrive.cpp:144 - Platforms: bizhawk
- Loaded from the Development 64DD IPL ROM Path setting for disks whose country byte is unknown, which is what development and prototype disks carry. Matched on boot block sum 0xD2E53EF39F. When a cartridge and a disk are launched together and this path is empty, the loader falls back to the Japanese image and then to the American one, so the development image is only unavoidable for a development disk on its own.
Project64.rdb optional missing bundled
ROM settings database
- Path:
Config/Project64.rdb - System: nintendo-64
- Source:
Source/Project64-core/Settings.cpp:87-88,Source/Project64-core/Settings.cpp:134-145,Source/Project64-core/Settings.cpp:151-188,Source/Project64-core/Settings/SettingType/SettingsType-RomDatabase.cpp:63,Source/Project64-core/Settings/SettingType/SettingsType-RomDatabase.cpp:117,Source/Project64-core/RomList/RomList.cpp:47,Source/Project64-core/RomList/RomList.cpp:52,Source/Project64-core/RomList/RomList.cpp:58-61,Source/Project64-core/N64System/N64Rom.cpp:722,Source/Project64-core/N64System/N64Rom.cpp:914 - Sections keyed by the ROM identifier CRC1-CRC2-C:country. Backs the whole Rdb_ setting family, among them RDRAM size, counter factor, save chip, VI refresh rate, disk seek timing and the overclock modifier, so it decides how the machine is configured per game. It also carries the microcode identifier table. Absent, every lookup falls through to the Defaults section and the ROM browser lists no known titles.
Video.rdb optional missing bundled
Per game video plugin settings
- Path:
Config/Video.rdb - System: nintendo-64
- Source:
Source/Project64-core/Settings.cpp:89-90,Source/Project64-core/Settings/SettingType/SettingsType-RomDatabase.cpp:64,Source/Project64-core/Settings/SettingType/SettingsType-RomDatabase.cpp:118 - Second ini opened by the ROM database setting type, keyed on the same ROM identifier, holding the microcode CRCs the ucode detector matches and the per game video overrides. Without it the plugin asks the user to add an unknown microcode CRC.
Audio.rdb optional missing bundled
Per game audio plugin settings
- Path:
Config/Audio.rdb - System: nintendo-64
- Source:
Source/Project64-core/Settings.cpp:91-92,Source/Project64-core/Settings/SettingType/SettingsType-RomDatabase.cpp:65,Source/Project64-core/Settings/SettingType/SettingsType-RomDatabase.cpp:119 - Third ini opened by the ROM database setting type, same key, carrying the per game audio overrides such as FPSBuffer, Fixed Audio and Sync Audio.
Project64.rdx optional missing bundled
ROM database extension
- Path:
Config/Project64.rdx - System: nintendo-64
- Source:
Source/Project64-core/Settings.cpp:103-104,Source/Project64-core/RomList/RomList.cpp:46,Source/Project64-core/RomList/RomList.cpp:51 - Extended per game information the ROM browser shows, loaded into the romlist as m_ExtIniFile alongside the ROM database itself. Absent, the browser columns it feeds stay empty.
Config/Cheats/*.cht optional missing bundled
Shipped cheat database
- System: nintendo-64
- Source:
Source/Project64-core/Settings.cpp:93-96,Source/Project64-core/N64System/Enhancement/Enhancements.cpp:629,Source/Project64-core/N64System/Enhancement/Enhancements.cpp:647,Source/Installer/Installer.iss:29 - Directory scanned for that pattern, one file per game, sections keyed on the ROM identifier and holding the GameShark style codes. The user directory Config/Cheats-User is scanned straight after and is where the UI writes. 671 files ship in the installer.
Config/Enhancements/*.enh optional missing bundled
Shipped enhancement database
- System: nintendo-64
- Source:
Source/Project64-core/Settings.cpp:97-100,Source/Project64-core/N64System/Enhancement/Enhancements.cpp:665,Source/Project64-core/N64System/Enhancement/Enhancements.cpp:684,Source/Installer/Installer.iss:30 - Directory scanned for that pattern, same per game keying as the cheat files, holding the patches offered under Enhancements such as widescreen hacks. The user directory Config/Enhancements-User is scanned straight after. 115 files ship in the installer.
Lang/*.pj.Lang optional missing bundled
Interface translations
- System: nintendo-64
- Source:
Source/Project64-core/Settings.cpp:127-128,Source/Project64-core/Multilanguage/Language.cpp:9-571,Source/Project64-core/Multilanguage/Language.cpp:656-673,Source/Installer/Installer.iss:33 - Directory scanned for that pattern, each file naming its language in a header string. English is compiled in through the DEF_STR table, so an empty directory leaves the interface in English.
Jabo_Direct3D8.dll optional missing bundled
Jabo's Direct3D8 video plugin
- Path:
Plugin/GFX/Jabo_Direct3D8.dll - System: nintendo-64
- Source:
Source/Project64-core/Settings.cpp:383,Source/Installer/Installer.iss:36,Source/Script/package_zip.cmd:60 - Committed as a prebuilt binary under Plugin/Win32 and copied by both the installer and the nightly packager. No source for it exists in the tree, so a build from source cannot produce it. Project64-Video is the default graphics plugin, so it is only selected when the user picks it.
Jabo_Dsound.dll optional missing bundled
Jabo's DirectSound audio plugin
- Path:
Plugin/Audio/Jabo_Dsound.dll - System: nintendo-64
- Source:
Source/Project64-core/Settings.cpp:385,Source/Installer/Installer.iss:34,Source/Script/package_zip.cmd:58 - Committed as a prebuilt binary under Plugin/Win32 and copied by both the installer and the nightly packager, with no source in the tree. Project64-Audio is the default audio plugin.
Generated on 2026-08-23T16:12:06Z