MAME su Linux: SDLMAME
SDLMAME è un port del MAME, il celebre emulatore per i classici videogiochi coin-op, disponibile per Linux, Mac OS X e tutti gli altri sistemi operativi supportati dalle librerie SDL. Sostituisce, anche se non ne condivide il codice, XMAME, non più sviluppato, ed è allineato alla versione del progetto MAME “ufficiale”. Vediamo come compilarlo, se non troviamo i pacchetti per la nostra distribuzione.
Nota per gli utenti di Debian / Ubuntu: i comandi elencati vanno copiati sul terminale; ogni riga comincia con $ o #, indicando rispettivamente se il comando deve essere lanciato come utente normale o come amministratore (root). Nella guida viene utilizzato su per diventare root, che è un comando specifico di debian; se avete ubuntu, sostituitelo con sudo -s.
Potete inoltre scaricarvi i pacchetti precompilati per Ubuntu (se lo avete).
Prerequisiti
Di seguito vengono elencate tutte le librerie necessarie alla compilazione e all’esecuzione di SDLMAME; vengono descritti i comandi per installarle su Debian e Ubuntu, ma dovreste trovarle facilmente nel gestore dei pacchetti di una qualsiasi distribuzione Linux (tramite i commenti potete passarmi i comandi specifici per la vostra distro - poi aggiornerò la guida).
Nota: quelli elencati di seguito sono i pacchetti che ho installato sul mio computer, e con i quali la compilazione va a buon fine; se qualcuno è inutile, fatemelo notare, sempre tramite i commenti.
Nota su apt-get o synaptic: le librerie che installerete in seguito non marcatele come “installate automaticamente”, altrimenti, se non avete altri software che le usano, verranno segnalate come auto-removable, in quanto non creeremo un pacchetto .deb per SDLMAME, che gestisca correttamente le dipendenze (i binari compilati resteranno infatti nella home dell’utente).
Aprite un terminale; innanzitutto diventate root col comando:
$ su
poi installate le librerie richieste:
- SDL: è necessario sia il pacchetto delle librerie che il pacchetto di sviluppo:
- Debian e Ubuntu:
# apt-get install libsdl-image1.2 libsdl-image1.2-dev libsdl-mixer1.2 libsdl-mixer1.2-dev libsdl-net1.2 libsdl-net1.2-dev libsdl1.2-dev libsdl1.2debian libsdl1.2debian-alsa
- Debian e Ubuntu:
- LIBXINERAMA: libxinerama-dev e libxinerama1
- Debian e Ubuntu:
# apt-get install libxinerama-dev libxinerama1
- Debian e Ubuntu:
- GCC: controllate di avere installata la versione 4.1.x
- EXPAT: controllate di avere installati i pacchetti libexpat1 e libexpat1-dev (ma dovrebbero essere già presenti);
- ZLIB: controllate di avere installati i pacchetti zlib1g e zlib1g-dev (ma dovrebbero essere già presenti);
- OpenGL: se volete sfruttare l’accelerazione 3D della vostra scheda video (raccomandato), potreste dover installare dei pacchetti aggiuntivi (gli header), a seconda dei driver che state utilizzando:
- se avete i driver precompilati proprietari nvidia o fglrx, dovreste già avere tutto; il necessario
- in tutti gli altri casi, controllate di avere installato i pacchetti libgl1-mesa-dev, libgl1-mesa-dri e libgl1-mesa-glx.
Infine, installate il pacchetto contenente tutto il necessario per compilare sorgenti: # apt-get install build-essential
Installare SDLMAME
Download dei sorgenti
Per scaricare i sorgenti, andate sulla home page di SDLMAME, e scegliete l’ultima versione o la versione stabile; nel momento in cui ho scritto l’articolo, le due versioni erano:
(ho scaricato la 0.118u3, in quanto la 0.118 mi dava errori in compilazione).
Decomprimete i sorgenti col vostro gestore di archivi preferito (in Gnome basta fare click destro sull’archivio e scegliere Estrai qui), e spostate la directory sdlmame0118u3 all’interno di una sottodirectory della vostra home (consiglio di metterla in $HOME/bin/sdlmame0118u3 - come già detto, i binari compilati non verranno installati nel sistema, ma resteranno nella stessa directory dei sorgenti).
Nota: nei prossimi esempi assumo che la directory dei sorgenti sia $HOME/bin/sdlmame0118u3, ma tale directory potrebbe cambiare a seconda:
- della versione di sdlmame attuale;
- della directory dove tenete gli eseguibili precompilati, all’interno della vostra home.
Per questo motivo, adattate le righe in cui si usa il comando cd al vostro caso particolare.
Modifica del makefile
Il makefile è un file di testo che contiene le opzioni di compilazione. Aprite un terminale, e digitate, come utente normale:
$ cd $HOME/bin/sdlmame0118u3$ nano makefile
(potete usare, al posto di nano, qualsiasi altro editor di testo - ad esempio gedit).
Adesso effettuate le seguenti modifiche al file:
- Potete ottimizzare la compilazione per la vostra architettura, togliendo i cancelletti (#) davanti alla riga relativa al vostro processore; ad esempio, per il mio powerpc G4 (ho un vecchio macmini con debian installato), ho modificato così il makefile:
# uncomment one of the next lines to build a target-optimized build
# ATHLON = 1
# I686 = 1
# P4 = 1
# PM = 1
# AMD64 = 1
G4 = 1
# G5 = 1
# CELL = 1 - Se avete un processore x86-64 a 64 bit nativo, dovreste decommentare anche PTR64 = 1, in questo modo:
# uncomment next line if you are building for a 64-bit target
PTR64 = 1 - Assicurarsi che siano commentate le righe riguardanti EXPAT e ZLIB (analizzando i prerequisiti, ci siamo assicurati di averli installati mediante il gestore di pacchetti, in modo, appunto, da non doverli includere nella compilazione), in questo modo:
# uncomment next line to build expat as part of MAME build
#BUILD_EXPAT = 1# uncomment next line to build zlib as part of MAME build
#BUILD_ZLIB = 1
Salvate e uscite dall’editor (ma non dal terminale).
Compilare SDLMAME
Sempre dal terminale, e sempre da utente, lanciate:
- per i processori con un singolo core:
$ make
- per i processori dual-core:
$ make -j3
- per i processori quad-core:
$ make -j5
Nota: i parametri j3 e j5 aumentano esclusivamente la velocità di compilazione, non quella di emulazione.
Terminata la compilazione, troverete l’eseguibile mame[vostro_processore] sotto $HOME/bin/sdlmame0118u3 (ad esempio, il mio eseguibile è $HOME/bin/sdlmame0118u3/mameg4).
SDLMAME Quick start
Nota: in questo articolo faccio solo un breve accenno su come eseguire il mame, non spiego come usarlo “al meglio” (al meglio… secondo me
); avrei voluto fare una guida unica, ma ho intenzione di compilare SDLMAME anche per Mac OS X Panther, così qui mi sono focalizzato solo sulla compilazione sotto Linux. Presto dovrei postare una guida per l’uso più completa…
Innanzitutto una nota: SDLMAME non include nessun gioco, è solo un emulatore, e, come tale, ha bisogno dei rom set (archivi .zip contenenti tutte le rom del singolo gioco). Il rom set viene considerato una copia del gioco a tutti gli effetti, e come tale è illegale entrarne in possesso senza avere il cabinato originale. Esistono però dei rom set “legali”, la cui diffusione è stata autorizzata dai detentori dei diritti dei giochi. Scaricateli e spostateli nella directory $HOME/bin/sdlmame0118u3/roms (è il rompath di default); non è necessario decomprimerli (su Emannala’s Weblog, comunque, vengono suggeriti altri siti da cui scaricare i romset).
Dopo aver scaricato le rom nel rompath, potete finalmente verificare i risultati delle fatiche della vostra compilazione.
Di default, per una maggiore compatibilità, SDLMAME sfrutta la CPU per eseguire alcuni calcoli grafici (come lo scaling); per migliorare sensibilmente le prestazioni (soprattutto sulle cpu più lente), occorre far eseguire tali calcoli alla GPU:
- se avete il direct rendering attivo, potete usare Open GL:
$ ./mameg4 -video "opengl" -keepaspect
- se non avete il direct rendering attivo, potete provare con lo yuvmode:
$ ./mameg4 -yuvmode "yuy2"
(sostituite mameg4 col nome del vostro eseguibile).
Con questi comandi, all’avvio si aprirà la lista delle rom presenti nel vostro rompath (dalla quale selezionare la rom); potete cmq saltarla specificando il nome della rom come ulteriore parametro. Per esempio, per lanciare Street Fighter 2, dovete digitare:
$ ./mameg4 -video "opengl" -keepaspect sf2

Quanti ricordi!
Tutta questa guida è stata scritta sulla base del file SDLMAME.txt, presente nella directory dei sorgenti scaricati; se avete ancora dubbi sulla compilazione o sull’esecuzione, leggete direttamente quello.
Se ho scritto baggianate, oppure avete dei consigli (anche su come ottimizzare SDLMAME), scrivetelo nei commenti!
Articoli simili:
Se questo articolo ti è stato utile, segnalalo sul tuo sito! Puoi inoltre seguire comodamente gli aggiornamenti di Techlog tramite il feed RSS; infine puoi lasciare un commento se ti serve aiuto (o anche solo per un saluto); anche qui non serve registrarsi (sono abilitati anche i commenti anonimi; l'E-Mail serve, eventualmente, per ricevere le notifiche delle nuove risposte). ;-)





August 27th, 2007 at 12:21 pm
Ciao volevo chiederti se potevo inserire il tuo post nel mio sito.
August 27th, 2007 at 2:21 pm
@Zimotti
), alle seguenti condizioni:
Puoi fare tutto quello che dice la licenza Creative Commons: http://creativecommons.org/licenses/by-nc-sa/2.5/it/
e cioè:
riprodurre l’opera (anche modificarla; se ci posso mettere del mio, non solo sei autorizzato a modificarla e completarla, ma addirittura INVITATO
attribuzione: basta un link alla fonte, cioè questo articolo
non puoi usarla per fini commerciali
devi condividere la tua opera con la stessa licenza: se sul tuo blog hai usato una licenza diversa, basta mettere nel tuo articolo il link che ti ho passato sopra, altrimenti non c’è bisogno

Ti chiederei solo un favore: se hai intenzione di fare il copia e incolla (cioè di non modificarlo), potresti mettere solo uno stralcio dell’articolo, e poi un link “leggi il resto” che punta qui? Te lo chiedo solo per un motivo: i motori di ricerca considererebbero i nostri due articoli come “contenuto duplicato” e ci penalizzerebbero entrambi (potresti mettere ad esempio in blockquote tutto il testo prima del “leggi il resto”, poi linkare qui).
Ovviamente questo non si applica se vuoi modificare il testo (anche per un semplice riassunto).
August 27th, 2007 at 3:36 pm
Conosco la licenza solo che preferisco chiedere prima di inserire del contenuto per rispetto all’autore.
August 27th, 2007 at 4:25 pm
@Zimotti
(comunque, hai il “via libera”
)
Scusa, pensavo non l’avessi vista (il layout del blog è ancora “in costruzione”, e la licenza non è ben visibile)
September 1st, 2007 at 7:32 pm
[…] Leggi la guida […]
September 2nd, 2007 at 4:05 pm
Ciao, ti sei dimenticato che bisogna avere installato anche il pacchetto libxinerama-dev e libixinerama1
September 2nd, 2007 at 4:49 pm
@Stefano
Grazie, aggiornato
September 12th, 2007 at 4:58 pm
da paura!
September 12th, 2007 at 5:10 pm
@denzel
Hai incontrato problemi durante la compilazione?
Comunque, se fai partire SDLMAME con qualche opzione particolare, fa’ sapere!
September 17th, 2007 at 3:32 pm
Bellissima questa guida….il mame…quanto l’ho usato su windows…veramente carino…
September 17th, 2007 at 4:30 pm
@monolite
Si compila senza problemi?
November 3rd, 2007 at 3:23 pm
NOn riesco a capire perchè mi dà quseto errore mentre lo compilo :
Compiling src/osd/sdl/sdlmisc.c…
Compiling src/osd/sdl/sdlsync.c…
src/osd/sdl/sdlsync.c: In function ‘osd_lock_alloc’:
src/osd/sdl/sdlsync.c:96: warning: assignment makes integer from pointer without a cast
src/osd/sdl/sdlsync.c: In function ‘osd_lock_acquire’:
src/osd/sdl/sdlsync.c:111: warning: passing argument 2 of ‘osd_compare_exchange_pthread_t’ makes integer from pointer without a cast
src/osd/sdl/sdlsync.c:112: warning: comparison between pointer and integer
src/osd/sdl/sdlsync.c:167: warning: passing argument 2 of ‘osd_compare_exchange_pthread_t’ makes integer from pointer without a cast
src/osd/sdl/sdlsync.c:167: warning: comparison between pointer and integer
src/osd/sdl/sdlsync.c: In function ‘osd_lock_try’:
src/osd/sdl/sdlsync.c:181: warning: passing argument 2 of ‘osd_compare_exchange_pthread_t’ makes integer from pointer without a cast
src/osd/sdl/sdlsync.c:182: warning: comparison between pointer and integer
src/osd/sdl/sdlsync.c: In function ‘osd_lock_release’:
src/osd/sdl/sdlsync.c:206: warning: passing argument 2 of ‘osd_exchange_pthread_t’ makes integer from pointer without a cast
Compiling src/osd/sdl/sdltime.c…
Compiling src/osd/sdl/sdlwork.c…
Archiving obj/sdl/mamep4/libocore.a…
Linking obj/sdl/mamep4/build/file2str…
/usr/bin/ld: cannot find -lexpat
collect2: ld returned 1 exit status
make: *** [obj/sdl/mamep4/build/file2str] Error 1
chojin@ChojinPC:~/sdlmame0120u1$ make -j2
Linking obj/sdl/mamep4/build/file2str…
Compiling src/build/png2bdc.c…
/usr/bin/ld: cannot find -lexpat
collect2: ld returned 1 exit status
make: *** [obj/sdl/mamep4/build/file2str] Error 1
make: *** Waiting for unfinished jobs….
Non ne stò levando le gambe!!!
November 22nd, 2007 at 1:37 am
Funziona alla grande su ubuntu gutsy con XGL, scheda video ati mobility x1600 2G RAM…grazie 1000!!!!
November 22nd, 2007 at 2:35 am
Figurati!
(grazie a te per il test sulla nuova Ubuntu)
[/Faccia da cu**]
[Faccia da cu**]Se proprio vuoi, puoi votare l’articolo (così provo il plugin faticosamente installato)
Purtroppo ancora non ho avuto tempo per “giocarci” un po’ e trovare le impostazioni per “ottimizzarlo” ::(
November 27th, 2007 at 9:20 pm
Per Ubuntu consiglio il pacchetto già compilato SDLMAME:
http://wallyweek.altervista.org/index.php
November 27th, 2007 at 9:50 pm
@Vittorio: grazie, aggiungo il link.
Purtroppo per Debian e/o architetture PPC è necessaria ancora la compilazione.
December 13th, 2007 at 12:47 pm
[…] Ora Basta a piangersi addosso, e cerchiamo un modo per giocare realmente sulla nostra macchina. Dopo aver smanettato inutilmente per installare un programma che funzionasse sulla mia nuova Ubuntu Gutsy, ho trovato una guida che mi ha permesso in un batter d’occhio di compilare i sorgenti del programma.. […]
December 27th, 2008 at 2:38 am
Ciao.. ho installato SDLMame ma appena lo lancio mi dice che non ho giochi. Allora provo a scaricare e copiare i pacchett nella cartella Roms ma mi da errore e non me li fa copiare.. sai dirmi il motivo? Ho sbagliato qualcosa nell’installazione?
December 27th, 2008 at 5:03 am
yamamoto scrive:
Ti dà errore SDLMAME o il file manager? Potresti fare un copia e incolla dell’errore qui?
yamamoto scrive:
Hai per caso compilato SDLMAME come root, piuttosto che come utente normale?
December 27th, 2008 at 2:23 pm
Credo di aver installato il programma come utente normale.
Ora, quando lancio “sdlmame” dal terminale ecco cosa mi compare a tutto schermo:
No games found. Please check the rompath specified in the mame.ini file.
If this is your first time using Mame, please see the config.txt file in the docs directory for information on configuring Mame.
Come detto cerco di mettere i pacchetti nella cartella Roms ma mi dice errore di trasferimento al che faccio ometti ma niente la Roms resta vuota..
December 27th, 2008 at 2:29 pm
Aprendo il file mame.ini mi da queste indicazioni sul rompath:
$HOME/.mame/roms; /usr/local/share/games/sdlmame/roms
ora, andando su /usr/local/share etc. li provo a mettere i pacchetti ma mi da errore..
December 27th, 2008 at 3:34 pm
yamamoto scrive:
Capito.
Ti dà errore perché quella è una directory di sistema, mentre tu tenti di copiarceli come utente normale (e non hai i permessi).
Guarda attentamente il mame.ini, riporta un’altra directory, per le rom:
yamamoto scrive:
$HOME è una variabile che sta per /home/tuoutente/, quindi è la directory dell’utente corrente. .mame è una directory nascosta, e per visualizzarla devi attivare i file nascosti (da menu, o premendo CTRL+H, con Gnome.
Ovviamente, facendo così, se hai altri utenti sul tuo PC essi non potranno accedere alle tue ROM. Per permetterglielo, devi inserirle proprio in /usr/local/share/games/sdlmame/roms
Per farlo in maniera semplice, devi aprire un file manager (nautilus è quello di Gnome, konqueror quello di KDE) con i permessi di amministratore. Apri un terminale e lancia:
sudo nautilus /usr/local/share/games/sdlmame/roms… in modo da aprirlo direttamente nella directory ROMS di sistema; poi trascina i tuoi file lì.
Fammi sapere
December 28th, 2008 at 6:22 pm
Ecco perchè non trovavo home/.mame..
Si fatto, ho inserito le roms e ti ringrazio molto! L’unica cosa è che carica molto molto lento, sarà perchè sto usando ubuntu su macchina virtuale? Come faccio a vedere se ho il direct rendering attivo?
Ultima domanda: devo usare un programmino per avere i giochi ordinati come per Mame32, oppure non è necessario?
Ti ringrazio ancora..
December 28th, 2008 at 9:28 pm
yamamoto scrive:
Figurati!
yamamoto scrive:
Probabile: un emulatore richiede parecchia CPU.
yamamoto scrive:
Lancia questo comando da terminale:
glxinfo | grep renderyamamoto scrive:
In teoria, SDLmame stesso ti mostra la lista delle ROM che trova nel rompath; se ti interessa una interfaccia grafica, puoi comunque provare a cercare “sdlmame gui” (considera che quando ho scritto questo post non si trovavano molte gui, essendo SDLmame un progetto piuttosto nuovo).