3 hours ago, Sauraen said:
It all depends on if people start using MIDIbox Genesis Tracker with FMDrive–if they do, I’m sure we’ll get bug reports that things don’t sound the same, and then go from there.
I do have that file, that’s what I based the implementation on. It still has issues (CC 92+93 are assigned to two different things, not to mention the whole velocity problem), but there’s also one major thing I couldn’t figure out. For a parameter that’s let’s say 4 bits, does it use the lower 4 bits of the CC value or the upper 4 bits? If the lower ones, does the range clamp or repeat? I have it set up now with a macro that can be defined either way, but I will obviously need it to be the right way for a MIDI to work.
I don’t know if this will help, here is the Arduino code for another LS project, the Sega Master Sys Midi. Though it’s apples to oranges, the void doCC() function does illustrate how LS handled the different bit ranges of CC values.
SMSM_100_Arduino_MIDI_IN.ino
SMSM_100_MIDI_Mapping.txt
Here he is moving CC 23, modulator mul, into shadow[0x00]'s lower nibble from the CC’s higher 4 bits (bit6- bit3)
case 23: // mul (m) shadow[0x00] = (shadow[0x00] & B11110000) | (ccvalue \>\> 3); writeYM2413(0x00, shadow[0x00]); break;
And here doing the same for CC 24, carrier mul into shadow[0x01]
case 24: // mul (c) shadow[0x01] = (shadow[0x01] & B11110000) | (ccvalue \>\> 3); writeYM2413(0x01, shadow[0x01]); break;
So for both these, the 4bit values are scaled across the full 7bit CC value range. Again this doesn’t mean that he followed the same style with the GenMDM code but…
yogi