何とか庵日誌

本名荒井が毒にも薬にもならないことを書きつづるところ

テープイメージ作成のための覚え書き




最近、Windowsファイルとして保存していた、
昔打ち込んだMSXプログラムを、エミュレーター等で動かせる
テープイメージファイル化する必要に迫られ、あれこれ勉強する機会があったので、
荒井なりに気が付いたことを、あれこれ書き記しておきます。


Windows上でディスクに保存していたファイルをテープイメージ化するためには、
テープ用のヘッダ*1とフッタを付ける必要がありますので、
適当なバイナリエディタで対象となるファイルを開き、
手動でこれを補ってやればいいわけです。


まずはBASICファイルの場合。
冒頭の「&hFF」を削除し*2、ヘッダとして以下のデータを挿入してやります。


[ロングヘッダ][ファイル名][ショートヘッダ]
ロングヘッダは、8バイトのヘッダと10バイトのファイルタイプ識別データからなります。
ヘッダはどのファイルも8バイト

1F A6 DE BA CC 13 7D 74
共通で、ファイルタイプ識別データはBASICファイルなら「&hD3」、
マシン語ファイルなら「&hD0」が10バイト続きます。
ファイル名は6バイト分の任意の文字列で、MSX-BASIC上でファイル名に使える文字を使います。
埋め込む際はもちろん16進数に置き換えることをお忘れなく。
6バイトに満たない場合、余った分は「&h20」で埋めます。
ショートヘッダにはさきほどの8バイトのヘッダデータを再び置きます。
ですから、たとえば「DATA」というファイル名のBASICプログラムのヘッダは

1F A6 DE BA CC 13 7D 74
D3 D3 D3 D3 D3 D3 D3 D3
D3 D3 44 41 54 41 20 20
1F A6 DE BA CC 13 7D 74
となりまして、以下にプログラムの本体データが続きます。
ファイル名を変えれば、もちろんファイル名部分のデータは変化します。
BASICファイルでは、さらにフッタを付けてやりますが、こちらはいたってかんたんで、
ファイルの最後、本体データの最後に7バイト分「&h00」を補ってやります*3
これをしないとエミュ等で正常に読み込んでくれません。


マシン語ファイルのヘッダの作り方はBASICとほぼ同じですが、
テープ用識別データが「&hD0」になります。
BASIC同様、冒頭のディスク用ファイルタイプ識別データ「&hFE」を削除し、
以下のように補います。

1F A6 DE BA CC 13 7D 74
D0 D0 D0 D0 D0 D0 D0 D0
D0 D0 44 41 54 41 20 20
1F A6 DE BA CC 13 7D 74
ファイル名はもちろん任意で変更してかまいません。
フッタを付ける必要はありませんが、
かわりにヘッダの直後に開始アドレスと終了アドレス、実行開始アドレスがあります。
たとえば&hD000番地から始まって&hD3FF番地で終わるプログラムの場合、

00 D0 FF D3 00 D0
と、ヘッダの直後に記述されています。
ここに少々細工すればかんたんにリロケートできるので、覚えておいて損はないでしょう*4
アドレスは一つの番地を2バイト分のデータで指定しますが、
上位1バイトと下位1バイトが入れ替わっていることに注意してください。
マシン語の場合、この後に本体のデータが続きます。


いまどきディスク上のデータをMSX用のテープイメージデータに
する人間がどれほどいるかわかりませんが、まぁ、何かの参考になれば幸いです。
おかげでようやくblueMSX上で
テープ版*5「ミッドナイトチェイスパート2」が遊べるようになりました。
好きなんですよこのゲーム!

*1:「ピーギャラ」冒頭の「ピ〜〜ガッ・ピー」の部分。

*2:ディスクファイルでのファイルタイプ識別データ。&hFEがマシン語ファイル。&hFFがBASICファイル

*3:これに気付かずひとしきり悩んだ。

*4:飽くまでバイナリデータの置き場所を変えるだけであって、リロケート後の動作は保証できないが。

*5:個人的に改造したディスク版もあるのだが、やっぱりオリジナルのテープ版で遊べるのは感慨もひとしお。