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
| key | function |
|---|---|
F1 | play from the playback mark (blue bar, Backspace; tracks must be aligned there — Ctrl-L resets a misaligned sequencer) |
F3 | play from the cursor — "advisable to use it" |
SHIFT+F1 / SHIFT+F2 | followplay (the stacked view scrolls with the tune; source: s-sidin14-scarzix-interview) |
Ctrl-Backspace | set 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 key | tied note (purple) |
Ctrl-T / Ctrl-R | note display absolute (JCH-style) vs transpose-relative (SDI-style) · row counters |
Ctrl-Tab / Enter (instr. table) / Alt-T | navigate sequencer↔tables · instrument descriptions · edit info strings |
CTRL+F9 / ALT+H | Hypercut 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):
| type | behaviour |
|---|---|
0x | note restart: gate off 3 frames before the next note, waveform cleared 1 frame before |
4x | soft restart: gate off 2 frames before — "usually works best (least buggy) with big (>= 8) release values" |
8x | regular 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):
| column | values |
|---|---|
| transpose | 00–5F relative semitones · 80–DF absolute · 7E stop · 7F wrap (byte B holds the wrap point) |
| waveform | 00 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).