From 5d3a690046551656715b2223f2db9f34225d710f Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Wed, 6 May 2026 16:12:54 +1000 Subject: [PATCH] =?UTF-8?q?=D0=92=D0=B0=D1=80=D0=B8=D0=B0=D0=BD=D1=82=201?= =?UTF-8?q?=20=D1=81=20=D0=B7=D0=B0=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8=20=D0=B4=D0=BB=D1=8F=20FDD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bios/exp/EXTENDED/FDD_DRIVER.asm | 33 +++++++++++----------- src/bios/exp/EXTENDED/{IDE => }/shared.asm | 0 src/bios/exp/FUNC_5x.asm | 2 +- 3 files changed, 18 insertions(+), 17 deletions(-) rename src/bios/exp/EXTENDED/{IDE => }/shared.asm (100%) 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, $