I knew next to nothing about MIDI when I started this restoration project. Back in the days, I was vaguely aware that some DOS games could play music via a "canvas" available in their respective SETUP.EXE
. I never had the means to buy any Roland equipment (which I assumed was for professionals) but I assumed the music was better.
Fast forward 30 years, a plethora of Youtube videos show how MIDI music are not just a "little" better. They completely change the gaming experience.
MONKEY.EXE | |
---|---|
SoundBlaster FM | Roland MIDI |
True connoisseurs will favor The Secret Of Monkey Island in EGA and MT-32 audio. Making anything that looks this beautiful with only 16 colors is a testament to the craft and mastery level of Lucasarts artists.
Monkey Island is not the only game to take things to another level. DOOM and DUKE3D are also up there with stellar soundtracks.
DOOM.EXE | |
---|---|
SoundBlaster FM | Roland MIDI |
DUKE3D.EXE | |
---|---|
SoundBlaster FM | Roland MIDI |
Since I was starting from scratch, my first step was to build a mental model of the sound flow. The big picture of MIDI music playback is as follows.
┌────────────────────┐ │ │ MIDI commands ┌──────────────┐ │ ├──────────────────────►│ Synthesizer │ │ │ └──────┬───────┘ │ │ │ │ IBM PC │ │ Music │ │ │ │ │ Sound effects ┌──────▼───────┐ ┌───────────┐ │ ├──────────────────────►│ Mixer ├───►│ Speakers │ └────────────────────┘ └──────────────┘ └───────────┘
There are many ways to implement this and many pieces of hardware you can add (see LGR videos for impressive hardware mountain[1]) but I wanted to keep it as simple as possible.
The configuration I landed on was to have the Sound Blaster 16 generate both the sound effects and the MIDI commands. A special cable DB-15 to MIDI connected to the Game Port of the SB16 would carry the MIDI commands to the MIDI sound generator (a.k.a: Synthesizer).
There are many MIDI synthesizers available, LGR did a fantastic series about them[2][3][4][5][6]. I selected the Roland SoundCanvas SC-55ST (review by ctrl-alt-rees) because it is tiny, minimalist, inexpensive, beige, and looks decent in vertical position.
The SC-55ST audio output is routed back into the Sound Blaster 16 ASP via the "line-in" jack (still with me?). Finally both audio streams are mixed by the SB16 and sent to the "output jack" towards the speakers.
┌────────────────────┐ │ ┌────────┐ │ MIDI commands ┌──────────────┐ │ PC │ SB16 │ DB-15├──────────────────────►│ │ │ └────────┘ │ │ SC55-ST │ │ ┌────────┐ │ Music analog │ │ │ │ SB16 │ in │◄──────────────────────┤ │ │ └───┬────┘ │ └──────────────┘ │ │ │ │ │ │ ┌──────────────┐ │ │ │ Music + │ │ │ ┌───▼────┐ │ Sound effects │ Speakers │ │ │ SB16 │ out ├──────────────────────►│ │ │ └────────┘ │ │ │ └────────────────────┘ └──────────────┘
My SC-55ST came without a power supply. That was the opportunity to understand better the power requirement marking on the back. Voltage and Amperage are obvious but one must also pay attention to the polarity sign. The SC-55ST uses a negative center[7].
I plugged everything in, ran DOOM's SETUP.EXE
to select "GeneralMidi/SoundCanvas" with I/O port 330h. And of course, as usual, it did not work. I could hear the sound effects but not the music.
With a system made of so many parts, it can be difficult to troubleshot where the problem is coming from. I received help on Vogons[8] and I found it convenient to walk down the data flow and list what could go wrong in each sub-modules.
Here is the way I answer all of them.
1. Games such as DUKE3D have a SETUP.EXE
which can test if the I/O port is working.
2. Keep track of the I/O port and IRQs in a table. Use ASTRA
to verify.
3. The SC-55ST LED will blink when it receives MIDI commands (see video below).
4. Plug the speakers directly in the front jack output of the SC-55ST to test the output.
5. Buy a Nouosiya cable USB to MIDI adapter to issue commands directly from a modern computer. GarageBand does not allow you to play MIDI toward USB. I used "PocketMIDI" to generate MIDI from my Mac.
6&7. Use a known reliable audio source (walkman?) to test that the line-in volume of the mixer is properly set.
After much debugging, it turned out the cable DB-15 to MIDI I had purchased on eBay did not work. Replacing it solved the problem. I had amazing music!
The joy was short-lived. I quickly ran into an issue where the SB16 MIDI stream would get stuck on a note. It is a known problem named the "Hanging note bug"[9]. I had to go to the next level and get a MIDI card.
In all fairness using the SB16 to generate MIDI would have ever worked. I fully intended to return to Strike Commander and join the WildCats. I would not have been able to plug my Flightstick Pro and use the DB-15 for MIDI.
The next level was to buy a MPU-401 capable ISA card. The Music Quest did exactly. With that card I was going to kiss good-bye to incompatibilities, drivers, and other TSR hacks (SoftMPU).
This super cool card having been discontinued decades ago, one can acquire a PCMIDI card, a well-reviewed[10] clone of the Music Quest. Made by passionate people, you can feel the love on their website.
Like when I installed the Sound Blaster 16, I ran into conflicts when installing the PCMIDI.
Card | IRQ | DMA | I/O |
---|---|---|---|
Ether16 Network | 3 | - | 240 |
Sound Blaster 16 ASP | 5 | 1,5 | 220h, 330h |
PCMIDI | 2 | - | 330h |
Since most games default to 330h
I decided to give it to the PDMIDI and move the SB16 to 300h
. It only took moving one jumper on the SB16! What a joy to have the manual!
Card | IRQ | DMA | I/O |
---|---|---|---|
Ether16 Network | 3 | - | 240 |
Sound Blaster 16 ASP | 5 | 1,5 | 220h, 300h |
PCMIDI | 2 | - | 330h |
My final sound setup was as follows.
┌────────────────────┐ │ ┌────────┐ │ MIDI commands ┌──────────────┐ │ │ PCMIDI ├──────┼──────────────────────►│ │ │ └────────┘ │ │ SC55-ST │ │ ┌────────┐ │ Music analog │ │ │ │ SB16 │ in │◄──────────────────────┤ │ │ └───┬────┘ │ └──────────────┘ │ │ │ │ PC │ │ ┌──────────────┐ │ │ │ Music + │ │ │ ┌───▼────┐ │ Sound effects │ Speakers │ │ │ SB16 │ out ├──────────────────────►│ │ │ └────────┘ │ │ │ └────────────────────┘ └──────────────┘
There are a few subtle things to understand about MIDI. The first one is that some games were published BEFORE the "General MIDI" standard was established in 1991. These games issue Roland MT-32 MIDI commands.
On a game such as Monkey Island (released Oct '90), the music will sound weird because it sends MIDI MT-32 commands where the instrument mapping is not the same[11] as the SC55-ST Genera Midi mapping.
Monkey Island is still playable since the SC-55ST is able to emulate the MT-32 (which is just a remapping of the instruments). One needs to play a special MIDI set of command MT32EMUL.MID to enable the MT-32 mode (you need to reboot the SC55 to disable emulation mode).
There are limits to the MT-32 emulation. The SC55ST does not support custom samples nor any of the special effects of the MT-32. If one wants to play game using these effects, they will have to get a real MT-32 synthesizer. To learn more about the MT-32, LGR has an excellent review about it[12] and has an installation guide[13].