diff --git a/src/bios/exp/EXTENDED/FDD_DRIVER.asm b/src/bios/exp/EXTENDED/FDD_DRIVER.asm index 8bad2c2..2f3fadf 100644 --- a/src/bios/exp/EXTENDED/FDD_DRIVER.asm +++ b/src/bios/exp/EXTENDED/FDD_DRIVER.asm @@ -374,13 +374,23 @@ FDD_RW_SECTOR: LD D,FDD_COUNTERS.RW_Retries 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 ; -.wait_loop: IN A,(FDC_93.DrvCTRL) ; 11 ;WAIT INTRQ or DRQ - AND %1100'0000 ; 7 ;b7: INTRQ (выполняется команда = 0), b6: DRQ (запрос данных = 1). - JR Z,.wait_loop_next ; 12 + 34 (.wait_loop_next) + DJNZ .wait_loop + SCF + JR .after_rw ; error + ; + ; в первый раз мы тут после 26 тактов +.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) ; тут максимум 64 такта EX AF,AF' - JR NZ,.write_loop ; результат BIT 5,B' + JR NZ,.write_loop ; 11 ; результат BIT 5,B' ; ;EX AF,AF' ;READ BYTE. между .wait_loop и .read_loop (INI) 64+11=75 тактов @@ -390,9 +400,9 @@ FDD_RW_SECTOR: LD D,FDD_COUNTERS.RW_Retries OR E EXX JR Z,.SectorSizeError - ; от .wait_loop досюда 75+29=104 тактов - ; примерно 10,4 мкс при условных средних 10 Мгц - ; примерно 30 мкс при 3,5 Мгц + ; от .wait_loop досюда минимум 26+11+7+7+11+29=91, было 75+29=104 тактов + ; примерно 9,1 мкс при условных средних 10 Мгц + ; примерно 26 мкс при 3,5 Мгц ; Должно быть не больше 16 мкс для 1.44 или 32 мкс для 720 INI ;█████████████████████████████████████████████████████████████████████████████████████████████ @@ -439,15 +449,6 @@ 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 - ; - DJNZ .wait_loop - SCF - JR .after_rw ; error ; .data_lost: DEC D ; потеря данных JR NZ,.RETRY diff --git a/src/bios/exp/EXTENDED/IDE/shared.asm b/src/bios/exp/EXTENDED/shared.asm similarity index 100% rename from src/bios/exp/EXTENDED/IDE/shared.asm rename to src/bios/exp/EXTENDED/shared.asm diff --git a/src/bios/exp/FUNC_5x.asm b/src/bios/exp/FUNC_5x.asm index 295748c..5c54402 100644 --- a/src/bios/exp/FUNC_5x.asm +++ b/src/bios/exp/FUNC_5x.asm @@ -89,7 +89,7 @@ DRV_LIST: INCLUDE 'EXTENDED/RAM_DISK_DRIVER.asm' INCLUDE 'EXTENDED/IDE/ATA_DRV.asm' INCLUDE 'EXTENDED/IDE/ATAPI_DRV.asm' - INCLUDE 'EXTENDED/IDE/SHARED.asm' + INCLUDE 'EXTENDED/SHARED.asm' ;DISPLAY " EXTENDED end addr: ", /A, $