Homeentitytool

GoatTracker

aliases GoatTracker 2, GT2, Goattracker, goattrk2
sources GoatTracker v2.72 readme (summary) · SID-Wizard 1.8 User Manual (summary) · Creating Chiptunes with SID-Wizard, Second Edition (summary) · Lemon64 threads: SID and ADSR re-triggering? (2008) / Hard restart – what's the story? (2015) · chipmusic.org — sid music hints'n'tips (2013) · uCApps MIDIbox SID — Wavetable Sounds Tutorial #1 (Thorsten Klose) · Lemon64: SID-Wizard instrument recommendations? (2021) · SIDin #2 — Lasse Öörni (Cadaver) interview (Stefano Tognon, 2002) · SIDin #1 — Iseq music composition program: the comp.sys.cbm threads and Steve Judd's Commando cover (2002) · SIDin #9 — Nata (Stephan Parth) interview (Stefano Tognon, 2006) · SIDin #9 — Tiny Sid Compo, the 256-byte entries (Stefano Tognon, 2006) · SIDin #8 — Catweasel Mk4: a PCI card with two SID sockets (Stefano Tognon, 2005) · SIDin #10 — Goattracker 2: a cover in the table-based GT2 (Stefano Tognon, 2006) · SIDin #10 — Richard Bayliss interview (Stefano Tognon, 2006) · SIDin #11 — SID Factory vs Ninjatracker (Stefano Tognon, 2007) · SIDin #13 — TSM & Freedom interview (Stefano Tognon, 2010) · SIDin #13 — JITT64 Tracker: Tognon's Java Ice Team Tracker from the user's side (2010) · SIDin #1–15 — Editorials and News digest (Stefano Tognon, 2002–2015) · The Brief History of SID — Jan Harries (SIDwave), Vandalism News #64 (2015) · The CheeseCutter Guide — the recovered site manual (Wayback) · chipmusic.org — CheeseCutter video tutorial thread (2014) · SIDin #14 — Scarzix interview (Carsten Berggreen: JCH's editor, CombatZone, the return with CheeseCutter, 2015)
created 2026-08-30 · updated 2026-08-31

GoatTracker 2 is "a tracker-like C64 music editor running on Win32 or Linux platforms" by lasse-oorni (Cadaver), GPL, that drives a reSID emulation (Dag Lem's, with Antti Lankila's distortion model) or real HardSID / CatWeasel hardware. Version 2 replaced v1's arpeggio command with uniform step-programming tables for waveform/arpeggio, pulse and filter, plus a speed table — "likely much more complex to learn & master than v1.xx"; the readme assumes you know trackers, hex and the sid (source: s-goattracker-readme). hermit names it first among the editors sid-wizard was modelled on ("Goattracker-like pattern-editing concept and keyboard control to ease migration") and ships sng2swm to import its .sng files (sources: s-sid-wizard-manual, s-witchmaster-creating-chiptunes-with-sid-wizard).

Model#

  • 32 subtunes; each channel has its own orderlist (pattern numbers, transpose +0..14/-1..15, repeat R1–R16, RST restart mark; max 254 entries; transpose must precede repeat, and a pattern must precede RST).
  • 208 single-channel patterns of up to 128 rows; a row is note+octave · instrument $01–$3F · command $0–$F · databyte. Highest note G#7. ... rest, --- key off, +++ key on; the gate actually written is the key mask AND the wavetable's gate bit.
  • 63 instruments of 9 parameters, pointing into four shared tables (instrument-tables).
  • Emulated SID model 6581 or 8580 (SHIFT+F8, -E); speed multiplier for multispeed (SHIFT+F5/F6, -S); Protracker two-row or DMC one-row note entry (-K).

Cheat sheet#

Keys#

