Adattatore USB HID per i joystick del Commodore64 o MegaJoypad Arcade con un PIC18F4550. La scheda EasyUSB in anteprima. Le Microchip Application Libraries.
![adattatore_USB_joystick_C64](https://www.settorezero.com/wordpress/contents/2010/11/adattatore_USB_joystick_C64-300x201.jpg)
Ho il piacere di presentarvi in questo articolo un’altra utilissima scheda di sviluppo realizzata dal buon Mauro Laurenti (www.laurtec.it). Come avrete intuito dal titolo vi dimostrerò come è semplice, utilizzando questa scheda, realizzare da sè un adattatore USB per un vecchio joystick.
Questo articolo vuole anche essere il capostipite di una serie di articoli dedicati ai PIC18. Non mi metterò a spiegare come si utilizzano i PIC18 perchè il corso C18 step-by-step realizzato da Mauro penso sia quanto di meglio disponibile, ed è pure gratuito! Chi già sa utilizzare i pic16 ovviamente si troverà enormemente avvantaggiato e farà il minimo sforzo possibile: le differenze difatti non sono poi molte.
Questo lungo articolo, poi, non ha come destinatari i soli appassionati di retrogaming dal momento che queste informazioni sono molto utili anche per realizzare un joystick ex-novo (sia analogico che digitale) da utilizzare con i moderni giochi per pc ma anche con gli emulatori (MAME ad esempio). Si tratta soltanto di collegare dei pulsanti! L’unica cosa che vi resterà da fare sarà scegliere i colori dei bottoni e dello stick!
![hori_pro_arcade_ex_xbox_360](https://www.settorezero.com/wordpress/contents/2010/11/hori_pro_arcade_ex_xbox_360.jpg)
In ogni caso vi troverete di fronte ad un semplice esempio di come realizzare in maniera davvero rapida una periferica HID piuttosto che un ormai scontato emulatore USB/seriale. Questo articolo è inoltre un punto di partenza per capire come modificare alcune interessanti librerie offerte gratuitamente dalla Microchip.
La EasyUSB è stata studiata specificatamente per imparare ad utilizzare la comunicazione USB sfruttandone appieno tutte le possibilità (alta e bassa velocità, alimentazione da porta USB, alimentazione combinata, dispositivi HID, dispositivi con emulazione seriale, supporto della modalità stand-by ecc).
![easy_usb](https://www.settorezero.com/wordpress/contents/2010/11/easy_usb-300x201.jpg)
In particolare, proprio per quanto riguarda la delicata questione dell’alimentazione, la EasyUSB presenta particolari accorgimenti che permettono di rendere la propria applicazione piuttosto versatile consentendole di prelevare l’alimentazione sia dalla porta USB che da una fonte esterna escludendo in automatico l’alimentazione da USB senza interruzioni di corrente. A tal scopo sulla scheda sono presenti 5 transistor pmos, 4 dei quali “programmabili”, nel senso che possono essere pilotati direttamente dal pic per impostare le modalità di funzionamento.
E’ inoltre possibile sfruttare la scheda anche senza avere un programmatore! Potete difatti richiedere a Mauro un PIC18F4550, da utilizzare con la scheda, con un bootloader precaricato, che vi consentirà di caricare i vostri programmi sulla scheda utilizzando unicamente la comunicazione USB e un apposito programma.
Per maggiori informazioni su come avere la EasyUSB, come la si utilizza, come funziona il bootloader ecc vi rimando alla pagina ufficiale.
Come potete vedere dalle foto, la scheda, per le connessioni col mondo esterno, utilizza un connettore a 40 pin che segue la stessa piedinatura di quello presente sulla FreedomII il che la rende espandibile con le apposite schede di espansione utilizzando un comune cavetto flat del tipo utilizzato sui PC per collegare le periferiche IDE (o, come va in voga dire adesso, PATA).
Dal momento che sulla scheda di espansione è presente la serigrafia con i collegamenti ai pin del pic e che c’è anche una comoda zona nella quale alloggiare un connettore DB9, utilizzerò, per questa dimostrazione, la Easy USB con una scheda di espansione sulla quale andrò a saldare un connettore DB9 maschio per il collegamento con il joystick del Commodore64 che, come sapete, si connetteva tramite un connettore DB9 femmina.
Faccio sempre riferimento ai Joystick del Commodore64 ma gli appassionati ben sanno che lo stesso tipo di Joystick era utilizzato anche dalle consolle Atari, dai computer Amiga e altri.
Un’altra delle peculiarità di tale scheda è che è 100% compatibile con la scheda di sviluppo PICDEM Full Speed USB prodotta dalla Microchip ed utilizzante il PIC18F4550, il che ci facilita in modo enorme il lavoro dal momento che potremo sfruttare le Microchip Application Libraries senza effettuare nessuna modifica sostanziale ai sorgenti.
Indice dei contenuti
Le Microchip Application Libraries
Per poter realizzare il nostro adattatore Joystick (ma anche, come detto prima, per realizzare un normale Joystick, senza dover adattare nulla), abbiamo bisogno del Framework USB messo a disposizione dalla Microchip. L’ USB Framework, insieme a tante altre applicazioni, fa parte delle Microchip Application Libraries (MAL). Stiamo parlando di una nutrita serie di librerie con relativi programmi di esempio, realizzate dai tecnici della stessa Microchip, che permettono di realizzare applicazioni molto avanzate e davvero complesse, tra le quali, appunto, l’utilizzo dei dispositivi USB come periferiche HID.
La libreria si presenta come una serie di cartelle, normalmente installate in C:\Microchip Solutions, all’interno delle quali possiamo trovare davvero tanta roba interessante.
Ogni libreria/applicazione è stata realizzata per più di un dispositivo (si parte dai PIC18 per arrivare ai PIC32, quindi scordatevi i pic 10/12/16), per cui all’interno di ogni directory si può trovare più di un progetto MPLAB (files con estensione MCP).
Queste librerie vengono più propriamente definite Framework perchè i files che la compongono sono strutturati in maniera tale che il risultato venga adattato dinamicamente in base al dispositivo target. Aprendo il main di qualsiasi progetto si può infatti notare come la compilazione segua diverse strade (tramite direttive #define e serie di #if) a seconda del dispositivo target (con dispositivo target intendo l’accoppiata PIC/Scheda di sviluppo).
Cominciamo. Scarichiamo le MAL da questo indirizzo (il link per il download si trova sotto la tabella che riassume i framework presenti nella libreria completa). Dal momento che stiamo sviluppando un programma per PIC18 è necessario avere installato anche il C18 della Microchip, scaricabile in versione Lite (con limitazioni quasi nulle, è la versione che viene anche chimata Student Edition o MPLAB C Compiler for Academic Use – da qualsiasi pagina la scaricate è sempre la stessa versione) da questo indirizzo previa registrazione gratuita obbligatoria al sito della Microchip.
Ovviamente dovete saper programmare i PIC18 ed installare correttamente gli strumenti di sviluppo, ma per questo c’è la guida C18 step-by-step.
Finito di scaricare il file (mettetevi comodi: è intorno ai 170Mb) ci troveremo di fronte ad un file zippato contenente un unico eseguibile. Installiamo pure tutto (ci vorrà un pochetto). Abbiamo ora disponibile in C: la cartella “Microchip Solutions -data revisione-“.
USB Device – HID Joystick
Il progetto che ci interessa è quello contenuto nella cartella USB Device – HID – Joystick. Aprendo tale cartella ci troviamo di fronte ad una cartella “Firmware”, contenente il progetto MPLAB e tutti i files accessori, più qualche altro file di minor interesse e un “joytester.exe” che ci tornerà utile per testare il Joystick che andremo a realizzare.
Prima di andare a fare ogni modifica nelle cartelle dei progetti della MAL, consiglio fortemente di farsi una copia di backup della cartella originale e lavorare su una delle due copie, in maniera tale da tenere sempre “pulito” il progetto originale della Microchip in caso di errori, senza dover scaricare e reinstallare tutto daccapo:
Apriamo quindi la cartella USB Device – HID – Joystick\Firmware ed andiamo ad aprire il progetto MPLAB adatto per la nostra Easy USB, ovvero quello che si chiama USB Device – HID – Joystick – C18 – PICDEM FSUSB.mcp
Nella MAL, tutti i progetti aventi la dicitura PICDEM FSUSB (che sta per Full Speed USB) possono essere utilizzati, senza adattamenti, anche sulla EasyUSB.
Una prima modifica che possiamo andare a fare è quella del Linker. Se avete studiato per bene il corso per C18 scritto da Mauro, sapete bene che il Linker è un file che descrive le locazioni di memoria utilizzate dal PIC scelto. Di default questo progetto contiene un linker modificato che permette di caricare il programma tramite l’utilizzo del bootloader di microchip:
In pratica utilizzando il linker già presente nel progetto, sarà possibile caricare il programma sul PIC senza utilizzare il programmatore ma unicamente usando il cavetto USB e il software bootloader (come detto prima trovate il software e ulteriori informazioni sulla pagina della Easy USB).
Il file linker modificato si trova nella stessa cartella del progetto e si chiama rm18f4550 – HID Bootload.lkr, dargli uno sguardo con un editor di testo e confrontarlo con l’originale può far capire “cosa fa”.
Se invece non vogliamo utilizzare il bootloader (perchè siamo ancora abituati a fare le cose alla vecchia maniera?) ma vogliamo invece utilizzare il sistema classico di programmazione sul connettore ICSP tramite programmatore, dobbiamo necessariamente cambiare il linker e mettere quello originale del pic18F4550. Basta quindi cliccare, in MPLAB, col tasto destro sul file del linker e selezionare “remove”. In realtà non c’è bisogno di caricare il file di linker originale perchè questa operazione viene eseguita da MPLAB in automatico.
In ogni caso, i file di linker originali si trovano nella cartella C:\MCC18\bin\LKR
Bisogna anche disattivare la funzionalità di booloader. Nel file HardwareProfile – PICDEM FSUSB.h bisogna commentare la riga 82:
82 | #define PROGRAMMABLE_WITH_USB_HID_BOOTLOADER |
Quindi, ricapitolando:
- se vogliamo utilizzare il bootloader, bisogna usare il linker modificato (rm18f4550 – HID Bootload.lkr) e assicurarsi che non sia presente il commento alla riga 82 del file HardwareProfile – PICDEM FSUSB.h.
- se NON intendiamo utilizzare il bootloader, dobbiamo rimuovere il linker modificato (mancando il linker standard, MPLAB lo includerà in automatico) e dobbiamo controllare che sia presente il commento alla riga per abilitare il bootloader
Possiamo notare che, cliccando il pulsante make:
il programma viene compilato subito (wow! Non abbiamo dovuto fare proprio nulla!) e nella nostra cartella, dove risiede il progetto, abbiamo il nostro file USB Device – HID – Joystick – C18 – PICDEM FSUSB.hex pronto da caricare sulla scheda usando il pickit (o il vostro programmatore di fiducia) o il bootloader se avete scelto quest’altra strada.
Possibili errori
Se il programma non viene compilato e genera invece degli errori, molto probabilmente non sono stati settati correttamente i percorsi per il compilatore. Consiglio fortemente di installare MPLAB C18 e le MAL nelle cartelle standard e di non spostare nulla, altrimenti far funzionare il tutto comporta il dover cambiare i percorsi in numerosi files e vi assicuro che non è un lavoro da poco.
Nel corso C18 step-by-step è descritto chiaramente come vanno settati i percorsi per il compilatore C18
Questo progetto, comunque sia, non utilizza i percorsi definiti in MPLAB ma i suoi (che, se tutto è stato installato senza variare nulla, sono gli stessi). L’errore che, per esempio, è capitato a me è stato il seguente:
Error - could not find file 'c018i.o' |
Questo errore è causato dal fatto che il compilatore si aspetta di trovare i files (linker, compilatore ecc) nei percorsi impostati dal progetto… e invece non trova qualcosa… perchè è stato spostato, perchè non è stato installato nella cartella che lui si aspettava o perchè (come è capitato a me) i percorsi sono si gli stessi ma la lettera della nostra unità non è C:
Per cambiare i percorsi del compilatore (per il solo progetto corrente) bisogna andare nel menù:
Project -> Build Options -> Project |
Nel tab Directories (già selezionato di default) basta cambiare i percorsi selezionando i componenti uno per volta in “Show directories for:”
Controlliamo che i percorsi impostati per ogni elemento siano tutti corretti (ed esistenti!) ed eventualmente cambiamoli facendo doppio click sul percorso:
Test del progetto standard
Dopo aver compilato il progetto standard ed averlo caricato sull’EasyUSB, colleghiamo la scheda tramite cavetto USB al pc. Verrà riconosciuta una periferica Joystick dal nome “Joystick Demo”. Non ci sarà bisogno di installare nulla perchè utilizza i driver nativi di Windows.
Durante l’installazione lampeggia il led LED1. A fine installazione lampeggeranno alternativamente LED1 e LED2.
Lanciamo quel file chiamato Joytester.exe che vi dicevo prima. La demo della Microchip è fatta per gestire unicamente il pulsante S3. Premendo il pulsante S3 possiamo notare come variano alcuni parametri in questa schermata:
In pratica la pressione di S3 causa lo spostamento dello “stick” (l’asse di controllo principale del joystick) in alto a sinistra, sposta il “punto di visione” a destra e causa la pressione del pulsante n°2 (che corrisponde al pulsante X sui joystick che utilizzano la simbologia X-quadrato-cerchio-triangolo).
Vi avviso che il programma Joytester, fornito dalla Microchip, non appare nella barra di stato… Per cui se vi scompare, dovrete abbassare le finestre una ad una (senza utilizzare “Mostra desktop”) per poterlo trovare!
In alternativa, provate ad utilizzare il programma JoyTester realizzato da noi!
Tutta questa “magia” è realizzata all’interno della funzione “Joystick” contenuta in main.c
764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 | //If the button is pressed if(!sw3) { //Indicate that the "x" button is pressed, but none others joystick_input.members.buttons.x = 1; joystick_input.members.buttons.square = 0; joystick_input.members.buttons.o = 0; joystick_input.members.buttons.triangle = 0; joystick_input.members.buttons.L1 = 0; joystick_input.members.buttons.R1 = 0; joystick_input.members.buttons.L2 = 0; joystick_input.members.buttons.R2 = 0; joystick_input.members.buttons.select = 0; joystick_input.members.buttons.start = 0; joystick_input.members.buttons.left_stick = 0; joystick_input.members.buttons.right_stick = 0; joystick_input.members.buttons.home = 0; //Move the hat switch to the "east" position joystick_input.members.hat_switch.hat_switch = HAT_SWITCH_EAST; //Move the X and Y coordinates to the their extreme values (0x80 is // in the middle - no value). joystick_input.members.analog_stick.X = 0; joystick_input.members.analog_stick.Y = 0; //Send the packet over USB to the host. lastTransmission = HIDTxPacket(HID_EP, (BYTE*)&joystick_input, sizeof(joystick_input)); |
come vedete c’è l’elenco di tutti i pulsanti a disposizione (che sono ben 13!). Ogni pulsante è definito da un bit (1=pulsante premuto). Come sempre abbiamo una resistenza di pullup per ogni linea dei pulsanti e la pressione del pulsante porta la rispettiva linea a massa, per cui, per verificare lo stato di pulsante premuto andremo a controllare il livello logico zero.
C’è quindi la posizione dell’ hat switch che corrisponde al punto di visione (POV o point of vision). I valori possibili da assegnare a questa variabile sono definiti a riga 243, dove è anche riportato un link utile dove viene spiegato il modo in cui funzionano i joystick (vi consiglio di andarvelo a leggere se in futuro vi volete fare un Joystick davvero figo):
243 244 245 246 247 248 249 250 251 252 253 | /** DECLARATIONS ***************************************************/ //http://www.microsoft.com/whdc/archive/hidgame.mspx #define HAT_SWITCH_NORTH 0x0 #define HAT_SWITCH_NORTH_EAST 0x1 #define HAT_SWITCH_EAST 0x2 #define HAT_SWITCH_SOUTH_EAST 0x3 #define HAT_SWITCH_SOUTH 0x4 #define HAT_SWITCH_SOUTH_WEST 0x5 #define HAT_SWITCH_WEST 0x6 #define HAT_SWITCH_NORTH_WEST 0x7 #define HAT_SWITCH_NULL 0x8 |
Seguono quindi le due variabili che contengono la posizione dello stick di controllo principale. Sui normali Joystick lo stick principale è analogico per cui qui non abbiamo un bit che identifica la posizione ma un byte che permette il posizionamento in più punti a partire da un centro fino ad arrivare alle due estremità.
L’asse X va da 0 (sinistra) a 0xFF (destra). L’asse Y va da 0 (sopra) a 0xFF (sotto), dovendo noi realizzare un joystick digitale “vecchio stile” ci bastano soltanto le posizione estreme (destra, sinistra, sopra, sotto). La posizione centrale, ovvero quella di riposo, corrisponde, per entrambi gli assi, al valore 0x80.
Modificare i files per realizzare il nostro adattatore Joystick per Commodore64
Il Joystick del Commodore64 ha uno schema molto semplice. Ci sono 5 pulsanti (4 direzione + 1 fuoco) che, premendoli, chiudono a massa il rispettivo contatto, posizionato sul connettore tipo DB9. Quindi se non volete realizzare un adattatore ma realizzarvi un vostro Joystick, vi basta soltanto collegare in maniera opportuna i pulsanti:
Dal pinout potete vedere anche che è presente una linea a 5 volt (pin 7) e due linee per potenziometri (pin 5 e 9) che però noi non andremo ad utilizzare (e comunque non erano usate nemmeno sui normali joystick tipo quickshot). Questi 3 pin venivano utilizzati principalmente sui paddles:
Difatti il SID, che oltre a fornire il fantastico suono del Commodore64 (invidiato da tutti i concorrenti dell’epoca e ancora oggi utilizzato dagli appassionati di musica ad 8 bit), aveva a bordo anche due convertitori A/D ad 8 bit che servivano appunto al collegamento dei potenziometri presenti su questi dispositivi (ci si giocava ad Arkanoid ad esempio).
Quindi non dovremo fare altro che collegare 6 fili: uno per la massa, uno per il tasto di fuoco e 4 per i punti cardinali. Collegheremo i 5 pulsanti ad altrettanti pin della porta B, scelta perchè ha i resistori di pullup integrati il che ci eviterà pure di montare 5 resistenze, rendendo il tutto ancora più semplice.
Usando la scheda di espansione, collegare il connettore DB9 (MASCHIO!) ai pin che fanno capo alla porta B è un gioco da ragazzi.
Se avete un vecchio Joystick buttato da qualche parte, prima di utilizzarlo controllate prima con un tester che funzioni correttamente! Io sul mio, ad esempio, ho dovuto sostituire il connettore DB9 perchè era davvero allo stremo delle forze!
La prima cosa da fare è collegare la linea di massa al pin n°8 del connettore DB9 montato sulla scheda di espansione.
Dopodichè colleghiamo i 5 pulsanti alle porte B facendo riferimento alla serigrafia riportata sulla scheda:
RB2 – Fuoco – pin 6 del connettore DB9
RB3 – Su – pin 1
RB4 – Giù – pin 2
RB5 – Sinistra – pin 3
RB6 – Destra – pin 4
Vi ho fatto pure un’immaginetta per rendere il tutto più chiaro (o almeno lo spero!!):
![collegamento_joystick_a_scheda_di_espansione](https://www.settorezero.com/wordpress/contents/2010/11/collegamento_joystick_a_scheda_di_espansione.jpg)
Bene… Ora dobbiamo impostare queste 5 porte B come ingressi ed abilitare le resistenze di pullup integrate.
Bisogna prima di tutto aggiungere una direttiva a main.c:
42 | #include <portb.h> |
Io l’ho aggiunta all’inizio dove c’è la nota “includes” a riga 38. Questa libreria, come ben spiegato a pagina 119 del corso C18 step-by-step, contiene, tra le altre, anche la funzione per abilitare le resistenze di pullup sulla porta B.
Bisogna quindi fornire le nostre impostazioni. La Microchip per questo, onde evitare di impazzire cercando in quale punto del framework andare ad agganciare i nostri codici, ha previsto una funzione chiamata UserInit, presente a riga 691. In questa funzione andrò ad aggiungere la mia personale inizializzazione:
707 708 709 710 711 | // initialize TRISB TRISB=0b01111100; // RB2-RB6 -> Joystick Switches // activate Pull-Ups resistor on PortB EnablePullups(); |
Per facilitarci le cose, definiamo anche i nomi mnemonici dei pulsanti. Questo l’ho fatto aggiungendo dei defines nel file HardwareProfile – PICDEM FSUSB.h, nel quale sono contenuti i nomi mnemonici anche dei led e dei pulsanti normalmente già presenti sulla scheda:
138 139 140 141 142 143 | // Joystick Switches #define JOYUP PORTBbits.RB3 #define JOYDN PORTBbits.RB4 #define JOYR PORTBbits.RB6 #define JOYL PORTBbits.RB5 #define JOYFIRE PORTBbits.RB2 |
Notate che le porte RB4 e RB5 sono condivise con gli switch sw2 e sw3 della demoboard.
Fatto questo non ci resta che andare a modificare la funzione Joystick in main.c, ora presente a riga 766, in questo modo:
766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 | void Joystick(void) { //If the last transmision is complete if(!HIDTxHandleBusy(lastTransmission)) { // Y if(!JOYUP) // Y -> up { joystick_input.members.analog_stick.Y = 0; //up } else if (!JOYDN) // Y -> down { joystick_input.members.analog_stick.Y = 0xFF; //down } else // Y not moved { joystick_input.members.analog_stick.Y = 0x80; //center } // X if (!JOYR) // X -> right { joystick_input.members.analog_stick.X = 0xFF; // right } else if (!JOYL) // X -> left { joystick_input.members.analog_stick.X = 0; // left } else // X not moved { joystick_input.members.analog_stick.X = 0x80; // center } // BUTTON if (!JOYFIRE) // fire pressed { joystick_input.members.buttons.x = 1; joystick_input.members.buttons.square = 1; joystick_input.members.buttons.o = 1; joystick_input.members.buttons.triangle = 1; joystick_input.members.buttons.L1 = 1; joystick_input.members.buttons.R1 = 1; joystick_input.members.buttons.L2 = 1; joystick_input.members.buttons.R2 = 1; } else // fire not pressed { joystick_input.members.buttons.x = 0; joystick_input.members.buttons.square = 0; joystick_input.members.buttons.o = 0; joystick_input.members.buttons.triangle = 0; joystick_input.members.buttons.L1 = 0; joystick_input.members.buttons.R1 = 0; joystick_input.members.buttons.L2 = 0; joystick_input.members.buttons.R2 = 0; } //Send the packet over USB to the host. lastTransmission = HIDTxPacket(HID_EP, (BYTE*)&joystick_input, sizeof(joystick_input)); } return; }//end joystick() |
Come vedete non facciamo altro che spostare lo stick verso le posizioni estreme se il relativo pulsante risulta premuto, per ogni asse dobbiamo controllarne lo stato con una serie di IF…ELSE perchè dobbiamo riportare l’asse al centro (posizione 0x80) qualora il pulsante non sia premuto, altrimenti, per quell’asse, rimarrà impostata la posizione precedente.
Per il pulsante, ho preferito fare in modo che quando lo si schiaccia, vengano attivati tutti i pulsanti di un normale Joystick per windows, in maniera da stare tranquilli con tutti gli emulatori di Commodore64.
Ovviamente potete capire come tutto questo sia facilmente adattabile a qualsiasi joystick sia per uso su giochi “nuovi” che per uso su emulatori tipo MAME: avete a disposizione tutti i pulsanti che vi servono (ce ne sono ancora altri e li potete trovare nella demo Microchip originale). Se volete realizzare un joystick analogico, invece, vi basterà realizzarvi (o acquistare già pronto) un joystick munito di potenziometro per ognuno dei due assi. Il convertitore A/D farà il resto e provvederete ad assegnare un valore da 0 a 255 alle 2 variabili:
joystick_input.members.analog_stick.x
joystick_input.members.analog_stick.y
Potete quindi compilare e caricare il tutto sulla EasyUSB, connettere tutti i dispositivi tra loro e lanciare il programma Joytester.exe e vedere come si comporta l’interfaccia muovendo lo stick e premendo il pulsante.
… E adesso?
Adesso potete installarvi VICE, scaricare qualche vecchia rom da GameBase64, collegare il vostro nuovo-vecchio Joystick, impostare VICE per utilizzare il Joystick (in porta 1 o 2 a seconda di come richiede il gioco) selezionando il menù Settings -> Joystick:
Vedete che nella lista a scorrimento compare proprio “Joystick Demo” (con un po’ di pratica riuscirete pure a cambiare il nome alla periferica, ma non posso svelarvi tutti i trucchi altrimenti rischiate di diventare troppo pigri!). In “Select fire button” selezionate il pulsante che avete scelto per il fuoco (se usate la mia demo non modificata potete anche sceglere la selezione “All buttons used as fire” dato che ho impostato tutti i pulsanti come fuoco).
Potete quindi farvi una bella partita al vostro gioco preferito utilizzando lo stesso controller che usavate 20 anni fa!
![cybernoid](https://www.settorezero.com/wordpress/contents/2010/11/cybernoid.png)
Downloads
Sperando di fare cosa gradita ho preparato tutto l’archivio già completo da scaricare, con l’hex già opportunamente compilato. La cartella che verrà fuori dal file zip andrà spostata in “C:\Microchip Solutions v-data revisione-” (in pratica va messa insieme a tutte le altre cartelle facenti parte della MAL) per poter essere ricompilata.
Vi prego di fare attenzione perchè il file che vi faccio scaricare è realizzato per NON fare uso del bootloader. Se volete utilizzare il bootloader vi basta semplicemente includere il file linker rm18f4550 – HID Bootload.lkr al progetto come spiegato sopra e decommentare la riga che lo attiva in HardwareProfile – PICDEM FSUSB.h.
Sorgenti - Adattatore USB HID per Joystick Commodore 64 (577 download)
Datasheet PIC18F4550 / PIC18F2550 (1986 download)