MAMEのコンパイル
注意:このサイトは「Welcome to MAME WORLD」を日本語にしただけの様なモノです。
簡単な英語の読める人ならば、そっち↑の方を見た方が絶対良いでしょう。

MAMEって何ぞや?
 このページを見ている皆さんは、恐らくMAME(ultiple rcade achine mulator)を ご存じだと思いますが、一応簡単に紹介しましょう。 MAMEと言うのは、Nicola Salmoria氏を中心としたチームが1997年からリリース し始めた、その名の通り、様々なアーケードゲームをエミュレートする為の フリーエミュレータです。 元々はNicola氏が所有していたレトロアーケードゲーム基盤の故障から始まった と言われています。 当初、数個のゲームから始まった同エミュレータ。現在では2000を超える アーケードゲームをサポートし、驚異的なエミュレータに成長しています。 このエミュレータの特徴としては、 1.C言語で書かれていてソースが公開されている(オープンソース)為、 多機種に渡る移植が可能である。 2.(ある程度の技術がある人ならば)誰でも開発に参加できる。 3.改造した物を配布できる(販売は出来ない)。(オープンソースや、 メインへのフィードバックが望まれるが) 4.近年、NEOGEOの様な、かなり最近のゲームまでをもサポートし始めた。 5.コアチーム以外にもMAMEの開発に関わる人々が世界中に存在する。 などがあります。 MAMEのofficialサイト「The official Multiple Arcade Machine Emulator (MAME) page」 は要チェックでしょう。