keyaction
F1 / F2 / F3 / F4play from start / from position / one pattern / stop (SHIFT+F1–F3 with follow play)
F5 / F6 / F7 / F8pattern editor / song (orderlist) editor / instrument & table editor / songname
F9 / F10 / F11 / F12pack & relocate & save PRG/BIN/SID / load / save .SNG or .INS / online help
SHIFT+F4mute current channel
SHIFT+F7edit the hard-restart ADSR parameter
SHIFT+F8switch 6581 / 8580
TABcycle editing modes
SPACEjam / edit mode (pattern); play test note (instrument/table)
RETURNinsert key-off; enter the table or instrument under the cursor
SHIFT+RETURNinsert key-on; convert an old-style portamento/vibrato/funktempo value into a speedtable entry
BACKSPACEinsert rest
- + / / * / < > / backquoteinstrument / octave / pattern (subtune in song mode) / channel or table
SHIFT+Q/A, SHIFT+W/Stranspose halfstep / octave (in tables: portamento speed; pulse/filter speed ×2 ÷2)
SHIFT+O/Pshrink / expand pattern (÷2 / ×2)
SHIFT+J/Kjoin with next pattern / split at cursor
SHIFT+X/C/V, SHIFT+E/Rcut/copy/paste; copy/paste commands only
SHIFT+Lmark whole pattern/orderlist; in tables: convert limit-based step to time-based
SHIFT+Hprecalculate a "hifi" note-independent portamento/vibrato speedtable entry
SHIFT+Ninstrument name; in tables: negate speed / relative note
SHIFT+O (table) / SHIFT+R (table) / SHIFT+Uoptimise table / absolute↔relative note / unlock table scrolling
SHIFT+INS (table)insert rows without moving pointers to row 1
SHIFT+DEL (instrument)delete instrument and its table data
SHIFT+ESC / ESCoptimise or clear music data / exit

Note entry (Protracker mode): lower octave Z X C V B N M , . (sharps S D G H K L), upper Q W E R T Y U I O P (sharps 2 3 5 6 7 9 0); octave with / and *.

Pattern commands#

cmdeffect
0XYnothing (stops a running vibrato/portamento)
1XY / 2XYportamento up / down; XY = speedtable index of a 16-bit speed
3XYtone portamento to the note; 300 = tie note (instant)
4XYvibrato; speedtable index (left = speed, right = depth)
5XY / 6XYset attack/decay / sustain/release register
7XYset waveform register (ineffective while the wavetable changes waveforms)
8XY / 9XY / AXYset wave / pulse / filter table pointer (00 stops)
BXYfilter control: X resonance, Y channel bitmask (B00 = filter off)
CXYfilter cutoff
DXYmaster volume Y (X = 0); otherwise XY is a timing mark
EXYfunktempo from speedtable (alternates two tempos row by row)
FXYtempo $03–$7F all channels, $83–$FF this channel, 00/01 recall funktempo

No effect memory: a 00 databyte never means "repeat". One-shot commands 5F leave a running 14 command or instrument vibrato intact.

Instrument parameters#

parametermeaning
Attack/Decay, Sustain/Release0 fastest / F slowest; sustain 0 silent … F loudest. All zero = "just a very short click"
Wavetable / Pulsetable / Filtertable posstart rows (00 stops wave execution; 00 leaves pulse/filter untouched)
Vibrato param, Vibrato delayspeedtable index; ticks before it starts (00 = off)
HR/Gate timerticks before the next note for note fetch, gate-off and hard-restart; ≤ tempo−1; $80 disables HR, $40 disables gate-off
1stFrame Wavewaveform on the note's first frame, "usually $09 (gate + testbit)"; $00/$FE/$FF = keep waveform and leave gate / gate off / gate on

Instrument legato: timer bit $40 + 1stFrame $00. Examples from the readme: 09/00 full volume then fade; 00/8A instant to sustain 8; CC/AF slow swell.

Tables#

Wavetable — left: 00 keep waveform · 01–0F delay 1–15 frames · 10–DF waveform/control · E0–EF inaudible values $00–$0F (E9 = test + gate) · F0–FE run pattern command 0E with the right byte (not 0, 8, E) · FF xx jump to xx (00 = stop). Right: 00–5F semitones up · 60–7F semitones down · 80 keep frequency · 81–DF absolute C#0B-7. Never put a delay or "no change" in an instrument's first row; never jump onto a jump row.

Pulsetable01–7F xx modulate for that many ticks at signed speed xx · 8X xx set width $Xxx · FF xx jump. Example sweep: 80 10, 20 40, 40 E0, 40 20, FF 03.

Filtertable00 xx set cutoff · 01–7F xx modulate · 80–F0 xx set passband (90 low, A0 band, C0 high) + resonance/channel mask · FF xx jump. A set-parameters row directly followed by a set-cutoff row runs in one frame.

