Files
libretro/emulators/azahar.yml
T
Abdessamad Derraz ab9fe76de2 fix: resolve the cores handhelds rename
ArkOS ran the GBA with gpsp_ezode_mod and dArkOS with mgba_rumble: no
profile named them, so an install for the card's games kept every GBA
core's files, FBNeo's 3,472 data files among them. Each rename proven
from the OS build (same code base, same BIOS loading) joins its
profile's cores. The resolver folds either separator, and falls back to
the emulator column when the core names a mode, a machine or a plugin
of that program, only where its profile declares the folder's system:
MAME documents no GameKing ROM. 109 unresolved names are 56, each one
recorded with why in tests/test_games_index.py.
2026-11-09 06:04:42 +01:00

157 lines
6.8 KiB
YAML

emulator: Azahar
type: standalone + libretro
core_classification: official_port
source: "https://github.com/azahar-emu/azahar"
upstream: "https://github.com/azahar-emu/azahar"
profiled_date: "2026-10-22"
source_commit: "219d743a1e698101fe1ab8bef43e6563126c3c27"
core_version: "2126.2"
version_basis:
kind: tag
tag: "2126.2"
distance: 0
display_name: "Nintendo - 3DS (Azahar)"
library_name: "Azahar"
cores:
- azahar
- azahar-sa
- "azahar - standalone"
systems:
- nintendo-3ds
data_root:
windows:
path: "%APPDATA%/Azahar"
source_ref: "src/common/file_util.cpp:945-958, src/common/common_paths.h:24-25"
note: "A user folder beside the executable is used instead when it exists."
linux:
path: "$XDG_DATA_HOME/azahar-emu, else ~/.local/share/azahar-emu"
source_ref: "src/common/file_util.cpp:904-921, 965-975, src/common/common_paths.h:44-45"
note: "A user folder in the working directory is used instead when it exists."
macos:
path: "~/Library/Application Support/Azahar"
source_ref: "src/common/file_util.cpp:965-975, 999-1012, src/common/common_paths.h:34-40"
note: "$XDG_DATA_HOME/azahar-emu is kept when it, or the XDG config or cache folder, already exists, and a user folder in the working directory takes precedence over both."
android:
path: "the folder picked in the setup wizard"
source_ref: "src/android/app/src/main/java/org/citra/citra_emu/utils/PermissionsHandler.kt:19,49-56, src/android/app/src/main/java/org/citra/citra_emu/utils/DirectoryInitialization.kt:90-98, src/common/file_util.cpp:961-962"
note: "No default: the user grants a folder through the system picker, stored as CITRA_DIRECTORY, and every user path is resolved inside it."
# path: is where the libretro core reads a file below the save directory the
# frontend hands it (load_from), standalone_path: where the standalone app
# reads it under its user directory.
notes: |
Successor to Citra (via Lime3DS). The libretro core lives in the same
repository (src/citra_libretro) and is built with ENABLE_LIBRETRO, which
forces the SDL2, Qt and web service frontends off.
ref: CMakeLists.txt:40, CMakeLists.txt:109-111, CMakeLists.txt:165-187
The libretro core moves the user directory to <save_dir>/Azahar/, or to
<system_dir>/Azahar/ when the frontend gives no save directory. The core
option "Azahar Default" keeps the standalone data directory instead.
ref: src/citra_libretro/core_settings.cpp:592-603, src/citra_libretro/core_settings.cpp:1048-1080,
src/citra_libretro/environment.cpp:191-208
The core reports library_name "Azahar".
ref: src/citra_libretro/environment.cpp:269
The standalone user directory is the one data_root names per system, with
citra-emu and lime3ds-emu (Citra and Lime3DS on Windows and macOS) kept as
legacy locations. sysdata/, nand/ and sdmc/ sit under it.
ref: src/common/common_paths.h:19-49, src/common/file_util.cpp:943-972,
src/common/file_util.cpp:1023-1025
keys.txt has an AES-encrypted key blob compiled in, used when the file is
absent. ENABLE_BUILTIN_KEYBLOB defaults to ON and is not among the options a
libretro build forces off.
ref: src/core/hw/aes/key.cpp:292-314, CMakeLists.txt:154, src/core/CMakeLists.txt:501-503
System archives (shared font, Mii data, country list, bad word list) are read
from installed NAND titles. Open-source replacements embedded in the binary
answer when the title is absent.
ref: src/core/file_sys/archive_ncch.cpp:150-214, src/core/hle/service/apt/apt.cpp:211-276
boot9.bin and sector0x96.bin are defined but read by no code path.
ref: src/common/common_paths.h:84-85
The .info declares no firmware.
files:
- name: keys.txt
path: Azahar/sysdata/keys.txt
standalone_path: sysdata/keys.txt
load_from: {libretro: save_dir}
system: nintendo-3ds
required: false
hle_fallback: true
sha1: "5288772be438b86978a801e6dcb14228ad3a20af"
md5: "4812e96097b7fc1bdd7b40366208b7a7"
note: "AES key slots, common keys and NFC secrets. Embedded encrypted blob used if missing: default_keys_enc, AES-CBC with a zero key and IV, the hashes are those of the decrypted text"
source_ref: "src/core/hw/aes/key.cpp:151-288, src/core/hw/aes/key.cpp:292-314, src/common/common_paths.h:83, src/core/hw/default_keys.h:11"
- name: shared_font.bin
path: Azahar/sysdata/shared_font.bin
standalone_path: sysdata/shared_font.bin
load_from: {libretro: save_dir}
system: nintendo-3ds
required: false
hle_fallback: true
note: "legacy path, tried when the shared font system archive fails to load"
source_ref: "src/core/hle/service/apt/apt.cpp:278-293, src/core/hle/service/apt/apt.cpp:300-305, src/common/common_paths.h:82"
- name: seeddb.bin
path: Azahar/sysdata/seeddb.bin
standalone_path: sysdata/seeddb.bin
load_from: {libretro: save_dir}
system: nintendo-3ds
required: false
note: "game seed database for 9.6+ titles, an empty one is written if absent"
source_ref: "src/core/file_sys/seed_db.cpp:12-58"
- name: otp.bin
path: Azahar/sysdata/otp.bin
standalone_path: sysdata/otp.bin
load_from: {libretro: save_dir}
system: nintendo-3ds
required: false
size: 256
validation: [size, crypto]
note: "console-unique OTP, AES-CBC decrypted with the keys.txt OTP key, then checked against the OTP magic and its SHA-256"
source_ref: "src/core/file_sys/otp.cpp:14-55, src/core/hw/unique_data.cpp:143-192, src/core/hw/unique_data.cpp:243-245"
- name: movable.sed
path: Azahar/nand/private/movable.sed
standalone_path: nand/private/movable.sed
load_from: {libretro: save_dir}
system: nintendo-3ds
required: false
size: [288, 320]
validation: [size, signature]
on_mismatch: {signature: warn}
note: "console-unique key seed, 288 bytes without the AES MAC block, 320 with it"
source_ref: "src/core/hw/unique_data.cpp:194-233, src/core/hw/unique_data.cpp:247-249, src/core/hw/unique_data.h:103-133"
- name: SecureInfo_A
path: Azahar/nand/rw/sys/SecureInfo_A
standalone_path: nand/rw/sys/SecureInfo_A
load_from: {libretro: save_dir}
system: nintendo-3ds
required: false
size: 273
validation: [size, signature]
on_mismatch: {signature: warn}
note: "console serial and region. A failed signature is retried against every region"
source_ref: "src/core/hw/unique_data.cpp:48-103, src/core/hw/unique_data.cpp:235-237, src/core/hw/unique_data.h:57"
- name: LocalFriendCodeSeed_B
path: Azahar/nand/rw/sys/LocalFriendCodeSeed_B
standalone_path: nand/rw/sys/LocalFriendCodeSeed_B
load_from: {libretro: save_dir}
system: nintendo-3ds
required: false
size: 272
validation: [size, signature]
on_mismatch: {signature: warn}
note: "friend code generation seed"
source_ref: "src/core/hw/unique_data.cpp:105-141, src/core/hw/unique_data.cpp:239-241, src/core/hw/unique_data.h:76"