Files
libretro/emulators/xemu.yml
T
Abdessamad Derraz a6716796a9 feat: write config_reads into the profiles
Where each shipped build finds the config a platform installs and reads
every key it opens a file from, read at the build the platform ships:
duckstation (EmuELEC, ROCKNIX, RetroBat), xemu, armsx2, hatari, melonDS,
dsperate, NanoBoyAdvance, mednafen (ROCKNIX's sydarn fork) and ares,
gzdoom, xroar, lrps2 and the amiberry builds at their pins. pin_build
names the builds ROCKNIX, EmuELEC and AmberELEC compile, revision the
ones RetroBat and Flathub install unpinned.

tests/test_launcher_evidence.py covers the rule, the extractor helpers,
the invariants and the chains that move placements.
2026-11-11 11:11:50 +01:00

347 lines
15 KiB
YAML

emulator: xemu
type: standalone + libretro
core_classification: community_fork
source:
standalone: "https://github.com/xemu-project/xemu"
libretro: "https://git.libretro.com/libretro/xemu-libretro"
upstream: "https://github.com/xemu-project/xemu"
logo: "https://raw.githubusercontent.com/xemu-project/xemu/master/data/xemu_64x64.png"
profiled_date: "2026-11-09"
source_commit:
standalone: "25e1ee2fd59a451f2ab57e825b4f8a5414220c8b"
libretro: "50fc538657f44704e0d1d0906bdc9ef6e435dffe"
core_version:
standalone: "v0.8.139-2-g25e1ee2"
libretro: "0.8.136-53"
version_basis:
standalone:
kind: tag
match: "v*"
tag: "v0.8.139"
distance: 2
libretro:
kind: file
path: "upstream.version"
pattern: '^(\S+)'
display_name: "Microsoft - Xbox / Sega Chihiro (xemu)"
cores:
- xemu
- "xemu-sa"
systems:
- microsoft-xbox
- sega-chihiro
data_root:
windows:
path: "%APPDATA%/xemu/xemu"
source_ref: "ui/xemu-settings.cc:51-63, 73-92"
note: "xemu.toml beside xemu.exe makes its folder the root"
macos:
path: "~/Library/Application Support/xemu/xemu"
source_ref: "ui/xemu-settings.cc:51-63, 73-92"
note: "xemu.toml beside the executable makes its folder the root"
linux:
path: "$XDG_DATA_HOME/xemu/xemu, else ~/.local/share/xemu/xemu"
source_ref: "ui/xemu-settings.cc:51-63, 73-92"
note: "xemu.toml beside the executable makes its folder the root"
pin_build:
- platform: rocknix
repo: "https://github.com/ROCKNIX/distribution"
revision: "20261101"
path: "projects/ROCKNIX/packages/emulators/standalone/xemu-sa/package.mk"
variable: PKG_VERSION
value: "cbffb57d084c70351a596e99e32a8b73e0c5eabf"
config_reads:
- file: "xemu.toml"
platforms: [rocknix]
source_ref: "ui/xemu.c:1314-1325, ui/xemu-settings.cc:65-71, 94-104, 158-207"
keys:
- key: "[sys.files] bootrom_path"
source_ref: "system/vl.c:2983-3016"
- key: "[sys.files] flashrom_path"
source_ref: "system/vl.c:3041-3054"
condition: "[general] show_welcome false"
- key: "[sys.files] eeprom_path"
source_ref: "system/vl.c:2909-2949, 3030-3039"
- key: "[sys.files] hdd_path"
source_ref: "system/vl.c:3060-3074"
- file: "xemu.toml"
platforms: [retrobat]
revision: "fc24584ce88f0915ad7f04775bb7712c2e3f49ee"
revision_from: "xemu.exe 0.8.136 in RetroBat's stable xemu.7z, 2026-11-10"
source_ref: "ui/xemu.c:1325, ui/xemu-settings.cc:51-63, 73-92, 94-104, 158-207"
keys:
- key: "[sys.files] flashrom_path"
source_ref: "system/vl.c:3041-3054"
condition: "[general] show_welcome false"
notes: |
Full-system Xbox emulator built on QEMU. The libretro core is built from
libretro's xemu-libretro tree on its libretro branch, which merges
Tovarichtch's xemu fork (xemu master with Chihiro support) and keeps the
core alone: the standalone UI and packaging are removed. upstream.version
names the upstream version merged. Content is an Xbox disc image (.iso,
.xiso) or a Chihiro netboot image (.bin), opened from its full path. An
Xbox disc boots an Xbox, any other image a Chihiro.
ref: ui/libretro.c:3117-3123, ui/libretro.c:3312-3320
Four files feed the machine through the sys.files block of the
configuration: the MCPX boot ROM, the flash ROM, the EEPROM and the hard disk
image. qemu_init turns them into machine arguments: bootrom= on the xbox
machine, -bios, a smbus-storage device and an IDE drive at index 0 with
locked=on. The standalone keeps them in xemu.toml, read from the SDL
preference directory or from the directory of the executable when a
xemu.toml already sits there, and the file pickers of the settings menu fill
the four paths. Nothing is searched by name and only the EEPROM has a
default location.
ref: config_spec.yml:353-367, system/vl.c:2983-3006, system/vl.c:3030-3074,
ui/xemu-settings.cc:70-133, ui/xemu.c:1373-1393,
ui/xui/main-menu.cc:1553-1575
The core has no option for these paths. It looks for each file in
system/xemu/, then at the root of the system directory, and keeps the
first it opens. When none is there the path stays in system/xemu/. The
flash ROM is tried as Complex_4627v1.03.bin, then Complex_4627.bin. A
missing boot ROM or flash ROM fails the load. A missing hard disk image
is written there from the formatted image the core carries
(data/xbox_hdd.qcow2), and the EEPROM is left to the machine, which
generates one. Shader caches and patches live in system/xemu/ too.
ref: ui/libretro.c:3044-3049, ui/libretro.c:3370-3449,
ui/libretro.c:2088-2105, ui/libretro.c:3361-3367,
ui/libretro.c:2485
A Chihiro boots only its own BIOS, system/xemu/Chihiro/chihiro_xbox_bios.bin,
which has to be MAME's 512 KiB image (sha1 b700b004). The media board
flash and the three EEPROMs are read beside it by their MAME names, and a
missing one, or a BIOS that is not that image, leaves the machine paused
with a message naming it. The network firmware ver1305.bin is read from
the same folder when it is there, and only a linked cabinet needs it.
ref: ui/libretro.c:1782-1795, hw/xbox/chihiro/chihiro.c:2280-2292,
hw/xbox/chihiro/chihiro.c:2294-2334, hw/xbox/chihiro/chihiro.c:2376-2402,
hw/xbox/chihiro/chihiro.c:365-380, hw/xbox/chihiro/chihiro.c:490-505
The standalone boots whatever it can. An unreadable flash file or a
rejected EEPROM clears autostart and queues an error for the HUD, an
unreadable disk image only queues the error, and an empty boot ROM path
starts the flash without the overlay.
ref: system/vl.c:2983-3006, system/vl.c:3030-3039, system/vl.c:3041-3053,
system/vl.c:3060-3074, hw/xbox/xbox.c:143-165
files:
- name: mcpx_1.0.bin
mode: standalone
required: false
size: 512
validation: [size]
config_key: sys.files.bootrom_path
found_by: content
description: "MCPX boot ROM"
note: >-
Passed as the bootrom machine property and read over the last 512 bytes
of the flash image, which the machine maps as a writable overlay at the
top of the address space. bootrom_path has no default, so the name is a
label. qemu_init drops a path that cannot be opened or is not 512 bytes
and queues an error, and the machine then runs the flash alone, as it
does when the path is empty.
source_ref: "system/vl.c:2983-3006, hw/xbox/xbox.c:143-171, hw/xbox/xbox.c:468-470, config_spec.yml:362-366"
- name: mcpx_1.0.bin
mode: libretro
path: "xemu/mcpx_1.0.bin"
required: true
size: 512
validation: [size]
description: "MCPX boot ROM"
note: >-
Read from system/xemu/mcpx_1.0.bin, else mcpx_1.0.bin at the root of
the system directory. The core refuses to load when neither is there.
source_ref:
libretro: "ui/libretro.c:3370-3415, ui/libretro.c:3418-3427"
- name: Complex_4627.bin
mode: standalone
required: true
min_size: 65536
size_multiple: 65536
validation: [size]
size_note: "Any size that is a positive multiple of 64 KiB is mapped (hw/xbox/xbox.c:75-81), and the image is mirrored across the 16 MB flash window"
config_key: sys.files.flashrom_path
found_by: content
description: "Xbox flash ROM image"
note: >-
Passed as -bios and opened through qemu_find_file. flashrom_path has no
default, so the name is a label. A path that cannot be opened, an empty
one included, queues an error and clears autostart, so the machine does
not start. An image whose size is not a multiple of 65536 bytes counts
as a failed load in the machine: the 256 KB region is filled with 0xFF.
source_ref: "system/vl.c:2527-2535, system/vl.c:3041-3053, hw/xbox/xbox.c:63-123, config_spec.yml:362-366"
- name: Complex_4627.bin
mode: libretro
path: "xemu/Complex_4627.bin"
aliases: [Complex_4627v1.03.bin]
required: true
min_size: 65536
size_multiple: 65536
validation: [size]
size_note: "Any size that is a positive multiple of 64 KiB is mapped (hw/xbox/xbox.c:75-81), and the image is mirrored across the 16 MB flash window"
description: "Xbox flash ROM image"
note: >-
The core tries Complex_4627v1.03.bin, then Complex_4627.bin, in
system/xemu/ and then at the root of the system directory, and refuses
to load when none is there.
source_ref:
libretro: "ui/libretro.c:3370-3415, ui/libretro.c:3429-3436, hw/xbox/xbox.c:63-123"
- name: xbox_eeprom.bin
path: "xemu/xbox_eeprom.bin"
standalone_path: eeprom.bin
aliases: [eeprom.bin]
required: false
installed_on: [retrobat]
has_builtin: true
size: 256
validation: [size]
config_key: sys.files.eeprom_path
description: "Xbox EEPROM image"
note: >-
Attached as the smbus-storage device at address 0x54, which reads the
whole file at realize and writes it back on every guest write. A missing
file is generated as a retail 1.0 image with a random serial, MAC, hard
disk key and online key, the North American region and the NTSC-M video
standard. A file of any size other than 256 bytes is rejected and
autostart is cleared. The standalone defaults to eeprom.bin next to
xemu.toml. The core reads system/xemu/xbox_eeprom.bin, else
xbox_eeprom.bin at the root of the system directory, and leaves the
machine to generate system/xemu/xbox_eeprom.bin when neither is there.
source_ref:
standalone: "system/vl.c:2909-2949, system/vl.c:3030-3039, ui/xemu-settings.cc:135-146, hw/xbox/smbus_storage.c:56-87, hw/xbox/smbus_storage.c:90-128, hw/xbox/smbus_storage.c:155-160, hw/xbox/eeprom_generation.c:93-140"
libretro: "ui/libretro.c:3370-3415, ui/libretro.c:1778-1780"
- name: xbox_hdd.qcow2
mode: standalone
required: false
installed_on: [batocera, emudeck, recalbox, retrobat, retrodeck, rocknix]
config_key: sys.files.hdd_path
found_by: content
description: "Xbox hard disk image, 8 GB with the retail partition layout"
note: >-
Attached as the IDE drive at index 0 with locked=on when the path is set
and the file opens. An unreadable file only queues an error and an empty
path attaches no drive: the machine starts either way. Snapshots are stored inside the image.
hdd_path has no default, so the name is a label: it is the file of
the formatted image the project publishes apart from the xemu release
(xemu-hdd-image 1.0, xbox_hdd.qcow2.zip), which carries its own
unsigned dashboard and empty TDATA and UDATA folders. Batocera,
Recalbox, RetroDECK, EmuDeck and ROCKNIX install that image themselves
and point hdd_path at it. RetroBat's launcher writes the image it
carries when the save folder holds none.
source_ref: "system/vl.c:3060-3074, ui/xemu-snapshots.c:156, config_spec.yml:362-366"
- name: xbox_hdd.qcow2
mode: libretro
path: "xemu/xbox_hdd.qcow2"
required: false
has_builtin: true
description: "Xbox hard disk image, 8 GB with the retail partition layout"
note: >-
Read from system/xemu/, else from the root of the system directory.
When neither holds one, the core writes the formatted xemu-dashboard
image it carries to system/xemu/xbox_hdd.qcow2. Game saves live in
the image.
source_ref:
libretro: "ui/libretro.c:3370-3415, ui/libretro.c:3438-3448, ui/libretro.c:2088-2105"
# Sega Chihiro, libretro build: system/xemu/Chihiro/, MAME's names.
- name: "chihiro_xbox_bios.bin"
mode: libretro
system: sega-chihiro
path: "xemu/Chihiro/chihiro_xbox_bios.bin"
required: true
size: 524288
sha1: "b700b0041af8f84835e45d1d1250247bf7077188"
validation: [size, sha1]
description: "Chihiro BIOS"
note: "The only flash image a Chihiro boots. Any other file, or none, leaves the machine paused with a message."
source_ref:
libretro: "ui/libretro.c:1785-1789, hw/xbox/chihiro/chihiro.c:2280-2292, system/vl.c:3325-3398"
- name: "fpr21042_m29w160et.bin"
mode: libretro
system: sega-chihiro
path: "xemu/Chihiro/fpr21042_m29w160et.bin"
aliases: ["fpr-23887_29lv160te.ic4", "fpr-23887.bin"]
required: true
max_size: 4194304
validation: [size]
description: "Chihiro media board flash"
note: "Read beside the BIOS, then in its parent folder, as fpr21042_m29w160et.bin, fpr-23887_29lv160te.ic4 and fpr-23887.bin in turn (chihiro.c:2321-2323). Up to 4 MiB is accepted. Without it the machine stays paused."
source_ref:
libretro: "hw/xbox/chihiro/chihiro.c:2259-2278, hw/xbox/chihiro/chihiro.c:2294-2334, system/vl.c:3325-3398"
- name: "ic10_g24lc64.bin"
mode: libretro
system: sega-chihiro
path: "xemu/Chihiro/ic10_g24lc64.bin"
required: true
size: 8192
validation: [size]
description: "Chihiro QC EEPROM"
note: "Read beside the BIOS and refused at any other size. Without it the machine stays paused."
source_ref:
libretro: "hw/xbox/chihiro/chihiro.c:2376-2402, system/vl.c:3325-3398"
- name: "ic11_24lc024.bin"
mode: libretro
system: sega-chihiro
path: "xemu/Chihiro/ic11_24lc024.bin"
required: true
size: 128
validation: [size]
description: "Chihiro baseboard EEPROM"
note: "Read beside the BIOS and refused at any other size. Without it the machine stays paused."
source_ref:
libretro: "hw/xbox/chihiro/chihiro.c:2376-2402, system/vl.c:3325-3398"
- name: "pc20_g24lc64.bin"
mode: libretro
system: sega-chihiro
path: "xemu/Chihiro/pc20_g24lc64.bin"
required: true
size: 8192
validation: [size]
description: "Chihiro SC EEPROM"
note: "Read beside the BIOS and refused at any other size. Without it the machine stays paused."
source_ref:
libretro: "hw/xbox/chihiro/chihiro.c:2376-2402, system/vl.c:3325-3398"
- name: "ver1305.bin"
mode: libretro
system: sega-chihiro
path: "xemu/Chihiro/ver1305.bin"
required: false
description: "Chihiro network board firmware 13.05"
note: "Read when present. The media board reports its version from it, and a linked cabinet runs it on the network board, which cannot start without it."
source_ref:
libretro: "ui/libretro.c:1790-1794, hw/xbox/chihiro/chihiro.c:365-380, hw/xbox/chihiro/chihiro.c:490-505"
- name: wpcap.dll
required: false
unsourceable: "installed by the Npcap driver, which the user installs"
description: "Npcap packet capture library"
note: >-
Loaded by name on Windows, with every entry point resolved individually,
when networking is enabled with the pcap backend, and the netdev is not
created when the library or one of its symbols is missing. Networking is
off by default and the backend defaults to NAT.
source_ref: "winpcap-loader/loader.c:79-113, ui/xemu-net.c:68-78, system/vl.c:2870-2875, config_spec.yml:327-335"
machine_properties:
bootrom: "MCPX boot ROM path"
avpack: "Video connector: scart, hdtv, vga, rfu, svideo, composite, none"
short-animation: "Skip the boot animation"
smc-version: "SMC version string, default P01"
video-encoder: "Encoder presented to the OS: conexant, focus, xcalibur"
source_ref: "hw/xbox/xbox.c:446-497"