Vi siete mai chiesti come funzionano questi pad che con pochi fili gestiscono tanti pulsanti e le direzioni mentre il classico joystick del Commodore o dell’Atari aveva solo un pulsante?! Mettiamo al confronto queste due diverse tecnologie.
Come non ricordare il famoso Quickshot, un joystick ergonomico ma molto facile da rompere.
In passato ne ho avuti diversi e provai anche ad aggiustarli ma senza successo.. Questo modello non usava microswitch ma una piccola piastra di metallo leggermente curva che sotto la pressione della leva chiudeva il contatto. Il problema era proprio quello, si esercitava una grande forza e quel pezzettino si metallo si distruggeva! Altri modelli di joystick erano più robusti ma la tecnologia era sempre quella, vediamo in dettaglio come funzionano.
Semplice no? ogni tasto o direzione è collegato ad un contatto che si chiude verso il GND, quindi per ogni movimento occorre un pin. Si ha così il vantaggio della lettura dello stato che sarà molto semplice ma utilizzerà un gran numero di porte. Il grande limite dei Joystick della Commodore o in genere Atari compatibili era proprio quello di avere un solo tasto, di solito assegnato al fuoco, mentre altre funzioni come salto o bombe si dovevano integrare con la tastiera o altre combinazioni.
A parte la forma, questo pad ha 4 direzioni e 4 pulsanti, si potrebbe pensare che come per il precedente, anche questo possa utilizzare un cavo per ogni funzione, già con 9 pin sarebbe possibile.
Questo Joypad usato dalla Nintendo in realtà è attivo rispetto all’altro che contente solo degli interruttori, si questo ha un chip che gestisce gli 8 contatti e invia il loro stato uno alla volta.
Converte 8 ingressi paralleli in 1 uscita seriale, ma come?
Questo è il suo funzionamento, sul cavo di questo joypad troviamo 2 pin per l’alimentazione del circuito (5V) ed altri 3 pin nominati Latch, Clock, Data.
Il pad non farà nulla anche se alimentato, saremo noi ad andare ad interrogarlo a certi intervalli per capire lo stato dei pulsanti.
Dobbiamo inviare un impulso di 12us sul pin Latch (attivo alto) e poi possiamo iniziare ad inviare un segnale di clock (normalmente a livello alto) con un periodo di 6us (dutty 50%). Il joypad invierà sulla linea Data lo stato del pulsante/direzione, in successione ad ogni fronte di salita del clock, quindi possiamo leggerli uno alla volta iniziando dal tasto A fino alla direzione ->. Pulsante premuto = livello basso, non premuto = livello alto
Complicato?
No, il funzionamento è semplice, ma va gestito, non come il precedente joystick, ma con un integrato che diverse volte al secondo farà questa procedura di lettura.
Per il pad del Super Nintendo vale la stessa cosa, solo che avendo più tasti invierà più dati ma i fili saranno gli stessi.
In questo caso il chip invierà 16 stati anche se nel pad sono presenti 12 tasti, gli ultimi 4 stati sono sempre a livello alto e non utilizzati in questo sistema.
Mentre per riuscire ad utilizzarlo occorre smanettare un po’ con l’assembler, questo è il codice che ho scritto per l’esempio (da loc. $2000):
.C:2000 A2 00 LDX #$00
.C:2002 A0 00 LDY #$00
.C:2004 A9 28 LDA #$28
.C:2006 8D 03 DD STA $DD03
.C:2009 A9 08 LDA #$08
.C:200b 8D 01 DD STA $DD01
.C:200e C8 INY
.C:200f C0 FF CPY #$FF
.C:2011 D0 FB BNE $200E
.C:2013 A0 00 LDY #$00
.C:2015 A9 28 LDA #$28
.C:2017 8D 01 DD STA $DD01
.C:201a C8 INY
.C:201b C0 20 CPY #$20
.C:201d D0 FB BNE $201A
.C:201f A0 00 LDY #$00
.C:2021 A9 08 LDA #$08
.C:2023 8D 01 DD STA $DD01
.C:2026 C8 INY
.C:2027 C0 10 CPY #$10
.C:2029 D0 FB BNE $2026
.C:202b A0 00 LDY #$00
.C:202d A9 00 LDA #$00
.C:202f 8D 01 DD STA $DD01
.C:2032 AD 01 DD LDA $DD01
.C:2035 9D 00 21 STA $2100,X
.C:2038 C8 INY
.C:2039 C0 10 CPY #$10
.C:203b D0 FB BNE $2038
.C:203d A9 08 LDA #$08
.C:203f 8D 01 DD STA $DD01
.C:2042 A0 00 LDY #$00
.C:2044 E8 INX
.C:2045 E0 10 CPX #$10
.C:2047 D0 DD BNE $2026
.C:2049 A2 00 LDX #$00
.C:204b BD 00 21 LDA $2100,X
.C:204e 29 40 AND #$40
.C:2050 C9 40 CMP #$40
.C:2052 F0 08 BEQ $205C
.C:2054 A9 2A LDA #$2A
.C:2056 9D 00 04 STA $0400,X
.C:2059 4C 61 20 JMP $2061
.C:205c A9 2E LDA #$2E
.C:205e 9D 00 04 STA $0400,X
.C:2061 E8 INX
.C:2062 E0 10 CPX #$10
.C:2064 D0 E5 BNE $204B
.C:2066 60 RTS
Biscotto | Durata | Descrizione |
---|---|---|
cookielawinfo-checkbox-analytics | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics". |
cookielawinfo-checkbox-functional | 11 months | The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional". |
cookielawinfo-checkbox-necessary | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary". |
cookielawinfo-checkbox-others | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other. |
cookielawinfo-checkbox-performance | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance". |
viewed_cookie_policy | 11 months | The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data. |