#11MUSASI3.3の最新版のソースを手に入れる作業(2006-01/28)
■(注:このDGENは1.00です。最新のDGENはもっとず-----っと遥か彼方に進んでいます。
(現在本家の最新版は1.30)
スキルがあり、開発をしたい方は開発者に直接コンタクトをとって下さい。
私は開発者とは全く関係のない第三者です。
あくまでこのページの話は実験用途(教育用)です。)
□今日はPSPとあんま関係がない話なんだけど、全然関係がない訳ではない。
□一体最新版のMUSASIはどういう事になってるのか、チェックしてみます。
(14:32、まだ全然やってない)
□まず、MUSASIの公式サイトは存在しないので、
MAMEの最新版(1.03B)から抜いてきます。(2006-01/27時点、つまり昨日DLした)
最新版は「MAME0103S.ZIP」(約11MB)です。
□大体こんな感じですね。
もちろん最終的にPSPに乗せる事を考えています。
□今日、計画している作業は、ごく普通のマシン
(今日のターゲットPCはPentium3、0.766GHz。レトロだにゃ、
めちゃめちゃ改造してあるので、DTPだけど、最近のPentiumMノートぐらい静か)
で、極普通にMAMEをコンパイルするだけです。
最近のMAMEディストリビューションはGCC共に頭がいいので、バカでもチョンでもできます。
あ、Win版はよく知らないんで、あくまでDOS版(Win-consoleで実行)のコンパイルの話です。
(最近のDOS版は理屈上は動く筈なのに、NativeDOSでは、DPMIサーバーとの兼ね合い
(相性というかバグというかで)で動かない場合があります。Win-console(DOSプロンプト)なら、
100%動作します。が、WinXPは知らない。(っていうか多分駄目))
(昔1997年頃は大変だったんだよ。該当するAllegroライブラリが手に入らないんで、
何日もソースを書き換えてる間に次のVer(数日で更新)が出てしまうという。)
□なんでこんな作業がPSPと関係があるのかというと、単純にソースを取り出したいだけです。
でも手順として、多分このやり方が確実で一番早い。
1.まずDOS版GCCをいれる。
2.「最新版のMAME」のMAKEを書き換え、
CのMUSASIを使うように設定し(多分)、(←そんなの今のMAMEでは無いみたい。
アセンブラ系のコアは削除されちゃってます。)
 「何のゲームでもいいから、68000を使ってるゲーム」にし、
 「タイニーコンパイル」する。
 普通にコンパイルしたら、最近のPCでも時間の無駄です。(普通にやったら60GB以上のソースだよ)
 最近の3GHzぐらいのマシンでやれば、「タイニーコンパイル」なら、数秒で終わる筈。
 普通にコンパイルしたら多分10分ぐらいかな。(やってないから、わからん)
