日立 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に対応させる

 

6件のコメント

  1. かべきんさま
    MBS1へのcp/m68kの移植にめどがつきました。
    トランジェントコマンドの実行も良好です。
    デバッグ中その場の成り行きで作り込んだBIOS09で安定して動作してます。
    DISKBASICBIOSコールを利用してます。
    次の段階としてはコードの整理、ローダー移植などでしょうか。

    昨日から降り出した雪を掻いていると、パウダーなのでスキー場が恋しくなるこの頃です。

    1. おっ!
      いよいよS1でCP/M68Kが楽しめそうですね(^^)
      ローダは68K用のFORTHで作っていたものと同じような感じでしょうか
      S1BASICに加えCP/M80,FLEX09が動くようになったのでCP/M68Kも動作するようになれば楽しさ倍増ですね

  2. 基本入出力、ローダーはS1BASICとBIOSから独立できてません。
    起動時の使い勝手は今ひとつです。

    1. S1-CP/M80のコールドブートローダはDISKBASICの構造ほぼそのままでMMRのマッピング部分だけ合わせ込みましたがブートセクタの512バイトぎりぎりでした。
      これに加えMPC-68008のローダ部分も合わせると512バイトには入りきりそうにないですね。
      ただ、日立純正のS1-CP/M68KもDISKBASICのようなもの起動するような構成だったと聞いたことがあります。
      まずDISKBASICのようなものが起動しメニューからユーティリティやCP/M68Kを起動するといった物らしいです。

  3. 情報ありがとうございます。
    手元の参考文献:プロセッサ1986.4 No.12
    「第2章68000によるCPM-68Kマイコンシステムの製作」によると、
    CPMLDR.sysをブートトラックから読込実行し、CPM.SYSを読込ませ実行を移すようです。

    ハマりそうな、S1-DISK-BIOSに依存しないDISKIO、ブートローダーを作り込むのが億劫でして・・

    1. ローダが大きいと2段階でロードするようですね。
      S1-CP/M80用に作ったブートローダはDISKBASICに依存せずにFDCのDRQとNMIを当てにして動いています。
      参考になるかもしれませんのでメールでお送りします。
      DISKIOもDISKBASICに依存していませんのでお送りします
      使えそうでしたら参考にしてみて下さい(^^)

コメントを残す

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

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