diff --git a/emulators/bennugd.yml b/emulators/bennugd.yml new file mode 100644 index 00000000..2fd9bb54 --- /dev/null +++ b/emulators/bennugd.yml @@ -0,0 +1,31 @@ +emulator: BennuGD +type: libretro +source: "https://github.com/diekleinekuh/BennuGD_libretro" +cores: + - bennugd +systems: + - bennugd + +# BennuGD is an open-source interpreter for BennuGD (.dcb/.dat) game files, +# running as a libretro core. It is a successor to DIV Games Studio / Fenix. +# Notable game: Streets of Rage Remake. +# +# The official libretro .info file (bennugd_libretro.info) declares zero +# firmware entries. The core loads content directly via bgdi_main() and does +# not reference any files from the system directory. +# +# retro_load_game() in libretro.c:888-911 only reads the content path and +# the save directory. RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY is called once +# (libretro.c:899) solely as a fallback for the save directory, never to +# load BIOS or firmware. +# +# Supported extensions: dcb, dat, exe (Windows BennuGD executables) +# Valid extensions in libretro.c: dat, dcb +# Valid extensions in .info: dcb, dat, exe + +notes: | + No BIOS or firmware required. BennuGD is a self-contained game interpreter. + Games are loaded as .dcb or .dat bytecode files compiled by the BennuGD + toolchain. All game assets are bundled with the content. + +files: [] diff --git a/emulators/cruzes.yml b/emulators/cruzes.yml new file mode 100644 index 00000000..7ea74bf7 --- /dev/null +++ b/emulators/cruzes.yml @@ -0,0 +1,36 @@ +emulator: Cruzes +type: libretro +source: "https://github.com/libretro/libretro-samples/tree/master/tests/cruzes" +cores: + - cruzes +systems: + - game + +notes: | + Cruzes is an unfinished Picross puzzle game implemented as a libretro core, + part of the libretro-samples repository. It is not an emulator -- it is a + standalone game that runs directly within RetroArch. + + The core sets supports_no_game to true (cruzes.c:772) and valid_extensions + to an empty string (cruzes.c:749). The puzzle grid is hardcoded in + retro_init (cruzes.c:706-717) via a string literal passed to load_challenge. + + retro_load_game (cruzes.c:728-732) only sets the pixel format to RGB565 + and returns true. It never reads from the game_info pointer, never calls + RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, and never opens any file from disk. + + The font data (Carlito-Regular.ttf) is converted to C header files at build + time by the ttf2c tool (font10.h, font16.h, font24.h) and compiled in. + + No external BIOS, firmware, or system files are needed. + +files: [] + +analysis: + file_loading: none + system_directory_used: false + supports_no_game: true + need_fullpath: false + is_experimental: true + license: 2-clause BSD + author: Higor Euripedes diff --git a/emulators/dice.yml b/emulators/dice.yml new file mode 100644 index 00000000..ddd75621 --- /dev/null +++ b/emulators/dice.yml @@ -0,0 +1,67 @@ +emulator: DICE +type: libretro +source: "https://github.com/mittonk/dice-libretro" +cores: + - dice +systems: + - discrete-arcade + +notes: | + DICE (Discrete Integrated Circuit Emulator) emulates early arcade hardware + built entirely from discrete logic components, with no CPU. dice-libretro is + a libretro port by Ken Mitton, based on upstream DICE by Adam B. + + No BIOS or firmware files required. The .info file declares firmware_count = 0. + + Games fall into two categories: + - ROM-based: shipped as MAME-style ZIP archives (filename matters). + The core loads the ZIP passed by the frontend and matches individual ROM + chips by CRC32 (chips/rom.cpp:41-218, RomDesc::get_data). If a chip's + CRC does not match, the core walks all entries in the archive looking for + a CRC match or alt_crc match. + - ROM-less: games like Pong, Breakout, Rebound whose original PCBs had no + ROM at all. These use .dmy dummy launcher files (empty placeholders) to + tell RetroArch which game to start. + + retro_get_system_info (libretro.cpp:122-137) sets need_fullpath = true, + block_extract = true, valid_extensions = "zip|dmy|k1|a1|6c|c6|d2|s1|f4|a4| + 1da|da1|C4|4c|4d|d7|d4". The unusual extensions are raw ROM chip dumps for + individual games (e.g. .k1 for antiaircraft, .a1 for attack). + + dice.cpp:42-66 strips any "#inner.rom" suffix from the path (for ROM + managers that expose zip contents) and passes the zip path to + RomDesc::set_zip_filename. + + retro_init (libretro.cpp:50-63) retrieves RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY + but uses it only for the retro_base_directory variable, not for loading any + system files. + + Games with ROMs (10 titles): + antiaircraft.zip - 1 ROM chip (k1) + attack.zip - 6 ROM chips (a1, b1, c1, d1, j6, k6), each with alt_crc + cleansweep.zip - 3 ROM chips (6c, d7, k3) + crashnscore.zip - 6 ROM chips (d2, e2, f6, f7, p6, p7) + indy4.zip - 4 ROM chips (s1, s2, c1, c2) + jetfighter.zip - 6 ROM chips (a4, j1, j5, k5, m1, r5) + sharkjaws.zip - 2 ROM chips (1da/da1, 1db/db1) + steeplechase.zip - 2 ROM chips (C4, D4); bugle ROM c8 dump missing + stuntcycle.zip - 2 ROM chips (4d, 1fh) + wipeout.zip - 2 ROM chips (d4, g7) + + ROM-less games (11 titles, use .dmy dummy files): + breakout, crossfire, gotcha, hiway, pinpong, pong, pongdoubles, + quadrapong, rebound, spacerace, tvbasketball + +files: [] + +analysis: + rom_loading: + method: "MAME-style ZIP, matched by CRC32 per RomDesc" + source_ref: "chips/rom.cpp:41-218" + zip_handling: "unzip library (unzip/), opened via libretro_zip_filename" + game_count: 21 + rom_games: 10 + romless_games: 11 + filesystem_access: false + system_directory_used: false + bios_required: false diff --git a/emulators/ishiiruka.yml b/emulators/ishiiruka.yml new file mode 100644 index 00000000..06867c2a --- /dev/null +++ b/emulators/ishiiruka.yml @@ -0,0 +1,93 @@ +emulator: Ishiiruka +type: libretro +source: "https://github.com/libretro/ishiiruka" +fork_of: Dolphin +systems: [nintendo-gamecube, nintendo-wii] + +# Ishiiruka is a performance-focused Dolphin fork with custom GPU backends. +# As a Dolphin fork, it shares the exact same BIOS file requirements and paths. +# DSP HLE is enabled by default (ishiiruka_dsp_hle option), so DSP ROMs are +# only needed when switching to LLE audio for accuracy. + +# Libretro paths (from Boot.cpp): +# Sys directory: system/dolphin-emu/Sys/ +# User directory: saves/User/ (fallback: system/dolphin-emu/User/) +# Same as dolphin_libretro - uses "dolphin-emu" subdirectory, not "ishiiruka". + +# Core options use "ishiiruka_" prefix (ishiiruka_dsp_hle, ishiiruka_efb_scale, etc.) + +files: + # -- GameCube IPL (Boot ROM) -- + # Region-specific, placed in GC//IPL.bin + # Searched in User/GC/ then Sys/GC/ + - name: "IPL.bin" + path: "GC/USA/IPL.bin" + size: 2097152 + required: false + note: "GC NTSC-U boot ROM, same as Dolphin. HLE available" + source_ref: "Source/Core/Common/CommonPaths.h:115" + + - name: "IPL.bin" + path: "GC/EUR/IPL.bin" + size: 2097152 + required: false + note: "GC PAL boot ROM" + + - name: "IPL.bin" + path: "GC/JAP/IPL.bin" + size: 2097152 + required: false + note: "GC NTSC-J boot ROM" + + # -- DSP ROMs -- + # Only needed if DSP LLE is selected (ishiiruka_dsp_hle = disabled) + # Searched in User/GC/ then Sys/GC/ + - name: "dsp_rom.bin" + path: "GC/dsp_rom.bin" + size: 8192 + required: false + note: "DSP instruction ROM for LLE audio. Free replacement included, real dump more accurate" + source_ref: "Source/Core/Common/CommonPaths.h:112, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:142-150" + + - name: "dsp_coef.bin" + path: "GC/dsp_coef.bin" + size: 4096 + required: false + note: "DSP coefficient ROM for LLE audio. Free replacement included" + source_ref: "Source/Core/Common/CommonPaths.h:113, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:143-152" + + # -- GameCube Fonts -- + # Loaded from Sys/GC/, free alternatives bundled + - name: "font_western.bin" + path: "GC/font_western.bin" + required: false + note: "Windows-1252 font for GC/Wii text. Free alternative bundled" + source_ref: "Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:123" + + - name: "font_japanese.bin" + path: "GC/font_japanese.bin" + required: false + note: "Shift-JIS font for Japanese text. Free alternative bundled" + source_ref: "Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:122" + +notes: + dolphin_fork: true + fork_differences: > + Ishiiruka is a Dolphin fork focused on GPU performance (custom texture cache, + asynchronous shader compilation, post-processing). The BIOS/firmware handling + is identical to upstream Dolphin - same files, same paths, same HLE fallbacks. + hle_available: true + hle_note: > + DSP HLE is the default (ishiiruka_dsp_hle = enabled). No BIOS files are + required for most games. All files are optional with HLE/free replacements. + libretro_path: "system/dolphin-emu/" + libretro_note: > + Despite being named Ishiiruka, the libretro core uses "dolphin-emu" as its + system subdirectory (Boot.cpp:46,49). Users with existing Dolphin BIOS files + already have everything Ishiiruka needs. + data_dir_standalone: "ishiiruka" + data_dir_note: > + Standalone builds use "ishiiruka" as DOLPHIN_DATA_DIR (CommonPaths.h:24,27), + but the libretro core overrides this to use "dolphin-emu" paths. + library_name: "Ishiiruka" + valid_extensions: "elf|dol|gcm|iso|tgc|wbfs|ciso|gcz|wad" diff --git a/emulators/mkxp_z.yml b/emulators/mkxp_z.yml new file mode 100644 index 00000000..7c324de4 --- /dev/null +++ b/emulators/mkxp_z.yml @@ -0,0 +1,118 @@ +emulator: mkxp-z +type: libretro +source: "https://github.com/mkxp-z/mkxp-z" +cores: + - mkxp-z +systems: + - rpgmaker + +# mkxp-z is an open-source player for RPG Maker XP, VX and VX Ace games. +# Heavily modified fork of mkxp implementing the RGSS (Ruby Game Scripting +# System) interface versions 1, 2 and 3. +# +# The libretro .info file (mkxp-z_libretro.info) declares 3 firmware entries, +# all optional. These are RTP (Run-Time Package) directories, not individual +# files. Each RTP contains default assets (tilesets, sprites, music, sound +# effects, fonts) shared by games that don't bundle their own. +# +# Games that ship all assets internally need no RTP at all. +# +# firmware0: mkxp-z/RTP/Standard (RPG Maker XP RTP) optional +# firmware1: mkxp-z/RTP/RPGVX (RPG Maker VX RTP) optional +# firmware2: mkxp-z/RTP/RPGVXAce (RPG Maker VX Ace RTP) optional +# +# Directory layout under : +# mkxp-z/RTP/Standard/ RPG Maker XP RTP +# Audio/ BGM, BGS, ME, SE in ogg/midi/wav +# Graphics/ tilesets, characters, battlers, etc. +# mkxp-z/RTP/RPGVX/ RPG Maker VX RTP +# Audio/ +# Fonts/ +# Graphics/ +# mkxp-z/RTP/RPGVXAce/ RPG Maker VX Ace RTP +# Audio/ +# Fonts/ +# Graphics/ +# +# RTP installers are available from https://www.rpgmakerweb.com/run-time-package +# On non-Windows, use innoextract to unpack the Windows installers. +# +# RTP path resolution (sharedstate.cpp:144-145, config.cpp:326): +# config.rtps[] is populated from the "RTP" JSON array in mkxp.json. +# The libretro port sets these to /mkxp-z/RTP/. +# Each path is added to PhysFS search path via fileSystem.addPath(). +# +# Additional optional directories: +# mkxp-z/Fonts/ custom fallback fonts (.otf/.ttf) +# mkxp-z/Scripts/Preload/ Ruby scripts run before game scripts +# mkxp-z/Scripts/Postload/ Ruby scripts run before rgss_main (RGSS3) +# +# MIDI playback: mkxp-z uses FluidSynth internally. A soundfont can be +# specified per-game in mkxp.json via "midiSoundFont". No global soundfont +# file is declared as firmware. +# +# Supported extensions: ini, json, rxproj, rvproj, rvproj2, mkxp, mkxpz, zip, 7z +# Required GPU: OpenGL Core >= 2.0 or OpenGL ES >= 2.0 + +notes: | + No individual BIOS or firmware files required. The three RTP directories + listed below are optional collections of default game assets. Only needed + when a game references stock RPG Maker assets instead of bundling them. + + RPG Maker XP uses RGSS1 (Ruby Game Scripting System 1). + RPG Maker VX uses RGSS2. + RPG Maker VX Ace uses RGSS3. + + Each RTP is a directory tree containing Audio/ and Graphics/ subdirs, + plus Fonts/ for VX and VX Ace. These are not hashable single files. + +files: + # ================================================================ + # RPG Maker XP RTP (optional, game-dependent) + # mkxp-z_libretro.info firmware0 + # ================================================================ + + - name: "RPG Maker XP RTP (Standard)" + path: "mkxp-z/RTP/Standard/" + required: false + type: directory + source_ref: "mkxp-z_libretro.info:firmware0, sharedstate.cpp:144-145" + note: > + Run-Time Package for RPG Maker XP (RGSS1) games. Contains default + tilesets, character sprites, battle animations, panoramas, windowskins, + BGM, BGS, ME and SE audio files. Only needed by games that reference + stock XP assets. Distributed by Enterbrain as a Windows installer, + extractable with innoextract on other platforms. + + # ================================================================ + # RPG Maker VX RTP (optional, game-dependent) + # mkxp-z_libretro.info firmware1 + # ================================================================ + + - name: "RPG Maker VX RTP (RPGVX)" + path: "mkxp-z/RTP/RPGVX/" + required: false + type: directory + source_ref: "mkxp-z_libretro.info:firmware1, sharedstate.cpp:144-145" + note: > + Run-Time Package for RPG Maker VX (RGSS2) games. Contains default + tilesets, character sprites, face graphics, battle animations, fonts + and audio assets. VX uses a different tileset format than XP. Only + needed by games that reference stock VX assets. + + # ================================================================ + # RPG Maker VX Ace RTP (optional, game-dependent) + # mkxp-z_libretro.info firmware2 + # ================================================================ + + - name: "RPG Maker VX Ace RTP (RPGVXAce)" + path: "mkxp-z/RTP/RPGVXAce/" + required: false + type: directory + source_ref: "mkxp-z_libretro.info:firmware2, sharedstate.cpp:144-145" + note: > + Run-Time Package for RPG Maker VX Ace (RGSS3) games. Largest of the + three RTPs with expanded tilesets, character generators, battle system + assets, fonts and audio. VX Ace is the most commonly used RPG Maker + version on the RGSS engine. Only needed by games that reference stock + VX Ace assets. diff --git a/emulators/onscripter.yml b/emulators/onscripter.yml new file mode 100644 index 00000000..0d61ebe0 --- /dev/null +++ b/emulators/onscripter.yml @@ -0,0 +1,36 @@ +emulator: ONScripter +type: libretro +source: "https://github.com/iyzsong/onscripter-libretro" +cores: + - onscripter +systems: + - onscripter + +notes: | + ONScripter is a clone of NScripter, a Japanese visual novel engine by + Naoki Takahashi. The libretro port by iyzsong wraps the upstream engine + (ogapee/onscripter, tag 20230825) with an SDL-to-libretro shim layer. + + No BIOS or system files are required. The .info file declares no + firmware entries and the core never calls + RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. + + Game content is loaded directly from the archive path containing the + script file. The core opens txt, dat, ___, or ons script files via + ONScripter::openScript() and reads all game assets (graphics, audio, + fonts) from the same directory. + + The engine looks for a font file named default.ttf in the game + directory. This is a per-game asset shipped with each visual novel, + not a system-level file managed by RetroArch. + + Dependencies (bundled at build time via Guix): freetype, libjpeg, + libogg, libvorbis, libmad, bzip2, SDL (shimmed to libretro). + + The core is marked is_experimental = true. It does not support + save states (retro_serialize_size returns 0). + + Supported script formats: .txt, .dat, .___, .ons + needs_fullpath = true, block_extract = false. + +files: [] diff --git a/emulators/qemu.yml b/emulators/qemu.yml new file mode 100644 index 00000000..8973c0a3 --- /dev/null +++ b/emulators/qemu.yml @@ -0,0 +1,611 @@ +emulator: QEMU +type: libretro +source: "https://github.com/io12/qemu-libretro" +systems: [ibm-pc, x86, x86-64, ppc, sparc, sparc64, arm, aarch64, mips, riscv, s390x, m68k, alpha, hppa] + +# QEMU (Quick Emulator) libretro core, based on QEMU 9.0.50. +# Supports x86_64, i386, PPC, Sparc, ARM, AArch64, MIPS, RISC-V, S390x, M68K, Alpha, HPPA. +# Opens .iso, .img, .qcow, .qcow2 files or custom .qemu_cmd_line for any architecture. +# Default architecture is x86_64 when loading .iso/.img/.qcow directly. +# +# All BIOS/firmware files are loaded from {retroarch_system_dir}/qemu/ +# via qemu_add_data_dir(system_dir + "/qemu") in ui/libretro.c:659-660. +# QEMU resolves firmware by name through its data directory search path. + +files: + # ======================================================== + # x86 SYSTEM BIOS (SeaBIOS) + # ======================================================== + - name: "SeaBIOS (128 KB)" + path: "qemu/bios.bin" + sha1: "f402170ee4f374c304a7ce0b139d6cecb1732aff" + md5: "e9ca30100c47a26b66488444c5b0bd15" + size: 131072 + required: true + note: > + SeaBIOS legacy BIOS for x86/x86_64 PC emulation. Default firmware + loaded by pc_sysfw.c for standard PC machine types. + source_ref: "hw/i386/pc_sysfw.c:222,243" + + - name: "SeaBIOS (256 KB)" + path: "qemu/bios-256k.bin" + sha1: "5fe6078506094333106e6b3f33c7185dea7f0268" + md5: "d3dab3095c73cad67afd3cc16a88479c" + size: 262144 + required: false + note: > + SeaBIOS 256 KB variant. Some machine types or configurations + may prefer this larger image. + source_ref: "pc-bios/meson.build:30" + + - name: "SeaBIOS microvm" + path: "qemu/bios-microvm.bin" + sha1: "56f33ced7ea0f7581d776396a0ac6cfe2c7c9257" + md5: "9f0ddaf6f3b213798bd414273505f2ff" + size: 131072 + required: false + note: > + Minimal SeaBIOS for the microvm machine type, a stripped-down + x86 virtual machine with reduced device set. + source_ref: "hw/i386/microvm.c:58" + + - name: "qboot ROM" + path: "qemu/qboot.rom" + sha1: "339d3a93c967491c9f1fffe963484386f48bd22c" + md5: "387c48aef9497c6c2b914b1e6b9bc7aa" + size: 16384 + required: false + note: > + Minimal x86 firmware for fast Linux kernel booting. + Alternative to SeaBIOS for Linux-only workloads. + source_ref: "pc-bios/meson.build:32" + + # ======================================================== + # x86 VGA BIOS (SeaVGABIOS / LGPL VGA BIOS) + # ======================================================== + - name: "VGA BIOS (ISA)" + path: "qemu/vgabios.bin" + sha1: "63d87e2a6618c3a9b2aabecf03ac2456e5e63410" + md5: "ecef0b49f8f4e61874f012eb12ba0e36" + size: 38912 + required: true + note: > + Standard VGA BIOS from LGPL VGA BIOS project. Loaded by ISA VGA + device (vga-isa). Default VGA for older machine types. + source_ref: "hw/display/vga-isa.c:88, hw/display/vga_int.h:191" + + - name: "VGA BIOS Cirrus" + path: "qemu/vgabios-cirrus.bin" + sha1: "883eb2657ce29661a0466b6b41ce75411f37aad9" + md5: "fcd3d3c0b07a9096693d69425cd940f6" + size: 38912 + required: false + note: > + Cirrus Logic GD5446 VGA BIOS. Used by the cirrus-vga PCI + device and cirrus-vga-isa ISA device. + source_ref: "hw/display/cirrus_vga.c:3001, hw/display/cirrus_vga_isa.c:67" + + - name: "VGA BIOS stdvga" + path: "qemu/vgabios-stdvga.bin" + sha1: "87fbc0ecb1ee7d4d8c8c88c7d8a2fb3ec8f99ea5" + md5: "8117c3fd986fbbe327badfe38e77db1d" + size: 39424 + required: false + note: > + Standard VGA PCI BIOS (Bochs VBE extensions). Used by the + VGA PCI device, the most common display adapter for x86. + source_ref: "hw/display/vga-pci.c:387" + + - name: "VGA BIOS bochs-display" + path: "qemu/vgabios-bochs-display.bin" + sha1: "9e2edd3d835219cde63a20e2cd58107d7e96ef5b" + md5: "83e39bd3e056291ee50d2b5d937bab3e" + size: 28672 + required: false + note: "Bochs display device VGA BIOS. Simpler non-VGA display adapter." + source_ref: "hw/display/bochs-display.c:365" + + - name: "VGA BIOS ramfb" + path: "qemu/vgabios-ramfb.bin" + sha1: "49df9be557f0f0277c8fedb889257e279586d536" + md5: "c55512e313c4cb08ec5a36198fdfef33" + size: 28672 + required: false + note: "RAM framebuffer VGA BIOS for simple display output." + source_ref: "hw/display/ramfb.c:150" + + - name: "VGA BIOS ATI" + path: "qemu/vgabios-ati.bin" + sha1: "ded141cacdebf557ec552597cbf57cd989cec3e2" + md5: "013cb287a295dc6c039921c6883a767e" + size: 39424 + required: false + note: "ATI VGA BIOS for emulated ATI display adapter." + source_ref: "hw/display/ati.c:1066" + + - name: "VGA BIOS QXL" + path: "qemu/vgabios-qxl.bin" + sha1: "527227abd5f3348c382d4b02703389fbeb83b067" + md5: "558420a5ad839b10906d5d73e92a4160" + size: 39424 + required: false + note: "QXL paravirtual display VGA BIOS." + source_ref: "hw/display/qxl.c:2512" + + - name: "VGA BIOS VirtIO" + path: "qemu/vgabios-virtio.bin" + sha1: "cddc53b94793609d1e837d78cd5468fcc1ed9164" + md5: "8f1e5e497342c503f62a50912f0447e0" + size: 39424 + required: false + note: "VirtIO GPU VGA BIOS." + source_ref: "hw/display/virtio-vga.c:233" + + - name: "VGA BIOS VMware" + path: "qemu/vgabios-vmware.bin" + sha1: "c54901ab8f526ab201ebf1b3ecdf711e38e6c259" + md5: "6635fe944eab228ae01c814107674199" + size: 39424 + required: false + note: "VMware SVGA II display VGA BIOS." + source_ref: "hw/display/vmware_vga.c:1349" + + # ======================================================== + # x86 OPTION ROMs (loaded on demand) + # ======================================================== + - name: "KVM VAPIC" + path: "qemu/kvmvapic.bin" + sha1: "670c9cc79b4859944705eece710dc332188b79b4" + md5: "b8cec9572e408a3259914f9aba8664cb" + size: 9216 + required: false + note: > + KVM virtual APIC option ROM. Loaded as option ROM for + APIC acceleration on x86. + source_ref: "hw/i386/vapic.c:733" + + - name: "Linux boot ROM" + path: "qemu/linuxboot.bin" + sha1: "fd19bef7f5647960952520389f448364762ed948" + md5: "ab40dea9ff35ec29b506fdae5bf11463" + size: 1024 + required: false + note: "Option ROM for direct Linux kernel booting via -kernel." + source_ref: "hw/i386/x86-common.c:964" + + - name: "Linux boot DMA ROM" + path: "qemu/linuxboot_dma.bin" + sha1: "0bff50c10727bd9c85c831ea92b7a52699959992" + md5: "8cb622dc1c9290a019a801e972c9e4f9" + size: 1536 + required: false + note: "DMA-capable option ROM for direct Linux kernel booting." + source_ref: "hw/i386/x86-common.c:966" + + - name: "Multiboot ROM" + path: "qemu/multiboot.bin" + sha1: "a8b58ae464fc6fb26799432ae867bf57c546ff80" + md5: "552a0c03c40bb3ec292f5349ea29cf86" + size: 1024 + required: false + note: "Option ROM for Multiboot kernel loading." + source_ref: "hw/i386/multiboot.c:408" + + - name: "Multiboot DMA ROM" + path: "qemu/multiboot_dma.bin" + sha1: "32ab1cf336b674bfb154eb7a939a3e3275a92647" + md5: "e942cc4f612050c7331d33a34b0d5192" + size: 1024 + required: false + note: "DMA-capable option ROM for Multiboot kernel loading." + source_ref: "hw/i386/multiboot.c:406" + + - name: "PVH boot ROM" + path: "qemu/pvh.bin" + sha1: "c2191e6495103c1f43e9b6ca8930e44c2245e476" + md5: "bb045d6f0380ad2af3531edeff92a117" + size: 2048 + required: false + note: "Option ROM for PVH (paravirtualized hardware) ELF booting." + source_ref: "hw/i386/x86-common.c:735" + + # ======================================================== + # PXE NETWORK BOOT ROMs (iPXE) + # ======================================================== + - name: "PXE e1000" + path: "qemu/pxe-e1000.rom" + sha1: "368e8e9827ae8757a7449319831078b6d5efb83f" + md5: "898d7d0b3ed4a030c877b9185b4ef6be" + size: 67072 + required: false + note: "iPXE PXE boot ROM for Intel e1000 NIC (8086:100e)." + source_ref: "pc-bios/README" + + - name: "PXE eepro100" + path: "qemu/pxe-eepro100.rom" + sha1: "b19572c9c2a11f03282df81c0397aceed409a86c" + md5: "2f8279177fdc2ce5abc47d9f1e303db1" + size: 61440 + required: false + note: "iPXE PXE boot ROM for Intel eepro100 NIC (8086:1209)." + source_ref: "pc-bios/README" + + - name: "PXE ne2k_pci" + path: "qemu/pxe-ne2k_pci.rom" + sha1: "f37f43f89dc99afe0442ee0b7a431ee790ad6bf6" + md5: "095cdf2b26084ce22adb883e9c43fc5a" + size: 61440 + required: false + note: "iPXE PXE boot ROM for NE2000 PCI NIC (1050:0940)." + source_ref: "pc-bios/README" + + - name: "PXE pcnet" + path: "qemu/pxe-pcnet.rom" + sha1: "13a039bf9916f1db42d3a019591d372b4cf4aee9" + md5: "15e38b82922a058c6df6eaffbad1b916" + size: 61440 + required: false + note: "iPXE PXE boot ROM for AMD PCnet NIC (1022:2000)." + source_ref: "pc-bios/README" + + - name: "PXE rtl8139" + path: "qemu/pxe-rtl8139.rom" + sha1: "7b512c0a7a13bc3c254a25237e4d4612170f4391" + md5: "22f4b6ae5650988f999ee651a3734462" + size: 61440 + required: false + note: "iPXE PXE boot ROM for Realtek RTL8139 NIC (10ec:8139)." + source_ref: "pc-bios/README" + + - name: "PXE virtio" + path: "qemu/pxe-virtio.rom" + sha1: "3e3f77cfe70af904133db94f27ec24e3c9c43648" + md5: "91ad9770f5717a89d518534f45f1332d" + size: 60416 + required: false + note: "iPXE PXE boot ROM for VirtIO NIC (1af4:1000)." + source_ref: "pc-bios/README" + + # ======================================================== + # EFI NETWORK BOOT ROMs (iPXE UEFI) + # ======================================================== + - name: "EFI e1000" + path: "qemu/efi-e1000.rom" + sha1: "a3df5fc33ab0190f470b34104ff3c0679cecbab6" + md5: "d8330b99643e31b51e7710fa26c7e859" + size: 159232 + required: false + note: "iPXE EFI boot ROM for Intel e1000 NIC." + source_ref: "hw/net/e1000.c:1708" + + - name: "EFI e1000e" + path: "qemu/efi-e1000e.rom" + sha1: "1d37f3ae6748d4deefe9fd5188a2f557bf265d61" + md5: "a55bf3f4988d4a736c71a1300636cd69" + size: 159232 + required: false + note: "iPXE EFI boot ROM for Intel e1000e NIC." + source_ref: "hw/net/e1000e.c:689" + + - name: "EFI eepro100" + path: "qemu/efi-eepro100.rom" + sha1: "956d9592fea33374ef0f1900a185b6e1109ea765" + md5: "d2a2f92710f5a9f77281e9492a249afb" + size: 159232 + required: false + note: "iPXE EFI boot ROM for Intel eepro100 NIC." + source_ref: "hw/net/eepro100.c:2077" + + - name: "EFI ne2k_pci" + path: "qemu/efi-ne2k_pci.rom" + sha1: "adb7199f545fdb66c325b142c8dbc4cddb99a20d" + md5: "10b66275b3644af301c64a3c545c3daf" + size: 157696 + required: false + note: "iPXE EFI boot ROM for NE2000 PCI NIC." + source_ref: "hw/net/ne2000-pci.c:111" + + - name: "EFI pcnet" + path: "qemu/efi-pcnet.rom" + sha1: "9e5a4bb247c6a1777c89117ca091f94342b9046d" + md5: "374696f4fffa83c9cf18272212c21d83" + size: 157696 + required: false + note: "iPXE EFI boot ROM for AMD PCnet NIC." + source_ref: "hw/net/pcnet-pci.c:267" + + - name: "EFI rtl8139" + path: "qemu/efi-rtl8139.rom" + sha1: "99a1e431cc0cb0a78d5803875dfa687e12a947f4" + md5: "f81dbbd7001a8db631f2a548b7d08c4e" + size: 160768 + required: false + note: "iPXE EFI boot ROM for Realtek RTL8139 NIC." + source_ref: "hw/net/rtl8139.c:3423" + + - name: "EFI virtio" + path: "qemu/efi-virtio.rom" + sha1: "1596e9b97f0bc8b5ff3e444235690a549ee982c6" + md5: "d3887f04c23035cae3f0e1075deea459" + size: 160768 + required: false + note: "iPXE EFI boot ROM for VirtIO NIC." + source_ref: "pc-bios/meson.build:58" + + - name: "EFI vmxnet3" + path: "qemu/efi-vmxnet3.rom" + sha1: "6557242402387a6319a0db6abb916ada48e1391c" + md5: "ea1ba222dbd5aa356ea1f29393ae55e1" + size: 156672 + required: false + note: "iPXE EFI boot ROM for VMware vmxnet3 NIC." + source_ref: "hw/net/vmxnet3.c:2508" + + # ======================================================== + # POWERPC FIRMWARE + # ======================================================== + - name: "OpenBIOS PowerPC" + path: "qemu/openbios-ppc" + sha1: "0ef5051dcb318c0bc45d1908f8318d6eece8686a" + md5: "" + size: 677196 + required: false + note: > + OpenBIOS (IEEE 1275 Open Firmware) for PowerPC emulation. + Required for -M mac99, -M g3beige and other PPC machines. + source_ref: "pc-bios/README" + + - name: "SLOF (Slimline Open Firmware)" + path: "qemu/slof.bin" + sha1: "a03a94acfe555804d66cc6c74760ae1375a71a64" + md5: "" + size: 995000 + required: false + note: > + IBM SLOF firmware for pSeries (POWER) machine type. + Built from qemu-slof-20230918 tag. + source_ref: "pc-bios/README" + + - name: "skiboot" + path: "qemu/skiboot.lid" + sha1: "8052069aa9714c23be05b4e62fb245a3d572cb0f" + md5: "" + size: 2527328 + required: false + note: > + OPAL firmware for OpenPOWER PowerNV (non-virtualized) machine type. + source_ref: "pc-bios/README" + + - name: "VOF (Virtual Open Firmware)" + path: "qemu/vof.bin" + sha1: "fc737b34a390f5752cb7e35b33d71f4f438ab607" + md5: "" + size: 3456 + required: false + note: "Minimal Open Firmware shim for -machine pseries,x-vof=on." + source_ref: "pc-bios/README" + + - name: "VOF NVRAM" + path: "qemu/vof-nvram.bin" + sha1: "5d1184609b87f78635f0575467a1c3f440900ff0" + md5: "" + size: 16384 + required: false + note: "NVRAM template for VOF (Virtual Open Firmware)." + source_ref: "pc-bios/meson.build:83" + + - name: "U-Boot e500" + path: "qemu/u-boot.e500" + sha1: "9ea03f249f856cdcb4399cc1f5a5031729379911" + md5: "" + size: 421720 + required: false + note: > + U-Boot for PowerPC e500 (qemu-ppce500 target). + Built from upstream denx u-boot, commit 2072e72. + source_ref: "pc-bios/README" + + - name: "U-Boot SAM460" + path: "qemu/u-boot-sam460-20100605.bin" + sha1: "0399a79ac0cf77f0da70af9baec7548a3b368f0a" + md5: "" + size: 524288 + required: false + note: "U-Boot for Sam460ex (AmigaOne) PowerPC board." + source_ref: "pc-bios/meson.build:74" + + - name: "QEMU VGA Mac driver" + path: "qemu/qemu_vga.ndrv" + sha1: "638c6262a6eb579ec3d1c9292566ac94c942dc15" + md5: "" + size: 18752 + required: false + note: "QemuMacDrivers VGA driver for PPC MacOS guests." + source_ref: "pc-bios/README" + + # ======================================================== + # SPARC FIRMWARE + # ======================================================== + - name: "OpenBIOS Sparc32" + path: "qemu/openbios-sparc32" + sha1: "5a4f2124c8f093f8aee99fbcebcf5d17d789ff26" + md5: "" + size: 382080 + required: false + note: > + OpenBIOS for Sparc32 emulation. Includes QEMU,tcx.bin + and QEMU,cgthree.bin display drivers. + source_ref: "pc-bios/README" + + - name: "OpenBIOS Sparc64" + path: "qemu/openbios-sparc64" + sha1: "c6e215fe460629d35688ab8e51faf6f765827cd6" + md5: "" + size: 1593408 + required: false + note: "OpenBIOS for Sparc64 (UltraSPARC) emulation." + source_ref: "pc-bios/README" + + - name: "QEMU TCX display" + path: "qemu/QEMU,tcx.bin" + sha1: "" + md5: "" + required: false + note: "TCX framebuffer FCode driver for Sparc32 OpenBIOS." + source_ref: "pc-bios/meson.build:45" + + - name: "QEMU cgthree display" + path: "qemu/QEMU,cgthree.bin" + sha1: "" + md5: "" + required: false + note: "CG3 framebuffer FCode driver for Sparc32 OpenBIOS." + source_ref: "pc-bios/meson.build:46" + + # ======================================================== + # ALPHA FIRMWARE + # ======================================================== + - name: "Alpha PALcode" + path: "qemu/palcode-clipper" + sha1: "47b0870aaa45a7aa0d48847fd905908fb06f3e9f" + md5: "" + size: 153728 + required: false + note: "PALcode firmware for Alpha (Clipper/DP264) machine emulation." + source_ref: "pc-bios/README" + + # ======================================================== + # RISC-V FIRMWARE + # ======================================================== + - name: "OpenSBI RISC-V 32" + path: "qemu/opensbi-riscv32-generic-fw_dynamic.bin" + sha1: "7a23dfdeef3d78ffc89d86e89fc06a36f1e4386f" + md5: "" + size: 268312 + required: false + note: > + OpenSBI (Supervisor Binary Interface) firmware for RISC-V 32-bit. + Required for riscv32-softmmu machine types. + source_ref: "pc-bios/README" + + - name: "OpenSBI RISC-V 64" + path: "qemu/opensbi-riscv64-generic-fw_dynamic.bin" + sha1: "6883bfd1991c0ef0d67b0967e7dcbd60420dd480" + md5: "" + size: 272504 + required: false + note: > + OpenSBI firmware for RISC-V 64-bit. + Required for riscv64-softmmu machine types. + source_ref: "pc-bios/README" + + # ======================================================== + # S390X FIRMWARE + # ======================================================== + - name: "S390 CCW firmware" + path: "qemu/s390-ccw.img" + sha1: "7b4fa888d32ca8ddbc752f7442e4d055cee1871a" + md5: "" + size: 42608 + required: false + note: "Channel Command Word boot firmware for s390x emulation." + source_ref: "pc-bios/meson.build:68" + + - name: "S390 network boot" + path: "qemu/s390-netboot.img" + sha1: "f6cec671408117bd9a31e982682662f27ef4fb2c" + md5: "" + size: 67232 + required: false + note: "Network boot firmware for s390x emulation." + source_ref: "pc-bios/meson.build:69" + + # ======================================================== + # HP-PA FIRMWARE + # ======================================================== + - name: "HP-PA firmware (32-bit)" + path: "qemu/hppa-firmware.img" + sha1: "605c36ede6c120c6cc7efe147a75a3dc4b7e4fb0" + md5: "" + size: 167820 + required: false + note: "SeaBIOS-hppa firmware for 32-bit HP-PARISC emulation." + source_ref: "pc-bios/README" + + - name: "HP-PA firmware (64-bit)" + path: "qemu/hppa-firmware64.img" + sha1: "b42f6d4ca74073de6c038579b4a9323ad0a6b398" + md5: "" + size: 206024 + required: false + note: "SeaBIOS-hppa firmware for 64-bit HP-PARISC emulation." + source_ref: "pc-bios/README" + + # ======================================================== + # DEVICE TREE BLOBS + # ======================================================== + - name: "Bamboo DTB (PPC)" + path: "qemu/bamboo.dtb" + sha1: "ebdf1745479f4ec88459bbd9ef16ee1114018508" + md5: "" + size: 3211 + required: false + note: "Device tree blob for PowerPC Bamboo (440EP) board." + source_ref: "pc-bios/meson.build:88" + + - name: "Canyonlands DTB (PPC)" + path: "qemu/canyonlands.dtb" + sha1: "8a2fda0b4f23a92eb44776b5d7ffe951987062da" + md5: "" + size: 9779 + required: false + note: "Device tree blob for PowerPC Canyonlands (460EX) board." + source_ref: "pc-bios/meson.build:89" + + - name: "Petalogix ML605 DTB (MicroBlaze)" + path: "qemu/petalogix-ml605.dtb" + sha1: "892d265838866869b8a8ef104252ff5b2fda156f" + md5: "" + size: 9882 + required: false + note: "Device tree blob for Xilinx Petalogix ML605 MicroBlaze board." + source_ref: "pc-bios/meson.build:91" + + - name: "Petalogix S3ADSP1800 DTB (MicroBlaze)" + path: "qemu/petalogix-s3adsp1800.dtb" + sha1: "976600e3f89ecc1f3564b7077f53c58e0b565280" + md5: "" + size: 8161 + required: false + note: "Device tree blob for Xilinx Petalogix S3ADSP1800 MicroBlaze board." + source_ref: "pc-bios/meson.build:90" + + # ======================================================== + # OTHER + # ======================================================== + - name: "NPCM7xx boot ROM" + path: "qemu/npcm7xx_bootrom.bin" + sha1: "22a75d26a0591d2c7763765b6381fa2f73de43e1" + md5: "" + size: 768 + required: false + note: "Boot ROM for Nuvoton NPCM7xx BMC (ARM Cortex-A9)." + source_ref: "pc-bios/README" + +notes: + bios_directory: > + All files go in {retroarch_system_dir}/qemu/. The libretro core adds + this path via qemu_add_data_dir() in ui/libretro.c:659-660. + default_usage: > + For typical x86/x86_64 usage (loading .iso/.img/.qcow files directly), + only bios.bin (or bios-256k.bin) and vgabios.bin are strictly needed. + Other VGA BIOS variants are loaded depending on the emulated GPU. + PXE/EFI ROMs are only needed for network booting. + multi_arch: > + The libretro build supports 16 target architectures. Non-x86 firmware + is only needed when using .qemu_cmd_line files that invoke a different + qemu-system-* binary (e.g. qemu-system-ppc for MacOS 9). + experimental: > + This core is marked is_experimental=true in its .info file. + Savestates are not supported. + version: "Based on QEMU 9.0.50 (io12/qemu-libretro)" diff --git a/emulators/reminiscence.yml b/emulators/reminiscence.yml new file mode 100644 index 00000000..e0d6b12d --- /dev/null +++ b/emulators/reminiscence.yml @@ -0,0 +1,85 @@ +emulator: REminiscence +type: libretro +source: "https://github.com/libretro/REminiscence" +cores: + - reminiscence +systems: + - flashback + +notes: | + REminiscence is a re-implementation of the Flashback (Delphine Software, 1992) game engine, + ported to libretro. Version 0.3.6. It is not a general-purpose emulator; it only runs the + original Flashback game data files. + + The core sets need_fullpath = true and valid_extensions = "map" (libretro.cpp:67-68). + Content loading (retro_load_game) extracts the parent directory from the provided .MAP + file path and uses it as the data root via FileSystem (libretro.cpp:194-196). + + Version detection (libretro.cpp:126-149) probes for these files in order: + DEMO_UK.ABA -> DOS Demo + INTRO.SEQ -> DOS CD + LEVEL1.MAP -> DOS + LEVEL1.LEV -> Amiga + DEMO.LEV -> Amiga Demo + Only kResourceTypeDOS is accepted by retro_load_game (line 199); Amiga data is rejected. + + Language detection (libretro.cpp:151-175) probes for: + ENGCINE.TXT -> English + FR_CINE.TXT -> French + GERCINE.TXT -> German + SPACINE.TXT -> Spanish + ITACINE.TXT -> Italian + FRCINE.TXT -> French (Amiga) + Falls back to English if none found. + + All game data files are loaded from the content directory at runtime via FileSystem + (fs.cpp), which recursively scans the directory and matches filenames case-insensitively + (strcasecmp at fs.cpp:52). The resource system (resource.cpp) loads files by constructing + names like "LEVEL1.MAP", "GLOBAL.ICN", "PERSO.SPR", "FB_TXT.FNT", etc. + + The core never calls RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. All data files must live + alongside the loaded .MAP content file (or in subdirectories of its parent). There are + no BIOS or firmware files; the required files are the original Flashback game data. + + Music is loaded from .mod files or Amiga-format module files (mod_player.cpp, staticres.cpp + lines 3198-3225). These are optional; the core has a built-in SFX player for in-game + action music (sfx_player.cpp with embedded music data in staticres.cpp). + + VOICE.VCE from the SegaCD version can optionally be placed in the data directory for + in-game voice playback (resource.cpp:910). + + INTRO.SEQ and other .SEQ files from the DOS CD version provide FMV cutscenes + (seq_player.cpp). Without them, the core falls back to polygon-based cutscenes. + +files: [] + +analysis: + content_type: game_data + content_extensions: ["map"] + system_directory_used: false + filesystem_access: true + data_files_location: "same directory as loaded content" + game_data_files: + dos_floppy: + required: + - "LEVEL1.MAP through LEVEL7.MAP (level map data)" + - "LEVEL1.* (MBK, PGE, PAL, CT, SPC, RP, ANI, OBJ, TBN, SGD, BNQ, LEV)" + - "GLOBAL.ICN, GLOBAL.SPC, GLOBAL.FIB" + - "PERSO.SPR, PERSO.OFF" + - "FB_TXT.FNT" + - "ENGCINE.TXT or equivalent language file" + - "ENGCINE.BIN or equivalent" + optional: + - "intro, options, journal, etc. (.mod files for cutscene music)" + - "VOICE.VCE (SegaCD voice data)" + dos_cd: + additional: + - "INTRO.SEQ, CREDITS.SEQ, and other .SEQ cutscene videos" + demo: + archive: "DEMO_UK.ABA (contains all demo data in a single archive)" + detection_order: + - { file: "DEMO_UK.ABA", type: "DOS Demo" } + - { file: "INTRO.SEQ", type: "DOS CD" } + - { file: "LEVEL1.MAP", type: "DOS Floppy" } + - { file: "LEVEL1.LEV", type: "Amiga (rejected by libretro port)" } + - { file: "DEMO.LEV", type: "Amiga Demo (rejected by libretro port)" } diff --git a/emulators/rustation.yml b/emulators/rustation.yml new file mode 100644 index 00000000..a04f26e2 --- /dev/null +++ b/emulators/rustation.yml @@ -0,0 +1,191 @@ +emulator: Rustation +type: libretro +source: "https://github.com/libretro/rustation-libretro" +cores: [rustation] +systems: [sony-playstation] +bios_size: 524288 # 512 KB, enforced before SHA-256 check +verification: sha256 +notes: > + No filename requirement: the core scans every file in the system directory, + filters by exact 512 KB size, then validates the full binary against an internal + SHA-256 database (lifted from Mednafen). Region must match the loaded disc + (Japan, NorthAmerica, Europe). Known-bad dumps are rejected even if hash matches. + "Boot to BIOS menu" option allows booting without a disc. + No HLE fallback: a real, database-matched BIOS is mandatory. + Database contains 24 entries (22 good, 2 known_bad) covering BIOS versions 1.0 through 4.5. + +files: + # -- Region: Japan -- + + - name: "scph5500.bin" + description: "SCPH-5500 (v3.0 J)" + region: "NTSC-J" + required: true + md5: "8dd7d5296a650fac7319bce665a6a53c" + sha256: "9c0421858e217805f4abe18698afea8d5aa36ff0727eb8484944e00eb5e7eadb" + source_ref: "rustation/src/bios/db.rs:226-232 (v3.0 Japan)" + notes: "Any filename works. Core matches by SHA-256, not name. v3.0 is the standard JP BIOS." + + # -- Region: North America -- + + - name: "scph5501.bin" + description: "SCPH-5501 (v3.0 A)" + region: "NTSC-U" + required: true + md5: "490f666e1afb15b7362b406ed1cea246" + sha256: "11052b6499e466bbf0a709b1f9cb6834a9418e66680387912451e971cf8a1fef" + source_ref: "rustation/src/bios/db.rs:234-244 (v3.0 NorthAmerica)" + notes: "Any filename works. Only NA BIOS with animation_jump_hook and debug UART patch support." + + # -- Region: Europe -- + + - name: "scph5502.bin" + description: "SCPH-5502 (v3.0 E)" + region: "PAL" + required: true + md5: "32736f17079d0b2b7024407c39bd3050" + sha256: "1faaa18fa820a0225e488d9f086296b8e6c46df739666093987ff7d8fd352c09" + source_ref: "rustation/src/bios/db.rs:246-256 (v3.0 Europe)" + notes: "Any filename works. Core matches by SHA-256, not name." + + # -- Additional accepted BIOS versions (all validated by SHA-256 scan) -- + # The core accepts any of the 22 good entries below. Only one per region is needed. + # Listed here for completeness; scph5500/5501/5502 above are the standard choices. + + # Japan alternatives + - name: "scph1000.bin" + description: "SCPH-1000 (v1.0 J)" + region: "NTSC-J" + required: false + sha256: "cfc1fc38eb442f6f80781452119e931bcae28100c1c97e7e6c5f2725bbb0f8bb" + source_ref: "rustation/src/bios/db.rs:77-88 (v1.0 Japan)" + + - name: "scph_v11j.bin" + description: "v1.1 J" + region: "NTSC-J" + required: false + sha256: "5eb3aee495937558312b83b54323d76a4a015190decd4051214f1b6df06ac34b" + source_ref: "rustation/src/bios/db.rs:89-100 (v1.1 Japan)" + + - name: "scph3000.bin" + description: "SCPH-3000 (v2.1 J)" + region: "NTSC-J" + required: false + sha256: "6f71ca1e716da761dc53187bd39e00c213f566e55090708fd3e2b4b425c8c989" + source_ref: "rustation/src/bios/db.rs:126-136 (v2.1 Japan)" + + - name: "scph3500.bin" + description: "SCPH-3500 (v2.2 J)" + region: "NTSC-J" + required: false + sha256: "0c8359870cbac0ea091f1c87f188cd332dcc709753b91cafd9fd44a4a6188197" + source_ref: "rustation/src/bios/db.rs:162-172 (v2.2 Japan, good)" + notes: "A known-bad v2.2 J dump also exists in the DB but is rejected." + + - name: "scph5000.bin" + description: "v2.2 J (alt)" + region: "NTSC-J" + required: false + sha256: "4018749b3698b8694387beebcbabfb48470513066840f9441459ee4c9f0f39bc" + source_ref: "rustation/src/bios/db.rs:209-220 (v2.2 Japan, alt)" + + - name: "scph7000.bin" + description: "SCPH-7000 (v4.0 J)" + region: "NTSC-J" + required: false + sha256: "e900504d1755f021f861b82c8258c5e6658c7b592f800cccd91f5d32ea380d28" + source_ref: "rustation/src/bios/db.rs:269-281 (v4.0 Japan)" + notes: "Shares animation_jump_hook patch with NA v3.0." + + - name: "scph7500.bin" + description: "SCPH-7500 (v4.1 J)" + region: "NTSC-J" + required: false + sha256: "b3aa63cf30c81e0a40641740f4a43e25fda0b21b792fa9aaef60ce1675761479" + source_ref: "rustation/src/bios/db.rs:283-293 (v4.1 Japan)" + + - name: "scph9000.bin" + description: "SCPH-9000 (v4.3 J)" + region: "NTSC-J" + required: false + sha256: "b29b4b5fcddef369bd6640acacda0865e0366fcf7ea54e40b2f1a8178004f89a" + source_ref: "rustation/src/bios/db.rs:318-329 (v4.3 Japan)" + + # North America alternatives + - name: "scph1001.bin" + description: "SCPH-1001 (v2.0 A)" + region: "NTSC-U" + required: false + sha256: "42e4124be7623e2e28b1db0d8d426539646faee49d74b71166d8ba5bd7c472ed" + source_ref: "rustation/src/bios/db.rs:101-112 (v2.0 NorthAmerica)" + + - name: "scph5001.bin" + description: "SCPH-5001 (v2.1 A)" + region: "NTSC-U" + required: false + sha256: "6ad5521d105a6b86741f1af8da2e6ea1c732d34459940618c70305a105e8ec10" + source_ref: "rustation/src/bios/db.rs:138-148 (v2.1 NorthAmerica)" + + - name: "scph_v22a.bin" + description: "v2.2 A" + region: "NTSC-U" + required: false + sha256: "71af94d1e47a68c11e8fdb9f8368040601514a42a5a399cda48c7d3bff1e99d3" + source_ref: "rustation/src/bios/db.rs:186-196 (v2.2 NorthAmerica)" + + - name: "scph7001.bin" + description: "SCPH-7001 (v4.1 A)" + region: "NTSC-U" + required: false + sha256: "39dcc1a0717036c9b6ac52fefd1ee7a57d3808e8cfbc755879fa685a0a738278" + source_ref: "rustation/src/bios/db.rs:294-305 (v4.1 NorthAmerica)" + + - name: "scph101.bin" + description: "SCPH-101 (v4.5 A)" + region: "NTSC-U" + required: false + sha256: "aca9cbfa974b933646baad6556a867eca9b81ce65d8af343a7843f7775b9ffc8" + source_ref: "rustation/src/bios/db.rs:342-353 (v4.5 NorthAmerica)" + + # Europe alternatives + - name: "scph1002.bin" + description: "SCPH-1002 (v2.0 E)" + region: "PAL" + required: false + sha256: "0af2be3468d30b6018b3c3b0d98b8b64347e255e16d874d55f0363648973dbf0" + source_ref: "rustation/src/bios/db.rs:113-124 (v2.0 Europe)" + + - name: "scph_v21e.bin" + description: "v2.1 E" + region: "PAL" + required: false + sha256: "1efb0cfc5db8a8751a884c5312e9c6265ca1bc580dc0c2663eb2dea3bde9fcf7" + source_ref: "rustation/src/bios/db.rs:149-160 (v2.1 Europe)" + + - name: "scph_v22e.bin" + description: "v2.2 E" + region: "PAL" + required: false + sha256: "3d06d2c469313c2a2128d24fe2e0c71ff99bc2032be89a829a62337187f500b7" + source_ref: "rustation/src/bios/db.rs:198-208 (v2.2 Europe)" + + - name: "scph7002.bin" + description: "SCPH-7002 (v4.1 E)" + region: "PAL" + required: false + sha256: "5e84a94818cf5282f4217591fefd88be36b9b174b3cc7cb0bcd75199beb450f1" + source_ref: "rustation/src/bios/db.rs:306-317 (v4.1 Europe)" + + - name: "scph102.bin" + description: "SCPH-102 (v4.4 E)" + region: "PAL" + required: false + sha256: "5c0166da24e27deaa82246de8ff0108267fe4bb59f6df0fdec50e05e62448ca4" + source_ref: "rustation/src/bios/db.rs:330-341 (v4.4 Europe)" + + - name: "scph102_v45.bin" + description: "v4.5 E" + region: "PAL" + required: false + sha256: "42244b0c650821519751b7e77ad1d3222a0125e75586df2b4e84ba693b9809dc" + source_ref: "rustation/src/bios/db.rs:354-365 (v4.5 Europe)" diff --git a/emulators/rvvm.yml b/emulators/rvvm.yml new file mode 100644 index 00000000..d9c0fcf6 --- /dev/null +++ b/emulators/rvvm.yml @@ -0,0 +1,100 @@ +emulator: RVVM +type: libretro +source: "https://github.com/LekKit/RVVM" +systems: [riscv] + +# RVVM is a RISC-V virtual machine / emulator. The libretro core loads a +# ".rvvm" config file that specifies bootrom, kernel, nvme drives, memory, +# CPU mode (rv32/rv64), cmdline, and framebuffer resolution. +# +# The core itself does NOT bundle any firmware. Users must supply: +# 1. A bootrom (M-mode firmware): typically OpenSBI fw_payload.bin or fw_jump.bin +# 2. Optionally a kernel payload (S-mode): Linux Image, U-Boot, etc. +# 3. Optionally a custom DTB (the core auto-generates one if not provided) +# +# The .rvvm file is a plain-text key=value config parsed by retro_load_game(): +# bootrom=/path/to/fw_payload.bin +# kernel=/path/to/Image +# nvme=/path/to/rootfs.img +# mem=512 +# smp=2 +# rv64 +# cmdline=root=/dev/nvme0n1 rootflags=discard rw console=tty0 +# +# Paths in the .rvvm file are resolved relative to the .rvvm file's directory +# (the core chdir()s there before vm_init). The bootrom is mandatory - the core +# shows "RVVM: No bootrom" if missing. + +# Source references: +# libretro binding: src/bindings/libretro/libretro.c +# firmware loading: src/rvvm.c:rvvm_load_firmware() +# kernel loading: src/rvvm.c:rvvm_load_kernel() (offset 0x200000 rv64, 0x400000 rv32) +# FDT generation: src/rvvm.c:rvvm_init_fdt() (auto-generated if not provided) +# CLI help: src/main.c:rvvm_print_help() + +files: + # -- OpenSBI firmware (required) -- + # M-mode firmware loaded at RESET_PC (0x80000000). This is the first code + # executed by the virtual machine. The standard choice is OpenSBI with + # U-Boot as payload (fw_payload.bin) or OpenSBI standalone (fw_jump.bin). + # The core calls rvvm_load_bootrom() which maps to rvvm_load_firmware(). + + - name: "fw_payload.bin" + path: "rvvm/fw_payload.bin" + required: true + source_ref: "libretro.c:309-315, rvvm.c:621-628" + note: > + OpenSBI firmware with U-Boot payload. This is the M-mode bootrom + loaded at physical address 0x80000000. Without this file, the VM + cannot start. Common builds: opensbi fw_payload (includes U-Boot), + or fw_jump.bin (jumps to kernel directly). The file is referenced + by the bootrom= key in the .rvvm config file. + + # -- Kernel image (optional) -- + # S-mode kernel loaded at offset 0x200000 (rv64) or 0x400000 (rv32) from + # RAM base. Used with fw_jump.bin to boot Linux directly without U-Boot. + + - name: "Image" + path: "rvvm/Image" + required: false + source_ref: "libretro.c:316-318, rvvm.c:630-638" + note: > + Linux kernel image or other S-mode payload. Loaded at a fixed offset + from RAM base (0x200000 for rv64, 0x400000 for rv32). Only needed + when using fw_jump.bin as bootrom. Referenced by the kernel= key + in the .rvvm config file. + + # -- Device Tree Blob (optional) -- + # Custom FDT passed to the guest. The core auto-generates a complete DTB + # with cpu topology, memory map, and all attached devices if not provided. + + - name: "machine.dtb" + path: "rvvm/machine.dtb" + required: false + source_ref: "rvvm.c:641-648, main.c:230" + note: > + Custom Flattened Device Tree. The core generates a DTB automatically + based on the machine configuration (cpus, memory, devices), so this + is only needed for special setups. The FDT address is passed to the + firmware in register a1 at boot. + +notes: + emulation_target: > + RVVM emulates a RISC-V machine with rv64imafdcb (or rv32ima) ISA, + SiFive PLIC interrupt controller, NVMe storage, RTL8169 networking, + framebuffer display, HID keyboard/mouse, UART, Goldfish RTC, and + PCI bus. It includes a tracing JIT with x86_64/ARM64/RISC-V backends. + firmware_sources: > + OpenSBI builds: https://github.com/riscv-software-src/opensbi/releases + Pre-built fw_payload.bin (OpenSBI + U-Boot) for RVVM: + https://github.com/LekKit/RVVM/wiki/Running + config_format: > + The .rvvm file is a plain-text key=value config. Supported keys: + bootrom, kernel, nvme (up to 4), mem (MB), smp, cmdline, rv64/rv32. + Default: rv64, 256 MB RAM, 1 core, 640x480 framebuffer. + libretro_info: > + Core name: rvvm_libretro. Extension: .rvvm. Experimental: yes. + No save states, no cheats, needs_fullpath=true. + The core does not use the RetroArch system directory for firmware - + all paths are specified in the .rvvm config file relative to its + own directory.