====== Console MAME con Raspberry Pi ======
[{{.:raspberrypi:console_mame.jpg?direct&400 |Il pannello di controllo della console MAME}}]
Come costruire una console per il **[[wpit>Retrogaming|retrogaming]]** utilizzando un **[[wp>Raspberry Pi]]** e gli emulatori open source più famosi, come **[[wpit>MAME]]** e **FinalBurn Alpha**.
Allo stato attuale (2019) questa realizzazione non utilizza le versioni più recenti né dell'**hardware** né del **software**, tuttavia il risultato è soddisfacente e **perfettamente giocabile** con diversi giochi arcade degli anni '80 e alcuni giochi della famosa piattaforma **[[wpit>Neo Geo]]** degli anni '90.
Il lavoro necessario ha riguardato la **costruzione del pannello**, il **cablaggio** dei joystick e dei pulsanti, la **configurazione** dell'interfaccia Mini-PAC, la scelta e la **configurazione degli emulatori** fra quelli disponibili, la **configurazione di Emulation Station** per l'interfaccia di presentazione e avvio dei giochi. Infine la **selezione delle ROM** più interessanti e giocabili nonché alcune configurazioni ad-hoc richieste da qualche ROM.
Queste le componenti hardware e software utilizzate:
* **Raspberry Pi 2 Model B** - CPU 900MHz quad-core ARMv7-A Cortex-A7, 1 Gb RAM.
* **Mini-PAC Standard** - Interfaccia USB, simula una tastiera e può collegare fino a 32 input digitali (pulsanti o joystick).
* **Retropie 3.0** - È la distribuzione che include tutte le componenti software necessarie per il retrogaming (ad eccezione delle ROM), è basata su Raspbian Wheezy 7.8.
* **Emulation Station v2.0.1A** - È l'interfaccia che consente di scegliere il gioco da eseguire mostrando le miniature e la descrizione.
* **AdvanceMAME 1.2** - Emulatore basato su MAME 0.106, supporta circa 6100 giochi.
* **MAME4ALL Pi** - Emulatore basato MAME 0.37b5, supporta circa 2200 giochi.
* **PiFBA** - Emulatore di giochi Neo-Geo basato su FinalBurn Alpha 0.2.96.71.
* **SNES** - Emulatore Super Nintendo LibRetro Snes9X (lr-snes9x-next). Basato su Snes9X 1.52+ con ottimizzazioni e supporto LibRetro.
* **SCUMM** - Emulatore di giochi ScummVM versione 1.7.0 (2014-07-21).
* **RetroArch** - Libreria LibRetro che dovrebbe consentire di configurare gli input (tasti e joystick) una volta sola per tutti gli emulatori. Purtroppo l'adozione da parte dei vari emulatori è ancora scarsa, infatti l'abbiamo usata solo per configurare l'emulatore SNES.
* **ROM** - Ci siamo procurati una collezione di ROM per MAME **versione 0.106 o superiore**, quindi con **Clrmamepro** abbiamo preparato le ROM esattamente come richiesto dalla due implementazioni di MAME: versione 0.106 e 0.37b5.
===== Il Pannello di Controllo =====
All'interno del pannello di controllo è alloggiata un'**[[#Interfaccia Mini-PAC]]**, quindi il tutto si presenta al computer (in realtà un **Raspberry Pi 2**) come una semplice tastiera USB, ma capace di gestire la pressione multipla dei tasti di due giocatori.
Ho realizzato il pannello di controllo in legno compensato di pioppo da 10 mm; **il materiale non è molto adatto**: praticando i grandi fori da 28 mm **si scheggia facilmente**, inoltre è morbido al tal punto che anche con un unghia è possibile lasciare un segno profondo. Probabilmente un **pannello in [[wpit>Medium-density_fibreboard|MDF]] sarebbe stato molto meglio**.
Lo studio preliminare per la disposizione dei pulsanti e dei joystick è stato fatto su pezzi di cartone usando i modelli trovati su [[http://www.slagcoin.com/joystick/introduction.html|www.slagcoin.com]]. L'obiettivo era avere una console per due giocatori adatta in futuro ad essere inserita in un cabinet da tavolo con un monitor da 17" o 19", quindi **larga circa 50 cm**. Inoltre ho cercato di dare abbastanza spazio per **appoggiare il palmo della mano**, senza però esagerare con le dimensioni.
I vari pezzi sono stati incollati con colla vinilica e avvitati con viti da 20 mm.
{{.:raspberrypi:mame_control_panel_1.jpg?240|Studio preliminare per la disposizione dei pulsanti}}
{{.:raspberrypi:mame_control_panel_2.jpg?240|La strutttura completata}}
{{.:raspberrypi:mame_control_panel_3.jpg?240|Interno della struttura}}
{{.:raspberrypi:mame_control_panel_4.jpg?240|Compensato in pioppo: si scheggia facilmente}}
{{.:raspberrypi:mame_control_panel_5.jpg?240|Prova pulsanti prima della verniciatura}}
===== L'hardware: Raspberry Pi 2 =====
Sebbene la prima versione del Raspberry possa far girare diversi giochi MAME, le maggiori performance del Pi 2 consentono di far girare bene anche gran parte dei titoli Neo-Geo.
Alcune letture interessanti riguardo l'overclock:
* [[http://linuxonflash.blogspot.it/2015/02/a-look-at-raspberry-pi-2-performance.html|Raspberry Pi 2 performance and overclocking]]
* [[https://www.raspberrypi.org/documentation/configuration/config-txt.md|config.txt]]
===== Il software: RetroPie 3.0 =====
Quasi tutto il lavoro di integrazione del software è stato fatto dal [[http://blog.petrockblock.com/retropie/|RetroPie Project]], si tratta di una distribuzione per trasformare il Raspberry Pi in una console per il retrogaming. La distribuzione viene fornita come immagine da copiare sulla SD-card, esiste anche in versione specifica e ottimizzata per il Raspberry Pi 2. Nella distribuzione sono integrati diversi software, tra cui:
* Sistema opetativo **Raspbian** basato su Debian Wheezy.
* **Emulation Station**: il front-end per sfogliare la collezione dei giochi e lanciarli.
* **RetroArch**: implementazione della libreria [[http://www.libretro.com/|libretro]] che consente ad emulatori diversi di utilizzare un device di input (joistick, tastiera, ecc.) facendo una sola configurazione.
* **[[https://github.com/RetroPie/RetroPie-Setup/wiki/MAME|MAME]]**: emulatore di molteplici piattaforme hardware. L'immagine SD-card di Retropie 3.0 include MAME nelle due varianti [[http://www.advancemame.it/|AdvanceMAME]] e [[https://github.com/RetroPie/mame4all-pi|MAME4ALL Pi]].
* **[[https://github.com/RetroPie/RetroPie-Setup/wiki/Neo-Geo|Neo-Geo]]**: emulatore della scheda che ebbe notevole successo nelle sale giochi a partire dal 1990. Nella SD-card di Retropie 3.0 si trova l'implementazione [[http://sourceforge.net/projects/pifba/|PiFBA]], [[https://github.com/libretro/fba-libretro|FBA-libretro]] e [[https://github.com/ymartel06/GnGeo-Pi|GnGeo-Pi]]. Si tratta di ottimizzazioni per il Raspberry Pi di [[http://www.fbalpha.com/|FB Alpha]] e [[http://sourceforge.net/projects/gngeo.berlios/|GnGeo]] rispettivamente.
* Numerosissimi altri emulatori di svariate piattaforme: Atari 2600, Commodore 64, ZX Spectrum, ScummVM, ecc.
==== Gli emulatori in Retropie 3.0 ====
È importante capire che in Retropie 3.0 sono presenti diversi emulatori che - sebbene supportino in alcuni casi gli stessi giochi - possono differire in termini di performance, completezza di emulazione e contenuto dei romset (gli archivi zip contenenti i giochi). In particolare ci interessano i due emulatori basati su MAME (**AdvanceMAME 1.2** e **MAME4ALL Pi**) e l'emulatore Neo-Geo **FB Alpha**.
In Retropie 3.0 l'emulatore **AdvanceMAME 1.2** (basato su MAME 0.106) supporta circa **6100 giochi** mentre **MAME4ALL Pi** (basato MAME 0.37b5) ne supporta circa **2200**. Sebbene AdvanceMAME sia più recente e completo, si è **preferito utilizzare i giochi basati su MAME4ALL** perché tale implemetazione è **più ottimizzata e performante sul Raspberry Pi 2**.
È importante capire anche su **quale engine e versione** è basato ogni emulatore, perché **da questo dipende quali romset sono utilizzabili e quale deve essere il loro contenuto**. Per fare un esempio: il gioco **galaga3.zip** deve contenere file diversi e con nomi diversi a seconda che si usi il motore MAME 0.37b5 oppure il motore MAME 0.106. Questo è il motivo per cui i romset devono essere messi in directory diverse a seconda dell'emulatore con cui vanno usati.
Per fortuna per ogni implementazione è possibile ottenere un **DatFile**, cioè l'elenco completo dei romset supportati e del loro esatto contenuto, completo di checksum. Il software **clrmamepro** è in grado di ricostruire i romset esatti a partire da un DatFile e da una collezione non organizzata di romset, effettuando le necessarie operazioni di selezione dei singoli file, eventuale rinomina e creazione degli archivi zip.
^ Emulator ^ Based on engine ^ ROM path ^
^ AdvanceMAME 1.2 | MAME 0.106 | /home/pi/RetroPie/roms/mame-advmame/ |
^ MAME4ALL Pi | MAME 0.37b5 | /home/pi/RetroPie/roms/mame-mame4all/ |
^ PiFBA | FB Alpha 0.2.96.71 | /home/pi/RetroPie/roms/neogeo/ |
In Retropie 3.0 sono presenti anche alcune implementazioni alternative per MAME e Neo-Geo:
^ Alternative ^ Based on engine ^ Alternative to ^
^ AdvanceMAME 0.94.0 | MAME 0.92u2000 | AdvanceMAME 1.2 |
^ FBA-libretro | FB Alpha | PiFBA |
^ GnGeo-Pi | GnGeo | PiFBA |
Ecco dove ottenere i DatFile per i tre emulatori che ci interessano. In generale gli eseguibili basati su MAME sono in grado di generare essi stessi l'elenco, mentre per FB Alpha è necessario scompattare il file distribuito insieme all'eseguibile:
^ AdvanceMAME | /opt/retropie/emulators/advmame/1.2/bin/advmame -listxml |
^ MAME4ALL Pi | /opt/retropie/emulators/mame4all/mame -listinfo |
^ PiFBA | /opt/retropie/emulators/pifba/fba_029671_clrmame_dat.zip |
=== Altri emulatori interessanti ===
Sono da considerare almeno altre due piattaforme giochi: **[[wpit>SCUMM]]** e **[[wpit>Super Nintendo Entertainment System|Super Nintendo Entertainment System]]**. La prima divenne famosa grazie ai giochi di avventura della //Lucasfilm Games// (//Maniac Mansion//, //Zak McKracken//, ecc.). La seconda invece, costruita alla fine degli anni ottanta, ebbe grande successo per //Super Mario World// e //Street Fighter 2//; su di essa sono stati implementati la gran parte dei videogiochi dell'era 16 bit.
^ Piattaforma ^ Emulatore scelto ^ Note ^
^ SCUMM | [[http://scummvm.org/|ScummVM]] | È la versione 1.7.0 (2014-07-21), l'unica presente in Retropie 3.0. Supporta i giochi anche in qualità più avanzata, cioè quelli creati per hardware FM-TOWNS. |
^ SNES | [[https://github.com/libretro/snes9x2010|lr-snes9x-next]] (LibRetro Snes9X) | Basato su [[http://www.snes9x.com/|Snes9X]] 1.52+, con numerose ottimizzazioni ed hack per renderlo più veloce. È stato aggiunto il supporto a LibRetro per la configurazione dei comandi. |
===== Emulation Station =====
Il front-end scelto da Retropie 3.0 per l'avvio dei giochi è **[[http://emulationstation.org/|Emulation Station]]**.
==== Joystick e tastiera ====
Al primo avvio dell'immagine SD-card di Retropie 3.0 si viene guidati nella configurazione del dispositivo di input. Se si ha un joystick USB sarà sufficiente premere i tasti indicati a video.
I tasti sono nominati secondo la convenzione del controller della PlayStation 3:
{{.:raspberrypi:ps3controller.png?direct&480|PS3 Controller}}
Avendo un controller differente si dovranno mappare i tasti che hanno una funzione equivalente:
^ D-Pad Up, Down, Left, Right | Sono i tasti principali per controllare la direzione. |
^ Start | Nel retrogaming solitamente viene usato per iniziare il gioco con un solo giocatore. |
^ Select | Nel retrogaming solitamente utilizzato per simulare l'inserimento della moneta. |
^ A, B | I due principali pulsanti di azione (sparo, ecc.). |
^ X, Y | Pulsanti per azioni aggiuntive. |
^ Left Bottom, Right Bottom | |
^ Left Top, Right Top | |
^ Left Thumb, Right Thumb | |
^ Left Analog Up, Down, Left, Right | |
^ Right Analog Up, Down, Left, Right | |
La configurazione viene salvata nel file **''/home/pi/.emulationstation/es_input.cfg''**.
La procedura può essere ripetuta premendo il tasto **Menu** (Start) e poi scegliendo **Configure Input**. Presumibilmente se si elimina il file la procedura di configurazione viene ripetuta al boot successivo.
Ecco un esempio del contenuto del file:
/opt/retropie/supplementary/emulationstation/scripts/inputconfiguration.sh
Nel file di configurazione i pulsanti corrispondono agli input **''type="button"''** e l'id è il valore mostrato da ''jstest''. Il joystick - che in ''jstest'' è riportato come //asse// analogico - viene associato a input di **''type="axis"''** oppure di **''type="hat"''**, la corrispondenza tra numerazione di jstest e quella assegnata da Emulation Station non è chiara.
==== Opzioni command line ====
Per modificare le opzioni con cui viene eseguito Emultation Station è necessario editare lo script **''/usr/bin/emulationstation''**, oppure lo script **''/etc/profile.d/10-emulationstation.sh''**. Ad esempio può essere utile passare l'opzione **%%--gamelist-only%%** in modo che vengano elencati solo i giochi nei rispettivi file //gamelists//.
==== Emulatori disponibili ====
Per disabilitare (nascondere) alcuni emulatori dall'interfaccia di Emulation Station è possibile rimuovere ROM e/o script dalle diretcory **''/home/pi/RetroPie/roms/''** oppure commentare le relative sezioni ''%%%%'' dal file **''/etc/emulationstation/es_systems.cfg''**.
La configurazione di Emulation Station che si trova in Retropie 3.0 consente di **riconfigurare al volo l'emulatore** semplicemente **premendo un tasto entro un secondo dall'avvio di un gioco**. La funzione è abbastanza critica perché un tasto di gioco può essere premuto involontariamente durante quel timeout (ricordiamo che l'interfaccia Mini-PAC simula una normale tastiera) pertanto, invece di avviare l'emulatore, verrebbe eseguita la procedura di riconfigurazione. Senza una tastiera collegata è complicato e noioso uscire da tale procedura, basata sulla modalità testo e il programma **dialog**.
Per disattivare questa possibilità è necessario modificare lo script **/opt/retropie/supplementary/runcommand/runcommand.sh**, individuando e commentando la riga:
IFS= read -s -t 1 -N 1 key
==== Modifica di gamelist.xml ====
I metadati di un gioco (descrizione, immagine miniatura, rating, ecc.) sono salvati in alcuni file .xml (uno per ogni emulatore) nelle directory **/home/pi/.emulationstation/gamelists/**.
Emulation Station modifica i metadati dei giochi nel **gamelist.xml** (es. il tag ''%%%%'') sovrascrivendo il file. Pertanto **non si pssono modificare questi file quando il programma è in esecuzione** altrimenti si rischia di perdere le modifiche fatte. Killare il programma o uscire con la voce apposita del Main Menu, quindi interrompere il loop che lo riavvia automaticamente tenendo premuto un tasto (è richiesta una tastiera collegata).
Ricordarsi che Emulation Station viene eseguito **autmaticamente al boot** utilizzando il seguente schema:
- **/etc/inittab** contiene una entry che esegue un login automatico dell'utente **pi** sul terminale **tty1**.
- **/etc/profile.d/10-emulationstation.sh** provvede ad eseguire **emulationstation** se il terminale è **tty1**.
- **/usr/bin/emulationstation** è in realtà un wrapper Bash, che esegue il binario di Emulation Station in loop. Il loop può essere interrotto premendo un tasto.
==== Menu e tema ====
Nel **Menu RetroPie** ci sono diverse voci che è opportuno nascondere una volta effettuate tutte le configurazioni, lasciando ad esempio solo il **Configure WiFi** e **Show IP Address**. Nella directory **''/home/pi/RetroPie/retropiemenu/''** si possono rinominare i vari file **.rp** in **.rp.disabled** per ottenere lo scopo.
Per modificare l'aspetto della lista dei giochi si può **modificare il tema** predefinito (si chiama //simple//) oppure si può crearne uno nuovo. Qui la scarsa [[https://github.com/Aloshi/EmulationStation/blob/master/THEMES.md|documentazione sui temi]].
La directory è **''/etc/emulationstation/themes/simple/''**, c'è un file generale ed uno per ogni sistema (emulatore). Modificando il file generale è stato ad esempio possibile disabilitare l'opzione **forceUppercase** per la descrizione del gioco, che crea dei problemi con le lettere accentate.
Diminuendo l'altezza della textlist //gamelist// è stato possibile correggere un problema della lista dei giochi: l'ultimo elemento in basso viene mostrato parzialmente se l'altezza del box non è esattamente multiplo dell'altezza del font (issue [[https://github.com/Aloshi/EmulationStation/issues/174|#174]]).
Aggiustando le varie misure (sono espresse come percentuale rispetto alla dimensione dello schermo) è stato possibile anche ingrandire l'immagine preview.
=== TODO ===
* FIXME Emulation Station, **Main Menu**: disabilitare Scraper, UI Settings, Configure Input (issue [[https://github.com/Aloshi/EmulationStation/issues/518|#518]]).
===== Interfaccia Mini-PAC =====
L'interfaccia [[https://www.ultimarc.com/control-interfaces/mini-pac-en/|Mini-PAC]] ha un connettore a pettine da 40 poli al quale si possono collegare pulsanti e joystick. Si collega all'host tramite porta USB ed emula una tastiera senza alcun limite di tasti premuti contemporaneamente.
La [[https://www.ultimarc.com/ipac2.html|mappatura dei tasti predefinita]] è adatta all'emulatore MAME (qui una {{.:raspberrypi:mini-pac_keycode-table.pdf|versione PDF}}), ma con il software opportuno è possibile riprogrammarla.
L'interfaccia ha anche un connettore ausiliario al quale è possibile collegare una trackball (dispositivo a due assi) e uno spinner (dispositivo ad un asse).
Qui lo **{{.:raspberrypi:minipac_wiring.pdf|Schema di collegamento Mini-PAC}}**.
Una comoda funzione è la possibilità di utilizzare una combinazioni di tasti, ad esempio per impostazione predefinita permere **Start 1 e Start 2 contemporaneamente equivale al tasto ESC**. Questo consente di risparmiare pulsanti ed evitare pressioni accidentali di tasti speciali.
==== Riprogrammare i pulsanti ====
Ogni **pulsante** collegato alla Mini-PAC produce il codice di un equivalente **tasto** della tastiera. Inoltre esiste una speciale funzione SHIFT per cui la pressione contemporanea di due pulsanti produce codici tastiera aggiuntivi. Per impostazione predefinita la funzione SHIFT è associata al pulsante START1.
L'impostazione predefinita dei tasti è quasi perfetta (segue lo schema di MAME), tuttavia qualche miglioramento è possibile. Ad esempio la combinazione START1 + START2 equivale alla pressione di ESC (che fa uscire dall'emulatore) potrebbe essere premuta per sbaglio quando due giocatori chiedono contemporaneamente la funzione //Continue// di alcuni giochi. Inoltre sul nostro pannello avevamo montato un pulsante collegato direttamente ad ESC, ma era troppo facile premerlo per sbaglio.
Per questo si sono riprogrammati alcuni pulsanti in questo modo:
* Rimossa la funzione di tasto ESCAPE dal pulsante P2-B.
* Cambiato il pulsante con funzione SHIFT da P1-START a P2-B.
* Associato il tasto Enter alla combinazione di pulsanti SHIFT + P1-START.
Per riprogrammare l'interfaccia occorre il software **[[https://www.ultimarc.com/downloads/|WinIPAC]]**, che purtroppo funziona solo con Windows (provato su Windows 7). Il programma con l'emulazione GNU/Linux + Wine si avvia, riconosce la pressione dei pulsanti, ma non funziona la riprogrammazione (neanche dando permessi rw a tutti sul device USB). Qui una copia del programma: {{.:raspberrypi:winipac_setup.exe|winipac_setup.exe}}.
- Avviare WinIPAC con //Esegui come Amministratore//.
- Dal menu //Tools//, //Options// selezionare il modello //32 Input Boards//.
- Dal menu //Tools//, //Test Mode// verificare che la Mini-PAC sia riconosciuta e che i pulsanti funzionino.
- Dal menu //Mode// passare al modo //Keys Assignments Editor// (non occorre salvare).
- Dal menu //View// selezionare //As Table//.
- Cliccare l'etichetta gialla **P1/2 SHIFT**, quindi cliccare sull'etichetta verde **P2-B**, questo riassegna la funzione SHIFT dal pulsante P1-START al pulsante P2-B. Verificare che l'assegnamento sia andato a buon fine passando il puntatore del mouse sull'etichetta gialla.
- Cliccare sotto l'etichetta verde **P2-B**, fare click destro e scegliere //None//. In questo modo il pulsante P2-B non produce più il codice del tasto ESCAPE, ma serve solo come SHIFT.
- Cliccare sotto l'etichetta viola **P1-START** e premere Enter sulla tastiera per associare quel tasto alla combinazione pulsanti SHIFT + P1-START.
- Cliccare su //Program// per riprogrammare l'interfaccia Mini-PAC.
===== Configurazione dei tasti =====
In Retropie 3.0 sono presenti diversi emulatori (versioni diverse, fork con varie ottimizzazioni, ecc.). Essendo programmi diversi ognuno può essere configurato in maniera indipendente, soprattutto nella funzione dei tasti. Esiste il progetto //libretro// che dovrebbe risolvere questo problema: una configurazione centralizzata utilizzata da tutti gli emulatori. Peccato che quelle che interessano a noi, MAME4ALL e PiFBA, non la supportino.
==== Configurazione di RetroArch ====
Nel nostro caso **RetroArch** viene usato solo dall'emulatore **SNES**, nella implementazione **lr-snes9x-next**.
La configurazione di questo front-end consentirebbe di effettuare una sola configurazione dei dispositivi di input (joystick/tastiera) per **tutti gli emulatori che supportano la libreria //libretro//**. Peccato che le due implementazioni di MAME presenti nella SD-card RetroPie 3.0 non supportino //libretro// e nemmeno PiFBA che è l'emulatore predefinito dei giochi Neo-Geo!
Dal menu **RetroPie** si esegue **Configure RetroArch Keyboard/Joystick**; è necessaria una tastiera per completare l'operazione.
La configurazione del joystick viene salvata nel file **/opt/retropie/configs/all/retroarch-joypads/.cfg**.
La configurazione della tastiera viene salvata in **/opt/retropie/configs/all/retroarch.cfg**. Rispetto alla configurazione predefinita bisogna disabilitare (commentare) la riga **input_reset = alt** altrimenti il Player1/Button2 (che MAME vuole mappato sul tasto Left-Alt) provoca il reset del gioco. Inoltre si può attivare l'opzione **input_pause_toggle = p**.
==== Significato dei tasti sulla tastiera ====
Questi i **principali tasti** predefiniti nei due emulatori che ci interessano: **MAME4ALL** e **PiFBA**:
^ MAME4ALL ^ Funzione ^ PiFBA ^
^ 5 | Inserisci moneta giocatore 1 (Select) ^ Tab |
^ 6 | Inserisci moneta giocatore 2 ^ N/A |
^ 1 | Start giocatore 1 (Start) ^ Return |
^ 2 | Start giocatore 2 ^ N/A |
^ ESC | Esci dall'emulatore ^ ESC |
^ Arrows | Giocatore 1, Up, Down, Left, Right ^ Arrows |
^ L-Ctrl | Giocatore 1, pulsante azione n.1 ^ L-Ctrl |
^ L-Alt | Giocatore 1, pulsante azione n.2 ^ Space |
^ Space | Giocatore 1, pulsante azione n.3 ^ L-Alt |
^ L-Shift | Giocatore 1, pulsante azione n.4 ^ L-Shift |
^ Z | Giocatore 1, pulsante azione n.5 ^ Z |
^ X | Giocatore 1, pulsante azione n.6 ^ X |
^ R,F,D,G | Giocatore 2, Up, Down, Left, Right ^ N/A |
^ A | Giocatore 2, pulsante azione n.1 ^ N/A |
^ S | Giocatore 2, pulsante azione n.2 ^ N/A |
^ Q | Giocatore 2, pulsante azione n.3 ^ N/A |
^ W | Giocatore 2, pulsante azione n.4 ^ N/A |
^ N/A (I) | Giocatore 2, pulsante azione n.5 ^ N/A |
^ N/A (K) | Giocatore 2, pulsante azione n.6 ^ N/A |
Nel mondo MAME si è formato un certo consenso sulla mappatura dei tasti della tastiera rispetto ai controlli dei videogiochi. Si può consultare la struttura **inputport_defaults_digital** del file sorgente **{{.:raspberrypi:libretro-inptport.c.txt|inptport.c}}** della libreria [[https://github.com/libretro/mame2003-plus-libretro|mame2003-plus-libretro]].
**MAME4ALL** non ha niente di predefinito per i pulsanti n. 5 e 6 del secondo giocatore, si può utilizzare la [[https://www.ultimarc.com/ipac2.html|mappatura dei tasti dell'interfaccia I-PAC]] (e Mini-PAC) che associa i pulsanti ai tasti **I** e **K** rispettivamente.
:!: L'emulatore **PiFBA non ha la funziona pause**, quindi non sarà possibile mettere in pausa i giochi Neo-Geo. Pare che esista un //service mode// attivabile con L+R+SELECT (vedi il [[https://github.com/RetroPie/pifba/blob/master/readme.txt|readme.txt]]). Il tasto **select** lo abbiamo associato al TAB (cioè il tasto //Inserisci moneta giocatore 1// di MAME), ma L+R come si ottengono?
:!: C'è un **[[https://github.com/RetroPie/pifba/issues/1|bug in PiFBA]]** così come distribuito nell'immagine SD-Card di RetroPie 3.0: **i tasti per il giocatore 2 non funzionano**! Vedere [[http://blog.petrockblock.com/forums/topic/player-2-keyboard-controls-on-pifba-dont-work/|questo post]] e [[http://blog.petrockblock.com/forums/topic/ipac-2-pifba-player-2-controls/|quest'altro]]. La soluzione quick and dirty è sostituire l'eseguibile **''/opt/retropie/emulators/pifba/fba2x''** con quello che si trova a questo [[https://github.com/ian57/Raspicade-configuration-files/blob/master/pifba/fba2x|link]].
Per riconfigurare PiFBA in modo che utilizzi la stessa logica di MAME4ALL è sufficiente editare il file **''/opt/retropie/configs/fba/fba2x.cfg''**:
[Keyboard]
# Get codes from /usr/include/SDL/SDL_keysym.h
A_1=306
B_1=308
X_1=32
Y_1=304
L_1=122
R_1=120
START_1=49
SELECT_1=53
LEFT_1=276
RIGHT_1=275
UP_1=273
DOWN_1=274
QUIT=27
#player 2 keyboard controls, disabled by default
A_2=97
B_2=115
X_2=113
Y_2=119
L_2=105
R_2=107
START_2=50
SELECT_2=54
LEFT_2=100
RIGHT_2=103
UP_2=114
DOWN_2=102
Per configurare anche **GnGeo-Pi** con la stessa mappa tasti di MAME basta editare il file **''$HOME/.gngeo/gngeorc''** (viene creato automaticamente alla prima esecuzione dell'emultatore) e mettere:
# Key configuration
# order : A,B,C,D,START,COIN,UP,DOWN,LEFT,RIGHT
# please see SDL_keysym.h for key definition
# MAME-like configuration for player 1
# p1: L-Ctrl,L-Alt,Space,L-Shift,1,5,up,down,left,right
p1key 306,308,32,304,49,53,273,274,276,275
p1control A=K306,B=K308,C=K32,D=K304,START=K49,COIN=K53,UP=K273,DOWN=K274,LEFT=K276,RIGHT=K275,MENU=K27
# MAME-like configuration for player 2
# p2: a,s,q,w,2,6,r,f,d,g
p2key 97,115,113,119,50,54,114,102,100,103
p2control A=K97,B=K115,C=K113,D=K119,START=K50,COIN=K54,UP=K114,DOWN=K102,LEFT=K100,RIGHT=K103,MENU=K27
===== MAME =====
Le due implementazioni di MAME presenti in Retropie 3.0 ([[http://www.advancemame.it/|AdvanceMAME]] e [[https://github.com/RetroPie/mame4all-pi|MAME4ALL Pi]]) non supportano RetroArch, quindi la configurazione del joistick/tastiera va fatta separatamente per ogni emulatore.
In realtà sono presenti due versioni di AdvanceMAME: la 0.94.0 e la 1.2. Nella configurazione predefinita si usa la 1.2 che è ottimizzata per Raspberry Pi 2. Questa impostazione può essere cambiata in ''/opt/retropie/configs/mame-advmame/emulators.cfg''.
Le ROM vanno copiate nelle rispettive directory (compariranno due sezioni MAME nell'interfaccia di Emulation Station):
* **''/home/pi/RetroPie/roms/mame-advmame/''**
* **''/home/pi/RetroPie/roms/mame-mame4all/''**
Con AdvanceMAME e MAME4ALL Pi è possibile **configurare gli input** (tastiera/joypad) interattivamente, serve avere una tastiera collegata:
- Dopo aver avviato il gioco premere il tasto **Tab**
- Selezionare //Input: General//
- Evidenziare l'azione da mappare e premere Invio, quindi premere il tasto desiderato. Per aggiungere un secondo input (es. la stessa azione si esegue con un tasto della tastiera e con un pulsante del joystick): premere di nuovo Invio e quindi premere il tasto del joystick. Se si desidera rimuovere tutti gli input assegnati: premere Invio e quindi premere Esc.
Le configurazioni di **AdvanceMAME 1.2** vengono salvate all'uscita del programma nel file
* **''/opt/retropie/configs/mame-advmame/advmame-1.2.rc''**
La sintassi è documentata in [[https://www.advancemame.it/doc-advmame|doc-advmame]], ecco un estratto:
input_map[coin1] keyboard[0,5] or joystick_button[0,8]
input_map[start1] keyboard[0,1] or joystick_button[0,9]
input_map[ui_cancel] keyboard[0,esc] or joystick_button[0,10]
input_map[ui_select] keyboard[0,enter] or joystick_button[0,11]
input_map[p1_button1] keyboard[0,lcontrol] or joystick_button[0,1]
input_map[p1_button2] keyboard[0,lalt] or joystick_button[0,2]
input_map[p1_button3] keyboard[0,space] or joystick_button[0,0]
input_map[p1_button5] keyboard[0,z] or joystick_button[0,6]
input_map[p1_button6] keyboard[0,x] or joystick_button[0,7]
input_map[p1_button7] keyboard[0,c] or joystick_button[0,4]
input_map[p1_button8] keyboard[0,v] or joystick_button[0,5]
Alcuni giochi richiedono una configurazione speciale (dal menu si accede a //Input: This Game//), in quel caso la riga di configurazione è come le precedenti, ma preceduta dal nome del romset, ad esempio ''lemmings/input_map[p1_trackball_left] ...''.
Alcuni giochi hanno dei controlli diversi dal joystick digitale: cursori, palette, trackball. Per default vengono emulati dal joystick:
input_map[p1_dial_left] keyboard[0,right] or joystick_digital[0,1,0,0]
input_map[p1_dial_right] keyboard[0,left] or joystick_digital[0,1,0,1]
input_map[p1_paddle_left] keyboard[0,right] or joystick_digital[0,1,0,0]
input_map[p1_paddle_right] keyboard[0,left] or joystick_digital[0,1,0,1]
input_map[p1_trackball_left] keyboard[0,right] or joystick_digital[0,1,0,0]
input_map[p1_trackball_right] keyboard[0,left] or joystick_digital[0,1,0,1]
input_map[p1_trackball_up] keyboard[0,down] or joystick_digital[0,1,1,0]
input_map[p1_trackball_down] keyboard[0,up] or joystick_digital[0,1,1,1]
FIXME Con **AdvanceMAME** e il joystick USB **Lioncast Fighting Stick** non si riesce ad emulare bene i controlli di tipo **dial**, **paddle** e **trackball** (es. nei giochi //Arkanoid//, //Out Run// e //Lemmings// rispettivamente). Quando il joystick viene riconosciuto come //stick// dall'emulatore, l'input non è usabile perché produce un movimento saltellante e non fluido, invece se viene riconosciuto come //hat// funziona correttamente. Per vedere come viene riconosciuto il joystick si utilizza il tool **''advj''** di MAME, per passare da una configurazione all'altra si deve riprogrammare il joypad (vedi paragrafo apposito).
Le configurazioni di **MAME4ALL Pi** vengono salvate in un file binario (non è un file di testo):
* **''/opt/retropie/configs/mame-mame4all/cfg/default.cfg''**
Per cancellare le impostazioni salvate da ciascun gioco (NVRAM, record) basta svuotare le directory:
* **''/opt/retropie/configs/mame-{advmame|mame4all}/{nvram|hi}''**
==== Configurazione AdvacenMAME ====
Una funzione desiderabile è la possibilità di uscire dall'emulatore con il solo tasto ESC, **senza il menu di conferma** (come già avviene in MAME4ALL Pi). Con l'interfaccia Mini-PAC abbiamo associato il codice di ESC solo alla pressione combinata dei tasti SHIFT + START 2, in modo tale che non ci sia il rischio di uscire per sbaglio.
Editare il file di configurazione **''/opt/retropie/configs/mame-advmame/advmame-1.2.rc''** e impostare:
misc_safequit no
==== Configurazione MAME4ALL ====
Le impostazioni effettuate dal menu accessibile con il tasto TAB vengono salvate nella directory **/opt/retropie/configs/mame-mame4all/cfg/**. Viene creato un file per ogni gioco (es. **outrun.cfg**) e un file con le impostazioni predefinite per tutti i giochi chiamato **default.cfg**. Purtroppo non si tratta di file di testo modificabili.
===== Tasti speciali =====
^ AdvanceMAME ^^
^ F12 | Salva una schermata in **$HOME/.advance/snap/**. |
^ TAB | Apre il menu AdvanceMame. |
^ F1 | Help tastiera. |
^ ESC | Esce dall'emulatore. |
^ MAME4ALL ^^
^ TAB | Menu |
^ LibRetro Snes9X ^^
^ F1 | Menu |
===== Neo-Geo =====
In Retropie 3.0 sono presenti tre emulatori di [[wpit>Neo Geo]]: **GnGeo-Pi**, **PiFBA** e **FBA-libretro**. Per impostazione predefinita viene utilizzato PiFBA, per cambiare impostazione modificare il file **''/opt/retropie/configs/neogeo/emulators.cfg''**.
**ATTENZIONE**: PiFBA di RetroPie 3.0 ha un bug per cui **i tasti del giocatore 2 non funzionano**. Vedere sopra per una soluzione.
Qui la guida agli [[https://github.com/RetroPie/RetroPie-Setup/wiki/Neo-Geo|emulatori Neo-Geo in Retropie]].
Le ROM vanno messe nella directory **''/home/pi/RetroPie/roms/neogeo/''**, per creare l'archivio di ROM si può usare Clrmamepro e il .DAT file **''fba_029671_clrmame_dat.zip''** contenuto in ''/opt/retropie/emulators/pifba/''. In alternativa tutti i .DAT file utili per Retropie sono scaricabili qui: [[https://github.com/HerbFargus/retropie-dat/archive/master.zip|master.zip]].
Il file di configurazione per mappare correttamente i tasti del joystick è:
* **''/opt/retropie/configs/fba/fba2x.cfg''**
Sembra che non sia possibile mappare l'azione **QUIT** su un pulsante del joystick, per fortuna esiste la combinazione **SELECT + START** per uscire dall'emulatore.
Per chi volesse utilizzare GnGeo-Pi al posto di PiFBA, la mappatura della tastiera è in ''$HOME/.gngeo/gngeorc'' (vedi sopra).
===== SNES =====
In Retropie 3.0 per Raspberry Pi 2 si trovano diversi [[https://github.com/RetroPie/RetroPie-Setup/wiki/Super-Nintendo-Entertainment-System|emulatori per la Super Nintendo Entertainment System]]. Alcuni di questi sono compilati insieme alla libreria **[[http://www.libretro.com/|Libretro]]** il cui scopo è quello di centralizzare la mappatura dei controlli (tastiera, joystick, ecc.) e renderla disponibile a tutti gli emulatori. Gli emulatori Libretro hanno il nome che inizia per **''lr-''**.
^ lr-snes9x-next | **Versione predefinita** per il Raspberry Pi 2. Basata sulla versione 11.52+ di Snes9X, con supporto LibRetro. |
^ pisnes | Basato su un porting di Snes9X 1.39 (cioè una vecchia versione) ottimizzata per Raspberry Pi. |
^ snes9x | [[http://www.snes9x.com/|Snes9x]] è un emulatore freeware e portabile su diverse piattaforme. |
^ lr-armsnes | È un fork di //pocketsnes// che ha l'obiettivo di sfruttare al massimo le moderne architetture Arm. |
^ lr-catsfc | |
^ lr-pocketsnes | |
L'emulatore predefinito viene configurato in **''/opt/retropie/configs/snes/emulators.cfg''**.
==== File di configurazione ====
Per la configurazione dei controlli (tasti, joystick, ecc.) vedere [[#Configurazione di RetroArch]]. Il file con le impostazioni è **/opt/retropie/configs/all/retroarch.cfg**. In particolare si è personalizzato quanto segue (per avere più o meno lo stesso comportamento dell'emulatore MAME):
input_exit_emulator = escape
input_pause_toggle = p
input_reset = nul
input_menu_toggle = f1
input_enable_hotkey = nul
Inoltre si sono disabilitati i due seguenti comandi che altrimenti erano mappati su **left** e **right**:
input_state_slot_increase = nul
input_state_slot_decrease = nul
Infatti muovendo il joystick a destra o a sinistra compariva un messaggio in sovraimpressione con la dicitura **Save slot: N** dove N è un numero. In quel modo si selezionava uno degli //slot// per il salvataggio del gioco, ma questa azione non è prevista con il nostro pannello di controllo (eventualmente si possono associare altri tasti presenti sulla tastiera). Se si vuole invece disattivare del tutto i messaggi in sovraimpressione si deve impostare **video_font_enable = false**.
==== Menu dell'emulatore ====
Conviene mappare l'azione **input_menu_toggle = f1** (oppure tab) in **/opt/retropie/configs/all/retroarch.cfg**, in modo da poter accedere al menu dell'emulatore solo con una tastiera collegata. Per salvare una schermata del gioco (**screenshot**): //Quick Menu// > //Take Screenshot//. L'emulatore salverà lo screenshot nella directory **/home/pi/RetroPie/roms/snes/** con un nome del tipo **RetroArch-0105-095130.png**.
Se dal menu dell'emulatore si sceglie di salvare la configurazione corrente, viene creato il file **/opt/retropie/configs/snes/snes9x_next_libretro.cfg**. Tali impostazioni sono specifiche per l'emulatore **lr-snes9x-next** e vengono applicate dopo quelle indicate in **/opt/retropie/configs/all/retroarch.cfg**.
===== ScummVM =====
**[[http://scummvm.org/|ScummVM]]** è un motore per far girare alcuni tipi di giochi. È stato originariamente sviluppato per i giochi della Lucas Arts che usavano il sistema di sviluppo SCUMM, ma adesso è in grado di farne girare molti di più. In generale si tratta di avventure grafiche e quindi, a differenza di MAME che può essere utilizzato esclusivamente con il joystick, è praticamente obbligatorio utilizzare **tastiera** e **mouse**.
Durante l'esecuzione di ScummVM si possono utilizzare alcuni [[http://wiki.scummvm.org/index.php/User_Manual/Playing_a_game_with_ScummVM#Hotkeys|tasti o combinazioni]], ecco le principali:
^ Ctrl-F5 | Accede al menu di controllo. |
^ Ctrl-Q | Esci immediatamente dal gioco e dall'emulatore. |
^ Alt-S | Salva uno screenshot del gioco, viene salvato in ''/home/pi/''. |
^ Middle-Click | Con una pressione lunga del pulsante centrale del mouse compare la tastiera virtuale. |
Il motore SCUMM fu portato su diverse piattaforme tra cui Commodore 64, MS-DOS, Amiga e il potente (per quel tempo) **Fujitsu Towns**, una console a 32 bit chiamata //FM-TOWNS Marty//. In generale le caratteristiche hardware delle piattaforme sono:
^ Piattaforma ^ Colori ^ Musica ^
| VGA/DOS | 256 | Tracce MIDI |
| V2/DOS | 16 | |
| FM-TOWNS/FM-TOWNS | 256 | Tracce CD |
L'engine ScummVM è un grado di eseguire i giochi per queste piattaforme, emulando l'hardware originale. In generale la **qualità migliore** è quella dei giochi per FM-Towns, con grafica VGA a 256 colori e tracce da CD-Audio (convertite in file mp3 per l'uso su questo emulatore).
Molti dei giochi SCUMM furono tradotti in varie lingue, ma in generale la //ROM// (in realtà i file che costituiscono il gioco) **contengono una sola lingua**.
I file che compongo il gioco vanno scompattati in una directory dentro **''/home/pi/RetroPie/roms/scummvm/''**, quindi - dopo aver avviato l'interfaccia ScummVM GUI - si esegue l'operazione **//Aggiungi gioco...//**. La virtual machine cerca di indovinare dai file stessi il titolo del gioco, la piattaforma hardware e la lingua, ma a volte sbaglia e i parametri vanno modificati a mano.
Dopo aver //aggiunto// il gioco nella GUI, viene creato un file .svm nella directory radice delle rom. Il file ha lunghezza zero ed ha un nome che è un ID univoco per titolo-piattaforma-lingua, del tipo **monkey-vga-it.svm**. Questo consente di aggiungere i giochi nella ''$HOME/.emulationstation/gamelists/scummvm/gamelist.xml'' e presentarli correttamente in EmulationStation.
I giochi aggiunti nella GUI vengono salvati nel file **''/home/pi/.scummvmrc''**.
Alcuni giochi contengono dei meccanismi di protezione (richiesta codici, ecc.), in alcuni casi l'emulatore è in grado di saltarli o accetta qualunque codice inserito. Vedere questo e altri dettagli sui singoli giochi nella pagina [[http://wiki.scummvm.org/index.php/User_Manual/Playing_a_game_with_ScummVM|Playing a game with ScummVM]].
===== Gestione delle ROM =====
Un concetto fondamentale per le ROM di MAME è che **ogni versione** dell'emulatore ha bisogno di uno **specificio set di ROM**, cioè le ROM di un determinato gioco staranno in un determinato archivio zip (ad esempio **arkanoid.zip**), ma **il contenuto di questo archivio potrebbe essere diverso** a seconda della versione di MAME a cui si riferisce. Ecco il motivo per cui si trovano collezioni di ROM del tipo ''ROMS.-.MAME.v0.109.full'', dove 0.109 è la versione di MAME su cui quelle ROM dovrebbero funzionare.
In generale tuttavia il contenuto degli zip cambia di poco da una versione di MAME all'altra e sarebbe assurdo mantenere innumerevoli romset per ogni versione di MAME utilizzata. Questo è il motivo dell'esistenza del programma **[[http://mamedev.emulab.it/clrmamepro/|Clrmamepro]]**, il cui principio di funzionamento è il seguente:
- Data una particolare versione di MAME si deve recuperare il file **.DAT** dei romset supportati, cioè l'elenco dettagliato di tutti i giochi, le ROM contenute in ogni gioco, i nomi dei file che le contengono, il checksum, ecc. Solitamente tale elenco si estrae direttamente dall'eseguibile di MAME con il comando **''mame -listxml''**. Alcune implementazioni più vecchie (ad esempio MAME4ALL Pi, basata sulla versione 0.37b5) supportano invece l'opzione **''-listinfo''**, che produce un file in formato diverso, ma comunque compatibile con Clrmamepro.
- In una directory si salvano tutti i romset disponibili, senza particolare attenzione a quale versione appartengono, se ci sono duplicati, ecc.
- Con le due condizioni di cui sopra è possibile ricostruire (eventualmente in modo parziale) il romset adatto alla versione di MAME che si ha a disposzione.
Il programma è per Windows, ma gira bene anche su GNU/Linux tramite emulazione Wine (verificato con la versione 4.023 a 32bit).
Questa è una buona guida introduttiva specifica per Retropie: **[[https://github.com/RetroPie/RetroPie-Setup/wiki/Managing-ROMs|Managing ROMs]]**. Qui una **[[http://digilander.libero.it/venturi1975/cmpro.html|Guida CMPRO]]** in italiano.
Molti giochi emulati da MAME sono //cloni// di altri: condividono con il //parent// (originale) molte delle ROM e differiscono solo per alcune di esse. Quando Clrmamepro crea un romset può operare rispetto ai cloni in tre modi diversi:
^ Non-merged Sets | Originali e cloni stanno in archivi zip separati e indipendenti. Lo svantaggio è che file zip differenti possono contenere duplicati delle stesse ROM, sprecando spazio. Tuttavia ciascun file è usabile in modo indipendente. |
^ Split Sets | Originali e cloni sono separati e non c'è duplicazione di ROM: i cloni funzionano solo se sono accompagnati dall'originale. |
^ Merged Sets | Originali e cloni sono contenuti nello stesso archivio zip. Si riduce il numero di file su disco. |
La procedura seguente, da eseguire in **Clrmamepro**, consente di ottenere una collezione di file .zip con le ROM adatte alla versione di MAME che intendiamo usare:
- Avviare il programma e cliccare sul pulsante **Add DatFile...**, indicare il file .DAT relativo alla versione di MAME da usare. Aggiungere il file alla cartella //PROFILES// come suggerito. Il file compare provvisoriamente sotto la cartella //NEW DATFILES//.
- Selezionare il .DAT appena caricato e cliccare su **Load / Update**. Utilizzare le impostazioni di default, accettare la soluzione automatica di eventuali problemi (pulsante //OK TO ALL//).
- Cliccare su **Settings**, selezionare **ROM-Paths** dal menu a discesa e indicare una cartella nella quale ricostruire il ROMset in questione. Gli archivi in questa directory saranno eventualmente eliminati, modificati o aggiunti durante l'operazione di //Scan//. Inizialmente questa directory potrebbe anche essere vuota.
- In **Settings** selezionare **Add-Paths** e aggiungere una o più directory contenenti gli archivi zip dei ROMset. Possono contenere archivi alla rinfusa, duplicati e organizzati in sottodirectory.
- Sempre in **Settings** selezionare **Sample-Paths** e indicare una directory con gli archivi zip dei campioni audio (wav). **ATTENZIONE** il contenuto di questa directory viene alterato durante la fase di //Scan//: i file e gli archivi inutili vengono eventualmente rimossi.
- Chiudere la finestra Settings e cliccare su **Scanner**, eventualmente disattivare la checkbox //Samples// se non abbiamo una directory contenente campioni audio aggiuntivi. Analogo discorso vale per i file CHD (Compressed Hunks of Data) che sono dump di CD-ROM o hard disk, solitamente contenuti in sottodirectory il cui nome corrisponde al nome dell'archivio zip.
- **ATTENZIONE** Se si attiva la funzione di **Fix**, l'operazione **New Scan** ricostruisce i ROMset nelle //ROM-Paths// e gli archivi dei sample nelle //Sample-Paths//, ovviamente alterandone il contenuto. Non viene invece alterato il contenuto delle //Add-Paths//.
- Accertarsi che tutti i check siano attivi (soprattutto //Checksum//, che attiva il controllo del CRC32). Attivare tutti i fix desiderati, i più importanti sono **Missing**, **Unneeded** e **Name**.
- Cliccare **New Scan...**. Al termine dell'operazione una finestra riassume gli eventuali errori: archivi mancanti, ROM mancanti o errate. Chiudere la finestra Scanner.
===== Note su emulazione giochi =====
^ Gioco ^ ROM ^ Note ^
| **Track & Field** | trackfld.zip | Funziona meglio con l'emulatore **AdvanceMame**: il suono è fedele e la risposta dei tasti è adeguata. Con l'emulatore MAME4All invece gli effetti sonori sono riprodotti male e non si riesce ad ottenere buoni risultati con i due tasti //RUN// (è impossibile superare il salto in lungo!). |
| **Out Run** | outrun.zip | Funziona meglio con l'emulatore **MAME4All**. Con AdvanceMAME gli effetti sonori sono difettosi e l'emulazione non è fluida. Attenzione ai tasti! Oltre al pulsante 1 e 2 (**acceleratore** e **freno**, rispettivamente) ci sono anche i pulsanti 3 e 4: **marce basse** e **marce alte** rispettivamente! Con le marce basse è impossibile superare i **193 km/h**, cioè è impossibile completare il primo livello. |
| **Off the Wall** | offtwall.zip | Utilizzabile con l'emulatore MAME4All. La variante **2/3-player upright** prevede due giocatori affiancati con lo schermo verticale, la versione **2-player cocktail** (ROM //offtwalc.zip//) prevede invece due giocatori ai lati opposti dello schermo posto in orizzontale.\\ In ogni caso per giocare in **2 giocatori** il secondo deve usare i tasti del **giocatore 3**, cioè le azioni **Start**, **Up**, **Down**, **Left**, **Right**, **Action1** sono attivate dai tasti **3**, **I**, **K**, **J**, **L**, **RCTRL**.\\ Quindi è opportuno, solo per questo gioco, riprogrammare i tasti scambiando quelli del giocatore 3 con quelli del giocatore 2 (che sono rispettivamente: 2, R, F, D, G, A).\\ Per entrare nel menu di configurazione di MAME4All premere il tasto **Tab**.\\ È opportuno anche impostare //Dip Switches// => //Controls// su **Joysticks** invece di //Whirly-gigs// (che sono i controlli analogici di Atari). Altrimenti c'è il rischio che i tasti emulino gli input analogici, con svariati problemi (inversione degli assi orizzonatale e verticale, sensibilità, ecc.). |
===== Joypad Lioncast Fighting Stick =====
**ATTENZIONE**: Questo controller ha il difetto di presentarsi come joystick analogico, pur essendo digitale. L'emulazione in MAME quindi non è ottimale. Per un miglior funzionamento è opportuno riprogrammarlo come joystick digitale, ma la programmazione non sopravvive allo spengimento.
Si tratta di un dispositivo USB venduto come controller per PlayStation 2 e 3 oppure per PC. Viene identificato in questo modo da ''lsusb'':
ID 0e8f:0003 GreenAsia Inc. MaxFire Blaze2
Il joypad ha due tipi di controlli: un **joystick digitale** a 4 posizioni e **12 pulsanti**, per vedere quali codici genera è possibile lanciare il comando:
jstest /dev/input/js0
Il joystick, sebbene sia digitale, viene riportato sul bus USB come un **controllo analogico con due assi**, l'asse 4 (orizzontale) assume solo tre valori: -32767 con il joystick a sinistra, 0 con il joystick al centro e 32767 a destra. L'asse 5 (verticale) si comporta in maniera analoga. Anche i pulsanti sono identificati da un numero e il loro valore è **OFF** (rilasciato) oppure **ON** (premuto).
Gli assi controllati dal joystick sono **configurabili**: l'impostazione predefinita li associa agli assi 4 e 5 (il LED verde è acceso). Questa impostazione non è compatibile con MAME4ALL Pi; se si tenta di riprogrammare l'input (tasto TAB, ecc.) infatti l'emulatore //non sente// il movimento del joystick.
Per aggirare il problema è possibile riprogrammare il joypad: tenendo premuto il pulsante //TURBO// e premendo il tasto //HOME// si spenge il led verde e gli assi controllati dal joystick diventano 0 e 1. Purtroppo qusta programmazione non è permanente e va fatta ad ogni accensione o riavvio del Raspberry.
Questa è la mappatura dei controlli:
^ Joystick Left, Right | Axis 4: -32767, 0, 32767 |
^ Joystick Up, Down | Axis 5: -32767, 0, 32767 |
^ A (circle) | Button 1 |
^ B (cross) | Button 2 |
^ X (triangle) | Button 0 |
^ Y (square) | Button 3 |
^ Select | Button 8 |
^ Start | Button 9 |
^ L1, R1 | Buttons 4, 5 |
^ L2, R2 | Buttons 6, 7 |
^ L3, R3 | Buttons 10, 11 |
===== Link Web =====
* [[http://www.raspberrypi.org/|Raspberry Pi - An ARM GNU/Linux box for 25$]]
* [[http://mamedev.org/|MAME - Multiple Arcade Machine Emulator]]
* [[http://code.google.com/p/gngeo/|Gngeo - Unix NeoGeo Emulator]]
* [[http://www.progettoemma.net/]] - Database dei giochi supportati da MAME: descrizione, specifiche, ecc. (no ROMs!).
* [[http://www.emuparadise.me/]] - Database giochi supportati da vari emulatori.
* [[http://www.gamesdatabase.org/]] - Altro database di giochi.
* [[http://www.arcade-museum.com/]] - Ulteriore database di giochi, con manuali, flyer, schemi, ecc.
* [[http://scummvm.org/compatibility/]] - Livello di compatibilità dei giochi su emulatore ScummVM.
* [[https://www.scummvm.org/data/screenshots/lec/]] - Screenshot di giochi ScummVM.
* [[http://www.neogeokult.com/versus-us/]] - Prove comparative tra giochi (Neo-Geo, ecc.).
* [[http://www.mameitalia.net/]] - Forum utenti MAME.