CheeseCutter cheat sheet

From CheeseCutter · print · built 2026-08-31

Reference

Cheat sheet#

From the recovered site Guide (source: s-cheesecutter-guide, all rows, except where noted).

Keys

keyfunction
F1play from the playback mark (blue bar, Backspace; tracks must be aligned there — Ctrl-L resets a misaligned sequencer)
F3play from the cursor — "advisable to use it"
SHIFT+F1 / SHIFT+F2followplay (the stacked view scrolls with the tune; source: s-sidin14-scarzix-interview)
Ctrl-Backspaceset the wrap point (purple bar) — where playback returns at song end
Keypad +/-select the active instrument (auto-inserted with notes; ; toggles that)
1 / ! or a (note column)gate off / gate on ("works mostly like in GT2")
shifted note keytied note (purple)
Ctrl-T / Ctrl-Rnote display absolute (JCH-style) vs transpose-relative (SDI-style) · row counters
Ctrl-Tab / Enter (instr. table) / Alt-Tnavigate sequencer↔tables · instrument descriptions · edit info strings
CTRL+F9 / ALT+HHypercut only: oscilloscope vs SID register view · hide quick-help (source: s-cheesecutter-repo-and-releases)

Sequence command column: 01–3F command-table entry · 40–5F pulse pointer · 60–7F filter pointer · 80–9F chord · A0–DF set A/D/S/R nibble for the note · E0–EF global volume · F0–FF song speed (0/1 = swing tempo from chord program 0).

