23 marzo 2021

Compilare mame ed applicare patch

 Compilare mame per utilizzarlo sui nostri cabinati è una operazione che può risultare inutile (troviamo quasi sempre la versione che ci interessa) ma vuoi per curiosità, vuoi perché vogliamo personalizzarlo, potrebbe venirci voglia di compilarcelo da soli.

Per questo ci viene in aiuto la guida presente sul sito mamedev, grazie alla quale possiamo fare tutto, predisporre l'ambiente per la compilazione e conoscere più o meno tutti i comandi da utilizzare.

Col tempo ho raccolto informazioni quì e là per cercare di ottimizzare, non essendo io un programmatore, quando leggo codice vedo praticamente una lingua aliena, vorrei quindi condividere alcuni consigli, messi insieme leggendo un po' dappertutto.

Le prime difficoltà compaiono quando si vuole applicare una patch, fino a poco fa, era possibile reperire la patch groovy, la d3d9ex e quella nonag da applicare direttamente al sorgente del mame "liscio", con gli ultimi cambiamenti, calamity ha messo su github il sorgente groovymame già pronto con patch groovy e d3d93x, quindi basterebbe compilare ed abbiamo l'eseguibile pronto ma se vogliamo applicare il nonag?

Dobbiamo intanto trovare la patch relativa alla versione che ci interessa, cambiare l'estensione in .diff semplicemente rinominandola per poi applicarla.

il comando per applicare la patch è 

c:\mame_source>patch -p0 <suppression.diff --dry-run

dove sostituiremo i percorsi corretti ed il nome della patch, con i nostri, una volta verificato che non ci siano errori, potremo scrivere lo stesso comando omettendo il --dry-run che di fatto "simula" l'applicazione della patch senza però modificare nulla.

Può capitare infatti che sia disponibile una nuova versione di mame ma la patch non sia stata aggiornata e se ci sono modifiche nella struttura del codice, è necessario effettuare modifiche anche nella patch stessa per far combaciare le cose.

Se si ha fretta, è possibile modificare a mano le linee interessate, leggendo il contenuto del file .diff.

In questo caso consiglio di usare notepad++ e di aprire il file sul quale dobbiamo operare  con quest'ultimo, apparirà tutto più chiaro.

Ecco come compare la patch relativa al mame 0.228, utilizzabile anche sul 0.229


se quando la applicate con il comando patch avete diversi errori, è possibile, come già detto, intervenire manualmente, vediamo come, analizzando cosa c'è scritto.

le linee in blu scuro, ci dicono su quale file del sorgente intervenire

diff -Nru oldsrc/frontend/mame/ui/mainmenu.cpp src/frontend/mame/ui/mainmenu.cpp

in questo caso, una volta andati nella cartella del sorgente, dobbiamo spostarci in 

src/frontend/mame/ui/mainmenu

ed editare il file mainmenu.cpp con notepad++

quest'altra riga ci da delle coordinate 

@@ -130,6 +130,9 @@

ci dice "orientativamente" a quale linea vanno applicate le modifiche, non combacia perfettamente, a me non è successo mai, quindi bisogna armarsi di occhiali e pazienza e trovare la linea confrontando quanto scritto sotto, ad esempio

item_append(menu_item_type::SEPARATOR);

 

+ // DISABLE SELECT NEW MACHINE & FAVORITES

+ if (!machine().options().skip_gameinfo())

+ {

  if (!mame_machine_manager::instance()->favorite().is_favorite(machine()))

  item_append(_("Add To Favorites"), 0, (void *)ADD_FAVORITE);

  else

 in questo caso dovremo aggiungere il codice preceduto dal segno +, tra le linee "item_append...." e "if (!mame_machine_manager...." omettendo i segni + e facendo attenzione a rispettare gli spazi tra le linee e l'incolonnamento (io almeno faccio così).

Nella 0.229 la situazione è questa, siamo alla linea 131 (ci è andata bene)


Il risultato dopo la modifica, sarà questo

item_append(menu_item_type::SEPARATOR);

 

// DISABLE SELECT NEW MACHINE & FAVORITES

if (!machine().options().skip_gameinfo())

{

  if (!mame_machine_manager::instance()->favorite().is_favorite(machine()))

  item_append(_("Add To Favorites"), 0, (void *)ADD_FAVORITE);

  else

Potrebbe essere necessario anche eliminare qualche linea o semplicemente modificarla, se troveremo quindi il segno - sarà da eliminare per poi aggiungere il codice modificato, come indicato nel file.

Ripetiamo questo per ogni chiamata ad ogni file, salviamo ed avremo tutto pronto per la compilazione.


Con questa mini guida ho riportato solo la mia esperienza per quanto riguarda la patch del nonag, ci sono un sacco di altri argomenti da trattare e piccoli trucchi da utilizzare, dovessero interessare, basta contattarmi e vedrò di scrivere qualcosa, sia per le varie versioni di mame che per compilare altri software o emulatori per altre piattaforme (linux?)

Buona compilazione e buon divertimento.