This commit is contained in:
Tolik 2026-04-24 22:22:21 +10:00
parent d997a4374f
commit bb0a225030
4 changed files with 394 additions and 305 deletions

View File

@ -47,7 +47,8 @@ Error_Msg: DZ "\r\n\r\nError!!!\r\n\r\n"
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
;!FIXIT Color settings ;!FIXIT Color settings
/*
col_magenta EQU 5 col_magenta EQU 5
col_white EQU 7 col_white EQU 7
col_cmd EQU 16 col_cmd EQU 16
@ -79,4 +80,30 @@ PARAMS_MSG: BYTE "\r\nDrive "
.LabelTxt: DZ 'NO LABEL ' .LabelTxt: DZ 'NO LABEL '
.fullSize: BYTE ' ',0 .fullSize: BYTE ' ',0
.dataSize: BYTE ' ',0 .dataSize: BYTE ' ',0
*/
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
;-----------------------------------------------------------------------
PARAMS_MSG: BYTE "\r\nDrive "
.disk: BYTE "A: "
BYTE "will be formatted using the current settings:\r\n\r\n"
BYTE "Partition size:\t"
.fullSize: BYTE " bytes\r\n"
BYTE "Available size:\t"
.dataSize: BYTE " bytes\r\n"
BYTE "Unused space:\t"
.unused: BYTE " bytes\r\n"
BYTE "Clusters:\t"
.Clusters: BYTE " \r\n"
BYTE "Cluster size:\t"
.Clu_size: BYTE " bytes\r\n"
BYTE "File system:\t"
.FATtxt: BYTE "FAT \r\n"
BYTE "Serial:\t\t"
.Serial: BYTE "0000-0000\r\n"
BYTE "Label:\t\t"
.LabelTxt: BYTE "NO LABEL \r\n\r\n"
BYTE 'Press "Y" for format or any other key to exit', "\r\n"
BYTE 0
;-----------------------------------------------------------------------

300
Strings.asm Normal file
View File

@ -0,0 +1,300 @@
;-----------------------------------------------------------------------
; Enin Anton, Anatoliy Belyanskiy
; A:HL':HL - ç¨á«® ¤«ï ¯¥à¥¢®¤ 
; A:HL:DE - ç¨á«® ¤«ï ¯¥à¥¢®¤ 
; BC - ¡ãä¥à ¤«ï ⥪á⮢®© áâப¨
PRINT_5BYTES: PUSH BC
;
PUSH HL
EXX
POP HL
EXX
EX DE,HL
;
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 ; "000 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 - $
;-----------------------------------------------------------------------
;-----------------------------------------------------------------------
; Enin Anton
;<3B>à®æ¥¤ãà  ¯à¥®¡à §®¢ ­¨ï 8¡¨â®¢ëå ç¨á¥« ¢ è¥áâ­ ¤æ. ⥪áâ
;<3B>  ¢å®¤:
; HL -  ¤à¥á ¡ãä¥à 
; € - ¡ ©â
;<3B>  ¢ë室:
; ¡ãä¥à á ⥪áâ.ç¨á«®¬
IFUSED PutHexNumb
PutHexNumb: PUSH AF
RRCA
RRCA
RRCA
RRCA
AND #0F
ADD A,#90
DAA
ADC A,#40
DAA
LD (HL),A
INC L
POP AF
AND #0F
ADD A,#90
DAA
ADC A,#40
DAA
LD (HL),A
INC L
RET
ENDIF
;-----------------------------------------------------------------------
;-----------------------------------------------------------------------
; HL - ‘âப  á «¨è­¨¬¨ ¯à®¡¥« ¬¨
; DE - <20>ãä¥à ­®¢®© áâப¨
SKIP_DUBLESPACES:
LD A,(HL)
AND A
RET Z
;
SUB ' '
JR NZ,.loop
;
INC HL
JR SKIP_DUBLESPACES
;
.loop LDI
LD A,(HL)
AND A
RET Z
;
SUB ' '
JR NZ,.loop
LDI
JR SKIP_DUBLESPACES
;-----------------------------------------------------------------------
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;-----------------------------------------------------------------------
; IN: DE - (string decimal)
; OUT: HL - string to word
; DE - addr next after string decimal
;!FIXIT ¯à®¢¥àª  ­  ¯ãáâãî áâபã
STR_TO_WORD: LD HL,0
.loop: LD B,H
LD C,L
;
ADD HL,HL ;x2
RET C
ADD HL,HL ;x4
RET C
ADD HL,BC ;x5
RET C
ADD HL,HL ;x10
RET C
;
LD B,0
LD C,A
ADD HL,BC
RET C
;
LD A,(DE)
OR A
RET Z
CP ' '
RET Z
;
CP '9'+1
CCF
RET C
SUB '0'
RET C
;
INC DE
JR .loop
;-----------------------------------------------------------------------

