logo - MMT8.com

Home
The Manual
Sysex format
ROM versions
The book
Forum
FAQ
Links
Miscellaneous
What's New
Contact us
About mmt8.com

(A newer version of this document can be found here, [Word format, 15 kb.])

Alesis MMT-8 MIDI System Exclusive Format

The 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:

  • All part and song data must be in consecutive order, i.e., part 05 data cannot be before part 02 data. The order for the data should be part 00 through 99, followed by song 00 through 99.
  • If a part or song does not exist, its MSB pointer will be 0, which is an illegal pointer address. Since there will be no data for this part, it is skipped, i.e., if part 04 is empty, part 05's data follows after part 03's data.
  • There can be no gaps in the data. Part 01's data must follow directly after part 00's data, etc.
  • Locations 0x0CF-0x0D0 (start of free memory) and 0x0D3-0x0D4 (length of free memory) must be kept valid.

Part Data Format

The 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:

  • Track data must be in the order track 8 through track 1.
  • An empty track must exist as a track with no notes in it. The data for an empty track would be 7 bytes long, as follows:
      0x80, z (LSB), z (MSB), 0x00, 0x80, 0x00, 0x00
    where z = the number of clocks in the part, i.e., the number of beats * 96. The number of clocks must be divisible by 96.
  • Adding the number of bytes in a part to the absolute pointer of a part should point to 1 byte past the last byte of the part.

Song Data Format

The 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:

  • Part numbers 100-254 are not allowed.
  • There cannot be more than 255 steps in a song.
  • Adding the number of bytes in a song to the absolute pointer of a song should point to 1 byte past the last byte of the song.



All site content © Pete Tonkin, 2001-2017. No copying without permission.