diff --git a/emulators/cpcemu.yml b/emulators/cpcemu.yml new file mode 100644 index 00000000..1f22f03c --- /dev/null +++ b/emulators/cpcemu.yml @@ -0,0 +1,266 @@ +emulator: CPCemu +type: standalone +core_classification: other +source: "https://www.cpc-emu.org/" +upstream: "https://www.cpc-emu.org/" +profiled_date: "2026-08-08" +core_version: "3.0.2" +display_name: "Amstrad - CPC (CPCemu)" +cores: + - cpcemu +systems: + - amstrad-cpc +mode: standalone + +notes: | + Amstrad CPC emulator by Marco Vieth and Rainer Loritz, closed-source freeware + for Windows, macOS, Linux, Android and iOS. Machines are the CPC 464, 664 and + 6128; the firmware identifier and the message catalogue also know the 464+, + the 6128+ and the KC compact. + + Two packages were used. The 3.0.2 Windows portable and macOS builds of + 2025-04-24 carry the same fourteen ROM files and the same data files, and + provide the path constants, the message catalogue and the v3.0 help file. The + 2.5 Linux x86-64 build of 2022-08-13 is still the newest Linux release, the + 3.0.2 Linux archives listed on the download page being absent from the + server, and provides the runtime behaviour: + file opens traced with strace, required and optional decided by removing, + truncating and patching each file and reading the emulator's own messages. + + ROMs live in ROM_PATH, "./ROM/" in the shipped configuration, resolved against + the working directory; the macOS build reads them from the application bundle + Resources folder. Slots are filled by ROM_BLOCK lines naming a ROM number, a + file in ROM_PATH and a 16 KB block position inside that file: + + ROM_BLOCK = 255, "CPC6128.ROM", 0 lower ROM + ROM_BLOCK = 0 , "CPC6128.ROM", 1 foreground ROM + ROM_BLOCK = 7 , "CPCADOS.ROM", 0 AMSDOS + ROM_BLOCK = 6 , "M4.ROM" , 0 M4 board + + The shipped cpcemu0.cfg repeats the first three for every CPC_TYPE from 0 to + 5, with CPC464.ROM for types 0 and 3, CPC664.ROM for type 1 and CPC6128.ROM + for types 2, 4 and 5, and adds the M4 line once for all types. A file named by + a ROM_BLOCK line that cannot be opened prints "ROM: Cannot open file" and ends + the process with status 3 before audio initialisation, whichever slot it fills + and whether or not the matching device is enabled; deleting the line instead + lets the emulator start. + + The machine is identified from the foreground ROM, not from the lower half and + not from CPC_TYPE. CPCemu reads the four-byte CPC ROM header at the start of + block 1: byte 0 has to be 0x80, and byte 2 selects the machine, 0x00 for the + 464, 0x01 for the 664, 0x02 for the 6128. A random block 1 gives "ROM: No + foreground ROM found.", an unlisted version byte gives "ROM: Unknown ROM + version.", and both end on "CPC type not configured or ROM for CPC type not + available. Unable to continue." The modification byte is ignored, the lower + 16 KB half is never inspected, and padding past 32768 bytes is accepted, so + the length requirement is a lower bound: a block 1 has to exist. + + Types 3, 4 and 5 need ROM images the packages do not carry. The help file + states they have to be supplied in CPCEMU.CFG first, and no filename for them + is compiled into the binary, the user names the file in the ROM_BLOCK line. + Left on the shipped configuration those types load the 464 and 6128 files and + report the machine those files describe. There is no cartridge support, the + file types handled on the command line are dsk, sna, cfg and zip. + + M4 board emulation is on by default. HACK.ROM, the board's lower ROM, is + opened at every startup whatever M4_ENABLED holds, after M4_SD_PATH + + NMIROM.BIN has been tried, so a NMIROM.BIN placed on the emulated SD card + replaces it; with neither present the emulator prints "Unable to load + HACK.ROM" and keeps running. M4.ROM contents are checked, a zeroed file boots + the CPC and reports "M4 ROM not valid." The firmware updater downloads + M4FIRM.BIN from spinpoint.org and rewrites M4.ROM and HACK.ROM in place. + + Alongside the ROMs the binary reads its own payload from the program + directory: cpcemu.msg, the message catalogue, whose absence leaves every + message unprinted; cpcemu.dat, colours and key tables; cpcemu.hlp, the online + help opened on F1; cpcemu.dbf, the poke database opened from the poke menu; + and cpcemu0.cfg, the template used when no user configuration exists. + Configuration is looked up first in the user profile, ~/.CPCemu/cpcemu.cfg on + Linux, then cpcemu0.cfg in the working directory; with neither, startup stops + on "CPCEMU: Use INSTALL first". The disc, tape and snapshot folders and the + M4 SD card folder hold user content. + +files: + # -- Firmware, lower ROM in block 0 and foreground ROM in block 1 -- + - name: CPC6128.ROM + path: "ROM/CPC6128.ROM" + system: amstrad-cpc + required: true + min_size: 32768 + validation: [size, signature] + md5: b96280dc6c95a48857b4b8eb931533ae + sha1: 5977adbad3f7c1e0e082cd02fe76a700d9860c30 + source_ref: "CPCemu 2.5/3.0.2: ROM/CPC6128.ROM, cpcemu0.cfg ROM_BLOCK 255 and 0 for CPC_TYPE 2, 4 and 5" + note: >- + CPC 6128 firmware and BASIC. Loaded for the shipped CPC_TYPE 2 and opened + twice, once per block. Foreground ROM header 80 01 02 00. + + - name: CPC464.ROM + path: "ROM/CPC464.ROM" + system: amstrad-cpc + required: false + min_size: 32768 + validation: [size, signature] + md5: a993f85b88ac4350cf4d41554e87fe4f + sha1: 56d39c463da60968d93e58b4ba0e675829412a20 + source_ref: "CPCemu 2.5/3.0.2: ROM/CPC464.ROM, cpcemu0.cfg ROM_BLOCK 255 and 0 for CPC_TYPE 0 and 3" + note: >- + CPC 464 firmware and BASIC, selected by CPC_TYPE 0 or the -t 0 command + line. Foreground ROM header 80 01 00 00. + + - name: CPC664.ROM + path: "ROM/CPC664.ROM" + system: amstrad-cpc + required: false + min_size: 32768 + validation: [size, signature] + md5: 5a384a2310f472c7857888371c00ed66 + sha1: 073a7665527b5bd8a148747a3947dbd3328682c8 + source_ref: "CPCemu 2.5/3.0.2: ROM/CPC664.ROM, cpcemu0.cfg ROM_BLOCK 255 and 0 for CPC_TYPE 1" + note: >- + CPC 664 firmware and BASIC, selected by CPC_TYPE 1 or the -t 1 command + line. Foreground ROM header 80 01 01 00. + + # -- Disc ROM, slot 7 -- + - name: CPCADOS.ROM + path: "ROM/CPCADOS.ROM" + system: amstrad-cpc + required: true + size: 16384 + md5: aa2fb251814bd971b2b9874ab0971b3f + sha1: 0e247123b9d3204784eeadb4629b9d35b9dfd984 + source_ref: "CPCemu 2.5/3.0.2: ROM/CPCADOS.ROM, cpcemu0.cfg ROM_BLOCK 7 for every CPC_TYPE" + note: >- + AMSDOS disc ROM, the 8 KB image zero-padded to 16 KB. Declared for every + machine by the shipped configuration, so startup ends on status 3 without + it; dropping the ROM_BLOCK line instead boots with "ROM: No AMSDOS ROM + found." and no disc support. Length is not checked, an 8 KB file installs + the AMSDOS speedup all the same. + + # -- M4 board, ROM slot 6 plus the board's own lower ROM -- + - name: M4.ROM + path: "ROM/M4.ROM" + system: amstrad-cpc + required: true + size: 16384 + validation: [signature] + md5: 28a7e368badca8299ba24a15bb4ebe9b + sha1: 05f9447d307ab17eae9e2100f91c36b0c9560d4b + source_ref: "CPCemu 2.5/3.0.2: ROM/M4.ROM, cpcemu0.cfg ROM_BLOCK 6, M4_ENABLED = 1" + note: >- + M4 board firmware by Duke. Declared by the shipped configuration, so + startup ends on status 3 without it even when M4_ENABLED is 0. Contents + are checked, a zeroed file boots and reports "M4 ROM not valid." + + - name: HACK.ROM + path: "ROM/HACK.ROM" + system: amstrad-cpc + required: false + size: 7994 + md5: ffcbcbce32223a152753d30766ad6215 + sha1: 582dd1706391f6f0161ad3486ae75a04fb0f7d5b + source_ref: "CPCemu 2.5/3.0.2: ROM_PATH + /HACK.ROM, opened after M4_SD_PATH + NMIROM.BIN" + note: >- + M4 hack ROM, the lower ROM behind the Shift+F1 menu. Opened at every + startup, and superseded by a NMIROM.BIN on the emulated SD card. Missing + prints "Unable to load HACK.ROM" and emulation continues. + + # -- National firmware, configured by the 3.0.2 keyboard layout dialog -- + - name: CPC6128.ROM.UK + path: "ROM/National/CPC6128.ROM.UK" + system: amstrad-cpc + required: false + min_size: 32768 + validation: [size, signature] + md5: b96280dc6c95a48857b4b8eb931533ae + sha1: 5977adbad3f7c1e0e082cd02fe76a700d9860c30 + source_ref: "CPCemu 2.5/3.0.2: ROM/National/CPC6128.ROM.UK" + note: >- + English CPC 6128 firmware, the same image as CPC6128.ROM. Ships in the + National folder without being named by any path constant. + + - name: CPC6128.ROM.FR + path: "ROM/National/CPC6128.ROM.FR" + system: amstrad-cpc + required: false + min_size: 32768 + validation: [size, signature] + md5: 5ee871d5600eb9b5a22989c295f902a5 + sha1: 200d59076dfef36db061d6d7d21d80021cab1237 + source_ref: "CPCemu 3.0.2: National/CPC6128.ROM.FR, keyboard layout dialog on first start" + note: "French CPC 6128 firmware, configured when the French layout is picked." + + - name: CPC6128.ROM.ES + path: "ROM/National/CPC6128.ROM.ES" + system: amstrad-cpc + required: false + min_size: 32768 + validation: [size, signature] + md5: 0246740371010333385665dfeb7cd0ec + sha1: 1acd01c2c03424a78b32c9440f4d890fb1104815 + source_ref: "CPCemu 3.0.2: National/CPC6128.ROM.ES, keyboard layout dialog on first start" + note: "Spanish CPC 6128 firmware, configured when the Spanish layout is picked." + + - name: CPC6128.ROM.DK + path: "ROM/National/CPC6128.ROM.DK" + system: amstrad-cpc + required: false + min_size: 32768 + validation: [size, signature] + md5: ca1635fd992e2aa7a776b30da13467e5 + sha1: a9e7ee6355730f319a37c95ca0a714212b88c3b1 + source_ref: "CPCemu 3.0.2: National/CPC6128.ROM.DK, keyboard layout dialog on first start" + note: "Danish CPC 6128 firmware, configured when the Danish layout is picked." + + - name: CPC6128.ROM.SE + path: "ROM/National/CPC6128.ROM.SE" + system: amstrad-cpc + required: false + min_size: 32768 + validation: [size, signature] + md5: 8ca256a832e83c875f5432b3dee8a36f + sha1: 6765a91a42fed68a807325bf62a728e5ac5d622f + source_ref: "CPCemu 2.5/3.0.2: ROM/National/CPC6128.ROM.SE" + note: >- + Swedish CPC 6128 firmware. Ships in the National folder without being + named by any path constant, the layout dialog offering English, French, + Spanish and Danish only. + + # -- Expansion ROMs mapped through a user ROM_BLOCK line -- + - name: XDDOS210.ROM + path: "ROM/XDDOS210.ROM" + system: amstrad-cpc + required: false + size: 16384 + md5: 1d91a9ef315b302d335cd7e04e8d8d86 + sha1: 2f1bd4d6e2d2e62818b01e6e7a26488362a7a8ee + source_ref: "CPCemu 3.0.2: ROM/XDDOS210.ROM, cpcemu0.cfg commented ROM_BLOCK 7, help topic DOBBERTIN HD20 ENABLED" + note: >- + X-DDOS 2.10 by Dobbertin, the disc operating system of the HD20 hard disk. + Required in a ROM slot to use DOBBERTIN_HD_ENABLED = 1. Added in 3.0, not + shipped with 2.5. + + - name: COPYMATE.ROM + path: "ROM/COPYMATE.ROM" + system: amstrad-cpc + required: false + size: 16512 + md5: e9c4288eab8885a1e6ae7504a4736115 + sha1: 15d52de01320d9b954e03b4c2e71ec75fd301bbb + source_ref: "CPCemu 2.5/3.0.2: ROM/COPYMATE.ROM, cpcemu0.cfg commented ROM_BLOCK 4" + note: >- + Copy utility ROM, carrying a 128-byte AMSDOS file header ahead of the + 16 KB image. Shipped as the example expansion ROM of the configuration + file and loaded once the line is uncommented. + + - name: multface.rom + path: "ROM/multface.rom" + system: amstrad-cpc + required: false + size: 8192 + md5: 4c9f014e91d407cc6509fad0095ab909 + sha1: 1431ec628d38f000715545dd2186b684c5fe5a6f + source_ref: "CPCemu 2.5/3.0.2: ROM/multface.rom, ROM_BLOCK filename or ROM Manager entry" + note: >- + Romantic Robot Multiface Two ROM. Ships in the ROM folder for the user to + map into a slot, no path constant naming it. diff --git a/emulators/dosbox-pure-unleashed.yml b/emulators/dosbox-pure-unleashed.yml new file mode 100644 index 00000000..a8f0af1c --- /dev/null +++ b/emulators/dosbox-pure-unleashed.yml @@ -0,0 +1,247 @@ +emulator: DOSBox Pure Unleashed +type: standalone +core_classification: official_port +source: "https://github.com/schellingb/dosbox-pure-unleashed" +upstream: "https://github.com/schellingb/dosbox-pure" +source_commit: "4a11412248ca4c862751a7d9e6818023795031e9" +upstream_commit: "7f6e8fb7385fa446d1444d671063268520bf9b54" +logo: "https://raw.githubusercontent.com/schellingb/dosbox-pure-unleashed/main/images/logo.png" +profiled_date: "2026-08-08" +core_version: "1.0-preview6" +display_name: "DOS (DOSBox Pure Unleashed)" +cores: + - dosbox-pure-unleashed + - dosboxpure +systems: + - dos +mode: standalone +verification: sha1 + +notes: | + Desktop build of DOSBox Pure by the same author. The repository holds only + the platform layer (main.cpp, vfs_implementation.cpp) and compiles the + emulation core from a sibling checkout of schellingb/dosbox-pure with + -D__LIBRETRO__ -DDBP_STANDALONE, using ZillaLib for video, input and audio. + ref: Makefile:7,9-14,34 + + No BIOS. Windows 3.x and 9x run as guest operating systems installed into + the emulated DOS machine, not as separate emulated hardware. + + System directory: the program keeps DOSBoxPure.cfg in a base directory and + creates saves and system folders next to it. Base directory is + %APPDATA%\DOSBoxPure on Windows when the user creates that folder, else the + directory of the executable; $HOME/.config/DOSBoxPure on Linux and + $HOME/Library/Application Support/DOSBoxPure on macOS, else the working + directory. The system folder can be redirected with the path_system key in + DOSBoxPure.cfg. It is returned to the core as RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. + ref: main.cpp:1985-2045,973-974 + + System directory scan (recursive, DBP_ScanSystem): + *.SF2 and *.SF3 listed as General MIDI SoundFonts, any file whose last + four characters are ".SF" plus one. + *_CONTROL.ROM listed as Roland MT-32/CM-32L control ROMs. + ref: dosbox_pure_libretro.cpp:1380-1412 + Both feed the Audio > MIDI SoundFont option, prefixed with the system + directory path at apply time. + ref: dosbox_pure_libretro.cpp:2495 + With no MIDI file selected, mpu401 is set to none and games fall back to + their OPL or Sound Blaster music driver. A General MIDI over OPL + synthesizer is built in and opens on midiconfig=adlib. + ref: dosbox_pure_libretro.cpp:2497, midi_opl.h:46-49 + + MT-32 pairing: the PCM ROM is not scanned. Its name is derived from the + control ROM path by replacing CONTROL with PCM, preserving the case of both + letters, so MT32_CONTROL.ROM resolves MT32_PCM.ROM. Open fails unless both + are found. + ref: midi_mt32.h:182-201,194-195 + ZIP archives are accepted and picked by size instead of name: 65536 or + 131072 for control, 524288 or 1048576 for PCM. + ref: midi_mt32.h:163 + Bundled MUNT (header-only mt32emu.h) validates size and SHA1 against a + 14 entry table and rejects anything else, failing Synth::open. + ref: mt32emu.h:5185,2979-2989,3013-3020 + Each control ROM fixes the PCM size it accepts through its pcmCount: 128 + requires the 524288 byte MT-32 PCM ROM, 256 requires the 1048576 byte + CM-32L PCM ROM. The MT-32 v2.x control ROMs carry pcmCount 128 and so pair + with the MT-32 PCM ROM. + ref: mt32emu.h:2586-2598,3167,3024-3029 + + SoundFonts are parsed by TinySoundFont with no size or hash check. SF3 ogg + compressed samples decode through the bundled stb_vorbis. + ref: midi_tsf.h:22,65,96-105 + + Per game override: a DOSBOX.SF2, or an MT32_PCM.ROM together with an + MT32_CONTROL.ROM, found on the mounted C: drive replaces the option value + and is marked fixed. The control ROM is matched through its 8.3 forms + MT32TROL.ROM inside ZIPs and MT32_C~1.ROM on local file systems. + ref: dosbox_pure_libretro.cpp:2803-2813 + MIDI ZIPs are looked up in the content directory before the system directory. + ref: dosbox_pure_libretro.cpp:906-914 + + Keyboard layouts and codepages are compiled in, external keyboard.sys, + keybrd2.sys, keybrd3.sys and EGA*.CPI loading is disabled. + ref: include/config.h:58, dos_keyboard_layout.cpp:729-819 + + Other system directory entries carry no fixed identity and are not listed + as files. Hard disk images (*.IMG, *.IMA, *.VHD of at least 7 MB and a + multiple of 512 bytes) are created by the Install New Operating System + feature and booted as C:. *.DOSZ archives are shells the user assembles, + underlaid below C: and started through WINDOWS.BAT, AUTOEXEC.BAT or + WINDOWS\WIN.COM. DOSBoxPureMidiCache.txt is written by the emulator when a + scan exceeds two seconds and read back to skip later scans. + ref: dosbox_pure_libretro.cpp:1413-1424,1425-1446,1452-1466, + dosbox_pure_run.h:187-210,289-297 + +files: + # -- MT-32 control ROMs (64 KB, pair with MT32_PCM.ROM) -- + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v1.04" + required: false + hle_fallback: true + size: 65536 + sha1: "5a5cb5a77d7d55ee69657c2f870416daed52dea7" + validation: [sha1, size] + source_ref: "mt32emu.h:5112,5129" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v1.05" + required: false + hle_fallback: true + size: 65536 + sha1: "e17a3a6d265bf1fa150312061134293d2b58288c" + validation: [sha1, size] + source_ref: "mt32emu.h:5113,5130" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v1.06" + required: false + hle_fallback: true + size: 65536 + sha1: "a553481f4e2794c10cfe597fef154eef0d8257de" + validation: [sha1, size] + source_ref: "mt32emu.h:5114,5131" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v1.07" + required: false + hle_fallback: true + size: 65536 + sha1: "b083518fffb7f66b03c23b7eb4f868e62dc5a987" + validation: [sha1, size] + source_ref: "mt32emu.h:5115,5132" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control BlueRidge" + required: false + hle_fallback: true + size: 65536 + sha1: "7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92" + validation: [sha1, size] + source_ref: "mt32emu.h:5116,5133" + + # -- MT-32 v2.x control ROMs (128 KB, pair with MT32_PCM.ROM) -- + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v2.03" + required: false + hle_fallback: true + size: 131072 + sha1: "5837064c9df4741a55f7c4d8787ac158dff2d3ce" + validation: [sha1, size] + source_ref: "mt32emu.h:5118,5135" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v2.04" + required: false + hle_fallback: true + size: 131072 + sha1: "2c16432b6c73dd2a3947cba950a0f4c19d6180eb" + validation: [sha1, size] + source_ref: "mt32emu.h:5119,5136" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v2.06" + required: false + hle_fallback: true + size: 131072 + sha1: "2869cf4c235d671668cfcb62415e2ce8323ad4ed" + validation: [sha1, size] + source_ref: "mt32emu.h:5120,5137" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v2.07" + required: false + hle_fallback: true + size: 131072 + sha1: "47b52adefedaec475c925e54340e37673c11707c" + validation: [sha1, size] + source_ref: "mt32emu.h:5121,5138" + + # -- CM-32L / LAPC-I control ROMs (64 KB, pair with CM32L_PCM.ROM) -- + + - name: "CM32L_CONTROL.ROM" + description: "CM-32L/LAPC-I Control v1.00" + required: false + hle_fallback: true + size: 65536 + sha1: "73683d585cd6948cc19547942ca0e14a0319456d" + validation: [sha1, size] + source_ref: "mt32emu.h:5122,5139" + + - name: "CM32L_CONTROL.ROM" + description: "CM-32L/LAPC-I Control v1.02" + required: false + hle_fallback: true + size: 65536 + sha1: "a439fbb390da38cada95a7cbb1d6ca199cd66ef8" + validation: [sha1, size] + source_ref: "mt32emu.h:5123,5140" + + # -- CM-32LN / CM-500 / LAPC-N control ROM (64 KB, pairs with CM32L_PCM.ROM) -- + + - name: "CM32LN_CONTROL.ROM" + description: "CM-32LN/CM-500/LAPC-N Control v1.00" + required: false + hle_fallback: true + size: 65536 + sha1: "dc1c5b1b90a4646d00f7daf3679733c7badc7077" + validation: [sha1, size] + source_ref: "mt32emu.h:5124,5141" + + # -- PCM ROMs -- + + - name: "MT32_PCM.ROM" + description: "MT-32 PCM ROM" + required: false + hle_fallback: true + size: 524288 + sha1: "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252" + validation: [sha1, size] + source_ref: "mt32emu.h:5126,5143" + note: "accepted by every MT-32 control ROM, v1.x and v2.x (pcmCount 128)" + + - name: "CM32L_PCM.ROM" + description: "CM-32L/CM-64/LAPC-I PCM ROM" + required: false + hle_fallback: true + size: 1048576 + sha1: "289cc298ad532b702461bfc738009d9ebe8025ea" + validation: [sha1, size] + aliases: ["CM32LN_PCM.ROM"] + source_ref: "mt32emu.h:5127,5144" + note: > + accepted by the CM-32L and CM-32LN control ROMs (pcmCount 256). The + alias covers the name derived from CM32LN_CONTROL.ROM. + + # -- General MIDI SoundFont -- + + - name: "DOSBOX.SF2" + description: "General MIDI SoundFont (any .sf2/.sf3 accepted)" + required: false + hle_fallback: true + source_ref: "dosbox_pure_libretro.cpp:1407,2805" + note: > + Any .SF2 or .SF3 in the system directory is listed in the MIDI option. + DOSBOX.SF2 is the fixed name looked up on the mounted C: drive as a per + game override. diff --git a/emulators/dosbox-staging.yml b/emulators/dosbox-staging.yml new file mode 100644 index 00000000..9ee8e903 --- /dev/null +++ b/emulators/dosbox-staging.yml @@ -0,0 +1,642 @@ +emulator: DOSBox Staging +type: standalone +core_classification: enhanced_fork +source: "https://github.com/dosbox-staging/dosbox-staging" +upstream: "https://github.com/dosbox-staging/dosbox-staging" +source_commit: "18756c8df3425db24373bb856d620ede868b7568" +profiled_date: "2026-08-08" +core_version: "0.84.0-alpha" +display_name: "DOS (DOSBox Staging)" +cores: + - dosbox-staging +systems: + - dos + - ibm-pc + - ibm-pcjr + - tandy-1000 +mode: standalone + +notes: | + Continuation of DOSBox on a C++23 codebase, SDL3, libmt32emu and FluidSynth + from vcpkg. The machine setting selects a video adapter (hercules, cga, + cga_mono, ega, svga_s3, svga_et3000, svga_et4000, svga_paradise, vesa_nolfb, + vesa_oldvbe) or a machine (pcjr, tandy). + ref: dosbox.cpp:1317-1329, vcpkg.json + + No system BIOS: the PC BIOS, video BIOS fonts, keyboard layouts and codepage + tables are implemented in code. + ref: int10_memory.cpp:160, dos_keyboard_layout_data.h + + MIDI devices that need external data are mt32, soundcanvas and fluidsynth. + A device that fails to initialise throws, MIDI_Init warns and retries with + mididevice = port, then disables MIDI output. Emulation continues either way. + ref: midi.cpp:794-850 + + MT-32/CM-32L: libmt32emu identifies every candidate by file size then SHA1, + so file names carry no meaning; a directory scan caches which ROM ids each + directory holds and logs anything unrecognised. + ref: mt32_lasynth_model.cpp:36-97, munt ROMInfo.cpp:206-213 + A model needs one control ROM and one PCM ROM, supplied either as a full + image (addROMFile) or as the two chip dumps merged in memory + (mergeAndAddROMFiles): control halves are byte-interleaved, PCM halves are + concatenated. + ref: mt32_lasynth_model.cpp:114-151, munt ROMInfo.cpp:312-331 + model = auto resolves the first available of cm32l_102, cm32l_100, + cm32ln_100, mt32_107, mt32_106, mt32_105, mt32_104, mt32_bluer, mt32_207, + mt32_206, mt32_204, mt32_203; the aliases cm32l, mt32, mt32_old and mt32_new + restrict that list. MIXER /LISTMIDI prints what was found. + ref: mt32.cpp:278-331, 504-557 + Search order is romdir, then mt32-roms in the configuration directory, then + the platform locations (C:\mt32-rom-data on Windows; + ~/Library/Audio/Sounds/MT32-Roms and /usr/{local/,}share/mt32-rom-data on + macOS; $XDG_DATA_HOME/dosbox/mt32-roms, $XDG_DATA_HOME/mt32-rom-data, + $XDG_DATA_DIRS/mt32-rom-data and $XDG_CONFIG_HOME/dosbox/mt32-roms on Linux). + A relative romdir resolves against the working directory, so a game folder + can carry its own set. + ref: mt32.cpp:385-396, 416-485 + + Sound Canvas: the SC-55 is emulated by the Nuked SC55 CLAP plugin, loaded + from a plugins directory next to the executable, in the configuration + directory or under the XDG data directories. DOSBox Staging resolves the ROM + directory candidates, canonicalises the ones that exist and exports them as + SOUNDCANVAS_ROM_PATH; the plugin appends the per-model subdirectory, hashes + every file under 4 MB it finds there and matches SHA256 against its table. + ref: soundcanvas.cpp:326-373, support.cpp:351-379, + Nuked-SC55-CLAP nuked_sc55.cpp:117-215, rom_loader.cpp:32-63, + rom_io.cpp:271-564 + soundcanvas_model = auto resolves sc55_121, sc55_120, sc55_110, sc55_100, + sc55_200, sc55mk2_101, sc55mk2_100 in that order by matching plugin names. + The plugin publishes six descriptors: SC-55 v1.00, v1.10, v1.20, v1.21, + v2.00 and SC-55mk2 v1.01. + ref: soundcanvas.cpp:55-71, 80-147, Nuked-SC55-CLAP plugin.cpp:23-90 + + FluidSynth: the soundfont setting names a file, tried as given and with .sf2 + appended, in soundfont_dir, then soundfonts in the configuration directory, + then the platform locations. fluid_synth_sfload is the only check. The + SoundFont name from the RIFF INFO chunk and the file stem select reverb, + chorus and filter presets for four known banks. + ref: fluidsynth.cpp:107-230, 672-689, 816-883, 1229-1252 + + Bundled data ships with the program and is read from the resources directory + next to the executable: FreeDOS codepages and keyboard layouts, translations, + shaders and shader presets, CGA colour presets, drive noise samples, the + mounted Y: drive utilities, the web interface and the manual pages. + ref: support.cpp:300-320, dos_code_page.cpp:1828, dos_keyboard_layout.cpp:70, + messages.cpp:1073, shader_manager.cpp:236,404, int10_modes.cpp:2302, + disk_noise.cpp:187, autoexec.cpp:759 + + BIOSTEST.COM loads an arbitrary BIOS image at F000:0 and is compiled only + when the debugger is enabled, which is off by default. + ref: dos/CMakeLists.txt:81-83, biostest.h + +files: + # File names are documentation only: libmt32emu and the Sound Canvas plugin + # scan their directory and identify every candidate by hash, so any name + # works. The names used here are the ROM identifiers of libmt32emu and the + # file names of the published Sound Canvas ROM pack. + + # -- MT-32 control ROMs, full images (65536 bytes) -- + # Loaded through addROMFile. Interleaved chip dumps are listed below and + # merged in memory when the full image is absent. + + - name: "ctrl_mt32_1_04.rom" + path: "mt32-roms/ctrl_mt32_1_04.rom" + description: "MT-32 Control v1.04" + required: false + size: 65536 + sha1: "5a5cb5a77d7d55ee69657c2f870416daed52dea7" + validation: [sha1, size] + source_ref: "mt32.cpp:110,154-160, munt ROMInfo.cpp:59,89" + + - name: "ctrl_mt32_1_05.rom" + path: "mt32-roms/ctrl_mt32_1_05.rom" + description: "MT-32 Control v1.05" + required: false + size: 65536 + sha1: "e17a3a6d265bf1fa150312061134293d2b58288c" + validation: [sha1, size] + source_ref: "mt32.cpp:114,162-168, munt ROMInfo.cpp:62,92" + + - name: "ctrl_mt32_1_06.rom" + path: "mt32-roms/ctrl_mt32_1_06.rom" + description: "MT-32 Control v1.06" + required: false + size: 65536 + sha1: "a553481f4e2794c10cfe597fef154eef0d8257de" + validation: [sha1, size] + source_ref: "mt32.cpp:118,170-176, munt ROMInfo.cpp:65,95" + + - name: "ctrl_mt32_1_07.rom" + path: "mt32-roms/ctrl_mt32_1_07.rom" + description: "MT-32 Control v1.07" + required: false + size: 65536 + sha1: "b083518fffb7f66b03c23b7eb4f868e62dc5a987" + validation: [sha1, size] + source_ref: "mt32.cpp:122,178-184, munt ROMInfo.cpp:68,98" + + - name: "ctrl_mt32_bluer.rom" + path: "mt32-roms/ctrl_mt32_bluer.rom" + description: "MT-32 Control BlueRidge" + required: false + size: 65536 + sha1: "7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92" + validation: [sha1, size] + source_ref: "mt32.cpp:126,186-192, munt ROMInfo.cpp:71,101" + + # -- MT-32 v2.x control ROMs, full images (131072 bytes) -- + # MAME dumps mt32_2.0.3.ic28, mt32_2.0.4.ic28 and mt32_2.0.7.ic28. + + - name: "ctrl_mt32_2_03.rom" + path: "mt32-roms/ctrl_mt32_2_03.rom" + description: "MT-32 Control v2.03" + required: false + size: 131072 + sha1: "5837064c9df4741a55f7c4d8787ac158dff2d3ce" + validation: [sha1, size] + source_ref: "mt32.cpp:130,194-200, munt ROMInfo.cpp:73,103" + + - name: "ctrl_mt32_2_04.rom" + path: "mt32-roms/ctrl_mt32_2_04.rom" + description: "MT-32 Control v2.04" + required: false + size: 131072 + sha1: "2c16432b6c73dd2a3947cba950a0f4c19d6180eb" + validation: [sha1, size] + source_ref: "mt32.cpp:132,202-208, munt ROMInfo.cpp:74,104" + + - name: "ctrl_mt32_2_06.rom" + path: "mt32-roms/ctrl_mt32_2_06.rom" + description: "MT-32 Control v2.06" + required: false + size: 131072 + sha1: "2869cf4c235d671668cfcb62415e2ce8323ad4ed" + validation: [sha1, size] + source_ref: "mt32.cpp:134,210-216, munt ROMInfo.cpp:75,105" + + - name: "ctrl_mt32_2_07.rom" + path: "mt32-roms/ctrl_mt32_2_07.rom" + description: "MT-32 Control v2.07" + required: false + size: 131072 + sha1: "47b52adefedaec475c925e54340e37673c11707c" + validation: [sha1, size] + source_ref: "mt32.cpp:136,218-224, munt ROMInfo.cpp:76,106" + + # -- CM-32L family control ROMs, full images (65536 bytes) -- + # MAME dumps lapc-i.v1.0.0.ic3.bin and cm32l_control.rom. + + - name: "ctrl_cm32l_1_00.rom" + path: "mt32-roms/ctrl_cm32l_1_00.rom" + description: "CM-32L/LAPC-I Control v1.00" + required: false + size: 65536 + sha1: "73683d585cd6948cc19547942ca0e14a0319456d" + validation: [sha1, size] + source_ref: "mt32.cpp:143,226-232, munt ROMInfo.cpp:77,107" + + - name: "ctrl_cm32l_1_02.rom" + path: "mt32-roms/ctrl_cm32l_1_02.rom" + description: "CM-32L/LAPC-I Control v1.02" + required: false + size: 65536 + sha1: "a439fbb390da38cada95a7cbb1d6ca199cd66ef8" + validation: [sha1, size] + source_ref: "mt32.cpp:144,234-240, munt ROMInfo.cpp:78,108" + + - name: "ctrl_cm32ln_1_00.rom" + path: "mt32-roms/ctrl_cm32ln_1_00.rom" + description: "CM-32LN/CM-500/LAPC-N Control v1.00" + required: false + size: 65536 + sha1: "dc1c5b1b90a4646d00f7daf3679733c7badc7077" + validation: [sha1, size] + source_ref: "mt32.cpp:145,242-248, munt ROMInfo.cpp:79,109" + + # -- MT-32 control ROM chip dumps (32768 bytes each) -- + # The _a dump holds the even bytes, the _b dump the odd ones; munt + # interleaves the pair into the full 65536 byte image. + # MAME dumps mt32_1.0.X.ic27.bin (_a) and mt32_1.0.X.ic26.bin (_b), + # blue_ridge__mt32a.bin (_a) and blue_ridge__mt32b.bin (_b). + + - name: "ctrl_mt32_1_04_a.rom" + path: "mt32-roms/ctrl_mt32_1_04_a.rom" + description: "MT-32 Control v1.04, even bytes" + required: false + size: 32768 + sha1: "9cd4858014c4e8a9dff96053f784bfaac1092a2e" + validation: [sha1, size] + source_ref: "mt32.cpp:111,154-160, munt ROMInfo.cpp:57,87" + + - name: "ctrl_mt32_1_04_b.rom" + path: "mt32-roms/ctrl_mt32_1_04_b.rom" + description: "MT-32 Control v1.04, odd bytes" + required: false + size: 32768 + sha1: "fe8db469b5bfeb37edb269fd47e3ce6d91014652" + validation: [sha1, size] + source_ref: "mt32.cpp:112,154-160, munt ROMInfo.cpp:58,88" + + - name: "ctrl_mt32_1_05_a.rom" + path: "mt32-roms/ctrl_mt32_1_05_a.rom" + description: "MT-32 Control v1.05, even bytes" + required: false + size: 32768 + sha1: "57a09d80d2f7ca5b9734edbe9645e6e700f83701" + validation: [sha1, size] + source_ref: "mt32.cpp:115,162-168, munt ROMInfo.cpp:60,90" + + - name: "ctrl_mt32_1_05_b.rom" + path: "mt32-roms/ctrl_mt32_1_05_b.rom" + description: "MT-32 Control v1.05, odd bytes" + required: false + size: 32768 + sha1: "52e3c6666db9ef962591a8ee99be0cde17f3a6b6" + validation: [sha1, size] + source_ref: "mt32.cpp:116,162-168, munt ROMInfo.cpp:61,91" + + - name: "ctrl_mt32_1_06_a.rom" + path: "mt32-roms/ctrl_mt32_1_06_a.rom" + description: "MT-32 Control v1.06, even bytes" + required: false + size: 32768 + sha1: "cc83bf23cee533097fb4c7e2c116e43b50ebacc8" + validation: [sha1, size] + source_ref: "mt32.cpp:119,170-176, munt ROMInfo.cpp:63,93" + + - name: "ctrl_mt32_1_06_b.rom" + path: "mt32-roms/ctrl_mt32_1_06_b.rom" + description: "MT-32 Control v1.06, odd bytes" + required: false + size: 32768 + sha1: "bf4f15666bc46679579498386704893b630c1171" + validation: [sha1, size] + source_ref: "mt32.cpp:120,170-176, munt ROMInfo.cpp:64,94" + + - name: "ctrl_mt32_1_07_a.rom" + path: "mt32-roms/ctrl_mt32_1_07_a.rom" + description: "MT-32 Control v1.07, even bytes" + required: false + size: 32768 + sha1: "13f06b38f0d9e0fc050b6503ab777bb938603260" + validation: [sha1, size] + source_ref: "mt32.cpp:123,178-184, munt ROMInfo.cpp:66,96" + + - name: "ctrl_mt32_1_07_b.rom" + path: "mt32-roms/ctrl_mt32_1_07_b.rom" + description: "MT-32 Control v1.07, odd bytes" + required: false + size: 32768 + sha1: "c55e165487d71fa88bd8c5e9c083bc456c1a89aa" + validation: [sha1, size] + source_ref: "mt32.cpp:124,178-184, munt ROMInfo.cpp:67,97" + + - name: "ctrl_mt32_bluer_a.rom" + path: "mt32-roms/ctrl_mt32_bluer_a.rom" + description: "MT-32 Control BlueRidge, even bytes" + required: false + size: 32768 + sha1: "11a6ae5d8b6ee328b371af7f1e40b82125aa6b4d" + validation: [sha1, size] + source_ref: "mt32.cpp:127,186-192, munt ROMInfo.cpp:69,99" + + - name: "ctrl_mt32_bluer_b.rom" + path: "mt32-roms/ctrl_mt32_bluer_b.rom" + description: "MT-32 Control BlueRidge, odd bytes" + required: false + size: 32768 + sha1: "e0934320d7cbb5edfaa29e0d01ae835ef620085b" + validation: [sha1, size] + source_ref: "mt32.cpp:128,186-192, munt ROMInfo.cpp:70,100" + + # -- PCM ROMs -- + # Every MT-32 model, v1.x and v2.x, pairs with the MT-32 PCM ROM. The CM-32L + # models pair with the 1 MB image, whose first half is the MT-32 PCM ROM. + # MAME dumps r15449121.ic37.bin (ic9 on CM-32L boards), r15179844.ic21.bin, + # r15179845.ic22.bin and r15179945.ic8.bin. + + - name: "pcm_mt32.rom" + path: "mt32-roms/pcm_mt32.rom" + description: "MT-32 PCM ROM" + required: false + size: 524288 + sha1: "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252" + validation: [sha1, size] + note: > + also serves as the first half of the CM-32L PCM ROM, paired with + pcm_cm32l_h.rom + source_ref: "mt32.cpp:138,151, munt ROMInfo.cpp:83,113,115" + + - name: "pcm_mt32_l.rom" + path: "mt32-roms/pcm_mt32_l.rom" + description: "MT-32 PCM ROM, first half" + required: false + size: 262144 + sha1: "3a1e19b0cd4036623fd1d1d11f5f25995585962b" + validation: [sha1, size] + source_ref: "mt32.cpp:139, munt ROMInfo.cpp:81,111" + + - name: "pcm_mt32_h.rom" + path: "mt32-roms/pcm_mt32_h.rom" + description: "MT-32 PCM ROM, second half" + required: false + size: 262144 + sha1: "2cadb99d21a6a4a6f5b61b6218d16e9b43f61d01" + validation: [sha1, size] + source_ref: "mt32.cpp:140, munt ROMInfo.cpp:82,112" + + - name: "pcm_cm32l.rom" + path: "mt32-roms/pcm_cm32l.rom" + description: "CM-32L/CM-64/LAPC-I PCM ROM" + required: false + size: 1048576 + sha1: "289cc298ad532b702461bfc738009d9ebe8025ea" + validation: [sha1, size] + source_ref: "mt32.cpp:147,226-248, munt ROMInfo.cpp:85,117" + + - name: "pcm_cm32l_h.rom" + path: "mt32-roms/pcm_cm32l_h.rom" + description: "CM-32L/CM-64/LAPC-I PCM ROM, second half" + required: false + size: 524288 + sha1: "3ad889fde5db5b6437cbc2eb6e305312fec3df93" + validation: [sha1, size] + source_ref: "mt32.cpp:148, munt ROMInfo.cpp:84,116" + + # -- Roland SC-55 wave ROMs -- + # Shared by every SC-55 firmware version. The plugin scans one model + # directory at a time, so each SC-55-v* directory in use needs its own copy. + + - name: "sc55_waverom1.bin" + path: "soundcanvas-roms/SC-55-v1.21/sc55_waverom1.bin" + description: "SC-55 wave ROM A (R15209276)" + required: false + max_size: 2097152 + sha256: "5655509a531804f97ea2d7ef05b8fec20ebf46216b389a84c44169257a4d2007" + validation: [sha256, size] + source_ref: "Nuked-SC55-CLAP rom_io.cpp:340, emu.cpp:238, pcm.h:83" + + - name: "sc55_waverom2.bin" + path: "soundcanvas-roms/SC-55-v1.21/sc55_waverom2.bin" + description: "SC-55 wave ROM B (R15209277)" + required: false + max_size: 2097152 + sha256: "c655b159792d999b90df9e4fa782cf56411ba1eaa0bb3ac2bdaf09e1391006b1" + validation: [sha256, size] + source_ref: "Nuked-SC55-CLAP rom_io.cpp:342, emu.cpp:238, pcm.h:84" + + - name: "sc55_waverom3.bin" + path: "soundcanvas-roms/SC-55-v1.21/sc55_waverom3.bin" + description: "SC-55 wave ROM C (R15209281)" + required: false + max_size: 1048576 + sha256: "334b2d16be3c2362210fdbec1c866ad58badeb0f84fd9bf5d0ac599baf077cc2" + validation: [sha256, size] + source_ref: "Nuked-SC55-CLAP rom_io.cpp:344, emu.cpp:238, pcm.h:85" + + # -- Roland SC-55 MCU ROMs, one pair per firmware version -- + + - name: "sc55_rom1.bin" + path: "soundcanvas-roms/SC-55-v1.00/sc55_rom1.bin" + description: "SC-55 v1.00 MCU ROM (R15199748)" + required: false + max_size: 32768 + sha256: "b4ecf44bc0520322b0d114d397951d3bf92ca6fa51d0d27b2407df58a6be2efe" + validation: [sha256, size] + source_ref: "Nuked-SC55-CLAP rom_io.cpp:336, emu.cpp:238, mcu.h:216" + + - name: "sc55_rom2.bin" + path: "soundcanvas-roms/SC-55-v1.00/sc55_rom2.bin" + description: "SC-55 v1.00 program ROM (R15449258)" + required: false + max_size: 524288 + sha256: "014e2e21ea30de7a1e4f1cdea14dd9a719960535e257a9e40e98dbb1a5870226" + validation: [sha256, size] + source_ref: "Nuked-SC55-CLAP rom_io.cpp:338, emu.cpp:247-254, mcu.h:217" + + - name: "sc55_rom1.bin" + path: "soundcanvas-roms/SC-55-v1.10/sc55_rom1.bin" + description: "SC-55 v1.10 MCU ROM (R15199736)" + required: false + max_size: 32768 + sha256: "2fe88ec39f3ef4b1de8cdf74527419467975c47f7aacfcd07605e01d54bd89b5" + validation: [sha256, size] + source_ref: "Nuked-SC55-CLAP rom_io.cpp:351, emu.cpp:238, mcu.h:216" + + - name: "sc55_rom2.bin" + path: "soundcanvas-roms/SC-55-v1.10/sc55_rom2.bin" + description: "SC-55 v1.10 program ROM (R15209275)" + required: false + max_size: 524288 + sha256: "ec064d6c4fc70ec990911089d966043cb819fba0e26e6f6afdd0a05e5301b91b" + validation: [sha256, size] + source_ref: "Nuked-SC55-CLAP rom_io.cpp:353, emu.cpp:247-254, mcu.h:217" + + - name: "sc55_rom1.bin" + path: "soundcanvas-roms/SC-55-v1.20/sc55_rom1.bin" + description: "SC-55 v1.20 and v1.21 MCU ROM (R15199778)" + required: false + max_size: 32768 + sha256: "7e1bacd1d7c62ed66e465ba05597dcd60dfc13fc23de0287fdbce6cf906c6544" + validation: [sha256, size] + note: "same dump in the SC-55-v1.20 and SC-55-v1.21 directories" + source_ref: "Nuked-SC55-CLAP rom_io.cpp:366,381, emu.cpp:238, mcu.h:216" + + - name: "sc55_rom2.bin" + path: "soundcanvas-roms/SC-55-v1.20/sc55_rom2.bin" + description: "SC-55 v1.20 program ROM (R15209337)" + required: false + max_size: 524288 + sha256: "22ce6ca59e6332143b335525e81fab501ea6fccce4b7e2f3bfc2cc8bf6612ff6" + validation: [sha256, size] + source_ref: "Nuked-SC55-CLAP rom_io.cpp:368, emu.cpp:247-254, mcu.h:217" + + - name: "sc55_rom2.bin" + path: "soundcanvas-roms/SC-55-v1.21/sc55_rom2.bin" + description: "SC-55 v1.21 program ROM (R15209363)" + required: false + max_size: 524288 + sha256: "effc6132d68f7e300aaef915ccdd08aba93606c22d23e580daf9ea6617913af1" + validation: [sha256, size] + source_ref: "Nuked-SC55-CLAP rom_io.cpp:383, emu.cpp:247-254, mcu.h:217" + + - name: "sc55_rom1.bin" + path: "soundcanvas-roms/SC-55-v2.00/sc55_rom1.bin" + description: "SC-55 v2.00 MCU ROM (R15199799)" + required: false + max_size: 32768 + sha256: "24a65c97cdbaa847d6f59193523ce63c73394b4b693a6517ee79441f2fb8a3ee" + validation: [sha256, size] + source_ref: "Nuked-SC55-CLAP rom_io.cpp:396, emu.cpp:238, mcu.h:216" + + - name: "sc55_rom2.bin" + path: "soundcanvas-roms/SC-55-v2.00/sc55_rom2.bin" + description: "SC-55 v2.00 program ROM (R15209387)" + required: false + max_size: 524288 + sha256: "f5dac35d450ab986570a209dff3816eec75cee669e161f54b51224b467dd0bcc" + validation: [sha256, size] + source_ref: "Nuked-SC55-CLAP rom_io.cpp:398, emu.cpp:247-254, mcu.h:217" + + # -- Roland SC-55mk2 v1.01 -- + + - name: "rom1.bin" + path: "soundcanvas-roms/SC-55mk2-v1.01/rom1.bin" + description: "SC-55mk2 v1.01 MCU ROM (R15199858)" + required: false + max_size: 32768 + sha256: "8a1eb33c7599b746c0c50283e4349a1bb1773b5c0ec0e9661219bf6c067d2042" + validation: [sha256, size] + source_ref: "Nuked-SC55-CLAP rom_io.cpp:295, emu.cpp:238, mcu.h:216" + + - name: "rom2.bin" + path: "soundcanvas-roms/SC-55mk2-v1.01/rom2.bin" + description: "SC-55mk2 v1.01 program ROM (R00233567)" + required: false + max_size: 524288 + sha256: "a4c9fd821059054c7e7681d61f49ce6f42ed2fe407a7ec1ba0dfdc9722582ce0" + validation: [sha256, size] + source_ref: "Nuked-SC55-CLAP rom_io.cpp:297, emu.cpp:247-254, mcu.h:217" + + - name: "rom_sm.bin" + path: "soundcanvas-roms/SC-55mk2-v1.01/rom_sm.bin" + description: "SC-55mk2 v1.01 sub-MCU ROM (R15199880)" + required: false + max_size: 4096 + sha256: "b0b5f865a403f7308b4be8d0ed3ba2ed1c22db881b8a8326769dea222f6431d8" + validation: [sha256, size] + source_ref: "Nuked-SC55-CLAP rom_io.cpp:299, emu.cpp:238, submcu.h:62" + + - name: "waverom1.bin" + path: "soundcanvas-roms/SC-55mk2-v1.01/waverom1.bin" + description: "SC-55mk2 wave ROM 16M (R15209359)" + required: false + max_size: 2097152 + sha256: "c6429e21b9b3a02fbd68ef0b2053668433bee0bccd537a71841bc70b8874243b" + validation: [sha256, size] + source_ref: "Nuked-SC55-CLAP rom_io.cpp:301, emu.cpp:238, pcm.h:83" + + - name: "waverom2.bin" + path: "soundcanvas-roms/SC-55mk2-v1.01/waverom2.bin" + description: "SC-55mk2 wave ROM 8M (R15279813)" + required: false + max_size: 2097152 + sha256: "5b753f6cef4cfc7fcafe1430fecbb94a739b874e55356246a46abe24097ee491" + validation: [sha256, size] + source_ref: "Nuked-SC55-CLAP rom_io.cpp:303, emu.cpp:238, pcm.h:84" + + # -- SC-55mk2 program ROMs with Capital Tone Fallback restored -- + # Accepted in place of the stock SC-55mk2 program ROM. + + - name: "rom2.bin" + path: "soundcanvas-roms/SC-55mk2-v1.01/rom2.bin" + description: "SC-55mk2 program ROM, strict SC-55 tones, SC-55 v1.21 drums" + required: false + max_size: 524288 + sha256: "64f8c9daf1021cf86ea4ddf03a29b81b5ea0c18e74f462833023436388bb9dc4" + validation: [sha256, size] + source_ref: "Nuked-SC55-CLAP rom_io.cpp:553" + + - name: "rom2.bin" + path: "soundcanvas-roms/SC-55mk2-v1.01/rom2.bin" + description: "SC-55mk2 program ROM, strict SC-55 tones, SC-55 v2.00 drums" + required: false + max_size: 524288 + sha256: "14d14778caf46ffa9e3d608aa8e9c1a60c32bd4a536c26af3b2e1d81784c60f9" + validation: [sha256, size] + source_ref: "Nuked-SC55-CLAP rom_io.cpp:555" + + - name: "rom2.bin" + path: "soundcanvas-roms/SC-55mk2-v1.01/rom2.bin" + description: "SC-55mk2 program ROM, SC-55 tones, SC-55 v1.21 drums" + required: false + max_size: 524288 + sha256: "10b3f09485a74bb014f1a940d5c67f380c7979b62891d540d788154c83f17430" + validation: [sha256, size] + source_ref: "Nuked-SC55-CLAP rom_io.cpp:557" + + - name: "rom2.bin" + path: "soundcanvas-roms/SC-55mk2-v1.01/rom2.bin" + description: "SC-55mk2 program ROM, SC-55 tones, SC-55 v2.00 drums" + required: false + max_size: 524288 + sha256: "a2c720be1ab9115930d27f821a413c0366b7bf0c4ddfe0dadc5086136a1a4345" + validation: [sha256, size] + source_ref: "Nuked-SC55-CLAP rom_io.cpp:559" + + - name: "rom2.bin" + path: "soundcanvas-roms/SC-55mk2-v1.01/rom2.bin" + description: "SC-55mk2 program ROM, SC-55mkII tones, SC-55 v1.21 drums" + required: false + max_size: 524288 + sha256: "16cec615da10089beffe6de5129ba8ba33fa1bf017a5e6b78ad1d6d15cf4708e" + validation: [sha256, size] + source_ref: "Nuked-SC55-CLAP rom_io.cpp:561" + + - name: "rom2.bin" + path: "soundcanvas-roms/SC-55mk2-v1.01/rom2.bin" + description: "SC-55mk2 program ROM, SC-55mkII tones, SC-55 v2.00 drums" + required: false + max_size: 524288 + sha256: "c22bf7d34a3406530924d750b007bbdb470f3216c65086edb6e53023383ee907" + validation: [sha256, size] + source_ref: "Nuked-SC55-CLAP rom_io.cpp:563" + + # -- FluidSynth SoundFont -- + + - name: "default.sf2" + path: "soundfonts/default.sf2" + description: "General MIDI SoundFont" + required: false + aliases: + - "GeneralUser-GS.sf2" + - "FluidR3_GM.sf2" + - "Fluid_R3_GM_GS.sf2" + - "4gmgsmt-sf2_04-compat.sf2" + - "4GMGSMT.SF2" + - "synthgs-sf2_04-compat.sf2" + note: > + any SoundFont loads; GeneralUser GS, Fluid R3, the AWE32 4MB GM/GS/MT + bank and the Trevor0402 SC-55 SoundFont are recognised by filename or + RIFF INFO name and get their own reverb, chorus and filter presets + source_ref: "fluidsynth.cpp:672-689, 816-883, 1229-1242" + + # -- PCjr system ROM -- + + - name: "system.rom" + description: "IBM PCjr system ROM" + required: false + min_size: 57344 + validation: [size] + note: > + read during PCjr cartridge boot from the current DOS drive, then from + the host working directory; bytes 0x3000 to 0xDFFF are copied to + physical F3000. A short read leaves the region untouched and the + cartridge still boots + source_ref: "boot.cpp:379-397, 83-124" + + # -- LOADROM images -- + # Read from the mounted DOS drive under the name given on the command line + # and identified by their contents. + + - name: "IBM PC Cassette BASIC ROM" + description: "IBM BASIC ROM image mapped at F600:0" + required: false + size: 32768 + validation: [size] + note: > + accepted when the file is exactly 32768 bytes, starts with E9 8F 7E and + carries the string IBM at offset 0x4CD4 + source_ref: "loadrom.cpp:56-80,95" + + - name: "Video BIOS ROM" + description: "Option ROM image mapped at C000:0 and initialised" + required: false + min_size: 16384 + max_size: 32768 + validation: [size] + note: > + accepted when the file is 16384 bytes or larger, starts with 55 AA, + has byte 3 masked to E8 and carries the string IBM at offset 0x1E; + needs an EGA or better machine type + source_ref: "loadrom.cpp:56-75,88-93" diff --git a/emulators/dosbox-x.yml b/emulators/dosbox-x.yml new file mode 100644 index 00000000..3a775b11 --- /dev/null +++ b/emulators/dosbox-x.yml @@ -0,0 +1,461 @@ +emulator: DOSBox-X +type: standalone +core_classification: enhanced_fork +source: "https://github.com/joncampbell123/dosbox-x" +upstream: "https://github.com/joncampbell123/dosbox-x" +source_commit: "9fc3c0e000890504bcfc0ef5620cb97bdfc11262" +profiled_date: "2026-08-08" +core_version: "2026.08.02" +display_name: "DOS (DOSBox-X)" +cores: + - dosbox-x + - dosboxx +systems: + - dos + - ibm-pc + - ibm-pcjr + - tandy-1000 + - pc-98 +mode: standalone + +notes: | + Fork of DOSBox SVN with its own DOS kernel. The machine setting picks the + emulated hardware: mda, cga and its composite variants, hercules, + hercules_plus, hercules_incolor, hercules_color, tandy, pcjr, amstrad, + olivetti/m24/att6300, pc3270, ega, ega200, jega, mcga, vgaonly, the S3, + Tseng, Paradise and ATI SVGA cards, the vesa variants, and pc98/pc9801/pc9821. + fm_towns is marked STUB in the same list. + ref: dosbox.cpp:1526-1562 + + No system BIOS: the PC BIOS, VGA BIOS, video fonts, keyboard layouts, codepage + tables, the Z: drive utilities including GLIDE2X.OVL, and the TTF text font are + compiled in. + ref: int10_memory.cpp, dos_keyboard_layout_data.h, dos_codepages.h, + builtin/glide2x.cpp:2861, output_ttf.cpp:664 + + Files named without a directory are searched in the working directory, the + program directory, the user configuration directory and the resource + directory. On Linux the configuration directory is $XDG_CONFIG_HOME/dosbox-x + or ~/.config/dosbox-x, and the resource directory is $XDG_DATA_HOME/dosbox-x, + then /usr/local/share/dosbox-x, then /usr/share/dosbox-x. Windows uses + C:\DOSBox-X. + ref: int10.cpp:1442-1485, cross.cpp:120-167 + + MT-32: libmt32emu is built from src/libs/mt32. Only four file names are ever + opened, and each candidate is identified by exact file size then SHA1, so the + name says nothing about the contents. addROMFile matches against the full + image list only, which rejects the interleaved chip dumps. + ref: midi_mt32.h:74-109, c_interface.cpp:442-462, ROMInfo.cpp:206-215 + mt32.model = auto opens CM32L_CONTROL.ROM then MT32_CONTROL.ROM, and + CM32L_PCM.ROM then MT32_PCM.ROM; cm32l keeps only the CM32L names, mt32 only + the MT32 names. The directory is mt32.romdir, then the working directory, then + the resource directory, then the configuration directory. A missing pair logs + the accepted file names and disables the device. + ref: midi_mt32.h:246-275, dosbox.cpp:3571-3576 + + FluidSynth reads fluid.soundfont; fluid_synth_sfload is the only check. With + the setting empty it probes /usr/share/soundfonts/default.sf2, + /usr/share/sounds/sf2/FluidR3_GM.sf2 and GeneralUser_GS.sf2 on Linux, and + C:\soundfonts\default.sf2 then the two same names under C:\DOSBox-X on Windows. + ref: midi_synth.h:342-384, 462-480 + + PC-98 character generator, tried in order: FONT.ROM as generated by T98Tools, + then the FONTX2 files named by pc-98 fontx sbcs and pc-98 fontx dbcs, then the + file named by pc-98 anex86 font or ANEX86.BMP followed by FREECG98.BMP, then + the built-in FREECG single-byte font and the built-in Japanese double-byte + font. Each stage fills only what the previous one left empty. + ref: int10.cpp:1882-1893, 1652-1675 + + PC-98 sound board BIOS: with pc-98 sound bios set, SOUND.ROM is read from the + working directory into CC000h. Without it a callback Sound BIOS is installed + at CEE0:0000 answering INT D2h. + ref: pc98_fm.cpp:367-385, 416-434 + + DOS/V and CJK text: fontxsbcs, fontxsbcs16, fontxsbcs24, fontxdbcs, + fontxdbcs14 and fontxdbcs24 name font files. LoadFontxFile reads a FONTX2 + header, otherwise tries BDF and PCF, otherwise accepts a raw bitmap font + identified by its size, which covers ASC16 and ASCFONT.15 from UCDOS and ETen + Chinese DOS, ASC24, HZK14, HZK16, HZK24 and STDFONT.15 and STDFONT.24. + Unset settings fall back to the built-in font data. + ref: int_dosv.cpp:654-749, 1631-1710, dosbox.cpp:2533-2568 + + BOOT -bios loads a BIOS image at the top of the first megabyte, truncated to + 128 KB, or 96 KB on PC-98 where it also looks for .itf.rom, .ITF.ROM, + itf.rom and ITF.ROM to serve the bank switched Initial Firmware Test region + through port 43Dh. + ref: dos_programs.cpp:2243-2331 + + BIOSTEST.COM loads an image of up to 64 KB at F000:0 and restarts the CPU at + the reset vector; it is compiled only when the debugger is enabled. The + settings call binary on reset and call binary on boot load blobs of up to + 128 KB into the ROM BIOS area for CPU testing. + ref: dos_programs.cpp:3578-3637, bios.cpp:13072-13145 + + Glide passthrough loads glide2x.dll, libglide2x.so or libglide2x.dylib. + ref: glide.cpp:353-359, dosbox.cpp:3471-3473 + + ttf.font, ttf.fontbold, ttf.fontital and ttf.fontboit name a TTF, OTF, FON or + TTC font resolved through the same search order plus the system font + directories. Unset, the TTF output uses the built-in font, except on PC-98 or + a double-byte code page where SarasaGothicFixed.ttf is tried first. + ref: output_ttf.cpp:318-473, 653-668 + + Shipped in the resource directory: FREECG98.BMP, wqy_11pt.bdf, wqy_12pt.bdf, + Nouveau_IBM.ttf, SarasaGothicFixed.ttf and the two reference configuration + files. + ref: src/Makefile.am:14-22 + + Overrides for data that is compiled in: the boot logo PNG, the mapper file, + the customcodepage translation table, .kl layout files and the KEYBOARD.SYS + to KEYBRD4.SYS libraries read from a mounted drive, the glshaders directory + and the .lng translations. + ref: bios.cpp:11321-11330, sdlmain.cpp:7001-7008, + dos.cpp:4397-4420, dos_keyboard_layout.cpp:300-340, + render.cpp:1538-1545, messages.cpp:294-320 + +files: + # -- MT-32 and CM-32L control ROMs -- + # Read through addROMFile from mt32.romdir, the working directory, the + # resource directory or the configuration directory. Both control file names + # are opened in mt32.model = auto, so either name carries any of these images. + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v1.04" + required: false + size: 65536 + sha1: "5a5cb5a77d7d55ee69657c2f870416daed52dea7" + validation: [sha1, size] + aliases: ["CM32L_CONTROL.ROM"] + source_ref: "midi_mt32.h:81-89, ROMInfo.cpp:59,89" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v1.05" + required: false + size: 65536 + sha1: "e17a3a6d265bf1fa150312061134293d2b58288c" + validation: [sha1, size] + aliases: ["CM32L_CONTROL.ROM"] + source_ref: "midi_mt32.h:81-89, ROMInfo.cpp:62,92" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v1.06" + required: false + size: 65536 + sha1: "a553481f4e2794c10cfe597fef154eef0d8257de" + validation: [sha1, size] + aliases: ["CM32L_CONTROL.ROM"] + source_ref: "midi_mt32.h:81-89, ROMInfo.cpp:65,95" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v1.07" + required: false + size: 65536 + sha1: "b083518fffb7f66b03c23b7eb4f868e62dc5a987" + validation: [sha1, size] + aliases: ["CM32L_CONTROL.ROM"] + source_ref: "midi_mt32.h:81-89, ROMInfo.cpp:68,98" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control BlueRidge" + required: false + size: 65536 + sha1: "7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92" + validation: [sha1, size] + aliases: ["CM32L_CONTROL.ROM"] + source_ref: "midi_mt32.h:81-89, ROMInfo.cpp:71,101" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v2.03" + required: false + size: 131072 + sha1: "5837064c9df4741a55f7c4d8787ac158dff2d3ce" + validation: [sha1, size] + aliases: ["CM32L_CONTROL.ROM"] + source_ref: "midi_mt32.h:81-89, ROMInfo.cpp:73,103" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v2.04" + required: false + size: 131072 + sha1: "2c16432b6c73dd2a3947cba950a0f4c19d6180eb" + validation: [sha1, size] + aliases: ["CM32L_CONTROL.ROM"] + source_ref: "midi_mt32.h:81-89, ROMInfo.cpp:74,104" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v2.06" + required: false + size: 131072 + sha1: "2869cf4c235d671668cfcb62415e2ce8323ad4ed" + validation: [sha1, size] + aliases: ["CM32L_CONTROL.ROM"] + source_ref: "midi_mt32.h:81-89, ROMInfo.cpp:75,105" + + - name: "MT32_CONTROL.ROM" + description: "MT-32 Control v2.07" + required: false + size: 131072 + sha1: "47b52adefedaec475c925e54340e37673c11707c" + validation: [sha1, size] + aliases: ["CM32L_CONTROL.ROM"] + source_ref: "midi_mt32.h:81-89, ROMInfo.cpp:76,106" + + - name: "CM32L_CONTROL.ROM" + description: "CM-32L/LAPC-I Control v1.00" + required: false + size: 65536 + sha1: "73683d585cd6948cc19547942ca0e14a0319456d" + validation: [sha1, size] + aliases: ["MT32_CONTROL.ROM"] + source_ref: "midi_mt32.h:81-89, ROMInfo.cpp:77,107" + + - name: "CM32L_CONTROL.ROM" + description: "CM-32L/LAPC-I Control v1.02" + required: false + size: 65536 + sha1: "a439fbb390da38cada95a7cbb1d6ca199cd66ef8" + validation: [sha1, size] + aliases: ["MT32_CONTROL.ROM"] + source_ref: "midi_mt32.h:81-89, ROMInfo.cpp:78,108" + + - name: "CM32L_CONTROL.ROM" + description: "CM-32LN/CM-500/LAPC-N Control v1.00" + required: false + size: 65536 + sha1: "dc1c5b1b90a4646d00f7daf3679733c7badc7077" + validation: [sha1, size] + aliases: ["MT32_CONTROL.ROM"] + source_ref: "midi_mt32.h:81-89, ROMInfo.cpp:79,109" + + # -- MT-32 and CM-32L PCM ROMs -- + # Every MT-32 control ROM pairs with the MT-32 PCM ROM, every CM-32L family + # control ROM with the 1 MB image. + + - name: "MT32_PCM.ROM" + description: "MT-32 PCM ROM" + required: false + size: 524288 + sha1: "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252" + validation: [sha1, size] + aliases: ["CM32L_PCM.ROM"] + source_ref: "midi_mt32.h:93-105, ROMInfo.cpp:83,113" + + - name: "CM32L_PCM.ROM" + description: "CM-32L/CM-64/LAPC-I PCM ROM" + required: false + size: 1048576 + sha1: "289cc298ad532b702461bfc738009d9ebe8025ea" + validation: [sha1, size] + aliases: ["MT32_PCM.ROM"] + source_ref: "midi_mt32.h:93-105, ROMInfo.cpp:85,117" + + # -- FluidSynth SoundFont -- + + - name: "default.sf2" + description: "General MIDI SoundFont" + required: false + aliases: + - "FluidR3_GM.sf2" + - "GeneralUser_GS.sf2" + note: > + any SF2 or SF3 file loads; fluid.soundfont names it and + fluid_synth_sfload is the only check + source_ref: "midi_synth.h:346-384, 462-473, dosbox.cpp:3710" + + # -- PC-98 character generator -- + + - name: "FONT.ROM" + description: "PC-98 character generator ROM, T98Tools layout" + required: false + hle_fallback: true + size: 288768 + validation: [size] + note: > + 256 8x8 cells at 0x0, 256 8x16 cells at 0x800, 96 by 92 16x16 cells at + 0x1800; a file of any other length is rejected. Enabled by + pc-98 try font rom, on by default + source_ref: "int10.cpp:1487-1549, dosbox.cpp:2477-2478" + + - name: "ANEX86.BMP" + description: "PC-98 character generator, Anex86 bitmap" + required: false + hle_fallback: true + note: > + 2048 by 2048 monochrome Windows bitmap, biSize 40, one plane, one bit per + pixel, no compression, inverse colour scheme; the first row is the 8x16 + single-width set and the rest is 16x16 full-width. Also reachable through + the pc-98 anex86 font setting, which is tried before FONT.ROM + source_ref: "int10.cpp:1555-1647, dosbox.cpp:2481-2484" + + - name: "FREECG98.BMP" + description: "PC-98 character generator, free generated bitmap" + required: false + hle_fallback: true + note: > + same bitmap layout as ANEX86.BMP and tried after it; ships in the resource + directory + source_ref: "int10.cpp:1577-1580, src/Makefile.am:17" + + # -- CJK bitmap fonts -- + # Read when the guest code page is 936, 949, 950 or 951 and a character has no + # equivalent in the built-in Japanese font. The .pcf form of each name is + # tried after the .bdf form. + + - name: "wqy_12pt.bdf" + description: "WenQuanYi 16-pixel bitmap font" + required: false + aliases: ["wqy_12pt.pcf"] + note: "ships in the resource directory" + source_ref: "int_dosv.cpp:1197-1218, src/Makefile.am:19" + + - name: "wqy_11pt.bdf" + description: "WenQuanYi 14-pixel bitmap font" + required: false + aliases: ["wqy_11pt.pcf"] + note: "ships in the resource directory" + source_ref: "int_dosv.cpp:1296-1316, src/Makefile.am:18" + + - name: "SarasaGothicFixed.ttf" + description: "CJK fixed-width TrueType font" + required: false + hle_fallback: true + note: > + tried by the TTF output on PC-98 and on double-byte code pages when + ttf.font is unset, and by the printer when the selected typeface file is + missing; ships in the resource directory + source_ref: "output_ttf.cpp:655-668, printer.cpp:354-380, src/Makefile.am:21" + + # -- Printer typefaces -- + # Read from the directory named by the printer fontpath setting, default + # FONTS, then from the configuration, resource and program directories. + # FT_New_Face is the only check. + + - name: "roman.ttf" + path: "FONTS/roman.ttf" + description: "Printer Roman typeface" + required: false + note: "also the fallback typeface for any unmapped LQ selection" + source_ref: "printer.cpp:320-321, 336-337, dosbox.cpp:4597" + + - name: "sansserif.ttf" + path: "FONTS/sansserif.ttf" + description: "Printer Sans Serif typeface" + required: false + source_ref: "printer.cpp:323-324, dosbox.cpp:4597" + + - name: "courier.ttf" + path: "FONTS/courier.ttf" + description: "Printer Courier typeface" + required: false + source_ref: "printer.cpp:326-327, dosbox.cpp:4597" + + - name: "script.ttf" + path: "FONTS/script.ttf" + description: "Printer Script typeface" + required: false + source_ref: "printer.cpp:329-330, dosbox.cpp:4597" + + - name: "ocra.ttf" + path: "FONTS/ocra.ttf" + description: "Printer OCR-A typeface" + required: false + note: "serves both the OCR-A and OCR-B selections" + source_ref: "printer.cpp:332-334, dosbox.cpp:4597" + + # -- PC-98 sound board BIOS -- + + - name: "SOUND.ROM" + description: "PC-9801-26K/86 FM board BIOS" + required: false + hle_fallback: true + min_size: 16384 + validation: [size] + note: > + 16 KB read into CC000h from the working directory only, when + pc-98 sound bios and pc-98 load sound bios rom file are both set + source_ref: "pc98_fm.cpp:367-385, dosbox.cpp:2378-2386" + + # -- Video BIOS ROM images -- + # Loaded in place of the built-in INT 10h when vga bios use rom image is set. + # The name comes from vga bios rom image, or from the machine type when that + # setting is empty. + + - name: "et4000.bin" + description: "Tseng ET4000 video BIOS" + required: false + min_size: 1024 + max_size: 65536 + validation: [size] + note: "default file name for machine = svga_et4000" + source_ref: "dosbox.cpp:938-982, 2745-2757" + + - name: "TRIO64 (Ver. 1.5-07) [VGA] (S3 Incorporated).bin" + description: "S3 Trio64 video BIOS" + required: false + min_size: 1024 + max_size: 65536 + validation: [size] + note: "default file name for machine = svga_s3" + source_ref: "dosbox.cpp:943-945, 2745-2757" + + - name: "Video BIOS option ROM" + description: "Option ROM image mapped at C000:0 and initialised" + required: false + min_size: 16384 + max_size: 32768 + validation: [size] + note: > + read by LOADROM.COM from a mounted local drive; accepted when the file + starts with 55 AA, byte 3 masked with 0xFC equals 0xE8 and the string IBM + appears at offset 0x1E, and the machine is EGA or better + source_ref: "dos_programs.cpp:3520-3546, 3557-3562" + + # -- IBM ROM BASIC -- + + - name: "IBMROMBASIC-F6000h-1982-10-27.ROM" + description: "IBM 5150 Cassette BASIC ROM" + required: false + min_size: 32768 + max_size: 65536 + validation: [size] + note: > + the ibm rom basic setting maps it just below the ROM BIOS and accepts + 32 KB to 64 KB in 4 KB steps; LOADROM.COM maps the same image at F600:0 + when it is exactly 32768 bytes, starts with E9 8F 7E and carries the + string IBM at offset 0x4CD4 + source_ref: "bios.cpp:13007-13027, dos_programs.cpp:3547-3551, dosbox.cpp:1931-1933" + + # -- PCjr -- + + - name: "system.rom" + description: "IBM PCjr system ROM" + required: false + min_size: 57344 + validation: [size] + note: > + read during PCjr cartridge boot; bytes 0x3000 to 0xDFFF are copied to + physical F3000. A short read leaves the region untouched and the cartridge + still boots + source_ref: "dos_programs.cpp:3058-3067" + + # -- Whole system BIOS images -- + + - name: "System BIOS image" + description: "PC/AT or PC-98 BIOS ROM image booted by BOOT -bios" + required: false + note: > + loaded at the top of the first megabyte, rounded up to a paragraph and + truncated to 128 KB, or to 96 KB on PC-98; a larger image is clamped + rather than rejected + source_ref: "dos_programs.cpp:2243-2292" + + - name: "ITF.ROM" + description: "PC-98 Initial Firmware Test BIOS" + required: false + max_size: 32768 + validation: [size] + note: > + served through the port 43Dh bank switch alongside a BOOT -bios image; + .itf.rom is tried before the bare name so one directory can hold + several + source_ref: "dos_programs.cpp:2294-2325" diff --git a/emulators/dosbox_pure.yml b/emulators/dosbox_pure.yml index 03b9d333..0125948b 100644 --- a/emulators/dosbox_pure.yml +++ b/emulators/dosbox_pure.yml @@ -164,7 +164,10 @@ files: sha1: "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252" validation: [sha1, size] source_ref: "mt32emu.h:5126,5143" - note: "pairs with any MT-32 v1.x control ROM" + note: > + accepted by every MT-32 control ROM, v1.x and v2.x. Each control ROM + fixes the PCM size it accepts through its pcmCount: 128 requires this + 524288 byte image. ref: mt32emu.h:2586-2598,3167,3025 - name: "CM32L_PCM.ROM" description: "CM-32L/CM-64/LAPC-I PCM ROM" @@ -173,8 +176,13 @@ files: size: 1048576 sha1: "289cc298ad532b702461bfc738009d9ebe8025ea" validation: [sha1, size] + aliases: ["CM32LN_PCM.ROM"] source_ref: "mt32emu.h:5127,5144" - note: "pairs with MT-32 v2.x or CM-32L control ROMs. Lower half aliases MT-32 PCM." + note: > + accepted by the CM-32L and CM-32LN control ROMs, which carry pcmCount + 256 and require this 1048576 byte image. The alias covers the name + derived from CM32LN_CONTROL.ROM. + ref: mt32emu.h:2586-2598,3167,3025, midi_mt32.h:194-195 # -- General MIDI SoundFont --