ディスクに保存していたMSX用各種ファイルを、エミュレーター等で読めるテープイメージファイルにするためには、テープ用のヘッダおよびフッタを付ける必要があります。そこで適当なバイナリエディタで対象となるファイルを開き、手動でこれを補ってやればいいわけです。
必要なもの・適当なバイナリエディタ,MSX用各種ファイル
BASICテキストファイルとは、CSAVE命令やディスク上にSAVE命令で記録された、BASICデータのことです。どちらもBASICプログラムをバイナリーデータとして記録していますが、テープとディスクでは書式が少々異なるので、ディスク上に記録されたファイルをそのままテープイメージとして読みだすことはできません。そこで以下のような加工が必要となります。
ディスク上に保存してあるBASICテキストファイルは、ファイルタイプ識別データとして冒頭に0FFHが1バイト置かれていますので、まずはこれを削除します。しかる後ヘッダとして、冒頭に以下のデータを置きます。
[ヘッダ][テープ用ファイルタイプ識別データ][ファイル名][ヘッダ]
ヘッダはどのファイルも8バイト
1F A6 DE BA CC 13 7D 74
共通で、ファイルタイプ識別データはBASICファイルなら0D3Hが10バイト続きます。
ファイル名は6バイト分の任意の文字列で、MSX-BASIC上でファイル名に使える文字を使います。埋め込む際はもちろん16進数に置き換えることをお忘れなく。6バイトに満たない場合、余った分は020Hで埋めます。
ファイルヘッダとファイル本体の間には、さきほどの8バイトのヘッダデータを再び置きます。
BASICテキストファイルではさらにフッタを付けてやりますが、こちらはいたって簡単で、ファイルの末尾に000Hを7バイト補ってやります。これをしないとエミュ等で正常に読み込んでくれません。
ですから、たとえば「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 [ファイル本体] 00 00 00 00 00 00 00
となります。ファイル名を変えれば、もちろんファイル名部分のデータは変化します。文字列の16進数化の方法は、各種MSX解説書やBASICマニュアルを参考にしてください。
最後にファイルの拡張子を「.cas」にして保存すれば終わりです。エミュレーター等でCLOAD可能なことを確認しておきましょう。
マシン語ファイルとは、BSAVE命令で記録されたデータのことです。ヘッダの作り方はBASICファイルとほぼ同じですが、マシン語ファイルでは冒頭のディスク用ファイルタイプ識別データが0FEHに、テープ用ファイルタイプ識別データが0D0Hになります。
フッタを付ける必要はありませんが、かわりにファイル本体の直前に先頭アドレスと終了アドレス、実行開始アドレスを補う必要があります。ですから0D000H番地から始まって0D3FFH番地で終わるマシン語ファイル「DATA」をテープイメージ化した場合、バイナリデータは
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 00 D0 FF D3 00 D0 [ファイル本体]
となるわけです。アドレスは一つの番地を2バイト分のデータで指定しますが、上位1バイトと下位1バイトが入れ替わっていることに注意してください。ちなみに、ここに少々細工すれば簡単にリロケートできるので、覚えておいて損はないでしょう(リロケート後の動作は保証できないが)。
アスキーテキストファイルとは、SAVE命令やOPEN命令で記録されたデータで、いわゆるテキスト形式とほぼ同じものです。ディスク用のファイルタイプ識別データはありません。ヘッダ自体の構成はこれまでと同じですが、テープ用ファイルタイプ識別データは0EAとなり、フッタのかわりEOF記号としてファイルの末尾に01AH(Ctrl+Z)を1バイト置きます。そのためデータ本体に01AHを含むアスキーテキストファイルは作れません。
これまでの例に従い、「DATA」というファイル名をテープイメージ化すると、冒頭部分は
1F A6 DE BA CC 13 7D 74 EA EA EA EA EA EA EA EA EA EA 44 41 54 41 20 20 1F A6 DE BA CC 13 7D 74
となり、ファイルの末尾に01AHが来るわけですが、これだけではテープイメージとして不十分で、さらにファイル本体データを256バイトごとにショートヘッダ
1F A6 DE BA CC 13 7D 74
で区切ってやる必要があります。ですからディスク上で作成したアスキーテキストファイルを手動でテープイメージ化するのは、あまり現実的な方法ではありません。
以上で説明したことを、簡単な表にまとめておきます。
形式 | ディスク用識別子 | テープ用識別子 | フッタ・EOF記号 | テープイメージ構成 |
BASICテキスト | 0FFH | 0D3H×10 | 000H×7 | [ヘッダ][識別子][ファイル名][ヘッダ][本体][フッタ] |
マシン語 | 0FEH | 0D0H×10 | - | [ヘッダ][識別子][ファイル名][ヘッダ][先頭番地][終了番地][実行開始番地] [本体] |
アスキーテキスト | - | 0EAH×10 | 01AH×1 | [ヘッダ][識別子][ファイル名][ヘッダ][データx256bytes][ヘッダ]〜[EOF] |
[ヘッダ]:各形式共通8バイトのデータ(01FH 0A6H 0DEH 0BAH 0CCH 013H 07DH 074H)
[識別子]:各形式のテープ用識別データ10バイト。
[ファイル名]:6バイトの文字列データ。6バイトに満たない場合は020Hで埋める。
[フッタ]:000Hx7バイト
[EOF]:Ctrl+Z(01AH)