feat: add 10 emulator profiles (batch 3)

freechaf (Channel F, 3 ROMs), freeintv (Intellivision, exec+grom),
ep128emu (Enterprise/TVC/CPC/ZX, 22 ROMs all built-in),
kronos (Saturn + 14 ST-V blobs), gambatte (GB/GBC boot ROMs),
mgba (GBA/GB/GBC/SGB, 10 CRC32 revisions), nestopia (FDS + NstDatabase),
px68k (X68000, 6 ROMs in keropi/), fuse (ZX Spectrum, 17 machines),
o2em (Odyssey2/Videopac, 4 BIOS by CRC32)

41 total profiles. Cross-reference: 644 undeclared, 167 in repo.
This commit is contained in:
Abdessamad Derraz
2026-03-17 19:23:58 +01:00
parent 639ff69d6c
commit 8768aed7aa
10 changed files with 1541 additions and 0 deletions

309
emulators/ep128emu.yml Normal file
View File

@@ -0,0 +1,309 @@
emulator: ep128emu-core
type: libretro
source: "https://github.com/libretro/ep128emu-core"
cores:
- ep128emu_core
systems:
- enterprise-64
- enterprise-128
- videoton-tvc
- amstrad-cpc
- zx-spectrum
# ep128emu-core emulates Enterprise 64/128, Videoton TVC, Amstrad CPC 464/664/6128,
# and ZX Spectrum 48/128. All ROMs are optional because the core ships built-in
# fallback ROMs compiled into roms.hpp. External ROM files override the built-ins
# and provide better accuracy for some systems.
#
# ROM path: <system_dir>/ep128emu/roms/
#
# Machine selection (core/core.cpp:62-118):
# Content file extension determines machine type:
# .cas/.tap/.bas/.128/.com/.trn -> Enterprise
# .tvcwav/.cas(TVC) -> Videoton TVC
# .cdt/.tzx -> Amstrad CPC or ZX Spectrum (autodetect)
# .img/.dsk -> Enterprise disk (default) or CPC/TVC depending on content
#
# Enterprise ROM layout (core/core.cpp:195-307):
# EP128 (default): exos21.rom (segments 0-1) + basic21.rom (segment 4/5)
# EP64: exos20.rom (segments 0-1) + basic20.rom (segment 4/5)
# EP128 enhanced: exos24uk.rom (segments 0-3, 64K)
# Disk mode: exdos13.rom (segments 0x20-0x21)
# IS-DOS mode: exdos14isdos10uk.rom (segments 0x20-0x21)
# File I/O mode: epfileio.rom (segment 0x10)
# DTF mode: zt19uk.rom (segments 0x40-0x41)
# Hungarian locale: hun.rom + epdos16f.rom
# German locale: brd.rom
#
# Built-in fallbacks (roms/roms.hpp:46516-46538):
# All 22 ROMs have compiled-in defaults. The core prepends "_default_" to
# the filename and looks up the builtin_rom map when no external file is found.
# This means the core works out of the box without any user-supplied ROMs.
#
# TOSEC alternate names (core/core.hpp:80-118):
# The core tries TOSEC naming conventions as fallback before using built-in ROMs.
# For example exos21.rom -> "Expandible OS v2.1 (1985)(Intelligent Software).bin"
# CPC ROMs can also be split into page-sized files (OS.ROM + BASIC.ROM).
notes: |
All ROMs go under <system_dir>/ep128emu/roms/. The core has built-in ROM
fallbacks for every file, so it works without any user-supplied ROMs.
External ROMs provide byte-exact originals vs the built-in copies.
Enterprise EP128 is the default machine. EP64 is selected when content
requires it. Machine type can also be forced via core options.
Hungarian and German locale ROMs are loaded automatically when content
metadata indicates the locale. The IS-DOS disk system is an alternative
to the standard EXDOS disk controller.
files:
# ============================================================
# Enterprise 64/128 - EXOS (Expandible OS)
# ============================================================
- name: exos21.rom
path: ep128emu/roms/exos21.rom
md5: f36f24cbb87745fbd2714e4df881db09
required: false
system: enterprise-128
has_builtin: true
note: "Enterprise 128 EXOS 2.1. Default OS for EP128 machines."
source_ref: "core/core.cpp:234-237"
- name: exos20.rom
path: ep128emu/roms/exos20.rom
md5: 5ad3baaad3b5156d6b60b34229a676fb
required: false
system: enterprise-64
has_builtin: true
note: "Enterprise 64 EXOS 2.0. Used when EP64 machine type is selected."
source_ref: "core/core.cpp:226-229"
- name: exos24uk.rom
path: ep128emu/roms/exos24uk.rom
md5: 55af78f877a21ca45eb2df68a74fcc60
required: false
system: enterprise-128
has_builtin: true
note: "Enterprise 128 EXOS 2.4 (UK). Used when enhanced ROM mode is enabled. 64K, loaded across segments 0-3."
source_ref: "core/core.cpp:214-221"
# ============================================================
# Enterprise 64/128 - BASIC interpreter
# ============================================================
- name: basic21.rom
path: ep128emu/roms/basic21.rom
md5: e972fe42b398c9ff1d93ff014786aec6
required: false
system: enterprise-128
has_builtin: true
note: "Enterprise 128 BASIC 2.1. Loaded when cartridge mode is active (default)."
source_ref: "core/core.cpp:248,276"
- name: basic20.rom
path: ep128emu/roms/basic20.rom
md5: 8e18edce4a7acb2c33cc0ab18f988482
required: false
system: enterprise-64
has_builtin: true
note: "Enterprise 64 BASIC 2.0. Used with EP64 machine type."
source_ref: "core/core.cpp:246,264,274"
# ============================================================
# Enterprise 64/128 - disk controllers
# ============================================================
- name: exdos13.rom
path: ep128emu/roms/exdos13.rom
md5: ddff70c014d1958dc75378b6c9aab6f8
required: false
system: enterprise-128
has_builtin: true
note: "EXDOS 1.3 disk controller. Loaded for EP128_DISK and EP64_DISK modes. 32K across segments 0x20-0x21."
source_ref: "core/core.cpp:303-306"
- name: exdos14isdos10uk.rom
path: ep128emu/roms/exdos14isdos10uk.rom
required: false
system: enterprise-128
has_builtin: true
note: "EXDOS 1.4 + IS-DOS 1.0 (UK). Used for IS-DOS disk mode instead of exdos13.rom."
source_ref: "core/core.cpp:295-298"
# ============================================================
# Enterprise 64/128 - file I/O and extensions
# ============================================================
- name: epfileio.rom
path: ep128emu/roms/epfileio.rom
md5: a68ebcbc73a4d2178d755b7755bf18fe
required: false
system: enterprise-128
has_builtin: true
bundled: true
note: "Direct file I/O extension. Loaded for EP128_FILE and EP64_FILE modes. Source included in roms/ directory."
source_ref: "core/core.cpp:283-284"
- name: zt19uk.rom
path: ep128emu/roms/zt19uk.rom
md5: 228540b6be83ae2acd7569c8ff0f91d0
required: false
system: enterprise-128
has_builtin: true
note: "ZozoTools 1.9 (UK). Loaded for DTF (direct tape file) mode. 32K across segments 0x40-0x41."
source_ref: "core/core.cpp:287-290"
# ============================================================
# Enterprise 64/128 - locale extensions
# ============================================================
- name: hun.rom
path: ep128emu/roms/hun.rom
md5: 22167938f142c222f40992839aa21a06
required: false
system: enterprise-128
has_builtin: true
note: "Hungarian language extension. Auto-loaded when content locale is Hungarian."
source_ref: "core/core.cpp:242-243"
- name: epdos16f.rom
path: ep128emu/roms/epdos16f.rom
required: false
system: enterprise-128
has_builtin: true
note: "EP-DOS 1.6f. Provides HFONT and CLKOFF for Hungarian locale. 32K across segments 0x06-0x07."
source_ref: "core/core.cpp:252-255"
- name: brd.rom
path: ep128emu/roms/brd.rom
md5: 6af0402906944fd134004b85097c8524
required: false
system: enterprise-128
has_builtin: true
note: "German (BRD) language extension. Auto-loaded when content locale is German."
source_ref: "core/core.cpp:260-261"
# ============================================================
# Enterprise 64/128 - optional extras (in .info, not in source)
# ============================================================
- name: epd19hft.rom
path: ep128emu/roms/epd19hft.rom
md5: 12cfc9c7e48c8a16c2e09edbd926d467
required: false
system: enterprise-128
note: "EP-DOS 1.9 with Hungarian font. Listed in .info file as optional firmware."
source_ref: "ep128emu_core_libretro.info:firmware8"
- name: zt19hfnt.rom
path: ep128emu/roms/zt19hfnt.rom
md5: 653daaf7b9b29c2c4e577f489580f247
required: false
system: enterprise-128
note: "ZozoTools 1.9 with Hungarian font. Listed in .info file as optional firmware."
source_ref: "ep128emu_core_libretro.info:firmware9"
# ============================================================
# Videoton TVC
# ============================================================
- name: tvc22_sys.rom
path: ep128emu/roms/tvc22_sys.rom
md5: 8c54285f541930cde766069942bad0f2
required: false
system: videoton-tvc
has_builtin: true
note: "TVC system ROM v2.2. Main BIOS for all TVC modes."
source_ref: "core/core.cpp:313-314"
- name: tvc22_ext.rom
path: ep128emu/roms/tvc22_ext.rom
md5: 5ce95a26ceed5bec73995d83568da9cf
required: false
system: videoton-tvc
has_builtin: true
note: "TVC extension ROM v2.2. Loaded alongside tvc22_sys.rom."
source_ref: "core/core.cpp:315-316"
- name: tvcfileio.rom
path: ep128emu/roms/tvcfileio.rom
md5: a2cf86ba8e7fc58b242137fe59036832
required: false
system: videoton-tvc
has_builtin: true
bundled: true
note: "TVC direct file I/O extension. Used for TVC64_FILE mode. Source included in roms/ directory."
source_ref: "core/core.cpp:319-320"
- name: tvc_dos12d.rom
path: ep128emu/roms/tvc_dos12d.rom
md5: 88dc7876d584f90e4106f91444ab23b7
required: false
system: videoton-tvc
has_builtin: true
note: "TVC DOS 1.2d. Loaded for TVC64_DISK mode."
source_ref: "core/core.cpp:324-325"
# ============================================================
# Amstrad CPC
# ============================================================
- name: cpc464.rom
path: ep128emu/roms/cpc464.rom
md5: a993f85b88ac4350cf4d41554e87fe4f
required: false
system: amstrad-cpc
has_builtin: true
note: "CPC 464 combined ROM (OS + BASIC). 32K loaded at segments 0x10 (OS) and 0x00 (BASIC) with offset."
source_ref: "core/core.cpp:335-338"
- name: cpc664.rom
path: ep128emu/roms/cpc664.rom
md5: 5a384a2310f472c7857888371c00ed66
required: false
system: amstrad-cpc
has_builtin: true
note: "CPC 664 combined ROM (OS + BASIC). Used for CPC_664_DISK mode."
source_ref: "core/core.cpp:343-346"
- name: cpc6128.rom
path: ep128emu/roms/cpc6128.rom
md5: b96280dc6c95a48857b4b8eb931533ae
required: false
system: amstrad-cpc
has_builtin: true
note: "CPC 6128 combined ROM (OS + BASIC). Default CPC machine when no specific model requested."
source_ref: "core/core.cpp:352-355"
- name: cpc_amsdos.rom
path: ep128emu/roms/cpc_amsdos.rom
md5: 25629dfe870d097469c217b95fdc1c95
required: false
system: amstrad-cpc
has_builtin: true
note: "AMSDOS disk controller ROM. Loaded for CPC_DISK and CPC_664_DISK modes."
source_ref: "core/core.cpp:359-360"
# ============================================================
# ZX Spectrum
# ============================================================
- name: zx128.rom
path: ep128emu/roms/zx128.rom
md5: 85fede415f4294cc777517d7eada482e
required: false
system: zx-spectrum
has_builtin: true
note: "ZX Spectrum 128K ROM. 32K loaded at segments 0x00-0x01."
source_ref: "core/core.cpp:382-385"
- name: zx48.rom
path: ep128emu/roms/zx48.rom
md5: 4c42a2f075212361c3117015b107ff68
required: false
system: zx-spectrum
has_builtin: true
note: "ZX Spectrum 48K ROM. Used for ZX16 and ZX48 modes."
source_ref: "core/core.cpp:389-390"

