Need help to disect MT32 Sysex messages

Forum for D-50/550 and other D and U synthesizers from 1980-1990's
Post Reply
llm
Posts: 1
Joined: 10:19, 8 June 2021

Need help to disect MT32 Sysex messages

Post by llm »

im reversing a old DOS game that sends different sysex messages to a MT32
and i want to document the MT32 message generation in code as clean as possible
i've got no problem in generating the checksum or talking to the MT32

my problem: i have absolutely no MIDI/MT32 experience and no Computer-Music background and
im missing manuals for the MT32

these pages gave me an rough overview what is that sysex message thing all about

Webpage1: http://www.youngmonkey.ca/nose/audio_te ... -MT32.html
Webpage2: http://www.muzines.co.uk/articles/enhan ... -mt32/3500

so far i know structure of the MT32 Syex message

Example message: [F0 41 10 16 12 05 00 00 02 00 18 32 18 00 00 00 17 F7]

F0 - Sysex-Start
41 - Roland ID
10 - Device ID
16 - Model ID (MT-32)
12 - Send
05 - Address MSB
00 - Address
00 - Address LSB
02 00 18 32 18 00 00 00 - Data
17 - Checksum
F7 - Sysex-End

these are my traced sysex messages - i've just removed the always identical [F0 41 10 16 12] in front and the checksum+F7 at end

according to Webpage1 something with "Patch Memory"

Code: Select all

05 00 00 02 00 18 32 18 00 00 00
05 00 08 02 01 18 32 0C 00 01 00
05 00 10 02 02 18 32 0C 00 01 00
05 00 18 02 03 18 32 0C 00 01 00
05 00 20 02 04 18 32 0C 00 01 00
according to Webpage1 something with "Timbre Memory"

Code: Select all

