最後の仕上げに、ディスク書き込みルーチンを書いて、移植完了です。
ブロッキング/デブロッキングコードを取り込んだCP/M-80において、ディスク書き込みルーチンは、writehstルーチンです。
基本的に、ディスク読み込みルーチンと同じコードで問題ありません。コマンド番号が違うだけです。
最も問題になるのはDMAへのコマンドをどう書くか?です。これは「試験に出るX1」がなければ無理でした。以下に、SORD M68用ディスク書き込みルーチンに使ったDMAコマンドチェーンを記します。
DMA_WRITE_COMMANDS:
DB 16H
DB 0C3H,0C3H,0C3H,0C3H,0C3H,0C3H
DB 83H
DB 79H
DB 022H,0F6H ; host buffer address
DB 00H,0FFH ; byte number of transfer
DB 14H,28H,8DH
DB 0CBH,00H ; FDC data register
DB 9AH
DB 0CFH,05H
DB 0CFH,87H
下から2行目のコマンド2つ(0CFH,05H)がないと正しく動きません。ここでハマりましたが、「試験に出るX1」には載っています。また、ネットでは「Z80DMA コマンドコード生成 Z80DMA Command Generator 2019.6.19」がとても役に立ちました。使いこなすコツは、「デフォルトでマークされているボタンも、ちゃんとクリックする」ことです。そうでないと、0CFH,05Hが出ませんでした。これはハマりポイントです。
おまけに読み込み時のDMAコマンドチェーンを記します。0BBH, 01H, 0BFHはよくわかりません。BOOT ROMではこう書いてあるのでそのまま踏襲しています。なくても動きそうですが...。
DMA_COMMANDS:
DB 15H
DB 0C3H,0C3H,0C3H,0C3H,0C3H,0C3H
DB 0BBH,01H,0BFH
DB 6DH
DB 0CBH,0FFH,00H,02CH,010H,08DH
DB 022H,0F6H ; host buffer address
DB 9AH
DB 0CFH,87H
これで、SORD M68へのCP/M-80の移植は完了です。読んでいただき、ありがとうございました。