ベーシックマスターのソフトウェア(2)続カセットテープ
カセットテープルーチン(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.. .....





ディスカッション
コメント一覧
まだ、コメントがありません