I bought a Roland SC-55ST MIDI synth, basically on a whim! It's almost straight-forwards to use, there doesn't seem to be a good reference anywhere.

If you're curious how to hook up a MIDI synthesizer or "tone generator", hopefully this should answer your questions.

External or Waveblaster Synths

The external units are the most common type of synthesizer - the "classic" units like Roland SC-55, SC-88 and Yamaha MU50/80/100. These units connect via either a MIDI cable, or a special serial cable and live outside the computer.

WaveBlaster units are a plain PCB that attaches to a special header on the Sound Card itself, but usually work the same way as an external unit. The setup is naturally going to depend on both the synth card and the sound card.

Including the specifics of the data connection (read onwards), you will also need to connect the audio output of the Synth either to your speakers, or to your Sound Card's Line-In. If you use the latter, you can control the MIDI volume using the Sound Card's volume controls, and it will come out the output with other game sounds to your speakers.

MIDI Cable

If you're playing games that expect full control of the hardware (MS-DOS, booter disks, some older (3.1 or older) Windows games), your best best is to use a "native" MIDI port.

That means, technically speaking, a device sitting at address 0x330 (or 0x300) that accepts data and relays it to a MIDI OUT port.

Practically speaking, this would be an MPU-401 (ISA card _and_ external unit), or a sound card with a combined DB15 gameport / MIDI interface.

If you've got an MPU-401, it should be as simple as

  • Install the MPU-401 host card in the computer
  • Connect the host card to the MPU-401
  • Connect the synth to the MPU-401 via a standard MIDI cable (5-pin DIN 180, pins 4 and 5 connect through)
  • Connect the synth to Line-In of your sound card, or to your speakers
  • Power it all up
  • Configure your game to use "General MIDI" "MPU-401" etc.

Game port

All (?) SoundBlaster cards from the SB16 onwards should support MIDI on the game port. I would imagine that any cards from around the same time period (1995-2005ish?) will support it too.

Note: The SB16 is only capable of emulating the MPU-401's simple "UART" mode. Games made prior to the SB16 typically expect intelligent mode, which means they'll sound wrong (or not work at all). Examples include Monkey Island, but later games (DOOM for example) usually assume UART only-mode by default

The PicoGUS, a Gravis UltraSound replica using a Raspberry Pi Pico, has an alternate firmware that emulates an MPU-401. This might be worth investigating if you need Intelligent Mode.

Make sure that your sound card's jumpers (and BLASTER etc.) settings have the MIDI interface turned on, set to 330h address, and if required, to use the game port instead of internal synthesis.

Game port to MIDI

To connect the synth to the game port, you need to convert the SB16's active low voltage signal to a current loop. This schematic works well enough.

In essence, when the SB16's MIDI out signal goes low, your should push ~6mA of current through pins 4 & 5 of the MIDI cable. This should be enough to turn on an LED in an opto-coupler in the synth.

Once you have that set up, you can proceed to set up your game.

USB MIDI Interface

You can also buy USB MIDI interfaces, but some of the cheaper ones don't do certain messages properly. I was able to get a Roland UA-20 working with both Linux and Windows 10 (required modifying and re-signing the driver to install). The UA-20 does need to be using the "Advanced Driver" mode for the MIDI ports to show up.

Once installed, you'll get the interface "normally".

Game setup

The SB16 style interface should reside at the same address as a real MPU-401, so you only need to configure the games to expect a "UART" style interface. Most games made after about 1992 should be fine. If presented with an option, select "General MIDI" "SoundCanvas" or similar - "Sound Blaster xx" might mean it'll use the SB's internal synth instead.

Serial cable

The synthesizers I have - SC-55ST, MU15 and MU80 - all allow a connection to a computer via a serial port. In this instance, the program / game must know how to talk to a serial port to send the data. This is where it gets "fun".

Ensure you have a working, free serial port (i.e. not the one for your mouse). The driver will assume full control of the port, so you'll need to disable the driver if you use the port with something else.

All of these use a RS-232 to Mac style RS-485 converter cable. Roland's schematics are slightly different to Yamaha's, and from testing, the Roland cable won't work on a Yamaha.

Roland SC-55ST:

Diagram of two cables, one Mini-DIN-9 to DE9, and a Mini-DIN-9 to DB25. DE9 goes Pin 1 to 8, 2 to 7, 3 to 2, 4 to 5, 5 to 3. DB25 goes 1 to 5, 2 to 4, 3 to 3, 4 to 7, 5 to 2.

Yamaha MU-80:

Diagram of two cables, one Mini-DIN-9 to DB25, and a Mini-DIN-9 to DE9. DB25 goes 1 to 5, 2 to 4, 3 to 3, 4 to 7, 8 to 7, 5 to 2. DE9 goes Pin 1 to 8, 2 to 7, 3 to 2, 4 to 5, 8 to 5, 5 to 3.

Make the cable that suits your synth, but it looks like a MU-80 cable will work on the SC55.

Both brands use the same switch, so make sure your syths are set to PC-2 and connected to your designated serial port.

Finally, there's a little bit of extra setup that the sound driver installation usually takes care of for you.

MS-DOS

TBC

Windows 3.1

  • Download and install the Roland Serial Port Driver (W3.1) available here: < TODO >

  • Select the output port in the driver settings:

    • Image showing the Windows 3.1 UI of Control Panel, Drivers, Roland Serial MIDI Driver settings, with COM2 selected.
  • Set the MIDI output / port map in MIDI settings:

    • Image showing the Windows 3.1 UI of Control Panel, MIDI Mapper, with the "Roland" MIDI Map setup, showing all source and destination channels going to the "Roland Serial MIDI Output".
  • Test play canyon.mid via the media player!

Windows 9x

As for 3.1, you need a free serial port.

Windows XP

Linux (Modern)

I couldn't get a serial MIDI interface to work properly on Linux, the player that I was able to use didn't seem to understand some messages. I would recommend using a proper MIDI interface instead.

Notes for Linux

MIDI is handled as part of ALSA. If you have a device that's got drivers, you should have a port visible under amidi -l.

You can play MIDI files with Rosegarden, it seems to support all of the necessary messages.