mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-20 18:59:07 -05:00
LoadShadersFromDisk opens five shaders and two includes from the hlsl folder beside cxbx.exe and aborts when one is missing (Shader.cpp:812-825, 846-929). They ship in the release zip, so they are bundled.
354 lines
17 KiB
YAML
354 lines
17 KiB
YAML
emulator: Cxbx-Reloaded
|
|
type: standalone
|
|
core_classification: embedded_hle
|
|
source: "https://github.com/Cxbx-Reloaded/Cxbx-Reloaded"
|
|
upstream: "https://github.com/Cxbx-Reloaded/Cxbx-Reloaded"
|
|
profiled_date: "2026-08-11"
|
|
source_commit: "585c49a50af1255ab155099e06f24505f9c5a800"
|
|
core_version: "CI-585c49a"
|
|
display_name: "Microsoft - Xbox / Sega Chihiro (Cxbx-Reloaded)"
|
|
cores:
|
|
- cxbx-reloaded
|
|
- cxbx
|
|
systems:
|
|
- microsoft-xbox
|
|
- sega-chihiro
|
|
mode: standalone
|
|
|
|
notes: |
|
|
Windows x86 emulator running Xbox and Sega Chihiro titles. The kernel is
|
|
reimplemented and XBE code executes natively, so no Xbox flash ROM or MCPX
|
|
image is read. The flash window answers the two addresses titles poll with
|
|
constants, hardware revision 1.6 among them, and the MCPX device is a PCI stub
|
|
whose revision comes from the hardware model. A title is opened as an XBE,
|
|
either from an unpacked directory or from an .iso or .xiso mounted to a drive
|
|
letter, in which case the default.xbe of the mount is what gets opened.
|
|
ref: src/devices/x86/EmuX86.cpp:162-180,
|
|
src/devices/MCPXDevice.cpp:36-70,
|
|
src/devices/Xbox.cpp:48-58,
|
|
src/devices/Xbox.cpp:132-155,
|
|
src/gui/WndMain.cpp:89-96,
|
|
src/gui/WndMain.cpp:2252-2272
|
|
|
|
Every path below is relative to the data directory, picked on first run
|
|
between the folder holding cxbx.exe, %APPDATA%\Cxbx-Reloaded and a custom
|
|
location. EmuDisk, EmuMediaBoard and EmuMu are created under it at startup.
|
|
The HLSL shaders are the exception: they are read from the hlsl folder
|
|
beside cxbx.exe, where the build copies them along with a backup folder.
|
|
ref: src/common/Settings.cpp:82,
|
|
src/common/Settings.cpp:902-937,
|
|
src/common/Settings.cpp:968-996,
|
|
src/common/FilePaths.cpp:81-137,
|
|
src/core/hle/D3D8/Direct3D9/Shader.cpp:846-849,
|
|
CMakeLists.txt:510-522
|
|
|
|
A title counts as Chihiro when its XBE type says so or a boot.id sits beside
|
|
it. Launching one directly requires the media board ROM: its absence ends the
|
|
run. The 2 MB image is cut into two 1 MB halves written as Partition2.bin and
|
|
Partition3.bin, the old and new SEGABOOT, and the new one is launched, which
|
|
then boots the title. A title returning to firmware with an empty launch path
|
|
goes back to the same ROM.
|
|
ref: src/core/kernel/init/CxbxKrnl.cpp:573-578,
|
|
src/core/kernel/init/CxbxKrnl.cpp:590-655,
|
|
src/core/kernel/exports/EmuKrnlHal.cpp:546-556,
|
|
src/core/kernel/support/EmuFile.cpp:250-253
|
|
|
|
The JVS base board dumps are memory mapped read/write once the title is
|
|
Chihiro, and each one ends the run when it cannot be opened. Byte 0x1F00 of the
|
|
QC firmware carries the region, rewritten to one the title's BootID accepts so
|
|
the board does not reject the game. Titles read and write all four images
|
|
through the JVS patches at offsets of their own choosing, and no size, bound or
|
|
hash check exists anywhere in that path.
|
|
ref: src/core/hle/JVS/JVS.cpp:129-145,
|
|
src/core/hle/JVS/JVS.cpp:174-213,
|
|
src/core/hle/JVS/JVS.cpp:241-259,
|
|
src/core/hle/JVS/JVS.cpp:397-435,
|
|
src/core/kernel/init/CxbxKrnl.cpp:1330-1333
|
|
|
|
On the Xbox side the emulated disk holds the dashboard on Partition2. A title
|
|
rebooting with an empty launch path lands there, as does the Open Dashboard
|
|
menu entry, and an absent dashboard raises the console's own unrecoverable
|
|
error screen rather than an emulator failure.
|
|
ref: src/core/kernel/exports/EmuKrnlHal.cpp:546-556,
|
|
src/gui/WndMain.cpp:2463-2467,
|
|
src/common/xbe/Xbe.cpp:62-96,
|
|
src/core/kernel/support/EmuDisk.cpp:269
|
|
|
|
files:
|
|
- name: fpr21042_m29w160et.bin
|
|
path: "EmuMediaBoard/fpr21042_m29w160et.bin"
|
|
system: sega-chihiro
|
|
required: true
|
|
size: 2097152
|
|
validation: [size]
|
|
description: "Chihiro media board flash ROM"
|
|
note: >-
|
|
Checked for existence, opened, and rejected unless it is exactly 2 MB. Each
|
|
failure ends the run with a message naming the file and the EmuMediaBoard
|
|
folder. Read once, to write out the two SEGABOOT halves when they are
|
|
absent. It is also the target a Chihiro title returns to when it reboots
|
|
with an empty launch path.
|
|
source_ref: "src/core/kernel/init/CxbxKrnl.cpp:596-614, src/core/kernel/support/EmuFile.cpp:251, src/core/kernel/exports/EmuKrnlHal.cpp:550-553"
|
|
|
|
- name: ic10_g24lc64.bin
|
|
path: "EmuMediaBoard/Chihiro/ic10_g24lc64.bin"
|
|
system: sega-chihiro
|
|
required: true
|
|
min_size: 7937
|
|
description: "Base board QC microcontroller firmware"
|
|
note: >-
|
|
Memory mapped read/write at JVS setup, and the run ends when it cannot be
|
|
opened. Byte 0x1F00 is dereferenced straight after loading, which is the
|
|
floor the size carries: it holds the board region and is rewritten to USA,
|
|
export or Japan when the running title's BootID rejects the current value.
|
|
Titles read it through JvsFirmwareDownload and overwrite it through
|
|
JvsFirmwareUpload.
|
|
source_ref: "src/core/hle/JVS/JVS.cpp:181-188, src/core/hle/JVS/JVS.cpp:241-259, src/core/hle/JVS/JVS.cpp:484-523"
|
|
|
|
- name: pc20_g24lc64.bin
|
|
path: "EmuMediaBoard/Chihiro/pc20_g24lc64.bin"
|
|
system: sega-chihiro
|
|
required: true
|
|
description: "Base board SC microcontroller firmware"
|
|
note: >-
|
|
Memory mapped read/write at JVS setup, and the run ends when it cannot be
|
|
opened. Served to titles through JvsScFirmwareDownload and rewritten
|
|
through JvsScFirmwareUpload.
|
|
source_ref: "src/core/hle/JVS/JVS.cpp:182-192, src/core/hle/JVS/JVS.cpp:671-709"
|
|
|
|
- name: ic11_24lc024.bin
|
|
path: "EmuMediaBoard/Chihiro/ic11_24lc024.bin"
|
|
system: sega-chihiro
|
|
required: true
|
|
description: "Base board configuration EEPROM"
|
|
note: >-
|
|
Memory mapped read/write at JVS setup, and the run ends when it cannot be
|
|
opened. Writes from JvsEEPROM_Write are synced back to disk immediately,
|
|
so cabinet settings a title stores persist across runs.
|
|
source_ref: "src/core/hle/JVS/JVS.cpp:183-196, src/core/hle/JVS/JVS.cpp:437-482"
|
|
|
|
- name: backup_ram.bin
|
|
path: "EmuMediaBoard/Chihiro/backup_ram.bin"
|
|
system: sega-chihiro
|
|
required: false
|
|
has_builtin: true
|
|
size_note: "Created as 128 KB of zeros when absent, then memory mapped"
|
|
description: "Base board backup memory"
|
|
note: >-
|
|
The only one of the four JVS images the emulator will produce itself: when
|
|
the file is missing it writes 128 KB of zeros and maps that, so a fresh
|
|
board starts blank. Titles keep bookkeeping and high scores here through
|
|
JvsBACKUP_Read and JvsBACKUP_Write.
|
|
source_ref: "src/core/hle/JVS/JVS.cpp:184-213, src/core/hle/JVS/JVS.cpp:397-435"
|
|
|
|
- name: Partition2.bin
|
|
path: "EmuMediaBoard/Partition2.bin"
|
|
system: sega-chihiro
|
|
required: false
|
|
description: "SEGABOOT, old revision"
|
|
note: >-
|
|
Written by the emulator from the first megabyte of fpr21042_m29w160et.bin
|
|
when either half is missing, and mounted as the mbrom0 device. Supplying it
|
|
does not remove the need for the ROM, whose existence is checked before the
|
|
extraction block is reached.
|
|
source_ref: "src/core/kernel/init/CxbxKrnl.cpp:616-648, src/core/kernel/support/EmuFile.cpp:252, src/core/kernel/support/EmuMediaBoard.cpp:230-233"
|
|
|
|
- name: Partition3.bin
|
|
path: "EmuMediaBoard/Partition3.bin"
|
|
system: sega-chihiro
|
|
required: false
|
|
description: "SEGABOOT, current revision"
|
|
note: >-
|
|
Written from the second megabyte of fpr21042_m29w160et.bin under the same
|
|
condition as the old half, mounted as the mbrom1 device, and launched as
|
|
the XBE that boots the title.
|
|
source_ref: "src/core/kernel/init/CxbxKrnl.cpp:616-653, src/core/kernel/support/EmuFile.cpp:253, src/core/kernel/support/EmuMediaBoard.cpp:230-233"
|
|
|
|
- name: xboxdash.xbe
|
|
path: "EmuDisk/Partition2/xboxdash.xbe"
|
|
system: microsoft-xbox
|
|
required: false
|
|
description: "Xbox dashboard executable"
|
|
note: >-
|
|
Read from the shell partition of the emulated disk when a title reboots
|
|
with an empty launch path and when the Open Dashboard menu entry is used.
|
|
Its absence is handled as the console handles it, with the unrecoverable
|
|
error screen and the LED sequence that goes with it, the code carrying the
|
|
dashboard's own reason when the launch data page supplies one. Titles run
|
|
without it.
|
|
source_ref: "src/core/kernel/exports/EmuKrnlHal.cpp:546-556, src/gui/WndMain.cpp:2463-2467, src/common/xbe/Xbe.cpp:62-96, src/core/kernel/support/EmuDisk.cpp:269"
|
|
|
|
- name: EEPROM.bin
|
|
path: "EEPROM.bin"
|
|
system: microsoft-xbox
|
|
required: false
|
|
has_builtin: true
|
|
size: 256
|
|
validation: [size]
|
|
description: "Xbox EEPROM image"
|
|
note: >-
|
|
Opened at startup and mapped read/write. The file is created and filled
|
|
with defaults when it does not exist, and a file that is not 256 bytes ends
|
|
the run. Section checksums are recomputed on every load. The encrypted
|
|
section is read as plaintext: the stored checksum is compared with the
|
|
HMAC-SHA1 of the confounder, hard disk key and game region as they sit
|
|
in the file, keyed with the EEPROM key of keys.bin, so a retail dump has
|
|
to be RC4-decrypted first, which leaves the checksum unchanged. The hard
|
|
disk key is taken from it, and the game region it carries becomes the
|
|
factory region. The GUI exposes an editor over the same file.
|
|
source_ref: "src/common/EmuEEPROM.cpp:93-193, src/common/FilePaths.cpp:125, src/core/kernel/init/CxbxKrnl.cpp:958, src/gui/DlgEepromConfig.cpp:212-230"
|
|
|
|
- name: keys.bin
|
|
path: "keys.bin"
|
|
system: microsoft-xbox
|
|
required: false
|
|
size: 32
|
|
validation: [size]
|
|
description: "Xbox EEPROM and certificate keys"
|
|
note: >-
|
|
Two 16 byte keys read in order, the EEPROM key then the certificate key,
|
|
as produced by dump-xbox. A file of any other length is refused with a
|
|
warning naming the expected length, and an absent file only costs the
|
|
ability to read save data from a real console. The certificate key derives
|
|
the LAN, signature and alternate signature keys of the running title, and the
|
|
EEPROM key checks the EEPROM header and is read again by the EEPROM editor
|
|
to recompute the checksum it writes.
|
|
source_ref: "src/common/FilePaths.cpp:139-172, src/core/kernel/common/types.h:2232, src/core/kernel/init/CxbxKrnl.cpp:113-132, src/common/EmuEEPROM.cpp:184-191, src/gui/DlgEepromConfig.cpp:200-207"
|
|
|
|
- name: CxbxPixelShaderTemplate.hlsl
|
|
path: "hlsl/CxbxPixelShaderTemplate.hlsl"
|
|
system: microsoft-xbox
|
|
required: true
|
|
bundled: true
|
|
size: 29893
|
|
sha1: "4b23d771d1e1431607d9d206bec3a5a3fdc5a960"
|
|
md5: "6b3e2bd6cfa39f267e4f862113b8e729"
|
|
description: "Pixel shader template"
|
|
note: >-
|
|
Split on its two insertion markers, and every converted Xbox pixel
|
|
shader is compiled inside it. Read when the Direct3D device is created
|
|
and again whenever the hlsl folder changes, and the run ends when the
|
|
file cannot be opened.
|
|
source_ref: "src/core/hle/D3D8/Direct3D9/Shader.cpp:852-879, src/core/hle/D3D8/Direct3D9/Shader.cpp:812-825, src/core/hle/D3D8/Direct3D9/Shader.cpp:829-844, src/core/hle/D3D8/Direct3D9/Direct3D9.cpp:691-692"
|
|
|
|
- name: FixedFunctionPixelShader.hlsl
|
|
path: "hlsl/FixedFunctionPixelShader.hlsl"
|
|
system: microsoft-xbox
|
|
required: true
|
|
bundled: true
|
|
size: 13700
|
|
sha1: "b3691aa041ded53c153668e12e0577715275c60a"
|
|
md5: "fcf5cc618c91ed2a863134380c4b4de5"
|
|
description: "Fixed function pixel shader"
|
|
note: >-
|
|
Compiled once per fixed function texture stage setup, under a name in
|
|
the same folder so its include resolves there. Read when the Direct3D
|
|
device is created and again whenever the hlsl folder changes, and the
|
|
run ends when the file cannot be opened.
|
|
source_ref: "src/core/hle/D3D8/Direct3D9/Shader.cpp:881-888, src/core/hle/D3D8/XbPixelShader.cpp:887-968"
|
|
|
|
- name: FixedFunctionPixelShader.hlsli
|
|
path: "hlsl/FixedFunctionPixelShader.hlsli"
|
|
system: microsoft-xbox
|
|
required: true
|
|
bundled: true
|
|
size: 5770
|
|
sha1: "3a6d77bf7a7f591bb2092ad818044df8478d61da"
|
|
md5: "0bbd94bdd8955212754c2f72f3ef2313"
|
|
description: "Fixed function pixel shader state"
|
|
note: >-
|
|
Read by the shader compiler through the include at the top of
|
|
FixedFunctionPixelShader.hlsl, resolved beside that file. Without it the
|
|
fixed function pixel shader does not compile.
|
|
source_ref: "src/core/hle/D3D8/Direct3D9/FixedFunctionPixelShader.hlsl:1, src/core/hle/D3D8/Direct3D9/Shader.cpp:486-490, src/core/hle/D3D8/Direct3D9/Shader.cpp:704-709"
|
|
|
|
- name: CxbxVertexShaderTemplate.hlsl
|
|
path: "hlsl/CxbxVertexShaderTemplate.hlsl"
|
|
system: microsoft-xbox
|
|
required: true
|
|
bundled: true
|
|
size: 11698
|
|
sha1: "806679920284d274b40d6e578fbffeb6e491951e"
|
|
md5: "3811e112a60371144627f918ad0adeec"
|
|
description: "Vertex shader template"
|
|
note: >-
|
|
Split on its insertion marker, and every converted Xbox vertex shader is
|
|
compiled inside it. Read when the Direct3D device is created and again
|
|
whenever the hlsl folder changes, and the run ends when the file cannot
|
|
be opened.
|
|
source_ref: "src/core/hle/D3D8/Direct3D9/Shader.cpp:890-911, src/core/hle/D3D8/Direct3D9/VertexShader.cpp:293-300"
|
|
|
|
- name: FixedFunctionVertexShader.hlsl
|
|
path: "hlsl/FixedFunctionVertexShader.hlsl"
|
|
system: microsoft-xbox
|
|
required: true
|
|
bundled: true
|
|
size: 22764
|
|
sha1: "250a936d82710257ce1a10a046269b50c4a0b2fc"
|
|
md5: "c21140080b783c7ee9cde28c119ef552"
|
|
description: "Fixed function vertex shader"
|
|
note: >-
|
|
Compiled as the fixed function vertex shader under its own path, so its
|
|
include resolves in the same folder. Read when the Direct3D device is
|
|
created and again whenever the hlsl folder changes, and the run ends
|
|
when the file cannot be opened.
|
|
source_ref: "src/core/hle/D3D8/Direct3D9/Shader.cpp:914-920, src/core/hle/D3D8/Direct3D9/VertexShader.cpp:313-316"
|
|
|
|
- name: FixedFunctionVertexShaderState.hlsli
|
|
path: "hlsl/FixedFunctionVertexShaderState.hlsli"
|
|
system: microsoft-xbox
|
|
required: true
|
|
bundled: true
|
|
size: 4884
|
|
sha1: "20c7a4d50147571d03e8d480614c65305a201203"
|
|
md5: "8cb9260a9c921fb957e9ce1fb85218b5"
|
|
description: "Fixed function vertex shader state"
|
|
note: >-
|
|
Read by the shader compiler through the include at the top of
|
|
FixedFunctionVertexShader.hlsl, resolved beside that file. Without it
|
|
the fixed function vertex shader does not compile.
|
|
source_ref: "src/core/hle/D3D8/Direct3D9/FixedFunctionVertexShader.hlsl:1, src/core/hle/D3D8/Direct3D9/Shader.cpp:704-709"
|
|
|
|
- name: CxbxVertexShaderPassthrough.hlsl
|
|
path: "hlsl/CxbxVertexShaderPassthrough.hlsl"
|
|
system: microsoft-xbox
|
|
required: true
|
|
bundled: true
|
|
size: 3854
|
|
sha1: "3c9e70571fe85ab8092b6419b98c1cda7581e3b2"
|
|
md5: "74681e0caa7c7ccd5e819608c868c64b"
|
|
description: "Passthrough vertex shader"
|
|
note: >-
|
|
Compiled for draws whose vertices the title has already transformed.
|
|
Read when the Direct3D device is created and again whenever the hlsl
|
|
folder changes, and the run ends when the file cannot be opened.
|
|
source_ref: "src/core/hle/D3D8/Direct3D9/Shader.cpp:922-929, src/core/hle/D3D8/Direct3D9/VertexShader.cpp:318-321"
|
|
|
|
- name: dokan2.dll
|
|
required: false
|
|
description: "Dokany user mode library"
|
|
note: >-
|
|
Loaded by name with every entry point resolved individually, and the
|
|
failure message tells the user to install the upstream signed Dokany
|
|
runtime. It backs the only path that reads a disc image: an .iso or .xiso
|
|
is mounted to a drive letter and the default.xbe of the mount is opened, so
|
|
without it only unpacked titles load. The build produces an import library
|
|
from the Dokany definition file and takes headers from the vendored tree,
|
|
but ships no runtime of its own.
|
|
source_ref: "src/gui/xiso/XisoMount.cpp:36-61, src/gui/WndMain.cpp:2252-2272, projects/dokany/CMakeLists.txt:8-10, projects/cxbx/CMakeLists.txt:17-18"
|
|
|
|
exclusion_note: >
|
|
Five host libraries the code names are not listed. ntdll.dll and the XInput
|
|
libraries tried in turn, xinput1_4, xinput1_3 and xinput9_1_0, are Windows
|
|
components resolved by the loader, and cxbxr-emu.dll is the emulator's own
|
|
build output shipped beside cxbx.exe. xbdm.dll is not opened at all: the name
|
|
is compared against the import table of the loaded XBE so the debug monitor
|
|
imports can be thunked to the emulator's own implementations. Two further
|
|
files belong to the title rather than the system: boot.id, read from the title
|
|
directory for its region flags, and default.xbe. logo.bmp is only the name
|
|
offered in the open and save dialogs of the XBE logo editor.
|
|
ref: src/common/input/XInputPad.cpp:100-120,
|
|
src/core/kernel/init/CxbxKrnl.cpp:356-365,
|
|
src/devices/chihiro/MediaBoard.cpp:46-57,
|
|
src/gui/WndMain.cpp:880-890
|