81
emulators/freechaf.yml Normal file
View File

@@ -0,0 +1,81 @@
emulator: FreeChaF
type: libretro
source: "https://github.com/libretro/FreeChaF"
cores:
- freechaf
systems:
- fairchild-channelf
notes: |
FreeChaF is a Fairchild Channel F emulator ported to libretro.
BIOS loading is in src/libretro.c:186-208. The core first tries to load
sl90025.bin (Channel F II PSU1) at address 0x000. If that fails, it falls
back to sl31253.bin (original Channel F PSU1) at the same address. PSU2
(sl31254.bin) is always loaded at address 0x400.
Memory layout from src/memory.h:27-30:
0x000-0x3FF PSU1 ROM (sl31253 or sl90025)
0x400-0x7FF PSU2 ROM (sl31254)
0x800-0x1FFF cartridge ROM
0x2000+ VRAM
If either PSU ROM fails to load, the core switches to experimental HLE
(high-level emulation) for that PSU. A warning message is shown to the
user recommending real BIOS files. HLE state is tracked per-PSU via
hle_state.psu1_hle and hle_state.psu2_hle (src/channelf_hle.c).
The .info file declares all three firmware files as required (opt=false),
but the core does not abort on missing BIOS -- it falls back to HLE.
files:
- name: "sl31253.bin"
system: fairchild-channelf
required: false
md5: ac9804d4c0e9d07e33472e3726ed15c3
size: 1024 # 1 KB, fills 0x000-0x3FF
note: "Channel F PSU1 ROM (original). Fallback if sl90025.bin is missing."
source_ref: "src/libretro.c:192"
- name: "sl31254.bin"
system: fairchild-channelf
required: false
md5: da98f4bb3242ab80d76629021bb27585
size: 1024 # 1 KB, fills 0x400-0x7FF
note: "Channel F PSU2 ROM. Always loaded at address 0x400."
source_ref: "src/libretro.c:202"
- name: "sl90025.bin"
system: fairchild-channelf
required: false
md5: 95d339631d867c8f1d15a5f2ec26069d
size: 1024 # 1 KB, fills 0x000-0x3FF
note: "Channel F II PSU1 ROM. Tried first, preferred over sl31253.bin."
source_ref: "src/libretro.c:186"
platform_details:
bios_mapping:
target: "0x000-0x7FF in 64K memory space"
source_ref: "src/memory.h:27-29, src/memory.c:30-61"
notes: |
MEMORY_loadSysROM_libretro() reads the file and copies it into
Memory[] at the given address offset. PSU1 is loaded at 0x000,
PSU2 at 0x400. The loader caps file size to (MEMORY_SIZE - address)
to prevent overflow. MEMORY_RAMStart is advanced past the loaded
ROM to protect it from writes.
hle_fallback:
source_ref: "src/channelf_hle.c"
notes: |
When BIOS files are missing, FreeChaF uses HLE to emulate the
PSU routines in software. This is marked as experimental and may
cause compatibility issues with some games. Each PSU can
independently fall back to HLE.
load_priority:
source_ref: "src/libretro.c:186-198"
notes: |
PSU1 loading order: sl90025.bin (Channel F II) first, then
sl31253.bin (original Channel F) as fallback. If both fail,
HLE is used. sl90025.bin is the preferred BIOS as it includes
Channel F II improvements.

71
emulators/freeintv.yml Normal file
View File

