diff --git a/src/bios/exp/EXTENDED/FDD_DRIVER.asm b/src/bios/exp/EXTENDED/FDD_DRIVER.asm index 2f3fadf..f4a3cc1 100644 --- a/src/bios/exp/EXTENDED/FDD_DRIVER.asm +++ b/src/bios/exp/EXTENDED/FDD_DRIVER.asm @@ -371,20 +371,9 @@ FDD_RW_SECTOR: LD D,FDD_COUNTERS.RW_Retries LD A,XH OUT (SLOT3),A LD A,C ; COMMAND read or write - LD BC,FDD_COUNTERS.INTRQorDRQ*256 + FDC_93.Data ;██████████ КРИТИЧНЫЙ К СКОРОСТИ КУСОК ПОСЛЕ УСТАНОВКИ КОМАНДЫ ДО СНЯТИЯ РЕЗУЛЬТАТА ██████████ OUT (FDC_93.Command),A -.wait_loop_next:; этот loop именно тут для задержки между OUT (FDC_93.Command),A и IN A,(FDC_93.DrvCTRL) - INC DE - LD A,E - OR D - JR NZ,.wait_loop ; 26 - ; - DJNZ .wait_loop - SCF - JR .after_rw ; error - ; - ; в первый раз мы тут после 26 тактов + LD BC,FDD_COUNTERS.INTRQorDRQ*256 + FDC_93.Data ; именно тут для задержки между предыдущей и следующей команды .wait_loop: IN A,(FDC_93.DrvCTRL) ; 11 ; 11 ;WAIT INTRQ or DRQ AND %0100'0000 ; 7 ; 7 ;b7: INTRQ (выполняется команда = 0), b6: DRQ (запрос данных = 1). JR Z,.wait_loop_next ; 7 ; 12 + 34 (.wait_loop_next) @@ -407,7 +396,7 @@ FDD_RW_SECTOR: LD D,FDD_COUNTERS.RW_Retries INI ;█████████████████████████████████████████████████████████████████████████████████████████████ .wait_data_r: IN A,(FDC_93.DrvCTRL) - AND %1100'0000 ;b6: DRQ (запрос данных = 1). b7: INTRQ (выполняется команда = 0). + AND %1100'0000 ;b7: INTRQ (выполняется команда = 0). b6: DRQ (запрос данных = 1). JR Z,.wait_data_r JP P,.read_loop ; JUMP if "выполняется команда = 0" ; @@ -449,6 +438,16 @@ FDD_RW_SECTOR: LD D,FDD_COUNTERS.RW_Retries POP DE JR .RETRY ; +.wait_loop_next: + INC DE + LD A,E + OR D + JR NZ,.wait_loop ; 26 + ; + DJNZ .wait_loop + SCF + JR .after_rw ; error + ; ; .data_lost: DEC D ; потеря данных JR NZ,.RETRY