diff --git a/Shared_Includes b/Shared_Includes index f5f85b3..2fec620 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit f5f85b3d14c65bfc2f8619b596815e350f1a9d5b +Subproject commit 2fec6202f716cfa3ed48fb9bfd79d1081cc2721b diff --git a/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm b/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm index e1599c2..c1b1e06 100644 --- a/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm +++ b/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm @@ -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 + OUT (SLOT3),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 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 ;[]===========================================================[] \ No newline at end of file diff --git a/src/bios/exp/FUNC_SYS.ASM b/src/bios/exp/FUNC_SYS.ASM index 1a66800..ad32456 100644 --- a/src/bios/exp/FUNC_SYS.ASM +++ b/src/bios/exp/FUNC_SYS.ASM @@ -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 diff --git a/src/bios/shared/DEFINES.INC b/src/bios/shared/DEFINES.INC index 137b613..df4a2d9 100644 --- a/src/bios/shared/DEFINES.INC +++ b/src/bios/shared/DEFINES.INC @@ -1,8 +1,10 @@ ;=======================[All shared EQUs]=======================; + DEFINE SET_EXPID_VER 3 + DEFINE SET_EXPID_MOD 07 BETA_BUILD EQU 1 ; 40 ; добавляет строку и сообщение о тестовой сборке на стартовом экране BETA_RC EQU 0 ; 2 ; RELEASEhotFIX EQU 0 ; - DEFINE RELEASE_BUILD_DATE "25.06.2025" + DEFINE RELEASE_BUILD_DATE "19.01.2026" ;======================[All shared defines]=====================; DEFINE PACKED_MAIN 0 ; паковать MAIN или влезает без этого? DEFINE SP2000_Loader_Flag #0107 ; diff --git a/src/bios/shared/RECOVERY.IMG b/src/bios/shared/RECOVERY.IMG index 247d818..d78660a 100644 Binary files a/src/bios/shared/RECOVERY.IMG and b/src/bios/shared/RECOVERY.IMG differ diff --git a/src/bios/shared/VERSION.inc b/src/bios/shared/VERSION.inc index 13f096e..87f4338 100644 --- a/src/bios/shared/VERSION.inc +++ b/src/bios/shared/VERSION.inc @@ -2,8 +2,8 @@ ; ============[For EXP part]============= ; ------[Version of BIOS "VER.MOD"]------ EXP_ID: -.VER EQU 3 ; Номер версии менять тут! -.MOD EQU 07 ; Номер версии менять тут! +.VER EQU SET_EXPID_VER ; Номер версии менять тут! +.MOD EQU SET_EXPID_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