[DEV] M.A.M.E. SDL Plus - v1.41 by F. Lancioni

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

[DEV] M.A.M.E. SDL Plus - v1.41 by F. Lancioni

Messaggio da Administrator »

Current version v1.41 (26-04-2021)
Immagine

### 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 disponibile per Ubuntu, Raspberry Pi e Windows. Per utilizzarlo al meglio leggete questo primo post per intero!

Qualcuno chiederà perché 0.61? Inizialmente l'ho scelta perché era la prima versione con il supporto nativo ad artwork esterni ma poi mi sono reso conto che non c'era la possibilità di utilizzare quelli in alta definizione. A quel punto però una parte del lavoro era già stata fatta, motivo per cui successivamente ho scritto personalmente il codice per supportarli. Inoltre la 0.61 è una versione intermedia e matura tra la 0.37b5 e la gettonatissima 0.78 quindi sono andato avanti su questa strada
Il porting non è volutamente appesantito dall'ulteriore layer delle versioni Libretro (quindi niente lr- davanti al nome) ;-)
Il codice è altamente ottimizzato con lookup table create a runtime e quant'altro per ridurre il carico della CPU e funziona su diversi sistemi! Per raggiungere l'obbiettivo del multipiattaforma per l'interfaccia col sistema operativo ho scelto la libreria SDL in modo che il codice potesse esser compilato per qualsiasi sistema che la supporti, ovvero Windows, Linux, macOS ecc. Inoltre, rispetto alla versione 0.61 il cui core è la base di partenza, sono stati aggiunti (e all'occorrenza ne verranno aggiunti altri) ulteriori giochi e questo è uno dei motivi, oltre alle nuove funzionalità rispetto alla versione di partenza, per cui si chiama M.A.M.E. SDL Plus :D

Tra le varie modifiche, che man mano vi vado a illustrare, come già accennato c'è la possibilità di utilizzare artwork in alta risoluzione (formato .lyt, più in basso trovate la sezione apposita) oltre a poter giocare con 4 trackball contemporaneamente!

Il porting regge senza problemi 60 frames al secondo "reali" 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 al bisogno alcuni frames rendendo l'esecuzione sui primi Raspberry Pi praticamente full speed per molti giochi (i nostri occhi fortunatamente non si accorgono quando questo accade :lol:).

Per il Raspberry Pi v1 è richiesto (come con tutti i M.A.M.E.) l'overclock, seguite questa guida

### VIDEO: PC di sviluppo vs Raspbery 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

### VIDEO: M.A.M.E. SDL Plus 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. SDL Plus

###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:
Main loop frequency: 60.000802 Hz
Nominal FPS: 60.000000
Real FPS: 60.000802

Total play time: 3192.074000 seconds
Real FPS si riferisce ai frames 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: Main loop frequency 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.

Normalmente quando Main loop frequency e Real FPS coincidono significa che nessun frame è stato saltato durante l'esecuzione: nel caso però in cui il vertical sync sia attivo potrebbero risultare diversi per motivi di sincronia
La sincronizzazione audio/video, nonché il mantenimento dei FPS nominali, sfrutta una logica basata sull'hardware audio. Se avete problemi di audio, una configurazione errata, audio non funzionante ecc., i FPS non saranno rispettati e l'emulazione presenterà grossi problemi (ad esempio il superamento del framerate nominale con giochi che verranno eseguiti accelerati)
### 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 M.A.M.E. è possibile configurare un pulsante per l'opzione Scanlines On/Off per attivare/disattivare le scanlines con il M.A.M.E. 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
Retrostoria: L'origine 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 codice sorgente è stato modificato quindi con M.A.M.E. SDL Plus 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).

Ad esempio per il romset sf2ce si ha il seguente contenuto:

Codice: Seleziona tutto

Width="4000" Height="3743"
GameAreaWidth="2920" GameAreaHeight="2190"
GameAreaX="540" GameAreaY="822"
Width e Height sono banalmente larghezza e altezza in pixel dell'immagine .png, niente di misterioso.

