Files
libretro/emulators/citra-mmj.yml
T
Abdessamad Derraz c548430309 docs: add data_root to citra-mmj
CitraDirectory.start picks getExternalFilesDir on Android 10 and later without legacy storage, and the manifest at the pin does not request legacy storage; the shared-storage root is the pre-Android 10 path, not a per-variant one.
2026-10-23 19:10:44 +02:00

271 lines
14 KiB
YAML

emulator: Citra MMJ
type: standalone
core_classification: community_fork
source: "https://github.com/weihuoya/citra"
upstream: "https://github.com/weihuoya/citra"
profiled_date: "2026-08-11"
source_commit: "9198dc24df2eb534b8fe7fa1c5c457081a7244ab"
core_version: "20251112"
display_name: "Nintendo - 3DS (Citra MMJ)"
cores:
- citra-mmj
systems:
- nintendo-3ds
mode: standalone
data_root:
android:
path: "Android/data/org.citra.emu/files/citra-emu"
source_ref: "src/android/app/src/main/java/org/citra/emu/utils/CitraDirectory.java:61-94"
note: "Before Android 10, or under legacy external storage, citra-emu at the root of shared storage is used instead. The com.antutu.ABenchMark package reads Android/data/com.antutu.ABenchMark/files/citra-emu."
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 in the app's
external files directory from Android 10 on, and at the root of external
storage on earlier versions or under legacy storage, as data_root gives.
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/<title id>.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
files:
- name: boot9.bin
path: sysdata/boot9.bin
system: nintendo-3ds
required: false
size: 65536
validation: [size]
description: "ARM9 bootrom"
note: "AES key section read at offset 55760, RSA modulus and exponent at 0xB3E0 and 0xB4E0. Both readers bail on any other size."
source_ref: "src/core/hw/aes/key.cpp:135-205, src/core/hw/rsa/rsa.cpp:49-80"
- name: aes_keys.txt
path: sysdata/aes_keys.txt
system: nintendo-3ds
required: false
bundled: true
size: 2951
sha1: "7072caead687e95549cb75c61449ff8b45d38342"
md5: "a45dd9a3cb051cfecedd63c82b47ab4f"
description: "AES key slots"
note: "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. Shipped in the assets of the 20251112 APKs and copied to sysdata/ on first run when absent, hash of that copy."
source_ref: "src/core/hw/aes/key.cpp:428-493, src/core/hw/aes/key.cpp:497-508"
- name: sector0x96.bin
path: sysdata/sector0x96.bin
system: nintendo-3ds
required: false
min_size: 17
validation: [size]
description: "New 3DS NAND secret sector"
note: "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."
source_ref: "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"
- name: seeddb.bin
path: sysdata/seeddb.bin
system: nintendo-3ds
required: false
description: "game seed database"
note: "Seed-encrypted titles from firmware 9.6 onwards. An empty database is written when the file is absent."
source_ref: "src/core/file_sys/seed_db.cpp:12-57"
- name: "00000000.app.romfs"
path: nand/00000000000000000000000000000000/title/0004009b/00014002/content/00000000.app.romfs
system: nintendo-3ds
required: false
hle_fallback: true
region: [japan, north-america, europe, oceania]
description: "shared font system archive, title 0x0004009b00014002"
note: "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."
source_ref: "src/core/hle/service/apt/apt.cpp:124-182, src/core/file_sys/archive_ncch.cpp:143-148"
- name: "00000000.app.romfs"
path: nand/00000000000000000000000000000000/title/0004009b/00014102/content/00000000.app.romfs
system: nintendo-3ds
required: false
region: [china]
description: "shared font system archive for CHN, title 0x0004009b00014102"
note: "Holds cbf_zh-Hans-CN.bcfnt.lz. No embedded replacement answers this title low ID."
source_ref: "src/core/hle/service/apt/apt.cpp:124-182, src/core/file_sys/archive_ncch.cpp:132-158"
- name: "00000000.app.romfs"
path: nand/00000000000000000000000000000000/title/0004009b/00014202/content/00000000.app.romfs
system: nintendo-3ds
required: false
region: [south-korea]
description: "shared font system archive for KOR, title 0x0004009b00014202"
note: "Holds cbf_ko-Hang-KR.bcfnt.lz. No embedded replacement answers this title low ID."
source_ref: "src/core/hle/service/apt/apt.cpp:124-182, src/core/file_sys/archive_ncch.cpp:132-158"
- name: "00000000.app.romfs"
path: nand/00000000000000000000000000000000/title/0004009b/00014302/content/00000000.app.romfs
system: nintendo-3ds
required: false
region: [taiwan]
description: "shared font system archive for TWN, title 0x0004009b00014302"
note: "Holds cbf_zh-Hant-TW.bcfnt.lz. No embedded replacement answers this title low ID."
source_ref: "src/core/hle/service/apt/apt.cpp:124-182, src/core/file_sys/archive_ncch.cpp:132-158"
- name: shared_font.bin
path: sysdata/shared_font.bin
system: nintendo-3ds
required: false
hle_fallback: true
description: "system shared font, legacy dump"
note: "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."
source_ref: "src/core/hle/service/apt/apt.cpp:230-246, src/core/hle/service/apt/apt.cpp:256-272"
- name: cbf_std.bcfnt
size: 3196272
sha1: c6578caffb1a57f6c18979dc596f3fb9cb986706
path: sysdata/cbf_std.bcfnt
system: nintendo-3ds
required: false
bundled: true
hle_fallback: true
region: [japan, north-america, europe, oceania]
description: "shared font for JPN, USA, EUR and AUS"
note: "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."
source_ref: "src/core/hle/service/apt/apt.cpp:184-228, src/core/file_sys/archive_ncch.cpp:143-148"
- name: cbf_zh-Hans-CN.bcfnt
size: 2937484
sha1: 1fbd073bbd6cb906a0c0678767fab81feb552173
path: sysdata/cbf_zh-Hans-CN.bcfnt
system: nintendo-3ds
required: false
bundled: true
region: [china]
description: "shared font for CHN"
note: "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."
source_ref: "src/core/hle/service/apt/apt.cpp:184-228, src/core/hle/service/apt/apt.cpp:256-272"
- name: cbf_ko-Hang-KR.bcfnt
size: 1400192
sha1: 25e546319c72dae1e0f3ebd6a842008c300e4462
path: sysdata/cbf_ko-Hang-KR.bcfnt
system: nintendo-3ds
required: false
bundled: true
region: [south-korea]
description: "shared font for KOR"
note: "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."
source_ref: "src/core/hle/service/apt/apt.cpp:184-228, src/core/hle/service/apt/apt.cpp:256-272"
- name: cbf_zh-Hant-TW.bcfnt
size: 3350100
sha1: 62a877bfffb3e690044520f52120c5cd48b97545
path: sysdata/cbf_zh-Hant-TW.bcfnt
system: nintendo-3ds
required: false
bundled: true
region: [taiwan]
description: "shared font for TWN"
note: "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."
source_ref: "src/core/hle/service/apt/apt.cpp:184-228, src/core/hle/service/apt/apt.cpp:256-272"
- name: "00000000.app.romfs"
path: nand/00000000000000000000000000000000/title/0004009b/00010202/content/00000000.app.romfs
system: nintendo-3ds
required: false
bundled: true
hle_fallback: true
description: "Mii data system archive, title 0x0004009b00010202"
note: "Split-off RomFS served in place of the NCCH the title tree resolves to. An open-source replacement is built into the binary."
source_ref: "src/core/file_sys/ncch_container.cpp:726-741, src/core/file_sys/archive_ncch.cpp:132-136"
- name: "00000000.app.romfs"
path: nand/00000000000000000000000000000000/title/0004009b/00010402/content/00000000.app.romfs
system: nintendo-3ds
required: false
bundled: true
hle_fallback: true
description: "country list system archive, title 0x0004009b00010402"
note: "Split-off RomFS served in place of the NCCH the title tree resolves to. An open-source replacement is built into the binary."
source_ref: "src/core/file_sys/ncch_container.cpp:726-741, src/core/file_sys/archive_ncch.cpp:137-142"
- name: "00000000.app.romfs"
path: nand/00000000000000000000000000000000/title/000400db/00010302/content/00000000.app.romfs
system: nintendo-3ds
required: false
bundled: true
hle_fallback: true
description: "bad word list system archive, title 0x000400db00010302"
note: "Split-off RomFS served in place of the NCCH the title tree resolves to. An open-source replacement is built into the binary."
source_ref: "src/core/file_sys/ncch_container.cpp:726-741, src/core/file_sys/archive_ncch.cpp:150-157"
- name: "00000000.tmd"
size: 2868
sha1: ee9bd492a692301aef0fa93af654598bee70730e
path: nand/00000000000000000000000000000000/title/00040130/00002802/content/00000000.tmd
system: nintendo-3ds
required: false
bundled: true
hle_fallback: true
description: "title metadata of the DLP module, title 0x0004013000002802"
note: "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."
source_ref: "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"
- name: "0000001f.app"
size: 66048
sha1: 7269ebba3858fce1f6915dd30b74b7c4f915b670
path: nand/00000000000000000000000000000000/title/00040130/00002802/content/0000001f.app
system: nintendo-3ds
required: false
bundled: true
hle_fallback: true
description: "DLP system module, title 0x0004013000002802"
note: "Loaded as a process when LLE is enabled for DLP, otherwise the HLE service is installed."
source_ref: "src/core/hle/service/service.cpp:78, src/core/hle/service/service.cpp:197-213"