Command table (cmd + 2 parameters; row 0's value bytes = the hard-restart ADSR, default 0F 00): 0/1 slide up/down · 2 vibrato (JCH 20.G4-style delta; "try 2-00 32") · 3 16-bit detune · 4 set ADSR · 5 lowfi vibrato · 6 set waveform · 7 portamento (set it before the tied notes) · 8 stop slide/portamento.

Instrument (bytes A–H): ADSR · restart nibble + wave delay — 0x note restart, 4x soft (best with release ≥ 8), 8x hard restart, Ax "Laxity restart" (AD untouched) · HR waveform (0 or 8) · filter program · pulse program · (unused) · wave pointer.

Tables: wave — transpose 00–5F relative / 80–DF absolute / 7E stop / 7F wrap; waveform 00 keep, 01–0F wave-delay override, E0–EF = $00–$0F. Pulse — duration (bit 7 = direction), add, init (FF keep), jump (00 next, 7F stop). Filter — byte A ≥ $80 = init row (type, resonance+voice mask, cutoff); sweeps are two's-complement adds at 10-bit accuracy ("4 times as fine as those on JCH players"). Chord — 00–3F up, 40–7F down (7F = −1), 80–FF wrap; indexed via the chord index column.

Workflow tips: keep sequence 00 empty (reserved dummy); build parts as subtunes, combine at the end; a subtune of all-A000 voices is skipped by the packer.

Techniques

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

An indexed chord table, activated per note with 80–9F in the sequence's command column (the value points to an index that holds each chord program's start): entries 00–3F = semitones up ("the familiar major chord would be 0-4-7"), 40–7F = semitones down (7F = −1, 7E = −2 — the Guide's SID cheat sheet includes a full up/down transpose table), 80–FF = wrap. Chords are read in tandem with the wave table, so the wave-delay value also paces the chord; they work over any wave program except absolute notes (80–DF). Chord program 0 is reserved as the swing-tempo program (shuffle-funktempo) (cheesecutter; source: s-cheesecutter-guide).

Detune › CheeseCutter #

Detune is command 3 of the command table (the descendant of JCH's "Super Table"), and it is 16-bit — two parameter bytes, so the offset is a full frequency value rather than a low-byte nudge. Being a command rather than a table column, it can be attached to a single note or left running (source: s-cheesecutter-guide).

Filter programming on the SID › CheeseCutter #

"All filter settings can only be controlled from the filter table" — there are no filter commands, only the per-note filter-pointer range 60–7F in the sequence command column (cheesecutter). A table row with byte A ≥ $80 is a filter init: type, resonance + voice bitmask, initial cutoff (90 F1 10 7F = low-pass $10, resonance $F on voice 1, cutoff $10, stop; C0 07 FF 04 = type $40, all voices, keep the cutoff, jump to row 4). Sweep rows are (duration, add) pairs where the add is two's-complement ("add value of FF actually subtracts by one"), and the sweeps have 10-bit accuracy — "4 times as fine as those on JCH players". An instrument's filter byte 00 means the voice keeps playing whatever filter program another instrument set — the shared-filter idiom again (source: s-cheesecutter-guide).

Hard restart › CheeseCutter #

The restart is a per-instrument type nibble (byte C's high nibble, "works mostly as in NP21.G5"), a menu of four flavours (cheesecutter; source: s-cheesecutter-guide):

typebehaviour
0xnote restart: gate off 3 frames before the next note, waveform cleared 1 frame before
4xsoft restart: gate off 2 frames before — "usually works best (least buggy) with big (>= 8) release values"
8xregular hard restart: gate off + HR ADSR 2 frames before; instrument byte D goes to the waveform register 1 frame before
Ax"Laxity restart": like 8x but "the AD part of the volume envelope is not touched"

"Restart types 0x and 8x are the ones to use for most of the time." The HR ADSR value lives in the Command Table's first row (default 0F 00 — the GoatTracker default again); byte D (the HR waveform) is "usually values 0 & 8", the gate bit added automatically.

Multispeed (framespeed) › CheeseCutter #

CheeseCutter 2 supports multispeed, with the guide's own caveat that it "doesn't work well past 4x" (source: s-cheesecutter-guide) — the practical ceiling for an editor whose player is written for "features/comfort over speed". The 2024–25 arch0N fork lists a multispeed buffer overrun among its fixes (credited to Isildur), so tunes written above 1× in older builds are worth re-checking there (source: s-cheesecutter-repo-and-releases).

Pitch slides and tone portamento › CheeseCutter #

Slides live in the command table, not in the note column: entry 0 slides up, 1 slides down, 7 is tone portamento and 8 stops either. Two rules matter — portamento must be activated before the target notes and "works only on tied notes", and it resets an ongoing slide. The guide's known-quirks list adds that a slide or vibrato placed on a tied-note row is not executed at all (source: s-cheesecutter-guide).

Pulse width modulation (PWM) › CheeseCutter #

Four-byte pulse-table rows in the JCH mould ("works like byte C/B/A/D in JCH's players"): duration with the sweep direction in bit 7 (00–7F up, 80–FF down; the Guide's cheat sheet tabulates durations in frames and ms — $10 = 16 frames = 320 ms), add value, init value (FF = keep the previous width), jump (00 = next row, 7F = stop — implemented as a jump to row 0's 00 00 FF 7F self-wrap). Change the running note's pulse program with 40–5F in the sequence command column (cheesecutter; source: s-cheesecutter-guide).

Ring modulation and oscillator sync › CheeseCutter #

The same two nibbles, read off the editor's own SID cheat sheet: the waveform high nybble (with LOCK flagged on $9$F, the noise combinations that silence the generator until a test bit) and the gate / sync / ring / test low nybble, entered in the wave program. Its note beside them is the one that decides whether a sound survives the wrong machine: "Waveforms $3, $6 and $7 are audible only on new SID (8580)" — the combined waveforms, not the ring and sync bits, are what varies between chips (source: s-cheesecutter-guide; sid).

Shuffle, swing and FunkTempo › CheeseCutter #

Swing hides in the chord table: chord program 0 doubles as the swing-tempo program (a list of tick lengths), enabled by setting the song speed to 0 or 1 — from the editor or with sequence command F0/F1 (cheesecutter). Caveat from the site's own bug list: "Changing between swing tempo and regular tempo mid-song can mess the timing" (source: s-cheesecutter-guide).

Vibrato and delayed vibrato › CheeseCutter #

Vibrato is a command-table entry, not an instrument setting: in the command table (JCH called it "the Super Table") 2 is vibrato — "the usual delta vibrato as found in JCH's players from 20.G4 upwards; try $21 $05" — and 5 is a second vibrato taking speed and depth. One player quirk to know: a slide or vibrato on a tied-note row is not executed, and a portamento resets an ongoing slide (source: s-cheesecutter-guide; pitch-slide-and-portamento).

Wavetable programming (waveform / arp tables) › CheeseCutter #

The wave table is two columns, transpose and waveform, read one row per frame (source: s-cheesecutter-guide):

columnvalues
transpose00–5F relative semitones · 80–DF absolute · 7E stop · 7F wrap (byte B holds the wrap point)
waveform00 keep · 01–0F override the wave delay for the previous row · 10–DF SID waveform/control byte · E0–EF the inaudible values $00–$0F

The 01–0F delay applying backwards to the row above is the unusual part — it lets one row hold for several frames without a second table entry. Pulse, filter and chord live in separate tables, each with its own jump/stop convention, and chord program 0 doubles as the swing-tempo program when song speed is 0/1 (shuffle-funktempo).