Speedtable — shared by vibrato (speed depth), portamento (16-bit step) and funktempo (tempoA tempoB); high bit in the left byte = realtime note-independent calculation, right byte = divisor. Examples: vibrato 03 40 (old $34), 05 04 "slow shallow vibrato, suitable for bass notes"; portamento 00 20 (old $08), 4F FF a "SEUCK-like space effect"; funktempo 09 06 (old $96), 24 18 for 4×.

Orderlist and song keys#

< > subtune · - + transpose down/up entry · SHIFT+R repeat · SPACE/BACKSPACE start/end position for F2 · SHIFT+1/2/3 swap channel orderlists.

Playback: what happens on which tick#

With tempo 6 and gate-off timer 2: tick 0 initialises new notes (silent), advances the orderlist, runs pulse (unless the orderlist advanced), wavetable and one-shot commands; tick 1 the note sounds; tick 4 fetches the next note and does gate-off and hard restart "2 ticks before first frame" (no pulse that tick); the filter table runs every tick; "Wavetable is never skipped, so arpeggios/drumsounds should always play OK". Pulse skipping (-O0) and tick-0 realtime-command skipping (-R0) can be disabled for tempo-3 tunes at a rastertime cost.

Hard restart#

Global HR ADSR (-A, SHIFT+F7), default 0F00: "0000 is probably too hard to be useful, except perhaps with gateoff timer value 1. 0F00 (default) is a lot softer, and 0F01 adds also a little bit of release to the gateoff phase for even softer sound. 000F makes the note start very pronounced." Attack F chooses an alternative player that writes the waveform before ADSR (more reliable with releases 0–1). If a packed tune ADSR-bugs with unbuffered writes: give the instrument a nonzero pulse start, nudge 1stFrame from $09 to $0B, use buffered writes, or attack F. Details on hard-restart.

Tips from the readme#

  • Fewer command changes = smaller packed patterns; instrument vibrato instead of 4XY saves more.
  • Stop an unused pulse program with 80 00 / FF 00 or with 900 — otherwise it wastes rastertime under a sawtooth.
  • Tempo 2: funktempo speedtable 02 02, gate-off timer 1 in every instrument, pulse skipping off.
  • Enter pulse/filter sweeps as limit-based steps (84 00, C0 10, 40 10) and convert with SHIFT+L.
  • Multispeed: multiply tempos and gate-off timers; vibrato speed ×, depth ÷; prepend E9 00 rows if attack 0 mutes the first wavetable row (multispeed).
  • reSID "is in some cases quite far from the output of a real SID. Especially if filters are in use" — test on hardware.

Tips from elsewhere#

  • A 2006 user's settings for cross-composing: nata answered the "it does not work on a real C64" objection with "there is hardly any difference. You just have to use 8580 emulation and reSID interpolation turned on", named Hein, Jammer and Randall as GoatTracker users, credited Cadaver with implementing features he requested, and called his Stargate (GoatTracker 2.0 beta) "THE FIRST song that has been released with the improved GT system"; C64-native editors (Voicetracker, DMC, JCH) had been "simply too hard"; an MMC64 card carried the results to the real machine (source: s-sidin09-nata-interview).
  • GoatTracker as a sketchpad for hand-coded players: Tognon found the two instruments of his 256-byte Random Ninja in "a little Goattracker test tune" and wrote them in wavetable notation in the source — drum $81 C8 / $41 A8 / $40 00, lead $41 00 / $21 00 — before coding them as a tick script (source: s-sidin09-tiny-sid-256b). In 2005 GoatTracker "support MK3 card" and detected a catweasel Mk4 (source: s-sidin08-catweasel-mk4).

Packer and playroutine options#

F9 packs and relocates (PRG/BIN/SID; start and 2-byte zeropage address), removing unused patterns, instruments, table rows and player code; init with LDA #subtune / JSR start, play with JSR start+3. Options: buffered SID writes, sound-effect engine (start+6), volume routine, author info with timing marks, zeropage ghost registers, disable optimisations — see sid-player-routine. Utilities: INS2SND2, SNGSPLI2, MOD2SNG, BETACONV. Files: .SNG songs, .INS instruments.

