feat: add 10 emulator profiles (batch 5)

snes9x (BS-X + STBIOS, HLE coprocessors), mupen64plus (64DD IPL),
pcsx_rearmed (7 BIOS + dynamic scan fallback), stella (no BIOS),
fmsx (12 MSX ROMs), virtualjaguar (6 BIOS embedded),
sameboy (8 boot ROM types, all built-in), beetle_vb (no BIOS),
handy (lynxboot.img 512B), pokemini (bios.min + FreeBIOS fallback)

61 total profiles. Cross-reference: 667 undeclared, 182 in repo.
This commit is contained in:
Abdessamad Derraz
2026-03-17 19:33:20 +01:00
parent 9eede1c957
commit 4bc7085c1c
10 changed files with 922 additions and 0 deletions

26
emulators/beetle_vb.yml Normal file
View File

@@ -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: []

185
emulators/fmsx.yml Normal file
View File

@@ -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)."

39
emulators/handy.yml Normal file
View File

@@ -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."

48
emulators/mupen64plus.yml Normal file
View File

@@ -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.

View File

@@ -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.

88
emulators/pokemini.yml Normal file
View File

@@ -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.

149
emulators/sameboy.yml Normal file
View File

@@ -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."

132
emulators/snes9x.yml Normal file
View File

@@ -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().

54
emulators/stella.yml Normal file
View File

@@ -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.

112
emulators/virtualjaguar.yml Normal file
View File

@@ -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.