Poniższy tekst jest pochodną szukania rozwiązań dla nowego QMEGa.
Miałem je już dawno zrobione, ale czekały na finał testów OS.
Standardowe złącze joysticka w Atari ma tylko jeden przycisk Fire. Niby starcza, ale do bardziej rozbudowanych gier już cztery przyciski to podstawa.
Uwaga - przedstawiony pad SNESa to tylko przykład wykorzystania idei !!!
Jak najbardziej można adaptować joysticki wieloFIREowe!!!
Na Grzysoniadzie 2010 pokazano Nunchuck - bezprzewodowy pad z konsoli WII. Tu macie inne rozwiązanie. Nic nie stoi na przeszkodzie, by były kompatybilne w obsłudze przez Atari.
Moje zamierzenia określiłem jako:
1) by dało się uruchomić z jak największą ilością starych gier
2) by programowanie obsługi pada w nowych grach nie nastręczała problemu
3) przyciski PADa winny obsługiwać (emulować) klawisze konsoli.
4) koszt adaptacji i jej komplikacja nie powinna przekroczyć zdrowy rozsądek
A zrealizowałem.... wszystkie.
Punkt 4 - koszt wyniósł 25 groszy (nie licząc kabla typu joystick i ceny samego Pada).
Poniżej pokazuje pad SNESa. Ale adaptować można każdy inny..... także joystick !!!!!!!!!
Potrzebne elementy:
1.kabel 9 żyłowy zakończony wtyczką żeńską DB9 (np. od zepsutego joysticka)
2.diody 1N4148 - 4szt
3.oporniki 0.25-0.6W, po 2szt : 160kOm, 82kOm, 39kOm, 4.7-5.6kOm
4.lutownica, cyna, trochę kabelka.....
Zasada działania
Dodatkowe przyciski skoków są połączone przez diody do odpowiednich kierunków joysticka. Dodatkowe przyciski START-SELECT-OPTION oraz FIRE 2-4 realizowane są przez wejścia Paddle.
Schemat ukazuje prostotę połączenia. Wartość R1 ma sporą tolerancje (4,7K do 10K). To wartość kalibracyjna, ewentualny dobór nie powinien mieć miejsca. Jest duży zapas na tolerancje.
Testowanie poprawności połączeń elektrycznych w PADzie.
Włączamy QMEG-OS 5.xx, w Menu opcję "JOY" - klawisz J - na ON.
W Basicu uruchamiamy taką linię:
10 ? PEEK(53279): G.10
Wciskamy na klawiaturze Atari i w Pad'zie przyciski START-SELECT-OPTION (osobno albo w kombinacjach).
Powinniśmy otrzymywać dwie identyczne wartości z przedziału 0-7 nie zależnie gdzie wciskamy klawisze.
Jeśli są inne - sprawdźcie połączenia. Ewentualnie należy zmienić wartość oporników R1, co byłoby jednak bardzo dziwne. Pomoże Wam w tym inna linia Basicu:
10 ? PEEK(53279), PADDLE(0):G.10
Albo program z załącznika: KeyTST.com.
Jak to działa
Wejście Paddle podaje wartości 1-228. Możemy wykorzystać bity 6-1, ale w praktyce bity 6-4. Mniejsze wartości bitów 3-1 dają przekłamania raz - z powodu niedokładności samego odczytu przez Pokey'a, a drugie - z samej tolerancji wykonania podłączanych oporników. Czyli na jedno Paddle mamy tylko trzy stany o wartościach 0 (wciśnięte) lub 1 (niewciśnięte).
Obsługa w nowych grach.
Jako, że przy dwóch graczach obydwóch mają te same przyciski konsoli START-SELECT-OPTION musimy testować obydwa przypadki....
; for MADS,
PADDL1 = $0271
PADDL3 = $0273
PTRIG4 = $0280
PTRIG6 = $0282
L03EF_Swap = $03EF ;swapowany dysk + opcje QMEGa
CONSOL = $D01F
POT0 = $D200
POTGO = $D20B
; ============= zrobić pod VBI albo sprawdzać co ramkę
; poniższy kod pochodzi z QMEGa 5.xx
lda #8
sta CONSOL
BIT L03EF_Swap ;ustawienie bitu7 to włączenie opcji JOY z menu QMEGa
bpl sysZ
ldx #2
lop1 lda POT0,x
bmi noPd1 ;bit7=1 Pad niepodłączony
lsr ;a=0xxx----
lsr
lsr
lsr ;a=00000xxx
eor #8+4+2+1 ;a=00001xxx były bit 7 czyli obecnie xxxxNxxx zawsze jako 1
sta PTRIG4,x ;fire paddle4 i 6 (normalnie kopia fire paddle0 i 2)
;a teraz wskazują stan bit0 = START, bit1 = SELECT, bit2 = OPTION
;bit ustawiony - wciśnięte
ora PTRIG6 ;detekcja obydwu graczy
sta CONSOL ;ustawiam klawisze konsoli obydwu graczy
noPd1 dex
dex
bpl lop1
sysZ sta POTGO ;należy skasować wejścia PADDLE przed następnym odczytem
; niżej to tylko propozycja...
; =============detekcja wciśnięcia FIRE 2-4 dla obydwu graczy
lda PADDL1
bmi noPd2 ;bit7=1 Pad niepodłączony
and #01110000 ;pod bitami 6-4 znajdują się stany przycisków dla gracza 0
;bit skasowany - Fire wciśnięte
;bit4 = Fire 2, bit5 = Fire 3, bit6 = Fire 4
noPd2 lda PADDL3
bmi noPd3 ;bit7=1 Pad niepodłączony
and #01110000 ;pod bitami 6-4 znajdują się stany przycisków dla gracza 1
;bit skasowany - Fire wciśnięte
;bit4 = Fire 2, bit5 = Fire 3, bit6 = Fire 4
noPd3
A co ze starymi grami.
Zakładając, że gra nie zmieni standardowego przerwania VBI na swoje, to obsługę detekcji Paddle0 i 2 przejmie np. QMEG-OS 5.xx. Czyli sprawdzenie, czy wciśnięto klawisze konsoli.
Powodzenia i przyjemności w giercowaniu !!!!
PAJERO / MADTEAM