カセットテープ
概要
テープには1200Hzと2400Hzの矩形波の並びで記録されている。この波の連続する個数からシリアルデータに変換できる。
ボーレート | 波形 | ビット |
---|---|---|
600ボー | 2400Hz x 4 | 1 |
1200Hz x 2 | 0 | |
1200ボー | 2400Hz x 2 | 1 |
1200Hz x 1 | 0 |
L3 BASICの場合、シリアルデータには1ビットのスタートビット"0"と2ビットのストップビット"11"が含まれているのでこれらを取り除くと1バイトのデータを得ることができる。
テープのフォーマット
テープフォーマットは以下のように、ヘッダ1つ、1つ以上のボディ、フッタ1つの各部分で構成されている。
ファイルヘッダ
# | 位置 | 値 | バイト数 | 内容 |
---|---|---|---|---|
1 | $FF | 90 |
GAP ・バイト数はBASICワークエリアの$011Aの値 |
|
2 | 0...1 | $013C | 2 | ヘッダ |
3 | 2 | $00 | 1 | ファイルヘッダを示す |
4 | 3 | $14 | 1 | データの長さ 20バイト固定 |
5 | 4...11 | 8 | ファイル名 | |
6 | 12 | 1 | ファイルの種類 $00 ... BASIC $01 ... データ $02 ... 機械語 |
|
7 | 13...14 | 2 | ファイルの種類2 $0000 ... バイナリ形式(BASIC, 機械語のみ) $FFFF .... アスキー形式(BASIC, データのみ) |
|
8 | 15...23 | $00 | 9 | 未使用 |
9 | 24 | 1 | CRC #3~#8の合計 |
|
10 | 25... | $00 | 3~4 | フッタ |
ファイルボディ
# | 位置 | 値 | バイト数 | 内容 |
---|---|---|---|---|
1 | $FF | 90/10 |
GAP ・バイト数はBASICワークエリアの$011Aの値 ・バイナリ形式の場合、ボディ2つ目以降は10バイト (BASICワークエリアの$0119の値) |
|
2 | 0...1 | $013C | 2 | ヘッダ |
3 | 2 | $01 | 1 | ファイルボディを示す |
4 | 3 | n | 1 | データの長さ 1~255バイト |
5 | 4... | 最大255 | データ | |
6 | 4+n | 1 | CRC #3~#5の合計 |
|
7 | 5+n | $00 | 3~4 | フッタ |
ファイルフッタ
# | 位置 | 値 | バイト数 | 内容 |
---|---|---|---|---|
1 | $FF | 90/10 |
GAP ・バイト数はBASICワークエリアの$011Aの値 ・バイナリ形式の場合、10バイト (BASICワークエリアの$0119の値) |
|
2 | 0...1 | $013C | 2 | ヘッダ |
3 | 2 | $FF | 1 | ファイルフッタを示す |
4 | 3 | $00 | 1 | データの長さ 0バイト |
5 | 4 | $FF | 1 | CRC #3~#4の合計 |
6 | 5... | $00 | 3~4 | フッタ |
データのフォーマット
BASIC - バイナリ形式
# | 位置 | 値 | バイト数 | 内容 |
---|---|---|---|---|
1 | 0 | 1 |
$FF ... プロテクトなし $FE ... プロテクト有り |
|
2 | 1...2 | 2 | 表示を禁止する開始行番号 全行非表示する場合$0000 全行表示する場合$FFFF |
|
3 | 3... | BASIC中間言語形式のデータ プロテクト有りの場合は暗号化?される。 |
BASIC中間言語は1行ごとに以下のようなフォーマットで保存されている。
# | バイト数 | 内容 |
---|---|---|
1 | 2 |
次の行の先頭ポインタ
($0000でデータ終わり) |
2 | 2 | 行番号 |
3 | n | BASIC文(中間言語形式) |
4 | 1 | 行の終端($00) |
BASIC - アスキー形式
1バイト目に改行が入る。改行はCR($0D)となる。
機械語
# | 位置 | 値 | バイト数 | 内容 |
---|---|---|---|---|
1 | 0 | $00 | 1 |
$00固定 |
2 | 1...2 | 2 | 機械語データのサイズ | |
3 | 3...4 | 2 | 機械語格納開始アドレス | |
4 | 5... | n | 機械語データ | |
5 | 5+n... | $FF | 1 | $FF固定 |
6 | 6+n... | $0000 | 2 | $0000固定 |
7 | 8+n... | 2 | 機械語実行開始アドレス |
データ
改行はCR($0D)となる。
I/O
ACIA (HD46850(MC6850))
アド レス |
データビット | R / W | 備考 | |||||||
---|---|---|---|---|---|---|---|---|---|---|
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |||
FFC4 | IRQ | PE | OVRN | FE | CTS | DCD | TDRE | RDRF | R | カセットインターフェース&RS-232C(排他) (切り替えはMODE-SELのビット5で行う) |
CR7 | CR6 | CR5 | CR4 | CR3 | CR2 | CR1 | CR0 | W | ||
FFC5 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | R | |
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | W |
MODE-SEL
アド レス |
データビット | R / W | 備考 | |||||||
---|---|---|---|---|---|---|---|---|---|---|
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |||
FFD0 | w | HR | C | x | x | GB | RB | BB | W | 状態設定レジスタ |
W=0 のとき 40字/行、W=1のとき80字/行
HR=0のときハイレゾモード、HR=1のときノーマルモード
C=0のときACIAにカセットを選択、C=1のときRS-232Cを選択
GB,RB,BB:背景色(緑、赤、青)
REMOTE リモートスイッチ
アド レス |
データビット | R / W | 備考 | |||||||
---|---|---|---|---|---|---|---|---|---|---|
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |||
FFD2 | RM | x | x | x | x | x | x | x | W |
RM=1のとき、リレースイッチON(カセットリモートOFF)
BAUD-SEL ボーレート切り替え
アド レス |
データビット | R / W | 備考 | |||||||
---|---|---|---|---|---|---|---|---|---|---|
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |||
FFD7 | x | x | x | x | x | x | x | SR | W |
SR=0のとき600ボー、SR=1のとき1200ボー。
ピン配置
No. | 意味 | データ方向 | No. | 意味 | データ方向 | |
---|---|---|---|---|---|---|
1 | リモート信号 | --- | 4 | リモート信号 | --- | |
2 | GND | --- | 5 | DATA IN | IN | |
3 | DATA OUT | OUT | 6 | N/C | --- | |
コネクタ:DIN6pin |
DATA IN, DATA OUTはアナログ音声。
リモート信号は内部でリレースイッチにつながっており、LOADやSAVEでリレーがONになるとピン1と4が導通する。