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

TeraTermを相手に動作確認してもうまくいかないのでS1実機で動作確認することにしました。

シリアルポートはS1内蔵のACIAで$FFC4, $FFC5です。
FM7のシリアルカードは最大で19200bpsが設定できるのですがS1では9600bpsが最高速度でした。


S1の通信速度設定ディップスイッチSW1,SW2をオンでSlow=2400bps, Fast=9600bps設定になるそうです

Windows側でCPMDrvWinをスタンバイさせてから、
仮想ドライブのI/Oを一通り実装したBIOS09に交換してCP/M80を起動してみます

C:\ して通信させてみます
おお!CPMDrvWin反応しました!

CPMDrvWin側も反応しています

しかし、全部で25個のファイルがあるはずなのですが12個しか出ていません
トラック2のセクタ1から15まで2回読みだされているようです。


正しい表示はこんな感じです (S1エミュで直接D88イメージをDIRした場合)

正常に動作しているFM7のBIOS09から上記のD88イメージをDIRすると

一回目はトラック2の1~15の後、再度トラック2の1~4を読みました
2回目はトラック2の1~4のみ読み出し。
この動作が正しい動作のようです。


2回目のDIR C: でも12個しか表示されません
何度やってもダメです・・・

CPMDrvWinも同じくトラック2のセクタ1~15を読み出しましたが2回ではなく1回だけ読みだされているようです

試しにDUMPコマンドを実行してみると

トラック7 セクタ9,10を読み出しましたが、そのままフリーズ

DUMP.COMはトラック7のセクタ9から保存されているようなので読込要求は正常の動作しているっぽいです^^

これはBIOS09内の256バイトのバッファからCP/Mの128バイトバッファに転送する部分のデブロッキングの
処理が怪しいです。

デブロッキングの処理はBDOSのセクタ÷2で既にバッファに読み込まれている256バイトのデータを
前半128バイトか後半128バイトを切り替えてBIOS80のDMAバッファに転送しているだけなのでFDCでも
仮想ドライブでも影響しないと思っていました^^

こんな感じで、バッファへの転送はリード後の共通な処理なんです。

ですが、うまくいきません・・・(泣

FDDから1セクタの読込は256バイトをBIOS09内のバッファに読み込んでいます。
仮想ドライブも同様に1セクタ256バイトをBIOS09内のバッファに読み込んでいるだけなので、
バッファの前半、後半を切り替えているデブロッキング、ブロッキングは同じように使えると思っていたのですが
そんなに甘くなかったようです^^;;

コードを眺めている感じではおかしくない気もするのですが、正常に動きませんね^^;;;

仮想ドライブのDPBはMSA仕様に合わせてFM/PC8001仕様に合わせています→こちら

何か勘違いしていると思うので、もうしばらく調べてみます^^

しかし、MSX風の青背景に白文字は写真が撮りにくいですね・・・

そんな、何か読めているけど正常に動作しないI/Oドライバ移植中の記録^^;;

 

コメントを残す

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

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