Files
libretro/emulators/azahar.yml
T
Abdessamad Derraz e7aa9e870b fix: state libretro core versions from their code
Each libretro profile records version_basis and core_version is read
there at its pin. snes9x states 1.63 in snes9x.h, nestopia 2.0.0, mgba
0.11.0, vice 3.10, atari800's libretro tree 7.0.0. Cores whose build
takes its version from git carry the nearest tag in describe form
(flycast v2.7-90-ge88b0ce, ppsspp, duckstation, gearcoleco), placeholders
copied from .info files (Git, SVN) are replaced by the code's statement,
and a code that states none is null with kind none.
2026-10-27 19:21:27 +01:00

156 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
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"