★ZIP圧縮されたイメージファイルを扱える(+α)のXM7
V3 (XM73ZIP)
== 説明 ==
XM7ZIP(V2)はXM7 V3.0L31のソースを元に改造した物です。
XM7ではディスクイメージとしてD77形式(D88形式コンパチブル)と2D形式を扱うことが出来ます。また、テープイメージとしてT77形式のファイルを扱うことが出来ます。
イメージファイルがそれなりに数が集まってくるとやはり圧縮して保存しておきたくなります。
圧縮しておくと、イザ使おうというときにいちいち展開(解凍)してから使用しなくてはならず、けっこう面倒なものです。
そこで、ZIP/LHA圧縮されたファイルでもマウントできるようにXM7(V3)を改造したものがこのXM7ZIPです。
ZIP/LHAファイルの解凍には、「統合アーカイバプロジェクト」のUnZip32.Dllおよび、UnLha32.Dllを使用しています。
また、Z80カードや、EXAS-FM BASIC Compilerカード(FM-7モード時のみ)に対応する拡張も施されています。
Z80CPUコアはMarat Fayzullin氏の開発された"fMSX"用の物を、許可を得て使用しています。
UnZip32.DLLは企業内での使用をはじめとする商用に関しては有償(ライセンスフィーが必要)らしいのでご注意ください。
XM7 V2 ZIP Rel2が含んでいるZ80 CPUコアは商用利用が許可されておりません。従いまして、本エミュレータの商用目的の利用はできません。
XM7ZIP(V2)はXM7 V3.0L31のソースを元に改造した物です。
== 使用方法 ==
基本的にオリジナルXM7(V3)と同じ操作で使用できます。相違点としては、
1.ディスク/テープイメージマウント時のコモンダイアログで、デフォルト拡張子に"*.ZIP", "*.LZH"を追加
*.D77(または*.T77), *.ZIP, *.LZH全てがダイアログに表示されるようになっています。
2.サーチパスの通っている場所にUnZip32.Dll/UnLha32.Dllがあると、圧縮ファイルをマウントできる
UnZip32.Dll/UnLha32.Dllは、先の「統合アーカイバプロジェクト」のホームページをはじめとするさまざまな場所で入手可能です。DLLはダイナミックリンクしてあるので、無くても起動は出来ますが、ZIP形式のファイルのマウントは行えません(通常のXM7としては動作可能)。この話が良く分からないという人は、とにかくXM7ZIPと同じディレクトリにUnZip32.DLL/UnLha32.Dllを置いておいて下さい。
UnZip32.Dll/UnLha32.DllはXM7ZIPの実行には必須ではありません。使いたい圧縮形式に対応したDLLのみがあればOKです。もちろん両方インストールしておけばどちらでも使用することが出来ます。
3.EXAS-FM BASIC Compilerに対応している
KnowHowページにある方法を使ってEXAS-FM CompilerのROMデータを抜き出して、XM7ZIPと同じディレクトリに放り込んでおくことで使用できるようになります。ファイルが無くても起動しますが、当然EXAS-FM
BASIC Compilerは使用できません。
なお、EXAS-FM BASIC Compilerは一部I/O空間を占有してしまう関係で、FM-7モード時のみにしかONにならないようになっています。FM-77AV/AV40EXモード時には使用できません。
4.Z80カードに対応している
富士通純正Z80カード相当の機能を搭載しています。CP/M80など、対応OSを走らせることが可能です。
実機上ではFM-77AV以降はZ80スロットがなくなってしまった関係で利用できなくなった機能ですが、エミュレータでは何の問題もありません。
FM-77版のCP/M80を走らせる場合にはちょっとした工夫がいるようです。
== 動作詳細 ==
(1) 実際の動作
1.ファイルマウント時に拡張子を調べ、'.ZIP'であればZIP圧縮ファイルとして処理をし、'.LZH'であればLHA圧縮ファイルとして処理する
2.ZIPファイル中の'*.D77'もしくは'*.T77'ファイルを検索し、最初に一致したファイルをテンポラリディレクトリに解凍する
このため、一つの書庫内に複数のイメージファイルが入っていた場合、どれがマウントされるかは分かりません(オィオィ)。UnZip32.Dll/UnLha32.DllのFindFirst関数の動作によって決まってきます。
3.XM7には何事も無かったように、2.で解凍したテンポラリディレクトリにある'.D77'/'.T77'ファイルのファイル名を渡す(すげ替える)
(2)テンポラリディレクトリ決定方法
1.環境変数"TEMP"があるばあい、それを使用する。無ければカレントディレクトリ
2.(1.)で決定したディレクトリの下にXM7UNZIPというディレクトリを作成する。これをテンポラリディレクトリとして使用する
このため、CDなどに焼いてあるZIPイメージを実行するには環境変数"TEMP"にHDD上のディレクトリを指定しておく必要があります。指定の方法はWin9x系かNT系かによって違います。ここではそこまで説明し切れませんので割愛させていただきます。一応Win9x系の場合だと、c:\autoexec.batの最後に
set TEMP=C:\TEMP
のような記述をしておけばOKではないでしょうか(未確認)。
(3)書き込みデータ
XM7ZIPは前述のように、テンポラリディレクトリに展開したイメージを使用して動作しています。展開はイメージマウント毎に行われます(上書き)。このため、ディスクに書き込みを行うようなイメージはZIP形式で扱わないで下さい。書き込みデータは書庫ファイル内のデータに反映されません。XM7ZIPは書庫ファイルに対する書き込みを一切行いません。データを保存する必要のあるディスクは圧縮ファイルにはしないで、そのままのD77ファイルとしてマウントしてください。
(4)ゴミ
XM7ZIP終了時にテンポラリフォルダ内の'*.?77'ファイルを自動的に削除します。ゴミはたまりません。テンポラリフォルダそのものの削除は行いません。また、書込み禁止になっているファイルは削除を行いませんので、圧縮前に読み出し専用の属性になっていると、テンポラリフォルダ内にファイルがたまっていきます。たまに掃除してあげてください。
== その他(余談) ==
・Z80 CPUコア
もっとも有名と思われるMSXエミュレータ"fMSX"の作者Marat Fayzullin氏の作成したZ80コアを利用しています。氏にはメールにて使用許可をお願いしましたが、あっというまに快い返事が返ってきてびっくりしました。すばらしいZ80コアの利用を快く了承していただき、有り難う御座いました(←って書いても氏には読めないんだろうな…いずれ英語でも書きますが…)
このCPUコア、MAME用なんかと違ってシンプルにできていてホントにXM7にくっつけるのが楽でした。
・UnZip32.DLL
これは、Niftyのフォーラム(かな? CUG?)で進められている「統合アーカイバプロジェクト」の中の成果物です。shoda T.さんをはじめとする、Zip/Unzip32.dll開発関係者各位に厚く御礼申し上げます。
・UnLha32.DLL
こちらも、「統合アーカイバプロジェクト」の中の成果物です。オリジナルLHAの作者吉崎さん、Miccoさんをはじめとする、UnLha32.Dll開発関係者各位に厚く御礼申し上げます。
・EXAS-FM BASIC Compiler
なんとなく対応。持ってたからエミュレータでも動かしたかっただけ。実際にはほとんど使わないけど。大体コレ持ってる人どの位いるんでしょうね。整数型BASICコンパイラなんだけど、結構RunTimeが大きくて、そこそこ制限があって…簡単なプログラムならホントに10倍以上早くなるから当時はずいぶん遊んだけどね。FMでコンパイラといったら拡張KかDraco Cですよね(Oh!FMの米山さんはMコンパイラ好きだったなー)。
詳しくはわからないんですが、FM-77AV40EXのブートローダーはDOSモードでも$100からにIPLをロードするみたいですね。そのせいで、$300からに置かれることきめ打ちで作られているFM-77用CP/MのIPLが暴走します。IPLそのものはリロケータブルに作られているみたいなんですが、最初のほうでスタックポインタを決めるところで$100番地台にスタックを設定するため、自分で自分を壊して暴走します。回避策として、初期スタックポインタを$100に設定してあげるとCP/Mが起動することを確認しています。ま、やる気のある方は1バイトパッチ当てるだけですので、がんばってください。
また、FM-77用のCP/Mを使うときはFM-77AVかFM-77AV40EXモードでないとダメです。FM-7モードでは起動しませんのであしからず(これは実機でも同じ。FM-77用のCP/MはFM-7では起動しません)。
ちなみに、FM-7用のCP/Mはなんの問題もなく動きます。
== 改版履歴 ==
01/12/23 初回リリース