Version notes that change values#

v2.18 wavetable left-side values ($E0–$EF for inaudible waveforms); v2.2 speedtable; v2.4 pulse speeds doubled; v2.59 timer bits $80/$40; v2.62 realtime note-independent speeds; v2.68 SID write order changed for badlines (attack 0 & release 1 may bug → attack F) (source: s-goattracker-readme).

GoatTracker 1 in 2002, in Cadaver's words#

The sidin #2 interview catches the editor before version 2's tables: Öörni thought GoatTracker "would be the ultimate for my personal use, because it was fast & easy to compose on", but its music "takes too much memory (because of the patterns, they're like in Amiga/PC tracker programs)", which sent him to write ninjatracker; the one feature he saw missing was "step-programming for sounds, that would add versatility at the cost of easiness" — what the v2 wave, pulse and filter tables above added (source: s-sidin02-cadaver-interview). In the June 2002 comp.sys.cbm argument over iseq, GoatTracker and OdinTracker were already the tools the tracker camp named as "much better" (source: s-sidin01-iseq).

GT2 in 2006–2007, seen from SIDin#

  • State around v2.35 (Tognon, July 2006): Linux users built it themselves (make in src after compiling the BCE library); playback had become realtime ("with GT in Linux there was a delay too high and you cannot follow a pattern being played. In GT2 all is in realtime"); the mouse worked; the tables were "very powerful" and the documentation plus the F12 help "describe … all the features". In 2.35 an instrument could not change ADSR from the wavetable; "in next version the function was implemented letting a pattern command to be executed from wavetable" (the F0–FE entries above). His wishlist: play from the current start position without the orderlist Rxx repeat desynchronising the voices ("don't use the Rxx command or … only when the tune is finished"), a colour per instrument in the pattern editor, HardSID MK4 output (only MK3 was supported; he exported .sid files to hear the chip), a confirmation before saving over a file (F11 pressed for F10), and undo. His cover of Haddaway's What is Love was the test piece (source: s-sidin10-goattracker-2).
  • A DMC user's verdict (richard-bayliss, 2006): he composes in GoatTracker "occasionally, but not all the time … don't feel comfortable with the sounds that are used in this program. It does not beat the traditional real C64 old/new SID chip"; it "lacks the real C64 SID environment" and DMC V5's sector editor for sweeping filtered sounds — "It is not a bad composer though" (source: s-sidin10-bayliss-interview).
  • Sibling editor: lasse-oorni's native ninjatracker (V2 in February 2007) is the low-rastertime counterpart for his games; a converter turned GoatTracker songs into Ninjatracker format so only the instruments had to be redone, and its default grey palette was chosen to look like GoatTracker (source: s-sidin11-sid-factory-vs-ninjatracker).

