diff --git a/emulators/azahar.yml b/emulators/azahar.yml index f0561173..27e4a158 100644 --- a/emulators/azahar.yml +++ b/emulators/azahar.yml @@ -1,28 +1,90 @@ emulator: Azahar -type: alias -alias_of: citra +type: standalone + libretro source: "https://github.com/azahar-emu/azahar" upstream: "https://github.com/azahar-emu/azahar" profiled_date: "2026-03-18" core_version: "Git" display_name: "Nintendo - 3DS (Azahar)" +cores: [azahar] +systems: + - nintendo-3ds notes: | - Azahar is the successor to Citra (via Lime3DS). Same codebase, same - BIOS/firmware requirements. See emulators/citra.yml for the full file list. + Azahar is the successor to Citra (via Lime3DS). Different codebase + from libretro/citra — has additional files not in the old Citra. + Data dir: azahar-emu (legacy: citra-emu, lime3ds-emu). + ref: src/common/common_paths.h:41-47 - Key difference: data directory changed from citra-emu/lime3ds-emu to - azahar-emu. Legacy dirs are still scanned as fallback. - ref: azahar/src/common/common_paths.h:41-47 + Key file: keys.txt (NOT aes_keys.txt like libretro/citra). + ref: src/common/common_paths.h:83 - Files needed (all optional, HLE fallback for most): - sysdata/keys.txt, sysdata/boot9.bin, sysdata/sector0x96.bin, - sysdata/shared_font.bin, sysdata/seeddb.bin, sysdata/otp.bin, - nand/private/movable.sed, nand/rw/sys/SecureInfo_A, - nand/rw/sys/LocalFriendCodeSeed_B + Uses RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. + ref: src/citra_libretro/environment.cpp:194 - .info has firmware_count=0 but core uses RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY - (src/citra_libretro/environment.cpp:194) to locate system files. + .info has firmware_count=0 but core uses system_dir for files. -files: [] -# all files documented in emulators/citra.yml — same codebase +files: + # --- sysdata/ --- + - name: keys.txt + path: sysdata/keys.txt + system: nintendo-3ds + required: false + note: "AES keys (named keys.txt in Azahar, aes_keys.txt in old Citra)" + source_ref: "src/common/common_paths.h:83, src/core/hw/aes/key.cpp:291" + + - name: boot9.bin + path: sysdata/boot9.bin + system: nintendo-3ds + required: false + source_ref: "src/common/common_paths.h:84" + + - name: sector0x96.bin + path: sysdata/sector0x96.bin + system: nintendo-3ds + required: false + source_ref: "src/common/common_paths.h:85" + + - name: shared_font.bin + path: sysdata/shared_font.bin + system: nintendo-3ds + required: false + note: "HLE fallback if missing" + source_ref: "src/common/common_paths.h:82" + + - name: seeddb.bin + path: sysdata/seeddb.bin + system: nintendo-3ds + required: false + note: "game seed database for 9.6+ titles" + source_ref: "src/core/file_sys/seed_db.cpp:15" + + # --- Azahar-only (not in libretro/citra) --- + # These require src/core/hw/unique_data.cpp which only exists in Azahar + + - name: otp.bin + path: sysdata/otp.bin + system: nintendo-3ds + required: false + note: "OTP data for key derivation. Azahar-only." + source_ref: "src/core/hw/unique_data.cpp:214" + + - name: movable.sed + path: nand/private/movable.sed + system: nintendo-3ds + required: false + note: "console-unique key seed. Azahar-only." + source_ref: "src/core/hw/unique_data.cpp:218" + + - name: SecureInfo_A + path: nand/rw/sys/SecureInfo_A + system: nintendo-3ds + required: false + note: "console serial/region. Azahar-only." + source_ref: "src/core/hw/unique_data.cpp:206" + + - name: LocalFriendCodeSeed_B + path: nand/rw/sys/LocalFriendCodeSeed_B + system: nintendo-3ds + required: false + note: "friend code generation. Azahar-only." + source_ref: "src/core/hw/unique_data.cpp:210" diff --git a/emulators/beetle_psx.yml b/emulators/beetle_psx.yml index ac074542..42d020ce 100644 --- a/emulators/beetle_psx.yml +++ b/emulators/beetle_psx.yml @@ -26,7 +26,7 @@ files: sha1: "b05def971d8ec59f346f2d9ac21fb742e3eb6917" md5: "8dd7d5296a650fac7319bce665a6a53c" source_ref: "libretro.cpp:252-256" - alt_names: ["SCPH5500.bin", "SCPH-5500.bin"] + aliases: ["SCPH5500.bin", "SCPH-5500.bin"] # -- Region: North America (REGION_NA) -- @@ -37,7 +37,7 @@ files: sha1: "0555c6fae8906f3f09baf5988f00e55f88e9f30b" md5: "490f666e1afb15b7362b406ed1cea246" source_ref: "libretro.cpp:258-270" - alt_names: + aliases: - "SCPH5501.bin" - "SCPH-5501.bin" - "scph5503.bin" @@ -56,7 +56,7 @@ files: sha1: "f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0" md5: "32736f17079d0b2b7024407c39bd3050" source_ref: "libretro.cpp:272-282" - alt_names: + aliases: - "SCPH5502.bin" - "SCPH-5502.bin" - "scph5552.bin" @@ -72,7 +72,7 @@ files: sha1: "96880d1ca92a016ff054be5159bb06fe03cb4e14" md5: "c53ca5908936d412331790f4426c6c33" source_ref: "libretro.cpp:190-196" - alt_names: ["PSXONPSP660.bin"] + aliases: ["PSXONPSP660.bin"] notes: "override_bios=1 (psxonpsp option). Falls back to region BIOS if not found." - name: "ps1_rom.bin" @@ -82,5 +82,5 @@ files: sha1: "c40146361eb8cf670b19fdc9759190257803cab7" md5: "81bbe60ba7a3d1cea1d48c14cbcc647b" source_ref: "libretro.cpp:198-204" - alt_names: ["PS1_ROM.bin"] + aliases: ["PS1_ROM.bin"] notes: "override_bios=2 (ps1_rom option). Falls back to region BIOS if not found." diff --git a/emulators/bnes.yml b/emulators/bnes.yml index 17267ff9..ba23f670 100644 --- a/emulators/bnes.yml +++ b/emulators/bnes.yml @@ -14,16 +14,17 @@ notes: | to libretro by Ryphecha. It is a lightweight, accuracy-focused NES core. The core loads cartridge data entirely through retro_load_game with - need_fullpath=false (libretro.cpp:129). ROM data is passed as a memory - buffer and parsed by Cartridge::load (cartridge.cpp:18-31), which detects - iNES headers (16-byte offset) and delegates to Board::load for mapper setup. + need_fullpath=false (libretro/libretro.cpp:129). ROM data is passed as a + memory buffer and parsed by Cartridge::load (nes/cartridge/cartridge.cpp:18-31), + which detects iNES headers (16-byte offset) and delegates to Board::load. - The PPU generates its palette from a hardcoded color table in libretro.cpp - (lines 20-37) with emphasis factor tables. No external palette file is loaded. + The PPU generates its palette from a hardcoded color table in + libretro/libretro.cpp:20-37 with emphasis factor tables. No external + palette file is loaded. - System::init (system.cpp:62-66) only sets up the interface pointer and - default input devices. No system ROM, BIOS, or firmware is loaded at any - stage of initialization or cartridge loading. + System::init (nes/system/system.cpp:62-66) only sets up the interface + pointer and default input devices. No system ROM, BIOS, or firmware is + loaded at any stage of initialization or cartridge loading. The core does not call RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY and has no file I/O for BIOS or firmware. FDS (Famicom Disk System) is not supported, @@ -35,11 +36,11 @@ files: [] analysis: bios_search: - retro_load_game: "libretro.cpp:181-211 - loads cartridge data only, no BIOS" - cartridge_load: "cartridge.cpp:18-31 - parses iNES header + ROM data" - system_init: "system.cpp:62-66 - sets interface pointer, no ROM loading" - system_power: "system.cpp:43-50 - powers subsystems, no file I/O" - interface_init: "interface.cpp:17-20 - stores derived pointer, calls system.init" + retro_load_game: "libretro/libretro.cpp:181-211 - loads cartridge data only, no BIOS" + cartridge_load: "nes/cartridge/cartridge.cpp:18-31 - parses iNES header + ROM data" + system_init: "nes/system/system.cpp:62-66 - sets interface pointer, no ROM loading" + system_power: "nes/system/system.cpp:43-50 - powers subsystems, no file I/O" + interface_init: "nes/interface/interface.cpp - stores derived pointer, calls system.init" supported_mappers: - NROM - SxROM (MMC1) diff --git a/emulators/boytacean.yml b/emulators/boytacean.yml index 7d98f96e..2e0e82b0 100644 --- a/emulators/boytacean.yml +++ b/emulators/boytacean.yml @@ -1,6 +1,7 @@ emulator: Boytacean -type: libretro +type: standalone + libretro source: "https://github.com/joamag/boytacean" +upstream: "https://github.com/joamag/boytacean" profiled_date: "2026-03-18" core_version: "0.10.13" display_name: "Nintendo - Game Boy / Color (Boytacean)" @@ -11,65 +12,81 @@ systems: - nintendo-gbc notes: | - Boytacean is a Game Boy / Game Boy Color emulator written in Rust by Joao Magalhaes. - No external BIOS or boot ROM files are needed. + Boytacean is a Game Boy / Game Boy Color emulator written in Rust. - The core ships with multiple boot ROMs compiled directly into the binary as static - byte arrays in src/data.rs. For DMG mode the default is "DMG Bootix" (an open-source - boot ROM forked from SameBoy's Bootix project, 256 bytes). For CGB mode the default - is "CGB Boytacean" (a custom open-source CGB boot ROM, 2304 bytes). The original - Nintendo DMG, SGB, and CGB boot ROMs are also embedded as static arrays (DMG_BOOT, - SGB_BOOT, CGB_BOOT) but the defaults use the open-source replacements. + Libretro: boot ROMs compiled into binary as static byte arrays in + src/data.rs. load_boot_static() copies from arrays. No filesystem + access, no RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. No external files. + ref: frontends/libretro/src/core.rs:402 instance.load(true) - The libretro frontend (frontends/libretro/src/core.rs) calls instance.load(true) in - retro_load_game(), which routes through load_dmg() or load_cgb() depending on the - cartridge header. These call load_boot_static() which copies one of the embedded byte - arrays into MMU memory. There is no RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY call, no - filesystem access for boot ROMs, and no core option to load external boot ROM files. + Standalone (SDL): loads boot ROMs from ./res/boot/*.bin via + load_boot_path() at gb.rs:1363-1368. 8 boot ROM files shipped in repo. + ref: frontends/sdl/src/main.rs, src/gb.rs:1341 - The .info file (boytacean_libretro.info) lists no firmware entries. + Boot ROM defaults: + - DMG: BootRom::DmgBootix (gb.rs:1352) - open-source, 256 bytes + - CGB: BootRom::CgbBoytacean (gb.rs:1355) - open-source, 2304 bytes - Boot ROM selection defaults: - - DMG: BootRom::DmgBootix (gb.rs:1389) - open-source, 256 bytes - - CGB: BootRom::CgbBoytacean (gb.rs:1398) - open-source, 2304 bytes +files: + # Standalone mode loads from res/boot/ — libretro embeds all as arrays + - name: dmg_boot.bin + system: nintendo-gb + required: false + mode: standalone + size: 256 + note: "Original Nintendo DMG boot ROM" + source_ref: "gb.rs:1363, data.rs:14 (embedded as DMG_BOOT)" - All boot ROM source code lives in src/boot/, forked from SameBoy and assembled - with rgbds. The compiled binaries are then converted to Rust const arrays in data.rs. + - name: sgb_boot.bin + system: nintendo-gb + required: false + mode: standalone + size: 256 + note: "Super Game Boy boot ROM" + source_ref: "gb.rs:1364, data.rs:29 (embedded as SGB_BOOT)" -files: [] + - name: dmg_bootix.bin + system: nintendo-gb + required: false + mode: standalone + size: 256 + note: "Open-source DMG boot ROM from Bootix (default)" + source_ref: "gb.rs:1365, data.rs:44 (embedded as DMG_BOOTIX)" -analysis: - embedded_boot_roms: - dmg_boot: - constant: DMG_BOOT - size: 256 - description: "Original Nintendo DMG boot ROM (embedded, not default)" - source_ref: "data.rs:14-27" - sgb_boot: - constant: SGB_BOOT - size: 256 - description: "Super Game Boy boot ROM (embedded, not default)" - source_ref: "data.rs:29-42" - dmg_bootix: - constant: DMG_BOOTIX - size: 256 - description: "Open-source DMG boot ROM from Bootix project (default for DMG)" - source_ref: "data.rs:44-57" - mgb_bootix: - constant: MGB_BOOTIX - size: 256 - description: "Open-source MGB (Game Boy Pocket) boot ROM from Bootix project" - source_ref: "data.rs:59-72" - cgb_boot: - constant: CGB_BOOT - size: 2304 - description: "Original Nintendo CGB boot ROM (embedded, not default)" - source_ref: "data.rs:74-175" - cgb_boytacean: - constant: CGB_BOYTACEAN - size: 2304 - description: "Custom open-source CGB boot ROM (default for CGB)" - source_ref: "data.rs:177-275" - filesystem_access: false - system_directory_used: false - boot_rom_source: "src/boot/ (assembly, forked from SameBoy)" + - name: mgb_bootix.bin + system: nintendo-gb + required: false + mode: standalone + size: 256 + note: "Open-source MGB (Pocket) boot ROM from Bootix" + source_ref: "gb.rs:1366, data.rs:59 (embedded as MGB_BOOTIX)" + + - name: cgb_boot.bin + system: nintendo-gbc + required: false + mode: standalone + size: 2304 + note: "Original Nintendo CGB boot ROM" + source_ref: "gb.rs:1367, data.rs:74 (embedded as CGB_BOOT)" + + - name: cgb_boytacean.bin + system: nintendo-gbc + required: false + mode: standalone + size: 2304 + note: "Custom open-source CGB boot ROM (default)" + source_ref: "gb.rs:1368, data.rs:177 (embedded as CGB_BOYTACEAN)" + + - name: dmg_pyboy.bin + system: nintendo-gb + required: false + mode: standalone + note: "PyBoy DMG boot ROM variant (in res/boot/, not embedded in data.rs)" + source_ref: "res/boot/dmg_pyboy.bin" + + - name: cgb_pyboy.bin + system: nintendo-gbc + required: false + mode: standalone + note: "PyBoy CGB boot ROM variant (in res/boot/, not embedded in data.rs)" + source_ref: "res/boot/cgb_pyboy.bin" diff --git a/emulators/bsnes-jg.yml b/emulators/bsnes-jg.yml new file mode 100644 index 00000000..1e19d5c0 --- /dev/null +++ b/emulators/bsnes-jg.yml @@ -0,0 +1,120 @@ +emulator: bsnes-jg +type: libretro +source: "https://github.com/libretro/bsnes-jg" +upstream: "https://github.com/libretro/bsnes-jg" +profiled_date: "2026-03-18" +core_version: "2.0.0" +display_name: "Nintendo - SNES / SFC (bsnes-jg)" +cores: [bsnes-jg] +systems: + - nintendo-snes + - nintendo-sgb + - nintendo-satellaview + - nintendo-sufami-turbo + +notes: | + bsnes-jg is a fork of bsnes v115 by Rupert Carmichael, rewritten for + C++ standard library. Coprocessor firmware loaded from system_dir via + openFileCallback. SGB boot ROMs and CX4/HitachiDSP data ROM embedded. + BML game databases embedded as C++ string literals. + + ref: libretro/libretro.cpp:722 RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY + ref: libretro/libretro.cpp:428-470 firmware path construction (sysdir + filename) + ref: src/cartridge.cpp:774-786 openFileCallback for DSP/ST .program.rom/.data.rom + ref: src/coprocessor/icd.cpp:249,260 SGB1/SGB2 boot ROMs embedded + ref: src/cartridge.cpp:62 HitachiDSP static data ROM embedded (3072 bytes) + ref: libretro/libretro.cpp:30-33,410-416 BML databases embedded + +files: + # SNES coprocessor firmware — loaded from system_dir, all optional + # Games using these coprocessors won't work without the firmware + # but most SNES games don't use coprocessors + + - name: dsp1.program.rom + system: nintendo-snes + required: false + source_ref: "libretro/libretro.cpp:428-429" + + - name: dsp1.data.rom + system: nintendo-snes + required: false + source_ref: "libretro/libretro.cpp:431-432" + + - name: dsp1b.program.rom + system: nintendo-snes + required: false + source_ref: "libretro/libretro.cpp:434-435" + + - name: dsp1b.data.rom + system: nintendo-snes + required: false + source_ref: "libretro/libretro.cpp:437-438" + + - name: dsp2.program.rom + system: nintendo-snes + required: false + source_ref: "libretro/libretro.cpp:440-441" + + - name: dsp2.data.rom + system: nintendo-snes + required: false + source_ref: "libretro/libretro.cpp:443-444" + + - name: dsp3.program.rom + system: nintendo-snes + required: false + source_ref: "libretro/libretro.cpp:446-447" + + - name: dsp3.data.rom + system: nintendo-snes + required: false + source_ref: "libretro/libretro.cpp:450-451" + + - name: dsp4.program.rom + system: nintendo-snes + required: false + source_ref: "libretro/libretro.cpp:455" + + - name: dsp4.data.rom + system: nintendo-snes + required: false + source_ref: "libretro/libretro.cpp" + + - name: st010.program.rom + system: nintendo-snes + required: false + source_ref: "libretro/libretro.cpp" + + - name: st010.data.rom + system: nintendo-snes + required: false + source_ref: "libretro/libretro.cpp" + + - name: st011.program.rom + system: nintendo-snes + required: false + source_ref: "libretro/libretro.cpp" + + - name: st011.data.rom + system: nintendo-snes + required: false + source_ref: "libretro/libretro.cpp" + + - name: st018.program.rom + system: nintendo-snes + required: false + source_ref: "libretro/libretro.cpp" + + - name: st018.data.rom + system: nintendo-snes + required: false + source_ref: "libretro/libretro.cpp" + +# Embedded (no external file needed): +# SGB1BootROM[256] — src/coprocessor/icd.cpp:249 +# SGB2BootROM[256] — src/coprocessor/icd.cpp:260 +# hitachidspStaticDataROM[3072] — src/cartridge.cpp:62 +# boards_bml — libretro/boards_bml.hpp +# SuperFamicom_bml — libretro/SuperFamicom_bml.hpp +# BSMemory_bml — libretro/BSMemory_bml.hpp +# SufamiTurbo_bml — libretro/SufamiTurbo_bml.hpp diff --git a/emulators/bsnes.yml b/emulators/bsnes.yml index 64ea86a5..a0ef910e 100644 --- a/emulators/bsnes.yml +++ b/emulators/bsnes.yml @@ -161,8 +161,9 @@ files: - name: "BS-X.bin" required: true - note: "BS-X Satellaview BIOS ROM. Required for .bs format Satellaview games" - source_ref: "target-libretro/libretro.cpp:948, target-libretro/program.cpp:790-799" + md5: fed4d8242cfbed61343d53d48432aced + note: "BS-X Satellaview BIOS ROM. Required for .bs games. .info md5=fed4d824, repo has 96cf17bf (Rev 1 vs original)" + source_ref: "target-libretro/libretro.cpp:948" notes: hle_available: true diff --git a/emulators/bsnes2014.yml b/emulators/bsnes2014.yml new file mode 100644 index 00000000..408be048 --- /dev/null +++ b/emulators/bsnes2014.yml @@ -0,0 +1,122 @@ +emulator: bsnes 2014 +type: libretro +source: "https://github.com/libretro/bsnes2014" +upstream: "https://github.com/bsnes-emu/bsnes" +profiled_date: "2026-03-18" +core_version: "v094" +display_name: "Nintendo - SNES / SFC (bsnes 2014)" +cores: [bsnes2014_accuracy, bsnes2014_balanced, bsnes2014_performance] +systems: + - nintendo-snes + - nintendo-sgb + - nintendo-satellaview + - nintendo-sufami-turbo + +notes: | + bsnes 2014 is based on bsnes v094. Three build profiles: + accuracy (dot-based PPU), balanced, performance (scanline PPU). + All 3 profiles use the same 18 firmware files. Profiles differ only + in PPU implementation (sfc/profile-*.hpp: CPU/SMP/DSP/PPU alternates), + not in coprocessor support. CX4/Hitachi compiled in all profiles. + .info says performance has 17 (no cx4) — this is wrong, verified in + sfc/profile-performance.hpp which only changes CPU/SMP/DSP/PPU. + + Unlike modern bsnes (v115+), v094 does NOT have HLE fallback for + coprocessors. CX4 is NOT embedded — cx4.data.rom is required + externally. SGB boot ROM is NOT embedded — sgb.boot.rom required. + + Firmware loaded from system_dir via file::exists() + mmapstream. + ref: target-libretro/libretro.cpp — penviron(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY) + ref: ananke/heuristics/super-famicom.hpp — firmware name definitions + ref: ananke/super-famicom.cpp:120 — sgb.boot.rom copy + +files: + # DSP coprocessor split ROMs (program + data) + - name: dsp1.program.rom + system: nintendo-snes + required: false + source_ref: "ananke/heuristics/super-famicom.hpp:381" + + - name: dsp1.data.rom + system: nintendo-snes + required: false + source_ref: "ananke/heuristics/super-famicom.hpp:382" + + - name: dsp1b.program.rom + system: nintendo-snes + required: false + source_ref: "ananke/heuristics/super-famicom.hpp:381" + + - name: dsp1b.data.rom + system: nintendo-snes + required: false + source_ref: "ananke/heuristics/super-famicom.hpp:382" + + - name: dsp2.program.rom + system: nintendo-snes + required: false + + - name: dsp2.data.rom + system: nintendo-snes + required: false + + - name: dsp3.program.rom + system: nintendo-snes + required: false + note: "no HLE fallback in v094 — required for SD Gundam GX" + + - name: dsp3.data.rom + system: nintendo-snes + required: false + + - name: dsp4.program.rom + system: nintendo-snes + required: false + + - name: dsp4.data.rom + system: nintendo-snes + required: false + + # CX4 (Hitachi) — NOT embedded in v094 unlike bsnes v115+ + - name: cx4.data.rom + system: nintendo-snes + required: false + size: 3072 + note: "Capcom CX4 coprocessor data. Required for Mega Man X2/X3. Used in all 3 profiles (.info performance is wrong). NOT embedded in v094." + source_ref: "ananke/heuristics/super-famicom.hpp:146" + + # Seta coprocessors + - name: st010.program.rom + system: nintendo-snes + required: false + + - name: st010.data.rom + system: nintendo-snes + required: false + + - name: st011.program.rom + system: nintendo-snes + required: false + note: "no HLE fallback — required for Hayazashi Nidan Morita Shougi" + + - name: st011.data.rom + system: nintendo-snes + required: false + + - name: st018.program.rom + system: nintendo-snes + required: false + note: "ARM coprocessor. Required for Hayazashi Nidan Morita Shougi 2" + source_ref: "ananke/heuristics/super-famicom.hpp:475-476" + + - name: st018.data.rom + system: nintendo-snes + required: false + + # SGB boot ROM — NOT embedded in v094 unlike bsnes-jg/v115+ + - name: sgb.boot.rom + system: nintendo-sgb + required: false + size: 256 + note: "SGB boot ROM (256 bytes). NOT embedded in v094. Present in all 3 profiles." + source_ref: "ananke/heuristics/super-famicom.hpp:133, ananke/super-famicom.cpp:120" diff --git a/emulators/bsnes_cplusplus98.yml b/emulators/bsnes_cplusplus98.yml new file mode 100644 index 00000000..1cf36c1c --- /dev/null +++ b/emulators/bsnes_cplusplus98.yml @@ -0,0 +1,36 @@ +emulator: bsnes C++98 +type: libretro +source: "https://github.com/libretro/bsnes-libretro-cplusplus98" +upstream: "https://github.com/bsnes-emu/bsnes" +profiled_date: "2026-03-18" +core_version: "v085 (Performance)" +display_name: "Nintendo - SNES / SFC (bsnes C++98 (v085))" +cores: [bsnes_cplusplus98] +systems: + - nintendo-snes + +notes: | + bsnes C++98 is bsnes v085 downgraded to C++98 for old compilers. + Performance profile only. is_experimental=true. + + Firmware loading differs from newer bsnes versions: + - NEC DSP (dsp1/2/3/4) and Hitachi DSP (cx4) firmware loaded from + the SAME DIRECTORY as the ROM, not from system_dir. + - Path: dir(interface->path(Slot::Base, ".dsp")) + firmware_name + ref: snes/cartridge/markup.cpp:231 + - interface->path() returns basename + hint + ref: snes/libretro/libretro.cpp path() method + - Firmware name comes from the game's XML/BML markup (root["firmware"]) + NOT fixed names like dsp1.program.rom + - Files are COMBINED (program+data in one file), not split + ref: snes/cartridge/markup.cpp:243-244 reads promsize*3 + dromsize*2 + + .info has firmware_count=0 because firmware is loaded from ROM dir, + not from system_dir — RetroArch can't pre-populate them. + + The core warns "NEC DSP firmware X is missing" if not found but + continues without the coprocessor (games using it won't work). + +files: [] +# firmware loaded from ROM directory, not system directory +# no files to declare for system_dir placement diff --git a/emulators/bsnes_hd_beta.yml b/emulators/bsnes_hd_beta.yml new file mode 100644 index 00000000..cdb45eb7 --- /dev/null +++ b/emulators/bsnes_hd_beta.yml @@ -0,0 +1,114 @@ +emulator: bsnes-hd beta +type: libretro +source: "https://github.com/DerKoun/bsnes-hd" +upstream: "https://github.com/bsnes-emu/bsnes" +profiled_date: "2026-03-18" +core_version: "v10.6" +# .info says v112.v12 but repo shows Version = "10.6", SerializerVersion = "114.2" +display_name: "Nintendo - SNES / SFC (bsnes-hd beta)" +cores: [bsnes_hd_beta] +systems: + - nintendo-snes + - nintendo-sgb + - nintendo-satellaview + - nintendo-sufami-turbo + +notes: | + bsnes-hd beta is bsnes ~v114 by DerKoun with widescreen and + increased color depth. Same firmware as bsnes v115. + repo Version="10.6", SerializerVersion="114.2" + ref: bsnes/emulator/emulator.hpp:34,40 + + SGB boot ROMs embedded in binary (icd/boot-roms.cpp:1,12). + SGB1.sfc/SGB2.sfc are SGB cartridge ROMs (not boot ROMs). + HLE available for DSP1/2/4, ST010, CX4 — LLE firmware optional. + DSP3, ST011, ST018 have no HLE — LLE firmware required for those. + + ref: bsnes/sfc/coprocessor/icd/boot-roms.cpp:1,12 + ref: bsnes/sfc/coprocessor/icd/icd.cpp:87,90 + ref: bsnes/heuristics/super-famicom.cpp:115 + +files: + # Split DSP coprocessor firmware + - name: dsp1.program.rom + system: nintendo-snes + required: false + - name: dsp1.data.rom + system: nintendo-snes + required: false + - name: dsp1b.program.rom + system: nintendo-snes + required: false + - name: dsp1b.data.rom + system: nintendo-snes + required: false + - name: dsp2.program.rom + system: nintendo-snes + required: false + - name: dsp2.data.rom + system: nintendo-snes + required: false + - name: dsp3.program.rom + system: nintendo-snes + required: false + note: "no HLE — required for SD Gundam GX" + - name: dsp3.data.rom + system: nintendo-snes + required: false + - name: dsp4.program.rom + system: nintendo-snes + required: false + - name: dsp4.data.rom + system: nintendo-snes + required: false + + # CX4 (Hitachi) + - name: cx4.data.rom + system: nintendo-snes + required: false + size: 3072 + note: "HLE available — LLE optional for Mega Man X2/X3" + + # Seta coprocessors + - name: st010.program.rom + system: nintendo-snes + required: false + - name: st010.data.rom + system: nintendo-snes + required: false + - name: st011.program.rom + system: nintendo-snes + required: false + note: "no HLE — required for Hayazashi Nidan Morita Shougi" + - name: st011.data.rom + system: nintendo-snes + required: false + - name: st018.program.rom + system: nintendo-snes + required: false + note: "no HLE — required for Hayazashi Nidan Morita Shougi 2" + - name: st018.data.rom + system: nintendo-snes + required: false + + # SGB cartridge ROMs (NOT boot ROMs — boot ROMs are embedded) + # sgb_bios variable set by core option bsnes_sgb_bios (libretro.cpp:280-285) + - name: SGB1.sfc + system: nintendo-sgb + required: false + md5: b15ddb15721c657d82c5bab6db982ee9 + note: "SGB1 cartridge ROM. Boot ROM embedded in icd/boot-roms.cpp:1" + source_ref: "libretro.cpp:1022,1040" + - name: SGB2.sfc + system: nintendo-sgb + required: false + md5: 8ecd73eb4edf7ed7e81aef1be80031d5 + note: "SGB2 cartridge ROM. Boot ROM embedded in icd/boot-roms.cpp:12" + source_ref: "libretro.cpp:1022,1040" + + # Satellaview BIOS — required for .bs files + - name: BS-X.bin + system: nintendo-satellaview + required: false + note: "Satellaview BIOS. Required when loading .bs files. Core returns false if missing." + source_ref: "libretro.cpp:1054-1060" diff --git a/emulators/bsnes_mercury.yml b/emulators/bsnes_mercury.yml new file mode 100644 index 00000000..7df7f332 --- /dev/null +++ b/emulators/bsnes_mercury.yml @@ -0,0 +1,101 @@ +emulator: bsnes-mercury +type: libretro +source: "https://github.com/libretro/bsnes-mercury" +upstream: "https://github.com/bsnes-emu/bsnes" +profiled_date: "2026-03-18" +core_version: "v094 (Mercury)" +display_name: "Nintendo - SNES / SFC (bsnes-mercury)" +cores: [bsnes_mercury_accuracy, bsnes_mercury_balanced, bsnes_mercury_performance] +systems: + - nintendo-snes + - nintendo-sgb + - nintendo-satellaview + - nintendo-sufami-turbo + +notes: | + bsnes-mercury is bsnes v094 with Mercury optimizations: HLE for DSP + and Hitachi coprocessors, firmware_appended support, overclocking. + Three profiles: accuracy, balanced, performance (PPU differs, not firmware). + .info says performance has 17 fw (no cx4) but the code compiles CX4 LLE + in all profiles — cx4.data.rom works in performance too. The .info is wrong. + Core option bsnes_chip_hle (default LLE) controls HLE/LLE at runtime. + ref: target-libretro/libretro.cpp altImplementation(), "bsnes_chip_hle" + + Same firmware loading as bsnes2014: system_dir via file::exists + + mmapstream. No BS-X auto-load from system_dir (subsystem only). + ref: target-libretro/libretro.cpp:245-254 + + HLE fallback for DSP1/1B/2/4, Hitachi/CX4, ST010. + ref: sfc/cartridge/markup.cpp:351,404,618 + + firmware_appended: firmware can be appended to end of ROM file. + ref: ananke/heuristics/super-famicom.hpp:83 + + SGB boot ROM NOT embedded (sgb.boot.rom from system_dir). + CX4 NOT embedded (cx4.data.rom from system_dir). + +files: + # Same 18 files as bsnes2014 accuracy — see bsnes2014.yml for details + # DSP1-4 split (program+data), CX4, ST010-018, sgb.boot.rom + - name: dsp1.program.rom + system: nintendo-snes + required: false + - name: dsp1.data.rom + system: nintendo-snes + required: false + - name: dsp1b.program.rom + system: nintendo-snes + required: false + - name: dsp1b.data.rom + system: nintendo-snes + required: false + - name: dsp2.program.rom + system: nintendo-snes + required: false + - name: dsp2.data.rom + system: nintendo-snes + required: false + - name: dsp3.program.rom + system: nintendo-snes + required: false + note: "no HLE — required for SD Gundam GX" + - name: dsp3.data.rom + system: nintendo-snes + required: false + - name: dsp4.program.rom + system: nintendo-snes + required: false + - name: dsp4.data.rom + system: nintendo-snes + required: false + - name: cx4.data.rom + system: nintendo-snes + required: false + size: 3072 + note: "HLE available via Mercury — LLE optional" + source_ref: "ananke/heuristics/super-famicom.hpp:146" + - name: st010.program.rom + system: nintendo-snes + required: false + - name: st010.data.rom + system: nintendo-snes + required: false + - name: st011.program.rom + system: nintendo-snes + required: false + note: "no HLE — required for Hayazashi Nidan Morita Shougi" + - name: st011.data.rom + system: nintendo-snes + required: false + - name: st018.program.rom + system: nintendo-snes + required: false + - name: st018.data.rom + system: nintendo-snes + required: false + - name: sgb.boot.rom + system: nintendo-sgb + required: false + size: 256 + note: "SGB boot ROM. NOT embedded in v094." + source_ref: "ananke/heuristics/super-famicom.hpp:133" diff --git a/emulators/cannonball.yml b/emulators/cannonball.yml index 9322094b..afea2780 100644 --- a/emulators/cannonball.yml +++ b/emulators/cannonball.yml @@ -1,6 +1,7 @@ emulator: Cannonball -type: libretro +type: standalone + libretro source: "https://github.com/libretro/cannonball" +upstream: "https://github.com/djyt/cannonball" profiled_date: "2026-03-18" core_version: "1.0" display_name: "Cannonball" diff --git a/emulators/cap32.yml b/emulators/cap32.yml index 37ab47fa..1a097655 100644 --- a/emulators/cap32.yml +++ b/emulators/cap32.yml @@ -1,6 +1,7 @@ emulator: Caprice32 -type: libretro +type: standalone + libretro source: "https://github.com/libretro/libretro-cap32" +upstream: "https://github.com/ColinPitrat/caprice32" profiled_date: "2026-03-18" core_version: "v4.2.0" display_name: "Amstrad - CPC/GX4000 (Caprice32)" @@ -42,7 +43,49 @@ notes: | CP/M support loads a pre-built snapshot (cpm.h) into memory via snapshot_load_mem() in slots.c:87. -files: [] +files: + # Standalone loads from rom_path/ — libretro embeds all as C arrays + # ref: ColinPitrat/caprice32/src/cap32.cpp:1006-1007,1159-1171 + - name: cpc464.rom + system: amstrad-cpc + required: true + mode: standalone + size: 32768 + note: "CPC 464 OS + BASIC 1.0" + source_ref: "caprice32/src/cap32.cpp:1006, rom/cpc464.rom" + - name: cpc664.rom + system: amstrad-cpc + required: false + mode: standalone + size: 32768 + note: "CPC 664 OS + BASIC 1.0" + source_ref: "caprice32/rom/cpc664.rom" + - name: cpc6128.rom + system: amstrad-cpc + required: false + mode: standalone + size: 32768 + note: "CPC 6128 OS + BASIC 1.1" + source_ref: "caprice32/rom/cpc6128.rom" + - name: amsdos.rom + system: amstrad-cpc + required: false + mode: standalone + size: 16384 + note: "AMSDOS disc ROM (sideways slot 7)" + source_ref: "caprice32/src/cap32.cpp:1166" + - name: system.cpr + system: amstrad-cpc + required: false + mode: standalone + note: "CPC+ system cartridge" + source_ref: "caprice32/rom/system.cpr" + - name: MF2.rom + system: amstrad-cpc + required: false + mode: standalone + note: "Multiface 2 ROM" + source_ref: "caprice32/rom/MF2.rom" platform_details: bios_mapping: diff --git a/emulators/cdi2015.yml b/emulators/cdi2015.yml index 0256a93c..7e1fcca5 100644 --- a/emulators/cdi2015.yml +++ b/emulators/cdi2015.yml @@ -1,8 +1,35 @@ -emulator: "cdi2015" -type: alias -alias_of: "same_cdi" +emulator: CDi 2015 +type: libretro +source: "https://github.com/libretro/mame2015-libretro" +upstream: "https://github.com/mamedev/mame" profiled_date: "2026-03-18" core_version: "0.160" display_name: "Philips CDi (CDi 2015)" -note: "This core uses the same BIOS/firmware as same_cdi. See emulators/same_cdi.yml for details." -files: [] +cores: [cdi2015] +systems: + - philips-cdi + +notes: | + MAME 0.160 compiled with SUBTARGET=cdi (CDi driver only). + ref: libretro-super/rules.d/core-rules.sh — SUBTARGET=cdi + source: libretro/mame2015-libretro + + Loads cdimono1.zip from system_dir. + ref: src/osd/retro/retromain.c:1989 — + sprintf(tmp_dir, "%s%ccdimono1.zip", retro_system_directory, slash) + If not found as ZIP, falls back to system_dir as rompath. + ref: src/osd/retro/retromain.c:1991 + + ROM_START(cdimono1) in src/mame/drivers/cdi.c:421 defines: + cdi200.rom (0x80000, CRC 279683ca, SHA1 53360a1f21ddac952e95306ced64186a3fc0b93e) + cdic.bin (MCU, undumped) + slave.bin (MCU, undumped) + + The ZIP contains the MAME romset for cdimono1 — user provides it. + +files: + - name: cdimono1.zip + system: philips-cdi + required: true + note: "MAME cdimono1 romset ZIP. Contains cdi200.rom + MCU dumps." + source_ref: "src/osd/retro/retromain.c:1989, src/mame/drivers/cdi.c:421" diff --git a/emulators/chimerasnes.yml b/emulators/chimerasnes.yml index a2027fd3..09d395dc 100644 --- a/emulators/chimerasnes.yml +++ b/emulators/chimerasnes.yml @@ -1,9 +1,29 @@ -emulator: "chimerasnes" -type: alias -alias_of: "snes9x" +emulator: ChimeraSNES +type: libretro +source: "https://github.com/jamsilva/chimerasnes" +upstream: "https://github.com/snes9xgit/snes9x" +profiled_date: "2026-03-18" core_version: "" display_name: "Nintendo - SNES / SFC (ChimeraSNES)" -profiled_date: "2026-03-18" -display_name: "Nintendo - SNES / SFC (ChimeraSNES)" -note: "This core uses the same BIOS/firmware as snes9x. See emulators/snes9x.yml for details." +cores: [chimerasnes] +systems: + - nintendo-snes + +notes: | + Fork of Snes9x ~2005, optimized for slow hardware. + NOT identical to snes9x — different firmware behavior. + + All coprocessor data is HLE with static ROM tables embedded: + DSP1: DSP1ROM[1024] in source/dsp1.c:6 + DSP3: DSP3_DataROM[1024] in source/dsp3.c:7 + No external DSP/ST/CX4 firmware files needed. + + BS-X: path constructed in source/bsx.c:873 as romdir/BS-X.bios + (relative to ROM directory, NOT system_dir). No + RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY for firmware loading. + + firmware_count absent in .info (= 0). Confirmed in source. + files: [] +# all coprocessors HLE with embedded data +# BS-X.bios loaded from ROM directory, not system_dir diff --git a/emulators/citra.yml b/emulators/citra.yml index 13b4bc72..14f8b295 100644 --- a/emulators/citra.yml +++ b/emulators/citra.yml @@ -1,49 +1,53 @@ -emulator: Citra / Lime3DS / Azahar +emulator: Citra type: standalone + libretro -source: "https://github.com/azahar-emu/azahar" -logo: "https://raw.githubusercontent.com/wheremyfoodat/citra/master/dist/citra.svg" +source: "https://github.com/libretro/citra" +upstream: "https://github.com/citra-emu/citra" profiled_date: "2026-03-18" core_version: "Git" display_name: "Nintendo - 3DS (Citra)" +cores: [citra] systems: [nintendo-3ds] notes: | - Citra (now Azahar, formerly Lime3DS) uses HLE for most system services, - so many files are optional. AES keys are the most important for decrypting - games and system data. Shared font has a built-in fallback. - File locations relative to user dir: sysdata/ for keys/boot/font/otp/seeddb, + Citra 3DS emulator (pre-Azahar). Data dir: citra-emu. + HLE for most services — files optional. AES keys most important. + File locations: sysdata/ for keys/boot/font/seeddb, nand/ for NAND filesystem, nand/private/ for movable.sed. - Legacy data dirs: citra-emu, lime3ds-emu -> azahar-emu. + ref: src/common/common_paths.h:67-70 + + Key file: aes_keys.txt (NOT keys.txt — that's Azahar). + ref: src/common/common_paths.h:68 + + Azahar fork: see emulators/azahar.yml (uses keys.txt, data dir azahar-emu). + citra_canary: same repo, see emulators/citra_canary.yml. files: # --- sysdata/ directory --- - - name: "keys.txt" - path: "sysdata/keys.txt" + - name: "aes_keys.txt" + path: "sysdata/aes_keys.txt" description: "AES encryption keys" required: false - source_ref: "src/common/common_paths.h:83, src/core/hw/aes/key.cpp:291" - notes: "Contains AES key slots (X/Y/N types) for game decryption; has built-in encrypted fallback keys (key.cpp:300-306)" + source_ref: "src/common/common_paths.h:68, src/core/hw/aes/key.cpp LoadPresetKeys()" + notes: "Named aes_keys.txt in libretro/citra (keys.txt in Azahar)" - name: "boot9.bin" path: "sysdata/boot9.bin" description: "ARM9 bootrom" required: false - source_ref: "src/common/common_paths.h:84" - notes: "3DS ARM9 boot ROM; used for hardware key derivation" + source_ref: "src/common/common_paths.h:69" - name: "sector0x96.bin" path: "sysdata/sector0x96.bin" description: "Secret sector from NAND" required: false - source_ref: "src/common/common_paths.h:85" - notes: "OTP-encrypted sector 0x96 from 3DS NAND; used for key derivation" + source_ref: "src/common/common_paths.h:70" - name: "shared_font.bin" path: "sysdata/shared_font.bin" description: "System shared font" required: false - source_ref: "src/common/common_paths.h:82, src/core/hle/service/apt/apt.cpp:284" - notes: "Fallback if NAND system archive not available; built-in font data also exists (archive_ncch.cpp:28,189)" + source_ref: "src/common/common_paths.h:67" + notes: "HLE fallback if missing" - name: "seeddb.bin" path: "sysdata/seeddb.bin" @@ -52,34 +56,10 @@ files: source_ref: "src/core/file_sys/seed_db.cpp:15" notes: "Required for some seed-encrypted games (9.6+ titles)" - - name: "otp.bin" - path: "sysdata/otp.bin" - description: "One-time programmable memory dump" - required: false - source_ref: "src/core/hw/unique_data.cpp:214" - notes: "Console-unique OTP data; used for hardware key derivation" - - # --- nand/ directory --- - - name: "movable.sed" - path: "nand/private/movable.sed" - description: "Movable unique key" - required: false - source_ref: "src/core/hw/unique_data.cpp:218" - notes: "Console-unique key seed for SD/NAND encryption; signature verified at load (unique_data.cpp:197)" - - - name: "SecureInfo_A" - path: "nand/rw/sys/SecureInfo_A" - description: "Console serial and region info" - required: false - source_ref: "src/core/hw/unique_data.cpp:206" - notes: "Contains console serial number and region data" - - - name: "LocalFriendCodeSeed_B" - path: "nand/rw/sys/LocalFriendCodeSeed_B" - description: "Friend code seed" - required: false - source_ref: "src/core/hw/unique_data.cpp:210" - notes: "Used for friend code generation" + # otp.bin, movable.sed, SecureInfo_A, LocalFriendCodeSeed_B + # do NOT exist in libretro/citra — they are Azahar-only features + # (src/core/hw/unique_data.cpp exists in azahar, not in libretro/citra) + # See emulators/azahar.yml for those files. # --- NAND system archives (installed titles) --- - name: "shared font (system archive)" diff --git a/emulators/citra2018.yml b/emulators/citra2018.yml new file mode 100644 index 00000000..d6d3bbf5 --- /dev/null +++ b/emulators/citra2018.yml @@ -0,0 +1,43 @@ +emulator: Citra 2018 +type: libretro +source: "https://github.com/libretro/citra2018" +upstream: "https://github.com/citra-emu/citra" +profiled_date: "2026-03-18" +core_version: "Git" +display_name: "Nintendo - 3DS (Citra 2018)" +cores: [citra2018] +systems: + - nintendo-3ds + +notes: | + Citra 2018 is a 2018 snapshot of the Citra 3DS emulator. + Older than current Azahar/Citra — fewer firmware files. + Data dir: citra-emu (not azahar-emu). + ref: src/common/common_paths.h:24 + + Uses RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. + ref: src/citra_libretro/environment.cpp:107 + + Loads from sysdata/: + aes_keys.txt (not keys.txt like current Citra) + shared_font.bin + ref: src/core/hw/aes/key.cpp:72-73, src/core/hle/service/apt/apt.cpp:174 + + Does NOT load (added in later versions): + boot9.bin, sector0x96.bin, seeddb.bin, otp.bin, + movable.sed, SecureInfo_A, LocalFriendCodeSeed_B + + firmware_count absent in .info (= 0). Files are optional (HLE). + +files: + - name: aes_keys.txt + system: nintendo-3ds + required: false + note: "AES encryption keys (named aes_keys.txt, not keys.txt like current Citra)" + source_ref: "src/core/hw/aes/key.cpp:72-73" + + - name: shared_font.bin + system: nintendo-3ds + required: false + note: "system shared font, HLE fallback if missing" + source_ref: "src/core/hle/service/apt/apt.cpp:174" diff --git a/emulators/citra_canary.yml b/emulators/citra_canary.yml new file mode 100644 index 00000000..d3d927bc --- /dev/null +++ b/emulators/citra_canary.yml @@ -0,0 +1,62 @@ +emulator: Citra Canary +type: libretro +source: "https://github.com/libretro/citra" +upstream: "https://github.com/citra-emu/citra" +profiled_date: "2026-03-18" +core_version: "Git" +display_name: "Nintendo - 3DS (Citra Canary/Experimental)" +cores: [citra_canary] +systems: + - nintendo-3ds + +notes: | + Same repo as citra (libretro/citra master branch). Canary = experimental. + Data dir: citra-emu (not azahar-emu — this is pre-Azahar Citra). + ref: src/common/common_paths.h + + Key file: aes_keys.txt (NOT keys.txt like Azahar). + ref: src/common/common_paths.h:68 + + Uses RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. + ref: src/citra_libretro/environment.cpp:149 + + Files in sysdata/: + aes_keys.txt — AES encryption keys (common_paths.h:68) + boot9.bin — ARM9 bootrom (common_paths.h:69) + sector0x96.bin — secret NAND sector (common_paths.h:70) + shared_font.bin — system shared font, HLE fallback (common_paths.h:67) + seeddb.bin — game seed database (file_sys/seed_db.cpp:15) + + NOTE: citra.yml profiles Azahar which uses keys.txt (not aes_keys.txt). + This core uses the pre-Azahar naming convention. + +files: + - name: aes_keys.txt + system: nintendo-3ds + required: false + note: "AES keys (named aes_keys.txt in pre-Azahar Citra)" + source_ref: "src/common/common_paths.h:68, src/core/hw/aes/key.cpp" + + - name: boot9.bin + system: nintendo-3ds + required: false + note: "ARM9 bootrom for key derivation" + source_ref: "src/common/common_paths.h:69" + + - name: sector0x96.bin + system: nintendo-3ds + required: false + note: "OTP-encrypted NAND sector for key derivation" + source_ref: "src/common/common_paths.h:70" + + - name: shared_font.bin + system: nintendo-3ds + required: false + note: "system shared font, HLE fallback if missing" + source_ref: "src/common/common_paths.h:67" + + - name: seeddb.bin + system: nintendo-3ds + required: false + note: "game seed database for seed-encrypted games (9.6+ titles)" + source_ref: "src/core/file_sys/seed_db.cpp:15" diff --git a/emulators/clownmdemu.yml b/emulators/clownmdemu.yml index c9a58ee0..152bdea1 100644 --- a/emulators/clownmdemu.yml +++ b/emulators/clownmdemu.yml @@ -1,6 +1,7 @@ emulator: ClownMDEmu -type: libretro -source: "https://github.com/libretro/clownmdemu-libretro" +type: standalone + libretro +source: "https://github.com/Clownacy/clownmdemu-libretro" +upstream: "https://github.com/Clownacy/clownmdemu" profiled_date: "2026-03-18" core_version: "Git" display_name: "Sega - MD/CD (ClownMDEmu)" diff --git a/emulators/daphne.yml b/emulators/daphne.yml index 0937674e..2b911513 100644 --- a/emulators/daphne.yml +++ b/emulators/daphne.yml @@ -1,6 +1,7 @@ emulator: Daphne -type: libretro +type: standalone + libretro source: "https://github.com/libretro/daphne" +upstream: "https://github.com/DirtBagXon/hypseus-singe" profiled_date: "2026-03-18" core_version: "Git" display_name: "Arcade (Daphne)" diff --git a/emulators/dinothawr.yml b/emulators/dinothawr.yml index a49e27a7..ad05b950 100644 --- a/emulators/dinothawr.yml +++ b/emulators/dinothawr.yml @@ -6,9 +6,24 @@ core_version: "v1.0" display_name: "Dinothawr" cores: [dinothawr] systems: [] + +notes: | + Puzzle game by the libretro team. Push blocks on ice. + Game data (TMX levels, sprites, music) needed for the core to work. + + Two loading modes: + 1. Load dinothawr.game as content (data in content directory) + 2. supports_no_game=true: loads from system_dir/dinothawr/ + ref: libretro.cpp:267-271 — + game_path_dir = join(system_dir, "/", "dinothawr") + game_path = join(game_path_dir, "/", "dinothawr.game") + + Buildbot provides Dinothawr.zip via Core System Files Downloader. + ref: buildbot.libretro.com/assets/system/Dinothawr.zip + +data_directories: + - ref: dinothawr + source_ref: "libretro.cpp:270-271" + files: [] -notes: > - Puzzle game developed by the libretro team as a reference libretro core. - Push blocks on ice to solve puzzles. Game data (maps, sprites, music) - ships in the libretro repo and is loaded as content. - No BIOS, firmware, or system directory files required. +# no BIOS/firmware — game data loaded via data_directories or content diff --git a/emulators/dirksimple.yml b/emulators/dirksimple.yml index 160630c7..780b84c4 100644 --- a/emulators/dirksimple.yml +++ b/emulators/dirksimple.yml @@ -1,8 +1,41 @@ -emulator: "dirksimple" -type: alias -alias_of: "daphne" -profiled_date: "2026-03-18" +emulator: DirkSimple +type: standalone + libretro +source: "https://github.com/icculus/DirkSimple" +upstream: "https://github.com/icculus/DirkSimple" +profiled_date: "2026-03-19" core_version: "0.2" display_name: "Laserdisc arcade game (DirkSimple)" -note: "This core uses the same BIOS/firmware as daphne. See emulators/daphne.yml for details." +cores: [dirksimple] +systems: + - laserdisc-arcade + +notes: | + DirkSimple by Ryan C. Gordon (icculus). Plays laserdisc arcade games + via Lua scripts + Ogg Theora video. NOT related to Daphne — completely + different architecture. + + Libretro port loads from system_dir/DirkSimple/. + ref: dirksimple_libretro.c:782,795 — + sysdir from RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY + basedir = sysdir + "/DirkSimple/" + DirkSimple_startup(basedir, info->path, ...) at line 798 + + Standalone loads from data/ in the binary's directory. + ref: README.md — "data directory must be included in same directory as binary" + + Game data in data/games//game.lua + assets (PNG, WAV). + User provides the OGV laserdisc video as content. + + Supported games: Dragon's Lair (lair), Cliff Hanger (cliff). + 10 data files in the repo (game.lua scripts, sprites, sounds). + + Buildbot provides DirkSimple.zip via Core System Files Downloader. + ref: buildbot.libretro.com/assets/system/DirkSimple.zip + +data_directories: + - ref: dirksimple + source_ref: "dirksimple_libretro.c:795" + files: [] +# no BIOS/firmware — game data via data_directories +# user provides OGV video as content diff --git a/emulators/dolphin.yml b/emulators/dolphin.yml index b93ac5c7..2292ff97 100644 --- a/emulators/dolphin.yml +++ b/emulators/dolphin.yml @@ -156,6 +156,118 @@ files: note: "SSL root CA certificate. Auto-extracted from IOS13 content during NAND import" source_ref: "Source/Core/DiscIO/NANDImporter.cpp:238" + # -- Realtek Bluetooth firmware (Wiimote passthrough) -- + # Required for real Wiimote connectivity via USB Bluetooth adapters with Realtek chipsets. + # Dolphin can auto-download these from gitlab.com/kernel-firmware/linux-firmware. + # Placed in Load/Firmware/rtl_bt/ (standalone) or User/Load/Firmware/rtl_bt/ (libretro save dir). + # Each device needs _fw.bin (required) and _config.bin (optional, some devices). + # ref: Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:382-425,427-481 + + - name: "rtl8723a_fw.bin" + path: "Load/Firmware/rtl_bt/rtl8723a_fw.bin" + required: false + mode: standalone + note: "Realtek 8723A BT firmware for Wiimote passthrough" + source_ref: "RealtekFirmwareLoader.cpp:387" + + - name: "rtl8723b_fw.bin" + path: "Load/Firmware/rtl_bt/rtl8723b_fw.bin" + required: false + mode: standalone + note: "Realtek 8723B BT firmware for Wiimote passthrough" + source_ref: "RealtekFirmwareLoader.cpp:389" + + - name: "rtl8723d_fw.bin" + path: "Load/Firmware/rtl_bt/rtl8723d_fw.bin" + required: false + mode: standalone + note: "Realtek 8723D BT firmware for Wiimote passthrough" + source_ref: "RealtekFirmwareLoader.cpp:391" + + - name: "rtl8761a_fw.bin" + path: "Load/Firmware/rtl_bt/rtl8761a_fw.bin" + required: false + mode: standalone + note: "Realtek 8761A BT firmware for Wiimote passthrough" + source_ref: "RealtekFirmwareLoader.cpp:393" + + - name: "rtl8761bu_fw.bin" + path: "Load/Firmware/rtl_bt/rtl8761bu_fw.bin" + required: false + mode: standalone + note: "Realtek 8761BU BT firmware for Wiimote passthrough (most common USB dongle)" + source_ref: "RealtekFirmwareLoader.cpp:395" + + - name: "rtl8821a_fw.bin" + path: "Load/Firmware/rtl_bt/rtl8821a_fw.bin" + required: false + mode: standalone + note: "Realtek 8821A BT firmware for Wiimote passthrough" + source_ref: "RealtekFirmwareLoader.cpp:397" + + - name: "rtl8821c_fw.bin" + path: "Load/Firmware/rtl_bt/rtl8821c_fw.bin" + required: false + mode: standalone + note: "Realtek 8821C BT firmware for Wiimote passthrough" + source_ref: "RealtekFirmwareLoader.cpp:399" + + - name: "rtl8822b_fw.bin" + path: "Load/Firmware/rtl_bt/rtl8822b_fw.bin" + required: false + mode: standalone + note: "Realtek 8822B BT firmware for Wiimote passthrough" + source_ref: "RealtekFirmwareLoader.cpp:403" + + - name: "rtl8822cu_fw.bin" + path: "Load/Firmware/rtl_bt/rtl8822cu_fw.bin" + required: false + mode: standalone + note: "Realtek 8822CU BT firmware for Wiimote passthrough" + source_ref: "RealtekFirmwareLoader.cpp:401" + + - name: "rtl8851bu_fw.bin" + path: "Load/Firmware/rtl_bt/rtl8851bu_fw.bin" + required: false + mode: standalone + note: "Realtek 8851BU BT firmware for Wiimote passthrough" + source_ref: "RealtekFirmwareLoader.cpp:405" + + - name: "rtl8852au_fw.bin" + path: "Load/Firmware/rtl_bt/rtl8852au_fw.bin" + required: false + mode: standalone + note: "Realtek 8852AU BT firmware for Wiimote passthrough" + source_ref: "RealtekFirmwareLoader.cpp:407" + + - name: "rtl8852bu_fw.bin" + path: "Load/Firmware/rtl_bt/rtl8852bu_fw.bin" + required: false + mode: standalone + note: "Realtek 8852BU BT firmware for Wiimote passthrough" + source_ref: "RealtekFirmwareLoader.cpp:409" + + - name: "rtl8852cu_fw.bin" + path: "Load/Firmware/rtl_bt/rtl8852cu_fw.bin" + required: false + mode: standalone + note: "Realtek 8852CU BT firmware for Wiimote passthrough" + source_ref: "RealtekFirmwareLoader.cpp:411" + + - name: "rtl8852btu_fw.bin" + path: "Load/Firmware/rtl_bt/rtl8852btu_fw.bin" + required: false + mode: standalone + note: "Realtek 8852BT/8852BE-VT BT firmware for Wiimote passthrough" + source_ref: "RealtekFirmwareLoader.cpp:413" + + - name: "rtl8922au_fw.bin" + path: "Load/Firmware/rtl_bt/rtl8922au_fw.bin" + required: false + mode: standalone + note: "Realtek 8922AU BT firmware for Wiimote passthrough" + source_ref: "RealtekFirmwareLoader.cpp:415" + notes: hle_available: true hle_note: > @@ -184,3 +296,10 @@ notes: Wii NAND content (channels, saves, system menu) is managed by Dolphin internally. Users can import a BootMii NAND backup (nand.bin + optional keys.bin) to populate it. Most Wii games do not require a real NAND dump. + bt_passthrough_note: > + Bluetooth passthrough allows connecting real Wiimotes via USB Bluetooth adapters. + Realtek chipsets (very common) require firmware files in Load/Firmware/rtl_bt/. + Dolphin can auto-download these from kernel-firmware/linux-firmware on GitLab. + 15 device families supported (8723A/B/D, 8761A/BU, 8821A/C, 8822B/CU, 8851BU, + 8852AU/BU/CU/BTU, 8922AU). Each needs _fw.bin (required) + _config.bin (optional). + ref: RealtekFirmwareLoader.cpp:75-179 (device IDs), 382-420 (firmware names) diff --git a/emulators/dosbox_core.yml b/emulators/dosbox_core.yml index 32ce1031..f66414b3 100644 --- a/emulators/dosbox_core.yml +++ b/emulators/dosbox_core.yml @@ -1,25 +1,37 @@ emulator: DOSBox-core -type: libretro +type: standalone + libretro source: "https://github.com/libretro/dosbox-core" -profiled_date: "2026-03-18" +upstream: "https://github.com/dosbox-staging/dosbox-staging" +profiled_date: "2026-03-19" core_version: "SVN" display_name: "DOS (DOSBox-core)" cores: [dosbox_core] systems: [dos] verification: sha1 -notes: > +notes: | No BIOS required. MT-32 and SoundFont support is optional for MIDI music. - Unlike DOSBox Pure, this core expects MT-32 ROMs with exact filenames - directly in the system directory (no recursive scan, no ZIP support). - The mt32.romdir config option is set to the system directory by the - libretro frontend. CM-32L is the default emulated hardware type. - FluidSynth support reads .sf2/.sf3/.dls/.gig from system/soundfonts/. - BASSMIDI support reads .sf2/.sfz from system/soundfonts/ but also - requires the BASS and BASSMIDI shared libraries (downloaded separately - from https://www.un4seen.com) placed in the system directory. - Uses bundled MUNT (mt32emu) for MT-32 emulation, bundled FluidSynth - for SF2 playback. BASSMIDI is optional and loaded at runtime via dlopen. - The .info file declares firmware_count=10 (4 ROMs + 6 BASS libs). + + Libretro mode: + MT-32 ROMs loaded by exact filename from system directory. + mt32.romdir = system_dir (libretro.cpp:652). CM-32L is default type. + ref: src/gui/midi_mt32.cpp:35,51-66 + FluidSynth reads .sf2/.sf3/.dls/.gig from system/soundfonts/. + ref: libretro/src/libretro.cpp:1086-1097 + BASSMIDI reads .sf2/.sfz from system/soundfonts/, requires BASS + + BASSMIDI shared libs in system dir (dlopen'd at runtime). + ref: libretro/src/midi_bassmidi.cpp:232-254 + .info declares firmware_count=10 (4 ROMs + 6 BASS libs). + + Standalone mode (DOSBox Staging): + MT-32 ROMs identified by SHA1 hash (MUNT), not filename. Any file in + mt32-roms/ dir scanned and matched. Split ROM pairs supported (_a+_b). + ref: dosbox-staging src/midi/mt32.cpp:109-148 (ROM defs), 470-484 (dir scan) + Default dir: config_dir/mt32-roms/ (dosbox.h:173) + Models: MT-32 v1.04-1.07, BlueRidge, v2.03-2.07, CM-32L v1.00-1.02, CM-32LN v1.00 + Sound Canvas (SC-55/SC-155/SC-88) emulation with soundcanvas-roms/ dir. + ref: src/midi/soundcanvas.cpp, dosbox.h:174 + SoundFonts in config_dir/soundfonts/ (dosbox.h:175) + ref: src/midi/fluidsynth.cpp:68-69,211 files: # -- MT-32 Control ROM -- @@ -128,6 +140,130 @@ files: source_ref: "midi_mt32.cpp:64, dosbox_core_libretro.info:firmware3" notes: "pairs with MT-32 v2.x or CM-32L control ROMs (md5: 08cdcfa0ed93e9cb16afa76e6ac5f0a4)" + # -- CM-32LN / CM-500 / LAPC-N Control ROM (standalone) -- + # Supported by MUNT (ROMInfo.cpp:77) but dosbox-core libretro only loads + # MT32_CONTROL.ROM or CM32L_CONTROL.ROM by exact name. Standalone DOSBox + # Staging identifies this ROM by SHA1 hash scan. + + - name: "CM32LN_CONTROL.ROM" + description: "CM-32LN/CM-500/LAPC-N Control v1.00" + required: false + size: 65536 + sha1: "dc1c5b1b90a4646d00f7daf3679733c7badc7077" + mode: standalone + source_ref: "ROMInfo.cpp:77, dosbox-staging src/midi/mt32.cpp:145,242" + + # -- Split ROM pairs (standalone mode) -- + # MUNT supports split Control ROMs (_a + _b, 32KB each, interleaved) and + # split PCM ROMs (_l + _h, half-size each, appended). + # Only useful in standalone mode with SHA1 scan. Libretro mode needs full ROMs. + # ref: ROMInfo.cpp:56-70 (control splits), 79-84 (PCM splits) + + - name: "MT-32 Control v1.04 half A" + description: "MT-32 Control v1.04 split (Mux0)" + required: false + size: 32768 + sha1: "9cd4858014c4e8a9dff96053f784bfaac1092a2e" + mode: standalone + source_ref: "ROMInfo.cpp:56" + + - name: "MT-32 Control v1.04 half B" + description: "MT-32 Control v1.04 split (Mux1)" + required: false + size: 32768 + sha1: "fe8db469b5bfeb37edb269fd47e3ce6d91014652" + mode: standalone + source_ref: "ROMInfo.cpp:57" + + - name: "MT-32 Control v1.05 half A" + description: "MT-32 Control v1.05 split (Mux0)" + required: false + size: 32768 + sha1: "57a09d80d2f7ca5b9734edbe9645e6e700f83701" + mode: standalone + source_ref: "ROMInfo.cpp:59" + + - name: "MT-32 Control v1.05 half B" + description: "MT-32 Control v1.05 split (Mux1)" + required: false + size: 32768 + sha1: "52e3c6666db9ef962591a8ee99be0cde17f3a6b6" + mode: standalone + source_ref: "ROMInfo.cpp:60" + + - name: "MT-32 Control v1.06 half A" + description: "MT-32 Control v1.06 split (Mux0)" + required: false + size: 32768 + sha1: "cc83bf23cee533097fb4c7e2c116e43b50ebacc8" + mode: standalone + source_ref: "ROMInfo.cpp:62" + + - name: "MT-32 Control v1.06 half B" + description: "MT-32 Control v1.06 split (Mux1)" + required: false + size: 32768 + sha1: "bf4f15666bc46679579498386704893b630c1171" + mode: standalone + source_ref: "ROMInfo.cpp:63" + + - name: "MT-32 Control v1.07 half A" + description: "MT-32 Control v1.07 split (Mux0)" + required: false + size: 32768 + sha1: "13f06b38f0d9e0fc050b6503ab777bb938603260" + mode: standalone + source_ref: "ROMInfo.cpp:65" + + - name: "MT-32 Control v1.07 half B" + description: "MT-32 Control v1.07 split (Mux1)" + required: false + size: 32768 + sha1: "c55e165487d71fa88bd8c5e9c083bc456c1a89aa" + mode: standalone + source_ref: "ROMInfo.cpp:66" + + - name: "MT-32 Control BlueRidge half A" + description: "MT-32 Control BlueRidge split (Mux0)" + required: false + size: 32768 + sha1: "11a6ae5d8b6ee328b371af7f1e40b82125aa6b4d" + mode: standalone + source_ref: "ROMInfo.cpp:68" + + - name: "MT-32 Control BlueRidge half B" + description: "MT-32 Control BlueRidge split (Mux1)" + required: false + size: 32768 + sha1: "e0934320d7cbb5edfaa29e0d01ae835ef620085b" + mode: standalone + source_ref: "ROMInfo.cpp:69" + + - name: "MT-32 PCM ROM low half" + description: "MT-32 PCM ROM first half (262144 bytes)" + required: false + size: 262144 + sha1: "3a1e19b0cd4036623fd1d1d11f5f25995585962b" + mode: standalone + source_ref: "ROMInfo.cpp:79" + + - name: "MT-32 PCM ROM high half" + description: "MT-32 PCM ROM second half (262144 bytes)" + required: false + size: 262144 + sha1: "2cadb99d21a6a4a6f5b61b6218d16e9b43f61d01" + mode: standalone + source_ref: "ROMInfo.cpp:80" + + - name: "CM-32L PCM ROM high half" + description: "CM-32L/CM-64/LAPC-I PCM upper half (524288 bytes)" + required: false + size: 524288 + sha1: "3ad889fde5db5b6437cbc2eb6e305312fec3df93" + mode: standalone + note: "lower half is identical to full MT-32 PCM ROM" + source_ref: "ROMInfo.cpp:84" + # -- BASS shared libraries (BASSMIDI driver) -- # Downloaded from https://www.un4seen.com, placed in system directory. # Loaded at runtime via dlopen. Not redistributable ROMs. diff --git a/emulators/dosbox_pure.yml b/emulators/dosbox_pure.yml index 9a4c148c..358f6434 100644 --- a/emulators/dosbox_pure.yml +++ b/emulators/dosbox_pure.yml @@ -1,24 +1,40 @@ emulator: DOSBox Pure -type: libretro +type: standalone + libretro source: "https://github.com/libretro/dosbox-pure" +upstream: "https://github.com/schellingb/dosbox-pure" logo: "https://raw.githubusercontent.com/schellingb/dosbox-pure/main/images/logo.png" -profiled_date: "2026-03-18" +profiled_date: "2026-03-19" core_version: "0.9.9" display_name: "DOS (DOSBox-Pure)" cores: [dosbox_pure] systems: [dos] verification: sha1 -notes: > +notes: | No BIOS required. MT-32 and SoundFont support is optional for MIDI music. - The core scans the RetroArch system directory (and subdirectories) for files - ending in _CONTROL.ROM (MT-32/CM-32L) and .SF2/.SF3 (General MIDI SoundFont). - MT-32 requires a matched pair: *_CONTROL.ROM + *_PCM.ROM in the same directory. - Files can also be placed inside the game content as DOSBOX.SF2 or MT32_CONTROL.ROM - + MT32_PCM.ROM on the mounted C: drive. ZIP archives containing both ROMs are - also supported (identified by file size, not name). A cache file - DOSBoxPureMidiCache.txt is written to system dir when scan takes >2s. - Uses bundled MUNT (mt32emu) for MT-32 emulation, TinySoundFont for SF2 playback. - No firmware entries in the .info file - all MIDI files are optional enhancements. + + ROM scanning (both modes): + Recursive scan of system directory for *_CONTROL.ROM and *.SF2/*.SF3. + ref: dosbox_pure_libretro.cpp:1367-1378 + MT-32 requires matched pair: *_CONTROL.ROM + *_PCM.ROM (PCM name derived + from CONTROL name by replacing CONTROL with PCM, preserving case). + ref: dosbox_pure_libretro.cpp:182-199 + ZIP archives also supported — scanned for files by size (65536/131072 = + control, 524288/1048576 = PCM), not by name. + ref: midi_mt32.h:160-166 + Files can also be on mounted C: drive (DOSBOX.SF2, MT32_CONTROL.ROM). + ref: dosbox_pure_libretro.cpp:2760-2762 + Cache file DOSBoxPureMidiCache.txt written when scan >2s. + ref: dosbox_pure_libretro.cpp:1393-1413 + + Bundled MUNT (header-only mt32emu.h) for MT-32 emulation. + SHA1-based ROM identification (mt32emu.h:5112-5127,5185). + 13 full control ROMs + 2 PCM ROMs supported (no split ROMs in this MUNT). + Includes MT-32 v2.03 (not in dosbox-core's MUNT). + TinySoundFont (tsf.h) for SF2/SF3 playback. + No firmware entries in .info file — all MIDI files optional. + + DBP_STANDALONE build mode exists (same MIDI logic, different I/O layer). + ref: dosbox_pure_libretro.cpp:81,1558,2270 files: # -- MT-32 Control ROMs (64 KB) -- @@ -28,35 +44,35 @@ files: required: false size: 65536 sha1: "5a5cb5a77d7d55ee69657c2f870416daed52dea7" - source_ref: "mt32emu.h:CTRL_MT32_V1_04" + source_ref: "mt32emu.h:5112,5129" - name: "MT32_CONTROL.ROM" description: "MT-32 Control v1.05" required: false size: 65536 sha1: "e17a3a6d265bf1fa150312061134293d2b58288c" - source_ref: "mt32emu.h:CTRL_MT32_V1_05" + source_ref: "mt32emu.h:5113,5130" - name: "MT32_CONTROL.ROM" description: "MT-32 Control v1.06" required: false size: 65536 sha1: "a553481f4e2794c10cfe597fef154eef0d8257de" - source_ref: "mt32emu.h:CTRL_MT32_V1_06" + source_ref: "mt32emu.h:5114,5131" - name: "MT32_CONTROL.ROM" description: "MT-32 Control v1.07" required: false size: 65536 sha1: "b083518fffb7f66b03c23b7eb4f868e62dc5a987" - source_ref: "mt32emu.h:CTRL_MT32_V1_07" + source_ref: "mt32emu.h:5115,5132" - name: "MT32_CONTROL.ROM" description: "MT-32 Control BlueRidge" required: false size: 65536 sha1: "7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92" - source_ref: "mt32emu.h:CTRL_MT32_BLUER" + source_ref: "mt32emu.h:5116,5133" # -- MT-32 v2.x Control ROMs (128 KB) -- @@ -65,28 +81,28 @@ files: required: false size: 131072 sha1: "5837064c9df4741a55f7c4d8787ac158dff2d3ce" - source_ref: "mt32emu.h:CTRL_MT32_V2_03" + source_ref: "mt32emu.h:5118,5135" - name: "MT32_CONTROL.ROM" description: "MT-32 Control v2.04" required: false size: 131072 sha1: "2c16432b6c73dd2a3947cba950a0f4c19d6180eb" - source_ref: "mt32emu.h:CTRL_MT32_V2_04" + source_ref: "mt32emu.h:5119,5136" - name: "MT32_CONTROL.ROM" description: "MT-32 Control v2.06" required: false size: 131072 sha1: "2869cf4c235d671668cfcb62415e2ce8323ad4ed" - source_ref: "mt32emu.h:CTRL_MT32_V2_06" + source_ref: "mt32emu.h:5120,5137" - name: "MT32_CONTROL.ROM" description: "MT-32 Control v2.07" required: false size: 131072 sha1: "47b52adefedaec475c925e54340e37673c11707c" - source_ref: "mt32emu.h:CTRL_MT32_V2_07" + source_ref: "mt32emu.h:5121,5138" # -- CM-32L / LAPC-I Control ROMs (64 KB) -- @@ -95,14 +111,14 @@ files: required: false size: 65536 sha1: "73683d585cd6948cc19547942ca0e14a0319456d" - source_ref: "mt32emu.h:CTRL_CM32L_V1_00" + source_ref: "mt32emu.h:5122,5139" - name: "CM32L_CONTROL.ROM" description: "CM-32L/LAPC-I Control v1.02" required: false size: 65536 sha1: "a439fbb390da38cada95a7cbb1d6ca199cd66ef8" - source_ref: "mt32emu.h:CTRL_CM32L_V1_02" + source_ref: "mt32emu.h:5123,5140" # -- CM-32LN / CM-500 / LAPC-N Control ROM (64 KB) -- @@ -111,7 +127,7 @@ files: required: false size: 65536 sha1: "dc1c5b1b90a4646d00f7daf3679733c7badc7077" - source_ref: "mt32emu.h:CTRL_CM32LN_V1_00" + source_ref: "mt32emu.h:5124,5141" # -- PCM ROMs -- @@ -120,7 +136,7 @@ files: required: false size: 524288 sha1: "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252" - source_ref: "mt32emu.h:PCM_MT32" + source_ref: "mt32emu.h:5126,5143" notes: "pairs with any MT-32 v1.x control ROM" - name: "CM32L_PCM.ROM" @@ -128,7 +144,7 @@ files: required: false size: 1048576 sha1: "289cc298ad532b702461bfc738009d9ebe8025ea" - source_ref: "mt32emu.h:PCM_CM32L" + source_ref: "mt32emu.h:5127,5144" notes: "pairs with MT-32 v2.x or CM-32L control ROMs. Lower half aliases MT-32 PCM." # -- General MIDI SoundFont -- diff --git a/emulators/dosbox_svn.yml b/emulators/dosbox_svn.yml index a6b1c638..98e84fcf 100644 --- a/emulators/dosbox_svn.yml +++ b/emulators/dosbox_svn.yml @@ -1,8 +1,27 @@ -emulator: "dosbox_svn" -type: alias -alias_of: "dosbox_core" -profiled_date: "2026-03-18" +emulator: DOSBox-SVN +type: libretro +source: "https://github.com/libretro/dosbox-svn" +upstream: "https://sourceforge.net/projects/dosbox/" +profiled_date: "2026-03-19" core_version: "SVN" display_name: "DOS (DOSBox-SVN)" -note: "This core uses the same BIOS/firmware as dosbox_core. See emulators/dosbox_core.yml for details." +cores: [dosbox_svn] +systems: [dos] +notes: | + DOSBox-SVN is the same codebase as dosbox_svn_ce but builds with a fake + SDL shim (WITH_FAKE_SDL=1) instead of real SDL, for broader platform compat. + ref: libretro/Makefile.libretro, libretro/fakesdl/ + + No MT-32 emulation — no MUNT bundled, no mt32emu, no FluidSynth, no BASS. + The src/midi/munt directory referenced in Makefile.common does not exist. + MIDI output is hardware-only via fake SDL stubs. + ref: src/gui/midi.cpp + + system_directory is read (libretro.cpp:1399) but only logged, never used + to load any files. + + NOT an alias of dosbox_core — completely different MIDI capabilities. + dosbox_core has MUNT + FluidSynth + BASSMIDI. This core has none. + files: [] +# No BIOS, firmware, ROMs, or system files of any kind. diff --git a/emulators/dosbox_svn_ce.yml b/emulators/dosbox_svn_ce.yml index eaa0a947..6a91ab64 100644 --- a/emulators/dosbox_svn_ce.yml +++ b/emulators/dosbox_svn_ce.yml @@ -1,8 +1,29 @@ -emulator: "dosbox_svn_ce" -type: alias -alias_of: "dosbox_core" -profiled_date: "2026-03-18" +emulator: DOSBox-SVN CE +type: libretro +source: "https://github.com/libretro/dosbox-svn" +upstream: "https://sourceforge.net/projects/dosbox/" +profiled_date: "2026-03-19" core_version: "SVN CE" display_name: "DOS (DOSBox-SVN CE)" -note: "This core uses the same BIOS/firmware as dosbox_core. See emulators/dosbox_core.yml for details." +cores: [dosbox_svn_ce] +systems: [dos] +notes: | + DOSBox-SVN CE (Community Edition) is the same codebase as dosbox_svn but + builds against real SDL 1.2 + SDL_net instead of the fake SDL shim. + ref: libretro/Makefile.libretro (WITH_FAKE_SDL flag) + + No MT-32 emulation — no MUNT bundled, no mt32emu, no FluidSynth, no BASS. + The src/midi/munt directory referenced in Makefile.common does not exist. + MIDI output is hardware-only (ALSA, CoreAudio, CoreMIDI, Win32, OSS). + ref: src/gui/midi.cpp, src/gui/midi_alsa.h, midi_coreaudio.h, etc. + + system_directory is read (libretro.cpp:1399) but only logged, never used + to load any files. + + NOT an alias of dosbox_core — completely different MIDI capabilities. + dosbox_core has MUNT + FluidSynth + BASSMIDI. This core has none. + + Requires libsdl1.2 and libsdl-net1.2 at runtime (.info notes). + files: [] +# No BIOS, firmware, ROMs, or system files of any kind. diff --git a/emulators/doukutsu_rs.yml b/emulators/doukutsu_rs.yml index 0154510b..579c78ac 100644 --- a/emulators/doukutsu_rs.yml +++ b/emulators/doukutsu_rs.yml @@ -1,7 +1,8 @@ -emulator: "doukutsu-rs" -type: libretro -source: "https://github.com/DrGlaucous/doukutsu-rs-libretro" -profiled_date: "2026-03-18" +emulator: doukutsu-rs +type: standalone + libretro +source: "https://github.com/DrGlaucous/doukutsu-rs-nm" +upstream: "https://github.com/doukutsu-rs/doukutsu-rs" +profiled_date: "2026-03-19" core_version: "1.2.0 - 0.101.0" display_name: "Cave Story (drs)" cores: diff --git a/emulators/duckstation.yml b/emulators/duckstation.yml index 3c0b1544..20373acd 100644 --- a/emulators/duckstation.yml +++ b/emulators/duckstation.yml @@ -1,20 +1,36 @@ emulator: DuckStation -type: standalone +type: standalone + libretro source: "https://github.com/stenzek/duckstation" logo: "https://raw.githubusercontent.com/stenzek/duckstation/master/data/resources/images/duck.png" -profiled_date: "2026-03-18" +profiled_date: "2026-03-19" core_version: "v0.1" display_name: "Sony - PlayStation (DuckStation)" +cores: [duckstation] systems: [sony-playstation] -bios_size: 524288 # 0x80000 (512 KB), also accepts PS2 (4 MB) and PS3 BIOS +bios_size: 524288 # 0x80000 (512 KB), also accepts PS2 (4 MB) and PS3 (0x3E66F0) verification: md5 -notes: > - DuckStation auto-detects BIOS by MD5 hash. It accepts PS1, PS2 and PS3 BIOS images - (only the first 512 KB are mapped). Each image has a priority score - lower is better. - Images with region_check=true enforce region matching for disc booting. - PS2 BIOS images are deprioritized (priority >= 100) due to requiring dynamic fast boot patches. - Late PAL revisions are further deprioritized due to additional regional checks. - OpenBIOS is detected by signature at offset 0x78, not by hash. +notes: | + DuckStation auto-detects BIOS by MD5 hash from a flat scan of the BIOS directory. + ref: src/core/bios.cpp:459-481 (FindBIOSImagesInDirectory — scans all files by size) + ref: src/core/bios.cpp:208 (MD5Digest::HashData identification) + + Accepts PS1 (512 KB), PS2 (4 MB), and PS3 (0x3E66F0) BIOS images. + ref: src/core/bios.h:24-26 (BIOS_SIZE, BIOS_SIZE_PS2, BIOS_SIZE_PS3) + Only the first 512 KB are mapped (bios.cpp:212). + + 105 known BIOS entries (24 PS1 + 80 PS2 + 1 KDL-22PX300) identified by MD5. + ref: src/core/bios.cpp:34-139 (s_image_info_by_hash) + Each image has: region, region_check, fast_boot_patch type, priority score. + Lower priority = preferred. PS2 deprioritized (>= 100) for dynamic fast boot. + Late PAL deprioritized (>= 150) due to additional regional checks. + OpenBIOS detected by signature at offset 0x78, not by hash. + ref: src/core/bios.cpp:142-147 + + Standalone: BIOS dir = EmuFolders::Bios (configurable, default bios/). + ref: src/core/bios.cpp:375,380 + Libretro: BIOS dir = RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY (flat). + The libretro core was removed by the author (license change to non-commercial). + The .info file and buildbot builds still exist from community forks. files: # -- PS1 BIOS images (priority <= 20, preferred) -- diff --git a/emulators/easyrpg.yml b/emulators/easyrpg.yml index 72ce8943..3af10156 100644 --- a/emulators/easyrpg.yml +++ b/emulators/easyrpg.yml @@ -1,7 +1,8 @@ emulator: EasyRPG Player -type: libretro +type: standalone + libretro source: "https://github.com/libretro/easyrpg-libretro" -profiled_date: "2026-03-18" +upstream: "https://github.com/EasyRPG/Player" +profiled_date: "2026-03-19" core_version: "0.8.1.0" display_name: "RPG Maker 2000/2003 (EasyRPG)" cores: diff --git a/emulators/ecwolf.yml b/emulators/ecwolf.yml index 8e72f9a6..72dd8a2e 100644 --- a/emulators/ecwolf.yml +++ b/emulators/ecwolf.yml @@ -1,25 +1,34 @@ emulator: ECWolf -type: libretro +type: standalone + libretro source: "https://github.com/libretro/ecwolf" -profiled_date: "2026-03-18" -core_version: "" -display_name: "Wolfenstein 3D (ECWolf)" +upstream: "https://bitbucket.org/ecwolf/ecwolf" +profiled_date: "2026-03-19" +core_version: "1.4.1" display_name: "Wolfenstein 3D (ECWolf)" cores: [ecwolf] systems: [wolfenstein3d] verification: md5 -notes: > - Wolfenstein 3D source port. Plays Wolf3D (wl6/wl1), Spear of Destiny (sod/sdm), - Super 3D Noah's Ark (n3d), and community pk3 mods. The core requires ecwolf.pk3 - in the system directory - this is the engine data package built from wadsrc/static/ - containing IWADINFO definitions, palettes, sprites, map configs, and lump remappers. - Game data files (vswap, gamemaps, vgagraph, audiot) are loaded from the content - directory, not the system directory. The core auto-detects the game variant by - scanning lump contents against IWADINFO MustContain rules. Spear of Destiny - mission packs (sd2/sd3) and Mac Wolfenstein variants are also supported. - Blake Stone and Rise of the Triad support is flagged as Preview. - The SelectGame path searches: content directory, system directory, BaseDataPaths - config, then platform-specific paths (Steam, GOG installs on desktop). +notes: | + Wolfenstein 3D source port by Braden Obrzut. Plays Wolf3D (wl6/wl1), + Spear of Destiny (sod/sdm), Super 3D Noah's Ark (n3d), and community pk3 mods. + + Requires ecwolf.pk3 — engine data package built from wadsrc/static/. + Contains IWADINFO (game detection rules), palettes, sprites, map configs, + DECORATE actor definitions, MAPINFO, SNDINFO, fonts, and localization strings. + Without this file: "Could not open ecwolf.pk3!" fatal error. + ref: version.h:12 (MAIN_PK3), wl_iwad.cpp:642-657 (load + fatal) + + Libretro: ecwolf.pk3 searched in system_dir. + ref: libretro/libretro.cpp:831-832 (sysDir passed to SelectGame) + + Standalone: ecwolf.pk3 searched in progdir (binary directory). + ref: wl_main.cpp:1289 (progdir passed to SelectGame) + Also: INSTALL_PREFIX/share/ecwolf/ on Linux (wl_iwad.cpp:648) + + Game data files (vswap, gamemaps, vgagraph, audiot) loaded from content + directory, not system directory. Auto-detects game variant by scanning + lump contents against IWADINFO MustContain rules. + Blake Stone and Rise of the Triad support flagged as Preview. files: - name: "ecwolf.pk3" diff --git a/emulators/emuscv.yml b/emulators/emuscv.yml index 7cdb0caa..170229bc 100644 --- a/emulators/emuscv.yml +++ b/emulators/emuscv.yml @@ -1,10 +1,10 @@ emulator: EmuSCV -type: libretro +type: standalone + libretro source: "https://github.com/wzcwzc/emuscv" -profiled_date: "2026-03-18" +upstream: "https://github.com/wzcwzc/emuscv" +profiled_date: "2026-03-19" core_version: "" display_name: "EPOCH/YENO Super Cassette Vision" -display_name: "EPOCH/YENO Super Cassette Vision" cores: - emuscv systems: diff --git a/emulators/np2kai.yml b/emulators/np2kai.yml index 7331daf5..2d249f0c 100644 --- a/emulators/np2kai.yml +++ b/emulators/np2kai.yml @@ -57,10 +57,11 @@ files: - name: "font.bmp" path: "np2kai/font.bmp" required: false + aliases: ["FONT.ROM", "font.rom", "FONT.BMP"] note: > PC-98 font bitmap (288 KB). Required for correct Japanese kanji display. - The core also accepts FONT.ROM (V98 format). Without this file, - only basic ASCII characters render correctly using built-in data. + Without this file, only basic ASCII characters render correctly using + built-in data. source_ref: "sdl/libretro/libretro.c:1813, font/fontdata.c:11-14" # -- Sound BIOS ROM -- @@ -115,8 +116,9 @@ files: - name: "2608_rim.wav" path: "np2kai/2608_rim.wav" required: false - note: "YM2608 OPNA rhythm sample: rim shot" - source_ref: "sound/rhythmc.c:16" + aliases: ["2608_RYM.WAV"] + note: "YM2608 OPNA rhythm sample: rim shot. fmgen also accepts 2608_RYM.WAV" + source_ref: "sound/rhythmc.c:16, sound/fmgen/fmgen_opna.cpp:1413-1443" # -- IDE BIOS ROM -- # Loaded by ideio.c:1913-1931. Tried in order: ide.rom, d8000.rom, @@ -125,11 +127,10 @@ files: - name: "ide.rom" path: "np2kai/ide.rom" required: false + aliases: ["d8000.rom", "bank3.bin", "bios9821.rom"] note: > IDE controller BIOS ROM (8 KB). Required for real IDE BIOS emulation - (HDD boot from IDE). The core also checks d8000.rom, bank3.bin, - and bios9821.rom as fallback filenames. Without this, a simulated - IDE BIOS is used. + (HDD boot from IDE). Without this, a simulated IDE BIOS is used. source_ref: "cbus/ideio.c:1913-1931" # -- SCSI BIOS ROM -- @@ -148,10 +149,10 @@ files: - name: "pci.rom" path: "np2kai/pci.rom" required: false + aliases: ["bank0.bin"] note: > PCI BIOS ROM (32 KB). For PC-9821 PCI bus emulation. - The core also checks bank0.bin as fallback. Without this, - the built-in PCI BIOS simulator is used. + Without this, the built-in PCI BIOS simulator is used. source_ref: "io/pcidev.c:360-382" # -- GPIB BIOS ROM -- diff --git a/emulators/snes9x.yml b/emulators/snes9x.yml index c330f859..b9f77d13 100644 --- a/emulators/snes9x.yml +++ b/emulators/snes9x.yml @@ -89,7 +89,8 @@ files: md5: "fed4d8242cfbed61343d53d48432aced" sha1: "604556b2e62860af18db5a77f2956ebc75450020" source_ref: "libretro.cpp:1209 (LoadBIOS, 'BS-X.bin'), bsx.cpp:1209-1215 (BSX_LoadBIOS)" - notes: "Needed for Satellaview (.bs) game support. Core also accepts BS-X.bios as filename. Without this file, BS-X games will fail to load." + aliases: ["BS-X.bios"] + notes: "Needed for Satellaview (.bs) game support. Without this file, BS-X games will fail to load." # -- Sufami Turbo BIOS -- # Required by: snes9x, snes9x2010