[DEV] M.A.M.E. 0.61 SDL - Beta3.3

Qui si parla di M.A.M.E.
Rispondi
Avatar utente
Administrator
Site Admin
Messaggi: 213
Iscritto il: gio feb 25, 2016 6:32 pm
Ha ringraziato: 0
È stato ringraziato: 86 volte

[DEV] M.A.M.E. 0.61 SDL - Beta3.3

Messaggio da Administrator »

Available Beta3.3

Immagine

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.

Non sarà un emulatore Libretro, quindi niente lr- davanti al nome e, cosa su cui mi piace puntare, funzionerà (in realtà già lo fa allo stato attuale del codice) su diversi sistemi, Raspberry Pi compreso! Infatti utilizza le librerie SDL in modo da poter esser compilato per qualsiasi sistema che supporti SDL, ovvero Windows, Linux, macOS ecc.

Oltre a ciò, è una versione intermedia e matura tra la 0.37b5 e la 0.78 e non è appesantita dall'ulteriore layer delle versioni Libretro ;-)

Un'ulteriore grande modifica è 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 sui Raspberry Pi, a parte nel primo modello. Per i RPi v0 e 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 :lol:). Per il Raspberry Pi v1 è richiesto (come con gli altri M.A.M.E.) l'overclock, seguite questa guida

ADAPTIVE DYNAMIC FRAMESKIPPING
Ho cambiato totalmente la logica di frameskipping presente nel M.A.M.E. migliorando notevolmente le prestazioni sui Raspberry Pi v0 e v1. Quando l'emulatore viene chiuso vedrete, tra le altre, queste informazioni:

Codice: Seleziona tutto

Screen Width: 1920
Screen Height: 1080
Framebuffer Width: 1920
Framebuffer Height: 1080
Artwork destination width: 1154
Artwork destination height: 1080
Artwork destination x: 383
Artwork destination y: 0
Game/Scanlines destination width: 842
Game/Scanlines destination height: 631
Game/Scanlines destination x: 538
Game/Scanlines destination y: 237

Nominal FPS: 60.000000
Virtual FPS: 60.253063
Real FPS: 60.052219

Total play time: 292.413000 seconds

M.A.M.E. 0.61 SDL - Beta3.3
Developed by Francesco Lancioni
RetroPie Italia Forum
www.retropie-italia.it
Real FPS si riferisce ai frame al secondo mostrati a video, se il valore è identico a Nominal FPS le prestazioni saranno in tutto e per tutto uguali a quelle del cabinato originale. Però attenzione, la magia è questa: Virtual FPS si riferisce ai cicli al secondo del loop principale del gioco, ovvero input, sound, video ecc. Se questo valore è prossimo o identico al valore Nominal FPS le prestazioni percepite saranno identiche a quelle del cabinato originale anche se Real FPS non coincide con Nominal FPS.

Come prova di quanto detto ecco un video con un confronto di esecuzione tra il portatile sul quale sviluppo e il Raspberry Pi v1. Guardare per credere ;-)
https://drive.google.com/file/d/1XLGHF3 ... sp=sharing

Oltre a ciò allego questo ulteriore video per mostrarvi la differenza di prestazioni tra lr-mame2003 e il mio emulatore. Che dire, non c'è paragone! :D
https://drive.google.com/file/d/127u8PJ ... sp=sharing

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
Oltre a ciò nel menù del MAME è possibile configurare un pulsante per l'opzione Scanlines On/Off per attivare/disattivare le scanlines con il MAME in esecuzione premendo semplicemente un pulsante

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
Questo può essere particolarmente utile nel caso in cui avete uno schermo molto grande e volete ridurre la dimensione del gioco. Oppure avete costruito un cabinato arcade ma l'apertura nel legno copre leggermente i bordi dello schermo: utilizzate quindi i parametri appositi e successivamente centrate il framebuffer rispetto all'apertura del cabinato con i comandi posti sul monitor

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"
Fatto ciò basterà lanciare l'emulatore con il parametro hd-artwork, ad esempio

Codice: Seleziona tutto

./mame_rpi4 -rompath /home/pi/RetroPie/roms/mamesdl dino -hd-artwork
Attualmente (RetroPie v4.7.1) la libreria SDL Image installabile con 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.
Se avete la libreria installata rimuovetela con questo comando:

Codice: Seleziona tutto

sudo apt remove --purge libsdl2-image-2.0-0 libsdl2-image-dev
Scaricate questi archivi, libpng-libpng16.zip e SDL2_image-2.0.5.zip, dopodichè copiateli in

Codice: Seleziona tutto

/home/pi
Dal terminale eseguite

