# MAME

MAME (acronimo di Multiple Arcade Machine Emulator, in italiano Emulatore Multiplo Macchine Arcade o EMMA) è un software in grado di emulare varie piattaforme di gioco arcade, pubblicato inizialmente solo su MS-DOS nel 1997 e in seguito convertito per quasi tutte le macchine e sistemi operativi in circolazione. Lo scopo di tale emulazione è quello di documentare il funzionamento dei coin-op, preservare la storia dei videogiochi e di prevenire la scomparsa di vecchie rarità una volta che le macchine originali abbiano cessato di funzionare per motivi di obsolescenza.

## Storia

Il primo autore del progetto è stato Nicola Salmoria, che ha iniziato a lavorare all'emulatore il 24 dicembre 1996. Salmoria aveva avuto l'idea di unire più emulatori trovati in rete (tra i quali un primitivo emulatore di Pac Man) in un unico programma in grado di eseguire più giochi. La prima versione, la 0.1, è stata pubblicata il 5 febbraio 1997; funziona in ambiente MS-DOS da riga di comando ed è in grado di eseguire cinque titoli. In breve tempo il progetto ha attirato l'attenzione di altri sviluppatori, che hanno iniziato a collaborare inserendo nuovi driver per il funzionamento dei videogiochi, grazie alla particolare architettura del codice sorgente.
Nel 1997 è cominciato lo sviluppo parallelo di MAME32, una versione adattata all'ambiente Windows a 32 bit con l'aggiunta di una GUI (interfaccia grafica) che ne facilita notevolmente l'uso, soprattutto per chi non conosce i comandi DOS. Nel 1998 la versione 0.34 raggiunge la quota dei 1000 titoli supportati. Dal 2001 la versione ufficiale del MAME non viene più sviluppata sotto DOS ma sotto Microsoft Windows, sempre senza interfaccia grafica, come programma a riga di comando.
Dal 2015 il progetto MAME ed il progetto MESS si sono fusi in un solo progetto mantenendo il nome MAME ma con la possibilità di compilare solo la parte arcade o quella MESS. Dal 30 novembre 2016 (versione 0.180) il progetto è coordinato da Vas Crabb. L'ultima versione stabile di MAME è la 0.275, pubblicata il 26 febbraio 2025: sono supportati oltre 13.000 titoli, 40.000 contando anche i vari cloni.

## Funzionamento

MAME è composto da varie parti in grado di emulare completamente le architetture tipiche delle macchine arcade che ad esempio si trovavano nei bar e nelle sale giochi. In pratica MAME ricostruisce via software tutte quelle circuiterie interne che permettono di gestire gli input dei joystick, la gestione del monitor e dei riproduttori di suoni. Perfino l'inserimento delle monete nella gettoniera viene emulato e dev'essere effettuato virtualmente dal giocatore.
L'unica cosa che manca è la parte software delle macchine, cioè le ROM originali dei giochi, che vanno aggiunte separatamente per ogni gioco, ma per motivi di copyright non possono essere distribuite legalmente. Il software della maggior parte dei giochi arcade del passato è stato trasformato da appassionati in file leggibili da MAME e divulgato come abandonware. Fanno eccezione, al momento, alcuni titoli per i quali è stato concesso espressamente il permesso di distribuzione da parte dei detentori del copyright: in particolare Gridlee della Videa, Robby Roto di Bally/Midway, Alien Arena di Duncan Brown e una serie di 11 giochi prodotti da Exidy, per i quali il produttore ha concesso la libera distribuzione per scopi non commerciali. Anche la Gaelco ha "liberato" il suo World Rally.
I sistemi di controllo originali dei giochi arcade, che a volte sono periferiche particolari appositamente realizzate, vengono emulati in MAME tramite tastiera, joystick o altre periferiche comuni. Ad esempio la manopola di Arkanoid si può simulare con mouse o trackball. Quando nel gioco originale è possibile il multigiocatore su un singolo cabinato, la modalità è disponibile anche in MAME sulla stessa macchina. Nel MAME ufficiale non è presente invece il gioco in rete, che diventa possibile solo utilizzando versioni modificate come MAME32 con Kaillera o MAMEhub.

## Architettura

