From ec139d5761d152ff67c54b1927a1dad22e4c0bc6 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Sat, 24 May 2025 22:55:54 +1000 Subject: [PATCH] =?UTF-8?q?SHELL:=20fixed=20bug=20in=20read=5Fdisk=5Finfo?= =?UTF-8?q?=20with=20.full=20CORE:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B8?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20=D0=A4=D0=A1=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D0=B4=D0=B5=D0=BB=D0=B0=20=D0=B2=20FAT=5FBPB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DSS/DOS_Proc.asm | 4 ++-- DSS/FS/FAT.asm | 39 ++++++++++++++++++++++++------------- DSS/build.txt | 2 +- SHELL/Commands/DIR.ASM | 4 +--- SHELL/Procedures/shared.asm | 7 +++++-- SHELL/build.txt | 2 +- Shared_Includes | 2 +- 7 files changed, 36 insertions(+), 24 deletions(-) diff --git a/DSS/DOS_Proc.asm b/DSS/DOS_Proc.asm index 8e45be8..4346cb6 100644 --- a/DSS/DOS_Proc.asm +++ b/DSS/DOS_Proc.asm @@ -305,8 +305,8 @@ MASK: LD HL,TMPNAME POP DE POP HL LD A,(HL) - CP '.' ;R007 - SCF ;R007 + CP '.' ;R007 + SCF ;R007 JR Z,.MASKB ;R007 CP ' '+1 .MASKB: LD A,DSS_Error.sys.INVALID_NAME diff --git a/DSS/FS/FAT.asm b/DSS/FS/FAT.asm index 4a76892..c4d5fbf 100644 --- a/DSS/FS/FAT.asm +++ b/DSS/FS/FAT.asm @@ -723,6 +723,9 @@ FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE) CP #F0 JP C,RD_BPB.UnknownBPB ; + XOR A + LD (.UsesVarsFAT32),A + ; LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.BytesPerSector) LD (CORE_BUFFERS.FS_Buffer.BytesPerSector),HL LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerCluster) @@ -753,6 +756,7 @@ FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE) OR D JR NZ,.skip_high ; + LD (.UsesVarsFAT32),A EXX LD DE,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerFAT32 + 2) LD A,E @@ -766,6 +770,7 @@ FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE) LD (CORE_BUFFERS.FS_Buffer.Number_Of_FATs),A CP 1 JR Z,.one_FAT + JP C,RD_BPB.UnknownBPB DEC A ADD HL,DE LD (CORE_BUFFERS.FS_Buffer.FAT2_SEC_L),HL @@ -791,7 +796,6 @@ FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE) ; можно сразу тут загнать старший байт, потому-что дла FAT32 следующий расчёт - это прибавление нуля. LD (CORE_BUFFERS.FS_Buffer.FirstDataSector_H),HL EXX - ;LD (CORE_BUFFERS.FS_Buffer.FirstDataSector_H),BC ; LD BC,(CORE_BUFFERS.FS_Buffer.BytesPerSector) LD A,B @@ -813,12 +817,18 @@ FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE) ; EX DE,HL LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.FilesInRootDIR) ; 0 for fat32 - ; [ ]fat32 ;!TEST + ; fat32 LD A,H OR L - JR Z,.skip_loop2 + ;JR Z,.skip_loop2 + JR NZ,.filesRoot + ; + INC A + LD (.UsesVarsFAT32),A + DEC A + JR .skip_loop2 ; - DEC HL +.filesRoot: DEC HL XOR A ;NEXTAD2 .loop2: INC A @@ -904,15 +914,6 @@ FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE) SBC HL,DE ; .HDDBIG: CALL SectorToCluster -; LD A,(CORE_BUFFERS.FS_Buffer.SectorsPerCluster) -; SCF -; .loop7: RRA -; JR C,.loop7_exit -; RR B -; RR C -; RR H -; RR L -; JP .loop7 ; .loop7_exit: INC HL LD (CORE_BUFFERS.FS_Buffer.MaxClusterLow),HL @@ -985,6 +986,10 @@ FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE) JR C,.its_FAT32 ; ; It's FAT16 + LD A,(.UsesVarsFAT32) + AND A + JP NZ,RD_BPB.UnknownBPB + ; LD HL,#FFFF LD A,FAT_TYPE.x16 .set_vars: EXX @@ -998,7 +1003,11 @@ FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE) LD BC,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.FAT.SERIAL_NUMBER+2) JR .SET_VARS ; -.its_FAT12: LD HL,#0FFF +.its_FAT12: LD A,(.UsesVarsFAT32) + AND A + JP NZ,RD_BPB.UnknownBPB + ; + LD HL,#0FFF LD A,FAT_TYPE.x12 JR .set_vars ; @@ -1142,6 +1151,8 @@ FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE) LD HL,(CORE_BUFFERS.FS_Buffer.MaxClusterHigh) SBC HL,DE RET + ; +.UsesVarsFAT32: DB 0 ;;;;;;;; ; --> BC:HL - Sector diff --git a/DSS/build.txt b/DSS/build.txt index 801f180..31ff414 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -47 \ No newline at end of file +48 \ No newline at end of file diff --git a/SHELL/Commands/DIR.ASM b/SHELL/Commands/DIR.ASM index 1a03623..1a3d04f 100644 --- a/SHELL/Commands/DIR.ASM +++ b/SHELL/Commands/DIR.ASM @@ -256,10 +256,8 @@ cmd_dir: push de or a call nz,ToDSS ; - ld a,(read_disk_info.full) + ld a,(read_disk_info.LastDskInfoIsFull) and a - ;ld de,MAIN_MSG.CRLF - ;jp z,ECHO_MESSAGE RET Z ; ; free space diff --git a/SHELL/Procedures/shared.asm b/SHELL/Procedures/shared.asm index b223c6c..ec636ce 100644 --- a/SHELL/Procedures/shared.asm +++ b/SHELL/Procedures/shared.asm @@ -37,7 +37,7 @@ read_disk_info: OR #80 AND E EXX INC A - LD (.full),A + LD (.LastDskInfoIsFull),A ; AND H @@ -201,7 +201,10 @@ read_disk_info: OR #80 DJNZ .loop3 LD HL,serial_string+4 LD (HL),'-' - JR read_disk_info.get_label + JR .get_label + ; +.LastDskInfoIsFull: + DB 0 ; /////////////////////////////////////////////////////////////////////// free_space_low: WORD 0 diff --git a/SHELL/build.txt b/SHELL/build.txt index 88bc40f..54a584d 100644 --- a/SHELL/build.txt +++ b/SHELL/build.txt @@ -1 +1 @@ -513 \ No newline at end of file +514 \ No newline at end of file diff --git a/Shared_Includes b/Shared_Includes index 1b6a539..25ac1c8 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 1b6a539aea8d46b09a617a90a04a2e45dcb37b3f +Subproject commit 25ac1c89f4ce070e041437ddbcdd18ab2ab223be