From ff82f64cb671ced02c6d147f29f93fadb764810e Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 17 Mar 2026 19:56:51 +0100 Subject: [PATCH] feat: complete all emulator profiles, 95 engines total Final batch: scummvm (55 files, MT-32/engine data/themes/shaders), gearcoleco (colecovision.rom), geargrafx (4 syscard variants), gearlynx (lynxboot.img), dosbox_core (MT-32 + BASS libs), geolith (Neo Geo FPGA, aes.zip/neogeo.zip), retrodream (DC boot+flash), noods (NDS, full HLE), freej2me (JAR), jollycv (coleco+creativision), fixgb (gbc_bios), numero (TI-83), smsplus (SMS/GG/CV), vircon32 95 profiles covering every libretro core with firmware requirements. Cross-reference: 803 undeclared files, 249 in repo, 554 to source. --- emulators/dosbox_core.yml | 171 +++++++++++++++ emulators/fixgb.yml | 42 ++++ emulators/freej2me.yml | 39 ++++ emulators/gearcoleco.yml | 56 +++++ emulators/geargrafx.yml | 128 +++++++++++ emulators/gearlynx.yml | 43 ++++ emulators/geolith.yml | 145 +++++++++++++ emulators/jollycv.yml | 79 +++++++ emulators/noods.yml | 54 +++++ emulators/numero.yml | 79 +++++++ emulators/retrodream.yml | 57 +++++ emulators/scummvm.yml | 445 ++++++++++++++++++++++++++++++++++++++ emulators/smsplus.yml | 81 +++++++ emulators/vircon32.yml | 80 +++++++ 14 files changed, 1499 insertions(+) create mode 100644 emulators/dosbox_core.yml create mode 100644 emulators/fixgb.yml create mode 100644 emulators/freej2me.yml create mode 100644 emulators/gearcoleco.yml create mode 100644 emulators/geargrafx.yml create mode 100644 emulators/gearlynx.yml create mode 100644 emulators/geolith.yml create mode 100644 emulators/jollycv.yml create mode 100644 emulators/noods.yml create mode 100644 emulators/numero.yml create mode 100644 emulators/retrodream.yml create mode 100644 emulators/scummvm.yml create mode 100644 emulators/smsplus.yml create mode 100644 emulators/vircon32.yml diff --git a/emulators/dosbox_core.yml b/emulators/dosbox_core.yml new file mode 100644 index 00000000..9b8593c9 --- /dev/null +++ b/emulators/dosbox_core.yml @@ -0,0 +1,171 @@ +emulator: DOSBox-core +type: libretro +source: "https://github.com/libretro/dosbox-core" +cores: [dosbox_core] +systems: [dos] +verification: sha1 +notes: > + No BIOS required. MT-32 and SoundFont support is optional for MIDI music. + Unlike DOSBox Pure, this core expects MT-32 ROMs with exact filenames + directly in the system directory (no recursive scan, no ZIP support). + The mt32.romdir config option is set to the system directory by the + libretro frontend. CM-32L is the default emulated hardware type. + FluidSynth support reads .sf2/.sf3/.dls/.gig from system/soundfonts/. + BASSMIDI support reads .sf2/.sfz from system/soundfonts/ but also + requires the BASS and BASSMIDI shared libraries (downloaded separately + from https://www.un4seen.com) placed in the system directory. + Uses bundled MUNT (mt32emu) for MT-32 emulation, bundled FluidSynth + for SF2 playback. BASSMIDI is optional and loaded at runtime via dlopen. + The .info file declares firmware_count=10 (4 ROMs + 6 BASS libs). + +files: + # -- MT-32 Control ROM -- + # The core only loads MT32_CONTROL.ROM (not versioned filenames). + # Any v1.x control ROM (64 KB) works. The .info references v1.07. + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v1.04" + required: false + size: 65536 + sha1: "5a5cb5a77d7d55ee69657c2f870416daed52dea7" + source_ref: "midi_mt32.cpp:55" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v1.05" + required: false + size: 65536 + sha1: "e17a3a6d265bf1fa150312061134293d2b58288c" + source_ref: "midi_mt32.cpp:55" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v1.06" + required: false + size: 65536 + sha1: "a553481f4e2794c10cfe597fef154eef0d8257de" + source_ref: "midi_mt32.cpp:55" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v1.07" + required: false + size: 65536 + sha1: "b083518fffb7f66b03c23b7eb4f868e62dc5a987" + source_ref: "midi_mt32.cpp:55, dosbox_core_libretro.info:firmware0" + notes: "version referenced in .info file (md5: 5626206284b22c2734f3e9efefcd2675)" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control BlueRidge" + required: false + size: 65536 + sha1: "7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92" + source_ref: "midi_mt32.cpp:55" + + # -- 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: "midi_mt32.cpp:55" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v2.04" + required: false + size: 131072 + sha1: "2c16432b6c73dd2a3947cba950a0f4c19d6180eb" + source_ref: "midi_mt32.cpp:55" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v2.06" + required: false + size: 131072 + sha1: "2869cf4c235d671668cfcb62415e2ce8323ad4ed" + source_ref: "midi_mt32.cpp:55" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v2.07" + required: false + size: 131072 + sha1: "47b52adefedaec475c925e54340e37673c11707c" + source_ref: "midi_mt32.cpp:55" + + # -- CM-32L / LAPC-I Control ROMs (64 KB) -- + # Loaded when mt32.type = "cm32l" (the default). + + - name: "CM32L_CONTROL.ROM" + description: "CM-32L/LAPC-I Control v1.00" + required: false + size: 65536 + sha1: "73683d585cd6948cc19547942ca0e14a0319456d" + source_ref: "midi_mt32.cpp:53" + + - name: "CM32L_CONTROL.ROM" + description: "CM-32L/LAPC-I Control v1.02" + required: false + size: 65536 + sha1: "a439fbb390da38cada95a7cbb1d6ca199cd66ef8" + source_ref: "midi_mt32.cpp:53, dosbox_core_libretro.info:firmware2" + notes: "version referenced in .info file (md5: bfff32b6144c1d706109accb6e6b1113)" + + # -- PCM ROMs -- + + - name: "MT32_PCM.ROM" + description: "MT-32 PCM ROM" + required: false + size: 524288 + sha1: "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252" + source_ref: "midi_mt32.cpp:66, dosbox_core_libretro.info:firmware1" + notes: "pairs with any MT-32 v1.x control ROM (md5: 89e42e386e82e0cacb4a2704a03706ca)" + + - name: "CM32L_PCM.ROM" + description: "CM-32L/CM-64/LAPC-I PCM ROM" + required: false + size: 1048576 + sha1: "289cc298ad532b702461bfc738009d9ebe8025ea" + source_ref: "midi_mt32.cpp:64, dosbox_core_libretro.info:firmware3" + notes: "pairs with MT-32 v2.x or CM-32L control ROMs (md5: 08cdcfa0ed93e9cb16afa76e6ac5f0a4)" + + # -- BASS shared libraries (BASSMIDI driver) -- + # Downloaded from https://www.un4seen.com, placed in system directory. + # Loaded at runtime via dlopen. Not redistributable ROMs. + + - name: "libbass.so" + description: "BASS audio library (Linux)" + required: false + source_ref: "midi_bassmidi.cpp:238, dosbox_core_libretro.info:firmware4" + notes: "proprietary library from un4seen.com, not a ROM" + + - name: "libbassmidi.so" + description: "BASSMIDI addon library (Linux)" + required: false + source_ref: "midi_bassmidi.cpp:239, dosbox_core_libretro.info:firmware5" + notes: "proprietary library from un4seen.com, not a ROM" + + - name: "bass.dll" + description: "BASS audio library (Windows)" + required: false + source_ref: "midi_bassmidi.cpp:232, dosbox_core_libretro.info:firmware6" + notes: "proprietary library from un4seen.com, not a ROM" + + - name: "bassmidi.dll" + description: "BASSMIDI addon library (Windows)" + required: false + source_ref: "midi_bassmidi.cpp:233, dosbox_core_libretro.info:firmware7" + notes: "proprietary library from un4seen.com, not a ROM" + + - name: "libbass.dylib" + description: "BASS audio library (macOS)" + required: false + source_ref: "midi_bassmidi.cpp:235, dosbox_core_libretro.info:firmware8" + notes: "proprietary library from un4seen.com, not a ROM" + + - name: "libbassmidi.dylib" + description: "BASSMIDI addon library (macOS)" + required: false + source_ref: "midi_bassmidi.cpp:236, dosbox_core_libretro.info:firmware9" + notes: "proprietary library from un4seen.com, not a ROM" + + # -- General MIDI SoundFont -- + # Placed in system/soundfonts/ directory. Core scans for .sf2/.sf3/.sfz/.dls/.gig. + # FluidSynth reads .sf2/.sf3/.dls/.gig; BASSMIDI reads .sf2/.sfz. + # No specific filename required - all found files appear in the core option dropdown. diff --git a/emulators/fixgb.yml b/emulators/fixgb.yml new file mode 100644 index 00000000..e4a58940 --- /dev/null +++ b/emulators/fixgb.yml @@ -0,0 +1,42 @@ +emulator: fixGB +type: libretro +source: "https://github.com/libretro/fixGB" +cores: + - fixgb +systems: + - nintendo-gbc + +notes: | + fixGB is a Game Boy / Game Boy Color emulator by FIX94, currently at + alpha v0.8.1. It supports .gb, .gbc, and .gbs (Game Boy Sound) files. + + The core optionally loads "gbc_bios.bin" (CGB boot ROM) from the + system directory. In the libretro port, doOpenCGBBootrom() in + libretro.c:246-254 resolves the path via + RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY + "/gbc_bios.bin". + + memInitCGBBootrom() in mem.c:567-586 validates the file: it must be + at least 0x900 (2304) bytes. If present, 0x900 bytes are read into + memCGBBootrom[] and cgbBootromEnabled is set to true. The boot ROM + plays the Game Boy Color startup animation before handing off to the + game. + + If the file is missing or too small, the core skips the boot sequence + and starts games directly. The BIOS is optional -- games run fine + without it. + + Despite the core name suggesting general Game Boy support, the only + BIOS file referenced is the GBC boot ROM. There is no DMG (original + Game Boy) boot ROM support in the source. + +files: + # --- GBC 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/libretro.c:246-254 (doOpenCGBBootrom), mem.c:567-586 (memInitCGBBootrom)" + notes: "Must be at least 0x900 (2304) bytes. Only the first 0x900 bytes are read. Enables cgbBootromEnabled flag for boot animation. Disabled via memDisableCGBBootrom() when register write occurs." diff --git a/emulators/freej2me.yml b/emulators/freej2me.yml new file mode 100644 index 00000000..5bce3736 --- /dev/null +++ b/emulators/freej2me.yml @@ -0,0 +1,39 @@ +emulator: FreeJ2ME +type: libretro +source: "https://github.com/hex007/freej2me" +cores: + - freej2me +systems: + - j2me + +notes: | + FreeJ2ME is a Java ME (J2ME) emulator for libretro. The native .so/.dll + core acts as a bridge that spawns a Java process running freej2me-lr.jar, + which handles all actual J2ME emulation. Communication between the C + frontend and Java backend happens over pipes (Linux) or named pipes + (Windows). + + The jar file is required: without it the core cannot start. It must be + placed directly in the system directory (not a subdirectory). The core + resolves it via RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY joined with + "freej2me-lr.jar" using fill_pathname_join(). + + A working Java runtime (JRE/JDK 8+) must be installed on the host + system. The core invokes "java -jar freej2me-lr.jar" with resolution, + rotation, phone type, FPS, and sound arguments passed via argv. + + freej2me-lr.jar is built from the project source via Apache Ant + (build.xml target "lr"). It is not a traditional BIOS dump but a + software component distributed with the emulator. + + The project also produces freej2me.jar (standalone AWT frontend) and + freej2me-sdl.jar (SDL2 frontend), but only freej2me-lr.jar is needed + for the libretro core. + +files: + - name: "freej2me-lr.jar" + system: j2me + description: "FreeJ2ME libretro Java application" + required: true + source_ref: "src/libretro/freej2me_libretro.c:485 (fill_pathname_join with javapath)" + notes: "Not a BIOS dump. This is the Java emulator itself, loaded by the native core at startup. Built from source via 'ant lr'. Must be in the system directory root." diff --git a/emulators/gearcoleco.yml b/emulators/gearcoleco.yml new file mode 100644 index 00000000..c9df5dd8 --- /dev/null +++ b/emulators/gearcoleco.yml @@ -0,0 +1,56 @@ +emulator: Gearcoleco +type: libretro +source: "https://github.com/drhelius/Gearcoleco" +cores: + - gearcoleco +systems: + - colecovision + +notes: | + Gearcoleco is a ColecoVision emulator by Ignacio Sanchez (drhelius). + The ColecoVision BIOS ROM is required to run games. Without it, the + core displays a static "no BIOS" placeholder image (kNoBiosImage from + no_bios.h) and games will not execute. + + The BIOS is loaded in load_bootroms() (libretro.cpp:293-305) from the + system directory. The core first tries "colecovision.rom", then falls + back to "coleco.rom" if the first file is not found. + + Memory.cpp:LoadBios() validates the file size must be exactly 8192 + bytes (0x2000). No hash check is performed by the core itself. + + On reset, the BIOS byte at offset 0x69 is patched to select region: + 0x3C for NTSC, 0x32 for PAL (Memory.cpp:184-187). + + The core also supports Super Game Module (SGM) expanded RAM but that + requires no additional BIOS files. + +files: + # --- ColecoVision BIOS (required) --- + - name: "colecovision.rom" + system: colecovision + description: "ColecoVision BIOS ROM" + required: true + size: 8192 + source_ref: "platforms/libretro/libretro.cpp:297 (load_bootroms)" + notes: "Primary filename. Loaded via Memory::LoadBios(), must be exactly 8192 bytes." + + - name: "coleco.rom" + system: colecovision + description: "ColecoVision BIOS ROM (legacy filename)" + required: false + size: 8192 + source_ref: "platforms/libretro/libretro.cpp:303 (load_bootroms fallback)" + notes: "Fallback filename tried when colecovision.rom is not found." + +platform_details: + colecovision: + bios_filename: "colecovision.rom" + bios_fallback: "coleco.rom" + bios_size: 8192 + source_ref: "src/Memory.cpp:228-258" + notes: | + LoadBios() reads the file as raw binary. Size must be exactly 0x2000 + (8192 bytes) or the load is rejected with a log message. The BIOS is + mapped at address 0x0000-0x1FFF in the ColecoVision memory map. On + reset, byte 0x69 is patched for NTSC/PAL region selection. diff --git a/emulators/geargrafx.yml b/emulators/geargrafx.yml new file mode 100644 index 00000000..9e009cf9 --- /dev/null +++ b/emulators/geargrafx.yml @@ -0,0 +1,128 @@ +emulator: Geargrafx +type: libretro +source: "https://github.com/drhelius/Geargrafx" +cores: + - geargrafx +systems: + - nec-pc-engine + - nec-supergrafx + - nec-pc-engine-cd + +notes: | + Geargrafx is a PC Engine / TurboGrafx-16 / SuperGrafx / CD-ROM emulator by + Ignacio Sanchez (drhelius). HuCard games (pce/sgx/hes) run without BIOS. + + CD-ROM games require a System Card BIOS loaded from the system directory. + The core option "geargrafx_cdrom_bios" selects which card image to use: + Auto (default, maps to syscard3.pce), System Card 1, System Card 2, + System Card 3, or Game Express. The load_bios() function in libretro.cpp + builds the path as "{system_directory}/{filename}" and calls + core->LoadBios(path, true) for the syscard, then always attempts to load + gexpress.pce as the Game Express BIOS via core->LoadBios(path, false). + + BIOS validation uses CRC32 against an internal game_db (game_db.h). + The LoadBios() function in media.cpp reads the file, strips a 512-byte + header if present, computes CRC32, and looks it up in k_game_database + entries flagged with GG_GAMEDB_BIOS_SYSCARD or GG_GAMEDB_BIOS_GAME_EXPRESS. + If the CRC32 is not found, the BIOS is marked as "Unknown" and invalid, + but loading still proceeds (the file is kept in memory). + + Expected BIOS sizes (from defines.h): + - System Card: GG_BIOS_SYSCARD_SIZE = 0x40000 (256 KB) + - Game Express: GG_BIOS_GAME_EXPRESS_SIZE = 0x8000 (32 KB) + + Game Express CD-ROM games are auto-detected via CRC32 lookup in game_db.h + (GG_GAMEDB_GAME_EXPRESS flag). When detected, the core uses the Game Express + BIOS instead of the System Card for ROM bank mapping (media.cpp:649). + + Arcade Card games are also detected from game_db.h and enable extra + 0x30000 bytes of Card RAM for Super CD-ROM mode. + + Unlike beetle_pce, this core does NOT have separate US syscard3u.pce or + syscard2u.pce options. The libretro frontend only references syscard1.pce, + syscard2.pce, syscard3.pce, and gexpress.pce. + +files: + # -- CD-ROM System Card 3 (Japan) - default -- + + - name: "syscard3.pce" + description: "Super CD-ROM System Card 3.0 (Japan)" + region: "NTSC-J" + required: true + source_ref: "libretro.cpp:453,471-473, game_db.h:50 CRC32=0x6D9A73EF" + notes: > + Default BIOS for CD-ROM games (cdrom_bios=0 or 3). Recommended for + most CD-ROM and Super CD-ROM titles. 256 KB expected size. + + # -- CD-ROM System Card 2 (Japan) -- + + - name: "syscard2.pce" + description: "CD-ROM System Card 2.0 (Japan)" + region: "NTSC-J" + required: false + source_ref: "libretro.cpp:452,462-463, game_db.h:48-49" + notes: > + cdrom_bios = 'System Card 2'. For older CD-ROM2 titles. game_db.h lists + two variants: v2.0 (CRC32=0x52520BC6) and v2.1 (CRC32=0x283B74E0). + + # -- CD-ROM System Card 1 (Japan) -- + + - name: "syscard1.pce" + description: "CD-ROM System Card 1.0 (Japan)" + region: "NTSC-J" + required: false + source_ref: "libretro.cpp:451,459-460, game_db.h:47 CRC32=0x3F9F95A4" + notes: > + cdrom_bios = 'System Card 1'. Very early CD-ROM2 games only. + + # -- TurboGrafx CD System Card 3 (US) -- + # Not directly selectable via core option, but game_db.h recognizes it. + + - name: "syscard3.pce" + sha1_note: "US variant" + description: "TurboGrafx CD Super System Card 3.0 (US)" + region: "NTSC-U" + required: false + source_ref: "game_db.h:52 CRC32=0x2B5B75FE" + notes: > + The core does not have a separate syscard3u.pce option like beetle_pce. + If using a US System Card 3, it must be named syscard3.pce and placed in + the system directory. The game_db.h CRC32 validation will recognize it. + + # -- TurboGrafx CD System Card 2 (US) -- + + - name: "syscard2.pce" + sha1_note: "US variant" + description: "TurboGrafx CD System Card 2.0 (US)" + region: "NTSC-U" + required: false + source_ref: "game_db.h:51 CRC32=0xFF2A5EC3" + notes: > + Same constraint as US System Card 3: must be named syscard2.pce. + Recognized by game_db.h CRC32 validation. + + # -- Game Express CD Card -- + + - name: "gexpress.pce" + description: "Game Express CD Card" + region: "NTSC-J" + required: false + source_ref: "libretro.cpp:454,468-469,481-482, game_db.h:53-54" + notes: > + Always loaded alongside the selected System Card BIOS (libretro.cpp:481). + Required for unlicensed Game Express CD-ROM titles (AV Tanjou, + Bishoujo Pachinko, etc). game_db.h lists two variants: + Blue Version (CRC32=0x51A12D90) and Green Version (CRC32=0x16AAF05A). + Expected size: 32 KB (0x8000). + +valid_bios_crc32: + syscard: + - { crc32: "3F9F95A4", name: "CD-ROM System Card 1.0 (J)" } + - { crc32: "52520BC6", name: "CD-ROM System Card 2.0 (J)" } + - { crc32: "283B74E0", name: "CD-ROM System Card 2.1 (J)" } + - { crc32: "6D9A73EF", name: "Super CD-ROM System 3.0 (J)" } + - { crc32: "FF2A5EC3", name: "TurboGrafx CD System Card 2.0 (USA)" } + - { crc32: "2B5B75FE", name: "TurboGrafx CD Super System 3.0 (USA)" } + game_express: + - { crc32: "51A12D90", name: "Game Express Card Blue Version (J)" } + - { crc32: "16AAF05A", name: "Game Express Card Green Version (J)" } diff --git a/emulators/gearlynx.yml b/emulators/gearlynx.yml new file mode 100644 index 00000000..65d433fb --- /dev/null +++ b/emulators/gearlynx.yml @@ -0,0 +1,43 @@ +emulator: Gearlynx +type: libretro +source: "https://github.com/drhelius/Gearlynx" +cores: [gearlynx] +systems: [atari-lynx] +verification: existence + +notes: | + Gearlynx is an Atari Lynx emulator by Ignacio Sanchez (drhelius). + The libretro core loads lynxboot.img from the system directory at + retro_load_game time (libretro.cpp:106-130, function load_bootroms). + Path is built as: system_directory + "/lynxboot.img", no subdirectory. + + LoadBios in media.cpp:274 reads exactly 512 bytes (GLYNX_BIOS_SIZE + = 0x200, defines.h:52). If the file size is not 0x200, the load is + rejected with BIOS_LOAD_INVALID_SIZE. After loading, bytes at offset + 0x1F8 and 0x1F9 are patched (RAM/MAPCTL registers), then CRC32 is + computed and compared against GLYNX_DB_BIOS_CRC (0x0D973C9D, + game_db.h:38). An invalid CRC triggers a warning log but the BIOS + is still marked as loaded (m_is_bios_loaded = true). + + Unlike Handy, Gearlynx has no HLE fallback. If the BIOS is not + loaded (IsBiosLoaded() returns false), RunToVBlank in + gearlynx_core_inline.h:31-37 renders a static "no bios" image + and returns false, refusing to emulate. The BIOS is required for + any ROM to run. Homebrew (.o, BS93 format) bypasses the normal + boot sequence via PrepareForHomebrew() but still requires the BIOS + to be loaded for the emulation loop to execute. + + ROM extensions: .lnx, .lyx, .o + Core options: none documented in the libretro port. + +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:106-130 (load_bootroms), media.cpp:274-329 (LoadBios), defines.h:52 (GLYNX_BIOS_SIZE=0x200), game_db.h:38 (GLYNX_DB_BIOS_CRC=0x0D973C9D), gearlynx_core_inline.h:33-37 (no-bios guard)" + notes: "512-byte boot ROM validated by CRC32 after load. Invalid CRC logs a warning but still works. Missing or wrong-size file blocks emulation entirely (no HLE fallback)." diff --git a/emulators/geolith.yml b/emulators/geolith.yml new file mode 100644 index 00000000..b35860bb --- /dev/null +++ b/emulators/geolith.yml @@ -0,0 +1,145 @@ +emulator: Geolith +type: libretro +source: "https://github.com/libretro/geolith-libretro" +systems: + - snk-neogeo-mvs + - snk-neogeo-aes + +notes: | + Geolith is a highly accurate Neo Geo AES and MVS emulator using .NEO format + ROMs only. BIOS files must be provided as MAME-format ZIP archives in the + system directory. The core selects which ZIP to open based on the + "geolith_system_type" core option (libretro/libretro.c:1017-1018): + - AES mode -> aes.zip + - MVS mode -> neogeo.zip + - Uni mode -> neogeo.zip (loads uni-bios_4_0.rom from it) + + Inside the ZIP, specific ROM files are extracted by filename + (src/geo.c:162-241): + 1. One 68K BIOS ROM, selected by system type + region: + - AES Japan: neo-po.bin + - AES other: neo-epo.bin + - MVS US: sp-u2.sp1 + - MVS Japan: japan-j3.bin + - MVS Asia: sp-45.sp1 + - MVS Europe: sp-s2.sp1 + - Universe: uni-bios_4_0.rom + 2. 000-lo.lo (zoom lookup table, always required) + 3. sfix.sfix (FIX layer tiles, required for MVS/Uni, not AES) + 4. sm1.sm1 (Z80 sound BIOS, required for MVS/Uni, not AES) + + The AES mode only needs the 68K BIOS + 000-lo.lo. MVS and Universe BIOS + modes additionally need sfix.sfix and sm1.sm1. + +files: + # ----------------------------------------------------------- + # neogeo.zip - MVS and Universe BIOS + # ----------------------------------------------------------- + + # MVS 68K BIOS ROMs (one required per region) + - name: "sp-u2.sp1" + archive: neogeo.zip + system: snk-neogeo-mvs + required: true + size: 131072 + crc32: "e72943de" + note: "MVS USA ver. 5 (2 slot) - default for US region" + source_ref: "src/geo.c:174" + + - name: "japan-j3.bin" + archive: neogeo.zip + system: snk-neogeo-mvs + required: false + size: 131072 + crc32: "dff6d41f" + note: "MVS Japan (J3) - default for JP region" + source_ref: "src/geo.c:177" + + - name: "sp-45.sp1" + archive: neogeo.zip + system: snk-neogeo-mvs + required: false + size: 524288 + crc32: "03cc9f6a" + note: "NEO-MVH MV1C (Asia) - default for AS region" + source_ref: "src/geo.c:179" + + - name: "sp-s2.sp1" + archive: neogeo.zip + system: snk-neogeo-mvs + required: false + size: 131072 + crc32: "9036d879" + note: "MVS Asia/Europe ver. 5 (1 slot) - default for EU region" + source_ref: "src/geo.c:183" + + # Universe BIOS (loaded from neogeo.zip when system type = uni) + - name: "uni-bios_4_0.rom" + archive: neogeo.zip + system: snk-neogeo-mvs + required: false + size: 131072 + crc32: "a7aab458" + note: "Universe BIOS ver. 4.0 - only version supported by Geolith" + source_ref: "src/geo.c:189" + + # Shared ROMs (required for MVS and Universe modes) + - name: "000-lo.lo" + archive: neogeo.zip + system: snk-neogeo-mvs + required: true + size: 131072 + crc32: "5a86cff2" + note: "Zoom lookup table (vertical shrink ROM)" + source_ref: "src/geo.c:207-208" + + - name: "sfix.sfix" + archive: neogeo.zip + system: snk-neogeo-mvs + required: true + size: 131072 + crc32: "c2ea0cfd" + note: "System FIX layer tiles (text layer)" + source_ref: "src/geo.c:218-219" + + - name: "sm1.sm1" + archive: neogeo.zip + system: snk-neogeo-mvs + required: true + size: 131072 + crc32: "94416d67" + note: "Z80 sound BIOS" + source_ref: "src/geo.c:229-230" + + # ----------------------------------------------------------- + # aes.zip - AES (Home Console) + # ----------------------------------------------------------- + + # AES 68K BIOS ROMs (one required per region) + - name: "neo-epo.bin" + archive: aes.zip + system: snk-neogeo-aes + required: true + size: 131072 + crc32: "d27a71f1" + note: "AES Asia/US/EU - default for non-JP regions" + source_ref: "src/geo.c:168" + + - name: "neo-po.bin" + archive: aes.zip + system: snk-neogeo-aes + required: false + size: 131072 + crc32: "16d0c132" + note: "AES Japan - default for JP region" + source_ref: "src/geo.c:167-168" + + # Shared ROM (always required for AES) + - name: "000-lo.lo" + archive: aes.zip + system: snk-neogeo-aes + required: true + size: 131072 + crc32: "5a86cff2" + note: "Zoom lookup table (same ROM as in neogeo.zip)" + source_ref: "src/geo.c:207-208" diff --git a/emulators/jollycv.yml b/emulators/jollycv.yml new file mode 100644 index 00000000..8820ffb4 --- /dev/null +++ b/emulators/jollycv.yml @@ -0,0 +1,79 @@ +emulator: JollyCV +type: libretro +source: "https://github.com/libretro/jollycv" +cores: + - jollycv +systems: + - colecovision + - creativision + - myvision + +notes: | + JollyCV is a multi-system emulator by Rupert Carmichael supporting + ColecoVision (with Super Game Module), CreatiVision, and My Vision. + + BIOS handling depends on the detected system type (set via core option + or auto-detected from ROM database via jcv_process_hash/jcv_get_dbflags): + + - ColecoVision (JCV_SYS_COLECO): loads "coleco.rom" from system dir. + BIOS is mapped at 0x0000-0x1FFF. Size must be exactly 8192 bytes + (SIZE_CVBIOS = SIZE_8K = 0x2000). Load fails if size mismatches. + Without the BIOS, ColecoVision games will not run (load returns false). + + - CreatiVision (JCV_SYS_CRVISION): loads "bioscv.rom" from system dir. + BIOS is mapped at 0xF800-0xFFFF. Size must be exactly 2048 bytes + (SIZE_CRVBIOS = SIZE_2K = 0x800). Without the BIOS, CreatiVision + games will not run. + + - My Vision (JCV_SYS_MYVISION): no BIOS required. + + The libretro port constructs paths via snprintf("%s%c%s", sysdir, pss, + filename) in libretro.c:699-711. jcv_bios_load_file() opens the file, + reads it fully, then delegates to jcv_coleco_bios_load() or + jcv_crvision_bios_load() which validate size before copying. + + ColecoVision cartridge header bytes at offset 0x0000-0x0001 control + boot behavior: 0xAA55 shows the BIOS title screen, 0x55AA jumps + directly to the game code vector. + + The core includes a built-in ROM database with MD5 hashes (gamedb.h) + for game-specific flags, but this is for game compatibility, not BIOS + verification. + +files: + # --- ColecoVision BIOS (required for CV games) --- + - name: "coleco.rom" + system: colecovision + description: "ColecoVision BIOS ROM" + required: true + size: 8192 + md5: "2c66f5911e5b42b8ebe113403548eee7" + sha1: "4aa1d9b48f39b68bb17b3d6997b74850c6089dc3" + source_ref: "libretro/libretro.c:701, src/jcv_coleco.c:402-406" + notes: "Mapped at 0x0000-0x1FFF. Replaced by SGM lower RAM when Super Game Module is active. Must be exactly 8192 bytes." + + # --- CreatiVision BIOS (required for CV games) --- + - name: "bioscv.rom" + system: creativision + description: "VTech CreatiVision BIOS ROM" + required: true + size: 2048 + source_ref: "libretro/libretro.c:711, src/jcv_crvision.c:315-318" + notes: "Mapped at 0xF800-0xFFFF. Must be exactly 2048 bytes." + +platform_details: + colecovision: + bios_filename: "coleco.rom" + bios_size: 8192 + memory_map: "0x0000-0x1FFF" + source_ref: "src/jcv_coleco.c:269-281" + + creativision: + bios_filename: "bioscv.rom" + bios_size: 2048 + memory_map: "0xF800-0xFFFF" + source_ref: "src/jcv_crvision.c:315-337, 441" + + myvision: + bios_required: false + notes: "No BIOS needed. My Vision games run without any system ROM." diff --git a/emulators/noods.yml b/emulators/noods.yml new file mode 100644 index 00000000..29b73c1d --- /dev/null +++ b/emulators/noods.yml @@ -0,0 +1,54 @@ +emulator: NooDS +type: libretro +source: "https://github.com/Hydr8gon/NooDS" +cores: [noods] +systems: [nintendo-ds, nintendo-gba] + +notes: | + NooDS includes full HLE BIOS for ARM9, ARM7 and GBA SWI routines, making + all BIOS files optional when direct boot is enabled (default). HLE tables + cover SWI 0x00-0x20 for each processor (hle_bios.cpp:24-62). When BIOS + files are missing, a special opcode (0xFF at offset 3) is written for + interrupt return and the HLE handler is activated (memory.cpp:130-169). + Firmware is auto-generated (128KB non-bootable) if not provided, with + default WiFi config, touch calibration and user settings (spi.cpp:90-160). + Native BIOS+firmware required only for firmware boot (non-direct-boot mode). + ARM9 BIOS read: 0x1000 bytes (4 KB), ARM7 BIOS read: 0x4000 bytes (16 KB), + GBA BIOS read: 0x4000 bytes (16 KB). Firmware bootable threshold: >128 KB + (spi.cpp:87). DSi mode supported but uses same BIOS files. + Config: noods.ini keys bios9Path, bios7Path, firmwarePath, gbaBiosPath. + +files: + - name: "bios9.bin" + system: nintendo-ds + description: "ARM9 BIOS" + required: false + size: 4096 + md5: "a392174eb3e572fed6447e956bde4b25" + source_ref: "src/memory.cpp:130-142, src/memory.h:73" + notes: "HLE fallback for all SWI calls; native needed for firmware boot and logo verification (copyBiosLogo)" + + - name: "bios7.bin" + system: nintendo-ds + description: "ARM7 BIOS" + required: false + size: 16384 + md5: "df692a80a5b1bc90728bc3dfc76cd948" + source_ref: "src/memory.cpp:144-156, src/memory.h:74" + notes: "HLE fallback for all SWI calls; native needed for firmware boot" + + - name: "firmware.bin" + system: nintendo-ds + description: "NDS firmware image" + required: false + source_ref: "src/spi.cpp:62-160, src/settings.cpp:42" + notes: "Auto-generated 128KB non-bootable firmware as fallback; native dump (>128KB) needed for firmware boot" + + - name: "gba_bios.bin" + system: nintendo-gba + description: "GBA BIOS" + required: false + size: 16384 + md5: "a860e8c0b6d573d191e4ec7db1b1e4f6" + source_ref: "src/memory.cpp:158-169, src/memory.h:75, src/core.cpp:244-252" + notes: "HLE fallback via swiTableGba; native BIOS disables HLE and enables real GBA boot (core.cpp:244-247)" diff --git a/emulators/numero.yml b/emulators/numero.yml new file mode 100644 index 00000000..7c2d5171 --- /dev/null +++ b/emulators/numero.yml @@ -0,0 +1,79 @@ +emulator: Numero +type: libretro +source: "https://github.com/nbarkhina/numero" +cores: + - numero +systems: + - ti-83 + +notes: | + Numero is a TI-83 family calculator emulator for libretro, based on the + Wabbitemu emulator. Supports TI-83, TI-83 Plus and TI-83 Silver Edition. + + A calculator ROM dump is required to run. The core searches for ROM files + in the system directory root with a fixed priority order + (libretronew.cpp:575-594): + + 1. ti83se.rom (TI-83 Silver Edition, recommended -- largest storage) + 2. ti83plus.rom (TI-83 Plus) + 3. ti83.rom (TI-83) + + The first file found wins. file_present_in_system() checks existence only + (libretronew.cpp:451-472), then rom_load() loads it (libretronew.cpp:608). + + There is no fallback or built-in ROM. If none of the three files are found, + the core starts without a BIOS and shows a blank screen with a status + message listing the expected filenames (libretronew.cpp:1034-1041). + + The core supports no-content launch (RETRO_ENVIRONMENT_SET_SUPPORT_NO_GAME + is set to true, libretronew.cpp:555-556). Content files are .8xp/.8xk/.8xg + calculator programs loaded on top of the running ROM. + + The emulator auto-saves calculator state every 10 seconds to preserve RAM + contents (the TI-83 has no persistent storage beyond battery-backed RAM). + +files: + - name: "ti83se.rom" + system: ti-83 + description: "TI-83 Silver Edition ROM dump" + required: false + source_ref: "libretronew.cpp:576-578" + notes: "Checked first. Recommended by the author for largest storage capacity." + + - name: "ti83plus.rom" + system: ti-83 + description: "TI-83 Plus ROM dump" + required: false + source_ref: "libretronew.cpp:583-585" + notes: "Checked second, used if ti83se.rom is missing." + + - name: "ti83.rom" + system: ti-83 + description: "TI-83 ROM dump" + required: false + source_ref: "libretronew.cpp:591-593" + notes: "Checked last. Original TI-83 (non-Plus) ROM." + +platform_details: + bios_search: + source_ref: "libretronew.cpp:451-472, 575-608" + notes: | + file_present_in_system() opens a read handle via libretro VFS to + test file existence. The search is sequential: ti83se.rom first, + then ti83plus.rom, then ti83.rom. Only one ROM is loaded. + + rom_loading: + source_ref: "src/Interface/calc.cpp (rom_load)" + notes: | + rom_load() detects the calculator model from the ROM image header + and initializes the appropriate hardware (83, 83+, 83SE). Each + model gets its own progress/save directory via setProgressDir(). + + content_loading: + formats: "8xp, 8xk, 8xg" + source_ref: "libretronew.cpp:483, 769" + notes: | + Calculator programs (.8xp), apps (.8xk) and groups (.8xg) are + loaded into the running calculator via the sendfile mechanism, + simulating the link cable transfer. Multiple programs can be + loaded sequentially onto the same ROM session. diff --git a/emulators/retrodream.yml b/emulators/retrodream.yml new file mode 100644 index 00000000..02cd0943 --- /dev/null +++ b/emulators/retrodream.yml @@ -0,0 +1,57 @@ +emulator: RetroDream +type: libretro +source: "https://github.com/libretro/redream-next" +systems: + - sega-dreamcast + +notes: | + Fork of the final open-source redream release (pre-relicense). Experimental + core with no HLE BIOS -- real BIOS files are required to boot games. + Flycast is recommended over this core for actual gameplay. + + The libretro core sets appdir to the RetroArch system directory + (src/host/retro_host.c:216-217). boot.bin and flash.bin are loaded + directly from appdir (src/guest/rom/boot.c:17, src/guest/rom/flash.c:30). + + The .info file declares paths as dc/boot.bin and dc/flash.bin, which means + RetroArch resolves them under {system_dir}/dc/. + + boot.bin is validated against four known MD5 hashes at load time + (src/guest/rom/boot.c:25-30). If validation fails, the core logs a warning + but still attempts to run via HLE syscall hooks (bios.c:440-447). + + flash.bin is read/write -- the core saves modified flash data back to disk + on shutdown (src/guest/rom/flash.c:197-199). + + Boot ROM size: 2 MB (0x200000). Flash ROM size: 128 KB (0x20000). + +files: + - name: "boot.bin" + system: sega-dreamcast + path: "dc/boot.bin" + required: true + size: 2097152 # 2 MB (0x200000) + md5: + - e10c53c2f8b90bab96ead2d368858623 # original US/EU BIOS + - a5c6a00818f97c5e3e91569ee22416dc # Chinese BIOS + - 37c921eb47532cae8fb70e5d987ce91c # Japanese BIOS + - f2cd29d09f3e29984bcea22ab2e006fe # revised BIOS without MIL-CD + note: "Dreamcast boot ROM. Validated against known MD5 hashes at load." + source_ref: "src/guest/rom/boot.c:12-80" + + - name: "flash.bin" + system: sega-dreamcast + path: "dc/flash.bin" + required: true + size: 131072 # 128 KB (0x20000) + md5: + - 0a93f7940c455905bea6e392dfde92a4 + note: "Dreamcast flash memory (date, time, language). Written back on shutdown." + source_ref: "src/guest/rom/flash.c:25-35" + +platform_details: + dreamcast: + bios_size: 2097152 # 2 MB + flash_size: 131072 # 128 KB + hle_available: false + source_ref: "src/guest/rom/boot.c, src/guest/rom/flash.c" diff --git a/emulators/scummvm.yml b/emulators/scummvm.yml new file mode 100644 index 00000000..0c14e9bd --- /dev/null +++ b/emulators/scummvm.yml @@ -0,0 +1,445 @@ +emulator: ScummVM +type: libretro +source: "https://github.com/libretro/scummvm" +systems: [scummvm] + +# ScummVM is a multi-engine point-and-click adventure game interpreter. +# The libretro port uses a specific directory layout under the RetroArch +# system directory: +# +# /scummvm/ - main ScummVM subdirectory +# /scummvm/extra/ - engine data files, soundfonts, shaders +# /scummvm/theme/ - GUI themes and related assets +# +# These paths are defined in Makefile.common: +# SCUMMVM_SYSTEM_SUBDIR = scummvm +# SCUMMVM_EXTRA_SUBDIR = extra +# SCUMMVM_THEME_SUBDIR = theme +# +# The bundled scummvm.zip release artifact contains the full directory +# tree pre-built. Extracting it into / is the easiest setup. +# +# MT-32/CM-32L ROM files go in scummvm/extra/ and are loaded by +# audio/softsynth/mt32.cpp. The core tries CM-32L first, then MT-32. +# These are NOT bundled (proprietary). Everything else is open-source +# data shipped with ScummVM releases. + +# ----- scummvm.ini (config, auto-created) ----- +# Stored at /scummvm.ini. Created by the core on first run. +# Not listed here since it's not a distributable data file. + +files: + # ================================================================ + # MT-32 / CM-32L ROM files (proprietary, not bundled) + # Loaded from the extra path by audio/softsynth/mt32.cpp + # CM-32L is tried first, falls back to MT-32. + # ================================================================ + + - name: "MT32_CONTROL.ROM" + path: "scummvm/extra/MT32_CONTROL.ROM" + required: false + size: 65536 + source_ref: "audio/softsynth/mt32.cpp:298,581" + note: > + Roland MT-32 control ROM. Required for MT-32 music emulation in games + that use MT-32 MIDI (e.g. Monkey Island, Indiana Jones). Not bundled + with ScummVM. Must be paired with MT32_PCM.ROM. + + - name: "MT32_PCM.ROM" + path: "scummvm/extra/MT32_PCM.ROM" + required: false + size: 524288 + source_ref: "audio/softsynth/mt32.cpp:298,581" + note: > + Roland MT-32 PCM ROM. Contains the sample data for MT-32 emulation. + Must be paired with MT32_CONTROL.ROM. + + - name: "CM32L_CONTROL.ROM" + path: "scummvm/extra/CM32L_CONTROL.ROM" + required: false + size: 65536 + source_ref: "audio/softsynth/mt32.cpp:293,582" + note: > + Roland CM-32L control ROM. Preferred over MT-32 ROMs when both are + present. The CM-32L is a rack-mount version of the MT-32 with extra + sound effects used by some LucasArts and Sierra games. + + - name: "CM32L_PCM.ROM" + path: "scummvm/extra/CM32L_PCM.ROM" + required: false + size: 1048576 + source_ref: "audio/softsynth/mt32.cpp:293,582" + note: > + Roland CM-32L PCM ROM. Contains sample data for CM-32L emulation. + Must be paired with CM32L_CONTROL.ROM. + + # ================================================================ + # SoundFont (bundled with ScummVM releases) + # Default filename defined in libretro-defs.h:32 + # ================================================================ + + - name: "Roland_SC-55.sf2" + path: "scummvm/extra/Roland_SC-55.sf2" + required: false + source_ref: "libretro-defs.h:32, libretro-os-utils.cpp:196" + note: > + Roland SC-55 SoundFont for General MIDI playback. This is the default + soundfont (DEFAULT_SOUNDFONT_FILENAME). Bundled in official ScummVM + releases. Used as fallback when no MT-32 ROMs are available. + + # ================================================================ + # GUI themes - placed in scummvm/theme/ + # Listed in dists/scummvm.rc + # ================================================================ + + - name: "scummmodern.zip" + path: "scummvm/theme/scummmodern.zip" + required: false + source_ref: "dists/scummvm.rc:24" + note: "Modern GUI theme for ScummVM launcher." + + - name: "scummclassic.zip" + path: "scummvm/theme/scummclassic.zip" + required: false + source_ref: "dists/scummvm.rc:23" + note: "Classic GUI theme for ScummVM launcher." + + - name: "scummremastered.zip" + path: "scummvm/theme/scummremastered.zip" + required: false + source_ref: "dists/scummvm.rc:25" + note: "Remastered GUI theme for ScummVM launcher." + + - name: "residualvm.zip" + path: "scummvm/theme/residualvm.zip" + required: false + source_ref: "dists/scummvm.rc:26" + note: "ResidualVM theme for 3D adventure games (Grim Fandango, Myst III)." + + - name: "gui-icons.dat" + path: "scummvm/theme/gui-icons.dat" + required: false + source_ref: "dists/scummvm.rc:27" + note: "GUI icon pack used by the ScummVM launcher interface." + + - name: "shaders.dat" + path: "scummvm/theme/shaders.dat" + required: false + source_ref: "dists/scummvm.rc:28" + note: "Compiled shader pack for the GUI rendering pipeline." + + - name: "translations.dat" + path: "scummvm/theme/translations.dat" + required: false + source_ref: "dists/scummvm.rc:43" + note: "GUI translation strings for ScummVM launcher localization." + + # ================================================================ + # Core engine data - placed in scummvm/extra/ + # Listed in dists/engine-data/engine_data_core.mk (always included) + # ================================================================ + + - name: "achievements.dat" + path: "scummvm/extra/achievements.dat" + required: false + source_ref: "engine_data_core.mk" + note: "Achievement definitions for supported games." + + - name: "classicmacfonts.dat" + path: "scummvm/extra/classicmacfonts.dat" + required: false + source_ref: "engine_data_core.mk" + note: "Classic Macintosh bitmap fonts for Mac game rendering." + + - name: "encoding.dat" + path: "scummvm/extra/encoding.dat" + required: false + source_ref: "engine_data_core.mk" + note: "Character encoding tables for text rendering across languages." + + - name: "helpdialog.zip" + path: "scummvm/extra/helpdialog.zip" + required: false + source_ref: "engine_data_core.mk" + note: "Help dialog assets for the in-game help system." + + - name: "macgui.dat" + path: "scummvm/extra/macgui.dat" + required: false + source_ref: "engine_data_core.mk" + note: "Macintosh GUI widget data for Mac-style game interfaces." + + # ================================================================ + # Per-engine data files - placed in scummvm/extra/ + # Listed in dists/engine-data/engine_data.mk (conditionally included) + # ================================================================ + + - name: "access.dat" + path: "scummvm/extra/access.dat" + required: false + source_ref: "engine_data.mk (ENABLE_ACCESS)" + note: "Engine data for Access Software games (e.g. Amazon, Martian Memorandum)." + + - name: "bagel.dat" + path: "scummvm/extra/bagel.dat" + required: false + source_ref: "engine_data.mk (ENABLE_BAGEL)" + note: "Engine data for Bagel engine games." + + - name: "cryo.dat" + path: "scummvm/extra/cryo.dat" + required: false + source_ref: "engine_data.mk (ENABLE_CRYO)" + note: "Engine data for Cryo Interactive games (e.g. Dune, Lost Eden)." + + - name: "cryomni3d.dat" + path: "scummvm/extra/cryomni3d.dat" + required: false + source_ref: "engine_data.mk (ENABLE_CRYOMNI3D)" + note: "Engine data for CryOmni3D games (Versailles 1685)." + + - name: "darkseed.dat" + path: "scummvm/extra/darkseed.dat" + required: false + source_ref: "engine_data.mk (ENABLE_DARKSEED)" + note: "Engine data for Dark Seed (H.R. Giger adventure game)." + + - name: "drascula.dat" + path: "scummvm/extra/drascula.dat" + required: false + source_ref: "engine_data.mk (ENABLE_DRASCULA)" + note: "Engine data for Drascula: The Vampire Strikes Back." + + - name: "freescape.dat" + path: "scummvm/extra/freescape.dat" + required: false + source_ref: "engine_data.mk (ENABLE_FREESCAPE)" + note: "Engine data for Freescape games (Driller, Dark Side, Total Eclipse)." + + - name: "got.aud" + path: "scummvm/extra/got.aud" + required: false + source_ref: "engine_data.mk (ENABLE_GOT)" + note: "Audio data for Game of Thrones engine." + + - name: "got.gfx" + path: "scummvm/extra/got.gfx" + required: false + source_ref: "engine_data.mk (ENABLE_GOT)" + note: "Graphics data for Game of Thrones engine." + + - name: "hadesch_translations.dat" + path: "scummvm/extra/hadesch_translations.dat" + required: false + source_ref: "engine_data.mk (ENABLE_HADESCH)" + note: "Translation data for Hades Challenge." + + - name: "hugo.dat" + path: "scummvm/extra/hugo.dat" + required: false + source_ref: "engine_data.mk (ENABLE_HUGO)" + note: "Engine data for Hugo's House of Horrors trilogy." + + - name: "kyra.dat" + path: "scummvm/extra/kyra.dat" + required: false + source_ref: "engine_data.mk (ENABLE_KYRA)" + note: "Engine data for Kyrandia series (Legend of Kyrandia, Hand of Fate, Malcolm's Revenge)." + + - name: "lure.dat" + path: "scummvm/extra/lure.dat" + required: false + source_ref: "engine_data.mk (ENABLE_LURE)" + note: "Engine data for Lure of the Temptress." + + - name: "macventure.dat" + path: "scummvm/extra/macventure.dat" + required: false + source_ref: "engine_data.mk (ENABLE_MACVENTURE)" + note: "Engine data for MacVenture games (Shadowgate, Deja Vu, Uninvited)." + + - name: "mm.dat" + path: "scummvm/extra/mm.dat" + required: false + source_ref: "engine_data.mk (ENABLE_MM)" + note: "Engine data for Might and Magic engine." + + - name: "mort.dat" + path: "scummvm/extra/mort.dat" + required: false + source_ref: "engine_data.mk (ENABLE_MORTEVIELLE)" + note: "Engine data for Mortville Manor." + + - name: "myst3.dat" + path: "scummvm/extra/myst3.dat" + required: false + source_ref: "engine_data.mk (ENABLE_MYST3)" + note: "Engine data for Myst III: Exile." + + - name: "nancy.dat" + path: "scummvm/extra/nancy.dat" + required: false + source_ref: "engine_data.mk (ENABLE_NANCY)" + note: "Engine data for Nancy Drew adventure games." + + - name: "neverhood.dat" + path: "scummvm/extra/neverhood.dat" + required: false + source_ref: "engine_data.mk (ENABLE_NEVERHOOD)" + note: "Engine data for The Neverhood." + + - name: "prince_translation.dat" + path: "scummvm/extra/prince_translation.dat" + required: false + source_ref: "engine_data.mk (ENABLE_PRINCE)" + note: "Translation data for The Prince and the Coward." + + - name: "queen.tbl" + path: "scummvm/extra/queen.tbl" + required: false + source_ref: "engine_data.mk (ENABLE_QUEEN)" + note: "Resource table for Flight of the Amazon Queen." + + - name: "sky.cpt" + path: "scummvm/extra/sky.cpt" + required: false + source_ref: "engine_data.mk (ENABLE_SKY)" + note: "Compact table for Beneath a Steel Sky." + + - name: "supernova.dat" + path: "scummvm/extra/supernova.dat" + required: false + source_ref: "engine_data.mk (ENABLE_SUPERNOVA)" + note: "Engine data for Mission Supernova." + + - name: "teenagent.dat" + path: "scummvm/extra/teenagent.dat" + required: false + source_ref: "engine_data.mk (ENABLE_TEENAGENT)" + note: "Engine data for Teenagent." + + - name: "titanic.dat" + path: "scummvm/extra/titanic.dat" + required: false + source_ref: "engine_data.mk (ENABLE_TITANIC)" + note: "Engine data for Starship Titanic." + + - name: "tony.dat" + path: "scummvm/extra/tony.dat" + required: false + source_ref: "engine_data.mk (ENABLE_TONY)" + note: "Engine data for Tony Tough and the Night of Roasted Moths." + + - name: "toon.dat" + path: "scummvm/extra/toon.dat" + required: false + source_ref: "engine_data.mk (ENABLE_TOON)" + note: "Engine data for Toonstruck." + + - name: "ultima.dat" + path: "scummvm/extra/ultima.dat" + required: false + source_ref: "engine_data.mk (ENABLE_ULTIMA)" + note: "Engine data for Ultima series (Ultima IV-VIII, Savage Empire, Martian Dreams)." + + - name: "ultima8.dat" + path: "scummvm/extra/ultima8.dat" + required: false + source_ref: "engine_data.mk (ENABLE_ULTIMA)" + note: "Engine data specific to Ultima VIII: Pagan." + + - name: "wintermute.zip" + path: "scummvm/extra/wintermute.zip" + required: false + source_ref: "engine_data.mk (ENABLE_WINTERMUTE)" + note: "Engine data for Wintermute engine games." + + - name: "fonts.dat" + path: "scummvm/extra/fonts.dat" + required: false + source_ref: "engine_data.mk (USE_FREETYPE2)" + note: "FreeType2 font data for text rendering." + + - name: "fonts-cjk.dat" + path: "scummvm/extra/fonts-cjk.dat" + required: false + source_ref: "engine_data_big.mk (USE_FREETYPE2)" + note: "CJK (Chinese/Japanese/Korean) font data. Large file, only for systems with enough memory." + + - name: "fonts-imgui.dat" + path: "scummvm/extra/fonts-imgui.dat" + required: false + source_ref: "engine_data.mk (USE_IMGUI)" + note: "ImGui font data for debug overlay rendering." + + - name: "grim-patch.lab" + path: "scummvm/extra/grim-patch.lab" + required: false + source_ref: "engine_data.mk (ENABLE_GRIM)" + note: "Patch data for Grim Fandango." + + - name: "monkey4-patch.m4b" + path: "scummvm/extra/monkey4-patch.m4b" + required: false + source_ref: "engine_data.mk (ENABLE_MONKEY4)" + note: "Patch data for Escape from Monkey Island." + + # ================================================================ + # AGI engine dictionary + # ================================================================ + + - name: "pred.dic" + path: "scummvm/extra/pred.dic" + required: false + source_ref: "engine_data.mk (ENABLE_AGI)" + note: "Predictive text dictionary for AGI engine text input (King's Quest, Space Quest, etc)." + + # ================================================================ + # Virtual keyboard pack + # ================================================================ + + - name: "vkeybd_default.zip" + path: "scummvm/extra/vkeybd_default.zip" + required: false + source_ref: "bundle_datafiles.sh (hardcoded addition)" + note: "Default virtual keyboard layout. Added to the extra path by the build script." + + # ================================================================ + # Shaders - placed in scummvm/extra/shaders/ + # Grim Fandango, Escape from Monkey Island, Myst III, The Longest + # Journey (Stark), Wintermute 3D, Freescape, HPL1 (Penumbra), + # Playground3D test engine. Listed in dists/scummvm.rc. + # Individual shader files are NOT listed here since they are + # bundled in shaders.dat for the theme path and as individual + # files in the extra/shaders/ directory. The build bundles them + # automatically via bundle_datafiles.sh. + # ================================================================ + +notes: + directory_layout: > + The libretro core expects: /scummvm/extra/ for engine data and + soundfonts, /scummvm/theme/ for GUI themes. The bundled + scummvm.zip release contains the full tree and can be extracted + directly into the system directory. Individual shader files go in + /scummvm/extra/shaders/. + mt32_emulation: > + MT-32 emulation requires either MT32_CONTROL.ROM + MT32_PCM.ROM or + CM32L_CONTROL.ROM + CM32L_PCM.ROM in the extra directory. These are + proprietary Roland ROM dumps, not shipped with ScummVM. CM-32L ROMs + are preferred when both sets are present. Without these, games that + use MT-32 MIDI fall back to General MIDI with the Roland SC-55 + soundfont. + scummvm_zip: > + Official ScummVM libretro releases include scummvm.zip which bundles + all themes, engine data, shaders, and the SC-55 soundfont. This + single file extracted to / provides a complete setup minus + the proprietary MT-32/CM-32L ROMs. + config_file: > + ScummVM stores its configuration in /scummvm.ini. This file + is auto-created on first launch and stores game entries, paths, and + user preferences. Not a distributable data file. + shaders: > + OpenGL shaders for 3D engines (Grim Fandango, Myst III, The Longest + Journey, Penumbra, Wintermute 3D, Freescape) are placed as individual + .vertex/.fragment files in /scummvm/extra/shaders/. There are + roughly 130 shader files across all engines. diff --git a/emulators/smsplus.yml b/emulators/smsplus.yml new file mode 100644 index 00000000..fcc20990 --- /dev/null +++ b/emulators/smsplus.yml @@ -0,0 +1,81 @@ +emulator: SMS Plus GX +type: libretro +source: "https://github.com/libretro/smsplus-gx" +cores: + - smsplus +systems: + - sega-master-system + - sega-game-gear + - colecovision + - sega-sg1000 + +notes: | + SMS Plus GX is a Sega Master System / Game Gear emulator with additional + support for ColecoVision, SG-1000 and Sord M5 via TMS9918 VDP emulation. + + BIOS loading happens in bios_init() (smsplus_libretro.c:203-252). + Two BIOS files are supported: + + 1. bios.sms -- Sega Master System boot ROM. Optional. Loaded for all + console types. A core option "smsplus_sms_bios" (default: disabled) + controls whether it is used. When set to "auto" and the file exists, + bios.enabled is set and the SMS boot sequence plays before games. + + 2. BIOS.col -- ColecoVision BIOS. Required for ColecoVision ROMs only. + Loaded into coleco.rom (0x2000 bytes = 8 KB). Without it, ColecoVision + games will not start and the core logs an error. The filename is + case-sensitive (uppercase BIOS, lowercase .col). + + Both files are read from the system directory root (no subdirectory). + Path is built as: system_dir + "/" + filename (smsplus_libretro.c:211,234). + + Console type is auto-detected from ROM file extension: + .col -> CONSOLE_COLECO + .sg -> CONSOLE_SG1000 + Or forced via the "smsplus_hardware" core option. + +files: + - name: "bios.sms" + system: sega-master-system + description: "Sega Master System boot ROM" + required: false + source_ref: "smsplus_libretro.c:211-229" + notes: | + Loaded into bios.rom (up to 1 MB allocated). Only active when the + core option smsplus_sms_bios is set to "auto". Displays the Sega + Master System startup screen before game execution. + + - name: "BIOS.col" + system: colecovision + description: "ColecoVision BIOS ROM" + required: true + size: 8192 + source_ref: "smsplus_libretro.c:232-248" + notes: | + Required for ColecoVision games. Read as 0x2000 (8192) raw bytes + into coleco.rom. Without this file, retro_load_game() returns false + when loading .col files. Filename is case-sensitive on Linux. + +platform_details: + bios_mapping: + sms: + target: "bios.rom buffer, mapped via slot system" + source_ref: "smsplus_libretro.c:208-229, source/memz80.c" + notes: | + When bios.enabled has both bits set (file present + option enabled), + the BIOS ROM is paged into the Z80 address space at startup. The + BIOS executes the boot animation, then hands off to the cartridge. + coleco: + target: "coleco.rom, mapped at 0x0000-0x1FFF" + source_ref: "smsplus_libretro.c:245, source/memz80.c" + notes: | + The ColecoVision BIOS provides the interrupt handler, I/O routines + and startup code. Mapped into the first 8 KB of Z80 address space. + + console_detection: + source_ref: "smsplus_libretro.c:605-609, source/loadrom.c:402" + notes: | + File extension .col forces CONSOLE_COLECO with MAPPER_NONE. + Extension .sg forces CONSOLE_SG1000. + The core option smsplus_hardware can override to: master system, + master system II, game gear, game gear (sms compatibility), coleco. diff --git a/emulators/vircon32.yml b/emulators/vircon32.yml new file mode 100644 index 00000000..9c063a76 --- /dev/null +++ b/emulators/vircon32.yml @@ -0,0 +1,80 @@ +emulator: Vircon32 +type: libretro +source: "https://github.com/vircon32/vircon32-libretro" +cores: + - vircon32 +systems: + - vircon32 + +notes: | + Vircon32 is a libretro core for the Vircon32 fantasy console, a 32-bit + virtual game console with fixed hardware specs (60 fps, 640x360, 16 + sound channels, up to 4 gamepads). + + The Standard BIOS v1.2 is embedded directly into the core binary as a + C header (embedded/StandardBios.h), generated from Assets/StandardBios.v32 + at build time. The core never strictly requires an external BIOS file. + + BIOS loading logic (libretro.cpp:416-429): + 1. Check if system_dir/Vircon32Bios.v32 exists on disk + 2. If found, load it via Console.LoadBiosFile() (external override) + 3. If not found, load the embedded BIOS via LoadEmbeddedBios() + + This runs inside context_reset() (libretro.cpp:473-474), which is called + whenever the OpenGL context is (re)created. + + The BIOS file format is a V32 ROM with a specific signature + (ROMFileFormat::BiosSignature). It must contain exactly 1 texture and + 1 sound. The loader validates the signature, file structure, and version + compatibility before loading program ROM, video ROM and audio ROM + (V32Console.cpp:259-431). + + The external BIOS file allows users to replace the boot animation with + a custom one. Game compatibility is not affected by BIOS choice. + +files: + - name: "Vircon32Bios.v32" + system: vircon32 + description: "Vircon32 console BIOS (custom override)" + required: false + size: 1073060 + md5: "73f04397cbb2dafcf2047b19a856153a" + sha1: "67ddbcd018f03ed74b6e013074d92cc5f1f51c80" + source_ref: "libretro.cpp:423-426" + notes: | + Optional external BIOS placed in the system directory root. + If present, overrides the embedded Standard BIOS v1.2. + The hashes above correspond to the Standard BIOS v1.2 bundled + in Assets/StandardBios.v32 of the source repo. Custom BIOSes + will have different hashes but must follow the V32 BIOS format. + +platform_details: + embedded_bios: + version: "Standard BIOS v1.2" + source_ref: "libretro.cpp:28, Assets/StandardBios.v32" + file_size: 1073060 + md5: "73f04397cbb2dafcf2047b19a856153a" + sha1: "67ddbcd018f03ed74b6e013074d92cc5f1f51c80" + notes: | + The standard BIOS is compiled into the core binary as + embedded_StandardBios[] via a generated header file. It provides + the boot animation (Vircon32 logo + startup sound). LoadEmbeddedBios() + writes the raw bytes into a stringstream and passes it to + Console.LoadBiosData(). + + bios_format: + source_ref: "VirconDefinitions/FileFormats.hpp, V32Console.cpp:259-431" + notes: | + A V32 BIOS ROM file must have: + - BiosSignature in the header (distinct from CartridgeSignature) + - Exactly 1 texture (boot screen graphics) + - Exactly 1 sound (boot sound) + - Program ROM, Video ROM and Audio ROM in sequential layout + The loader validates all of this before accepting the file. + + cartridge_format: + extensions: "v32" + source_ref: "V32Console.cpp:468-696" + notes: | + Cartridges use CartridgeSignature with up to 256 textures and + 1024 sounds. Program ROM can be up to 128M words (512 MB).