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, 10xx01 triangle, 02 saw, 04 pulse, 08 noise, sums for combinations (source: s-furnace-c64-docs).