From 2f0db9fa9834357413820deaf78f6334f074f8a8 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Mon, 22 Apr 2024 03:47:11 +1000 Subject: [PATCH] bug fixes --- BOOT/DSSBOOT.ASM | 2 +- DSS/API/Find.asm | 2 +- DSS/API/ScanDRV.asm | 64 ++++++++++++++++----------------- DSS/FS/FAT/FAT.asm | 9 ++--- DSS/FS/FAT/FAT_X.asm | 2 +- DSS/Media_drivers/ReScanDRV.ASM | 4 +-- DSS/build.txt | 2 +- DSS/defines.inc | 1 + 8 files changed, 42 insertions(+), 44 deletions(-) diff --git a/BOOT/DSSBOOT.ASM b/BOOT/DSSBOOT.ASM index bf675bb..f1c59b8 100644 --- a/BOOT/DSSBOOT.ASM +++ b/BOOT/DSSBOOT.ASM @@ -59,7 +59,7 @@ GOOD_DRIVE: LD DE,#8200 ;!HARDCODE ; ; CONTINUE ;!TEST 26/03/2024 - LD SP,#C000 + ;LD SP,#C000 ; LD HL,0 LD (DISKL),HL diff --git a/DSS/API/Find.asm b/DSS/API/Find.asm index fa24f3b..0ae8afc 100644 --- a/DSS/API/Find.asm +++ b/DSS/API/Find.asm @@ -23,9 +23,9 @@ F_FIRST: CALL DIR_PATH_CHECK RET C ; - CALL LOADDIR POP HL CALL GETWORD + ;CALL LOADDIR RET C CALL MASK RET C diff --git a/DSS/API/ScanDRV.asm b/DSS/API/ScanDRV.asm index 39b4371..e9c364e 100644 --- a/DSS/API/ScanDRV.asm +++ b/DSS/API/ScanDRV.asm @@ -10,52 +10,48 @@ SCANDRV: ; 1. запоминаем состояние прерываний ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; - LD A,R - DI - PUSH AF + LD A,R + DI + PUSH AF ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; ; 2. узнаём букву бут-диска ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; - CALL BOOTDSK.GET + CALL BOOTDSK.GET ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; ; 3. вызываем рескан ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; - ; A = Boot disk - LD B,A - LD A,Dss.DRV.RescanDRV - LD C,Dss.DRV.RescanDRV - RST ToDSS.DRV - ; проверка на ошибку boot disk lost - LD HL,.BOOT_DSK_LOST - LD E, +(80-.BOOT_DSK_LOST.size)/2 ; coord X - LD BC,.BOOT_DSK_LOST.size - JP C,KERNEL_PANIC - ; - LD (LDRIVE),A + ; A = Boot disk + LD B,A + LD A,Dss.DRV.RescanDRV + LD C,Dss.DRV.RescanDRV + RST ToDSS.DRV + ; проверка на ошибку boot disk lost + LD HL,.BOOT_DSK_LOST + LD E, +(80-.BOOT_DSK_LOST.size)/2 ; coord X + LD BC,.BOOT_DSK_LOST.size + JP C,KERNEL_PANIC + ; + LD (LDRIVE),A ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; ; 4. на всякий случай перечитываем дирректорию ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; - LD A,(CurrentPath) - SUB 'A' - CALL CHNDISK - ; - LD HL,CurrentDirectory - CALL CHDIR - JR NC,.exit - LD HL,CurrentDirectory - LD (HL),0 - ; LD HL,CurrentPath - ; CALL CHDIR + LD A,(CurrentPath) + SUB 'A' + CALL OPENDSK + LD HL,CurrentDirectory + CALL CHDIR + JR NC,.exit + LD HL,CurrentDirectory + LD (HL),0 ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; ; 5. выход ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; -.exit: POP AF - RET PO - EI - RET - ; -.BOOT_DSK_LOST: - DZ "Boot drive lost o_O" +.exit: POP AF + RET PO + EI + RET + ; +.BOOT_DSK_LOST: DZ "Boot drive lost o_O" .BOOT_DSK_LOST.size EQU $-.BOOT_DSK_LOST ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; ;/////////////////////////////////////////////////////////////////////// diff --git a/DSS/FS/FAT/FAT.asm b/DSS/FS/FAT/FAT.asm index 769a3a6..7fcd78a 100644 --- a/DSS/FS/FAT/FAT.asm +++ b/DSS/FS/FAT/FAT.asm @@ -540,10 +540,11 @@ LOAD_SAVE_DIR_PREPARE: LD A,(CORE_BUFFERS.FatBuffer.DRIVE) LD (IY+_sFM.DRIVE),A ;!FIXIT переделать на работу без IY - LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) - OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1) - OR (IY+_sFM.FS_REC.FIRST_CLUSTER_H) - OR (IY+_sFM.FS_REC.FIRST_CLUSTER_H+1) + LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) + OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1) + OR (IY+_sFM.FS_REC.FIRST_CLUSTER_H) + OR (IY+_sFM.FS_REC.FIRST_CLUSTER_H+1) + ; EX AF,AF' RET diff --git a/DSS/FS/FAT/FAT_X.asm b/DSS/FS/FAT/FAT_X.asm index 87f285e..f1a82d6 100644 --- a/DSS/FS/FAT/FAT_X.asm +++ b/DSS/FS/FAT/FAT_X.asm @@ -680,7 +680,7 @@ WRITE_FAT_TABLE: LD C,Dss.DRV.Write JP ToDSS.DRV .SAVE_NOT_ALL_BLOCK: - ; A = CORE_BUFFERS.FatBuffer.CacheBlock + ; A = CORE_BUFFERS.FatBuffer.CacheUpdated ; HL:IX - смещение внутри раздела на начало нужного блока FAT ; B = максимальное число блоков для записи EXX diff --git a/DSS/Media_drivers/ReScanDRV.ASM b/DSS/Media_drivers/ReScanDRV.ASM index cb278eb..8a81258 100644 --- a/DSS/Media_drivers/ReScanDRV.ASM +++ b/DSS/Media_drivers/ReScanDRV.ASM @@ -443,8 +443,8 @@ KILL_FM:; POP BC PUSH AF ; Шерстим манипуляторы на наличие в них грохнутого драйва - LD IY,CORE_BUFFERS.FM_BUF - CORE_BUFFERS.FM_BUF.Size + #C000 - LD B,FMCOUNT + LD IY,CORE_BUFFERS.FM_BUF + #C000 ; - CORE_BUFFERS.FM_BUF.Size + LD B,FMCOUNT - 1 ; пропускаем служебный нулевой манипулятор LD DE,CORE_BUFFERS.FM_BUF.Size .loop_fm: ADD IY,DE diff --git a/DSS/build.txt b/DSS/build.txt index 0c8ddea..36c9eca 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -955 \ No newline at end of file +957 \ No newline at end of file diff --git a/DSS/defines.inc b/DSS/defines.inc index 55068c7..348c999 100644 --- a/DSS/defines.inc +++ b/DSS/defines.inc @@ -154,5 +154,6 @@ MOUSE_BAUD: ; ;----------------------------------------------------; +; Внимание, стек хранится в той же странице! SUBLOAD_SIZE EQU 10 ; кол-во секторов которое надо подгрузить после загрузки system.dos в страницу ;----------------------------------------------------;