Der sogenannte SID, der Audiochip des Commodore 64, ist wohl einer der bekanntesten Soundgeneratoren der Computergeschichte. Es gab zwei Versionen davon: den 6581 und den 8580. Wer auf den bekannten Online-Portalen nach diesen Chips sucht, stellt schnell fest, dass sie begehrt und dementsprechend teuer sind. Das liegt daran, dass viele SID-Chips nach all den Jahren nicht mehr funktionieren und keinen Ton mehr von sich geben. Aus diesem Grund gibt es auf dem Markt verschiedene Alternativen, die zum Teil sogar zusätzliche Funktionen bieten. In diesem Tutorial bauen wir einen SID-Ersatz auf Basis eines ATmega-Mikrocontrollers, genauer gesagt den Nano SwinSID.
Quelle dieser Anleitung: www.tolaemon.com
Bevor es losgeht, noch ein paar Hinweise (Wichtig!)
- Achte auf die Ausrichtung der Bauteile beim Löten.
- Achte auf die Ausrichtung des SwinSID beim Einbau in den Sockel des C64.
- Diese Anleitung setzt Erfahrung im Löten von SMD-Bauteilen voraus.
- Vermeide Kurzschlüsse und falsche Verdrahtung. Der C64 und der SwinSID könnten beschädigt werden.
- Der SwinSID ist hinsichtlich der Soundwiedergabe nicht 100% kompatibel zum Original.
- Vermeide statische Aufladung durch Berühren eines geerdeten Gegenstandes, z.B. eines Heizkörpers. Oder verwende ein Antistatik-Armband.
- Ich übernehme keine Verantwortung für Schäden, die direkt oder indirekt durch dieses Handbuch entstehen.
Die Komponenten
Für den Bau brauchen wir nicht viele Komponenten. Als erstes benötigen wir natürlich die leere Platine. Der Entwickler des Projekts stellt die Gerber-Daten auf seiner Webseite zur Verfügung. Suche ganz unten auf der Webseite www.tolaemon.com nach dem ZIP-Archiv, das die Gerber-Daten enthält. Lade das Archiv herunter, aber entpacke es nicht. Danach muss das Archiv bei einem Platinenhersteller, z.B. Aisler oder PCBWay, wieder hochgeladen werden. Wir erhalten dann eine unbestückte Platine.
ATmega88PA x1
Pin Header male/male Rund RM 2,5 x28 Pins (Achtung beim Kauf: male auf beiden Seiten!)
Optional:
Zusätzliche Komponenten für die Verbindung zwischen Platine und Programmer:
Drahtbrücken starr - Der Durchmesser des starren Drahtes ohne Isolierung sollte 0,6 mm betragen.
Der Programmer
Für die Programmierung benötigen wir ein Programmiergerät, von denen es viele in verschiedenen Ausführungen gibt. Für unser Projekt reicht ein USBasp völlig aus. Zusätzlich benötigen wir noch einen Adapter mit den entsprechenden Leiterbezeichnungen.
Der Aufbau
Wenn wir alle Bauteile haben, können wir mit dem Löten beginnen. Dabei ist es wichtig, genau zu wissen, wo welches Bauteil platziert werden muss. Achte besonders auf die richtige Ausrichtung des ATmega, des Oszillators und der LED. Der 330Ω Widerstand und die LED sind optional. Das folgende Bild zeigt, wo und wie die einzelnen Bauteile platziert werden müssen.
Die einzelnen Bauteile sollten in einer bestimmten Reihenfolge verlötet werden, da sonst einige Lötstellen mit dem Lötkolben nicht mehr gut erreichbar sind. Löte die Bauteile in dieser Reihenfolge:
- ATmega88
- Oszillator
- Widerstände auf der oberen Seite der Platine
- Kondensator
- Pin Header Quadratisch RM 2 2x2
- 330Ω Widerstand + LED auf der Rückseite der Platine (Optional)
- Pin Header Rund RM 2,5 2 x 14
Den ATmega programmieren
Wenn alle Bauteile auf der Platine sind, programmieren wir den ATmega88. Dazu benötigen wir eine Verbindung zwischen der Platine und dem Programmiergerät. Leider sind die Aussparungen für die Pins auf der Platine so klein und dicht angeordnet, dass ein Pin-Header mit Drahtbrücken nicht passt. Wir brauchen also eine andere Lösung. In meinem Fall habe ich die Dupont-Drahtbrücken in der Mitte durchgeschnitten und an der Schnittstelle starre Drähte (0,6 mm) angelötet. Die Lötstelle ist mit Schrumpfschlauch gegen Kurzschluss geschützt.
Der Vorteil ist, dass die Drähte in die Kontakte der Platine gesteckt werden können, ohne dass diese fest verlötet werden müssen. Wir verbinden nun den Adapter mit der Platine, wie im folgenden Bild zu sehen ist.
Wenn dies geschehen ist, schließe den Adapter an den USBasp und den USBasp an einen Windows-Rechner an.
In dieser Anleitung wird die Programmierung unter Windows 10 durchgeführt, unter Windows 11 sollte es nicht viel anders sein. Im Gerätemanager von Windows wird der Treiber nicht gefunden.
Die Installation des Treibers erfolgt über Zadig. Wenn Zadig gestartet wird, muss der USBasp Programmer im DropDown-Menü ausgewählt werden. Dann WinUSB (libusb) als Treiber auswählen und installieren. Dies kann je nach Computer einige Zeit dauern. Danach sollte USBasp betriebsbereit sein.
Nun benötigen wir das Programm AVRDUDE, ein Kommandozeilenprogramm zur Programmierung von Mikrocontrollern. Da wir uns die Arbeit nicht unnötig schwer machen wollen, laden wir AVRDUDESS herunter. AVRDUDESS ist eine grafische Benutzeroberfläche, die AVRDUDE bereits enthält. Zum Schluss brauchen wir noch die Firmware, die geflasht werden soll, und die finden wir hier: nano SwinSID firmware for ATmega88PA. Wir starten AVRDUDESS und stellen die Parameter wie folgt ein.
Programmer: USBasp
Flash: Pfad zur Firmware
MCU: ATmega88PA
“Set fuses” aktivieren
Fuses L: 0xE0
Fuses H: 0xDF
Fuses E: 0xFD
Fuses LB: Hier darf nichts eingetragen werden!
Wenn nun der Flash-Vorgang mit “Program!” gestartet wird, sollte im unteren Bereich des Fensters eine Bestätigung angezeigt werden. Falls ein Fehler auftritt, kann dies verschiedene Ursachen haben. Die häufigsten sind:
- Es besteht kein Kontakt zwischen den Pins des ATmega und den Lötpads.
- Die Verbindung zwischen Programmer und Board ist fehlerhaft.
- Der Windows-Treiber des USBasp ist nicht korrekt installiert.
Um sicherzustellen, dass der Flash-Vorgang erfolgreich war, können wir den Radio-Button bei "Verify" unter "Flash" auswählen und auf "Go" klicken. Dadurch wird die Firmware im Speicher des Atmega mit der Firmware-Datei auf der Festplatte verglichen. Ob die Fuses korrekt gesetzt wurden, können wir überprüfen, indem wir diese vom ATmega auslesen. Dazu einfach auf "Read" neben den Fuses-Feldern klicken.
Die Jumper
Wir sind fast am Ziel! Jetzt trennen wir den SwinSID vom Programmer und stecken die Jumper auf die entsprechenden Pin-Header. Dies hängt davon ab, ob wir einen 6581 oder einen 8550 SID benötigen.
J1 = Filter emulation, J2 = Verbindet AUDIO-OUT über einen 1KΩ Widerstand mit GND
SID 6581
Jumper J1 geschlossen
Jumper J2 offen
SID 8550
Jumper J1 offen
Jumper J2 geschlossen
Der Funktionstest
Zum Schluss kommt der Funktionstest, bei dem wir überprüfen, ob alles richtig gemacht wurde. Stecke den SwinSID in den C64 und achte auf die Ausrichtung der Kerbe.
Sobald der C64 eingeschaltet wird, sollte ein Ton zu hören sein. Wenn dies der Fall ist, wurde der SwinSID erfolgreich erstellt und programmiert. Nun laden wir eine Software, die Musik abspielt, um zu überprüfen, ob der Ton korrekt wiedergegeben wird. Damit ist das Projekt abgeschlossen.
Inkompatible Software
Zum Schluss noch ein Hinweis: Wie bereits oben erwähnt, ist der SwinSID nicht vollständig mit dem Original-SID kompatibel. Dies kann dazu führen, dass der Ton verzerrt oder in manchen Fällen gar nicht wiedergegeben wird. Beachte, dass dies nicht unbedingt auf einen Fehler im Aufbau des SwinSID zurückzuführen ist, sondern auch an inkompatiblen Programmen liegen kann. Um mögliche Probleme auszuschließen, empfehle ich, den SwinSID mit verschiedenen Programmen zu testen.