SID-Wizard
SID-Wizard is a music tracker that runs on the commodore-64 itself and drives the sid chip. Written by hermit (Mihaly Horvath); version 1.8 is from 2018. It borrows the GoatTracker-like concept and keys and ideas from SDI, X-SID, SID-Factory and JCH Editor, and adds a long list of features not found in other C64 trackers (source: s-sid-wizard-manual).
Features (v1.8)#
- 36 instruments (30 in the 2SID version, 26 in 3SID), 8 subtunes (2 in 2SID, 1 in 3SID), 100 patterns of 250 bytes (105 in 2SID/3SID).
- Each instrument has its own instrument-tables (waveform-arpeggio-detune, pulse width, filter) and its own hard-restart settings.
- Calculated vibrato (4 types) and calculated slides (pitch-slide-and-portamento).
- Up to 8× framespeed (multispeed, 400 Hz SID control).
- Chord table with direct note-entry mode (chord-arpeggio); keyboard tracking (note-dependent filter/pulse width); different tempos per track and FunkTempo (shuffle-funktempo); 3 simultaneous pattern effects per row; gate-off entries in instrument tables.
- Scalable player routine from "Bare" to "Extra" (sid-player-routine); export to
.SID(sid-format), executable, raw and relocatable SWP formats; sound-FX support. - 2SID (
.sws) and 3SID (.swt) versions with selectable SID2/SID3 base addresses. - MIDI-in (poly/mono, velocity) via HerMIDI, Sequential, Passport/Syntech, JMS, Datel/Siel/CLAB, NameSoft, Maplin, Moog SP; MIDI-sync output (start/stop/clock).
- Tunings: standard, Verdi (equal-tempered but A4 = 432 Hz) and just intonation (pure integer-ratio intervals, only in the key of C); NTSC and Drean machine support.
- 324 example instruments; one-step undo for pattern/orderlist/instrument; oscilloscope and pulse-width/cutoff bars; preset colour themes; SDI-, DMC- and Janko-style key layouts.
Screen layout#
| key | panel |
|---|---|
F5 | Pattern editor — 3 tracks, row = Note/Fx · Instrument/Fx · Effect · Fx-value |
F6 (Shift+F5) | orderlist in the bottom border |
F7 | Instrument panel (select with +/-) |
F8 (Shift+F7) | Menu and file operations |
C=+F5 / C=+K | Chord table |
C=+F7 / C=+F8 | Tempo-program table |
All numbers are hexadecimal. The top border shows version, player type, octave, playback time, rastertime, auto-advance, pulse-width and cutoff bars and channel-3 waveform.
Note entry (default "SW" layout, two rows like SDI): upper octave 2 3 5 6 7 9 0 over Q W E R T Y U I O P @ *; lower octave S D G H J L over Z X C V B N M , .. DMC layout uses W E T Y U O P over A S D F G H J K L :; the Janko layout is chromatic.
Cheat sheet#
Most-used keys#
| key | action |
|---|---|
F1 / F2 / F3 / F4 | play from start / from play-mark / selected patterns / stop-continue (C=+F1..F4 = same with follow-play) |
← | fast-forward 6× |
Shift+F / Shift+G | framespeed up / down |
< > (Shift+,/.) | subtune tempo up/down; [ ] second FunkTempo; C=+T toggle FunkTempo |
C=+, / C=+. | select subtune |
RETURN / Shift+RETURN | note-on / note-off; go to instrument/chord |
Shift+1..9/0 | mute/solo tracks |
C=+1..8, C= +/- | octave |
C=+Z/X/C/V | undo / cut / copy / paste; Shift+C marks end of block |
Shift+Q/W, C=+Q/W | transpose from cursor by semitone / octave |
Shift+V, Shift+P, Shift/C=+R, Shift/C=+S | vibrato, portamento, ring-mod on/off, sync on/off in the note column |
Shift+A/Z, Shift+H/J | auto-advance step, highlight step |
C=+E (orderlist) | find first empty pattern |
Shift+N (instrument) | name instrument; C=+P / C=+F toggle PW / filter reset; = negate table value |
C=+N (chord table) | toggle note-mode / number-mode |
Instrument-column effects#
| value | effect |
|---|---|
$01–$3E | select instrument |
$3F | legato / tied note (pitch only, no retrigger) |
$40–$4F | set waveform (small fx) |
$50–$5F | set sustain level (note volume) |
$60–$6F | set release time |
$70–$7F | set chord (overrides the instrument's default chord) |
Effect-column "small" effects ($xy, y = value)#
| range | effect |
|---|---|
$2x / $3x | attack / decay time of the note |
$4x…$7x | same as the instrument-column effects above |
$8x / $9x | vibrato amplitude / rate |
$Ax | main volume ($D418 low nybble) |
$Bx | filter band nybble |
$Cx | chord (arpeggio) speed |
$Dx | detune current note |
$Ex | control nybble (test / ring / sync) |
$Fx | filter resonance |
Effect-column "big" effects ($xx + value byte)#
| fx | effect | fx | effect |
|---|---|---|---|
$01 | pitch slide up | $0E | set pulse width |
$02 | pitch slide down | $0F | set filter cutoff hi-byte |
$03 | tone portamento (auto-portamento) | $10 | set main single tempo |
$04 | waveform/control register | $11 | set main FunkTempo |
$05 | attack/decay register | $12 | launch main tempo program |
$06 | sustain/release register | $13 | set track's single tempo |
$07 | select chord (overrides default) | $14 | set track's FunkTempo |
$08 | vibrato amplitude & rate | $15 | launch tempo program for track |
$09 | go to WF-ARP table position | $16 | vibrato type (00/10/20/30) |
$0A | go to pulse-width table position | $1C | shift cutoff hi-byte (permanent) |
$0B | go to filter table position | $1D | delay track by $00–$FF frames |
$0C | set chord / arpeggio speed | $1E | delay note (max = tempo − 3 frames) |
$0D | detune current note upwards | $1F | set filter-switch/resonance register ($D417) |
Orderlist values#
$01–$7F pattern · $80–$8F transpose down ($8F = −1) · $90–$9F transpose up ($90 = original) · $A0–$AF main volume · $B0–$EF single track tempo · $F0–$FD separator NOP with section id (shown as --…-D) · $FE end of tune · $FF xx jump to position xx (above $80: jump to subtune). The orderlist must not begin with $FE/$FF.
Chord table#
$00–$7D relative pitch up (semitones) · $80–$FF relative pitch down · $7E return from chord to the arp table · $7F loop the chord infinitely. Note-mode lets you set a root note outside the table and type the chord's notes as notes.
Tempo table#
$00–$7F = tempo (frames) for one pattern row; tempo programs can vary the tempo per row.
Table value schemes#
See instrument-tables for the WF-ARP-Detune, pulse-width and filter tables ($8x..$Fx = set, $00..$7F = add n times, $FE = jump).
Player types#
Normal · Medium · Light · Extra · Bare · Demo — selected in the startup menu; details and what each one drops on sid-player-routine. Custom builds via /sources/settings.cfg.
Files and add-ons#
.swmworktune,.swiinstruments,.sws2SID tune,.swt3SID tune,@SWCONFIG.PRGsaved editor settings (auto-loaded at startup; since 1.5 settings are no longer stored in the workfile).- SID-Maker (on the C64) exports Normal, Raw, Executable and
.SID(sid-format) with selectable player type and relocation address; SID-Maker-SFX adds sound-FX support, SID-Maker-SWP exports relocatable music+player, SID-Maker-SWP-FX adds the tape-slowdown effect. - SWMconvert.exe (PC) converts to/from XM and MID with some precision, between
.P00/.prgand.S00/.sid(for VICE saves), and.SWM↔.SWS. - sng2swm.exe imports goattracker
.sngworkfiles.
Tips from the manual#
- Under vice: CONTROL = Tab, RUN/STOP = Esc, C= = Control, ← = Tilde/End, £ = Insert, ↑ = PageDown (Linux).
- MIDI cartridges using
$DE00–$DFFFclash with other cartridges on the expansion port; HerMIDI avoids this. MIDI IRQs cause harmless border flashing. - After a crash, warm reset and
SYS 2061restarts the editor safely. - Since 1.8 the save dialog does not read the directory automatically — press
F1(or setSAV.AUT.DIR).
From Creating Chiptunes with SID-Wizard (2nd edition, 2014)#
witchmaster's book (co-credited to Hermit, written for 1.6) explains the manual's settings and adds reference material (source: s-witchmaster-creating-chiptunes-with-sid-wizard):
- Version history: 1.2 — NTSC support, any 1st-frame waveform value, colour themes, DMC layout,
C=+E,=negation, normal/light/medium/extra players, instant-help cheat sheet; 1.4 — sng2swm, more effects; 1.5 — 44 instruments (31 in 2SID), 6 subtunes (2 in 2SID), MIDI-in, the 2SID.swsversion, Bare player, chord note-mode, Verdi and just-intonation tunings, SDI and Janko layouts,@SWCONFIG.PRG, one-step undo, solo, sound-FX, 324 instruments; 1.6 — MIDI start/stop/reset, running status, SWM→SWS conversion. (The 1.8 manual's 36 instruments and 8 subtunes are the later limits.) - Player types (Bare/Light/Medium/Full/Extra) as a feature matrix — see sid-player-routine; rastertime ≈
$1A–$1Clines; player entry points at load address +0/+3/+6/+9/+12. - Tempo → BPM: PAL
BPM ≈ 3007.4744 / (tempo × lines per beat)(50.125 frames/s), NTSC≈ 3589.5659 / (…)(59.826 frames/s); funktempo uses the mean of the two tempos; full tables in the appendices. - Filter band values including combined modes (
$B,$D,$E,$F), cutoff ≈ 30 Hz–10 kHz, and the$80–$8Ffilter-switch override for GoatTracker imports (filter-programming); ADSR timings (adsr-envelope); absolute-note values for the Arp column ($81= C-1 …$D5= C-8) (wavetable-programming). - Worked instruments Bazz, Snare and Arpeggio (instrument-design) and a pattern tutorial (pitch-slide-and-portamento).
- Setup: transfer hardware and C64 audio-noise fixes (commodore-64), VICE configuration (vice), MIDI message table (sync), SID-Maker/SWMconvert/SIDEdit (sid-format).
- The same 2014 distribution folder holds Charts and Tables for SID-Wizard 1.6 (document version 1.0, credited to Mikael Norrgård on its conversion-table page): the value schemes, every key with its VICE equivalent, the SDI layout, the arp note chart, the ADSR timings and tempo → BPM tables (source: s-sid-wizard-charts-and-tables; see below).
Relation to goattracker: SID-Wizard keeps GoatTracker's pattern-editing concept and keys, imports .sng via sng2swm, and its $01–$03 slide/portamento effects use "the same FX-number as Goattracker's"; the two differ in multispeed (tables only vs the whole player) and in tables (per-instrument vs shared) (sources: s-witchmaster-creating-chiptunes-with-sid-wizard, s-goattracker-readme).
Early versions: 1.0 (2012) and the 1.6 charts (2014)#
1.0, as a beginner met it in August 2012 (source: s-chipmusic-c64-music-for-dummies): "brand new, released in 2012", downloaded from SourceForge as a .d64 (a "SID-Wizard-extra" build existed) or a .prg; the .prg route saves .P00 files and needs SWMconvert (Windows and Linux) to turn .P00 into .swm and SID-Maker's .S00 into .sid; the .d64 route needs c1541 to extract files. Instruments had to set HRTY to 2 by hand so the gate resets between notes (hard-restart); files could not be overwritten — "you will lose any changes you have made if you try to do this", so every version got a new name; SID-Maker was loaded separately (LOAD"SID-MAKER",8 after a hard reset), its dialog asking for SID/SEQ, the relocation address, the SID model and a filename. The tutorial's author "abandoned gt2 since i found this"; questions in the thread about saving 1.7 tunes through an SD2IEC on a C64C with a SwinSID (2016) went unanswered.
1.6 vs 1.8 — differences visible in the 1.6 charts (source: s-sid-wizard-charts-and-tables; compare the cheat sheet above from the 1.8 manual):
| item | 1.6 charts | 1.8 manual |
|---|---|---|
| jump to a WF-ARP table position | big effect $04 with a value ≥ $F0 | big effect $09 |
big effect $09 | "select vibrato-type" (a duplicate of $16) | WF-ARP table position |
big effect $0F | cutoff hi-byte shift, "added to filter frequency. Now notes don't reset it!" | set cutoff hi-byte ($1C = permanent shift in both) |
fast-forward ← | "4× the speed of normal" | 6× |
| arp-column absolute pitch range | $81–$DF = C-1 … A-8 | same ($81 = C-1 … $D5 = C-8 in the note chart) |
Keys the 1.6 charts list beyond the cheat sheet above (C64 key, VICE key in brackets; source: s-sid-wizard-charts-and-tables):
| key | action |
|---|---|
/, Shift+/, ↑, RESTORE (PageDown/PageUp) | move the cursor 4 or 8 steps |
Shift+F1 (F2), Shift+F3/STOP (F4/Esc) | play from the marks · pause/continue |
Shift+SPACE | play the selected patterns from the cursor (pattern editor) · set the play-start marker of all tracks (orderlist) · set/clear the gate-off index of a table row (instrument editor) |
C=+SPACE (orderlist) | set the play-start markers to the positions currently played |
Shift+←, C=+← | toggle follow-play · make it the default |
Shift+I · Shift+D · C=+B | instrument auto-typing with notes · dovetailing · pattern/track binding (scroll patterns together or independently) |
Shift+± | select the jamming instrument, or the pattern in the pattern window |
Shift+T/Y · Shift+K/L | select tempo program · select chord |
C=+CONTROL (Ctrl+Tab) | switch SID1/SID2 in the 2SID version |
C=+RETURN | select the patterns currently played |
A, 1, C=+DEL (Q in DMC mode) | empty note without moving the rest |
C=+DEL · C=+Shift+DEL | delete the note or the instrument+effect columns · delete the whole row |
Shift+S · Shift+W · Shift+P (instrument editor) | go to main settings · WF-ARP table · pulse table; RETURN cycles HR type, vibrato type and octave-shift sign |
C=+C / C=+X / C=+V (instrument editor) | copy / cut / paste the entire instrument |
= | negate a table value ($40 → $C0; in chord tables $04 → $FB) |
F1 · F3/↑ · CONTROL · F7/STOP (file selector) | re-read the directory · page down · switch filename/info/selector · quit |
Follow-play modes disable the pattern-editor keys "to prevent accidental editing while playing the tune". In the SDI keyboard layout the differences are: Shift+L/Shift+S load/save, F1 play from the marks, F2 set a mark, F3 stop/continue, Z play the pattern from the current line and RETURN from the top, F4 edit/synth toggle, F7/F8 octave, STOP or / switch instrument/pattern editor, Shift+F filter table, Shift+T tempo table, C=+± subtune, C=+1…3 mute, S/K/L tab between tracks, ,/. jump 8/4 lines, SPACE delete downwards, G/Shift+G gate on/off, >/< transpose, M/C=+M copy/paste, Shift+M end of selection, C=+F clear pattern from the cursor, Shift+HOME start of song, H hunt the next unused pattern, N name an instrument, ? set the speed calls (framespeed 1–8). The charts also carry a decimal/signed/hex table, the arp-column note chart, the ADSR timing table and tempo → BPM tables for PAL and NTSC — e.g. PAL tempo 05 with 5 lines per beat = 120.30 BPM, tempo 06 with 4 = 125.31, tempo 08 with 3 = 125.31; NTSC tempo 06 with 5 = 119.65 (shuffle-funktempo).
Seen from the forums (2020–2021)#
Two Lemon64 threads (sources: s-lemon64-learning-sid-sound-design, s-lemon64-sid-wizard-instrument-recommendations): a returning user picked SID-Wizard because it "reminds me of ScreamTreacker/ImpulseTracker in terms of composition"; MeneerJansen, who prefers to "do things C64" on the machine rather than in goattracker on a PC, calls 1.8 "one of the most complicated [programs] for the C64 I've ever seen. It's like a DAW" and "Very complicated but brilliantly designed" — and recommends starting from the "excellent example instruments … included in the Zip file". Export troubleshooting from the second thread: SID-Maker-2sid is only for 2SID tunes — single-SID tunes need plain SID-Maker; a persistent "SAVING ERROR" under vice 3.1 disappeared with VICE 3.5 (2021; check the disk image's free space too); the binary/sequential export produces a binary file with a sequential extension that CBM prg Studio does not accept — chapter 13 of the book covers the formats (sid-format).
Newer versions and reimplementations#
m64's tracker duet reimplements SID-Wizard 1.97's player from Hermit's 6502 sources and reads/writes .swm, .sws, .swt, .swq and .swi — so a 1.97 release with an additional .swq format exists beyond the 1.8 manual summarised here; its player semantics are described as "generously documented and WTF-licensed" (source: s-duet-readme).
Two fork lines add external sync (sync): m64's user-port sync mod of 1.7, protocol-compatible with Scannerboy's defmon sync adapter (source: s-chipmusic-defmon-thread), and sid-wizard-vessel — 1.8.7 on anarkiwi's Vessel MIDI interface (base port by anarkiwi) with MIDI tempo sync IN via NMI and live-act controls: orderlist repositioning during playback, F3/F1 pattern hold/continue, mutes (live-tracking; source: s-sid-wizard-vessel-readme).
Inside the 1.97 formats and player (m64's DUET research)#
m64's research for duet validated the 1.97 file formats byte-exactly (324/324 example .swi, 143/143 modules) and modelled the whole player.asm runtime with line references — the details live on swm-format and in the two summaries; highlights (source: s-duet-research-sidwizard):
.swm/.sws/.swt/.swqare one container; the magic's fourth byte picks the chip count, track count and header layout. The caps shrink with chips: 37/30/27/23 instruments, 100/105/105/102 patterns, 8/2/1/1 subtunes — the C64 runs out of memory, not numbering.- Every subtune always exists: the subtune keys only select; an unused subtune is three orderlists that are nothing but their
$FEEND, and trailing empty subtunes are not saved. Orderlist$00is the zero-fill after a track's end, not "pattern 0" — no key road can type one, and$FE/$FFcan only be typed where a terminator already is. - The subtune jump (
$FF $8x) is per track (SETSEQA, player.asm 2671) — the three tracks can sit in three different subtunes at once, but the editor always draws the selected subtune and never follows playback; selecting a subtune stops the transport. In the shipped corpus (102 modules) no tune ever splits its tracks. - Tick timeline: tick 0 fetches the row (and fires hard-restart for HR-timer-2 instruments), tick 1 advances pattern/orderlist one row early (seq FX apply via delay shadows), tick 2 starts the note — so a note's audible start is uniformly 2 frames after its row's tick 0, the lookahead that makes 2-frame hard restart possible; the Normal player therefore needs tempo ≥ 3.
- Per frame the channels run 3→2→1 (leftmost wins the filter), then the registers are written in a deliberate order — SR, AD, freq, PW, waveform — "keeping distance" between the ADSR and waveform writes (COMMONREGS 1007–1141).
- A quirk list for bit-exact reimplementation (detune carry jitter, sweep counters surviving note start, the WF table's missing self-jump guard, DETUNER never reset, big-FX
$17–$1Baliasing$1C, …) is in s-duet-research-sidwizard; 6502-exact algorithms in s-duet-research-sidwizard-deep. - The 1.97 sources are WTF-licensed: "Do what the frick you want with this code, but mentioning me if you use it would still be nice" (hermit).
Related#
sid · commodore-64 · goattracker · hermit · sid-wizard-vessel · instrument-tables · sid-player-routine · chord-arpeggio · hard-restart · multispeed · sync · 037-lab (exports SID-Wizard clipboard text)
Sources#
s-sid-wizard-manual · s-witchmaster-creating-chiptunes-with-sid-wizard · s-goattracker-readme · s-chipmusic-c64-music-for-dummies · s-sid-wizard-charts-and-tables · s-lemon64-learning-sid-sound-design · s-lemon64-sid-wizard-instrument-recommendations · s-sid-wizard-vessel-readme · s-chipmusic-defmon-thread · s-duet-research-sidwizard · s-duet-research-sidwizard-deep · s-duet-readme