Da un punto di vista logico MAME può essere diviso in 3 livelli:
* Il primo livello si occupa dell'emulazione dell'hardware vero e proprio.
* Il secondo livello contiene tutte le funzioni generali e i moduli che fanno da collante tra il primo e il terzo livello.
* Il terzo livello è quello che "presenta" l'emulatore all'utente. È composto dall'interfaccia grafica (se presente) e da tutte quelle opzioni che permettono di avviare e pilotare l'emulatore.
I primi due livelli sono scritti in C in modo da avere maggior velocità e portabilità. Nessuna libreria esterna è richiesta e questo codice è compilabile per qualunque piattaforma da un compilatore standard, praticamente senza modifica alcuna. Il terzo livello è definito OSD (Operating System Dependent) e contiene tutto quel codice specifico per le varie piattaforme. Tutte le varie chiamate di sistema di Windows o di Linux si trovano in questo livello permettendo una facile migrazione del codice da una piattaforma all'altra modificando solo questo livello.

## ROM

In quasi tutti i giochi arcade i dati (software, grafica, audio, ecc.) sono memorizzati in chip di memoria di sola lettura (Read Only Memory, ROM) sebbene in alcuni casi siano utilizzati anche floppy disk, CD-ROM o cassette. I dati contenuti in questi supporti vengono letti e riscritti in file contenenti l'esatta copia del chip da cui provengono attraverso un processo chiamato dumping. Tali file (indipendentemente dal supporto dal quale provengono) vengono chiamati ROM. Solitamente un gioco è composto da più ROM (alcune per l'audio, alcune per la grafica, ecc.). L'insieme di tutte le ROM di un gioco prende il nome di ROM Set.
Il MAME gestisce i ROM Set in 2 modi: file CHD (Compressed Hunks of Data) che contengono le immagini compresse di hard disk o compact disc oppure file ZIP contenenti tutte le ROM.

### ROM set

I ROM set sono gruppi di immagini delle ROM che compongono lo stesso gioco. Ci sono 3 tipi principali di ROM set:
* ROM Set Originale: anche chiamato ROM Set Parent, questo set contiene tutte le ROM del gioco che il team di sviluppo del MAME ha definito come originale (alcune volte è la versione più recente e completa del gioco, altre volte è la prima e più tradizionale, altre volte ancora è la versione mondiale o la più famosa). Le ROM di questo set contengono tutte le informazioni per lanciare il gioco.
* ROM Set Clone: sono varianti dei giochi originali, per esempio versioni precedenti o successive o localizzate, che usano svariate ROM identiche ad altre versioni dello stesso gioco. Per risparmiare spazio queste ROM duplicate vengono incluse una sola volta nel set Parent, mentre il set Clone contiene solamente le ROM che lo distinguono dalle altre edizioni del gioco.
* BIOS ROM Set: non sono veri e propri giochi, contengono delle ROM necessarie ad altri giochi per poter essere eseguiti. Il BIOS (Basic Input/Output System) è un insieme di routine di base che gestiscono le varie componenti hardware della macchina del gioco. Queste immagini sono particolarmente importanti per sistemi che supportano più giochi quali il Neo Geo.

## Sviluppo

MAME viene sviluppato da molti volontari come software libero. Storico dei coordinatori del progetto:
* Nicola Salmoria (febbraio 1997-aprile 1997)
* Mirko Buffoni (aprile 1997-agosto 1997) (sostituì Salmoria mentre questi svolgeva il servizio militare in Italia)
* Nicola Salmoria (agosto 1997-2003)
* "Haze" David Haywood (2003-2005)
* Aaron Giles (2005-2011)
* "Kale" Angelo Salese (2011-2012)
* "Micko" Miodrag Milanovic (2012-ottobre 2016)
* Vas Crabb (novembre 2016- )

## Versioni
### Versioni ufficiali

MAME viene sviluppato da programmatori senza fini di lucro. Le release ufficiali, contraddistinte fino ad ora da un codice del tipo 0.X dove X è la versione (per esempio 0.89), dopo anni di uscite irregolari, dal novembre 2014 vengono pubblicate ogni ultimo mercoledì di ogni mese. MAME è liberamente scaricabile dal sito ufficiale.

### Versioni particolari

