Wednesday, July 19, 2017

New Discoveries about the IBM Music Feature and Roland Sound Canvas

I have previously discussed both of these sound device families previous blog entries.  The Yamaha IMFC and FB-01 is discussed here : http://nerdlypleasures.blogspot.com/2015/02/the-ibm-music-feature-card-overpriced.html and the Roland Sound Canvas first generation modules here : http://nerdlypleasures.blogspot.com/2013/06/first-generation-roland-gs-devices.html  Rather than burying the information in those entries, I would like to add additional new information here.




The IBM Music Feature's Exclusive Commands

The IBM Music Feature (IMFC) was originally considered to be simply an FB-01 on an ISA card with a MIDI interface.  The FB-01 really a rather simple device.  It is itself a computer with a Z80 CPU running at 4MHz, 16KB of SRAM, 32KB of Program ROM, D71051C USART, an LCD controller, the YM2164 OPP FM sound source and the YM3012 DAC.  The IMFC contains all of those chips except the LCD controller and does not have a battery.

You might think that if you emulated the IBM Music Feature's MIDI interface, you can use an FB-01 in place of an IMFC.  But it isn't that simple.  While both devices only have a single 32KB Program/Firmware ROM, the IMFC has additional features in its ROM.  Essentially if the FB-01's ROM is a v1.0, the IMFC's ROM is a v2.0.  Actually, an undocumented System Exclusive string returns "YAMAHA IBM MUSIC rel. M102.00.010" for the IMFC and "rel. M002.00.009 YAMAHA COM FB-01" for the FB-01.

As is well-known, only PC games from Sierra using the SCI engine ever supported the IMFC as a music/sound effects device.  Most of the games that have an IMFC have an IMFC driver and FB-01 driver.  But Sierra used a feature found in the IMFC which partially breaks music when played back on the FB-01.  The FB-01 and IMFC supports sixteen MIDI channels and can assign an instrument to every channel.  The FB-01 supports eight active instruments from 240 ROM Instruments or 96 user programmable RAM instruments.  However, in order to hear an instrument, the FB-01 must assign one or more notes from the YM2164 to the MIDI channel.  Only up to eight notes can be played back by these devices at a time, so the note pool can easily run out if multi-note instruments are being used.  This limitation exists because the YM2164 has eight 4-operator FM synthesis oscillators.  Multiple oscillators can be used at the same time for more complex sounds.

The FB-01 really has rather rudimentary support for MIDI commands.  You can use a Program Change command to change the Instrument on a MIDI channel, but it can only select from the 48 instruments in the voice bank to which the instrument belongs.  The FB-01 has eight voice banks.  In order to have total control over Instrument assignment to MIDI Channels, Sierra used a System Exclusive command called "Parameter Change by System Channel + Instrument Number".  Then it used a System Exclusive command called "Event List: Parameter Change" to set the number of notes assigned to each MIDI Channel.

The IMFC can use this method, but it can also use a System Exclusive command called "Parameter List Transfer" to set all the Instrument and Note assignments for all sixteen MIDI Channels at once.    As Sierra used the Parameter List Transfer command for its IBMFC driver, all MIDI channels are assigned the proper number of notes.  But it could not use this command in its FB-01 driver, it had to use the earlier method.

The trouble with this method is illustrated by the drums heard in the opening music to Leisure Suit Larry 3 when playing this game on an IMFC using the IMFC.DRV.  When playing this game with an FB-01 using the FB01.DRV driver, you will not hear the drums.  You can assign an Instrument to more than one MIDI Channel and vice versa so long as you do not exceed eight notes  The default FB-01 configuration has MIDI Channel 1 assigned to Instrument 0, MIDI Channel 2 assigned to Instrument 1 and so forth until you reach MIDI Channel 8 and Instrument 7, respectively.  However, the song data ends up assigning Instruments 3 and 6 to MIDI Channel 7.  This gives the remaining notes to the Instruments at MIDI Channel 7, leaving no notes left to play the drums at MIDI Channels 13 & 14.  Because the FB-01 method Sierra used assigns notes by MIDI Channel instead of by Instrument, this can result in later Instruments being robbed by earlier instruments unless the notes are assigned for all sixteen MIDI Channels.

There is a fix for this issue for real hardware, but it is not guaranteed to work for every game.  The fix is to set all eight Instruments to an unused MIDI Channel, something Sierra should have done in its drivers.  Sierra did not appear to use MIDI Channel 1 in its games.  This will ensure that two or more Instruments are never assigned to the same MIDI Channel.  This can be done via the FB-01's front panel buttons.  You can save this configuration to one of the sixteen user configurations and then dump it and transmit it for every game.

