Skip to content

Mandarine - RetroBIOS

Type standalone
Classification Community forks
Source https://github.com/ptyfyre/mandarine-neo
Version 1.3.0
Profiled 2026-08-08
Cores mandarine, mandarine-qt
Systems nintendo-3ds
Technical notes

Citra fork, renamed Mandarine-Neo at release 1.3.0. External files live in sysdata/ and nand/ under the user directory: user/ next to the executable when that directory exists, otherwise Mandarine on Windows and macOS and mandarine-emu on Linux, with Citra and citra-emu kept as legacy locations. ref: src/common/common_paths.h:16-70, src/common/file_util.cpp:770-839

InitKeys reads boot9.bin then aes_keys.txt. Encrypted content needs one of the two; a ROM without crypto reads neither. ref: src/core/hw/aes/key.cpp:315-324, src/core/file_sys/ncch_container.cpp:200-210

Failure to derive a key or to find a seed marks the content undecryptable and loading stops with ErrorEncrypted. ref: src/core/file_sys/ncch_container.cpp:219-223, src/core/file_sys/ncch_container.cpp:236-280, src/core/file_sys/ncch_container.cpp:347-349

System archives resolve to the NAND title tree. Shared font, Mii data, country list and bad word list fall back to open-source replacements built into the binary when the title is absent. ref: src/core/file_sys/archive_ncch.cpp:126-179, externals/open_source_archives/Readme.md

The embedded shared font only answers title low ID 0x00014002. CHN, KOR and TWN resolve to 0x00014102, 0x00014202 and 0x00014302, which fall through to shared_font.bin and then to ErrorSystemFiles, reported as recoverable. ref: src/core/hle/service/apt/apt.cpp:195-213, src/core/hle/service/apt/apt.cpp:276-291, src/mandarine_qt/main.cpp:3209-3215

ClCertA is read from NAND title 0x0004001B00010002 and its ctr-common-1-cert.bin and ctr-common-1-key.bin members are decrypted with the KeySlot 0x0D normal key. Both the title and the key slot are needed for authenticated HTTPS. ref: src/core/hle/service/http/http_c.cpp:1963-2036

System titles are downloaded and installed in-app from the Nintendo CDN, so the NAND title tree is not user-supplied. ref: src/mandarine_qt/configuration/configure_system.cpp:672-678, src/core/hle/service/am/am.cpp:536, src/core/nus_download.cpp:12-13

DumpKeys.gm9, a GodMode9 script producing aes_keys.txt and seeddb.bin, ships in the tree and documents sysdata/ as their destination. ref: dist/dumpkeys/README.md, dist/dumpkeys/DumpKeys.gm9

The plugin loader scans sdmc/luma/plugins/<title id>/ for any .3gx file and falls back to sdmc/luma/plugins/default.3gx. Plugins carry no fixed identity. ref: src/core/hle/service/plgldr/plgldr.cpp:112-146

mcu.dat holds per-installation MCU state that the emulator writes itself when the file is absent or carries the wrong magic. ref: src/core/hle/service/cfg/cfg.cpp:734-756, src/core/hle/service/cfg/cfg.h:425-439

sector0x96.bin is defined but read by no code path. ref: src/common/common_paths.h:70

7 files | 0 required, 7 optional | 7 in repo, 0 missing | 1 with HLE fallback

boot9.bin optional in repo

aes_keys.txt optional in repo

seeddb.bin optional in repo

shared_font.bin optional in repo HLE fallback

CTCert.bin optional in repo

SecureInfo_A optional in repo

LocalFriendCodeSeed_B optional in repo

Generated on 2026-10-10T11:26:01Z