This commit is contained in:
Tolik Trek 2026-04-19 02:38:04 +10:00
parent 31c23144df
commit 36ac5ec831
3 changed files with 41 additions and 241 deletions

View File

@ -14,8 +14,7 @@ FilesInRootDIR:
.HDD EQU 512 .HDD EQU 512
; ;
FAT_ReservedSectors: FAT_ReservedSectors:
.FDD EQU 1 .FAT EQU 1
.HDD EQU 8
.FAT32 EQU 32 .FAT32 EQU 32
ENDMODULE ENDMODULE
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
@ -156,7 +155,7 @@ FAT_PARAMETERS:
; .FAT.SERIAL_NUMBER DWORD 0 ; ; .FAT.SERIAL_NUMBER DWORD 0 ;
; .FAT.LABEL DB 'NO_LABEL ' ; ; .FAT.LABEL DB 'NO_LABEL ' ;
; .ID_FAT DB 'FAT16 ' ; ; .ID_FAT DB 'FAT16 ' ;
.PART2_FAT12_16_END EQU $ .PART2_FAT12_16_SIZE EQU $
; FAT32 ; FAT32
.PART2_FAT32 EQU $ .PART2_FAT32 EQU $

View File

@ -1 +1 @@
39 47

View File

@ -145,9 +145,7 @@ DSS_DRIVE_FORMAT:
; ;
MAKE_AUTO: CALL CALCULATE_FAT MAKE_AUTO: CALL CALCULATE_FAT
CALL FORMAT_DRIVE CALL FORMAT_DRIVE
CALL MAKE_LABEL_IN_DIR CALL MAKE_LABEL_IN_DIR ; ¯¥à¢ ï § ¯¨áì ¢ root dir - ¬¥âª , ¯®â®¬ ­ã«¨
;!FIXIT
;CALL MAKE_ROOT_DIR_LABEL ; ¯¥à¢ ï § ¯¨áì ¢ root dir - ¬¥âª , ¯®â®¬ ­ã«¨
RET RET
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
@ -476,12 +474,12 @@ SET_RESERVED_AND_ROOTDIR:
; ‘â ¢¨¬ ¤¥ä®«â­ë¥ §­ ç¥­¨ï ; ‘â ¢¨¬ ¤¥ä®«â­ë¥ §­ ç¥­¨ï
LD A,(FAT_PARAMETERS.DRIVE_TYPE) LD A,(FAT_PARAMETERS.DRIVE_TYPE)
CP BOOT_SECTOR.Hard_Drive CP BOOT_SECTOR.Hard_Drive
LD HL,CONSTANTS.FAT_ReservedSectors.HDD LD HL,CONSTANTS.FAT_ReservedSectors.FAT
LD DE,CONSTANTS.FilesInRootDIR.HDD LD DE,CONSTANTS.FilesInRootDIR.HDD
JR Z,.set_vars JR Z,.set_vars
; #F0 ; #F0
CP BOOT_SECTOR.Floppy_3x5_1x44 CP BOOT_SECTOR.Floppy_3x5_1x44
LD HL,CONSTANTS.FAT_ReservedSectors.FDD ;LD HL,CONSTANTS.FAT_ReservedSectors.FDD
LD DE,CONSTANTS.FilesInRootDIR.FDD_HD LD DE,CONSTANTS.FilesInRootDIR.FDD_HD
JR Z,.set_vars JR Z,.set_vars
; #F9 ; #F9
@ -493,6 +491,14 @@ SET_RESERVED_AND_ROOTDIR:
.set_vars: CALL .ChooseReserved .set_vars: CALL .ChooseReserved
EX DE,HL EX DE,HL
CALL .ChooseFilesInRootDIR CALL .ChooseFilesInRootDIR
;
LD A,(VARIABLES.FAT_TYPE)
CP CONSTANTS.FAT16
LD HL,'61' ; str FAT16
JR Z,.set_type
;
LD H,'2' ; str FAT12
.set_type: LD (FAT_PARAMETERS.ID_FAT + 3),HL
RET RET
; ;
.for_fat32: LD A,(KEYS_PARAMETERS.FilesInRootDIR + KEYS_PARAMETERS.KEYS_STR.Status) .for_fat32: LD A,(KEYS_PARAMETERS.FilesInRootDIR + KEYS_PARAMETERS.KEYS_STR.Status)
@ -620,19 +626,7 @@ MAKE_SERIAL: LD C,Dss.SysTime
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
FORMAT_DRIVE: CALL CLEAN_SECTOR_BUFFER FORMAT_DRIVE: CALL MAKE_SYS_SECTORS
;
LD HL,FAT_PARAMETERS.PART1
LD DE,SECTOR_BUFFER
LD BC,FAT_PARAMETERS.PART1_SIZE
LDIR
;
LD A,(VARIABLES.FAT_TYPE)
CP CONSTANTS.FAT32
;!FIXIT
JP NZ,STOP_ERROR
;
CALL MAKE_SYS_SECTORS
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)
@ -770,9 +764,27 @@ FORMAT_DRIVE: CALL CLEAN_SECTOR_BUFFER
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
MAKE_SYS_SECTORS: MAKE_SYS_SECTORS:
LD HL,FAT_PARAMETERS.PART2_FAT32 CALL CLEAN_SECTOR_BUFFER
LD BC,FAT_PARAMETERS.PART2_FAT32_SIZE + FAT_PARAMETERS.PART3_SHARED_SIZE LD HL,FAT_PARAMETERS.PART1
LD DE,SECTOR_BUFFER
LD BC,FAT_PARAMETERS.PART1_SIZE
LDIR LDIR
;
LD A,(VARIABLES.FAT_TYPE)
CP CONSTANTS.FAT32
JR Z,.set_32
;
LD HL,(FAT_PARAMETERS.PART2_FAT12_16)
LD (SECTOR_BUFFER + FAT_PARAMETERS.PART1_SIZE),HL
INC DE
INC DE
LD HL,FAT_PARAMETERS.PART3_SHARED
LD BC,FAT_PARAMETERS.PART3_SHARED_SIZE
JR .ldir
;
.set_32: LD HL,FAT_PARAMETERS.PART2_FAT32
LD BC,FAT_PARAMETERS.PART2_FAT32_SIZE + FAT_PARAMETERS.PART3_SHARED_SIZE
.ldir: LDIR
; ;
LD HL,#AA55 LD HL,#AA55
LD (SECTOR_BUFFER + BOOT_SECTOR.MBR_SIGNATURE),HL LD (SECTOR_BUFFER + BOOT_SECTOR.MBR_SIGNATURE),HL
@ -780,14 +792,14 @@ MAKE_SYS_SECTORS:
LD HL,0 LD HL,0
LD IX,0 LD IX,0
CALL WRITE_SECTOR_BUFFER CALL WRITE_SECTOR_BUFFER
LD HL,0
LD IX,(FAT_PARAMETERS.CopyBootSector)
CALL WRITE_SECTOR_BUFFER
; ;
LD A,(VARIABLES.FAT_TYPE) LD A,(VARIABLES.FAT_TYPE)
CP CONSTANTS.FAT32 CP CONSTANTS.FAT32
RET NZ RET NZ
; ;
LD HL,0
LD IX,(FAT_PARAMETERS.CopyBootSector)
CALL WRITE_SECTOR_BUFFER
CALL CLEAN_SECTOR_BUFFER CALL CLEAN_SECTOR_BUFFER
LD HL,#AA55 LD HL,#AA55
LD (SECTOR_BUFFER + _sFSinfo.SECTOR_SIGNATURE),HL LD (SECTOR_BUFFER + _sFSinfo.SECTOR_SIGNATURE),HL
@ -876,9 +888,9 @@ WRITE_SECTOR_BUFFER:
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
; IN: HL:IX - rootdir's first sector ; IN: (VARIABLES.RootDirFirstSector_H), (VARIABLES.RootDirFirstSector_L)
MAKE_LABEL_IN_DIR: MAKE_LABEL_IN_DIR:
CALL CLEAN_SECTOR_BUFFER ;!FIXIT ᪮॥ ¢á¥£®, ­¥ ­ã¦­® ç¨áâ¨âì CALL CLEAN_SECTOR_BUFFER
; make directory record ; make directory record
LD HL,FAT_PARAMETERS.LABEL LD HL,FAT_PARAMETERS.LABEL
LD DE,SECTOR_BUFFER LD DE,SECTOR_BUFFER
@ -909,107 +921,6 @@ MAKE_LABEL_IN_DIR:
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
/*
PARSE_CMD: LD A,(HL)
INC HL
INC HL
AND A
JP Z,SHOW_VERSION
;
CALL .MAIN
RET NC
JP STOP_ERROR
;
.MAIN: PUSH HL
LD BC,Dss.EX_Path.GET_ALL
RST ToDSS
JP C,STOP_ERROR
; ­ ¬ ­ã¦­  áâப  ¢ ª®â®à®© ¥áâì ¤à ©¢, ­® ­¥â ¯ãâ¨
AND %0000'1100
XOR %0000'1000
JP NZ,STOP_ERROR
; ¯¥à¥¡¨à ¥¬ ª«îç¨ "/"
.loop: POP HL
LD DE,SECTOR_BUFFER
LD C,Dss.GSwitch
RST ToDSS
PUSH HL
;
LD A,(SECTOR_BUFFER)
CP '/' ;
JR Z,.SET_KEY
;
AND A
EX DE,HL
LD HL,(SECTOR_BUFFER + 1)
LD BC,-':'
ADC HL,BC
EX DE,HL
JR Z,.get_drv
JP STOP_ERROR
;
;
.SET_KEY: LD HL,SECTOR_BUFFER+1
LD A,(HL)
EX AF,AF'
INC HL
LD A,(HL)
INC HL
AND A
JP NZ,STOP_ERROR ; ­¥¯à ¢¨«ì­ë© ª«îç
;
.cont_set: EX AF,AF'
LD IX,KEYS_PARAMETERS.TABLE
LD B,KEYS_PARAMETERS.TABLE.Elements
LD DE,KEYS_PARAMETERS.KEYS_STR
;
.loop_key: CP (IX + KEYS_PARAMETERS.KEYS_STR.Key)
JR NZ,.next
;
EX DE,HL
LD L,(IX + KEYS_PARAMETERS.KEYS_STR.Procedure)
LD H,(IX + KEYS_PARAMETERS.KEYS_STR.Procedure + 1)
LD A,L
OR H
CALL NZ,JP_HL
EX DE,HL
LD A,KEYS_PARAMETERS.Status.On
JR NC,.set_stat
;
LD A,KEYS_PARAMETERS.Status.Ignored
.set_stat: LD (IX + KEYS_PARAMETERS.KEYS_STR.Status),A
JR .loop
;
.next: ADD IX,DE
DJNZ .loop_key
JP STOP_ERROR ; ­¥¯à ¢¨«ì­ë© ª«îç
;
.get_drv: ; ¤®áâ ñ¬ ¨¬ï ¤à ©¢  (®­® ¡¥§ ª«îç  "/")
LD A,(VARIABLES.CurrentDrive)
INC A
JP NZ,STOP_ERROR ; ­¥¯à ¢¨«ì­ë© ª«îç
;
;PUSH HL
LD HL,SECTOR_BUFFER
LD DE,SECTOR_BUFFER + 3
LD BC,Dss.EX_Path.GET_DRIVE
RST ToDSS
JP C,STOP_ERROR ; ­¥¯à ¢¨«ì­ë© ¤à ©¢
;
LD (VARIABLES.CurrentDrive),A
; ⮫쪮 ¤«ï ⮣®, ç⮡ ®¡­®¢¨âì ¯ à ¬¥âàë ¤à ©¢  (¢¤à㣠¤¨áª¥âã ᬥ­¨«¨?)
LD C,Dss.ChDisk
RST ToDSS
JR NC,.loop
;
CP DSS_Error.drv.UNKNOWN_FORMAT
JR Z,.loop
JP STOP_ERROR ; ­¥¯à ¢¨«ì­ë© ¤à ©¢
; .no_err_drv: POP HL
; RET
*/
PARSE_CMD: LD A,(HL) PARSE_CMD: LD A,(HL)
AND A AND A
JP Z,SHOW_VERSION ; ¤«¨­  CMD áâப¨ ­ã«¥¢ ï JP Z,SHOW_VERSION ; ¤«¨­  CMD áâப¨ ­ã«¥¢ ï
@ -1044,7 +955,7 @@ PARSE_CMD: LD A,(HL)
POP HL POP HL
JR NC,.loop JR NC,.loop
; ;
CP DSS_Error.drv.UNKNOWN_FORMAT CP DSS_Error.sys.UNKNOWN_FORMAT
JP NZ,STOP_ERROR JP NZ,STOP_ERROR
; ¯¥à¥¡¨à ¥¬ ª«îç¨ "/" ; ¯¥à¥¡¨à ¥¬ ª«îç¨ "/"
.loop: CALL .skip_space .loop: CALL .skip_space
@ -1106,7 +1017,6 @@ JP_HL: EX DE,HL
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
;!FIXIT
SHOW_VERSION: LD SP,(STOP_ERROR.Save_SP) SHOW_VERSION: LD SP,(STOP_ERROR.Save_SP)
LD HL,Version_Msg LD HL,Version_Msg
LD C,Dss.PChars LD C,Dss.PChars
@ -1133,115 +1043,6 @@ GET_KEY_FAT: DI
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
;!FIXIT
/*
SET_LABEL: POP HL
EX (SP),HL
; LD DE,SECTOR_BUFFER
; LD C,Dss.GSwitch
; RST ToDSS
; EX (SP),HL
; PUSH HL
;
;LD HL,SECTOR_BUFFER
; LD A,(HL)
; INC HL
; OR A
; SCF
; RET C ; ª«îç ¡¥§ ¬¥âª¨
;
LD A,(HL)
INC HL
CP '"'
SCF
RET NZ ; ¬¥âª  ­ ç¨­ ¥âáï ­¥ á ª ¢ë窨
;
LD DE,SECTOR_BUFFER ; á®§¤ ñ¬ ¬¥âªã âãâ, ¥á«¨ ᨬ¢®«ë ¢ ¯®à浪¥
LD C,FAT_PARAMETERS.LABEL.Size
LD B,C
LD A,(HL)
CP ' '+1
RET C ; no_name
;
CALL .loop1
CALL C,.skip_label
EX (SP),HL
JP (HL)
;
.loop1: LD A,(HL)
AND A
SCF
RET Z
;
;
CP #80
JR NC,.sym_ok
;
CP #22
JR Z,.end_label
CP #7C
SCF
RET Z ; no_name
CP #2A
JR C,.check_3A
CP #30
JR NC,.check_3A
CP #2D
JR Z,.sym_ok
SCF
RET ; no_name
;
.check_3A: CP #3A
JR C,.check_5B
CP #40
JR NC,.check_5B
RET ; no_name
.check_5B: CP #5B
JR C,.sym_ok
CP #5E
RET C ; no_name
.sym_ok: LD (DE),A
INC HL
INC DE
DJNZ .loop1
LD A,(HL)
CP '"'
SCF
RET NZ
;
.end_label: LD A,B
CP C
SCF
RET Z ; áâ ­¤ àâ­ ï ¬¥âª 
;
INC B ; ç⮡ ­¥ âà â¨âì ¡ ©âë ­  ¯à®¢¥àªã ­  ­®«ì
EX DE,HL
.loop2: LD (HL)," "
INC HL
DJNZ .loop2
INC DE
PUSH DE
; B=0, C=FAT_PARAMETERS.LABEL.Size
LD HL,SECTOR_BUFFER
LD DE,FAT_PARAMETERS.LABEL
LDIR
POP HL
AND A
RET
;
.skip_label: LD A,(HL)
AND A
SCF
RET Z
;
CP '/'
SCF
RET Z
INC HL
JR .skip_label
*/
SET_LABEL: LD HL,SECTOR_BUFFER ; á®§¤ ñ¬ ¬¥âªã âãâ, ¥á«¨ ᨬ¢®«ë ¢ ¯®à浪¥ SET_LABEL: LD HL,SECTOR_BUFFER ; á®§¤ ñ¬ ¬¥âªã âãâ, ¥á«¨ ᨬ¢®«ë ¢ ¯®à浪¥
EX DE,HL EX DE,HL
; ;