mirror of
https://github.com/Tolik-Trek/FORMAT.git
synced 2026-06-15 09:21:40 +03:00
уже лучше
This commit is contained in:
parent
8e61332b03
commit
d997a4374f
18
Messages.z80
18
Messages.z80
@ -40,6 +40,12 @@ Version_Msg: DB "DSS Drive Formatter v"
|
||||
ASSERT Version_Msg.Size < 80+4, "ERROR: Version_Msg to long!"
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
Error_Msg: DZ "\r\n\r\nError!!!\r\n\r\n"
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
;!FIXIT Color settings
|
||||
col_magenta EQU 5
|
||||
@ -49,6 +55,9 @@ col_cmd EQU 16
|
||||
PARAMS_MSG: BYTE "\r\nDrive "
|
||||
.disk BYTE "A: "
|
||||
BYTE "will be formatted using the current settings:\r\n\r\n"
|
||||
BYTE "Partition size:\t", col_cmd,col_magenta, "%S bytes", col_cmd,col_white, "\r\n"
|
||||
BYTE "Available size:\t", col_cmd,col_magenta, "%S bytes", col_cmd,col_white, "\r\n"
|
||||
BYTE "Unused space:\t", col_cmd,col_magenta, "%lu bytes", col_cmd,col_white, "\r\n"
|
||||
BYTE "Clusters:\t", col_cmd,col_magenta, "%lu", col_cmd,col_white, "\r\n"
|
||||
BYTE "Cluster size:\t", col_cmd,col_magenta, "%u bytes", col_cmd,col_white, "\r\n"
|
||||
BYTE "File system:\t", col_cmd,col_magenta, "%S", col_cmd,col_white, "\r\n"
|
||||
@ -57,12 +66,17 @@ PARAMS_MSG: BYTE "\r\nDrive "
|
||||
BYTE 'Press "Y" for format or any other key to exit', "\r\n"
|
||||
BYTE 0
|
||||
.ptr: WORD PARAMS_MSG
|
||||
WORD .fullSize
|
||||
WORD .dataSize
|
||||
.unused: DWORD 0
|
||||
.Clusters: DWORD 0
|
||||
.Clu_size: WORD 0
|
||||
.FAT: WORD .FATtxt
|
||||
WORD .FATtxt
|
||||
.Serial: DWORD 0
|
||||
.Label: WORD .LabelTxt
|
||||
WORD .LabelTxt
|
||||
;
|
||||
.FATtxt: DZ 'FAT '
|
||||
.LabelTxt: DZ 'NO LABEL '
|
||||
.fullSize: BYTE ' ',0
|
||||
.dataSize: BYTE ' ',0
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
23
data.z80
23
data.z80
@ -8,6 +8,17 @@ FAT16 EQU 2 ;
|
||||
FAT12 EQU 3 ; § ®¤® ¨ ¬®¦¨â¥«ì
|
||||
FAT32 EQU 4 ; § ®¤® ¨ ¬®¦¨â¥«ì
|
||||
;
|
||||
;
|
||||
MaxClustersNumber:
|
||||
.FAT12 EQU 4084
|
||||
.FAT16 EQU 65524
|
||||
;
|
||||
MaxDataSectorsNumber:
|
||||
.FAT12_L EQU #0000
|
||||
.FAT12_H EQU #07FA
|
||||
.FAT16_L EQU #0000
|
||||
.FAT16_H EQU #7FFA
|
||||
;
|
||||
FilesInRootDIR:
|
||||
.FDD_DD EQU 112
|
||||
.FDD_HD EQU 224
|
||||
@ -31,9 +42,9 @@ FAT_ReservedSectors:
|
||||
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 #0080, 4096, CONSTANTS.FAT32 ; 2048..8192 Mb
|
||||
FAT_TYPES_LINE #0060, 32768, CONSTANTS.FAT16 ; 1536..2047 Mb
|
||||
FAT_TYPES_LINE #0040, 16384, CONSTANTS.FAT16 ; 1023..1535 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
|
||||
@ -110,14 +121,14 @@ VARIABLES EQU $
|
||||
;.Fat32_ReservedSectors WORD 32
|
||||
.ReservedSectors WORD 0 ; [ ]
|
||||
.RootDirSectors D24 0 ; [ ]
|
||||
.NotUsedSpace BYTE 0 ; in sectors
|
||||
.NotUsedSpace WORD 0 ; in sectors ; [ ] ¥¯à ¢¨«ì® áç¨â îâáï?
|
||||
.total_clusters_L: WORD 0 ; [x]
|
||||
.total_clusters_H: WORD 0 ; [x]
|
||||
.FAT32_RootDirClusters WORD 1 ; [ ]
|
||||
.FAT.LABEL BYTE 'NO_LABEL ' ; [ ]
|
||||
.DriveExtendedParameters BYTE 0 ; [ ]
|
||||
.DataSectors_L WORD 0 ; [ ]
|
||||
.DataSectors_H WORD 0 ; [ ]
|
||||
.DataSectors_L WORD 0 ; [ ] ¥¯à ¢¨«ì® áç¨â îâáï?
|
||||
.DataSectors_H WORD 0 ; [ ] ¥¯à ¢¨«ì® áç¨â îâáï?
|
||||
.RootDirFirstSector_L WORD 0 ; [x] ¢ëç¨á«ï¥âáï ¢ FORMAT_DRIVE
|
||||
.RootDirFirstSector_H WORD 0 ; [x] ¢ëç¨á«ï¥âáï ¢ FORMAT_DRIVE
|
||||
.SectorsPerFAT_L WORD 0 ; [x]
|
||||
|
||||
@ -1 +1 @@
|
||||
57
|
||||
64
|
||||
339
format.asm
339
format.asm
@ -322,12 +322,23 @@ STOP_ERROR:
|
||||
LD B,DSS_Error.sys.INVALID_FUNCTION
|
||||
;!TODO
|
||||
|
||||
EXIT: PUSH BC
|
||||
EXIT: LD C,Dss.Exit
|
||||
PUSH BC
|
||||
LD HL,Exit_Path
|
||||
LD C,Dss.ChDir
|
||||
RST ToDSS
|
||||
;
|
||||
LD C,Dss.Exit
|
||||
POP BC
|
||||
LD A,B
|
||||
AND A
|
||||
JP Z,ToDSS
|
||||
;
|
||||
PUSH BC
|
||||
LD HL,Error_Msg
|
||||
LD C,Dss.PChars
|
||||
RST ToDSS
|
||||
;
|
||||
POP BC
|
||||
RST ToDSS
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
@ -393,7 +404,7 @@ CALC_TOTAL_CLUSTERS:
|
||||
.skip_dec_DE: ; DE:HL = total_sectors - reserved_sectors
|
||||
.push_regs: PUSH DE
|
||||
PUSH HL
|
||||
;num_fats * fat_sz32; fat_sz32 ¢ ª« áâ¥à å
|
||||
;num_fats * fat_size; fat_size ¢ ª« áâ¥à å
|
||||
.fat_size_l+1: LD BC,0
|
||||
.fat_size_h+1: LD DE,0
|
||||
LD A,(FAT_PARAMETERS.Number_of_FATs)
|
||||
@ -403,7 +414,7 @@ CALC_TOTAL_CLUSTERS:
|
||||
LD C,L
|
||||
PUSH IX
|
||||
POP DE
|
||||
;num_fats * fat_sz32 = BCDE
|
||||
;num_fats * fat_size = BCDE
|
||||
;
|
||||
LD HL,(VARIABLES.RootDirSectors)
|
||||
ADD HL,DE
|
||||
@ -413,7 +424,7 @@ CALC_TOTAL_CLUSTERS:
|
||||
ADC HL,BC
|
||||
LD B,H
|
||||
LD C,L
|
||||
;num_fats * fat_sz32 + root_dir_sectors = BC:DE
|
||||
;num_fats * fat_size + root_dir_sectors = BC:DE
|
||||
;
|
||||
POP HL
|
||||
SBC HL,DE
|
||||
@ -421,15 +432,26 @@ CALC_TOTAL_CLUSTERS:
|
||||
POP HL
|
||||
SBC HL,BC
|
||||
JP C,STOP_ERROR
|
||||
; data_sectors = HL:DE
|
||||
; data_sectors = HL:DE 0x7FFA0000
|
||||
;
|
||||
;CALL CHECK_MAX_DATA_SECTORS
|
||||
JP C,STOP_ERROR ; ᬥ¨âì FAT type?
|
||||
;
|
||||
LD (VARIABLES.DataSectors_L),DE
|
||||
LD (VARIABLES.DataSectors_H),HL
|
||||
;
|
||||
; total_clusters
|
||||
LD A,(FAT_PARAMETERS.SectorsPerCluster)
|
||||
CALL HLDE_Div_A
|
||||
LD (VARIABLES.NotUsedSpace),A
|
||||
; total_clusters = HL:DE
|
||||
; total_clusters = HL:DE, A - unused space in sectors
|
||||
;
|
||||
LD B,0
|
||||
LD C,A
|
||||
LD IX,(VARIABLES.NotUsedSpace)
|
||||
ADD IX,BC
|
||||
JP C,STOP_ERROR ; ᬥ¨âì FAT type?
|
||||
;
|
||||
LD (VARIABLES.NotUsedSpace),IX
|
||||
LD (VARIABLES.total_clusters_L),DE
|
||||
LD (VARIABLES.total_clusters_H),HL
|
||||
; fat_size
|
||||
@ -487,6 +509,79 @@ CALC_TOTAL_CLUSTERS:
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
IFUSED CHECK_MAX_DATA_SECTORS
|
||||
; IN: data_sectors = HL:DE
|
||||
; OUT: CF=0 corrected data_sectors = HL:DE
|
||||
; CF=1 ᫨誮¬ ¡®«ìè ï à §¨æ
|
||||
CHECK_MAX_DATA_SECTORS:
|
||||
LD BC,0
|
||||
LD (VARIABLES.NotUsedSpace),BC
|
||||
LD A,(VARIABLES.FAT_TYPE)
|
||||
SUB CONSTANTS.FAT12
|
||||
RET NC ; good sectors
|
||||
;
|
||||
PUSH HL
|
||||
PUSH DE
|
||||
;
|
||||
LD BC,CONSTANTS.MaxDataSectorsNumber.FAT12_H
|
||||
JR Z,.sectors_fat12
|
||||
; sectors_fat16
|
||||
LD BC,CONSTANTS.MaxDataSectorsNumber.FAT16_H
|
||||
.sectors_fat12: PUSH BC
|
||||
LD BC,(FAT_PARAMETERS.BytesPerSector)
|
||||
CALL MUL32_POWER2
|
||||
; A:HL:DE
|
||||
;
|
||||
POP BC
|
||||
AND A
|
||||
JR NZ,.too_mutch
|
||||
;
|
||||
AND A
|
||||
SBC HL,BC
|
||||
JR C,.good_sectors
|
||||
;
|
||||
JR NZ,.get_clu
|
||||
LD A,D
|
||||
OR E
|
||||
JR Z,.good_sectors
|
||||
;
|
||||
.get_clu: PUSH DE
|
||||
POP IX
|
||||
PUSH BC
|
||||
LD BC,(FAT_PARAMETERS.BytesPerSector)
|
||||
CALL HLIX_div_BC
|
||||
POP BC
|
||||
; HLIX remainder DE
|
||||
; ¯® ¨¤¥¥, DE = 0 âãâ
|
||||
;
|
||||
LD A,H
|
||||
OR L
|
||||
JR NZ,.too_mutch
|
||||
;
|
||||
LD (VARIABLES.NotUsedSpace),IX
|
||||
LD IX,0
|
||||
LD H,B
|
||||
LD L,C
|
||||
LD BC,(FAT_PARAMETERS.BytesPerSector)
|
||||
CALL HLIX_div_BC
|
||||
PUSH IX
|
||||
POP DE
|
||||
POP BC
|
||||
POP BC
|
||||
AND A
|
||||
RET
|
||||
;
|
||||
.good_sectors: SCF
|
||||
.too_mutch: POP DE
|
||||
POP HL
|
||||
CCF
|
||||
RET
|
||||
;
|
||||
ENDIF
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
SET_RESERVED_AND_ROOTDIR:
|
||||
LD A,(VARIABLES.FAT_TYPE)
|
||||
@ -1043,26 +1138,51 @@ JP_HL: EX DE,HL
|
||||
;-----------------------------------------------------------------------
|
||||
;!FIXIT
|
||||
SHOW_FORMAT_PARAMETERS:
|
||||
;.disk
|
||||
LD A,(VARIABLES.CurrentDrive)
|
||||
ADD 'A'
|
||||
LD (PARAMS_MSG.disk),A
|
||||
;
|
||||
;.unused
|
||||
LD BC,(FAT_PARAMETERS.BytesPerSector)
|
||||
LD DE,(VARIABLES.NotUsedSpace)
|
||||
LD HL,0
|
||||
CALL MUL32_POWER2
|
||||
LD (PARAMS_MSG.unused),DE
|
||||
LD (PARAMS_MSG.unused + 2),HL
|
||||
;.fullSize
|
||||
LD HL,(VARIABLES.VOLUME_SIZE_BYTES + 2)
|
||||
EXX
|
||||
LD HL,(VARIABLES.VOLUME_SIZE_BYTES)
|
||||
LD A,(VARIABLES.VOLUME_SIZE_BYTES + 4)
|
||||
LD DE,PARAMS_MSG.fullSize
|
||||
CALL PRINT_5BYTES
|
||||
;.dataSize
|
||||
LD HL,(VARIABLES.DataSectors_H)
|
||||
LD DE,(VARIABLES.DataSectors_L)
|
||||
LD BC,(FAT_PARAMETERS.BytesPerSector)
|
||||
CALL MUL32_POWER2
|
||||
PUSH DE
|
||||
EXX
|
||||
POP HL
|
||||
LD DE,PARAMS_MSG.dataSize
|
||||
CALL PRINT_5BYTES
|
||||
;.Clusters
|
||||
LD HL,(VARIABLES.total_clusters_L)
|
||||
LD (PARAMS_MSG.Clusters),HL
|
||||
LD HL,(VARIABLES.total_clusters_H)
|
||||
LD (PARAMS_MSG.Clusters + 2),HL
|
||||
;
|
||||
;.Clu_size
|
||||
LD HL,(VARIABLES.ClusterSize)
|
||||
LD (PARAMS_MSG.Clu_size),HL
|
||||
;
|
||||
;.FATtxt
|
||||
LD HL,(FAT_PARAMETERS.ID_FAT+3)
|
||||
LD (PARAMS_MSG.FATtxt + 3),HL
|
||||
;
|
||||
;.Serial
|
||||
LD HL,(FAT_PARAMETERS.SERIAL_NUMBER_1)
|
||||
LD (PARAMS_MSG.Serial),HL
|
||||
LD HL,(FAT_PARAMETERS.SERIAL_NUMBER_2)
|
||||
LD (PARAMS_MSG.Serial + 2),HL
|
||||
;
|
||||
LD HL,(FAT_PARAMETERS.SERIAL_NUMBER_2)
|
||||
LD (PARAMS_MSG.Serial),HL
|
||||
;.LabelTxt
|
||||
LD HL,FAT_PARAMETERS.LABEL
|
||||
LD DE,PARAMS_MSG.LabelTxt
|
||||
LD BC,FAT_PARAMETERS.LABEL.Size
|
||||
@ -1297,6 +1417,195 @@ PutHexNumb: PUSH AF
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; A:HL':HL - ç¨á«® ¤«ï ¯¥à¥¢®¤
|
||||
; DE - ¡ãä¥à ¤«ï ⥪á⮢®© áâப¨
|
||||
PRINT_5BYTES: PUSH DE
|
||||
LD IX,L40BIT.Str ; "00"
|
||||
LD C,#17
|
||||
EXX
|
||||
LD DE,#4876
|
||||
EXX
|
||||
LD DE,#E800
|
||||
; C:DE':DE = 100,000,000,000
|
||||
CALL GET_BIG_DIG
|
||||
LD C,#02
|
||||
EXX
|
||||
LD DE,#540B
|
||||
EXX
|
||||
LD DE,#E400
|
||||
; C:DE':DE = 10,000,000,000
|
||||
CALL GET_BIG_DIG
|
||||
LD C,#00
|
||||
EXX
|
||||
LD DE,#3B9A
|
||||
EXX
|
||||
LD DE,#CA00
|
||||
; C:DE':DE = 1,000,000,000
|
||||
CALL GET_BIG_DIG
|
||||
; DE':DE = 100,000,000
|
||||
CALL .skip_1
|
||||
POP DE
|
||||
;LD DE,SIZE_BUFFER.high ; "0 000 000 000"
|
||||
LD HL,L40BIT.Str ; "0000000000"
|
||||
LDI
|
||||
LDI
|
||||
LD A,(HL)
|
||||
LDI
|
||||
CP " "
|
||||
JR Z,1F
|
||||
;
|
||||
LD A,"," ; à §¤. à §à冷¢
|
||||
1: LD (DE),A
|
||||
INC DE
|
||||
LDI
|
||||
LDI
|
||||
LD A,(HL)
|
||||
LDI
|
||||
CP " "
|
||||
JR Z,1F
|
||||
;
|
||||
LD A,"," ; à §¤. à §à冷¢
|
||||
1: LD (DE),A
|
||||
INC DE
|
||||
LDI
|
||||
LDI
|
||||
LD A,(HL)
|
||||
LDI
|
||||
CP " "
|
||||
JR Z,1F
|
||||
;
|
||||
LD A,"," ; à §¤. à §à冷¢
|
||||
1: LD (DE),A
|
||||
INC DE
|
||||
LDI
|
||||
LDI
|
||||
LDI
|
||||
;SCF
|
||||
RET
|
||||
;
|
||||
.skip_1: EXX
|
||||
LD DE,#05F5
|
||||
EXX
|
||||
LD DE,#E100
|
||||
; DE':DE = 100,000,000
|
||||
CALL GET_DIG ; 100,000,000...999,999,999
|
||||
EXX
|
||||
LD DE,#98
|
||||
EXX
|
||||
LD DE,#9680
|
||||
; DE':DE = 10,000,000
|
||||
CALL GET_DIG ; 10,000,000...99,999,999
|
||||
EXX
|
||||
LD DE,#0F
|
||||
EXX
|
||||
LD DE,#4240
|
||||
; DE':DE = 1,000,000
|
||||
CALL GET_DIG ; 1,000,000...9,999,999
|
||||
EXX
|
||||
LD DE,#01
|
||||
EXX
|
||||
LD DE,#86A0
|
||||
; DE':DE = 100,000
|
||||
CALL GET_DIG ; 100,000...999,999
|
||||
EXX
|
||||
LD DE,#00
|
||||
EXX
|
||||
LD DE,#2710
|
||||
; DE':DE = 10,000
|
||||
CALL GET_DIG ; 10,000...99,999
|
||||
EXX
|
||||
LD DE,#00
|
||||
EXX
|
||||
LD DE,#03E8
|
||||
; DE':DE = 1,000
|
||||
CALL GET_DIG ; 1,000...9,999
|
||||
EXX
|
||||
LD DE,#00
|
||||
EXX
|
||||
LD DE,#64
|
||||
; DE':DE = 100
|
||||
CALL GET_DIG ; 100..999
|
||||
EXX
|
||||
LD DE,#00
|
||||
EXX
|
||||
LD DE,#0A
|
||||
; DE':DE = 10
|
||||
CALL GET_DIG ; 10..99
|
||||
LD A,L
|
||||
ADD A,"0"
|
||||
LD (ix+0),A
|
||||
INC IX
|
||||
RET
|
||||
;
|
||||
GET_DIG: LD A,"0"-1
|
||||
AND A
|
||||
.loop: INC A
|
||||
SBC HL,DE
|
||||
EXX
|
||||
SBC HL,DE
|
||||
EXX
|
||||
JR NC,.loop
|
||||
;
|
||||
ADD HL,DE
|
||||
EXX
|
||||
ADC HL,DE
|
||||
EXX
|
||||
CP "0"
|
||||
JR NZ,.putChar
|
||||
;
|
||||
LD B,A
|
||||
LD A,(ix-1)
|
||||
CP " "
|
||||
JR Z,.putChar
|
||||
;
|
||||
LD A,B
|
||||
.putChar: LD (ix+0),A
|
||||
INC IX
|
||||
RET
|
||||
;
|
||||
GET_BIG_DIG: LD B,"0"-1
|
||||
AND A
|
||||
.loop: INC B
|
||||
SBC HL,DE
|
||||
EXX
|
||||
SBC HL,DE
|
||||
EXX
|
||||
SBC A,C
|
||||
JR NC,.loop
|
||||
;
|
||||
ADD HL,DE
|
||||
EXX
|
||||
ADC HL,DE
|
||||
EXX
|
||||
ADC A,C
|
||||
EX AF,AF'
|
||||
LD A,B
|
||||
CP "0"
|
||||
JR NZ,.putChar
|
||||
;
|
||||
LD A,(ix-1)
|
||||
CP " "
|
||||
JR Z,.putChar
|
||||
;
|
||||
LD A,B
|
||||
.putChar: LD (ix+0),A
|
||||
EX AF,AF'
|
||||
INC IX
|
||||
RET
|
||||
;
|
||||
L40BIT: DB " " ; ¬ àª¥à ¤«ï ix-1
|
||||
.Str: DB " " ; 00
|
||||
L32BIT_: DB " " ; 000000000
|
||||
.end: DB "0"
|
||||
;
|
||||
; SIZE_BUFFER: db " " ; ¬ àª¥à ¤«ï ix-1
|
||||
; .high db " " ; "00"
|
||||
; .low: db " ",0,0 ; "0 000 000 000",0,0
|
||||
; .bytes equ SIZE_BUFFER - $
|
||||
;-----------------------------------------------------------------------
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
include 'math.asm'
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
3
math.asm
3
math.asm
@ -127,7 +127,6 @@ HLIX_div_BC: EX DE,HL
|
||||
;-----------------------------------------------------------------------
|
||||
; -> HLDE * BC. BC = á⥯¥ì ¤¢®©ª¨
|
||||
; <- AHLDE
|
||||
; CF=1 - error
|
||||
MUL32_POWER2: SRL B
|
||||
RR C
|
||||
LD A,B
|
||||
@ -140,7 +139,7 @@ MUL32_POWER2: SRL B
|
||||
EX DE,HL
|
||||
ADC HL,HL
|
||||
ADC A,0
|
||||
JP C,STOP_ERROR
|
||||
JP C,STOP_ERROR ; CF=1 - error
|
||||
;
|
||||
SRL B
|
||||
RR C
|
||||
|
||||
Loading…
Reference in New Issue
Block a user