La 0.32 non fu mai creata per evitare confusioni con il MAME32, la versione di MAME con interfaccia grafica Windows. Dalla release 0.31 si iniziò a numerare le beta con numeri sempre più alti nella speranza di arrivare presto a una versione 1.0. Ciò portò all'uscita di molte release nominate beta, ma che in realtà erano versioni vere e proprie perfettamente funzionanti (0.35b13, 0.36b9 per esempio). Con la release 0.37 si iniziò a utilizzare la numerazione attuale senza più sperare in una versione 1.0, tanto che alcuni sviluppatori pensano che probabilmente non ci sarà mai una vera e propria versione definitiva di MAME. In effetti la versione successiva alla 0.99 è stata pubblicata il 14 settembre 2005 con numerazione 0.100. Le versioni dalla 0.36b10 alla 0.36b16 sono state ritirate in quanto contengono dei giochi definiti "gambling" (giochi in cui conta solamente la fortuna e non l'abilità del giocatore, come ad esempio le roulette). La loro rimozione è stata effettuata in base a una scelta più filosofica che tecnica di Nicola Salmoria. Questi giochi sono stati poi reintrodotti ufficialmente in MAME con la versione 0.100. Dalla versione 0.143u2, inoltre, gli sviluppatori hanno iniziato ad aggiungere anche i driver per emulare i flipper e molti altri giochi meccanici; il codice proviene dal Visual PinMAME.

### Porting e modifiche

La portabilità del MAME ha fatto sì che molti programmatori ne abbiano sviluppato versioni per varie piattaforme, alcune volte realizzando vere e proprie versioni modificate:
* QMC2: front-end con interfaccia grafica di MAME ed anche di MESS. Disponibile per diverse piattaforme hardware (Linux, UNIX[OpenSolaris, FreeBSD], Mac OS X e Windows)
* MAMEUI - IV/Play (precedentemente MAME32): come già detto questa è una delle prime versioni modificate. È il porting per ambienti Windows a 32 bit e 64 bit con interfaccia grafica.
* Mame32 Plus!
* VCMAME: non è una vera e propria versione modificata, ma soltanto una serie di file che permettono a MAME di essere compilato con Microsoft Visual C++.
* SDLmame: versione di MAME per piattaforme che utilizzano librerie grafiche SDL, come Linux e macOS. Dalla versione 0.138 è stato direttamente integrato in MAME
* MAME OS X: è un porting nativo per Mac OS X progettato per avvantaggiarsi di tutte le ultime tecnologie MAC OS X come Core Video e Core Image.
* MacMAME: è il primo porting per piattaforma Apple. Non viene più sviluppato e quindi è fermo alla versione 0.103.
* XMAME o X-MAME: è il primo porting per piattaforme *nix (Linux, Unix, ecc.). Non viene più sviluppato (fermo alla versione 0.106) e SDLMAME è il suo "ufficiale" sostituto. Anche il sito di XMAME non è più disponibile.
* AdvanceMAME: è una versione modificata con delle opzioni particolari per poter utilizzare MAME con i monitor dei cabinet arcade originali (basato su MAME 0.106).
* MAMED: è il porting per Dreamcast e per qualche fotocamera digitale. Basato su MAME v0.37b6
* MAMEDC: è il porting ufficiale per Dreamcast. La v0.4 è basata su mame v0.37b15. Non è più presente sul sito mamedc.kaillera.
* MAME per OS/2: è il porting per OS/2 basato su MAME v.37b14.
* PhMAME: è il porting per il sistema operativo real-time QNX. Basato su XMAME.
* MAME for MorphOS PegasosPP: è il porting per il MorphOS (ultimo porting: Mame0.97).
* MAME per Amiga: è il porting per piattaforma Amiga (ultimo porting: MAME v0.37b2).
* MAME per ARM/RISC OS (Archimedes): è il porting per piattaforme ARM/RISC OS (Archimedes).
* BeMAME: è il port per BeOS. (Basato su MAME 0.36b15 ?)
* MAMEnet: una versione di MAME con l'aggiunta del gioco online.
* MAMECE3: porting per PocketPC.
* zMAME: porting per Sharp Zaurus basato su XMAME v0.57.
* EMAME: porting per EPOC32, palmari Psion e SonyEricsson P800/P900 basato su XMAME 0.37b7
* EMAME9210: porting per cellulare Nokia 9210 basato su EMAME
* E²MAME: porting per Symbian OS basato su EMAME.
* MAME4ALL GP2X/WIZ: porting per console portatile Linux GP2X realizzato da Franxis. Basato su vecchie versioni del mame(0.35-0.40)
* iMAME4all: è un porting per i dispositivi iOS jailbroken (iPad HD, iPhone 4G, iPod touch e precedenti) di David Valdeita; è un porting del MAME 0.37b5 basato su GP2X, WIZ MAME4ALL 2.5 di Franxis. Emula i giochi della 0.37b5 più alcuni giochi provenienti da versioni più nuove di mame.
* MAME4droid: è il porting di iMAME4all per Android (basato quindi su MAME4ALL a sua volta su MAME 0.139u1).
* MAME4droid Reloaded: porting del MAME 0.139 su Android, sviluppato da David Valdeita (Seleuco)
* MAMEoX: è il porting per Xbox.

