mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-21 03:09:08 -05:00
336 entries for files that arrive with the emulator named no hash, so the collected copy was the only record of which file the release ships. Each now carries the sha1 and size of the copy collected from that emulator's own release, so the profile keeps the file's identity once the copy leaves the collection. Entries whose name is a pattern keep no hash.
186 lines
11 KiB
YAML
186 lines
11 KiB
YAML
emulator: aX360e
|
|
type: standalone
|
|
core_classification: community_fork
|
|
source: "https://github.com/aenu1/ax360e"
|
|
source_branch: main
|
|
upstream: "https://github.com/xenia-canary/xenia-canary"
|
|
profiled_date: "2026-08-11"
|
|
source_commit: "b8c1838f21761ac463724e24105eda97b990e704"
|
|
upstream_commit: "dc561e4df578c903087f9bdf56ff61d9ef9f2a93"
|
|
core_version: "1.18"
|
|
display_name: "Microsoft - Xbox 360 (aX360e)"
|
|
cores:
|
|
- ax360e
|
|
systems:
|
|
- microsoft-xbox-360
|
|
mode: standalone
|
|
|
|
notes: |
|
|
Xbox 360 emulator for Android, distributed on Google Play as aenu.ax360e and
|
|
aenu.ax360e.free. Xenia Canary is vendored whole under
|
|
app/src/main/cpp/xenia-canary at canary_experimental dc561e4d, and a JNI layer
|
|
replaces the desktop front end: its own windowed app and window, AAudio and
|
|
OpenSLES audio systems, an Android input driver, and disc image, disc archive,
|
|
STFS and XEX devices backed by the Storage Access Framework.
|
|
ref: app/src/main/cpp/version.h:4-5,
|
|
app/src/main/cpp/CMakeLists.txt:39-75,
|
|
app/src/main/cpp/ax360e_emu.cpp:616
|
|
|
|
The version is read from the commit subjects, which carry it: 1.18 is the head
|
|
of main, 1.17 the drop before it. The repository has no tags, and the only
|
|
gradle file committed is app/build.gradle.bak, which still declares versionName
|
|
0.14 and is renamed and completed with the signing block at build time.
|
|
ref: ax360e/README.md, app/build.gradle.bak:13-14
|
|
|
|
No Xbox 360 system file is loaded. The kernel, XAM and XBDM are HLE modules
|
|
registered at startup, and every key the emulator needs is a constant in the
|
|
source: the XEX1 retail, XEX1 devkit, XEX2 retail and XEX2 devkit keys tried in
|
|
turn when an image is read, the 0x19 key pair the profile blob is encrypted with, and the
|
|
key vault map XeKeysGetKey answers from. There is no NAND, flash or keyvault
|
|
path.
|
|
ref: app/src/main/cpp/xenia-canary/src/xenia/emulator.cc:316-321,
|
|
app/src/main/cpp/xenia-canary/src/xenia/cpu/xex_module.cc:54-65,
|
|
app/src/main/cpp/xenia-canary/src/xenia/cpu/xex_module.cc:982-994,
|
|
app/src/main/cpp/xenia-canary/src/xenia/kernel/util/crypto_utils.cc:20-31,
|
|
app/src/main/cpp/xenia-canary/src/xenia/kernel/xboxkrnl/xboxkrnl_crypt.cc:169-173
|
|
|
|
The storage root is the external files directory of the package and is passed
|
|
as a launch argument beside the config path and the log path. Content, cache,
|
|
patches and plugins hang off it, the global configuration is
|
|
xenia-canary.config.toml, and per title overrides live in
|
|
custom_config/<title_id>.config.toml. The custom driver directory sits in
|
|
internal storage instead, because the external filesystem cannot carry an
|
|
executable mapping.
|
|
ref: app/src/main/java/aenu/ax360e/Application.java:14-53,
|
|
app/src/main/java/aenu/ax360e/EmulatorActivity.java:164-170,
|
|
app/src/main/cpp/ax360e_emu.cpp:274-317
|
|
|
|
ES-DE starts the emulator with the aenu.intent.action.AX360E action and a
|
|
game_uri extra. The native side dispatches on the name the descriptor resolves
|
|
to: .xex, .iso and .zar each go to their own loader, and anything else is taken
|
|
for an STFS container and launched beside a sibling directory named after the
|
|
file with .data appended.
|
|
ref: app/src/main/AndroidManifest.xml:57-59,
|
|
app/src/main/cpp/ax360e_emu.cpp:555-576
|
|
|
|
A default profile ships with the application. Its Account blob is extracted
|
|
from the assets on first run under XUID E0300000A360E000, and the shipped
|
|
configuration logs that XUID into slot 0. Further profiles are created by the
|
|
emulator itself, which writes the blob it encrypts.
|
|
ref: app/src/main/java/aenu/ax360e/Application.java:30-34,
|
|
app/src/main/java/aenu/ax360e/Application.java:92-96,
|
|
app/src/main/assets/config/default_config.toml:371,
|
|
app/src/main/cpp/xenia-canary/src/xenia/kernel/xam/profile_manager.cc:501-557
|
|
|
|
477 game patches ship inside the APK. The patch database reads the patches
|
|
directory only, so a bundled patch reaches the emulator once the user opens the
|
|
patch dialog for that title and presses Apply, which writes the asset out under
|
|
the same name.
|
|
ref: ax360e/app/src/main/assets/game-patches,
|
|
app/src/main/cpp/xenia-canary/src/xenia/patcher/patch_db.cc:30-56,
|
|
app/src/main/java/aenu/ax360e/Emulator.java:119-149,
|
|
app/src/main/java/aenu/ax360e/MainActivity.java:505-514
|
|
|
|
files:
|
|
- name: "<driver>.zip"
|
|
required: false
|
|
config_key: "Vulkan|vulkan_lib_path"
|
|
unsourceable: "third-party Vulkan driver built for one GPU family, not an emulator artefact"
|
|
description: "Replacement Vulkan driver package"
|
|
note: >-
|
|
Imported through a picker that keeps only names ending in .zip. The archive
|
|
is read whole, meta.json names the library to keep, and a single .so is
|
|
taken instead when no meta.json is present. The .so files and meta.json are
|
|
unpacked into a directory named after the archive, in internal storage. The
|
|
configured path is read before the instance is created and opened through
|
|
adrenotools when it exists, otherwise the system libvulkan.so is used. The
|
|
setting is greyed out on devices without /dev/kgsl-3d0.
|
|
source_ref: "source app/src/main/java/aenu/ax360e/EmulatorSettings.java:732-736, source app/src/main/java/aenu/ax360e/Utils.java:165-230, source app/src/main/cpp/xenia-canary/src/xenia/ui/vulkan/vulkan_instance.cc:34, source app/src/main/cpp/xenia-canary/src/xenia/ui/vulkan/vulkan_instance.cc:71-91, source app/src/main/java/aenu/emulator/Emulator.java:116-122"
|
|
|
|
- name: "<font>.ttf"
|
|
required: false
|
|
config_key: "UI|custom_font_path"
|
|
unsourceable: "any TrueType face the user picks, with no name or version the code expects"
|
|
description: "Replacement face for the overlay text"
|
|
note: >-
|
|
Loaded first when the configured path exists, over the Basic Latin, Latin
|
|
Supplement, Extended Latin, Greek, Cyrillic, punctuation, superscript,
|
|
letterlike and number form ranges. A face that fails to build is cleared and
|
|
the embedded ProggyTiny is used instead, so the absence is covered.
|
|
source_ref: "source app/src/main/cpp/xenia-canary/src/xenia/ui/imgui_drawer.cc:43-45, source app/src/main/cpp/xenia-canary/src/xenia/ui/imgui_drawer.cc:355-394, source app/src/main/cpp/xenia-canary/src/xenia/ui/imgui_drawer.cc:527-534"
|
|
|
|
- name: "<title_id> - <title>.patch.toml"
|
|
required: false
|
|
bundled: true
|
|
description: "Memory patch set for one title"
|
|
note: >-
|
|
Read from the patches directory under the storage root, keeping names that
|
|
open with eight hexadecimal digits and close with .patch.toml. The title id
|
|
and title name fields and a hash node are mandatory, the file is dropped
|
|
without them, and each entry of the patch array is applied only when its
|
|
is_enabled flag is set and the module hash matches. Patching is on by
|
|
default.
|
|
source_ref: "source app/src/main/cpp/xenia-canary/src/xenia/patcher/patch_db.cc:17-18, source app/src/main/cpp/xenia-canary/src/xenia/patcher/patch_db.cc:30-98, source app/src/main/cpp/xenia-canary/src/xenia/patcher/patch_db.h:121-122, source app/src/main/cpp/xenia-canary/src/xenia/patcher/patcher.cc:22-35, source app/src/main/cpp/xenia-canary/src/xenia/emulator.cc:308"
|
|
|
|
- name: plugins.toml
|
|
required: false
|
|
config_key: "General|allow_plugins"
|
|
unsourceable: "per-title manifest written by whoever authors the mod, with no distributed form"
|
|
description: "Plugin manifest for one title"
|
|
note: >-
|
|
Read from plugins/<TITLE_ID>/ under the storage root, where the directory
|
|
name is eight hexadecimal digits. Each entry of the plugin array needs a
|
|
hash node, and an entry without one is skipped. Plugin loading is off by
|
|
default, so nothing under plugins is scanned until it is turned on.
|
|
source_ref: "source app/src/main/cpp/xenia-canary/src/xenia/patcher/plugin_loader.cc:16-21, source app/src/main/cpp/xenia-canary/src/xenia/patcher/plugin_loader.cc:40-127, source app/src/main/cpp/xenia-canary/src/xenia/emulator.cc:324-325"
|
|
|
|
- name: "<plugin>.xex"
|
|
required: false
|
|
unsourceable: "homebrew module built for one title, distributed with the mod it belongs to"
|
|
description: "Plugin module named by a plugin manifest"
|
|
note: >-
|
|
The title directory is mounted as the plugins device and each enabled entry
|
|
whose hash matches the running module is loaded as a user module on its own
|
|
thread. A directory that cannot be mounted is a fatal error.
|
|
source_ref: "source app/src/main/cpp/xenia-canary/src/xenia/patcher/plugin_loader.cc:175-257, source app/src/main/cpp/xenia-canary/src/xenia/emulator.cc:1900-1903"
|
|
|
|
- name: Account
|
|
size: 404
|
|
sha1: 99fc2a4d8107c36ee3075c9cff24872d2a98e37a
|
|
required: false
|
|
bundled: true
|
|
load_from: content_dir
|
|
path: "content/<XUID>/FFFE07D1/00010000/<XUID>/Account"
|
|
description: "Encrypted profile account blob"
|
|
note: >-
|
|
Opened from the mounted profile when a XUID is logged in, and decrypted with
|
|
the 0x19 key, retail first then devkit, against the HMAC the first sixteen
|
|
bytes carry. The application extracts the one it ships for XUID
|
|
E0300000A360E000 on first run, and the emulator writes its own when a
|
|
profile is created.
|
|
source_ref: "source app/src/main/cpp/xenia-canary/src/xenia/kernel/xam/profile_manager.cc:187-229, source app/src/main/cpp/xenia-canary/src/xenia/kernel/xam/profile_manager.cc:39-67, source app/src/main/java/aenu/ax360e/Application.java:30-34, source app/src/main/java/aenu/ax360e/Application.java:92-96"
|
|
|
|
exclusion_note: >
|
|
Six file loads present in the vendored tree are not reached by this build and
|
|
are not listed. The notification sound named by notification_sound_path is
|
|
played inside a XE_PLATFORM_WIN32 block, and the setting is dropped from the
|
|
generated preference screen. tahoma.ttf and msgothic.ttc are read by the
|
|
Windows font paths only. The fontconfig CJK match is compiled out by
|
|
XE_PLATFORM_LINUX && !(XE_PLATFORM_ANDROID || XE_PLATFORM_AX360E), and
|
|
platform.h defines XE_PLATFORM_AX360E for this target. gamecontrollerdb.txt
|
|
belongs to the SDL input driver, and xenia-hid-sdl is absent from the link
|
|
list. portable.txt is read by xenia_main.cc, which is not compiled, the
|
|
application supplying its own windowed app. libSPIRV-Tools-shared.so is loaded
|
|
by the standalone shader compiler and needs VULKAN_SDK in the environment.
|
|
librenderdoc.so is opened with RTLD_NOLOAD, which returns a handle only when
|
|
the library is already mapped and never reads the file.
|
|
ref: app/src/main/cpp/xenia-canary/src/xenia/ui/imgui_guest_notification.cc:49-60,
|
|
app/src/main/cpp/emulator_ax360e.cpp:359,
|
|
app/src/main/cpp/xenia-canary/src/xenia/ui/imgui_drawer.cc:396-427,
|
|
app/src/main/cpp/xenia-canary/src/xenia/ui/imgui_drawer.cc:429-513,
|
|
app/src/main/cpp/xenia-canary/src/xenia/base/platform.h:34-37,
|
|
app/src/main/cpp/CMakeLists.txt:92-132,
|
|
app/src/main/cpp/xenia-canary/src/xenia/app/xenia_main.cc:485,
|
|
app/src/main/cpp/xenia-canary/src/xenia/ui/vulkan/spirv_tools_context.cc:28-37,
|
|
app/src/main/cpp/xenia-canary/src/xenia/ui/renderdoc_api.cc:35-48
|