Scali wrote:It sends 4 SysEx messages of 7 bytes each, namely:
437500180101F7
437500190102F7
4375001A0103F7
4375001B0106F7 […]
Show full quote
It sends 4 SysEx messages of 7 bytes each, namely:
437500180101F7
437500190102F7
4375001A0103F7
4375001B0106F7
These commands appear to be:
43h: Manufacturer ID
75h: Sub-status
00h: Node ID
18h: <00011iii> Instrument number
01h: <00pppppp> Parameter number
01h: <0ddddddd> Data
F7h: End-of-command
Parameter 01 is MIDI channel number
So apparently this is the mapping of instruments (0, 1, 2, 3) to MIDI channels (1, 2, 3, 6).
It seems incomplete (they are only mapping channels 1, 2, 3 and 6, while there are other channels also used in the MIDI data), which might explain why the percussion isn't working.
The IMFC technical reference documents a number of preset configuration data sets (Single, Mono 8, Dual and Split), where they all map instruments to various channels by default.
This might be a fundamental difference between FB-01 and IMFC at startup.
Either that, or one of the larger messages is a configuration update, and doesn't work correctly in FB01.DRV. So the mapping may be correct, but the configuration is not.
It seems that the configuration data itself contains the mapping of the instruments to channels as well, so it could be that these additional mapping commands actually mess up the mapping, which would otherwise have worked.
So that's my theory for now:
The IMFC driver might work correctly on the FB-01, but the FB-01 is not in the same state as the IMFC by default.
The IMFC doesn't modify the state, so things don't work on the FB-01.
The FB01.DRV will modify the state, but doesn't do so correctly (my current theory is that the 112-byte message is corrupt, it should be the 168-byte message, might be a similar bug to the one ripsaw8080 fixed. I will dump the raw messages and compare to the FB-01 docs to see. At first glance I saw a message with 160-byte payload, which would be 168 in total I guess, but nothing I could match to 112 bytes). So when running the game with FB01.DRV, some sounds are missing.
When running via IMFC.DRV afterward, some of the faulty FB01.DRV configuration 'stuck', so you now hear stuff from the FB-01, but it is still not initialized correctly.
Assuming this is what is happening, then the correct procedure would be to avoid the FB01.DRV like the plague, and instead shoot some SysEx commands into the FB-01 in advance, to bring it into the same configuration as an IMFC on powerup.
After that, run the game with IMFC.DRV, and it should work 100%.
My guess for the commands to send would be the initial two commands the FB01.DRV sends, possibly followed by the selection of a specific configuration:
F0 43 75 00 10 20 00 F7 - Sets the node number to #0 (default on IMFC, all commands are sent to node #0) <-- I'm not sure if this works actually, since the command itself is sent to a node#..., so perhaps you need to send it to all possible node # to make sure you force the device to node 0, from whatever node it is currently listening to:
F0 43 75 nn 10 20 00 F7 for all nn in the range 00-0F. Might be easier to just set node #0 via the frontpanel?
F0 43 75 00 10 21 00 F7 - Turns memory-protect off (default on IMFC)
F0 43 75 00 10 22 nn F7 - Select configuration #nn (IMFC powers up to 'Single' configuration, value 16, so that would be nn == 10h. I believe it actually comes up as 17 on the FB-01 display, since it seems to count the configurations as 1-based rather than 0-based)
I suppose if you were to just dial this in via the frontpanel, it would also work.