GameAreaWidth e GameAreaHeight rappresentano larghezza e altezza dell'area dove si vuole che venga mostrato il gioco, nel caso di sf2ce rappresentano il "buco" presente nell'immagine, espresse in pixel rispetto all'immagine.

GameAreaX e GameAreaY sono la coordinata X e la coordinata Y, espresse in pixel, dove il gioco verrà posizionato (l'origine è in alto a sinistra) e in questo caso rappresentano l'angolo in alto a sinistra del "buco" nell'immagine.

Il codice è intelligente quindi poi tutto verrà ricalcolato all'avvio del gioco in modo che l'aspect ratio del cabinato originale venga mantenuto, quindi se GameAreaWidth e GameAreaHeight non sono ad esempio 4:3 (come il cabinato originale di sf2ce) non importa, ci penserà M.A.M.E. SDL Plus (diciamo c'ho pensato io con parecchie linee di codice :lol:) a ricreare tutto correttamente.

Fatto questo 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
Oltre a ciò nel menù del M.A.M.E. è possibile configurare un pulsante per l'opzione HD Artwork On/Off per mostrare/nascondere l'artwork con il M.A.M.E. in esecuzione premendo semplicemente un pulsante.

Qui trovate alcuni artwork di esempio

### VSYNC ###
Ho inserito la possibilità di attivare o meno il vertical sync per evitare fenomeni di tearing. Per default il vertical sync è attivo ma è possibile disattivarlo passando il parametro novsync da riga di comando, ad esempio

Codice: Seleziona tutto

./mame_rpi3 -rompath /home/pi/RetroPie/roms/mamesdl dino -novsync
Su PC (Windows o Linux) e su Raspberry Pi v0, v1, v2 e v3 decidete voi se lasciare attiva l'opzione mentre su Raspberry Pi v4 è mandatorio non disattivarla a causa di un bug nel driver video (leggete qui per capire cosa accade). Da quel che ho visto su Raspberry Pi v1 è leggermente deleterio
Prestate attenzione al fatto che se il vostro schermo arriva massimo a 50 Hz non andrete mai oltre i 50 frames al secondo
Riporto un esempio di cosa succede su un display 50 Hz (15 secondi circa di runtime giusto per dare l'idea):

Opzione vsync attivata

Codice: Seleziona tutto

End game summary:
Main loop frequency: 60.052562 Hz
Nominal FPS: 60.000000
Real FPS: 49.737188

Total play time: 15.220000 seconds
Opzione vsync disattivata

Codice: Seleziona tutto

End game summary:
Main loop frequency: 60.152317 Hz
Nominal FPS: 60.000000
Real FPS: 60.152317

Total play time: 15.494000 seconds
Come vedete (parametro Real FPS) se il vsync è disattivato pur essendo lo schermo a 50 Hz il gioco viene eseguito al framerate nominale, ovvero 60 FPS. Al contrario con il vsync attivato essendo lo schermo a 50 Hz il gioco viene eseguito a 50 FPS. Ovviamente se un gioco ha un framerate nominale di 37 Hz e lo schermo è a 50 Hz o 60 Hz il gioco funzionerà regolarmente a 37 FPS
Ricapitolando:
se avete un Raspberry Pi v4 non dovete disattivare il vsync, negli altri casi vedete voi ;-)
### VIDEO FILTER ###
Esiste la possibilità di attivare un filtro video che verrà utilizzato nello scaling dell'immagine. Non sono un amante dei filtri, a mio avviso un buon effetto scanlines come quello presente e attivo di default (disattivabile a vostra discrezione) è più che sufficiente. Per chi però preferisce avere un effetto blur per smussare ulterormente i pixel ho inserito la possibilità di farlo, tramite il parametro linear-filter o tramite il parametro best-filter, da riga di comando, ad esempio

Codice: Seleziona tutto

./mame_rpi4 -rompath /home/pi/RetroPie/roms/mamesdl dino -linear-filter

Codice: Seleziona tutto

./mame_rpi4 -rompath /home/pi/RetroPie/roms/mamesdl dino -best-filter
### TRACKBALL ###
Le versioni per Raspberry Pi e quella per sistemi Ubuntu-based (quindi niente Windows) supportano l'utilizzo di 4 trackball connesse contemporaneamente, ovvero il numero massimo di giocatori supportato dai giochi che utilizzavano tale sistema di controllo.

Per poter usare una trackball è necessario aggiungere questi parametri alla riga di comando per l'avvio dell'emulatore:

Codice: Seleziona tutto

trackball-id-1
trackball-id-2
trackball-id-3
trackball-id-4
trackball-sensitivity
Per gli IDs da utilizzare assieme ai parametri trackball-id-* è necessario conoscere il nome della periferica così come creato da Linux durante l'avvio, quindi vi basterà eseguire questo comando

Codice: Seleziona tutto

ls -lh /dev/input/by-id
e utilizzare le stringhe che terminano con -event-mouse. Ad esempio sul mio sistema quel comando riporta questo:

Codice: Seleziona tutto

total 0
lrwxrwxrwx 1 root root 10 apr 21 10:36 usb-Apple__Inc_Apple_Keyboard-event-if01 -> ../event11
lrwxrwxrwx 1 root root 10 apr 21 10:36 usb-Apple__Inc_Apple_Keyboard-event-kbd -> ../event10
lrwxrwxrwx 1 root root  9 apr 21 10:36 usb-Logitech_USB_Optical_Mouse-event-mouse -> ../event8
lrwxrwxrwx 1 root root  9 apr 21 10:36 usb-Logitech_USB_Optical_Mouse-mouse -> ../mouse4
lrwxrwxrwx 1 root root  9 apr 21 10:36 usb-PixArt_Microsoft_USB_Optical_Mouse-event-mouse -> ../event9
lrwxrwxrwx 1 root root  9 apr 21 10:36 usb-PixArt_Microsoft_USB_Optical_Mouse-mouse -> ../mouse5
lrwxrwxrwx 1 root root 10 apr 21 10:36 usb-SunplusIT_Inc_EasyCamera-event-if00 -> ../event13
e quindi per giocare ad esempio in 2 la riga di comando di lancio dell'emulatore sarà questa:

Codice: Seleziona tutto

./mame_rpi4 arcadecl -trackball-sensitivity 10 -trackball-id-1 usb-Logitech_USB_Optical_Mouse-event-mouse -trackball-id-2 usb-PixArt_Microsoft_USB_Optical_Mouse-event-mouse
Come avrete notato per la sensibilità della trackball ho utilizzato il valore 10 dove i valori ammessi vanno da 0 a 10 (0 è il default quindi se non si vuole aumentare la sensibilità non è necessario passare il parametro)

### SET DA UTILIZZARE ###
Non dovete fare altro che copiare le vostre roms versione 0.61+ (usate MAME Set Rebuilder con il file .dat allegato al programma oppure estraetelo direttamente dall'eseguibile come dettagliatamente spiegato qui) nella cartella roms oppure, se state integrando l'emulatore in RetroPie, nella cartella mamesdl come spiegato più avanti

### ROMSET AGGIUNTI / MODIFICATI ###
Rispetto alla versione 0.61 sono presenti diverse modifiche. Sicuramente ad oggi M.A.M.E. SDL Plus è l'unico porting basato su una versione inferiore alla 0.126 che presenta il romset wrally, nome gioco World Rally (set 1), perfettamente funzionante 8-)
  • aligator - Alligator Hunt --> based on v0.68 (GAME_UNEMULATED_PROTECTION)
  • aligatun - Alligator Hunt (unprotected) --> based on v0.68
  • armora - Armor Attack --> based on v0.78
  • armorap - Armor Attack (prototype) --> based on v0.78
  • armorar - Armor Attack (Rock-ola) --> based on v0.78
  • bang - Bang! --> based on v0.68
  • barrier - Barrier --> based on v0.78 (GAME_NO_SOUND)
  • boxingb - Boxing Bugs --> based on v0.78 (GAME_IMPERFECT_COLORS, GAME_NO_SOUND)
  • dadandrn - Kyukyoku Sentai Dadandarn (Japan ver JAA) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • daiskiss - Daisu-Kiss (Ver JAA) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • demon - Demon --> based on v0.78
  • dragoonj - Dragoon Might (Ver JAA) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • fantjour - Fantastic Journey --> based on v0.68 (GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION)
  • ga2 - Golden Axe - The Revenge of Death Adder (US) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • ga2j - Golden Axe - The Revenge of Death Adder (Japan) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • gaiapols - Gaiapolis (Japan ver JAF) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • gokuparo - Gokujyou Parodius (Ver JAD) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • le2 - Lethal Enforcers II: Gun Fighters (Ver EAA) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • le2u - Lethal Enforcers II: Gun Fighters (Ver UAA) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • maniacsp - Maniac Square (prototype) --> based on v0.68
  • maniacsq - Maniac Square (unprotected) --> based on v0.68
  • megaman2 - Mega Man 2: The Power Fighters (US 960708) --> based on v0.78
  • megamn2a - Mega Man 2: The Power Fighters (Asia 960708) --> based on v0.78 (GAME_NOT_WORKING)
  • metamrph - Metamorphic Force (US ver UAA) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • mtlchmpj - Martial Champion (Japan ver JAA) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • mystwarr - Mystic Warriors (World ver EAA) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • mystwaru - Mystic Warriors (US ver UAA) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • puzldama - Taisen Puzzle-dama (Ver JAA) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • ripoff - Rip Off --> based on v0.78
  • salmndr2 - Salamander 2 (JAA) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • sexyparo - Sexy Parodius (Ver JAA) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • snowbalt - Snow Board Championship (set 2) --> based on v0.68 (GAME_UNEMULATED_PROTECTION)
  • snowboar - Snow Board Championship (set 1) --> based on v0.68 (GAME_UNEMULATED_PROTECTION)
  • solarq - Solar Quest --> based on v0.78
  • spacewar - Space Wars --> based on v0.78
  • starcas - Star Castle (version 3) --> based on v0.78
  • starcas1 - Star Castle (older) --> based on v0.78
  • starcasp - Star Castle (prototype) --> based on v0.78
  • starcase - Star Castle (Mottoeis) --> based on v0.78
  • starhawk - Star Hawk --> based on v0.78 (GAME_NO_SOUND)
  • stellcas - Stellar Castle (Elettronolo) --> based on v0.78
  • speedfrk - Speed Freak --> based on v0.78 (GAME_NO_SOUND)
  • sundance - Sundance --> based on v0.78
  • tailg - Tailgunner --> based on v0.78 (GAME_NO_SOUND)
  • tbyahhoo - Twin Bee Yahhoo! (Ver JAA) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • tkmmpzdm - Tokimeki Memorial Taisen Puzzle-dama (version JAB) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • tokkae - Tokkae Puzzle-dama (Ver JAA) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • viostorm - Violent Storm (Europe ver EAB) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • viostrma - Violent Storm (Asia ver AAC) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • viostrmj - Violent Storm (Japan ver JAC) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • viostrmu - Violent Storm (US ver UAB) --> based on v0.68 (GAME_IMPERFECT_GRAPHICS)
  • warrior - Warrior --> based on v0.78
  • wotw - War of the Worlds --> based on v0.78 (GAME_IMPERFECT_COLORS, GAME_NO_SOUND)
  • wrally - World Rally (set 1) --> based on v0.126 and other versions
  • wrally2 - World Rally 2: Twin Racing --> based on v0.68 (GAME_UNEMULATED_PROTECTION)
  • konamigx - System GX --> based on v0.68
Alcuni giochi sopra riportati sono già presenti nella versione 0.61. Se vengono indicati in questa lista è perché banalmente possono essere passati da non funzionanti a funzionanti oppure perché il loro driver, essendo correlato ad altre modifiche del codice, è diverso rispetto alla versione 0.61
Ripeto nuovamente: per ricreare il set corretto utilizzate MAME Set Rebuilder con il file 0.61+.dat che trovate nell'archivio contenente gli eseguibili oppure estraetelo direttamente dall'eseguibile

### CONTROLLI VIA TASTIERA ###
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 (o annullare una precedente associazione) 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 (o annullare una precedente associazione) 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 SU 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.
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
e successivamente seguite 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

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

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 -j$(nproc)
sudo make install
sudo ldconfig
Passiamo all'integrazione in RetroPie. 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
...se utilizzate il file es_systems.cfg personalizzato dovete aggiungere la configurazione in quel file...
e aggiungete in fondo al file questa configurazione

Codice: Seleziona tutto

<system>
    <name>mamesdl</name>
    <fullname>MAME SDL Plus</fullname>
    <path>/home/pi/RetroPie/roms/mamesdl</path>
    <extension>.zip .ZIP</extension>
    <command>cd /home/pi/MAMESDLPlus; ./mame_rpi4 -rompath /home/pi/RetroPie/roms/mamesdl %ROM%</command>
    <platform>arcade</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
Se volete cambiare logo/tema al sistema seguite questa guida
Create la cartella mamesdl e la cartella MAMESDLPlus rispettivamente con questi comandi:

Codice: Seleziona tutto

mkdir /home/pi/RetroPie/roms/mamesdl

Codice: Seleziona tutto

mkdir /home/pi/MAMESDLPlus
Copiate l'eseguibile dell'emulatore, nel nostro esempio mame_rpi4, insieme alla cartelle presenti nell'archivio .zip nella cartella MAMESDLPlus.

Riavviate EmulationStation (o il sistema) ;-)
Se volete avviare un gioco direttamente all'avvio del sistema leggete questa guida
Se il vostro Raspberry Pi è connesso a un monitor VGA-DVI, quindi per l'audio utilizzate il jack apposito, nella riga di comando potreste dover aggiungere il parametro headphones, ad esempio:

Codice: Seleziona tutto

./mame_rpi4 -rompath /home/pi/RetroPie/roms/mamesdl dino -headphones
Dipende dalla versione di RetroPie che state utilizzando, controllate il log (chiudete EmulationStation dopo aver avviato un gioco) e verificate quale dispositivo audio viene selezionato durante l'inizializzazione di M.A.M.E. SDL Plus
### VERSIONE UBUNTU-BASED ###
Come per il Raspberry Pi dovete avere installate le librerie SDL e SDL Image, entrambe in versione 32 bit. Vi spiego in qualche semplice passo come compilarle dai sorgenti.

*SDL*
Scaricate SDL da qui, copiate il pacchetto nella home del vostro utente, estraete il codice sorgente e rinominate la cartella estratta in SDL, poi eseguite in sequenza questi comandi nel terminale:

Codice: Seleziona tutto

cd SDL
mkdir build
cd build
CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 ../configure --libdir=/usr/lib32
make -j$(nproc)
sudo make install
sudo ldconfig
*SDL Image*
Scaricate SDL Image da qui, copiate il pacchetto nella home del vostro utente, estraete il codice sorgente e rinominate la cartella estratta in SDL_IMAGE, poi eseguite in sequenza questi comandi nel terminale:

Codice: Seleziona tutto

cd SDL_IMAGE
mkdir build
cd build
CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 ../configure --libdir=/usr/lib32
make -j$(nproc)
sudo make install
sudo ldconfig
A questo punto potete lanciarlo da riga di comando oppure integrarlo in RetroPie come indicato nel prossimo paragrafo

### INTEGRAZIONE IN RETROPIE SU SISTEMI UBUNTU-BASED ###
Effettuate una configurazione simile a quella spiegata per Raspberry Pi tenendo a mente che il percorso del file es_systems.cfg potrebbe variare in base 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 in MAME Simple Frontend non è supportata da questo porting l'opzione Original resolution window (poco male in realtà su schermi grandi e ad elevata risoluzione odierni) tra le M.A.M.E. display options
Se usate MAME Simple Frontend le cartelle artwork, cfg ecc. devono esser presenti nella stessa cartella che contiene l'eseguibile di MAME Simple Frontend
### CONCLUSIONI ###
Non resta niente da aggiungere, nel post successivo trovate raccolti alcuni artwork in HD in formato lyt in modo da avere alcuni esempi da sfruttare, che dire...

Buon M.A.M.E. a tutti :D

Version 1.41:
- 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):
M.A.M.E. SDL Plus - v1.41.txt
Non hai i permessi necessari per visualizzare i file allegati in questo messaggio.
Questi utenti hanno ringraziato l'autore Administrator per il post (totale 6):
GuybrushPadremayiNewtonIonicpaologClaus83
Reputazione: 60%
"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 Model B Rev 2
Raspberry Pi 3 Model B Rev 1.2
Raspberry Pi 4 Model B Rev 1.2

Avatar utente
Guybrush
Site Admin
Messaggi: 2305
Iscritto il: gio feb 25, 2016 6:33 pm
Ha ringraziato: 114 volte
È stato ringraziato: 137 volte

[DEV] M.A.M.E. SDL Plus - by F. Lancioni - Artworks (lyt format)

Messaggio da Guybrush »

Qui trovate gli artwork in formato .lyt creati dagli utenti del forum :-)

