Der SNES Joypad Adapter für den Commodore 64

Ob Joystick oder Joypad, jeder Spieler hat seine Präferenzen und sein bevorzugtes Eingabegerät. Der SNES-Controller erfreut sich großer Beliebtheit, insbesondere aufgrund seiner ergonomischen Form. Dieser ist jedoch naturgemäß nur mit dem Super Nintendo kompatibel. Nicht so, wenn man einen PadSwitcher64-Adapter besitzt. Mit diesem ist es nicht nur möglich, den SNES-Controller am C64 zu verwenden, sondern auch die Tasten nach Belieben neu zu belegen. Diese Anleitung beschreibt den Aufbau und die Konfiguration des Adapters.



Bevor es losgeht, noch ein paar Hinweise (Wichtig!)
  • Arbeite stets im spannungsfreien Zustand. Stecke den Adapter niemals in die Schnittstelle, wenn der Rechner eingeschaltet ist.
  • Überprüfe die Lötstellen auf Kurzschlüsse. Ein Kurzschluss kann sowohl den C64 als auch den SNES-Adapter beschädigen.
  • Beachte die Ausrichtung und Polarität der Komponenten.
  • Vermeide statische Aufladungen durch das Tragen eines antistatischen Armbands.
  • Ich übernehme keine Haftung für Schäden, die direkt oder indirekt durch diese Anleitung entstehen.

Die Komponenten

Zunächst wird die Platine benötigt. Die Gerber-Daten können von oshpark.com heruntergeladen oder die Platine direkt bestellt werden. Falls gewünscht, können die Gerber-Daten heruntergeladen und auf der Webseite des bevorzugten Dienstleisters hochgeladen werden.


Folgende Komponenten werden benötigt:
Hinweis: Bei den von mir erworbenen Controller-Buchsen waren die Pins auf die falsche Seite gebogen. Die Pins sollten, wie im nachfolgenden Bild dargestellt, gebogen sein. In meinem Fall konnte ich diese ohne Schwierigkeiten korrigieren.

Stelle sicher, dass der 10 zu 6 Pin Adapter vorhanden ist.

Am Controller muss ein SNES-Stecker und kein USB-Stecker angebracht sein.


Der Aufbau ist relativ einfach, jedoch sind einige Punkte zu beachten. Zunächst sollten die Komponenten auf der Oberseite der Platine aufgelötet werden, bevor die beiden DSub9-Stecker auf der Rückseite angebracht werden. Andernfalls sind einige Lötpunkte nicht mehr zugänglich.


Sowohl beim Elektrolytkondensator als auch bei der LED ist auf die Polarität zu achten. Das längere Beinchen der Komponenten stellt den Pluspol dar. Die Pins des SNES-Steckers sollten nicht vollständig in die dafür vorgesehenen Lötpunkte geschoben werden, um genügend Abstand zwischen C64-Gehäuse und Adapter zu gewährleisten.


Im nächsten Schritt können die DSub9-Stecker angelötet werden. Es ist darauf zu achten, dass das Metallgehäuse der Stecker keinen Kurzschluss verursacht. Der Abstand zwischen DSub-9-Stecker und Platine sollte mindestens 2 mm betragen.


Abschließend wird der ATmega in den Sockel eingesetzt. Die Ausrichtung ist dabei zu beachten: Die Kerbe des ATmega muss mit der Kerbe auf der Platine übereinstimmen.

Den ATmega programmieren

Da wir an unserem Adapter die Pins für die Programmierung angelötet haben, kann der ATmega programmiert werden, ohne diesen aus dem Sockel zu entnehmen. Zunächst muss der USBASP-Programmierer inklusive 10 zu 6 Pin Adapter angeschlossen werden. In der Regel kann der Adapter nicht falsch herum an den USBASP angeschlossen werden, da eine Kerbe am Stecker dies verhindert.


Schließe den USBASP-Programmer an den SNES-Adapter an, wie in der folgenden Abbildung gezeigt.


Im nächsten Schritt wird der USBASP-Programmierer an einen Windows-Rechner angeschlossen. Ohne geeigneten Treiber kann das Betriebssystem jedoch nicht mit dem Gerät kommunizieren. Daher wird das Programm Zadig heruntergeladen, welches den benötigten Treiber enthält. Im Anschluss wird Zadig gestartet und aus dem Dropdown-Menü das zu installierende Gerät (USBASP) sowie der Treiber „libusb-win32“ ausgewählt. Die Installation des Treibers erfolgt über die Schaltfläche „Install Driver“. Anschließend überprüfen wir die korrekte Installation des Treibers im Geräte-Manager.



