Citra MMJ - RetroBIOS¶
Technical notes
Citra fork for Android, shipped as four APKs of the same build per release: the org.citra.emu package, a com.antutu.ABenchMark package, and a StorageAccess variant of each. The user directory is citra-emu at the root of external storage, and Android/data/org.citra.emu/files/citra-emu for the StorageAccess builds. External files live in sysdata/ and nand/ below it. ref: src/android/app/src/main/java/org/citra/emu/utils/CitraDirectory.java:61-94, src/common/common_paths.h:23-29, src/common/file_util.cpp:398-430
InitKeys reads boot9.bin, then the native firm titles in the NAND tree, then sector0x96.bin for the New 3DS firm, then aes_keys.txt. Content left encrypted stops loading with ErrorEncrypted, shown as "ROM Encrypted". ref: src/core/hw/aes/key.cpp:497-508, src/core/file_sys/ncch_container.cpp:348-351, src/android/jni/main_android.cpp:88-90
GetSharedFont tries the shared font system archive, then shared_font.bin, then the regional BCFNT for the CFG region, and ends the session with ErrorSystemFiles when the three fail. The embedded open-source font answers title low ID 0x00014002 only, so CHN, KOR and TWN, which resolve to 0x00014102, 0x00014202 and 0x00014302, depend on a file. Region defaults to the code the ROM declares. ref: src/core/hle/service/apt/apt.cpp:143, src/core/hle/service/apt/apt.cpp:256-272, src/core/file_sys/archive_ncch.cpp:143-148, src/core/hle/service/cfg/cfg.cpp:176-181, src/core/loader/ncch.cpp:179, src/android/jni/config/main_settings.cpp:12
Loading the four regional fonts from sysdata is specific to this fork. ref: src/core/hle/service/apt/apt.cpp:184-228
The APK assets carry those fonts, three system archives, the DLP module and a seeded CFG savegame, and the first run copies them into the user directory without overwriting what is already there. System archives ship as split-off RomFS, picked up beside the .app path the title tree resolves to. ref: src/android/app/src/main/java/org/citra/emu/utils/CitraDirectory.java:192-207, src/android/app/src/main/java/org/citra/emu/utils/CitraDirectory.java:368-399, src/core/file_sys/ncch_container.cpp:726-741
LLE is opt-in per service module and reads the module from the NAND title tree, falling back to HLE when it is absent. There is no title downloader: system titles come from CIA files the user installs. ref: src/core/hle/service/service.cpp:60-107, src/core/hle/service/service.cpp:197-213, src/android/jni/main_android.cpp:278-289
ClCertA is read from NAND title 0x0004001b00010002 and decrypted with the keyslot 0x0D normal key. HTTPS client authentication stays off without both. ref: src/core/hle/service/http_c.cpp:810-884
The published tree does not build as it stands: CitraDirectory.java:349 calls a NativeLibrary.SetBackgroundGLSL that no file declares, and GetBuildDate and GetDeviceIinfo are declared native with no JNI counterpart. Nothing compiled here reads the post-processing shaders the settings screen lists. ref: src/android/app/src/main/java/org/citra/emu/NativeLibrary.java:341-342, src/android/app/src/main/java/org/citra/emu/settings/SettingsFragment.java:397-401
Amiibo dumps are read as .bin files from amiibo/, cheat codes from cheats/
18 files | 0 required, 18 optional | 18 in repo, 0 missing | 8 with HLE fallback
boot9.bin optional in repo
ARM9 bootrom
- Path:
sysdata/boot9.bin - System: nintendo-3ds
- Size: 64.0 KB
- Validation: size
- Source:
src/core/hw/aes/key.cpp:135-205,src/core/hw/rsa/rsa.cpp:49-80 - AES key section read at offset 55760, RSA modulus and exponent at 0xB3E0 and 0xB4E0. Both readers bail on any other size.
aes_keys.txt optional in repo
AES key slots
- Path:
sysdata/aes_keys.txt - System: nintendo-3ds
- Source:
src/core/hw/aes/key.cpp:428-493,src/core/hw/aes/key.cpp:497-508 - Platforms: bizhawk, emudeck, retrodeck
- One name=hex pair per line, slot0x
Key and common . Read last, so it overrides what boot9.bin and the native firm titles set.
sector0x96.bin optional in repo
New 3DS NAND secret sector
- Path:
sysdata/sector0x96.bin - System: nintendo-3ds
- Size: min 17 B
- Validation: size
- Source:
src/core/hw/aes/key.cpp:309-345,src/core/hw/aes/key.cpp:380-386,src/common/assert.h:30-35,src/common/assert.h:59-62 - First 16 bytes decrypt the slot 0x15 KeyX of the New 3DS safe mode native firm, title 0x0004013820000003. A file of 16 bytes or less trips a live assert: Android compiles out ASSERT_MSG, not ASSERT.
seeddb.bin optional in repo
game seed database
- Path:
sysdata/seeddb.bin - System: nintendo-3ds
- Source:
src/core/file_sys/seed_db.cpp:12-57 - Platforms: bizhawk
- Seed-encrypted titles from firmware 9.6 onwards. An empty database is written when the file is absent.
00000000.app.romfs optional in repo HLE fallback japan, north-america, europe, australia
shared font system archive, title 0x0004009b00014002
- Path:
nand/00000000000000000000000000000000/title/0004009b/00014002/content/00000000.app.romfs - System: nintendo-3ds
- Source:
src/core/hle/service/apt/apt.cpp:124-182,src/core/file_sys/archive_ncch.cpp:143-148 - First step of the shared font chain, holding cbf_std.bcfnt.lz in its RomFS. This title low ID is the one the embedded open-source font answers.
00000000.app.romfs optional in repo china
shared font system archive for CHN, title 0x0004009b00014102
- Path:
nand/00000000000000000000000000000000/title/0004009b/00014102/content/00000000.app.romfs - System: nintendo-3ds
- Source:
src/core/hle/service/apt/apt.cpp:124-182,src/core/file_sys/archive_ncch.cpp:132-158 - Holds cbf_zh-Hans-CN.bcfnt.lz. No embedded replacement answers this title low ID.
00000000.app.romfs optional in repo south-korea
shared font system archive for KOR, title 0x0004009b00014202
- Path:
nand/00000000000000000000000000000000/title/0004009b/00014202/content/00000000.app.romfs - System: nintendo-3ds
- Source:
src/core/hle/service/apt/apt.cpp:124-182,src/core/file_sys/archive_ncch.cpp:132-158 - Holds cbf_ko-Hang-KR.bcfnt.lz. No embedded replacement answers this title low ID.
00000000.app.romfs optional in repo taiwan
shared font system archive for TWN, title 0x0004009b00014302
- Path:
nand/00000000000000000000000000000000/title/0004009b/00014302/content/00000000.app.romfs - System: nintendo-3ds
- Source:
src/core/hle/service/apt/apt.cpp:124-182,src/core/file_sys/archive_ncch.cpp:132-158 - Holds cbf_zh-Hant-TW.bcfnt.lz. No embedded replacement answers this title low ID.
shared_font.bin optional in repo HLE fallback
system shared font, legacy dump
- Path:
sysdata/shared_font.bin - System: nintendo-3ds
- Source:
src/core/hle/service/apt/apt.cpp:230-246,src/core/hle/service/apt/apt.cpp:256-272 - Copied whole into the shared memory block, so the file carries the 0x80 byte APT header. Tried after the system archive and before the regional BCFNT files.
cbf_std.bcfnt optional in repo HLE fallback japan, north-america, europe, australia bundled
shared font for JPN, USA, EUR and AUS
- Path:
sysdata/cbf_std.bcfnt - System: nintendo-3ds
- Source:
src/core/hle/service/apt/apt.cpp:184-228,src/core/file_sys/archive_ncch.cpp:143-148 - Read to offset 0x80 of the shared memory block, so the file is a bare uncompressed BCFNT. Selected for every CFG region other than CHN, KOR and TWN. The embedded open-source font answers the archive request first, so this file is only reached when that archive path is taken out.
cbf_zh-Hans-CN.bcfnt optional in repo china bundled
shared font for CHN
- Path:
sysdata/cbf_zh-Hans-CN.bcfnt - System: nintendo-3ds
- Source:
src/core/hle/service/apt/apt.cpp:184-228,src/core/hle/service/apt/apt.cpp:256-272 - Selected when the CFG region is CHN. The embedded font does not cover archive 0x00014102, so the session ends with ErrorSystemFiles without this file or shared_font.bin.
cbf_ko-Hang-KR.bcfnt optional in repo south-korea bundled
shared font for KOR
- Path:
sysdata/cbf_ko-Hang-KR.bcfnt - System: nintendo-3ds
- Source:
src/core/hle/service/apt/apt.cpp:184-228,src/core/hle/service/apt/apt.cpp:256-272 - Selected when the CFG region is KOR. The embedded font does not cover archive 0x00014202, so the session ends with ErrorSystemFiles without this file or shared_font.bin.
cbf_zh-Hant-TW.bcfnt optional in repo taiwan bundled
shared font for TWN
- Path:
sysdata/cbf_zh-Hant-TW.bcfnt - System: nintendo-3ds
- Source:
src/core/hle/service/apt/apt.cpp:184-228,src/core/hle/service/apt/apt.cpp:256-272 - Selected when the CFG region is TWN. The embedded font does not cover archive 0x00014302, so the session ends with ErrorSystemFiles without this file or shared_font.bin.
00000000.app.romfs optional in repo HLE fallback bundled
Mii data system archive, title 0x0004009b00010202
- Path:
nand/00000000000000000000000000000000/title/0004009b/00010202/content/00000000.app.romfs - System: nintendo-3ds
- Source:
src/core/file_sys/ncch_container.cpp:726-741,src/core/file_sys/archive_ncch.cpp:132-136 - Split-off RomFS served in place of the NCCH the title tree resolves to. An open-source replacement is built into the binary.
00000000.app.romfs optional in repo HLE fallback bundled
country list system archive, title 0x0004009b00010402
- Path:
nand/00000000000000000000000000000000/title/0004009b/00010402/content/00000000.app.romfs - System: nintendo-3ds
- Source:
src/core/file_sys/ncch_container.cpp:726-741,src/core/file_sys/archive_ncch.cpp:137-142 - Split-off RomFS served in place of the NCCH the title tree resolves to. An open-source replacement is built into the binary.
00000000.app.romfs optional in repo HLE fallback bundled
bad word list system archive, title 0x000400db00010302
- Path:
nand/00000000000000000000000000000000/title/000400db/00010302/content/00000000.app.romfs - System: nintendo-3ds
- Source:
src/core/file_sys/ncch_container.cpp:726-741,src/core/file_sys/archive_ncch.cpp:150-157 - Split-off RomFS served in place of the NCCH the title tree resolves to. An open-source replacement is built into the binary.
00000000.tmd optional in repo HLE fallback bundled
title metadata of the DLP module, title 0x0004013000002802
- Path:
nand/00000000000000000000000000000000/title/00040130/00002802/content/00000000.tmd - System: nintendo-3ds
- Source:
src/core/hle/service/am/am.cpp:428-464,src/core/hle/service/am/am.cpp:466-501,src/core/file_sys/title_metadata.cpp:19-34 - Read to resolve the content ID of index 0, which the shipped metadata gives as 0x1f. Without it the path falls back to content ID 0 and the module is not found.
0000001f.app optional in repo HLE fallback bundled
DLP system module, title 0x0004013000002802
- Path:
nand/00000000000000000000000000000000/title/00040130/00002802/content/0000001f.app - System: nintendo-3ds
- Source:
src/core/hle/service/service.cpp:78,src/core/hle/service/service.cpp:197-213 - Loaded as a process when LLE is enabled for DLP, otherwise the HLE service is installed.
Generated on 2026-08-23T16:12:06Z