core: fixed a bug for FAT32 with an unusually large FAT size and added another bug

This commit is contained in:
Tolik 2024-07-03 00:15:25 +10:00
parent 61de8fd9a0
commit 2ac8d1308a
8 changed files with 119 additions and 69 deletions

View File

@ -392,18 +392,15 @@ YEPDOS: ;[ ] 17.12.2023
;
;
GET_BPB: LD HL,#0000
;
GET_BPB: XOR A
LD H,A
LD L,A
LD (FatBuffer.FAT1_SEC_H),HL ; high word first sector FAT #1
LD (FatBuffer.RootDirFirstSector_H),HL
;LD (FatBuffer.CacheBlock),HL
XOR A
LD (FatBuffer.SectorsPerFAT_H),A
;
PUSH HL
POP IX
; LD IX,#0000
; LD HL,#0000
LD DE,BOOT_BUFFER
LD BC,1*256 + BIOS.DRV_READ
LD A,(DRIVE)
@ -458,34 +455,59 @@ GET_BPB: LD HL,#0000
LD HL,(BOOT_BUFFER + BOOT_SECTOR.RESERVED_SECTORS)
LD (FatBuffer.FAT1_SEC_L),HL ; low word first sector FAT #1
;
LD BC,0
XOR A
LD B,A
LD C,A
EXX
LD H,A
LD L,A
LD D,A
LD E,A
EXX
;
;LD BC,0
LD DE,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerFAT16)
LD A,E
OR D
JR NZ,.skip_high
;
LD BC,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerFAT32 + 2)
LD A,C
EXX
LD DE,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerFAT32 + 2)
LD A,E
EXX
;LD BC,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerFAT32 + 2)
;LD A,C
LD (FatBuffer.SectorsPerFAT_H),A
LD DE,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerFAT32)
;
.skip_high: LD (FatBuffer.SectorsPerFAT_L),DE
LD A,(BOOT_BUFFER + BOOT_SECTOR.Number_of_FATs) ; amount FATs
CP 1
JR Z,.one_FAT
DEC A
ADD HL,DE
JR NC,.no_inc_BC
INC BC
EXX
ADC HL,DE
EXX
;JR NC,.no_inc_BC
;INC BC
.no_inc_BC: ;
.one_FAT: ;
.loop1: ADD HL,DE
JR NC,.loop1_1
INC BC
EXX
ADC HL,DE
EXX
;JR NC,.loop1_1
;INC BC
.loop1_1: DEC A
JR NZ,.loop1
;
LD (FatBuffer.RootDirFirstSector_L),HL ; first sector DIR
LD (FatBuffer.FirstDataSector_H),BC
EXX
; ¬®¦­® áà §ã âãâ § £­ âì áâ à訩 ¡ ©â, ¯®â®¬ã-çâ® ¤«  FAT32 á«¥¤ãî騩 à áçñâ - íâ® ¯à¨¡ ¢«¥­¨¥ ­ã«ï.
LD (FatBuffer.FirstDataSector_H),HL
EXX
;LD (FatBuffer.FirstDataSector_H),BC
LD BC,(BOOT_BUFFER + BOOT_SECTOR.BytesPerSector)
LD A,B
AND A
@ -534,11 +556,10 @@ GET_BPB: LD HL,#0000
JP NC,.loop3
.loop3.end: ;
LD (FatBuffer.BytesPerCluster),HL
; LD DE,#8001 ; 能恥丞<E681A5> <20> <20>妞丞 物<><EFBFBD> &恢镼 32 炕 - 郊 祚中丞成<E4B89E>乒摬 ; !TODO
; AND A
; SBC HL,DE
; CCF
; RET C ; [ ] fixed bug, thanks to @Romychs (Roman Boykov)
; ¯à®¢¥àª  ­  à §¬¥à ª« áâ¥à  ¡®«ìè¥ 32 ª¡ - ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ; !TODO
; .....
;
////////////////////////////////////////////////////////////////////////
;
LD HL,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerDrive)
LD BC,0

View File

@ -2,14 +2,13 @@
;
;
////////////////////////////////////////////////////////////////////////
CHNDISK_FN:
CALL CHNDISK
CHNDISK_FN: CALL CHNDISK
RET C
PUSH AF
CALL DIR_PATH_CHANGE.FullCurrent
POP AF
RET
CHNDISK:;[x] ¡®«¥¥ ª®à४⭠ï ᬥ­  ¤¨áª 
CHNDISK: ;[x] ¡®«¥¥ ª®à४⭠ï ᬥ­  ¤¨áª 
CALL OPENDSK
;
;R010

View File

