Mame, Raspberry Pi e Jamma

RetroMagazine nr. 4 – Anno: 2018 – Autore: Dante Profeta

…Perché il retro-arcade è una cosa seria
Un paio di settimane prima della scrittura di questo articolo ho ricevuto una telefonata da un caro amico che non sentivo da tempo, felicissimo di avere acquistato il suo primo cabinet da sala giochi di tipo prontoscheda. Memore dei miei successi di oltre dieci anni addietro col mio prontoscheda, mi chiedeva supporto per installare e configurare un PC con Mame.

Oltre un decennio fa in effetti l’unica soluzione per avere Mame su un cabinet arcade era quella di imbottirlo con un PC di fascia medio alta, e di affidarsi a soluzioni come J-Pac e ArcadeVga o affini per l’interfacciamento col connettore Jamma.
Di acqua ne è passata sotto i ponti da allora, e altre soluzioni come Pandora’s sono emerse grazie all’aumentare della potenza di calcolo ed ad un’integrazione sempre più vicina al limite fisico consentito.

Tuttavia a me piace percorrere le strade meno battute e così ho colto l’occasione per sperimentare.

Dal 2007 bazzico, anche se con frequenza sporadica, il forum ArcadeItalia, e il caso volle che qualche settimana prima della telefonata del mio amico mi imbattessi proprio nel thread dell’adattatore Raspberry Jamma dell’ottimo Vincenzo Bini, basato proprio sul Gert VGA e con uscita video a 15KHz nativa.

L’idea di mettere assieme Raspberry Pi 3 e l’adattatore Jamma di Bini mi è subito piaciuta e aspettavo l’occasione giusta per sperimentarla e verificarne i pregi e i limiti.

Ordinati dunque i pezzi necessari ho fatto i primi esperimenti con la distribuzione RetroPie, che però in contrasto con le buone intenzioni di essere semplice da installare, si è verificata un inferno da customizzare con le configurazioni che avevo in mente, soprattutto per via di uno strano bug che non mi permetteva di mappare i pulsanti del pannello di gioco visti attraverso il controller emulato dalla scheda Jamma del bravo Vincenzo Bini.

Non mi sono mai piaciuti gli ambienti chiusi, belli e pronti, dove tutto è preconfezionato, perché si comportano come treni posti su rotaie, diventando ostici se non addirittura refrattari a qualunque tipo di deviazione dal percorso prestabilito.

Volendo dunque restare un semplice utente consumatore, ma con un bagaglio di esperienze trentennale come sistemista Unix, con delle esigenze del tutto personali, e non avendo intenzione di fare il salto della staccionata diventando un contributore attivo del progetto RetroPie, ho rapidamente deciso di abbandonarlo e di ripartire dalla distribuzione standard Raspbian di base e installare e configurare ciò che è strettamente necessario per far funzionare il solo Mame sul cabinet.

Questo articolo è dunque il resoconto fedele di come configurare un Raspberry Pi 3 con l’adattatore Jamma di Bini per giocare al meglio con Mame sul cabinet da bar.

Cosa ci occorre
Oltre al Cabinet Arcade con Monitor CRT da 15 KHz o un provaschede, anche noto col nome di Supergun,  da collegare a un televisore rigorosamente a tubo catodico, ci occorre un Raspberry Pi 3 modello B, una microSD e una scheda Raspberry Jamma di Vincenzo Bini.

Per le configurazioni iniziali una-tantum ci occorre una tastiera USB, un monitor HDMI, una connessione di rete, e un computer o laptop dotato di un dispositivo per la lettura/scrittura di SD o di microSD.

Raspbian
L’installazione di Raspbian Stretch Lite su microSD dipende dal S.O. e dal computer che utilizzate. Sul sito di Raspberry Pi nella sezione Download è ben documentata.

Il mio suggerimento è quello di utilizzare una microSD da 32 GB tra quelle supportate per contenere un set completo di ROM di Mame, esclusi i CHD si intende. Dimensioni inferiori risulterebbero insufficienti per contenerle tutte, mentre per includere anche i CHD non basterebbe una microSD da 64 GB.

La prima cosa da fare è quella di collegare Raspberry a un monitor HDMI, ad una tastiera USB, e alla LAN domestica con un cavo di rete o una connessione Wi-Fi. Il mouse non ci serve.

