﻿MacX_romcnv by b8a
-----------------------------------------------------------------------------------------
更新 2007-01-17

<<最初に書いておきますが、この文書と同梱のアップリケーションに含まれた日本語文法がおかしくて、分かりづらい可能性はかなり高いでしょう。一応、日本の方にも親しいアップリケーションを作成しようとしたことで二ヵ国語で作りましたが、それでも日本語が分かりづらい部分があることに間違いないと思います。そのことをお詫びします。日本語文法を直してくれる方がいたら、直されたバイナリを作って再配布しますので、気が向いた方がいれば、よろしくお願いします。>>

概要
-----------------------------------------------------------------------------------------
これはマックOSX用のMAME対応NEOGEO及びCPS2のロムをNJ氏のアーケード・エミュレーターのMVSPSP及びCPS2PSPに対応できるように変換するアップリケーションです。

書くまでもないはずですが、このアップリケーションの使用は法的の手持ちロム・ファイルにしか許されません。また、このアップリケーションの使用は自己責任で万が一望ましくない現象があったとしたら、それは使用者自身が責任を負うことになりますし作者や配布される方の責任は一切ありません。

このアップリケーションの本心はNJ氏の元のウィンドゥス用のコンバーターの単なる移植版です。ちょっとした変更だけで元のソース・コードは簡単にコンパイル成功しますので、少し作業を延ばしてGUIも作成することにしました。したがって、コンパイルに成功するため以上に元のコンバーターをGUIとのコミュニケーションを支援するように変更しました。最初の意図はできるだけ多くのOS Xバーションに対応するようにGUIを作るつもりでした。けれど、自分自身で最小限と思っている機能は10.3を要する。それ以上のバーションにも動作すると思われますが試してみたことがあるのは10.3.9
のPowerPC機のみです。

MVSロムの変換ツール「romcnv_mvs」は最新版（6）から移植されたものでMVSPSP v.1.50以降対応のロムを変換するはずです。

CPS2ロムの変換ツール「romcnv_cps2」は最新版（9.2）から移植されたものです。作成されるナマのキャッシュはCPS2PSP 1.66対応で圧縮キャッシュの場合は1.30以降対応のはずです。

バック・エンドのコマンド・ライン・ツール(以下は「CLIツール」)は結構ロー・レベルなもので、OS Xのどのバーションでも動くはずです。一つだけ考えられる例外は、「元のロムから不要のファイルを消去する」というオプションを使いたい場合はご使用のOSにzipのインストールが必要だということです。ですが、OS Xはzipのインスタールで常に配布されるので、このことで引っかかることはないと思います。

GUI及びCLIツールがIntelで動作するかどうかは知りません。Intelにも動くようなバイナリの作成方法も、そのことが自分のマックで可能かどうかさえも知りません。とにかく、自分の環境でIntelの対応性を試す手段はありません。

使用について
-----------------------------------------------------------------------------------------
このアップリケーションの使用はかなり簡単です。ロムの変換にはGUIもしくはCLIツールの使用でできます（CLIツールはパッケージ内のMacOS->convertersを開いて）。やってみてもどうしても分からない場合はご使用の徹底詳細には以下の文書を参考して下さい。

-GUIの使用について
---------------
変換パラメーターを指定することでいくつかの方法を提供することでGUIは変換作業をやすくしてくれます。MVS及びCPS2の変換用のペインは両方あります。両方のオップションを正しく指定すれば、GUIは指定される全部のファイルを一発で変換してやります。

両方のペインの上部分には、どのバーションのエミュレーター用にロムを変換することを選択できるポップ・アップ・メニューがあります。初期設定で選択不可となっているはずです。この機能を実装したことに次の二つの理由があったです。1)NJ氏がいつかまたコンバーターのソースを更新したら、この機能のおかげで、新CLIツールのダウンロードだけで更新できるようになります（ということはこのアップリケーションを丸ごと再ダウンロードすることの必要はなく、実際に更新された部分のみ更新することで済む）、と、2)この数ヶ月を渡って、暇でこのアップリケーションを作ったので、同期間でNJ氏は何度もソースを更新したので、この機能のおかげでいくつかの異なるバーションを同時に保っておくことが可能でした。といっても、NJ氏はようやく更新を決定的にやめたようなので、おそらくこの機能を使うことはないと思います。

