![]() | ||||
|
(A newer version of this document can be found here [local copy] in Word format, 15 kb.) Alesis MMT-8 MIDI System Exclusive FormatThe following information is provided as a guide to programmers wishing to modify the data received via MIDI from the MMT-8 for the purpose of interchanging parts from separate block dumps, modification of part names, MIDI channel assignments, etc. Great care must be taken to ensure that all modified addresses are valid, since one incorrect value (the length of a part, for example) could result in all data being lost in the MMT-8. These errors may not show up immediately, since the incorrect values may not be accessed by the MMT-8 until a particular part or song is selected. Therefore, it is recommended that any data manipulation programs be thoroughly tested after loading into the MMT-8 by selecting and recording on many parts before assuming that the data is valid. A system exclusive MIDI data dump from the MMT-8 is initiated by holding the TAPE button down, pressing (and releasing) the PAGE DOWN button once, and then pressing the RECORD button. The data sent out MIDI is in the following format: Hex Comments ==================================== 0xF0 System Exclusive status byte 0x00 0x00 0x0E Alesis I.D. number 0x00 MMT-8 I.D. number (Note: The prefix `0x' is used here to denote a hexadecimal number.) Following the above 5 bytes will be a block of data representing the contents of the MMT-8's memory. In order to optimise the data transfer, 8 MIDI bytes are used to transmit each block of 7 MMT-8 data bytes. If the 7 data bytes are looked at as one 56-bit word, the format for transmission is eight 7-bit words, beginning with the most significant bit of the first byte, as follows:
SEVEN MMT-8 BYTES
==================================
0: a7 a6 a5 a4 a3 a2 a1 a0
1: b7 b6 b5 b4 b3 b2 b1 b0
2: c7 c6 c5 c4 c3 c2 c1 c0
3: d7 d6 d5 d4 d3 d2 d1 d0
4: e7 e6 e5 e4 e3 e2 e1 e0
5: f7 f6 f5 f4 f3 f2 f1 f0
6: g7 g6 g5 g4 g3 g2 g1 g0
TRANSMITTED AS:
=================================
0: 0 a7 a6 a5 a4 a3 a2 a1
1: 0 a0 b7 b6 b5 b4 b3 b2
2: 0 b1 b0 c7 c6 c5 c4 c3
3: 0 c2 c1 c0 d7 d6 d5 d4
4: 0 d3 d2 d1 d0 e7 e6 e5
5: 0 e4 e3 e2 e1 e0 f7 f6
6: 0 f5 f4 f3 f2 f1 f0 g7
7: 0 g6 g5 g4 g3 g2 g1 g0
Note: The end of system exclusive data is signalled by a byte with value 0xF7 -- this byte should not be decoded. In order to use the data properly, it must be decoded properly into \mt byte format. The following list gives the data locations within the "unpacked" (decoded) block of data, starting with the first byte of the block being 0x000. Note: All absolute addresses must have an offset of 0x400 added to them (e.g., an absolute pointer to a part that starts at 0x35A should have the pointer value 0x75A.) (Note: The original document contained errors, in particular, confusing LSBs and MSBs. Hopefully, these are corrected here. - prbt) 0x000 MSB of absolute pointer to part 00 0x001 LSB of absolute pointer to part 00 0x002 MSB of absolute pointer to part 01 0x003 LSB of absolute pointer to part 01 0x004 MSB of absolute pointer to part 02 0x005 LSB of absolute pointer to part 02 ... ............ 0x0C6 MSB of absolute pointer to part 99 0x0C7 LSB of absolute pointer to part 99 0x0C8 - 0x0CE DO NOT ALTER 0x0CF LSB of absolute pointer to first byte past song 99 data 0x0D0 MSB of absolute pointer to first byte past song 99 data 0x0D1 - 0x0D2 DO NOT ALTER 0x0D3 LSB of 0xFF00 minus data in 0x0CF & 0x0D0 0x0D4 MSB of 0xFF00 minus data in 0x0CF & 0x0D0 0x0D5 - 0x101 DO NOT ALTER 0x102 MSB of absolute pointer to song 00 0x103 LSB of absolute pointer to song 00 0x104 MSB of absolute pointer to song 01 0x105 LSB of absolute pointer to song 01 0x106 MSB of absolute pointer to song 02 0x107 LSB of absolute pointer to song 02 ... ............ 0x1C8 MSB of absolute pointer to song 99 0x1C9 LSB of absolute pointer to song 99 0x1CA - 0x1FF DO NOT ALTER 0x200 - ? Part 00 data ... ............ The part and song data must be dealt with in a specific manner:
Part Data FormatThe following is the format of each part, starting with the address pointed to by the absolute pointer to the part (offset by 0x400): 0x00 LSB of number of bytes in part, including header 0x01 MSB of number of bytes in part, including header 0x02 LSB of offset from start of part to address of start of track 8 data 0x03 MSB of offset from start of part to address of start of track 8 data 0x04 LSB of offset from start of part to address of start of track 7 data 0x05 MSB of offset from start of part to address of start of track 7 data 0x06 LSB of offset from start of part to address of start of track 6 data 0x07 MSB of offset from start of part to address of start of track 6 data 0x08 LSB of offset from start of part to address of start of track 5 data 0x09 MSB of offset from start of part to address of start of track 5 data 0x0A LSB of offset from start of part to address of start of track 4 data 0x0B MSB of offset from start of part to address of start of track 4 data 0x0C LSB of offset from start of part to address of start of track 3 data 0x0D MSB of offset from start of part to address of start of track 3 data 0x0E LSB of offset from start of part to address of start of track 2 data 0x0F MSB of offset from start of part to address of start of track 2 data 0x10 LSB of offset from start of part to address of start of track 1 data 0x11 MSB of offset from start of part to address of start of track 1 data 0x12 LSB of number of beats in part in BCD format 0x13 MSB of number of beats in part in BCD format 0x14 MIDI channel for track 8 0x15 MIDI channel for track 7 0x16 MIDI channel for track 6 0x17 MIDI channel for track 5 0x18 MIDI channel for track 4 0x19 MIDI channel for track 3 0x1A MIDI channel for track 2 0x1B MIDI channel for track 1 0x1C - 0x29 14 digit ASCII name of part 0x2A - ? Data for track 8 ....................... (Note: Setting the number of beats = 0 corresponds to an empty part. The MIDI channel must be either 0, meaning "UNCHANGED" or between 1 and 16.) Part data must follow these rules:
Song Data FormatThe following is the format of each song, starting with the address pointed to by the absolute pointer to the part (offset by 0x400): 0x00 LSB of number of bytes in song, including header 0x01 MSB of number of bytes in song, including header 0x02 Tempo of song, in BPM 0x03 - 0x10 14 digit ASCII name of song 0x11 Step 1 part number (00-99) 0x12 Step 1 play tracks (bit 0 = track 1, bit 7 = track 8; 0=off, 1=on) 0x13 Step 2 part number 0x14 Step 2 play tracks ..................... ? Part number 0xFF (end of song) Song data must follow these rules:
|