mirror of
https://github.com/Tolik-Trek/FORMAT.git
synced 2026-06-15 01:11:39 +03:00
...
This commit is contained in:
parent
ee38a525f0
commit
3d8f5ff222
@ -8,6 +8,11 @@ FAT16 EQU 2 ;
|
||||
FAT12 EQU 3 ; § ®¤® ¨ ¬®¦¨â¥«ì
|
||||
FAT32 EQU 4 ; § ®¤® ¨ ¬®¦¨â¥«ì
|
||||
;
|
||||
FilesInRootDIR:
|
||||
.FDD_DD EQU 112
|
||||
.FDD_HD EQU 224
|
||||
.HDD EQU 512
|
||||
;
|
||||
FAT_ReservedSectors:
|
||||
.FDD EQU 1
|
||||
.HDD EQU 8
|
||||
@ -24,17 +29,17 @@ FAT_ReservedSectors:
|
||||
|
||||
MODULE TABLES
|
||||
; VOL SIZE CLUSTER SIZE FAT TYPE
|
||||
FAT_TYPES: FAT_TYPES_LINE #0800, 32768, FAT32 ; > 32768
|
||||
FAT_TYPES_LINE #0400, 16384, FAT32 ; 16384..32768 Mb
|
||||
FAT_TYPES_LINE #0200, 8192, FAT32 ; 8192..16384 Mb
|
||||
FAT_TYPES_LINE #0100, 4096, FAT32 ; 4096..8192 Mb
|
||||
FAT_TYPES_LINE #0080, 32768, FAT16 ; 2048..4096 Mb
|
||||
FAT_TYPES_LINE #0040, 16384, FAT16 ; 1023..2048 Mb
|
||||
FAT_TYPES_LINE #0020, 8192, FAT16 ; 511..1023 Mb
|
||||
FAT_TYPES_LINE #0010, 4096, FAT16 ; 256..511 Mb
|
||||
FAT_TYPES_LINE #0008, 2048, FAT16 ; 128..256 Mb
|
||||
FAT_TYPES_LINE #0004, 1024, FAT16 ; 64..128 Mb
|
||||
FAT_TYPES_LINE #0002, 512, FAT16 ; 32..64 Mb
|
||||
FAT_TYPES: FAT_TYPES_LINE #0800, 32768, CONSTANTS.FAT32 ; > 32768
|
||||
FAT_TYPES_LINE #0400, 16384, CONSTANTS.FAT32 ; 16384..32768 Mb
|
||||
FAT_TYPES_LINE #0200, 8192, CONSTANTS.FAT32 ; 8192..16384 Mb
|
||||
FAT_TYPES_LINE #0100, 4096, CONSTANTS.FAT32 ; 4096..8192 Mb
|
||||
FAT_TYPES_LINE #0080, 32768, CONSTANTS.FAT16 ; 2048..4096 Mb
|
||||
FAT_TYPES_LINE #0040, 16384, CONSTANTS.FAT16 ; 1023..2048 Mb
|
||||
FAT_TYPES_LINE #0020, 8192, CONSTANTS.FAT16 ; 511..1023 Mb
|
||||
FAT_TYPES_LINE #0010, 4096, CONSTANTS.FAT16 ; 256..511 Mb
|
||||
FAT_TYPES_LINE #0008, 2048, CONSTANTS.FAT16 ; 128..256 Mb
|
||||
FAT_TYPES_LINE #0004, 1024, CONSTANTS.FAT16 ; 64..128 Mb
|
||||
FAT_TYPES_LINE #0002, 512, CONSTANTS.FAT16 ; 32..64 Mb
|
||||
; ¥á«¨ ¬¥ìè¥, â® FAT12
|
||||
.LineSize EQU 5
|
||||
.Records EQU ($ - FAT_TYPES)/.LineSize
|
||||
@ -51,7 +56,7 @@ VARIABLES EQU $
|
||||
;.FatHDD_ReservedSectors WORD 8
|
||||
;.Fat32_ReservedSectors WORD 32
|
||||
.ReservedSectors WORD 0 ; [ ]
|
||||
.RootDirSectors WORD 0 ; [ ]
|
||||
.RootDirSectors D24 0 ; [ ]
|
||||
.NotUsedSpace BYTE 0 ; in sectors
|
||||
.total_clusters_L: WORD 0 ; [x]
|
||||
.total_clusters_H: WORD 0 ; [x]
|
||||
@ -111,7 +116,7 @@ FAT_PARAMETERS:
|
||||
.SectorsPerCluster: BYTE 0 ; [x]
|
||||
.RESERVED_SECTORS: WORD 0 ; [x]
|
||||
.Number_of_FATs: BYTE 2 ; predefined ; [x]
|
||||
.FilesInRootDIR: WORD 0 ; FAT32 constant ; [ ] FAT ; [x] FAT32
|
||||
.FilesInRootDIR: WORD 0 ; FAT32 constant ; [x]
|
||||
.SectorsPerDrive: WORD 0 ; FAT32 constant ; [x] +-
|
||||
.DRIVE_TYPE: BYTE 0 ; ; [x] +-
|
||||
.SectorsPerFAT16: WORD 0 ; FAT32 constant ; [x]
|
||||
|
||||
@ -52,6 +52,27 @@ DEBCxA: LD HL,0
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
AHL_RL_B: SLA L
|
||||
RL H
|
||||
RLA
|
||||
JP C,STOP_ERROR
|
||||
DJNZ AHL_RL_B
|
||||
RET
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
AHL_RR_B: AND A
|
||||
.loop: RRA
|
||||
RR H
|
||||
RR L
|
||||
JP C,STOP_ERROR
|
||||
DJNZ .loop
|
||||
RET
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
;HLIX/BC -> HLIX remainder DE
|
||||
HLIX_div_BC: EX DE,HL
|
||||
|
||||
@ -112,7 +112,7 @@ MAKE_AUTO: LD (STOP_ERROR.Save_SP),SP
|
||||
CALCULATE_FAT: CALL .STEP1 ; íâ ¤®«¦ ¡ëâì ®¡é¥© ¤«ï § ¯®«¥¨ï £¥®¬¥âਨ ¤¨áª
|
||||
; €¢â®¬ â¨ç¥áª¨© ¢ë¡®à FAT_TYPE, RESERVED_SECTORS, SectorsPerCluster
|
||||
CALL .STEP2
|
||||
; ¤ «ìè¥ ãáâ ¢«¨¢ ¥¬ £¥®¬¥âà¨î. “¦¥ ¤®«¦¥ ¡ëâì ¢ë¡à ⨯ FAT
|
||||
; RESERVED_SECTORS, RootDir, ¤ «ìè¥ ãáâ ¢«¨¢ ¥¬ £¥®¬¥âà¨î. “¦¥ ¤®«¦¥ ¡ëâì ¢ë¡à ⨯ FAT
|
||||
CALL .STEP3
|
||||
CALL MAKE_SERIAL
|
||||
RET
|
||||
@ -177,7 +177,7 @@ CALCULATE_FAT: CALL .STEP1 ;
|
||||
|
||||
|
||||
;--------------;
|
||||
; €¢â®¬ â¨ç¥áª¨© ¢ë¡®à FAT_TYPE, RESERVED_SECTORS, SectorsPerCluster
|
||||
; €¢â®¬ â¨ç¥áª¨© ¢ë¡®à FAT_TYPE, SectorsPerCluster
|
||||
.STEP2: CALL AUTO_CHOOSE_FAT_PARAMS
|
||||
JR C,STOP_ERROR
|
||||
;
|
||||
@ -204,57 +204,7 @@ CALCULATE_FAT: CALL .STEP1 ;
|
||||
JR C,STOP_ERROR
|
||||
;
|
||||
LD (FAT_PARAMETERS.SectorsPerCluster),A
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
TODO
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
LD A,(VARIABLES.FAT_TYPE)
|
||||
CP CONSTANTS.FAT32
|
||||
LD HL,CONSTANTS.FAT_ReservedSectors.FAT32
|
||||
JR Z,.set_RS
|
||||
;
|
||||
LD A,(KEYS_PARAMETERS.FilesInRootDIR + KEYS_PARAMETERS.Status)
|
||||
AND A
|
||||
LD HL,(KEYS_PARAMETERS.FilesInRootDIR + KEYS_PARAMETERS.Data)
|
||||
JR NZ,.set_RS
|
||||
;
|
||||
LD A,(FAT_PARAMETERS.BPB_PHISICAL_DRIVE_NUMBER)
|
||||
SRL A
|
||||
LD HL,CONSTANTS.FAT_ReservedSectors.FDD
|
||||
JR Z,.set_RS
|
||||
LD HL,CONSTANTS.FAT_ReservedSectors.HDD
|
||||
|
||||
|
||||
|
||||
|
||||
LD HL,CONSTANTS.FAT_ReservedSectors.HDD
|
||||
JR Z,.next_RS
|
||||
LD HL,CONSTANTS.FAT_ReservedSectors.HDD
|
||||
|
||||
;
|
||||
;
|
||||
LD HL,CONSTANTS.FAT_ReservedSectors.HDD
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.set_RS: LD (VARIABLES.ReservedSectors),HL
|
||||
LD (FAT_PARAMETERS.RESERVED_SECTORS),HL
|
||||
|
||||
|
||||
RET
|
||||
;
|
||||
.choose_RS: LD HL,CONSTANTS.FAT_ReservedSectors.FDD
|
||||
|
||||
;--------------;
|
||||
|
||||
|
||||
@ -274,11 +224,16 @@ CALCULATE_FAT: CALL .STEP1 ;
|
||||
; FAT_PARAMETERS.DRIVE_TYPE
|
||||
; FAT_PARAMETERS.SectorsPerFAT16
|
||||
; FAT_PARAMETERS.SectorsPerFAT32
|
||||
; FAT_PARAMETERS.RESERVED_SECTORS
|
||||
; FAT_PARAMETERS.FilesInRootDIR
|
||||
.STEP3: CALL GET_DRIVE_TYPE
|
||||
JR C,STOP_ERROR
|
||||
;
|
||||
LD A,B
|
||||
LD (FAT_PARAMETERS.DRIVE_TYPE),A
|
||||
;
|
||||
CALL SET_RESERVED_AND_ROOTDIR
|
||||
;
|
||||
LD HL,(FAT_PARAMETERS.SectorsPerDrive)
|
||||
LD A,H
|
||||
OR L
|
||||
@ -292,6 +247,7 @@ CALCULATE_FAT: CALL .STEP1 ;
|
||||
LD HL,(CALC_TOTAL_CLUSTERS.fat_size_l)
|
||||
LD A,(VARIABLES.FAT_TYPE)
|
||||
CP CONSTANTS.FAT32
|
||||
LD DE,"32"
|
||||
JR Z,.it_is_fat32
|
||||
;
|
||||
LD (FAT_PARAMETERS.SectorsPerFAT16),HL
|
||||
@ -322,15 +278,45 @@ STOP_ERROR:
|
||||
; (VARIABLES.total_clusters_H)
|
||||
; (CALC_TOTAL_CLUSTERS.fat_size_l)
|
||||
; (CALC_TOTAL_CLUSTERS.fat_size_h)
|
||||
|
||||
CALC_TOTAL_CLUSTERS:
|
||||
; calc rootdir sectors
|
||||
LD A,(VARIABLES.FAT_TYPE)
|
||||
SUB CONSTANTS.FAT32
|
||||
LD B,A
|
||||
LD C,A
|
||||
JR Z,
|
||||
|
||||
JR Z,.no_root_dir
|
||||
; calc rootdir sectors
|
||||
LD HL,(FAT_PARAMETERS.FilesInRootDIR)
|
||||
XOR A
|
||||
LD B,5 ; AHL<<5 = AHL*32
|
||||
CALL AHL_RL_B
|
||||
; B=0
|
||||
PUSH HL
|
||||
POP IX
|
||||
LD H,B
|
||||
LD L,A
|
||||
LD BC,(FAT_PARAMETERS.BytesPerSector)
|
||||
;HLIX/BC -> HLIX remainder DE
|
||||
CALL HLIX_div_BC
|
||||
LD A,D
|
||||
OR E
|
||||
JR Z,.no_plus_one
|
||||
;
|
||||
LD BC,1
|
||||
ADD IX,BC
|
||||
DEC C
|
||||
ADC HL,BC
|
||||
.no_plus_one: ; HL:IX - rootdir sectors
|
||||
LD (VARIABLES.RootDirSectors),IX
|
||||
LD A,L
|
||||
LD (VARIABLES.RootDirSectors + 2),A
|
||||
; ª®à४â¨à㥬 § 票¥ FilesInRootDIR
|
||||
LD BC,(FAT_PARAMETERS.BytesPerSector)
|
||||
LD DE,(VARIABLES.RootDirSectors)
|
||||
CALL MUL32_POWER2
|
||||
LD A,L
|
||||
EX DE,HL
|
||||
LD B,5 ; AHL>>5 = AHL/32
|
||||
CALL AHL_RR_B
|
||||
LD (FAT_PARAMETERS.FilesInRootDIR),HL
|
||||
.no_root_dir: ;
|
||||
.t_sec_h+1: LD DE,0
|
||||
.t_sec_l+1: LD HL,0
|
||||
; data_sectors
|
||||
@ -343,7 +329,7 @@ CALC_TOTAL_CLUSTERS:
|
||||
AND A
|
||||
DEC DE
|
||||
.skip_dec_DE: ; DE:HL = total_sectors - reserved_sectors
|
||||
PUSH DE
|
||||
.push_regs: PUSH DE
|
||||
PUSH HL
|
||||
;num_fats * fat_sz32; fat_sz32 ¢ ª« áâ¥à å
|
||||
.fat_size_l+1: LD BC,0
|
||||
@ -357,13 +343,14 @@ CALC_TOTAL_CLUSTERS:
|
||||
POP DE
|
||||
;num_fats * fat_sz32 = BCDE
|
||||
;
|
||||
LD HL,(VARIABLES.RootDirSectors) ; !FIXIT ¯¨á âì ¯à®æ¥¤ãàã ¢ëç¨á«¥¨ï RootDirSectors ¤® ¢ë§®¢ í⮩
|
||||
LD HL,(VARIABLES.RootDirSectors)
|
||||
ADD HL,DE
|
||||
JR NC,.skip_inc
|
||||
;
|
||||
AND A
|
||||
INC BC
|
||||
.skip_inc: EX DE,HL
|
||||
EX DE,HL
|
||||
LD HL,(VARIABLES.RootDirSectors + 2)
|
||||
LD H,0
|
||||
ADC HL,BC
|
||||
LD B,H
|
||||
LD C,L
|
||||
;num_fats * fat_sz32 + root_dir_sectors = BC:DE
|
||||
;
|
||||
POP HL
|
||||
@ -439,13 +426,83 @@ CALC_TOTAL_CLUSTERS:
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
;!TODO ¤®¤¥« âì ¤«ï ¤¨áª¥â
|
||||
SET_RESERVED_AND_ROOTDIR:
|
||||
LD A,(VARIABLES.FAT_TYPE)
|
||||
CP CONSTANTS.FAT32
|
||||
JR Z,.for_fat32
|
||||
; FAT12_16
|
||||
; ‘â ¢¨¬ ¤¥ä®«âë¥ § 票ï
|
||||
LD A,(FAT_PARAMETERS.DRIVE_TYPE)
|
||||
CP BOOT_SECTOR.Hard_Drive
|
||||
LD HL,CONSTANTS.FAT_ReservedSectors.HDD
|
||||
LD DE,CONSTANTS.FilesInRootDIR.HDD
|
||||
JR Z,.set_vars
|
||||
; #F0
|
||||
CP BOOT_SECTOR.Floppy_3x5_1x44
|
||||
LD HL,CONSTANTS.FAT_ReservedSectors.FDD
|
||||
LD DE,CONSTANTS.FilesInRootDIR.FDD_HD
|
||||
JR Z,.set_vars
|
||||
; #F9
|
||||
LD A,(VARIABLES.DriveExtendedParameters)
|
||||
RLA
|
||||
JR C,.set_vars ; 5.25 / 1200
|
||||
; 720
|
||||
LD DE,CONSTANTS.FilesInRootDIR.FDD_DD
|
||||
.set_vars: CALL .ChooseReserved
|
||||
EX DE,HL
|
||||
CALL .ChooseFilesInRootDIR
|
||||
RET
|
||||
;
|
||||
.for_fat32: LD A,(KEYS_PARAMETERS.FilesInRootDIR + KEYS_PARAMETERS.Status)
|
||||
DEC A
|
||||
JR NZ,.set_for_fat32
|
||||
;
|
||||
LD A,KEYS_PARAMETERS.Status.Ignored
|
||||
LD (KEYS_PARAMETERS.FilesInRootDIR + KEYS_PARAMETERS.Status),A
|
||||
.set_for_fat32: LD HL,CONSTANTS.FAT_ReservedSectors.FAT32
|
||||
LD DE,CONSTANTS.FilesInRootDIR.HDD
|
||||
JR .set_vars
|
||||
;
|
||||
;
|
||||
.ChooseFilesInRootDIR:
|
||||
LD A,(KEYS_PARAMETERS.FilesInRootDIR + KEYS_PARAMETERS.Status)
|
||||
DEC A
|
||||
JR NZ,.noChangeRootDir
|
||||
;
|
||||
LD HL,(KEYS_PARAMETERS.FilesInRootDIR + KEYS_PARAMETERS.Data)
|
||||
.noChangeRootDir:
|
||||
LD (FAT_PARAMETERS.FilesInRootDIR),HL
|
||||
RET
|
||||
;
|
||||
;
|
||||
.ChooseReserved:
|
||||
LD A,(KEYS_PARAMETERS.RESERVED_SECTORS + KEYS_PARAMETERS.Status)
|
||||
DEC A
|
||||
JR NZ,.noChangeReserved
|
||||
;
|
||||
LD HL,(KEYS_PARAMETERS.RESERVED_SECTORS + KEYS_PARAMETERS.Data)
|
||||
.noChangeReserved:
|
||||
LD (FAT_PARAMETERS.RESERVED_SECTORS),HL
|
||||
RET
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
GET_DRIVE_TYPE: LD A,(FAT_PARAMETERS.BPB_PHISICAL_DRIVE_NUMBER)
|
||||
CP DRIVE_CODES.SPRINTER.ATA
|
||||
AND A ; DRIVE_CODES.SPRINTER.FDD
|
||||
LD B,BOOT_SECTOR.Hard_Drive
|
||||
RET NZ
|
||||
; FDD
|
||||
LD A,(VARIABLES.DriveExtendedParameters)
|
||||
RLA
|
||||
LD B,BOOT_SECTOR.Floppy_3x5_720
|
||||
RET NC
|
||||
;
|
||||
AND %0000'1000
|
||||
LD B,BOOT_SECTOR.Floppy_3x5_1x44
|
||||
RET Z
|
||||
; ¤¨áª¥âë ¨ ª®£¤ -¨¡ã¤ì ATAPI
|
||||
SCF
|
||||
;
|
||||
LD B,BOOT_SECTOR.Floppy_8_1x20
|
||||
RET
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
@ -630,7 +687,7 @@ FORMAT_DRIVE: CALL CLEAN_SECTOR_BUFFER
|
||||
.loop32: INC HL
|
||||
LD (HL),E
|
||||
DJNZ .loop32
|
||||
INC Hl
|
||||
INC HL
|
||||
LD (HL),D
|
||||
; EX DE,HL
|
||||
; ;LD DE,SECTOR_BUFFER + 3
|
||||
|
||||
Loading…
Reference in New Issue
Block a user