記録はヘッダブロック、データブロック1、データブロック2、…データブロックn、フッタブロックに別れ、それぞれの前後は1200Hzのリーダー(またはインターミッション)で区切られる。
1bitの表現は以下の通り(Tは周期)。
600baud | 2400baud | |
---|---|---|
0 (2400Hz) | 4T | 1T |
1 (1200Hz) | 2T | 0.5T |
2400baud のときに1200Hzは半周期しかないため、コレが奇数回現れると以降の波形は正負が反転しなければならず、CJR→WAV を作るときに少々面倒なことになる。実機の出力を見るとブロックの前後でコレが出現した場合は割と適当な処理をしてるみたいだけど。
1バイトの記録には先頭にスタートビット1bit(0)、ストップビット3bit(二進表現で111)がつく。
で、この表現を使って1バイトの値 0xF5(2進表現で11110101)を表すときには
start bit | bit 0 | bit 1 | bit 2 | bit 3 | bit 4 | bit 5 | bit 6 | bit 7 | stop bit 1 | stop bit 2 | stop bit 3 |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
たとえば、各ブロックの先頭は必ず2になるが、この部分の波形を見ると以下の通り(600baud の場合)
[0 0 1 0 0 0 0 0 0 1 1 1] のうち、先頭1ビット、最後3ビットはスタートビット、ストップビットだから取り除き、[0 1 0 0 0 0 0 0] を前後逆にして [0 0 0 0 0 0 1 0] で 2 が表されていることがわかる。
2400baud の場合は以下のようになる。
このブロックは600/2400baud の指定にかかわらず、600baud で記録される。
ファイル名が"ABC"の場合
【2017.1.21 訂正】 各ブロックの2バイト目を 0x0Aとしていましたが、0x2Aの誤りでした。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
---|---|---|---|---|---|---|---|---|
値 | 02 | 2A | 00 | 1A | FF | FF | 41("A") | 42("B") |
内容 | 固定値 | ブロックNO | データ サイズ |
固定値 | ファイル名(16字) | |||
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |
値 | 43("C") | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
内容 | ファイル名(16字) | |||||||
16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | |
値 | 00 | 00 | 00 | 00 | 00 | 00 | 01 | 64 |
内容 | ファイル名(16字) | マシン語/BASIC | ボーレート | |||||
24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |
値 | FF | FF | FF | FF | FF | FF | FF | FF |
内容 | 固定値 | |||||||
32 | ||||||||
値 | - | - | - | - | - | - | - | |
内容 | チェックサム | - | - | - | - | - | - | - |
データサイズはファイル名から固定値の終わり(31バイト目)までのサイズを表しているらしい。
チェックサムはオフセット0から31までを加算した下位1バイト。
マシン語・BASICの指定 マシン語=0x01、BASIC=0x00
ボーレートの指定 600baud=0x64、2400baud=0x00
データブロック以下は 600/2400baud で記録形式が変わる。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
---|---|---|---|---|---|---|---|---|
値 | 02 | 2A | n | 00 | 08 | 01 | ||
内容 | 固定値 | ブロックNO | データ サイズ |
ロードアドレス | データ | |||
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |
値 | ||||||||
内容 | データ |
・
・
256 | 257 | 258 | 259 | 260 | 261 | 262 | |
---|---|---|---|---|---|---|---|
値 | |||||||
内容 | データ | チェックサム |
n は1から0xfe の間。RAM は32KB だから0xfe まで行くことはないと思うけど。
データサイズはオフセット6からの純粋なデータ部のみのサイズを表し、最大で256バイト。ただし256バイトの時、ブロックサイズの値は0にする。
ロードアドレスはデータブロック 1 の場合、BASIC なら 0x801、マシン語なら MSAVE の指定アドレスになる。
0 | 1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|---|
値 | 02 | 2A | FF | FF | ||
内容 | 固定値 | ブロックNO | 固定値 | ロード終了アドレス+1 |
フッタブロックのブロックNO は 0xff
JR-300 に関しては実機での検証ができないため、妄想度が高いことに注意。JR-200 から変わっている部分を強調で示す。
JR-300 のテープはブロック間に無音部分があり、JR-200 とは異なる。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
---|---|---|---|---|---|---|---|---|
値 | 02 | 2A | 00 | 1A | FF | FF | 41("A") | 42("B") |
内容 | 固定値 | ブロックNO | データ サイズ |
固定値 | ファイル名(16字) | |||
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |
値 | 43("C") | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
内容 | ファイル名(16字) | |||||||
16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | |
値 | 00 | 00 | 00 | 00 | 00 | 00 | 10 | 00 |
内容 | ファイル名(16字) | テープ種別? | ボーレート | |||||
24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |
値 | 00 | FF | ||||||
内容 | ロード開始アドレス | ロードバイト数 | 実行開始アドレス | 固定値? | ||||
32 | ||||||||
値 | - | - | - | - | - | - | - | |
内容 | チェックサム | - | - | - | - | - | - | - |
データサイズはファイル名から固定値の終わり(31バイト目)までのサイズを表しているらしい。
チェックサムはオフセット0から31までを加算した下位1バイト。
テープ種別は確認範囲では 0x10 になっており、JR-200 とは異なる。
ボーレートの指定 JR-200 とは値が異なる。 600baud=0x01、2400baud=0x00
データブロック以下は 600/2400baud で記録形式が変わる。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
---|---|---|---|---|---|---|---|---|
値 | 02 | 2A | n | 00 | FF | FF | ||
内容 | 固定値 | ブロックNO | データ サイズ |
固定値 | データ | |||
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |
値 | ||||||||
内容 | データ |
・
・
256 | 257 | 258 | 259 | 260 | 261 | 262 | |
---|---|---|---|---|---|---|---|
値 | |||||||
内容 | データ | チェックサム |
JR-200 ではロードアドレスだった部分が固定値になっており、ブロック間で連続したアドレスでのロードしかできなくなっている(→ マルチ CJR のような飛び地のロードはできない)
データサイズはオフセット6からの純粋なデータ部のみのサイズを表し、最大で256バイト。ただし256バイトの時、ブロックサイズの値は0にする。
0 | 1 | 2 | 3 | 4 | 5 | 6 | |
---|---|---|---|---|---|---|---|
値 | 02 | 2A | FF | FF | FF | FF | 28 |
内容 | 固定値 | ブロックNO | 固定値? |
フッタブロックのブロックNO は 0xff
[HARD TOP]
[TOP PAGE]