MAMEL'autore, l'italiano Nicola Salmoria, ha indicato nella sua tesi di laurea sul MAME (Il progetto MAME: Reverse Engineering e macchine da gioco, Università di Siena, 2002, pag. 5), la pronuncia da lui seguita, ossia all'italiana ("mame"), non all'inglese ("meim" o "em ei em i"). (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.289, pubblicata il 31 luglio 2026: sono supportati oltre 14.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.