diff --git a/emulators/beetle_ngp.yml b/emulators/beetle_ngp.yml new file mode 100644 index 00000000..849e6d37 --- /dev/null +++ b/emulators/beetle_ngp.yml @@ -0,0 +1,33 @@ +emulator: Beetle NGP (Mednafen Neo Geo Pocket) +type: libretro +source: "https://github.com/libretro/beetle-ngp-libretro" +systems: [snk-ngp, snk-ngpc] + +notes: | + Beetle NGP is a fork of Mednafen's NeoPop module for Neo Geo Pocket + and Neo Geo Pocket Color emulation via libretro. + + No external BIOS or firmware files are required. The core uses a + built-in High-Level Emulation (HLE) BIOS that is constructed at + runtime by bios_install() in mednafen/ngp/bios.c. + + The HLE BIOS populates a 64KB array (ngpc_bios[0x10000]) with: + - A system call vector table at 0xFE00 (27 entries covering + clock, RTC, interrupts, font, flash read/write, comms) + - Each vector target contains an iBIOSHLE instruction (opcode 0x1F) + that traps into biosHLE.c for high-level handling + - A built-in system font (2048 bytes at 0x8DCF) + - A default interrupt handler (RETI at 0x23DF) + - An infinite loop at 0xFFFE as the idle entry point + + The TLCS-900h CPU (main) and Z80 (sound) are both emulated in + software. Flash memory for game saves is handled internally via + flash.c without needing a separate firmware dump. + + The only core option is ngp_language (english/japanese), which + controls the language flag passed to games. It does not affect + BIOS loading. + + ROM extensions: .ngp, .ngc, .ngpc, .npc + +files: [] diff --git a/emulators/beetle_wswan.yml b/emulators/beetle_wswan.yml new file mode 100644 index 00000000..f79c46e3 --- /dev/null +++ b/emulators/beetle_wswan.yml @@ -0,0 +1,31 @@ +emulator: Beetle WonderSwan (Mednafen WonderSwan) +type: libretro +source: "https://github.com/libretro/beetle-wswan-libretro" +systems: [bandai-wswan, bandai-wswanc] + +notes: | + Beetle WonderSwan is a fork of Mednafen's Cygne module for WonderSwan + and WonderSwan Color emulation via libretro. + + No external BIOS or firmware files are required. The core bypasses the + original boot ROM entirely by hardcoding the initial I/O register state + in mednafen/wswan/start.inc (a 256-byte table of power-on defaults for + all hardware registers 0x00-0xFF). On reset, WSwan_MemoryReset() in + wswan-memory.c zeroes RAM and writes a fixed 8-byte identifier at + 0x75AC, then the CPU starts executing the cartridge directly. + + Internal EEPROM owner data (name, birthday, sex, blood type) is + configured through core options (wswan.name, wswan.byear, wswan.bmonth, + wswan.bday, wswan.sex, wswan.blood) and initialized at boot by + WSwan_EEPROMInit() without needing a real EEPROM dump. + + The wswan.language core option selects English or Japanese, which is + returned via I/O port 0xC8+ as the hardware language flag. This + replaces the boot ROM's language selection screen. + + The NEC V30MZ CPU is emulated in software (v30mz.c). Sound DMA, + cartridge banking, and RTC are all handled internally. + + ROM extensions: .ws, .wsc, .pc2 + +files: [] diff --git a/emulators/bk.yml b/emulators/bk.yml new file mode 100644 index 00000000..3f86ed6d --- /dev/null +++ b/emulators/bk.yml @@ -0,0 +1,149 @@ +emulator: bk-emulator +type: libretro +source: "https://github.com/libretro/bk-emulator" +cores: + - bk +systems: + - elektronika-bk + +# BK-emulator is an Elektronika BK-0010/0011M emulator (Soviet PDP-11 based home +# computer). The libretro core supports six machine configurations selected via +# the "bk_model" core option: +# BK-0010 (model 0) - default +# BK-0010.01 (model 1) +# BK-0010.01 + FDD (model 2) +# BK-0011M + FDD (model 3) +# Slow BK-0011M (model 4) - same ROMs as model 3 +# Terak 8510/a (model 9) +# +# ROM loading (boot.c:83-116): +# BK-0010 models use load_rom() which maps ROM into emulated memory at +# specific addresses: monitor at 0100000 (8 KB), BASIC/FOCAL at 0120000 +# (24448-24576 bytes), disk controller at 0160000 (4 KB). +# BK-0011M uses load_rom11() which loads into separate ROM buffer arrays. +# +# ROM file resolution (libretro.c:1051-1108): +# Files are loaded from {system_dir}/bk/{filename} (libretro.c:724-726). +# If not found with original casing, the loader retries with lowercase +# filename (libretro.c:1074-1079). +# +# All ROM files are required for their respective model. The core calls +# environ_cb(RETRO_ENVIRONMENT_SHUTDOWN) if any ROM file is missing. + +notes: | + Files go in {system_dir}/bk/. + Each BK model requires a specific set of ROMs. The default model is BK-0010 + which needs MONIT10.ROM and FOCAL10.ROM. Changing the core option "bk_model" + changes which ROMs are loaded. The core shuts down if a required ROM is + missing (no fallback or pseudo-BIOS). + If a ROM file with uppercase name is not found, the core retries with + the filename lowercased. + +files: + # -- BK-0010 Monitor ROM (all BK-0010 variants) -- + + - name: MONIT10.ROM + path: "bk/MONIT10.ROM" + size: 8192 + required: true + note: "BK-0010 monitor ROM (8 KB). Loaded at address 0100000. Required for all BK-0010 models (0, 1, 2)." + source_ref: "main.c:53, boot.c:107" + aliases: ["monit10.rom"] + + # -- BK-0010 language ROMs (model-dependent) -- + + - name: FOCAL10.ROM + path: "bk/FOCAL10.ROM" + size: 24576 + required: false + note: "FOCAL interpreter ROM (24448-24576 bytes). Loaded at 0120000. Used by BK-0010 (model 0, default)." + source_ref: "libretro.c:15, boot.c:110" + aliases: ["focal10.rom"] + + - name: BASIC10.ROM + path: "bk/BASIC10.ROM" + size: 24576 + required: false + note: "BASIC interpreter ROM (24448-24576 bytes). Loaded at 0120000. Used by BK-0010.01 (model 1)." + source_ref: "libretro.c:16, boot.c:110" + aliases: ["basic10.rom"] + + # -- Disk controller ROM (BK-0010.01+FDD and BK-0011M) -- + + - name: DISK_327.ROM + path: "bk/DISK_327.ROM" + size: 4096 + required: false + note: "Floppy disk controller ROM (4 KB). Loaded at 0160000 for BK-0010.01+FDD (model 2), or into system_rom for BK-0011M (model 3/4)." + source_ref: "main.c:54, boot.c:99,113" + aliases: ["disk_327.rom"] + + # -- BK-0011M ROMs -- + + - name: B11M_BOS.ROM + path: "bk/B11M_BOS.ROM" + size: 8192 + required: false + note: "BK-0011M system ROM / BOS (8 KB). Loaded into system_rom at offset 0. Required for BK-0011M (model 3/4)." + source_ref: "main.c:55, boot.c:98" + aliases: ["b11m_bos.rom"] + + - name: B11M_EXT.ROM + path: "bk/B11M_EXT.ROM" + size: 8192 + required: false + note: "BK-0011M extended BOS ROM (8 KB). Loaded into rom[1] at offset 8192. Required for BK-0011M (model 3/4)." + source_ref: "main.c:56, boot.c:102" + aliases: ["b11m_ext.rom"] + + - name: BAS11M_0.ROM + path: "bk/BAS11M_0.ROM" + size: 16384 + required: false + note: "BK-0011M BASIC ROM part 0 (16 KB). Loaded into rom[0]. Required for BK-0011M (model 3/4)." + source_ref: "main.c:57, boot.c:100" + aliases: ["bas11m_0.rom"] + + - name: BAS11M_1.ROM + path: "bk/BAS11M_1.ROM" + size: 8192 + required: false + note: "BK-0011M BASIC ROM part 1 (8 KB). Loaded into rom[1] at offset 0. Required for BK-0011M (model 3/4)." + source_ref: "main.c:58, boot.c:101" + aliases: ["bas11m_1.rom"] + + # -- Terak 8510/a ROM -- + + - name: TERAK.ROM + path: "bk/TERAK.ROM" + size: 128 + required: false + note: "Terak 8510/a boot ROM (128 bytes). Only used when model is set to Terak 8510/a (model 9)." + source_ref: "boot.c:94" + aliases: ["terak.rom"] + +platform_details: + bios_mapping: + source_ref: "libretro.c:718-760, boot.c:83-116" + notes: | + ROM directory is {system_dir}/bk/ (libretro.c:724-726). + Model selection via core option "bk_model" determines which ROMs are loaded. + The core shuts down immediately if any required ROM for the selected model + is not found. + + model_rom_map: + source_ref: "libretro.c:734-756, boot.c:83-116" + notes: | + BK-0010: MONIT10.ROM + FOCAL10.ROM + BK-0010.01: MONIT10.ROM + BASIC10.ROM + BK-0010.01 + FDD: MONIT10.ROM + DISK_327.ROM + BK-0011M + FDD: B11M_BOS.ROM + DISK_327.ROM + BAS11M_0.ROM + BAS11M_1.ROM + B11M_EXT.ROM + Slow BK-0011M: same as BK-0011M + FDD + Terak 8510/a: TERAK.ROM + + rom_loading: + source_ref: "libretro.c:1051-1108" + notes: | + load_rom_file() first tries {romdir}/{filename} with original casing. + If not found, retries with the filename converted to lowercase. + Returns NULL and shuts down the core on failure. diff --git a/emulators/blastem.yml b/emulators/blastem.yml new file mode 100644 index 00000000..4b7c747d --- /dev/null +++ b/emulators/blastem.yml @@ -0,0 +1,55 @@ +emulator: BlastEm +type: libretro +source: "https://github.com/libretro/blastem" +cores: + - blastem +systems: + - sega-megadrive + - sega-mastersystem + +notes: | + BlastEm is a cycle-accurate Sega Mega Drive/Genesis emulator with basic + Master System support. In standalone mode it supports TMSS ROM loading and + multiple hardware models (MD1 VA0 through MD3 VA2, Teradrive). The Jaguar + emulator (blastjag) is a separate standalone binary, not part of the + libretro core. + + The libretro port (libblastem.c) does NOT expose any core options and + defaults to model md1va3 which has TMSS disabled. There is no way to + select a TMSS-enabled model through the libretro interface. + + Even if a TMSS-enabled model were forced, read_bundled_file() in the + libretro build only serves rom.db and returns NULL for tmss.md, so TMSS + ROM loading would fail (fatal_error at genesis.c:1923). + + Sega CD / Mega CD is not supported (only a TODO comment in system.c:16). + No BIOS files are required or loaded by the libretro core. + +files: [] + +analysis: + tmss: + standalone_support: true + libretro_support: false + default_model: md1va3 + default_tmss: "off" + rom_filename: tmss.md + rom_size: 2048 # 2 KB + config_path: "system\0tmss_path\0" + source_ref: "genesis.c:1910" + notes: | + TMSS ROM is loaded from tmss.md (configurable via system/tmss_path). + Models with tmss=on: md1va6, md2va1, md2va2, md3va1, md3va2. + Models with tmss=off: md1va0, md1va3 (default), teradrive. + The libretro build uses md1va3 (tmss off) with no option to change. + + sega_cd: + supported: false + source_ref: "system.c:16" + notes: "TODO comment only: 'Differentiate between vanilla Genesis and Sega CD/32X games'" + + jaguar_bios: + libretro_relevant: false + notes: | + blastjag (jaguar.c) is a separate standalone binary, not compiled + into the libretro core. Requires BIOS as first CLI argument. diff --git a/emulators/cap32.yml b/emulators/cap32.yml new file mode 100644 index 00000000..34b887dd --- /dev/null +++ b/emulators/cap32.yml @@ -0,0 +1,70 @@ +emulator: Caprice32 +type: libretro +source: "https://github.com/libretro/libretro-cap32" +cores: + - cap32 +systems: + - amstrad-cpc + +notes: | + Caprice32 is an Amstrad CPC emulator ported to libretro. Supports CPC 464, + CPC 664, CPC 6128, and CPC+ (Plus) models. + + All system ROMs are compiled directly into the core binary as C header + arrays in cap32/rom/*.h. No external BIOS files are required. + + Embedded ROMs (cap32/cap32.c:342-345): + - cap32/rom/464.h: OS_BASIC10[32768] - CPC 464 OS + BASIC 1.0 + - cap32/rom/6128.h: OS_BASIC11[32768] - CPC 6128 OS + BASIC 1.1 + - cap32/rom/amsdos.h: AMSDOS[16384] - AMSDOS disk controller ROM + - cap32/rom/6128p.h: OS_6128P - CPC+ system cartridge ROM + - cap32/rom/cpm.h: cpmROM - CP/M boot snapshot (128KB) + + ROM selection in emulator_select_ROM() (cap32/cap32.c:1072-1100): + - CPC 464: OS_BASIC10 (32KB) + - CPC 664: OS_BASIC10 (32KB) + AMSDOS in slot 7 + - CPC 6128: OS_BASIC11 (32KB) + AMSDOS in slot 7 + - CPC+: OS_6128P loaded as system cartridge via cpr_load() + + The standalone (non-libretro) version references external filenames + cpc464.rom, cpc664.rom, cpc6128.rom, amsdos.rom in cap32.c:349-352 + via config file loading (cap32.c:1828-1840), but the libretro port + does not use this path. The libretro init (libretro-core.c:1512) has + a "TODO: future use to load custom bios" comment that is not + implemented. + + Keyboard layout patches are applied to the ROM in memory for French + and Spanish layouts via rom_mods.h (cap32.c:1102-1126). + + CP/M support loads a pre-built snapshot (cpm.h) into memory via + snapshot_load_mem() in slots.c:87. + +files: [] + +platform_details: + bios_mapping: + source_ref: "cap32/cap32.c:1072-1100, cap32/cap32.c:342-345" + notes: | + All ROMs are embedded. emulator_select_ROM() copies the appropriate + ROM array into the pbROM buffer based on CPC.model. No filesystem + lookup occurs in the libretro port. The retro_system_bios_directory + variable is set up in libretro-core.c:1499-1510 but only used for + a future custom BIOS feature that is not yet implemented. + + embedded_roms: + source_ref: "cap32/rom/464.h, cap32/rom/6128.h, cap32/rom/amsdos.h, cap32/rom/6128p.h, cap32/rom/cpm.h" + notes: | + 5 ROM sets embedded as C arrays: + OS_BASIC10 (32KB) - CPC 464/664 OS + BASIC 1.0 + OS_BASIC11 (32KB) - CPC 6128 OS + BASIC 1.1 + AMSDOS (16KB) - Disk controller ROM, mapped to slot 7 + OS_6128P - CPC+ system cartridge (White Label cartridge) + cpmROM (128KB+) - CP/M boot snapshot including SNA header + + model_rom_map: + source_ref: "cap32/cap32.c:1072-1100" + notes: | + CPC 464: OS_BASIC10 only (no disk support) + CPC 664: OS_BASIC10 + AMSDOS in ROM slot 7 + CPC 6128: OS_BASIC11 + AMSDOS in ROM slot 7 + CPC+: 6128P system cartridge (or user-provided .cpr file) diff --git a/emulators/desmume.yml b/emulators/desmume.yml new file mode 100644 index 00000000..8b6d42b6 --- /dev/null +++ b/emulators/desmume.yml @@ -0,0 +1,41 @@ +emulator: DeSmuME +type: libretro +source: "https://github.com/libretro/desmume" +cores: [desmume, desmume2015] +systems: [nintendo-ds] + +notes: | + DeSmuME provides full HLE (High-Level Emulation) of all ARM7/ARM9 SWI + routines, making BIOS files optional for most games. When external BIOS + is disabled, a minimal fake BIOS with exception vectors and IRQ handler + stubs is generated at runtime (NDSSystem.cpp:2208-2224, 2263-2278). + External BIOS enables SWI-from-BIOS mode and firmware boot animation. + Firmware boot requires both ARM7+ARM9 BIOS loaded AND interpreter mode + (JIT incompatible, see libretro.cpp:788). + ARM9 BIOS read size: 4096 bytes (0x1000). ARM7 BIOS read size: 16384 + bytes (0x4000). No DSi support. + Libretro core option: desmume_use_external_bios (enabled/disabled). + +files: + - name: "bios7.bin" + system: nintendo-ds + description: "ARM7 BIOS" + required: false + size: 16384 + source_ref: "desmume/src/NDSSystem.cpp:2178-2182, frontend/libretro/libretro.cpp:763" + notes: "HLE fallback covers all SWI calls; native file needed for firmware boot and SWI-from-BIOS accuracy" + + - name: "bios9.bin" + system: nintendo-ds + description: "ARM9 BIOS" + required: false + size: 4096 + source_ref: "desmume/src/NDSSystem.cpp:2236-2239, frontend/libretro/libretro.cpp:764" + notes: "HLE fallback covers all SWI calls; native file needed for firmware boot and logo comparison (Pal Park)" + + - name: "firmware.bin" + system: nintendo-ds + description: "NDS firmware image" + required: false + source_ref: "desmume/src/NDSSystem.cpp:2653-2655, frontend/libretro/libretro.cpp:765" + notes: "Dummy firmware generated when absent; native firmware needed for boot animation, wifi config, user settings" diff --git a/emulators/dosbox_pure.yml b/emulators/dosbox_pure.yml new file mode 100644 index 00000000..921f6548 --- /dev/null +++ b/emulators/dosbox_pure.yml @@ -0,0 +1,139 @@ +emulator: DOSBox Pure +type: libretro +source: "https://github.com/libretro/dosbox-pure" +cores: [dosbox_pure] +systems: [dos] +verification: sha1 +notes: > + No BIOS required. MT-32 and SoundFont support is optional for MIDI music. + The core scans the RetroArch system directory (and subdirectories) for files + ending in _CONTROL.ROM (MT-32/CM-32L) and .SF2/.SF3 (General MIDI SoundFont). + MT-32 requires a matched pair: *_CONTROL.ROM + *_PCM.ROM in the same directory. + Files can also be placed inside the game content as DOSBOX.SF2 or MT32_CONTROL.ROM + + MT32_PCM.ROM on the mounted C: drive. ZIP archives containing both ROMs are + also supported (identified by file size, not name). A cache file + DOSBoxPureMidiCache.txt is written to system dir when scan takes >2s. + Uses bundled MUNT (mt32emu) for MT-32 emulation, TinySoundFont for SF2 playback. + No firmware entries in the .info file - all MIDI files are optional enhancements. + +files: + # -- MT-32 Control ROMs (64 KB) -- + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v1.04" + required: false + size: 65536 + sha1: "5a5cb5a77d7d55ee69657c2f870416daed52dea7" + source_ref: "mt32emu.h:CTRL_MT32_V1_04" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v1.05" + required: false + size: 65536 + sha1: "e17a3a6d265bf1fa150312061134293d2b58288c" + source_ref: "mt32emu.h:CTRL_MT32_V1_05" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v1.06" + required: false + size: 65536 + sha1: "a553481f4e2794c10cfe597fef154eef0d8257de" + source_ref: "mt32emu.h:CTRL_MT32_V1_06" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v1.07" + required: false + size: 65536 + sha1: "b083518fffb7f66b03c23b7eb4f868e62dc5a987" + source_ref: "mt32emu.h:CTRL_MT32_V1_07" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control BlueRidge" + required: false + size: 65536 + sha1: "7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92" + source_ref: "mt32emu.h:CTRL_MT32_BLUER" + + # -- MT-32 v2.x Control ROMs (128 KB) -- + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v2.03 (new MT-32)" + required: false + size: 131072 + sha1: "5837064c9df4741a55f7c4d8787ac158dff2d3ce" + source_ref: "mt32emu.h:CTRL_MT32_V2_03" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v2.04" + required: false + size: 131072 + sha1: "2c16432b6c73dd2a3947cba950a0f4c19d6180eb" + source_ref: "mt32emu.h:CTRL_MT32_V2_04" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v2.06" + required: false + size: 131072 + sha1: "2869cf4c235d671668cfcb62415e2ce8323ad4ed" + source_ref: "mt32emu.h:CTRL_MT32_V2_06" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v2.07" + required: false + size: 131072 + sha1: "47b52adefedaec475c925e54340e37673c11707c" + source_ref: "mt32emu.h:CTRL_MT32_V2_07" + + # -- CM-32L / LAPC-I Control ROMs (64 KB) -- + + - name: "CM32L_CONTROL.ROM" + description: "CM-32L/LAPC-I Control v1.00" + required: false + size: 65536 + sha1: "73683d585cd6948cc19547942ca0e14a0319456d" + source_ref: "mt32emu.h:CTRL_CM32L_V1_00" + + - name: "CM32L_CONTROL.ROM" + description: "CM-32L/LAPC-I Control v1.02" + required: false + size: 65536 + sha1: "a439fbb390da38cada95a7cbb1d6ca199cd66ef8" + source_ref: "mt32emu.h:CTRL_CM32L_V1_02" + + # -- CM-32LN / CM-500 / LAPC-N Control ROM (64 KB) -- + + - name: "CM32LN_CONTROL.ROM" + description: "CM-32LN/CM-500/LAPC-N Control v1.00" + required: false + size: 65536 + sha1: "dc1c5b1b90a4646d00f7daf3679733c7badc7077" + source_ref: "mt32emu.h:CTRL_CM32LN_V1_00" + + # -- PCM ROMs -- + + - name: "MT32_PCM.ROM" + description: "MT-32 PCM ROM" + required: false + size: 524288 + sha1: "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252" + source_ref: "mt32emu.h:PCM_MT32" + notes: "pairs with any MT-32 v1.x control ROM" + + - name: "CM32L_PCM.ROM" + description: "CM-32L/CM-64/LAPC-I PCM ROM" + required: false + size: 1048576 + sha1: "289cc298ad532b702461bfc738009d9ebe8025ea" + source_ref: "mt32emu.h:PCM_CM32L" + notes: "pairs with MT-32 v2.x or CM-32L control ROMs. Lower half aliases MT-32 PCM." + + # -- General MIDI SoundFont -- + + - name: "DOSBOX.SF2" + description: "General MIDI SoundFont (any .sf2/.sf3 accepted)" + required: false + source_ref: "dosbox_pure_libretro.cpp:1375,2760" + notes: > + Any .SF2 or .SF3 file in the system directory works. The core lists all + found SoundFonts in the MIDI config dropdown. DOSBOX.SF2 is the conventional + name and is also auto-detected when placed inside game content on C: drive. diff --git a/emulators/galaksija.yml b/emulators/galaksija.yml new file mode 100644 index 00000000..a6f2f3cf --- /dev/null +++ b/emulators/galaksija.yml @@ -0,0 +1,94 @@ +emulator: galaksija +type: libretro +source: "https://github.com/libretro/galaxy-libretro" +cores: + - galaksija +systems: + - galaksija + +# Galaksija is a Yugoslav home computer (1983, designed by Voja Antonic) emulator. +# Z80-based at 3.072 MHz, PAL 50fps, character-mode display (32x16 chars, 256x208 px). +# +# The core embeds all three firmware files compressed in rom.c (LoadCHRGENBIN, +# LoadROM1BIN, LoadROM2BIN). External files are optional overrides -- if ANY of +# CHRGEN.BIN or ROM1.BIN is missing from /galaksija/, the core sets +# firmware_ignore=true and loads all ROMs from the embedded copies instead. +# +# Firmware loading (src/libretro.c:93-135): +# 1. retro_init() checks for galaksija/CHRGEN.BIN and galaksija/ROM1.BIN +# 2. If either is missing: firmware_ignore=true, load embedded compressed ROMs +# 3. If both present: galaxy_init() reads files from disk (init.c:46-105) +# 4. ROM2.BIN missing is a warning only, not fatal (init.c:84-85) +# 5. GAL_PLUS.BIN: referenced in a TODO comment but not implemented yet +# +# Memory map: +# 0x0000-0x0FFF: ROM1 (4096 bytes) - BASIC interpreter +# 0x1000-0x1FFF: ROM2 (4096 bytes) - math extension (optional) +# 0x2000-0x27FF: keyboard memory-mapped I/O +# 0x2800-0x29FF: screen RAM (32x16 characters) +# 0x2A00-0x3FFF: free RAM +# chargen: 2048-byte character generator ROM (separate, not memory-mapped) +# +# The included firmware is public domain per README. + +files: + - name: "CHRGEN.BIN" + path: "galaksija/CHRGEN.BIN" + size: 2048 + required: false + note: > + Character generator ROM. Defines the 128-character bitmap font (8x13 pixels + each). The core has this embedded compressed in rom.c and only loads the + external file if all firmware files are present in the system directory. + source_ref: "src/rom.h:5, src/libretro.c:95-99, src/external/galaksija-emulator/src/init.c:55-67" + + - name: "ROM1.BIN" + path: "galaksija/ROM1.BIN" + size: 4096 + required: false + note: > + System ROM / BASIC interpreter. Mapped at 0x0000-0x0FFF. Contains the + Galaksija BASIC language and boot routines. Embedded in rom.c as fallback. + source_ref: "src/rom.h:8, src/libretro.c:101-105, src/external/galaksija-emulator/src/init.c:69-81" + + - name: "ROM2.BIN" + path: "galaksija/ROM2.BIN" + size: 4096 + required: false + note: > + Math extension ROM. Mapped at 0x1000-0x1FFF. Adds floating-point math + functions (SIN, COS, TG, SQR, LN, EXP, POW, etc). Optional even when + loading from disk -- missing ROM2 only triggers a warning. Embedded in + rom.c as fallback. + source_ref: "src/rom.h:11, src/libretro.c:107-110, src/external/galaksija-emulator/src/init.c:83-92" + + - name: "GAL_PLUS.BIN" + path: "galaksija/GAL_PLUS.BIN" + size: 4096 + required: false + note: > + Galaksija Plus extension ROM. Would map at 0xE000-0xEFFF. Referenced in a + TODO comment in init.c but not yet implemented in the libretro core. The + original standalone emulator loaded it optionally with a Serbian message + on failure ("GAL_PLUS.BIN nije prisutan, idemo dalje bez njega!"). + source_ref: "src/external/galaksija-emulator/src/init.c:94-104" + +notes: + embedded_firmware: > + All three ROMs (CHRGEN.BIN, ROM1.BIN, ROM2.BIN) are embedded as compressed + blobs in src/rom.c using RLE compression. The core works out of the box + without any external firmware files. External files only serve as overrides + for users who want alternative ROM versions (e.g. different BASIC revisions + or character sets). + firmware_override_logic: > + The override is all-or-nothing for CHRGEN.BIN and ROM1.BIN. If either file + is missing from galaksija/, the core ignores all external firmware and uses + embedded copies. ROM2.BIN is handled separately and can be absent even when + loading from disk. + license: > + The emulator code and included firmware are public domain. External + dependencies (libz80, libretro-common, tinyfiledialogs) have separate + licenses (GPL2, MIT). + no_bios_required_for_pack: > + Since all firmware is embedded, this core does not need any BIOS files in + platform packs. The files listed above are optional overrides only. diff --git a/emulators/gearsystem.yml b/emulators/gearsystem.yml new file mode 100644 index 00000000..5409f4f6 --- /dev/null +++ b/emulators/gearsystem.yml @@ -0,0 +1,68 @@ +emulator: Gearsystem +type: libretro +source: "https://github.com/drhelius/Gearsystem" +cores: + - gearsystem +systems: + - sega-mastersystem + - sega-gamegear + - sega-sg1000 + +notes: | + Gearsystem is a Sega Master System / Game Gear / SG-1000 emulator by + Ignacio Sanchez (drhelius). No BIOS is required for normal operation. + + The core supports optional boot ROMs for Master System and Game Gear, + controlled by core options "gearsystem_bios_sms" and "gearsystem_bios_gg" + (both disabled by default). Boot ROMs are loaded in load_bootroms() + from the system directory with fixed filenames. + + SG-1000 has no BIOS support. IsBootromEnabled() in Memory.cpp explicitly + returns false when a SG-1000 cartridge is detected. + + When enabled, the boot ROM executes as on original hardware, which may + cause invalid ROMs to lock or fail to boot entirely. + + Note: gearcoleco, geargrafx, and gearlynx are separate emulators by the + same author covering ColecoVision, PC Engine, and Atari Lynx respectively. + They are not part of Gearsystem. + +files: + # --- Master System boot ROM (optional, behind gearsystem_bios_sms) --- + - name: "bios.sms" + system: sega-mastersystem + description: "Master System boot ROM" + required: false + source_ref: "platforms/libretro/libretro.cpp:414 (load_bootroms)" + notes: "Loaded from system directory. Core option gearsystem_bios_sms must be set to Enabled. No size or hash validation performed by the core." + + # --- Game Gear boot ROM (optional, behind gearsystem_bios_gg) --- + - name: "bios.gg" + system: sega-gamegear + description: "Game Gear boot ROM" + required: false + source_ref: "platforms/libretro/libretro.cpp:415 (load_bootroms)" + notes: "Loaded from system directory. Core option gearsystem_bios_gg must be set to Enabled. No size or hash validation performed by the core." + +platform_details: + mastersystem: + bios_filename: "bios.sms" + source_ref: "src/Memory.cpp:222-228" + notes: | + Boot ROM loaded via LoadBootromSMS() -> LoadBootroom(path, false). + Raw binary read, stored in m_pBootromSMS. Bank count computed as + Pow2Ceil(size / 0x4000). Memory mapping controlled by port 3E bit 3. + + gamegear: + bios_filename: "bios.gg" + source_ref: "src/Memory.cpp:230-234" + notes: | + Boot ROM loaded via LoadBootromGG() -> LoadBootroom(path, true). + Raw binary read, stored in m_pBootromGG. Same bank computation. + Supports standard GG BIOS and Majesco 1KB variant. + + sg1000: + bios_filename: null + notes: | + No BIOS support. Memory.cpp:291 returns false from IsBootromEnabled() + when IsSG1000() is true. diff --git a/emulators/mu.yml b/emulators/mu.yml new file mode 100644 index 00000000..6a465d47 --- /dev/null +++ b/emulators/mu.yml @@ -0,0 +1,81 @@ +emulator: Mu +type: libretro +source: "https://github.com/libretro/Mu" +systems: [palm-os] + +notes: | + Mu emulates Palm OS handhelds: Palm m500, Palm m515, and (if compiled + with EMU_SUPPORT_PALM_OS5) the Tungsten T3. + + A Palm OS ROM dump is required. The core selects the ROM filename based + on the "OS Version" core option: + Palm m500 / Palm OS 4.0 -> palmos40-en-m500.rom + Palm m515 / Palm OS 4.1 -> palmos41-en-m515.rom (default) + Tungsten T3 / Palm OS 5.2 -> palmos52-en-t3.rom + Tungsten T3 / Palm OS 6.0 -> palmos60-en-t3.rom + + ROM path construction: retro_load_game() joins + RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY + "/" + osVersion + ".rom". + + The bootloader (bootloader-dbvz.rom) is optional. It contains the + MC68VZ328 UART bootloader and is only relevant for m500/m515 devices. + For the Tungsten T3 it is ignored even if present. + + The m500/m515 ROM is loaded into a 4 MB region (M5XX_ROM_SIZE), + padded with 0x00 if smaller, and byte-swapped on little-endian hosts. + The Tungsten T3 ROM maps into a 16 MB region (TUNGSTEN_T3_ROM_SIZE). + + The core also supports no-game mode (supports_no_game = true). Without + content, it boots the standard Palm OS desktop from the ROM. + +files: + # --- Palm m515 / Palm OS 4.1 (default device) --- + - name: "palmos41-en-m515.rom" + system: palm-os + description: "Palm m515 ROM, Palm OS 4.1 English" + required: true + note: "Default ROM. Selected when core option is 'Palm m515/Palm OS 4.1'. Max 4 MB, byte-swapped on LE." + source_ref: "libretroBuildSystem/libretro.c:173-176,744-763 (retro_load_game ROM loading)" + + # --- Palm m500 / Palm OS 4.0 --- + - name: "palmos40-en-m500.rom" + system: palm-os + description: "Palm m500 ROM, Palm OS 4.0 English" + required: false + note: "Selected when core option is 'Palm m500/Palm OS 4.0'. Max 4 MB." + source_ref: "libretroBuildSystem/libretro.c:169-172" + + # --- Tungsten T3 / Palm OS 5.2.1 (requires EMU_SUPPORT_PALM_OS5) --- + - name: "palmos52-en-t3.rom" + system: palm-os + description: "Tungsten T3 ROM, Palm OS 5.2.1 English" + required: false + note: "Selected when core option is 'Tungsten T3/Palm OS 5.2.1'. Max 16 MB. Only available if core compiled with EMU_SUPPORT_PALM_OS5." + source_ref: "libretroBuildSystem/libretro.c:178-181" + + # --- Tungsten T3 / Palm OS 6.0 (requires EMU_SUPPORT_PALM_OS5) --- + - name: "palmos60-en-t3.rom" + system: palm-os + description: "Tungsten T3 ROM, Palm OS 6.0 English" + required: false + note: "Selected when core option is 'Tungsten T3/Palm OS 6.0'. Max 16 MB. Only available if core compiled with EMU_SUPPORT_PALM_OS5." + source_ref: "libretroBuildSystem/libretro.c:182-185" + + # --- MC68VZ328 bootloader --- + - name: "bootloader-dbvz.rom" + system: palm-os + description: "MC68VZ328 UART bootloader" + required: false + note: "Optional for m500/m515. Ignored for Tungsten T3. Loads from system directory." + source_ref: "libretroBuildSystem/libretro.c:766-782" + +platform_details: + palm_m5xx: + rom_size: 4194304 # 4 MB (M5XX_ROM_SIZE) + cpu: "MC68VZ328" + source_ref: "include/m5XXBus.h:23, src/emulator.c:191-212" + + tungsten_t3: + rom_size: 16777216 # 16 MB (TUNGSTEN_T3_ROM_SIZE) + cpu: "PXA260 (ARM)" + source_ref: "include/tungstenT3Bus.h:17, src/emulator.c:158-164"