Copperline includes built-in Roland MT-32 emulation via
mt32-rs, a Rust port of Munt’s
mt32emu. Guest MIDI bytes go straight from Paula’s serial port into the
engine, with no host MIDI software involved, and its audio is mixed with the
Amiga’s four Paula channels.
An interactive virtual front panel can be displayed beneath the video output.
ROM requirements¶
To use MT-32 emulation, you must provide two ROM images:
Control ROM (for example v1.07 or v2.07)
PCM ROM (sample data)
Supported modules include MT-32 (both generations), CM-32L, LAPC-I, and CM-32LN.
Example ROM hashes¶
| Filename | Version | SHA-1 Hash |
|---|---|---|
mt32_ctrl_2_07.rom | MT-32 control v2.07 | 47b52adefedaec475c925e54340e37673c11707c |
MT32_CONTROL.ROM | MT-32 control v1.07 | b083518fffb7f66b03c23b7eb4f868e62dc5a987 |
MT32_PCM.ROM | MT-32 PCM (both generations) | f6b1eebc4b2d200ec6d3d21d51325d5b48c60252 |
CM32L_PCM.ROM | CM-32L / CM-64 / LAPC-I PCM | 289cc298ad532b702461bfc738009d9ebe8025ea |
The engine identifies each ROM by its size and SHA-1 checksum, not its file name, and refuses an image it does not recognize.
Configuration¶
In the launcher:
Navigate to I/O Ports -> Serial Port.
Set Device / Mode to
MIDI.Set MIDI output to
MT-32.Select paths for Control ROM and PCM ROM.
Optionally turn on Front panel and choose its Display style.
In copperline.toml:
[serial]
mode = "midi"
midi_out = "mt32"
mt32_control_rom = "/path/to/MT32_CONTROL.ROM"
mt32_pcm_rom = "/path/to/MT32_PCM.ROM"
mt32_panel = true # Show front panel (default: false)
mt32_lcd = "mt32" # Display style: mt32, superjv, sseries, or oledCommand-line usage:
./target/release/copperline --model A1200 KICK31.ROM \
--midi-out mt32 \
--mt32-control-rom MT32_CONTROL.ROM \
--mt32-pcm-rom MT32_PCM.ROM \
--mt32-panel[serial] configuration keys¶
| Key | Values | Description |
|---|---|---|
midi_out | "mt32" | Route serial MIDI output to built-in MT-32 |
midi_in | "mt32" | Wire MT-32 MIDI OUT back to serial input |
mt32_control_rom | File path | Path to Control ROM image |
mt32_pcm_rom | File path | Path to PCM ROM image |
mt32_panel | true / false | Display virtual front panel (default: false) |
mt32_lcd | "mt32", "superjv", "sseries", "oled" (or 1-4) | LCD appearance style (default: "mt32") |
The --midi-out mt32 and --midi-in mt32 flags imply --serial midi, and
--mt32-control-rom, --mt32-pcm-rom and --mt32-panel set the matching keys.
With no ROM path set, file dialogs open in the roms/mt32 folder ([paths] mt32_roms).
Patch editors and librarians¶
Patch editors and librarians (for example Caged Artist MT-32 Editor) send
SysEx requests and expect replies. Set midi_in = "mt32" to route the
emulated module’s MIDI OUT back into the Amiga’s serial port.
Virtual front panel¶

When mt32_panel = true is set, a panel modelled on the MT-32’s front panel
is shown below the video output:
Left click: Press a button.
Right click: Latch a button down, for multi-button combinations (up to three buttons).
Panel controls¶
| Control | Function |
|---|---|
| PART 1-5, PART R | Select part to configure |
| SOUND GROUP | Cycle sound group (Preset A, Preset B, Memory, Rhythm) |
| SOUND | Select patch number (0-63) |
| VOLUME | Adjust volume for selected part (0-100) |
| MASTER VOLUME | Adjust overall synthesizer output level |
| Dial | Adjust the value shown: left click or hold turns it up, right click down, or drag it |
| POWER | Switch the module off or on; switching on starts a fresh engine with its power-on defaults |
Multi-button combinations (Powered on)¶
Hold MASTER VOLUME (right-click), then click the corresponding button:
| Combination | Function |
|---|---|
MASTER VOLUME + SOUND GROUP | Adjust master tuning (427.5 to 452.6 Hz) |
MASTER VOLUME + VOLUME | Select reverb mode (0-3) |
MASTER VOLUME + SOUND | MIDI unit number (fixed at 1 here: there is only one module on the cable) |
MASTER VOLUME + PART 1, 2, 3 | Select parts 6, 7, and 8 |
MASTER VOLUME + PART 4 | Overflow assign (confirm with PART 1); it needs a second module, so the panel only says so |
MASTER VOLUME + PART 5 | Move parts 1-8 to MIDI channels 1-8, or back to 2-9 (confirm with PART 1) |
MASTER VOLUME + PART R | System master reset (confirm with PART 1) |
Startup combinations (Power off)¶
With power off, latch the buttons (right-click) and click POWER:
| Combination | Function |
|---|---|
MASTER VOLUME + POWER | Play the demo songs in the control ROM (second-generation ROMs carry them) |
PART 1 + PART 3 + MASTER VOLUME + POWER | Show the control ROM’s version |
LCD display styles¶
| Value | Appearance | Preview |
|---|---|---|
mt32 | The MT-32’s own: lighter green characters on a green backlight | ![]() |
superjv | A Super JV’s: pale green characters on deep blue | ![]() |
sseries | An S-series sampler’s: near-black characters on a sky-blue backlight | ![]() |
oled | A replacement OLED panel: green characters on black | ![]() |
Runtime controls¶
While the machine runs, the pop-up menu’s Serial Port -> MIDI Out submenu switches the MIDI output between the MT-32, Coppersynth, and host MIDI ports without restarting emulation, and MIDI In offers the MT-32 as the input while it is the output.
With the MT-32 selected, the Serial Port -> MT-32 submenu toggles the Front Panel, picks its Display style, and shows the loaded Control ROM and PCM ROM, each with a Load... item to choose another image. A ROM loaded there stays in use when the machine is stopped and started again.
Building without MT-32 support¶
To exclude MT-32 support when compiling from source, leave out the mt32
feature (see Cargo features):
cargo build --release --no-default-features \
--features "midi,frontend,wasm-boards,control,ctl-bin,import-uae-bin,net-nat,net-bridge,fluxbridge,coppersynth,cpu-jit,profile-stats,game-library,mhi,cd-mp3,cd32-fmv,gdb,dap,netplay-internet,host-serial"Troubleshooting¶
MT-32: missing ROM(s): One or both ROM paths are not set.MT-32: invalid ROM(s): A file could not be read, or the engine does not recognize it as a supported MT-32 ROM (or the two images do not make a pair).Diagnostic logging: Set
COPPERLINE_MT32_DEBUG=1to log everything the module does, orCOPPERLINE_MIDI_DEBUG=1to trace MIDI byte flow (COPPERLINE_MIDI_DEBUG=2also decodes each message).



