defMON
frantic's native C64 sid music editor — in iLKke's words "the only true tracker for the C64 (as opposed to sound 'editors')": there are no instruments, no effect commands and no per-purpose tables, only one sound table (the sidTAB) whose rows map almost 1:1 onto SID registers, and in which the user builds everything — including hard-restart and vibrato — by hand (sources: s-defmon-wiki-defmoning-101, s-defmon-wiki-manual). Made "in house" for Hack n' Trade, it became the scene's live-improvisation instrument in goto80's hands (live-tracking; source: s-goto80-site-defmon-posts).
Facts#
- Timeline: coding started ~2006; "it was in 2008 that defMON got finished enough to be usable, and the first user (goto80) started using it"; public only from 2013-08-03, via a Genesis Project "crack" — frantic's own download page lists that build as the first release, named "Cracked by Hackers". Official dated releases run 2014-06-12 ("Export Expert") to 2020-10-08 ("Nudge Nudge!"). On 2021-04-27 frantic withdrew defMON from public development ("defMON will no longer be a public project") after accusations and threats; the wiki and all releases stay downloadable (sources: s-chipmusic-defmon-thread, s-defmon-wiki-releases).
- Versions are compile-date stamps shown in the status bar at startup; each 2020 release is two
.d64s, one bundling worktunes by goto80, iLKke and F7sus4 to learn from (source: s-defmon-wiki-releases). - Design philosophy (frantic, 2018-02-22): "defMON is designed to implement as little 'built in' functions as possible. Things like hardrestart, vibrato, etc.. Instead it is up to the user to do it themselves in the sidtab." Feature requests were refused as policy — "The limit has to be drawn somewhere … Think of it as a design decision" (2018-08-07). The aim: low rastertime so tunes work in demos and games (source: s-chipmusic-defmon-thread).
- Two sidCalls per step: every sequence step has two Sound Program columns pointing into the sidTAB; where both set the same parameter the second overrides the first — defMON's replacement for effect commands (keep the instrument in slot 1, put reusable modifier chunks in slot 2) (sources: s-defmon-wiki-manual, s-defmon-wiki-defmoning-101).
- The −1 step: every sequence has an extra step before line 0 (reach it with
CTRL+Gtwice) so manual hard-restart can fire ~2 frames before the note without look-ahead parsing in the player (source: s-chipmusic-defmon-thread). - Multispeed 1x/2x/4x/8x lives in the editor, not the player:
F2/F4/F6/F8set a CIA timer ($4CC7+1 cycles = exactly one PAL frame; $2663 = 2x, $1331 = 4x), andC=+F-keys nudge the timer — defMON's "adjustable BPM" (default ≈ 125.3 BPM). Frantic's own favourite: 3x speed (timer $1997, set by hand), "Just enough to be enough" (sources: s-defmon-wiki-defmoning-102, s-chipmusic-defmon-thread). - Stereo SID: a second seqLIST for SID #2 (
CTRL+←to switch,CTRL+SHIFT+←to enable stereo mode), base address togglable between$D4xx/$D5xx/$DExx/$DFxx, config saved in the worktune. Implemented as a second full player copy in RAM — frantic: "about 95% of all bugs I have fixed in defMON over the years were related to that". Stereo tunes cannot be packed/exported; only SID #1 data is included (sources: s-defmon-wiki-sync-and-stereo, s-chipmusic-defmon-thread). - Sync: four paths — Scannerboy's user-port adapter (LSDj, Nanoloop, MIDI clock, DIN sync, 24–2 ppqn analogue clock; 36 EUR, 2015); defSYNC start-sync of two C64s over a serial drive cable (back in the 2020-10-08 release); a live one-tick nudge (
CTRL+F5/F7); and manual BPM matching with FTC's defBPM timer tables. The adapter protocol assumes 6 ticks per 2 sequence steps (source: s-defmon-wiki-sync-and-stereo, s-defmon-wiki-releases). - The player (sid-player-routine): packed tunes load at
$1000;lda #$00 : jsr $1000inits (A = start position; init auto-detects 6581/8580 and briefly disables interrupts),jsr $1003once per frame parses sequences + updates sound,jsr $1006is the sound-only call for the extra multispeed updates; global volume is pokeable at$10B1($0x). Speed-optimized rather than size-optimized. On a detected 8580 the filter cutoff is floored at$0200to make the chips behave more alike (sources: s-defmon-wiki-calling-the-player, s-chipmusic-defmon-thread). - Limits: 128 sequences (
$00–$7F); no.sidexport (pack to PRG, then external PRG→PSID tools; sid-format); PAL tuning only (an experimental NTSC build appeared 2018-02-11); sequences not referenced in the seqLIST are not saved; frequency tables are floored, not rounded, so hi/lo byte data can be shared (defMON's A6 =$1D47where codebase64 says$1D46) (sources: s-chipmusic-defmon-thread, s-defmon-wiki-releases). - Community: frantic ran the chipmusic.org megathread as support channel 2014–2021 and set up the wiki (toolsforscholars.com 2014-06-09; moved 2020-11-05 to vandervecken.com, hosted by anarkiwi). Users: goto80, iLKke (the defMONing 101 field guide), scannerboy, F7sus4, Amelinium, martin_demsky (defMON tunes in hvsc since the 2020-12 update), Zabutom (sources: s-chipmusic-defmon-thread, s-defmon-wiki-manual).
- Heard in: My Beauty (the first released production with defMON music), Hollowman's In Memory of (goto80), the goto80 music disk _| ̄|○, Samar's NGC 1277 (F7sus4), and the DUBCRT cartridge album — "there would be no DUBCRT without defMON". DeepSID's
?search=defmonfilter lists the packed tunes (source: s-defmon-wiki-releases, s-chipmusic-defmon-thread). - Running it today: works in vice (
x64 defmon-YYYYMMDD.d64); the 2019 electro·pizza guide records the Linux gotchas — install the C64 ROMs by hand, and mind the symbolic keymap (←=_,C== ctrl, RUN/STOP = esc, CTRL = tab). Frantic kept defMON native "because then you can work on the real chip and the proper SID sound while you work" (sources: s-electropizza-defmon-vice-chip, s-chipmusic-defmon-thread).
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.
| key | function |
|---|---|
← | toggle seqED / sidTAB (C=+← jump to sidtab position, CTRL+← switch SID 1/2) |
RUN/STOP | toggle seqED / seqLIST |
F1 / F3 | play from cursor / from start (CTRL+F1/F3 = defSYNC two-C64 start) |
F5 / F7 | follow on/off · stop (second press: back to top) |
F2 F4 F6 F8 | multispeed 1x/2x/4x/8x; C=+F-keys adjust the CIA timer (BPM) |
CTRL+F5/F7 | nudge 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=+SPACE | insert pattern break |
SHIFT+N / SHIFT+U | clone sequence to next empty / next unused number (U is riskier) |
SHIFT+X | disk menu (S save, SHIFT+S overwrite, SHIFT+P pack → Executable or Raw) |
CTRL+G twice | go to the −1 step (the hard-restart row) |
CTRL+S n / CTRL+R n / CTRL+W n | Super Commands: apply edits to n steps / n times per step / every n-th step |
CTRL+Z A | ZONE 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):
| col | meaning | |
|---|---|---|
JP / DL | jump 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-sync | ring mod]] +4, test bit +8; the two WG columns are ORA'd |
AD SR | the adsr-envelope | |
TR | transpose: $00–$7F semitones up (arpeggios), $80–$FF absolute pitch | |
AF | $00–$19 finetune ($19 = semitone), $80–$BF/$C0–$FF bend up/down speed | |
PW / PS | pulse width ($08 = 50 %) · sweep $00–$7F left, $80–$FF right | |
RE | resonance digit + voice mask digit; mask 8 = "filter the calling voice" | |
FV | filter type (first digit): 1x LP, 2x BP, 4x HP, combinable | |
CP | relative cutoff offset (add/subtract) | |
ACID | cutoff: $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).
Related#
frantic · goto80 · hard-restart · multispeed · sync · instrument-tables · sid-player-routine · goattracker · sid-wizard · cheesecutter · ninjatracker · vice · hvsc · live-tracking
Sources#
s-defmon-wiki-manual · s-defmon-wiki-defmoning-101 · s-defmon-wiki-defmoning-102 · s-defmon-wiki-supercommands · s-defmon-wiki-sync-and-stereo · s-defmon-wiki-calling-the-player · s-defmon-wiki-releases · s-chipmusic-defmon-thread · s-electropizza-defmon-vice-chip · s-goto80-site-defmon-posts · s-sid-wizard-vessel-readme · s-wikipedia-goto80