Inserita la microSD con Raspbian nel Raspberry Pi 3, al primo boot il sistema provvederà ad espandere il filesystem ext3, utilizzando tutto lo spazio disponibile sulla microSD.

Raspbian si riavvierà in automatico e ci proporrà il classico confortante prompt col cursore lampeggiante tipico delle shell Unix.

Raspberry, e Raspbian, per natalità, hanno un cuore che batte per la bandiera anglosassone, e lo dimostrano immediatamente col layout di tastiera la localizzazione tutta in English UK.

Non so voi, ma io che sono nato e cresciuto con il Commodore 64 prima, e con Amiga poi, ho sempre apprezzato il layout delle tastiere americane, e non avendo mai dovuto fare il dattilografo, ma il sistemista/programmatore per professione, ho sempre ricercato e utilizzato solo tastiere americane English US.

Il vantaggio delle tastiere English US è quello di avere mappati direttamente i tasti dei caratteri speciali ~, {, }, [, ], necessari per la navigazione su shell Unix, per la programmazione script sh, e per i linguaggi C-style.

La ~ (tilde) ad esempio, sotto Unix significa Home, e ci consente di fare sempre riferimento alla nostra home directory. So che è possibile ottenere questo e gli altri caratteri su PC con delle combinazioni di tasti, ma non avendo mai utilizzato tastiere italiane non mi sono mai posto il problema di imparare le sequenze.

Il nostro primo passo nelle configurazioni di base sarà dunque quello di localizzare Raspbian per il nostro ambiente locale, cominciando dal TimeZone, passando dal linguaggio di sistema settando opportunamente una variabile d’ambiente necessaria per l’installazione e l’utilizzo dei programmi, e finendo al layout di tastiera, per me English US, ma voi potete anche metterlo in Italiano standard se preferite e se vi è più congeniale, consapevoli delle limitazioni su descritte. Ecco i passaggi necessari.

> sudo raspi-config

Entrate nel submenu “Localisation Options”. Cominciamo con impostare l’ora corretta:

Selezionate  “Change Timezone”; quindi “Europe” e infine navigate fino a “Rome”. Selezionate “Ok” e tornate al menu` di Localisation.

Selezionate “Change Locale”, deselezionate la voce “en_GB.UTF-8 UTF-8” e scegliete invece “en_US.UTF-8 UTF-8”. Questo passaggio e` importante che sia così perché verrà riflesso nella variabile d’ambiente LANG che serve per diverse ragioni.

Infine è il momento tanto atteso della tastiere:

Sempre da “Localisation Options”, selezionare “Change Keyboard Layout”, quindi “Generic 105-key (Intl) PC”; ci apparirà un elenco di possibili tastiere inglesi che a noi non interessano, pertanto scendete giù fino a selezionare “Other”.

Per chi come me utilizza le tastiere americane: scegliere “English (US)”.

Per chi invece desidera il layout di tastiera italiano: scegliere “Italian”.

A questo punto, visto che siamo nel menù di configurazione di Raspbian è opportuno abilitare l’autologin. Lo utilizzeremo per far partire automaticamente Mame con privilegi da utente invece che con privilegi root se invocato ed eseguito attraverso gli script rc di boot, ovvero gli script che vengono eseguiti all’avvio contenenti l’elenco dei programmi da avviare in background a corollario del S.O.

Dal menu principale selezionare “Boot Options”, quindi “Desktop / CLI” e infine “Console Autologin”.

Dopo un sano e necessario reboot, col comando “sudo reboot”, per riflettere le modifiche apportate alle variabili d’ambiente e verificare il login automatico senza bisogno di inserire username e password, il passo successivo è quello di aggiornare Raspbian all’ultima versione con gli ultimi bug disponibili. Ma prima è necessario connetterci alla rete domestica.

Se si dispone di un cavo di rete l’operazione è immediata per via del DHCP che ci procurerà al volo un indirizzo IP, altrimenti per il Wi-Fi occorrerà effettuare le opportune configurazioni come descritto puntualmente sul sito di Raspberry Pi e riportato come link in calce tra i riferimenti di questo articolo. Io personalmente mi affido sempre al cavo di rete se è possibile.

