Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Roland MT-32 emulation

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:

  1. Control ROM (for example v1.07 or v2.07)

  2. PCM ROM (sample data)

Supported modules include MT-32 (both generations), CM-32L, LAPC-I, and CM-32LN.

Example ROM hashes

FilenameVersionSHA-1 Hash
mt32_ctrl_2_07.romMT-32 control v2.0747b52adefedaec475c925e54340e37673c11707c
MT32_CONTROL.ROMMT-32 control v1.07b083518fffb7f66b03c23b7eb4f868e62dc5a987
MT32_PCM.ROMMT-32 PCM (both generations)f6b1eebc4b2d200ec6d3d21d51325d5b48c60252
CM32L_PCM.ROMCM-32L / CM-64 / LAPC-I PCM289cc298ad532b702461bfc738009d9ebe8025ea

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:

  1. Navigate to I/O Ports -> Serial Port.

  2. Set Device / Mode to MIDI.

  3. Set MIDI output to MT-32.

  4. Select paths for Control ROM and PCM ROM.

  5. 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 oled

Command-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

KeyValuesDescription
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_romFile pathPath to Control ROM image
mt32_pcm_romFile pathPath to PCM ROM image
mt32_paneltrue / falseDisplay 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

The MT-32 front panel

When mt32_panel = true is set, a panel modelled on the MT-32’s front panel is shown below the video output:

Panel controls

ControlFunction
PART 1-5, PART RSelect part to configure
SOUND GROUPCycle sound group (Preset A, Preset B, Memory, Rhythm)
SOUNDSelect patch number (0-63)
VOLUMEAdjust volume for selected part (0-100)
MASTER VOLUMEAdjust overall synthesizer output level
DialAdjust the value shown: left click or hold turns it up, right click down, or drag it
POWERSwitch 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:

CombinationFunction
MASTER VOLUME + SOUND GROUPAdjust master tuning (427.5 to 452.6 Hz)
MASTER VOLUME + VOLUMESelect reverb mode (0-3)
MASTER VOLUME + SOUNDMIDI unit number (fixed at 1 here: there is only one module on the cable)
MASTER VOLUME + PART 1, 2, 3Select parts 6, 7, and 8
MASTER VOLUME + PART 4Overflow assign (confirm with PART 1); it needs a second module, so the panel only says so
MASTER VOLUME + PART 5Move parts 1-8 to MIDI channels 1-8, or back to 2-9 (confirm with PART 1)
MASTER VOLUME + PART RSystem master reset (confirm with PART 1)

Startup combinations (Power off)

With power off, latch the buttons (right-click) and click POWER:

CombinationFunction
MASTER VOLUME + POWERPlay the demo songs in the control ROM (second-generation ROMs carry them)
PART 1 + PART 3 + MASTER VOLUME + POWERShow the control ROM’s version

LCD display styles

ValueAppearancePreview
mt32The MT-32’s own: lighter green characters on a green backlightMT-32 LCD
superjvA Super JV’s: pale green characters on deep blueSuperJV LCD
sseriesAn S-series sampler’s: near-black characters on a sky-blue backlightSSeries LCD
oledA replacement OLED panel: green characters on blackOLED LCD

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