mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
core: fixed a bug for FAT32 with an unusually large FAT size and added another bug
This commit is contained in:
parent
61de8fd9a0
commit
2ac8d1308a
@ -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
|
||||
|
||||
@ -2,8 +2,7 @@
|
||||
;
|
||||
;
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
CHNDISK_FN:
|
||||
CALL CHNDISK
|
||||
CHNDISK_FN: CALL CHNDISK
|
||||
RET C
|
||||
PUSH AF
|
||||
CALL DIR_PATH_CHANGE.FullCurrent
|
||||
|
||||
@ -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
|
||||
|
||||
@ -1 +1 @@
|
||||
995
|
||||
996
|
||||
@ -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
|
||||
;
|
||||
|
||||
@ -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
|
||||
|
||||
@ -1 +1 @@
|
||||
434
|
||||
435
|
||||
Loading…
Reference in New Issue
Block a user