@@ -0,0 +1,71 @@
emulator: FreeIntv
type: libretro
source: "https://github.com/libretro/FreeIntv"
cores:
- freeintv
systems:
- intellivision
notes: |
FreeIntv is a Mattel Intellivision emulator for libretro.
BIOS loading happens in retro_init() (src/libretro.c:1166-1174). The core
calls retro_get_system_directory() then joins exec.bin and grom.bin paths
directly. No subdirectory, no core option to disable BIOS loading.
loadExec() in src/intv.c:47-71 reads exec.bin as big-endian 16-bit words
into memory range 0x1000-0x1FFF (Executive ROM, 8 KB file).
loadGrom() in src/intv.c:73-98 reads grom.bin as raw bytes into memory
range 0x3000-0x37FF (Graphics ROM, 2 KB file).
Both files are required. Without them the core prints an error and shows
"PUT GROM/EXEC IN SYSTEM DIRECTORY" on the OSD, but does not abort.
Games will not run correctly without both BIOS files.
The .info file declares firmware_count = 2 with both marked opt = false.
No ECS (Entertainment Computer System) BIOS support exists in this core.
There is no ecs.bin loading code anywhere in the source.
files:
- name: "exec.bin"
system: intellivision
required: true
size: 8192 # 8 KB (4096 x 16-bit words, 0x1000-0x1FFF)
md5: 62e761035cb657903761800f4437b8af
note: "Executive ROM. Big-endian 16-bit words loaded at 0x1000-0x1FFF."
source_ref: "src/intv.c:47-71, src/libretro.c:1169"
- name: "grom.bin"
system: intellivision
required: true
size: 2048 # 2 KB (bytes, 0x3000-0x37FF)
md5: 0cd5946c6473e42e8e4c2137785e427f
note: "Graphics ROM. Raw bytes loaded at 0x3000-0x37FF."
source_ref: "src/intv.c:73-98, src/libretro.c:1173"
platform_details:
bios_mapping:
exec:
target: "0x1000-0x1FFF (Executive ROM)"
format: "big-endian 16-bit words"
source_ref: "src/intv.c:55-58"
grom:
target: "0x3000-0x37FF (Graphics ROM)"
format: "raw 8-bit bytes"
source_ref: "src/intv.c:81-84"
notes: |
Memory[] is a 64K array of unsigned int (src/memory.c:26).
EXEC region (0x1000-0x1FFF) is write-protected in writeMem()
(src/memory.c:60-61). GROM region (0x3000-0x37FF) is also
write-protected (src/memory.c:62).
cartridge_loading:
formats: "int, bin, rom"
methods: "Intellicart (magic byte 0xA8), raw ROM with fingerprint DB"
source_ref: "src/cart.c"
notes: |
Raw ROMs use a fingerprint database (sum of first 256 bytes)
to select one of 10 memory map configurations (load0-load9).
Intellicart format is auto-detected by 0xA8 magic byte.

396
emulators/fuse.yml Normal file
View File

