Phrase rows have one FX slot: a command letter plus a two-hex-digit value, written here as Xyy or Xxy. Table rows have two FX slots, but only the table-safe subset is available there.
Hex nibbles are named x and y: for Q31, x = 3 and y = 1.
For the MMC5 aux pulse feature on PU1 and PU2, see AUX Pulse Channels.
Phrase FX
- Axx - TABLE START/STOP (
00..1F, 20): Start table 00..1F on this track. A20 stops the current table. - Cxy - CHORD/ARPEGGIO (
x,y semitones): Offsets from the row note. Example: C37 alternates base, +3, +7. - Dxx - DELAY (
ticks): Hold the row note and instrument for xx ticks. Other row FX still apply immediately. D00=off. - Exy - VOLUME ENVELOPE (
x=volume, y=rate): Set volume to x, then run a live simple envelope. y=1..7 falls, 9..F rises, 0 or 8 stops. This is separate from the pulse/noise instrumentENV.setting. - Fxx - FINE DETUNE / DMC SAMPLE WINDOW (
signed byte / frame): Pulse/triangle: override the track's fine detune. 01..7F raises pitch, 81..FF lowers it. F00 clears the runtime override to zero. On DMC,Fxxmoves/retriggers a sample window in 64-byte steps; see DMC Sample Window Commands. - Gxx - GROOVE SELECT (
0..F): Select groove pattern. - Hxy - HOP (
x=count, y=row): Jump to phrase/table row y. H0y is unconditional; x>0 limits repeats. - Kxx - KILL NOTE (
ticks): Stop the note after xx ticks. K00 kills immediately. - Lxx - LEGATO SLIDE / DMC LOOP LENGTH (
sub-frame steps): Legato slide to this row's note over xx steps without retriggering phase. On DMC,Lxxforces a looping sample window of lengthxx; see DMC Sample Window Commands. - Mxy - VOLUME TREMOLO (
x=speed, y=depth): Tick-based triangle tremolo on pulse and noise volume.xselects speed from M0y slowest to MFy fastest. MCy completes roughly one cycle in a standard 6-tick row; MFy completes roughly one cycle in 4 ticks.yselects attenuation depth in volume steps.Mx0stops tremolo and restores the current base volume. StartingMxystops any activeExyenvelope; explicitExystops tremolo. - Pxx - PITCH SLIDE (
signed byte): Curved pitch slide rate per sub-frame. 01..7F slides up; 80..FF slides down.P00stops movement and keeps the current bend in both Phrase and Table contexts. Pulse/triangle curve mode is set per instrument with PB CURVE: LIN = regular slide, LOG = snap curve with fast attack and slower nonzero tail. - Qxy - TRILL/OFFSET (
x=ticks, y=semitones): One-shot semitone trill/offset for x ticks. y=1..7 up, 8..F down (F=-1). Q00=off. - Rxy - RETRIGGER (
x=volume, y=interval): R00=off. Rx0 is a one-shot retrigger; successive Rx0 commands adjust from the previous retrigger's volume. y>0 repeats every y ticks. x=1..7 raises volume; 9..F lowers it. - Sxy - SWEEP/SHAPE (
shape/sweep): Pulse: hardware sweep. x=period 0..7. y=1..7 pitches up, 9..F pitches down. y=0 or 8 disables. Noise: x&1 toggles mode; y adjusts period: 0..7 = +0..+7, 8..F = -8..-1, clamped 0..15. Triangle and DMC ignore it. - Txx - TEMPO (
tempo byte): Set tempo. 28..FF = 40..255 BPM; 00..27 = 256..295 BPM. - Vxy - VIBRATO (
x=speed, y=depth): 4×/frame sub-frame vibrato on pulse/triangle.xselects speed from V0y slowest to VFy fastest.yselects depth: 0.125, 0.25, 0.375, 0.5, 0.75, 1, 1.5, 2, 2.5, 3, 3.5, 4, 5, 6, 7, or 8 semitones.V00toggles vibrato: start at the smallest depth when inactive, or stop and restore the current note period when active. OtherVx0values use the same 0.125-semitone depth. - Wxx - DUTY / DMC RATE (
channel value): Pulse: duty 0..3. Kit-based DMC: rate changes, 0..F. ZSAW instruments use generated per-note rates and do not useWxxfor tuning. Triangle and noise ignore it. - Zxx - DMC BIAS (
00..7F): DMC direct-counter bias ($4011). Values are masked to 7 bits; other channels ignore it.
Table FX
Tables currently allow:
A, C, E, F, H, K, L, M, P, R, V, W
On pulse and triangle tracks, a left-column table Lxx uses the row's transpose cell as a target offset from the base note and slides there over xx fixed 4×/frame sub-frame steps without retriggering phase. L00 snaps there immediately, also without retriggering. The target offset is separate from the ordinary table transpose, so later non-L rows can change the ordinary transpose while keeping the slide offset. A second left-column Lxx replaces the target. For example, an ordinary +12 transpose plus an Lxx target of -12 cancel to the base pitch.
A pitched Lxx in the right FX column is ignored; its row transpose remains an ordinary transpose. Noise and ZSAW keep their existing transpose behavior and do not slide. On DMC, Lxx in either FX column retains its separate sample window meaning: it forces looping and sets the length from the current start, with L00 selecting the one-byte window.
Table Mxy uses the same volume tremolo behavior as phrase Mxy.
Notable omissions: D, G, Q, S, T and Z are phrase-only for now.
DMC Sample Window Commands
The DMC Fxx and Lxx commands can move and resize the active sample window. They are mainly useful with kit-based DMC sample playback, where phrase notes select raw sample slots. They are available from DMC phrase rows and from tables running on the DMC track, but phrase rows and table rows use slightly different reference points.
Phrase Fxx and Lxx
On the DMC phrase track, Fxx starts a sample later in 64-byte steps. With a DMC note on the same row, it offsets that sample. Without a note, it retargets the active DMC loop window: the loop flag and length stay as they are, the start address moves to the last DMC note slot's kit start plus xx * 64 bytes, and the sample retriggers. F00 is the normal sample start, F01 skips the first 64 bytes, and so on. If the offset would run past the selected sample or wrap the DMC address, Risa skips that trigger instead of spilling into another sample.
On the DMC phrase track, Lxx forces looping and sets the DMC length to xx. If the row has the same DMC note slot that is already current, or has no note, it keeps the current start point. If the row has a different DMC note slot, it starts from that sample's kit start. This lets Fxx choose a frame and later Lxx resize the loop window around that frame.
Table Fxx and Lxx
When a table is running on the DMC track, Fxx retriggers the current DMC sample and advances from the current DMC start point in 64-byte steps: F00 retriggers without moving, F01 moves 64 bytes later, F02 moves 128 bytes later, and so on.
Table Lxx forces looping and sets the DMC length from the current start to xx. Later table Fxx rows keep that loop length while moving the start forward. Without a shorter Lxx loop window, table Fxx shortens the DMC length as it moves so the window still ends at the selected sample's end.
If the relative move or loop length would run past the selected sample or wrap the DMC address, Risa skips that trigger and leaves the current DMC window unchanged. DMC sample-window Fxx and Lxx behavior only applies on the DMC track; on pitched tracks, table Fxx remains fine detune and left-column Lxx uses the pitched slide behavior described above.
Other useful kit-DMC table commands include Wxx for rate changes, Rxx for retrigger setup, and table flow commands such as Axx, Hxx, and Kxx.
Instrument FX Defaults
Pulse and noise instruments have one ENV. row with three envelope control values shown as AA/DD/RR. In each value, the first digit sets a volume level and the second digit sets how quickly the sound moves toward the next volume level. Speed 1 is fastest, F is slowest, and 0 holds at the current level.
For example, ENV. 32/AD/10 starts at volume 3, rises quickly to A, decays slowly to 1, then sustains there. If A's speed digit is 0, the envelope holds at A's volume; D and R are ignored and shown as --. Retriggering a note restarts the instrument envelope. The live Exy command still uses its own simple envelope encoding and overrides the current instrument envelope while active.
xy/00/rr with x > 0 and y > 0 is a fade-out shortcut: start at volume x, fade to zero at speed y, and ignore R. xy/0z/rr with z > 0 then fades back in from zero to R's volume at speed z, then uses R's speed digit for the final release. If R's speed is 0, it sustains at R's volume instead.
Pulse instruments have a SWEEP parameter that uses the same value encoding as phrase Sxy:
- high nibble = sweep period
0..7 - low nibble
1..7= pitch up - low nibble
9..F= pitch down - low nibble
0or8= disabled
This is the instrument's default hardware sweep state. A phrase Sxy command overrides the live state until another instrument is applied.
Pulse instruments have a contextual PITCH parameter. Triangle instruments have a FINE parameter. For triangle, and for pulse modes where PITCH is used as parent fine pitch, the value is a signed byte:
00= no detune.01..7F= detune up byvalue / 32semitones.81..FF= detune down by the two's-complement value / 32 semitones.
The phrase Fxx command overrides the running fine value for that track until another Fxx is hit or a new instrument is applied.
For pulse AUX=INT and AUX=ECHO, the instrument field is repurposed for aux interval or echo delay instead of parent fine pitch. See AUX Pulse Channels for those mode-specific meanings.
Pulse, Triangle, and Noise instruments have a CMD RATE parameter (0..F). This is a per-instrument tick divider for tick-based FX:
0= every tick (default, current behavior)1= every 2nd tick (half speed)F= every 16th tick
Affected FX: arpeggio (C) and envelope (E) are slowed by the divider.
Unaffected FX: commands that explicitly specify a count or run from a fixed-rate path are not slowed:
L(legato slide runs at the fixed 4×/frame sub-frame IRQ rate)R(retrigger interval)Q(trill duration)K(kill countdown)D(delay ticks)M(volume tremolo)- Table speed (has its own
T.SPDparameter) V(vibrato runs at the fixed 4×/frame sub-frame IRQ rate)P(pitch slide runs on the fixed 4×/frame sub-frame path with a curved speed table)
Triangle LENGTH
Triangle instruments use LENGTH as the 7-bit linear counter reload value written to $4008. Its value also selects the triangle control mode:
00-7E= decay; each note trigger lets the linear counter count down at the APU frame-counter rate.7F= sustain/default; the linear counter is continually reloaded.
Channel Notes
- Pulse 1 and Pulse 2 support duty, pitch, vibrato, arpeggio, retrigger, kill, envelope, tremolo, trill, and sweep.
- Triangle supports pitch, vibrato, arpeggio, legato, retrigger timing, kill, and trill, but has no volume envelope or tremolo.
- Noise uses note values as
mode + period_index; pitch-like FX operate on that encoded noise note where implemented. Noise supports volume tremolo. - Kit-based DMC instruments are sample-based.
Wxxsets rate,Zxxsets direct-counter bias, andFxx/Lxxcontrol the DMC sample window. Pitch, vibrato, arpeggio, volume-envelope, and tremolo commands do not apply to kit samples. - ZSAW instruments use the DMC path too, but their phrase notes are melodic pitches, can follow transpose, and keep their generated rate instead of using
Wxx. While z-saw is active it owns the DMC channel, ignores rawZxxbias writes, and clamps notes outside its generated pitch range.