S1-CP/M80への仮想ドライブ移植ですが 色々見落として混乱しておりますが、
結局はドライブへのRead,Writeルーチンの差替えのみでOKという当初の目論見に戻りました^^;;;
仮想ドライブのread, writeルーチン移植の際にFDCパラメータのポインタを戻していないことを
old68funさんに指摘して頂き問題解決しました。ありがとうございます
注意しながら影響のありそうな部分を移植しましたが、かなり致命的な抜けという凡ミスでした・・・
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | ; 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レジにパラメータのポインタを入れるように修正^^;;
続きを読む S1-CP/M80にCPMDrvWinのI/Oを移植 その4(移植完了)