mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
fixed bug in detect fat32
This commit is contained in:
parent
7a40f43798
commit
02fb3ddb32
@ -576,22 +576,50 @@ GET_BPB: XOR A
|
|||||||
;LD H,A
|
;LD H,A
|
||||||
;LD L,A
|
;LD L,A
|
||||||
;LD (FatBuffer.CacheBlock),HL
|
;LD (FatBuffer.CacheBlock),HL
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; A = 0
|
; A = 0
|
||||||
LD DE,(FatBuffer.SectorsPerFAT_H)
|
; LD DE,(FatBuffer.SectorsPerFAT_H)
|
||||||
LD D,A
|
; LD D,A
|
||||||
|
; LD HL,(FatBuffer.SectorsPerFAT_L)
|
||||||
|
; ; DE:HL = SectorsPerFAT
|
||||||
|
; ;
|
||||||
|
; LD A,(BOOT_BUFFER + BOOT_SECTOR.Number_of_FATs)
|
||||||
|
; DEC A
|
||||||
|
; LD B,A
|
||||||
|
; JR Z,.loop_mul_end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; A = 0
|
||||||
|
LD HL,(FatBuffer.SectorsPerFAT_H)
|
||||||
|
LD H,A
|
||||||
|
LD D,H
|
||||||
|
LD E,L
|
||||||
|
;EX DE,HL
|
||||||
|
EXX
|
||||||
LD HL,(FatBuffer.SectorsPerFAT_L)
|
LD HL,(FatBuffer.SectorsPerFAT_L)
|
||||||
; DE:HL = SectorsPerFAT
|
LD D,H
|
||||||
;
|
LD E,L
|
||||||
|
; HL':HL = SectorsPerFAT
|
||||||
|
; DE':DE = SectorsPerFAT
|
||||||
LD A,(BOOT_BUFFER + BOOT_SECTOR.Number_of_FATs)
|
LD A,(BOOT_BUFFER + BOOT_SECTOR.Number_of_FATs)
|
||||||
LD B,A
|
|
||||||
DEC A
|
DEC A
|
||||||
JR Z,.loop_mul_end
|
LD B,A
|
||||||
|
;
|
||||||
|
CALL NZ,ALL_SECTORS_PER_FATs
|
||||||
|
EXX
|
||||||
|
PUSH HL
|
||||||
|
EXX
|
||||||
|
POP DE
|
||||||
|
; DE:HL - sectors per FATs
|
||||||
; .Number_of_FATs * .SectorsPerFAT
|
; .Number_of_FATs * .SectorsPerFAT
|
||||||
.loop_mul: ADD HL,HL
|
; .loop_mul: ADD HL,HL
|
||||||
EX DE,HL
|
; EX DE,HL
|
||||||
ADC HL,HL
|
; ADC HL,HL
|
||||||
EX DE,HL
|
; EX DE,HL
|
||||||
DJNZ .loop_mul
|
; DJNZ .loop_mul
|
||||||
.loop_mul_end: ; .DirSizeInSectors + .Number_of_FATs * .SectorsPerFAT
|
.loop_mul_end: ; .DirSizeInSectors + .Number_of_FATs * .SectorsPerFAT
|
||||||
LD B,0
|
LD B,0
|
||||||
LD A,(FatBuffer.DirSizeInSectors)
|
LD A,(FatBuffer.DirSizeInSectors)
|
||||||
@ -669,14 +697,17 @@ GET_BPB: XOR A
|
|||||||
LD HL,(FatBuffer.FAT1_SEC_L)
|
LD HL,(FatBuffer.FAT1_SEC_L)
|
||||||
LD DE,(FatBuffer.SectorsPerFAT_L)
|
LD DE,(FatBuffer.SectorsPerFAT_L)
|
||||||
AND #0F
|
AND #0F
|
||||||
JR Z,.first_FAT_active
|
; JR Z,.first_FAT_active
|
||||||
LD B,A
|
; LD B,A
|
||||||
|
; ;
|
||||||
|
; .fat_calc_loop: ADD HL,DE
|
||||||
|
; EXX
|
||||||
|
; ADC HL,DE
|
||||||
|
; EXX
|
||||||
|
; DJNZ .fat_calc_loop
|
||||||
;
|
;
|
||||||
.fat_calc_loop: ADD HL,DE
|
LD B,A
|
||||||
EXX
|
CALL NZ,ALL_SECTORS_PER_FATs
|
||||||
ADC HL,DE
|
|
||||||
EXX
|
|
||||||
DJNZ .fat_calc_loop
|
|
||||||
;
|
;
|
||||||
.first_FAT_active:
|
.first_FAT_active:
|
||||||
LD (FatBuffer.FAT1_SEC_L),HL
|
LD (FatBuffer.FAT1_SEC_L),HL
|
||||||
@ -700,6 +731,18 @@ GET_BPB: XOR A
|
|||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
|
; HL:HL' - first FAT sector
|
||||||
|
; DE:DE' - sectors per one FAT
|
||||||
|
; A - number of FATs (counts from 0)
|
||||||
|
ALL_SECTORS_PER_FATs:
|
||||||
|
ADD HL,DE
|
||||||
|
EXX
|
||||||
|
ADC HL,DE
|
||||||
|
EXX
|
||||||
|
DJNZ ALL_SECTORS_PER_FATs
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
;NSECTOR:
|
;NSECTOR:
|
||||||
; in: HL':HL - CLUSTER
|
; in: HL':HL - CLUSTER
|
||||||
; out: HL:IX - SECTOR
|
; out: HL:IX - SECTOR
|
||||||
|
|||||||
@ -96,7 +96,7 @@
|
|||||||
|
|
||||||
; ¢¥àá¨ï ¯à®£à ¬¬ë
|
; ¢¥àá¨ï ¯à®£à ¬¬ë
|
||||||
major_version equ 3 ; áâ. ®¬¥à ¢¥àᨨ
|
major_version equ 3 ; áâ. ®¬¥à ¢¥àᨨ
|
||||||
minor_version equ 0 ; ¬«. ®¬¥à
|
minor_version equ 1 ; ¬«. ®¬¥à
|
||||||
;;
|
;;
|
||||||
SECTORS_OF_LOADER EQU 4 ; ᥪâ®à®¢ § £àã§ç¨ª
|
SECTORS_OF_LOADER EQU 4 ; ᥪâ®à®¢ § £àã§ç¨ª
|
||||||
.IN_BPB EQU 1
|
.IN_BPB EQU 1
|
||||||
|
|||||||
@ -708,10 +708,21 @@ SAVEDIR: ;!TODO optimize
|
|||||||
FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE)
|
FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE)
|
||||||
CP #F0
|
CP #F0
|
||||||
JP C,RD_BPB.UnknownBPB
|
JP C,RD_BPB.UnknownBPB
|
||||||
;
|
; PREPARE
|
||||||
XOR A
|
XOR A
|
||||||
LD (.UsesVarsFAT32),A
|
LD (.UsesVarsFAT32),A
|
||||||
;
|
;
|
||||||
|
;EXX
|
||||||
|
LD H,A
|
||||||
|
LD L,A
|
||||||
|
LD D,A
|
||||||
|
LD E,A
|
||||||
|
EXX
|
||||||
|
;[ ] fat32
|
||||||
|
LD B,A
|
||||||
|
LD C,A
|
||||||
|
LD (CORE_BUFFERS.FS_Buffer.SectorsPerFAT_H),A ; [ ] fat32
|
||||||
|
;
|
||||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.BytesPerSector)
|
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.BytesPerSector)
|
||||||
LD (CORE_BUFFERS.FS_Buffer.BytesPerSector),HL
|
LD (CORE_BUFFERS.FS_Buffer.BytesPerSector),HL
|
||||||
LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerCluster)
|
LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerCluster)
|
||||||
@ -721,22 +732,12 @@ FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE)
|
|||||||
LD (CORE_BUFFERS.FS_Buffer.FAT1_SEC_L),HL ; low word first sector FAT #1
|
LD (CORE_BUFFERS.FS_Buffer.FAT1_SEC_L),HL ; low word first sector FAT #1
|
||||||
LD (CORE_BUFFERS.FS_Buffer.FAT2_SEC_L),HL ; low word first sector FAT #2
|
LD (CORE_BUFFERS.FS_Buffer.FAT2_SEC_L),HL ; low word first sector FAT #2
|
||||||
;[ ] fat32
|
;[ ] fat32
|
||||||
XOR A
|
|
||||||
LD B,A
|
|
||||||
LD C,A
|
|
||||||
LD (CORE_BUFFERS.FS_Buffer.FAT1_SEC_H),BC ; high word first sector FAT #1 ; [ ] fat32
|
LD (CORE_BUFFERS.FS_Buffer.FAT1_SEC_H),BC ; high word first sector FAT #1 ; [ ] fat32
|
||||||
LD (CORE_BUFFERS.FS_Buffer.FAT2_SEC_H),BC ; high word first sector FAT #1 ; [ ] fat32
|
LD (CORE_BUFFERS.FS_Buffer.FAT2_SEC_H),BC ; high word first sector FAT #1 ; [ ] fat32
|
||||||
LD (CORE_BUFFERS.FS_Buffer.RootDirFirstSector_H),BC
|
LD (CORE_BUFFERS.FS_Buffer.RootDirFirstSector_H),BC
|
||||||
LD (CORE_BUFFERS.FS_Buffer.SectorsPerFAT_H),A ; [ ] fat32
|
|
||||||
;LD (CORE_BUFFERS.FS_Buffer.END_CHAIN_CLUSTER_H),BC ; [ ] fat32 reset variables
|
;LD (CORE_BUFFERS.FS_Buffer.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
|
||||||
@ -917,20 +918,32 @@ FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE)
|
|||||||
; A = 0
|
; A = 0
|
||||||
LD HL,(CORE_BUFFERS.FS_Buffer.SectorsPerFAT_H)
|
LD HL,(CORE_BUFFERS.FS_Buffer.SectorsPerFAT_H)
|
||||||
LD H,A
|
LD H,A
|
||||||
EX DE,HL
|
LD D,H
|
||||||
|
LD E,L
|
||||||
|
;EX DE,HL
|
||||||
|
EXX
|
||||||
LD HL,(CORE_BUFFERS.FS_Buffer.SectorsPerFAT_L)
|
LD HL,(CORE_BUFFERS.FS_Buffer.SectorsPerFAT_L)
|
||||||
; DE:HL = SectorsPerFAT
|
LD D,H
|
||||||
;
|
LD E,L
|
||||||
|
; HL':HL = SectorsPerFAT
|
||||||
|
; DE':DE = SectorsPerFAT
|
||||||
LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.Number_of_FATs)
|
LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.Number_of_FATs)
|
||||||
LD B,A
|
|
||||||
DEC A
|
DEC A
|
||||||
JR Z,.loop_mul_end
|
LD B,A
|
||||||
; .Number_of_FATs * .SectorsPerFAT
|
; JR Z,.loop_mul_end
|
||||||
.loop_mul: ADD HL,HL
|
; ; .Number_of_FATs * .SectorsPerFAT
|
||||||
EX DE,HL
|
; .loop_mul: ADD HL,HL
|
||||||
ADC HL,HL
|
; EX DE,HL
|
||||||
EX DE,HL
|
; ADC HL,HL
|
||||||
DJNZ .loop_mul
|
; EX DE,HL
|
||||||
|
; DJNZ .loop_mul
|
||||||
|
;
|
||||||
|
CALL NZ,ALL_SECTORS_PER_FATs
|
||||||
|
EXX
|
||||||
|
PUSH HL
|
||||||
|
EXX
|
||||||
|
POP DE
|
||||||
|
; DE:HL - sectors per FATs
|
||||||
.loop_mul_end: ; .DirSizeInSectors + .Number_of_FATs * .SectorsPerFAT
|
.loop_mul_end: ; .DirSizeInSectors + .Number_of_FATs * .SectorsPerFAT
|
||||||
LD B,0
|
LD B,0
|
||||||
LD A,(CORE_BUFFERS.FS_Buffer.DirSizeInSectors)
|
LD A,(CORE_BUFFERS.FS_Buffer.DirSizeInSectors)
|
||||||
@ -1008,14 +1021,18 @@ FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE)
|
|||||||
LD HL,(CORE_BUFFERS.FS_Buffer.FAT1_SEC_L)
|
LD HL,(CORE_BUFFERS.FS_Buffer.FAT1_SEC_L)
|
||||||
LD DE,(CORE_BUFFERS.FS_Buffer.SectorsPerFAT_L)
|
LD DE,(CORE_BUFFERS.FS_Buffer.SectorsPerFAT_L)
|
||||||
AND #0F
|
AND #0F
|
||||||
JR Z,.first_FAT_active
|
|
||||||
LD B,A
|
|
||||||
;
|
;
|
||||||
.fat_calc_loop: ADD HL,DE
|
; JR Z,.first_FAT_active
|
||||||
EXX
|
; LD B,A
|
||||||
ADC HL,DE
|
; ;
|
||||||
EXX
|
; .fat_calc_loop: ADD HL,DE
|
||||||
DJNZ .fat_calc_loop
|
; EXX
|
||||||
|
; ADC HL,DE
|
||||||
|
; EXX
|
||||||
|
; DJNZ .fat_calc_loop
|
||||||
|
;
|
||||||
|
LD B,A
|
||||||
|
CALL NZ,ALL_SECTORS_PER_FATs
|
||||||
;
|
;
|
||||||
.first_FAT_active:
|
.first_FAT_active:
|
||||||
LD (CORE_BUFFERS.FS_Buffer.FAT1_SEC_L),HL
|
LD (CORE_BUFFERS.FS_Buffer.FAT1_SEC_L),HL
|
||||||
@ -1158,6 +1175,17 @@ SectorToCluster:
|
|||||||
JP .loop
|
JP .loop
|
||||||
;
|
;
|
||||||
|
|
||||||
|
; HL:HL' - first FAT sector
|
||||||
|
; DE:DE' - sectors per one FAT
|
||||||
|
; A - number of FATs (counts from 0)
|
||||||
|
ALL_SECTORS_PER_FATs:
|
||||||
|
ADD HL,DE
|
||||||
|
EXX
|
||||||
|
ADC HL,DE
|
||||||
|
EXX
|
||||||
|
DJNZ ALL_SECTORS_PER_FATs
|
||||||
|
RET
|
||||||
|
|
||||||
; DOS_X_Error:
|
; DOS_X_Error:
|
||||||
; .UnknownBPB: LD A,DSS_Error.sys.UNKNOWN_FORMAT
|
; .UnknownBPB: LD A,DSS_Error.sys.UNKNOWN_FORMAT
|
||||||
; SCF
|
; SCF
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
1
|
2
|
||||||
@ -1 +1 @@
|
|||||||
Subproject commit 1dabd783c85be491b704d038f9efabbaf8fe697e
|
Subproject commit 4da18d54c12e0f2ff4183be7a1cbf5882da1bd4f
|
||||||
Loading…
Reference in New Issue
Block a user