Why two 2000s composers chose it (SIDin #13)#

  • tsm moved from CyberTracker — FastTracker-like, but with a beta packer that made songs "too big and used too much rastertime" and sometimes failed — to GoatTracker in 2006 for a game tune: "it has mouse support and an interface very similar to that of FastTracker II. It is thought in a very rational way"; his one complaint is that it is a cross-tool. freedom left Odin Tracker over its filter handling and rastertime: GoatTracker "is easy, it is powerful, very efficient and it comes with a good documentation". TSM's Amiga-to-C64 path for Pushover: MED → MOD, adjustments, import into GoatTracker, then instruments and corrections by hand (source: s-sidin13-tsm-freedom-interview).
  • jitt64 (2010) added an import for GoatTracker 2 instruments (source: s-sidin13-jitt64-tracker).

Seen from the neighbouring editors#

  • What its arrival meant: SIDwave's memoir puts it in the emulator line — PlaySID (1991) → SIDPLAY → GoatTracker "somewhere in 2002" — and credits it with creating "a new kind of composer", naming Linus and Jammer: people who compose C64 music without a C64 in front of them (source: s-recollection-brief-history-of-sid).
  • Against cheesecutter, from CheeseCutter's own author: the choice is "mostly a matter of taste … The player is more rastertime-heavy but I chose features/comfort over speed" — i.e. GoatTracker's playroutine is the cheaper one on rastertime. CheeseCutter's 2-series is described as "pretty close to top of the line SID music editors such as GoatTracker 2 and Sid Duzz' It", its gate-off/gate-on note entry "works mostly like in GT2", and its credits name Cadaver's GoatTracker among the programs it learned from (sid-player-routine; source: s-cheesecutter-guide). A user's version of the same ranking, 2014: "CheeseCutter is a great editor on par with Goat Tracker and Sid Duzz It" (source: s-chipmusic-cheesecutter-tutorial-thread).
  • What it does not offer: scarzix, returning to SID composing in 2013, tried it and moved on — "none of them had that stacked trackview and overview as I had in JCH editor" (jch-editor; source: s-sidin14-scarzix-interview).

Release history (from the SIDin news, 2002–2010)#

Dated from the News sections of sidin (source: s-sidin-news-digest); the value changes listed above under Version notes fall on these dates.

  • 1.33 (September 2002): "for cross develop", multispeed since 1.24, the 12-rasterline limit dropped from 1.3, Linux via SDL. 1.4b Final and a stereo build (gstereo.zip), 2003-01-09: "a programmable (1 or 2 frame) hard restart", step-programmable filter, a NinjaTracker converter. 1.4c 2003-09-20: the wavetable also runs on the hard-restart frame; 1.4e (December 2003) reSID 0.15; 1.4f (January 2004) funktempo.
  • 1.5, 2004-01-25: "Playroutine rewritten. Uses testbit hard restart from now on for much sharper sounds", the HR ADSR configurable (before: AD only), master fader 7F0–7FF, timing mark 7EF. 1.53, May 2005, was the last 1.x; Raf's HardSID build of 1.53 stereo followed in November 2006.
  • 2.0, 2005-06-23: breaks the 1.x file format — "more commands and uniform step programming tables for waveform/arpeggio, pulse effects, and filter effects", 63 instruments; 2.1 (2005-07-30) 16× maximum speed; 2.18 (November 2005) the $01–$0F / $E0–$EF wavetable scheme; 2.2 (2005-12-11) the speedtable and the 4-table format.
  • 2.29beta (2006): the assembler-based relocator with selectable player features; 2.4 (2006) pattern commands from the wavetable and the GTS4 format; 2.47 an optional random delay on reSID writes "to make potential ADSR-bugging on C64 audible"; 2.57 (2006–07) the alternative hard-restart routine for attack F; 2.59 (by 2007-02) GTS5/GTI5 and the $80/$40 timer bits.
  • 2.62 (2007–08) note-independent portamento/vibrato; 2.66beta–2.67 "Initial cycle-exact HardSID support (Win32 only)"; a stereo 2.59 (2007-04-12). Moved to SourceForge by 2010; 2.68: "SID register write order tweaked to resemble JCH NewPlayer 21" and Antti Lankila's reSID-fp "with distortion & nonlinearity" (/I 2–3); 2.69: reSID-fp filter parameters in the config file. A "Goat Tracker 2SID Mono" hack of 2.70 by Raf existed by 2015.
  • Compo: c64.sk's Goat Tracker 2 Music Compo (July 2005) "for celebrating the new editor"; the entries' sources were to ship as examples with the tracker.

lasse-oorni · sid · sid-wizard · instrument-tables · hard-restart · wavetable-programming · pulse-width-modulation · filter-programming · sid-player-routine · vice · siddump · furnace

Sources#

s-goattracker-readme · s-sid-wizard-manual · s-witchmaster-creating-chiptunes-with-sid-wizard · s-lemon64-hard-restart-threads · s-chipmusic-sid-music-hints-n-tips · s-ucapps-wavetable-sounds-tutorial-1 · s-lemon64-sid-wizard-instrument-recommendations · s-sidin02-cadaver-interview · s-sidin01-iseq · s-sidin09-nata-interview · s-sidin09-tiny-sid-256b · s-sidin08-catweasel-mk4 · s-sidin10-goattracker-2 · s-sidin10-bayliss-interview · s-sidin11-sid-factory-vs-ninjatracker · s-sidin13-tsm-freedom-interview · s-sidin13-jitt64-tracker · s-sidin-news-digest · s-recollection-brief-history-of-sid · s-cheesecutter-guide · s-chipmusic-cheesecutter-tutorial-thread · s-sidin14-scarzix-interview

source file wiki/entities/goattracker.md · graph