MAME

MAME（マメ最初の開発者かつ著者であるイタリア人のNicola Salmoriaは、MAMEに関する学位論文 (MAME プロジェクト: リバースエンジニアリングとゲームマシン、シエナ大学、2002 年、5 ページ、イタリア語) の中で、自分が従った発音、つまり英語の発音 ("meim" または "em ei em i") ではなくイタリア語の発音 ("mame") を述べている。）は、オープンソースの汎用エミュレータである。かつてはアーケードゲームエミュレータであったが、現在は汎用エミュレータとなっている。元々の正式名称はMultiple Arcade Machine Emulator。

 概要 
1997年2月5日にイタリア人のニコラ・サルモリアによって最初のバージョン (0.1) がリリースされた。世界中の数十名からなる開発チームにより、現在も開発、改良が続けられている。サポートするタイトル数は、完全に動作しないものも含めて3,500本以上、クローン版（同一ゲームのバージョン違いや、海外向けにローカライズしたものなど）を含めると6,500本以上に上る。現在のプロジェクト管理者はアメリカのアーロン・ジャイルズ。

MAMEはオープンソースであり、GitHubを用いて共同で開発されている。かつては、独自にエミュレート対象のゲームの挙動を修正したり、新しいゲームへと対応させた派生版が多く存在したが、現在は本家MAMEへのマージが進んでいる。非公式版として、多くのに対応するHBMAMEや、CRTモニター向けのGroovyMAME、ピンボール向けの、VGM生成用のMAME/MESS VGM modがある。MAMEフロントエンドとしては、公式のコマンドラインUIの他に、Windows用GUIのMAMEUI、独自インタフェースのIV/Play、MAMEのWebフロントエンドであるEmularityEmscripten Javascript and HTML MAMEdev Teamなどが存在する。かつては、Mac用のMAME OS X、GTK採用のGMAMEUI (GXMame派生)、KDE採用のKxmame (GXMame派生)、Qt採用のMAME Plus!なども存在した。

 サポートするハードウェア 
MAMEがサポートするのは、主に1970年代から1990年代（一部2010年のゲームまで対応）のアーケードゲームやカジノゲームである。Atari PONGやBreakoutなどROMを持たず、ディスクリート回路のみで構成されているゲームも、を通してサポートしている。セグメントディスプレイを使ったゲームなどでは、外部アートワークを必要とするものがある。3Dアートワークにはまだ対応していない3D artwork system #388ため、ワニワニパニックは2Dとなる。またメカニカルのあるゲームはサポートされないか、サポートしててもメカニカル部分の無いものが多い (UFOキャッチャー、プリクラ、メダルゲーム、ピンボールなど)。一部のゲームは音源エミュレーションに未対応であり、音を鳴らすために外部のMAME Samplesが必要となる。近年のPCベースのアーケードゲームには対応しておらず、ArcadePC LoaderやTeknoParrotなどの他のプログラムを使う必要がある。

0.162以降のMAMEは以下のようにアーケード機に限定しないエミュレートを実装している。
 アーケードゲーム基板
 システム基板
 互換基板
 第3世代互換基板（任天堂VS.システム、セガ SYSTEM E）
 第4世代互換基板（セガ Sega System C / Sega System C-2）
 第5世代互換基板（セガ ST-V、ソニー ZN-1/ZN-2、タイトー FXシステム/G-NETシステム、テクモ TPS SYSTEM、コナミ GX700/GV999、ナムコ SYSTEM10/11/12、セタ Aleck64、Atari Cojag）
 テレビゲーム機
 第2世代（フェアチャイルド・チャンネルF、Atari 2600、オデッセイ2、VC 4000、ビジコン、TV JACK スーパービジョン8000、インテレビジョン、Atari 5200、Vectrex、アルカディア、TVボーイ）