## Note etiche e legali
### ROM

Il problema legale maggiore quando si parla del MAME è quello delle ROM. Dal punto di vista legale un ROM set altro non è che una copia del gioco originale. Per questo motivo s'incorre in violazione di copyright nel caso in cui non si abbia l'originale del gioco stesso che, nel caso delle piattaforme arcade, è la scheda con i chip. Online si trovavano siti da cui scaricare tutti i giochi emulati dal MAME sotto forma di download diretto di ogni singola rom aggiornata alla corrispondente versione mame. I giochi si possono trovare anche sulle reti peer-to-peer sotto forma di romset specifico per la versione attuale di MAME e attraverso sistemi di vendita on-line. La vendita di ROM è soggetta alle restrizioni sulla vendita di materiale coperto da copyright, ed il loro acquisto da venditori che non detengono il diritto alla vendita è legalmente perseguibile. È vietato (la licenza del MAME è piuttosto chiara in merito) distribuire il MAME sullo stesso supporto in cui si trovano i giochi copiati. Esistono però ROM che si possono tenere liberamente a fini personali, scaricabili dal sito del progetto MAME https://www.mamedev.org/roms/ le rom sono ad libero uso solo se scaricate dal sito mentre è vietato l'hosting su altri siti
Ecco la lista dei giochi resi disponibili al download dai rispettivi proprietari:
Exidy :
| Circus ©1977 Exidy | Robot Bowl ©1977 Exidy | Car Polo ©1977 Exidy | Side Trak ©1979 Exidy | Rip Cord ©1979 Exidy |
| Fire One ©1979 Exidy | Crash ©1979 Exidy | Star Fire ©1979 Exidy | Targ ©1980 Exidy | Spectar ©1980 Exidy |
| Hard Hat ©1982 Exidy | Victory ©1982 Exidy | Teeter Torture ©1982 Exidy | Fax ©1983 Exidy | Top Gunner ©1986 Exidy |
Exidy :
| Robby Roto ©1981 Bally/Midway | Super Tank ©1981 Video Games GmbH | Looping ©1982 Video Games GmbH | Gridlee ©1982 Videa, Inc. | Alien Arena ©1985 Duncan Brown | World Rally Championship ©1993 Gaelco |

### Licenza

Sebbene il codice sorgente del MAME fosse disponibile, MAME non è stato considerato per un lungo periodo software libero nel senso più stretto del termine. Secondo la licenza precedente, era vietato vendere MAME compilato o in forma sorgente, era espressamente vietato utilizzare MAME per fini di lucro e tutto il codice utilizzato per la compilazione (sia esso il cuore del MAME o le librerie esterne) doveva essere disponibile. Erano inoltre vietate versioni modificate del MAME in grado di emulare giochi recenti o appositamente disabilitati.
Dal 4 marzo 2016 il codice è distribuito sotto GNU General Public License, con alcune porzioni di codice pubblicate con la Nuova licenza BSD.

### Trademark

Nel febbraio 2005 una piccola società californiana produttrice di cabinet arcade in grado di lanciare più giochi, la Ultracade, ha cercato di registrare il nome MAME per prevenire l'abuso di tale termine da parte di società concorrenti che invece usano MAME e copie pirata dei giochi nei loro cabinet. La comunità di utenti si è subito mobilitata e ha costretto il titolare della società a cedere inizialmente la registrazione a Nicola Salmoria.; il detentore attuale è invece Gregory Ember.