HARDWARE

カセットテープフォーマットについて

JR-200

JR-300

JR-200

  記録はヘッダブロック、データブロック1、データブロック2、…データブロックn、フッタブロックに別れ、それぞれの前後は1200Hzのリーダー(またはインターミッション)で区切られる。
fig.1

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 の場合)

fig.2

[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 の場合は以下のようになる。

fig.3

1.ヘッダブロック(33バイト)

このブロックは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

 

2. データブロック n(最大256 + 7バイト)

 データブロック以下は 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 の指定アドレスになる。

 

3. フッタブロック(6バイト)

  0 1 2 3 4 5
02 2A FF FF    
内容 固定値 ブロックNO 固定値 ロード終了アドレス+1

フッタブロックのブロックNO は 0xff

 

JR-300

 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

 

2. データブロック n(最大256 + 7バイト)

 データブロック以下は 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にする

 

3. フッタブロック(7バイト)

  0 1 2 3 4 5 6
02 2A FF FF  FF FF 28 
内容 固定値 ブロックNO 固定値?

フッタブロックのブロックNO は 0xff

 


HARD TOP

TOP PAGE

inserted by FC2 system