Making Commodore 64 SID music with Goattracker

Commodore 64 music is really fun, and I think composing is a good way to tell others what you feel inside. The SID chip can produce really expressive sounds that are still interesting even today.

This article covers the basics of Commodore 64 tracking. Two examples are offered, including a cover of the famous Castle Master tune I did some years ago. You can download the .sng file of the song here. Goattracker required to listen to it (download). Please be sure to set the SID type to 8580. Just click on “6581” on the upper blue bar if needed, it will turn into 8580. Also, be sure to set the speed mode to “2x”. Otherwise the song will sound too slow.

To set speed mode to “2x”, just click on the 1 in the “1x” label that you see the first time you start Goattracker: it will turn into “2x”. Then, close and re-open Goattracker.

The SID file is also available.

I love the real hardware, but I think that using a cross-platform tool such as Goattracker is the easiest way of doing Commodore 64 music. It has some disadvantages, as SID emulation is not perfect, but it is the most used tool among SID musicians. Still, you can fine-tune your song on the real Commodore 64 by using a special utility, and of course you can listen to your songs on real hardware as much as you want.

Goattracker is a simple PC program that you can download here. It is a good tool and it comes with an excellent documentation.

Goattracker is a music tracker. Each tune is made up of tracks. A track is a sequence of notes played on a single channel. Since the SID has three channels, there are no more than three tracks.

Each track has a fixed lenght. That is, a maximum number of notes you can enter on it. Each entry on a track may be empty or may contain a note.

Goattracker window on start-up.


Tracks scroll vertically. There’s a fixed line on the screen (usually made of reverse or colored characters). On Goattracker, you see this line as green characters on the tracks.

While the tracks are scrolling, for a fraction of seconds you’ll notice that some notes become green. Those are the notes that are being played at the moment. So, if the ideal fixed line encounters an empty entry, it plays nothing (or keeps playing the previous sound), if it encounters a note, it plays it.

