feat: profile cpcemu and dosbox variants

This commit is contained in:
Abdessamad Derraz committed 2026-08-08 06:19:38 +02:00
1 parent 25f8537a4a
commit 56baa3f23f
5 files changed
+1626 -2

No files matched your search

+266
View File
@@ -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.
+247
View File
@@ -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.
+642
View File
@@ -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"
+461
View File
@@ -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 <image>.itf.rom, <image>.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;
<image>.itf.rom is tried before the bare name so one directory can hold
several
source_ref: "dos_programs.cpp:2294-2325"
+10 -2
View File
@@ -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 --