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

This commit is contained in:
Tolik 2026-01-19 03:12:29 +10:00
parent 879938cd4a
commit e0c70519c3
6 changed files with 120 additions and 73 deletions

@ -1 +1 @@
Subproject commit f5f85b3d14c65bfc2f8619b596815e350f1a9d5b Subproject commit 2fec6202f716cfa3ed48fb9bfd79d1081cc2721b

View File

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

View File

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

View File

@ -1,8 +1,10 @@
;=======================[All shared EQUs]=======================; ;=======================[All shared EQUs]=======================;
DEFINE SET_EXPID_VER 3
DEFINE SET_EXPID_MOD 07
BETA_BUILD EQU 1 ; 40 ; ¤®¡ ¢«ï¥â áâப㠨 á®®¡é¥­¨¥ ® â¥á⮢®© ᡮથ ­  áâ à⮢®¬ íªà ­¥ BETA_BUILD EQU 1 ; 40 ; ¤®¡ ¢«ï¥â áâப㠨 á®®¡é¥­¨¥ ® â¥á⮢®© ᡮથ ­  áâ à⮢®¬ íªà ­¥
BETA_RC EQU 0 ; 2 ; BETA_RC EQU 0 ; 2 ;
RELEASEhotFIX EQU 0 ; RELEASEhotFIX EQU 0 ;
DEFINE RELEASE_BUILD_DATE "25.06.2025" DEFINE RELEASE_BUILD_DATE "19.01.2026"
;======================[All shared defines]=====================; ;======================[All shared defines]=====================;
DEFINE PACKED_MAIN 0 ; ¯ ª®¢ âì MAIN ¨«¨ ¢«¥§ ¥â ¡¥§ í⮣®? DEFINE PACKED_MAIN 0 ; ¯ ª®¢ âì MAIN ¨«¨ ¢«¥§ ¥â ¡¥§ í⮣®?
DEFINE SP2000_Loader_Flag #0107 ; DEFINE SP2000_Loader_Flag #0107 ;

Binary file not shown.

View File

@ -2,8 +2,8 @@
; ============[For EXP part]============= ; ============[For EXP part]=============
; ------[Version of BIOS "VER.MOD"]------ ; ------[Version of BIOS "VER.MOD"]------
EXP_ID: EXP_ID:
.VER EQU 3 ; <EFBFBD>®¬¥à ¢¥àᨨ ¬¥­ïâì âãâ! .VER EQU SET_EXPID_VER ; <EFBFBD>®¬¥à ¢¥àᨨ ¬¥­ïâì âãâ!
.MOD EQU 07 ; <EFBFBD>®¬¥à ¢¥àᨨ ¬¥­ïâì âãâ! .MOD EQU SET_EXPID_MOD ; <EFBFBD>®¬¥à ¢¥àᨨ ¬¥­ïâì âãâ!
BIOS_ver_hex EQU EXP_ID.VER*256+EXP_ID.MOD BIOS_ver_hex EQU EXP_ID.VER*256+EXP_ID.MOD
DEFINE BIOS_ver_string '0'+EXP_ID.VER, '.', '0'+EXP_ID.MOD/10, '0'+EXP_ID.MOD-(EXP_ID.MOD/10)*10 DEFINE BIOS_ver_string '0'+EXP_ID.VER, '.', '0'+EXP_ID.MOD/10, '0'+EXP_ID.MOD-(EXP_ID.MOD/10)*10