Für die Programmierung eignet sich das Programm AVRDUDE. Da es sich jedoch um ein Kommandozeilen-Tool handelt, ist die Bedienung recht umständlich. Mit einer grafischen Oberfläche lässt sich deutlich komfortabler arbeiten. „AVRDUDESS“ ist die passende Lösung. Lade die Windows-Version herunter und installiere diese. Eventuell müssen einige weitere Komponenten aus dem Internet geladen werden. Nach der Programminstallation sind einige Einstellungen vorzunehmen:
  • Programmer: USBASP, http.fischl.de/usbasp/
  • MCU: ATmega88P
  • Fuses: L 0xE2, H 0xDF, E 0xF9
  • Häkchen bei "Set fuses"
Selbstverständlich muss die aktuelle Firmware (PadSwitcher64.hex) heruntergeladen werden. Diese Datei laden wir nun in AVRDUDESS im Eingabefeld „Flash“.


Abschließend programmieren wir den ATmega durch Klicken auf „Program!“.

Der Funktionstest

Nach erfolgreicher Programmierung folgt der Funktionstest. Hierzu wird der C64 ausgeschaltet und der SNES-Controller sowie der SNES-Adapter an die Joystick-Ports angeschlossen.


Für die Testphase benötigen wir das Programm „PadSwitcher64.prg“, welches von der GitHub-Seite heruntergeladen werden kann. Die .prg-Datei muss auf den C64 übertragen werden, beispielsweise mithilfe eines SD2IEC. Nach erfolgreicher Übertragung wird das Programm gestartet und am SNES-Controller der Feuerknopf (Y) gedrückt.


In diesem Test wird die Funktionalität der Controller-Tasten überprüft. Mittels der START-Taste kann zwischen Port 1 und Port 2 gewechselt werden. Nach Abschluss des Tests wird das Programm mit RUN/STOP beendet.

Die Tastenbelegung ändern

Im ATmega ist ab Werk eine Standard-Tastenbelegung hinterlegt. Diese ist wie folgt definiert:
DPAD UP = UP
DPAD DOWN = DOWN
DPAD LEFT = LEFT
DPAD RIGHT = RIGHT
Y = FIRE
X = TURBO FIRE
B = UP
A = Special (DOWN + FIRE)
R = KEYBOARD MATRIX LINE (PORT 2 MODE ONLY)

Hinweis: Im Rahmen meiner Tests wurde ein Timing-Problem in der aktuellen Version des Programms PadSwitcher64.prg (Version 1.1111 zum Zeitpunkt der Tests) festgestellt. Sollte eine Fehlermeldung bezüglich einer fehlenden Adapterantwort erscheinen, wird empfohlen, die ältere Version 1.11 zu verwenden. Mit dieser Version traten bei mir kaum Probleme auf.


Die vorgegebene Tastenbelegung kann nach Wunsch angepasst werden. Hierzu wird das Programm „PadSwitcher64.prg“ erneut gestartet und zeitgleich die SELECT- und START-Taste am Controller betätigt. Anschließend wird der Mapping Editor mit der Y-Taste geöffnet. In diesem Editor können vier verschiedene Tastenbelegungen gespeichert werden: A, B, X und Y. Im vorliegenden Beispiel wird die Belegung für die Taste A geändert.


Im Editor besteht nun die Möglichkeit, die Tastenbelegung für beide Joystick-Ports individuell anzupassen. Im folgenden Beispiel wurde die Taste „UP“ der Funktion „X“ und die Taste „FIRE“ der Funktion „B“ mit Turbo-Fire-Funktion zugewiesen.


Nach Abschluss der Konfiguration laden wir die neue Belegung mittels Tastendruck auf Y auf den ATmega. Im Anschluss beenden wir den Editor mit X und speichern die Belegung auf dem ATmega, indem wir gleichzeitig die Tasten SELECT und START betätigen. Würden wir die neue Belegung nicht im Speicher des ATmega abspeichern, gingen die vorgenommenen Einstellungen nach einem Neustart verloren.

Nach erfolgreicher Konfiguration starten wir den C64 neu, laden das Programm PadSwitcher64.prg und betätigen den Feuerbutton (Y). Anschließend wählen wir die zuvor geänderte Tastenbelegung mithilfe der Tastenkombination SELECT + A (oder B, X, Y). In diesem Beispiel wird die Belegung SELECT + A ausgewählt, um die Änderung zu überprüfen und sicherzustellen, dass die Einstellungen übernommen wurden.

Autofire und invertiertes Autofire

Die Autofire-Funktion kann nicht nur für Fire-Tasten, sondern auch für die DPad-Belegung verwendet werden. Autofire auf LINKS oder RECHTS, also wiederholtes Drücken einer einzigen Richtungs-Taste, wäre wenig sinnvoll. Wenn wir jedoch beispielsweise Autofire auf LINKS und invertiertes Autofire auf RECHTS legen, ergibt sich ein schneller LINKS/RECHTS-Richtungswechsel bei Betätigung der entsprechenden Tasten. Dies ist insbesondere bei Spielen nützlich, bei denen wiederholte LINKS/RECHTS-Bewegungen erforderlich sind. Im folgenden Beispiel wird RECHTS auf X (Autofire) und LINKS auf A (invertiertes Autofire) gelegt.