第3世代（ファミリーコンピュータ/ディスクシステム/ツインファミコン、セガ SG-1000/SG-1000II/マークIII/マスターシステム、カシオ PV-1000、Atari 7800、スーパーカセットビジョン）
第4世代（PCエンジン/スーパーグラフィックス、メガドライブ、スーパーファミコン）
第5世代（ネオジオCD-Z、ルーピー）
 ビデオゲーム内蔵テレビ（ファミコンテレビC1）
 復刻系ゲーム機（メガドライブ プレイTVシリーズ）
 業務用テレビゲーム機（ファミコンボックスなど）
 店頭販促機（Nintendo M8）
 ゲームパソコン（コモドール VIC-1001/コモドール64/マックスマシーン、ZX Spectrum/、トミー ぴゅう太、ソード M5、セガ SC-3000）
 マルチメディア機（フィリップス CD-i）
 電卓（ビジコン 141-PFなど）
 グラフ電卓（HP 38G/48シリーズ/49G、/81/82/85/86/89 シリーズ/92シリーズなど）
 LSI/LCDゲーム (Mattel Auto Race/Football、Merlin、ゲームロボット九、Tiger LCDゲーム、学研 LSI GAMEシリーズ、ゲーム&ウオッチ、バンダイ FLシリーズ、トミーエレクトロニクスゲームシリーズ、ポケモンミニ、たまごっちシリーズ、デジタルモンスターシリーズ、ちびぱち エイリアンフィーバー、ビーンズコレクション ヴィーナス、ピコリン55など)
 電子ボードゲーム (など)
 携帯型ゲーム機
 第2世代（Microvision、ゲームポケコン、アドベンチャービジョン）
 第3世代（ゲームボーイ、Atari Lynx、ゲームギア）
 第4世代（ノーマッド、ゲームボーイポケット/カラー、game.com、ネオジオポケット/ネオジオポケットカラー、ワンダースワン、、、Gamate、）
 第5世代（ワンダースワンカラー、ゲームボーイアドバンス）
 体感ゲーム・プラグ&プレイ型ゲーム機（ (バンダイ Let's! TV プレイシリーズ、タカラ Plug It!シリーズ、トミー テレビで遊び隊シリーズ、エポック 体感ゲームシリーズ、など)
 ラジコン (システムコントロールカー チータなど)

 ミニコンピュータ（PDP-1）
 ワークステーション (Apollo/Domain、 R4000、Omron Luna 88K/88K²、HP 98x6、Sony NEWS NWS-3410/NWS-3720等)及びその周辺機器(プリンターや音声合成装置やミュージカルキーボードなど)
 グラフィックワークステーション (SGI Personal IRIS 4D/Professional IRIS 4D、 HP1/HP2、等)
 モバイルワークステーション (Sony NEWS NWS-3260等)
 プログラマブル計算機 (等)
 デスクトップパソコン (、IBM PC/PC XT/PCjr、Apple III/シリーズ//LCシリーズ/Performaシリーズ/Quadraシリーズ/、、Sharp X1シリーズ/MZ-2000シリーズ、PC-9801RS、PC-9821Ap2/U8W等)
 テレビ内蔵コンピュータ（Macintosh TV）
 ポータブルコンピュータ (IBM 5100/5110/5155、、Macintosh Portable等)
 ノートPC（PowerBook 100/140シリーズ///Duoシリーズ、シリーズ）
 ホビーパソコン/ホームコンピュータ (Apple I/II、TRS-80、Commodore PET 2001、日立 ベーシックマスターJr.、各社MSX/MSX2/MSX2+、BBC Micro/、Sharp X68000など)
 開発システム (、Intel Intellec MDS-II等)
 ワードプロセッサ (、ブラザー AX-145/など)
 ワンボードマイコン (、KIM-1、SYM-1、、Motorola 、Motorola EXORciser、、、、Intel 、シグネティクス Instructor 50、NEC TK-80等)
 シングルボードコンピュータ (Intel iSBC 286/10、FriendlyARM等)、
 パームトップPC (Atari Portfolio等)
 ポケットコンピュータ (//、Psion Organiser II等)
 ハンドヘルドコンピュータ/携帯情報端末 (Casio/Tandy Zoomer、、Palm 、PalmPilot、、等)
 知育玩具・子供用パソコン (TI 、ベネッセ ポケットチャレンジV2、SEGA アドバンスピコ・ビーナ、カービーナ等)
 競馬予想機 (Thoroughbred Horse Race Analyzerなど)
 決済端末機 (VeriFone 等)
 音源モジュール (YAMAHA FB-01/MUシリーズ等)
 エフェクター（Alesis MIDIverb/MIDIFEX）
 MIDI-CVコンバーター（PAiA Midi2CV8）
 LDプレーヤー (Pioneer LDV-1000、Pioneer PR-8210など)
 フィットネスマシン (Salter Fitness Bike、Salter Fitness Stepper)
 電子楽器
 電子パーカッション（Yamaha DD-9など）
 ドラムマシン (Casio RZ-1、、、LinnDrumなど)
 電子キーボード/シンセサイザー (カシオトーン 8000/FK-1/WK-1600/WK-1800/CTK-530/CTK-551/CTK-601、カシオ・CZシリーズ、/PSRシリーズ/PSSシリーズ、Sequential Circuits など)
 電子ピアノ（CASIO Celviano AP-10など）
 多機能スピーカー（Casio GZ-70SPなど）
 言語翻訳機 (TIのLanguage TranslatorやLanguage Teacher等)
 音声モールス発生器（Gerät 32620）
 ドアチャイム（Chromatronics Chroma-Chime）
 キディライド（SEGA わくわくシリーズ、ジャンボゴジラなど）
 メダルゲーム 
 キッズメダル（Sigma B-98、ワイワイジョッキーなど）
 ポップコーン販売機（それいけ！アンパンマン ポップコーンこうじょう、セガソニック ポップコーンショップなど）
 パンチングマシン（ソニックブラストマン、リアルパンチャーなど）
 UFOキャッチャー（NEW UFO CATCHERなど）
 バーサライタ（ Sky-Writer）
 シールプリンター（TOMY Prin-C/プリンシータブレット）
 電子式抽選器（コナミ 抽選王）
 電子ブロック（FX-マイコンR-165）
 ピンボール

なお、古いPCへの対応は、SPC/ATやPCem、Common Source Code Projectなどのエミュレータの方が進んでいる。

 開発方針 

MAMEの開発方針はオリジナルのハードウェア動作を忠実に再現することに重点を置いており、MAMEは基本的にAPUやMPUなどのチップレベルの低レベルエミュレーション (LLE) を行っている。ただし例外として、キーボード周りやI/O周りやDSPなどには高レベルエミュレーション (HLE)も使われている。

 ROMイメージ 

MAMEで使用するROMイメージを入手するためは、他の低レベルエミュレータと同様に、基板から実物のROMの内容を吸い出す必要がある。ただし例外として、Exidy社、バリー/ミッドウェイ社などの作品のうち、一部のゲームのROMイメージは、メーカーからの正式な許可を得たうえで、MAMEの公式サイトで配布されている。また、ドイツのコンピュータ雑誌「c't」で、「UDPを使いMAMEを自動制御し、アタリ社のゲーム『アステロイド』のハイスコアを競う」内容のコンテストが行われる際に、この雑誌の読者向けに、アタリ社より『アステロイド』のROMイメージを配布する許可を得ている（不特定多数が対象ではない）。

 歴史 
1997年にリリースされた当初はMS-DOS版として開発されていたが、年内にはMacintosh (MacMAME)、Unix系OS (X/MAME)、Windows (MAME32)に移植されたMAME Project History MAME project。また、1998年には、MAME 0.33のベータ版を基にして、コンソールゲームおよびコンピュータシステムエミュレータであるMESS（Multi Emulator Super System）の開発が始まった。2003年よりCPUエミュレーションのが追加されはじめた。2005年、MAME 0.99u2で、ギャンブルゲームを実装するAGEMAME (旧MAGE)がMAMEに統合されはじめた。2007年、MAME 0.120でWindows 64ビット版が公式に用意された。

2010年、MAME 0.136u1で、SDL採用のクロスプラットフォームなコマンドライン版であるSDLMAMEがMAMEに統合された。2011年、MAME 0.141u1で、ピンボールを実装するPINMAMEがMAMEに統合されはじめた。2012年、MAME 0.146u4でによる電子回路シミュレーションに対応した。

2015年のMAME 0.162で、コンソールゲームおよびコンピュータシステムエミュレータであるMESSはMAMEに統合された。そのため、MESS利用者マニュアルは現在もMAMEの非アーケード部分における最も重要な使用説明書である。これにより、MAMEはアーケードゲーム機以外のゲーム機もエミュレートできるようになったため、この頭字語「MESS」は廃止された。2012年以降、MAMEは元MESSプロジェクトリーダーのミオドラグ・ミラノヴィッチによって維持管理されている。同年、MAME 0.168でMAMEをJavaScriptへとコンパイルしてWeb上で動かすJSMESSがMAMEのコードベースに統合された0.168 MAME project 2015年JSMESS JSMESS project。更に同年、MAME 0.171で独自インタフェースのMEWUIがMAMEのコードベースに統合された0.171 MAME project 2015年ほか、派生版のみに実装されていたAuto-fireに対応しMAMEUIFX v0.171 EmuCR.Com 2016年2月25日、また、GPUバックエンドのBGFXが追加された。

2016年、MAME 0.172でライセンスが一般的なオープンソースライセンスのGPLとなったMAME 0.172 MAME project 2016年3月30日。また、ハイスコアが再実装されたほか、CRTモニタ向けのGroovyMAMEの拡大縮小周りが統合されたMAME 0.172 MAME project 2016年3月30日。同年、MAME 0.177でVGM形式の音源を再生するための、VGM Playerが搭載された。2019年、MAME 0.216でレイテンシを削減する「-lowlatency」オプションが追加された0.216 MAME project 2019年11月27日。

2024年、MAME 0.265でタッチスクリーン入力に対応したMAME 0.265 MAME project 2024年4月25日。

 設計 
MAMEコアは複数の要素のエミュレーションを同時に調整する。これらの要素は、実機に存在するハードウェアの動作をそのまま再現する。MAMEは多様な中央処理装置（CPU）と関連ハードウェアをエミュレートできる。これらの要素は仮想化され、MAMEはゲームの元のプログラムと動作プラットフォームの間にソフトウェア層として機能する。MAMEは任意の画面解像度、リフレッシュレート、表示設定に対応している。例えば『ダライアス』で必要とされる複数モニターのエミュレーションも同様に対応している。

個々のシステムはCプリプロセッサマクロ形式のドライバで指定される。これらのドライバはエミュレート対象の個別コンポーネントと相互通信方法を定義する。MAMEは当初C言語で記述されていたが、オブジェクト指向プログラミングの必要性から開発チームはMAME 0.136以降、C++で全コードをコンパイルする方針へ移行した。この過程でC++の追加機能を活用している。

CPUエミュレーションコアの大部分はインタープリタ型であるが、MAMEはエミュレーション速度向上のため、中間言語であるユニバーサル機械語（UML）を介した動的再コンパイルも対応している。対応しているバックエンド対象はx86とx64である。正確性の検証をさらに支援するため、A Cバックエンドも利用可能である。この方法でエミュレートされるCPUはSH-2、MIPS R3000、PowerPCである。

 ROMデータ 
システムをエミュレートするには、元のプログラムコード、グラフィック、サウンドデータが存在する必要がある。ほとんどの機械（マシン）では、データは読み取り専用メモリチップ（ROM）に保存されるが、カセットテープ、フロッピーディスク、ハードディスク、レーザーディスク、コンパクトディスクなどの他のデバイスも使用される。これらのデバイスのほとんどの内容は「ダンプ/Dump」と呼ばれる過程でコンピュータファイルにコピーできる。作成されたファイルは記録媒体の種類に関係なく、一般的にROMイメージまたはROMと呼ばれている。ゲームは通常、複数のROMイメージとPALイメージで構成され、これらのイメージファイルは単一のZIPファイル内にまとめて保存され「ROMセット」を構成する。「親」となるROMセット（通常はゲームの最新の世界版が選ばれる）に加え、異なるプログラムコードや異なる市場向けの言語テキストなどを備えた「クローンまたは子」ROMセットが存在する。例えば、『ストリートファイターII ターボ』は『ストリートファイターII'』の派生版と見なされる。ネオジオのような複数ゲームでROMを共有するシステムボードでは、ROMを「BIOS」ROMセットに格納し、適切な名前を付ける必要がある。

MAMEのROMには、分割型、非結合型、結合型の3種類がある：

「分割」ROMはROM自身に関する情報のみを含む。例えば「クローン」ROMには「親」ROMに必要なデータは含まれず、「親」ROMにはクローンROMのデータは含まない。

「非結合」セットは、プログラムの実行に必要な全て（親ROMなど）を単一のZIPファイルに収めたROMである。非結合ROMは冗長性によりROMファイルの容量が大きくなるが、特定のプログラム群のみが必要な場合（例：特定のゲームバージョンだけを求め、他の必要なファイルの取得が不要な場合）に有用である。

「結合」セットとは、「親」ROMとその「クローン」を一つのパッケージに収めたROMである。例えば、結合された『パックマン』ROMには、親となる日本版のパックマンROM、ミッドウェイ社の米国版パックマン、およびその他の全てのクローン版や海賊版が含まれる。分割セットよりも容量効率に優れている。

ハードディスク、コンパクトディスク、レーザーディスクは、CHD（Compressed Hunks of Data）と呼ばれるMAME固有の形式で保存される。一部の機械・マシン（レーザーディスクなど）は、サウンドトラックやシネマティック映像などのオーディオ/ビデオデータを保存・再生するためにアナログハードウェアを使用する。このデータはキャプチャされ、MAMEが読み取れるデジタルファイルにエンコードする必要がある。MAMEは外部アナログデバイスの使用に対応していない。これは（同一のスピーカーおよびスピーカー筐体とともに）体験を100％忠実に再現するために必要となる。エミュレートされていないオーディオ回路を搭載したゲームはサウンドエミュレーションにWAVファイル形式のサウンドサンプルを必要とする場合は減少傾向にある。

MAMEはさらに、ベゼルやオーバーレイ用グラフィックとしてPNG形式のアートワークファイルに対応している。また、『ゲーム&ウオッチ』のような液晶ディスプレイを搭載したゲームやスロットマシンのような追加物理要素を持つゲームのエミュレーションには、背景やその他のゲーム要素用の追加画像ファイルが必要となる場合が一般的である。

 動作 
MAMEの動作には、実際の基板上のデータイメージ（ROMイメージ）を用意する必要がある。MAMEは基板のハードウェア構成をソフトウェアでエミュレートすることにより、オリジナルのROMイメージを異なるハードウェア上で動作させることを可能にしている。エミュレートするCPU/MPUは代表的なZ80や68000をはじめとして100種類以上、サウンドチップ/DSPは70種類以上、そのほか多くのカスタムチップもサポートする。また一部のアナログICやアナログ素子もNetlistでサポートしている。

最近のバージョンでは、3Dグラフィックシステムなど、処理量の多いゲームにも対応している。しかし、前述の通り、エミュレーションの動作速度よりもオリジナルハードウェアの忠実な再現を目的とするため、3Dグラフィックやテクスチャ処理なども、Direct3DなどのOS固有の拡張機能を使わず、オリジナルハードの動作を元に全てソフトウェアで処理を行う。このため最新の高速プロセッサでもオリジナル同等の処理時間で動作しないタイトルが一部存在する（Windows版では描画の設定にDirect3Dの項目があるが、これは最終的な描画先としてDirect3Dを用いるだけであり、エミュレーション処理自体には関係しない）。

 盗用問題 
以前のMAMEは商用利用を禁止していたが、度々それに違反した利用が発覚している。

 メディアカイト「ネットげーせん」
 ハムスター「オレたちゲーセン族シリーズ」
 200in1等を謳う製造者不明なエミュレータ筐体，エミュレータ台（アーケードゲーム筐体として流通）

脚注

 関連項目 
 :en:Visual Pinball
 アーケードゲーム基板
 エミュレータ
 ゲームエミュレータ
 エミュレータ基板

 外部リンク 
 MAME公式サイト＆開発情報（英語）
 MAMEUI公式サイト（英語）
 MAME E2J

Category:エミュレーションソフトウェア
Category:アーケードゲーム
Category:フリーウェア
Category:1997年のソフトウェア
Category:C++でプログラムされた自由ソフトウェア
Category:Luaでスクリプト可能なソフトウェア