その下には保存先を指定するところがあります。その使用は以下のいずれ：
a)キーボードで有効なフォルダのパスを入力
b)「フォルダーを選択」のボタンを使って適切なフォルダーを選択
それとも、
c)直接ファインダーからフォルダーのアイコンをドラッグしてこのフィルドにドロップ

その次には一つのファイル、もしくは一つのフォルダーに含まれたZIPファイルを全て変換するオップションがあります。その下のフィルドの入力は上と全く同じですが、単一ファイルの変換を指定する場合には入力されるパスはご使用のマックに実存ZIPファイルでないと変換作業が始まりません。

以下の場合にGUIは変換作業を開始できません：
1)CLI変換ツールを（最低に一つ）見つからない
2)有効な保存先が指定されていない
3)有効な入力ファイル／フォルダーが指定されていない

後は、不要のファイルを元のロムから消去するオップションもあります。ご注意：このオップションは元のZIPファイルを恒久的に変更しますので他のエミュレーターにも使いたいと思ったらこのオップションを使わない方をおすすめします。

それで、CPS2ロムの変換の場合には圧縮されたキャッシュ・ファイルの作成オップションもあります。これでよりコンパクトなファイルが作られます（従って、より多くのファイルをご使用のメモリー・スティックに置くことができます）が、ほとんどのゲームの圧縮されたままの動作が望ましくない速度ですし、それに圧縮作業には結構時間かかります。といったことで、おそらくこのオップションを使わないと思います。ですが、使ってみたい場合はどうぞ。

GUIの使用にはアップリケーションのアイコンにファイルをドラッグ&ドロップというもうちょっと手っ取り早い使用方法もあります。この方法でドロップされた全てのファイル（及びフォルダー内の全てのファイル）を調べてチェックして、その中のZIPファイルを全て指定するオップションを処理します。理論上、ユーザー・フォルダーをまるごとドロップして、ユーザー領域内（アックセッスできないファイルの処理は不可）のZIPを全てチェックすることはできます。それで、MVSとCPS2の両方を調べるように指定すれば、見つかれるファイルは両方のコンバーターに処理されます。ということは、もし1000のZIPファイルが発見される場合は、実際に変換できるファイル数を問わず、全てが処理されますし、MVSとCPS2が両方指定された場合はその1000回の処理が二度繰り返されて、結局2000回のチェックが行われてしまいます。したがって、ファインダーで実際に変換したいファイル、もしくはMVS/CPS2しかはいていないフォルダー、のみを選択してドラッグ&ドロップことをおすすめします。これは想像された利用仕方なので3,4層のフォルダー以外はあまり試してみたことはありません。

-CLIツールの使用について
-------------------
NJ氏の元のツールのデザインと自分のそれを移植目的の考慮で、これらのツールの引数は全て絶対パス（相対パスに反して）を要する。絶対パスと相対パスの違いがわからなければ、絶対パスを要する引数に指定したいファイルもしくはフォルダーをファインダーからターミナルのウィンドゥにドラッグ&ドロップすることをおすすめします。そのことで絶対パスは自動的に入力されます。

使用は、まず使いたいバーションのCLIツールを入れて、それから適切なオップション引数も入れて、それで、変換されたファイルの保存先の絶対パスを入れて、最後は変換対象の絶対パスを入れます。必要な引数は保存先と変換対象だけで、その順番に入れる必要です。

MVSとCPS2の共通オップション引数は「-d」のみです。この引数の指定で変換が成功した後に元のZIPロム・ファイルから変換済みのファイルが消去されます。ファイルを消去する前に警告は出ません。ご注意：この引数は元のZIPファイルを恒久的に変更しますので他のエミュレーターにも使いたいと思ったら、このオップションを使わない方をおすすめます。

CPS2の場合には次のオップション引数もあります：

	-all	この引数を使う場合には、最後の引数は単一ファイルではなく、手持ちの変換したいCPS2ロムを全て含むフォルダーです。この引数はrominfo.cps2を使って、入力パスでそのファイルに記録されたゲームの存在を調べます。発見される全てのファイルはツール起動時に指定される引数で変換されます。
	
	-z	この引数で圧縮キャッシュ・ファイルが作成されます。

