日立 MB-S1 S1-CP/M80にCPMDrvWinのI/Oを移植 その4(移植完了)

Last Updated on 2021年5月6日 by kabekin

S1-CP/M80への仮想ドライブ移植ですが 色々見落として混乱しておりますが、
結局はドライブへのRead,Writeルーチンの差替えのみでOKという当初の目論見に戻りました^^;;;

仮想ドライブのread, writeルーチン移植の際にFDCパラメータのポインタを戻していないことを
old68funさんに指摘して頂き問題解決しました。ありがとうございます

注意しながら影響のありそうな部分を移植しましたが、かなり致命的な抜けという凡ミスでした・・・

; old68funさんのCPMDrvWin用ドライバ移植中
.if 1
;*================================================
;*read windows virtual drive (old68fun)
RDWDRV          =               .
;*read 256bytes
RDS0:           LDX             #fdc_param
                CLR             CSUM
                LDA             #'R
                LBSR            ACIA_TX         ;read cmd
                BSR             ADDCS
                LDA             IO_DRV,X
                LBSR            ACIA_TX         ;drv
                BSR             ADDCS
                LDA             IO_TRK,X
                LBSR            ACIA_TX         ;trk
                BSR             ADDCS
                LDA             IO_SCT,X
                LBSR            ACIA_TX         ;sct
                BSR             ADDCS
                LDA             CSUM
                LBSR            ACIA_TX         ;csum
;*wait receive ACKorNAKorESC
;*  if NAK then re-send 'R',Drv,Trk,Sct,csum
;*  if ESC then error return / if ACK then next
RDS1:           LBSR            ACIA_RX
                CMPA            #NAK
                BEQ             RDS0
                CMPA            #ESC
                BNE             RDS2
                LDA             #0xFF           ;*error
                RTS                             ;*error end
;*
RDS2:           CMPA            #ACK
                BNE             RDS1
;* send ACK
                LBSR            ACIA_TX         ;ACK
;*receive data(256bytes),csum
;*  data is saved to Buffer(X)
;*  if csum error then send NAK
;*  if csum ok then send ACK and to next process
RDS3:           LDX	#fdc_param
	LDX	IO_ADR,X	;BIOS BUF
                CLRB                            ;counter(256)
                CLR             CSUM
RDSLOP:         LBSR            ACIA_RX         ;data
                STA             ,X+
                BSR             ADDCS
                DECB
                BNE             RDSLOP
                LDA             CSUM
                LBSR            ACIA_TX         ;csum
                LBSR            ACIA_RX         ;csum
                CMPA            CSUM
                BEQ             RDS4
                LDA             #NAK
                LBSR            ACIA_TX         ;NAK
                BRA             RDS3
;*
RDS4:           LDA             #ACK
                LBSR            ACIA_TX         ;ACK
;*wait receive ACK
RDS5:           LBSR            ACIA_RX
                CMPA            #ACK
                BNE             RDS5
                LDX             #fdc_param ;←これを忘れていただけでした^^;;;
                RTS

ReadとWriteの最後でXレジにパラメータのポインタを入れるように修正^^;;

正常に動作するようになりました^^

FDDでも仮想ドライブでも$6D12と$6D92を順序良くアクセスするようになりました^^

デバッグ用のアドレス表示を消して再起動!
仮想ドライブでのDIRもいい感じで表示されるようになりました


CPMDrvWinPもFM版と同じアクセスになりました

1回目はトラック2のセクタ1~10ともう一回セクタ1~4
2回目はトラック2のセクタ1~4のみ
こちらもいい感じになりました。

書き込みが正常にできているか確認するためにMBASICで簡単なプログラムを作って保存してみました

SAVETESTで保存してFILESで保存確認。
SAVETEST.BASAが保存されていました。続いてLOADでSAVETESTを読みだしてLIST
おお!正常に読めました^^  SAVE→FILES→LOAD の一連の動作OKでした。

MBASICをSYSTEMで抜けてPIPでテキストとしてSAVETEST.BASをコンソールに出力させてみると

正常に表示OKです。
Writeの処理も一通り動作確認できました^^

これでS1-CP/M80実機から直接D88ファイルが扱えるようになりました。
D88ファイルへのインポート、エクスポートはCPMDrvWinへドラッグで簡単に行えるので簡単です。

貴重なMP-3560へのアクセスも大幅に減らすことができて延命効果も抜群です^^

以前、来夢来人用に作ったRS232Cカードはビットジェネレータを別に付けたので9600bps以上も扱えて快適かも・・

しかし、アドレスデコーダを変更できるようにしていなかったので$FFC4,5固定でS1には取付けできません。
今後、I/Oアドレスを変えてS1に取り付けれるようにしてみます^^

S1-CP/M80実機で直接D88ファイルが扱えるようになった記録・・・



今後の目標
COM1にACIAを追加して19200bpsに対応させる

 

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください