From: <sv...@op...> - 2024-05-06 20:00:30
|
Author: sagamusix Date: Mon May 6 22:00:18 2024 New Revision: 20714 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=20714 Log: Merged revision(s) 20650 from trunk/OpenMPT: [Fix] MIDI macro command s didn't compute correct checksum if a device ID was made up from two bytes (e.g. XV-5080). ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/soundlib/Snd_fx.cpp Modified: branches/OpenMPT-1.31/soundlib/Snd_fx.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/Snd_fx.cpp Mon May 6 21:58:26 2024 (r20713) +++ branches/OpenMPT-1.31/soundlib/Snd_fx.cpp Mon May 6 22:00:18 2024 (r20714) @@ -5163,12 +5163,17 @@ { // SysEx Checksum (not an original Impulse Tracker macro variable, but added for convenience) auto startPos = outPos; - while(startPos > 0 && out[--startPos] != 0xF0); - if(outPos - startPos < 5 || out[startPos] != 0xF0) - { + while(startPos > 0 && out[--startPos] != 0xF0) + ; + + if(outPos - startPos < 3 || out[startPos] != 0xF0) continue; - } - for(auto p = startPos + 5u; p != outPos; p++) + + uint8 checksumStart = out[startPos + 3] ? 5 : 6; + if(outPos - startPos < checksumStart) + continue; + + for(auto p = startPos + checksumStart; p != outPos; p++) { data += out[p]; } |