aboutsummaryrefslogtreecommitdiff
path: root/audio
diff options
context:
space:
mode:
authorMartin Kiewitz2015-06-30 16:49:47 +0200
committerMartin Kiewitz2015-06-30 16:49:47 +0200
commit7c3574ed52f8cb88eec25b26d6a1fe2750fc8e77 (patch)
tree466c3cefea9c2dd2d6c284befc4c35d2f60ef42a /audio
parentbf180101a696b5def2335ad296dc7949969ebd99 (diff)
downloadscummvm-rg350-7c3574ed52f8cb88eec25b26d6a1fe2750fc8e77.tar.gz
scummvm-rg350-7c3574ed52f8cb88eec25b26d6a1fe2750fc8e77.tar.bz2
scummvm-rg350-7c3574ed52f8cb88eec25b26d6a1fe2750fc8e77.zip
AUDIO: Miles Audio MT32: adjust sysex target address
sysex may not contain bytes above or equal 0x80, so we adjust the address accordingly. fixes weird sound getting played during 7th guest MT32 setup screen
Diffstat (limited to 'audio')
-rw-r--r--audio/miles_mt32.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/audio/miles_mt32.cpp b/audio/miles_mt32.cpp
index d28006e772..3acd2a91bf 100644
--- a/audio/miles_mt32.cpp
+++ b/audio/miles_mt32.cpp
@@ -301,6 +301,17 @@ void MidiDriver_Miles_MT32::MT32SysEx(const uint32 targetAddress, const byte *da
sysExMessage[5] = (targetAddress >> 8) & 0xFF;
sysExMessage[6] = targetAddress & 0xFF;
+ // Adjust address in case it's needed
+ if (sysExMessage[6] >= 0x80) {
+ sysExMessage[5]++;
+ sysExMessage[6] -= 0x80;
+ }
+ if (sysExMessage[5] >= 0x80) {
+ sysExMessage[4]++;
+ sysExMessage[5] -= 0x80;
+ }
+ assert(sysExMessage[4] < 0x80); // security check
+
sysExChecksum -= sysExMessage[4];
sysExChecksum -= sysExMessage[5];
sysExChecksum -= sysExMessage[6];
@@ -312,6 +323,7 @@ void MidiDriver_Miles_MT32::MT32SysEx(const uint32 targetAddress, const byte *da
break; // Message done
assert(sysExPos < sizeof(sysExMessage));
+ assert(sysExByte < 0x80); // security check
sysExMessage[sysExPos++] = sysExByte;
sysExChecksum -= sysExByte;
}