mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +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 L,A
|
||||
;LD (FatBuffer.CacheBlock),HL
|
||||
|
||||
|
||||
|
||||
; A = 0
|
||||
LD DE,(FatBuffer.SectorsPerFAT_H)
|
||||
LD D,A
|
||||
; LD DE,(FatBuffer.SectorsPerFAT_H)
|
||||
; 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)
|
||||
; 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 B,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
|
||||
.loop_mul: ADD HL,HL
|
||||
EX DE,HL
|
||||
ADC HL,HL
|
||||
EX DE,HL
|
||||
DJNZ .loop_mul
|
||||
; .loop_mul: ADD HL,HL
|
||||
; EX DE,HL
|
||||
; ADC HL,HL
|
||||
; EX DE,HL
|
||||
; DJNZ .loop_mul
|
||||
.loop_mul_end: ; .DirSizeInSectors + .Number_of_FATs * .SectorsPerFAT
|
||||
LD B,0
|
||||
LD A,(FatBuffer.DirSizeInSectors)
|
||||
@ -669,15 +697,18 @@ GET_BPB: XOR A
|
||||
LD HL,(FatBuffer.FAT1_SEC_L)
|
||||
LD DE,(FatBuffer.SectorsPerFAT_L)
|
||||
AND #0F
|
||||
JR Z,.first_FAT_active
|
||||
; JR Z,.first_FAT_active
|
||||
; LD B,A
|
||||
; ;
|
||||
; .fat_calc_loop: ADD HL,DE
|
||||
; EXX
|
||||
; ADC HL,DE
|
||||
; EXX
|
||||
; DJNZ .fat_calc_loop
|
||||
;
|
||||
LD B,A
|
||||
;
|
||||
.fat_calc_loop: ADD HL,DE
|
||||
EXX
|
||||
ADC HL,DE
|
||||
EXX
|
||||
DJNZ .fat_calc_loop
|
||||
;
|
||||
CALL NZ,ALL_SECTORS_PER_FATs
|
||||
;
|
||||
.first_FAT_active:
|
||||
LD (FatBuffer.FAT1_SEC_L),HL
|
||||
EXX
|
||||
@ -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:
|
||||
; in: HL':HL - CLUSTER
|
||||
; out: HL:IX - SECTOR
|
||||
|
||||
@ -96,7 +96,7 @@
|
||||
|
||||
; ¢¥àá¨ï ¯à®£à ¬¬ë
|
||||
major_version equ 3 ; áâ. ®¬¥à ¢¥àᨨ
|
||||
minor_version equ 0 ; ¬«. ®¬¥à
|
||||
minor_version equ 1 ; ¬«. ®¬¥à
|
||||
;;
|
||||
SECTORS_OF_LOADER EQU 4 ; ᥪâ®à®¢ § £àã§ç¨ª
|
||||
.IN_BPB EQU 1
|
||||
|
||||
@ -708,10 +708,21 @@ SAVEDIR: ;!TODO optimize
|
||||
FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE)
|
||||
CP #F0
|
||||
JP C,RD_BPB.UnknownBPB
|
||||
;
|
||||
; PREPARE
|
||||
XOR 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 (CORE_BUFFERS.FS_Buffer.BytesPerSector),HL
|
||||
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.FAT2_SEC_L),HL ; low word first sector FAT #2
|
||||
;[ ] 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.FAT2_SEC_H),BC ; high word first sector FAT #1 ; [ ] fat32
|
||||
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
|
||||
;
|
||||
;
|
||||
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
|
||||
@ -917,20 +918,32 @@ FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE)
|
||||
; A = 0
|
||||
LD HL,(CORE_BUFFERS.FS_Buffer.SectorsPerFAT_H)
|
||||
LD H,A
|
||||
EX DE,HL
|
||||
LD D,H
|
||||
LD E,L
|
||||
;EX DE,HL
|
||||
EXX
|
||||
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 B,A
|
||||
DEC A
|
||||
JR Z,.loop_mul_end
|
||||
; .Number_of_FATs * .SectorsPerFAT
|
||||
.loop_mul: ADD HL,HL
|
||||
EX DE,HL
|
||||
ADC HL,HL
|
||||
EX DE,HL
|
||||
DJNZ .loop_mul
|
||||
LD B,A
|
||||
; JR Z,.loop_mul_end
|
||||
; ; .Number_of_FATs * .SectorsPerFAT
|
||||
; .loop_mul: ADD HL,HL
|
||||
; EX DE,HL
|
||||
; ADC HL,HL
|
||||
; 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
|
||||
LD B,0
|
||||
LD A,(CORE_BUFFERS.FS_Buffer.DirSizeInSectors)
|
||||
@ -1005,21 +1018,25 @@ FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE)
|
||||
LD DE,(CORE_BUFFERS.FS_Buffer.SectorsPerFAT_H)
|
||||
LD D,0
|
||||
EXX
|
||||
LD HL,(CORE_BUFFERS.FS_Buffer.FAT1_SEC_L)
|
||||
LD DE,(CORE_BUFFERS.FS_Buffer.SectorsPerFAT_L)
|
||||
AND #0F
|
||||
JR Z,.first_FAT_active
|
||||
LD B,A
|
||||
LD HL,(CORE_BUFFERS.FS_Buffer.FAT1_SEC_L)
|
||||
LD DE,(CORE_BUFFERS.FS_Buffer.SectorsPerFAT_L)
|
||||
AND #0F
|
||||
;
|
||||
.fat_calc_loop: ADD HL,DE
|
||||
EXX
|
||||
ADC HL,DE
|
||||
EXX
|
||||
DJNZ .fat_calc_loop
|
||||
; JR Z,.first_FAT_active
|
||||
; LD B,A
|
||||
; ;
|
||||
; .fat_calc_loop: ADD HL,DE
|
||||
; EXX
|
||||
; ADC HL,DE
|
||||
; EXX
|
||||
; DJNZ .fat_calc_loop
|
||||
;
|
||||
LD B,A
|
||||
CALL NZ,ALL_SECTORS_PER_FATs
|
||||
;
|
||||
.first_FAT_active:
|
||||
LD (CORE_BUFFERS.FS_Buffer.FAT1_SEC_L),HL
|
||||
LD (CORE_BUFFERS.FS_Buffer.FAT2_SEC_L),HL
|
||||
LD (CORE_BUFFERS.FS_Buffer.FAT1_SEC_L),HL
|
||||
LD (CORE_BUFFERS.FS_Buffer.FAT2_SEC_L),HL
|
||||
EXX
|
||||
LD (CORE_BUFFERS.FS_Buffer.FAT1_SEC_H),HL
|
||||
LD (CORE_BUFFERS.FS_Buffer.FAT2_SEC_H),HL
|
||||
@ -1158,6 +1175,17 @@ SectorToCluster:
|
||||
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:
|
||||
; .UnknownBPB: LD A,DSS_Error.sys.UNKNOWN_FORMAT
|
||||
; SCF
|
||||
|
||||
@ -1 +1 @@
|
||||
1
|
||||
2
|
||||
@ -1 +1 @@
|
||||
Subproject commit 1dabd783c85be491b704d038f9efabbaf8fe697e
|
||||
Subproject commit 4da18d54c12e0f2ff4183be7a1cbf5882da1bd4f
|
||||
Loading…
Reference in New Issue
Block a user