@ -727,15 +727,25 @@ RD_BPB: ; LD C,SLOT3
;LD (CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_H),BC ; [ ] fat32 reset variables
;
;
EXX
LD H,A
LD L,A
LD D,A
LD E,A
EXX
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerFAT16)
LD A,E
OR D
JR NZ,.skip_high
;
LD BC,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerFAT32 + 2)
LD A,C
EXX
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerFAT32 + 2)
LD A,E
EXX
;
LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_H),A
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerFAT32)
;
.skip_high: LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_L),DE
LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.Number_of_FATs) ; amount FATs
LD (CORE_BUFFERS.FatBuffer.Number_Of_FATs),A
@ -744,18 +754,29 @@ RD_BPB: ; LD C,SLOT3
DEC A
ADD HL,DE
LD (CORE_BUFFERS.FatBuffer.FAT2_SEC_L),HL
JR NC,.no_inc_BC
INC BC
.no_inc_BC: LD (CORE_BUFFERS.FatBuffer.FAT2_SEC_H),BC
.one_FAT: ;C_DATA1
EXX
ADC HL,DE
LD (CORE_BUFFERS.FatBuffer.FAT2_SEC_H),HL
EXX
;JR NC,.no_inc_BC
;INC BC
.no_inc_BC:;LD (CORE_BUFFERS.FatBuffer.FAT2_SEC_H),BC
.one_FAT: ;
.loop1: ADD HL,DE
JR NC,.loop1_1
INC BC
;JR NC,.loop1_1
;INC BC
EXX
ADC HL,DE
EXX
.loop1_1: DEC A
JR NZ,.loop1
;
LD (CORE_BUFFERS.FatBuffer.RootDirFirstSector_L),HL ; first sector DIR
LD (CORE_BUFFERS.FatBuffer.FirstDataSector_H),BC
EXX
; ¬®¦­® áà §ã âãâ § £­ âì áâ à訩 ¡ ©â, ¯®â®¬ã-çâ® ¤«  FAT32 á«¥¤ãî騩 à áçñâ - íâ® ¯à¨¡ ¢«¥­¨¥ ­ã«ï.
LD (CORE_BUFFERS.FatBuffer.FirstDataSector_H),HL
EXX
;LD (CORE_BUFFERS.FatBuffer.FirstDataSector_H),BC
;
LD BC,(CORE_BUFFERS.FatBuffer.BytesPerSector)
LD A,B
@ -838,19 +859,27 @@ RD_BPB: ; LD C,SLOT3
////////////////////////////////////////////////////////////////////////
; [ ] fat32
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerDrive)
LD DE,(CORE_BUFFERS.FatBuffer.FirstDataSector_L)
LD A,H
OR L
JP NZ,.HDDSMAL
;
LD DE,(CORE_BUFFERS.FatBuffer.FirstDataSector_L)
EXX
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.BPB_BIG_TOTAL_SECTORS_H)
LD DE,(CORE_BUFFERS.FatBuffer.FirstDataSector_H)
EXX
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.BPB_BIG_TOTAL_SECTORS_L)
LD BC,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.BPB_BIG_TOTAL_SECTORS_H)
PUSH BC ; Total Sectors high
PUSH HL ; Total Sectors low
AND A
SBC HL,DE
JP NC,.HDDBIG
DEC BC
EXX
SBC HL,DE
PUSH HL
EXX
POP BC
;JP NC,.HDDBIG
;DEC BC
JP .HDDBIG
;
.HDDSMAL: ; CF = 0

View File

@ -1 +1 @@
995
996

View File

@ -210,7 +210,7 @@ GetBPB: LD IX,0
POP DE
POP HL
RET C
LD BC,#0018
LD BC,BOOT_SECTOR.SectorsPerTrack
ADD HL,BC
LD E,(HL)
PUSH DE
@ -293,7 +293,7 @@ GenIOCTL: BIT 7,B
; BC' - SECTORS PER TRACK ON PHISICAL DISK
; A' - PHISICAL DRIVE NUMBER
; A - EXTENDED INFORMATION
; D0...D3 - "0" RESERVED (MAY BE OTHER)
; D1..D3 - "0" RESERVED (MAY BE OTHER)
; D4 - DEVICE MASTER/SLAVE
; D5 - "1" RESERVED
; D6 - ADDRESSING MODE LBA/CHS
@ -340,25 +340,24 @@ GenIOCTL: BIT 7,B
OR E
JR NZ,.mull_loop2
;
; A=0 ZF=0 CF=0
; A=0 DE=0 ZF=0 CF=0
EX AF,AF'
LD E,A
EX DE,HL
; H=0
LD C,H ;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
EXX
POP DE
POP HL
POP AF
EX AF,AF'
; A=0 ZF=0 CF=0
LD A,B
LD B,0
LD C,L
LD L,H
LD H,B
EX DE,HL
EXX
; A=0 ZF=0 CF=0
LD C,0 ;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
AND A
RET
;

View File

@ -83,11 +83,13 @@ cmd_info: CALL Get_Path
POP BC
PUSH BC
LD A,C
CP "C"
JR C,.ItIsFDD
LD DE,Dss.DRV.GenIOCTL.Enter
LD BC,Dss.DRV.GenIOCTL.GetParams
RST ToDSS.DRV ; !FIXIT ­¥ ¢®§¢à é ¥â à §¬¥à ᥪâ®à , ¯®í⮬ã å à¤ª®à ¯® 512
JR NC,.calc_size
;
.ItIsFDD: ;
LD HL,.Unknown_str
LD DE,Buffers.bat_params.PRM5 ; Drive size
CALL ncopy_string

View File

@ -1 +1 @@
434
435