mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-10 21:43:23 -05:00
248 lines
12 KiB
YAML
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, australia]
|
|
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, australia]
|
|
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"
|