Codice: Seleziona tutto

cd /home/pi
e successivamente questi passaggi in sequenza (tra un passaggio e l'altro dovrete attendere un po' di tempo, aspettate che ogni operazione venga completata correttamente):

LIBPNG

Codice: Seleziona tutto

unzip libpng-libpng16.zip
cd libpng-libpng16/
./configure
make
sudo make install
sudo ldconfig
SDL IMAGE

Codice: Seleziona tutto

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 TASTIERA
Come di conseuto di default premete Tab per configurare i comandi tramite menù il 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ì ;-)

INTEGRAZIONE IN RETROPIE
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
e aggiungete in fondo al file questa configurazione

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/MAMESDL; ./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
Attenzione: se utilizzate il file es_systems.cfg personalizzato dovete aggiungere la configurazione in quel file
Create la cartella mamesdl e la cartella MAMESDL rispettivamente con questi comandi:

Codice: Seleziona tutto

mkdir /home/pi/RetroPie/roms/mamesdl

Codice: Seleziona tutto

mkdir /home/pi/MAMESDL
Copiate le vostre roms, versione 0.61 (eventualmente usate MAME Set Rebuilder se non le avete), nella cartella mamesdl e copiate l'eseguibile dell'emulatore, nel nostro esempio mame_rpi4, insieme alla cartelle presenti nell'archivio .zip nella cartella MAMESDL.

Riavviate EmulationStation (o il sistema) ;-)

TEST RAPIDO
Per una prova rapida senza integrazione in RetroPie scaricate il programma dal link presente in basso, estraetelo sul vostro computer, e copiate il file corretto per il vostro hardware (insieme alla cartelle presenti nell'archivio .zip) sul Raspberry Pi, ad esempio in

Codice: Seleziona tutto

/home/pi
Uscite da EmulationStation e nella cartella dove avete copiato l'emulatore digitate:

Codice: Seleziona tutto

./mame_rpiN <nome_romset>
quindi ad esempio per Cadillacs and Dinosaurs su Raspberry Pi v3

Codice: Seleziona tutto

./mame_rpi3 dino
Buon M.A.M.E. a tutti :D

Download link (All Raspberry Pi v0, v1, v2, v3, v4):
Current Beta3.3 version (7-10-2020)
Questi utenti hanno ringraziato l'autore Administrator per il post (totale 5):
GuybrushPadremayiNewtonIonicpaolog
Reputazione: 55.56%
"A volte sono le persone che nessuno immaginava potessero fare certe cose quelle che fanno cose che nessuno può immaginare" A. Turing
_____________________________________________________________
Aiutiamo il forum con una donazione :-)

Hardware:
Raspberry Pi v3 B

Avatar utente
Administrator
Site Admin
Messaggi: 213
Iscritto il: gio feb 25, 2016 6:32 pm
Ha ringraziato: 0
È stato ringraziato: 86 volte

Re: [DEV] M.A.M.E. 0.61 SDL

Messaggio da Administrator »

Claus83 ha scritto:
dom mag 17, 2020 3:09 am
Ciao Guybrush, correggimi se sbaglio..quindi ci sarà un emulatore lr-mame 2002 ? che si potrà usare ovviamente solo con il rom set 0.61...giusto?
Per caso vuoi fare una prova su una versione beta beta beta del porting? Non ho un Raspberry Pi 4 per compilarlo, semmai lo compilo su un Raspberry Pi 3, vediamo come si comporta (ovviamente sarebbe opportuno compilare con i flags di ottimizzazione corretti piattaforma per piattaforma).

Poi semmai ti dico come provarlo, di sicuro ti servirà una tastiera collegata al Raspberry Pi
"A volte sono le persone che nessuno immaginava potessero fare certe cose quelle che fanno cose che nessuno può immaginare" A. Turing
_____________________________________________________________
Aiutiamo il forum con una donazione :-)

Hardware:
Raspberry Pi v3 B

Avatar utente
Claus83
Messaggi: 118
Iscritto il: sab apr 25, 2020 12:12 am
Ha ringraziato: 49 volte
È stato ringraziato: 7 volte

Re: [DEV] M.A.M.E. 0.61 SDL

Messaggio da Claus83 »

Ciao Administrator! Certamente! Ne sono onorato.. :D l’unica cosa è che posso farlo solo la notte..e mi dovrai dire come fare e ti riporto i feedback...intanto preparo il set con mame set rebuilder...a presto
"Che strano gioco... la sola mossa vincente è quella di non giocare..."

dal film "Wargames - giochi di guerra" (1983)
--------------------------------------------------------------------------------------
Raspberry Pi 4 Model B Rev 1.2

