mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-11-12 21:13:49 -06:00
feat: profile the xenia-edge system files
This commit is contained in:
1 parent
e6905899a2
commit
b9a14e2acd
1 file changed
+108
-47
+108
-47
@@ -6,9 +6,9 @@ source:
|
||||
libretro: "https://git.libretro.com/libretro/xenia-edge-libretro"
|
||||
upstream: "https://github.com/has207/xenia-edge"
|
||||
source_commit:
|
||||
standalone: "71804222514022ce80b757ca79c4ddb2dcf4a06c"
|
||||
libretro: "f23c14c717ef274516f29c9b5e97d6a9db28643d"
|
||||
profiled_date: "2026-10-27"
|
||||
standalone: "c519cb405d3247a5d92e7b520d6c72705efa62f5"
|
||||
libretro: "9637f45c480c711de0dd8a041d1ba754192ec73b"
|
||||
profiled_date: "2026-11-09"
|
||||
core_version:
|
||||
standalone: "7180422"
|
||||
libretro: "8dc77b0"
|
||||
@@ -32,15 +32,15 @@ systems:
|
||||
data_root:
|
||||
windows:
|
||||
path: "%USERPROFILE%/Documents/Xenia"
|
||||
source_ref: "src/xenia/app/xenia_main.cc:533-547, src/xenia/base/filesystem_win.cc:52-61"
|
||||
source_ref: "src/xenia/app/xenia_main.cc:538-552, src/xenia/base/filesystem_win.cc:52-61"
|
||||
note: "portable.txt beside the executable, the portable flag or the storage_root setting replaces it"
|
||||
macos:
|
||||
path: "$XDG_DATA_HOME/Xenia, else ~/.local/share/Xenia"
|
||||
source_ref: "src/xenia/app/xenia_main.cc:533-547, src/xenia/base/filesystem_posix.cc:81-107"
|
||||
source_ref: "src/xenia/app/xenia_main.cc:538-552, src/xenia/base/filesystem_posix.cc:81-107"
|
||||
note: "portable.txt beside the executable, the portable flag or the storage_root setting replaces it"
|
||||
linux:
|
||||
path: "$XDG_DATA_HOME/Xenia, else ~/.local/share/Xenia"
|
||||
source_ref: "src/xenia/app/xenia_main.cc:533-547, src/xenia/base/filesystem_posix.cc:81-107"
|
||||
source_ref: "src/xenia/app/xenia_main.cc:538-552, src/xenia/base/filesystem_posix.cc:81-107"
|
||||
note: "portable.txt beside the executable, the portable flag or the storage_root setting replaces it"
|
||||
|
||||
notes: |
|
||||
@@ -56,61 +56,78 @@ notes: |
|
||||
mirrored as WizzardSK/xenia-libretro on GitHub. It carries the xenia-edge
|
||||
tree merged from edge at 8dc77b09, the release named in upstream.version and
|
||||
reported as library_version (libretro/CMakeLists.txt:74-78,
|
||||
libretro/libretro.cpp:1906-1909). The core is one shared library linked from
|
||||
libretro/libretro.cpp:2027-2030). The core is one shared library linked from
|
||||
the emulator's static libraries, without the wxWidgets app
|
||||
(libretro/CMakeLists.txt:1-13, 104-130), and the top-level CMakeLists.txt
|
||||
(libretro/CMakeLists.txt:1-13, 104-129), and the top-level CMakeLists.txt
|
||||
defines XENIA_LIBRETRO for every target of the tree. Everything it keeps
|
||||
is under <system>/Xenia-Edge: storage root, content, cache, xenia.log, and
|
||||
xbl_profilename.txt, which it creates with "Player" and reads to name the
|
||||
profile it creates (libretro/libretro.cpp:1476-1503, 1526-1546). The frame
|
||||
profile it creates (libretro/libretro.cpp:1496-1523, 1615-1648). The frame
|
||||
rate unlock list is compiled into the core and written there when missing
|
||||
(libretro/CMakeLists.txt:15-33, libretro/libretro_gamedb.cc:36-51), and the
|
||||
bundled patches of the running title are written to Xenia-Edge/patches with
|
||||
their core option state before Xenia reads that folder at boot
|
||||
(libretro/libretro.cpp:791-798). Apart from XeFu under Xenia-Edge/xefu, it
|
||||
(libretro/libretro.cpp:794-801). Apart from XeFu under Xenia-Edge/xefu, it
|
||||
reads no firmware, font or runtime from disk. Vulkan comes from the frontend's instance
|
||||
(libretro/libretro_vk_presenter.cc:42-62), Direct3D 12 runs on the system
|
||||
runtime with the D3D12Core.dll check of d3d12_provider.cc compiled out under
|
||||
XENIA_LIBRETRO, and the download prompts for missing runtimes are stubbed
|
||||
out (libretro/libretro_headless_stubs.cc:22-27).
|
||||
The Windows build embeds bin/x64/dxil.dll of the DXC release as a resource
|
||||
(libretro/CMakeLists.txt:35-51, .ci/build-windows-cross.sh:61-80) and writes
|
||||
(libretro/CMakeLists.txt:35-51, .ci/build-windows-cross.sh:66-85) and writes
|
||||
it to Xenia-Edge/D3D12/dxil.dll when the copy there differs in size, then
|
||||
points d3d12_runtime_path at that folder, where the D3D12 provider loads it
|
||||
by full path (libretro/libretro.cpp:1437-1462, 1552-1559).
|
||||
by full path (libretro/libretro.cpp:1457-1482, 1654-1661).
|
||||
|
||||
An Xbox 360 title reads no system file. xboxkrnl, xam and xbdm are C++ HLE modules
|
||||
registered at startup (src/xenia/emulator.cc:414-423), the XEX2 retail and devkit AES
|
||||
keys are constant arrays in the binary (src/xenia/cpu/xex_module.cc:66-71), and every
|
||||
An Xbox 360 game reads no system file. xboxkrnl, xam and xbdm are C++ HLE modules
|
||||
registered at startup (src/xenia/emulator.cc:437-446), the XEX2 retail and devkit AES
|
||||
keys are constant arrays in the binary (src/xenia/cpu/xex_module.cc:64-69), and every
|
||||
XConfig setting is synthesised from cvars and constants by BuildSetting
|
||||
rather than read from a flash image, the console MAC address being drawn at
|
||||
random behind a fixed vendor prefix for each title
|
||||
(src/xenia/kernel/xconfig.cc:94-256, 269-289). When the
|
||||
launched title is itself a system title the kernel resolves xam.xex, then
|
||||
$flash_xam.xex, through the guest filesystem under the \SystemRoot symlink
|
||||
pointing at that title's own directory (src/xenia/emulator.cc:825-845). That is a
|
||||
companion module inside the dump the user launched, not a host-side lookup.
|
||||
rather than read from a flash image. The console MAC address is derived from
|
||||
the signed-in profile or the machine id behind a fixed vendor prefix, and is
|
||||
drawn at random only when neither exists
|
||||
(src/xenia/kernel/xconfig.cc:99-270, 283-318). A launched folder that holds
|
||||
its own xam.xex or $flash_xam.xex is that title's flash
|
||||
(src/xenia/emulator.cc:865-874, 2512-2549). That is a companion module
|
||||
inside the dump the user launched, not a host-side lookup.
|
||||
|
||||
System files are optional. The installed flash, system extended and system
|
||||
auxiliary partitions are read from system/flash, system/sysext and
|
||||
system/sysaux under the storage root when those folders exist, and the flash
|
||||
becomes \SystemRoot and media:, where titles find the system fonts
|
||||
(src/xenia/emulator.h:98-102, src/xenia/emulator.cc:2657-2677,
|
||||
src/xenia/emulator.cc:2512-2521). The libretro core mounts the same folders
|
||||
under Xenia-Edge/system but has no installer. They hold dash.xex, which Start
|
||||
Dashboard runs (src/xenia/app/emulator_window.cc:2027-2033), bootanim.xex,
|
||||
played before it (src/xenia/emulator.cc:2551-2560), and the
|
||||
xna_titlelauncher.xex every indie game runs through
|
||||
(src/xenia/emulator.cc:1109-1157). The standalone's Tools > Install System
|
||||
Files builds them from a USB system update zip, downloaded from Microsoft or
|
||||
picked by the user, and fills a flash font the update only patches with one
|
||||
built from the bundled fonts (src/xenia/app/emulator_window.cc:1251-1258,
|
||||
src/xenia/ui/system_files_installer_wx.cc:111-131,
|
||||
src/xenia/ui/system_files_installer_wx.cc:384-499).
|
||||
|
||||
Original Xbox games, as an .xbe, a disc image whose root holds one or an Xbox
|
||||
Original package, start through XeFu, the console's own backward
|
||||
compatibility emulator (src/xenia/emulator.cc:748-768). Its files come from
|
||||
compatibility emulator (src/xenia/emulator.cc:794-821). Its files come from
|
||||
the Compatibility folder of an Xbox 360 hard drive and go in the xefu folder
|
||||
under the storage root, or the folder the xefu_path cvar names
|
||||
(src/xenia/emulator.cc:151-165, 861-863). When xbox.xex is missing the
|
||||
(src/xenia/emulator.cc:171-185, 897-899). When xbox.xex is missing the
|
||||
launch fails, the folder is created and the window names the missing file
|
||||
(src/xenia/emulator.cc:886-899, src/xenia/app/emulator_window.cc:2013-2023).
|
||||
(src/xenia/emulator.cc:1067-1080, src/xenia/app/emulator_window.cc:2226-2236).
|
||||
|
||||
The fork's data ships inside the executable. assets/font, the Inter UI font
|
||||
and the M PLUS 1p Japanese font, and assets/icon are linked in by xe_embed_binary_assets and the 33
|
||||
assets/locale catalogues are compiled to .mo at configure time and bundled,
|
||||
with no .mo written next to the binary (src/xenia/ui/CMakeLists.txt:48-76).
|
||||
with no .mo written next to the binary (src/xenia/ui/CMakeLists.txt:51-84).
|
||||
The UI font is read from that buffer with AddFontFromMemoryTTF
|
||||
(src/xenia/ui/imgui_drawer.cc:375-385), Japanese glyphs are merged from the
|
||||
M PLUS 1p buffer on every platform (src/xenia/ui/imgui_drawer.cc:481-498),
|
||||
and xe::EmbeddedBundle decodes the SDL controller
|
||||
mappings (src/xenia/hid/sdl/sdl_input_driver.cc:237-254), the canary game patches
|
||||
(src/xenia/patcher/patch_db.cc:318-324), the game-compatibility master.json
|
||||
(src/xenia/app/game_compat_db.cc:47-58) and the x360db games.json (src/xenia/app/game_title_db.cc:50-60).
|
||||
mappings (src/xenia/hid/sdl/sdl_input_driver.cc:237-254), the canary and edge game patches
|
||||
(src/xenia/patcher/patch_db.cc:352-366), the game-compatibility master.json
|
||||
(src/xenia/app/game_compat_db.cc:47-58) and the x360db games.json (src/xenia/app/game_title_db.cc:53-62).
|
||||
|
||||
Three cvars accept a file and name none by default, so nothing is expected at
|
||||
a fixed path: custom_font_path falls back to the embedded Inter
|
||||
@@ -123,23 +140,23 @@ notes: |
|
||||
(src/xenia/ui/imgui_drawer.cc:396-479, 508-521).
|
||||
|
||||
Everything under the storage root is written by the emulator or dropped in by
|
||||
the user: xenia-edge.config.toml and per-game .config.toml (src/xenia/config.cc:46-49),
|
||||
patches/*.patch.toml read on top of the embedded set (src/xenia/emulator.cc:409,
|
||||
src/xenia/patcher/patch_db.cc:34-52, 60-75) and listed by the patches panel
|
||||
beside the bundled ones (src/xenia/patcher/patch_db.cc:373-397),
|
||||
the user: xenia-edge.config.toml and per-game .config.toml (src/xenia/config.cc:47-50),
|
||||
patches/*.patch.toml read on top of the embedded set (src/xenia/emulator.cc:430,
|
||||
src/xenia/patcher/patch_db.cc:39-57, 65) and listed by the patches panel
|
||||
beside the bundled ones (src/xenia/patcher/patch_db.cc:423-444),
|
||||
plugins/<title id>/plugins.toml behind allow_plugins,
|
||||
which defaults false (src/xenia/patcher/plugin_loader.cc:16-38, 58-73), content
|
||||
(src/xenia/app/xenia_main.cc:572-575), scratch, cache0, cache1, cache and mu
|
||||
(src/xenia/emulator.cc:1655-1723). portable.txt next to the executable
|
||||
(src/xenia/app/xenia_main.cc:577-580), scratch, cache0, cache1, cache and mu
|
||||
(src/xenia/emulator.cc:1935-2003). portable.txt next to the executable
|
||||
keeps the storage root there instead of the user folder
|
||||
(src/xenia/app/xenia_main.cc:533-547).
|
||||
(src/xenia/app/xenia_main.cc:538-552).
|
||||
|
||||
On Windows the Direct3D 12 and Vulkan runtimes are not in the release zip,
|
||||
which holds only the build output (.github/workflows/build.yml:392-402). The
|
||||
which holds only the build output (.github/workflows/build.yml:394-404). The
|
||||
emulator looks for them in D3D12/ and Vulkan/ beside the executable and
|
||||
offers to download pinned archives from Microsoft and LunarG, gated by
|
||||
d3d12_install_missing_runtime, vulkan_install_missing_loader and
|
||||
update_vc_runtime, all default true (src/xenia/ui/redist_installer_wx.cc:51-70). Each
|
||||
update_vc_runtime, all default true (src/xenia/ui/redist_installer_wx.cc:49-68). Each
|
||||
archive is checked against a SHA-256 held in the source before its members
|
||||
are extracted, so the hash covers the archive and never the extracted DLL,
|
||||
which is why no hash is declared on the entries below. The Linux and macOS
|
||||
@@ -155,7 +172,7 @@ files:
|
||||
system: microsoft-xbox-360
|
||||
required: true
|
||||
description: "DXIL signer and validator from DirectX Shader Compiler 1.9.2602.24"
|
||||
source_ref: "src/xenia/ui/d3d12/d3d12_provider.cc:267-291, src/xenia/gpu/d3d12/pipeline_cache.cc:129-137, src/xenia/ui/redist_installer_wx.cc:79-87, 120-122, src/xenia/ui/redist_installer_wx.cc:174-182, src/xenia/ui/redist_installer_wx.cc:585-617"
|
||||
source_ref: "src/xenia/ui/d3d12/d3d12_provider.cc:267-291, src/xenia/gpu/d3d12/pipeline_cache.cc:129-137, src/xenia/ui/redist_installer_wx.cc:77-85, 118-120, src/xenia/ui/redist_installer_wx.cc:172-180, src/xenia/ui/redist_installer_wx.cc:482-514"
|
||||
note: >-
|
||||
The only shader library the backend still needs. Loaded by full path from
|
||||
the D3D12 folder next to the executable, then by plain name from the
|
||||
@@ -163,8 +180,8 @@ files:
|
||||
D3D12/. D3D12 rejects an unsigned shader, so PipelineCache::Initialize
|
||||
stops when IsSignerAvailable() is false and asks for a recent dxil.dll in
|
||||
the D3D12 folder, and that failure propagates to "Failed to setup
|
||||
graphics_system!" (src/xenia/emulator.cc:456-467). Windows defaults to
|
||||
gpu = "d3d12" (src/xenia/emulator.cc:128) and the backend factory
|
||||
graphics_system!" (src/xenia/emulator.cc:479-490). Windows defaults to
|
||||
gpu = "d3d12" (src/xenia/emulator.cc:148) and the backend factory
|
||||
only falls back when D3D12GraphicsSystem::IsAvailable() is false, which
|
||||
tests the D3D12 API itself, not the redistributable. Taken from
|
||||
bin/x64/dxil.dll in dxc_2026_05_27.zip of DirectXShaderCompiler release
|
||||
@@ -180,7 +197,7 @@ files:
|
||||
system: microsoft-xbox-360
|
||||
required: true
|
||||
description: "DirectX 12 Agility SDK 1.619.3 runtime"
|
||||
source_ref: "src/xenia/ui/d3d12/d3d12_provider.cc:293-305, src/xenia/ui/windowed_app_main_win.cc:28-31, src/xenia/ui/redist_installer_wx.cc:88-94, 123-126, src/xenia/ui/redist_installer_wx.cc:627-672"
|
||||
source_ref: "src/xenia/ui/d3d12/d3d12_provider.cc:293-305, src/xenia/ui/windowed_app_main_win.cc:28-31, src/xenia/ui/redist_installer_wx.cc:86-92, 121-124, src/xenia/ui/redist_installer_wx.cc:524-569"
|
||||
note: >-
|
||||
The binary exports D3D12SDKVersion 619 and D3D12SDKPath ".\D3D12\", so
|
||||
d3d12.dll loads it at the first device creation. The provider checks for
|
||||
@@ -197,7 +214,7 @@ files:
|
||||
system: microsoft-xbox-360
|
||||
required: false
|
||||
description: "Direct3D 12 debug layer from Agility SDK 1.619.3"
|
||||
source_ref: "src/xenia/ui/d3d12/d3d12_provider.cc:326-363, src/xenia/ui/redist_installer_wx.cc:127-134, src/xenia/ui/redist_installer_wx.cc:674-719"
|
||||
source_ref: "src/xenia/ui/d3d12/d3d12_provider.cc:326-363, src/xenia/ui/redist_installer_wx.cc:125-132, src/xenia/ui/redist_installer_wx.cc:571-616"
|
||||
note: >-
|
||||
Reached only when d3d12_debug is set, which defaults false
|
||||
(src/xenia/ui/d3d12/d3d12_provider.cc:23). Fetching it re-extracts D3D12Core.dll alongside,
|
||||
@@ -212,7 +229,7 @@ files:
|
||||
system: microsoft-xbox-360
|
||||
required: false
|
||||
description: "Khronos Vulkan loader 1.4.350.0 for the Vulkan backend on Windows"
|
||||
source_ref: "src/xenia/ui/vulkan/vulkan_instance.cc:84-99, src/xenia/ui/redist_installer_wx.cc:96-106, 138-142, src/xenia/ui/redist_installer_wx.cc:721-761"
|
||||
source_ref: "src/xenia/ui/vulkan/vulkan_instance.cc:84-99, src/xenia/ui/redist_installer_wx.cc:94-104, 136-140, src/xenia/ui/redist_installer_wx.cc:618-658"
|
||||
note: >-
|
||||
Read only when the Vulkan backend is selected, and the plain-name load
|
||||
that follows finds the copy GPU drivers install system-wide, so the folder
|
||||
@@ -230,7 +247,7 @@ files:
|
||||
required: false
|
||||
validation: [signature]
|
||||
description: "Microsoft Visual C++ 2015-2022 redistributable installer"
|
||||
source_ref: "src/xenia/app/xenia_main.cc:555-559, src/xenia/ui/redist_installer_wx.cc:144-172, src/xenia/ui/redist_installer_wx.cc:373-403, src/xenia/ui/redist_installer_wx.cc:763-872"
|
||||
source_ref: "src/xenia/app/xenia_main.cc:560-564, src/xenia/ui/redist_installer_wx.cc:142-170, src/xenia/ui/redist_installer_wx.cc:280-310, src/xenia/ui/redist_installer_wx.cc:660-769"
|
||||
note: >-
|
||||
Not loaded by the emulator. The runtime version is read from
|
||||
HKLM\SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x64, and when it is
|
||||
@@ -240,6 +257,50 @@ files:
|
||||
the binary actually links is vcruntime140 and msvcp140, resolved by the OS
|
||||
loader. vc_redist.arm64.exe on ARM64 builds.
|
||||
|
||||
# -- System files, dashboard and indie games --
|
||||
|
||||
- name: "SystemUpdate_17559_USB.zip"
|
||||
mode: standalone
|
||||
path: "system/download/SystemUpdate_17559_USB.zip"
|
||||
system: microsoft-xbox-360
|
||||
required: false
|
||||
size: 115992188
|
||||
sha256: "38885a3ab6b9854fb4fa31d5ddf21a4fddfd4cfb25e219060cfb0c2fb31f208f"
|
||||
description: "Xbox 360 USB system update 17559"
|
||||
source_ref: "src/xenia/ui/system_files_installer_wx.cc:47-63, src/xenia/ui/system_files_installer_wx.cc:341-382, src/xenia/ui/system_files_installer_wx.cc:384-499"
|
||||
note: >-
|
||||
Download && Install fetches it from download.microsoft.com and keeps it
|
||||
only when its SHA-256 matches, and a file already there at this size is
|
||||
reused. Select File installs any USB system update zip whose
|
||||
system.manifest reads. The install writes system/flash, system/sysext and
|
||||
an empty system/sysaux, replacing what is there.
|
||||
|
||||
- name: "system/flash/"
|
||||
type: directory
|
||||
path: "Xenia-Edge/system/flash/"
|
||||
standalone_path: "system/flash/"
|
||||
system: microsoft-xbox-360
|
||||
required: false
|
||||
description: "Flash partition of an installed system update: dash.xex, bootanim.xex, xam.xex and the system fonts"
|
||||
source_ref: "src/xenia/emulator.cc:2657-2677, src/xenia/emulator.cc:2551-2560, src/xenia/app/emulator_window.cc:2027-2033"
|
||||
note: >-
|
||||
Mounted as \Device\Flash when the folder exists. Without it the
|
||||
dashboard and the boot animation are unavailable and system titles fall
|
||||
back to their own folder.
|
||||
|
||||
- name: "system/sysext/"
|
||||
type: directory
|
||||
path: "Xenia-Edge/system/sysext/"
|
||||
standalone_path: "system/sysext/"
|
||||
system: microsoft-xbox-360
|
||||
required: false
|
||||
description: "System extended partition of an installed system update, with system.manifest and xna_titlelauncher.xex"
|
||||
source_ref: "src/xenia/emulator.cc:2657-2677, src/xenia/emulator.cc:1109-1157"
|
||||
note: >-
|
||||
Mounted as \Device\Harddisk0\SystemExtPartition when the folder exists.
|
||||
Indie games run through the xna_titlelauncher.xex system.manifest locates
|
||||
here and do not start without it.
|
||||
|
||||
# -- XeFu, original Xbox games --
|
||||
|
||||
- name: "xbox.xex"
|
||||
@@ -248,7 +309,7 @@ files:
|
||||
system: microsoft-xbox
|
||||
required: true
|
||||
description: "XeFu launcher from the Compatibility folder of an Xbox 360 hard drive"
|
||||
source_ref: "src/xenia/emulator.cc:160-165, src/xenia/emulator.cc:886-899"
|
||||
source_ref: "src/xenia/emulator.cc:180-185, src/xenia/emulator.cc:1067-1080"
|
||||
note: >-
|
||||
Every original Xbox game starts through it, and it picks the XeFu build
|
||||
for the game as the console does. Tested with is_regular_file only. The
|
||||
@@ -262,7 +323,7 @@ files:
|
||||
system: microsoft-xbox
|
||||
required: true
|
||||
description: "Compatibility folder of an Xbox 360 hard drive: xbox.xex, the xefu*.xex builds and xefutitle*.xex"
|
||||
source_ref: "src/xenia/emulator.cc:2301-2310, src/xenia/emulator.cc:2336-2350, src/xenia/cpu/xex_module.cc:995-1019, src/xenia/cpu/xex_module.cc:1118-1143"
|
||||
source_ref: "src/xenia/emulator.cc:2718-2727, src/xenia/emulator.cc:2757-2787, src/xenia/cpu/xex_module.cc:1035-1059, src/xenia/cpu/xex_module.cc:1162-1187"
|
||||
note: >-
|
||||
Mounted as \Device\Harddisk0\SystemPartition\Compatibility, where XeFu
|
||||
also writes its config.bin. xefu2019.xex and the xefu2021 builds import
|
||||
|
||||
Reference in new issue
Block a user