T88テープイメージファイルフォーマット Ver. 1.0 1998-08-22 by Manuke
・フォーマットの説明時に、[]で囲まれた部分は省略可能であることを示します。 ・T88での数値は、すべてリトルエンディアン(低位バイト→高位バイト順)で表されます。 ・T88では1/4800秒が時間の単位として使われています。本文中では、この単位を1tickと表現します。
T88はタグ形式の可変長ファイルフォーマットです。 先頭にファイルヘッダ、それに複数個のタグが続く形式です。
ファイルヘッダ,タグ1[,タグ2[,タグ3...]]
ファイルヘッダは、そのファイルがT88形式であることを示す23+1byteの文字列です。 (文字列23byte+終端00H)
"PC-8801 Tape Image(T88)"
タグは可変長のデータ構造です。 タグには必ず種別、およびデータ長の情報が含まれています。
ID(2byte整数),データ長(2byte整数)[,データ(指定の長さ)]
※(データ長にはIDおよびデータ長自身の長さは含まれません)
タグ形式は、ファイル構造に変化があった場合にも下位互換を確保しやすいデータ形式です。 これを実現するために、T88ファイルを処理するプログラムは、未知のIDを持つタグを見つけた場合にそれを読み飛ばす処理を加えておく必要があります。
ファイルの終端を示すタグです。T88ファイルの最後に必ず付加されます。 終了タグは付随するデータを持ちません。
例:
00 00 00 00
T88ファイルのバージョンを示すタグです。 バージョンタグは次のデータを持ちます。
バージョン番号(2byte整数)
上位バイトがメジャーバージョン、下位バイトがマイナーバージョンを示します。 現在のバージョンは0100Hです。
01 00 02 00 00 01
テープ上のデータがないエリアを表すタグです。 ブランクタグはキャリアを検出できないエリアを表します。 スペースタグは、1200Hzのキャリア(0を表現)を検出したエリアを表します。 マークタグは、2400Hzのキャリア(1を表現)を検出したエリアを表します。 これらのタグは、いずれも次のデータを持ちます。
エリア開始時間(4byte整数),エリア長さ(4byte整数)
エリア開始時間、エリア長さはtick単位です。
例: (エリア開始時間3秒目(14400tick)、エリア長さ2秒(9600tick)のとき)
<ブランクタグ>
00 01 08 00 40 38 00 00 80 25 00 00
<スペースタグ>
02 01 08 00 40 38 00 00 80 25 00 00
<マークタグ>
03 01 08 00 40 38 00 00 80 25 00 00
テープ上に記録された実データのエリアを表すタグです。 データタグは以下の情報に加え、実データのバイト列を持ちます。
エリア開始時間(4byte整数),エリア長さ(4byte整数), 実データバイト数(2byte整数),実データ種別(2byte整数)
エリア開始時間、エリア長さはtick単位です。 また、エリア長さは通常、以下の値と等しくなります。
1200baud : 実データバイト数×44 600baud : 実データバイト数×88
実データバイト数は必ず32768以下の値を取ります。 32768より多いデータのタグを作成する場合、複数の連続したデータタグに分割する必要があります。
実データ種別は以下の情報を示します。 ※通常00CCH(600baud)か01CCH(1200baud)のいずれかの値を取ります。 (ビット2~7は8251USARTのモードインストラクションと同じ意味です)
例: (エリア開始時間5秒目(24000tick)、実データ"ABCDEF"、1200baudのとき)
01 01 12 00 C0 5D 00 00 08 01 00 00 06 00 CC 01 41 42 43 44 45 46
ここで示すダンプリストは、次のプログラムを1200baudで保存した場合のものです。
10 PRINT "HELLO" (SAVE "HELLO"で保存)
■ : ファイルヘッダ ■ : バージョンタグ ■ : スペースタグ ■ : マークタグ ■ : データタグ ■ : データタグ内の実データ ■ : 終了タグ
T88テープイメージファイルフォーマット Ver. 1.0
1998-08-22 by Manuke
説明
◎文中の決め事
・フォーマットの説明時に、[]で囲まれた部分は省略可能であることを示します。
・T88での数値は、すべてリトルエンディアン(低位バイト→高位バイト順)で表されます。
・T88では1/4800秒が時間の単位として使われています。本文中では、この単位を1tickと表現します。
◎概要
T88はタグ形式の可変長ファイルフォーマットです。
先頭にファイルヘッダ、それに複数個のタグが続く形式です。
ファイルヘッダ,タグ1[,タグ2[,タグ3...]]
◎ファイルヘッダ
ファイルヘッダは、そのファイルがT88形式であることを示す23+1byteの文字列です。
(文字列23byte+終端00H)
"PC-8801 Tape Image(T88)"
◎タグ
タグは可変長のデータ構造です。
タグには必ず種別、およびデータ長の情報が含まれています。
ID(2byte整数),データ長(2byte整数)[,データ(指定の長さ)]
※(データ長にはIDおよびデータ長自身の長さは含まれません)
タグ形式は、ファイル構造に変化があった場合にも下位互換を確保しやすいデータ形式です。
これを実現するために、T88ファイルを処理するプログラムは、未知のIDを持つタグを見つけた場合にそれを読み飛ばす処理を加えておく必要があります。
・終了タグ(ID:0000H,データ長:0byte)
ファイルの終端を示すタグです。T88ファイルの最後に必ず付加されます。
終了タグは付随するデータを持ちません。
例:
00 00 00 00
・バージョンタグ(ID:0001H,データ長:2byte)
T88ファイルのバージョンを示すタグです。
バージョンタグは次のデータを持ちます。
バージョン番号(2byte整数)
上位バイトがメジャーバージョン、下位バイトがマイナーバージョンを示します。
現在のバージョンは0100Hです。
例:
01 00 02 00 00 01
・ブランクタグ(ID:0100H,データ長:8byte)
・スペースタグ(ID:0102H,データ長:8byte)
・マークタグ(ID:0103H,データ長:8byte)
テープ上のデータがないエリアを表すタグです。
ブランクタグはキャリアを検出できないエリアを表します。
スペースタグは、1200Hzのキャリア(0を表現)を検出したエリアを表します。
マークタグは、2400Hzのキャリア(1を表現)を検出したエリアを表します。
これらのタグは、いずれも次のデータを持ちます。
エリア開始時間(4byte整数),エリア長さ(4byte整数)
エリア開始時間、エリア長さはtick単位です。
例:
(エリア開始時間3秒目(14400tick)、エリア長さ2秒(9600tick)のとき)
<ブランクタグ>
00 01 08 00 40 38 00 00 80 25 00 00
<スペースタグ>
02 01 08 00 40 38 00 00 80 25 00 00
<マークタグ>
03 01 08 00 40 38 00 00 80 25 00 00
・データタグ(ID:0101H,データ長:12byte+実データバイト数)
テープ上に記録された実データのエリアを表すタグです。
データタグは以下の情報に加え、実データのバイト列を持ちます。
エリア開始時間(4byte整数),エリア長さ(4byte整数),
実データバイト数(2byte整数),実データ種別(2byte整数)
エリア開始時間、エリア長さはtick単位です。
また、エリア長さは通常、以下の値と等しくなります。
1200baud : 実データバイト数×44
600baud : 実データバイト数×88
実データバイト数は必ず32768以下の値を取ります。
32768より多いデータのタグを作成する場合、複数の連続したデータタグに分割する必要があります。
実データ種別は以下の情報を示します。
※通常00CCH(600baud)か01CCH(1200baud)のいずれかの値を取ります。
(ビット2~7は8251USARTのモードインストラクションと同じ意味です)
例:
(エリア開始時間5秒目(24000tick)、実データ"ABCDEF"、1200baudのとき)
01 01 12 00 C0 5D 00 00 08 01 00 00 06 00 CC 01 41 42 43 44 45 46
◎実例
ここで示すダンプリストは、次のプログラムを1200baudで保存した場合のものです。
10 PRINT "HELLO"
(SAVE "HELLO"で保存)
■ : ファイルヘッダ
■ : バージョンタグ
■ : スペースタグ
■ : マークタグ
■ : データタグ
■ : データタグ内の実データ
■ : 終了タグ