diff --git a/src/bios/exp/EXTENDED/FDD_DRIVER.asm b/src/bios/exp/EXTENDED/FDD_DRIVER.asm index 1b4fab4..462a147 100644 --- a/src/bios/exp/EXTENDED/FDD_DRIVER.asm +++ b/src/bios/exp/EXTENDED/FDD_DRIVER.asm @@ -347,7 +347,6 @@ FDD_5x_LONG_WRITE: ;------------------------------- ;WRITE SECTOR ;------------------------------- -FDD_COUNTERS.RW_Retries FDD_RW_SECTOR: LD D,FDD_COUNTERS.RW_Retries .RETRY: ;DI PUSH HL @@ -363,6 +362,17 @@ FDD_RW_SECTOR: LD D,FDD_COUNTERS.RW_Retries EXX OUT (FDC_93.Command),A ; + ; [ ] 15/04/25 размер сектора больше, чем установлено в SYS_PAGE.FDD_TABLE.BytesPerSector вызовет ошибку + LD A,SYS_PAGE + OUT (SLOT3),A + EXX + LD E,(IY + FDD_TABLE_s.BytesPerSector) + LD D,(IY + FDD_TABLE_s.BytesPerSector + 1) + INC DE + EXX + LD A,XH + OUT (SLOT3),A + ; .wait_loop: IN A,(FDC_93.DrvCTRL) ;WAIT INTRQ or DRQ AND %1100'0000 ;b6: DRQ (запрос данных = 1). b7: INTRQ (выполняется команда = 0). JR NZ,.RW_PROC @@ -380,21 +390,23 @@ FDD_RW_SECTOR: LD D,FDD_COUNTERS.RW_Retries .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 + ; 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 JR NZ,.write_loop ; результат BIT 5,B ;READ BYTE -.read_loop: DEC DE - LD A,D - OR E +.read_loop: EXX + DEC DE + LD A,D + OR E + EXX JR Z,.SectorSizeError ; INI @@ -463,9 +475,11 @@ FDD_RW_SECTOR: LD D,FDD_COUNTERS.RW_Retries RET ; ;WRITE BYTE -.write_loop: DEC DE - LD A,D - OR E +.write_loop: EXX + DEC DE + LD A,D + OR E + EXX JR Z,.SectorSizeError ; OUTI diff --git a/src/bios/shared/RECOVERY.IMG b/src/bios/shared/RECOVERY.IMG index b06df91..024ba42 100644 Binary files a/src/bios/shared/RECOVERY.IMG and b/src/bios/shared/RECOVERY.IMG differ