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

View File

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