From 811ccdfea02f1de9859a87f08fe1c541442c6cc1 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Thu, 22 Oct 2026 19:58:35 +0200 Subject: [PATCH] fix: profile files cores read below the save dir Read at each pinned commit: Azahar, Citra, Citra 2018, Panda3DS, Trident, FS-UAE and Stella read these below the frontend save directory, Dolphin and Ishiiruka below /User, Cemu its MLC below /Cemu. Each profile names its library_name. Citra Canary reads sysdata from the host data directory: its pin moves to the canary branch it is built from. --- emulators/azahar.yml | 16 ++++- emulators/cemu.yml | 119 +++++++++++++++++---------------- emulators/citra.yml | 15 ++++- emulators/citra2018.yml | 3 + emulators/citra_canary.yml | 29 ++++++-- emulators/dolphin.yml | 22 ++++-- emulators/fbalpha2012.yml | 2 + emulators/fbalpha2012_cps3.yml | 2 + emulators/fsuae.yml | 47 ++++++++++++- emulators/ishiiruka.yml | 34 ++++++---- emulators/panda3ds.yml | 14 +++- emulators/stella.yml | 15 +++++ emulators/trident.yml | 10 ++- 13 files changed, 238 insertions(+), 90 deletions(-) diff --git a/emulators/azahar.yml b/emulators/azahar.yml index 7b745302..9488851f 100644 --- a/emulators/azahar.yml +++ b/emulators/azahar.yml @@ -7,14 +7,16 @@ profiled_date: "2026-10-22" source_commit: "219d743a1e698101fe1ab8bef43e6563126c3c27" core_version: "2126.2" display_name: "Nintendo - 3DS (Azahar)" +library_name: "Azahar" cores: - azahar - azahar-sa systems: - nintendo-3ds -# path: is where the libretro core reads a file, standalone_path: where the -# standalone app reads it under its user directory. +# 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 @@ -27,6 +29,9 @@ notes: | 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 + Standalone data dir: azahar-emu under XDG_DATA_HOME (Azahar on Windows and macOS), with citra-emu and lime3ds-emu kept as legacy locations. A user/ directory beside the executable (Windows) or in the working directory takes @@ -53,6 +58,7 @@ 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 @@ -64,6 +70,7 @@ files: - 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 @@ -73,6 +80,7 @@ files: - 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" @@ -81,6 +89,7 @@ files: - 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 @@ -91,6 +100,7 @@ files: - 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] @@ -102,6 +112,7 @@ files: - 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 @@ -113,6 +124,7 @@ files: - 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 diff --git a/emulators/cemu.yml b/emulators/cemu.yml index 451512d2..74ae3bea 100644 --- a/emulators/cemu.yml +++ b/emulators/cemu.yml @@ -10,6 +10,8 @@ source_commit: "4802094a2c15559541b3da3a6b11c2e12ba5d7e8" upstream_commit: "32e6628a6a9e5255fd0f7e734386a364ff9c106e" core_version: "2.6" display_name: "Nintendo - Wii U (Cemu)" +library_name: "Cemu" +save_folder_once: true cores: - cemu systems: [nintendo-wiiu] @@ -51,8 +53,11 @@ notes: | portable directory next to the executable when it exists, otherwise %APPDATA%/Cemu on Windows, XDG_DATA_HOME/Cemu and XDG_CONFIG_HOME/Cemu on Linux, and the MLC defaults to /mlc01. path: entries below are - the libretro destination under the system directory, and standalone_path: is - relative to the Cemu user data directory. + the libretro destination under the system directory, or under the save + directory for the MLC (load_from), and standalone_path: is relative to the + Cemu user data directory, which holds the MLC by default (load_from + data_dir). The core reports library_name "Cemu" + (src/libretro/CemuLibretro.cpp:3354). ref: src/libretro/CemuLibretro.cpp:1647-1707, src/libretro/CemuLibretro.cpp:3264-3272, src/gui/wxgui/CemuApp.cpp:90-123, src/gui/wxgui/CemuApp.cpp:127-171, @@ -204,7 +209,7 @@ files: - name: CafeCn.ttf path: Cemu/mlc01/sys/title/0005001b/10042400/content/CafeCn.ttf standalone_path: mlc01/sys/title/0005001b/10042400/content/CafeCn.ttf - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false hle_fallback: true description: "Shared font, Simplified Chinese, console dump" @@ -217,7 +222,7 @@ files: - name: CafeKr.ttf path: Cemu/mlc01/sys/title/0005001b/10042400/content/CafeKr.ttf standalone_path: mlc01/sys/title/0005001b/10042400/content/CafeKr.ttf - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false hle_fallback: true description: "Shared font, Korean, console dump" @@ -226,7 +231,7 @@ files: - name: CafeStd.ttf path: Cemu/mlc01/sys/title/0005001b/10042400/content/CafeStd.ttf standalone_path: mlc01/sys/title/0005001b/10042400/content/CafeStd.ttf - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false hle_fallback: true description: "Shared font, standard Latin and Japanese, console dump" @@ -235,7 +240,7 @@ files: - name: CafeTw.ttf path: Cemu/mlc01/sys/title/0005001b/10042400/content/CafeTw.ttf standalone_path: mlc01/sys/title/0005001b/10042400/content/CafeTw.ttf - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false hle_fallback: true description: "Shared font, Traditional Chinese, console dump" @@ -426,7 +431,7 @@ files: - name: swkbd.pack path: Cemu/mlc01/sys/title/0005001b/1004f000/content/00/swkbd/swkbd.pack standalone_path: mlc01/sys/title/0005001b/1004f000/content/00/swkbd/swkbd.pack - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false description: "Software keyboard applet data, title 0005001b-1004f000" note: >- @@ -437,7 +442,7 @@ files: - name: erreula.pack path: Cemu/mlc01/sys/title/0005001b/10051000/content/00/erreula/erreula.pack standalone_path: mlc01/sys/title/0005001b/10051000/content/00/erreula/erreula.pack - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false description: "Error viewer applet data, title 0005001b-10051000" note: >- @@ -464,7 +469,7 @@ files: - name: WIIU_COMMON_1_CERT.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_COMMON_1_CERT.der standalone_path: mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_COMMON_1_CERT.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false description: "Client certificate, common" source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:471, source src/Cafe/IOSU/legacy/iosu_crypto.cpp:303-330" @@ -472,7 +477,7 @@ files: - name: WIIU_COMMON_1_RSA_KEY.aes path: Cemu/mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_COMMON_1_RSA_KEY.aes standalone_path: mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_COMMON_1_RSA_KEY.aes - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false description: "Client key, common, AES-CBC encrypted" note: "Must be a non-empty multiple of 16 bytes." @@ -481,7 +486,7 @@ files: - name: WIIU_ACCOUNT_1_CERT.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_ACCOUNT_1_CERT.der standalone_path: mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_ACCOUNT_1_CERT.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false description: "Client certificate, account" source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:472, source src/Cafe/IOSU/legacy/iosu_crypto.cpp:303-330" @@ -489,7 +494,7 @@ files: - name: WIIU_ACCOUNT_1_RSA_KEY.aes path: Cemu/mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_ACCOUNT_1_RSA_KEY.aes standalone_path: mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_ACCOUNT_1_RSA_KEY.aes - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false description: "Client key, account, AES-CBC encrypted" note: "Must be a non-empty multiple of 16 bytes." @@ -498,7 +503,7 @@ files: - name: WIIU_OLIVE_1_CERT.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_OLIVE_1_CERT.der standalone_path: mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_OLIVE_1_CERT.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false description: "Client certificate, olive (Miiverse)" note: "Registered twice, under ids 4 and 7." @@ -507,7 +512,7 @@ files: - name: WIIU_OLIVE_1_RSA_KEY.aes path: Cemu/mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_OLIVE_1_RSA_KEY.aes standalone_path: mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_OLIVE_1_RSA_KEY.aes - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false description: "Client key, olive, AES-CBC encrypted" note: "Must be a non-empty multiple of 16 bytes." @@ -516,7 +521,7 @@ files: - name: WIIU_VINO_1_CERT.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_VINO_1_CERT.der standalone_path: mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_VINO_1_CERT.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false description: "Client certificate, vino (Nintendo TVii)" source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:474, source src/Cafe/IOSU/legacy/iosu_crypto.cpp:303-330" @@ -524,7 +529,7 @@ files: - name: WIIU_VINO_1_RSA_KEY.aes path: Cemu/mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_VINO_1_RSA_KEY.aes standalone_path: mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_VINO_1_RSA_KEY.aes - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false description: "Client key, vino, AES-CBC encrypted" note: "Must be a non-empty multiple of 16 bytes." @@ -533,7 +538,7 @@ files: - name: WIIU_WOOD_1_CERT.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_WOOD_1_CERT.der standalone_path: mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_WOOD_1_CERT.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false description: "Client certificate, wood (eShop)" note: "Registered twice, under ids 6 and 8." @@ -542,7 +547,7 @@ files: - name: WIIU_WOOD_1_RSA_KEY.aes path: Cemu/mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_WOOD_1_RSA_KEY.aes standalone_path: mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_WOOD_1_RSA_KEY.aes - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false description: "Client key, wood, AES-CBC encrypted" note: "Must be a non-empty multiple of 16 bytes." @@ -553,273 +558,273 @@ files: - name: CACERT_NINTENDO_CA.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CA.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CA.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:480" - name: CACERT_NINTENDO_CA_G2.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CA_G2.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CA_G2.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:481" - name: CACERT_NINTENDO_CA_G3.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CA_G3.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CA_G3.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:482" - name: CACERT_NINTENDO_CLASS2_CA.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CLASS2_CA.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CLASS2_CA.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:483" - name: CACERT_NINTENDO_CLASS2_CA_G2.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CLASS2_CA_G2.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CLASS2_CA_G2.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:484" - name: CACERT_NINTENDO_CLASS2_CA_G3.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CLASS2_CA_G3.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CLASS2_CA_G3.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:485" - name: BALTIMORE_CYBERTRUST_ROOT_CA.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/BALTIMORE_CYBERTRUST_ROOT_CA.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/BALTIMORE_CYBERTRUST_ROOT_CA.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:488" - name: CYBERTRUST_GLOBAL_ROOT_CA.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/CYBERTRUST_GLOBAL_ROOT_CA.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/CYBERTRUST_GLOBAL_ROOT_CA.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:489" - name: VERIZON_GLOBAL_ROOT_CA.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/VERIZON_GLOBAL_ROOT_CA.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/VERIZON_GLOBAL_ROOT_CA.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:490" - name: GLOBALSIGN_ROOT_CA.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/GLOBALSIGN_ROOT_CA.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/GLOBALSIGN_ROOT_CA.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:491" - name: GLOBALSIGN_ROOT_CA_R2.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/GLOBALSIGN_ROOT_CA_R2.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/GLOBALSIGN_ROOT_CA_R2.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:492" - name: GLOBALSIGN_ROOT_CA_R3.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/GLOBALSIGN_ROOT_CA_R3.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/GLOBALSIGN_ROOT_CA_R3.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:493" - name: VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G3.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G3.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G3.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:494" - name: VERISIGN_UNIVERSAL_ROOT_CA.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/VERISIGN_UNIVERSAL_ROOT_CA.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/VERISIGN_UNIVERSAL_ROOT_CA.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:495" - name: VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G5.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G5.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G5.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:496" - name: THAWTE_PRIMARY_ROOT_CA_G3.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/THAWTE_PRIMARY_ROOT_CA_G3.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/THAWTE_PRIMARY_ROOT_CA_G3.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:497" - name: THAWTE_PRIMARY_ROOT_CA.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/THAWTE_PRIMARY_ROOT_CA.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/THAWTE_PRIMARY_ROOT_CA.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:498" - name: GEOTRUST_GLOBAL_CA.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/GEOTRUST_GLOBAL_CA.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/GEOTRUST_GLOBAL_CA.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:499" - name: GEOTRUST_GLOBAL_CA2.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/GEOTRUST_GLOBAL_CA2.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/GEOTRUST_GLOBAL_CA2.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:500" - name: GEOTRUST_PRIMARY_CA.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/GEOTRUST_PRIMARY_CA.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/GEOTRUST_PRIMARY_CA.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:501" - name: GEOTRUST_PRIMARY_CA_G3.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/GEOTRUST_PRIMARY_CA_G3.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/GEOTRUST_PRIMARY_CA_G3.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:502" - name: ADDTRUST_EXT_CA_ROOT.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/ADDTRUST_EXT_CA_ROOT.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/ADDTRUST_EXT_CA_ROOT.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:503" - name: COMODO_CA.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/COMODO_CA.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/COMODO_CA.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:504" - name: UTN_DATACORP_SGC_CA.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/UTN_DATACORP_SGC_CA.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/UTN_DATACORP_SGC_CA.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:505" - name: UTN_USERFIRST_HARDWARE_CA.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/UTN_USERFIRST_HARDWARE_CA.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/UTN_USERFIRST_HARDWARE_CA.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:506" - name: DIGICERT_HIGH_ASSURANCE_EV_ROOT_CA.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/DIGICERT_HIGH_ASSURANCE_EV_ROOT_CA.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/DIGICERT_HIGH_ASSURANCE_EV_ROOT_CA.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:507" - name: DIGICERT_ASSURED_ID_ROOT_CA.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/DIGICERT_ASSURED_ID_ROOT_CA.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/DIGICERT_ASSURED_ID_ROOT_CA.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:508" - name: DIGICERT_GLOBAL_ROOT_CA.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/DIGICERT_GLOBAL_ROOT_CA.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/DIGICERT_GLOBAL_ROOT_CA.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:509" - name: GTE_CYBERTRUST_GLOBAL_ROOT.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/GTE_CYBERTRUST_GLOBAL_ROOT.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/GTE_CYBERTRUST_GLOBAL_ROOT.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:510" - name: VERISIGN_CLASS3_PUBLIC_PRIMARY_CA.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/VERISIGN_CLASS3_PUBLIC_PRIMARY_CA.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/VERISIGN_CLASS3_PUBLIC_PRIMARY_CA.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:511" - name: THAWTE_PREMIUM_SERVER_CA.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/THAWTE_PREMIUM_SERVER_CA.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/THAWTE_PREMIUM_SERVER_CA.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:512" - name: EQUIFAX_SECURE_CA.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/EQUIFAX_SECURE_CA.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/EQUIFAX_SECURE_CA.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:513" - name: ENTRUST_SECURE_SERVER_CA.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/ENTRUST_SECURE_SERVER_CA.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/ENTRUST_SECURE_SERVER_CA.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:514" - name: VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G2.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G2.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G2.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:515" - name: ENTRUST_CA_2048.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/ENTRUST_CA_2048.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/ENTRUST_CA_2048.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:516" - name: ENTRUST_ROOT_CA.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/ENTRUST_ROOT_CA.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/ENTRUST_ROOT_CA.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:517" - name: ENTRUST_ROOT_CA_G2.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/ENTRUST_ROOT_CA_G2.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/ENTRUST_ROOT_CA_G2.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:518" - name: DIGICERT_ASSURED_ID_ROOT_CA_G2.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/DIGICERT_ASSURED_ID_ROOT_CA_G2.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/DIGICERT_ASSURED_ID_ROOT_CA_G2.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:519" - name: DIGICERT_GLOBAL_ROOT_CA_G2.der path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/DIGICERT_GLOBAL_ROOT_CA_G2.der standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/DIGICERT_GLOBAL_ROOT_CA_G2.der - load_from: save_dir + load_from: {libretro: save_dir, standalone: data_dir} required: false source_ref: "upstream src/Cafe/IOSU/legacy/iosu_crypto.cpp:520" diff --git a/emulators/citra.yml b/emulators/citra.yml index 362d6695..31ec4a3e 100644 --- a/emulators/citra.yml +++ b/emulators/citra.yml @@ -7,14 +7,21 @@ profiled_date: "2026-03-23" source_commit: "a0483e9abe8134ae6b290cdca7d49cb77689f05b" core_version: "Git" display_name: "Nintendo - 3DS (Citra)" +library_name: "Citra" cores: [citra] systems: [nintendo-3ds] notes: | Citra 3DS emulator. Upstream taken down March 2024 (Nintendo lawsuit). Mirror: https://github.com/citra-mirror/citra - Data dir: {save_dir}/Citra/ or {system_dir}/Citra/ - ref: src/citra_libretro/citra_libretro.cpp:460-466 + Data dir: {save_dir}/Citra/ under the default "LibRetro Default" option + citra_use_libretro_save_path, {system_dir}/Citra/ only when the frontend + gives no save directory. sysdata/ sits under it. + ref: src/citra_libretro/citra_libretro.cpp:157, src/citra_libretro/citra_libretro.cpp:445-466, + src/citra_libretro/environment.cpp:139, src/common/file_util.cpp:855 + + The core reports library_name "Citra". + ref: src/citra_libretro/environment.cpp:180 HLE for most services. Embedded open-source replacements for shared font, Mii data, country list, and bad word list compiled into the binary. @@ -25,6 +32,7 @@ notes: | files: - name: aes_keys.txt path: "Citra/sysdata/aes_keys.txt" + load_from: {libretro: save_dir} system: nintendo-3ds description: "AES encryption keys" required: false @@ -33,6 +41,7 @@ files: - name: boot9.bin path: "Citra/sysdata/boot9.bin" + load_from: {libretro: save_dir} system: nintendo-3ds description: "ARM9 bootrom" required: false @@ -43,6 +52,7 @@ files: - name: shared_font.bin path: "Citra/sysdata/shared_font.bin" + load_from: {libretro: save_dir} system: nintendo-3ds description: "system shared font (legacy format)" required: false @@ -52,6 +62,7 @@ files: - name: seeddb.bin path: "Citra/sysdata/seeddb.bin" + load_from: {libretro: save_dir} system: nintendo-3ds description: "game seed database" required: false diff --git a/emulators/citra2018.yml b/emulators/citra2018.yml index f35e6def..21a9237a 100644 --- a/emulators/citra2018.yml +++ b/emulators/citra2018.yml @@ -7,6 +7,7 @@ profiled_date: "2026-03-23" source_commit: "95e2f06c179c8daf44fa344c206f549cf332d21b" core_version: "Git" display_name: "Nintendo - 3DS (Citra 2018)" +library_name: "Citra2018" cores: [citra2018] systems: - nintendo-3ds @@ -24,6 +25,7 @@ notes: | files: - name: aes_keys.txt path: "Citra/sysdata/aes_keys.txt" + load_from: save_dir system: nintendo-3ds required: false note: "AES encryption keys for decrypting 3DS content" @@ -31,6 +33,7 @@ files: - name: shared_font.bin path: "Citra/sysdata/shared_font.bin" + load_from: save_dir system: nintendo-3ds required: false hle_fallback: true diff --git a/emulators/citra_canary.yml b/emulators/citra_canary.yml index a4647da5..4acc1471 100644 --- a/emulators/citra_canary.yml +++ b/emulators/citra_canary.yml @@ -4,9 +4,11 @@ core_classification: community_fork source: "https://github.com/libretro/citra" upstream: "https://github.com/citra-emu/citra" profiled_date: "2026-03-23" -source_commit: "a0483e9abe8134ae6b290cdca7d49cb77689f05b" +source_commit: "5401990a9be46e4497abc92db3d5f2042674303d" +source_branch: canary core_version: "Git" display_name: "Nintendo - 3DS (Citra Canary/Experimental)" +library_name: "Citra Canary" cores: [citra_canary] systems: - nintendo-3ds @@ -18,8 +20,23 @@ notes: | Upstream citra-emu/citra taken down March 2024 (Nintendo lawsuit). Mirror: https://github.com/citra-mirror/citra - Data dir: {system_dir}/Citra/sysdata/ - ref: src/citra_libretro/citra_libretro.cpp:305-314 + The buildbot builds citra_canary from the canary branch of libretro/citra + (libretro-super recipes/windows/cores-windows-x64_seh-noccache). + + Under the default option citra_use_libretro_save_path the core points the + root and user directories at {save_dir}/Citra ({system_dir}/Citra without a + save directory), but GetUserPath fills sysdata/ on its first call, before + that, and the UserDir case never moves it. aes_keys.txt and + shared_font.bin are read from the host's Citra data directory: user/sysdata/ + beside the working directory when ./user exists, else + $XDG_DATA_HOME/citra-emu/sysdata/ (Linux) or user/sysdata/ beside the + executable, else %APPDATA%/Citra/sysdata/ (Windows). Neither the system nor + the save directory of the frontend. + ref: src/citra_libretro/citra_libretro.cpp:295-316, src/common/file_util.cpp:674-736, + src/common/common_paths.h:16-38 + + The core reports library_name "Citra Canary". + ref: src/citra_libretro/environment.cpp:131 Embedded open-source replacements for shared font, country list, bad word list. ref: src/core/file_sys/archive_ncch.cpp:142-147 @@ -28,14 +45,16 @@ notes: | files: - name: aes_keys.txt - path: "Citra/sysdata/aes_keys.txt" + path: "sysdata/aes_keys.txt" + load_from: data_dir system: nintendo-3ds required: false note: "AES encryption keys for decrypting 3DS content" source_ref: "src/core/hw/aes/key.cpp:71-131" - name: shared_font.bin - path: "Citra/sysdata/shared_font.bin" + path: "sysdata/shared_font.bin" + load_from: data_dir system: nintendo-3ds required: false hle_fallback: true diff --git a/emulators/dolphin.yml b/emulators/dolphin.yml index de95c334..f881896d 100644 --- a/emulators/dolphin.yml +++ b/emulators/dolphin.yml @@ -9,6 +9,7 @@ source_commit: "4d23cf151640eb810cb1b8e9d9fc922cf59c0b87" upstream_commit: "f5dfb7e3d36ce24551ed0bb886b79f3f192dac9d" core_version: "Git" display_name: "Nintendo - GameCube / Wii (Dolphin)" +library_name: "dolphin-emu" cores: - dolphin - "dolphin-gui" @@ -139,7 +140,8 @@ files: # Used by integrated mGBA core for GameCube-GBA connectivity. # Loaded from User/GBA/gba_bios.bin (no Sys fallback). - name: "gba_bios.bin" - path: "GBA/gba_bios.bin" + path: "User/GBA/gba_bios.bin" + standalone_path: "GBA/gba_bios.bin" load_from: libretro: save_dir required: false @@ -152,7 +154,8 @@ files: # Not typically user-supplied, but needed for full Wii functionality. - name: "SYSCONF" - path: "Wii/shared2/sys/SYSCONF" + path: "User/Wii/shared2/sys/SYSCONF" + standalone_path: "Wii/shared2/sys/SYSCONF" load_from: libretro: save_dir required: false @@ -161,7 +164,8 @@ files: source_ref: "upstream Source/Core/Common/CommonPaths.h:118, source Source/Core/Common/FileUtil.cpp:905" - name: "setting.txt" - path: "Wii/title/00000001/00000002/data/setting.txt" + path: "User/Wii/title/00000001/00000002/data/setting.txt" + standalone_path: "Wii/title/00000001/00000002/data/setting.txt" load_from: libretro: save_dir size: 256 @@ -188,7 +192,8 @@ files: # -- Wii SD Card Image -- - name: "WiiSD.raw" - path: "Load/WiiSD.raw" + path: "User/Load/WiiSD.raw" + standalone_path: "Load/WiiSD.raw" load_from: libretro: save_dir required: false @@ -229,7 +234,8 @@ files: # -- NAND Certificates (auto-extracted) -- - name: "clientca.pem" - path: "Wii/clientca.pem" + path: "User/Wii/clientca.pem" + standalone_path: "Wii/clientca.pem" load_from: libretro: save_dir required: false @@ -238,7 +244,8 @@ files: source_ref: "source Source/Core/DiscIO/NANDImporter.cpp:220-304" - name: "clientcakey.pem" - path: "Wii/clientcakey.pem" + path: "User/Wii/clientcakey.pem" + standalone_path: "Wii/clientcakey.pem" load_from: libretro: save_dir required: false @@ -247,7 +254,8 @@ files: source_ref: "source Source/Core/DiscIO/NANDImporter.cpp:256" - name: "rootca.pem" - path: "Wii/rootca.pem" + path: "User/Wii/rootca.pem" + standalone_path: "Wii/rootca.pem" load_from: libretro: save_dir required: false diff --git a/emulators/fbalpha2012.yml b/emulators/fbalpha2012.yml index 3fe7320c..73c886a8 100644 --- a/emulators/fbalpha2012.yml +++ b/emulators/fbalpha2012.yml @@ -7,6 +7,7 @@ profiled_date: "2026-03-23" source_commit: "0ce31536bef3162fe7e69ff5f555334ec4913cef" core_version: "v0.2.97.29" display_name: "Arcade (FB Alpha 2012)" +library_name: "FB Alpha 2012" cores: - fbalpha2012 - fbalpha @@ -55,6 +56,7 @@ notes: | files: - name: "hiscore.dat" + path: "hiscore.dat" description: "High score persistence database" load_from: save_dir required: false diff --git a/emulators/fbalpha2012_cps3.yml b/emulators/fbalpha2012_cps3.yml index 5e835ce7..ed6d85bc 100644 --- a/emulators/fbalpha2012_cps3.yml +++ b/emulators/fbalpha2012_cps3.yml @@ -7,6 +7,7 @@ profiled_date: "2026-03-23" source_commit: "57f8015c2e0cdebcf42d3add2c314bb7448f9421" core_version: "v0.2.97.29" display_name: "Arcade (FB Alpha 2012 CPS-3)" +library_name: "FB Alpha 2012 CPS-3" cores: - fbalpha2012_cps3 systems: @@ -53,6 +54,7 @@ notes: | files: - name: "hiscore.dat" + path: "hiscore.dat" description: "High score persistence database" load_from: save_dir required: false diff --git a/emulators/fsuae.yml b/emulators/fsuae.yml index a5fd235f..14c43303 100644 --- a/emulators/fsuae.yml +++ b/emulators/fsuae.yml @@ -8,6 +8,7 @@ source_commit: "089bb69207fe8fa5eec0006d1d759fb6426f4027" upstream_commit: "f362278ccd4c60991caac3b4d240d4a3f751bea2" core_version: "v5.0.7" display_name: "Commodore - Amiga (FS-UAE)" +library_name: "" cores: - fsuae found_by: content @@ -19,7 +20,15 @@ notes: | Standalone: scans --kickstarts_dir for .rom/.bin files (default: Documents/FS-UAE/Kickstarts/). Batocera overrides to bios/amiga/ via --kickstarts_dir (batocera fsuaePaths.py:8, batocera fsuaeGenerator.py:68). - Libretro port: scans save_dir/fsuae/Kickstarts/ (frozen at v2.7.15). + Libretro port: scans save_dir/fsuae/Kickstarts/ (frozen at v2.7.15), and + reads rom.key there. The base directory is /fsuae, the build + leaving USE_FSUAEDIRS off. The core reports an empty library_name, for + which RetroArch adds no folder of its own. + ref: source Makefile.libretro:125-126, source sources/src/fs-uae/paths.c:133-138, + source sources/src/fs-uae/paths.c:196-198, source sources/src/fs-uae/paths.c:258-265, + source sources/src/fs-uae/config.c:128, source libretro/libretro.c:194-206, + source libretro/libretro.c:575 + Identification by SHA-1 checksum, not filename (rommgr.cpp:92-151, od-fs/python/fsuae/roms/romservice.py:78-91). AROS kickstart (1 MB) compiled into binary as fallback for all models (rommgr.cpp:112). rom.key searched in kickstart dir and multiple fallback paths (rommgr.cpp:1397-1498). @@ -34,6 +43,9 @@ notes: | files: - name: "amiga-os-130.rom" + path: "fsuae/Kickstarts/amiga-os-130.rom" + standalone_path: "amiga-os-130.rom" + load_from: {libretro: save_dir} system: amiga required: false hle_fallback: true @@ -45,6 +57,9 @@ files: source_ref: "upstream rommgr.cpp:150-151 (id=6, ROMTYPE_KICK)" - name: "amiga-os-204.rom" + path: "fsuae/Kickstarts/amiga-os-204.rom" + standalone_path: "amiga-os-204.rom" + load_from: {libretro: save_dir} system: amiga required: false hle_fallback: true @@ -56,6 +71,9 @@ files: source_ref: "upstream rommgr.cpp:158-159 (id=7, ROMTYPE_KICK)" - name: "amiga-os-205.rom" + path: "fsuae/Kickstarts/amiga-os-205.rom" + standalone_path: "amiga-os-205.rom" + load_from: {libretro: save_dir} system: amiga required: false hle_fallback: true @@ -67,6 +85,9 @@ files: source_ref: "upstream rommgr.cpp:164-165 (id=10, ROMTYPE_KICK)" - name: "amiga-os-120.rom" + path: "fsuae/Kickstarts/amiga-os-120.rom" + standalone_path: "amiga-os-120.rom" + load_from: {libretro: save_dir} system: amiga required: false hle_fallback: true @@ -78,6 +99,9 @@ files: source_ref: "upstream rommgr.cpp:148-149 (id=5, ROMTYPE_KICK)" - name: "amiga-os-310-a1200.rom" + path: "fsuae/Kickstarts/amiga-os-310-a1200.rom" + standalone_path: "amiga-os-310-a1200.rom" + load_from: {libretro: save_dir} system: amiga required: false hle_fallback: true @@ -89,6 +113,9 @@ files: source_ref: "upstream rommgr.cpp:185-186 (id=15, ROMTYPE_KICK)" - name: "amiga-os-310-a3000.rom" + path: "fsuae/Kickstarts/amiga-os-310-a3000.rom" + standalone_path: "amiga-os-310-a3000.rom" + load_from: {libretro: save_dir} system: amiga required: false hle_fallback: true @@ -100,6 +127,9 @@ files: source_ref: "upstream rommgr.cpp:189-190 (id=61, ROMTYPE_KICK)" - name: "amiga-os-310-a4000.rom" + path: "fsuae/Kickstarts/amiga-os-310-a4000.rom" + standalone_path: "amiga-os-310-a4000.rom" + load_from: {libretro: save_dir} system: amiga required: false hle_fallback: true @@ -111,6 +141,9 @@ files: source_ref: "upstream rommgr.cpp:195-196 (id=16, ROMTYPE_KICK)" - name: "amiga-os-310-cd32.rom" + path: "fsuae/Kickstarts/amiga-os-310-cd32.rom" + standalone_path: "amiga-os-310-cd32.rom" + load_from: {libretro: save_dir} system: amiga required: false hle_fallback: true @@ -122,6 +155,9 @@ files: source_ref: "upstream rommgr.cpp:312-313 (id=18, ROMTYPE_KICKCD32)" - name: "amiga-ext-310-cd32.rom" + path: "fsuae/Kickstarts/amiga-ext-310-cd32.rom" + standalone_path: "amiga-ext-310-cd32.rom" + load_from: {libretro: save_dir} system: amiga required: false size: 524288 @@ -132,6 +168,9 @@ files: source_ref: "upstream rommgr.cpp:314-315 (id=19, ROMTYPE_EXTCD32)" - name: "cd32fmv.rom" + path: "fsuae/Kickstarts/cd32fmv.rom" + standalone_path: "cd32fmv.rom" + load_from: {libretro: save_dir} system: amiga required: false size: 262144 @@ -142,6 +181,9 @@ files: source_ref: "upstream rommgr.cpp:323-326 (id=23/74, ROMTYPE_CD32CART)" - name: "amiga-ext-130-cdtv.rom" + path: "fsuae/Kickstarts/amiga-ext-130-cdtv.rom" + standalone_path: "amiga-ext-130-cdtv.rom" + load_from: {libretro: save_dir} system: amiga required: false size: 262144 @@ -152,6 +194,9 @@ files: source_ref: "upstream rommgr.cpp:328-329 (id=20, ROMTYPE_EXTCDTV)" - name: "rom.key" + path: "fsuae/Kickstarts/rom.key" + standalone_path: "rom.key" + load_from: {libretro: save_dir} system: amiga found_by: name required: false diff --git a/emulators/ishiiruka.yml b/emulators/ishiiruka.yml index f558a95b..1c4f4d24 100644 --- a/emulators/ishiiruka.yml +++ b/emulators/ishiiruka.yml @@ -8,6 +8,7 @@ source_commit: "f228bde5fbf4861ba749a229803addcd6238663f" upstream_commit: "cba6d7279b44894297d8c1dde1effdbba3605c32" core_version: "Git" display_name: "Nintendo - GameCube / Wii (Ishiiruka)" +library_name: "Ishiiruka" cores: - ishiiruka systems: [nintendo-gamecube, nintendo-wii] @@ -131,7 +132,8 @@ files: # -- Wii System Files -- # Auto-generated/managed by Dolphin's Wii emulation. - name: "SYSCONF" - path: "Wii/shared2/sys/SYSCONF" + path: "User/Wii/shared2/sys/SYSCONF" + standalone_path: "Wii/shared2/sys/SYSCONF" load_from: libretro: save_dir required: false @@ -140,7 +142,8 @@ files: source_ref: "source Source/Core/Common/CommonPaths.h:59, 95, source Source/Core/Common/SysConf.cpp:40" - name: "setting.txt" - path: "Wii/title/00000001/00000002/data/setting.txt" + path: "User/Wii/title/00000001/00000002/data/setting.txt" + standalone_path: "Wii/title/00000001/00000002/data/setting.txt" load_from: libretro: save_dir size: 256 @@ -151,7 +154,8 @@ files: # -- Wii SD Card Image -- - name: "sd.raw" - path: "Wii/sd.raw" + path: "User/Wii/sd.raw" + standalone_path: "Wii/sd.raw" load_from: libretro: save_dir required: false @@ -179,28 +183,34 @@ files: # -- NAND Certificates (auto-extracted) -- - name: "clientca.pem" - path: "Wii/clientca.pem" + path: "User/Wii/clientca.pem" + standalone_path: "Wii/clientca.pem" + load_from: + libretro: save_dir required: false hle_fallback: true - mode: standalone note: "SSL client certificate. Auto-extracted from IOS13 content during NAND import" - source_ref: "source Source/Core/DiscIO/NANDImporter.cpp:199-264" + source_ref: "source Source/Core/DiscIO/NANDImporter.cpp:199-264, source Source/Core/Core/IOS/Network/SSL.cpp:339-341, source Source/Core/Core/WiiRoot.cpp:73-76" - name: "clientcakey.pem" - path: "Wii/clientcakey.pem" + path: "User/Wii/clientcakey.pem" + standalone_path: "Wii/clientcakey.pem" + load_from: + libretro: save_dir required: false hle_fallback: true - mode: standalone note: "SSL client private key. Auto-extracted from IOS13 content during NAND import" - source_ref: "upstream Source/Core/DiscIO/NANDImporter.cpp:235" + source_ref: "upstream Source/Core/DiscIO/NANDImporter.cpp:235, source Source/Core/Core/IOS/Network/SSL.cpp:339-343, source Source/Core/Core/WiiRoot.cpp:73-76" - name: "rootca.pem" - path: "Wii/rootca.pem" + path: "User/Wii/rootca.pem" + standalone_path: "Wii/rootca.pem" + load_from: + libretro: save_dir required: false hle_fallback: true - mode: standalone note: "SSL root CA certificate. Auto-extracted from IOS13 content during NAND import" - source_ref: "upstream Source/Core/DiscIO/NANDImporter.cpp:236" + source_ref: "upstream Source/Core/DiscIO/NANDImporter.cpp:236, source Source/Core/Core/IOS/Network/SSL.cpp:404-406, source Source/Core/Core/WiiRoot.cpp:73-76" notes: hle_available: true diff --git a/emulators/panda3ds.yml b/emulators/panda3ds.yml index efe1a52d..19975660 100644 --- a/emulators/panda3ds.yml +++ b/emulators/panda3ds.yml @@ -8,6 +8,7 @@ profiled_date: "2026-03-24" source_commit: "3787358bdae41d5532ccd00c8998a527ae949949" core_version: "Git" display_name: "Nintendo - 3DS (Panda3DS)" +library_name: "Panda3DS" cores: [panda3ds] systems: [nintendo-3ds] @@ -19,13 +20,19 @@ notes: | option panda3ds_dsp_emulation). System archives (shared font, bad word list, country list, mii data) are compiled into the binary via cmrc. The libretro core uses the save directory, not RetroArch's system - directory. Files go under /Emulator Files/sysdata/. + directory. Files go under /Emulator Files/sysdata/, under the + working directory when the frontend gives no save directory. The core + reports library_name "Panda3DS". Standalone reads them from Emulator + Files/sysdata/ below its SDL pref path. + ref: src/libretro_core.cpp:29-31, src/libretro_core.cpp:233, src/libretro_core.cpp:277-281, + src/emulator.cpp:196-208 The .info declares firmware_count=0. is_experimental = true. files: - name: "aes_keys.txt" path: "Emulator Files/sysdata/aes_keys.txt" - load_from: save_dir + standalone_path: "Emulator Files/sysdata/aes_keys.txt" + load_from: {libretro: save_dir, standalone: data_dir} description: "AES encryption keys for decrypting encrypted ROMs" required: false source_ref: "src/emulator.cpp:229,237-238, src/core/crypto/aes_engine.cpp:13-92" @@ -38,7 +45,8 @@ files: - name: "seeddb.bin" path: "Emulator Files/sysdata/seeddb.bin" - load_from: save_dir + standalone_path: "Emulator Files/sysdata/seeddb.bin" + load_from: {libretro: save_dir, standalone: data_dir} description: "Seed database for seed-encrypted games" required: false source_ref: "src/emulator.cpp:230,241-242, src/core/loader/ncch.cpp:78-93" diff --git a/emulators/stella.yml b/emulators/stella.yml index b70023c9..b00b3d69 100644 --- a/emulators/stella.yml +++ b/emulators/stella.yml @@ -6,6 +6,7 @@ profiled_date: "2026-10-21" source_commit: "2c3d7023e9136f75c789803b44f119d8749dc104" core_version: "8.0_pre" display_name: "Atari - 2600 (Stella)" +library_name: "Stella" cores: - stella - "STELLASA" @@ -45,42 +46,56 @@ notes: | files: - name: KVS1.WAV + path: stella/KVS1.WAV + standalone_path: KVS1.WAV description: "KidVid Voice Module audio tape 1 (Smurfs Save the Day)" required: false load_from: {libretro: save_dir, standalone: config_dir} category: game_data source_ref: "src/emucore/KidVid.cxx:246-248, src/emucore/KidVid.cxx:255-268" - name: KVS2.WAV + path: stella/KVS2.WAV + standalone_path: KVS2.WAV description: "KidVid Voice Module audio tape 2 (Smurfs Save the Day)" required: false load_from: {libretro: save_dir, standalone: config_dir} category: game_data source_ref: "src/emucore/KidVid.cxx:246-248, src/emucore/KidVid.cxx:255-268" - name: KVS3.WAV + path: stella/KVS3.WAV + standalone_path: KVS3.WAV description: "KidVid Voice Module audio tape 3 (Smurfs Save the Day)" required: false load_from: {libretro: save_dir, standalone: config_dir} category: game_data source_ref: "src/emucore/KidVid.cxx:246-248, src/emucore/KidVid.cxx:255-268" - name: KVB1.WAV + path: stella/KVB1.WAV + standalone_path: KVB1.WAV description: "KidVid Voice Module audio tape 1 (Berenstain Bears)" required: false load_from: {libretro: save_dir, standalone: config_dir} category: game_data source_ref: "src/emucore/KidVid.cxx:246-248, src/emucore/KidVid.cxx:255-268" - name: KVB2.WAV + path: stella/KVB2.WAV + standalone_path: KVB2.WAV description: "KidVid Voice Module audio tape 2 (Berenstain Bears)" required: false load_from: {libretro: save_dir, standalone: config_dir} category: game_data source_ref: "src/emucore/KidVid.cxx:246-248, src/emucore/KidVid.cxx:255-268" - name: KVB3.WAV + path: stella/KVB3.WAV + standalone_path: KVB3.WAV description: "KidVid Voice Module audio tape 3 (Berenstain Bears)" required: false load_from: {libretro: save_dir, standalone: config_dir} category: game_data source_ref: "src/emucore/KidVid.cxx:246-248, src/emucore/KidVid.cxx:255-268" - name: KVSHARED.WAV + path: stella/KVSHARED.WAV + standalone_path: KVSHARED.WAV description: "KidVid Voice Module shared audio samples" required: false load_from: {libretro: save_dir, standalone: config_dir} diff --git a/emulators/trident.yml b/emulators/trident.yml index 5580b824..0ffd332b 100644 --- a/emulators/trident.yml +++ b/emulators/trident.yml @@ -7,6 +7,7 @@ upstream: https://github.com/wheremyfoodat/Panda3DS profiled_date: "2026-03-25" source_commit: "b97b0befa326105e181838bc6fa11c546de8294d" core_version: git +library_name: "Trident" cores: - trident @@ -21,10 +22,15 @@ notes: >- the game ROM at runtime, not from an external file. DSP modes: HLE (default), LLE (Teakra), Null. Files are resolved from the RetroArch save directory - (/Emulator Files/sysdata/), not the system directory. + (/Emulator Files/sysdata/), not the system directory, or from + the working directory when the frontend gives none. The core reports + library_name "Trident". The wrapper is vendor/Panda3DS at 69095ee6 + (DanAlexMorton/Panda3DS src/libretro_core.cpp:30, 243, 280-285). files: - name: aes_keys.txt + path: "Emulator Files/sysdata/aes_keys.txt" + load_from: save_dir description: AES encryption keys for decrypting encrypted 3DS ROMs required: false source_ref: >- @@ -33,6 +39,8 @@ files: src/core/loader/ncch.cpp:151-164 (panic if encrypted ROM loaded without keys) - name: seeddb.bin + path: "Emulator Files/sysdata/seeddb.bin" + load_from: save_dir description: seed database for seed-encrypted 3DS games required: false source_ref: >-