The M64 commands are used in creating sequences in Super Mario 64, it has a midi-like structure, except more compressed. Some of these commands can vary in how many bytes long they could be. In M64, we have the header, the track and music event, the header is the beginning of the M64, what all M64s must have, it contains necessary information about the M64, like the NLST, amount of channels, tempo and master volume, the track contains all necessary information about the M64, like pointing to the music event address, setting track volume and so on, the music event contains all the play note(0x00 - 0xBF), transposition(0xC2) and rest commands(0xC0).
Points to track data for a specific channel, indicated by the second nibble of status byte, a track offset is started with a 0xC4 command.
90 [AA AA]
A | Offset to load track from |
Example: Load track data from offset 0x16
90 00 16
Flags for the M64 file.
D3 [AA]
A | Flag ID |
List of Flags(Hexadecimal);
80 | Music pauses when the game is paused |
60 | Unknown. |
Used to disable channels.
D6 [AA AA]
A | Disable channels flag. Each bit = one channel. |
Example: Disable channel 0
D6 00 01
Volume for the whole M64.
DB [AA]
A | Master volume. |
Example: Set master volume to 50
DB 50
Tempo in BPM.
DD [AA]
A | Tempo. |
Example: Set tempo to 120
DD 78