1942 1943 altbeast asteroid baddudes bublbobl dkong invaders mercs puckman sf2ce shdancer simpsons spacewar warrior
"Dobbiamo costruire computer per le masse, non per le classi" J. Tramiel
_____________________________________________________________
Aiutiamo il forum con una donazione :-)

Hardware:
Raspberry Pi Model B Rev 2 (x2)
Raspberry Pi 3 Model B Rev 1.2

Avatar utente
Administrator
Site Admin
Messaggi: 354
Iscritto il: gio feb 25, 2016 6:32 pm
Ha ringraziato: 0
È stato ringraziato: 223 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).

Eventualmente 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 Model B Rev 2
Raspberry Pi 3 Model B Rev 1.2
Raspberry Pi 4 Model B Rev 1.2

Avatar utente
Claus83
Messaggi: 386
Iscritto il: sab apr 25, 2020 12:12 am
Ha ringraziato: 160 volte
È stato ringraziato: 28 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: 354
Iscritto il: gio feb 25, 2016 6:32 pm
Ha ringraziato: 0
È stato ringraziato: 223 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 Model B Rev 2
Raspberry Pi 3 Model B Rev 1.2
Raspberry Pi 4 Model B Rev 1.2


Avatar utente
Claus83
Messaggi: 386
Iscritto il: sab apr 25, 2020 12:12 am
Ha ringraziato: 160 volte
È stato ringraziato: 28 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: 354
Iscritto il: gio feb 25, 2016 6:32 pm
Ha ringraziato: 0
È stato ringraziato: 223 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 Model B Rev 2
Raspberry Pi 3 Model B Rev 1.2
Raspberry Pi 4 Model B Rev 1.2

Avatar utente
Claus83
Messaggi: 386
Iscritto il: sab apr 25, 2020 12:12 am
Ha ringraziato: 160 volte
È stato ringraziato: 28 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: 2305
Iscritto il: gio feb 25, 2016 6:33 pm
Ha ringraziato: 114 volte
È stato ringraziato: 137 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 Model B Rev 2 (x2)
Raspberry Pi 3 Model B Rev 1.2

Avatar utente
Claus83
Messaggi: 386
Iscritto il: sab apr 25, 2020 12:12 am
Ha ringraziato: 160 volte
È stato ringraziato: 28 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

Rispondi