
Parę dni temu jedna z osób zażyczyła sobie, abym "wyczarował" jej joystick do Pegasusa w stylu drążka (wolanta). Tego typu kontrolery popularne były np. wśród konsol typu Atari czy Commodore, natomiast do Pegasusów nigdy takiego czegoś moje oczy nie widziały.


Konieczne było więc znalezienie jakiegoś gotowego joysticka i dopasowanie jego interfejsu komunikacji do konsoli. Joypady z powyższych zdjęć mają jedyną zaletę - są banalne w komunikacji: w środku mamy jedynie pola stykowe dla każdego z kierunków i przyciski, a sygnały dla nich są wyprowadzone w osobnych żyłach, każda jest zwierana do masy przy wciśnięciu.
Minusem jest dość słaba precyzja działania (po przechyleniu dźwigni poza pewien kąt, blaszka zwiera) oraz wbrew pozorom cena. Chyba ludziom kojarzą się one z konsolami dawnej epoki bo nie znalazłem na olx czy allegro nic w rozsądnej cenie. No i tylko jeden przycisk, a do Pegasusa potrzeba czterech (A, B, Select, Start).
Innym pomysłem był zakup współczesnego joypada na USB. Tutaj jednak wadą byłaby trudność w komunikacji z nim (konieczność obsługi USB Host). Można byłoby się co prawda podłączyć jakoś do płytki wewnątrz, ale wymagałoby to dogłębnej analizy wnętrza, a tego chciałem uniknąć.
Złotym środkiem okazał się zakup kontrolera na leciwy Game Port (DB15 pin), podłączany niegdyś do kart dźwiękowych. Protokół komunikacji jest banalnie prosty, a spora popularność i niskie ceny na rynku wtórnym (20-50 zł) sprawiły, że w jeden dzień udało mi się zorganizować dwa takie joypady.

Specyfikacja GamePortu pozwala na przesłanie cyfrowej informacji o stanie czterech przycisków oraz analogowej o stanie czterech suwaków (czyli X1, Y1, X2, Y2). Standard określa, że wychyleniu suwaka odpowiada liniowa zmiana rezystancji 0-100 kΩ.

Pamiętacie za czasów Windows 95 jak w panelu sterowania kalibrowało się taki joystick? Chodziło po prostu o to, aby system wiedział, jaka rezystancja odpowiada w przypadku neutralnego położenia dźwigni (na środku) oraz jaki jest zakres zmian dla skrajnych wychyleń.

Projekt adaptera
Podłączenie takiego joysticka do Pegasusa wprost jest niemożliwe. W Pegasusie stan każdego z przycisków jest po pierwsze cyfrowy, a po drugie - przesyłany szeregowo. W Gamepadzie mamy cyfrę + analog i do tego równolegle.
Pomyślałem, że stworzę więc odpowiedni adapter w oparciu o popularny mikrokontroler Atmega 88 (mam trochę tego, trzeba było zrobić małe zapasy, bo ceny scalaków na aliexpres zaczęły od paru miesięcy szaleć niczym ceny margaryny w biedronce).
Atmega 88 jest bardzo podobna do Atmegi 8, ma nawet trochę więcej funkcji (np. przerwania na każdym z pinów) no i u braci z za wschodu była tańsza niż ósemka. Jak widać popyt reguluje podaż.

Odczyt rezystancji można wykonać na kilka sposobów. W PC rezystancja ta ładuje kondensator (na karcie dźwiękowej), który jest podłączony do przerzutnika. Oprogramowanie mierzy czas od pełnego rozładowania, do czasu gdy przerzutnik zmieni stan, i na tej podstawie aproksymuje wychylenie.
W moim przypadku prościej było dodać rezystor 100 kΩ do masy tworząc dzielnik, a wartość napięcia (2.5 V - 5 V) odczytać za pomocą przetwornika ADC. W adapterze przyda się też jeden przycisk i wyświetlacz (o tym za chwilę). No i oczywiście złącza do podłączenia do konsoli i do joypada. Całość postanowiłem zrealizować w postaci dwóch płytek połączonych taśmą, przy czym na tej mniejszej jest jedynie samo gniazdo DB15)





Kalibracja
Niezbędna jest oczywiście kalibracja joysticka, a ściślej - chodzi o ustalenie zakresu, od którego momentu wychylenie dźwigni ma być uważane za "wciśnięcie" kierunku. Przyda się też ustawianie, który z przycisków joypada odpowiada Pegasusowym przyciskom A/B/Select/Start. Powyższy tryb konfiguracyjny włączamy wciskając przycisk CONF. Na wyświetlaczu pojawią się kolejny napisy:
• LE - należy wychylić dźwignię w LEWO do żądanej pozycji i trzymając ją w niej, wcisnąć przycisk CONF
• PR, GO, DO - tak samo, tylko z dźwignią w prawo/górę/dół
• B/A/SE/ST - należy wcisnąć na joypadzie przycisk, który będzie przez Pegasusa interpretowany za odpowiedni
Wszystkie te informacje są przechowywane w pamięci EPROM w Atmedze, więc po wyłączeniu/włączeniu nie ma konieczności rekalibracji, chyba że chcemy zmienić przypisanie przycisków, albo podłączyć inny joystick).
No cóż, od siebie tylko dodam, że rozgrywka takim joystickem (przynajmniej w platformówki) to katorga, może do jakichś strzelanek czy bijatyk będzie odpowiedni. No ale o gustach się nie dyskutuje.
Cool? Ranking DIY