View File

@ -1 +1 @@
64 69

View File

@ -1147,50 +1147,60 @@ SHOW_FORMAT_PARAMETERS:
LD DE,(VARIABLES.NotUsedSpace) LD DE,(VARIABLES.NotUsedSpace)
LD HL,0 LD HL,0
CALL MUL32_POWER2 CALL MUL32_POWER2
LD (PARAMS_MSG.unused),DE XOR A
LD (PARAMS_MSG.unused + 2),HL LD BC,PARAMS_MSG.unused
CALL PRINT_5BYTES
;.fullSize ;.fullSize
LD DE,(VARIABLES.VOLUME_SIZE_BYTES)
LD HL,(VARIABLES.VOLUME_SIZE_BYTES + 2) LD HL,(VARIABLES.VOLUME_SIZE_BYTES + 2)
EXX
LD HL,(VARIABLES.VOLUME_SIZE_BYTES)
LD A,(VARIABLES.VOLUME_SIZE_BYTES + 4) LD A,(VARIABLES.VOLUME_SIZE_BYTES + 4)
LD DE,PARAMS_MSG.fullSize LD BC,PARAMS_MSG.fullSize
CALL PRINT_5BYTES CALL PRINT_5BYTES
;.dataSize ;.dataSize
LD HL,(VARIABLES.DataSectors_H) LD HL,(VARIABLES.total_clusters_H)
LD DE,(VARIABLES.DataSectors_L) LD DE,(VARIABLES.total_clusters_L)
LD BC,(FAT_PARAMETERS.BytesPerSector) LD BC,(VARIABLES.ClusterSize)
CALL MUL32_POWER2 CALL MUL32_POWER2
PUSH DE LD BC,PARAMS_MSG.dataSize
EXX
POP HL
LD DE,PARAMS_MSG.dataSize
CALL PRINT_5BYTES CALL PRINT_5BYTES
;.Clusters ;.Clusters
LD HL,(VARIABLES.total_clusters_L) LD DE,(VARIABLES.total_clusters_L)
LD (PARAMS_MSG.Clusters),HL
LD HL,(VARIABLES.total_clusters_H) LD HL,(VARIABLES.total_clusters_H)
LD (PARAMS_MSG.Clusters + 2),HL XOR A
LD BC,PARAMS_MSG.Clusters
CALL PRINT_5BYTES
;.Clu_size ;.Clu_size
LD HL,(VARIABLES.ClusterSize) LD DE,(VARIABLES.ClusterSize)
LD (PARAMS_MSG.Clu_size),HL XOR A
LD H,A
LD L,A
LD BC,PARAMS_MSG.Clu_size
CALL PRINT_5BYTES
;.FATtxt ;.FATtxt
LD HL,(FAT_PARAMETERS.ID_FAT+3) LD HL,(FAT_PARAMETERS.ID_FAT+3)
LD (PARAMS_MSG.FATtxt + 3),HL LD (PARAMS_MSG.FATtxt + 3),HL
;.Serial ;.Serial
LD HL,(FAT_PARAMETERS.SERIAL_NUMBER_1) LD HL,FAT_PARAMETERS.SERIAL_NUMBER_2
LD (PARAMS_MSG.Serial + 2),HL LD DE,PARAMS_MSG.Serial
LD HL,(FAT_PARAMETERS.SERIAL_NUMBER_2) CALL .make_Serial
LD (PARAMS_MSG.Serial),HL INC DE
CALL .make_Serial
;.LabelTxt ;.LabelTxt
LD HL,FAT_PARAMETERS.LABEL LD HL,FAT_PARAMETERS.LABEL
LD DE,PARAMS_MSG.LabelTxt LD DE,PARAMS_MSG.LabelTxt
LD BC,FAT_PARAMETERS.LABEL.Size LD BC,FAT_PARAMETERS.LABEL.Size
LDIR LDIR
; ;
LD IY,PARAMS_MSG.ptr LD HL,PARAMS_MSG
CALL printf#.str LD DE,SECTOR_BUFFER
PUSH DE
CALL SKIP_DUBLESPACES
EX DE,HL
LD (HL),0
POP HL
LD C,Dss.PChars
RST ToDSS
;
.loop: LD C,Dss.EchoKey .loop: LD C,Dss.EchoKey
RST ToDSS RST ToDSS
; ¯®§¨æ¨®­­ë© ª®¤ Y/y/­/<2F> - #95/#15 ; ¯®§¨æ¨®­­ë© ª®¤ Y/y/­/<2F> - #95/#15
@ -1200,6 +1210,23 @@ SHOW_FORMAT_PARAMETERS:
RET Z RET Z
SCF SCF
RET RET
;
;
.make_Serial: LD B,2
.serialLoop: LD A,(HL)
DEC HL
PUSH HL
PUSH DE
EX DE,HL
; HL -  ¤à¥á ¡ãä¥à 
; € - ¡ ©â
CALL PutHexNumb
POP DE
POP HL
INC DE
INC DE
DJNZ .serialLoop
RET
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
@ -1214,21 +1241,6 @@ SHOW_VERSION: LD SP,(STOP_ERROR.Save_SP)
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
;-----------------------------------------------------------------------
;!FIXIT
SHOW_HELP: LD SP,(STOP_ERROR.Save_SP)
DI
HALT
;-----------------------------------------------------------------------
;-----------------------------------------------------------------------
;!FIXIT
GET_KEY_FAT: DI
HALT
;-----------------------------------------------------------------------
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
SET_LABEL: LD HL,SECTOR_BUFFER ; á®§¤ ñ¬ ¬¥âªã âãâ, ¥á«¨ ᨬ¢®«ë ¢ ¯®à浪¥ SET_LABEL: LD HL,SECTOR_BUFFER ; á®§¤ ñ¬ ¬¥âªã âãâ, ¥á«¨ ᨬ¢®«ë ¢ ¯®à浪¥
EX DE,HL EX DE,HL
@ -1337,272 +1349,17 @@ STRING_TO_WORD: CALL STR_TO_WORD
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
; DEBUG_START: LD HL,.data ;!FIXIT
; CALL STRING_TO_WORD SHOW_HELP: LD SP,(STOP_ERROR.Save_SP)
; DI DI
; HALT HALT
; ;
; .data: DZ "327670"
; IN: DE - (string decimal)
; OUT: HL - string to word
; DE - addr next after string decimal
;!FIXIT ¯à®¢¥àª  ­  ¯ãáâãî áâபã
STR_TO_WORD: LD HL,0
.loop: LD B,H
LD C,L
;
ADD HL,HL ;x2
RET C
ADD HL,HL ;x4
RET C
ADD HL,BC ;x5
RET C
ADD HL,HL ;x10
RET C
;
LD B,0
LD C,A
ADD HL,BC
RET C
;
LD A,(DE)
OR A
RET Z
CP ' '
RET Z
;
CP '9'+1
CCF
RET C
SUB '0'
RET C
;
INC DE
JR .loop
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
; Enin Anton ;!FIXIT
;<3B>à®æ¥¤ãà  ¯à¥®¡à §®¢ ­¨ï 8¡¨â®¢ëå ç¨á¥« ¢ è¥áâ­ ¤æ. ⥪áâ GET_KEY_FAT: DI
;<3B>  ¢å®¤: HALT
; HL -  ¤à¥á ¡ãä¥à 
; € - ¡ ©â
;<3B>  ¢ë室:
; ¡ãä¥à á ⥪áâ.ç¨á«®¬
IFUSED PutHexNumb
PutHexNumb: PUSH AF
RRCA
RRCA
RRCA
RRCA
AND #0F
ADD A,#90
DAA
ADC A,#40
DAA
LD (HL),A
INC L
POP AF
AND #0F
ADD A,#90
DAA
ADC A,#40
DAA
LD (HL),A
INC L
RET
ENDIF
;-----------------------------------------------------------------------
;-----------------------------------------------------------------------
; 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 - $
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
@ -1611,6 +1368,11 @@ L32BIT_: DB " " ; 000000000
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
include 'Strings.asm'
////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
include 'data.z80' include 'data.z80'
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
@ -1623,7 +1385,7 @@ L32BIT_: DB " " ; 000000000
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
;!FIXIT ;!FIXIT
include 'shared_includes/printf.asm' ; include 'shared_includes/printf.asm'
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
Exit_Path: DB 'A:\' Exit_Path: DB 'A:\'