3.コンパイル終了したら、\src\cpu\68000と\obj\cpu\68000をもってくる。
この中の*.oのファイルは単なるごみだから消す。残りも全部消しても良い。
要は、(3.)の「\obj\cpu\68000」の中の*.c(自動作成されたCのソースファイル)が必要な訳です。
判ったかな?
OBJにCのファイルが自動作成される仕組みなんです。
じゃあやってみるよ。(2006-01/28、15:16)
うまくいったらMUSASI2.0Aもやらなくっちゃ。
まず、DOS版の「djgpp-gcc343.zip」(16.3MB)を解凍し、
カレント(C:\)辺りに移動。名前を少し短く「gcc322_27oct2004」して。(念の為)
DOSプロンプト立ち上げ、全画面にして(この方が速い)
「install↓」
これで、多分AllegroからSealから何から、
(うわ、NASMもUPXもDPMIサーバーもあるよ)
面倒な設定はぜええんぶinstallしてやってくれます。
(Pen3の0.766GHzマシンで2分ぐらいって所でした。もちっと早かったかも)
細かいVersionメモ:
(GCC322,Allogro4116,seal107p,nasm098-38dos_win,upx125dos_win,csdpmi5b)
(unz551x3,zvg_sdk11a)
ZIPのライブラリはMAME本体のソースに含むみたいですね。
何処にも書いてないけれど、TXTINFOとかもしっかりインストールされてます。
(TXTINFOってのは単なるヘルプ。しかし昔のMAMEは、
これがないとコンパイル通らない時代があった。全然必要ないのに...)
インストール終了したら「SET↓」で環境変数が書き換わってるかチェック。
この時点でPCの電源を切ったら、多分環境変数が設定されてないから、
次回以降はコンパイルできないでしょう。(今すぐならできる。)
次回以降DOS版GCC(正式名はDJGPP)を使う気があるのなら、
AUTOEXEC.BATに、
「SET PATH=C:DJGPP\BIN;%PATH%」と
「SET DJGPP=C:\DJGPP\DJGPP.ENV」の2行を加えると便利です。
専用のバッチにしてもいいし(使う時に実行)。手打ちでもいいんですけど。
どうせ忘れるし。
インストールが終わったら、さっき解凍した「gcc322_27oct2004」フォルダ(15.5MB)は、
ゴミ(一時フォルダ)ですから、全部削除してしまいます。
(「何とか.ZIP」てのがいっぱいある奴)
こういう物をすかさず削除しとくのは重要です。なんたらZIPっていかにも重要そうだし、
間違えてバックアップ取ってしまうと目も当てられない。しかも、なんだろ?とかいって、
ZIPひとつづつ開けて調べるとかバカな作業(つまりは忘れてるからですが)始めると
時間がいくらあっても足りないです。これはさり気に危険物だと思って間髪入れずに
消しましょう。
えー15MBぐらいごみみたいなもんだから、どおでもいいジャン。とか思ったあなた。
全然判ってません。これが本当に忘れ去られると、結果的に何十GBにも膨れ上がって
しまう事もある。から危険だといっているんですってば。(要するに、容量は本質的には
関係がない。無限の時間を吸い取る事が重要。危険物。要注意。)
元の「djgpp-gcc343.zip」があれば、いらないです。
っていうか元も(CDに焼いとけばHDDには)要らないです。
インストール先は強制的に「C:\djgpp\」(50.1MB)です。
(これはこの世界では決まった約束事なので変えない方がいいです。
変えると設定で苦労する場合がある。環境変数見ないタコなプログラムとか)
GCCの設定は「C:\DJGPP\DJGPP.ENV」をテキストエディターで開いて、
書き換えればいいんですが、素人が弄る必要がないです。(私もいじった事ないです。)
ちょっと覗いて見たら「外部から書き換えるから直接弄るんじゃねぇ」って、
まるでVisualC++みたいな事が書いてありました。
きっと./Configureとかで書き換える事想定してるんだろな。
つまりはそういう時代みたいです。
☆やっとソースリストの解凍「MAME0103S.ZIP」(約11MB)を解凍して。
「MAME.ZIP」(約63MB)が出てきます。さらに解凍して、
「mame」フォルダが(61.8MB)出来ます。
間髪入れずに、「MAME.ZIP」(約63MB)は削除です。
ほら!そこ、いいじゃん63MBぐらい。なんて愚痴垂れない!
これが迷走して増えた時の怖さを知らないんですってば。
俺のHDDは400GBだぁ?400GBぐらい管理が悪いとすぐなくなりますよ。
ソフト開発ってのは日常的にこういう事の繰り返しで、でかいファイルがあっても、
だんだん必要か不必要か判らなくなってくる恐ろしい世界なんです。
例えば映画のファイルなら、1GBあってもそれ以上でも、
見れば必要/不必要の判断が一瞬で付く。
下手したらタイトルだけでごみかどうか判る。
こういうものはHDDにいくらあっても影響がない。
たとえ400GBのHDDが全部埋まっても整理が楽チンです。(そもそも整理の必要がない)
ソフト開発関係のファイルは一見もっともらしそうで、ごみっぽくない分
無限にバックアップが繰り返されてしまう。本質的に嫌な奴らです。
一見もっともらしそうなもの「ファイル」は、危険物だと認識しておかないと駄目です。
なんだかよく判らんから、とっとけってのは、「本質的に管理技術がマイナスです」
ゼロじゃなくって、「実質損」ですわ。まあ、やってりゃ判る話なんですけど。
やってないと絶対に判らなくて、意味不明でしょうなぁ。
あ、「管理技術」って要するに「お掃除する技術です」。これはかなり重要な技術なんですよ。実は。
□えーとDOS版の「mame」フォルダの位置は、特にこだわりがないのならば、
カレントがいいです。(理由がある)複数mameを開発する気があるのなら、「c:\emu\mame」
とかにしておきます。設定ファイル(自動作成)の都合があるんですよ。
一度も動作をさせる前に、場所をきちんと決めておいた方がいいです。
一度動作させてしまったら、手で設定ファイルのパスを書き換えます。
ここでは「c:\EMU_WK\MAME103S」にしました。
 「タイニーコンパイル」はmakefileを
