Не знаю. Когда я делал свой дисковод из журнала Радио (это который потом с SP-DOS работал), я сделал только то, что было в статье (удлинение цикла обращения и предкомпенсация записи). Так вот, у меня все отлично работало на программном уровне на штатных 2,5МГц, впрочем как и с SPDOS.
Пришлось разбить цикл на две части - второе условие уже вылазило за пределы таймингов. Ну и при чтении 1К сектора таких циклов естественно 4. А для спектрумских дискет вообще один:Код:;FDC CONTROL REGISTER
CTR:PUSH PSW
CT0:LDA 0F700H
ANI 1H
JNZ CT0
POP PSW
STA 0F700H
RET
;WAITING FOR DRIVE READY
RED:LDA 0F700H
ANI 80H
JNZ RED
RET
RWR:LDA 0F700H
ANI 82H
JNZ RWR
RET
;LOAD SECTOR 512 BYTES WITH CHECKING CHECKSUMM
;10H TRIES, [HL] - ADR...
INS:PUSH D
PUSH B
MVI B,10H
IS0:PUSH B
LDA TRK
ANI 1H
MOV C,A
LDA DRV
ORA C
STA 0F602H
LDA TRK
RRC
ANI 7FH
STA 0F703H
XRA A
MOV B,A
MVI A,18H
CALL CTR
CALL RWR
LDA SEC
INR A
STA 0F702H
MVI A,80H
CALL CTR
MVI C,82H
LXI D,0F700H
IS1:LDAX D
ANA C
JZ IS1
LDA 0F703H
MOV M,A
INX H
INR B
JNZ IS1
IS2:LDAX D
ANA C
JZ IS2
LDA 0F703H
MOV M,A
INX H
INR B
JNZ IS2
POP B
LDA 0F700H
MOV C,A
ANI 80H
JNZ IS3
MOV A,C
ANI 08H
JZ IS4
DCR B
JNZ IS0
MVI A,08H
JMP IS5
IS3:MVI A,80H
JMP IS5
IS4:XRA A
IS5:STA BER
POP B
POP D
RET
;SAVE SECTOR 512 BYTES
;[HL] - ADR...
OTS:PUSH D
PUSH B
LDA TRK
ANI 1H
MOV C,A
LDA DRV
ORA C
STA 0F602H
LDA TRK
RRC
ANI 7FH
STA 0F703H
MVI A,18H
CALL CTR
XRA A
MOV B,A
LXI D,0F700H
CALL RED
MVI C,82H
LDA SEC
INR A
STA 0F702H
MVI A,0A0H
CALL CTR
OS0:LDAX D
ANA C
JZ OS0
MOV A,M
STA 0F703H
INX H
DCR B
JNZ OS0
OS1:LDAX D
ANA C
JZ OS1
MOV A,M
STA 0F703H
INX H
DCR B
JNZ OS1
LDA 0F700H
ANI 80H
STA BER
POP B
POP D
RET
Это все надежно работало с 800К дискетами и двумя дисководами Электроника (сдвоенная пачка от корвета, кстати) в далеких 90х...Код:;Управление Регистром
CTR:LDA 0F700H
ANI 01H
JNZ CTR
MOV A,C
STA 0F700H
RET
;Запись данных с синхронизацией
DAT:LDA 0F700H
ANI 01H
JNZ DAT
MOV A,C
STA 0F703H
RET
;Чтение сектора SEC-СЕКТОР, TRK-ДОРОЖКА
INS:PUSH H
PUSH D
PUSH B
LDA TRK
ANI 1H
ORI 0EH
STA 0F602H
LDA TRK
ANI 7EH
RRC
MOV C,A
CALL DAT
MVI C,18H
CALL CTR
LDA SEC
INR A
STA 0F702H
CALL RED
MVI C,80H
CALL CTR
LXI H,BUF
LXI D,0F700H
MVI C,82H
IN0:LDAX D
ANA C
JZ IN0
LDA 0F703H
MOV M,A
INR L
JNZ IN0
LDA 0F700H
POP B
POP D
POP H
RET
;Запись сектора SEC-СЕКТОР, TRK-ДОРОЖКА
OTS:PUSH H
PUSH D
PUSH B
LDA TRK
ANI 1H
ORI 0EH
STA 0F602H
LDA TRK
ANI 7EH
RRC
MOV C,A
CALL DAT
MVI C,18H
CALL CTR
LDA SEC
INR A
STA 0F702H
CALL RED
MVI C,0A0H
CALL CTR
LXI H,BUF
LXI D,0F700H
MVI C,82H
OT0:LDAX D
ANA C
JZ OT0
MOV A,M
STA 0F703H
INR L
JNZ OT0
LDA 0F700H
POP B
POP D
POP H
RET

