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"