diff --git a/emulators/xemu.yml b/emulators/xemu.yml index f242bd2f3..96a4e006c 100644 --- a/emulators/xemu.yml +++ b/emulators/xemu.yml @@ -3,16 +3,16 @@ type: standalone + libretro core_classification: community_fork source: standalone: "https://github.com/xemu-project/xemu" - libretro: "https://github.com/LibretroAdmin/xemu-libretro" + 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-09-17" +profiled_date: "2026-11-09" source_commit: standalone: "25e1ee2fd59a451f2ab57e825b4f8a5414220c8b" - libretro: "d9804db79f87f6a6a5548b14ca4a8d5164390338" + libretro: "50fc538657f44704e0d1d0906bdc9ef6e435dffe" core_version: standalone: "v0.8.139-2-g25e1ee2" - libretro: "libretro-experimental" + libretro: "0.8.136-53" version_basis: standalone: kind: tag @@ -21,14 +21,15 @@ version_basis: distance: 2 libretro: kind: file - path: "ui/xemu-libretro.c" - pattern: 'info->library_version\s*=\s*"([^"]+)"' -display_name: "Microsoft - Xbox (xemu)" + path: "upstream.version" + pattern: '^(\S+)' +display_name: "Microsoft - Xbox / Sega Chihiro (xemu)" cores: - xemu - "xemu-sa" systems: - microsoft-xbox + - sega-chihiro data_root: windows: @@ -45,16 +46,14 @@ data_root: note: "xemu.toml beside the executable makes its folder the root" 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, and 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 + 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 @@ -69,14 +68,27 @@ notes: | ui/xemu-settings.cc:70-133, ui/xemu.c:1373-1393, 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 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 @@ -87,7 +99,8 @@ notes: | files: - name: mcpx_1.0.bin - path: mcpx_1.0.bin + path: "xemu/mcpx_1.0.bin" + standalone_path: mcpx_1.0.bin required: true size: 512 validation: [size] @@ -98,16 +111,17 @@ files: 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. + 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/xemu-libretro.c:113-114, ui/xemu-libretro.c:192-193, ui/xemu-libretro.c:210-236" + libretro: "ui/libretro.c:3370-3415, ui/libretro.c:3418-3427" - name: Complex_4627.bin - path: Complex_4627.bin - aliases: [Complex.bin, cerbios.bin] + path: "xemu/Complex_4627.bin" + standalone_path: Complex_4627.bin + aliases: [Complex_4627v1.03.bin] required: true size: [262144, 524288, 1048576] validation: [size] @@ -118,17 +132,17 @@ files: 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. + 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/xemu-libretro.c:115-118, ui/xemu-libretro.c:195-196, ui/xemu-libretro.c:210-236" + libretro: "ui/libretro.c:3370-3415, ui/libretro.c:3429-3436" - name: xbox_eeprom.bin - path: xbox_eeprom.bin + path: "xemu/xbox_eeprom.bin" standalone_path: eeprom.bin aliases: [eeprom.bin] required: false @@ -144,14 +158,15 @@ files: 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. + 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/xemu-libretro.c:119-120, ui/xemu-libretro.c:198-199, ui/xemu-libretro.c:204-209" + 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] @@ -162,19 +177,101 @@ files: 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. + and empty TDATA and UDATA folders. The xemu release does not carry the image. Batocera and Recalbox package the 1.0 xemu-hdd-image and copy it into the saves folder at launch when none is there, RetroDECK copies its packaged copy into the BIOS folder during setup, and EmuDeck downloads it while setting xemu up. ROCKNIX packages the same image and unzips it at launch into bios/xemu/hdd/, the path its xemu.toml gives hdd_path. + source_ref: "system/vl.c:3060-3074, ui/xemu-snapshots.c:156" + + - 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: - 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" + 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, under these three names in turn. 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