# TARGET =tiny
 
 TARGET =tiny
にして、コメントを外し、DOS版なので、
# MAMEOS = msdos
# MAMEOS = windows
 
 MAMEOS = msdos
# MAMEOS = windows
にし、
\src\tiny.mak
に好きな事書けば良いです。何を書くかというと、まず「ターゲットのゲーム」を
決めてその他の*.makファイルから必要部分を抜いてくるだけです。
標準でチープなゲームが入ってるので、コンパイルできるみたいですが、
この辺、今回の目的と関係ないので、割愛します。
「でも自分のPCであのゲームMAMEで重くてやってらんない」ってのがあれば、
タイニーコンパイルで専用版を作成するだけで、見違える程早くなる場合があります。
参考まで。
さて、「タイニーコンパイル」ですが68000が欲しいだけなので、
「\src\tiny.mak」
CPUS+=M68000@
を追加するだけです。(この場合'@'は区切りの意味がある)
では、「c:\EMU_WK\MAME103S」に行って、(前記の環境変数がきちんと設定されている必要がある)
make↓
これで、待ってりゃうまくいく筈だったんですが、意外なことにエラーが出てます。
CC1、しらねぇオプション:「-Who-unused-functions」
CC1、しらねぇオプション:「-Wdeclaration-after-statement」
(今日は違うPCだからカット&ペースト出来ないから、エラーの直訳です。)
要するに、GCCのVerが「新し過ぎる」か「古過ぎるか」どっちかなんですが、
判断がつかないです。本質にぜんぜん関係のないエラーなんで、
「makefile」を編集して外してしまいます。
まんなか辺のCFLUGS +=の中の2行をカットしてendifの下に
略
   -Wformat-security \
   -Wwrite-strings     ←¥を外す