Fortunately, the IMFC command can be translated into compatible FB-01 commands, so software that can emulate the MIDI Interface portion of the IMFC can also translate commands that the IMFC recognizes but the FB-01 does not.

I take no credit for figuring this out.  Scali and Cloudschatze did all the hard work. Scali also implemented an emulation patch of the MIDI Interface portion of the IMFC in DOSBox so you can use Sierra games with their IMFC.DRV and real FB-01s.  As I previously indicated, not all Sierra games have an FB01.DRV, so they require a real IMFC.  You can also use a real IMFC if it is powered in a separate computer and the MIDI output of DOSBox is run into the MIDI box of the IMFC.  The patch can be found here : http://www.vogons.org/viewtopic.php?f=32&t=9555&start=80#p593768

and his custom DOSBox build compiled with the patch is here :

http://www.vogons.org/viewtopic.php?f=32&t=9555&start=60#p583363

He is deep into trying to create a full FB-01 emulator, emulating the YM-2164 and removing the need for real hardware.  Good luck Scali!

Roland SC-55 ROM Versions

The Roland SC-55 went through several ROM versions in its lifetime.  It started with Control ROM version 1.0, then 1.1, 1.20, 1.21 and finally 2.00.  However, these Control ROMs are mated to different CPUs, which also have embedded ROM.  You can't change or upgrade the Control ROM except for a v1.20 to v1.21 upgrade.  That typically requires burning an EPROM.

Units with control ROM v1.00 was released around December of 1990, v1.10 in March or April of 1991. v1.20/1.21 in May or June and v2.00 in March of 1992.  The official release dates as shown on the unit's LCD are a bit strange however.  My friend Cloudschatze compiled data from his own and several SC-55 owners and made a table.  The table can be found here :

http://www.vogons.org/viewtopic.php?f=62&t=37047&hilit=sc+55+control+rom+version&start=80#p507792

While there is no official Roland errata, the basic changes from v1.10 to v1.20 is the addition of the Breath Noise instrument and its bumping Fl. Key Click from the captial tone at PC# 122 to a variation tone.  It also adds sine wave as a variation tone to PC# 81.  It appears that the canonical Roland Sound Canvas capital tone assignment for PC# 122 is Breath Noise, as at least one GS soundtrack (X68000 Akumajou Dracula) sounds wrong with Fl. Key Click.

Control ROM v2.00 adds official General MIDI support and allows for more functions to be altered via the front panel.  All Roland SC-55s are essentially General MIDI compatible, whether officially with the v2.00 Control ROM or unofficially with earlier Control ROMs.

There exist SC-55s without the General MIDI logo with a v2.00 ROM, so the only way to be assured of getting a non-General MIDI device is to get one with "GS STANDARD" on it.  But with "GS STANDARD" devices, you will almost certainly get a unit with the pre-standardization instrument assignments.

Another change in the v2.00 modules is that the drum set assignments are not exactly the same as the v1.xx modules.   Each drum set is assigned to the same Program Change numbers in the v1.xx units except for the Orchestra and SFX sets.  Those get eight PC numbers in the v1.xx units but only one PC number in the v2.00 units.  So if a piece of music calls for a drum set using the seven PC numbers recognized in the v.1xx units but not the v2.xx unts, you will hear nothing.  Essentially this is Capital Tone Fallback for the drumset.  At least two games, TFX and Inferno: The Odyssey Continues, are affected by this issue on the v2.00 units.

8 comments:

Andrew Rodland said...

Is "Round Sound Canvas" an autocorrect mistake?

Great Hierophant said...

Yes *blushes*

Futility said...

I'm sure he meant Rodland, Andrew :)

Great Hierophant said...

If I found an NES NTSC prototype of Rodland, you would be very sure I would devote a blog article to it.

Immanufactorium said...

I wonder if this new emulation of the IMFC in DOSBox would handle playback of Will Harvey's MCS. Speaking of which I also wonder if the program could also use the FB-01 on real hardware. I tried some time ago, but couldn't get it to work.

Great Hierophant said...

No one apparently has used the IMFC emulation with the IMFC-enabled Music Construction Set. I will try it sometime. I hope that IMFC emulation can be added to SoftMPU at some point.

Scali said...

I have just tested, and can confirm that Will Harvey's Music Construction Set will properly detect the IMFC and send the data via the midi output. If you connect it to a real FB-01 or IMFC, it sounds correct.

Great Hierophant said...

Awesome dude, another feather in your cap! MCS is a simple way to get music out of the device.