From 99581d8abaa5853f700f1d1a4080d00441d47fa7 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 17 Mar 2026 19:39:19 +0100 Subject: [PATCH] feat: add 10 emulator profiles (batch 6) gpsp (GBA, open BIOS fallback), ecwolf (ecwolf.pk3), prboom (prboom.wad), x1 (Sharp X1, 5 files in xmil/), minivmac (MacII.ROM/MacIIx.ROM), theodore (Thomson, all embedded), crocods (CPC 6128, all embedded), vba_next (GBA, HLE fallback), same_cdi (CD-i, 3 MAME ZIPs + 2 undeclared), beetle_lynx (lynxboot.img) 71 total profiles. Cross-reference: 690 undeclared, 186 in repo. --- emulators/beetle_lynx.yml | 32 ++++++ emulators/crocods.yml | 59 ++++++++++ emulators/ecwolf.yml | 32 ++++++ emulators/gpsp.yml | 65 +++++++++++ emulators/minivmac.yml | 66 +++++++++++ emulators/prboom.yml | 47 ++++++++ emulators/same_cdi.yml | 232 ++++++++++++++++++++++++++++++++++++++ emulators/theodore.yml | 30 +++++ emulators/vba_next.yml | 69 ++++++++++++ emulators/x1.yml | 80 +++++++++++++ 10 files changed, 712 insertions(+) create mode 100644 emulators/beetle_lynx.yml create mode 100644 emulators/crocods.yml create mode 100644 emulators/ecwolf.yml create mode 100644 emulators/gpsp.yml create mode 100644 emulators/minivmac.yml create mode 100644 emulators/prboom.yml create mode 100644 emulators/same_cdi.yml create mode 100644 emulators/theodore.yml create mode 100644 emulators/vba_next.yml create mode 100644 emulators/x1.yml diff --git a/emulators/beetle_lynx.yml b/emulators/beetle_lynx.yml new file mode 100644 index 00000000..bb3d1b7d --- /dev/null +++ b/emulators/beetle_lynx.yml @@ -0,0 +1,32 @@ +emulator: Beetle Lynx (Mednafen Lynx) +type: libretro +source: "https://github.com/libretro/beetle-lynx-libretro" +cores: [mednafen_lynx] +systems: [atari-lynx] +verification: existence + +notes: > + Fork of Mednafen's Handy module for Atari Lynx emulation via libretro. + The core loads lynxboot.img from the system directory at game load time + (libretro.cpp:191). CRom constructor in rom.cpp reads exactly 512 bytes + from the file. If the file is missing or undersized, the ROM array is + filled with 0x88 (DEFAULT_ROM_CONTENTS) and the core continues without + error, but games will not boot correctly without the real boot ROM. + The cart database in cart.cpp identifies the BIOS by CRC32 0x0d973c9d + ("[BIOS] Atari Lynx (USA, Europe)", size 512). + No hash validation is performed on the BIOS at load time. + Core options: lynx_rot_screen (screen rotation), lynx_pix_format + (pixel format), lynx_force_60hz (force 60Hz refresh). + ROM extensions: .lnx, .lyx, .bll, .o + +files: + - name: "lynxboot.img" + description: "Atari Lynx Boot ROM" + region: "World" + required: true + size: 512 + sha1: "e4ed47fae31693e016b081c6bda48da5b70d7ccb" + md5: "fcd403db69f54290b51035d82f835e7b" + crc32: "0d973c9d" + source_ref: "libretro.cpp:191, rom.cpp:50-78, cart.cpp:67" + notes: "512-byte boot ROM. Core silently degrades without it but games will not run." diff --git a/emulators/crocods.yml b/emulators/crocods.yml new file mode 100644 index 00000000..998af1cd --- /dev/null +++ b/emulators/crocods.yml @@ -0,0 +1,59 @@ +emulator: CrocoDS +type: libretro +source: "https://github.com/libretro/libretro-crocods" +cores: + - crocods +systems: + - amstrad-cpc + +notes: | + CrocoDS is an Amstrad CPC 6128 emulator ported to libretro. Supports + .dsk, .sna, and .kcr file formats. + + All system ROMs are compiled directly into the core binary as C byte + arrays. No external BIOS files are required. + + Embedded ROMs (crocods-core/): + - cpc6128.bin.c: cpc6128_bin[32768] - CPC 6128 OS (16KB) + BASIC 1.1 (16KB) + - romdisc.bin.c: romdisc_bin[16384] - AMSDOS disk controller ROM (16KB) + + ROM initialization in InitMemCPC() (crocods-core/vga.c:185-200): + - ROMINF (lower ROM, 16KB): first half of cpc6128_bin (OS) + - ROMEXT[0] (upper ROM slot 0, 16KB): second half of cpc6128_bin (BASIC) + - ROMEXT[7] (upper ROM slot 7, 16KB): romdisc_bin (AMSDOS) + + Called from HardResetCPC() (crocods-core/platform.c:1009-1020) using + the extern byte arrays directly. No filesystem ROM loading exists in + the libretro path. + + A Multiface ROM loader exists (crocods-core/multiface.c:51-61) that + reads LocRomMulti via fopen(), but InitMultiface() is never called + from the libretro build or platform.c. Dead code in libretro context. + + The core does not request retro_system_directory or declare any + firmware entries in the .info file. need_fullpath is false. + + Only the CPC 6128 model is emulated (no CPC 464/664 selection). + +files: [] + +platform_details: + bios_mapping: + source_ref: "crocods-core/vga.c:185-200, crocods-core/platform.c:1009-1020" + notes: | + All ROMs are embedded. InitMemCPC() copies cpc6128_bin and romdisc_bin + into ROMINF and ROMEXT arrays via memcpy. No filesystem lookup occurs. + retro_set_environment() does not request system_directory. + + embedded_roms: + source_ref: "crocods-core/cpc6128.bin.c, crocods-core/romdisc.bin.c" + notes: | + 2 ROM sets embedded as C byte arrays: + cpc6128_bin (32KB) - CPC 6128 OS (lower 16KB) + BASIC 1.1 (upper 16KB) + romdisc_bin (16KB) - AMSDOS disk controller ROM, mapped to slot 7 + + model_rom_map: + source_ref: "crocods-core/vga.c:189-192" + notes: | + CPC 6128 only: OS in ROMINF, BASIC in ROMEXT[0], AMSDOS in ROMEXT[7] + emulator_patch_ROM() applies language patches to ROMINF after loading diff --git a/emulators/ecwolf.yml b/emulators/ecwolf.yml new file mode 100644 index 00000000..6dd57617 --- /dev/null +++ b/emulators/ecwolf.yml @@ -0,0 +1,32 @@ +emulator: ECWolf +type: libretro +source: "https://github.com/libretro/ecwolf" +cores: [ecwolf] +systems: [wolfenstein3d] +verification: md5 +notes: > + Wolfenstein 3D source port. Plays Wolf3D (wl6/wl1), Spear of Destiny (sod/sdm), + Super 3D Noah's Ark (n3d), and community pk3 mods. The core requires ecwolf.pk3 + in the system directory - this is the engine data package built from wadsrc/static/ + containing IWADINFO definitions, palettes, sprites, map configs, and lump remappers. + Game data files (vswap, gamemaps, vgagraph, audiot) are loaded from the content + directory, not the system directory. The core auto-detects the game variant by + scanning lump contents against IWADINFO MustContain rules. Spear of Destiny + mission packs (sd2/sd3) and Mac Wolfenstein variants are also supported. + Blake Stone and Rise of the Triad support is flagged as Preview. + The SelectGame path searches: content directory, system directory, BaseDataPaths + config, then platform-specific paths (Steam, GOG installs on desktop). + +files: + - name: "ecwolf.pk3" + description: "ECWolf engine data package" + required: true + md5: "c011b428819eea4a80b455c245a5a04d" + source_ref: "ecwolf_libretro.info:firmware0, version.h:MAIN_PK3, wl_iwad.cpp:SelectGame" + notes: > + Built from wadsrc/static/ via zipdir. Contains IWADINFO (game detection rules), + palettes (wolfpal, spearpal, blakepal, noahpal), map lump remappers (wl6map, + sodmap, etc.), DECORATE actor definitions, MAPINFO, SNDINFO, SNDSEQ, textures, + sprites, fonts, and localization strings. Without this file the core errors + with "Could not open ecwolf.pk3!". The md5 corresponds to the version shipped + with the current libretro buildbot release. diff --git a/emulators/gpsp.yml b/emulators/gpsp.yml new file mode 100644 index 00000000..d00c2e32 --- /dev/null +++ b/emulators/gpsp.yml @@ -0,0 +1,65 @@ +emulator: gpSP +type: libretro +source: "https://github.com/libretro/gpsp" +cores: + - gpsp +systems: + - nintendo-gba + +notes: | + gpSP is a Game Boy Advance emulator originally by Exophase, ported to + libretro. Historically it required the official GBA BIOS to run. Current + versions ship a built-in open-source BIOS (bios/open_gba_bios.bin) compiled + from bios/source/ that covers most games. + + The core option gpsp_bios controls BIOS selection: + auto (default) - try official gba_bios.bin, fall back to built-in + builtin - always use the built-in open-source BIOS + official - try gba_bios.bin, warn and fall back to built-in if missing + + A second option gpsp_boot_mode selects startup behavior: + game (default) - skip BIOS intro, boot directly into game + bios - run the BIOS boot animation before launching + + BIOS loading path (libretro/libretro.c:1093-1131): + 1. Resolve system directory (RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY) + 2. Append "/gba_bios.bin" + 3. load_bios() reads 0x4000 (16 KB) into bios_rom[] + 4. Sanity check: bios_rom[0] must be 0x18 (ARM branch opcode) + 5. On failure, memcpy open_gba_bios_rom[] as fallback + + The official BIOS improves compatibility for a few games that rely on + precise SWI behavior or BIOS checksum verification. The built-in BIOS + works for the vast majority of the GBA library. + +files: + # ------------------------------------------------------- + # Game Boy Advance - BIOS (optional, built-in fallback) + # ------------------------------------------------------- + - name: gba_bios.bin + system: nintendo-gba + required: false + size: 16384 # 16 KB (0x4000) + note: "Official GBA BIOS. Built-in open-source BIOS used as fallback. Real BIOS needed for full SWI accuracy and boot logo." + source_ref: "libretro/libretro.c:1111" + +platform_details: + gba: + bios_size: 16384 # 16 KB + hle_bios: true + source_ref: "libretro/libretro.c:1107-1131, bios/source/" + notes: | + The built-in BIOS (open_gba_bios_rom, 16 KB) is an open-source + reimplementation compiled from bios/source/. It implements most + SWI calls (SoftReset, RegisterRamReset, Halt, VBlankIntrWait, + arithmetic, decompression, sound, multiboot). + + Validation is minimal: load_bios() in gba_memory.c reads exactly + 0x4000 bytes. The libretro frontend checks bios_rom[0] == 0x18 + (ARM branch instruction at reset vector) to reject garbage files. + No hash or checksum verification is performed. + + The bios_type enum (main.h:56-61) defines three modes: + auto_detect - try official first, fall back to built-in + builtin_bios - skip file load entirely, use open_gba_bios_rom + official_bios - try file, warn on failure, still fall back diff --git a/emulators/minivmac.yml b/emulators/minivmac.yml new file mode 100644 index 00000000..5fa17b6a --- /dev/null +++ b/emulators/minivmac.yml @@ -0,0 +1,66 @@ +emulator: Mini vMac +type: libretro +source: "https://github.com/libretro/libretro-minivmac" +systems: [macintosh-ii] + +# Mini vMac is a Macintosh II emulator. The libretro port is hardcoded for +# Mac II emulation (CurEmMd = kEmMd_II) with 68020 CPU, FPU, ADB, VIA2, ASC. +# ROM is loaded from the RetroArch system directory. + +# ROM loading order (OSGLUERETRO.c LoadMacRom): +# 1. /MacIIx.ROM (tried first, same 256 KB size) +# 2. /MacII.ROM (defined as RomFileName in CNFGRAPI.h) +# 3. --rom command line arg (if provided) +# 4. ~/.gryphel/mnvm_rom/MacII.ROM +# 5. app parent directory +# 6. current directory + +# ROM size: kROM_Size = 0x00040000 = 262144 bytes (256 KB) +# ROM checksums defined in CNFGRAPI.h: +# kRomCheckSum1 = 0x9779D2C4 (Mac II v1) +# kRomCheckSum2 = 0x97221136 (Mac II v2) +# Note: DisableRomCheck = 1, so checksum validation is skipped at runtime +# (ROMEMDEV.c patches the ROM check jump). Any 256 KB Mac II ROM works. + +files: + # -- MacII.ROM (primary, required) -- + # Standard Macintosh II ROM image. This is the hardcoded RomFileName. + # The core reads exactly kROM_Size (262144) bytes from this file. + + - name: "MacII.ROM" + path: "MacII.ROM" + required: true + size: 262144 + source_ref: "minivmac/cfg/CNFGRAPI.h:32, minivmac/src/OSGLUERETRO.c:781" + note: > + Macintosh II ROM image (256 KB). The core loads this from the system + directory. Must be exactly 262144 bytes. ROM checksum verification is + disabled in the libretro build, so either Mac II ROM revision works. + + # -- MacIIx.ROM (alternative, optional) -- + # Tried before MacII.ROM in the loading sequence. The Mac IIx ROM is the + # same 256 KB size and is compatible with the Mac II emulation mode. + + - name: "MacIIx.ROM" + path: "MacIIx.ROM" + required: false + size: 262144 + source_ref: "minivmac/src/OSGLUERETRO.c:778" + note: > + Macintosh IIx ROM image (256 KB). Checked first in the ROM loading + sequence. If present, it takes priority over MacII.ROM. The Mac IIx + uses the same 68020-class architecture as the Mac II. + +notes: + emulation_target: > + The libretro build is configured exclusively for Macintosh II emulation + (kEmMd_II). Build options: 68020 CPU, FPU enabled, ADB keyboard/mouse, + VIA2, ASC sound chip. Screen: 640x480, 8-bit color depth. + disk_formats: > + Supported disk image formats: .dsk, .img, .zip, .hvf, .cmd + The core auto-inserts the loaded content as a floppy disk. + Supports up to NumDrives simultaneous disk images. + rom_checksum_note: > + DisableRomCheck is set to 1 in ROMEMDEV.c, meaning the core patches out + the ROM checksum verification at boot. This allows any valid Mac II era + ROM to work regardless of exact revision. diff --git a/emulators/prboom.yml b/emulators/prboom.yml new file mode 100644 index 00000000..74afb42d --- /dev/null +++ b/emulators/prboom.yml @@ -0,0 +1,47 @@ +emulator: PrBoom +type: libretro +source: "https://github.com/libretro/libretro-prboom" +systems: [doom] + +notes: | + PrBoom is a Doom source port based on MBF (Marine's Best Friend), itself + derived from Boom. The libretro port plays Doom, Doom II, Final Doom, + FreeDoom, and custom WADs/PWADs. + + The core requires prboom.wad, a small engine data WAD containing internal + resources: font glyphs, palette, colormaps, sine/tangent tables, gamma + tables, menu graphics, and a null sprite (TNT1A0). It is NOT a game WAD. + The file is generated at build time by the rdatawad tool from raw PPM + graphics and LMP lumps (see Makefile.prboomdata), but ships pre-built + in the repository root. + + Without prboom.wad the core falls back to hardcoded internal defaults + (d_main.c:1073-1074), so the file is technically optional but expected + for correct rendering of menus, HUD digits, and extended features. + + File search order (libretro.c I_FindFile, line 1743): + 1. WAD directory (same folder as the loaded game WAD) + 2. system/prboom/ subdirectory + 3. system/ directory directly + 4. Parent folders of WAD directory (recursive, if enabled) + + The core accepts .wad, .iwad, .pwad, and .lmp extensions. Game IWADs + it recognizes (d_main.c:133-145): doom2f.wad, doom2.wad, plutonia.wad, + tnt.wad, freedoom2.wad, doom.wad, doomu.wad, freedoom1.wad, + freedoom.wad, doom1.wad. + + The src/ directory contains a second, larger prboom.wad (228743 bytes, + md5 23afd6143cb1ffec99a46755f9209ea6) which is the upstream PrBoom + original. The root copy (143312 bytes) is the libretro-specific build. + +files: + - name: "prboom.wad" + system: doom + description: "PrBoom engine data WAD (fonts, palette, colormaps, tables, menu graphics)" + required: false + size: 143312 + md5: "72ae1b47820fcc93cc0df9c428d0face" + sha1: "5f4aed208301449c2e9514edfd325fe9dead76fa" + crc32: "a5751b99" + source_ref: "d_main.c:1069-1078 (PACKAGE .wad load), libretro.c:1743-1780 (I_FindFile search), config.h:46 (PACKAGE=prboom)" + notes: "Searched in system/prboom/ then system/. Falls back to internal defaults if missing, but menus and HUD may render incorrectly without it." diff --git a/emulators/same_cdi.yml b/emulators/same_cdi.yml new file mode 100644 index 00000000..f5455000 --- /dev/null +++ b/emulators/same_cdi.yml @@ -0,0 +1,232 @@ +emulator: SAME CDi +type: libretro +cores: [same_cdi, cdi2015] +source: "https://github.com/libretro/same_cdi" +systems: + - cdi + +notes: | + SAME CDi is a Single Arcade Machine Emulator fork of MAME libretro, stripped + down to just the Philips CD-i driver. The core hardcodes "cdimono1" as the + forced system (retro_init.cpp:86) and searches for MAME ROM ZIPs in: + /same_cdi/bios/ + + The ROM path (-rp) is built at retro_init.cpp:534 as: + ;/same_cdi/bios/ + + MAME expects each romset as a ZIP containing the individual ROM files listed + below. The ZIP filenames (cdimono1.zip, cdimono2.zip, cdibios.zip) match + the MAME driver names. Only cdimono1.zip is required for consumer CD-i games; + cdimono2.zip and cdibios.zip are optional (Mono-II and Quizard arcade). + + cdi2015 is an older MAME 2015-based CD-i core with the same BIOS layout. + + ROM definitions: src/mame/drivers/cdi.cpp lines 574-650. + System forced: src/osd/libretro/libretro-internal/retro_init.cpp:86. + BIOS path: src/osd/libretro/libretro-internal/retro_init.cpp:534. + Firmware list: same_cdi_libretro.info firmware0-2. + +files: + # ===================================================== + # cdimono1.zip - Philips CD-i Mono-I (PAL) - REQUIRED + # Contains main CPU BIOS + servo/slave MCU dumps + # ===================================================== + + # Main CPU BIOS (one of three, selected via MAME BIOS switch) + - name: "cdi200.rom" + zip: "cdimono1.zip" + system: cdi + region: [north-america] + required: true + size: 524288 # 0x80000 + crc32: "40c4e6b9" + sha1: "d961de803c89b3d1902d656ceb9ce7c02dccb40a" + note: "Magnavox CD-i 200 BIOS. Default BIOS for cdimono1." + source_ref: "src/mame/drivers/cdi.cpp:577" + + - name: "cdi220b.rom" + zip: "cdimono1.zip" + system: cdi + region: [europe] + required: true + size: 524288 # 0x80000 + crc32: "279683ca" + sha1: "53360a1f21ddac952e95306ced64186a3fc0b93e" + note: "Philips CD-i 220 F2 BIOS. Alternate BIOS for cdimono1." + source_ref: "src/mame/drivers/cdi.cpp:579" + + - name: "cdi220.rom" + zip: "cdimono1.zip" + system: cdi + region: [europe] + required: false + size: 524288 # 0x80000 + crc32: "584c0af8" + sha1: "5d757ab46b8c8fc36361555d978d7af768342d47" + note: "Philips CD-i 220 BIOS (alternate, does not boot). Marked non-working." + source_ref: "src/mame/drivers/cdi.cpp:581" + + # Servo MCU (MC68HC705C8A) - shared with cdi910 dump, BAD_DUMP + - name: "zx405037p__cdi_servo_2.1__b43t__llek9215.mc68hc705c8a_withtestrom.7201" + zip: "cdimono1.zip" + system: cdi + required: true + size: 8192 # 0x2000 + crc32: "7a3af407" + sha1: "fdf8d78d6a0df4a56b5b963d72eabd39fcec163f" + note: "Servo MCU 2.1, taken from cdi910 (BAD_DUMP, no Mono-I specific dump)." + source_ref: "src/mame/drivers/cdi.cpp:584" + + # Slave MCU (MC68HC705C8A) - shared with cdi910 dump, BAD_DUMP + - name: "zx405042p__cdi_slave_2.0__b43t__zzmk9213.mc68hc705c8a_withtestrom.7206" + zip: "cdimono1.zip" + system: cdi + required: true + size: 8192 # 0x2000 + crc32: "688cda63" + sha1: "56d0acd7caad51c7de703247cd6d842b36173079" + note: "Slave MCU 2.0, taken from cdi910 (BAD_DUMP, no Mono-I specific dump)." + source_ref: "src/mame/drivers/cdi.cpp:587" + + # ===================================================== + # cdimono2.zip - Philips CD-i Mono-II (NTSC) - OPTIONAL + # MACHINE_NOT_WORKING in MAME + # ===================================================== + + - name: "philips__cdi-220_ph3_r1.2__mb834200b-15__02f_aa__9402_z04.tc574200-le._1.7211" + zip: "cdimono2.zip" + system: cdi + required: false + size: 524288 # 0x80000 + crc32: "17d723e7" + sha1: "6c317a82e35d60ca5e7a74fc99f665055693169d" + note: "Mono-II main CPU BIOS. Philips CDI-220 PH3 R1.2." + source_ref: "src/mame/drivers/cdi.cpp:623" + + - name: "zc405351p__servo_cdi_4.1__0d67p__lluk9404.mc68hc705c8a.7490" + zip: "cdimono2.zip" + system: cdi + required: false + size: 8192 # 0x2000 + crc32: "2bc8e4e9" + sha1: "8cd052b532fc052d6b0077261c12f800e8655bb1" + note: "Mono-II servo MCU 4.1." + source_ref: "src/mame/drivers/cdi.cpp:626" + + - name: "zc405352p__slave_cdi_4.1__0d67p__lltr9403.mc68hc705c8a.7206" + zip: "cdimono2.zip" + system: cdi + required: false + size: 8192 # 0x2000 + crc32: "5b19da07" + sha1: "cf02d84977050c71e87a38f1249e83c43a93949b" + note: "Mono-II slave MCU 4.1." + source_ref: "src/mame/drivers/cdi.cpp:629" + + # ===================================================== + # cdibios.zip - CD-i BIOS for Quizard arcade - OPTIONAL + # Subset of cdimono1 ROMs + slave MCU, used by Quizard games + # ===================================================== + + # cdibios reuses cdi200.rom and cdi220b.rom (same hashes as cdimono1) + # plus the slave MCU. Listed here for completeness of the ZIP contents. + + - name: "cdi200.rom" + zip: "cdibios.zip" + system: cdi + required: false + size: 524288 # 0x80000 + crc32: "40c4e6b9" + sha1: "d961de803c89b3d1902d656ceb9ce7c02dccb40a" + note: "Magnavox CD-i 200 BIOS (same as cdimono1). For Quizard arcade." + source_ref: "src/mame/drivers/cdi.cpp:639" + + - name: "cdi220b.rom" + zip: "cdibios.zip" + system: cdi + required: false + size: 524288 # 0x80000 + crc32: "279683ca" + sha1: "53360a1f21ddac952e95306ced64186a3fc0b93e" + note: "Philips CD-i 220 F2 BIOS (same as cdimono1). For Quizard arcade." + source_ref: "src/mame/drivers/cdi.cpp:641" + + - name: "zx405042p__cdi_slave_2.0__b43t__zzmk9213.mc68hc705c8a_withtestrom.7206" + zip: "cdibios.zip" + system: cdi + required: false + size: 8192 # 0x2000 + crc32: "688cda63" + sha1: "56d0acd7caad51c7de703247cd6d842b36173079" + note: "Slave MCU 2.0 (BAD_DUMP, same as cdimono1). For Quizard arcade." + source_ref: "src/mame/drivers/cdi.cpp:645" + + # ===================================================== + # Additional MAME romsets (not in libretro .info firmware list) + # These are part of the MAME driver but not declared as + # required firmware by the libretro core. + # ===================================================== + + # cdi910 - CD-i 910-17P Mini-MMC (PAL) - MACHINE_NOT_WORKING + - name: "philips__cd-i_2.1__mb834200b-15__26b_aa__9224_z01.tc574200.7211" + zip: "cdi910.zip" + system: cdi + required: false + size: 524288 # 0x80000 + crc32: "4ae3bee3" + sha1: "9729b4ee3ce0c17172d062339c47b1ab822b222b" + note: "CD-i 910-17P Mini-MMC BIOS. Not listed in libretro firmware." + source_ref: "src/mame/drivers/cdi.cpp:594" + + - name: "cdi910.rom" + zip: "cdi910.zip" + system: cdi + required: false + size: 524288 # 0x80000 + crc32: "2f3048d2" + sha1: "11c4c3e602060518b52e77156345fa01f619e793" + note: "CD-i 910 alternate BIOS. Not listed in libretro firmware." + source_ref: "src/mame/drivers/cdi.cpp:596" + + # cdi490a - CD-i 490 - MACHINE_NOT_WORKING + - name: "cdi490a.rom" + zip: "cdi490a.zip" + system: cdi + required: false + size: 524288 # 0x80000 + crc32: "e2f200f6" + sha1: "c9bf3c4c7e4fe5cbec3fe3fc993c77a4522ca547" + note: "CD-i 490 BIOS. Not listed in libretro firmware." + source_ref: "src/mame/drivers/cdi.cpp:633" + + - name: "impega.rom" + zip: "cdi490a.zip" + system: cdi + required: false + size: 262144 # 0x40000 + crc32: "84d6f6aa" + sha1: "02526482a0851ea2a7b582d8afaa8ef14a8bd914" + note: "CD-i 490 MPEG audio decoder ROM." + source_ref: "src/mame/drivers/cdi.cpp:636" + + - name: "vmpega.rom" + zip: "cdi490a.zip" + system: cdi + required: false + size: 262144 # 0x40000 + crc32: "db264e8b" + sha1: "be407fbc102f1731a0862554855e963e5a47c17b" + note: "CD-i 490 MPEG video decoder ROM." + source_ref: "src/mame/drivers/cdi.cpp:637" + +platform_details: + cdi: + bios_path: "same_cdi/bios/" + forced_system: "cdimono1" + primary_zip: "cdimono1.zip" + optional_zips: ["cdimono2.zip", "cdibios.zip"] + mame_romsets: ["cdimono1", "cdimono2", "cdibios", "cdi910", "cdi490a"] + rom_path_flag: "-rp" + rom_search_path: ";/same_cdi/bios/" + supported_extensions: ["chd", "iso", "cue"] + source_ref: "retro_init.cpp:86,534 same_cdi_libretro.info" diff --git a/emulators/theodore.yml b/emulators/theodore.yml new file mode 100644 index 00000000..efef1ec5 --- /dev/null +++ b/emulators/theodore.yml @@ -0,0 +1,30 @@ +# Theodore - Thomson MO/TO computer emulator +# https://github.com/Zlika/theodore +# Emulates: TO7, TO7/70, TO8, TO8D, TO9, TO9+, MO5, MO6, PC128 (Olivetti Prodest) +# Based on Daniel Coulom's DCTO8D, DCTO9P, and DCMO5 emulators + +core_name: theodore +systems: + - Thomson MO5 + - Thomson MO6 + - Thomson TO7 + - Thomson TO7/70 + - Thomson TO8 + - Thomson TO8D + - Thomson TO9 + - Thomson TO9+ + - Olivetti Prodest PC128 + +bios_files: [] +# All system ROMs are embedded directly in the source code as C arrays: +# rom_to7.inc, rom_to770.inc, rom_to8.inc, rom_to8d.inc, +# rom_to9.inc, rom_to9p.inc, rom_mo5.inc, rom_mo6.inc, +# rom_pc128.inc, basic-1_memo7.inc, basic-128_memo7.inc +# No external BIOS or firmware files are required. + +notes: | + Theodore embeds all Thomson monitor ROMs and BASIC ROMs at compile time. + The core option "theodore_rom" selects the emulated model (Auto by default). + TO7 and TO7/70 auto-load the BASIC 1 cartridge when no cartridge is provided. + Supported file formats: fd, sap, k7, m7, m5, rom. + The core can run without any game loaded (SET_SUPPORT_NO_GAME = true). diff --git a/emulators/vba_next.yml b/emulators/vba_next.yml new file mode 100644 index 00000000..f4bd21d4 --- /dev/null +++ b/emulators/vba_next.yml @@ -0,0 +1,69 @@ +emulator: VBA-Next +type: libretro +source: "https://github.com/libretro/vba-next" +cores: + - vba_next +systems: + - nintendo-gba + +notes: | + VBA-Next is a Game Boy Advance emulator forked from VBA-M, optimized for + libretro. It includes a built-in HLE BIOS (myROM array in src/gba.cpp:8423) + that handles all standard SWI calls, so no external BIOS file is needed for + most games. + + BIOS loading is gated behind HAVE_HLE_BIOS (defined in build/Makefile.common) + and controlled by core option vbanext_bios (default: enabled). When enabled, + the libretro port looks for gba_bios.bin in RetroArch's system directory + (libretro/libretro.cpp:198-203). CPUInit() loads the file via utilLoad(), + validates it is exactly 0x4000 bytes (16 KB), and sets useBios = true + (src/gba.cpp:12413-12443). If loading fails or the option is off, the HLE + BIOS (myROM) is memcpy'd into the bios buffer instead. + + CPUIsGBABios() accepts extensions: .gba, .agb, .bin, .bios, .rom + (src/gba.cpp:8851-8873). + + When useBios is true and skipBios is false, execution starts at 0x00000000 + (real BIOS entry). Otherwise it jumps straight to 0x08000000 (ROM entry), + skipping the boot animation (src/gba.cpp:12657-12675). + + The HLE BIOS covers: SoftReset, RegisterRamReset, Halt, VBlankIntrWait, + Div, Sqrt, ArcTan, ArcTan2, CpuSet, CpuFastSet, GetBiosChecksum, + BgAffineSet, ObjAffineSet, BitUnPack, LZ77UnComp (WRAM/VRAM), + HuffUnComp, RLUnComp (WRAM/VRAM), Diff8bitUnFilter (WRAM/VRAM), + Diff16bitUnFilter, MidiKey2Freq, SndDriverJmpTableCopy + (src/gba.cpp:2369-2578). + + Some per-game overrides in gbaover[] (libretro/libretro.cpp:235) have a + useBios field, but all entries currently set it to 0 (no game forces BIOS). + +files: + # ------------------------------------------------------- + # Game Boy Advance - BIOS (optional, HLE fallback) + # ------------------------------------------------------- + - name: gba_bios.bin + system: nintendo-gba + required: false + size: 16384 # 16 KB (0x4000) + note: "GBA BIOS. Optional -- HLE replacement (myROM) handles all standard SWI calls. Real BIOS adds startup logo and may improve edge-case accuracy." + source_ref: "libretro/libretro.cpp:198-203, src/gba.cpp:12413-12443" + +platform_details: + gba: + bios_size: 16384 # 0x4000 + hle_bios: true + source_ref: "src/gba.cpp:8423 (myROM), src/gba.cpp:2369-2578 (SWI handlers)" + notes: | + BIOS buffer is always allocated at 0x4000 bytes (src/gba.cpp:8963). + If the real BIOS loads successfully (exactly 0x4000 bytes), useBios is + set to true and CPUReset starts at address 0x00000000 with IRQ disabled. + Otherwise myROM (built-in HLE stub) is copied in and execution starts + at 0x08000000 with standard register init. + + The core option vbanext_bios defaults to "enabled", so if gba_bios.bin + is present in the system directory it will be loaded automatically. + + BIOS reads at runtime go through the memory map (src/gba.cpp:792-1076). + Address range 0x0000-0x3FFF maps to the bios buffer. A biosProtected[4] + array at 0x00f029e1 is returned when reading outside the current PC + region, matching real GBA BIOS protection behavior. diff --git a/emulators/x1.yml b/emulators/x1.yml new file mode 100644 index 00000000..37b12331 --- /dev/null +++ b/emulators/x1.yml @@ -0,0 +1,80 @@ +emulator: "X Millennium" +type: libretro +source: "https://github.com/libretro/xmil-libretro" +cores: + - x1 +systems: + - sharp-x1 + +# X Millennium (XMIL) is a Sharp X1 series emulator by yui. The libretro port +# supports X1, X1 Turbo, and X1 TurboZ models via the "X1_ROMTYPE" core option +# (values: X1, TURBO, TURBOZ; default: X1 = ROM_TYPE 1). +# +# All system files go under: /xmil/ +# (libretro.c:597 builds the path as "/xmil") +# +# IPL ROM loading (memio.c:88-116): +# ROM_TYPE 0: uses built-in default IPL (575 bytes, basic boot stub from defipl.res) +# ROM_TYPE 1 (X1): loads xmil/IPLROM.X1 (32 KB) +# ROM_TYPE 2 (Turbo): loads xmil/IPLROM.X1T (32 KB) +# ROM_TYPE 3 (TurboZ): loads xmil/IPLROM.X1T (32 KB, same file as Turbo) +# If the file is missing, the core falls back to the built-in default IPL. +# +# Font loading (font.c:90-127, fontx1.c:70-123): +# font_load() calls x1fontread() which looks for font files using fontopen(). +# fontopen() resolves paths relative to the working directory (file_getcd()), +# which in libretro context is the xmil subdirectory. +# Built-in defaults (defrom_ank, defrom_txt) are used for basic ASCII rendering. +# External font ROMs add full Japanese character support. +# +# The .info file only lists IPLROM.X1 and IPLROM.X1T as required BIOS files. +# Font ROMs are optional -- the core renders basic text without them but Japanese +# kanji display requires the external font files. + +notes: | + Place all files in: /xmil/ + The core selects between IPLROM.X1 and IPLROM.X1T based on the "X1_ROMTYPE" + core option. A built-in fallback IPL exists but lacks full boot functionality. + Font files are optional; without them, kanji/JIS characters won't render. + +files: + # -- IPL ROMs -- + + - name: IPLROM.X1 + path: xmil/IPLROM.X1 + size: 32768 + md5: eeeea1cd29c6e0e8b094790ae969bfa7 + required: true + note: "X1 IPL ROM (32 KB). Loaded when ROM_TYPE=1 (X1 model). Listed in .info." + source_ref: "io/memio.c:82,96-103" + + - name: IPLROM.X1T + path: xmil/IPLROM.X1T + size: 32768 + md5: 851e4a5936f17d13f8c39a980cf00d77 + required: true + note: "X1 Turbo/TurboZ IPL ROM (32 KB). Loaded when ROM_TYPE=2 or 3. Listed in .info." + source_ref: "io/memio.c:83,97-99" + + # -- Font ROMs (optional, for Japanese text rendering) -- + + - name: FNT0808.X1 + path: xmil/FNT0808.X1 + size: 2048 + required: false + note: "8x8 ANK font ROM (2 KB). Provides half-width ASCII/kana characters." + source_ref: "font/fontdata.c:6, font/fontx1.c:79-87" + + - name: FNT0816.X1 + path: xmil/FNT0816.X1 + size: 4096 + required: false + note: "8x16 ANK font ROM (4 KB). Provides taller half-width characters for text mode." + source_ref: "font/fontdata.c:7, font/fontx1.c:89-103" + + - name: FNT1616.X1 + path: xmil/FNT1616.X1 + size: 306176 + required: false + note: "16x16 Kanji font ROM (~299 KB). Full JIS kanji character set for Japanese text." + source_ref: "font/fontdata.c:8, font/fontx1.c:105-120"