Furnace cheat sheet
Reference
Cheat sheet#
Effects (C64)#
| effect | meaning |
|---|---|
10xx | change wave: 00 nothing · 01 triangle · 02 saw · 03 triangle+saw · 04 pulse · 05 pulse+triangle · 06 pulse+saw · 07 pulse+triangle+saw · 08 noise |
3xxx | set duty cycle, 000–FFF |
4xxx | set filter cutoff, 000–7FF |
13xx | set resonance, 00–0F |
14xx | filter 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 |
15xx | envelope reset time in ticks (00, or more than the song speed, = no reset) |
1Axx | disable envelope reset for this channel |
1Bxy | reset cutoff: x ≠ 0 on new note, y ≠ 0 now (unneeded with an absolute cutoff macro) |
1Cxy | reset duty cycle: x ≠ 0 on new note, y ≠ 0 now (unneeded with an absolute duty macro) |
20xy | set attack x / decay y |
21xy | set sustain x / release y |
22xx / 23xx | pulse-width slide up / down at speed xx (00 stops) |
24xx / 25xx | cutoff slide up / down at speed xx (00 stops) |
11xx | coarse cutoff 00–64 — compatibility only, use 4xxx |
12xx | coarse duty 00–64 — compatibility only, use 3xxx |
1Exy | compatibility: 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)#
| field | range / meaning |
|---|---|
| Waveform | triangle, saw, pulse, noise; several at once = AND mix (never with noise) |
| Attack · Decay · Sustain · Release | 0–15 each; larger = slower (sustain is a level) |
| Duty | 0–4095 (2048 = square) |
| Reset duty on new note | reload the instrument's duty on each note — for relative duty macros |
| Ring Modulation · Oscillator Sync | with the previous channel as modulator |
| Enable filter · Initialize filter | route through the filter; set cutoff 0–2047, resonance 0–15, mode low / high / band / ch3off (combinable; low + high = notch) |
| Absolute Cutoff Macro · Absolute Duty Macro | cutoff macro 0–2047 / duty macro 0–4095 as absolute values instead of relative ones |
| Don't test before new note | skip "the one-tick hard reset and test bit before a new note" |
Macros#
| macro | notes |
|---|---|
| Volume | global — the chip's volume register, affects all channels |
| Arpeggio | pitch sequence in semitones (chord-arpeggio) |
| Duty · Waveform · Pitch | pulse width (pulse-width-modulation) · waveform (wavetable-programming) · fine pitch, per tick |
| Cutoff · Filter mode · Resonance | the filter, per tick (filter-programming) |
| Special | ring 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 · Release | change the running envelope immediately; sustain can only go down while sustaining |
Chip configuration#
| option | meaning |
|---|---|
| Clock rate | the SID clock |
| Global parameter priority | whose 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 envelope | the ADSR used during the pre-note reset — the HR ADSR of other trackers |
| Envelope reset time | ticks 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).