XM6のソース公開 2005-01-25 (火) 01:23:29+09:00

ソフトウェア

PI.さんのところで、XM6のソースが公開されたので、これはありがたい、ぜひ参考にとビルドしてみた。

ドキュメントによると「コンパイラとして、Microsoft Visual C++ .NET 2003が必要、アセンブラとして、NASM(Netwide Assembler)が必要」とあるが、VC6しかもっていないので少し作業が必要だった。以下メモ。

---
#2005-1-29加筆修正。

[VC]
・「WIN32アプリケーション」を選んで空のプロジェクトを作り、ファイルを追加。
・プロジェクトの設定を開いて、一般タブの"Microsoft Foundaiton Class"のところを、"共有DLLでMFCを使用"にする。(初期値では"MFCを使用しない"になっている。)
・プロジェクトの設定を開いて、"プリプロセッサの定義"に、"_WIN32"を追加する:VC6で自動追加される定義は、"WIN32,_WINDOWS,_MBCS,_AFXDLL"(共通)、"NDEBUG"(リリース版)、"_DEBUG"(デバッグ版)。
・プロジェクトの設定を開いて、XM6.vcprojの中身を参考に、リンクするlib に"imm32.lib winmm.lib version.lib dinput.lib dsound.lib dxguid.lib obj/core_asm.obj obj/mfc_asm.obj obj/rend_asm.obj obj/star.obj"を追加。
・VCメニューの、"ツール/オプション/ディレクトリ/インクルード"のところで、"C:/DXSDK/INCLUDE"など環境に応じてDirectXのインクルードファイルの場所を追加。
・mfc_tkey.cpppのテーブルCTKey::KeyTable[KeyMax]で"VK_OEM_ほにゃらら~"などが未定義といわれるので、VCメニューの、"ツール/オプション/ディレクトリ/インクルード"で、新しげなプラットフォームSDKのインクルードディレクトリ"C:PROGRAM FILES/MICROSOFT PLATFORM SDK FOR WINDOWS XP SP2/Include"をVCのINCLUDEより上に追加:VC6のwinuer.hで"VK_OEM_"ではじまる定義は"VK_OEM_CLEAR"1つしかないので他は全て未定義エラーが出る。SDKのwinuser.hで追加されたもののようだ。
・fdd.cppの、クラスメソッドFDD::WriteP(),FDD::GetName(),FDD::GetPath()は、戻り値をもたない(void)のに戻り値を返すよう記述されておりエラーになる。return foo(); -> foo(); のように処理だけ行って値は捨てるように変更。
・mfc_sub.cppで、クラスメソッドCSubWnd::OnActivate()が、同様に戻り値をもたないはずなので、ベースクラスCWnd::OnActivate()の呼び出し結果を return しているのを、ベースクラスを呼び出すだけに変更。
・filepath.cppの、::GetFileTime()の第一引数を(LPVOID)にキャスト。
・memory.cppの、Memory::ReadOnly()のif文の式、"if (mem.table[index] != this)"がエラー(C2446)になるので、"((Memory*)mem.table[index] != this)"と明示してやる。
・mfc.hの、先頭で WINVER を #define している直後で、_WIN32_WINNT を(WINVER) と同じ値に定義。

[NASM]
・ドキュメントによると、nasmの版は0.98推奨とあるが、本家サイトでは入手不可能。本家では 0.98bf-win32(一番古い)~0.98.39(最新)までが入手可能。
yosirin-hello さんのサイトで、「うるり」さんがオリジナルの0.98に対してSSE2対応の改良をおこなった版も紹介されており、入手可能。
・しかし、いずれの版でも、star.cから生成したstar.asmでエラーが出る。
・うるりさんの版を用いた場合、107行目がエラーになりnasmが通らない。"TEST [__BUSERR_STAT],00008000h" と出力されているところがそうで、オペレーションサイズを指定してやる必要があるので、"TEST long[__BUSERR_STAT],00008000h" と修正してnasmを通すことでオブジェクトが無事に出来る。

以上の修正で、動作を確認。今のところ色々触ってみているが問題はない。

[コメントの受付は終了しています ]
1: PI. (01/28 19:35)
詳しい情報ありがとうございます。参考にさせて頂きます。

読んでいて少しわからないのが
・_WIN32を追加(自動で追加されるのでは?)
・VK_OEM_ほにゃらら~などが未定義(具体的には?)
・mfc.hに、#includeを追加 (何をincludeしてたらよくなったのか?)
あたりです。このあたりを解説いただければ助かります。

それとNASMのアセンブルですが、手元の0.98でもアセンブルできませんでした(笑)
Star.cが古かったようです。次回のバージョンでは差し替えておきます。
2: 冬星 (01/29 16:36)
ソース公開ありがとうございます。参考になります。CPU内部の動作から表現されているのに関心しました。ハードウェアの知識が生半可じゃあ作れないですね…。

ご質問の件(+memory.cppの件など漏れ)上に加筆しました。mfc.hのinclude云々はゴミ消し忘れです。
この記事のリンク元