Avatar utente
Administrator
Site Admin
Messaggi: 213
Iscritto il: gio feb 25, 2016 6:32 pm
Ha ringraziato: 0
È stato ringraziato: 86 volte

Re: [DEV] M.A.M.E. 0.61 SDL

Messaggio da Administrator »

Claus83 ha scritto:
dom mag 24, 2020 12:12 pm
Ciao Administrator! Certamente! Ne sono onorato.. :D l’unica cosa è che posso farlo solo la notte..e mi dovrai dire come fare e ti riporto i feedback...intanto preparo il set con mame set rebuilder...a presto
Scarica il programma dal primo post del thread ed estrailo in

Codice: Seleziona tutto

/home/pi
Esci da EmulationStation entra nella cartella dell'emulatore e digita:

Codice: Seleziona tutto

./mame <nome_romset>
quindi ad esempio per Cadillacs and Dinosaurs

Codice: Seleziona tutto

./mame dino
Come di conseuto premi Tab per configurare i comandi (usa le frecce ed Invio), premi Esc per tornare indietro e, se il menù non è visualizzato, per chiudere l'emulatore.

Hai un Raspberry Pi 4, è stato compilato sul 3, vediamo intanto se ti funziona (potrebbe non farlo).

Ricordo che è una versione di sviluppo, non un prodotto finito ;-)
"A volte sono le persone che nessuno immaginava potessero fare certe cose quelle che fanno cose che nessuno può immaginare" A. Turing
_____________________________________________________________
Aiutiamo il forum con una donazione :-)

Hardware:
Raspberry Pi v3 B

Avatar utente
Claus83
Messaggi: 118
Iscritto il: sab apr 25, 2020 12:12 am
Ha ringraziato: 49 volte
È stato ringraziato: 7 volte

Re: [DEV] M.A.M.E. 0.61 SDL

Messaggio da Claus83 »

Ciao Administrator, ho provato proprio la rom dino, si avvia istantaneamente in fullscreen..settato i tasti..solo che ho una mini tastiera cinese ed è scomoda per giocarci.. :D
Impressione mia..sia il video che l'audio non sono molto fluidi paragonandolo alla versione sul mame lr 2003..
Per il resto sono a disposizione.. un saluto
"Che strano gioco... la sola mossa vincente è quella di non giocare..."

dal film "Wargames - giochi di guerra" (1983)
--------------------------------------------------------------------------------------
Raspberry Pi 4 Model B Rev 1.2


Avatar utente
Administrator
Site Admin
Messaggi: 213
Iscritto il: gio feb 25, 2016 6:32 pm
Ha ringraziato: 0
È stato ringraziato: 86 volte

Re: [DEV] M.A.M.E. 0.61 SDL

Messaggio da Administrator »

Claus83 ha scritto:
lun mag 25, 2020 2:27 am
Impressione mia..sia il video che l'audio non sono molto fluidi paragonandolo alla versione sul mame lr 2003..
Ciao, mi aspettavo qualche problema visto che non è stato compilato su un Raspberry Pi 4, però partiamo da dati oggettivi.

Per non andare a sensazioni, quantomeno per la parte video, mi dovresti copiare l'output finale che appare nel momento in cui chiudi l'emulatore. Lì vengono indicate queste informazioni:

Codice: Seleziona tutto

Display Width: ...
Display Height: ...
Game FPS: ...
Frames displayed per second: ... (... frames)
Frames skipped per second: ... (... frames)
Last frameskipping value: ... (Higher is better)

M.A.M.E. 0.61 SDL - Beta1
Developed by Francesco Lancioni
RetroPie Italia Forum
www.retropie-italia.it
Se Frames displayed per second è pari, o leggermente superiore, al valore Game FPS la parte video è per forza di cose fluida. Infatti quel valore viene calcolato facendo esattamente il rapporto tra i frames mostrati a video e il tempo di esecuzione durante il quale sono stati disegnati. Non si scappa, se indica circa 60 frames al secondo sono 60 frames al secondo.

Mi aspetto che su un Raspberry Pi 4 il valore Frames skipped per second sia pari a zero visto che lo è sul Raspberry Pi 3. Ad ogni modo però va considerato che i flags passati al compilatore sono per l'hardware del Raspberry Pi 3, per fare un'ulteriore prova potrei provare a compilare il codice senza ottimizzazioni da parte del compilatore.

Intanto fammi sapere
"A volte sono le persone che nessuno immaginava potessero fare certe cose quelle che fanno cose che nessuno può immaginare" A. Turing
_____________________________________________________________
Aiutiamo il forum con una donazione :-)

