SDLMAME: MAME su Linux Scrivi un commento!

MAME su Linux: SDLMAME

SDLMAMESDLMAME è 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
  • LIBXINERAMA: libxinerama-dev e libxinerama1
    • Debian e Ubuntu:
      # apt-get install libxinerama-dev libxinerama1
  • 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 :wink: ); 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. :mrgreen: 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

Screenshot di SDLMAME con Street Fighter II - The World Warrior
Quanti ricordi! :mrgreen:

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! :wink:

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). ;-)

24 Responses to “MAME su Linux: SDLMAME”

  1. Zimotti Says:

    Ciao volevo chiederti se potevo inserire il tuo post nel mio sito.

  2. notorious Says:

    @Zimotti
    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 :wink: ), alle seguenti condizioni:

    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 :wink:
    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). :wink:

  3. Zimotti Says:

    Conosco la licenza solo che preferisco chiedere prima di inserire del contenuto per rispetto all’autore.

  4. notorious Says:

    @Zimotti
    Scusa, pensavo non l’avessi vista (il layout del blog è ancora “in costruzione”, e la licenza non è ben visibile) :wink: (comunque, hai il “via libera” :mrgreen: )

  5. Compilare SDLMAME su Linux « Notorious’ Says:

    […] Leggi la guida […]

  6. Stefano Says:

    Ciao, ti sei dimenticato che bisogna avere installato anche il pacchetto libxinerama-dev e libixinerama1

  7. notorious Says:

    @Stefano
    Grazie, aggiornato :wink:

  8. denzel Says:

    da paura!

  9. notorious Says:

    @denzel
    Hai incontrato problemi durante la compilazione?
    Comunque, se fai partire SDLMAME con qualche opzione particolare, fa’ sapere! :wink:

  10. monolite Says:

    Bellissima questa guida….il mame…quanto l’ho usato su windows…veramente carino…

  11. notorious Says:

    @monolite
    Si compila senza problemi?

  12. Jacopo Says:

    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!!!

  13. matteotoni8 Says:

    Funziona alla grande su ubuntu gutsy con XGL, scheda video ati mobility x1600 2G RAM…grazie 1000!!!!

  14. notorious Says:

    Figurati! :wink: (grazie a te per il test sulla nuova Ubuntu)
    [Faccia da cu**]Se proprio vuoi, puoi votare l’articolo (così provo il plugin faticosamente installato) :mrgreen: [/Faccia da cu**]
    Purtroppo ancora non ho avuto tempo per “giocarci” un po’ e trovare le impostazioni per “ottimizzarlo” ::(

  15. Vittorio Says:

    Per Ubuntu consiglio il pacchetto già compilato SDLMAME:
    http://wallyweek.altervista.org/index.php

  16. notorious Says:

    @Vittorio: grazie, aggiungo il link. :wink: Purtroppo per Debian e/o architetture PPC è necessaria ancora la compilazione.

  17. Compilare SDLMame Su Ubuntu Gutsy « Emannala’s Weblog Says:

    […] 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.. […]

  18. yamamoto Says:

    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?

  19. Andrea Romagnoli Says:

    yamamoto scrive:

    provo a scaricare e copiare i pacchett nella cartella Roms ma mi da errore e non me li fa copiare

    Ti dà errore SDLMAME o il file manager? Potresti fare un copia e incolla dell’errore qui? :)

    yamamoto scrive:

    Ho sbagliato qualcosa nell’installazione?

    Hai per caso compilato SDLMAME come root, piuttosto che come utente normale?

  20. yamamoto Says:

    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..

  21. yamamoto Says:

    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..

  22. Andrea Romagnoli Says:

    yamamoto scrive:

    ora, andando su /usr/local/share etc. li provo a mettere i pacchetti ma mi da errore..

    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/.mame/roms

    $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 :)

  23. yamamoto Says:

    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..

  24. Andrea Romagnoli Says:

    yamamoto scrive:

    Si fatto, ho inserito le roms e ti ringrazio molto!

    Figurati! ;)

    yamamoto scrive:

    L’unica cosa è che carica molto molto lento, sarà perchè sto usando ubuntu su macchina virtuale?

    Probabile: un emulatore richiede parecchia CPU.

    yamamoto scrive:

    Come faccio a vedere se ho il direct rendering attivo?

    Lancia questo comando da terminale:
    glxinfo | grep render
    ;)

    yamamoto scrive:

    Ultima domanda: devo usare un programmino per avere i giochi ordinati come per Mame32, oppure non è necessario?

    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).

Leave a Reply


SMS Gratis