08 00 00 45 6E 67 69 6E 65 20 31 20 20 07 05 0F 00 17 15 0B 01 01 00 35 07 00 00 00 37 28 32 23 0A 32 46 46 14 0D 10 10 23 14 09 69 07 37 00 00 00 00 2A 2E 64 32 64 64 64 64 64 32 5B 0C 1B 0C 00 00 05 00 00 00 19 64 64 64 64 17 4C 0B 01 01 00 35 07 00 00 00 37 28 32 23 0A 32 46 46 14 0D 10 10 23 14 09 69 07 37 00 00 00 00 2A 2E 64 32 64 64 64 64 64 32 5B 0C 1B 0C 00 00 05 00 00 00 19 64 64 64 64 18 32 0B 01 01 35 25 07 00 00 00 37 2D 2D 23 0A 32 46 46 14 0C 00 10 39 14 09 69 07 37 00 00 00 00 2A 2C 64 32 64 64 64 64 64 32 5B 0C 1B 0C 00 00 05 00 00 00 1D 64 64 63 64 00 00 0B 01 01 2B 35 07 00 00 00 37 28 32 23 0A 32 46 46 14 0D 10 10 23 14 09 69 07 37 00 00 00 00 2A 2E 64 32 64 64 64 64 64 32 5B 0C 1B 0C 00 00 05 00 00 00 19 64 64 64 64
08 02 00 53 71 75 65 65 6C 20 20 20 20 00 08 0F 00 24 19 0B 01 00 25 64 07 00 00 00 00 06 00 00 00 64 64 64 00 48 64 00 03 1E 09 69 07 64 00 00 00 00 00 00 00 00 64 64 64 64 32 64 5B 0C 1B 0C 00 00 05 00 00 00 00 64 63 00 63 24 56 0B 01 00 25 58 07 00 00 00 00 06 00 00 00 64 64 64 00 48 64 00 03 1E 09 69 07 64 00 00 00 00 00 00 00 00 64 64 64 64 32 64 5B 0C 1B 0C 00 00 05 00 00 00 00 64 63 00 63 13 0B 0B 01 01 35 25 07 00 00 00 00 00 00 00 00 4E 4E 4E 00 32 64 10 39 14 09 69 07 37 00 00 00 00 2A 2C 64 32 64 64 64 64 46 64 5B 0C 1B 0C 00 00 05 02 00 00 00 64 63 00 64 07 5E 0B 01 00 35 64 07 00 00 00 00 00 00 00 00 50 50 51 00 21 64 00 1C 1E 09 69 07 37 00 00 00 00 2A 2C 64 32 64 64 64 64 46 64 5B 0C 1B 0C 00 00 05 00 00 00 00 64 63 00 63
08 04 00 44 61 6D 61 67 65 20 20 20 20 05 05 0F 00 15 00 0F 00 00 12 42 00 04 00 00 14 1E 00 00 00 14 28 00 00 05 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 0E 00 46 00 0A 00 61 00 00 09 00 0F 00 00 13 41 00 04 00 00 14 14 00 00 64 50 00 00 00 0A 1E 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 13 11 3B 37 00 00 63 2D 04 12 00 0F 00 00 18 41 04 08 00 00 4C 17 13 0A 34 00 00 00 11 05 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 00 41 1D 0E 00 5E 17 03 14 00 0F 00 00 53 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 32 33 50 0C 53 64 2D 00
08 06 00 4D 65 74 61 6C 43 6C 61 6E 6B 08 09 03 00 05 00 0F 00 00 45 41 00 03 00 00 14 1E 00 00 31 14 28 00 00 05 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 3F 3D 00 0A 62 00 00 00 0D 00 0F 00 01 58 41 00 04 00 00 3D 00 00 00 31 2F 00 00 00 18 0D 05 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 39 0C 04 2A 64 00 00 00 24 00 0F 00 00 18 41 04 05 00 00 4C 17 13 0A 34 00 00 00 11 05 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 40 06 17 1D 64 00 00 00 36 00 0F 00 00 53 41 00 02 00 00 0A 0A 00 00 64 50 32 00 00 00 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 39 00 26 2C 64 00 00 00
08 08 00 45 6E 67 69 6E 65 20 31 20 20 02 02 0F 00 24 32 0B 01 00 53 64 0E 00 00 00 37 2D 2D 23 0A 32 46 46 14 13 64 10 22 00 09 69 07 37 00 00 00 00 2A 2C 64 32 64 64 64 64 0D 32 40 0C 00 0C 00 00 05 00 00 00 13 64 64 64 64 18 4C 0B 01 01 00 35 07 00 00 00 37 28 32 23 0A 32 46 46 14 0D 10 10 23 14 09 69 07 37 00 00 00 00 2A 2E 64 32 64 64 64 64 64 32 5B 0C 1B 0C 00 00 05 00 00 00 19 64 64 64 64 16 32 0B 01 01 58 25 07 00 00 00 37 2D 2D 23 0A 32 46 46 14 0C 00 10 39 14 09 69 07 37 00 00 00 00 2A 2C 64 32 64 64 64 64 0E 32 5B 0C 1B 0C 00 00 05 00 00 00 1D 64 64 63 64 0C 36 0B 01 00 00 32 07 02 00 00 37 28 32 23 32 32 37 40 14 0D 10 10 38 12 0B 69 07 37 00 00 00 00 2A 2E 64 32 64 64 64 64 23 32 5B 0C 1B 0C 00 00 05 00 00 00 19 64 64 64 64
according to Webpage1 something with "Patch Temp Area"

Code: Select all

03 00 04 18 
03 00 14 00 
03 00 24 00 
03 00 34 00 
03 00 44 00 
03 00 54 00 
03 00 64 00 
03 00 74 02
i have no idea what "Patch Temp Area" etc. mean

if found a reference to the "Patch Temp Area" on Webpage2
Bytes 6,7,8: 03 00 06 Hex (or 3, 0, 6 Decimal). These three bytes form the address within the MT32's memory of the particular parameter we wish to alter. In our example you will see that page 9 of the "MT32 MIDI Implementation Chart" shows that the reverb switch is at offset 00 06 within the 'Patch Temp' area. Page 7 shows us that the Patch Temp area for Instrument part 1 has a base address of 03 00 00. Add together this base address and the offset address and you obtain 03 00 06.
so i know that [03 00 14 00] sets byte 14 in the "Patch Temp Area" for "Instrument 1" to 0 - but what does that mean?

Question 1:
What does all these bytes mean or do anyone know were i can find this "MT32 MIDI Implementation Chart" to read it myself?

Bonus-Question:
I've also traced this message [F0 41 10 16 12 03 00 F7], is that a illformed message due to missing 2 bytes in address and no data?
User avatar
Andy Keys
Posts: 1843
Joined: 13:44, 7 August 2007
Location: UK

Re: Need help to disect MT32 Sysex messages

Post by Andy Keys »

Post Reply