Furnace tracker — C64 (SID) system and instrument documentation

author tildearrow and contributors
date doc/7-systems/c64.md as of commit 6158c37aaf (2025-03-23); doc/4-instrument/c64.md as of commit 0b0e6d5e13 (2024-09-14)
article the C64 system page (chip versions, effects, channel status, chip config) and the C64 instrument editor page (parameters, macros)
source url https://github.com/tildearrow/furnace (doc/7-systems/c64.md, doc/4-instrument/c64.md; rendered at https://tildearrow.org/furnace/doc/latest/7-systems/c64.html)
created 2026-08-30 · updated 2026-08-31

Two pages of the manual of furnace, a multi-system tracker (GPL-2.0 repository), describing how it drives the sid. Furnace is not one of this wiki's focus tools; the pages are kept as a second, independent description of the same chip behaviour — waveform AND-mixing, the envelope bug and its "envelope reset", the 6581 DC-offset digi channel — in a different vocabulary: macros instead of tables, xxx effect values instead of table bytes, "envelope reset" instead of hard restart.

Key claims#

The chip, as Furnace describes it#

  • The C64 has "a synthesizer-grade sound chip of which people took decades to master": three oscillators with four selectable waveforms, ring modulation, oscillator sync, a multi-mode filter and an ADSR envelope. Two versions: the 6581 (original) and the 8580, an "improved version with working waveform mixing and somewhat more consistent filter curves".
  • Selecting more than one waveform gives "a logical AND mix of waves"; "due to hardware flaws, the mixing is a bit weird and sounds different between the 6581 and the 8580"; noise "cannot be used with any of the other waveforms".
  • The 6581 "produces a DC output with its intensity being regulated by the global volume register", which "can be abused to produce a crude, virtual fourth 4-bit PCM channel" — Furnace's system variant Commodore 64 (SID 6581) with software PCM. "The later 8580 chip fixed this problem, making such PCM nearly inaudible"; other PCM methods exist but are not supported.
  • Ring modulation: "the channel's output will be multiplied with the previous channel's" (the datasheet's triangle-only condition is not mentioned). Oscillator sync: "as the previous channel's oscillator finishes a cycle, it resets the period of the channel's oscillator, forcing the latter to have the same base frequency. this can produce a harmonically rich sound, the timbre of which can be altered by varying the synchronized oscillator's frequency."
  • Filter: cutoff 0–2047; resonance 0–15 "amplifies or focuses on the cutoff frequency, creating a secondary peak"; modes low, high, band and ch3off, combinable — "selecting both 'low' and 'high' results in a bandstop (notch) filter". Its aside on ch3off: it "was originally planned for usage with two registers where program could read current oscillator and envelope outputs … but who wanted to sacrifice one channel out of three! so aforementioned was just done in software, and the feature was never used" (an opinion; the datasheet and PRG pages in this wiki document that use).

Envelope reset — Furnace's hard restart#

  • Chip config: Hard reset envelope — "configure the envelope parameters used during the short reset before a note"; Envelope reset time in ticks — "0 disables reset, which prevents notes from triggering. 1 is short, but may exhibit SID envelope bugs. 2 is a good value."
  • Effects: 15xx set envelope reset time — "the amount of ticks the channel turns off before a note occurs in order to reset the envelope safely"; 00, or more than the song speed, means no reset. 1Axx disables the reset for the channel.
  • Instrument: Don't test before new note — "disables the one-tick hard reset and test bit before a new note".
  • A/D/S/R macros change the running envelope immediately in the matching phase, with one hardware rule: in the sustain phase "you can only go down. for example, 9-to-8 and 8-to-8 both work, but 8-to-9 immediately mutes the channel."

Effects (C64 system page)#

effectmeaning
10xxchange wave: 00 nothing · 01 triangle · 02 saw · 03 triangle+saw · 04 pulse · 05 pulse+triangle · 06 pulse+saw · 07 pulse+triangle+saw · 08 noise
11xxcoarse cutoff 00–64 — "only exists for compatibility reasons", use 4xxx
12xxcoarse duty 00–64 — compatibility only, use 3xxx
13xxresonance 00–0F
14xxfilter mode: 00 off · 01 low pass · 02 band pass · 03 low+band · 04 high pass · 05 band reject/stop/notch · 06 high+band · 07 all pass
15xxenvelope reset time in ticks
1Axxdisable envelope reset for this channel
1Bxyreset cutoff: x ≠ 0 on new note, y ≠ 0 now ("not necessary if the instrument's cutoff macro is absolute")
1Cxyreset duty cycle, same digits (not necessary with an absolute duty macro)
1Exycompatibility: x = 0 attack, 1 decay, 2 sustain, 3 release (y = 0–F), 4 ring modulation, 5 oscillator sync, 6 disable channel 3 (y = 0/1)
20xyset attack x / decay y
21xyset sustain x / release y
22xx / 23xxpulse width slide up / down at speed xx (00 stops)
24xx / 25xxfilter cutoff slide up / down at speed xx (00 stops)
3xxxset duty cycle 000–FFF
4xxxset cutoff 000–7FF

The 10xx values are the SID waveform nybble (triangle 1, saw 2, pulse 4, noise 8, sums for combinations) without the control bits — an observation from the table, not a statement of the docs.

Instrument editor and macros (C64 instrument page)#

  • Fields: Waveform (multi-select); Attack, Decay, Sustain, Release 0–15 ("the bigger the value, the slower the attack"; sustain = the level held); Duty 0–4095; Reset duty on new note ("only useful when using relative duty macro"); Ring Modulation; Oscillator Sync; Enable filter; Initialize filter with Cutoff, Resonance and Filter mode; Absolute Cutoff Macro ("the cutoff macro will go from 0 to 2047, and it will be absolute … rather than being relative"); Absolute Duty Macro (0–4095); Don't test before new note.
  • Macros: Volume — "volume sequence is global! this means it controls the chip's volume and therefore affects all channels"; Arpeggio (pitch sequence); Duty; Waveform; Pitch (fine); Cutoff; Filter mode; Resonance; Special — ring and sync plus the gate bit (set: "key on. if previous state was 0 it triggers envelope start/restart; if previous state was 1, it does nothing"; reset: "key off. if previous state was 1 it triggers envelope release") and the test bit (set: "immediately mute channel — if the channel is a source of ring mod and/or hard sync, those stop working until the bit is reset"; reset: "unmute channel and restore ring mod/hard sync"); Attack, Decay, Sustain, Release (each takes effect at once in its own phase).
  • Chip config also has Global parameter priority for macros that touch global parameters "such as volume and filter": Left to right — "process channels from 1 to 3. the last one to run macros will take effect"; Last used channel — "process channels from oldest to newest (since last note). the one which had the latest note on will take a effect"; and a Clock rate setting. Other options are DefleMask/old-Furnace compatibility and undocumented.
  • Channel-status icons in the pattern view: silent / gate bit disabled / gate off + test on / test bit enabled / ch3off active.

Practical takeaways#

Furnace confirms, in its own words, the three facts every SID tracker builds on: combined waveforms are an AND and differ by chip; a note needs a short gate-off with a special ADSR before it (two ticks is the safe value, one may bug, zero stops notes from triggering at all); and the 6581's volume register leaks a DC level that can carry 4-bit samples. Its "last used channel wins" filter policy is a third option beside SID-Wizard's leftmost-channel rule and its "latest instrument takes over" (filter-programming). Its sustain-only-goes-down rule explains why raising the sustain register mid-note silences a voice.

Notable quotes#

"0 disables reset, which prevents notes from triggering. 1 is short, but may exhibit SID envelope bugs. 2 is a good value."

"if you modify sustain level when envelope is in sustain phase it immediately changes, although you can only go down."

Relevance#

An independent cross-check for hard-restart, adsr-envelope, sid, pulse-width-modulation and filter-programming, and the source of the furnace cheat sheet.

Pages touched#

furnace · sid · hard-restart · adsr-envelope · pulse-width-modulation · filter-programming · chord-arpeggio · ring-modulation-and-sync · chip-samples · commodore-64 · instrument-tables · sidechain-pump

source file wiki/summaries/s-furnace-c64-docs.md · graph