ソース・コードについて
-----------------------------------------------------------------------------------------
配布ZIPファイル内にソースも入れておくことにしていますが、GUI用のソースはいくつかのCarbon一般用事の参考資料のみとして提供しています。あくまでも参考用なのでソースを変更してバイナリーを配布する希望を持つ方がいれば、まず連絡してほしいです。これを改造しようと思っている方がいるなんて思っていないですが、改良された場合はぜひ知りたいと思います。どう見ても良くなったような改良なれば、ぜひその変更を公式のものに合流して、送ってくれた方にクレジットを載せます。

含まれたCLI用のソースはNJ氏の元のソースを大部変更して、単なる移植よりいかにも複雑になっています。過去の、もしくはこれからのコンバーターのバーションをこのGUIに対応する用に移植したいと思ったら、同梱のCLIソースとNJ氏の元のソースを、どのように改造されたのかを調べてどうぞ。しかし、最新のコンバーター以外に移植してみたい方がいることは想像できないので簡単にOS Xで動作するよう、独立したコッマンド・ライン・ツールの移植し方のみを説明しておきます。これらの変更点は他のUNIX系で動作するツールの作成にも共用するはずです。

ありがたいことでウィンドゥズ専用のコードはほとんどありませんが、それでもNJ氏はいくつかのウィンドゥズ専用のAPIを利用しています。同梱の「macport.h」をMVS及びCPS2の「romcnv.h」の先頭に入れておけば、それでほとんどのウィンドゥズ関係の問題は対処されます（しかし、いくつかの変数タイプの明言を元の「romcnv.h」から「macport.h」に移動したのでそれら元の変数タイプ明言を消去することを忘れないように）が、その以外にも対処する必要なところは以下のとおり：

-　ウィンドゥズ専用ヘーダーを外す(windows.h, conio.h, direct.h, malloc.h, and zip32j.h)

-　file_dialog及びそのコールを外す。従って、ユーザが入力ファイルを指定しない場合を他の方法で対処する必要があります。自分のバーションではただ単にこれを要することにしたんですが、入力ファイルのパスを入れるようなプロンプトを表示する、という簡単な対処仕方もあります。

-　ウィンドゥズ用のパス分け文字（\）をPOSIXパス分け文字（／）に変更。ウィンドゥズの分け文字はエスケープする必要があるため、必ず「\\」として出ているはずなので、かなり見つかりやすいと思います。

-　自動的に圧縮キャッシュを作るコンバーターのソースを移植している場合はその処理を変更する必要もあります。NJ氏が利用している手順は
a)全てのナマのキャッシュを一時的なダイレクトリーに作って置いて、
b)それらのファイルの名をテキストファイルに書き出してから、
c)そのテキストファイルをウィンドゥズ専用の関数に渡して、その関数は記録されたファイルを利用してZIPファイルを作り出す。
全てのマックzipインストール済みで配布されることのおかげでNJ氏が利用しているウィンドゥズ専用のDLLの心配いらずに同じ手順を利用ことができますが、その全ての行を少しいじる必要があります。

-　最後には、ビルドの成功を防ぐいくつかのコンフリクトがあるので、それらも対処しないといけません。先ずは「zopen」の名コンフリクトがあったので、自分の場合はNJ氏のソース内の全ての「zopen」を「z_open」に変えました。次は、なぜか「neocrypt.c」に「romcnv.h」が二度もINCLUDEされることでビルドができませんでした。自分の場合はただその二ヵ所目を外して問題を解決しました。

-　それで、エンディアン関連の問題もいくつかあります。Intel機ならこれらを気にしなくてもいい、と思います。

--romcnv_mvs-- neocrypt.cの中にはIFDEFがいくつか含まれています。コンパイル・ルールでこの変数を設定するかそれぞれのIFDEFと下半部を外す必要があります。
SMAチップ搭載のゲーム(kof99, garou, garouo, mslug3, とkof2002)の変換にはmemory_region_cpu1の解読前後にその内容をスワップする必要があります。

--romcnv_cps2-- NJ氏はいつかromcnv_cps2 v.7以後は単一キャッシュを作成するように変更しました。「create_raw_cache」という関数の中に「block」という配列を設定するループが含まれています。そこでoffsetの値をスワップしてからblock[i]に設定する必要があります。

この通りに移植してみれば飾りのない、素朴なマック用のコッマンド・ライン・ツールが出来上がるはずです。本当はあまり複雑ではないし、必要なツールは全てのマックと一緒に配布されるのでマックで動作したいバーションがあったら他人が移植版を作ることを待つ理由はないでしょう。