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

仮想ドライブ用のドライバ移植で怪しそうなデブロッキング処理とバッファの転送部分を調べてみました。

BDOSのセクタ番号を倍密度のセクタ番号に変換する処理は大丈夫そうでした。

そうなると怪しいのはCPMの128バイトDMAバッファにデータを転送する部分・・・

FromとToのポインタを表示できるように改造してFDDと仮想ドライブで違いを見てみると
仮想ドライブ時のみFromのポインタがおかしくなっているのを確認

MSX風の青背景白文字は写真が撮りにくいので、黒背景白文字に変えました^^;;

FDDの場合DIR A: 及び 仮想ドライブ DIR C: を実行したときの様子

(6ページ目はMMUで$89に割り当てておりBIOS09の割り付けです)
FDDアクセス時は赤、仮想ドライブ時は黄色で囲った部分です
FDDでDIR A:すると $6D12~の128バイトと$6D92の128バイトを順序良く$6F00~の128バイトに転送しています
仮想ドライブで DIR C: してみると
$030Fの後$6D92 その後$270F~を転送し$6D92~を転送しています。
$6D92には後半部分の128バイトが正しく入っているようなので、DIRした際は後半部分のファイル名は正しく
表示されます

プログラムのロード時も
FDDから STATをロードした様子が赤で囲った部分

仮想ドライブの場合は黄色で囲った部分です
 こちらもFDDからのロードは$6D12~の128バイトと$6D92の128バイトを順序良く$6F00~の128バイトに転送していますが仮想ドライブではFromのポインタがおかしくなるようです。

と、いうわけで原因が分かったのでバッファからのデータ転送部にもう一工夫必要なことがわかりました。

単純にFDのリードライトサブルーチンを差し替えるだけではダメだったようで、少し甘かったようです^^;;

原因はわかりましたが、ちょっと奥が深かったのでどうやって変更しようか悩み中・・・

そんな、DIRでセクタ後半部分しか表示されない原因が分かった記録^^

コメントを残す

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

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