Files

164 lines
9.3 KiB
YAML

emulator: Xenia Edge
type: standalone
core_classification: community_fork
source: "https://github.com/has207/xenia-edge"
upstream: "https://github.com/has207/xenia-edge"
source_commit: "fb1c5bf08b16dab5422136c44c593a9f516750f0"
profiled_date: "2026-09-17"
core_version: "edge"
display_name: "Xenia Edge (Xbox 360)"
cores:
- xenia-edge
systems:
- microsoft-xbox-360
mode: standalone
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.
No Xbox 360 system file is read. xboxkrnl, xam and xbdm are C++ HLE modules
registered at startup (src/xenia/emulator.cc:395-404), the XEX2 retail and devkit AES
keys are constant arrays in the binary (src/xenia/cpu/xex_module.cc:67-72), 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:777-792); that is a
companion module inside the dump the user launched, not a host-side lookup.
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:374-384), 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, 360-393), 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-52). 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:395-477, 479-563).
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:45-48),
patches/*.patch.toml read on top of the embedded set (src/xenia/emulator.cc:390,
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-72), content
(src/xenia/app/xenia_main.cc:563-566), scratch, cache0, cache1, cache and mu
(src/xenia/emulator.cc:1479-1547). portable.txt next to the executable
keeps the storage root there instead of the user folder
(src/xenia/app/xenia_main.cc:524-538).
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
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:114-122, 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:582-614"
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; that failure propagates to "Failed to setup
graphics_system!" (src/xenia/emulator.cc:435-446). Windows defaults to
gpu = "d3d12" (src/xenia/emulator.cc:119) 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;
bin/arm64 on ARM64 builds. It is the single entry the installer extracts
from that archive.
- name: D3D12Core.dll
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:25-28, src/xenia/ui/redist_installer_wx.cc:88-94, 123-126, src/xenia/ui/redist_installer_wx.cc:623-668"
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;
build/native/bin/arm64 on ARM64 builds. The package version has to match
the exported number.
- name: D3D12SDKLayers.dll
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:670-715"
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
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:717-756"
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
system: microsoft-xbox-360
required: false
validation: [signature]
description: "Microsoft Visual C++ 2015-2022 redistributable installer"
source_ref: "src/xenia/app/xenia_main.cc:546-550, 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:758-867"
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.