This commit is contained in:
Tolik Trek 2026-04-05 04:06:56 +10:00
parent ee29a4c7b0
commit ee38a525f0
3 changed files with 272 additions and 64 deletions

View File

@ -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
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------

View File

@ -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

View File

@ -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'
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////