Наколдована задержка для смены плотности у тормозных 5.25 флопарей. В рекавери дос из хотфикс 3, фформат 1.17

This commit is contained in:
Tolik 2026-01-19 03:12:29 +10:00
parent 879938cd4a
commit 3f9e0b7207
4 changed files with 115 additions and 70 deletions

@ -1 +1 @@
Subproject commit f5f85b3d14c65bfc2f8619b596815e350f1a9d5b
Subproject commit 6073b8787867fe5d217d064c9f5f77972303148c

View File

@ -188,12 +188,12 @@ FDD_5x_LONG_READ:
EX DE,HL
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD IY,(SYS_PAGE.FDD_TABLE.BytesPerSector)
LD XH,C ; Memory Page Number
LD A,(SYS_PAGE.FDD_TABLE.SECTORS)
LD C,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD IY,(SYS_PAGE.FDD_TABLE.BytesPerSector)
LD XH,C ; Memory Page Number
LD A,(SYS_PAGE.FDD_TABLE.SECTORS)
LD C,A
EX AF,AF'
OUT (SLOT3),A
.DSK_LP: LD A,D
@ -206,7 +206,7 @@ FDD_5x_LONG_READ:
PUSH BC
PUSH HL
CALL FDD_RW_SECTOR
JR C,ERRDOS
JR C,.ERRDOS
; à §¬¥à ᥪâ®à 
LD D,YH
LD E,YL
@ -254,7 +254,7 @@ FDD_5x_LONG_READ:
XOR A
RET
;
ERRDOS: POP HL
.ERRDOS: POP HL
POP BC
POP DE
CALL SET_DOS_OFF
@ -488,7 +488,39 @@ S_FDD: PUSH BC
RET
;
;
;----------------------------------------------------------------------;
; CHANGE_SPEED: IN A,(SLOT3)
; EX AF,AF'
; LD A,SYS_PAGE
; OUT (SLOT3),A
; LD A,(SYS_PAGE.FDD_TABLE.DISK)
; XOR #80
; LD (SYS_PAGE.FDD_TABLE.DISK),A
; RLA
; EX AF,AF'
; OUT (SLOT3),A
; EX AF,AF'
; JR NC,FDD.SET720
; FDD.SET1440: LD A,FDD_Density.SET_1440
; OUT (FDD_Density),A
; RET
; ;
; ;
; SET_SPEED: IN A,(SLOT3)
; EX AF,AF'
; LD A,SYS_PAGE
; OUT (SLOT3),A
; LD A,(SYS_PAGE.FDD_TABLE.DISK)
; ;AND #80
; RLA
; EX AF,AF'
; OUT (SLOT3),A
; EX AF,AF'
; JR C,FDD.SET1440
; FDD.SET720: LD A,FDD_Density.SET_720
; OUT (FDD_Density),A
; RET
CHANGE_SPEED: IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
@ -496,37 +528,58 @@ CHANGE_SPEED: IN A,(SLOT3)
LD A,(SYS_PAGE.FDD_TABLE.DISK)
XOR #80
LD (SYS_PAGE.FDD_TABLE.DISK),A
;AND #80
RLA
EX AF,AF'
OUT (SLOT3),A
EX AF,AF'
;JR Z,FDD.SET720
JR NC,FDD.SET720
;JP FDD.SET1440 ;CF=1
FDD.SET1440: LD A,FDD_Density.SET_1440
OUT (FDD_Density),A
RET
;
JR SET_SPEED.set
;
;
SET_SPEED: IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(SYS_PAGE.FDD_TABLE.DISK)
;AND #80
RLA
.set: AND #80
RRA
RRA
OR 1
OUT (FDD_Density),A
EX AF,AF'
OUT (SLOT3),A
EX AF,AF'
;JR NZ,FDD.SET1440
JR C,FDD.SET1440
;JR FDD.SET720 ;CF=0
FDD.SET720: LD A,FDD_Density.SET_720
OUT (FDD_Density),A
RET
RET
;----------------------------------------------------------------------;
////////////////////////////////////////////////////////////////////////
; ‚室: BC - ¢­ãâ७­¨© ¨ ¢­¥è­¨© áçñâ稪¨
WAIT_FDD_FOR_SEARCH_TRACK:
LD A,#C0 ;!HARDCODE CMD Š<>1818ƒ93
OUT (FDC_93.Command),A
PUSH BC
CALL .LOOP
POP BC
RET NC
CALL CHANGE_SPEED
DEC C
JR NZ,WAIT_FDD_FOR_SEARCH_TRACK
SCF
RET
;
.LOOP: LD HL,#F000
.loop_reg_HL: IN A,(FDC_93.DrvCTRL)
AND #C0
RET NZ
;
.ID_LP4: DEC HL
LD A,H
OR L
JR NZ,.loop_reg_HL
;
DJNZ .LOOP
SCF
RET
////////////////////////////////////////////////////////////////////////
; ¯à¥à뢠­¨ï ¤®«¦­ë ¡ëâì ®âª«î祭ë
; ¢ë室: A - FDD_INIT_TABLE.DISK, B - sector size high byte
DISK_ID: EXX
@ -535,32 +588,25 @@ DISK_ID: EXX
OUT (FDC_93.Data),A
LD A,#18 ;!TODO ¢ë¯¨á âì ª®¬¬ ­¤ë ‚ƒ ;SEARCH ;!HARDCODE CMD Š<>1818ƒ93
CALL EXECOM
LD C,4 ; áçñâ稪
.loop_reg_C: LD A,#C0 ;!HARDCODE CMD Š<>1818ƒ93
OUT (FDC_93.Command),A
LD HL,#F000 ; áçñâ稪
.loop_reg_HL: IN A,(FDC_93.DrvCTRL)
AND #C0
JR NZ,.Read_Index
;
.ID_LP4: DEC HL
LD A,H
OR L
JR NZ,.loop_reg_HL
CALL CHANGE_SPEED
DEC C
JR NZ,.loop_reg_C
; ªã᮪ ¤«ï ¡ëáâàëå ä«®¯¯ à¥©
LD BC,#0104 ; 1 - áçñâ稪
CALL WAIT_FDD_FOR_SEARCH_TRACK
JR NC,.Read_Index
; ªã᮪ ¤«ï â®à¬®§­ëå ä«®¯¯ à¥©
LD BC,#0504 ; 1 - áçñâ稪
CALL WAIT_FDD_FOR_SEARCH_TRACK
JR NC,.Read_Index
EXX
SCF
;SCF
RET
;
.Read_Index: ;
; „ ­­ë¥ FDC_93.Data:
; ­®¬¥à 樫¨­¤à  BYTE
; ­®¬¥à 樫¨­¤à  BYTE
; ­®¬¥à £®«®¢ª¨ BYTE
; ­®¬¥à ᥪâ®à  BYTE
; ¤«¨­  ᥪâ®à  BYTE
; ª®­â஫쭠ï á㬬  WORD
; ª®­â஫쭠ï á㬬  WORD
LD H,4 ; !HARDCODE áçñâ稪 ¤® ¡ ©â  à §¬¥à  ᥪâ®à 
.ID_LP2: IN A,(FDC_93.Data)
DEC H
@ -583,6 +629,7 @@ DISK_ID: EXX
EX AF,AF'
AND #80
RET
////////////////////////////////////////////////////////////////////////
;
SEEK: LD XL,A
@ -688,25 +735,22 @@ NTRACK: PUSH HL
RET
;
SAVE_INTERRUPTS:
.switch_off: PUSH AF
LD A,R
LD A,#80
JP PE,.set_R
XOR A
.set_R: LD R,A
.switch_off: PUSH AF
LD A,R
DI
POP AF
LD A,#80
JP PE,.set_R
XOR A
.set_R: LD R,A
POP AF
RET
; ;
.restore: PUSH AF
LD A,R
BIT 7,A
JR Z,.set_di
.restore: PUSH AF
LD A,R
DI
RLA
JR NC,.set_di
EI
POP AF ; PE
RET
;
.set_di: DI
POP AF ; PO
.set_di: POP AF ; PE
RET
;[]===========================================================[]

View File

@ -345,13 +345,14 @@ FN_TURBO:
;!FIXIT ¬¥­ï¥¬ ¯«®â­®áâì - ¬¥­ï¥¬ ¢ á¨á⥬­®© áâà ­¨æ¥ ¨­äã ®¡ í⮬
.SET_FDD_720:
LD A,FDD_Density.SET_720
OUT (FDD_Density),A
AND A
RET
JR .set
; OUT (FDD_Density),A
; AND A
; RET
;!FIXIT ¬¥­ï¥¬ ¯«®â­®áâì - ¬¥­ï¥¬ ¢ á¨á⥬­®© áâà ­¨æ¥ ¨­äã ®¡ í⮬
.SET_FDD_1440:
LD A,FDD_Density.SET_1440
OUT (FDD_Density),A
.set: OUT (FDD_Density),A
AND A
RET

Binary file not shown.