Stabilita la connessione alla rete (è sempre bene verificarla con un ping ad esempio al dns primario di google: “ping 8.8.8.8”) è bene procedere con l’aggiornamento del S.O.

> sudo apt-get update && sudo apt-get upgrade
> sudo reboot

La configurazione di base procede con l’istruire Raspbian a non attendere all’avvio che sia disponibile una connessione di rete per continuare il boot, altrimenti, a cavo di rete disconnesso dovremo aspettare un certo quantitativo di secondi prima che la ricerca di una connessione di rete vada in timeout, rallentando anche di un minuto il tempo di avvio di Raspbian.

> sudo raspi-config

Selezionare la voce “Wait for Network at Boot” e scegliere “No” nella schermata successiva.

Configurazioni per la gestione remota
Al fine di consentire l’amministrazione di Raspberry da remoto dovremo abilitare SSH e assegnare un indirizzo IP statico per praticità. Ma queste operazioni sono opzionali visto che richiedono la conoscenza di un editor di testo a linea di comando come vi, e potrebbero risultare ostiche a qualcuno di voi.

È comodo, e come vedremo più avanti può risultare indispensabile, abilitare SSH per l’amministrazione da remoto, cosicché non avremo necessità alcuna di infilare una scomoda tastiera dentro il cabinet e dover ricalibrare ogni volta l’area visibile sul monitor CRT per contenere l’intera shell. Con SSH faremo semplicemente uso della connessione alla rete locale domestica, oppure una connessione punto-punto col nostro laptop/pc preferito, nel caso in cui debba essere necessario rimettere mano alle configurazioni o sistemare qualche problema.

> sudo raspi-config

Selezionare “Interfacing Options”, quindi “SSH” e rispondere “Yes” alla schermata successiva.

Sarebbe anche opportuno istruire Raspbian a prendere un indirizzo IP statico, che definiamo noi, nel caso non riuscisse ad ottenerlo via DHCP. In questo modo potremo sempre raggiungerlo via rete e soprattutto risulterà utile nella connessione punto-punto col laptop o col pc.

Per far ciò è necessario l’utilizzo di un editor a linea di comando. Io da sempre uso vi, che richiede però una trattazione a sé, pertanto vi suggerisco di provare a usare “nano” o qualche altro editor a voi più familiare, al fine di aggiungere le seguenti linee nel file di configurazione /etc/dhcpcd.conf, sostituendo gli indirizzi IP corretti alle scritte in grassetto:

# It is possible to fall back to a static IP if DHCP fails:
# define static profile
profile static_eth0
static ip_address=indirizzo_ip_preferito_del_raspberry/24
static routers=gateway_di_rete
static domain_name_servers=8.8.8.8
# fallback to static profile on eth0
interface eth0
fallback static_eth0

Poiché faremo in modo che alla partenza di Raspbian, all’autologin dell’utente di default pi, parta automaticamente mame, avremo bisogno di un account di servizio con privilegi sudo per fare login da remoto in caso di necessita.

Creiamo prima l’utente “service”

>  sudo adduser service

Imporre una password per l’utente “service” e confermarla; quindi fornire le informazioni opzionali sull’utente.

Attribuiamogli la possibilità di eseguire comandi come root (sudo).

> usermod -aG sudo service

Testiamo che riusciamo a fare login come “service”

> su – service

Immettiamo la password che abbiamo scelto prima; una volta dentro come “service” torniamo al nostro utente “pi” di default:

> exit

Il Pendrive USB come strumento per l’import dei file di configurazione:

Per chi avesse difficoltà nell’utilizzo di vi, suggerisco di editare o creare i file di configurazione con notepad (blocco note) o simile su Windows, e con TextEdit o simile su OS X avendo l’accortezza, con quest’ultimo strumento, di salvare i file di testo in formato UTF-8.

In ogni caso, per leggere e scrivere sui pendrive USB può essere necessario installare i driver exfat. Ricordate? Abbiamo scelto la versione Lite di Raspbian per avere giusto l’essenziale, e alcune cose come questa mancano e dobbiamo installarle a mano:

> sudo apt-get install exfat-fuse

A questo punto per montare il pendrive dobbiamo utilizzare il comando:

> sudo mount /dev/sda1 /mnt

Per rimuoverlo occorrerà invocare il comando:

> sudo umount /mnt

Mame, cioè AdvanceMame
La versione di Mame che consiglio di installare è l’italianissima AdvanceMame per Raspberry Pi.

AdvanceMame non ha certo bisogno di presentazioni, ma per chi non la conoscesse dirò brevemente che si tratta di una versione ottimizzata di Mame pensata per girare al meglio con i monitor CRT.

Al momento della scrittura di questo articolo l’ultima versione disponibile è la 3.6, e sebbene sul sito viene riportato che è basata su Mame 0.106, il romset completo richiede almeno la versione 0.146.

Per installarla occorre scaricare l’archivio dal sito ufficiale e utilizzare gli strumenti di installazione Debian. Il link qui riportato si riferisce alla release 3.6,e potrebbe certamente cambiare in futuro.

> cd ~
> wget https://github.com/amadvance/advancemame/releases/download/v3.6/advancemame_3.6-1_armhf.deb
> sudo dpkg -i advancemame_3.6-1_armhf.deb

Gli eseguibili advmame e advmenu verranno posti nella directory /usr/local/bin, mentre tutti gli altri file e directory, eccetto quelli di configurazione, verranno posti in /usr/local/share/advance. I file di configurazione troveranno posto invece nella directory nascosta “.advance” della nostra home directory.

Come dicevo, nella directory /usr/local/bin troveremo sia advmame che advmenu. Advmenu è un frontend senza fronzoli ma efficace per la selezione dei giochi da eseguire con advmame, che trae vantaggio dagli snapshot e dai filmati mp4 per mostrare al giocatore un breve filmato del gioco che si sta selezionando. La versione 3.6 di advmenu mostra tuttavia un bug audio, almeno nella mia versione di Raspbian, che genera un fruscio di fondo simile alle arancine in frittura quando il filmato torna in loop. Roba di poco conto, e comunque esistono altri frontend grafici più accattivanti come Cabrio, oppure Wah!Cade, clone in python del ben noto MameWAH.

A questo punto possiamo effettuare i primi test e goderci i risultati. Per prima cosa eseguiamo advmame:

> advmame gridlee

e poi testiamo anche advmenu:

> advmenu

Le ROM, i Sample, e gli Snapshots -SAMBA
Nella directory advmame troviamo le solite sottodirectory tipiche di mame. Quelle che a noi interessa popolare sono: ./roms ./samples e ./snap

Come fare? Ci sono diversi metodi, ma quello che ritengo più pratico è di installare un file server SMB, ovvero SAMBA, e montare la directory advmame con accesso pubblico in lettura e scrittura per vederla su Windows o OS X come un folder remoto.

Per fare ciò dobbiamo prima installare SAMBA:

> sudo apt-get install samba samba-common-bin

La configurazione richiede l’edit del file di configurazione /etc/samba/smb.conf, per aggiungere le seguenti righe:

[share]
Comment = AdvanceMame shared folder
Path = /usr/local/share/advance
Browseable = yes
Writeable = Yes
only guest = no
create mask = 0777
directory mask = 0777
Public = yes
Guest ok = yes

A questo punto occorrerà creare una password samba per l’utente pi:

> sudo smbpasswd -a pi

Infine avviamo samba e lo rendiamo sempre disponibile:

> sudo /etc/init.d/samba restart

Per accedere alla directory condivisa da Windows o da OS X è necessario conoscere l’indirizzo IP che ci è stato assegnato dal DHCP oppure verificare quello che abbiamo assegnato noi staticamente col comando:

> ifconfig -a

Su Windows
Premere contemporaneamente i tasti Windows e R; apparirà la finestra Esegui in cui dovremo scrivere:

\\indirizzo_ip_del_raspberry e premere invio.

Su OS X
Dal menu “Go” del Finder selezionate “Connect to Server” e immettete la stringa:

smb://indirizzo_ip_del_raspberry

Comparirà una finestra di autenticazione dove dovremo inserire come username “pi” e come password quelle che abbiamo scelto quando abbiamo invocato il comando smbpasswd su Raspbian.

A questo punto possiamo copiare le ROM di Mame nella cartella roms; i samples nella cartella samples; gli snapshots nella cartella snap.

