dssboot: +fixed bug with one cluster FAT32 rootdir search

This commit is contained in:
Tolik 2024-07-04 02:21:56 +10:00
parent 08ab359af4
commit 201fa03a29
3 changed files with 97 additions and 53 deletions

View File

@ -683,6 +683,8 @@ GET_BPB: XOR A
.mirrored_FATs: ;
LD HL,(BOOT_BUFFER + BOOT_SECTOR.RootDirStartCluster)
LD DE,(BOOT_BUFFER + BOOT_SECTOR.RootDirStartCluster+2)
LD (FatBuffer.RootDirStartCluster_L),HL
LD (FatBuffer.RootDirStartCluster_H),DE
CALL CLUSTER_TO_SECTOR.no_prepare
LD (FatBuffer.RootDirFirstSector_L),IX
LD (FatBuffer.RootDirFirstSector_H),HL
@ -739,21 +741,49 @@ CLUSTER_TO_SECTOR:
; ¯®¨áª system.dos
GETROOT: LD HL,(FatBuffer.RootDirFirstSector_H)
LD IX,(FatBuffer.RootDirFirstSector_L)
LD BC,(PARTITION_START_L)
LD DE,(PARTITION_START_H)
; [x] 28/04/2024. Bug with incorrect reading root dir. Reported by Roman "Romychs" Boykov.
ADD IX,BC
ADC HL,DE
;
GETROOT: LD HL,(FatBuffer.RootDirStartCluster_L)
PUSH HL
LD HL,(FatBuffer.RootDirStartCluster_H)
PUSH HL
LD A,(FatBuffer.FAT_TYPE)
CP FAT_TYPE.x32
LD A,(FatBuffer.DirSizeInSectors)
JR NZ,.NEXTSEC
JR NZ,.load_and_search
;
LD A,(FatBuffer.SectorsPerCluster);!FIXIT ¯à®çâñâ ⮫쪮 ¯¥à¢ë© ª« áâ¥à ª â «®£  ­  FAT32
.NEXTSEC: PUSH AF
.load_and_search:
LD HL,(FatBuffer.RootDirFirstSector_H)
LD IX,(FatBuffer.RootDirFirstSector_L)
;LD BC,(PARTITION_START_L)
;LD DE,(PARTITION_START_H)
; [x] 28/04/2024. Bug with incorrect reading root dir. Reported by Roman "Romychs" Boykov.
;ADD IX,BC
;ADC HL,DE
;
.NEXT_CLUSTER: CALL GET_ABSOLUTE_SECTOR
CALL .NEXT_SECTOR
;
POP HL
EXX
POP HL
RET C
RET NZ
CALL READ_FROM_FAT
RET C
EX DE,HL
PUSH HL
EXX
EX DE,HL
PUSH HL
EXX
; in: HL':HL - CLUSTER
; out: HL:IX - SECTOR
CALL CLUSTER_TO_SECTOR
LD A,(FatBuffer.SectorsPerCluster)
JR .NEXT_CLUSTER
;
;
.NEXT_SECTOR: PUSH AF
; [x] 28/04/2024. Bug with incorrect reading root dir. Reported by Roman "Romychs" Boykov.
;ADD IX,BC
;ADC HL,DE
@ -779,10 +809,22 @@ GETROOT: LD HL,(FatBuffer.RootDirFirstSector_H)
DEC HL
;
DEC A
JR NZ,.NEXTSEC
SCF
JR NZ,.NEXT_SECTOR
RET
;
; ; ;
; ¢å®¤: HL:IX - ®â­®á¨â¥«ì­ë© ᥪâ®à
; ¢ë室: HL:IX -  ¡á®«îâ­ë© ᥪâ®à
GET_ABSOLUTE_SECTOR:
LD DE,(PARTITION_START_L)
ADD IX,DE
LD DE,(PARTITION_START_H)
ADC HL,DE
RET
;
SEARCH: LD C,17 ;HANDELS PER SECTOR 512/32 + 1
LD IX, DIR_BUFFER - FAT_DIRECTORY_RECORD
.SKIPNAM: LD DE,FAT_DIRECTORY_RECORD
@ -839,10 +881,11 @@ LOAD_CORE: LD (READMEM),DE
; CP FAT_TYPE.x32
; JR NZ,.skip_it
;
LD DE,(PARTITION_START_L)
ADD IX,DE
LD DE,(PARTITION_START_H)
ADC HL,DE
;LD DE,(PARTITION_START_L)
;ADD IX,DE
;LD DE,(PARTITION_START_H)
;ADC HL,DE
CALL GET_ABSOLUTE_SECTOR
;.skip_it: ;
LD DE,(READMEM)
LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerCluster)
@ -881,7 +924,6 @@ LOAD_CORE: LD (READMEM),DE
CCF
RET NC
; [ ] § £à㧪  system.dos ¡®«ìè¥ #4000 ¡ ©â®¢
.BIG_CORE+1: LD A,0
DEC A
LD (.BIG_CORE),A
@ -1049,10 +1091,12 @@ READ_FAT_TABLE: PUSH HL
.no_inc: ADC HL,BC
; HL:IX - SECTOR FAT FOR READING
;
LD DE,(PARTITION_START_L)
ADD IX,DE
LD DE,(PARTITION_START_H)
ADC HL,DE
;LD DE,(PARTITION_START_L)
;ADD IX,DE
;LD DE,(PARTITION_START_H)
;ADC HL,DE
CALL GET_ABSOLUTE_SECTOR
;
LD DE,FAT_SECTORS_BUFFER
;
IN A,(SLOT3)

View File

@ -26,8 +26,8 @@
.CacheBlock: WORD #0000
;.CacheUpdated: BYTE #00
;.SectorsPerBank: BYTE #00
;.RootDirStartCluster_L: WORD #0000
;.RootDirStartCluster_H: WORD #0000 ; fat32
.RootDirStartCluster_L: WORD #0000
.RootDirStartCluster_H: WORD #0000 ; fat32
.FAT1_SEC_L: WORD #0000 ; MSD_FAT_SEC first sector FAT (FAT_FRM)
.FAT1_SEC_H: WORD #0000 ; fat32
;.FAT2_SEC_L: WORD #0000