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

View File

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