chipmusic.org — the defMON megathread (2014–2026)

author frantic (thread starter, posts throughout); iLKke, scannerboy, goto80, F7sus4, Amelinium, martin_demsky, d3Ni$e, anarkiwi, 4mat, MARiO64, bitwise, and others
date 2014-06-08 to 2026-05-16
article one forum thread, 28 pages, 444 posts
source file raw/chipmusic/defmon-t14505-p01.txt … p28.txt
source url https://chipmusic.org/forums/topic/14505/defmon/ (+ /page/2/ … /page/28/)
created 2026-08-30 · updated 2026-08-30

The de-facto support forum, changelog and design diary for defMON, run for twelve years by its author frantic himself. He opens on 2014-06-08 ("If you are one of those people who tried it out and actually did something, raise your hand please"), sets up the defMON wiki at toolsforscholars.com/defmon the next day, and for the following seven years announces every release here, explains internals in depth, and fields bug reports — until he withdraws the project from public development on 2021-04-27. Users (goto80, iLKke, F7sus4, Amelinium, martin_demsky and others) fill the thread with concrete sidTAB recipes, hard-restart practice and sync setups.

Key claims#

Design philosophy (frantic's own statements)#

  • Minimal built-ins, maximal control (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. That comes at a cost of course (less automation), but the benefit is increased flexibility. You can do any kind of hardrestart in defMON, whereas most other editors only feature one type of built in hardrestart." bitwise put the user view of the same idea earlier (2015-03-30): "There is no commands at all, defMON doesn't make a distinction between instruments and commands/effects/whatever. You program all the stuff yourself."
  • Why no automated hard-restart and why the "-1 step" exists (2018-02-22/23): automated HR needs look-ahead sequence parsing (HR must fire 2–3 frames before the audible note), and "such look ahead-parsing adds overhead to the code and consumes CPU that isn't strictly required. Original defMON was intended to be usable in demos/games, with low raster time consumption." Instead every sequence has an extra step before line 0 where the user triggers HR manually; you may also just treat the -1 step as step 0 (reach it with CTRL+G pressed twice). In hindsight (2020-11-02) he calls the extra step "more like a necessary evil, given the way hard restart works, than a feature" — while F7sus4 defends it as the perfect place for HR lines, filter markers and slow-attack sounds so they sync with fast ones.
  • Feature restraint as policy (2018-08-07, refusing a loop command for the sidTAB): adding nice-to-haves one by one "will gradually make defMON slower, more bloated, probably more prone to bugs … The limit has to be drawn somewhere, and I've chosen to draw it pretty narrowly around what's really important to have. Think of it as a design decision." A format change would also "cause some trouble for various secret tools that are around."
  • The player (sid-player-routine): optimized for speed, not size — "Most of the memory used by the packed tune is used by the player code, rather than the player data … When doing a stereo sid tune in 4x speed, having a speed optimized player is almost a requirement" (2020-09-20; he points to chordian.net/c64editors.htm raster-time comparison, and contrasts his own 256-byte tiny-sid-compo players Block Acid Dub etc. as the size-optimized opposite). Multispeed is handled by the editor, not the player, which is why a per-pattern multispeed command is impossible without breaking packed tunes (2017-06-05). Timing is CIA-based; the speed column is +1 (a "2" in the sequence = 3 ticks per step, 2020-10-28). Per-channel speed columns were a deliberate flexibility choice; channels always sequence-break together (2020-10-29).
  • Frequency tables floored, not rounded (2018-12-24): unlike "just about every other music player on the C64", defMON floors frequency values so the table "loops in a curious way, so you can reuse part of the same table data both for the high byte and for the low byte" — this is why defMON's A6 writes $1D47 where the codebase64 table says $1D46 (anarkiwi's siddump-style check, 2018-12-22). Lo-byte table at $159C, hi-byte at $1638 (in the 2018 dev version); frantic posted the full source-table layout for anyone wanting NTSC tuning (2018-02-10), then made an NTSC build ("defmon goes overseas", 2018-02-11).
  • The two WG columns are combined with ORA before hitting the SID register (2018-12-24), so gate bit and waveform can be controlled independently — e.g. $55 can be written as 5401 or 5005 (Amelinium, 2018-12-13). The testbit ($08/$09) "resets the oscillator that produces the waveform, and that is completely independent of the volume envelope generation" (frantic, 2018-08-07).
  • Stereo SID was "a hack on top of everything else" (2014-06-11) — implemented as a second full copy of the player in RAM, each hardcoded to one chip, to keep CPU usage low (2020-05-15); this is why 2SID tunes could not be packed to executable (only mono export existed; frantic packed 2SID tunes by hand with private scripts on his Mac, 2020-09-14). By 2021-02-11: "I'd say about 95% of all bugs I have fixed in defMON over the years were related to that [2sid support], directly or indirectly."
  • Export/packing/SID files: SHIFT+P packs; export to executable PRG was added on user request within days of the thread starting (2014-06-12, "SAVE AS EXECUTABLE OR RAW? E/R"). No .sid export — frantic recommends external PRG→PSID tools and links the PSID header spec (2015-06-25); a packed tune can differ subtly from the editor ("the timing simply won't be the same … sometimes enough to trigger … the ADSR bug", 2020-09-05). RAW packs include the player, hence the ~$1000–$1F11 range. Music sits at $1000–$1FFF by scene custom because the VIC always sees character ROM there, so the RAM is useless for graphics (2020-09-21). He can manually shrink and relocate tunes ("Rent a cop" games) on request. frantic also runs codebase64.org (2020-09-21).

Version and project history (dated)#

  • Prehistory: coding started ~2006 ("about 15 years ago", 2021-04-27); "it was in 2008 that defMON got finished enough to be usable, and the first user (goto80) started using it … Then it got public around 2013, when a 'cracked' version was released by G*P" (2018-10-27, the double anniversary post). Old pre-2009 builds (one from April 2008) dug up by goto80 and posted 2018-10-28. Before defMON, frantic and goto80 made Papaya Dub on the 8×-speed JCH editor "something like 20 years ago" (2020-07-30).
  • 2014: wiki set up 2014-06-09; executable-PRG export 2014-06-12; second-SID base address selectable in-program 2014-06-15 (default was $DF00 per iLKke; sid2sid users wanted $DE00); "deluxe (dx)" build's only difference is finite orderlist loops (FF 00 03 = jump back to 00 three times, playing it 4× total; iLKke 2014-06-14); 2014-11-08 build adds support for scannerboy's DIN-sync interface + stereo bugfix.
  • 2015: scannerboy's user-port sync adapter ships (2015-03-07): LSDJ sync, nanoloop sync, MIDI clock, DIN sync, and 24–2 ppqn analogue clock for Volcas/Pocket Operators etc., 36 EUR; sources on his GitHub 2015-03-17. Second batch of 10 units 2017-08-15.
  • 2016–2017: frantic endorses the SIDFX stereo-SID board (2016-05-14); Super Command mode gets a first brief wiki section (2016-11-21); "defMON isn't actively developed, but I wouldn't necessarily say that it is dead" (2017-03-17). F7sus4's meticulous reports (from 2017-06-04) lead to the 2017-10-24 fix of the years-old missing sequence-break ("red dots") bug — unused sequences lost their end markers on save/load, which also broke copy/paste (SHIFT+N flashing red).
  • 2018: NTSC build (2018-02-11); ADSR tutorial post (2018-02-13); 2018-10-27 build fixes the "inflated file size" save bug; 2018-11-01 build fixes a memory-corruption bug where the player believed SID2 sat at $1500 and wrote $00 into $1517 — the middle of the SID1 player code enforcing the 8580 filter floor (defMON hard-caps filter cutoff at $0200 on a detected 8580, $0000 on 6581, to make the chips behave more alike).
  • 2020: 2020-06-01 release; defMON II development announced 2020-06-23 — "all the available CPU power can be used for music", at least 3 SIDs (9 channels), real MIDI data support, donations invited; live-friendliness brainstormed with goto80, paddle control and a "buffer" of values usable "in an almost 'modular synthesis' kind of way by the sidtab" (2020-09-15). 2020-09-18 fixes the 2SID mute-display bug. 2020-10-08 release: "nudge" (tick forward/back for beat-matching), two-C64 start-sync over a serial cable (defSync: a $DD00 CLK-bit polling loop, code posted 2020-10-09), and a bundled .d64 of worktunes by iLKke, F7sus4 and goto80. Hosting cancelled 2020-10-16; the wiki moves to https://www.vandervecken.com/defmon/ on 2020-11-05, hosted by anarkiwi.
  • 2021: considering a "defMON 1.5" with MIDI via anarkiwi's Vessel interface after losing defMON II inspiration "after the conflicts raving around here" (2021-02-12). 2021-04-27: "defMON will no longer be a public project" — after "various accusations, and since 25 of April even some vague threats"; the wiki and all released versions stay downloadable, and "the latest version is the recommended one." (The trigger: an escalating 2020-10 dispute in-thread with user d3Ni$e over donations and moderated posts.)
  • 2021–2026 tail: ryba compiles the defMONing 102 guide updating iLKke's 101 (2021-10-19), which frantic welcomes onto the wiki (2021-10-28, his de-facto return to the thread); Zabutom has a defMON release coming "on Stilleben records I think" (frantic, 2025-09-15); FlexiArcade sells a 3D-printed defMON keyboard overlay on Etsy (2026-05-16).

sidTAB technique posted by users#

  • iLKke's drum recipes (2015-08-01), the thread's most-cited post. Kick = a frame of noise then triangle ($01) or pulse ($04) with a pitch drop ($E0 in the AF column, note around C-5; pulse needs a pulse width set). Snare = pulse punch then noise tail. Hat = short high noise. His literal sidTAB lines — kick: ++ 01 --090ff0---- / ++ 00 40010283--E0 0800 / ++ ST --00-------- (line 1 hard restart, line 2 pulse + ADSR + pitch drop, line 3 gate off); snare: ++ 01 --090ff0---- / ++ 00 400104f6--E4 0800 / ++ ST 8000-------- (gate off + switch to noise). defMON reaches 2 octaves lower than other C64 editors, so transposed borrowed drum recipes accordingly (2015-08-01).
  • iLKke's hard-restart compendium (2015-08-03): the ADSR bug in brief, plus four HR shapes (old school: 1 frame gate-off ADSR $0000; new school: gate-off with ADHR, then gate $09 + real ADSR, then waveform+gate+note; hybrid; "heatbeat") and 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?)"; soft restart wants release ≥ $8. 4mat's minimal recipe (2018-12-25): "$08 on the first frame before you set the gate … ($08,$41,$41,$40)". F7sus4 (2018-12-29): full HR with testbit is "obligatory only with drums and snares"; leads/bass/arps are fine soft-restarted; the common defMON idiom (used by goto80 and Amelinium) is WGWG 0000 + ADSR 0F00 on the restart line, then gate 09 with the instrument's real ADSR.
  • Volume trick (F7sus4, 2018-12-30): on the HR line 09 06, vary the AD nibble $01–$0F to scale a drum's volume — "out of manual".
  • Filter: ACID column = $0000–$7FFF cutoff set, $8000–$BFFF slide up, $C000–$FFFF slide down; F8 in the RE column = resonance $F + "turn filter on for current voice", resolved per-voice by the editor (frantic, 2015-06-28; F1/F2/F4 hardcode a voice instead). anarkiwi's register dump (2018-12-22) shows defMON never writes $D415 (cutoff low), so the rightmost two ACID digits of a set value do nothing.
  • Ring mod / sync on the fly (Amelinium, 2018-12-13/16): WG values are additive ($05 = ringmod + gate on), pairing is by neighbouring voice (1↔2, 2↔3, 3↔1); keeping ringmod in one WG column while switching waveforms in the other gives per-line ringmod control.
  • Sequence-list craft (iLKke, 2015-08-01): FFxx00 = jump to position xx; FFxxyy = jump back yy times; use no-op jumps (FF0800 on step 07) as visual section breaks; SHIFT+U clones a sequence to the next unused number, SHIFT+N to the next empty one — "SHIFT+U is a more dangerous operation" (frantic, 2017-10-26). Max 128 sequences, $00–$7F (iLKke 2017-10-21; frantic 2020-08-02). Patterns not present in the sequence list are not saved to disk (F7sus4, 2020-07-31).
  • Editing modes (frantic): CTRL+Z CTRL+A = "ZONE ALL", edit every sequence at once (border colour warns; CTRL+RETURN exits) — his global-speed-change trick (2018-02-15). Manual transpose recipe (2020-09-09): clone, CTRL+G twice, CTRL + S20 (edit 20 steps at once, optionally RC = repeat $C times), then PERIOD/COMMA. F1/F3 play, F5 follow-mode toggle, F7 stop (second press returns to play-start — "a hell of a tip", PULSELOOPER), voice mutes on ; ' and \, SHIFT+X disk menu (also resets a confused keyboard state), CTRL+C=+SPACE inserts a pattern break, C= + F-keys set speed/multispeed, CTRL+SHIFT+PERIOD/COMMA trims the MIDI/DIN-sync delay (2020-10-26).
  • Multispeed: x1/x2/x4/x8 built in ("2x" = parse the sidTAB twice per sequence step); timer values $2663 (x2), $1997 (x3, manual), $1331 (x4); frantic: "3x speed is something like a favourite of mine. Just enough to be enough" (2020-08-05). Live x1↔x8 switching as a performance effect works but "also sound[s] crappy in some cases" (frantic, 2020-09-15). A 25 Hz tune (CSDb compo, 2020-08-02) is the opposite: player called every second frame.

Sync, hardware and ecosystem#

  • scannerboy's user-port adapter (above) is the canonical sync solution; frantic deliberately chose the user port because MIDI carts collide with 1541-Ultimate/Action Replay setups, whose fastload routines defMON exploits for disk I/O (2017-03-06). The interface sends MIDI clock + start/stop only, no note data, and no ASID (2017-02-28). goto80 synced defMON to a TR-808 via DIN sync (video, 2016-07-05) and had a robot arm play defMON (goto80.com/robotmusic, 2017-11-23). MARiO64 revealed (2020-10-28) that his own user-port sync mod of SID-Wizard 1.7 works with the same adapter and offered a matching 1.8 build. martin_demsky ran defMON in MIDI sync with a Behringer TD-3 (2020-10-27); 4mat got two VICE 3.1 instances talking over emulated RS-232 toward a SID DJ-mixing tool (2020-10-13), which frantic loved. On real hardware, frantic recommends SIDFX for stereo SID and the video port + codebase64's noise-reduction page for clean recording (2016-05-17); 4mat adds: black border/screen, screen off via POKE 53265,65 (2016-05-17).
  • Emulation: NTSC untested but works, PAL tuning only (2018-02-09); users repeatedly prefer VICE 2.4/reSID-fp for filter sound while 3.x models ADSR quirks better (martin_demsky, F7sus4, 2020-09-23/24); frantic on real 6581s: "It's like a fractal maze that drives you more mad the closer you try to get to it" (2020-09-23). He made defMON native "because then you can work on the real chip and the proper SID sound while you work. I was never really tempted to do a PC/Mac editor" (2020-09-21).
  • Who uses it / heard in: goto80 (first user, tester of every release, Demobit live sets); iLKke (Klotokok on weeklybeats, CSDb releases 131296/139112/134563, the defMONing 101 field guide); scannerboy; F7sus4 (25 Hz compo tunes, NGC1277 with a relocated defMON tune); Amelinium (YouTube sidTAB experiments, planned tutorials); martin_demsky (Demobit tune, Jazzy Ocean album, tunes accepted into HVSC in the 2020-12 update, a defMON t-shirt); d3Ni$e; anarkiwi (intro video tutorial vimeo.com/295475988, 2018-10-16; later wiki host); Peeshaya; Zabutom (2025). Tumult: "there would be no DUBCRT without defMON" (2016-11-23) — frantic added the DUBCRT cartridge to the wiki's creations page. DeepSID's ?search=defmon filter became the de-facto defMON jukebox (d3Ni$e, 2020-08-28).

Practical takeaways#

  • Hard restart is yours to build: gate off + ADHR (start from $0F00) on the line before the note, wait ~2 frames (DL column), then gate $09 + real ADSR, then waveform+gate. Testbit HR only where you need the click (drums). Compensate the 1-line trigger delay by putting HR lines on the -1 step or a line early.
  • Use iLKke's three-line kick/snare as the seed for any defMON drum kit; scale drum volume from the HR line's AD nibble.
  • Work the sequence list like an arranger: FFxxyy loops while sketching, "unfold" later; keep every pattern referenced in the list (parking them below the FF end row) or they won't be saved; clone with SHIFT+N (safe) rather than SHIFT+U (2SID mode especially).
  • ZONE-ALL (CTRL+Z CTRL+A) and the S/R repeat modifiers turn missing features (global speed change, pattern transpose) into two-keystroke recipes — and are equally good at destroying a song, so CTRL+RETURN out immediately.
  • Filter: only the high byte of a set cutoff matters; $F8 in RE is the portable "filter on, this voice" idiom; remember the $0200 8580 floor when a tune sounds different on a 6581.
  • Speed column is ticks-1; per-channel speeds let drums swing (e.g. 5-3-5-3) against straight melody lines, and everything re-aligns at each sequence break.
  • If a packed tune sounds wrong: use the latest build (old packers had real bugs), avoid sidTAB rows that jump to themselves (use ST in DL instead — ST = wait forever, the line still executes), and accept micro-differences from editor playback as timing physics.

Notable quotes (short)#

  • "I'd say that the possibility to not even have any fixed instruments at all, is what gives defMON its spiritual power." — goto80, 2018-08-01
  • "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." — frantic, 2018-02-22
  • "The limit has to be drawn somewhere, and I've chosen to draw it pretty narrowly around what's really important to have. Think of it as a design decision." — frantic, 2018-08-07
  • "In defMON, every single tune puts you in carte blanché scenario, which is good for creativity. You do music, but don't redo it." — F7sus4, 2020-09-08, on why no instrument presets means no "trademark instrument" fatigue
  • "Sometimes I wish I never would have forced 2sid support into defMON. I'd say about 95% of all bugs I have fixed … were related to that." — frantic, 2021-02-11
  • "It's like a fractal maze that drives you more mad the closer you try to get to it." — frantic on per-chip SID variance, 2020-09-23
  • "Sorry to say, but defMON will no longer be a public project. … I am receiving various accusations, and since 25 of April even some vague threats. I have definitely had enough." — frantic, 2021-04-27

Relevance to the wiki#

This is the primary first-hand record of how defMON was designed, versioned and used: it explains why the tracker has no instruments, no automated hard-restart and a -1 step — decisions every other C64 editor (goattracker, sid-wizard, cheesecutter) makes the other way — and it dates the whole arc from the 2008 goto80-only era through the 2013 Genesis Project crack, the 2014–2020 public releases, the aborted defMON II, and the wiki's move to anarkiwi's vandervecken.com. The user posts are a dense seam of transferable sid technique (HR tables, drum recipes, ringmod pairing, multispeed timers) that applies beyond defMON itself.

Pages touched#

defmon · frantic · goto80 · hard-restart · multispeed · sync · instrument-tables · adsr-envelope · sid · sid-player-routine · sid-format · orderlist · vice · lsdj · live-tracking · sid-wizard · commodore-64 · hvsc · tiny-sid-compo

source file wiki/summaries/s-chipmusic-defmon-thread.md · graph