W końcu doczekałem się swojego C64 i dokończyłem pierwszą wersję interfejsu JOYPC2C64 i dziwnym trafem okazał się on działać

Projekt będzie działać na dowolnym Arduino zasilanym z 5V. Sam złożyłem go na płytce prototypowej i Arduino Nano, ale na Uno czy Pro Mini będzie działać tak samo. Jeżeli ktoś lubi rozwiązania minimalistyczne, to w ATtiny w obudowie DB15 pewnie też się zmieści.
Lista części:
1. Joystick analogowy PC z OLX czy Alledrogo - 1 sztuka (0-30zł)
2. Wtyczka żeńska DB9 - 1 sztuka (~2zł)
3. Wtyczka żeńska DB15 (gameport) - 1 sztuka (~2zł)
4. Rezystory 47k - 2 sztuki (~0,1zł)
5. Kilkanaście sztuk przewodów prototypowych (docelowo do zastąpienia dwoma kawałkami skrętki czy co tam jest pod ręką). (~2zł)
6. Arduino Uno/Nano/Pro Mini z Aliexpress - 1 sztuka (~7zł)
Koszt całości przy uwzględnieniu nowych części bez Joysticka ~15zł
Podłączenie Joysticka PC przez wtyczkę DB15 do Arduino (Dx - pin cyfrowy x w Arduino, Ax - pin analogowy Ax w Arduino):
//pin 1 - +5V
//pin 4 - GND
//pin 2 - D2 (przycisk 1)
//pin 7 - D3 (autofire - przycisk 2)
//pin 10 - D4 (opcja - przycisk 3)
//pin 14 - D5 (opcja - przycisk 4
//pin 3 - A0 (rezystor 47k do masy)
//pin 6 - A1 (rezystor 47k do masy)
//zwieramy piny AREF i 3.3V
Podłączamy Arduino do PC kablem USB i jeżeli znad płytki nie unosi się dym, to raczej nie jest źle.
Załączony plik rozpakowujemy i uruchamiamy w Arduino IDE.
Odkomentowujemy linię #define SERIAL_DEBUG i wgrywamy do Arduino (kablem USB albo programatorem).
Teraz przystępujemy do kalibracji joysticka - w monitorze portu szeregowego (115kbit) powinien być widoczny stan osi i przycisków joysticka, dodatkowo naciśnięciu Fire powinno towarzyszyć zapalenie się wbudowanej w Arduino diody sygnalizacyjnej. Po przetestowaniu Fire sprawdzamy, czy dane na ekranie odpowiadają położeniu joysticka i kalibrujemy go fizycznie (suwadła/pokrętła na joysticku) i/lub programowo - wartości XLEFT XRIGHT YUP YDOWN definiują strefę martwą i poziom wychylenia joysticka.
Po przetestowaniu projektu na sucho podłączamy z kolei żeńską wtyczkę DB9:
//pin 7 - +5V
//pin 8 - GND
//pin 6 - D6
//pin 1 - D7
//pin 2 - D8
//pin 3 - D9
//pin 4 - D10
Jeszcze raz testujemy, czy wszystko jest OK i można już wyłączyć debugowanie komentując linię #define SERIAL_DEBUG i ponownie wgrywając program do Arduino. Komunikacja szeregowa może wprowadzać pewne opóźnienie w pracy interfejsu, szczególnie jeżeli ustawmy niską prędkość (np. 9600bps).
Przed podłączeniem interfejsu do C64 koniecznie odłączyć go od portu USB, ponieważ jest zasilany z Control Portu i może nastąpić niekontrolowany przepływ napięcia między USB a C64.