じゃあ、何故コンパイルするの?(初心者向け)
オフィシャルサイトに行かれた方はご存じだと思いますが、MAMEは原則として ソース(この場合はC言語で書かれたプログラムの事)配布です。 しかし、コンピュータはこのC言語のソースを直接には理解できません。 従って「コンパイル」という、C言語のソースをコンピュータが理解できる 機械語と呼ばれる物に変換する作業が必要になります。 この「コンパイル」と言う作業の為には「コンパイラ」と呼ばれるソフトが必要です。 有名な物ではMicrosoft社の「VisualC++」だとか、Borland社の「BorlandC++」 だとかがありますね。 と言うことは、これらの高価な(最近は安くなりましたね。以前は10万円前後もしました。) 市販品を買わなければならないのでしょうか!? いいえ、その必要はありません。 ここでは、フリーのコンパイラ「GNU-C Compiler(をDOS用に移植したDJGPP)」を用います。 実はこのコンパイラ、UNIX系で標準になっていまして、非常に高性能で玄人好みな コンパイラです。 もちろんANSI規格に準拠していますし、プログラマ(ハッカーと呼ばれる凄い人達も 含めて)の中では「一番良い。市販品よりよっぽど信頼できる」と言う人もいる位に 人気のコンパイラなのです。こんな優れたコンパイラがフリーで手に入るのです。 凄い事だとは思いませんか? 話が逸れましたが、つまりが 「MAMEはソース配布だから、コンパイルしないと遊べないよ」 と言う事なのです。 (現在はオフィシャルサイトでもバイナリを配布していますので、遊ぶだけなら あえてコンパイルする必要も無くなってしまいましたね。でも、自力でコンパイル できるようになると、ソースをいじって、自分であれこれ変えることが出来るように なりますし、Virus感染を心配しなくても済むようになる大きなメリットがあります。)
MAME DOS版レシピ(MAME0.37b6以降)の材料
用意する物は… ・zipファイルを解凍できるプログラム(Lhasa0.13等がお手軽でオススメですね)。 (注、ここでのLhasaの設定は「書庫と同じ場所に解凍」がオンにして、「フォルダ自動生成」 を、オフにして下さい。) 以下のファイルの一部はMAMEのofficialサイトでもダウンロードできます。 ・DJGPP本体のファイル 「gcc2952b.zip」1.8MB 「bnu2951b.zip」1.9MB 「djdev203.zip」1.4MB 「mak3791b.zip」242KB v37b12から変わりました。 ・GNU File Utilities(UNIXの様なコマンドの追加等)のファイルv37b6から追加されました。gnufut21.zip」761KB ・MAMEのソース(流石に無いとお話になりませんので…) β版の場合は「m??b?s.zip」 リリース版の場合は「mame???s.zip」 ・DOS版のDPMIメモリマネージャ(Windows上のDOS窓でしかMAMEを使わない場合は 必要ありません。) 「csdpmi??.zip」41 kB位 ・Allegroゲームライブラリ 「all3934.zip」1647 kB位(v37b12から変わりました!) ・sealサウンドドライバ 「mamesealnew.zip」69 kB位(v37b5から変わりました!) ・zlib(zipファイル等を扱うための物) 「zlib113.zip」214 kB位 ・Netwide アセンブラ(MAMEのコンパイルに要ります) 「nasm098.zip」160 kB位 ・UPX(コンパイル後のexeファイルを圧縮する為のツール) 「upx???w.zip」113 kB位 ・気合いとやる気(必要不可欠だと思うのですが、重要ではないのかも。(ぉぃ) ・コンパイル神(ゲームメーカに非ず)の寵愛。(笑)
第1段階(DJGPPインストール)
まずは肝心の、DJGPPのインストールを行います。 <ここでは、Cドライブのc:\djgppにDJGPPをインストールするとします。> 1.ディレクトリ(フォルダ)c:\djgppをエクスプローラ等で作成。 2.先ほどダウンロードした、4つのDJGPP本体のファイル 「gcc2952b.zip」 「bnu2951b.zip」 「djdev203.zip」 「mak3791b.zip」 を、c:\djgppにコピー。 3.以上4つのファイルを解凍。(もしunzip.exeを使う場合は、unzip *.zip -d c:\djgpp\ と、して下さい。) 4.c:\にある、「autoexec.bat」に、以下の2行を付け加えて下さい。 (単に貼り付けてOKです。) path=%path%;c:\djgpp\bin SET DJGPP=c:\DJGPP\DJGPP.ENV 5.もう、2.で使用した4つのZIPファイルは必要ありませんので、削除してもOKです。 6.設定を有効にするため、一度Windowsを再起動して下さい。
第2段階(UPX,Seal,nasm,GNU file utilitiesインストール)
1.「upx???w.zip」をc:\djgpp\binに解凍。 2.「mamesealnew.zip」をc:\djgpp(上書きで)解凍。 (Lhasaやunzip.exeなら、自動的に上書きするはずです。) 3.「nasm98.zip」をc:\djgpp\binに解凍。 4.「gnufut21.zip」をc:\djgpp\binに解凍。 5.もう1.2.3.4.で使用した4つのZIPファイルは必要ないので、削除してもOKです。
第3段階(allegroインストール)
1.c:\djgppに「all393?.zip」を解凍。 2.DOS窓で以下の3つのコマンドを順に入力します。
cd c:\djgpp\allegro
make lib
make install
コンパイル後、インストールまでが成功すると 「The optimised djgpp library has been installed」 と言う、メッセージが表示されます。 3.1.で使ったZIPファイルはもう必要ないので、削除してもOKです。
第4段階(zlibインストール)
1.ディレクトリc:\djgpp\zlibをエクスプローラ等で作成。 2.「zlib113.zip」をc:\djgpp\zlibにコピー。 3.「zlib113.zip」を解凍。 4.DOS窓で以下の2つのコマンドを順に入力します。
cd \djgpp\zlib
make -fmsdos\makefile.dj2
5.コンパイルが完了したら、c:\djgpp\zilbにある libz.ac:\djgpp\lib zlib.hc:\djgpp\include zconf.hc:\djgpp\include にそれぞれコピーします。 以上で、MAMEのコンパイル環境は整いました。
最終段階(MAME本体のコンパイル!!)
では、さっそくMAME本体のコンパイルに取りかかりましょう。 1.ディレクトリc:\mamesrcをエクスプローラ等で作成。 2.MAMEのソースのZIPファイルをc:\mamesrcにコピー。 3.MAMEのソースを解凍(何故か2重になっています)。 4.DOS窓で以下の2つのコマンドを順に入力します。
cd \mamesrc
make
DOS窓でコンパイルしている途中、英語で「DPMIが〜」とか文句を言って止まる事が ありますが、その場合はDOS窓を閉じないで、
make
と入力すれば、コンパイルを再開します。(このような形で止まるとしてもたかだか2回でしょう。 もし違うエラーが出る様ならば、コンパイル環境のインストールに失敗している可能性 があります。) 以上でc:\mamesrcのディレクトリの中に、光輝く(?)
MAME.exe
が誕生しているはずです。 折角苦労して(?)コンパイルしたのですから、早速実行してみましょうね。(^o^)
番外編(ちょっとした遊び方)
MAME自体の使い方は付属のドキュメントをしっかり読めば(英語ですけど)、 簡単です。ここではMAME自体の遊び方ではなく、コンパイルできるからこその 遊び(?)をしてみましょう(と、言うほどのことでもないですが)。
1.NEOMAMEを作る
NEOMAMEとは、NEOGEOのドライバしか入ってない(=NEOGEOしか動かせない)けれど、 サイズがコンパクトなMAMEのことです。 これを作るのは簡単で、まず、c:\mamesrc\makefileをメモ帳か何かで開きます。 次に、21行目の
# NEOMAME = 1
の先頭の「」を削除し、上書き保存します。
2.NEOFREEMAMEを作る
1.とは逆に、NEOGEOを組み込まない様にしたMAMEの事です。 なんせ、NEOGEOは未だゲームセンターで稼働している物が殆どですからねぇ…。 作成方法は、c:\mamesrc\makefile20行目にある
# NEOFREE = 1
の先頭の「」 を削除し、上書き保存します。
3.TESTDriverを試す
そもそもMAMEは、ゲーム一つ一つに「ドライバ」と言うプログラムを用意する事によって 動作させています。 この「TESTDriver」とは、未だサポートはされてないが、一応組み込まれている ドライバの事です。 もちろん、普通にコンパイルしただけでは、動作させる事は出来ません。(そのはず) そこで、このTESTDriverを普通に動作できる様にしてみましょう。(もっともTESTVersion ですから、まともな動作を期待しない方が良いです。これはあくまで楽しみと言う事で。) 方法: 「c:\mamesrc\src\driver.c」と言うファイルをメモ帳などで開きます。 このソースを見ていると
TESTDRIVER( ????? )
の様な物を見つけることが出来ると思います。 これを、
DRIVER( ????? )
の様にしてやって、コンパイルし直せば動く様になります。
4.新しい対応ゲームの追加
まあ、この辺はC言語とエミュレータの知識と技術とやる気が同居している人に頑張って 貰いたいですねぇ…。私なんぞにはとてもとても…。 まあ、簡単な所では、KBMAMEの「neogeo.dat」でも見ながら 「c:\mamesrc\src\drivers\neogeo.c」に書き加えていけば良い訳です。 普通は
ROM_START( neo_?????_rom )
から
ROM_END
までと、最後の方の
NEODRIVER(ファイル名,"ゲーム名","発売年","メーカー",&neogeo_16bit_machine_driver)
(例) を書き加え、さらに「c:\mamesrc\src\driver.c」の
/* Neo Geo games */
から始まる所で、
DRIVER( ????? )
を追加すればOKなはずです。多分…。
5.68000CPUのASM版コアを使う。
最近はC版も高速+安定になってきたので、余り必要無いと言えばそうなのですが、 アセンブラで書かれた、高速動作(のハズ)の68000CPUコアを使う方法を紹介しましょう。 実はこれを実現する方法は非常に簡単で、Makefile27行目にある、
#X86_ASM_68K = 1
の先頭の「」を外します。 ちなみに私もASMコアを使ってみましたが、バグ持ちで不安定なのと、速いと言っても 速度にばらつきがあって、今はまだゲームには向いてないな〜、と言うのが感想でした。 追記: v36付近のバージョンでは、標準でASMコアを使う様ですね。Cコアを使いたい場合は、 上記の行をコメントアウトすれば良いわけです。 追記2:(2000/8/5) v37b5で追加された彩京のゲームは、ASMコアを使うと動かないそうです。 そこで、MakefileもデフォルトではCコアを使うようになっているみたいです。
6.Optimized MAMEを作る
β10から、K6シリーズやPentiumPro,Celeron,Pentium2シリーズなどに対して、 最適化したMAMEを自分でコンパイルできる様になりました。(以前はA/PMAME等がありました) CPUに合わせて最適化すると、普通のMAMEよりも若干軽くなる様です。 これらのCPUを搭載している場合は、試してみてはいかがでしょう。 ・K6シリーズに最適化する場合
MAKE K6=1
・PentiumPro、Celeron、Pentium2に最適化する場合
MAKE I686=1
追記: これらを用いた場合、「mamek6.exe」か「mamep6.exe」と言う名前でMAME本体が 出てきます。このままだと、make cleanを行った際に「mame.exeがねぇ」と 文句を言ってきますが、放って置いても特に問題ありません。 さらに追記: 「make clean I686=1」の様にすれば、正常に削除されます。
7.?MAMEを作ろう〜Tinyを使いませう〜
プレイする特定のゲームだけをコンパイルして、MAME本体もコンパクト、 コンパイルも少々速い(?)と言う事を実現しちゃいましょう。 とりあえず、xeviousをターゲットにして説明します。 まず、\src以下の「tiny.mak」を ------------------------------------------------------------------------------ # a tiny compile is without Neogeo games COREDEFS += -DTINY_COMPILE=1 -DTINY_NAME=driver_xevious # uses these CPUs CPUS+=CPU_Z80@ # uses these SOUNDs SOUNDS+=SAMPLES@ SOUNDS+=NAMCO@ OBJS = $(OBJ)/vidhrdw/xevious.o $(OBJ)/machine/xevious.o $(OBJ)/drivers/xevious.o # MAME specific core objs COREOBJS += $(OBJ)/driver.o ------------------------------------------------------------------------------ の様に書きます。 次に、usrintrf.c、mame.c、config.cのcheatに関する部分を全てコメントアウト。 更にmakefileの2行目のTARGET=mameの所を#でコメントアウトし、6行目の# TARGET=tiny の#を削除します。 最後に、「make tiny」でコンパイル出来るはずです。 …と言うのも難なので、ここにゼビMAMEのソースを置いておきます。 これをmame37b12のソースを展開したディレクトリに解凍して下さい。
8.CPS2への対応
最近CPS2がdecryptされ、遊べるようになりました。同時期にCAPCOM(C)がarcadeから 脱退したことを考えると、なんだか複雑な気分です。 明らかに、EmulatorのArcade市場への影響は無視できない物になってきています。 共存が出来る環境を構築することが急務になっているのかも知れませんね…。 さて最近、CPS2ShockにてXOR decryption tableなるものが公開されています。 が、その対応速度が余りに速いのでOfficialMAMEがリアルタイムに追従できません。 かと言ってUnofficialな物はVirusの心配が…。 そこで、自分で配布されたtableを読み込む様に、ドライバを書き換えてしまいましょう。 ソースを展開したディレクトリ以下の\src\drivers\cps2.cの目的のゲームの部分に tableを読み込むように修正を加えれば良いわけです。 具体的には、 ------------------------------------------------------------------------------ ROM_FILL(XOR_BASE, XOR_BASE, 0) ROM_LOAD16_WORD_SWAP( "dd2jx.03b", XOR_BASE+0x000000, 0x80000, 0xa63488bb ) ROM_LOAD16_WORD_SWAP( "dd2jx.04b", XOR_BASE+0x080000, 0x80000, 0xe3ff7985 ) ------------------------------------------------------------------------------ の様に「ROM_FILL」より後ろの部分を書き加えてしまえば良いだけです。 書式は、 「ROM_LOAD16_WORD_SWAP( "ファイル名", XOR_BASE+0x??????, 0x80000(tableのサイズ?),CRC )」 となっています。 ・ファイル名はtableを読む順番で書いていかなければならない様です(後述のXOR_BASEを 書き換えれば良いのでしょうけど、見辛くなるのでやめておいた方が無難でしょう)。 ・XOR_BASEの部分は0x000000→0x080000→0x100000の順番で増えていく様です。 例の場合、tableファイルは2つなので、0x080000で終わりになります。 ・CRCは必ずしも正確である必要はありません。ですが、気になる人は一度このまま コンパイルして実行した際「ロムのCRCが違っとるで」と言われます。 その際のexpect〜の部分がソースで指定したCRC。found〜の方が実際のCRCとなります。 まあ、CRCを調べるツールを使えばそれで済むかも知れませんが、私はMAMEと同じCRC コードを吐くツールを知りません。 ・上の例に関しての質問は一切合切受け付けません。ご遠慮下さい。
9.MAME version35 beta15以降
ついにメインのMAMEもWindowsへ移行し始めました。当分はDOSの方も残すそうですが、 私が持っているGeForce2 MXなどだと、DOSの方で解像度によってはOSごとハングアップして しまう事もありましたので、最近のグラボーを所有している人にはもう、DOSの方を 使うメリットは無いかも知れません。 現在のソースではWin版とDOS版の両方が組み込まれていますが、コンパイル方法は、 若干異なります。 一番大きく変わったのは、コンパイラにDJGPPではなく、MinGWを用いる事でしょう。 よって、Windows版をコンパイルしたい時は、コンパイル環境を新たに作り直さなければなりません。 とは言え、MAMEチームがコンパイル環境を殆ど完成させた状態で公開していますので、 簡単に環境を移行することが出来ると思います。
コンパイル環境の設定
まず、以下の物を用意します。 ・MAME本体のソース「m35b15s.zip」 ・MAMEのホームページで公開されているコンパイル環境「mingw_for_mame.zip注、Cドライブにインストールすることを前提とします。 A.以前の環境をメインに残す場合 1.Cドライブのルートディレクトリ(c:\)で、「mingw_for_mame.zip」を 解凍します(解凍方法はここと同じです)。 2.「c:\windows\command\」の中に、以下の内容のテキストファイルを作り 「env.bat」と言う名前で保存します。
@echo off
path=C:\WINDOWS;C:\WINDOWS\COMMAND;C:\mingw\bin
これで今後、MinGWを使いたい時には、DOSプロンプトで「env」を実行すれば、 MinGWの環境が使える様になります。 B.以前の環境を削除する場合 1.「c:\DJGPP\」以下を全て削除します。 2.以前書き込んだ「c:\autoexec.bat」のDJGPPに関する部分を削除します。 3.pathの部分に「path=%path%;c:\mingw\bin」を追加します。
コンパイル
コンパイル方法は、DOSプロンプトで、
make MAMEOS=windows
とします。勿論今までと同様に最適化も出来ます。 例えば、PentiumPro、celeron、PentiumII、PentiumIII等では、
make MAMEOS=windows I686=1
Athron、Duron、K6、K6-2等では、
make MAMEOS=windows K6=1
としましょう。
番外の番外編。(RAINEコンパイル)
最近、RAINEのソースがリリースされました。そこで、早速コンパイルしてみました。 適当に説明しますんで、分かる人だけやってみて下さい。 1.VintagegamingのRaineページへ行って、以下のファイルをダウンロード。 「all3927.zip」 「raine20000725s.zip」 MAMEと同じDJGPP本体4つのファイルと、ZLib、seal、nasm、UPX、GNU File Utilitiesを用意。 「txi312b.zip」をDJGPPのオフィシャルサイト等からダウンロード。 2.DJGPPのインストールは、MAMEの時の方法に加えて、c:\djgppに 「txi312b.zip」を解凍。 3.Zlib、seal、nasm、UPX、GNU File UtilitiesのインストールはMAMEと同じ。 4.allegroのインストールは、ちょっと面倒。 ・「all3927.zip」をc:\djgpp以下に解凍し、raine20000725s.zipに含まれている 「ahack3927.zip」をc:\djgpp\allegro以下に(上書き)解凍。 ・c:\djgpp\allegro\src\dosにある、djoydrv.cのIFSEGAに関する2行を削除。 ・「make」(make libではない)して「make install」。 5.適当なディレクトリに、raine200000725s.zipを解凍し、さらに、 source.rarをその場で解凍。(RARUtyやWinRAR等を使用のこと。) 6.Makefileの34行目で、nasmとなっている所をnasmwに変更。 7.Makefileの37行目を「ALDIR= $(DJDIR)/allegro」と変更。 8.「make」後「upx raine.exe」として、raineを圧縮(しなくても良い)。 9.「make pack」として、「raine.dat」を組み込む。(必ず7の後に。ただし、しなくても良い。)
Raine追加情報
1.DBOY等の作者である「某吉」さんが、バトルガレッガの音が出るRaineのドライバの ソースをリリース。 最新版を当ててみたら音がちゃんと出るようになった。 2.ひょっとしたらMAMEのコンパイル環境でも、コンパイルできるかも。 ただし、付属のallegro hackはallegroに当てておいた方がよい。 3.Makefileで-mcpuと-marchオプションが設定できる箇所が各々2カ所あった。 そこの「pentium」と書かれた場所を「pentiumpro」とか「k6」とかに書き換えると…? 試したみたが、元々Raineは速いので差を感じられず…。 ひょっとしたら効いてないのかもね。(泣) 4.8月9日版のRaineソースのコンパイルが上手く出来ません。 出来た方はメール又は掲示板に御一報を下さい。お願いします。 5.raine30b(beta)から、allgeroのバージョンがall3934に変更になりました。 この辺りから取ってきましょう。 6.ここにraineの開発用CVSレポジトリが公開されています。 ホームページのをよく読んで、CVSにある最新版のソースを取ってきましょう。 最近(2001/3/13現在)は、cave関連のドライバが頻繁に更新されているようです。 7.コンパイルに使うdjgppは最新のMAMEと同様の、最新版の物を使いましょう。 raineのallgero hackを当てた後でも、MAMEは問題なくコンパイルできますので、 複数、環境を用意する必要はありません。(2001/3/13現在)

ここのページのリンクは勝手に付けさせて貰ってます。デッドリンク(切れてる奴)や、 何らかの問題があれば直ちに消しますので掲示板にご連絡下さい。 尚、このページに書かれていることを実行して、何らかの不具合等が出たとしても、 著者は一切の責任を持ちません(持てません)。あくまで自己責任で行って下さい。 このページはエミュレータを著作権の侵害目的に使用することを推奨していません。 なお、著作権を侵害すると現行法によって処罰されます。 indexに戻る