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
@ -838,11 +880,12 @@ LOAD_CORE: LD (READMEM),DE
;LD A,(FatBuffer.FAT_TYPE) ;LD A,(FatBuffer.FAT_TYPE)
; 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

View File

@ -493,36 +493,36 @@ EVALSTR: ld a,(hl)
; !! ЌҐ ¤Ґ« вм ®¤­г Є®¬ ­¤г > 256 бЁ¬ў®«®ў)) !! ; !! ЌҐ ¤Ґ« вм ®¤­г Є®¬ ­¤г > 256 бЁ¬ў®«®ў)) !!
; ;
; BAT-Є®¬ ­¤л (­Ґ ®в¤Ґ«пвм ®в ¤®б-Є®¬ ­¤) ; BAT-Є®¬ ­¤л (­Ґ ®в¤Ґ«пвм ®в ¤®б-Є®¬ ­¤)
BATLIST: DZ 'PAUSE' : DW cmd_pause BATLIST: DZ 'PAUSE' : DW cmd_pause
DZ 'REM' : DW cmd_rem DZ 'REM' : DW cmd_rem
DZ 'EXIT' : DW cmd_break DZ 'EXIT' : DW cmd_break
; ;
; DSS-ª®¬ ­¤ë ; DSS-ª®¬ ­¤ë
CMDLIST: DZ 'CD' : DW cmd_chdir CMDLIST: DZ 'CD' : DW cmd_chdir
DZ 'DIR' : DW cmd_dir DZ 'DIR' : DW cmd_dir
DZ 'ECHO' : DW cmd_echo DZ 'ECHO' : DW cmd_echo
DZ 'ECHO.' : DW cmd_echoLN DZ 'ECHO.' : DW cmd_echoLN
DZ 'PATH' : DW cmd_path DZ 'PATH' : DW cmd_path
DZ 'MD' : DW cmd_mkdir DZ 'MD' : DW cmd_mkdir
DZ 'REN' : DW cmd_rename DZ 'REN' : DW cmd_rename
DZ 'DEL' : DW cmd_del DZ 'DEL' : DW cmd_del
DZ 'RD' : DW cmd_rmdir DZ 'RD' : DW cmd_rmdir
DZ 'INFO' : DW cmd_info DZ 'INFO' : DW cmd_info
DZ 'SET' : DW cmd_set DZ 'SET' : DW cmd_set
DZ 'TIME' : DW cmd_time DZ 'TIME' : DW cmd_time
DZ 'DATE' : DW cmd_date DZ 'DATE' : DW cmd_date
DZ 'VER' : DW cmd_version DZ 'VER' : DW cmd_version
DZ 'CLS' : DW cmd_cls DZ 'CLS' : DW cmd_cls
DZ 'CHDIR' : DW cmd_chdir DZ 'CHDIR' : DW cmd_chdir
DZ 'MKDIR' : DW cmd_mkdir DZ 'MKDIR' : DW cmd_mkdir
DZ 'RENAME' : DW cmd_rename DZ 'RENAME' : DW cmd_rename
DZ 'ERASE' : DW cmd_del DZ 'ERASE' : DW cmd_del
DZ 'RMDIR' : DW cmd_rmdir DZ 'RMDIR' : DW cmd_rmdir
DZ 'HELP' : DW cmd_help DZ 'HELP' : DW cmd_help
DZ 'VERSION' : DW cmd_version DZ 'VERSION' : DW cmd_version
DZ 'EXIT' : DW cmd_exit DZ 'EXIT' : DW cmd_exit
DZ 'REBOOT' : DW cmd_reboot DZ 'REBOOT' : DW cmd_reboot
DB #00 DB #00
IZERO DB "ZERO",0 IZERO DB "ZERO",0