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.FAT1_SEC_H),HL ; high word first sector FAT #1
|
||||||
LD (FatBuffer.RootDirFirstSector_H),HL
|
LD (FatBuffer.RootDirFirstSector_H),HL
|
||||||
;LD (FatBuffer.CacheBlock),HL
|
|
||||||
XOR A
|
|
||||||
LD (FatBuffer.SectorsPerFAT_H),A
|
LD (FatBuffer.SectorsPerFAT_H),A
|
||||||
;
|
;
|
||||||
PUSH HL
|
PUSH HL
|
||||||
POP IX
|
POP IX
|
||||||
; LD IX,#0000
|
|
||||||
; LD HL,#0000
|
|
||||||
LD DE,BOOT_BUFFER
|
LD DE,BOOT_BUFFER
|
||||||
LD BC,1*256 + BIOS.DRV_READ
|
LD BC,1*256 + BIOS.DRV_READ
|
||||||
LD A,(DRIVE)
|
LD A,(DRIVE)
|
||||||
@ -458,34 +455,59 @@ GET_BPB: LD HL,#0000
|
|||||||
LD HL,(BOOT_BUFFER + BOOT_SECTOR.RESERVED_SECTORS)
|
LD HL,(BOOT_BUFFER + BOOT_SECTOR.RESERVED_SECTORS)
|
||||||
LD (FatBuffer.FAT1_SEC_L),HL ; low word first sector FAT #1
|
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 DE,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerFAT16)
|
||||||
LD A,E
|
LD A,E
|
||||||
OR D
|
OR D
|
||||||
JR NZ,.skip_high
|
JR NZ,.skip_high
|
||||||
;
|
;
|
||||||
LD BC,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerFAT32 + 2)
|
EXX
|
||||||
LD A,C
|
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 (FatBuffer.SectorsPerFAT_H),A
|
||||||
LD DE,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerFAT32)
|
LD DE,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerFAT32)
|
||||||
|
;
|
||||||
.skip_high: LD (FatBuffer.SectorsPerFAT_L),DE
|
.skip_high: LD (FatBuffer.SectorsPerFAT_L),DE
|
||||||
LD A,(BOOT_BUFFER + BOOT_SECTOR.Number_of_FATs) ; amount FATs
|
LD A,(BOOT_BUFFER + BOOT_SECTOR.Number_of_FATs) ; amount FATs
|
||||||
CP 1
|
CP 1
|
||||||
JR Z,.one_FAT
|
JR Z,.one_FAT
|
||||||
DEC A
|
DEC A
|
||||||
ADD HL,DE
|
ADD HL,DE
|
||||||
JR NC,.no_inc_BC
|
EXX
|
||||||
INC BC
|
ADC HL,DE
|
||||||
|
EXX
|
||||||
|
;JR NC,.no_inc_BC
|
||||||
|
;INC BC
|
||||||
.no_inc_BC: ;
|
.no_inc_BC: ;
|
||||||
.one_FAT: ;
|
.one_FAT: ;
|
||||||
.loop1: ADD HL,DE
|
.loop1: ADD HL,DE
|
||||||
JR NC,.loop1_1
|
EXX
|
||||||
INC BC
|
ADC HL,DE
|
||||||
|
EXX
|
||||||
|
;JR NC,.loop1_1
|
||||||
|
;INC BC
|
||||||
.loop1_1: DEC A
|
.loop1_1: DEC A
|
||||||
JR NZ,.loop1
|
JR NZ,.loop1
|
||||||
;
|
;
|
||||||
LD (FatBuffer.RootDirFirstSector_L),HL ; first sector DIR
|
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 BC,(BOOT_BUFFER + BOOT_SECTOR.BytesPerSector)
|
||||||
LD A,B
|
LD A,B
|
||||||
AND A
|
AND A
|
||||||
@ -534,11 +556,10 @@ GET_BPB: LD HL,#0000
|
|||||||
JP NC,.loop3
|
JP NC,.loop3
|
||||||
.loop3.end: ;
|
.loop3.end: ;
|
||||||
LD (FatBuffer.BytesPerCluster),HL
|
LD (FatBuffer.BytesPerCluster),HL
|
||||||
; LD DE,#8001 ; 能恥丞<E681A5> <20> <20>妞丞 物<>漭<EFBFBD> &恢镼 32 炕 - 郊 祚中丞成<E4B89E>乒摬 ; !TODO
|
; ¯à®¢¥àª à §¬¥à ª« áâ¥à ¡®«ìè¥ 32 ª¡ - ¥ ¯®¤¤¥à¦¨¢ ¥âáï ; !TODO
|
||||||
; AND A
|
; .....
|
||||||
; SBC HL,DE
|
;
|
||||||
; CCF
|
////////////////////////////////////////////////////////////////////////
|
||||||
; RET C ; [ ] fixed bug, thanks to @Romychs (Roman Boykov)
|
|
||||||
;
|
;
|
||||||
LD HL,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerDrive)
|
LD HL,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerDrive)
|
||||||
LD BC,0
|
LD BC,0
|
||||||
|
|||||||
@ -2,24 +2,23 @@
|
|||||||
;
|
;
|
||||||
;
|
;
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
CHNDISK_FN:
|
CHNDISK_FN: CALL CHNDISK
|
||||||
CALL CHNDISK
|
RET C
|
||||||
RET C
|
PUSH AF
|
||||||
PUSH AF
|
CALL DIR_PATH_CHANGE.FullCurrent
|
||||||
CALL DIR_PATH_CHANGE.FullCurrent
|
POP AF
|
||||||
POP AF
|
RET
|
||||||
RET
|
CHNDISK: ;[x] ¡®«¥¥ ª®à४â ï ᬥ ¤¨áª
|
||||||
CHNDISK:;[x] ¡®«¥¥ ª®à४â ï ᬥ ¤¨áª
|
CALL OPENDSK
|
||||||
CALL OPENDSK
|
;
|
||||||
;
|
;R010
|
||||||
;R010
|
RET C
|
||||||
RET C
|
LD HL,CORE_BUFFERS.WorkDirectory
|
||||||
LD HL,CORE_BUFFERS.WorkDirectory
|
LD (HL),0
|
||||||
LD (HL),0
|
PUSH AF
|
||||||
PUSH AF
|
CALL OPENDIR
|
||||||
CALL OPENDIR
|
POP BC
|
||||||
POP BC
|
RET C
|
||||||
RET C
|
LD A,B
|
||||||
LD A,B
|
RET
|
||||||
RET
|
|
||||||
;
|
;
|
||||||
@ -184,13 +184,13 @@ OPENDSK: ;!TEST DRV.Open
|
|||||||
LD C,A
|
LD C,A
|
||||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||||||
CP C
|
CP C
|
||||||
IF CHECK_DRIVE_CHANGE
|
IF CHECK_DRIVE_CHANGE
|
||||||
JR NZ,.open
|
JR NZ,.open
|
||||||
PUSH BC
|
PUSH BC
|
||||||
LD C,Dss.DRV.MediaCheck
|
LD C,Dss.DRV.MediaCheck
|
||||||
RST ToDSS.DRV
|
RST ToDSS.DRV
|
||||||
POP BC
|
POP BC
|
||||||
ENDIF
|
ENDIF
|
||||||
JR Z,.exit
|
JR Z,.exit
|
||||||
|
|
||||||
.open: LD A,C
|
.open: LD A,C
|
||||||
|
|||||||
@ -534,7 +534,7 @@ LOADDIR: ;!TODO optimize
|
|||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
.LoadRootDir: LD HL,(CORE_BUFFERS.FatBuffer.RootDirFirstSector_H) ;!TODO ¢®§¬®¦®, å¢ â¨â LD HL,0
|
.LoadRootDir: LD HL,(CORE_BUFFERS.FatBuffer.RootDirFirstSector_H) ;!TODO ¢®§¬®¦®, å¢ â¨â LD HL,0
|
||||||
LD IX,(CORE_BUFFERS.FatBuffer.RootDirFirstSector_L) ; ®¬¥à «®£. ᥪâ®à
|
LD IX,(CORE_BUFFERS.FatBuffer.RootDirFirstSector_L) ; ®¬¥à «®£. ᥪâ®à
|
||||||
LD A,(CORE_BUFFERS.FatBuffer.DirSizeInSectors)
|
LD A,(CORE_BUFFERS.FatBuffer.DirSizeInSectors)
|
||||||
LD B,32 ; !HARDCODE sector size 512. 16384/(sector 512). à §¬¥à root-ª â «®£
|
LD B,32 ; !HARDCODE sector size 512. 16384/(sector 512). à §¬¥à root-ª â «®£
|
||||||
CP B
|
CP B
|
||||||
@ -727,15 +727,25 @@ RD_BPB: ; LD C,SLOT3
|
|||||||
;LD (CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_H),BC ; [ ] fat32 reset variables
|
;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 DE,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerFAT16)
|
||||||
LD A,E
|
LD A,E
|
||||||
OR D
|
OR D
|
||||||
JR NZ,.skip_high
|
JR NZ,.skip_high
|
||||||
;
|
;
|
||||||
LD BC,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerFAT32 + 2)
|
EXX
|
||||||
LD A,C
|
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerFAT32 + 2)
|
||||||
|
LD A,E
|
||||||
|
EXX
|
||||||
|
;
|
||||||
LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_H),A
|
LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_H),A
|
||||||
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerFAT32)
|
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerFAT32)
|
||||||
|
;
|
||||||
.skip_high: LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_L),DE
|
.skip_high: LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_L),DE
|
||||||
LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.Number_of_FATs) ; amount FATs
|
LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.Number_of_FATs) ; amount FATs
|
||||||
LD (CORE_BUFFERS.FatBuffer.Number_Of_FATs),A
|
LD (CORE_BUFFERS.FatBuffer.Number_Of_FATs),A
|
||||||
@ -744,18 +754,29 @@ RD_BPB: ; LD C,SLOT3
|
|||||||
DEC A
|
DEC A
|
||||||
ADD HL,DE
|
ADD HL,DE
|
||||||
LD (CORE_BUFFERS.FatBuffer.FAT2_SEC_L),HL
|
LD (CORE_BUFFERS.FatBuffer.FAT2_SEC_L),HL
|
||||||
JR NC,.no_inc_BC
|
EXX
|
||||||
INC BC
|
ADC HL,DE
|
||||||
.no_inc_BC: LD (CORE_BUFFERS.FatBuffer.FAT2_SEC_H),BC
|
LD (CORE_BUFFERS.FatBuffer.FAT2_SEC_H),HL
|
||||||
.one_FAT: ;C_DATA1
|
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
|
.loop1: ADD HL,DE
|
||||||
JR NC,.loop1_1
|
;JR NC,.loop1_1
|
||||||
INC BC
|
;INC BC
|
||||||
|
EXX
|
||||||
|
ADC HL,DE
|
||||||
|
EXX
|
||||||
.loop1_1: DEC A
|
.loop1_1: DEC A
|
||||||
JR NZ,.loop1
|
JR NZ,.loop1
|
||||||
;
|
;
|
||||||
LD (CORE_BUFFERS.FatBuffer.RootDirFirstSector_L),HL ; first sector DIR
|
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 BC,(CORE_BUFFERS.FatBuffer.BytesPerSector)
|
||||||
LD A,B
|
LD A,B
|
||||||
@ -838,19 +859,27 @@ RD_BPB: ; LD C,SLOT3
|
|||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
; [ ] fat32
|
; [ ] fat32
|
||||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerDrive)
|
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerDrive)
|
||||||
LD DE,(CORE_BUFFERS.FatBuffer.FirstDataSector_L)
|
|
||||||
LD A,H
|
LD A,H
|
||||||
OR L
|
OR L
|
||||||
JP NZ,.HDDSMAL
|
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 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 BC ; Total Sectors high
|
||||||
PUSH HL ; Total Sectors low
|
PUSH HL ; Total Sectors low
|
||||||
AND A
|
AND A
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
JP NC,.HDDBIG
|
EXX
|
||||||
DEC BC
|
SBC HL,DE
|
||||||
|
PUSH HL
|
||||||
|
EXX
|
||||||
|
POP BC
|
||||||
|
;JP NC,.HDDBIG
|
||||||
|
;DEC BC
|
||||||
JP .HDDBIG
|
JP .HDDBIG
|
||||||
;
|
;
|
||||||
.HDDSMAL: ; CF = 0
|
.HDDSMAL: ; CF = 0
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
995
|
996
|
||||||
@ -210,7 +210,7 @@ GetBPB: LD IX,0
|
|||||||
POP DE
|
POP DE
|
||||||
POP HL
|
POP HL
|
||||||
RET C
|
RET C
|
||||||
LD BC,#0018
|
LD BC,BOOT_SECTOR.SectorsPerTrack
|
||||||
ADD HL,BC
|
ADD HL,BC
|
||||||
LD E,(HL)
|
LD E,(HL)
|
||||||
PUSH DE
|
PUSH DE
|
||||||
@ -293,7 +293,7 @@ GenIOCTL: BIT 7,B
|
|||||||
; BC' - SECTORS PER TRACK ON PHISICAL DISK
|
; BC' - SECTORS PER TRACK ON PHISICAL DISK
|
||||||
; A' - PHISICAL DRIVE NUMBER
|
; A' - PHISICAL DRIVE NUMBER
|
||||||
; A - EXTENDED INFORMATION
|
; A - EXTENDED INFORMATION
|
||||||
; D0...D3 - "0" RESERVED (MAY BE OTHER)
|
; D1..D3 - "0" RESERVED (MAY BE OTHER)
|
||||||
; D4 - DEVICE MASTER/SLAVE
|
; D4 - DEVICE MASTER/SLAVE
|
||||||
; D5 - "1" RESERVED
|
; D5 - "1" RESERVED
|
||||||
; D6 - ADDRESSING MODE LBA/CHS
|
; D6 - ADDRESSING MODE LBA/CHS
|
||||||
@ -340,25 +340,24 @@ GenIOCTL: BIT 7,B
|
|||||||
OR E
|
OR E
|
||||||
JR NZ,.mull_loop2
|
JR NZ,.mull_loop2
|
||||||
;
|
;
|
||||||
; A=0 ZF=0 CF=0
|
; A=0 DE=0 ZF=0 CF=0
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD E,A
|
LD E,A
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
|
; H=0
|
||||||
|
LD C,H ;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
EXX
|
EXX
|
||||||
POP DE
|
POP DE
|
||||||
POP HL
|
POP HL
|
||||||
POP AF
|
POP AF
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
; A=0 ZF=0 CF=0
|
; A=0 ZF=0 CF=0
|
||||||
LD A,B
|
|
||||||
LD B,0
|
LD B,0
|
||||||
LD C,L
|
LD C,L
|
||||||
LD L,H
|
LD L,H
|
||||||
LD H,B
|
LD H,B
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
EXX
|
EXX
|
||||||
; A=0 ZF=0 CF=0
|
|
||||||
LD C,0 ;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
|
||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
|
|||||||
@ -83,11 +83,13 @@ cmd_info: CALL Get_Path
|
|||||||
POP BC
|
POP BC
|
||||||
PUSH BC
|
PUSH BC
|
||||||
LD A,C
|
LD A,C
|
||||||
|
CP "C"
|
||||||
|
JR C,.ItIsFDD
|
||||||
LD DE,Dss.DRV.GenIOCTL.Enter
|
LD DE,Dss.DRV.GenIOCTL.Enter
|
||||||
LD BC,Dss.DRV.GenIOCTL.GetParams
|
LD BC,Dss.DRV.GenIOCTL.GetParams
|
||||||
RST ToDSS.DRV ; !FIXIT ¥ ¢®§¢à é ¥â à §¬¥à ᥪâ®à , ¯®í⮬ã å प®à ¯® 512
|
RST ToDSS.DRV ; !FIXIT ¥ ¢®§¢à é ¥â à §¬¥à ᥪâ®à , ¯®í⮬ã å प®à ¯® 512
|
||||||
JR NC,.calc_size
|
JR NC,.calc_size
|
||||||
;
|
.ItIsFDD: ;
|
||||||
LD HL,.Unknown_str
|
LD HL,.Unknown_str
|
||||||
LD DE,Buffers.bat_params.PRM5 ; Drive size
|
LD DE,Buffers.bat_params.PRM5 ; Drive size
|
||||||
CALL ncopy_string
|
CALL ncopy_string
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
434
|
435
|
||||||
Loading…
Reference in New Issue
Block a user