From 29df4ae54f0d2553ed10531823480aae30132ed6 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Sat, 1 Mar 2025 06:48:37 +1000 Subject: [PATCH] bugs... --- DSS/API/Open.asm | 1 + DSS/build.txt | 2 +- DSS/drivers/media/ata_atapi-drv.asm | 70 +++++++++++++++++++++-------- 3 files changed, 54 insertions(+), 19 deletions(-) diff --git a/DSS/API/Open.asm b/DSS/API/Open.asm index 1380eb9..7d58a86 100644 --- a/DSS/API/Open.asm +++ b/DSS/API/Open.asm @@ -50,6 +50,7 @@ OPEN_FN: ;!TEST Current Dir ;[x] 15/10/23 LD (IY+_sFM.ACCESS_MODE),A LD A,(TASK) LD (IY+_sFM.TASK_NUM),A + ;!FIXIT оптимизнуть тут зануление XOR A LD (IY+_sFM.OptimizedClusters),A LD (IY+_sFM.KnownCluster_L),A diff --git a/DSS/build.txt b/DSS/build.txt index 8e2afd3..8fdd954 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -17 \ No newline at end of file +22 \ No newline at end of file diff --git a/DSS/drivers/media/ata_atapi-drv.asm b/DSS/drivers/media/ata_atapi-drv.asm index 61484db..03e7307 100644 --- a/DSS/drivers/media/ata_atapi-drv.asm +++ b/DSS/drivers/media/ata_atapi-drv.asm @@ -322,7 +322,12 @@ Init: PUSH IY ; RET NC ; LD A,DSS_Error.drv.UNKNOWN_FORMAT ; RET +; ; переделать тут проверку на размер сектора? +;HL:IX - SECTOR +; DE - ADDRESS +; B - COUNTER +; A - HDD LOG NUMBER SelectDrive: PUSH DE PUSH HL ; @@ -333,19 +338,21 @@ SelectDrive: PUSH DE ; LOGDRV_ENTRY_FIND LOGDRV ; - ; [ ] custom sector size - CALL CHECK_IDE_SECTOR_SIZE - LD A,DSS_Error.sys.UNKNOWN_FORMAT - JR C,.error_pop - ; - ; - LD E,(IY+LOGDRV.SECTOR_OFFSET) - LD D,(IY+LOGDRV.SECTOR_OFFSET+1) - ADD IX,DE - LD E,(IY+LOGDRV.SECTOR_OFFSET+2) - LD D,(IY+LOGDRV.SECTOR_OFFSET+3) + ; ; [ ] custom sector size + ; CALL CHECK_IDE_SECTOR_SIZE + ; LD A,DSS_Error.sys.UNKNOWN_FORMAT + ; JR C,.error_pop + ; ; + ; ; + ; LD E,(IY+LOGDRV.SECTOR_OFFSET) + ; LD D,(IY+LOGDRV.SECTOR_OFFSET+1) + ; ADD IX,DE + ; LD E,(IY+LOGDRV.SECTOR_OFFSET+2) + ; LD D,(IY+LOGDRV.SECTOR_OFFSET+3) POP HL - ADC HL,DE + CALL .get_data + JR C,.error_pop2 + ; POP DE LD A,DSS_Error.drv.SECTOR_NOT_FOUND RET C @@ -354,8 +361,23 @@ SelectDrive: PUSH DE RET ; .error_pop: POP HL - POP DE +.error_pop2: POP DE RET + ; +.get_data: ; [ ] custom sector size + CALL CHECK_IDE_SECTOR_SIZE + LD A,DSS_Error.sys.UNKNOWN_FORMAT + RET C + ; + LD E,(IY+LOGDRV.SECTOR_OFFSET) + LD D,(IY+LOGDRV.SECTOR_OFFSET+1) + ADD IX,DE + LD E,(IY+LOGDRV.SECTOR_OFFSET+2) + LD D,(IY+LOGDRV.SECTOR_OFFSET+3) + ADC HL,DE + LD A,DSS_Error.sys.SECTOR_NOT_FOUND + RET + ; 00 - GET DEVICE PARAMETERS @@ -620,19 +642,29 @@ MediaCheck: PUSH IY ; POP AF ; Восстанавливаем CF и код ошибки UNKNOWN_FORMAT, если CF=1 POP IY - RET C + RET C XOR A RET ; -.Reinit: LD A,(IY + LOGDRV.PHISICAL_DRV_NUMBER) +.Reinit: LD A,DSS_MAX_DRIVES_AMOUNT - 1 ; ограничитель, чтоб не детектить больше 1 раздела + LD (Init.count),A + LD A,(IY + LOGDRV.PHISICAL_DRV_NUMBER) LD (CURRENT_DRIVE.Number),A LD (LOGDRV_OFFSET),IY ;RES 1,(IY + LOGDRV.MediaParameters) - сбрасывается в DEFINE_PARTITIONS + PUSH IY CALL DEFINE_PARTITIONS - POP AF POP IY - RET C ; Восстанавливаем CF и код ошибки UNKNOWN_FORMAT, если CF=1 - LD A,#FF ;!HARDCODE drive changed + POP AF ; Восстанавливаем CF и код ошибки UNKNOWN_FORMAT, если CF=1 + CALL C,SelectDrive.get_data + POP IY + JR NC,.no_errors + ; + CP DSS_Error.sys.UNKNOWN_FORMAT + SCF + RET Z + ; +.no_errors: LD A,#FF ;!HARDCODE drive changed OR A RET @@ -644,8 +676,10 @@ CHECK_IDE_SECTOR_SIZE: ; LD HL,DSS_MAX_SECTOR_SIZE ; AND A ; SBC HL,DE + PUSH HL LD HL,-DSS_MAX_SECTOR_SIZE - 1 ADD HL,DE + POP HL RET ;