
Current version v1.0
INTRODUZIONE
In questo thread si parla del progetto che sto portando avanti nel tempo libero, ovvero un M.A.M.E. basato sulla versione 0.61.
Fondamentalmente è una versione intermedia e matura tra la 0.37b5 e la 0.78 che non è volutamente appesantita dall'ulteriore layer delle versioni Libretro (quindi niente lr- davanti al nome)

Il codice è altamente ottimizzato per ridurre il carico della CPU e funziona su diversi sistemi, ovviamente Raspberry Pi compreso! Per questo ho utilizzato la libreria SDL in modo da poter esser compilato per qualsiasi sistema che la supporti, ovvero Windows, Linux, macOS ecc.
Oltre a ciò rispetto alla versione 0.61 sono stati aggiunti (e all'occorrenza ne verranno aggiunti altri) ulteriori giochi e questo è uno dei motivi per cui si chiama M.A.M.E. 0.61+ SDL

Tra le varie modifiche che man mano vi illustrerò c'è la possibilità di utilizzare artwork in alta risoluzione (formato .lyt, vedere più in basso la sezione apposita).
La storia degli artwork è molto varia. Il supporto inizialmente era solo hardcoded nel driver del gioco, questo fino alla versione 0.60: in parole povere non era possibile aggiungere un, chiamiamolo genericamente, overlay esterno (motivo per cui spesso leggo di persone che chiedono come mai in M.A.M.E. 0.37b5 gli artwork non funzionano seppur presenti nella cartella artwork). La versione 0.61 è stata la prima versione che permetteva l'utilizzo degli artwork in formato .art, artwork che però potevano essere solo in bassa risoluzione. Dalla versione 0.107 invece gli artwork sono supportati (anche in alta risoluzione) in formato .lay.
Il porting regge senza problemi 60 frames al secondo "veri" sui Raspberry Pi, a parte nel primo modello. Per RPi v1 arriva però in aiuto il codice che ho scritto dove, implementando un sistema di frameskipping automatico e dinamico, vengono saltati in background diversi frames al secondo rendendo l'esecuzione sui primi Raspberry Pi praticamente full speed per molti giochi (i nostri occhi fortunatamente non si accorgono se vengono saltati alcuni frames

PC DI SVILUPPO vs RASPBERRY PI V1
Ecco un video con un confronto di esecuzione tra il portatile sul quale sviluppo e il Raspberry Pi v1. Guardare per credere

PC vs Raspberry Pi v1
M.A.M.E. 0.61+ SDL vs lr-mame2003
In questo video viene mostrata la differenza di prestazioni su Raspberry Pi v1 tra lr-mame2003 e il mio emulatore. Direi che lr-mame2003 non regge il contronto

Raspberry Pi v1: lr-mame2003 vs M.A.M.E. 0.61+ SDL
ADAPTIVE DYNAMIC FRAMESKIPPING
Ho cambiato totalmente la logica di frameskipping presente nel M.A.M.E. migliorando notevolmente le prestazioni sui Raspberry Pi v1 e v0. Quando l'emulatore viene chiuso vedrete, tra le altre, queste informazioni:
Codice: Seleziona tutto
End game summary:
Nominal FPS: 60.000000
Virtual FPS: 60.000802
Real FPS: 60.000802
Total play time: 3192.074000 seconds
M.A.M.E. 0.61+ SDL - v1.0
Developed by Francesco Lancioni
RetroPie Italia Forum
www.retropie-italia.it
Quando Virtual FPS e Real FPS coincidono significa che nessun frame è stato saltato durante l'esecuzione
SCANLINES
Le scanlines servono per imitare l'effetto video dei vecchi schermi CRT e saranno attive di default: è possibile aggiungere il parametro noscanlines da riga di comando per non mostrarle, ad esempio
Codice: Seleziona tutto
./mame_rpi4 -rompath /home/pi/RetroPie/roms/mamesdl dino -noscanlines
FRAMEBUFFER
E' possibile impostare la dimensione del framebuffer, ovvero la dimensione della "finestra" in cui verrà mostrato il gioco in modalità fullscreen. Basterà lanciare l'emulatore con i parametri framebuffer-width e framebuffer-height, ad esempio
Codice: Seleziona tutto
./mame_rpi4 -rompath /home/pi/RetroPie/roms/mamesdl dino -framebuffer-width 1280 -framebuffer-height 996
HD ARTWORK
Gli artwork sono quelle grafiche che circondavano il monitor dei cabinati. Il codice sorgente è stato modificato quindi con M.A.M.E. 0.61+ SDL sono utilizzabili gli artwork in alta risoluzione nel formato .lyt. Vi basterà inserire l'immagine in formato .png nella cartella artwork con lo stesso nome del romset (per Final Fight quindi sarà ffight.png) e un file di testo, con estensione .lyt e sempre con il nome del romset (per Final Fight quindi sarà ffight.lyt), con il seguente contenuto autoesplicativo (almeno credo):
Codice: Seleziona tutto
Width="4000" Height="3743"
HoleWidth="2920" HoleHeight="2190"
HoleX="540" HoleY="822"
Codice: Seleziona tutto
./mame_rpi4 -rompath /home/pi/RetroPie/roms/mamesdl dino -hd-artwork
ROMSET AGGIUNTI / MODIFICATI
Rispetto alla versione 0.61 originale al momento sono stati aggiunti/modificati questi romset:
- aligator - Alligator Hunt --> from v0.68
- aligatun - Alligator Hunt (unprotected) --> from v0.68
- bang - Bang! --> from v0.68
- dadandrn - Kyukyoku Sentai Dadandarn (Japan ver JAA) --> from v0.68
- daiskiss - Daisu-Kiss (Ver JAA) --> from v0.68
- dragoonj - Dragoon Might (Ver JAA) --> from v0.68
- fantjour - Fantastic Journey --> from v0.68
- gaiapols - Gaiapolis (Japan ver JAF) --> from v0.68
- gokuparo - Gokujyou Parodius (Ver JAD) --> from v0.68
- le2 - Lethal Enforcers II: Gun Fighters (Ver EAA) --> from v0.68
- le2u - Lethal Enforcers II: Gun Fighters (Ver UAA) --> from v0.68
- maniacsp - Maniac Square (prototype) --> from v0.68
- maniacsq - Maniac Square (unprotected) --> from v0.68
- metamrph - Metamorphic Force (US ver UAA) --> from v0.68
- mtlchmpj - Martial Champion (Japan ver JAA) --> from v0.68
- mystwarr - Mystic Warriors (World ver EAA) --> from v0.68
- mystwaru - Mystic Warriors (US ver UAA) --> from v0.68
- puzldama - Taisen Puzzle-dama (Ver JAA) --> from v0.68
- salmndr2 - Salamander 2 (JAA) --> from v0.68
- sexyparo - Sexy Parodius (Ver JAA) --> from v0.68
- snowbalt - Snow Board Championship (set 2) --> from v0.68
- snowboar - Snow Board Championship (set 1) --> from v0.68
- tbyahhoo - Twin Bee Yahhoo! (Ver JAA) --> from v0.68
- tkmmpzdm - Tokimeki Memorial Taisen Puzzle-dama (version JAB) --> from v0.68
- tokkae - Tokkae Puzzle-dama (Ver JAA) --> from v0.68
- viostorm - Violent Storm (Europe ver EAB) --> from v0.68
- viostrma - Violent Storm (Asia ver AAC) --> from v0.68
- viostrmj - Violent Storm (Japan ver JAC) --> from v0.68
- viostrmu - Violent Storm (US ver UAB) --> from v0.68
- wrally2 - World Rally 2: Twin Racing --> from v0.68
- konamigx - System GX --> from v0.68
NOTA PER RASPBERRY PI
Attualmente (RetroPie v4.7.1) la libreria SDL Image installabile con Raspberry Pi OS (ex Raspbian) (il sistema operativo alla base di Raspberry Pi e quindi di RetroPie) è una versione non recentissima che si appoggia a una versione della libreria libpng (v1.6.36) che contiene un bug. Per poter quindi usare gli artwork in alta risoluzione dovrete compilare entrambe queste librerie dal codice sorgente con alcuni semplici passi.
Scaricate questi archivi, libpng-libpng16.zip e SDL2_image-2.0.5.zip, dopodichè copiateli inSe avete la libreria installata rimuovetela con questo comando:Codice: Seleziona tutto
sudo apt remove --purge libsdl2-image-2.0-0 libsdl2-image-dev
Codice: Seleziona tutto
/home/pi
LIBPNG
Codice: Seleziona tutto
cd /home/pi
unzip libpng-libpng16.zip
cd libpng-libpng16/
./configure
make
sudo make install
sudo ldconfig
Codice: Seleziona tutto
cd /home/pi
unzip SDL2_image-2.0.5.zip
cd SDL2_image-2.0.5/
mkdir build
cd build
../configure
make -j3
sudo make install
sudo ldconfig
CONTROLLI VIA TASTIERASe il vostro Raspberry Pi è connesso a un monitor VGA-DVI, quindi utilizzando per l'audio il jack apposito, nella riga di comando dovete aggiungere il parametro headphones, ad esempio:Codice: Seleziona tutto
./mame_rpi4 -rompath /home/pi/RetroPie/roms/mamesdl dino -headphones
Come di conseuto di default premete Tab per configurare i comandi tramite il menù di configurazione del M.A.M.E. (usate le frecce ed Invio), premete Esc per tornare indietro e, se il menù non è visualizzato, per chiudere l'emulatore. Sempre come default i tasti 5 e 1 servono rispettivamente per inserire i coins e premere Start per il giocatore 1.
I tasti configurabili sono tutte le lettere dalla A alla Z, tutti le cifre da 0 a 9 (tastierino numerico incluso), i tasti funzione da F1 a F12, i tasti Escape, Backspace, Tab, Invio, Spazio, Canc, le frecce direzionali (tastierino numerico escluso), il blocco maiuscole, Shift, Ctrl, Alt (questi ultimi 3 sia destro che sinistro). Tutti gli altri sono stati volutamente esclusi per non creare confusione con la loro differente posizione a seconda del layout tastiera scelto (italiano, inglese ecc.).
Ad esempio potreste usare W, S, A, D, J, K ed L ragionevolmente associabili in un gioco ad Up, Down, Left, Right, Button 1, Button 2 e Button 3 del giocatore 1
CONTROLLI VIA JOYPAD
Potete collegare fino a 4 joypads conteporaneamente e procedere come di consueto alla loro configurazione premendo Tab su una tastiera collegata ad emulatore avviato (di default usate le frecce ed Invio, premete Esc per tornare indietro e, se il menù non è visualizzato, per chiudere l'emulatore). Quando configurate i joypads tramite il menù del M.A.M.E. la configurazione si basa sull'ID che il sistema operativo assegna ai joypads. Quindi al primo avvio collegate i joypads, ogni joypad in una determinata porta USB, e li configurate nel menù del M.A.M.E. come detto sopra. Se durante il gioco scollegate e ricollegate un joypad, o più di uno, anche se cambiate porta USB non avrete nessun impatto sul mapping che avete eseguito, ovvero potrete continuare a giocare con gli stessi joypad associati agli stessi giocatori. La magia funziona a runtime, se però chiudete l'emulatore e lo riavviate dovrete avere i joypads collegati nelle stesse porte USB di quando avete fatto la prima configurazione, soprattutto se utilizzate joypads diversi, XBOX 360, PlayStation ecc.
Questo è un surplus, nessun emulatore si preoccupa di questo fatto lasciando all'utente l'incombenza di non scollegare i joypads durante l'esecuzione. Ha richiesto parecchie righe di codice e un sistema molto complicato di gestione dei dati per i joypads disconnessi, forse ho perso tempo, ma a me piace di più così

ROMSET
Non dovete fare altro che copiare le vostre roms versione 0.61+ (come già accennato usate MAME Set Rebuilder con il file .dat allegato al programma oppure estraetelo direttamente dall'eseguibile come indicato qui) nella cartella roms oppure, se state integrando l'emulatore in RetroPie, nella cartella mamesdl come spiegato più avanti
INTEGRAZIONE IN RETROPIE SU RASPBERRY PI
Se volete integrarlo in RetroPie procedete comse segue. Scaricate il programma dal link presente in basso ed estraetelo sul vostro computer. Sul Raspberry Pi aprite il file es_systems.cfg con questo comando
Codice: Seleziona tutto
sudo nano /etc/emulationstation/es_systems.cfg
Codice: Seleziona tutto
<system>
<name>mamesdl</name>
<fullname>MAME 0.61+ SDL</fullname>
<path>/home/pi/RetroPie/roms/mamesdl</path>
<extension>.zip .ZIP</extension>
<command>cd /home/pi/MAME_0.61+_SDL; ./mame_rpi4 -rompath /home/pi/RetroPie/roms/mamesdl %ROM%</command>
<platform>mamesdl</platform>
<theme>mame</theme>
</system>
Attenzione: nel tag command sostituite mame_rpi4 con il M.A.M.E. compatibile con il vostro Raspberry Pi, ad esempio per un Raspberry Pi v2 scrivete mame_rpi2
Create la cartella mamesdl e la cartella MAME_0.61+_SDL rispettivamente con questi comandi:Attenzione: se utilizzate il file es_systems.cfg personalizzato dovete aggiungere la configurazione in quel file
Codice: Seleziona tutto
mkdir /home/pi/RetroPie/roms/mamesdl
Codice: Seleziona tutto
mkdir /home/pi/MAME_0.61+_SDL
Riavviate EmulationStation (o il sistema)

INTEGRAZIONE IN RETROPIE SU UBUNTU
Come per il Raspberry Pi dovete avere installata la libreria SDL2 insieme a SDL Image, entrambe in versione 32 bit. Poi effettuate una configurazione simile a quella spiegata per Raspberry Pi cambiando il percorso del file es_systems.cfg in base a quello relativo al vostro sistema
VERSIONE WINDOWS
In questo caso vi basterà lanciare da riga di comando l'eseguibile, le librerie necessarie sono contenute nella cartella insieme al M.A.M.E. Per comodità però è consigliabile utilizzare un frontend, uno vale l'altro, se ne volete uno senza fronzoli c'è sempre MAME Simple Frontend che ho personalmente sviluppato
Tenete conto che non è supportata l'opzione dell'interfaccia Original resolution window (poco male in realtà su schermi grandi e ad elevata risoluzione odierni) tra le M.A.M.E. display options
CONCLUSIONISe usate MAME Simple Frontend le cartelle artwork, cfg ecc. devono esser presenti nella stessa cartella che contiene l'eseguibile di MAME Simple Frontend
Non resta niente da aggiungere, che dire...
Buon M.A.M.E. a tutti

Current version 1.0 (27-02-2021):
- All Raspberry Pi (v0, v1, v2, v3, v4)
- Ubuntu (20.04, 64 bit, librerie SDL2 32 bit)
- Windows (10, 64 bit, librerie SDL2 32 bit)
Download link is inside this file (you must be logged):