diff --git a/emulators/dreamm.yml b/emulators/dreamm.yml new file mode 100644 index 00000000..b58a9f2f --- /dev/null +++ b/emulators/dreamm.yml @@ -0,0 +1,592 @@ +emulator: DREAMM +type: standalone +core_classification: other +source: "https://dreamm.aarongiles.com/" +upstream: "https://dreamm.aarongiles.com/" +profiled_date: "2026-08-08" +core_version: "4.0" +display_name: "LucasArts (DREAMM)" +cores: + - dreamm +systems: + - dos + - ibm-pc + - tandy-1000 + - fmtowns +mode: standalone + +notes: | + Closed-source emulator by Aaron Giles for LucasArts, Lucasfilm Games and + Lucas Learning titles, shipped as a single executable for Windows, macOS and + Linux on x64 and ARM64. The game database is compiled in: 67 definitions + covering 1013 variants, keyed on machine = pc, fmtowns or tandy and + osenv = dos, windows or fmtowns. Windows titles run on a reimplemented Win16 + and Win32 layer carried inside the executable. The game directory is passed + on the command line and the title is detected from its contents. + ref: DREAMM 4.0 linux-x64, appended zip game/*.dreamm + + Support files live in the SDL preference path for organisation + "Aaron Giles" and application "DREAMM": + %APPDATA%\Aaron Giles\DREAMM on Windows, + ~/Library/Application Support/Aaron Giles/DREAMM on macOS, + $XDG_DATA_HOME/Aaron Giles/DREAMM on Linux. Paths below are relative to that + directory. Startup writes config.json and creates install, gamedelta, + screenshots, logs and sounddata. + ref: SDL_GetPrefPath; strace of DREAMM 4.0 linux-x64 with a clean HOME + + Audio hardware is set per game and per variant: speaker, cms, adlib, sb16, + tandy, mt32 and gmidi. MT-32 and General MIDI output can go to an external + MIDI device, to the OPL MIDI generator or to a SoundFont, so no ROM file is + needed to play any title. ROMs add the two hardware synthesiser options. + ref: game/*.dreamm audiohw; "Expected one of 'speaker', 'cms', 'adlib', + 'sb16', 'mt32', or 'gmidi' in audiohw" + + MT-32 and CM-32L are emulated by a bundled munt build, unpacked at runtime + to sounddata/mt32emu-dreamm.so and driven through mt32emu_get_service_i. + Twelve ROM sets are declared in a table of twelve 64-byte records holding + display name, id, control ROM full image, control chips A and B, PCM full + image and PCM low and high halves: MT-32 v1.04, v1.05, v1.06, v1.07, Blue + Ridge Enhanced, v2.03, v2.04, v2.06, v2.07, CM-32L v1.00, CM-32L v1.02 and + CM-32LN v1.00. A set is offered once a control ROM is present as the full + image or as both chips, and a PCM ROM is present as the full image or as + both halves. The CM-32L sets name cm32l_pcm.rom as the full image, + mt32_pcm_l.rom as the low half and cm32l_pcm_h.rom as the high half. munt + identifies each file by size then SHA1 before opening the synth. + ref: set table 0x23db4a8, id lookup 0x164d050, availability 0x164d2a8; + munt ROMInfo.cpp:206-214 ROMInfo::getROMInfo + + The SC-55 is emulated by the Nuked SC-55 CLAP plug-in, unpacked to + sounddata/Nuked-SC55.clap, which reads one model directory under + Nuked-SC55-Resources/ROMs. Five models are probed at startup: SC-55 v1.00, + v1.20, v1.21, v2.00 and SC-55mk2 v1.01. The plug-in identifies a set by + hashing the directory contents, so its own loader does not depend on the + file names. + ref: strace of DREAMM 4.0 linux-x64; Nuked-SC55-CLAP nuked_sc55.cpp:145-212 + GetRomBasePaths and Init, rom_loader.cpp:31-80 DetectRomsetsByHash + + Both families install by dropping files on the Manage Sound Fonts & ROMs + screen, or by copying them into sounddata by hand. A dropped file is matched + against a 51-entry manifest of {crc32, size, name} sorted by name: one path + resolves a file by name and checks its size then its CRC32, the other maps a + size and CRC32 back to the destination paths listed below. The manifest + sizes agree with the bundled munt ROM table. mt32_ctrl_2_03.rom is named by + the v2.03 set but has no manifest entry, so it loads from sounddata and + cannot be installed by drag and drop. + ref: manifest 0x23daf78, name match 0x16456a0, reverse lookup 0x1645880; + "To install Sound Fonts (.sf2 files) or ROMs for Roland MIDI emulation, + drop them onto this screen." + + SoundFonts are read from sounddata as well: the directory is scanned at + startup and every .sf2 found becomes a MIDI output option for both MT-32 and + GMIDI. No name and no hash is compiled in and the file keeps the name it + arrived with, so none is listed below. + ref: sounddata scan; "Error loading soundfont '{}': {}", "Font file '{}' + seems to be an MT-32 set, not compatible with GMIDI" + + Everything else the emulator reads is appended to the executable and + unpacked at runtime: the game definitions and their icons, the copy + protection artwork, gamecontrollerdb.txt, the shaders, the UI fonts and + images, the two synthesiser plug-ins, and the Win16 and Win32 system files, + fonts and sounds. + ref: appended zip, 488 entries + +files: + # -- Roland MT-32 and CM-32L, sounddata/mt32emu -- + # A set needs one control ROM and one PCM ROM, each supplied as the full + # image or as the two chip dumps. + - name: mt32_ctrl_1_04.rom + path: "sounddata/mt32emu/mt32_ctrl_1_04.rom" + description: "Roland MT-32 v1.04 control ROM" + required: false + size: 65536 + crc32: "4c91fa96" + sha1: "5a5cb5a77d7d55ee69657c2f870416daed52dea7" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23dafc8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: mt32_ctrl_1_04_a.rom + path: "sounddata/mt32emu/mt32_ctrl_1_04_a.rom" + description: "Roland MT-32 v1.04 control ROM, chip A" + required: false + size: 32768 + crc32: "a93b65f2" + sha1: "9cd4858014c4e8a9dff96053f784bfaac1092a2e" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23dafd8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: mt32_ctrl_1_04_b.rom + path: "sounddata/mt32emu/mt32_ctrl_1_04_b.rom" + description: "Roland MT-32 v1.04 control ROM, chip B" + required: false + size: 32768 + crc32: "b5ee2192" + sha1: "fe8db469b5bfeb37edb269fd47e3ce6d91014652" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23dafe8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: mt32_ctrl_1_05.rom + path: "sounddata/mt32emu/mt32_ctrl_1_05.rom" + description: "Roland MT-32 v1.05 control ROM" + required: false + size: 65536 + crc32: "e6bb2b77" + sha1: "e17a3a6d265bf1fa150312061134293d2b58288c" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23daff8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: mt32_ctrl_1_05_a.rom + path: "sounddata/mt32emu/mt32_ctrl_1_05_a.rom" + description: "Roland MT-32 v1.05 control ROM, chip A" + required: false + size: 32768 + crc32: "3281216c" + sha1: "57a09d80d2f7ca5b9734edbe9645e6e700f83701" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db008, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: mt32_ctrl_1_05_b.rom + path: "sounddata/mt32emu/mt32_ctrl_1_05_b.rom" + description: "Roland MT-32 v1.05 control ROM, chip B" + required: false + size: 32768 + crc32: "e06d8020" + sha1: "52e3c6666db9ef962591a8ee99be0cde17f3a6b6" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db018, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: mt32_ctrl_1_06.rom + path: "sounddata/mt32emu/mt32_ctrl_1_06.rom" + description: "Roland MT-32 v1.06 control ROM" + required: false + size: 65536 + crc32: "d63319e8" + sha1: "a553481f4e2794c10cfe597fef154eef0d8257de" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db028, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: mt32_ctrl_1_06_a.rom + path: "sounddata/mt32emu/mt32_ctrl_1_06_a.rom" + description: "Roland MT-32 v1.06 control ROM, chip A" + required: false + size: 32768 + crc32: "29369ae1" + sha1: "cc83bf23cee533097fb4c7e2c116e43b50ebacc8" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db038, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: mt32_ctrl_1_06_b.rom + path: "sounddata/mt32emu/mt32_ctrl_1_06_b.rom" + description: "Roland MT-32 v1.06 control ROM, chip B" + required: false + size: 32768 + crc32: "4d495d98" + sha1: "bf4f15666bc46679579498386704893b630c1171" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db048, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: mt32_ctrl_1_07.rom + path: "sounddata/mt32emu/mt32_ctrl_1_07.rom" + description: "Roland MT-32 v1.07 control ROM" + required: false + size: 65536 + crc32: "a7c1531b" + sha1: "b083518fffb7f66b03c23b7eb4f868e62dc5a987" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db058, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: mt32_ctrl_1_07_a.rom + path: "sounddata/mt32emu/mt32_ctrl_1_07_a.rom" + description: "Roland MT-32 v1.07 control ROM, chip A" + required: false + size: 32768 + crc32: "67fd8968" + sha1: "13f06b38f0d9e0fc050b6503ab777bb938603260" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db068, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: mt32_ctrl_1_07_b.rom + path: "sounddata/mt32emu/mt32_ctrl_1_07_b.rom" + description: "Roland MT-32 v1.07 control ROM, chip B" + required: false + size: 32768 + crc32: "60f45882" + sha1: "c55e165487d71fa88bd8c5e9c083bc456c1a89aa" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db078, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: mt32_ctrl_bluer.rom + path: "sounddata/mt32emu/mt32_ctrl_bluer.rom" + description: "Roland MT-32 Blue Ridge Enhanced control ROM" + required: false + size: 65536 + crc32: "627b9a51" + sha1: "7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db0b8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: mt32_ctrl_bluer_a.rom + path: "sounddata/mt32emu/mt32_ctrl_bluer_a.rom" + description: "Roland MT-32 Blue Ridge Enhanced control ROM, chip A" + required: false + size: 32768 + crc32: "d75fc3d9" + sha1: "11a6ae5d8b6ee328b371af7f1e40b82125aa6b4d" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db0c8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: mt32_ctrl_bluer_b.rom + path: "sounddata/mt32emu/mt32_ctrl_bluer_b.rom" + description: "Roland MT-32 Blue Ridge Enhanced control ROM, chip B" + required: false + size: 32768 + crc32: "5816476f" + sha1: "e0934320d7cbb5edfaa29e0d01ae835ef620085b" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db0d8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: mt32_ctrl_2_03.rom + path: "sounddata/mt32emu/mt32_ctrl_2_03.rom" + description: "Roland MT-32 v2.03 control ROM" + required: false + size: 131072 + sha1: "5837064c9df4741a55f7c4d8787ac158dff2d3ce" + validation: [size, sha1] + source_ref: "DREAMM 4.0 linux-x64: set table 0x23db5a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: mt32_ctrl_2_04.rom + path: "sounddata/mt32emu/mt32_ctrl_2_04.rom" + description: "Roland MT-32 v2.04 control ROM" + required: false + size: 131072 + crc32: "59a49d5c" + sha1: "2c16432b6c73dd2a3947cba950a0f4c19d6180eb" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db088, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: mt32_ctrl_2_06.rom + path: "sounddata/mt32emu/mt32_ctrl_2_06.rom" + description: "Roland MT-32 v2.06 control ROM" + required: false + size: 131072 + crc32: "94815415" + sha1: "2869cf4c235d671668cfcb62415e2ce8323ad4ed" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db098, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: mt32_ctrl_2_07.rom + path: "sounddata/mt32emu/mt32_ctrl_2_07.rom" + description: "Roland MT-32 v2.07 control ROM" + required: false + size: 131072 + crc32: "a016b607" + sha1: "47b52adefedaec475c925e54340e37673c11707c" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db0a8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: cm32l_ctrl_1_00.rom + path: "sounddata/mt32emu/cm32l_ctrl_1_00.rom" + description: "Roland CM-32L v1.00 control ROM" + required: false + size: 65536 + crc32: "ee62022f" + sha1: "73683d585cd6948cc19547942ca0e14a0319456d" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23daf88, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: cm32l_ctrl_1_02.rom + path: "sounddata/mt32emu/cm32l_ctrl_1_02.rom" + description: "Roland CM-32L v1.02 control ROM" + required: false + size: 65536 + crc32: "b998047e" + sha1: "a439fbb390da38cada95a7cbb1d6ca199cd66ef8" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23daf98, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: cm32ln_ctrl_1_00.rom + path: "sounddata/mt32emu/cm32ln_ctrl_1_00.rom" + description: "Roland CM-32LN v1.00 control ROM" + required: false + size: 65536 + crc32: "4a3bb4ef" + sha1: "dc1c5b1b90a4646d00f7daf3679733c7badc7077" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23daf78, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + # -- MT-32 and CM-32L PCM ROMs -- + - name: mt32_pcm.rom + path: "sounddata/mt32emu/mt32_pcm.rom" + description: "Roland MT-32 PCM ROM" + required: false + size: 524288 + crc32: "573e31cc" + sha1: "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db0e8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: mt32_pcm_l.rom + path: "sounddata/mt32emu/mt32_pcm_l.rom" + description: "Roland MT-32 PCM ROM, low half" + required: false + size: 262144 + crc32: "dd9deac3" + sha1: "3a1e19b0cd4036623fd1d1d11f5f25995585962b" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db108, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: mt32_pcm_h.rom + path: "sounddata/mt32emu/mt32_pcm_h.rom" + description: "Roland MT-32 PCM ROM, high half" + required: false + size: 262144 + crc32: "4ee6506c" + sha1: "2cadb99d21a6a4a6f5b61b6218d16e9b43f61d01" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db0f8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: cm32l_pcm.rom + path: "sounddata/mt32emu/cm32l_pcm.rom" + description: "Roland CM-32L PCM ROM" + required: false + size: 1048576 + crc32: "4b961eba" + sha1: "289cc298ad532b702461bfc738009d9ebe8025ea" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23dafa8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + - name: cm32l_pcm_h.rom + path: "sounddata/mt32emu/cm32l_pcm_h.rom" + description: "Roland CM-32L PCM ROM, high half" + required: false + size: 524288 + crc32: "8e9ea06e" + sha1: "3ad889fde5db5b6437cbc2eb6e305312fec3df93" + validation: [size, crc32, sha1] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23dafb8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table" + + # -- Roland SC-55, sounddata/Nuked-SC55-Resources/ROMs -- + # One complete set per model directory; the plugin loads a single directory. + - name: sc55_rom1.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.00/sc55_rom1.bin" + description: "Roland SC-55 v1.00 program ROM (ROM1)" + required: false + size: 32768 + crc32: "d072c251" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db118" + + - name: sc55_rom2.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.00/sc55_rom2.bin" + description: "Roland SC-55 v1.00 program ROM (ROM2)" + required: false + size: 262144 + crc32: "dbaaae8f" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db128" + + - name: sc55_waverom1.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.00/sc55_waverom1.bin" + description: "Roland SC-55 v1.00 wave ROM (WAVEROM1)" + required: false + size: 1048576 + crc32: "1ac774d3" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db138" + + - name: sc55_waverom2.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.00/sc55_waverom2.bin" + description: "Roland SC-55 v1.00 wave ROM (WAVEROM2)" + required: false + size: 1048576 + crc32: "8dcc592a" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db148" + + - name: sc55_waverom3.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.00/sc55_waverom3.bin" + description: "Roland SC-55 v1.00 wave ROM (WAVEROM3)" + required: false + size: 1048576 + crc32: "e21ebc04" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db158" + + - name: sc55_rom1.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.20/sc55_rom1.bin" + description: "Roland SC-55 v1.20 program ROM (ROM1)" + required: false + size: 32768 + crc32: "4ed0d171" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db168" + + - name: sc55_rom2.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.20/sc55_rom2.bin" + description: "Roland SC-55 v1.20 program ROM (ROM2)" + required: false + size: 262144 + crc32: "ebd488fd" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db178" + + - name: sc55_waverom1.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.20/sc55_waverom1.bin" + description: "Roland SC-55 v1.20 wave ROM (WAVEROM1)" + required: false + size: 1048576 + crc32: "1ac774d3" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db188" + + - name: sc55_waverom2.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.20/sc55_waverom2.bin" + description: "Roland SC-55 v1.20 wave ROM (WAVEROM2)" + required: false + size: 1048576 + crc32: "8dcc592a" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db198" + + - name: sc55_waverom3.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.20/sc55_waverom3.bin" + description: "Roland SC-55 v1.20 wave ROM (WAVEROM3)" + required: false + size: 1048576 + crc32: "e21ebc04" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db1a8" + + - name: sc55_rom1.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.21/sc55_rom1.bin" + description: "Roland SC-55 v1.21 program ROM (ROM1)" + required: false + size: 32768 + crc32: "4ed0d171" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db1b8" + + - name: sc55_rom2.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.21/sc55_rom2.bin" + description: "Roland SC-55 v1.21 program ROM (ROM2)" + required: false + size: 262144 + crc32: "2dc58549" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db1c8" + + - name: sc55_waverom1.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.21/sc55_waverom1.bin" + description: "Roland SC-55 v1.21 wave ROM (WAVEROM1)" + required: false + size: 1048576 + crc32: "1ac774d3" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db1d8" + + - name: sc55_waverom2.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.21/sc55_waverom2.bin" + description: "Roland SC-55 v1.21 wave ROM (WAVEROM2)" + required: false + size: 1048576 + crc32: "8dcc592a" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db1e8" + + - name: sc55_waverom3.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.21/sc55_waverom3.bin" + description: "Roland SC-55 v1.21 wave ROM (WAVEROM3)" + required: false + size: 1048576 + crc32: "e21ebc04" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db1f8" + + - name: sc55_rom1.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v2.00/sc55_rom1.bin" + description: "Roland SC-55 v2.00 program ROM (ROM1)" + required: false + size: 32768 + crc32: "a160da90" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db208" + + - name: sc55_rom2.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v2.00/sc55_rom2.bin" + description: "Roland SC-55 v2.00 program ROM (ROM2)" + required: false + size: 262144 + crc32: "1768cc18" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db218" + + - name: sc55_waverom1.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v2.00/sc55_waverom1.bin" + description: "Roland SC-55 v2.00 wave ROM (WAVEROM1)" + required: false + size: 1048576 + crc32: "1ac774d3" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db228" + + - name: sc55_waverom2.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v2.00/sc55_waverom2.bin" + description: "Roland SC-55 v2.00 wave ROM (WAVEROM2)" + required: false + size: 1048576 + crc32: "8dcc592a" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db238" + + - name: sc55_waverom3.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v2.00/sc55_waverom3.bin" + description: "Roland SC-55 v2.00 wave ROM (WAVEROM3)" + required: false + size: 1048576 + crc32: "e21ebc04" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db248" + + - name: rom1.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55mk2-v1.01/rom1.bin" + description: "Roland SC-55mk2 v1.01 program ROM (ROM1)" + required: false + size: 32768 + crc32: "9b66631f" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db258" + + - name: rom2.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55mk2-v1.01/rom2.bin" + description: "Roland SC-55mk2 v1.01 program ROM (ROM2)" + required: false + size: 524288 + crc32: "fcee1e8e" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db268" + + - name: rom_sm.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55mk2-v1.01/rom_sm.bin" + description: "Roland SC-55mk2 v1.01 sub-MCU ROM (SMROM)" + required: false + size: 4096 + crc32: "702c0a82" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db278" + + - name: waverom1.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55mk2-v1.01/waverom1.bin" + description: "Roland SC-55mk2 v1.01 wave ROM (WAVEROM1)" + required: false + size: 2097152 + crc32: "1519d3b3" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db288" + + - name: waverom2.bin + path: "sounddata/Nuked-SC55-Resources/ROMs/SC-55mk2-v1.01/waverom2.bin" + description: "Roland SC-55mk2 v1.01 wave ROM (WAVEROM2)" + required: false + size: 1048576 + crc32: "0f826c7f" + validation: [size, crc32] + source_ref: "DREAMM 4.0 linux-x64: ROM manifest 0x23db298" diff --git a/emulators/flycast-dojo.yml b/emulators/flycast-dojo.yml new file mode 100644 index 00000000..585985c2 --- /dev/null +++ b/emulators/flycast-dojo.yml @@ -0,0 +1,282 @@ +emulator: Flycast Dojo +type: standalone +core_classification: enhanced_fork +source: "https://github.com/blueminder/flycast-dojo" +upstream: "https://github.com/flyinghead/flycast" +source_commit: "d0e47e572b1e7b355e88bda8308c89d0c5156cbf" +upstream_commit: "a172e0001351dfbc49b86860a13d5390b1c493fe" +logo: "https://raw.githubusercontent.com/blueminder/flycast-dojo/master/shell/linux/flycast-dojo.png" +profiled_date: "2026-08-08" +core_version: "dojo-7-preview4" +display_name: "Sega - Dreamcast/Naomi (Flycast Dojo)" +cores: + - flycast-dojo +systems: + - sega-dreamcast + - sega-naomi + - sega-naomi2 + - sega-atomiswave +mode: standalone +verification: existence + +notes: | + Fork of Flycast adding rollback and delay netplay, a lobby, spectating, + replay recording and a training mode. + + Every file below is read from the data directory, flat, with no subfolder. + The directory is /data on Windows, $XDG_DATA_HOME/flycast-dojo or + $HOME/.local/share/flycast-dojo on Linux, /flycast-dojo/data on Switch. + $FLYCAST_ROOT overrides the root, $FLYCAST_BIOS_PATH adds search paths, + and ContentPath entries are searched after the data directory. + ref: core/linux-dist/main.cpp:157-365, core/windows/winmain.cpp:245-266, + core/stdclass.cpp:78-97 + + The boot ROM prefix follows the platform (core/hw/holly/sb_mem.cpp:27-42): + Dreamcast -> dc_ + NAOMI -> naomi_ + NAOMI 2 -> naomi2_ + Atomiswave -> aw_ + Boot ROM search pattern (sb_mem.cpp:254,269): + {prefix}boot.bin, {prefix}boot.bin.bin, {prefix}bios.bin, {prefix}bios.bin.bin + Flash search takes a single name, {prefix}nvmem.bin (sb_mem.cpp:214), or + {prefix}nvmem.bin.net once Dojo mode is on (sb_mem.cpp:195). + The aw_ prefix never reaches a filename: sb_mem.cpp:267 skips the boot ROM + search on Atomiswave, whose BIOS comes from awbios.zip, and its flash + follows the per-game arcade path (sb_mem.cpp:216). + + Arcade BIOS archives are opened as .zip, then .7z + (core/hw/naomi/naomi_cart.cpp:69-71). Each ROM inside is looked up by CRC + then by filename; the crc field of every BIOS blob is left at zero, so the + filename decides. No hash is checked on an archive. + + NAOMI 2 is a platform of its own here: naomi_cart_GetPlatform returns + DC_PLATFORM_NAOMI2 for any game whose bios field is naomi2 + (naomi_cart.cpp:646-657), which selects the naomi2_ prefix and naomi2.zip. + + Under netplay, match playback or match recording the Dreamcast boot ROM is + skipped and reios is forced, so both sides start from the same state. + Product numbers T0019M and T-31101N are the two exceptions that keep the + real BIOS (sb_mem.cpp:237-259). + + BIOS[] also declares airlbios and naomigd. No entry of Games[] carries + either name in its bios field and loadBios is only ever called with that + field or the literal naomi, so neither archive is opened. The Airline + Pilots sets use the naomi BIOS (naomi_roms.cpp:821-828,854-862). + + flycast_roms.json ships beside the binary and lists an md5 for naomi.zip, + naomi2.zip and awbios.zip. The only function reading them, CompareBIOS, + has no live caller (DojoFile.cpp:228-242, DojoGui.cpp:1314,1369). + + Distributed with the emulator and fetched at build time: data/default.zip + and the per-game .nvmem/.eeprom/.nvmem2 netplay files from + flycast-netplay-nvmem, data/game_values/*.json from + flycast-dojo-game-values, training/*.lua from flycast-dojo-training, and + flycast_roms.json. + ref: CMakeLists.txt:1787-1834, .github/workflows/c-cpp.yml:171-192, + shell/linux/make-appimage.sh:136-149 + + Also read but never user supplied: buttons.png overrides an on-screen + button sheet compiled into the binary (core/rend/osd.cpp:152-171), + mappings/*.cfg are written by the input configuration screen + (core/input/mapping.cpp:382-445), and flycast.lua is a user script + (core/lua/lua.cpp:746-761). + +files: + # ------------------------------------------------------- + # Sega Dreamcast + # ------------------------------------------------------- + - name: dc_boot.bin + aliases: ["dc_boot.bin.bin", "dc_bios.bin", "dc_bios.bin.bin"] + system: sega-dreamcast + required: false + hle_fallback: true + min_size: 2097152 + validation: [size] + note: "Boot ROM. reios takes over when it is absent, and is forced under netplay, match playback and match recording. Read fails below 2 MB." + source_ref: "core/hw/holly/sb_mem.cpp:269, core/emulator.cpp:566-569, core/hw/flashrom/flashrom.cpp:23-33" + + - name: dc_nvmem.bin + system: sega-dreamcast + required: false + min_size: 131072 + validation: [size] + note: "Flash memory. Created and filled with factory settings when absent." + source_ref: "core/hw/holly/sb_mem.cpp:214, core/hw/holly/sb_mem.cpp:111-187" + + - name: dc_nvmem.bin.net + system: sega-dreamcast + required: false + min_size: 131072 + validation: [size] + note: "Flash memory used once Dojo mode is enabled, keeping netplay settings apart from local ones." + source_ref: "core/hw/holly/sb_mem.cpp:192-195" + + - name: font.bin + system: sega-dreamcast + required: false + note: "System font served by the reios font syscall. A built-in font is used when absent." + source_ref: "core/reios/reios.cpp:741-764, core/oslib/oslib.cpp:195-198" + + # ------------------------------------------------------- + # Sega NAOMI + # ------------------------------------------------------- + - name: naomi_boot.bin + aliases: ["naomi_boot.bin.bin", "naomi_bios.bin", "naomi_bios.bin.bin"] + system: sega-naomi + required: false + min_size: 2097152 + validation: [size] + note: "Flat boot ROM. Games whose bios field is null run from it when naomi.zip is missing." + source_ref: "core/hw/holly/sb_mem.cpp:269, core/hw/naomi/naomi_cart.cpp:202-207" + + - name: naomi.zip + system: sega-naomi + required: true + category: bios_zip + note: "System BIOS archive. 89 game entries name it and abort without it." + source_ref: "core/hw/naomi/naomi_roms.cpp:84-140, core/hw/naomi/naomi_cart.cpp:194-208" + contents: + - name: epr-21576h.ic27 + description: Japan + size: 2097152 + - name: epr-21577h.ic27 + description: USA + size: 2097152 + - name: epr-21578h.ic27 + description: Export + size: 2097152 + - name: epr-21579d.ic27 + description: Korea + size: 2097152 + + - name: f355bios.zip + system: sega-naomi + required: false + category: bios_zip + note: "Ferrari F355 Challenge twin. Required by f355twin, f355twinp and f355twn2." + source_ref: "core/hw/naomi/naomi_roms.cpp:47-54, core/hw/naomi/naomi_roms.cpp:1689,1725,1761" + contents: + - name: epr-22849.ic27 + description: Japan + size: 2097152 + - name: epr-22850.ic27 + description: USA + size: 2097152 + - name: epr-22851.ic27 + description: Export + size: 2097152 + + - name: f355dlx.zip + system: sega-naomi + required: false + category: bios_zip + note: "Ferrari F355 Challenge deluxe. Required by f355." + source_ref: "core/hw/naomi/naomi_roms.cpp:56-70, core/hw/naomi/naomi_roms.cpp:1645" + contents: + - name: epr-21862.ic27 + description: Japan + size: 2097152 + - name: epr-21863.ic27 + description: USA + size: 2097152 + - name: epr-21864.ic27 + description: Export + size: 2097152 + + - name: hod2bios.zip + system: sega-naomi + required: false + category: bios_zip + note: "House of the Dead 2. Required by hotd2, hotd2o, hotd2e and hotd2p." + source_ref: "core/hw/naomi/naomi_roms.cpp:72-82, core/hw/naomi/naomi_roms.cpp:2003,2042,2081,2120" + contents: + - name: epr-21329.ic27 + description: Japan + size: 2097152 + - name: epr-21330.ic27 + description: USA + size: 2097152 + - name: epr-21331.ic27 + description: Export + size: 2097152 + + # ------------------------------------------------------- + # Sega NAOMI 2 + # ------------------------------------------------------- + - name: naomi2_boot.bin + aliases: ["naomi2_boot.bin.bin", "naomi2_bios.bin", "naomi2_bios.bin.bin"] + system: sega-naomi2 + required: false + min_size: 2097152 + validation: [size] + note: "Flat boot ROM for the NAOMI 2 platform." + source_ref: "core/hw/holly/sb_mem.cpp:35-36,269" + + - name: naomi2.zip + system: sega-naomi2 + required: true + category: bios_zip + note: "System BIOS archive. All 43 NAOMI 2 game entries name it and abort without it." + source_ref: "core/hw/naomi/naomi_roms.cpp:166-172, core/hw/naomi/naomi_cart.cpp:646-657" + contents: + - name: epr-23605c.ic27 + description: Japan + size: 2097152 + - name: epr-23607c.ic27 + description: USA + size: 2097152 + - name: epr-23608c.ic27 + description: Export + size: 2097152 + + # ------------------------------------------------------- + # Sammy Atomiswave + # ------------------------------------------------------- + - name: awbios.zip + system: sega-atomiswave + required: true + category: bios_zip + note: "System BIOS archive. All 34 Atomiswave game entries name it and abort without it." + source_ref: "core/hw/naomi/naomi_roms.cpp:38-45, core/hw/naomi/naomi_cart.cpp:194-208" + contents: + - name: bios0.ic23 + size: 131072 + + # ------------------------------------------------------- + # Input + # ------------------------------------------------------- + - name: gamecontrollerdb.txt + required: false + category: game_data + note: "SDL controller mapping database, read from the data directory then the config directory. Not part of the release archive. SDL built-in mappings are used when absent." + source_ref: "core/sdl/sdl.cpp:183-191" + +platform_details: + dreamcast: + bios_size: 2097152 + flash_size: 131072 + ram_size: 16777216 + hle_available: true + source_ref: "core/emulator.cpp:436-442" + + naomi: + bios_size: 2097152 + sram_size: 32768 + ram_size: 33554432 + hle_available: false + source_ref: "core/emulator.cpp:443-449" + + naomi2: + bios_size: 2097152 + sram_size: 32768 + ram_size: 33554432 + eram_size: 33554432 + hle_available: false + source_ref: "core/emulator.cpp:450-458" + + atomiswave: + bios_size: 131072 + sram_size: 131072 + ram_size: 16777216 + hle_available: false + source_ref: "core/emulator.cpp:459-465" diff --git a/emulators/gargoyle.yml b/emulators/gargoyle.yml new file mode 100644 index 00000000..3a3c8c7c --- /dev/null +++ b/emulators/gargoyle.yml @@ -0,0 +1,229 @@ +emulator: Gargoyle +type: standalone +core_classification: game_engine +source: "https://github.com/garglk/garglk" +upstream: "https://github.com/garglk/garglk" +profiled_date: "2026-08-08" +source_commit: "5717fbf3f9d6f2341773d0cc03f19d96c463af72" +core_version: "2026.1" +display_name: "Interactive Fiction (Gargoyle)" +cores: + - gargoyle +systems: + - adrift + - advsys + - agt + - alan + - glulx + - hugo + - jacl + - level9 + - magnetic-scrolls + - scott-adams + - scott-adams-plus + - tads + - taylormade + - zmachine +mode: standalone + +notes: | + Interactive fiction player built on the Glk library implementation garglk, + shipping one interpreter binary per story format. The gargoyle binary reads + the first 32 bytes of the file, matches it against a magic-number table, + falls back to the extension, and executes the matching interpreter. + ref: launcher.cpp:100-177 (probe, extensions, interpreters), 379-419 (rungame) + + Formats and the interpreter each one runs: Adrift 4 (scare), Adrift 5 + (FrankenDrift), AdvSys (advsys), AGT (agility), Alan 2 (alan2), Alan 3 + (alan3), Glulx (git), Hugo (hugo), JACL (jacl), Level 9 (level9), Magnetic + Scrolls (magnetic), Scott Adams Graphic Adventures Plus (plus), Scott Adams + (scott), TADS 2 and 3 (tadsr), TaylorMade (taylor), Z-machine (bocfel). + Blorb files are unwrapped first and dispatched on the Exec chunk type. + ref: launcher.cpp:45-60 (interpreter names), 276-328 (runblorb) + + Adrift 5 needs the FrankenDrift runner, a .NET build option that is off by + default, including in the official AppImage. Without it the launcher reports + that Adrift 5 is unsupported and stops. + ref: CMakeLists.txt:63 (WITH_FRANKENDRIFT), gargoyle-appimage.sh:14, + launcher.cpp:160-162,202-206 + + Every glyph is drawn through FreeType rather than by the operating system, + so a font file has to be reachable. The default config asks for the families + "Gargoyle Mono" and "Gargoyle Serif"; if fontconfig cannot resolve them, the + interpreter loads the shipped TTF files by name from the data directory, + then the executable directory, then the working directory, and calls + winabort() when all three miss. + ref: garglk.h:661-662 (defaults), garglk.ini:195,198, fontfc.cpp:83-154 + (fontconfig lookup), draw.cpp:260-287 (path fallbacks), 300-350 + (make_font, abort), 490-498 (file names) + + Gargoyle Serif is Charis SIL and Gargoyle Mono is Go Mono, both renamed so + they can be installed system-wide without clashing. Font embedding was + dropped because the OFL and the GPL do not mix, which is why the files are + loaded from disk. + ref: fonts/README + + Data directory by platform: /usr/share/gargoyle on Unix, + /../share/gargoyle for the AppImage, the install directory on + Windows, and the bundle Resources directory on macOS. Fonts sit at its root + and themes in its themes subdirectory. macOS keeps the eight Gargoyle faces + in Resources/Fonts and Unifont in Resources; the Windows installer also + registers the eight faces as system fonts. + ref: sysqt.cpp:898-942, sysmac.mm:986-1003, garglk/CMakeLists.txt:136,144, + 510-534, gargoyle_osx.sh:120-121,207-209, installer.nsi:89-90,200-207 + + Themes are read from every *.json in the theme directories, which are the + Qt application data locations plus the executable directory on Windows and + the data directory for the AppImage. A parse failure is reported and the + file skipped. The light and dark themes are also compiled into the binary, + so the on-disk copies of those two replace identical entries. + ref: theme.cpp:266-319, sysqt.cpp:920-942, garglk/CMakeLists.txt:80-92 + + garglk.ini is not distributed: the default config is compiled in as a string + and written to the highest-priority user location on demand. Installing a + system copy is an off-by-default build option. + ref: config.cpp:399-449, garglk/CMakeLists.txt:14 (INSTALL_GARGLKINI), + garglk/CMakeLists.txt:60-78 (vtk_encode_string) + + MIDI in Blorb resources goes through FluidSynth, which needs a SoundFont. + Gargoyle names none: the soundfont list is empty unless the user sets it in + garglk.ini or the build hardcodes one, and the fallback is whatever + FluidSynth reports as its own default. + ref: config.cpp:245-249,787-795, snddecode.cpp:373-395, + garglk/CMakeLists.txt:57 (DEFAULT_SOUNDFONT), INSTALL.md:137-141 + + Story files are content. Formats that carry companion data read it from the + story file's own name or directory, so it travels with the game: Level 9 + graphics as PICTURE.DAT, Magnetic Scrolls graphics and hints as .gfx and + .hnt, Alan 3 resources as .a3r, TADS resources as .t3r, and the extra disk + sides the Scott Adams, Plus and TaylorMade interpreters read from C64, + Atari 8-bit and Apple II images. + ref: level9/Glk/glk.c:6415-6450, magnetic/Glk/glk.c:5758-5855, + terps/CMakeLists.txt:69,73,359,404,500 (c64diskimage, unp64) + +exclusion_note: > + TADS character mapping files are not loaded by this build. The Glk port + reports utf-8 and asc7dflt as the local character sets, both built-in + tables, and its os_gen_charmap_filename() returns an empty name, so the + automatic .tcp lookup never runs; cmap_load() only fires for a path given + with -ctab. The agil.cfg read by AGiliTy lives in os_dos.c and os_dos16.c, + while the build compiles os_glk.c. + ref: tads/glk/osmisc.c:69-72,316-334, tads/tads2/cmap.c:290-315, + tads/tads2/trd.c:513-517, terps/CMakeLists.txt:111-119 + +files: + # -- Text fonts, data directory root -- + # Loaded by name when fontconfig cannot resolve the configured families. + # Gargoyle aborts when a face is available from neither source. + - name: "Gargoyle-Mono.ttf" + description: "Gargoyle Mono regular (Go Mono)" + required: true + source_ref: "draw.cpp:491 (make_entry monor), 300-350 (make_font, winabort)" + + - name: "Gargoyle-Mono-Bold.ttf" + description: "Gargoyle Mono bold (Go Mono)" + required: true + source_ref: "draw.cpp:492 (make_entry monob), 300-350 (make_font, winabort)" + + - name: "Gargoyle-Mono-Italic.ttf" + description: "Gargoyle Mono italic (Go Mono)" + required: true + source_ref: "draw.cpp:493 (make_entry monoi), 300-350 (make_font, winabort)" + + - name: "Gargoyle-Mono-Bold-Italic.ttf" + description: "Gargoyle Mono bold italic (Go Mono)" + required: true + source_ref: "draw.cpp:494 (make_entry monoz), 300-350 (make_font, winabort)" + + - name: "Gargoyle-Serif.ttf" + description: "Gargoyle Serif regular (Charis SIL)" + required: true + source_ref: "draw.cpp:495 (make_entry propr), 300-350 (make_font, winabort)" + + - name: "Gargoyle-Serif-Bold.ttf" + description: "Gargoyle Serif bold (Charis SIL)" + required: true + source_ref: "draw.cpp:496 (make_entry propb), 300-350 (make_font, winabort)" + + - name: "Gargoyle-Serif-Italic.ttf" + description: "Gargoyle Serif italic (Charis SIL)" + required: true + source_ref: "draw.cpp:497 (make_entry propi), 300-350 (make_font, winabort)" + + - name: "Gargoyle-Serif-Bold-Italic.ttf" + description: "Gargoyle Serif bold italic (Charis SIL)" + required: true + source_ref: "draw.cpp:498 (make_entry propz), 300-350 (make_font, winabort)" + + # -- Glyph substitution fonts, data directory root -- + # Tried for every face after the main fonts; a load failure is skipped. + - name: "unifont.otf" + description: "GNU Unifont, Basic Multilingual Plane glyph fallback" + required: false + source_ref: "draw.cpp:352-375 (make_substitution_fonts), 476-478" + note: > + Covers glyphs missing from the text fonts. Loaded directly rather than + through the system font mechanism, so it is not installed system-wide. + + - name: "unifont_upper.otf" + description: "GNU Unifont, planes above the BMP" + required: false + source_ref: "draw.cpp:352-375 (make_substitution_fonts), 476-478" + + # -- Color themes, themes subdirectory -- + # Every *.json in the theme directories is parsed, keyed on its name field. + - name: "Blue.json" + path: "themes/Blue.json" + description: "Blue color theme" + required: false + source_ref: "theme.cpp:304-316, garglk/CMakeLists.txt:524" + + - name: "Breeze Darker.json" + path: "themes/Breeze Darker.json" + description: "Breeze Darker color theme" + required: false + source_ref: "theme.cpp:304-316, garglk/CMakeLists.txt:525" + + - name: "Lectrote Dark.json" + path: "themes/Lectrote Dark.json" + description: "Lectrote Dark color theme" + required: false + source_ref: "theme.cpp:304-316, garglk/CMakeLists.txt:526" + + - name: "Lectrote Sepia.json" + path: "themes/Lectrote Sepia.json" + description: "Lectrote Sepia color theme" + required: false + source_ref: "theme.cpp:304-316, garglk/CMakeLists.txt:527" + + - name: "Lectrote Slate.json" + path: "themes/Lectrote Slate.json" + description: "Lectrote Slate color theme" + required: false + source_ref: "theme.cpp:304-316, garglk/CMakeLists.txt:528" + + - name: "Pencil.json" + path: "themes/Pencil.json" + description: "Pencil color theme" + required: false + source_ref: "theme.cpp:304-316, garglk/CMakeLists.txt:529" + + - name: "Zoom.json" + path: "themes/Zoom.json" + description: "Zoom color theme" + required: false + source_ref: "theme.cpp:304-316, garglk/CMakeLists.txt:530" + + - name: "dark.json" + path: "themes/dark.json" + description: "Dark color theme" + required: false + source_ref: "theme.cpp:268-282,304-316, garglk/CMakeLists.txt:80-85,531" + note: "Also compiled in as the built-in dark theme." + + - name: "light.json" + path: "themes/light.json" + description: "Light color theme" + required: false + source_ref: "theme.cpp:268-282,304-316, garglk/CMakeLists.txt:87-92,532" + note: "Also compiled in as the built-in light theme." diff --git a/emulators/gopher2600.yml b/emulators/gopher2600.yml new file mode 100644 index 00000000..e4bf22d4 --- /dev/null +++ b/emulators/gopher2600.yml @@ -0,0 +1,169 @@ +emulator: Gopher2600 +type: standalone +core_classification: other +source: "https://github.com/JetSetIlly/Gopher2600" +upstream: "https://github.com/JetSetIlly/Gopher2600" +profiled_date: "2026-08-08" +source_commit: "7f9b2f73630979c0f38dbde4c6f3c7162d99bac1" +core_version: "v0.57.0" +display_name: "Atari - 2600 (Gopher2600)" +cores: + - gopher2600 +systems: + - atari-2600 +mode: standalone + +notes: | + Atari 2600 emulator written in Go. The 6507, TIA and RIOT are emulated in + software and the console needs no ROM of its own, so a plain cartridge boots + with nothing supplied. + + Supercharger emulation is the only path that reads a BIOS. NewSupercharger + branches three ways (supercharger.go:93-119). A tape held as WAV or MP3 sets + Loader.IsSoundData and calls loadBIOS, and the error is returned, so the + cartridge fails to attach without the file. A demo unit image calls loadBIOS + and substitutes fastloadOnlyBIOS() on failure. Everything else, including the + usual Supercharger BIN, takes fastloadOnlyBIOS() without ever looking for the + file: a 2048 byte stub holding a touch of the tape load register and the CPU + jump table (bios.go:151-166). + + loadBIOS reads the current working directory, then the directory holding the + tape or BIN, then the configuration directory (bios.go:53-116). Each candidate + name is tried in turn and the content is gated on MD5 before the caller checks + the 2048 byte length, so a file under the right name with the wrong content is + refused. ReqSpec selects the PAL table and the PAL hash (bios.go:56-59); + ReqSpec comes from the television specification, the stella.pro entry or the + filename (cartridgeloader/loader.go:194-201). + + The demo unit is recognised by MD5 of the 256 bytes at 0x300 of the loaded + image (demounit.go:58,78). When that image carries more than 2048 bytes it + holds the Schweber chip and the carousel together; otherwise the eight ROMs + are read from the directory of the loaded file (demounit_controller.go: + 178-200). A read error or a length other than 8192 logs and returns nil, and + the peripheral is left unplugged. + + stella.pro is Stella's cartridge properties database, read from the + configuration directory (properties.go:28,48-58). It is loaded by + NewDebugger (debugger.go:356), which drives play as well as debug + (gopher2600.go:261,307,326), so it applies to the plain `gopher2600 ` + invocation. A missing file is logged and start-up continues; the ROM selector + then falls back to the filename and no television specification is inferred + from the cartridge name. + + The ROM selector also reads a Named_Boxarts directory from the configuration + directory, listing it at start-up and fuzzy matching the cartridge name + against the entries before reading one image (win_rom_select.go:92,127-138, + 678-689). It holds the box art of the libretro-thumbnails Atari 2600 set, + pinned upstream at commit 4ea759821724d6c7bcf2f46020d79fc4270ed2f6 + (win_rom_select.go:91). Its content is whatever the user copies in and no + name is fixed by the code, so it carries no file entry here. + + Fonts, shaders, bevels, the CPU instruction table and the Movie Cart core are + compiled in with go:embed. The remaining paths under the configuration + directory are written by the emulator or authored by hand: preferences, + debugger_imgui.ini, managerState, managerHotkeys, savekey, fa2_nvram, + elf_nvram, regression, patches and setupDB. ARM map files and DWARF sources + are read from a project build tree beside the ROM. AtariVox speech calls the + festival binary as a process, with the path taken from preferences + (atarivox_preferences.go:51). + +files: + - name: "Supercharger BIOS.bin" + system: atari-2600 + aliases: + - "Supercharger.BIOS.bin" + - "Supercharger_BIOS.bin" + - "supercharger_bios.bin" + - "SUPERCHARGER_BIOS.bin" + region: "NTSC" + required: false + hle_fallback: true + size: 2048 + md5: "4565c1a7abce773e53c75b35414adefd" + validation: [size, md5] + description: "Starpath Supercharger BIOS, required to load a tape held as WAV or MP3" + source_ref: "hardware/memory/cartridge/supercharger/bios.go:30-36,45,53-116,141" + + - name: "Supercharger BIOS PAL.bin" + system: atari-2600 + aliases: + - "Supercharger_BIOS_PAL.bin" + - "SUPERCHARGER_BIOS_PAL.bin" + region: "PAL" + required: false + hle_fallback: true + size: 2048 + md5: "4a8c743396b8ad69d97e6fd3dd3e3132" + validation: [size, md5] + description: "PAL Supercharger BIOS, selected when the loader resolves a PAL specification" + source_ref: "hardware/memory/cartridge/supercharger/bios.go:38-42,46,56-59,141" + + - name: "Starpath Demonstration Unit 1P.bin" + system: atari-2600 + required: false + size: 8192 + validation: [size] + description: "Demo unit carousel ROM 1, read from the directory of the loaded image" + source_ref: "hardware/memory/cartridge/supercharger/demounit_controller.go:37-46,178-200" + + - name: "Starpath Demonstration Unit 2P.bin" + system: atari-2600 + required: false + size: 8192 + validation: [size] + description: "Demo unit carousel ROM 2, read from the directory of the loaded image" + source_ref: "hardware/memory/cartridge/supercharger/demounit_controller.go:37-46,178-200" + + - name: "Starpath Demonstration Unit 3P.bin" + system: atari-2600 + required: false + size: 8192 + validation: [size] + description: "Demo unit carousel ROM 3, read from the directory of the loaded image" + source_ref: "hardware/memory/cartridge/supercharger/demounit_controller.go:37-46,178-200" + + - name: "Starpath Demonstration Unit 4P.bin" + system: atari-2600 + required: false + size: 8192 + validation: [size] + description: "Demo unit carousel ROM 4, read from the directory of the loaded image" + source_ref: "hardware/memory/cartridge/supercharger/demounit_controller.go:37-46,178-200" + + - name: "Starpath Demonstration Unit 5P.bin" + system: atari-2600 + required: false + size: 8192 + validation: [size] + description: "Demo unit carousel ROM 5, read from the directory of the loaded image" + source_ref: "hardware/memory/cartridge/supercharger/demounit_controller.go:37-46,178-200" + + - name: "Starpath Demonstration Unit 6P.bin" + system: atari-2600 + required: false + size: 8192 + validation: [size] + description: "Demo unit carousel ROM 6, read from the directory of the loaded image" + source_ref: "hardware/memory/cartridge/supercharger/demounit_controller.go:37-46,178-200" + + - name: "Starpath Demonstration Unit 7P.bin" + system: atari-2600 + required: false + size: 8192 + validation: [size] + description: "Demo unit carousel ROM 7, read from the directory of the loaded image" + source_ref: "hardware/memory/cartridge/supercharger/demounit_controller.go:37-46,178-200" + + - name: "Starpath Demonstration Unit 8P.bin" + system: atari-2600 + required: false + size: 8192 + validation: [size] + description: "Demo unit carousel ROM 8, read from the directory of the loaded image" + source_ref: "hardware/memory/cartridge/supercharger/demounit_controller.go:37-46,178-200" + + - name: "stella.pro" + system: atari-2600 + required: false + description: "Stella cartridge properties database, keyed by cartridge MD5" + source_ref: "properties/properties.go:28,48-58; debugger/debugger.go:356" diff --git a/emulators/gopher64.yml b/emulators/gopher64.yml new file mode 100644 index 00000000..abf2780e --- /dev/null +++ b/emulators/gopher64.yml @@ -0,0 +1,68 @@ +emulator: gopher64 +type: standalone +core_classification: other +source: "https://github.com/gopher64/gopher64" +upstream: "https://github.com/gopher64/gopher64" +profiled_date: "2026-08-08" +source_commit: "efe78e544a96ac6724a2c2651d8f0a62044e7467" +core_version: "v1.1.34" +display_name: "Nintendo - Nintendo 64 (gopher64)" +cores: + - gopher64 +systems: + - nintendo-64 +mode: standalone + +notes: | + Nintendo 64 emulator written in Rust by Logan McNaughton, with parallel-rdp + driving the RDP and rcheevos providing RetroAchievements. Portions of the + emulation are adapted from mupen64plus and ares. ES-DE and RetroBat both run + the release binary, RetroBat in portable mode. + + The boot chain reads no file. Both PIF ROMs are compiled in as 1984 byte + arrays, the size of the PIF ROM window (src/device/pif/rom.rs:1,90; + src/device/pif.rs:7). reset_pif installs the PAL image when the cartridge + country code is one of DFIPSUXY and the NTSC image otherwise + (src/device/pif.rs:252-257, src/device/cart/rom.rs:137-143), and the VR4300 + runs IPL1 and IPL2 out of that array: reads below the PIF RAM offset are + served from it and writes there panic (src/device/pif.rs:31-58). The CIC needs + no file either. set_cic hashes the cartridge IPL3 region with SHA-256 and maps + the six known digests to a seed byte, with the 6102 seed as the fallback + (src/device/cart/rom.rs:147-175). + + 64DD is not emulated, so no IPL image is involved. + + A Transfer Pak port reads two files whose paths come from the configuration, + gb_rom_path and gb_ram_path, and attaches them when both are set + (src/lib.rs:194-200). The pair is a Game Boy cartridge and its save, supplied + by the player: the loader takes the ROM as is and only inspects the tail of + the RAM for MBC3 clock state (src/device/controller/gbcart.rs:37-75), then + writes the RAM back on shutdown (src/lib.rs:276-288). The code fixes no name, + size or hash for either, so neither carries a file entry here. + + The SC64 SD card image is created rather than obtained: an empty save is + resized to 64 MB and FAT formatted on first access + (src/device/cart/sc64.rs:4,34-38). Cartridges come from argv, plain or as the + first matching entry of a zip or 7z archive (src/device.rs:188-256). + + Everything else under the configuration, data and cache directories is written + by the emulator: config.json and cheats.json (src/ui/config.rs:99-111,134-146), + retroachievements.json (src/lib.rs:209; src/retroachievements.rs:37,61), + ice_config.json from the netplay server response (src/ui/netplay.rs:713-716, + src/netplay.rs:419), the eeprom, sram, flash, mempak, sdcard and romsave saves + and the savestates (src/ui/storage.rs:212-232; src/savestates.rs:179,236). For + a netplay launch the GUI serialises the cheats to the cache directory, passes + them to a re-exec of itself through the hidden --cheats flag and deletes the + file afterwards (src/ui/gui.rs:583-593,600-615,630; src/lib.rs:141-147). + portable.txt is tested for existence only, to move those three directories + beside the executable (src/ui.rs:164-178). + + Compiled-in data: the cheat database (src/cheats.rs:31), the No-Intro + Nintendo 64 export that names entries in the ROM browser + (src/ui/gui.rs:688-690), the RobotoMono face handed to SDL_ttf from memory + (src/ui/video.rs:109, src/ui/input_profile.rs:99), the parallel-rdp SPIR-V + modules (parallel-rdp/spirv.hpp and parallel-rdp/spirv_crt.hpp, used at + parallel-rdp/interface.cpp:4-5,615) and the Slint translations bundled at + build time (build.rs:11). + +files: []