SORD M23のFloppy Disk ControllerはMB8877A(FD1771)です。これはSORD M68と同一ですので、以前、CP/Mを移植したルーチンがほぼそのまま利用できます。
I/Oアドレスは以下の通りです。
FDC_COMMAND EQU 0C0H
FDC_STATUS EQU 0C0H
FDC_TRACK EQU 0C1H
FDC_SECTOR EQU 0C2H
FDC_DATA EQU 0C3H
DMA EQU 0C4H
FDC_CONTROL EQU 0C5H
DMA_BANK_SEL EQU 0C6H
M68と異なっているのは、ドライブセレクトなどFDDを外的にコントロールしていると思われるポートで、これは完全に異なっているので変更が必要です。といっても、
LD (FDC_CONTROL), 01H
と1を入れるだけで、ドライブ1、倍密度が選択されます。
DMA転送のREADコードは以下のような感じです。
;
; DMA setting & FDD read FOR SIDE 0
; C is Sector No.
; D is Control word.
;
GO_DMA_AND_READ0:
LD A,C
OUT (FDC_SECTOR),A
LD HL,DMA_COMMANDS
CALL DMA_ON
AND 20H
LD A,80H ; READ DATA COMMAND for Side 0
DO_FDC0:
CALL FDC_OUT
AND 0FCH
RET
Side0とコメントにありますが、SORD M23のFDDは片面ですので、Side0しかありません。
DMAコマンドチェーンを以下に記載します。
DMA_COMMANDS:
DB 15H,0C3H,0C3H,0C3H,0C3H,03CH,0C3H
DB 0BBH,01H,0BFH
DB 6DH,0C3H,0FFH,00H,02CH,010H,08DH
DB 00H,00H
DB 8AH
DB 0CFH,87H
SORD M68のときとやや異なりますが、本質的には一緒です。