Come costruire una console per il retrogaming utilizzando un Raspberry Pi e gli emulatori open source più famosi, come 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 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:
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 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 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.
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:
Quasi tutto il lavoro di integrazione del software è stato fatto dal 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:
È 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 |
Sono da considerare almeno altre due piattaforme giochi: SCUMM e 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 | 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 | lr-snes9x-next (LibRetro Snes9X) | Basato su Snes9X 1.52+, con numerose ottimizzazioni ed hack per renderlo più veloce. È stato aggiunto il supporto a LibRetro per la configurazione dei comandi. |
Il front-end scelto da Retropie 3.0 per l'avvio dei giochi è Emulation Station.
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:
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:
<?xml version="1.0"?> <inputList> <inputAction type="onfinish"> <command>/opt/retropie/supplementary/emulationstation/scripts/inputconfiguration.sh</command> </inputAction> <inputConfig type="joystick" deviceName="MY-POWER CO.,LTD. USB Joystick"> <input name="start" type="button" id="9" value="1"/> <input name="up" type="axis" id="1" value="-1"/> <input name="a" type="button" id="1" value="1"/> <input name="b" type="button" id="2" value="1"/> <input name="down" type="axis" id="1" value="1"/> <input name="right" type="axis" id="0" value="1"/> <input name="select" type="button" id="8" value="1"/> <input name="left" type="axis" id="0" value="-1"/> <input name="pagedown" type="button" id="7" value="1"/> <input name="pageup" type="button" id="6" value="1"/> </inputConfig> </inputList>
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.
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.
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 <system>
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 </dev/tty
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 <lastplayed>
) 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:
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 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 #174).
Aggiustando le varie misure (sono espresse come percentuale rispetto alla dimensione dello schermo) è stato possibile anche ingrandire l'immagine preview.
L'interfaccia 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 mappatura dei tasti predefinita è adatta all'emulatore MAME (qui una 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 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.
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:
Per riprogrammare l'interfaccia occorre il software 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: winipac_setup.exe.
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.
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/<joystick_name>.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.
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 inptport.c della libreria mame2003-plus-libretro.
MAME4ALL non ha niente di predefinito per i pulsanti n. 5 e 6 del secondo giocatore, si può utilizzare la 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 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 bug in PiFBA così come distribuito nell'immagine SD-Card di RetroPie 3.0: i tasti per il giocatore 2 non funzionano! Vedere questo post e quest'altro. La soluzione quick and dirty è sostituire l'eseguibile /opt/retropie/emulators/pifba/fba2x
con quello che si trova a questo 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
Le due implementazioni di MAME presenti in Retropie 3.0 (AdvanceMAME e 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:
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 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]
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}
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
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.
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 |
In Retropie 3.0 sono presenti tre emulatori di 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 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: 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).
In Retropie 3.0 per Raspberry Pi 2 si trovano diversi emulatori per la Super Nintendo Entertainment System. Alcuni di questi sono compilati insieme alla libreria 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 | 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
.
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.
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 è 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 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 Playing a game with ScummVM.
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 Clrmamepro, il cui principio di funzionamento è il seguente:
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.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: Managing ROMs. Qui una 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:
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.). |
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 |