Triforce - RetroBIOS¶
Technical notes
crediar's Dolphin fork, which adds the Triforce arcade boards (AM-Baseboard on the serial interface, AM-Mediaboard on the disc interface) and the Wii Arcade boards on top of GameCube and Wii emulation. The tree self-reports Dolphin 2407 (CMake/ScmRevGen.cmake:34-35) and builds DolphinQt. crediar publishes the source on crediar.dev; the commit profiled here is the REG-Linux mirror of it, whose Data/Sys tree matches the Hancock33 and ReaverTeknoGods mirrors byte for byte. ES-DE looks for dolphin-emu-triforce on Linux and Triforce.exe or Triforce/DolphinWX.exe on Windows, RetroBat installs it as dolphin-triforce.
segaboot.gcm is the Triforce firmware. DVDInterface::Init calls AMMediaboard::Init only when EXI serial port 1 holds the AM Mediaboard, so the read happens on every Triforce launch and never otherwise (Source/Core/Core/HW/DVD/DVDInterface.cpp:289-294). Init resolves the file under Sys/Triforce, with no User fallback, and copies min(file size, 2 MiB) into the firmware buffer without checking anything (Source/Core/Core/HW/DVD/AMMediaboard.cpp:215-233). A missing file raises a modal alert and returns before the buffer is filled, leaving it at 0xFF. The guest reads that buffer whenever the firmware is mapped (Source/Core/Core/HW/DVD/AMMediaboard.cpp:1083-1090), which is how the Service and Test menus are reached. The tree ships the copy documented below, SegaBoot v3.11 with a RELSAB header, and the mediaboard answers GetSegaBootVersion for both 3.09 and 3.11 layouts (Source/Core/Core/HW/DVD/AMMediaboard.cpp:1268-1269, 1397-1398).
Triforce mode also swaps the GameCube boot ROM name: GetBootROMPath returns IPL_TRI.bin instead of IPL.bin, User first then Sys (Source/Core/Core/Config/MainSettings.cpp:614-625). Load_BS2 reads at most 2 MiB, CRC32s what it read against a table of Redump dumps and accepts 0xD1883221 as the Triforce revision (Source/Core/Core/Boot/Boot.cpp:391-436). On that match it patches OSReport and maps SegaBoot as firmware so the guest IPL can chain into it (Source/Core/Core/Boot/Boot.cpp:482-489). SkipIPL defaults to true (Source/Core/Core/Config/MainSettings.cpp:37) and EmulatedBS2 otherwise copies the disc straight into DIMM memory and clears the firmware mapping (Source/Core/Core/Boot/Boot_BS2Emu.cpp:332-347), so games run without any IPL.
Boot ROM directories follow the legacy naming: GetDirectoryForRegion defaults to RegionDirectoryStyle::Legacy (Source/Core/Core/Config/MainSettings.h:369-370) and every boot ROM caller takes the default, so NTSC-J resolves to JAP. FindIPLDump probes USA, EUR and JAP and stops there (Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:180-189).
Wii Arcade runs as IOSC console type RVA, reached three ways: the RVA expansion device in slot A (Source/Core/Core/IOS/IOSC.cpp:213-218), an RVA.txt file in the System Menu title data (Source/Core/Core/Boot/Boot_BS2Emu.cpp:387-397), or a ticket issued by Root-CA10000000-XS10000000 (Source/Core/Core/IOS/ES/Formats.cpp:490-493). That console type switches to the development common key and root key held in the binary (Source/Core/Core/IOS/IOSC.cpp:603-615).
Save data the emulator creates on first run is keyed on the disc, so none of it
can be supplied: tridimm_
Recognised Triforce titles are F-Zero AX, F-Zero AX Monster Ride, Mario Kart Arcade GP 1 and 2, Virtua Striker 3 and 4, Gekitou Pro Yakyuu and Key of Avalon (Source/Core/Core/HW/DVD/AMMediaboard.h:25-36).
26 files | 1 required, 25 optional | 21 in repo, 5 missing | 21 with HLE fallback
segaboot.gcm required in repo
SegaBoot, the Triforce system disc image held on the AM-Mediaboard
- Path:
Sys/Triforce/segaboot.gcm - System: sega-triforce
- Size: 2.0 MB
- SHA1:
87918619c632... - Source:
Source/Core/Core/HW/DVD/AMMediaboard.cpp:215-233,Source/Core/Core/HW/DVD/DVDInterface.cpp:289-294 - Platforms: batocera, retrobat, retrodeck
- Read on every Triforce launch, Sys/Triforce only with no User fallback. Nothing is validated, min(file size, 2 MiB) is copied into the firmware buffer. The hash is the copy the fork's own Data/Sys tree carries, SegaBoot v3.11.
IPL_TRI.bin optional in repo HLE fallback north-america
Triforce boot ROM, NTSC-U directory
- Path:
GC/USA/IPL_TRI.bin - System: sega-triforce
- Size: 2.0 MB
- CRC32:
d1883221 - Validation: crc32
- Source:
Source/Core/Common/CommonPaths.h:149,Source/Core/Core/Config/MainSettings.cpp:614-625,Source/Core/Core/Boot/Boot.cpp:400,Source/Core/Core/Boot/Boot.cpp:415-436 - CRC32 is computed over the first 2 MiB and compared against the Redump table, 0xD1883221 being the Triforce revision. An unknown value warns and loading continues. A match also maps SegaBoot as firmware (Source/Core/Core/Boot/Boot.cpp:482-489).
IPL_TRI.bin optional in repo HLE fallback europe
Triforce boot ROM, PAL directory
- Path:
GC/EUR/IPL_TRI.bin - System: sega-triforce
- Size: 2.0 MB
- CRC32:
d1883221 - Validation: crc32
- Source:
Source/Core/Core/Config/MainSettings.cpp:620-623
IPL_TRI.bin optional in repo HLE fallback japan
Triforce boot ROM, NTSC-J directory
- Path:
GC/JAP/IPL_TRI.bin - System: sega-triforce
- Size: 2.0 MB
- CRC32:
d1883221 - Validation: crc32
- Source:
Source/Core/Core/Config/MainSettings.cpp:587-612,Source/Core/Core/Config/MainSettings.cpp:620-623 - JAP is the directory the legacy naming style returns for NTSC-J.
trinetcfg.bin optional missing
Mediaboard network configuration
- Path:
Triforce/trinetcfg.bin - System: sega-triforce
- Source:
Source/Core/Core/HW/DVD/AMMediaboard.cpp:169-177,Source/Core/Core/HW/DVD/AMMediaboard.cpp:198
trinetctrl.bin optional missing
Mediaboard network control block
- Path:
Triforce/trinetctrl.bin - System: sega-triforce
- Source:
Source/Core/Core/HW/DVD/AMMediaboard.cpp:169-177,Source/Core/Core/HW/DVD/AMMediaboard.cpp:199
triextra.bin optional missing
Mediaboard extra settings block
- Path:
Triforce/triextra.bin - System: sega-triforce
- Source:
Source/Core/Core/HW/DVD/AMMediaboard.cpp:169-177,Source/Core/Core/HW/DVD/AMMediaboard.cpp:200
RVA.txt optional missing
Marker that switches the emulated console to Wii Arcade mode
- Path:
Wii/title/00000001/00000002/data/RVA.txt - System: nintendo-wii-arcade
- Source:
Source/Core/Common/CommonPaths.h:165,Source/Core/Core/Boot/Boot_BS2Emu.cpp:387-397 - Opened for read inside the System Menu title data. Success sets console type RVA and forces the RGB region settings. The RVA expansion device in slot A reaches the same console type without it (Source/Core/Core/IOS/IOSC.cpp:213-218).
IPL.bin optional in repo HLE fallback north-america
GameCube NTSC-U boot ROM
- Path:
GC/USA/IPL.bin - Size: 2.0 MB
- Source:
Source/Core/Common/CommonPaths.h:148,Source/Core/Core/Config/MainSettings.cpp:627-630,Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:109-118,Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:182-183 - Platforms: batocera, emudeck, lakka, recalbox, retroarch, retropie, rocknix
- Needed to boot the GameCube menu and to take the fonts from a real dump.
IPL.bin optional in repo HLE fallback europe
GameCube PAL boot ROM
IPL.bin optional in repo HLE fallback japan
GameCube NTSC-J boot ROM
dsp_rom.bin optional in repo HLE fallback
DSP instruction ROM
- Path:
GC/dsp_rom.bin - Size: 8.0 KB
- Adler32:
0x66f334fe - Validation: size
- Source:
Source/Core/Common/CommonPaths.h:145,Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:87-105,Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:109-118,Source/Core/Core/DSP/DSPCore.h:44,Source/Core/Core/DSP/DSPCore.cpp:36-38 - Platforms: lakka, retroarch, retropie
- LoadDSPRom rejects any file whose length differs from DSP_IROM_BYTE_SIZE and swaps every 16 bit word before storing it, so the Adler32 in the source is taken over the swapped data (Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:100-102). The pair is matched against seven known sets, the first being the Nintendo ROMs; a miss asks the user whether to stop (Source/Core/Core/DSP/DSPCore.cpp:60-84).
dsp_coef.bin optional in repo HLE fallback
DSP coefficient ROM
- Path:
GC/dsp_coef.bin - Size: 4.0 KB
- Adler32:
0xf3b93527 - Validation: size
- Source:
Source/Core/Common/CommonPaths.h:146,Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:87-105,Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:110-119,Source/Core/Core/DSP/DSPCore.h:58,Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp:61-62 - Platforms: lakka, retroarch, retropie
- Also read by the HLE AX ucode for polyphase resampling. Adler32 is taken over the byte-swapped data (Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:100-102).
font_western.bin optional in repo HLE fallback
Windows-1252 font used by GameCube and Wii text rendering
- Path:
Sys/GC/font_western.bin - Size: 9.4 KB
- Source:
Source/Core/Common/CommonPaths.h:142,Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:131,Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:203-247 - Platforms: lakka, retroarch, retropie
- Size is the official font length the code reads from an IPL dump, 0x2575 (Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:234-236). A standalone file is read without any check.
font_japanese.bin optional in repo HLE fallback
Shift-JIS font used by GameCube and Wii text rendering
- Path:
Sys/GC/font_japanese.bin - Size: 296.6 KB
- Source:
Source/Core/Common/CommonPaths.h:143,Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:130,Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:203-247 - Platforms: lakka, retroarch, retropie
- Size is the official font length read from an IPL dump, 0x4a24d.
gba_bios.bin optional in repo HLE fallback
GBA BIOS for the GameCube to Game Boy Advance link
- Path:
GBA/gba_bios.bin - Source:
Source/Core/Common/CommonPaths.h:155,Source/Core/Common/FileUtil.cpp:917-919,Source/Core/Core/HW/GBACore.cpp:202-206,Source/Core/Core/HW/GBACore.cpp:336-353 - Platforms: batocera, lakka, recalbox, retroarch, retrobat, retrodeck, retropie, rocknix, romm
- Loaded into the integrated mGBA core, which fails to start without it. The path is overridable by the Main.GBA BIOS setting (Source/Core/Core/Config/MainSettings.cpp:361).
SYSCONF optional in repo HLE fallback
Wii system configuration
- Path:
Wii/shared2/sys/SYSCONF - Size: 16.0 KB
- Validation: size
- Source:
Source/Core/Common/CommonPaths.h:87,Source/Core/Common/CommonPaths.h:127,Source/Core/Core/SysConf.cpp:19,Source/Core/Core/SysConf.cpp:54-65 - SysConf::Load rejects any size other than SYSCONF_SIZE and falls back to built-in defaults. Generated by the emulator, can come from a NAND backup instead.
setting.txt optional in repo HLE fallback
Wii region, area and serial settings
- Path:
Wii/title/00000001/00000002/data/setting.txt - Size: 256 B
- Source:
Source/Core/Common/CommonPaths.h:163,Source/Core/Core/Boot/Boot_BS2Emu.cpp:412-424,Source/Core/Common/SettingsHandler.h:21,Source/Core/Common/SettingsHandler.h:26 - Read into a fixed 256 byte buffer, then rewritten during Wii boot emulation from the region settings table.
nand.bin optional in repo HLE fallback
BootMii NAND backup, imported through the NAND importer
- Source:
Source/Core/DiscIO/NANDImporter.cpp:26-40,Source/Core/DiscIO/NANDImporter.cpp:42-57 - Accepted at 0x21000000 bytes, or 0x21000400 when the OTP and SEEPROM dump is appended. Any other size is rejected.
keys.bin optional in repo HLE fallback
OTP and SEEPROM dump holding the console keys
- Path:
Wii/keys.bin - Size: 1.0 KB
- Source:
Source/Core/DiscIO/NANDImporter.cpp:19,Source/Core/DiscIO/NANDImporter.cpp:76-88,Source/Core/DiscIO/NANDImporter.cpp:288-298,Source/Core/Core/IOS/IOSC.cpp:639-665 - Asked for at import time when not appended to the NAND image, and written to the Wii root. Read at every boot, absence falls back to the built-in default key set.
clientca.pem optional in repo HLE fallback
SSL client certificate extracted from IOS13
- Path:
Wii/clientca.pem - Source:
Source/Core/DiscIO/NANDImporter.cpp:201-286 - Located inside the IOS13 content during NAND import by its leading bytes.
clientcakey.pem optional in repo HLE fallback
SSL client private key extracted from IOS13
- Path:
Wii/clientcakey.pem - Source:
Source/Core/DiscIO/NANDImporter.cpp:237
rootca.pem optional in repo HLE fallback
SSL root certificate extracted from IOS13
- Path:
Wii/rootca.pem - Source:
Source/Core/DiscIO/NANDImporter.cpp:238
WiiSD.raw optional in repo HLE fallback
Virtual SD card image for the Wii SD slot
- Path:
Load/WiiSD.raw - Source:
Source/Core/Common/CommonPaths.h:160,Source/Core/Common/FileUtil.cpp:909 - Created by the emulator, path overridable by the General WiiSDCardPath setting.
Wii System Menu optional missing HLE fallback
Wii System Menu WAD, installed into the emulated NAND
- Source:
Source/Core/DolphinQt/MenuBar.cpp:290,Source/Core/DolphinQt/MenuBar.cpp:1098-1112 - Needed to boot the Wii Menu. Installed through Tools, Install WAD.
codehandler.bin optional in repo HLE fallback
Gecko code handler used to apply cheat codes
- Path:
Sys/codehandler.bin - Source:
Source/Core/Common/CommonPaths.h:167,Source/Core/Core/GeckoCode.cpp:121-134 - Platforms: lakka, retroarch, retropie
- Read from the Sys root. Cheats are refused when it is missing and when it exceeds the installer window.
Generated on 2026-08-23T16:12:06Z