endif
#    -Who-unused-functions          ←¥を外す
#    -Wdeclaration-after-statement     ←¥を外す
# extra ...略
って感じで取っておきます。(後でどういう編集をしたのか証拠を残す為です。)
行末の¥は、次の行に続くという意味ですが、makefileでは、不要な¥があると、
くっついて欲しくない所がくっついてしまいます。これはトラブルの元ですので、
不要な¥は、外しておきましょう。
って、またやりやがった
http://www.mame.net/zips/dm103s.zip
がないとコンパイルできない。
これは似た名前のうううんとふるいVerでもOKの筈。(17:53、とりあえずご飯、夕食) 
■
(新兵器開発しますた)
「って、またやりやがった」って、読んでる人はなにが、やりやがったのか理解できないかも、
しれないですけど。
恐らく世界中どこ探してもMAME用の「dm103s.zip」なんて、ファイルはこの世に存在しないです。
これは、MAMEのDOS版を苦労して(何度か)コンパイルした人でないと、判らない事です。
ホームページはエディターの一括置換か、スクリプト(たぶんこっちの可能性が高い、しかも多分perl。)で、
自動生成してるから、あういう事になってるんだと思います。
あのページは多分。
元の設定ファイル→(自動生成スクリプトで変換し、UP)→
契約サーバー→(サーバー上で広告をインクルード)→表示。
という流れになっていて、(証拠がある。特に「width=510」の辺、解かる人にしか判らないネタかも。
広告を外して「width=510」を少し広げてみれば意味が判る)
perlスクリプトでVer番号をはめ込んでいるだけです。(多分ね)
ああ、一番楽チンな方法だと思ったのに。
これならMinGW入れて素直にWin版コンパイルした方が早かっただろな。
しょうがない。管理人秘蔵の五年前のソース探してきて、68000だけ入れ替えるか。
SRC¥MSDOS¥以下をここにコピーすれば、多分コンパイルとおると思う。たぶんね。
(dmXXX.zip)は5年前のでも通ると思うよ。でも最近のソースは「VooDoo」ネイティブで
サポートしてるみたいだね。
MAMEで使う限り、「RADEON9800PRO」でも「RADEON」の最低機種でも、
対した違いはないって知ってた?(GeForceも同様)
そりゃバス転送速度が違う分は、違いがでるけれど、
それ以外「3D」を一切利用しないので、(たとえ見た目は3Dバリバリのゲームでも)
2Dのスペックのみが重要。(アルファブレンディングもアンチェィリアスもスペキュラーも、
もちろん3D関係のもろもろもぜえんぶMAMEはソフトでやってる。たとえ出てきた画像が
PS2並に綺麗でも、さらに60fps動作していても。)
SYN-ZさんのページでMMX読んでたら、「MilleniumⅡ」とか懐かしい単語が出てきたんで、
思い出したけど。(注:これはMAMEが誕生した頃のMatroxのビデオカードです。AGPは、
あったけど、出来たばっかりで、まだ普及するかどうか解らない状況だった。眉唾だった。
その前の規格があっさりこけたからね。今ならせめてG200とかG400でないと通じないかも、
いや最近は名称に「X」が入らないものは既にビデオカードと気がついてくれないぞ。多分)
「MilleniumⅡ」(PCI版)だの(レジスタ設定が特殊で非公開なので、専用カスタマイズが必要)
(実は320x240とかおいしいモードが、ハードレベルではレジスタ叩くだけで出来るんだから
BIOSでサポートしとけよ。)
「ATI_RageⅡ_PRO」(AGP版)(だっけ、これはATIだからRADEON系)だの、
明らかに過去のグラフィックボードを、今のPC(AGPバスは必要)
LGA775のpen4マシンで挿して実行した場合。さして見劣りしないっていうか、殆ど変わらない。
(せいぜい差が数fps)
だって、重いゲームは、CPUがネックでビデオボードのバス転送帯域なんて殆ど誤差だもん。
(つまりAGPx2倍でもオーバースペックで使わんという事。使わなければx2倍でもx16倍でも変わらん。
ましてやPCI-Expressなんて)
これが同じ古いカードでも「Torio 64V」クラスになると、あれは完全なゴミです。素直に捨てましょう。
って事になるのだった。(露骨に転送速度がとろい)
管理人去年ぐらいにこのくだらない実験をして、ちょっと「MilleniumⅡ」のWRAMを見直したのだった。
でも結局使わないけどね。(数~10fps程度、差が付くから)
ただし、お絵かきしかしないPCなら目に優しくて良いかもしれない。
MAMEで対応してきてる「VooDoo」はこの辺、どおなんだろ。MAMEが3Dファンクションネイティブで
サポートしたとして、あるいは自分で変換部分を作るとして、(プレステやSYS22なら出来ない話でないし、
もうやってるよね。Viva-nonnoとか)
今の時代のビデオカードでも、「VooDoo2」以降の「VooDoo」でもさほど差がつくとは、
思えない。(プレステ程度なら何の問題もない)
絵的にナニな所のあるGeForce系やちょっと好みのあるRADEON系よりも
発色はいいと思うから(これはきちんとガンマを設定した場合。但しVooDoo系はコントラストが
甘いという欠点がある)、パフォーマンスに差が出なければ、試してみる価値はある。
(ちなみに現時点のこれらのカード商業価値はマイナスです。つまり世間ではゴミ)
←管理人、日記なのをいいことに、すぐに余計な横道に走る悪い癖があるな。
■
1.たまたま持ってた「dmame82s.zip」を使った。
(確か。2004年の七月にDLした奴(タイムスタンプより)、もっと新しい方がいいに決まってる。
管理人はこの頃インターネットやってないから、DLできるチャンスは貴重だったんだよ。)
2.「#pragma once」をすべての「*.h」から取った。
3.「dmameXXs.zip」のVerが古いから、「dmame82s.zip」の中の(src\msdos\の下の)
「PAIR型定義構造体」が全く同じものかち合っていたので、取った。
4.「src/mame.c」の
//static UINT32 mame_string_quark(const char *string);
//static int input_is_coin(const char *name);
//static void input_is_coin_free(void);
をコメントアウト。(この関数は存在しない)
5.「src/usrintrf.c:317」の`setup_menu'関数の定義 もコメントアウト。(この関数は存在しない)
で、とにかく68000のコンパイルまで辿りついた。(文章にするとながーーーいがこの間5分位)
MUSASIの仕組みを書いておくと、
「m68kmake.c」をコンパイル
→ソース類を自動抽出。
「自動抽出されたソース類」をコンパイル
→オブジェクト完成。
つまり、MUSASI3.3を完全にMUSASI2.0A化する(クロックテーブルを取っ払う)為には、
元の「m68kmake.c」を直さなきゃ絶対に駄目です。
「自動生成されたファイルを、手でちまちまクロック類を直すなんて、エンバグするから絶対に無理」。
これは世界の共通認識です。仮に一つもエンバグしなかったとしても、
「全く信用が無い」これも世界の共通認識で~す。ょお。
「m68kmake.exe」で抽出したソース一覧。(自動作成)
「m68kops.h」
「m68kops.c」
「m68kopnz.c」
「m68kopdm.c」
「m68kopac.c」
■さてと、何のかんのあって、無事「SRC」抽出に成功しました。(今20:57分)
この(6時間-2時間)=(経過-食事や休憩)=4時間をかえせー。って叫んでも仕方がない。
まあ、のんびりやってるから良いんですけど。仕事じゃないし。でも、たかがコンパイルで、
4時間はかけすぎじゃアホ。って自分に突っ込んだりして、てへ。
とにかく「make68k」のライセンス表示を見てびびった。2000年やんけ!
2001年って話は、一体何処から来たんだろう。
はあ、そうですか。本家は2000年ですか。
でも、ライセンス表示は2000年だけど、多分世界で一番新しいMUSASI3.3。
だって、本家だもん。
本家のkerlさんはmame.netだもん。
そうそうMUSASIのオフィシャルサイト無いって書いたけど、訂正しちゃぉ。
MAME.NETですね。ついでにさとうたつゆき様も、
MAME.NETに決定。誰が決めたかって?いつ決めたかって?
もちろんわたし。今決めました。
文句があっても世の中言ったもん勝ちっていう、
なさけない裏のルールがありますからね。
戦争も勝ったもんが正義。なさけなや。
まあ、いいや。
で、中見ると、新しいです。対応CPUは、
68000
68008
68010
68EC020
68020
68040
あれ?68030は?68EC030は?きっと手におえなくて、
別ファイルなのかもな。68060とかMAMEなら対応してそうだから、
きっとそっちだな、68040は、作りかけたけど、あまりの嫌な違いに挫折中なのかも。
あの辺RISCだから、ひょっとしたら、実行順序が変わる特殊な命令があるかも知れないじゃない。
サイクルなんて、考えたらパニックだよきっと。
で、「m68kconf.h」があったから、
/* ======================================================================== */
/* ============================= CONFIGURATION ============================ */
/* ======================================================================== */
/* Turn ON if you want to use the following M68K variants */
#define M68K_EMULATE_008            OPT_OFF
#define M68K_EMULATE_010            OPT_OFF
#define M68K_EMULATE_EC020          OPT_OFF
#define M68K_EMULATE_020            OPT_OFF
#define M68K_EMULATE_040            OPT_OFF
に変えてもう一度コンパイルしてみる。
→結果、さっきとまったく一緒(自動生成されたソースが)。
これは気分なんですね。っていうかソースを自動生成する段階では変わらんって事か。
OBJを作成する段しか「m68kconf.h」は関係ない。事が判りました。