Hum, interesting... I thought I had the voice bank SysEx working, because if I exported voice data from my IMFC and imported it into the FB-01 emulator, all data seemed to arrive correctly, all packets had the correct length and checksum was okay...
Then I started up Leisure Suit Larry 3, and it crashed my driver instantly.
Upon debugging, I found that it thought the voice bank had way larger packets than they really did... Which makes me wonder: why does it work fine on the real IMFC/FB-01? Did Yamaha just hardcode the length of the expected packets? Also, I'm reasonably sure that the checksums aren't correct either... so does the firmware not bother to check the checksums?
Anyway, for now I made my code support both ways: when decoding a packet you pass a length-parameter. If you pass 0, it will decode it from the packet. Else it takes the length you supplied, and ignores whatever is in the packet. This seems to make Larry 3 work, but I need to study it in some more detail.
The next puzzle is exporting the voice bank data back out through a set of packets in a SysEx message. I thought I had done it, but FB01 Editor doesn't like the checksums.
Devils in details...