仮想ドライブ用のドライバ移植で怪しそうなデブロッキング処理とバッファの転送部分を調べてみました。
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でセクタ後半部分しか表示されない原因が分かった記録^^