E con questo abbiamo completato il setup di AdvaceMame, a meno delle configurazioni dei pulsanti e dei joystick, che vedremo tra un po’.

La scheda Jamma

È finalmente giunto il momento di dedicarci alla scheda add-on Jamma che nel frattempo avremo montato sul connettore GPIO, a Raspberry spento e scollegato da qualsiasi cavo. Attenzione alla polarità e a non sbagliare a montarla per non correre il rischio di bruciare qualcosa.

Vi consiglio caldamente di montare la scheda sui distanziatori forniti nel kit per evitare che possa adagiarsi sul metallo dei connettori del Raspberry e creare un cortocircuito. I perni dei distanziatori che ho ricevuto io non entravano nei quattro fori del Raspberry, pertanto ho dovuto allargare leggermente i fori col trapano e fissare i perni sotto la pcb con dei dadi che tuttavia non sono forniti nel kit.

Per completare il montaggio colleghiamo il cavo USB in dotazione, che servirà per riportare a Raspberry i segnali Jamma dei joystick e dei pulsanti, facendo apparire la scheda Jamma come se fosse un controller da gioco.

Jamma e i 15 KHz
Fino ad adesso abbiamo utilizzato l’uscita video HDMI e non ci siamo preoccupati di come gestire l’output video per la scheda Jamma.

Raspbian utilizza una struttura chiamata overlays per gestire le caratteristiche peculiari di Raspberry Pi. Delle sorte di driver, per semplificare. Gli overlays trovano posto nella directory /boot/overlays.

Assieme agli overlays esiste anche un file di configurazione denominato config.txt che risiede nella directory /boot e contiene i parametri di configurazione dell’hardware. I parametri contenuti nel file config.txt sono assimilabili ai parametri memorizzati nella CMOS del BIOS dei PC. Ad ogni modifica del file config.txt sarà necessario fare un reboot.

Per abilitare l’uscita RGB a 15KHz dobbiamo innanzitutto scaricare e copiare i files vga565-3.dtbo e vga666-6.dtbo nella directory overlays, e aggiungere le seguenti righe di configurazione nel file config.txt:

dtoverlay=pwm-2chan,pin=18,func=2,pin2=19,func2=2
dtoverlay=vga666-6
display_default_lcd=1
dpi_output_format=6
dpi_group=2
dpi_mode=87
# Abilitare la riga di sotto per i Monitor con Sincronismo Positivo
#hdmi_timings=320 1 16 30 34 240 1 2 3 22 0 0 0 60 0 6400000 1
# Abilitare la riga di sotto per i Monitor con Sincronismo Negativo
#hdmi_timings=320 0 16 30 34 240 0 2 3 22 0 0 0 60 0 6400000 1

Il parametro hdmi_timing impone la risoluzione dello schermo e il segnale di sincronismo per il monitor.

Se il nostro monitor si aspetta un segnale di sincronismo positivo allora dovremo abilitare la riga sotto il commento Sincronismo Positivo, altrimenti, se il nostro monitor si aspetta un segnale di sincronismo negativo dovremo abilitare la riga sotto il commento Sincronismo Negativo.

L’abilitazione di una delle due righe è critica. In primo luogo perché appena abilitiamo una delle due escludiamo automaticamente l’uscita video sul connettore HDMI, e quindi non vedremo più nulla sul monitor HDMI che abbiamo ancora collegato.

In secondo luogo per via della scelta tra sync positivo o negativo, perché se abilitiamo il sincronismo errato vedremo sul monitor del cabinet un’immagine fuori sincrono e illeggibile, e non saremo più in grado di editare il file di configurazione.

Detto questo, le elettroniche dei monitor con cui ho sempre avuto a che fare si aspettano un sincronismo positivo, quindi, a meno che non abbiate elettroniche esotiche come quelle dei cabinet Nintendo, è molto probabile che anche il monitor del vostro cabinet abbia bisogno di un segnale di sincronismo positivo.

Tuttavia se non si conosce il tipo di segnale di sincronismo accettato occorrerà procedere per tentativi, che comunque non danneggeranno né il monitor né Raspberry né la scheda Jamma.

