diff --git a/Shared_Includes b/Shared_Includes index f5f85b3..6073b87 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit f5f85b3d14c65bfc2f8619b596815e350f1a9d5b +Subproject commit 6073b8787867fe5d217d064c9f5f77972303148c diff --git a/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm b/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm index e1599c2..09f9f75 100644 --- a/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm +++ b/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm @@ -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,35 +528,24 @@ 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 + OUT (SLOT3),A + RET +;----------------------------------------------------------------------; ; прерывания должны быть отключены @@ -540,13 +561,14 @@ DISK_ID: EXX OUT (FDC_93.Command),A LD HL,#F000 ; счётчик .loop_reg_HL: IN A,(FDC_93.DrvCTRL) - AND #C0 + AND %1100'0000 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 @@ -561,7 +583,7 @@ DISK_ID: EXX ; номер сектора BYTE ; длина сектора BYTE ; контрольная сумма WORD - LD H,4 ; !HARDCODE счётчик до байта размера сектора + LD H,4 ; !HARDCODE счётчик до байта размера сектора .ID_LP2: IN A,(FDC_93.Data) DEC H JR NZ,.ID_LP3 @@ -688,25 +710,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 ;[]===========================================================[] \ No newline at end of file