mirror of
https://github.com/Tolik-Trek/FORMAT.git
synced 2026-06-15 09:21:40 +03:00
...
This commit is contained in:
parent
ee29a4c7b0
commit
ee38a525f0
@ -2,6 +2,20 @@
|
|||||||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ DATA ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ DATA ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||||||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
MODULE CONSTANTS
|
||||||
|
FAT16 EQU 2 ; § ®¤® ¨ ¬®¦¨â¥«ì
|
||||||
|
FAT12 EQU 3 ; § ®¤® ¨ ¬®¦¨â¥«ì
|
||||||
|
FAT32 EQU 4 ; § ®¤® ¨ ¬®¦¨â¥«ì
|
||||||
|
;
|
||||||
|
FAT_ReservedSectors:
|
||||||
|
.FDD EQU 1
|
||||||
|
.HDD EQU 8
|
||||||
|
.FAT32 EQU 32
|
||||||
|
ENDMODULE
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
;-----------------------------------------------------------------------
|
;-----------------------------------------------------------------------
|
||||||
MACRO FAT_TYPES_LINE vol_size, clu_size, fat_type
|
MACRO FAT_TYPES_LINE vol_size, clu_size, fat_type
|
||||||
WORD vol_size, clu_size
|
WORD vol_size, clu_size
|
||||||
@ -9,9 +23,6 @@
|
|||||||
ENDM
|
ENDM
|
||||||
|
|
||||||
MODULE TABLES
|
MODULE TABLES
|
||||||
FAT12 EQU 3
|
|
||||||
FAT16 EQU 2
|
|
||||||
FAT32 EQU 4
|
|
||||||
; VOL SIZE CLUSTER SIZE FAT TYPE
|
; VOL SIZE CLUSTER SIZE FAT TYPE
|
||||||
FAT_TYPES: FAT_TYPES_LINE #0800, 32768, FAT32 ; > 32768
|
FAT_TYPES: FAT_TYPES_LINE #0800, 32768, FAT32 ; > 32768
|
||||||
FAT_TYPES_LINE #0400, 16384, FAT32 ; 16384..32768 Mb
|
FAT_TYPES_LINE #0400, 16384, FAT32 ; 16384..32768 Mb
|
||||||
@ -33,33 +44,57 @@ FAT_TYPES: FAT_TYPES_LINE #0800, 32768, FAT32 ; > 32768
|
|||||||
|
|
||||||
;-----------------------------------------------------------------------
|
;-----------------------------------------------------------------------
|
||||||
VARIABLES EQU $
|
VARIABLES EQU $
|
||||||
.FAT_TYPE BYTE TABLES.FAT12 ; [x]
|
.FAT_TYPE BYTE CONSTANTS.FAT12 ; [x]
|
||||||
.CurrentDrive DB 0
|
.CurrentDrive DB 0 ; [x]
|
||||||
.VOLUME_SIZE_BYTES BLOCK 5,0
|
.VOLUME_SIZE_BYTES BLOCK 5,0 ; [ ]
|
||||||
.FatFDD_ReservedSectors WORD 1
|
;.FatFDD_ReservedSectors WORD 1
|
||||||
.FatHDD_ReservedSectors WORD 8
|
;.FatHDD_ReservedSectors WORD 8
|
||||||
.Fat32_ReservedSectors WORD 32
|
;.Fat32_ReservedSectors WORD 32
|
||||||
.RootDirSectors WORD 0
|
.ReservedSectors WORD 0 ; [ ]
|
||||||
|
.RootDirSectors WORD 0 ; [ ]
|
||||||
.NotUsedSpace BYTE 0 ; in sectors
|
.NotUsedSpace BYTE 0 ; in sectors
|
||||||
.total_clusters_L: WORD 0
|
.total_clusters_L: WORD 0 ; [x]
|
||||||
.total_clusters_H: WORD 0
|
.total_clusters_H: WORD 0 ; [x]
|
||||||
.FAT32_RootDirClusters WORD 1
|
.FAT32_RootDirClusters WORD 1 ; [ ]
|
||||||
.FAT.LABEL BYTE 'NO_LABEL '
|
.FAT.LABEL BYTE 'NO_LABEL ' ; [ ]
|
||||||
.DriveExtendedParameters BYTE 0
|
.DriveExtendedParameters BYTE 0 ; [ ]
|
||||||
|
.DataSectors_L WORD 0 ; [ ]
|
||||||
|
.DataSectors_H WORD 0 ; [ ]
|
||||||
|
.RootDirFirstSector_L WORD 0 ; [x] ¢ëç¨á«ï¥âáï ¢ FORMAT_DRIVE
|
||||||
|
.RootDirFirstSector_H WORD 0 ; [x] ¢ëç¨á«ï¥âáï ¢ FORMAT_DRIVE
|
||||||
;-----------------------------------------------------------------------
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
;-----------------------------------------------------------------------
|
;-----------------------------------------------------------------------
|
||||||
; Š«îç ¢ëáâ ¢«¥ : „¥ä®«â®¥ § 票¥
|
; ‘â âãá ª«îç : Š«îç : ‡ 票¥
|
||||||
KEYS_PARAMETERS EQU $
|
KEYS_PARAMETERS EQU $
|
||||||
.ONLY_HELP BYTE 0 : BYTE 0 ; [ ] /? ; ¢ë¢®¤ á¯à ¢ª¨
|
.ONLY_HELP BYTE 0 : BYTE '?' : WORD 0 ; [ ] BYTE ; ¢ë¢®¤ á¯à ¢ª¨
|
||||||
.FAT_TYPE BYTE 0 : BYTE TABLES.FAT12 ; [ ] /t ;
|
.FAT_TYPE BYTE 0 : BYTE 't' : WORD CONSTANTS.FAT12 ; [ ] BYTE ;
|
||||||
.BytesPerSector BYTE 0 : WORD #200 ; [ ] /s ;
|
.SectorsPerCluster: BYTE 0 : BYTE 'c' : WORD 0 ; [ ] BYTE ;
|
||||||
.SectorsPerCluster: BYTE 0 : BYTE 0 ; [ ] /c ;
|
.FilesInRootDIR: BYTE 0 : BYTE 'd' : WORD 0 ; [ ] WORD ;
|
||||||
.Number_of_FATs: BYTE 0 : BYTE 2 ; [ ] /n ;
|
.Number_of_FATs: BYTE 0 : BYTE 'n' : WORD 2 ; [ ] BYTE ;
|
||||||
.FilesInRootDIR: BYTE 0 : WORD 0 ; [ ] /d ;
|
.RESERVED_SECTORS: BYTE 0 : BYTE 'r' : WORD 0 ; [ ] WORD ;
|
||||||
.RESERVED_SECTORS: BYTE 0 : WORD 0 ; [ ] /r ;
|
.LOW_FORMAT BYTE 0 : BYTE 'l' : WORD 0 ; [ ] BYTE ; ¤«ï ¤¨áª¥â
|
||||||
.LOW_FORMAT BYTE 0 : BYTE 0 ; [ ] /l ; ¤«ï ¤¨áª¥â
|
.BytesPerSector BYTE 0 : BYTE 's' : WORD #200 ; [ ] WORD ;
|
||||||
|
; á¬¥é¥¨ï ¤ ë¥
|
||||||
|
.Status EQU 0
|
||||||
|
.Key EQU 1
|
||||||
|
.Data EQU 2
|
||||||
|
; áâ âãá
|
||||||
|
.Status.Off EQU 0
|
||||||
|
.Status.On EQU 0
|
||||||
|
.Status.Ignored EQU 0
|
||||||
|
; ‘â âãá ª«îç :
|
||||||
|
; 0 - ¥ ãáâ ®¢«¥
|
||||||
|
; 1 - ãáâ ®¢«¥
|
||||||
|
; 2 - ¨£®à¨àã¥âáï
|
||||||
|
/*
|
||||||
|
FilesInRootDIR
|
||||||
|
„«ï ⮬®¢ FAT12 ¨ FAT16 íâ® § 票¥ ¢á¥£¤ ¤®«¦® 㪠§ë¢ âì
|
||||||
|
ª®«¨ç¥á⢮, ª®â®à®¥ ¯à¨ 㬮¦¥¨¨ 32 ¤ ¥â ç¥â®¥ ç¨á«®, ªà ⮥
|
||||||
|
BPB_BytsPerSec. „«ï ¬ ªá¨¬ «ì®© ᮢ¬¥á⨬®á⨠¤«ï ⮬®¢ FAT16 á«¥¤ã¥â
|
||||||
|
¨á¯®«ì§®¢ âì § 票¥ 512.
|
||||||
|
*/
|
||||||
;-----------------------------------------------------------------------
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
@ -117,10 +152,12 @@ FAT_PARAMETERS:
|
|||||||
; SHARED
|
; SHARED
|
||||||
.PART3_SHARED EQU $
|
.PART3_SHARED EQU $
|
||||||
;
|
;
|
||||||
.FAT.EXT_BOOT_REC_SIGNATURE BYTE #29 ; constant ;
|
.EXT_BOOT_REC_SIGNATURE BYTE #29 ; constant ;
|
||||||
.FAT.SERIAL_NUMBER DWORD 0 ; [ ]
|
.SERIAL_NUMBER_1 WORD 0 ; [x]
|
||||||
.FAT.LABEL DB 'NO_LABEL ' ; [ ] ;!TODO ¤®¯®«¨â¥«ì® ¯¨á âì ¢ ª®à¥¢ãî ¤¨à¥ªâ®à¨î
|
.SERIAL_NUMBER_2 WORD 0 ; [x]
|
||||||
.ID_FAT DB 'FAT32 ' ;
|
.LABEL DB 'NO_LABEL ' ; [x]
|
||||||
|
.LABEL.Size EQU $-.LABEL
|
||||||
|
.ID_FAT DB 'FAT32 ' ; [ ]
|
||||||
.PART3_SHARED_SIZE EQU $ - .PART3_SHARED
|
.PART3_SHARED_SIZE EQU $ - .PART3_SHARED
|
||||||
;-----------------------------------------------------------------------
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
@ -69,7 +69,7 @@ main: DI
|
|||||||
CALL prepare
|
CALL prepare
|
||||||
JR NC,.ok_drive
|
JR NC,.ok_drive
|
||||||
;
|
;
|
||||||
CALL FAT32_FORMAT
|
CALL DSS_DRIVE_FORMAT
|
||||||
;
|
;
|
||||||
LD A,"\a" ; bell
|
LD A,"\a" ; bell
|
||||||
SYS ESTEX_pchar
|
SYS ESTEX_pchar
|
||||||
@ -204,6 +204,7 @@ init_fat: LD HL,buff
|
|||||||
LD (HL),0xff
|
LD (HL),0xff
|
||||||
INC HL
|
INC HL
|
||||||
LD A,(fat12_flg)
|
LD A,(fat12_flg)
|
||||||
|
OR A
|
||||||
RET NZ
|
RET NZ
|
||||||
LD (HL),0xff ;0xfff8, 0xffff for FAT16
|
LD (HL),0xff ;0xfff8, 0xffff for FAT16
|
||||||
RET
|
RET
|
||||||
|
|||||||
@ -66,27 +66,55 @@ reserved_sectors = ( ((.HIDDEN + min_last_sector) & #0F)>0 ) * #10) - .HIDDEN
|
|||||||
|
|
||||||
|
|
||||||
; DSS Drive Formatter
|
; DSS Drive Formatter
|
||||||
FAT32_FORMAT:
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
DSS_DRIVE_FORMAT:
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
LD A,(KEYS_PARAMETERS.FAT_TYPE + KEYS_PARAMETERS.Status)
|
||||||
|
LD C,A
|
||||||
|
; ¯à®¢¥àª § âã¯
|
||||||
|
LD A,(KEYS_PARAMETERS.FilesInRootDIR + KEYS_PARAMETERS.Status)
|
||||||
|
AND A
|
||||||
|
JR Z,.no_zatup
|
||||||
|
;
|
||||||
|
LD A,C
|
||||||
|
OR A
|
||||||
|
JR Z,.no_zatup
|
||||||
|
;
|
||||||
|
LD A,(KEYS_PARAMETERS.FAT_TYPE + KEYS_PARAMETERS.Data)
|
||||||
|
CP CONSTANTS.FAT32
|
||||||
|
JR NZ,.no_zatup
|
||||||
|
;
|
||||||
|
LD A,KEYS_PARAMETERS.Status.Ignored
|
||||||
|
LD (KEYS_PARAMETERS.FilesInRootDIR + KEYS_PARAMETERS.Status),A
|
||||||
|
.no_zatup: ; ¯à®¢¥àª ¢â®-à áçñâ
|
||||||
|
LD A,(KEYS_PARAMETERS.SectorsPerCluster + KEYS_PARAMETERS.Status)
|
||||||
|
OR C
|
||||||
|
JR Z,MAKE_AUTO
|
||||||
|
;
|
||||||
|
; !TODO
|
||||||
|
;
|
||||||
MAKE_AUTO: LD (STOP_ERROR.Save_SP),SP
|
MAKE_AUTO: LD (STOP_ERROR.Save_SP),SP
|
||||||
;!FIXIT
|
;!FIXIT
|
||||||
LD A,(FMTDISK)
|
LD A,(FMTDISK)
|
||||||
LD (VARIABLES.CurrentDrive),A
|
LD (VARIABLES.CurrentDrive),A
|
||||||
;
|
;
|
||||||
|
|
||||||
CALL CALCULATE_FAT
|
CALL CALCULATE_FAT
|
||||||
CALL FORMAT_DRIVE
|
CALL FORMAT_DRIVE
|
||||||
|
CALL MAKE_LABEL_IN_DIR
|
||||||
;!FIXIT
|
;!FIXIT
|
||||||
;CALL MAKE_ROOT_DIR_LABEL ; ¯¥à¢ ï § ¯¨áì ¢ root dir - ¬¥âª , ¯®â®¬ 㫨
|
;CALL MAKE_ROOT_DIR_LABEL ; ¯¥à¢ ï § ¯¨áì ¢ root dir - ¬¥âª , ¯®â®¬ 㫨
|
||||||
RET
|
RET
|
||||||
|
|
||||||
;-----------------------------------------------------------------------
|
;-----------------------------------------------------------------------
|
||||||
; Ž¯à¥¤¥«¥¨¥ ¯ à ¬¥â஢ ®á¨â¥«ï ¨ ¢ë¡®à FAT
|
; €¢â®¬ â¨ç¥áª®¥ ¯à¥¤¥«¥¨¥ ¯ à ¬¥â஢ ®á¨â¥«ï ¨ ¢ë¡®à FAT
|
||||||
CALCULATE_FAT: CALL .STEP1 ; íâ ¤®«¦ ¡ëâì ®¡é¥© ¤«ï § ¯®«¥¨ï £¥®¬¥âਨ ¤¨áª
|
CALCULATE_FAT: CALL .STEP1 ; íâ ¤®«¦ ¡ëâì ®¡é¥© ¤«ï § ¯®«¥¨ï £¥®¬¥âਨ ¤¨áª
|
||||||
; €¢â®¬ â¨ç¥áª¨© ¢ë¡®à FAT_TYPE, RESERVED_SECTORS, SectorsPerCluster
|
; €¢â®¬ â¨ç¥áª¨© ¢ë¡®à FAT_TYPE, RESERVED_SECTORS, SectorsPerCluster
|
||||||
CALL .STEP2
|
CALL .STEP2
|
||||||
; ¤ «ìè¥ ãáâ ¢«¨¢ ¥¬ £¥®¬¥âà¨î. “¦¥ ¤®«¦¥ ¡ëâì ¢ë¡à ⨯ FAT
|
; ¤ «ìè¥ ãáâ ¢«¨¢ ¥¬ £¥®¬¥âà¨î. “¦¥ ¤®«¦¥ ¡ëâì ¢ë¡à ⨯ FAT
|
||||||
CALL .STEP3
|
CALL .STEP3
|
||||||
|
CALL MAKE_SERIAL
|
||||||
RET
|
RET
|
||||||
;--------------;
|
;--------------;
|
||||||
|
|
||||||
@ -141,7 +169,7 @@ CALCULATE_FAT: CALL .STEP1 ;
|
|||||||
LD (FAT_PARAMETERS.BytesPerSector),BC
|
LD (FAT_PARAMETERS.BytesPerSector),BC
|
||||||
; à §¬¥à ¤¨áª ¢ ¡ ©â å EDLHA
|
; à §¬¥à ¤¨áª ¢ ¡ ©â å EDLHA
|
||||||
CALL MUL32_POWER2
|
CALL MUL32_POWER2
|
||||||
LD (VARIABLES.VOLUME_SIZE_BYTES),DE
|
LD (VARIABLES.VOLUME_SIZE_BYTES),DE ; !FIXIT ¡ ©â ¨§ E ¥ ¨á¯®«ì§ã¥âáï
|
||||||
LD (VARIABLES.VOLUME_SIZE_BYTES + 2),HL
|
LD (VARIABLES.VOLUME_SIZE_BYTES + 2),HL
|
||||||
LD (VARIABLES.VOLUME_SIZE_BYTES + 4),A
|
LD (VARIABLES.VOLUME_SIZE_BYTES + 4),A
|
||||||
RET
|
RET
|
||||||
@ -155,15 +183,15 @@ CALCULATE_FAT: CALL .STEP1 ;
|
|||||||
;
|
;
|
||||||
LD A,C
|
LD A,C
|
||||||
LD (VARIABLES.FAT_TYPE),A
|
LD (VARIABLES.FAT_TYPE),A
|
||||||
CP TABLES.FAT32
|
;CP CONSTANTS.FAT32
|
||||||
LD HL,(VARIABLES.Fat32_ReservedSectors)
|
;LD HL,CONSTANTS.FAT_ReservedSectors.FAT32
|
||||||
JR Z,.set_reserved_s
|
;JR Z,.set_reserved_s
|
||||||
;
|
;
|
||||||
;!FIXIT ¯à®¢¥àª FDD/HDD
|
;!FIXIT ¯à®¢¥àª FDD/HDD
|
||||||
LD HL,(VARIABLES.FatHDD_ReservedSectors)
|
;LD HL,CONSTANTS.FAT_ReservedSectors.HDD
|
||||||
;
|
;
|
||||||
.set_reserved_s:
|
.set_reserved_s:
|
||||||
LD (FAT_PARAMETERS.RESERVED_SECTORS),HL
|
;LD (FAT_PARAMETERS.RESERVED_SECTORS),HL
|
||||||
LD HL,(FAT_PARAMETERS.BytesPerSector)
|
LD HL,(FAT_PARAMETERS.BytesPerSector)
|
||||||
DEC HL
|
DEC HL
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
@ -176,7 +204,57 @@ CALCULATE_FAT: CALL .STEP1 ;
|
|||||||
JR C,STOP_ERROR
|
JR C,STOP_ERROR
|
||||||
;
|
;
|
||||||
LD (FAT_PARAMETERS.SectorsPerCluster),A
|
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
|
RET
|
||||||
|
;
|
||||||
|
.choose_RS: LD HL,CONSTANTS.FAT_ReservedSectors.FDD
|
||||||
|
|
||||||
;--------------;
|
;--------------;
|
||||||
|
|
||||||
|
|
||||||
@ -213,7 +291,7 @@ CALCULATE_FAT: CALL .STEP1 ;
|
|||||||
CALL CALC_TOTAL_CLUSTERS
|
CALL CALC_TOTAL_CLUSTERS
|
||||||
LD HL,(CALC_TOTAL_CLUSTERS.fat_size_l)
|
LD HL,(CALC_TOTAL_CLUSTERS.fat_size_l)
|
||||||
LD A,(VARIABLES.FAT_TYPE)
|
LD A,(VARIABLES.FAT_TYPE)
|
||||||
CP TABLES.FAT32
|
CP CONSTANTS.FAT32
|
||||||
JR Z,.it_is_fat32
|
JR Z,.it_is_fat32
|
||||||
;
|
;
|
||||||
LD (FAT_PARAMETERS.SectorsPerFAT16),HL
|
LD (FAT_PARAMETERS.SectorsPerFAT16),HL
|
||||||
@ -246,6 +324,13 @@ STOP_ERROR:
|
|||||||
; (CALC_TOTAL_CLUSTERS.fat_size_h)
|
; (CALC_TOTAL_CLUSTERS.fat_size_h)
|
||||||
|
|
||||||
CALC_TOTAL_CLUSTERS:
|
CALC_TOTAL_CLUSTERS:
|
||||||
|
; calc rootdir sectors
|
||||||
|
LD A,(VARIABLES.FAT_TYPE)
|
||||||
|
SUB CONSTANTS.FAT32
|
||||||
|
LD B,A
|
||||||
|
LD C,A
|
||||||
|
JR Z,
|
||||||
|
|
||||||
.t_sec_h+1: LD DE,0
|
.t_sec_h+1: LD DE,0
|
||||||
.t_sec_l+1: LD HL,0
|
.t_sec_l+1: LD HL,0
|
||||||
; data_sectors
|
; data_sectors
|
||||||
@ -288,7 +373,8 @@ CALC_TOTAL_CLUSTERS:
|
|||||||
SBC HL,BC
|
SBC HL,BC
|
||||||
JR C,STOP_ERROR
|
JR C,STOP_ERROR
|
||||||
; data_sectors = HL:DE
|
; data_sectors = HL:DE
|
||||||
;
|
LD (VARIABLES.DataSectors_L),DE
|
||||||
|
LD (VARIABLES.DataSectors_H),HL
|
||||||
; total_clusters
|
; total_clusters
|
||||||
LD A,(FAT_PARAMETERS.SectorsPerCluster)
|
LD A,(FAT_PARAMETERS.SectorsPerCluster)
|
||||||
CALL HLDE_Div_A
|
CALL HLDE_Div_A
|
||||||
@ -309,7 +395,7 @@ CALC_TOTAL_CLUSTERS:
|
|||||||
;
|
;
|
||||||
LD BC,(FAT_PARAMETERS.BytesPerSector)
|
LD BC,(FAT_PARAMETERS.BytesPerSector)
|
||||||
LD A,(VARIABLES.FAT_TYPE)
|
LD A,(VARIABLES.FAT_TYPE)
|
||||||
CP TABLES.FAT12
|
CP CONSTANTS.FAT12
|
||||||
JR NZ,.no_sla
|
JR NZ,.no_sla
|
||||||
;
|
;
|
||||||
SLA C
|
SLA C
|
||||||
@ -409,6 +495,31 @@ AUTO_CHOOSE_FAT_PARAMS:
|
|||||||
;-----------------------------------------------------------------------
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
MAKE_SERIAL: LD C,Dss.SysTime
|
||||||
|
RST ToDSS
|
||||||
|
;
|
||||||
|
EX DE,HL
|
||||||
|
ADD IX,DE
|
||||||
|
LD (FAT_PARAMETERS.SERIAL_NUMBER_2),IX
|
||||||
|
;
|
||||||
|
LD A,D
|
||||||
|
LD D,B
|
||||||
|
XOR C
|
||||||
|
.loop: RRA
|
||||||
|
DJNZ .loop
|
||||||
|
;
|
||||||
|
LD E,H
|
||||||
|
LD H,L
|
||||||
|
LD L,E
|
||||||
|
;
|
||||||
|
LD E,A
|
||||||
|
ADD HL,DE
|
||||||
|
LD (FAT_PARAMETERS.SERIAL_NUMBER_1),HL
|
||||||
|
RET
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
;-----------------------------------------------------------------------
|
;-----------------------------------------------------------------------
|
||||||
FORMAT_DRIVE: CALL CLEAN_SECTOR_BUFFER
|
FORMAT_DRIVE: CALL CLEAN_SECTOR_BUFFER
|
||||||
;
|
;
|
||||||
@ -418,7 +529,7 @@ FORMAT_DRIVE: CALL CLEAN_SECTOR_BUFFER
|
|||||||
LDIR
|
LDIR
|
||||||
;
|
;
|
||||||
LD A,(VARIABLES.FAT_TYPE)
|
LD A,(VARIABLES.FAT_TYPE)
|
||||||
CP TABLES.FAT32
|
CP CONSTANTS.FAT32
|
||||||
;!FIXIT
|
;!FIXIT
|
||||||
JP NZ,STOP_ERROR
|
JP NZ,STOP_ERROR
|
||||||
;
|
;
|
||||||
@ -426,7 +537,7 @@ FORMAT_DRIVE: CALL CLEAN_SECTOR_BUFFER
|
|||||||
CALL CLEAN_SECTOR_BUFFER
|
CALL CLEAN_SECTOR_BUFFER
|
||||||
; clean all fat tables at drive
|
; clean all fat tables at drive
|
||||||
LD A,(VARIABLES.FAT_TYPE)
|
LD A,(VARIABLES.FAT_TYPE)
|
||||||
CP TABLES.FAT32
|
CP CONSTANTS.FAT32
|
||||||
LD BC,(FAT_PARAMETERS.SectorsPerFAT32)
|
LD BC,(FAT_PARAMETERS.SectorsPerFAT32)
|
||||||
LD DE,(FAT_PARAMETERS.SectorsPerFAT32 + 2)
|
LD DE,(FAT_PARAMETERS.SectorsPerFAT32 + 2)
|
||||||
JR Z,.its_fat32
|
JR Z,.its_fat32
|
||||||
@ -477,28 +588,55 @@ FORMAT_DRIVE: CALL CLEAN_SECTOR_BUFFER
|
|||||||
OR E
|
OR E
|
||||||
JR NZ,.write_loop
|
JR NZ,.write_loop
|
||||||
EXX
|
EXX
|
||||||
|
; HL:IX - rootdir's first sector
|
||||||
|
;
|
||||||
|
LD (VARIABLES.RootDirFirstSector_L),IX
|
||||||
|
LD (VARIABLES.RootDirFirstSector_H),HL
|
||||||
|
;
|
||||||
; make fat table
|
; make fat table
|
||||||
LD HL,(FAT_PARAMETERS.DRIVE_TYPE)
|
LD HL,SECTOR_BUFFER
|
||||||
LD H,#FF
|
LD A,(FAT_PARAMETERS.DRIVE_TYPE)
|
||||||
LD (SECTOR_BUFFER),HL
|
LD (HL),A
|
||||||
LD L,H
|
INC HL
|
||||||
LD (SECTOR_BUFFER + 2),HL
|
LD (HL),#FF
|
||||||
|
INC HL
|
||||||
|
LD (HL),#FF
|
||||||
LD A,(VARIABLES.FAT_TYPE)
|
LD A,(VARIABLES.FAT_TYPE)
|
||||||
CP TABLES.FAT12
|
CP CONSTANTS.FAT12
|
||||||
JR NZ,.not_fat12
|
JR Z,.write_fat ; fat12
|
||||||
; fat12
|
|
||||||
XOR A
|
|
||||||
LD (SECTOR_BUFFER + 3),A
|
|
||||||
JR .write_fat
|
|
||||||
;
|
;
|
||||||
.not_fat12 CP TABLES.FAT16
|
INC HL
|
||||||
JR Z,.write_fat
|
LD (HL),#FF
|
||||||
;fat32
|
JR C,.write_fat ; fat16
|
||||||
|
;
|
||||||
|
; LD HL,(FAT_PARAMETERS.DRIVE_TYPE)
|
||||||
|
; LD H,#FF
|
||||||
|
; LD (SECTOR_BUFFER),HL
|
||||||
|
; LD L,H
|
||||||
|
; LD (SECTOR_BUFFER + 2),HL
|
||||||
|
; LD A,(VARIABLES.FAT_TYPE)
|
||||||
|
; CP TABLES.FAT12
|
||||||
|
; JR C,.write_fat ; fat16
|
||||||
|
; JR NZ,.fat32
|
||||||
|
; ; fat12
|
||||||
|
; XOR A
|
||||||
|
; LD (SECTOR_BUFFER + 3),A
|
||||||
|
; JR .write_fat
|
||||||
;
|
;
|
||||||
LD HL,.Fat32Data
|
.fat32: ; fat32
|
||||||
LD DE,SECTOR_BUFFER + 3
|
LD DE,#0FFF
|
||||||
LD BC,.Fat32Data.Size
|
LD B,7
|
||||||
LDIR
|
LD (HL),D
|
||||||
|
.loop32: INC HL
|
||||||
|
LD (HL),E
|
||||||
|
DJNZ .loop32
|
||||||
|
INC Hl
|
||||||
|
LD (HL),D
|
||||||
|
; EX DE,HL
|
||||||
|
; ;LD DE,SECTOR_BUFFER + 3
|
||||||
|
; LD HL,.Fat32Data
|
||||||
|
; LD BC,.Fat32Data.Size
|
||||||
|
; LDIR
|
||||||
;
|
;
|
||||||
.write_fat: LD A,(FAT_PARAMETERS.Number_of_FATs)
|
.write_fat: LD A,(FAT_PARAMETERS.Number_of_FATs)
|
||||||
LD HL,0
|
LD HL,0
|
||||||
@ -526,8 +664,8 @@ FORMAT_DRIVE: CALL CLEAN_SECTOR_BUFFER
|
|||||||
JR NZ,.write_tbl_fat
|
JR NZ,.write_tbl_fat
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
.Fat32Data: DB #0F,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#0F
|
;.Fat32Data: DB #0F,#FF,#FF,#FF,#FF,#FF,#FF,#FF,#0F
|
||||||
.Fat32Data.Size EQU $-.Fat32Data
|
;.Fat32Data.Size EQU $-.Fat32Data
|
||||||
;-----------------------------------------------------------------------
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
@ -548,7 +686,7 @@ MAKE_SYS_SECTORS:
|
|||||||
CALL WRITE_SECTOR_BUFFER
|
CALL WRITE_SECTOR_BUFFER
|
||||||
;
|
;
|
||||||
LD A,(VARIABLES.FAT_TYPE)
|
LD A,(VARIABLES.FAT_TYPE)
|
||||||
CP TABLES.FAT32
|
CP CONSTANTS.FAT32
|
||||||
RET NZ
|
RET NZ
|
||||||
;
|
;
|
||||||
CALL CLEAN_SECTOR_BUFFER
|
CALL CLEAN_SECTOR_BUFFER
|
||||||
@ -638,6 +776,38 @@ WRITE_SECTOR_BUFFER:
|
|||||||
;-----------------------------------------------------------------------
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
; IN: HL:IX - rootdir's first sector
|
||||||
|
MAKE_LABEL_IN_DIR:
|
||||||
|
CALL CLEAN_SECTOR_BUFFER ;!FIXIT ᪮॥ ¢á¥£®, ¥ 㦮 ç¨áâ¨âì
|
||||||
|
; make directory record
|
||||||
|
LD HL,FAT_PARAMETERS.LABEL
|
||||||
|
LD DE,SECTOR_BUFFER
|
||||||
|
LD BC,FAT_PARAMETERS.LABEL.Size
|
||||||
|
LDIR
|
||||||
|
;
|
||||||
|
EX DE,HL
|
||||||
|
LD (HL),#08
|
||||||
|
LD HL,#0233
|
||||||
|
LD (SECTOR_BUFFER+22),HL
|
||||||
|
LD HL,#5C85
|
||||||
|
LD (SECTOR_BUFFER+24),HL
|
||||||
|
; LD HL,.RootLabel
|
||||||
|
; LD BC,.RootLabel.Size
|
||||||
|
; LDIR
|
||||||
|
; write sector
|
||||||
|
LD HL,(VARIABLES.RootDirFirstSector_H)
|
||||||
|
LD IX,(VARIABLES.RootDirFirstSector_L)
|
||||||
|
JR WRITE_SECTOR_BUFFER
|
||||||
|
;
|
||||||
|
; root dir entry for label and 0 for "end of catalog" without label
|
||||||
|
; .RootLabel: ;BYTE 'NO_LABEL '
|
||||||
|
; BYTE #08,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||||
|
; BYTE #33,#02,#85,#5C,#00,#00,#00,#00,#00,#00,#00
|
||||||
|
; .RootLabel.Size EQU $-.RootLabel
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
include 'math.asm'
|
include 'math.asm'
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user