Se abbiamo sbagliato a scegliere il tipo di segnale di sincronismo, e se abbiamo abilitato precedentemente SSH basterà accedere a Raspbian da remoto con un client SSH tipo Putty per Windows, o col comando ssh da terminale su OS X, per andare a modificare il file config.txt commentando la riga di sincronismo errata e abilitando l’altra, seguito da un necessario reboot del sistema.

Se invece non abbiamo previsto un accesso da remoto a Raspberry allora siamo costretti ad estrarre la scheda sd, connetterla a un pc, accedere alla partizione /boot che per nostra fortuna è in fat32, ed editare da qui il file config.txt.

Prendete dunque le vostre brave precauzioni prima di procedere.

A questo punto, se abbiamo scelto correttamente il segnale di sincronismo del monitor ci resta un’ultima operazione per la messa a punto del controller integrato nella scheda Jamma: occorre editare il file cmdline.txt e aggiungere “usbhid.quirks=0x2341:0x8037:0x040”

dwc_otg.lpm_enable=0 usbhid.quirks=0x2341:0x8037:0x040 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

Abbiamo praticamente finito, almeno col grosso dell’installazione..

Spegniamo Raspberry invocando la sequenza di shutdown:

> sudo shutdown -h now

Aspettiamo qualche istante che Raspbian completi la sequenza di shutdown, stacchiamo il cavo HDMI e colleghiamo il connettore Jamma al cabinet prontoscheda. Manteniamo collegate la tastiera e il cavo di rete perché ci serviranno ancora.

Diamo corrente al cabinet. Dovremmo riuscire a vedere correttamente l’intera sequenza di boot e infine la shell Raspbian col cursore bianco lampeggiante.

Per curiosità e appagamento per gli sforzi fin qui fatti eseguiamo baldanzosi advmame o advmenu e facciamo un test veloce, per scoprire che dobbiamo ancora mappare correttamente i pulsanti del pannello e le gettoniere.

Configurazione del pannello di controllo
Avviamo advmame con una rom a vostra scelta. Nell’esempio seguente eseguirò Mame con Metal Slug, di cui possiedo la cartuccia originale e la base NeoGeo, anche per fare un semplice confronto.

> advmame mslug

Tenendo la tastiera a portata di mano premiamo il tasto Tab ed entriamo nel menù di configurazione dei dispositivi di Input. Dobbiamo mappare i joystick, i pulsanti e le gettoniere.

Fatta questa operazione torniamo al menu iniziale con Esc ed entriamo nel menu “input general/User Interface” e alla voce “UI Cancel” mappiamo una sequenza di tasti per uscire da advmame e tornare su advmenu per scegliere un altro gioco a cui giocare.

Sul cabinet a tre pulsanti del mio amico io ho scelto la pressione contemporanea dei tre pulsanti del primo giocatore.

Un problema che ho avuto è stato di non riuscire a far salvare le configurazioni se immesse dal menu General Input. Se anche voi avete lo stesso problema vi suggerisco il seguente workaround:

Anziché configurare sotto General Input scegliete la configurare specifica per il gioco in esecuzione.

Finite le configurazioni tornate al prompt dei comandi e andate nella directory nascosta “.advance” nella vostra home directory:

> cd ~/.advance

editate il file di configurazione di AvanceMame:

> vi advmame.rc

Andate fino in fondo al file muovendovi con Ctrl+d; vedrete le vostre configurazioni cominciare con “mslug/input_map”. Rimuovere il prefisso “mslug/” dalle righe facendo in modo che inizino tutte per “input_map” e avrete esportato la vostra configurazione da mslug a globale. Salvate e uscite da vi (:x!)

Boot e autopartenza di AdvanceMame
Ci sono almeno due modi per avviare advmenu al boot. Un metodo è quello di eseguirlo nei file rc di sistema. Questa soluzione la trovo davvero brutta soprattutto perché verrebbe eseguito con privilegi di root.

Il metodo che ho scelto e che preferisco è quello di lanciare advmenu con privilegi utente. Se abbiamo abilitato l’autologin in console per l’utente pi, ciò che dobbiamo fare è aggiungere le seguenti righe alla fine del file nascosto ~/.bashrc

# start AdvanceMenu
exec /usr/local/bin/advmenu

