Patterns are single-channel only for flexibility & low memory use. They contain
the actual notes, instrument changes & sound commands. A pattern can have
variable length, up to 128 rows. There can be 208 different patterns in a song.
The explanation of a pattern row:
| | Instrument number ($01 - $3F, or $00 for no change)
| | |
| | | Command ($0 - $F)
| | | |
| | | | Databyte
| | | | |
C-1 00 0 00
The highest note available in a pattern is G#7. To reach the top three notes
(A-7 to B-7), you can use transpose.
In place of a normal note, there can also be one of these special "notes":
--- Key off (clear gatebit mask)
+++ Key on (set gatebit mask)
The actual state of the gatebit will be the gatebit mask ANDed with data from
the wavetable. A key on cannot set the gatebit if it was explicitly cleared
at the wavetable.
Commands 1XY-4XY and FXY bear some resemblance to Soundtracker/Protracker/
Fasttracker effect commands. However, they are different in some ways, so
read their descriptions! Note that there is no "databyte $00 uses the last
databyte"-action in the commands.
Command 0XY: Do nothing. Databyte will always be $00.
Command 1XY: Portamento up. XY is an index to a 16-bit speed value in the
Command 2XY: Portamento down. XY is an index to a 16-bit speed value in the
Command 3XY: Toneportamento. Raise or lower pitch until target note has been
reached. XY is an index to a 16-bit speed value in the
speedtable, or $00 for "tie-note" effect (move pitch instantly to
Command 4XY: Vibrato. XY is an index to the speed table, where left side
determines how long until the direction changes (speed)
and right side determines the amount of pitch change on each tick
Command 5XY: Set attack/decay register to value XY.
Command 6XY: Set sustain/release register to value XY.
Command 7XY: Set waveform register to value XY. If a wavetable is actively
changing the channel's waveform at the same time, will be
Command 8XY: Set wavetable pointer. $00 stops wavetable execution.
Command 9XY: Set pulsetable pointer. $00 stops pulsetable execution.
Command AXY: Set filtertable pointer. $00 stops filtertable execution.
Command BXY: Set filter control. X is resonance and Y is channel bitmask.
$00 turns filter off and also stops filtertable execution.
Command CXY: Set filter cutoff to XY. Can be ineffective if the filtertable is
active and also changing the cutoff.
Command DXY: Set mastervolume to Y, if X is $0. If X is not $0, value XY is
copied to the timing mark location, which is playeraddress+$3F.
Command EXY: Funktempo. XY is an index to the speedtable, tempo will alternate
between left side value and right side value on subsequent pattern
steps. Sets the funktempo active on all channels, but you can use
the next command to override this per-channel.
Command FXY: Set tempo. Values $03-$7F set tempo on all channels, values $83-
$FF only on current channel (subtract $80 to get actual tempo).
Tempos $00-$01 recall the funktempo values set by EXY command.
Master volume is by default the maximum ($F), but it is only reset when loading
a new song or clearing songdata in the editor, not every time playback starts.
If you change mastervolume, you have to reset it manually in the beginning of
If the command is not 1XY-4XY, instrument vibrato will be active.
Note that the one-shot commands 5XY-FXY allow the previous 1XY-4XY command or
instrument vibrato to continue "underneath" them. In section 3.6 (hints & tips)
there is an example of this.