SHELL: fixed bug in read_disk_info with .full

CORE: добавлены дополнительные проверки ФС раздела в FAT_BPB
This commit is contained in:
Tolik 2025-05-24 22:55:54 +10:00
parent 17b7bb938a
commit ec139d5761
7 changed files with 36 additions and 24 deletions

View File

@ -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
;
DEC HL
INC A
LD (.UsesVarsFAT32),A
DEC A
JR .skip_loop2
;
.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

View File

@ -1 +1 @@
47
48

View File

@ -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

View File

@ -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

View File

@ -1 +1 @@
513
514

@ -1 +1 @@
Subproject commit 1b6a539aea8d46b09a617a90a04a2e45dcb37b3f
Subproject commit 25ac1c89f4ce070e041437ddbcdd18ab2ab223be