diff --git a/src/bios/exp/EXTENDED/FDD_DRIVER.asm b/src/bios/exp/EXTENDED/FDD_DRIVER.asm index 8ab9505..8cec773 100644 --- a/src/bios/exp/EXTENDED/FDD_DRIVER.asm +++ b/src/bios/exp/EXTENDED/FDD_DRIVER.asm @@ -191,7 +191,6 @@ FDD_5x_LONG_READ: EX AF,AF' LD A,SYS_PAGE OUT (SLOT3),A - LD IY,(SYS_PAGE.FDD_TABLE.BytesPerSector) ; устанавливать отдельно переменную current BytesPerSector? LD XH,C ; Memory Page Number LD A,(SYS_PAGE.FDD_TABLE.SECTORS) LD C,A @@ -211,9 +210,14 @@ FDD_5x_LONG_READ: CALL FDD_RW_SECTOR JR C,.ERRDOS ; размер сектора - LD D,YH - LD E,YL - ; + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD E,(IY + FDD_TABLE_s.BytesPerSector) + LD D,(IY + FDD_TABLE_s.BytesPerSector + 1) + EX AF,AF' + OUT (SLOT3),A POP HL POP BC ADD HL,DE @@ -229,7 +233,8 @@ FDD_5x_LONG_READ: INC D .NINC_T: DJNZ .DSK_LP ; -.RETDOS: CALL SET_DOS_OFF + ;.RETDOS: + CALL SET_DOS_OFF LD A,XH ; Memory Page Number EX AF,AF' EX DE,HL @@ -331,10 +336,11 @@ FDD_RW_SECTOR: LD D,5 ;RETRY COUNT LD A,E INC A OUT (FDC_93.Sector),A - IN A,(SLOT3) - EX AF,AF' - LD A,XH - OUT (SLOT3),A + ; + ;IN A,(SLOT3) + ;EX AF,AF' + ;LD A,XH + ;OUT (SLOT3),A ; LD B,4 LD C,FDC_93.Data @@ -346,23 +352,31 @@ FDD_RW_SECTOR: LD D,5 ;RETRY COUNT .wait_loop: IN A,(FDC_93.DrvCTRL) ;WAIT INTRQ or DRQ AND %1100'0000 ;b6: DRQ (запрос данных = 1). b7: INTRQ (выполняется команда = 0). JR NZ,.RW_PROC + ; INC DE LD A,E OR D JR NZ,.wait_loop + ; DJNZ .wait_loop SCF - JR .after_rw ; error + ;JR .after_rw ; error + JR .after_rw_end ; error ; -.RW_PROC: EXX +.RW_PROC: IN A,(SLOT3) + EX AF,AF' + ; [ ] 15/04/25 размер сектора больше, чем установлено в SYS_PAGE.FDD_TABLE.BytesPerSector вызовет ошибку + LD A,SYS_PAGE + OUT (SLOT3),A + LD E,(IY + FDD_TABLE_s.BytesPerSector) + LD D,(IY + FDD_TABLE_s.BytesPerSector + 1) + LD A,XH + OUT (SLOT3),A + INC DE + EXX BIT 5,B EXX - ; [ ] 15/04/25 размер сектора больше, чем установлено в SYS_PAGE.FDD_TABLE.BytesPerSector вызовет ошибку - LD D,YH - LD E,YL - INC DE - ; - JR NZ,.write_loop + JR NZ,.write_loop ; результат BIT 5,B ;READ BYTE .read_loop: DEC DE LD A,D @@ -379,7 +393,7 @@ FDD_RW_SECTOR: LD D,5 ;RETRY COUNT OUT (SLOT3),A EX AF,AF' ; - POP DE +.after_rw_end: POP DE POP HL ;EI LD A,BIOS.Error.NotReady @@ -549,43 +563,6 @@ SET_FDD: PUSH BC ; FDD.SET720: LD A,FDD_Density.SET_720 ; OUT (FDD_Density),A ; RET - -<<<<<<< HEAD:src/bios/exp/EXTENDED/FDD_DRIVER_2.asm -;----------------------------------------------------------------------; -; 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 - -======= ->>>>>>> refs/remotes/Sprinter-Core/beta:src/bios/exp/EXTENDED/FDD_DRIVER.asm CHANGE_SPEED: IN A,(SLOT3) EX AF,AF' LD A,SYS_PAGE @@ -594,13 +571,7 @@ CHANGE_SPEED: IN A,(SLOT3) XOR #80 LD (SYS_PAGE.FDD_TABLE.DISK),A JR SET_SPEED.set -<<<<<<< HEAD:src/bios/exp/EXTENDED/FDD_DRIVER_2.asm - ; -; -======= - ; ->>>>>>> refs/remotes/Sprinter-Core/beta:src/bios/exp/EXTENDED/FDD_DRIVER.asm SET_SPEED: IN A,(SLOT3) EX AF,AF' LD A,SYS_PAGE @@ -660,24 +631,6 @@ DISK_ID: EXX OUT (FDC_93.Data),A LD A,#18 ;!TODO выписать комманды ВГ ;SEARCH ;!HARDCODE CMD КР1818ВГ93 CALL EXECOM -<<<<<<< HEAD:src/bios/exp/EXTENDED/FDD_DRIVER_2.asm - 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 %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 -======= ; кусок для быстрых флоппарей LD BC,#0104 ; счётчики CALL WAIT_FDD_FOR_SEARCH_TRACK @@ -686,7 +639,6 @@ DISK_ID: EXX LD BC,#0804 ; счётчики CALL WAIT_FDD_FOR_SEARCH_TRACK JR NC,.Read_Index ->>>>>>> refs/remotes/Sprinter-Core/beta:src/bios/exp/EXTENDED/FDD_DRIVER.asm EXX ;SCF RET @@ -697,13 +649,8 @@ DISK_ID: EXX ; номер головки BYTE ; номер сектора BYTE ; длина сектора BYTE -<<<<<<< HEAD:src/bios/exp/EXTENDED/FDD_DRIVER_2.asm - ; контрольная сумма WORD - LD H,4 ; !HARDCODE счётчик до байта размера сектора -======= ; контрольная сумма WORD LD H,4 ; !HARDCODE счётчик до байта размера сектора ->>>>>>> refs/remotes/Sprinter-Core/beta:src/bios/exp/EXTENDED/FDD_DRIVER.asm .ID_LP2: IN A,(FDC_93.Data) DEC H JR NZ,.ID_LP3 @@ -769,12 +716,16 @@ SEEK: LD XL,A ; DJNZ PMS2 ; RET P50ms: PUSH BC - LD A,12 + ;LD A,12 + LD B,12 .P1ms: LD C,255 .PMS: DEC C JR NZ,.PMS - DEC A - JR NZ,.P1ms + ; + ;DEC A + ;JR NZ,.P1ms + DJNZ .P1ms + ; POP BC RET ;