@@ -0,0 +1,396 @@
emulator: Fuse
type: libretro
source: "https://github.com/libretro/fuse-libretro"
cores:
- fuse
systems:
- sinclair-zxspectrum
notes: |
Fuse (Free Unix Spectrum Emulator) ported to libretro. Emulates the ZX
Spectrum family: 16K, 48K, 48K NTSC, 128K, +2, +2A, +3, +3e, SE, Timex
TC2048, TC2068, TS2068, Pentagon 128K/512K/1024, and Scorpion 256K.
ROM loading is in src/compat/file.c:91-118. The core first checks an
internal table of embedded ROMs (mem_entries[]). If the ROM filename is
not found there, it falls back to the filesystem at
{system_dir}/fuse/{rom_filename} (file.c:160-175).
Embedded ROMs cover 48K-family, 128K, +2, +3, +3e, SE, TC2048, TC2068.
Pentagon, Scorpion, and peripheral ROMs are NOT embedded and must be
placed in {system_dir}/fuse/ by the user.
Default ROM filenames are set in fuse/settings.c:209-260. Each machine
type loads its ROMs during reset via machine_load_rom() calls in
fuse/machines/*.c files.
The +2A reuses the +3 ROMs (plus3-0/1/2/3.rom) per settings.c:234-237.
The TS2068 reuses TC2068 ROMs (tc2068-0/1.rom) per settings.c:257-258.
Spectrum 16K uses 48.rom per settings.c:211.
files:
# -- Embedded ROMs (compiled into the core, not required on disk) --
- name: "fuse/48.rom"
system: sinclair-zxspectrum
required: false
md5: 4c42a2f075212361c3117015b107ff68
sha1: 5ea7c2b824672e914525d1d5c419d71b84a426a2
size: 16384
note: "Spectrum 48K ROM. Also used for 16K and 48K NTSC. Embedded in core."
source_ref: "fuse/settings.c:211-212, fuse/machines/spec48.c:76"
- name: "fuse/128-0.rom"
system: sinclair-zxspectrum
required: false
md5: b4d2692115a9f2924df92a3cbfb358fb
sha1: 4f4b11ec22326280bdb96e3baf9db4b4cb1d02c5
size: 16384
note: "Spectrum 128K ROM 0 (editor). Embedded in core."
source_ref: "fuse/settings.c:209, fuse/machines/spec128.c:70"
- name: "fuse/128-1.rom"
system: sinclair-zxspectrum
required: false
md5: 6e09e5d3c4aef166601669feaaadc01c
sha1: 80080644289ed93d71a1103992a154cc9802b2fa
size: 16384
note: "Spectrum 128K ROM 1 (48 BASIC). Embedded in core."
source_ref: "fuse/settings.c:210, fuse/machines/spec128.c:73"
- name: "fuse/plus2-0.rom"
system: sinclair-zxspectrum
required: false
md5: 4ed7af4636308b8a48d7a35e6c5b546b
sha1: 72703f9a3e734f3c23ec34c0727aae4ccbef9a91
size: 16384
note: "Spectrum +2 ROM 0. Embedded in core."
source_ref: "fuse/settings.c:232, fuse/machines/specplus2.c:70"
- name: "fuse/plus2-1.rom"
system: sinclair-zxspectrum
required: false
md5: b3db95931cc844efaeb82db9c171b9f3
sha1: de8b0d2d0379cfe7c39322a086ca6da68c7f23cb
size: 16384
note: "Spectrum +2 ROM 1. Embedded in core."
source_ref: "fuse/settings.c:233, fuse/machines/specplus2.c:73"
- name: "fuse/plus3-0.rom"
system: sinclair-zxspectrum
required: false
md5: 9833b8b73384dd5fa3678377ff00a2bb
sha1: e319ed08b4d53a5e421a75ea00ea02039ba6555b
size: 16384
note: "Spectrum +3 ROM 0. Also used for +2A. Embedded in core."
source_ref: "fuse/settings.c:234,238, fuse/machines/specplus3.c:197"
- name: "fuse/plus3-1.rom"
system: sinclair-zxspectrum
required: false
md5: 0f711ceb5ab801b4701989982e0f334c
sha1: c9969fc36095a59787554026a9adc3b87678c794
size: 16384
note: "Spectrum +3 ROM 1. Also used for +2A. Embedded in core."
source_ref: "fuse/settings.c:235,239, fuse/machines/specplus3.c:200"
- name: "fuse/plus3-2.rom"
system: sinclair-zxspectrum
required: false
md5: 3b6dd659d5e4ec97f0e2f7878152c987
sha1: 22e50c6ba4157a3f6a821bd9937cd26e292775c6
size: 16384
note: "Spectrum +3 ROM 2. Also used for +2A. Embedded in core."
source_ref: "fuse/settings.c:236,240, fuse/machines/specplus3.c:203"
- name: "fuse/plus3-3.rom"
system: sinclair-zxspectrum
required: false
md5: a148bcc575e51389e84fdf5d555c3196
sha1: 65f031caa8148a5493afe42c41f4929deab26b4e
size: 16384
note: "Spectrum +3 ROM 3. Also used for +2A. Embedded in core."
source_ref: "fuse/settings.c:237,241, fuse/machines/specplus3.c:206"
- name: "fuse/plus3e-0.rom"
system: sinclair-zxspectrum
required: false
md5: bc123f625e245c225f92ef05933ed134
sha1: 649fbd233490bf58b35350b0123d36caaaa011eb
size: 16384
note: "Spectrum +3e ROM 0. Embedded in core."
source_ref: "fuse/settings.c:242, fuse/machines/specplus3e.c:70"
- name: "fuse/plus3e-1.rom"
system: sinclair-zxspectrum
required: false
md5: 617364264c587d20c9fc4746c29679f2
sha1: f12198108cbb14de4f03c6695bc16d08c85ee214
size: 16384
note: "Spectrum +3e ROM 1. Embedded in core."
source_ref: "fuse/settings.c:243, fuse/machines/specplus3e.c:73"
- name: "fuse/plus3e-2.rom"
system: sinclair-zxspectrum
required: false
md5: c363e95dcd0a90e6e7f847e6e47e0179
sha1: 773633dce5ba323a9e00d9d0f9e4d8c295df7c87
size: 16384
note: "Spectrum +3e ROM 2. Embedded in core."
source_ref: "fuse/settings.c:244, fuse/machines/specplus3e.c:76"
- name: "fuse/plus3e-3.rom"
system: sinclair-zxspectrum
required: false
md5: a148bcc575e51389e84fdf5d555c3196
sha1: 65f031caa8148a5493afe42c41f4929deab26b4e
size: 16384
note: "Spectrum +3e ROM 3. Same as plus3-3.rom. Embedded in core."
source_ref: "fuse/settings.c:245, fuse/machines/specplus3e.c:79"
- name: "fuse/se-0.rom"
system: sinclair-zxspectrum
required: false
md5: fb3f86eb1e5a695d9c50c124e7cfb875
sha1: 8608328d7dd66602a4846f046b24fed500f7d828
size: 16384
note: "Spectrum SE ROM 0. Embedded in core."
source_ref: "fuse/settings.c:251, fuse/machines/spec_se.c:89"
- name: "fuse/se-1.rom"
system: sinclair-zxspectrum
required: false
md5: 88de4a3129086f34bb9ca559acc51e6c
sha1: 3be5de57dd3bd0a9d15c57cabe9179afe2906a52
size: 16384
note: "Spectrum SE ROM 1. Embedded in core."
source_ref: "fuse/settings.c:252, fuse/machines/spec_se.c:92"
- name: "fuse/tc2048.rom"
system: sinclair-zxspectrum
required: false
md5: 9dd7ecf784a6c04265c073c236f5fadb
sha1: febb2d495b6eda7cdcb4074935d6e9d9f328972d
size: 16384
note: "Timex TC2048 ROM. Embedded in core."
source_ref: "fuse/settings.c:254, fuse/machines/tc2048.c:80"
- name: "fuse/tc2068-0.rom"
system: sinclair-zxspectrum
required: false
md5: 55d462fccc6c536037404ef4ced08bec
sha1: 1446cb2780a9dedf640404a639fa3ae518b2d8aa
size: 16384
note: "Timex TC2068 ROM 0. Also used for TS2068. Embedded in core."
source_ref: "fuse/settings.c:255,257, fuse/machines/tc2068.c:138"
- name: "fuse/tc2068-1.rom"
system: sinclair-zxspectrum
required: false
md5: 575d203c6e15e679fba0b73f854ec7a2
sha1: 7e265a2c1f621ed365ea23bdcafdedbc79c1299c
size: 8192
note: "Timex TC2068 ROM 1 (EXROM). Also used for TS2068. Embedded in core."
source_ref: "fuse/settings.c:256,258, fuse/machines/tc2068.c:141"
# -- External ROMs (NOT embedded, must be in {system_dir}/fuse/) --
# Pentagon family
- name: "fuse/128p-0.rom"
system: sinclair-zxspectrum
required: true
md5: ""
size: 16384
note: "Pentagon 128K/512K/1024 ROM 0. Required for Pentagon machines."
source_ref: "fuse/settings.c:221,225,229, fuse/machines/pentagon.c:135"
- name: "fuse/128p-1.rom"
system: sinclair-zxspectrum
required: true
md5: ""
size: 16384
note: "Pentagon 128K/512K/1024 ROM 1. Required for Pentagon machines."
source_ref: "fuse/settings.c:222,226,230, fuse/machines/pentagon.c:138"
- name: "fuse/trdos.rom"
system: sinclair-zxspectrum
required: true
md5: ""
size: 16384
note: "TR-DOS ROM (Beta 128 disk interface). Used by Pentagon and Scorpion."
source_ref: "fuse/settings.c:223,227,231, fuse/machines/pentagon.c:141"
- name: "fuse/gluck.rom"
system: sinclair-zxspectrum
required: true
md5: ""
size: 16384
note: "Gluck ROM. Required for Pentagon 512K and 1024."
source_ref: "fuse/settings.c:224,228, fuse/machines/pentagon512.c:82"
# Scorpion
- name: "fuse/256s-0.rom"
system: sinclair-zxspectrum
required: true
md5: ""
size: 16384
note: "Scorpion 256K ROM 0. Required for Scorpion machine."
source_ref: "fuse/settings.c:247, fuse/machines/scorpion.c:76"
- name: "fuse/256s-1.rom"
system: sinclair-zxspectrum
required: true
md5: ""
size: 16384
note: "Scorpion 256K ROM 1. Required for Scorpion machine."
source_ref: "fuse/settings.c:248, fuse/machines/scorpion.c:79"
- name: "fuse/256s-2.rom"
system: sinclair-zxspectrum
required: true
md5: ""
size: 16384
note: "Scorpion 256K ROM 2. Required for Scorpion machine."
source_ref: "fuse/settings.c:249, fuse/machines/scorpion.c:82"
- name: "fuse/256s-3.rom"
system: sinclair-zxspectrum
required: true
md5: ""
size: 16384
note: "Scorpion 256K ROM 3 (TR-DOS). Required for Scorpion machine."
source_ref: "fuse/settings.c:250, fuse/machines/scorpion.c:85"
# Peripheral ROMs (optional, only needed if peripheral is enabled)
- name: "fuse/if1-2.rom"
system: sinclair-zxspectrum
required: false
md5: ""
size: 16384
note: "Interface 1 ROM (edition 2). Loaded by peripherals/if1.c:403."
source_ref: "fuse/settings.c:216, fuse/peripherals/if1.c:403"
- name: "fuse/disciple.rom"
system: sinclair-zxspectrum
required: false
md5: 78e61a2a02121873c1756b21fd1398b1
sha1: 9a75ed4b293f968985be4c9aa893cd88276d1ced
size: 8192
note: "DISCiPLE disk interface ROM. Bundled in repo but not in mem_entries[]."
source_ref: "fuse/settings.c:215, fuse/peripherals/disk/disciple.c:279"
- name: "fuse/plusd.rom"
system: sinclair-zxspectrum
required: false
md5: 42e5de16fb5e50082bb954ec7ce45851
sha1: 6b841dc5797ef7eb219ad455cd1e434ca3b9d30d
size: 8192
note: "+D disk interface ROM. Bundled in repo but not in mem_entries[]."
source_ref: "fuse/settings.c:246, fuse/peripherals/disk/plusd.c:239"
- name: "fuse/didaktik80.rom"
system: sinclair-zxspectrum
required: false
md5: ""
note: "Didaktik 80 disk interface ROM. Not embedded."
source_ref: "fuse/settings.c:214, fuse/peripherals/disk/didaktik.c:236"
- name: "fuse/opus.rom"
system: sinclair-zxspectrum
required: false
md5: ""
note: "Opus Discovery disk interface ROM. Not embedded."
source_ref: "fuse/settings.c:220, fuse/peripherals/disk/opus.c:210"
- name: "fuse/mf1.rom"
system: sinclair-zxspectrum
required: false
md5: ""
note: "Multiface 1 ROM. Not embedded."
source_ref: "fuse/settings.c:217, fuse/peripherals/multiface.c:224"
- name: "fuse/mf128.rom"
system: sinclair-zxspectrum
required: false
md5: ""
note: "Multiface 128 ROM. Not embedded."
source_ref: "fuse/settings.c:218, fuse/peripherals/multiface.c:225"
- name: "fuse/mf3.rom"
system: sinclair-zxspectrum
required: false
md5: ""
note: "Multiface 3 ROM. Not embedded."
source_ref: "fuse/settings.c:219, fuse/peripherals/multiface.c:226"
- name: "fuse/speccyboot-1.4.rom"
system: sinclair-zxspectrum
required: false
md5: c54aa8f374b0971f51546c29d5d1eba1
sha1: 16af6f052b38a027dd49ba6e96e3a59d16b62672
size: 8192
note: "SpeccyBoot ethernet ROM. Bundled in repo but not in mem_entries[]."
source_ref: "fuse/settings.c:253, fuse/peripherals/speccyboot.c:148"
- name: "fuse/ttx2000s.rom"
system: sinclair-zxspectrum
required: false
md5: ""
note: "TTX2000S teletext adapter ROM. Not embedded."
source_ref: "fuse/settings.c:259, fuse/peripherals/ttx2000s.c:198"
- name: "fuse/usource.rom"
system: sinclair-zxspectrum
required: false
md5: ""
note: "Currah uSource ROM. Not embedded."
source_ref: "fuse/settings.c:260, fuse/peripherals/usource.c:129"
platform_details:
bios_mapping:
source_ref: "src/compat/file.c:55-89, 129-223"
notes: |
ROM resolution order in compat_file_open():
1. Check mem_entries[] (18 embedded ROMs compiled as .h arrays)
2. If not found, try {system_dir}/fuse/{filename} on filesystem
The path is constructed by concatenating system_dir + "/fuse" + path
where path includes the leading slash from fuse's internal path.
embedded_roms:
source_ref: "src/compat/file.c:55-73"
notes: |
18 ROMs embedded in the binary via .h headers generated from .rom files:
48.rom, 128-0.rom, 128-1.rom, plus2-0.rom, plus2-1.rom,
plus3-0/1/2/3.rom, plus3e-0/1/2/3.rom, se-0.rom, se-1.rom,
tc2048.rom, tc2068-0.rom, tc2068-1.rom.
disciple.rom, plusd.rom, speccyboot-1.4.rom are present in the repo
fuse/roms/ directory but NOT in mem_entries[], so they are loaded
from the filesystem only.
machine_rom_map:
source_ref: "fuse/settings.c:209-260, fuse/machines/*.c"
notes: |
Spectrum 16K: 48.rom (1 ROM)
Spectrum 48K: 48.rom (1 ROM)
Spectrum 48K NTSC: 48.rom (1 ROM)
Spectrum 128K: 128-0.rom, 128-1.rom (2 ROMs)
Spectrum +2: plus2-0.rom, plus2-1.rom (2 ROMs)
Spectrum +2A: plus3-0.rom, plus3-1.rom, plus3-2.rom, plus3-3.rom (4 ROMs)
Spectrum +3: plus3-0.rom, plus3-1.rom, plus3-2.rom, plus3-3.rom (4 ROMs)
Spectrum +3e: plus3e-0/1/2/3.rom (4 ROMs)
Spectrum SE: se-0.rom, se-1.rom (2 ROMs)
Timex TC2048: tc2048.rom (1 ROM)
Timex TC2068: tc2068-0.rom, tc2068-1.rom (2 ROMs)
Timex TS2068: tc2068-0.rom, tc2068-1.rom (2 ROMs, same files)
Pentagon 128K: 128p-0.rom, 128p-1.rom, trdos.rom (3 ROMs)
Pentagon 512K: 128p-0.rom, 128p-1.rom, trdos.rom, gluck.rom (4 ROMs)
Pentagon 1024: 128p-0.rom, 128p-1.rom, trdos.rom, gluck.rom (4 ROMs)
Scorpion 256K: 256s-0.rom, 256s-1.rom, 256s-2.rom, 256s-3.rom (4 ROMs)
rom_copyright:
source_ref: "fuse/roms/README.copyright"
notes: |
Most ROMs are copyright Amstrad. Amstrad allows free distribution but
retains copyright. Selling ROMs standalone is not permitted. SE ROMs
are GPLv2+. DISCiPLE/+D ROMs are copyright Datel, distribution allowed.
SpeccyBoot ROM is MIT licensed.

53
emulators/gambatte.yml Normal file
View File

@@ -0,0 +1,53 @@
emulator: Gambatte
type: libretro
source: "https://github.com/libretro/gambatte-libretro"
systems: [nintendo-gb, nintendo-gbc]
notes: |
Gambatte is a Game Boy / Game Boy Color emulator focused on accuracy.
No BIOS is required for normal operation. The core has a built-in
HLE boot sequence that skips the Nintendo logo animation by default.
When the core option "gambatte_gb_bootloader" is set to "enabled"
(the default), the core looks for official boot ROMs in the system
directory to play the real startup logo animation. If the files are
missing, emulation still works without them.
The boot ROM loaded depends on the hardware mode:
- DMG (original Game Boy): gb_bios.bin (256 bytes, 0x100)
- CGB (Game Boy Color) or GBA mode: gbc_bios.bin (2304 bytes, 0x900)
In GBA mode the core patches the CGB boot ROM at 0xF2 to fake
GBA detection (ld b,0x01), enabling GBA-enhanced features in
compatible GBC games (Shantae, Zelda Oracle series, etc.).
File path construction: libretro.cpp get_bootloader_from_file()
joins RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY with each filename
directly - no subdirectories.
Gambatte does NOT use sgb_bios.bin. The SGB palette references in
the source are color lookup tables for DMG palette colorization,
not actual Super Game Boy boot ROM loading.
files:
# --- DMG boot ROM (optional, enables startup animation) ---
- name: "gb_bios.bin"
system: nintendo-gb
description: "Original Game Boy (DMG-01) boot ROM"
required: false
size: 256
md5: "32fbbd84168d3482956eb3c5051637f5"
sha1: "4ed31ec6b0b175bb109c0eb5fd3d193da823339f"
source_ref: "libretro.cpp:1304-1364 (get_bootloader_from_file), bootloader.cpp:20-55 (load)"
notes: "Mapped at 0x0000-0x00FF, swapped out when register 0xFF50 is written. Core option gambatte_gb_bootloader must be enabled."
# --- CGB boot ROM (optional, enables startup animation) ---
- name: "gbc_bios.bin"
system: nintendo-gbc
description: "Game Boy Color (CGB-001) boot ROM"
required: false
size: 2304
md5: "dbfce9db9deaa2567f6a84fde55f9680"
sha1: "1293d68bf9643bc4f36954c1e80e38f39864528d"
source_ref: "libretro.cpp:1304-1364 (get_bootloader_from_file), bootloader.cpp:20-55 (load)"
notes: "Mapped at 0x0000-0x08FF with cartridge data preserved at 0x0100-0x01FF. Also used for GBA-enhanced mode with a patch at 0xF2. Presence required for FORCE_CGB flag when hw mode is set to GBC or GBA."

238
emulators/kronos.yml Normal file
View File

@@ -0,0 +1,238 @@
emulator: Kronos
type: libretro
cores:
- kronos_libretro
- yabause_libretro
source: "https://github.com/FCare/Kronos"
systems:
- sega-saturn
- sega-stv
notes: |
Kronos is a Sega Saturn and ST-V arcade emulator forked from Yabause.
The libretro repo at libretro/yabause ships the older "Yabause" core
(yabause_libretro) which handles Saturn only and has no STV support.
Saturn BIOS search order (Kronos):
1. {system}/kronos/saturn_bios.bin
2. {system}/saturn_bios.bin
3. {system}/sega_101.bin
4. {system}/mpr-17933.bin
First file found wins. Real BIOS required, HLE is deprecated and causes
issues. Multi-disc (m3u) also forces real BIOS.
Saturn BIOS search order (YabaSanshiro / Yabause):
1. {system}/saturn_bios.bin
2. {system}/sega_101.bin
3. {system}/mpr-17933.bin
Falls back to HLE if none found, but HLE is not recommended.
ST-V BIOS (Kronos only):
{system}/kronos/stvbios.zip or {system}/stvbios.zip
The ZIP is a MAME-style romset containing region-specific EPROMs.
Kronos picks the first matching BIOS by region, with a configurable
"favorite region" core option (EU/US/JP/TW). The ZIP must contain
at least one of the BIOS blobs listed below. ST-V games are detected
automatically when loading a .zip file.
BIOS loading: libretro.c retro_load_game() lines 1601-1727.
STV blob table: ctrl/src/stv.c BiosList lines 112-136.
Region enums: ctrl/include/stv.h lines 47-52.
files:
# -----------------------------------------------------------
# Saturn BIOS - generic (any region accepted)
# -----------------------------------------------------------
- name: "saturn_bios.bin"
system: sega-saturn
required: true
size: 524288 # 512 KB (0x80000)
note: "Primary Saturn BIOS. Any region. Searched first by both cores."
source_ref: "libretro.c:1619-1623 (kronos), libretro.c:1035 (yabause)"
# -----------------------------------------------------------
# Saturn BIOS - Japan v1.01
# -----------------------------------------------------------
- name: "sega_101.bin"
system: sega-saturn
region: [japan]
required: false
size: 524288
md5: "85ec9ca47d8f6807718151cbcca8b964"
note: "Saturn BIOS v1.01 (Japan). Fallback if saturn_bios.bin missing."
source_ref: "libretro.c:1627 (kronos), libretro.c:1039 (yabause)"
# -----------------------------------------------------------
# Saturn BIOS - NA/EU
# -----------------------------------------------------------
- name: "mpr-17933.bin"
system: sega-saturn
region: [north-america, europe]
required: false
size: 524288
md5: "3240872c70984b6cbfda1586cab68dbe"
note: "Saturn BIOS (NA/EU). Last fallback for Saturn mode."
source_ref: "libretro.c:1631 (kronos), libretro.c:1043 (yabause)"
# -----------------------------------------------------------
# ST-V Arcade BIOS (stvbios.zip) - Kronos only
# -----------------------------------------------------------
- name: "stvbios.zip"
system: sega-stv
required: true
note: >
MAME-style ZIP containing ST-V region BIOS EPROMs. Required for
ST-V arcade games. Kronos picks the best match based on game
region and the stv_favorite_region core option. At least one
BIOS blob must be present. Searched in kronos/ subdir first.
source_ref: "libretro.c:1608-1617, ctrl/src/stv.c:112-136"
# -----------------------------------------------------------
# ST-V BIOS blobs inside stvbios.zip
# -----------------------------------------------------------
# Japan
- name: "epr-23603.ic8"
system: sega-stv
region: [japan]
required: false
size: 524288
crc32: "f688ae60"
note: "STV BIOS Japan (latest). Inside stvbios.zip."
source_ref: "stv.c:120"
- name: "epr-20091.ic8"
system: sega-stv
region: [japan]
required: false
size: 524288
crc32: "59ed40f4"
note: "STV BIOS Japan v1. Inside stvbios.zip."
source_ref: "stv.c:121"
- name: "epr-19730.ic8"
system: sega-stv
region: [japan]
required: false
size: 524288
crc32: "d0e0889d"
note: "STV BIOS Japan v2. Inside stvbios.zip."
source_ref: "stv.c:122"
- name: "epr-17951a.ic8"
system: sega-stv
region: [japan]
required: false
size: 524288
crc32: "2672f9d8"
note: "STV BIOS Japan v3. Inside stvbios.zip."
source_ref: "stv.c:123"
- name: "epr-17740a.ic8"
system: sega-stv
region: [japan]
required: false
size: 524288
crc32: "3e23c81f"
note: "STV BIOS Japan v4. Inside stvbios.zip."
source_ref: "stv.c:124"
- name: "epr-17740.ic8"
system: sega-stv
region: [japan]
required: false
size: 524288
crc32: "5c5aa63d"
note: "STV BIOS Japan v5. Inside stvbios.zip."
source_ref: "stv.c:125"
# Europe
- name: "epr-17954a.ic8"
system: sega-stv
region: [europe]
required: false
size: 524288
crc32: "f7722da3"
note: "STV BIOS Europe. Inside stvbios.zip."
source_ref: "stv.c:126"
# USA
- name: "epr-17952a.ic8"
system: sega-stv
region: [north-america]
required: false
size: 524288
crc32: "d1be2adf"
note: "STV BIOS USA. Inside stvbios.zip."
source_ref: "stv.c:127"
- name: "epr-17741a.ic8"
system: sega-stv
region: [north-america]
required: false
size: 524288
crc32: "4166c663"
note: "STV BIOS USA v1. Inside stvbios.zip."
source_ref: "stv.c:128"
# Taiwan
- name: "epr-19854.ic8"
system: sega-stv
region: [taiwan]
required: false
size: 524288
crc32: "e09d1f60"
note: "STV BIOS Taiwan. Inside stvbios.zip."
source_ref: "stv.c:129"
- name: "epr-17953a.ic8"
system: sega-stv
region: [taiwan]
required: false
size: 524288
crc32: "a4c47570"
note: "STV BIOS Taiwan v1. Inside stvbios.zip."
source_ref: "stv.c:130"
- name: "epr-17742a.ic8"
system: sega-stv
region: [taiwan]
required: false
size: 524288
crc32: "02daf123"
note: "STV BIOS Taiwan v2. Inside stvbios.zip."
source_ref: "stv.c:131"
# Debug / Dev
- name: "stv110.bin"
system: sega-stv
required: false
size: 524288
crc32: "3dfeda92"
note: "STV debug BIOS. Inside stvbios.zip. Not used in normal operation."
source_ref: "stv.c:132"
- name: "stv1061.bin"
system: sega-stv
required: false
size: 524288
crc32: "728dbca3"
note: "STV dev BIOS. Inside stvbios.zip. Not used in normal operation."
source_ref: "stv.c:133"
platform_details:
saturn:
bios_size: 524288
bios_address: "0x00000000-0x0007FFFF"
hle_available: true
hle_recommended: false
kronos_bios_subdir: "kronos"
source_ref: "sys/memory/src/memory.c:1346, libretro.c:1619-1638"
stv:
bios_format: "MAME-style ZIP (stvbios.zip)"
blob_size: 524288
blob_load_address: "0x000000"
regions: [japan, europe, north-america, taiwan]
region_selection: "automatic per game, overridable via kronos_stv_favorite_region"
kronos_bios_subdir: "kronos"
source_ref: "ctrl/src/stv.c:112-136, ctrl/include/stv.h:47-52"

118
emulators/mgba.yml Normal file
View File

@@ -0,0 +1,118 @@
emulator: mGBA
type: libretro
source: "https://github.com/libretro/mgba"
cores:
- mgba
systems:
- nintendo-gba
- nintendo-gb
- nintendo-gbc
- nintendo-sgb
notes: |
mGBA is a Game Boy Advance emulator with Game Boy, Game Boy Color, and
Super Game Boy support.
All BIOS files are optional. mGBA ships a built-in HLE BIOS for GBA
(src/gba/hle-bios.c) that covers most software. The real BIOS improves
accuracy (startup logo, some edge-case SWI behavior). There is no HLE
BIOS for GB/GBC/SGB -- those rely on GBSkipBIOS() if no file is found.
BIOS loading is controlled by two core options:
mgba_use_bios (default ON) - whether to look for BIOS files at all
mgba_skip_bios (default OFF) - skip the boot animation even if loaded
The libretro port resolves BIOS filenames in retro_load_game()
(src/platform/libretro/libretro.c:2091-2148). It picks the filename
based on detected model:
GBA -> gba_bios.bin
GB (DMG/MGB) -> gb_bios.bin
GBC (CGB/AGB) -> gbc_bios.bin
SGB (SGB/SGB2)-> sgb_bios.bin
The standalone core (src/gb/core.c:637-684) handles the same models
and maps SGB2 to sgb_bios.bin (marked TODO for a dedicated file).
GBIsBIOS() in src/gb/gb.c validates BIOS files by CRC32 checksum.
Accepted checksums cover DMG, DMG0, MGB, SGB, SGB2, CGB, CGB0, CGBE,
AGB, and AGB0 revisions.
files:
# -------------------------------------------------------
# Game Boy Advance - BIOS (optional, HLE fallback)
# -------------------------------------------------------
- name: gba_bios.bin
system: nintendo-gba
required: false
size: 16384 # 16 KB (0x4000, GBA_SIZE_BIOS)
note: "GBA BIOS. HLE replacement built in. Real BIOS adds boot logo and full SWI accuracy."
source_ref: "src/platform/libretro/libretro.c:2099"
# -------------------------------------------------------
# Game Boy - boot ROM (optional, skip fallback)
# -------------------------------------------------------
- name: gb_bios.bin
system: nintendo-gb
required: false
size: 256 # 256 B (0x100)
note: "DMG/MGB boot ROM. Scrolling Nintendo logo. Skipped if absent."
source_ref: "src/platform/libretro/libretro.c:2134"
# -------------------------------------------------------
# Game Boy Color - boot ROM (optional, skip fallback)
# -------------------------------------------------------
- name: gbc_bios.bin
system: nintendo-gbc
required: false
size: 2304 # 2304 B (0x900)
note: "CGB boot ROM. Used for CGB, AGB (GBA in GB mode), and SCGB models."
source_ref: "src/platform/libretro/libretro.c:2127"
# -------------------------------------------------------
# Super Game Boy - boot ROM (optional, skip fallback)
# -------------------------------------------------------
- name: sgb_bios.bin
system: nintendo-sgb
required: false
size: 256 # 256 B (0x100)
note: "SGB/SGB2 boot ROM. Also used when model is SGB2 (no separate sgb2_bios.bin)."
source_ref: "src/platform/libretro/libretro.c:2130"
platform_details:
gba:
bios_size: 16384 # 16 KB
hle_bios: true
source_ref: "src/gba/hle-bios.c, src/gba/gba.c:520-548"
notes: |
GBALoadBIOS() validates size (must be exactly 0x4000) then computes
an internal checksum. Two official checksums are recognized:
GBA_BIOS_CHECKSUM = 0xBAAE187F (standard GBA)
GBA_DS_BIOS_CHECKSUM = 0xBAAE1880 (DS GBA mode)
Other checksums trigger a warning but the file is still loaded.
gb:
bios_size: 256 # 256 B
hle_bios: false
source_ref: "src/gb/gb.c:570-605"
notes: |
GBIsBIOS() validates by CRC32. Accepted DMG-family checksums:
DMG0 = 0xC2F5CC97, DMG = 0x59C8598E, MGB = 0xE6920754
Files not matching any known checksum are rejected.
gbc:
bios_size: 2304 # 2304 B (0x900)
hle_bios: false
source_ref: "src/gb/gb.c:570-605"
notes: |
Accepted CGB-family CRC32 checksums:
CGB = 0x41884E46, CGB0 = 0xE8EF5318, CGBE = 0xE95DC95D
AGB = 0xFFD6B0F1, AGB0 = 0x570337EA
sgb:
bios_size: 256 # 256 B
hle_bios: false
source_ref: "src/gb/gb.c:570-605, src/gb/core.c:642-644"
notes: |
Accepted SGB CRC32 checksums:
SGB = 0xEC8A83B9, SGB2 = 0x53D0DD63
SGB2 model falls through to sgb_bios.bin (marked TODO upstream).

67
emulators/nestopia.yml Normal file
View File

@@ -0,0 +1,67 @@
emulator: Nestopia UE
type: libretro
source: "https://github.com/libretro/nestopia"
systems: [nintendo-nes, nintendo-fds]
notes: |
Nestopia UE (Undead Edition) is a cycle-accurate NES/Famicom emulator.
NES cartridge games need no BIOS. Famicom Disk System games require
the FDS BIOS ROM (disksys.rom, 8 KB) loaded from the system directory.
The core validates the BIOS via CRC32 against two known dumps:
standard Famicom (0x5E607DCF) and Twin Famicom (0x4DF24A6C).
An unknown BIOS triggers a warning but still loads.
NstDatabase.xml is an optional game database used for region autodetection,
aspect ratio selection, and 4-player adapter recognition. A copy is baked
into the core binary (libretro/nstdatabase.hpp) and used as fallback when
no external file is found. Placing a newer NstDatabase.xml in the system
directory overrides the built-in copy.
An optional custom palette file (custom.pal, 192 bytes, 64 RGB triplets)
overrides the built-in palettes when the nestopia_palette core option is
set to Custom. The core ships with 10+ built-in palettes (Royaltea,
Smooth FBx, etc.) so the external file is rarely needed.
Audio samples for specific games can be placed in system/nestopia/samples/
as numbered .wav files (e.g., 00.wav, 01.wav). This is used for Famicom
expansion audio in a few titles.
Game Genie is handled as cheat code decoding (software), not via a ROM file.
File path construction: libretro/libretro.cpp retro_load_game() joins the
system directory (RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY) with each
filename directly - no subdirectories.
files:
# --- Famicom Disk System BIOS (required for FDS games) ---
- name: "disksys.rom"
system: nintendo-fds
description: "FDS BIOS ROM"
required: true
size: 8192
md5: "ca30b50f880eb660a320674ed365ef7a"
sha1: "57fe1bdee955bb48d357e463ccbf129496930b62"
source_ref: "libretro/libretro.cpp:1608-1634 (FDS load), source/core/NstFds.cpp:61-131 (Bios class, CRC32 validation)"
notes: "Mapped at 0xE000-0xFFFF (8 KB). retro_load_game returns false if missing when loading .fds files. CRC32 checked: Famicom 0x5E607DCF, Twin Famicom 0x4DF24A6C."
# --- NES game database (optional, overrides baked-in copy) ---
- name: "NstDatabase.xml"
system: nintendo-nes
description: "Nestopia game database for region and mapper autodetection"
required: false
size: 1022369
md5: "0ee6cbdc6f5c96ce9c8aa5edb59066f4"
sha1: ~
source_ref: "libretro/libretro.cpp:1561-1586 (database load), libretro/nstdatabase.hpp (baked-in fallback)"
notes: "XML database matching games by SHA1+CRC32. Used for region, mapper, mirroring, and 4-player adapter detection. Built-in fallback exists so this file is optional. Hash is for the upstream copy shipped with the core repo."
# --- Custom palette (optional, core option nestopia_palette = Custom) ---
- name: "custom.pal"
system: nintendo-nes
description: "External NES color palette"
required: false
size: 192
md5: ~
sha1: ~
source_ref: "libretro/libretro.cpp:1540-1559 (palette load)"
notes: "64 RGB triplets (64 x 3 bytes = 192 bytes). Only loaded when nestopia_palette core option is set to Custom. Falls back to built-in Royaltea palette if not found. Multiple valid palettes exist so no single canonical hash."

98
emulators/o2em.yml Normal file
View File

@@ -0,0 +1,98 @@
emulator: O2EM
type: libretro
core: o2em_libretro
source: "https://github.com/libretro/libretro-o2em"
systems:
- odyssey2
- videopac
notes: |
O2EM is the libretro port of the Odyssey2/Videopac emulator.
The core requires exactly one BIOS ROM selected via the o2em_bios core option.
Default is o2rom.bin (Odyssey2 NTSC). The user can switch to c52.bin, g7400.bin
or jopac.bin for European/French Videopac variants.
BIOS files are loaded from the system directory into rom_table[0] (1024 bytes).
The core identifies the BIOS variant by CRC32 and sets the vpp flag accordingly
(vpp=1 enables Videopac+ enhanced graphics for g7400.bin and jopac.bin).
The core will not start without a valid BIOS file present.
Any single BIOS from the list below is sufficient for its region/hardware.
All BIOS files are exactly 1 KB (1024 bytes).
BIOS detection: libretro.c load_bios() lines 146-212, CRC32 switch.
BIOS selection: libretro_core_options.h o2em_bios option lines 52-64.
Core option handling: libretro.c lines 1107-1134.
files:
# -------------------------------------------------------
# Magnavox Odyssey2 (NTSC) - G7000 model
# -------------------------------------------------------
- name: "o2rom.bin"
system: odyssey2
region: [north-america]
required: true
size: 1024
md5: "562d5ebf9e030a40d6fabfc2f33139fd"
sha1: "b2e1955d957a475de2411770452eff4ea19f4cee"
crc32: "8016a315"
note: "Magnavox Odyssey2 BIOS (G7000 NTSC). Default BIOS, vpp=0."
source_ref: "libretro.c:182-186"
# -------------------------------------------------------
# Philips Videopac G7000 (European)
# -------------------------------------------------------
- name: "c52.bin"
system: videopac
region: [europe]
required: true
size: 1024
md5: "f1071cdb0b6b10dde94d3bc8a6146387"
sha1: "a6120aed50831c9c0d95dbdf707820f601d9452e"
crc32: "a318e8d6"
note: "Philips Videopac G7000 European BIOS. vpp=0, auto-sets PAL region."
source_ref: "libretro.c:192-197"
# -------------------------------------------------------
# Philips Videopac+ G7400 (European)
# -------------------------------------------------------
- name: "g7400.bin"
system: videopac
region: [europe]
required: true
size: 1024
md5: "c500ff71236068e0dc0d0603d265ae76"
sha1: "5130243429b40b01a14e1304d0394b8459a6fbae"
crc32: "e20a9f41"
note: "Philips Videopac+ G7400 European BIOS. vpp=1, enables enhanced graphics."
source_ref: "libretro.c:187-191"
# -------------------------------------------------------
# Philips Videopac+ G7400 (French) - JoPac
# -------------------------------------------------------
- name: "jopac.bin"
system: videopac
region: [france]
required: true
size: 1024
md5: "279008e4a0db2dc5f1c048853b033828"
sha1: "54b8d2c1317628de51a85fc1c424423a986775e4"
crc32: "11647ca5"
note: "Philips Videopac+ G7400 French BIOS (JoPac). vpp=1, enables enhanced graphics."
source_ref: "libretro.c:198-203"
platform_details:
odyssey2:
bios_size: 1024
bios_selection: "core option o2em_bios, default o2rom.bin"
detection_method: "CRC32 of 1024-byte ROM"
hle_available: false
source_ref: "libretro.c:146-212, libretro_core_options.h:52-64"
videopac:
bios_size: 1024
bios_selection: "core option o2em_bios, choose c52/g7400/jopac"
detection_method: "CRC32 of 1024-byte ROM"
vpp_flag: "g7400.bin and jopac.bin set vpp=1 for enhanced graphics"
hle_available: false
source_ref: "libretro.c:146-212, libretro_core_options.h:52-64"

110
emulators/px68k.yml Normal file
View File

@@ -0,0 +1,110 @@
emulator: px68k
type: libretro
source: "https://github.com/libretro/px68k-libretro"
cores:
- px68k
systems:
- sharp-x68000
# PX68K is a Sharp X68000 emulator (originally Keropi) ported to libretro.
# All ROM files are loaded from <system_dir>/keropi/ subdirectory.
#
# ROM loading (libretro.c:848-893 WinX68k_LoadROMs):
# 1. Base path set to <system_dir>/keropi/ via file_setcd(winx68k_dir) at line 969
# 2. IPL ROM: iterates BIOSFILE[] = {iplrom.dat, iplrom30.dat, iplromco.dat, iplromxv.dat}
# and opens the first file found. Reads 0x20000 bytes (128 KB) into IPL buffer.
# Returns 0 (failure) if none found -- core will not start.
# 3. SCSI check (WinX68k_SCSICheck): if IPL contains SCSI vectors at offset 0x30600-0x30c00,
# patches a fake SCSI BIOS stub at $fc0000 with "Human68k" signature.
# 4. Byte-swaps IPL in 16-bit pairs (big-endian ROM on little-endian host).
# 5. Font ROM: opens cgrom.dat, falls back to cgrom.tmp if not found.
# Reads 0xc0000 bytes (768 KB) into FONT buffer. Returns 0 if neither exists.
#
# SRAM (x68k/sram.c:50-73):
# sram.dat is 16 KB of battery-backed SRAM, loaded on init and saved on cleanup.
# Not a BIOS -- runtime state. Created automatically if missing.
#
# Directory layout expected:
# <system_dir>/keropi/iplrom.dat (or iplrom30.dat, iplromco.dat, iplromxv.dat)
# <system_dir>/keropi/cgrom.dat (or cgrom.tmp)
# <system_dir>/keropi/sram.dat (auto-created)
# <system_dir>/keropi/config (auto-created, core settings)
files:
# IPL ROM -- the main system BIOS. The core tries four filenames in order and
# uses the first one found. Only one is needed. iplrom.dat is the original X68000,
# iplrom30.dat is X68030, iplromco.dat is X68000 Compact, iplromxv.dat is X68000 XVI.
- name: "iplrom.dat"
path: "keropi/iplrom.dat"
size: 131072
required: true
note: >
X68000 IPL ROM (original model). 128 KB, loaded at IPL buffer offset 0x20000.
The core tries iplrom.dat first, then iplrom30.dat, iplromco.dat, iplromxv.dat
in order. At least one must be present or the core fails to start.
source_ref: "libretro.c:850-867"
- name: "iplrom30.dat"
path: "keropi/iplrom30.dat"
size: 131072
required: false
note: >
X68030 IPL ROM. Alternative to iplrom.dat for X68030 model emulation.
Only used if iplrom.dat is not found.
source_ref: "libretro.c:851"
- name: "iplromco.dat"
path: "keropi/iplromco.dat"
size: 131072
required: false
note: >
X68000 Compact IPL ROM. Alternative to iplrom.dat.
Only used if iplrom.dat and iplrom30.dat are not found.
source_ref: "libretro.c:851"
- name: "iplromxv.dat"
path: "keropi/iplromxv.dat"
size: 131072
required: false
note: >
X68000 XVI IPL ROM. Last fallback in the IPL search order.
Only used if the three other IPL variants are not found.
source_ref: "libretro.c:851"
# Font ROM -- character generator ROM for text rendering.
- name: "cgrom.dat"
path: "keropi/cgrom.dat"
size: 786432
required: true
note: >
X68000 character generator ROM. 768 KB, provides the font glyphs for text
display. If missing, the core falls back to cgrom.tmp (user-generated font
cache). Core fails to start if neither file exists.
source_ref: "libretro.c:853, libretro.c:881-891"
- name: "cgrom.tmp"
path: "keropi/cgrom.tmp"
size: 786432
required: false
note: >
Alternative font file, used as fallback when cgrom.dat is absent.
Typically a font cache generated by the emulator itself on other platforms.
source_ref: "libretro.c:854, libretro.c:884-888"
notes:
subdirectory: >
All files must be placed in <system_dir>/keropi/ subdirectory. The core sets
this path at init via sprintf(retro_system_conf, "%s/keropi", system_dir) and
then calls file_setcd() to make it the base for all file_open_c() calls.
ipl_selection: >
The four IPL ROM variants correspond to different X68000 hardware revisions.
The core uses whichever it finds first in order: iplrom.dat (original X68000),
iplrom30.dat (X68030), iplromco.dat (Compact), iplromxv.dat (XVI). Most users
only need iplrom.dat. The IPL also determines SASI vs SCSI disk support based
on vectors found at offsets 0x30600-0x30c00.
sram: >
sram.dat (16 KB) is read/write runtime state, not a BIOS file. The core creates
it automatically on first shutdown. It stores X68000 NVRAM settings (boot count,
boot device preferences, SRAM-resident programs).