To realize better what I am talking about, you may do the following. Start Goattracker, by double-clicking the “Goat icon”. Be sure that 1x mode is active (if you are in “2x” mode, just click on the “2” in the “2x” label and you will go back in 1x mode. Close and re-open Goattracker.


Then press “f10” to load a song. Browse on the folder “examples” and load the file “everlasting.sng”. To load the file, select it with cursor controls and hit enter.

To start the song, press SHIFT + F1. You can stop the music at any time by pressing F4. SHIFT+F1 will make it start again.

Listen to the song and please look very carefully at what is happening on the screen. The song is slow and that helps to understand things better.

You’ll see that tracks are scrolling upperwards, and the notes being played are highlighted in green. As we said, we can imagine a fixed horizontal line that is being hit by notes. As long as a note hits that line, it is played.

As we have three channels, we have three tracks.

At the very beginning, the first track on the left plays bass sounds and drums. Then, another track appears playing arpeggios. Arpeggios or arps are ringtone-like sounds used as one channel chords. Finally, the track on the right appears. It is used to play the main melody and other things.

Be sure to have a look at the upper right corner of the Goattracker window. The orderlist is there. As you can see, there are three numbers always highlighted in red. Each red coloumn is the pattern being played. A pattern is made up of three tracks (including empty tracks, like those at the beginning of the song).

The orderlist of Goattracker.


If you look at the top left corner of the window, there are track numbers. At the very beginning of the song, we have a pattern made up of three tracks: track 0, which holds the bass line, and track d, repeated twice, which is an empty track. Those tracks are empty because the musician only wants basses and drums to be played at the start of the song.

So, the first pattern is made up of: track 0 for channel 1, track d for channel 2, and track d for channel 3 also.

Editing the orderlist is just a matter of entering the tracks that made up a pattern, for each coloumn. The song starts from the first pattern, it plays the tracks of it, then starts playing the second pattern and so on.

Please note that hex numbers are used (base 16 numbers). Decimal numbers are only used for track entries numbering (the numbers to the left of each track). When using hex numbers, we may think we have eight fingers on each hand. So, we count by using sixteen digits instead of ten. So, the digits from 0 to 9 are not enough, and six more digits are added. Instead of inventing other numeric symbols, the first six alphabet letters are used. So, hex digits are: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C,D, E, F.

In hex, F + 1 equals 10. This is not 10 decimal of course, it is 10 decimal PLUS 6, as we have added six more digits. So, 10 hex equals to 16 decimal.

So, while in decimal mode we have numbers made up of tens and units added together, in hex mode we have numbers made up of “sixteenths” and units added together. A decimal number like 45 is made up of 4 tens and 5 units. Likewise, a hex number like 3A is made up of 3 sixteenths and A units. A equals 10 decimal units (it’s the digit after 9), so 3A hex equals to 3 * 16 + 10 = 58 decimal.

You can use a scientific calculator to convert from decimal to hex and viceversa at the beginning, but you will soon realize that there is not much need to think in decimal. Hex is just as good. And it may be even better, as numbers are shorter and easier to remember. Please also note that you will need to figure out only numbers between 0 and 15 decimal. That’s from 0 to F in hex. Pretty easy.

Let’s now make a very simple song.

Switch back to 2x mode. As we already know, just click on the “1” in the “1x” label.

Close and re-open Goattracker so that things are easily initialized.

2x mode is not really needed for this very simple song, but it will be useful when we will improve this song on the next Goattracker article.

Now, you will see that you have a single pattern with the tracks 0, 1 and 2. All these tracks are empty. In the orderlist, you have one coloumn with the numbers 0, 1 and 2. This is the pattern.

If you press SHIFT + F1, you’ll see that the tracks are played over and over. No sound is played as all tracks are empty. The whole pattern is empty. The pattern is played forever as the RST entries at the end of the orderlist point to pattern 00. That is to say, the song starts over again once played. To stop the song, press F4.

Now, try to press the TAB key several times. You’ll see that the cursor moves to some areas of the window. Each area is intended for a particular use. The track editor area is used to edit tracks. To move between tracks, just use the cursor controls left and right. Use up and down to move along a single track to edit it.

The instrument editor is used to create instruments. When you are in the instrument editor, the cursor goes to the Attack/Decay entry. If you press the TAB key while on the instrument editor, you will go to the tables. These are used to enter various parameters, as we’ll see in a moment.

The first step is to create instruments. For our song, we will make use of a bass sound and a lead. We may add very basic drums too, but still, we are going to make something very simple.

On Goattracker, musical notes are represented by letters. Natural notes are seven: do, re, mi, fa, sol, la, si. Each note has its own frequency. Please note that there are more octaves. That means, we have several dos, res, etc. A do2 (on the second octave) is low pitched, while a do6 (on the sixth octave) is high pitched. But it’s the same note. You can realize it if you play two equal notes from different octaves together. If you play a LA5 and a LA6 together, you’ll just ear something very close to a single note, just a bit richer in sound.

Notes in Goattracker are written in the International Notation. That is:

C = Do, D = Re, E = Mi, F = Fa, G = Sol, A = La, B = Si.

A very simple bass line can be made by alternating notes from different octaves. So, let’s create a bass instruments and then let’s edit a track with our bass line. A bass line is a melody played with bass sounds that is used as an accompaniment for the main melody.

To create the instrument, go to the instrument editor by using the TAB key.

Now, we have to enter the ADSR parameters. For a bass, we may use the following settings:

Attack = 0. Decay = 9. Sustain = 0. Release = 6.

Entering ADSR parameters for the bass.


Now, let’s go into the “wavetable pos” entry. This is NOT the entry for the waveform value. It is just a pointer to the wavetable. Let’s write 01 and press enter. The cursor will go to the 01 entry in the wavetable. Now, we can write the waveform value. We may use the sawtooth waveform, so let’s write 21 (it is 33 decimal, remember we use HEX here). Leave the other two numbers to 00. Now, press cursor down and on entry 02 of the table, write FF 00 (you may just write FF and leave the other two numbers on the right to 00). FF 00 means: end of this table. No other values of the waveform are to be used.


If you press enter while the FF 00 entry is highlighted, you will go back to the instrument editor. You can use the TAB key to go back there as well.

Now, press space. You should ear a low pitched sound. That’s the instrument we have created. The octave being played is octave 2. Octave number is shown on the bottom left corner of the window. If you want a higher pitched sound, press * from the numeric keypad. Now the octave is 3 and the sound is higher. Press space again to ear it. To have a lower pitched sound, press / again from the numeric keypad. Now the octave is back to 2. Press those keys repeatedely to increase / decrease the current octave. Remember those keys as they will be useful in the track editor also.

Now let’s build our bass line. We will write notes only in even entries (00 entry included). This is because we want an empty entry after each note to determine the lenght of the note being played. The rhythm is very simple: just regular beats, like a clock. One note will be from octave 2, and the following note from octave 3, alternatively.

If you go to the track editor, if you scroll the tracks with the cursor keys you will see that each track is made up of 64 entries (64 decimal). Our bass line will be 32 entries long. We will just copy and paste it in the remaining 32 entries to completely fill in our track.

On a song, there are some chords in sequence. Those determine the harmony of a song, given it simple (I couldn’t explain it better either).  On very simple songs, the basses match the chord being used on a given time.

Let’s use these chords for our song: E, C, D. This is Mi, Do, Re.

We will use the E chord for the first 16 entries of the track, then we will use C for 8 entries and D for the remaing 8 entries. That sums up to 32 entries, the desired lenght for the bassline.

These chords will me major or minor depending on the main melody we will create. Anyway, the bassline will just match the chords. Being a very simple bassline, it will be the same for major or minor chords.

Like we said, we’ll use notes from two octaves. So the bassline will be like this:

e2 e3 e2 e3 e2 e3.... e2 e3 c2 c3... c2 c3 d2 d3 ... d2 d3

and so on.

Now, let’s edit the bassline track step by step.

Go to the orderlist editor, and edit the first coloumn like this:

1   01  RST00
2   00  RST00 
3   00  RST00

Tracks 00 will be empty track. Now, go on track 01. It is the one to the left. To go to track 1, you can either use the TAB and cursor controls, or either press enter while the cursor is on the 01 in the orderlist (01 here refers to track 01, of course).

On a track, each entry looks like this:

00    E-2    01000

00 is the track position, or track entry number. E-2 is the note edited, an octave 2 mi. To the right, 01 means “instrument 1”, which is the bass. The last three zeros are reserved for commands. More on this later. You may just leave them to zero now.

To obtain the note E-2, just press E on the keyboard.

Now move down the cursor to track entry number 02. Press * on the numeric keypad to set octave 3. Now, press E. You will now have the following:

00    E-2    01000
01    ...    00000
02    E-3    01000

Please note that you don’t have to edit instrument number. It will be set automatically. Of course, you may change it later if needed.

Enter E2 and E3 notes alternatively, until you reach track entry number 16. From now on, enter notes C2 and C3 alternatively until you reach entry number 24. To obtain the C note, press Q key.

From entry 24 to 32, alternate notes D2 and D3. Use W key to obtain the D note.

Now, in order to complete the track, we should copy the bassline to the remaining empty 32 track entries. To do this, go to track entry 00 by using cursor up key. Once there, old down SHIFT key, and press cursor down until you reach entry 31. Now, press CTRL + C. The bassline has been copied to the clipboard. Now, go to entry 32 and press CTRL + V. Notes have been pasted.

Now you have a complete 64 entries track containing the bassline of the song.

Press SHIFT+ F1 to ear it. Again, F4 to stop music.

We could go on by adding drums. We will use very crude sounds for now.

On very old games, drums are created by using white noise only. Results are poor, but they will be fine as a starting point.

To add a rhythm track, we must create our drums first. We require two instruments: a hit and a snare. A snare is a “loud” percussion, while a hit is softer and lasts less.

Go to the instrument editor. Press “+” and you will go on instrument 2. + and – keys are used to navigate between instruments.

Let’s create instrument 2. Press CTRL + N, write the name “hit” and press enter. Enter ADSR parameters: Attack 0, Decay 5, Sustain 0, Release 0. On the editor, each digit represents an ADSR parameter. Please note that since hex numbers are used, only one digit is required, even if each ADSR parameter goes from 0 to 15 decimal. In hex, it is from 0 to F, so only one digit.

Attack/decay:    05   Vibrato Param: 00
Sustain/Release: 00   Vibrato Delay: 00

On the wavetable pos entry, let’s write 03 and press enter. Then, the cursor goes to the first empty entry available on the wavetable.

Let’s write: 81 AB

81 sets the white noise waveform. AB is an absolute pitch value. As a “hit” sound is not a note, we just want a fixed frequency. I choosed the value to my taste.

On entry 04 of the wavetable, write FF 00 as usual, to tell the tracker that this table is over. Now, press enter to go back to instruments editor.

Press space to ear the hit.

Now press +. You should now be on instrument 3. Press CTRL+N, write “snare” and hit enter.

Again, we must set ADSR parameters. Attack and Sustain may be set to 0. Decay can be set to 8. Release to 4. On the wavepos entry, write 05 and press enter. How do you know what number to write here? You may look at the wavetable and look for the first empty entry number. Also, if you prefer, while on the instrument editor, if the cursor is on the still empty wavepos entry, you may press enter: the cursor will go automatically on the first empty entry on the wavetable. You may then go back and enter the number you’ve just seen highlighted. To go back to the instrument editor quickly, use SHIFT + TAB while you are on the wavetable editor.

On wavetable entry 05, let’s write: 81 DF. Again, an absolute value for the frequency, as the instrument is a percussion.

Again, to ear the sound, press space.

Now, we just have to create another track. Let’s go to the orderlist, and edit the first coloumn to add track 2.

1   01  RST00
2   02  RST00 
3   00  RST00

While the cursor is on the 02, press enter and you will be on track 2, ready to be edited. We will have a percussion on entry 00, 04, 08, 12, 16 and so on. We will alternate hit and snare. Again, like a tic-tac sound of a clock.

The note you use to enter the drums doesn’t matter, as we used a relative frequency value for drums. Let’s use a C for all of them.


The above picture shows how track 2 should look like.

Please note that drums are played at the same time as some bass notes. This is done to make the two tracks synchronized.

Again, you may press SHIFT+F1 to listen. Very crude sounds, but still, you may get the idea of the song.

We have one channel free. We can add a melody. Let’s create the main instrument. Suppose we want to synthetize a flute. ADSR parameters may be set to: Attack = 5, Decay = 4, Sustain = A, Release = 5.

You may figure out how to complete instrument 04 parameters by looking at the following picture. Waveform used is 11, which stands for the triangle wave.


You may test the flute on the instrument editor by pressing space. Press shift+space to stop it (it is required as the instrument has a sustain value different than 0).

Now, go to the orderlist editor and create track 3. Then edit it using instrument 04 (the flute).

What about notes? I’ve come up with a very simple melody. You can download the complete .sng file here and load it into goatracker. All the steps you’ve done so far will be there, so you may not worry about saving your work.

You will find that sustain value of the flute instrument has been modified. It is now 7. A was too much loud for my test.

This is a very simple example, but I think it’s enough as a simple tutorial song.

You may try other notes for the melody. Remember that notes are edited with keys from Q to P and from Z to “.”. Altered notes are obtained with numbers 2, 3, 5, 6 7, 9, 0 (in order to alter notes on the Q… P row), and with letters S, D, G, H, J, L (in order to alter notes on the Z… “.” row). The Z…”.” is made up of notes one octave under the Q… P row.

You can use Goattracker to live play melodies for testing. While on the track editor, press space and you will go into jam mode. This way, notes will be played as you press keys, without editing the tracks.

Please note that as the flute has a Sustain value different than 0, in order to stop a note while jamming or why testing the instrument, you should go to the instrument editor (if not already there) and press SHIFT + SPACE. The other instruments created have a 0 Sustain value and do not require this.

There are many examples included with Goattracker that you can study. One useful tip is this: while listening to a song, if you press SHIFT+F4 while over a track, the channel matching that track will be muted. SHIFT+F4 again will unmute that channel. This helps to study songs, as you can isolate a single channel and listen to it alone.

Now I would like to spend a few words about my Castle Master cover. I did it in 2010 but I never released it. It’s a port of the song of the game Castle Master for the Commodore Amiga. I like the Commodore 64 version very much, but I wanted to come up with something a bit closer to the Amiga version. I found the Amiga .mod file online, so I just couldn’t resist and I started the port.

If you haven’t already done it, you can download the Goattracker .sng file of it here. Please note that 8580 emulation is required. Click on “6581” in the upper blue bar, and it will turn into 8580.

It’s not a close port. Sounds are much different than the Amiga ones. I still wanted a Commodore 64 feeling, but I wanted to include every aspect of the Amiga module.

The most difficult part was the fact that the Amiga module is made up of 4 channels. On the Commodore 64, you only have three. So I had to do bass and drums on the same channel. Including snares and a tom tom “rhythm line”. I used mixed instruments for the purpose, in order not to loose anything.

You may like it or not, but I’m sure there are many techniques very useful for learning purposes.


Precedente SID, the Commodore 64 sound chip Successivo Making Commodore 64 music with Goattracker: part 2

2 thoughts on “Making Commodore 64 SID music with Goattracker

  1. I am so happy to come across this tutorial! It’s very clear and extremely suitable for the beginner. Looking forward to what will come next.

Lascia un commento