S1-CP/M80にCPMDrvWinのI/Oを移植 その1

スポンサーリンク

S1-CP/M80のディスクドライブにold68funさんのCPMDrvWinの8251版ドライバを移植しています。

Windows側のソフト内部の動作は不明ですが、BIOS09側はold68funさんのOneDriveにコードがアップされている
ので、仮想ドライブとのやり取りはそのまま使わせて頂きます

コードを見た感じではドライブ名、トラック、BDOSセクタ÷2を渡して256バイトのデータをやり取りする仕組みの
ようです。

こんな感じでしょうか


セクタ÷2で受け取った256バイトデータのブロッキングとデブロッキングはBIOS09側でやっているので単に
FDDとの256バイトのやり取りを仮想ドライブの256バイトのやり取りに置換えるだけで実装できそうな感じです^^

と、いうわけでFM用に書かれている8251用のドライバを6850用に書き換えました

書き換えましたと言っても、ACIA送受信用サブルーチンの変更なので仮想ドライブの送受信部は変数のオフセット
以外はそのままだったりします^^;;
(Writeの処理もそのまま流用させて頂いております)

ACIAの送受信部もold68funさんのソフトにしたがってRTS,CTSを追加しました


仮想ドライブ用I/Oを追加しドライブ2、3なら仮想ドライブに変更されるようにリードサブルーチンを切り替えます


上記のI/Oを追加してDIR C: をしてみると

シリアルポートから

応答がありました
ASCIIの’R’とドライブ=2 , トラック=2, セクタ=1, チェックサム=57を送出してきます。

TeraTermのマクロで応答を返してみると

想定とはちょっと違いますが、返信もあります^^
想定では256バイトのデータを送るとBIOS09側からチェックサムを送ってくるので、Windows側からもチェック
サムを送ると ACK 又は NAKを返してくれるのではないかと思っています。 
256バイト送信後も$D等のデリミタを送信しないと反応してくれないのでデリミタも必要かもしれません^^;;
しかし、
256バイトのデータを仮に$01+$02+$03.+$00…+$00+$03+$02+$01と送るとBIOS09側からチェックサムを計算し
$0Cを返してくれているので基本的には動作しているようです。


正しいかどうか不明ですが、TeraTermeのマクロはこんな感じで書きました


TeraTermで動作確認してもよく分からいので、次回からは実機で動作確認してみます

そんな、S1-CP/M80のBIOS09が応答してくれた記録・・・

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。 本文に全角文字を2文字以上含めて下さい (スパム対策)