Einführung
Vor einigen Jahren entdeckte ich auf der Homepage von Synthetic Dreams das Schaltbild und die Firmware für einen sehr interessanten Joystick-Adapter. Mit diesem Adapter kann das Spiel Shredz64 gespielt werden, das dem von der Playstation 2 bekannten Spiel Guitar Hero nachempfunden ist. Besonders interessant fand ich jedoch, dass damit auch die bekannten PSX2-Gamepads für jedes andere Spiel am C64 verwendet werden können.
Zusätzlich bietet diese Schnittstelle einige zusätzliche Funktionen:
- Zwei Feuerknöpfe werden unterstützt, was unter anderem für Shredz64 benötigt wird.
- Der Analogstick kann genutzt werden, wenn auch nur digital.
- Da der PSX-Controller über vier Feuerknöpfe verfügt, sind die oben genannten zwei Feuerknöpfe zusätzlich mit Dauerfeuer belegt.
- Es können Makros programmiert werden. So lassen sich Sequenzen im Adapter speichern und auf Knopfdruck abrufen (mit den Schulterknöpfen).
- Ein weiteres wichtiges Merkmal für mich persönlich war, dass man mit den PSX2-Controllern spielen kann, die sehr gut in der Hand liegen.
Der PSX64-Adapter kann, oder konnte, auch als fertige Einheit bei Synthetic Dreams bestellt werden, allerdings als relativ große Platine. Da die Lieferung aus dem Ausland erfolgt, kommen zusätzliche Gebühren hinzu. Daher lag es nahe, diesen Adapter einfach selbst nachzubauen. Besonders, da die Website seit fast fünf Jahren nicht mehr gepflegt wird und der Adapter wahrscheinlich nicht mehr verkauft wird.
Mittlerweile habe ich den Adapter so weit verkleinert, dass er auch direkt in einem PSX2-Controller installiert werden könnte.
Der Aufbau
Die Platine wurde so kompakt wie möglich, aber so großzügig wie nötig für einfaches Löten gestaltet. Die Bauteile sind für SMD-Verhältnisse recht groß, sodass auch ein wenig erfahrener Hobbyist diese Platine problemlos zusammenbauen sollte.

Für den Aufbau werden neben der Platine folgende Bauteile benötigt:
- 2x MCP41100 – SOIC-8 (U1, U2)
- ATMega8-16AU – TQFP-32 (U3)
- 16MHz Quarz – 5032 (Y1)
- 4,7µF Tantal-Kondensator – Kemet A (C1)
- 2x 22pF Kondensator – 0805 (C2, C3)
- 100nF Kondensator – 0805 (C4)
- 2x 10k Widerstand – 0805 (R1, R2)
- 2x 1N4004 Diode – SMA (D1, D2)
Diese Komponenten sind überschaubar und vor allem auch recht günstig. Mit Ausnahme der beiden digitalen Potentiometer MCP41100 sind die Teile in jedem gut sortierten Elektronikladen erhältlich. Die beiden MCP41100 sind bei Mouser, Digikey und manchmal bei eBay erhältlich.
Zusätzlich werden Kabel für die Joystick-Anschlüsse sowie die entsprechenden Stecker und Buchsen benötigt. Für den Anschluss des PSX2-Gamepads wurde ein PSX-Verlängerungskabel verwendet, das für 2-3 Euro bei eBay erhältlich ist und viel günstiger als der Stecker allein. Einfach den Stecker abschneiden und an die Platine löten.
Für die Seite zum Computer wurde ein 10-poliges Flachbandkabel verwendet, von dem ein Draht abgetrennt wurde. Dann wurde eine Standard-D-SUB9-Buchse daran gelötet. Eine Crimp-Version könnte hier ebenfalls verwendet werden.
Da der PSX2-Controller sehr stromhungrig ist, kann die 5V-Spannung nicht an den Steuerbuchsen des C64 abgegriffen werden. Ein Kabel mit USB-Stecker wurde angelötet. USB-Netzteile sind heutzutage immer im Haus vorhanden und können mit einem externen “Power Pack”, also Akkus zum Laden von Handys, verwendet werden.
Das Schaltbild wurde 1:1 übernommen, mit Ausnahme des Spannungsreglers, da die Schaltung ohnehin nur mit 5V betrieben werden sollte. Der Aufbau ist recht einfach und sollte mit dem Löten des ATMega8 beginnen. Dann die beiden MCP41100 und der Quarz. Danach die beiden Dioden und die restlichen Kondensatoren und Widerstände. Die Platine ist schnell bestückt.

