mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-25 13:19:03 -05:00
Edge e569a1a runs original Xbox games through XeFu (src/xenia/emulator.cc:748-768, 882-895): xbox.xex and the xefu*.xex builds from an Xbox 360 Compatibility folder, read from xefu/ under the storage root. config.bin at emulator.cc:2339 is written by XeFu there. The libretro tree f23c14c carries the same code. Refs recaled to e569a1a.
246 lines
14 KiB
YAML
246 lines
14 KiB
YAML
emulator: Xenia Edge
|
|
type: "standalone + libretro"
|
|
core_classification: community_fork
|
|
source:
|
|
standalone: "https://github.com/has207/xenia-edge"
|
|
libretro: "https://git.libretro.com/libretro/xenia-libretro"
|
|
upstream: "https://github.com/has207/xenia-edge"
|
|
source_commit:
|
|
standalone: "e569a1aa15632e957fc2adc3bfc875de51f79eab"
|
|
libretro: "f23c14c717ef274516f29c9b5e97d6a9db28643d"
|
|
profiled_date: "2026-10-23"
|
|
core_version:
|
|
standalone: "edge"
|
|
libretro: "8dc77b0"
|
|
display_name: "Xenia Edge (Xbox 360)"
|
|
cores:
|
|
- "xenia-edge"
|
|
- "xenia_edge"
|
|
systems:
|
|
- microsoft-xbox-360
|
|
- microsoft-xbox
|
|
|
|
notes: |
|
|
Xbox 360 emulator forked from Xenia Canary, with a wxWidgets front end, a
|
|
game library, and Direct3D 12, Vulkan and Metal backends. Releases are tagged
|
|
by short commit on the edge branch and ship as xenia_edge_linux.AppImage,
|
|
xenia_edge_macos.dmg and xenia_edge_windows.zip. ES-DE finds it through the
|
|
XENIA-EDGE rule and runs `xenia_edge <rom>`. RetroDECK unpacks the AppImage
|
|
into a xenia-edge component and executes bin/xenia_edge.
|
|
|
|
The libretro core xenia_edge_libretro is built from libretro/xenia-libretro
|
|
on git.libretro.com (branch libretro, CORENAME xenia_edge in .gitlab-ci.yml),
|
|
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
|
|
the emulator's static libraries, without the wxWidgets app
|
|
(libretro/CMakeLists.txt:1-13, 104-130), 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
|
|
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
|
|
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
|
|
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).
|
|
|
|
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
|
|
XConfig setting is synthesised from cvars and constants by BuildSetting
|
|
rather than read from a flash image (src/xenia/kernel/xconfig.cc:87-246, 259-272). 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.
|
|
|
|
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
|
|
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
|
|
launch fails, the folder is created and the window names the missing file
|
|
(src/xenia/emulator.cc:882-895, src/xenia/app/emulator_window.cc:1975-1985).
|
|
|
|
The fork's data ships inside the executable. assets/font/Inter-VariableFont
|
|
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).
|
|
The UI font is read from that buffer with AddFontFromMemoryTTF
|
|
(src/xenia/ui/imgui_drawer.cc:375-385), 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).
|
|
|
|
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
|
|
(src/xenia/ui/imgui_drawer.cc:39-44, 361-394), mappings_file to the embedded controller DB
|
|
(src/xenia/hid/sdl/sdl_input_driver.cc:36-39, 237-241), achievement_sound_path leaves the
|
|
achievement sound silent (src/xenia/ui/audio_helper.cc:21-24, 38-53). For glyphs the
|
|
embedded font lacks, the host font comes from the OS: tahoma.ttf and
|
|
msgothic.ttc out of the Windows fonts folder, or the fontconfig sans-serif and
|
|
CJK matches on Linux (src/xenia/ui/imgui_drawer.cc:396-479, 481-565).
|
|
|
|
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),
|
|
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:1651-1719). portable.txt next to the executable
|
|
keeps the storage root there instead of the user folder
|
|
(src/xenia/app/xenia_main.cc:533-547).
|
|
|
|
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
|
|
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
|
|
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
|
|
builds need none of them: MoltenVK is statically linked and the Vulkan loader
|
|
comes from the system (src/xenia/ui/vulkan/vulkan_instance.cc:66-72, 81-83).
|
|
|
|
files:
|
|
# -- Direct3D 12 runtime, Windows only --
|
|
|
|
- name: "dxil.dll"
|
|
mode: standalone
|
|
path: "D3D12/dxil.dll"
|
|
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"
|
|
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
|
|
system search path, because the signer's own plain-name load skips
|
|
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
|
|
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
|
|
v1.9.2602.24, pinned at sha256
|
|
cf658aacf070d3045e31b8f1f8a696c2945f37c1095019481ef7c513368db3b4, and
|
|
bin/arm64 on ARM64 builds. It is the single entry the installer extracts
|
|
from that archive. The libretro core writes its own embedded copy to
|
|
Xenia-Edge/D3D12/ in the system directory and loads it from there.
|
|
|
|
- name: "D3D12Core.dll"
|
|
mode: standalone
|
|
path: "D3D12/D3D12Core.dll"
|
|
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"
|
|
note: >-
|
|
The binary exports D3D12SDKVersion 619 and D3D12SDKPath ".\D3D12\", so
|
|
d3d12.dll loads it at the first device creation. The provider checks for
|
|
it, offers the download, and returns false when it is still absent. Taken
|
|
from build/native/bin/x64/D3D12Core.dll in the Microsoft.Direct3D.D3D12
|
|
1.619.3 NuGet package, pinned at sha256
|
|
43a7d5a3973812eb4b42623fae5275c790a005b8e48b8d7f5bb43cef39e073c5, and
|
|
build/native/bin/arm64 on ARM64 builds. The package version has to match
|
|
the exported number.
|
|
|
|
- name: "D3D12SDKLayers.dll"
|
|
mode: standalone
|
|
path: "D3D12/D3D12SDKLayers.dll"
|
|
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"
|
|
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,
|
|
since the debug layer only loads under the Agility runtime. Same NuGet
|
|
package and pin as D3D12Core.dll.
|
|
|
|
# -- Vulkan runtime, Windows only --
|
|
|
|
- name: "vulkan-1.dll"
|
|
mode: standalone
|
|
path: "Vulkan/vulkan-1.dll"
|
|
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"
|
|
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
|
|
next to the executable is a fallback. Taken from
|
|
VulkanRT-X64-1.4.350.0-Components/x64/vulkan-1.dll in LunarG's
|
|
vulkan-runtime-components.zip 1.4.350.0, pinned at sha256
|
|
23ce69f32cef3e2799617e2b1776cd0c71030d23a91f8375821cc40d76b185b9. The zip
|
|
carries x64 and x86 only, so the ARM64 build never offers the download.
|
|
|
|
# -- Visual C++ runtime, Windows only --
|
|
|
|
- name: "vc_redist.x64.exe"
|
|
mode: standalone
|
|
system: microsoft-xbox-360
|
|
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"
|
|
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
|
|
older than 14.<_MSC_VER - 1900> clamped to 14.44 the installer
|
|
is downloaded to %TEMP%\xenia_vc_redist.exe and run with
|
|
"/install /passive /norestart", after which the process relaunches. What
|
|
the binary actually links is vcruntime140 and msvcp140, resolved by the OS
|
|
loader. vc_redist.arm64.exe on ARM64 builds.
|
|
|
|
# -- XeFu, original Xbox games --
|
|
|
|
- name: "xbox.xex"
|
|
path: "Xenia-Edge/xefu/xbox.xex"
|
|
standalone_path: "xefu/xbox.xex"
|
|
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:882-895"
|
|
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
|
|
xefu_launcher cvar can name a XeFu build in its place, which then runs
|
|
every game.
|
|
|
|
- name: "xefu/"
|
|
type: directory
|
|
path: "Xenia-Edge/xefu/"
|
|
standalone_path: "xefu/"
|
|
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:2297-2306, src/xenia/emulator.cc:2332-2346, src/xenia/cpu/xex_module.cc:995-1019, src/xenia/cpu/xex_module.cc:1118-1143"
|
|
note: >-
|
|
Mounted as \Device\Harddisk0\SystemPartition\Compatibility, where XeFu
|
|
also writes its config.bin. xefu2019.xex and the xefu2021 builds import
|
|
xefutitle.xex, looked up first beside the build as xefutitle followed by
|
|
the build's suffix, then by that suffix without its trailing letters
|
|
(xefutitle2021.xex for xefu2021c.xex), then as xefutitle.xex. A build
|
|
whose imports are missing fails to launch and the missing name is
|
|
reported.
|