From 7c3574ed52f8cb88eec25b26d6a1fe2750fc8e77 Mon Sep 17 00:00:00 2001 From: Martin Kiewitz Date: Tue, 30 Jun 2015 16:49:47 +0200 Subject: 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 --- audio/miles_mt32.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'audio/miles_mt32.cpp') 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; } -- cgit v1.2.3