
(bottom screen wakes into the song arranger once the splash dismisses)
Powers up on the title card, then a quick SD-card probe + slot-2 cart check. If the mDS slot-2 MIDI cart is plugged in, the song clock locks to its tempo before the first frame.


Top screen is a 9-voice step tracker; bottom is the song arranger with two tap bands - MUT for instrument silence, FX for PERFORM-effect mute - and the F1 / F2 FM touch pads for live X-Y modulation.

(top screen owns
the lab while it
is open; bottom
shows the song
arranger underneath)
Per-patch sound design over the top screen: full ADSR, vibrato, tremolo, sweep, pitch envelope, porta, arp + arp direction, length gate. Four banks: pulse, FM, noise, sample. A+Left/Right flips through patches in the bank without leaving the lab; SELECT opens a COPY FROM picker to clone any other inst (phrase and all on SAM patches).

EDIT PHRASE "HELLO WORLD_ " UP DN: cycle letter LF RT: move cursor L: insert R: backspace A: ok B: cancel
Any sample patch can flip its source to the 1982 SAM speech synth. Type English on the D-pad letter chooser; the on-board reciter converts to phonemes; SAM renders fresh at each note. Cell notes chipmunk the pitch. SAM TRIM chops 0-100 ms off the front of the render to dial out leading silence and tighten the onset.
(top screen keeps showing the tracker live - audio + grid stay updated while the settings overlay is open below)

Sixteen save slots in a two-pane layout: pick a slot on the left, an action on the right. SAVE / LOAD always confirm so a wrong-cursor button press never blows away unsaved work; once they (or NEW) succeed the overlay auto-closes back to the song screen -- failure stays open so the error is readable. Auto-saves every 3 seconds after the last edit. The actions pane also exposes BPM, MIDI mode (off / syncin / syncout), sync OFFSET + RATE, the global FMTUNE calibration, and the five per-project Y harmony override rows.
rand: sparse 25% row 1234567890123456 ----------------- P1 -4--9---2------7 00 00 00 00 P2 -3--3--3--3---- 01 01 01 01 F1 ----1----1----1 02 02 02 F2 ---------7----- 03 N -X-X-X-X-X-X-X 00 00 00 00 00 00 S1 1------1------1 04 04 04 RND sparse row 25% A=ok B=x
(modal floats over the help row on the TOP screen - bottom keeps showing the song arranger.) hold A+SELECT in PATTERN focus to open
Four note-only modes: sparse (scatter at density %), dense (every step), euclid (evenly distributed N hits), mutate (nudge existing notes). Scope toggles row / pat. Mash A for new rolls. Insts never touched.
row P2 (p00) -> CLIP 1234567890123456 ----------------- P1 -5--5--5--5---- 00 00 00 00 P2 -3--3--3--3---- 01 01 01 01 F1 ----1----1----1 02 02 02 F2 ---------7----- 03 N -X-X-X-X-X-X-X 00 00 00 00 00 00 S1 1------1------1 04 04 04 L:perf X:fcs Y:ply R:cp/pst
COPY FROM p05 -> p00 A=ok B=x SELECT alone in PATTERN focus opens the pattern-wide copy modal. R / A+R works for single-voice rows.
Per-voice row clipboard (R copies, A+R pastes - cross-pattern works). Whole-pattern copy from modal under plain SELECT.

A STUTTER (retrig) B HALT (freeze) ◀ TAPE-STOP (down) ► SPIN-UP (up) ▲ LOOP 2-step ▼ HALF-TIME A + UP/DN octave B + dir live arps L releases PERFORM
L swaps EDIT for PERF. D-pad & face buttons become live FX: stutter, halt, tape-stop, spin-up, beat-quantized loops, half-time. Releasing snaps the playhead to where it would have been - never out of phase.
EDIT p00 s05 P2n.07 PLAY 1234567890123456 ----------------- P1 -5--5--5--5---- 00 00 00 00 P2 -3--3--3--3---- 01 01 01 01 F1 ----1----1----1 02 02 02 F2 ---------7----- 03 N -X-X-X-X-X-X-X 00 00 00 00 00 00 S1 1------1------1 04 04 04 L:pf X:fc Y:py R:cp/pst MIDI
mDS slot-2 MIDI cart mirrors a sync_state struct at 0x0A000000. The DS polls 24-PPQ tick_counter every 2 ms and drives the song clock from it. DAW transport edges start / stop locally.
The mDS slot-2 MIDI cart (custom RP2040 in the GBA slot) parses MIDI clock from a DAW; the DS reads its state via direct memory-mapped reads. Sub-millisecond lock; the help row gains a yellow MIDI tag once the cart is locked in. Detection is opt-in via DETECT CART in settings -- the raw slot-2 probe at boot wedges some flashcarts, so the user triggers it once the mDS is plugged in.