Files
libretro/emulators/citra-mmj.yml
T
Abdessamad Derraz 676f322a62 fix: tag PAL and AUS files oceania
simple64 picks the PAL PIF for the European and Australian country codes, and New Zealand carts carry one of them. Citra MMJ's AUS font archives serve the region sold in Australia and New Zealand alike. Tagged australia, a leaf New Zealand is not under, --region new-zealand dropped them. They are tagged oceania, as every other PAL file is.
2026-10-20 01:19:56 +02:00

248 lines
12 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: "302b0c3bc4312bc96489c11584a97664894b343f"
core_version: "20251112"
display_name: "Nintendo - 3DS (Citra MMJ)"
cores:
- citra-mmj
systems:
- nintendo-3ds
mode: standalone
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/<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
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."
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
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
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
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
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"
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"
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"