Create Project Need help?
Michel Förch

MOS6581/MOS8580 based Chiptunes-Player for .SID-file-format

Status: Proposal
October 3, 2013

This is a device, which is built for playing chiptunes from the HVSC (High Voltage SID Collection). This huge collection contains more than 42.000 .SID files. A normal PC can play the tunes by using a "SID Player". Persons, who really like this kind of music say, that these players don`t sound like the original ones on the Commodore C64. To solve this problem I made a sketch for building a simple Device, which is able to load the SID-Tunes from an SD-Card and play them on a real MOS6581 chip.

The main part has finished, yet.

The system consists of two parts: The SD-controller and the player. I did it in this way, because I`m not able to make PCBs. So I couldn`t use one "big" MCU like the ATmega128 for the whole system (Soldering SMD on a veroboard is a bit tricky) 

The SD-Controller consists of the following parts: 
- A LCD with 4 rows and 20 columns 
- ATmega1284, which reads and writes Data from and to the SD-Card and communicates with the Player 
- The SD-Card - A 2x4 keyboard matrix (not all buttons are used at the moment) 

The real Player consists of the following parts: 
- A MOS6510 CPU 
- 128K SRAM (Only 64K are used) 
- The SID chip 
- An Adress-decoder (4068 and 74HC 14) 
- A 1MHz Oscillator 
- ATmega16, which receives data from the SD-Controller and writes them to RAM 
- Two shift-registers (74HC 595) which connect the MCU to the CPUs Adress-Bus

Playing a SID-Tune is easy: The ATmega1284 runs a simple File-Manager. You can select a .SID File with some Buttons. Once selected, the ATmega1284 automatically sends the Data to the ATmega16. The Atmega16 then writes the data to RAM. After that`s done, it puts the /Reset-line to High and generates a 50Hz/60Hz IRQ Signal. That`s all. The Tune is now Playing. There are functions for stopping and pausing, too. On the LCD you can see some information about the tune. There is also the possibility to add some tunes to a "Favorites-folder". You can see the first working Version running on YouTube:

The only limitations are that some tunes want to make use of a more complex System (C64) which is not completely simulated by the player.

The next version will have an ATmega128 which contains the Software of both MCUs. There also will be an relay to switch between the 6581 and 8580 (better filter operation).

There is no PCB Layout for this Project, because I built the prototype on a veroboard. I think a PCB in this Size would be to expensive for only one or two units.


I think it`s time for an update:
Some days ago I started working on Version 2 
This time there is only one ATmega1284 (I know, I said it`s not possible, but I was wrong). This single AVR controls the whole Player. The ATmega16 ist replaced by a third shift-register (74HC 595).

Another improvement is the expansion with a Real-Time-Clock (DS1307) and a second SID-Chip. The last one makes it possible to perfectly play-back the 6581 and(!) the 8580 tunes. 

Some weeks ago I got an E-Mail. I was asked to build a 16-segment display for the player. The actual Hardware is designed to connect with a 16-segment display. But first I want to get the main-system work.


After fixing the adress-bus, I got the new Hardware running. Sounds great!
Now I will have to write the code for the file-manager an the menues.


A wire on one of the shift-registers was`t soldered properly. Now about 80% of the tested files work properly. Of course there are still some issues, but I think most of them are on the software-site. I also think there are some special things SID-Files may use, which aren`t declared in the file-header. It`s strange that the problems not only occour with files from a specific musician with special programming skills.
Here`s an example:

As you can see it`s already useable.


Read the full post
Show less
V0.1 Player-Part
LCD of V0.1
Power Supply with +12V/+9V/+5V/+3,3V (V0.1)
The AVR-Board (upper board of v0.2)
With mounted LCD (v0.2)
The Player Board (V0.2)
The whole sytem of V0.2

Loading comments...