ベーシックマスターのソフトウェア(2)続カセットテープ

BASICMASTER, 昔のパソコン

カセットテープルーチン(1)の続き。今回も BASICMASTERの300bps カセットルーチンについて調べてみる。

カセットフォーマットの詳細は BASICMASTER/documents/tape_format.md at main · zu2/BASICMASTER を参照のこと。

カセットデータのブロックは独立している

BASICMASTER 300bps カセットデータは、256バイト以下のブロックに分割されている。それぞれのブロックは独立して処理されている。

モニタで保存すると連続したアドレスしかSAVEできないが、データ上は飛び飛びのアドレスでも構わない。

下記のように、1ブロック目が$2000-$20FF、2ブロック目が$3000-$30FF というデータを作ってみた。


00000040: ff 01 01 00 54 45 53 54 33 20 2e 42 01 00 20 00  ....TEST3 .B.. .
00000050: db 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	:
00000190: ff ff ff ff 01 01 00 54 45 53 54 33 20 2e 42 02  .......TEST3 .B.
000001a0: 00 30 00 ca ff ff ff ff ff ff ff ff ff ff ff ff  .0..............



モニタで読ませても問題ない。データも別々の場所に読み込めた。



任意のカセットデータの作り方

真面目に保存ルーチンを作ろうとすると、モニタのBYTOUTルーチンを丸々コピーして、変更部分を書き換えるしかない。面倒くさすぎる。

上記のデータは、j68 emulator で保存したデータ(.cmt)の2ブロック目のヘッダを書き換えただけである。書き換えには xxd を使った。

チェックサム部分($ca)は、ヘッダ部分だけを再計算すれば良いので perl で計算。

ヘッダのチェックサムは、ヘッダデータの合計の2の補数である。


#!/usr/bin/perl

printf "%04x\n", -(0x01+0x00+0x54+0x45+0x53+0x54+0x33+0x20+0x2e+0x42+0x02+0x00+0x30+0x00);



作成したデータを、xxd -r でバイナリに戻せば .cmt フォーマットが作成できる。

.cmt は そのまま j68などのエミュレータで読んでもいいし、bm2 の bmtape2 コマンドで .wav に変換して実機に持っていくこともできる。


0000: ffff ffff ffff ffff ffff ffff ffff ffff  ................
0010: ffff ffff ffff ffff ffff ffff ffff ffff  ................
0020: ffff ffff ffff ffff ffff ffff ffff ffff  ................
0030: ffff ffff ffff ffff ffff ffff ffff ffff  ................
0040: ff01 0100 5445 5354 3320 2e42 0100 2000  ....TEST3 .B.. .
0050: db00 0000 0000 0000 0000 0000 0000 0000  ................
0060: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0070: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0080: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0090: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0100: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0110: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0120: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0130: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0140: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0150: 0000 00ff ffff ffff ffff ffff ffff ffff  ................
0160: ffff ffff ffff ffff ffff ffff ffff ffff  ................
0170: ffff ffff ffff ffff ffff ffff ffff ffff  ................
0180: ffff ffff ffff ffff ffff ffff ffff ffff  ................
0190: ffff ffff 0101 0054 4553 5433 202e 4202  .......TEST3 .B.
01a0: 0030 00ca ffff ffff ffff ffff ffff ffff  .0..............
01b0: ffff ffff ffff ffff ffff ffff ffff ffff  ................
01c0: ffff ffff ffff ffff ffff ffff ffff ffff  ................
01d0: ffff ffff ffff ffff ffff ffff ffff ffff  ................
01e0: ffff ffff ffff ffff ffff ffff ffff ffff  ................
01f0: ffff ffff ffff ffff ffff ffff ffff ffff  ................
0200: ffff ffff ffff ffff ffff ffff ffff ffff  ................
0210: ffff ffff ffff ffff ffff ffff ffff ffff  ................
0220: ffff ffff ffff ffff ffff ffff ffff ffff  ................
0230: ffff ffff ffff ffff ffff ffff ffff ffff  ................
0240: ffff ffff ffff ffff ffff ffff ffff ffff  ................
0250: ffff ffff ffff ffff ffff ffff ffff ffff  ................
0260: ffff ffff ffff ffff ffff ffff ffff ffff  ................
0270: ffff ffff ffff ffff ffff ffff ffff ffff  ................
0280: ffff ffff ffff ffff ffff ffff ffff ffff  ................
0290: ffff ffff ffff ffff ffff ffff ffff ffff  ................
02a0: ffff ffff 0000 ffff ffff ffff ffff ffff  ................
02b0: ffff ffff ffff ffff ffff ffff ffff ffff  ................
02c0: ffff ffff ffff ffff ffff ffff ffff ffff  ................
02d0: ffff ffff ffff ffff ffff ffff ffff ffff  ................
02e0: ffff ffff ffff ff01 0000 5445 5354 3320  ..........TEST3 
02f0: 2e42 0201 2000 da00 0000                 .B.. .....