Hardware:
Raspberry Pi v3 B

Avatar utente
Claus83
Messaggi: 118
Iscritto il: sab apr 25, 2020 12:12 am
Ha ringraziato: 49 volte
È stato ringraziato: 7 volte

Re: [DEV] M.A.M.E. 0.61 SDL

Messaggio da Claus83 »

Buongiorno, eccolo...
Immagine
Ultima modifica di Claus83 il gio giu 11, 2020 1:15 am, modificato 1 volta in totale.
"Che strano gioco... la sola mossa vincente è quella di non giocare..."

dal film "Wargames - giochi di guerra" (1983)
--------------------------------------------------------------------------------------
Raspberry Pi 4 Model B Rev 1.2

Avatar utente
Guybrush
Site Admin
Messaggi: 2114
Iscritto il: gio feb 25, 2016 6:33 pm
Ha ringraziato: 41 volte
È stato ringraziato: 80 volte

Re: [DEV] M.A.M.E. 0.61 SDL

Messaggio da Guybrush »

È interessante che ti abbia saltato alcuni frames, visto che anche sul mio Raspberry Pi 3, come diceva Administrator, non succede.

Ho qualche minuto, mi faccio girare le opzioni e te lo ricompilo io senza flags di ottimizzazione per il Pi 3
"Dobbiamo costruire computer per le masse, non per le classi" J. Tramiel
_____________________________________________________________
Aiutiamo il forum con una donazione :-)

Hardware:
Raspberry Pi B (x2)
Raspberry Pi 3B
Raspberry Pi Zero W
Raspberry Pi 3A+

Avatar utente
Claus83
Messaggi: 118
Iscritto il: sab apr 25, 2020 12:12 am
Ha ringraziato: 49 volte
È stato ringraziato: 7 volte

Re: [DEV] M.A.M.E. 0.61 SDL

Messaggio da Claus83 »

Una domanda...SDL nel nome dell'emulatore sta per simple directmedia layer? magari non c’entra nulla..ma ho notato che nel menù di setup di retropie c'è installato solo la versione 2... ho re installato da source...poi ho riavviato e fatto ripartire sempre dino...ripeto magari non c’entra nulla..semplice curiosità...ma ho visto che i valori sono diversi..
Immagine
Ultima modifica di Claus83 il gio giu 11, 2020 1:17 am, modificato 1 volta in totale.
"Che strano gioco... la sola mossa vincente è quella di non giocare..."

dal film "Wargames - giochi di guerra" (1983)
--------------------------------------------------------------------------------------
Raspberry Pi 4 Model B Rev 1.2

Avatar utente
Administrator
Site Admin
Messaggi: 213
Iscritto il: gio feb 25, 2016 6:32 pm
Ha ringraziato: 0
È stato ringraziato: 86 volte

Re: [DEV] M.A.M.E. 0.61 SDL

Messaggio da Administrator »

Claus83 ha scritto:
mar mag 26, 2020 12:34 am
Una domanda...SDL nel nome dell'emulatore sta per simple directmedia layer?
Sì, SDL sta proprio per Simple Directmedia Layer.

Il cuore del codice M.A.M.E. non è stato toccato a parte qualche, diciamo, "mistake" veramente stupido presente qua e là che però non influenzava il suo funzionamento. Tutta la parte che utilizzava le librerie di Windows per creare una finestra, mostrare l'immagine, emettere un suono, acquisire input ecc. è stata riscritta utilizzando le librerie SDL.

In questo modo il M.A.M.E. diventa multipiattaforma, quindi può essere compilato per Linux (compresa architettura ARM come Raspberry Pi), Windows, macOS e tutti gli altri sistemi operativi che supportano SDL.

Detto ciò potresti eseguire questo comando

Codice: Seleziona tutto

sdl2-config --version
e indicarmi l'output?

Tra poco allego un video del funzionamento su Raspberry Pi 3. Sui nostri Raspberry non viene saltato nessun frame. Nel primo post del thread trovi la Beta1.1 compilata su Raspberry Pi v3 senza dare in pasto nessun flags di ottimizzazione al compilatore.

In realtà non so cosa aspettarmi, in questo modo su RPi v3 ogni tanto viene saltato qualche frame, vediamo però se con il 4 la situazione è meno peggio dell'eseguire un programma ottimizzato per un altro hardware
"A volte sono le persone che nessuno immaginava potessero fare certe cose quelle che fanno cose che nessuno può immaginare" A. Turing
_____________________________________________________________
Aiutiamo il forum con una donazione :-)

Hardware:
Raspberry Pi v3 B

Rispondi