Skip to content

Citra MMJ - RetroBIOS

Type standalone
Classification Community forks
Source https://github.com/weihuoya/citra
Version 20251112
Profiled 2026-08-11
Cores citra-mmj
Systems nintendo-3ds
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/.txt, texture packs and mods from load/. ref: src/android/app/src/main/java/org/citra/emu/ui/AmiiboDialog.java:57-64, src/core/cheats/cheats.cpp:93-110, src/core/custom_tex_cache.cpp:67, src/core/file_sys/ncch_container.cpp:359-365</p> </details> <p><strong>18 files</strong> | 0 required, 18 optional | 18 in repo, 0 missing | 8 with HLE fallback</p> <div class="rb-file-entry rb-file-entry-optional"> <p><strong><code>boot9.bin</code></strong> <span class="rb-badge rb-badge-muted">optional</span> <span class="rb-badge rb-badge-success">in repo</span> <br>ARM9 bootrom</p> <ul> <li>Path: <code>sysdata/boot9.bin</code></li> <li>System: <a href="../../systems/nintendo/#3ds">nintendo-3ds</a></li> <li>Size: 64.0 KB</li> <li>Validation: size</li> <li>Source: <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hw/aes/key.cpp#L135-L205"><code>src/core/hw/aes/key.cpp:135-205</code></a>, <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hw/rsa/rsa.cpp#L49-L80"><code>src/core/hw/rsa/rsa.cpp:49-80</code></a></li> <li>AES key section read at offset 55760, RSA modulus and exponent at 0xB3E0 and 0xB4E0. Both readers bail on any other size.</li> </ul> </div> <div class="rb-file-entry rb-file-entry-optional"> <p><strong><code>aes_keys.txt</code></strong> <span class="rb-badge rb-badge-muted">optional</span> <span class="rb-badge rb-badge-success">in repo</span> <br>AES key slots</p> <ul> <li>Path: <code>sysdata/aes_keys.txt</code></li> <li>System: <a href="../../systems/nintendo/#3ds">nintendo-3ds</a></li> <li>Source: <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hw/aes/key.cpp#L428-L493"><code>src/core/hw/aes/key.cpp:428-493</code></a>, <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hw/aes/key.cpp#L497-L508"><code>src/core/hw/aes/key.cpp:497-508</code></a></li> <li>Platforms: <a href="../../platforms/bizhawk/">bizhawk</a>, <a href="../../platforms/emudeck/">emudeck</a>, <a href="../../platforms/retrodeck/">retrodeck</a></li> <li>One name=hex pair per line, slot0x<NN>Key<X|Y|N> and common<N>. Read last, so it overrides what boot9.bin and the native firm titles set.</li> </ul> </div> <div class="rb-file-entry rb-file-entry-optional"> <p><strong><code>sector0x96.bin</code></strong> <span class="rb-badge rb-badge-muted">optional</span> <span class="rb-badge rb-badge-success">in repo</span> <br>New 3DS NAND secret sector</p> <ul> <li>Path: <code>sysdata/sector0x96.bin</code></li> <li>System: <a href="../../systems/nintendo/#3ds">nintendo-3ds</a></li> <li>Size: min 17 B</li> <li>Validation: size</li> <li>Source: <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hw/aes/key.cpp#L309-L345"><code>src/core/hw/aes/key.cpp:309-345</code></a>, <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hw/aes/key.cpp#L380-L386"><code>src/core/hw/aes/key.cpp:380-386</code></a>, <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/common/assert.h#L30-L35"><code>src/common/assert.h:30-35</code></a>, <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/common/assert.h#L59-L62"><code>src/common/assert.h:59-62</code></a></li> <li>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.</li> </ul> </div> <div class="rb-file-entry rb-file-entry-optional"> <p><strong><code>seeddb.bin</code></strong> <span class="rb-badge rb-badge-muted">optional</span> <span class="rb-badge rb-badge-success">in repo</span> <br>game seed database</p> <ul> <li>Path: <code>sysdata/seeddb.bin</code></li> <li>System: <a href="../../systems/nintendo/#3ds">nintendo-3ds</a></li> <li>Source: <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/file_sys/seed_db.cpp#L12-L57"><code>src/core/file_sys/seed_db.cpp:12-57</code></a></li> <li>Platforms: <a href="../../platforms/bizhawk/">bizhawk</a></li> <li>Seed-encrypted titles from firmware 9.6 onwards. An empty database is written when the file is absent.</li> </ul> </div> <div class="rb-file-entry rb-file-entry-optional"> <p><strong><code>00000000.app.romfs</code></strong> <span class="rb-badge rb-badge-muted">optional</span> <span class="rb-badge rb-badge-success">in repo</span> <span class="rb-badge rb-badge-info">HLE fallback</span> <span class="rb-badge rb-badge-muted">japan, north-america, europe, australia</span> <br>shared font system archive, title 0x0004009b00014002</p> <ul> <li>Path: <code>nand/00000000000000000000000000000000/title/0004009b/00014002/content/00000000.app.romfs</code></li> <li>System: <a href="../../systems/nintendo/#3ds">nintendo-3ds</a></li> <li>Source: <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hle/service/apt/apt.cpp#L124-L182"><code>src/core/hle/service/apt/apt.cpp:124-182</code></a>, <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/file_sys/archive_ncch.cpp#L143-L148"><code>src/core/file_sys/archive_ncch.cpp:143-148</code></a></li> <li>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.</li> </ul> </div> <div class="rb-file-entry rb-file-entry-optional"> <p><strong><code>00000000.app.romfs</code></strong> <span class="rb-badge rb-badge-muted">optional</span> <span class="rb-badge rb-badge-success">in repo</span> <span class="rb-badge rb-badge-muted">china</span> <br>shared font system archive for CHN, title 0x0004009b00014102</p> <ul> <li>Path: <code>nand/00000000000000000000000000000000/title/0004009b/00014102/content/00000000.app.romfs</code></li> <li>System: <a href="../../systems/nintendo/#3ds">nintendo-3ds</a></li> <li>Source: <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hle/service/apt/apt.cpp#L124-L182"><code>src/core/hle/service/apt/apt.cpp:124-182</code></a>, <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/file_sys/archive_ncch.cpp#L132-L158"><code>src/core/file_sys/archive_ncch.cpp:132-158</code></a></li> <li>Holds cbf_zh-Hans-CN.bcfnt.lz. No embedded replacement answers this title low ID.</li> </ul> </div> <div class="rb-file-entry rb-file-entry-optional"> <p><strong><code>00000000.app.romfs</code></strong> <span class="rb-badge rb-badge-muted">optional</span> <span class="rb-badge rb-badge-success">in repo</span> <span class="rb-badge rb-badge-muted">south-korea</span> <br>shared font system archive for KOR, title 0x0004009b00014202</p> <ul> <li>Path: <code>nand/00000000000000000000000000000000/title/0004009b/00014202/content/00000000.app.romfs</code></li> <li>System: <a href="../../systems/nintendo/#3ds">nintendo-3ds</a></li> <li>Source: <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hle/service/apt/apt.cpp#L124-L182"><code>src/core/hle/service/apt/apt.cpp:124-182</code></a>, <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/file_sys/archive_ncch.cpp#L132-L158"><code>src/core/file_sys/archive_ncch.cpp:132-158</code></a></li> <li>Holds cbf_ko-Hang-KR.bcfnt.lz. No embedded replacement answers this title low ID.</li> </ul> </div> <div class="rb-file-entry rb-file-entry-optional"> <p><strong><code>00000000.app.romfs</code></strong> <span class="rb-badge rb-badge-muted">optional</span> <span class="rb-badge rb-badge-success">in repo</span> <span class="rb-badge rb-badge-muted">taiwan</span> <br>shared font system archive for TWN, title 0x0004009b00014302</p> <ul> <li>Path: <code>nand/00000000000000000000000000000000/title/0004009b/00014302/content/00000000.app.romfs</code></li> <li>System: <a href="../../systems/nintendo/#3ds">nintendo-3ds</a></li> <li>Source: <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hle/service/apt/apt.cpp#L124-L182"><code>src/core/hle/service/apt/apt.cpp:124-182</code></a>, <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/file_sys/archive_ncch.cpp#L132-L158"><code>src/core/file_sys/archive_ncch.cpp:132-158</code></a></li> <li>Holds cbf_zh-Hant-TW.bcfnt.lz. No embedded replacement answers this title low ID.</li> </ul> </div> <div class="rb-file-entry rb-file-entry-optional"> <p><strong><code>shared_font.bin</code></strong> <span class="rb-badge rb-badge-muted">optional</span> <span class="rb-badge rb-badge-success">in repo</span> <span class="rb-badge rb-badge-info">HLE fallback</span> <br>system shared font, legacy dump</p> <ul> <li>Path: <code>sysdata/shared_font.bin</code></li> <li>System: <a href="../../systems/nintendo/#3ds">nintendo-3ds</a></li> <li>Source: <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hle/service/apt/apt.cpp#L230-L246"><code>src/core/hle/service/apt/apt.cpp:230-246</code></a>, <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hle/service/apt/apt.cpp#L256-L272"><code>src/core/hle/service/apt/apt.cpp:256-272</code></a></li> <li>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.</li> </ul> </div> <div class="rb-file-entry rb-file-entry-optional"> <p><strong><code>cbf_std.bcfnt</code></strong> <span class="rb-badge rb-badge-muted">optional</span> <span class="rb-badge rb-badge-success">in repo</span> <span class="rb-badge rb-badge-info">HLE fallback</span> <span class="rb-badge rb-badge-muted">japan, north-america, europe, australia</span> <span class="rb-badge rb-badge-muted">bundled</span> <br>shared font for JPN, USA, EUR and AUS</p> <ul> <li>Path: <code>sysdata/cbf_std.bcfnt</code></li> <li>System: <a href="../../systems/nintendo/#3ds">nintendo-3ds</a></li> <li>Source: <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hle/service/apt/apt.cpp#L184-L228"><code>src/core/hle/service/apt/apt.cpp:184-228</code></a>, <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/file_sys/archive_ncch.cpp#L143-L148"><code>src/core/file_sys/archive_ncch.cpp:143-148</code></a></li> <li>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.</li> </ul> </div> <div class="rb-file-entry rb-file-entry-optional"> <p><strong><code>cbf_zh-Hans-CN.bcfnt</code></strong> <span class="rb-badge rb-badge-muted">optional</span> <span class="rb-badge rb-badge-success">in repo</span> <span class="rb-badge rb-badge-muted">china</span> <span class="rb-badge rb-badge-muted">bundled</span> <br>shared font for CHN</p> <ul> <li>Path: <code>sysdata/cbf_zh-Hans-CN.bcfnt</code></li> <li>System: <a href="../../systems/nintendo/#3ds">nintendo-3ds</a></li> <li>Source: <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hle/service/apt/apt.cpp#L184-L228"><code>src/core/hle/service/apt/apt.cpp:184-228</code></a>, <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hle/service/apt/apt.cpp#L256-L272"><code>src/core/hle/service/apt/apt.cpp:256-272</code></a></li> <li>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.</li> </ul> </div> <div class="rb-file-entry rb-file-entry-optional"> <p><strong><code>cbf_ko-Hang-KR.bcfnt</code></strong> <span class="rb-badge rb-badge-muted">optional</span> <span class="rb-badge rb-badge-success">in repo</span> <span class="rb-badge rb-badge-muted">south-korea</span> <span class="rb-badge rb-badge-muted">bundled</span> <br>shared font for KOR</p> <ul> <li>Path: <code>sysdata/cbf_ko-Hang-KR.bcfnt</code></li> <li>System: <a href="../../systems/nintendo/#3ds">nintendo-3ds</a></li> <li>Source: <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hle/service/apt/apt.cpp#L184-L228"><code>src/core/hle/service/apt/apt.cpp:184-228</code></a>, <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hle/service/apt/apt.cpp#L256-L272"><code>src/core/hle/service/apt/apt.cpp:256-272</code></a></li> <li>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.</li> </ul> </div> <div class="rb-file-entry rb-file-entry-optional"> <p><strong><code>cbf_zh-Hant-TW.bcfnt</code></strong> <span class="rb-badge rb-badge-muted">optional</span> <span class="rb-badge rb-badge-success">in repo</span> <span class="rb-badge rb-badge-muted">taiwan</span> <span class="rb-badge rb-badge-muted">bundled</span> <br>shared font for TWN</p> <ul> <li>Path: <code>sysdata/cbf_zh-Hant-TW.bcfnt</code></li> <li>System: <a href="../../systems/nintendo/#3ds">nintendo-3ds</a></li> <li>Source: <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hle/service/apt/apt.cpp#L184-L228"><code>src/core/hle/service/apt/apt.cpp:184-228</code></a>, <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hle/service/apt/apt.cpp#L256-L272"><code>src/core/hle/service/apt/apt.cpp:256-272</code></a></li> <li>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.</li> </ul> </div> <div class="rb-file-entry rb-file-entry-optional"> <p><strong><code>00000000.app.romfs</code></strong> <span class="rb-badge rb-badge-muted">optional</span> <span class="rb-badge rb-badge-success">in repo</span> <span class="rb-badge rb-badge-info">HLE fallback</span> <span class="rb-badge rb-badge-muted">bundled</span> <br>Mii data system archive, title 0x0004009b00010202</p> <ul> <li>Path: <code>nand/00000000000000000000000000000000/title/0004009b/00010202/content/00000000.app.romfs</code></li> <li>System: <a href="../../systems/nintendo/#3ds">nintendo-3ds</a></li> <li>Source: <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/file_sys/ncch_container.cpp#L726-L741"><code>src/core/file_sys/ncch_container.cpp:726-741</code></a>, <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/file_sys/archive_ncch.cpp#L132-L136"><code>src/core/file_sys/archive_ncch.cpp:132-136</code></a></li> <li>Split-off RomFS served in place of the NCCH the title tree resolves to. An open-source replacement is built into the binary.</li> </ul> </div> <div class="rb-file-entry rb-file-entry-optional"> <p><strong><code>00000000.app.romfs</code></strong> <span class="rb-badge rb-badge-muted">optional</span> <span class="rb-badge rb-badge-success">in repo</span> <span class="rb-badge rb-badge-info">HLE fallback</span> <span class="rb-badge rb-badge-muted">bundled</span> <br>country list system archive, title 0x0004009b00010402</p> <ul> <li>Path: <code>nand/00000000000000000000000000000000/title/0004009b/00010402/content/00000000.app.romfs</code></li> <li>System: <a href="../../systems/nintendo/#3ds">nintendo-3ds</a></li> <li>Source: <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/file_sys/ncch_container.cpp#L726-L741"><code>src/core/file_sys/ncch_container.cpp:726-741</code></a>, <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/file_sys/archive_ncch.cpp#L137-L142"><code>src/core/file_sys/archive_ncch.cpp:137-142</code></a></li> <li>Split-off RomFS served in place of the NCCH the title tree resolves to. An open-source replacement is built into the binary.</li> </ul> </div> <div class="rb-file-entry rb-file-entry-optional"> <p><strong><code>00000000.app.romfs</code></strong> <span class="rb-badge rb-badge-muted">optional</span> <span class="rb-badge rb-badge-success">in repo</span> <span class="rb-badge rb-badge-info">HLE fallback</span> <span class="rb-badge rb-badge-muted">bundled</span> <br>bad word list system archive, title 0x000400db00010302</p> <ul> <li>Path: <code>nand/00000000000000000000000000000000/title/000400db/00010302/content/00000000.app.romfs</code></li> <li>System: <a href="../../systems/nintendo/#3ds">nintendo-3ds</a></li> <li>Source: <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/file_sys/ncch_container.cpp#L726-L741"><code>src/core/file_sys/ncch_container.cpp:726-741</code></a>, <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/file_sys/archive_ncch.cpp#L150-L157"><code>src/core/file_sys/archive_ncch.cpp:150-157</code></a></li> <li>Split-off RomFS served in place of the NCCH the title tree resolves to. An open-source replacement is built into the binary.</li> </ul> </div> <div class="rb-file-entry rb-file-entry-optional"> <p><strong><code>00000000.tmd</code></strong> <span class="rb-badge rb-badge-muted">optional</span> <span class="rb-badge rb-badge-success">in repo</span> <span class="rb-badge rb-badge-info">HLE fallback</span> <span class="rb-badge rb-badge-muted">bundled</span> <br>title metadata of the DLP module, title 0x0004013000002802</p> <ul> <li>Path: <code>nand/00000000000000000000000000000000/title/00040130/00002802/content/00000000.tmd</code></li> <li>System: <a href="../../systems/nintendo/#3ds">nintendo-3ds</a></li> <li>Source: <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hle/service/am/am.cpp#L428-L464"><code>src/core/hle/service/am/am.cpp:428-464</code></a>, <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hle/service/am/am.cpp#L466-L501"><code>src/core/hle/service/am/am.cpp:466-501</code></a>, <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/file_sys/title_metadata.cpp#L19-L34"><code>src/core/file_sys/title_metadata.cpp:19-34</code></a></li> <li>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.</li> </ul> </div> <div class="rb-file-entry rb-file-entry-optional"> <p><strong><code>0000001f.app</code></strong> <span class="rb-badge rb-badge-muted">optional</span> <span class="rb-badge rb-badge-success">in repo</span> <span class="rb-badge rb-badge-info">HLE fallback</span> <span class="rb-badge rb-badge-muted">bundled</span> <br>DLP system module, title 0x0004013000002802</p> <ul> <li>Path: <code>nand/00000000000000000000000000000000/title/00040130/00002802/content/0000001f.app</code></li> <li>System: <a href="../../systems/nintendo/#3ds">nintendo-3ds</a></li> <li>Source: <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hle/service/service.cpp#L78"><code>src/core/hle/service/service.cpp:78</code></a>, <a href="https://github.com/weihuoya/citra/blob/302b0c3bc4312bc96489c11584a97664894b343f/src/core/hle/service/service.cpp#L197-L213"><code>src/core/hle/service/service.cpp:197-213</code></a></li> <li>Loaded as a process when LLE is enabled for DLP, otherwise the HLE service is installed.</li> </ul> </div> <p><em>Generated on 2026-08-23T16:12:06Z</em></p> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type="button" class="md-top md-icon" data-md-component="top" hidden> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class="md-footer"> <nav class="md-footer__inner md-grid" aria-label="Footer" > <a href="../citra/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Citra"> <div class="md-footer__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </div> <div class="md-footer__title"> <span class="md-footer__direction"> Previous </span> <div class="md-ellipsis"> Citra </div> </div> </a> <a href="../citra_canary/" class="md-footer__link md-footer__link--next" aria-label="Next: Citra Canary"> <div class="md-footer__title"> <span class="md-footer__direction"> Next </span> <div class="md-ellipsis"> Citra Canary </div> </div> <div class="md-footer__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class="md-copyright"> <div class="md-copyright__highlight"> MIT for the tooling. BIOS and firmware files are third-party system software, preserved for personal backup, archival and interoperability. </div> Made with <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> Material for MkDocs </a> </div> <div class="md-social"> <a href="https://github.com/Abdess/retrobios" target="_blank" rel="noopener" title="RetroBIOS on GitHub" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </a> </div> </div> </div> </footer> </div> <div class="md-dialog" data-md-component="dialog"> <div class="md-dialog__inner md-typeset"></div> </div> <div class="md-progress" data-md-component="progress" role="progressbar"></div> <script id="__config" type="application/json">{"annotate": null, "base": "../..", "features": ["navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress", "navigation.tabs", "navigation.tabs.sticky", "navigation.sections", "navigation.top", "navigation.tracking", "navigation.indexes", "navigation.prune", "navigation.footer", "search.suggest", "search.highlight", "search.share", "content.code.copy", "content.tabs.link", "toc.follow"], "search": "../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script src="../../assets/javascripts/bundle.d7400e89.min.js"></script> <script src="../../javascripts/site.js"></script> </body> </html>