diff --git a/emulators/beetle_vb.yml b/emulators/beetle_vb.yml new file mode 100644 index 00000000..9e5c1386 --- /dev/null +++ b/emulators/beetle_vb.yml @@ -0,0 +1,26 @@ +emulator: Beetle VB (Mednafen Virtual Boy) +type: libretro +source: "https://github.com/libretro/beetle-vb-libretro" +systems: [nintendo-virtualboy] + +notes: | + Beetle VB is a port of Mednafen's Virtual Boy emulation module to + libretro. Based on Mednafen v0.9.36.1. + + No external BIOS or firmware files are required. The Virtual Boy + hardware did not use a traditional boot ROM or BIOS in the way + that consoles like PlayStation or Saturn do. The V810 CPU starts + execution directly from the game ROM mapped at 0x07000000. + + The core loads the ROM into GPROM (Game Pak ROM), mirrors it if + smaller than 64KB, and initializes 64KB of WRAM and optional + GPRAM (Game Pak RAM/SRAM for saves). The VIP (Virtual Image + Processor), VSU (Virtual Sound Unit), and hardware timer are all + emulated in software with no firmware dependencies. + + The libretro .info file (mednafen_vb_libretro.info) declares no + firmware entries and no system files. + + ROM extensions: .vb, .vboy, .bin + +files: [] diff --git a/emulators/fmsx.yml b/emulators/fmsx.yml new file mode 100644 index 00000000..f24aa277 --- /dev/null +++ b/emulators/fmsx.yml @@ -0,0 +1,185 @@ +emulator: fMSX +type: libretro +source: "https://github.com/libretro/fmsx-libretro" +cores: + - fmsx +systems: + - msx + - msx2 + - msx2plus + +# fMSX is a standalone MSX emulator by Marat Fayzullin, ported to libretro. +# Supports MSX1, MSX2, and MSX2+ hardware models. Default model is MSX2+. +# +# ROM loading (fMSX/MSX.c:688-750, ResetMSX): +# The core sets ProgDir = RetroArch system_directory, then chdir(ProgDir) +# before calling LoadROM(). All BIOS files must be placed directly in the +# system directory root (no subdirectories). +# +# Model selection (libretro.c:731-757): +# Core option "fmsx_machine_type" picks MSX1/MSX2/MSX2+. Default is MSX2+. +# MSX1 loads MSX.ROM (32 KB main BIOS). +# MSX2 loads MSX2.ROM (32 KB) + MSX2EXT.ROM (16 KB extension). +# MSX2+ loads MSX2P.ROM (32 KB) + MSX2PEXT.ROM (16 KB extension). +# +# Disk support (fMSX/MSX.c:780): +# DISK.ROM is loaded when "fmsx_simbdos" option is enabled (MSX_PATCHBDOS). +# Without it, .dsk files won't boot. The core shows a warning if DISK.ROM +# is missing when loading disk content. +# +# Optional ROMs (fMSX/MSX.c:526-582): +# KANJI.ROM - Kanji font (128 KB), loaded unconditionally if present +# FMPAC.ROM - FM-PAC cartridge (64 KB), loaded into first free slot +# MSXDOS2.ROM - MSX-DOS 2 (64 KB), loaded when "fmsx_dos2" enabled and MSX2+ +# PAINTER.ROM - Paint utility (64 KB), loaded for MSX2/MSX2+ +# RS232.ROM - RS-232C serial (16 KB + 256 B), loaded into slot 3:3 +# GMASTER2.ROM - Konami GameMaster2 cart, loaded when "fmsx_game_master" enabled +# GMASTER.ROM - Konami GameMaster (fallback if GMASTER2.ROM missing) +# CMOS.ROM - RTC settings persistence, saved/loaded automatically +# +# All ROMs listed below are bundled in fMSX/ROMs/ inside the repo source. +# They are the standard C-BIOS-compatible generic MSX BIOS set from fMSX. + +notes: | + Place all ROM files directly in the RetroArch system directory. No subdirectory + needed. The core does chdir() to system_dir before loading. + + The default model is MSX2+, which needs MSX2P.ROM and MSX2PEXT.ROM. If you only + play cartridge ROMs, these two files are sufficient. For disk games (.dsk), also + add DISK.ROM and enable "Simulate DiskROM" in core options. + + KANJI.ROM and FMPAC.ROM are loaded automatically when present, no option needed. + +files: + # -- MSX1 BIOS -- + + - name: MSX.ROM + size: 32768 + md5: aa95aea2563cd5ec0a0919b44cc17d47 + sha1: 409e82adac40f6bdd18eb6c84e8b2fbdc7fb5498 + required: true + system: msx + bundled: true + note: "MSX1 main BIOS (32 KB). Loaded for MSX1 model (fMSX/MSX.c:693)." + source_ref: "fMSX/ROMs/MSX.ROM" + + # -- MSX2 BIOS -- + + - name: MSX2.ROM + size: 32768 + md5: ec3a01c91f24fbddcbcab0ad301bc9ef + sha1: 6103b39f1e38d1aa2d84b1c3219c44f1abb5436e + required: true + system: msx2 + bundled: true + note: "MSX2 main BIOS (32 KB). Loaded for MSX2 model (fMSX/MSX.c:709)." + source_ref: "fMSX/ROMs/MSX2.ROM" + + - name: MSX2EXT.ROM + size: 16384 + md5: 2183c2aff17cf4297bdb496de78c2e8a + sha1: 5c1f9c7fb655e43d38e5dd1fcc6b942b2ff68b02 + required: true + system: msx2 + bundled: true + note: "MSX2 extension BIOS (16 KB). Loaded alongside MSX2.ROM (fMSX/MSX.c:710)." + source_ref: "fMSX/ROMs/MSX2EXT.ROM" + + # -- MSX2+ BIOS (default model) -- + + - name: MSX2P.ROM + size: 32768 + md5: 6d8c0ca64e726c82a4b726e9b01cdf1e + sha1: e2fbd56e42da637609d23ae9df9efd1b4241b18a + required: true + system: msx2plus + bundled: true + note: "MSX2+ main BIOS (32 KB). Loaded for MSX2+ model, the default (fMSX/MSX.c:731)." + source_ref: "fMSX/ROMs/MSX2P.ROM" + + - name: MSX2PEXT.ROM + size: 16384 + md5: 7c8243c71d8f143b2531f01afa6a05dc + sha1: fe0254cbfc11405b79e7c86c7769bd6322b04995 + required: true + system: msx2plus + bundled: true + note: "MSX2+ extension BIOS (16 KB). Loaded alongside MSX2P.ROM (fMSX/MSX.c:732)." + source_ref: "fMSX/ROMs/MSX2PEXT.ROM" + + # -- Disk support -- + + - name: DISK.ROM + size: 16384 + md5: 80dcd1ad1a4cf65d64b7ba10504e8190 + sha1: 032cb1c1c75b9a191fa1230978971698d9d2a17f + required: false + bundled: true + note: "Disk controller BIOS (16 KB). Needed for .dsk content. Enable 'Simulate DiskROM' option (fMSX/MSX.c:780)." + source_ref: "fMSX/ROMs/DISK.ROM" + + # -- Optional expansion ROMs -- + + - name: FMPAC.ROM + size: 65536 + md5: 6f69cc8b5ed761b03afd78000dfb0e19 + sha1: 9d789166e3caf28e4742fe933d962e99618c633d + required: false + bundled: true + note: "FM-PAC cartridge ROM (64 KB, YM2413 FM synthesis). Auto-loaded into first free slot (fMSX/MSX.c:557)." + source_ref: "fMSX/ROMs/FMPAC.ROM" + + - name: KANJI.ROM + size: 131072 + md5: febe8782b466d7c3b16de6d104826b34 + sha1: 84a645becec0a25d3ab7a909cde1b242699a8662 + required: false + bundled: true + note: "Kanji font ROM (128 KB). Auto-loaded if present, no option needed (fMSX/MSX.c:530)." + source_ref: "fMSX/ROMs/KANJI.ROM" + + - name: MSXDOS2.ROM + size: 65536 + md5: 6418d091cd6907bbcf940324339e43bb + sha1: c36c9e0f96738a340381e23b4f97245388801a46 + required: false + bundled: true + note: "MSX-DOS 2 ROM (64 KB). Loaded when 'fmsx_dos2' option enabled and model is MSX2+ (fMSX/MSX.c:545)." + source_ref: "fMSX/ROMs/MSXDOS2.ROM" + + - name: PAINTER.ROM + size: 65536 + md5: 403cdea1cbd2bb24fae506941f8f655e + sha1: 7fd2a28c4fdaeb140f3c8c8fb90271b1472c97b9 + required: false + bundled: true + note: "Paint utility ROM (64 KB). Auto-loaded for MSX2 and MSX2+ models (fMSX/MSX.c:552)." + source_ref: "fMSX/ROMs/PAINTER.ROM" + + - name: RS232.ROM + size: 16640 + md5: 279efd1eae0d358eecd4edc7d9adedf3 + sha1: 7aec0134ad6a5177f4056fcb6047083e8e00529b + required: false + bundled: true + note: "RS-232C serial interface ROM (16 KB + 256 B). Loaded into slot 3:3 (fMSX/MSX.c:533)." + source_ref: "fMSX/ROMs/RS232.ROM" + + # -- GameMaster (not bundled, requires core option) -- + + - name: GMASTER2.ROM + required: false + bundled: false + note: "Konami GameMaster2 cartridge ROM. Loaded when 'fmsx_game_master' option enabled (fMSX/MSX.c:576)." + + - name: GMASTER.ROM + required: false + bundled: false + note: "Konami GameMaster cartridge ROM. Fallback if GMASTER2.ROM is missing (fMSX/MSX.c:580)." + + # -- CMOS persistence (auto-generated, not a BIOS) -- + + - name: CMOS.ROM + required: false + bundled: false + note: "RTC/CMOS settings. Auto-saved by the core on exit, auto-loaded on start (fMSX/MSX.c:526)." diff --git a/emulators/handy.yml b/emulators/handy.yml new file mode 100644 index 00000000..fb558a55 --- /dev/null +++ b/emulators/handy.yml @@ -0,0 +1,39 @@ +emulator: Handy +type: libretro +source: "https://github.com/libretro/libretro-handy" +systems: [atari-lynx] + +notes: | + Handy is an Atari Lynx emulator. The core loads lynxboot.img from + the system directory and validates it by CRC32 (0x0D973C9D). If the + file is missing or the CRC does not match, the core falls back to an + internal HLE BIOS that replicates the boot sequence in software + (ram clear, cart loader decrypt, jump to $0200). + + The HLE path intercepts CPU calls to ROM addresses FE00, FE19, FE4A + and FF80 via a Mikie register write trap (address 0xFD97). When + useEmu is true (no valid BIOS loaded), CRom initialises mRomData + with a default fill byte (0x88) plus reset vectors pointing to + the HLE entry points. The cart decryption uses a hardcoded RSA + public key (lynxdec.cpp) identical to the real hardware. + + With the real BIOS, the first frame has unusually high cycle counts + because hardware timers start from the boot ROM rather than being + set artificially. Blip_Buffer::end_frame() caps the audio buffer + to handle this overflow. + + File path: libretro.cpp retro_load_game() joins + RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY with "lynxboot.img". + No subdirectory. + +files: + - name: "lynxboot.img" + system: atari-lynx + description: "Atari Lynx boot ROM (Mikie internal 512B ROM)" + required: false + size: 512 + md5: "fcd403db69f54290b51035d82f835e7b" + sha1: "e4ed47fae31693e016b081c6bda48da5b70d7ccb" + crc32: "0d973c9d" + source_ref: "rom.h:48-49 (ROM_SIZE=0x200, ROM_CRC32=0xD973C9D), rom.cpp:76-128 (CRom constructor), libretro.cpp:1231-1258 (bios path + CSystem init)" + notes: "Validated by CRC32 at load time. If invalid or missing, core uses HLE fallback (system.cpp HLE_BIOS_* functions). Games work without it but the real boot ROM provides accurate startup timing." diff --git a/emulators/mupen64plus.yml b/emulators/mupen64plus.yml new file mode 100644 index 00000000..2aaa6548 --- /dev/null +++ b/emulators/mupen64plus.yml @@ -0,0 +1,48 @@ +emulator: Mupen64Plus-Next +type: libretro +source: "https://github.com/libretro/mupen64plus-libretro-nx" +systems: [nintendo-64, nintendo-64dd] +cores: [mupen64plus_next, mupen64plus_next_gles3, mupen64plus_next_gles2, parallel_n64] + +# PIF boot ROM is fully HLE'd (bootrom_hle.c), no external PIF ROM needed. +# CIC emulation is also handled internally (n64_cic_nus_6105.c). +# The only optional firmware is the 64DD IPL ROM for N64 Disk Drive games. + +# mupen64plus_next cores use: system/Mupen64plus/IPL.n64 +# parallel_n64 uses: system/64DD_IPL.bin +# Both expect the same ROM, different path. + +files: + # -- 64DD IPL ROM (mupen64plus_next variants) -- + - name: "IPL.n64" + path: "Mupen64plus/IPL.n64" + size: 4194304 # 0x400000 (4 MB) + md5: "8d3d9f294b6e174bc7b1d2fd1c727530" + required: false + note: "64DD IPL ROM for N64 Disk Drive games. Only needed for .ndd disk images via subsystem API" + source_ref: "mupen64plus-core/src/main/main.c:959-961, libretro/libretro.c:641" + cores: [mupen64plus_next, mupen64plus_next_gles3, mupen64plus_next_gles2] + + # -- 64DD IPL ROM (parallel_n64) -- + - name: "64DD_IPL.bin" + path: "64DD_IPL.bin" + md5: "8d3d9f294b6e174bc7b1d2fd1c727530" + required: false + note: "Same 64DD IPL ROM, different path expected by parallel_n64" + cores: [parallel_n64] + +notes: + hle_available: true + hle_note: > + N64 does not require any BIOS or firmware files for standard cartridge games. + The PIF boot ROM is fully emulated via HLE (bootrom_hle.c). CIC chip + challenge/response is handled in software (n64_cic_nus_6105.c). + dd_note: > + The 64DD IPL ROM is only needed to run N64 Disk Drive games (.ndd). + It is loaded via the retro subsystem API (RETRO_GAME_TYPE_DD), which + takes both a disk image and an optional cartridge ROM. + The core accepts Z64 (big-endian), N64 (little-endian), and V64 + (byte-swapped) formats and converts internally. + transferpak_note: > + Transfer Pak support (GB/GBC games on N64) is handled via subsystem API. + No additional firmware files needed, just the GB ROM and save file. diff --git a/emulators/pcsx_rearmed.yml b/emulators/pcsx_rearmed.yml new file mode 100644 index 00000000..85527c8a --- /dev/null +++ b/emulators/pcsx_rearmed.yml @@ -0,0 +1,89 @@ +emulator: PCSX-ReARMed +type: libretro +source: "https://github.com/libretro/pcsx_rearmed" +cores: [pcsx_rearmed, pcsx_rearmed_neon, pcsx_rearmed_interpreter] +systems: [sony-playstation] +bios_size: 524288 # 512 KB (0x80000); also accepts 4 MB psxonpsp combo (reads first 512 KB) +verification: crc32 +notes: > + HLE BIOS built-in: core option pcsx_rearmed_bios = "HLE" bypasses real BIOS entirely. + Default is "auto" which searches system dir for listed filenames, then scans all files. + Region detection reads bytes at offset 0x7ff51: " E" = EU, " J" = JP, else US. + Three CRC32 hardcoded as JP override: 0x18D0F7D8, 0x3B601FC8, 0x3539DEF6 (psxonpsp, scph1000). + BIOS validity check: byte pattern at offset 1 (\x00\x08\x3c\x3f) or string "PS compatible" at 0x12c. + Files named "unirom" (case-insensitive) are explicitly skipped. + Region fallback: if the matching-region BIOS is missing, any available region BIOS is used over HLE. + Three region slots: US (index 0), JP (index 1), EU (index 2) stored in Config.Bios[]. + All firmware is optional per libretro-core-info; HLE works but real BIOS improves compatibility. + +files: + # -- Region: Japan (PSX_REGION_JP = 1) -- + + - name: "scph5500.bin" + description: "SCPH-5500 (v3.0 09-09-96 J)" + region: "NTSC-J" + required: false + md5: "8dd7d5296a650fac7319bce665a6a53c" + source_ref: "frontend/libretro.c:3710 (listed_bios[0])" + notes: "Preferred JP BIOS, searched first by exact filename." + + # -- Region: North America (PSX_REGION_US = 0) -- + + - name: "scph5501.bin" + description: "SCPH-5501 (v3.0 11-18-96 A)" + region: "NTSC-U" + required: false + md5: "490f666e1afb15b7362b406ed1cea246" + source_ref: "frontend/libretro.c:3710 (listed_bios[1])" + notes: "Preferred US BIOS, searched first by exact filename." + + # -- Region: Europe (PSX_REGION_EU = 2) -- + + - name: "scph5502.bin" + description: "SCPH-5502 (v3.0 01-06-97 E)" + region: "PAL" + required: false + md5: "32736f17079d0b2b7024407c39bd3050" + source_ref: "frontend/libretro.c:3710 (listed_bios[2])" + notes: "Preferred EU BIOS, searched first by exact filename." + + # -- Fallback BIOS filenames (searched in order after scph550x) -- + + - name: "psxonpsp660.bin" + description: "PSP embedded PS1 BIOS (region-free, 512 KB or 4 MB accepted)" + region: "Auto" + required: false + md5: "c53ca5908936d412331790f4426c6c33" + source_ref: "frontend/libretro.c:3711 (listed_bios[3])" + notes: "Region detected from content at runtime. 4 MB combo image accepted but only first 512 KB read." + + - name: "scph101.bin" + description: "SCPH-101 (v4.4 03-24-00 A) - PSone US" + region: "NTSC-U" + required: false + md5: "6e3735ff4c7dc899ee98981c18c3666d" + source_ref: "frontend/libretro.c:3711 (listed_bios[4])" + notes: "PSone slim model. Searched by filename after scph550x and psxonpsp660." + + - name: "scph7001.bin" + description: "SCPH-7001 (v4.1 12-16-97 A)" + region: "NTSC-U" + required: false + md5: "1e68c231d0896b7eadcad1d7d8e76129" + source_ref: "frontend/libretro.c:3711 (listed_bios[5])" + notes: "Searched by filename after psxonpsp660 and scph101." + + - name: "scph1001.bin" + description: "SCPH-1001 (v2.2 12-04-95 A)" + region: "NTSC-U" + required: false + md5: "924e392ed05558ffdb115408c263dccf" + source_ref: "frontend/libretro.c:3711 (listed_bios[6])" + notes: "Original US model. Last in the explicit filename search list." + + # -- Dynamic scan fallback -- + # After exhausting listed_bios[], the core calls find_any_bios() which scans + # the entire system directory via opendir/readdir. Any 512 KB file passing the + # validity check (magic bytes or "PS compatible" string) is accepted and assigned + # to the detected region slot. This means scph1000.bin, scph3000.bin, scph7002.bin, + # scph7502.bin, etc. all work without being explicitly listed. diff --git a/emulators/pokemini.yml b/emulators/pokemini.yml new file mode 100644 index 00000000..c9d156e9 --- /dev/null +++ b/emulators/pokemini.yml @@ -0,0 +1,88 @@ +emulator: PokeMini +type: libretro +source: "https://github.com/libretro/PokeMini" +cores: + - pokemini +systems: + - nintendo-pokemon-mini + +notes: | + PokeMini is a Pokemon Mini handheld emulator ported to libretro. + + The core has an embedded FreeBIOS (open-source replacement) compiled + directly into the binary from freebios/freebios.c. This means the + real BIOS is never strictly required -- games will run with FreeBIOS + alone, though compatibility may differ from the original firmware. + + BIOS loading sequence in the libretro port: + + 1. PokeMini_Create() clears PM_BIOS (4096 bytes at $000000-$000FFF), + then loads FreeBIOS into it via memcpy (source/PokeMini.c:116). + PokeMini_FreeBIOS is set to 1. + + 2. retro_load_game() calls PokeMini_Reset(0) after loading the ROM. + + 3. PokeMini_Reset() checks forcefreebios (hardcoded to 0 in the + libretro port, libretro.c:499). Since FreeBIOS is currently loaded + and forcefreebios is 0, it enters the real-BIOS path + (source/PokeMini.c:518-523): + - Reloads FreeBIOS as a safety fallback + - Checks if CommandLine.bios_file exists on disk + - If found, overwrites PM_BIOS with the real BIOS via + PokeMini_LoadBIOSFile(), sets PokeMini_FreeBIOS to 0 + + 4. If bios.min is missing, FreeBIOS stays loaded and emulation + proceeds normally. + + File path construction (libretro.c:565): + sprintf(CommandLine.bios_file, "%s%cbios.min", g_system_dir, slash) + The core looks for bios.min directly in the system directory root, + no subdirectory. + + There is no core option to toggle FreeBIOS in the libretro port. + The standalone PokeMini has a forcefreebios setting, but the libretro + wrapper hardcodes it to 0 (always prefer real BIOS when available). + + FreeBIOS (freebios/freebios.min) is 4096 bytes, a clean-room + reimplementation. It is NOT the official Nintendo Pokemon Mini BIOS. + +files: + - name: "bios.min" + system: nintendo-pokemon-mini + description: "Pokemon Mini official BIOS" + required: false + size: 4096 + md5: "1e4fb124a3a886865acb574f388c803d" + sha1: "daad4113713ed776fbd47727762bca81ba74915f" + source_ref: "source/PokeMini.c:189-206 (PokeMini_LoadBIOSFile), libretro/libretro.c:565 (path)" + notes: "Mapped at $000000-$000FFF (4 KB). Read via Hardware.c:144-145. Falls back to embedded FreeBIOS if missing." + +platform_details: + bios_mapping: + target: "$000000-$000FFF in Pokemon Mini address space (4 KB)" + source_ref: "source/PokeMini.h:38, source/Hardware.c:144-145" + notes: | + PM_BIOS is a 4096-byte array. CPU reads from address range + $000000-$000FFF are served directly from this buffer. The BIOS + handles interrupt vectors, hardware init, and the startup logo. + + freebios_fallback: + source_ref: "freebios/freebios.c, source/PokeMini.c:209-214" + notes: | + FreeBIOS is a 4096-byte open-source replacement embedded in the + binary as a C array. It provides basic interrupt vectors and + startup code. Loaded by default at PokeMini_Create() and used + as fallback when bios.min is not found on disk. + freebios_hashes: + md5: "d6c3ff5abc88f7c42f1a5edd6889f9cf" + sha1: "b40421defb005e836913e4e39dc1a18aa3b8887e" + size: 4096 + + load_priority: + source_ref: "source/PokeMini.c:515-523" + notes: | + During PokeMini_Reset(), the core first reloads FreeBIOS as a + safe baseline, then attempts to load bios.min from disk. If + the file exists and is exactly 4096 bytes, it replaces FreeBIOS. + The forcefreebios flag (hardcoded 0 in libretro) controls this: + when 0, the core always prefers real BIOS over FreeBIOS. diff --git a/emulators/sameboy.yml b/emulators/sameboy.yml new file mode 100644 index 00000000..d66bfcf0 --- /dev/null +++ b/emulators/sameboy.yml @@ -0,0 +1,149 @@ +emulator: SameBoy +type: libretro +source: "https://github.com/libretro/SameBoy" +cores: + - sameboy +systems: + - nintendo-gb + - nintendo-gbc + - nintendo-sgb + +notes: | + SameBoy is a high-accuracy Game Boy, Game Boy Color and Super Game Boy + emulator written by Lior Halphon (LIJI32). + + All boot ROMs are optional. SameBoy ships its own open-source boot ROM + replacements compiled from BootROMs/*.asm and embedded directly into + the libretro core binary (extern arrays dmg_boot, cgb_boot, agb_boot, + sgb_boot, sgb2_boot in libretro.c:129-130). These built-in boot ROMs + are SameBoy-authored replacements, not Nintendo originals. + + The libretro port (libretro.c boot_rom_load(), line 513) tries to load + an external boot ROM from the system directory first. The filename is + constructed as "{model}_boot.bin" where model is one of: dmg0, dmg, + mgb, sgb, sgb2, cgb0, cgb, agb. If the file is missing or unreadable, + the embedded boot ROM is used as fallback. + + Boot ROM type selection depends on the emulated model configured via + the sameboy_model core option (request_boot_rom in Core/gb.c:1588): + DMG_B -> GB_BOOT_ROM_DMG -> dmg_boot.bin + MGB -> GB_BOOT_ROM_MGB -> mgb_boot.bin + SGB/SGB_NTSC -> GB_BOOT_ROM_SGB -> sgb_boot.bin + SGB2 -> GB_BOOT_ROM_SGB2 -> sgb2_boot.bin + CGB_0 -> GB_BOOT_ROM_CGB_0 -> cgb0_boot.bin + CGB_A..CGB_E -> GB_BOOT_ROM_CGB -> cgb_boot.bin + AGB_A (GBA) -> GB_BOOT_ROM_AGB -> agb_boot.bin + + Built-in fallback mapping (some models share a boot ROM): + DMG_0 and MGB reuse dmg_boot (not yet separately implemented) + CGB_0 reuses cgb_boot (not yet separately implemented) + + The boot ROM buffer is 0x900 (2304) bytes. DMG/MGB/SGB/SGB2 boot ROMs + are 256 bytes (mapped at 0x0000-0x00FF). CGB/AGB boot ROMs are 2304 + bytes (mapped at 0x0000-0x00FF and 0x0200-0x08FF). + + SameDuck (MegaDuck emulator) is a separate project, not part of this + core. + +files: + # --- DMG boot ROM (optional, built-in fallback) --- + - name: "dmg_boot.bin" + system: nintendo-gb + description: "Original Game Boy (DMG) boot ROM" + required: false + size: 256 + source_ref: "libretro.c:519,530,556 (boot_rom_load)" + notes: "Also used as fallback for DMG_0 and MGB models when dedicated boot ROMs are absent." + + # --- MGB boot ROM (optional, built-in fallback) --- + - name: "mgb_boot.bin" + system: nintendo-gb + description: "Game Boy Pocket (MGB) boot ROM" + required: false + size: 256 + source_ref: "libretro.c:520,531,556" + notes: "Built-in fallback reuses dmg_boot (mgb not separately implemented yet)." + + # --- SGB boot ROM (optional, built-in fallback) --- + - name: "sgb_boot.bin" + system: nintendo-sgb + description: "Super Game Boy (SGB) boot ROM" + required: false + size: 256 + source_ref: "libretro.c:521,532,556" + notes: "Used for SGB and SGB_NTSC models. Also loaded temporarily when borrowing SGB border for non-SGB games." + + # --- SGB2 boot ROM (optional, built-in fallback) --- + - name: "sgb2_boot.bin" + system: nintendo-sgb + description: "Super Game Boy 2 (SGB2) boot ROM" + required: false + size: 256 + source_ref: "libretro.c:522,533,556" + notes: "Separate from sgb_boot.bin, unlike some other cores that merge SGB/SGB2." + + # --- CGB boot ROM (optional, built-in fallback) --- + - name: "cgb_boot.bin" + system: nintendo-gbc + description: "Game Boy Color (CGB) boot ROM" + required: false + size: 2304 + source_ref: "libretro.c:524,535,556" + notes: "Also used as fallback for CGB_0 model (not separately implemented yet)." + + # --- CGB0 boot ROM (optional, built-in fallback) --- + - name: "cgb0_boot.bin" + system: nintendo-gbc + description: "Game Boy Color early revision (CGB-0) boot ROM" + required: false + size: 2304 + source_ref: "libretro.c:523,534,556" + notes: "Built-in fallback reuses cgb_boot (cgb0 not separately implemented yet)." + + # --- AGB boot ROM (optional, built-in fallback) --- + - name: "agb_boot.bin" + system: nintendo-gbc + description: "Game Boy Advance in GBC mode (AGB) boot ROM" + required: false + size: 2304 + source_ref: "libretro.c:525,536,556" + notes: "Used when emulating a GBA running GB/GBC software. Enables GBA-enhanced palettes in compatible GBC games." + + # --- DMG0 boot ROM (optional, built-in fallback) --- + - name: "dmg0_boot.bin" + system: nintendo-gb + description: "Original Game Boy early revision (DMG-0) boot ROM" + required: false + size: 256 + source_ref: "SDL/main.c:640 (standalone), libretro.c:518,529" + notes: "Only referenced in standalone SDL build filename list. Built-in fallback reuses dmg_boot." + +builtin_boot_roms: + description: | + SameBoy includes open-source boot ROM replacements compiled from + assembly source in BootROMs/ directory. These are NOT Nintendo + originals. They reproduce the boot animation and hardware + initialization but are clean-room implementations. + sources: + - "BootROMs/dmg_boot.asm -> dmg_boot (256 bytes)" + - "BootROMs/sgb_boot.asm -> sgb_boot (256 bytes)" + - "BootROMs/sgb2_boot.asm -> sgb2_boot (256 bytes)" + - "BootROMs/cgb_boot.asm -> cgb_boot (2304 bytes)" + - "BootROMs/agb_boot.asm -> agb_boot (2304 bytes)" + prebuilt_hashes: + dmg_boot.bin: + md5: "60f1d849a435e9053b8ac0fd5776804a" + sha1: "da853c8102acfff6b8e5a973ce0cd181f3dbb709" + sgb_boot.bin: + md5: "be77bbd03f8675478f6e3d2176f3cb56" + sha1: "27267e45c8408857267231ba6c18bfbd052536e2" + sgb2_boot.bin: + md5: "b4331a9e612b4738867a30af9c96df52" + sha1: "576678d0fc3892b80471d7067ce6014e6af77ed5" + cgb_boot.bin: + md5: "6b68be48dab6a7298a8c07e00c136b4e" + sha1: "9884b972110a63c9e86fb3bd241bd2e39ca82bb9" + agb_boot.bin: + md5: "7e095aa30941da3086fa0e9221335370" + sha1: "3b6231bdf840fb889f402d0ae89f21adb077323a" + notes: "These are SameBoy's own boot ROMs, not Nintendo originals. The hashes above identify the built-in versions." diff --git a/emulators/snes9x.yml b/emulators/snes9x.yml new file mode 100644 index 00000000..a4f0e956 --- /dev/null +++ b/emulators/snes9x.yml @@ -0,0 +1,132 @@ +emulator: snes9x +type: libretro +source: "https://github.com/libretro/snes9x" +systems: [nintendo-snes, nintendo-satellaview, nintendo-sufami-turbo] + +# snes9x uses HLE for all coprocessors: DSP1-4, ST010, ST011, ST018, CX4. +# No external firmware files are needed for these chips - the emulation +# logic and lookup tables are hardcoded in dsp1.cpp, dsp2.cpp, dsp3.cpp, +# dsp4.cpp, seta010.cpp, seta011.cpp, seta018.cpp, c4emu.cpp. +# +# Unlike bsnes, snes9x does NOT support LLE coprocessor firmware. +# It also does NOT support Super Game Boy (RETRO_GAME_TYPE_SUPER_GAME_BOY +# is defined but never loads a SGB BIOS or boot ROM). +# +# The only external BIOS files used are for Satellaview (BS-X) and +# Sufami Turbo, loaded by LoadBIOS() in libretro/libretro.cpp and +# BSX_LoadBIOS() in bsx.cpp. +# +# BIOS lookup order (LoadBIOS): +# 1. ROM directory (same folder as the game) +# 2. RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY (system dir) + +cores: + snes9x: + source: "https://github.com/libretro/snes9x" + firmware_loading: true + hle_only: true + notes: | + Current snes9x. Loads BS-X.bin (tries BS-X.bios as fallback) + and STBIOS.bin via LoadBIOS() in libretro.cpp. + Auto-detects Sufami Turbo carts (is_SufamiTurbo_Cart) and + BS-X games (is_bsx) when loading via retro_load_game(). + Also handles retro_load_game_special() for multi-cart and + subsystem types (RETRO_GAME_TYPE_BSX, RETRO_GAME_TYPE_SUFAMI_TURBO, + RETRO_GAME_TYPE_MULTI_CART). + + snes9x2010: + source: "https://github.com/libretro/snes9x2010" + firmware_loading: true + hle_only: true + notes: | + Based on snes9x 1.52. Same BIOS loading as snes9x current. + BSX_LoadBIOS() in src/bsx.c loads BS-X.bin (fallback BS-X.bios). + STBIOS.bin loaded in src/memmap.c for Sufami Turbo. + + snes9x2005: + source: "https://github.com/libretro/snes9x2005" + firmware_loading: false + hle_only: true + notes: | + Based on snes9x 1.43. Detects BS-X and Sufami Turbo ROM headers + in source/memmap.c but has no LoadBIOS function - does not load + external BIOS files. No firmware needed. + + snes9x2005_plus: + source: "https://github.com/libretro/snes9x2005" + firmware_loading: false + hle_only: true + notes: | + Same codebase as snes9x2005 with video enhancements. + No external BIOS loading. No firmware needed. + + snes9x2002: + source: "https://github.com/libretro/snes9x2002" + firmware_loading: false + hle_only: true + notes: | + Based on snes9x 1.39 (PocketSNES). Minimal core for low-end + devices. No BS-X, no Sufami Turbo, no external BIOS loading. + No firmware needed. + +files: + # -- BS-X Satellaview BIOS -- + # Required by: snes9x, snes9x2010 + # Loaded by: LoadBIOS() in libretro.cpp (snes9x) / BSX_LoadBIOS() in bsx.c (snes9x2010) + # Auto-detected when game ROM header matches BS-X signature at 0x7FC0 or 0xFFC0. + # Size validated: must be exactly BIOS_SIZE (0x100000 = 1048576 bytes). + # Filename fallback: BS-X.bin -> BS-X.bios (bsx.cpp:1209-1215) + + - name: "BS-X.bin" + system: nintendo-satellaview + description: "Satellaview BS-X BIOS (Japanese)" + required: false + size: 1048576 + 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." + + # -- Sufami Turbo BIOS -- + # Required by: snes9x, snes9x2010 + # Loaded by: LoadBIOS() in libretro.cpp (snes9x) / memmap.c (snes9x2010) + # Auto-detected when cart has "BANDAI SFC-ADX" at offset 0, without "SFC-ADX BACKUP" at 0x10. + # Size: 0x40000 (262144 bytes). Validated by is_SufamiTurbo_BIOS(). + + - name: "STBIOS.bin" + system: nintendo-sufami-turbo + description: "Bandai SuFami Turbo BIOS (Mini Cartridge add-on)" + required: false + size: 262144 + md5: "d3a44ba7d42a74d3ac58cb9c14c6a5ca" + sha1: "ef86ea192eed03d5c413fdbbfd46043be1d7a127" + source_ref: "libretro.cpp:1203,1317,1348 (LoadBIOS, 'STBIOS.bin'), memmap.cpp:1672" + notes: "Needed for Sufami Turbo multi-cart games. Validated by is_SufamiTurbo_BIOS() which checks for 'BANDAI SFC-ADX' + 'SFC-ADX BACKUP' headers." + +notes: + coprocessor_hle: | + All SNES coprocessor chips are emulated in software (HLE) across + every snes9x variant. No external firmware files are needed for: + - DSP1/DSP1B (dsp1.cpp, static DSP1ROM[1024] lookup table) + - DSP2 (dsp2.cpp) + - DSP3 (dsp3.cpp) + - DSP4 (dsp4.cpp) + - ST010 (seta010.cpp, static ST010_SinTable) + - ST011 (seta011.cpp) + - ST018 (seta018.cpp) + - CX4/Cx4 (c4.cpp, c4emu.cpp, math-based HLE) + This is the key difference from bsnes, which supports both HLE and + LLE (with optional external firmware ROM files). + sgb_status: | + RETRO_GAME_TYPE_SUPER_GAME_BOY (0x104) is defined in libretro.cpp + but no actual SGB emulation exists. No SGB BIOS or boot ROM is + loaded or used by any snes9x variant. + bsx_detection: | + BS-X games are auto-detected by is_bsx() which checks for the + "Satellaview BS-X" signature in the ROM header. When detected, + the BIOS is loaded automatically without user intervention. + sufami_detection: | + Sufami Turbo carts are auto-detected by is_SufamiTurbo_Cart() + which checks for "BANDAI SFC-ADX" at ROM offset 0 and absence + of "SFC-ADX BACKUP" at offset 0x10 (which would indicate BIOS, + not cart). Multi-cart support uses retro_load_game_special(). diff --git a/emulators/stella.yml b/emulators/stella.yml new file mode 100644 index 00000000..2c919fd7 --- /dev/null +++ b/emulators/stella.yml @@ -0,0 +1,54 @@ +emulator: Stella +type: libretro +source: "https://github.com/libretro/stella2014-libretro" +cores: + - stella + - stella2014 + - stella2023 +systems: + - atari-2600 + +notes: | + Stella is an Atari 2600 (VCS) emulator. The libretro port available is + stella2014, which is a fork frozen at the 2014 codebase. The upstream + "stella-libretro" repo redirects to stella2014-libretro. There is no + separate stella2023 libretro core published at this time. + + The Atari 2600 console has no BIOS ROM. Games run directly on the + hardware with no boot firmware. + + The Starpath/Arcadia Supercharger add-on had a 2K BIOS ROM on the + physical hardware. Stella does NOT load this BIOS from an external + file. Instead, the core contains a built-in dummy BIOS + (ourDummyROMCode, 294 bytes in CartAR.cxx) that simulates the + Supercharger load sequence. The initializeROM() function copies this + dummy code into the ROM bank (bank 3) at reset, sets up the 6502 + reset vector to 0xF80A, and handles multiload via a hotspot at + address 0x1850. + + The "fastscbios" setting (offset 109 in the dummy ROM) controls + whether the SC load progress bars are shown (0x00) or skipped + (0xFF). This is toggled automatically during ROM format detection + (Console.cxx:119-120). + + The real Supercharger BIOS ROM (MD5 4565c1a7abce773e53c75b35414adefd) + is recognized in DefProps.hxx as a known cartridge entry but is not + required or loaded as a system file. + + The libretro interface (retro_set_environment) does not call + RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY and declares no firmware + requirements. No core option references BIOS loading. + +files: [] + +platform_details: + supercharger_emulation: + source_ref: "stella/src/emucore/CartAR.cxx, CartAR.hxx" + notes: | + The Supercharger (type AR) uses 4 banks: 3x 2K RAM + 1x 2K ROM. + The ROM bank is filled with ourDummyROMCode at reset. SC games + are multi-load images (8448 bytes per load: 8192 data + 256 header). + loadIntoRAM() handles loading game data when the hotspot at 0x1850 + is accessed with the ROM bank mapped. The bank switching byte and + start address are written to zero-page RAM (0xFE, 0xFF, 0x80) for + the dummy BIOS to read. diff --git a/emulators/virtualjaguar.yml b/emulators/virtualjaguar.yml new file mode 100644 index 00000000..c4a13adc --- /dev/null +++ b/emulators/virtualjaguar.yml @@ -0,0 +1,112 @@ +emulator: Virtual Jaguar +type: libretro +source: "https://github.com/libretro/virtualjaguar-libretro" +cores: + - virtualjaguar +systems: + - atari-jaguar + +notes: | + Virtual Jaguar embeds all BIOS ROMs directly in the source code as C arrays + (bin2c generated). No external BIOS files are loaded at runtime. The core + selects between K-series and M-series boot ROMs based on vjs.biosType, + then copies 0x20000 bytes to jagMemSpace + 0xE00000 (libretro.c:902-904). + + The "BIOS" core option (virtualjaguar_bios, disabled by default) controls + whether the embedded boot ROM is executed at startup. When enabled, the + boot ROM entry point is copied to jaguarMainRAM (jaguar.c:644-645). + When disabled, jaguarRunAddress is written directly, skipping the boot + animation. Either way the embedded ROM data is always present in memory. + + The jagBootPath and CDBootPath fields in VJSettings exist in the struct + (settings.h:36-37) but are never populated or used in the libretro port. + No call to RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY or fopen for BIOS files. + + Jaguar CD emulation: the CD boot ROM (jaguarCDBootROM, 0x40000 bytes) is + also embedded but Jaguar CD support is incomplete in this core. The + cdrom.c references "CD BIOS" in comments only. + + No external BIOS files are required or loaded by this core. + +files: [] + +analysis: + embedded_bios: + k_series_boot_rom: + source_file: src/jagbios.c + header: src/jagbios.h + symbol: jaguarBootROM + size: 131072 # 0x20000, 128 KB + description: "Jaguar K-series boot ROM" + filedb_crc: "0xFB731AAA" + filedb_name: "[BIOS] Atari Jaguar (World)" + + m_series_boot_rom: + source_file: src/jagbios2.c + header: src/jagbios2.h + symbol: jaguarBootROM2 + size: 131072 # 0x20000, 128 KB + description: "Jaguar M-series boot ROM" + + cd_boot_rom: + source_file: src/jagcdbios.c + header: src/jagcdbios.h + symbol: jaguarCDBootROM + size: 262144 # 0x40000, 256 KB + description: "Jaguar CD boot ROM" + filedb_crc: "0x687068D5" + filedb_name: "[BIOS] Atari Jaguar CD (World)" + + stubulator_93: + source_file: src/jagstub1bios.c + header: src/jagstub1bios.h + symbol: jaguarDevBootROM1 + size: 131072 # 0x20000, 128 KB + description: "Jaguar Stubulator '93 dev BIOS" + filedb_crc: "0xE60277BB" + filedb_name: "[BIOS] Atari Jaguar Stubulator '93 (World)" + + stubulator_94: + source_file: src/jagstub2bios.c + header: src/jagstub2bios.h + symbol: jaguarDevBootROM2 + size: 131072 # 0x20000, 128 KB + description: "Jaguar Stubulator '94 dev BIOS" + filedb_crc: "0x8D15DBC6" + filedb_name: "[BIOS] Atari Jaguar Stubulator '94 (World)" + + dev_cd_boot_rom: + source_file: src/jagdevcdbios.c + header: src/jagdevcdbios.h + symbol: jaguarDevCDBootROM + size: 262144 # 0x40000, 256 KB + description: "Jaguar Developer CD boot ROM" + filedb_crc: "0x55A0669C" + filedb_name: "[BIOS] Atari Jaguar Developer CD (World)" + + bios_type_enum: + source_ref: "settings.h:46" + values: + - BT_K_SERIES + - BT_M_SERIES + - BT_STUBULATOR_1 + - BT_STUBULATOR_2 + + core_option: + key: virtualjaguar_bios + label: "BIOS" + description: "Use the Jaguar BIOS, required for some games." + default: disabled + source_ref: "libretro_core_options.h:123" + + bios_loading: + mechanism: embedded + load_address: "0xE00000" + load_size: "0x20000" + source_ref: "libretro.c:902-904" + selection_logic: "biosType == BT_K_SERIES ? jaguarBootROM : jaguarBootROM2" + external_loading: false + notes: | + jagBootPath and CDBootPath struct fields are never set in the libretro + port. The standalone Virtual Jaguar GUI uses them but that code path + is not compiled into the libretro core.