Files
libretro/emulators/xemu.yml
T

163 lines
8.0 KiB
YAML

emulator: xemu
type: standalone + libretro
core_classification: community_fork
source:
standalone: "https://github.com/xemu-project/xemu"
libretro: "https://github.com/LibretroAdmin/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-09-17"
source_commit:
standalone: "f9b14039e5bb56ae2d8f028e31e7cc19f13f7e12"
libretro: "d9804db79f87f6a6a5548b14ca4a8d5164390338"
core_version:
standalone: "0.8.136-49-gf9b14039e5"
libretro: "libretro-experimental"
display_name: "Microsoft - Xbox (xemu)"
cores:
- xemu
systems:
- microsoft-xbox
notes: |
Full-system Xbox emulator built on QEMU. One tree builds the standalone
application and, with the libretro build option, a core in which a shim
replaces ui/xemu.c: the QEMU machine runs on its own thread, retro_run pumps
the RetroPads into the Duke controllers and blits the NV2A surface into the
frontend's framebuffer through an OpenGL 4.0 core context, and content is a
.iso or .xiso image that QEMU opens from its full path. Save states are not
implemented; game saves live inside the hard disk image.
ref: meson_options.txt:52-53, ui/xemu-libretro.c:1-27,
ui/xemu-libretro.c:609-617, ui/xemu-libretro.c:680-697,
ui/xemu-libretro.c:874-876
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:1382-1402,
ui/xui/main-menu.cc:1553-1575
The core reads the same four files from the frontend system directory, each
under a name picked by a core option that offers a default and a few
alternatives, and keeps its configuration as xemu-libretro.toml in that
directory. The boot ROM, the flash ROM and the disk image are opened before
the machine starts, and a missing one fails the load with a message naming
the file. The EEPROM is left to the machine, which generates one.
ref: ui/xemu-libretro.c:112-127, ui/xemu-libretro.c:139-145,
ui/xemu-libretro.c:178-236
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
path: mcpx_1.0.bin
required: true
size: 512
validation: [size]
config_key: sys.files.bootrom_path
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. qemu_init drops the path with an error when
the file cannot be opened or is not 512 bytes, and the machine then runs
the flash alone. The core option xemu_bootrom names the file, default
mcpx_1.0.bin, with mcpx.bin, MCPX_1.0.bin and boot_rom.bin offered as
alternatives; the core refuses to load when the chosen file is absent.
source_ref:
standalone: "system/vl.c:2983-3006, hw/xbox/xbox.c:143-171, hw/xbox/xbox.c:468-470"
libretro: "ui/xemu-libretro.c:113-114, ui/xemu-libretro.c:192-193, ui/xemu-libretro.c:210-236"
- name: Complex_4627.bin
path: Complex_4627.bin
required: true
size: [262144, 524288, 1048576]
validation: [size]
size_note: "Any size that is a positive multiple of 64 KiB is mapped; the image is mirrored across the 16 MB flash window"
config_key: sys.files.flashrom_path
description: "Xbox flash ROM image"
note: >-
Passed as -bios and opened through qemu_find_file. An image whose size
is not a multiple of 65536 bytes counts as a failed load, like a missing
file: the 256 KB region is filled with 0xFF and the machine starts
anyway. An unreadable path clears autostart in the standalone. The core
option xemu_flashrom names the file, default Complex_4627.bin, with
Complex_4627_v1.03.bin, complex_4627.bin, cerbios.bin, Cerbios.bin,
bios.bin, xbox_bios.bin and Complex.bin offered as alternatives; the
core refuses to load when the chosen file is absent.
source_ref:
standalone: "system/vl.c:3041-3053, hw/xbox/xbox.c:63-123"
libretro: "ui/xemu-libretro.c:115-118, ui/xemu-libretro.c:195-196, ui/xemu-libretro.c:210-236"
- name: xbox_eeprom.bin
path: xbox_eeprom.bin
standalone_path: eeprom.bin
aliases: [eeprom.bin]
required: false
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 option xemu_eeprom names the file, default
xbox_eeprom.bin, with eeprom.bin and EEPROM.bin offered as alternatives,
and does not check for it before the machine starts.
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/xemu-libretro.c:119-120, ui/xemu-libretro.c:198-199, ui/xemu-libretro.c:204-209"
- name: xbox_hdd.qcow2
path: xbox_hdd.qcow2
required: true
config_key: sys.files.hdd_path
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. Snapshots are stored inside the image. The
project publishes a formatted image carrying its own unsigned dashboard
and empty TDATA and UDATA folders. The core option xemu_hdd names the
file, default xbox_hdd.qcow2, with xbox_hdd_8gb.qcow2, hdd.qcow2 and
xbox_hdd.img offered as alternatives; the core refuses to load when the
chosen file is absent.
source_ref:
standalone: "system/vl.c:3060-3074, ui/xemu-snapshots.c:156"
libretro: "ui/xemu-libretro.c:121-123, ui/xemu-libretro.c:200-202, ui/xemu-libretro.c:210-236"
- name: wpcap.dll
required: false
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; 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"