MZTファイルの仕様について覚書



MZTファイルとは
MZTファイルは、MZ-80/MZ-700/MZ-1500、MZ-80B/MZ-2000/MZ-2200エミュレータで使用するカセットテープのソフトのイメージファイルです。
このページはMZ-700、MZ-1500のMZTファイルの仕様についての覚書です。

MZのカセットテープには基本1ファイルにつき、1つのインフォメーションブロックと1つのデータブロックが記録されています。インフォメーションブロックの内容がMZTファイルのヘッダで(128バイト)、データブロックがデータ(本体データ)です。(チェックサムとかも記録されていますがここでは省略)

1つのヘッダに1つの本体データを結合したものが基本的なMZTファイルです。

カセットテープのイメージファイルなのですが、MZ-1500エミュレータではQDのイメージファイルとしても使用します。

MZTファイルのヘッダの例


・00000000h がアトリビュート(ファイルモード)です。下の表を参照してください。

・00000001h〜00000011hがファイル名です。
 エンドマークが0DHで、空きは20Hで埋まっています。
 ちなみに00Hや0DHとかゴミデータで埋まっているファイルもあるみたいですが、問題は無いみたいです。

・00000012h、00000013hがファイルサイズ
・00000014h、00000015hがファイル先頭アドレス
・00000016h、00000017hが実行アドレス
 となっています。
 ファイルサイズ、先頭アドレス、実行アドレスは上位と下位が逆に入っています。
 このファイルの場合、ファイルサイズが6C80H、先頭アドレスが1200H、実行アドレスが7E0FHです。

・あと、MZ-700WINでは空き領域の00000040h以降をパッチデータ領域として利用しています。
 MZ-700WIN上でBASICでのファイルアクセスに必要です。
 (MZ-700WIN0.53同梱のmz700win_jp.txt、tapeload_jp.txt参照)
 サンプル画像はMZ-700のS-BASICのもので、こんな感じになります。
 (パッチの仕様はMZ-700WIN0.53同梱のMZ700FAQ.HTMを確認)


アトリビュート(ファイルモード)
ファイルの種類 QD/TAPE ヘッダの1バイト目の内容 概要
OBJファイル QD 01 マシン語のファイル(Object File)
TAPE
BTXファイル QD 02 BASICのファイル(BASIC Text File)
QDのファイルをWAVファイル経由で変換した時は、05になっている場合02に修正する必要がある。
TAPE
(5Z-001、S-BASIC)
05
TAPE
(Hu-BASIC、SP-5030)
02
BSDファイル QD 03 BASIC シーケンシャルDATA。
WOPEN命令で書き込んだデータやBASICのアスキーセーブもこの形式。
EmuZ-1500のみ対応。ただし、ヘッダに通常は無いファイルサイズ情報が必要
TAPE 04 TAPEのBSDファイルは変換が難しい上、エミュレータが対応していない

・この表以外にもファイルの種類はあります。
整数型ベーシックコンパイラー for MZ-80K/C, MZ-1200のコンパイル前ソースファイルは10になっています。



MZ-1500のQDのBSDファイルについて
BSDファイルはインフォメーションブロックと複数のデータブロックでできています。つまり、ヘッダ+データ+データ・・
EmuZ-1500ではヘッダに通常は無いファイルサイズ情報を追加することでQDのMZTファイルに対応しています。
1つ1つののデータブロックのサイズが0402H固定なのでファイルサイズ情報は0402Hの倍数となります。

MZ-700のHu-BASICのファイルについて

Hu-BASICのファイルのヘッダの例です。ファイルネーム情報のみ他と違っています。
ファイルネームは13文字で、エンドマークは無く、空きは必ず20Hで埋まっています。
ファイルネームの後に任意の3文字の拡張子を付けることが可能な仕様みたいですが(3バイト)、これは隠し機能で使われていないと思われ、更にもう1バイト、これも隠し機能のパスワード情報で、全て20Hで埋まっています。


連結MZTファイルをQDのイメージとして扱う
QDはディスクですので、複数のファイルを記録できます。MZTファイルを単純に連結すれば、複数のファイルが記録されたQDのイメージとして扱えます。ただし、EmuZ-1500では64KBを超えるQDのMZTファイルは扱えません。

MZ-700の多段ロードのファイル
これも単純にMZTファイルを連結すればエミュレータでロードできます。
ただし、多段ロードするソフトの2段目、3段目のファイルの中には、インフォメーションブロックがなく、データブロックのみのものがあるみたいです。
その場合でも、単純にデータだけを連結したりダミーのヘッダを付けたりすれば、エミュレータでロードできるみたいです。
インフォメーションブロックの無いデータの変換の難易度は通常より高くなります。

拡張子の違うファイル
M12という拡張子のファイルも中身はMZTファイルです。
海外では、MZFという拡張子のファイルが日本のMZTファイルみたいです。ややこしいことに、海外の拡張子MZTのファイルは別のフォーマットのファイルだったりするので注意が必要です。


参考にさせていただいた情報

MZ-700WIN0.53に同梱のMZ700FAQ.HTM

MZ のテープを活用しよう
  (アルゴの記憶さん)

MZTイメージ化に関するメモ (大 深 海 水 淵 亭さん
改造版MZ700Win/改造版tapeload_gを使った多段ロードソフトのMZTイメージ化 (大 深 海 水 淵 亭さん

ファイルアトリビュートのメモ (MZ-1500のぺ〜じさん)

ツイッターでいただいた情報
情報をいただいた皆様、ありがとうございました。