Furnace cheat sheet

From Furnace · print · built 2026-08-31

Reference

Cheat sheet#

Effects (C64)#

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
3xxxset duty cycle, 000–FFF
4xxxset filter cutoff, 000–7FF
13xxset resonance, 00–0F
14xxfilter mode: 00 off · 01 low pass · 02 band pass · 03 low+band · 04 high pass · 05 notch (band reject) · 06 high+band · 07 all pass
15xxenvelope reset time in ticks (00, or more than the song speed, = no reset)
1Axxdisable envelope reset for this channel
1Bxyreset cutoff: x ≠ 0 on new note, y ≠ 0 now (unneeded with an absolute cutoff macro)
1Cxyreset duty cycle: x ≠ 0 on new note, y ≠ 0 now (unneeded with an absolute duty macro)
20xyset attack x / decay y
21xyset sustain x / release y
22xx / 23xxpulse-width slide up / down at speed xx (00 stops)
24xx / 25xxcutoff slide up / down at speed xx (00 stops)
11xxcoarse cutoff 00–64 — compatibility only, use 4xxx
12xxcoarse duty 00–64 — compatibility only, use 3xxx
1Exycompatibility: x = 0 attack · 1 decay · 2 sustain · 3 release (y = 0–F) · 4 ring mod · 5 sync · 6 disable channel 3 (y = 0/1)

Instrument fields (C64 tab)#

fieldrange / meaning
Waveformtriangle, saw, pulse, noise; several at once = AND mix (never with noise)
Attack · Decay · Sustain · Release0–15 each; larger = slower (sustain is a level)
Duty0–4095 (2048 = square)
Reset duty on new notereload the instrument's duty on each note — for relative duty macros
Ring Modulation · Oscillator Syncwith the previous channel as modulator
Enable filter · Initialize filterroute through the filter; set cutoff 0–2047, resonance 0–15, mode low / high / band / ch3off (combinable; low + high = notch)
Absolute Cutoff Macro · Absolute Duty Macrocutoff macro 0–2047 / duty macro 0–4095 as absolute values instead of relative ones
Don't test before new noteskip "the one-tick hard reset and test bit before a new note"

Macros#

macronotes
Volumeglobal — the chip's volume register, affects all channels
Arpeggiopitch sequence in semitones (chord-arpeggio)
Duty · Waveform · Pitchpulse width (pulse-width-modulation) · waveform (wavetable-programming) · fine pitch, per tick
Cutoff · Filter mode · Resonancethe filter, per tick (filter-programming)
Specialring mod, sync, the gate bit (0→1 starts or restarts the envelope, 1→0 releases it, otherwise nothing) and the test bit (1 mutes the channel at once and suspends ring/sync for channels using it as a source; 0 restores) (ring-modulation-and-sync)
Attack · Decay · Sustain · Releasechange the running envelope immediately; sustain can only go down while sustaining

Chip configuration#

optionmeaning
Clock ratethe SID clock
Global parameter prioritywhose macros win for global parameters (volume, filter): Left to right (channels 1→3 in order, the last to run wins) or Last used channel (the channel with the latest note-on wins)
Hard reset envelopethe ADSR used during the pre-note reset — the HR ADSR of other trackers
Envelope reset timeticks of gate-off before a note: 0 none (notes do not trigger), 1 short but may bug, 2 good

(source: s-furnace-c64-docs)

Techniques

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

The instrument's Arpeggio macro is a per-tick "pitch sequence" in semitones — the same table idea, with the waveform and duty in parallel macros (furnace; source: s-furnace-c64-docs).

Filter programming on the SID › Furnace #

furnace sets the filter from the pattern with 4xxx (cutoff 000–7FF), 13xx (resonance 00–0F), 14xx (mode: 00 off, 01 low, 02 band, 03 low+band, 04 high, 05 notch, 06 high+band, 07 all), 24xx/25xx (cutoff slide up/down at speed xx, 00 stops) and 1Bxy (reset the cutoff on the next note / now); 11xx is a discouraged coarse cutoff 00–64. Per instrument: Enable filter routes the voice, Initialize filter sets cutoff 0–2047, resonance 0–15 and the mode (low, high, band, ch3off — "selecting both 'low' and 'high' results in a bandstop (notch) filter"), and Absolute Cutoff Macro makes the cutoff macro write 0–2047 directly instead of relative steps. Because the filter is global, the chip configuration decides whose macros win: Left to right (channels 1→3, the last wins) or Last used channel (the latest note-on wins) — a third policy beside SID-Wizard's leftmost-channel rule and its "latest instrument takes over" (source: s-furnace-c64-docs).

Hard restart › Furnace #

furnace calls it envelope reset: in the chip configuration, Hard reset envelope is the ADSR "used during the short reset before a note" and Envelope reset time the number of ticks — "0 disables reset, which prevents notes from triggering. 1 is short, but may exhibit SID envelope bugs. 2 is a good value." From the pattern, 15xx sets the reset time (00, or more than the song speed, = no reset) and 1Axx disables it for the channel; per instrument, Don't test before new note "disables the one-tick hard reset and test bit before a new note" — so Furnace, like GoatTracker's $09, sets the test bit during the reset (source: s-furnace-c64-docs).

Pulse width modulation (PWM) › Furnace #

furnace: instrument Duty 0–4095 (2048 = square) and a duty macro per tick, Absolute Duty Macro to write widths directly instead of relative steps, Reset duty on new note to reload the instrument's width; from the pattern 3xxx sets the width 000–FFF, 22xx/23xx slide it up/down at speed xx (00 stops), 1Cxy resets it on the next note / now, and 12xx is a discouraged coarse setting 00–64 (source: s-furnace-c64-docs).

Ring modulation and oscillator sync › Furnace #

Instrument checkboxes Ring Modulation ("the channel's output will be multiplied with the previous channel's") and Oscillator Sync ("as the previous channel's oscillator finishes a cycle, it resets the period of the channel's oscillator"), a Special macro that switches ring, sync, the gate bit and the test bit per tick, and the compatibility effects 1E4y (ring) and 1E5y (sync). Its test-bit semantics: set = "immediately mute channel", and "if the channel is a source of ring mod and/or hard sync, those stop working until the bit is reset" — a test bit on the modulator silences the modulated voice's effect too (source: s-furnace-c64-docs).

Wavetable programming (waveform / arp tables) › Furnace #

furnace does the same with a per-tick waveform macro in the instrument (plus arpeggio and pitch macros for the note column) and, from the pattern, 10xx — 01 triangle, 02 saw, 04 pulse, 08 noise, sums for combinations (source: s-furnace-c64-docs).