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" 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 path: "xemu/mcpx_1.0.bin" standalone_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 reads system/xemu/mcpx_1.0.bin, else mcpx_1.0.bin at the root of the system directory, and refuses to load when neither is there. source_ref: standalone: "system/vl.c:2983-3006, hw/xbox/xbox.c:143-171, hw/xbox/xbox.c:468-470" libretro: "ui/libretro.c:3370-3415, ui/libretro.c:3418-3427" - name: Complex_4627.bin path: "xemu/Complex_4627.bin" standalone_path: Complex_4627.bin aliases: [Complex_4627v1.03.bin] required: true size: [262144, 524288, 1048576] validation: [size] size_note: "Any size that is a positive multiple of 64 KiB is mapped, and 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, which takes any file the settings name. 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: standalone: "system/vl.c:3041-3053, hw/xbox/xbox.c:63-123" libretro: "ui/libretro.c:3370-3415, ui/libretro.c:3429-3436" - name: xbox_eeprom.bin path: "xemu/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 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 path: xbox_hdd.qcow2 required: true installed_on: [batocera, emudeck, recalbox, 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. 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. 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 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"