Flashen der Firmware
Der 6-polige Anschluss unten rechts im Bild ist die ISP-Schnittstelle zum Laden der Firmware. Hier kann eine 2-reihige Stiftleiste mit 6 Pins eingelötet werden. Die Pinbelegung entspricht der 6-poligen ISP-Schnittstelle.
Da die Firmware nur einmal geflasht wird und wahrscheinlich keine Updates mehr zu erwarten sind, wurde die Stiftleiste nicht eingelötet, sondern nur eingesteckt und während des Flashens leicht schräg gehalten. Sicherlich nicht die offizielle Vorgehensweise, aber für eine zusätzliche Stiftleiste war es mir nicht wert. Zumal die Platine in Schrumpfschlauch verpackt werden sollte und die Stiftleiste dann nur gestört hätte.
Die Firmware wurde erneut mit dem bekannten Tool „avrdude“ installiert. Auf der Website des Herstellers gibt es zwei Versionen, eine für den ATMega8 und eine für den ATMega168. Da jedoch keine Funktionen des ATMega168 verwendet werden, lohnt sich dieses Hardware-Upgrade nicht.
Zum Flashen wurde ein AVR ISP MKII verwendet, aber jeder andere kompatible Programmieradapter kann ebenfalls verwendet werden. Für meinen Programmieradapter sieht der Aufruf folgendermaßen aus:
avrdude -c avrispmkII -p m8 -U flash:w:atmega8.hex
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e9307 (probably m8)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "atmega8.hex"
avrdude: input file atmega8.hex auto detected as Intel Hex
avrdude: writing flash (4904 bytes):
Writing | ################################################## | 100% 1.77s
avrdude: 4904 bytes of flash written
avrdude: verifying flash memory against atmega8.hex:
avrdude: load data flash data from input file atmega8.hex:
avrdude: input file atmega8.hex auto detected as Intel Hex
avrdude: input file atmega8.hex contains 4904 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 1.36s
avrdude: verifying ...
avrdude: 4904 bytes of flash verified
avrdude: safemode: Fuses OK (E:FF, H:D9, L:E1)
avrdude done. Thank you.Nun die Fuses so einstellen, dass der externe 16MHz Quarz verwendet werden kann:
avrdude -c avrispmkII -p m8 -U lfuse:w:0xce:m -U hfuse:w:0xc9:m
avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.00s avrdude: Device signature = 0x1e9307 (probably m8) avrdude: reading input file "0xce" avrdude: writing lfuse (1 bytes): Writing | ################################################## | 100% 0.01s avrdude: 1 bytes of lfuse written avrdude: verifying lfuse memory against 0xce: avrdude: load data lfuse data from input file 0xce: avrdude: input file 0xce contains 1 bytes avrdude: reading on-chip lfuse data: Reading | ################################################## | 100% 0.00s avrdude: verifying ... avrdude: 1 bytes of lfuse verified avrdude: reading input file "0xc9" avrdude: writing hfuse (1 bytes): Writing | ################################################## | 100% 0.01s avrdude: 1 bytes of hfuse written avrdude: verifying hfuse memory against 0xc9: avrdude: load data hfuse data from input file 0xc9: avrdude: input file 0xc9 contains 1 bytes avrdude: reading on-chip hfuse data: Reading | ################################################## | 100% 0.00s avrdude: verifying ... avrdude: 1 bytes of hfuse verified avrdude: safemode: Fuses OK (E:FF, H:C9, L:CE) avrdude done. Thank you.
Damit ist die Programmierung abgeschlossen und der PSX64-Adapter einsatzbereit.

Anschließend wurde alles komplett in Schrumpfschlauch verpackt. Wenn dies ähnlich gemacht werden soll, immer daran denken, den Schrumpfschlauch vor dem Anbringen der Stecker aufzuziehen. Andernfalls kann der Schlauch nicht darübergezogen werden, da er zu klein für die Stecker wäre.
Fertig
Der fertige Adapter sieht so aus:

Und das Ganze noch komplett mit den beiden Anschlüssen:

Wie zu Beginn erwähnt, ist die Platine klein genug, um direkt in den PSX2-Controller eingebaut zu werden. Da die Gamepads aber weiterhin für die PSX2 verwendet werden, wurde die externe Version gewählt. Würde mich freuen, Bilder davon zu sehen, falls jemand den Einbau plant.
Update (2021-08-30) / Download
Die Dateien sind jetzt auf meinem Codeberg-Account verfügbar: Codeberg_ PSX64 Adapter für C64.
