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に対応させる
View Comments
かべきんさま
MBS1へのcp/m68kの移植にめどがつきました。
トランジェントコマンドの実行も良好です。
デバッグ中その場の成り行きで作り込んだBIOS09で安定して動作してます。
DISKBASICBIOSコールを利用してます。
次の段階としてはコードの整理、ローダー移植などでしょうか。
昨日から降り出した雪を掻いていると、パウダーなのでスキー場が恋しくなるこの頃です。
おっ!
いよいよS1でCP/M68Kが楽しめそうですね(^^)
ローダは68K用のFORTHで作っていたものと同じような感じでしょうか
S1BASICに加えCP/M80,FLEX09が動くようになったのでCP/M68Kも動作するようになれば楽しさ倍増ですね
基本入出力、ローダーはS1BASICとBIOSから独立できてません。
起動時の使い勝手は今ひとつです。
S1-CP/M80のコールドブートローダはDISKBASICの構造ほぼそのままでMMRのマッピング部分だけ合わせ込みましたがブートセクタの512バイトぎりぎりでした。
これに加えMPC-68008のローダ部分も合わせると512バイトには入りきりそうにないですね。
ただ、日立純正のS1-CP/M68KもDISKBASICのようなもの起動するような構成だったと聞いたことがあります。
まずDISKBASICのようなものが起動しメニューからユーティリティやCP/M68Kを起動するといった物らしいです。
情報ありがとうございます。
手元の参考文献:プロセッサ1986.4 No.12
「第2章68000によるCPM-68Kマイコンシステムの製作」によると、
CPMLDR.sysをブートトラックから読込実行し、CPM.SYSを読込ませ実行を移すようです。
ハマりそうな、S1-DISK-BIOSに依存しないDISKIO、ブートローダーを作り込むのが億劫でして・・
ローダが大きいと2段階でロードするようですね。
S1-CP/M80用に作ったブートローダはDISKBASICに依存せずにFDCのDRQとNMIを当てにして動いています。
参考になるかもしれませんのでメールでお送りします。
DISKIOもDISKBASICに依存していませんのでお送りします
使えそうでしたら参考にしてみて下さい(^^)