defMON cheat sheet

From defMON · print · built 2026-08-31

Reference

Cheat sheet#

Three screens: seqED + seqLIST (main), sidTAB, disk menu. All numbers are hex. Full key map (transcribed from the wiki's keys_seqed_v3.png) in s-defmon-wiki-manual; iLKke's reference card in s-defmon-wiki-defmoning-101.

keyfunction
toggle seqED / sidTAB (C=+← jump to sidtab position, CTRL+← switch SID 1/2)
RUN/STOPtoggle seqED / seqLIST
F1 / F3play from cursor / from start (CTRL+F1/F3 = defSYNC two-C64 start)
F5 / F7follow on/off · stop (second press: back to top)
F2 F4 F6 F8multispeed 1x/2x/4x/8x; C=+F-keys adjust the CIA timer (BPM)
CTRL+F5/F7nudge the playing tune one tick back/forward
[ ] =mute voice 1/2/3
C= / SHIFT (held)edit sidCall column 1 / 2; CTRL+C= edit speed column
CTRL+C=+SPACEinsert pattern break
SHIFT+N / SHIFT+Uclone sequence to next empty / next unused number (U is riskier)
SHIFT+Xdisk menu (S save, SHIFT+S overwrite, SHIFT+P pack → Executable or Raw)
CTRL+G twicego to the −1 step (the hard-restart row)
CTRL+S n / CTRL+R n / CTRL+W nSuper Commands: apply edits to n steps / n times per step / every n-th step
CTRL+Z AZONE ALL — edit every sequence at once; CTRL+ENTER exits Super Command mode
CTRL+SHIFT+. / ,DIN/MIDI sync delay ($04–$05 typical; goto80: $05 against a TR-808)

sidTAB columns (JP DL WG WG AD SR TR AF PW PS RE FV CP ACID):

colmeaning
JP / DLjump to table line · ticks to wait before the next line (ST = stay forever)
WG (1st digit)waveform: 1x triangle, 2x saw, 4x pulse, 8x noise
WG (2nd digit)gate +1, hardsync +2, [[ring-modulation-and-syncring mod]] +4, test bit +8; the two WG columns are ORA'd
AD SRthe adsr-envelope
TRtranspose: $00–$7F semitones up (arpeggios), $80–$FF absolute pitch
AF$00–$19 finetune ($19 = semitone), $80–$BF/$C0–$FF bend up/down speed
PW / PSpulse width ($08 = 50 %) · sweep $00–$7F left, $80–$FF right
REresonance digit + voice mask digit; mask 8 = "filter the calling voice"
FVfilter type (first digit): 1x LP, 2x BP, 4x HP, combinable
CPrelative cutoff offset (add/subtract)
ACIDcutoff: $0000–$7FFF set, $8000–$BFFF slide up, $C000–$FFFF slide down; floor 200 "Acids"
  • Its opposite number on sync: where defMON drives the rig — user-port adapter, MIDI clock and DIN out — sid-wizard-vessel makes the C64 a slave, taking MIDI clock in and turning the tracker into a pattern launcher; both lock the tick grid to the external clock at one canonical tempo (defMON's six ticks per two steps, Vessel's tempo 6) (sync, live-tracking; source: s-sid-wizard-vessel-readme).
  • Wikipedia's goto80 article does not name the program, but its "post-2009 improvised C64 work" is this editor: the two-C64 jams and live sets that its first user built on it (source: s-wikipedia-goto80).

Techniques

Chord arpeggio (the 0 3 7 trick) › defMON #

There is no chord command: a sidTAB row's arpeggio is the note-transpose (TR, $00$7F semitones added to the sequence note) stepped by the table itself, with JP (Step Jump) looping it — the manual names arpeggios and vibratos as the two things those loops exist "for". Because a sequence step can execute two sidTAB chunks at once, an arpeggio can run under a second program doing something else entirely (source: s-defmon-wiki-manual).

Detune › defMON #

The AF column (Finetune/Bend) is one byte doing three jobs, and the split is what to remember: $00$19 is finetune, with $19 = one whole semitone up — so a single step is 1/25 of a semitone, about 4 cents, and a fat-lead offset is $01$03. Above that, $21$7F continues as pitch up (wrapping), $80$BF is bend-up speed and $C0$FF bend-down speed (pitch-slide-and-portamento). Detune and portamento therefore live in the same column and cannot both be active on a row; transpose is a separate column (TR), so a detuned copy of a part is TR unchanged and AF $01$02 (sources: s-defmon-wiki-manual, s-defmon-wiki-defmoning-101).

Filter programming on the SID › defMON #

Four sidTAB columns instead of a filter table (defmon): RE = resonance nibble + voice-mask nibble, with the defMON-only mask value 8 = "activates the filter for the Voice the Sound Program is called from" — so one filter chunk works from any voice (F8 = resonance $F, filter on, this voice); FV = filter type (first digit, combinable low/band/high); CP = a relative cutoff offset added or subtracted from the base value; ACID = a four-digit absolute cutoff that doubles as a slide command — $0000–$7FFF set, $8000–$BFFF slide up, $C000–$FFFF slide down — with the minimum locked at 200 "Acids" "so you don't blow your speakers/eardrums". Two cutoff controls means a filter envelope can be offset without rewriting it. Two internals worth knowing: defMON never writes $D415, so the two rightmost digits of a set value do nothing (anarkiwi's register dump, 2018-12-22), and on a detected 8580 the player floors the cutoff at $0200 ($0000 on a 6581) to make the chips behave more alike (sources: s-defmon-wiki-manual, s-defmon-wiki-defmoning-101, s-chipmusic-defmon-thread).

Hard restart › defMON #

The only editor that automates nothing — frantic (2018-02-22): "You can do any kind of hardrestart in defMON, whereas most other editors only feature one type of built in hardrestart and no reasonable way to do it manually." Automated HR would need look-ahead sequence parsing, which costs rastertime; instead every sequence has a −1 step before line 0 (reach it with CTRL+G twice) where the restart rows go, ~2 frames before the note (source: s-chipmusic-defmon-thread). The field guide new users are pointed at says the same thing as a boast: "Most flexible hard restart ever, period. Because you do it all yourself." (source: s-defmon-wiki-defmoning-101).

  • The common idiom (used by goto80 and Amelinium): on the restart line waveform/gate 00 00 with ADSR $0F00, wait 2 ticks (DL), then gate 09 (test + gate) with the instrument's real ADSR, then the waveform — the GoatTracker recipe, typed by hand in the sidTAB (source: s-chipmusic-defmon-thread).
  • iLKke's compendium (2015-08-03) names four HR shapes — old school (one frame gate-off, ADSR $0000), new school (gate-off with ADHR, then $09 + real ADSR, then waveform+gate+note), hybrid, "heatbeat" — and the known ADHR values: $0000 "hardest", $0F00 "most common", $0F18 Drax, $0F20 GRG, $0FF0 Randall/Jammer, $F000 Linus, $FF00 Jeff. Sustain $F "is especially buggy (try E then?)"; a soft restart wants release ≥ $8 (sources: s-chipmusic-defmon-thread, s-defmon-wiki-defmoning-102).
  • How much HR you need: F7sus4 — the full test-bit restart is "obligatory only with drums and snares"; leads, bass and arps are fine soft-restarted. 4mat's minimal recipe: "$08 on the first frame before you set the gate … ($08,$41,$41,$40)". Bonus trick: vary the AD nibble on the HR line ($01–$0F) to scale a drum's volume per hit (source: s-chipmusic-defmon-thread).

Multispeed (framespeed) › defMON #

defMON does 1x/2x/4x/8x, but the multiplication lives in the editor, not the player: F2/F4/F6/F8 set a CIA timer ($4CC7+1 cycles = one PAL frame; $2663 = 2x, $1331 = 4x), and C=+F-keys nudge or halve/double the timer — which doubles as defMON's free-form BPM control. Because of that design a per-pattern multispeed command is impossible without breaking packed tunes. Odd rates work by typing the timer by hand: $1997 gives 3x — frantic's favourite, "Just enough to be enough" — and a CSDb compo tune ran at 25 Hz, the player called every second frame. A host program plays a multispeed defMON tune by calling $1003 once per frame and the sound-only entry $1006 the remaining 1/3/7 times (sid-player-routine). Switching 1x↔8x live works as a performance effect, though frantic warns it can "also sound crappy in some cases" (sources: s-defmon-wiki-defmoning-102, s-defmon-wiki-calling-the-player, s-chipmusic-defmon-thread). The full preset set is $4CC7/$2663/$1331/$0998 for 1×/2×/4×/8× (source: s-defmon-wiki-sync-and-stereo), and the 2014-06-15 release fixed multispeed toggling so that switching while playing no longer drifts out of sync — which is what makes it usable live (source: s-defmon-wiki-releases). The wiki's field guide states the payoff plainly: "Up to 8x multispeed means nearly any SID tune except sample playback can be covered in defMON" (source: s-defmon-wiki-defmoning-101) — a claim that only holds because the player is cheap enough to call eight times, "relatively low CPU usage… DefMON tunes can be, and have been, used in various demos and games" (source: s-defmon-wiki-manual).

Pitch slides and tone portamento › defMON #

defMON has no slide command, by design: you write the bend as a sidTAB chunk and call it in a step's second sound-program column, beside the instrument in the first (instrument-tables). The pitch columns are TR and AF. AF packs finetune and bend into one byte — $00$19 finetunes up with $19 equal to one semitone, $21$7F continues upward (wrapping), $80$BF sets the speed of a bend up and $C0$FF the speed of a bend down — while TR is $00$7F relative semitones (for arpeggios) and $80$FF absolute pitches, so a slide's destination can be written either way (sources: s-defmon-wiki-manual, s-defmon-wiki-defmoning-101; detune).

Pulse width modulation (PWM) › defMON #

Two sidTAB columns (defmon): PW sets the width, PS sweeps it — $00–$7F "slide left (to 0%, lowering PW value in time)", $80–$FF "slide right (to 100%)". The two digits XY typed into PW expand to the 12-bit value $YXY (e.g. 83$383), so the closest squares are $08$808 ≈ 50 %, $0C$C0C ≈ 75 %, $04$404 ≈ 25 % (or $F7/$FB/$F3 from the other side); "If pulSEWIDTH is set near to 0% or 100%, the pulse waveform is inaudible" (sources: s-defmon-wiki-defmoning-101, s-defmon-wiki-defmoning-102). The manual states the same landmark more simply — "PW (Pulse Width) — $08 equals the 50% pulse" — and the sweep direction as $00–$7F left, $80–$FF right (source: s-defmon-wiki-manual).

Ring modulation and oscillator sync › defMON #

Ring and sync live in the gate nibble of the sidTAB's second WG column: +1 gate, +2 sync, +4 ring mod, +8 test bit — additive, so 07 = ring + sync + gate and 05 = ring + gate. defMONing 102 states the pairing: "1+2, 2+3, 3+1 … e.g. used in channel 1 means channel 3 modifies channel 1". Because the two WG columns are ORA'd together before the register write, $55 can be entered as 5401 or 5005 — so you can hold the ring-mod bit in one column while switching waveforms per line in the other, a per-line ring-mod switch (Amelinium's technique, 2018-12) (sources: s-defmon-wiki-defmoning-102, s-defmon-wiki-defmoning-101, s-chipmusic-defmon-thread). The manual states the column split that makes this work: of the two WG columns, the yellow one is the waveform and you "use only the first digit" (1x triangle, 2x saw, 4x pulse, 8x noise), while the green one is gate plus hardsync and ring modulation and you "use only the second digit" (source: s-defmon-wiki-manual).

Shuffle, swing and FunkTempo › defMON #

defMON has no groove list and no funktempo: every sequence step carries its own speed value, per channel, and the value is ticks − 1 (a 2 in the column means 3 ticks). Swing is therefore written by hand into the column — and because the columns are per channel, the drums can run 5 3 5 3 against a straight melody, with everything re-aligning at each sequence break (source: s-chipmusic-defmon-thread).

Under hardware sync that freedom narrows to one choice. The user-port adapter sends six pulses per two sequence steps, so a synced tune has to spend exactly 6 ticks on every two steps: 3+3 straight or 4+2 swung, and nothing else; tempo changes then have to come from the player-call rate rather than from the speed columns (source: s-defmon-wiki-sync-and-stereo).

Vibrato and delayed vibrato › defMON: no vibrato at all #

defMON has no vibrato command, on purpose. The sidTAB is the whole effect language — "you would create a vibrato the way you like it, rather than calling a pre-programmed vibrato" — so a vibrato is a few sidTAB rows that step the pitch up and down, and a step can run two sidTAB chunks at once, one holding the note and one running the wobble. The design argument is the same one frantic makes about hard-restart: fewer built-ins, more flexibility, and no CPU spent on a routine a given tune may not want (source: s-defmon-wiki-manual; sid-player-routine).