Shutdown?
Ed eccoci infine a una problematica interessante, ovvero come spegnere Raspberry e il cabinet.

Non so se avete posseduto una Amiga con Hard Disk, ma se lo avete avuto vi ricordate di come facevamo lo shutdown? Lo spegnevamo dal pulsante di spegnimento togliendo la corrente. Non c’era nessuna procedura di shutdown. Ma allora perché adesso invece tutti i dispositivi con un S.O., Raspberry incluso, richiedono una procedura di shutdown? È possibile avere un sistema che si possa spegnere semplicemente togliendo corrente come facevamo tanti anni fa? Cosa è cambiato da allora ad ora?

Principalmente ciò che è cambiato nei S.O. moderni è che è stato aggiunto il gestore di memoria virtuale, che serve per utilizzare la memoria di massa come supporto per lo swapping delle pagine dei processi, al fine di poter far girare nella RAM più programmi possibile e anche dati più grandi come ad esempio molteplici immagini raw.

Raspberry Pi 3 dispone di 1GB di RAM, pertanto per far girare X11, ovvero l’interfaccia a finestre, e i programmi come i word processor o i browser web, 1GB potrebbe non bastare di per se, e per tale ragione ci si appoggia sulla memoria virtuale.

Per i giochi che andremo ad emulare con Mame ricadiamo al di sotto delle centinaia di Mega Bytes. Ad esempio i giochi Neo-Geo potenzialmente possono raggiungere al più i 330 Mbit ovvero 41.25 MByte.

Possiamo disabilitare completamente il gestore di memoria virtuale, liberandoci così dalla schiavitù della procedura di shutdown:

> sudo dphys-swapfile swapoff
> sudo dphys-swapfile uninstall
> sudo update-rc.d dphys-swapfile remove

Poiché Linux tiene traccia di tutti gli eventi di sistema, come gli errori, in appositi file di log contenuti nella directory /var/log, dobbiamo fare in modo che la scrittura su questi file non possa causare corruzioni del filesystem nel caso in cui Raspberry venga spento togliendo corrente. Per far questo è opportuno montare la directory /var/log come filesystem temporaneo, ovvero in RAM. Ovviamente i file di log non sopravviveranno al reboot, ma poco ci importa per i nostri scopi. Dobbiamo dunque aggiungere questa riga nel file /etc/fstab:

tmpfs           /var/log        tmpfs   size=1M,noatime         0       0

Con questi due accorgimenti possiamo spegnere Raspberry togliendo la corrente in qualsiasi momento senza preoccupazione di corrompere il filesystem sulla microSD, e vivere un esperienza simulata ogni volta come se fosse davvero una macchina dedicata da bar.

Pixel Perfect:
Ed eccoci alla domanda clou. Perché utilizzare Raspberry Pi 3 al posto di un box Pandora’s, o di un PC con ArcadeVGA o affine? Perché l’uscita GPIO di Raspberry può essere riconfigurata al volo per simulare al meglio persino le risoluzioni native delle schede originali da bar, evitando gli orribili scaling necessari se si mantiene sempre la stessa risoluzione a prescindere da quella del gioco. Fantastico!

Come fare? E` un’operazione abbastanza semplice grazie all’utility advv di AdvanceMame, ma per i dettagli vi rimando alla bellissima guida a riguardo descritta sul forum ArcadeItalia dal bravo Yami, di cui trovate il riferimento in calce a questo articolo.

Insomma, Raspberry Pi 3 ha davvero una marcia in piu`, che assieme alla scheda Jamma di questo articolo, lo rende unico come dispositivo di emulazione per i giochi dei cabinati da sala giochi.

Riferimenti:
Raspberry Pi: https://www.raspberrypi.org
Gert’s VGA Adapter: https://www.raspberrypi.org/blog/gert-vga-adapter/
ArcadeItalia: http://www.arcadeitalia.net
Scheda Jamma: http://www.jammapi.it
Raspbian Stretch Lite: https://www.raspberrypi.org/downloads/raspbian/
Configurazione Wi-Fi: https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md
AdvanceMame: http://www.advancemame.it
Overlays: https://www.jammapi.it/wb/media/overlay.zip
Guida Pixel-Perfect: http://arcadeitalia.net/viewtopic.php?f=79&t=29557

Share

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.