mirror of
https://github.com/Tolik-Trek/FORMAT.git
synced 2026-06-15 09:21:40 +03:00
192 lines
6.4 KiB
Z80 Assembly
192 lines
6.4 KiB
Z80 Assembly
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ DATA ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
;-----------------------------------------------------------------------
|
||
MODULE CONSTANTS
|
||
FAT16 EQU 2 ; § ®¤® ¨ ¬®¦¨â¥«ì
|
||
FAT12 EQU 3 ; § ®¤® ¨ ¬®¦¨â¥«ì
|
||
FAT32 EQU 4 ; § ®¤® ¨ ¬®¦¨â¥«ì
|
||
;
|
||
FilesInRootDIR:
|
||
.FDD_DD EQU 112
|
||
.FDD_HD EQU 224
|
||
.HDD EQU 512
|
||
;
|
||
FAT_ReservedSectors:
|
||
.FDD EQU 1
|
||
.HDD EQU 8
|
||
.FAT32 EQU 32
|
||
ENDMODULE
|
||
;-----------------------------------------------------------------------
|
||
|
||
|
||
;-----------------------------------------------------------------------
|
||
MACRO FAT_TYPES_LINE vol_size, clu_size, fat_type
|
||
WORD vol_size, clu_size
|
||
BYTE fat_type
|
||
ENDM
|
||
|
||
MODULE TABLES
|
||
; VOL SIZE CLUSTER SIZE FAT TYPE
|
||
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 #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
|
||
FAT_TYPES_LINE #0004, 1024, CONSTANTS.FAT16 ; 64..128 Mb
|
||
FAT_TYPES_LINE #0002, 512, CONSTANTS.FAT16 ; 32..64 Mb
|
||
; ¥á«¨ ¬¥ìè¥, â® FAT12
|
||
.LineSize EQU 5
|
||
.Records EQU ($ - FAT_TYPES)/.LineSize
|
||
ENDMODULE
|
||
;-----------------------------------------------------------------------
|
||
|
||
|
||
;-----------------------------------------------------------------------
|
||
VARIABLES EQU $
|
||
.FAT_TYPE BYTE CONSTANTS.FAT12 ; [x]
|
||
.CurrentDrive DB #FF ; [x]
|
||
.VOLUME_SIZE_BYTES BLOCK 5,0 ; [ ]
|
||
;.FatFDD_ReservedSectors WORD 1
|
||
;.FatHDD_ReservedSectors WORD 8
|
||
;.Fat32_ReservedSectors WORD 32
|
||
.ReservedSectors WORD 0 ; [ ]
|
||
.RootDirSectors D24 0 ; [ ]
|
||
.NotUsedSpace BYTE 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 ; [ ]
|
||
.RootDirFirstSector_L WORD 0 ; [x] ¢ëç¨á«ï¥âáï ¢ FORMAT_DRIVE
|
||
.RootDirFirstSector_H WORD 0 ; [x] ¢ëç¨á«ï¥âáï ¢ FORMAT_DRIVE
|
||
;-----------------------------------------------------------------------
|
||
|
||
|
||
;-----------------------------------------------------------------------
|
||
MODULE KEYS_PARAMETERS
|
||
|
||
STRUCT KEYS_STR
|
||
.Status BYTE 0 ; ‘â âãá ª«îç
|
||
.Key BYTE 0 ; Š«îç
|
||
.Data WORD 0 ; „ ë¥
|
||
.Procedure WORD 0 ; ®¡à ¡®â稪
|
||
ENDS
|
||
|
||
MACRO KEY_DATA key?, proc?
|
||
; BYTE 0 ; ‘â âãá ª«îç
|
||
; BYTE key? ; Š«îç
|
||
; WORD 0 ; „ ë¥
|
||
; WORD proc? ; ®¡à ¡®â稪
|
||
KEYS_STR 0, key?, 0, proc?
|
||
ENDM
|
||
|
||
;-----------------------;
|
||
TABLE: EQU $
|
||
;
|
||
ONLY_HELP KEY_DATA '?', SHOW_HELP ; [ ] BYTE ; ¢ë¢®¤ á¯à ¢ª¨
|
||
LABEL KEY_DATA 'l', SET_LABEL ; [ ] WORD ; áá뫪 ¯à®æ¥¤ãàã ¨¨â ¬¥âª¨
|
||
FAT_TYPE KEY_DATA 't', GET_KEY_FAT ; [ ] BYTE ;
|
||
SectorsPerCluster: KEY_DATA 'c', STRING_TO_WORD ; [ ] BYTE ;
|
||
FilesInRootDIR: KEY_DATA 'd', STRING_TO_WORD ; [ ] WORD ;
|
||
Number_of_FATs: KEY_DATA 'n', STRING_TO_WORD ; [ ] BYTE ;
|
||
RESERVED_SECTORS: KEY_DATA 'r', STRING_TO_WORD ; [ ] WORD ;
|
||
LOW_FORMAT KEY_DATA 'u', 0 ; [ ] BYTE ; ¤«ï ¤¨áª¥â
|
||
BytesPerSector KEY_DATA 's', STRING_TO_WORD ; [ ] WORD ;
|
||
;
|
||
TABLE.Size EQU $-TABLE
|
||
TABLE.Elements EQU TABLE.Size / KEYS_STR
|
||
;-----------------------;
|
||
;
|
||
; áâ âãá
|
||
Status.Off EQU 0
|
||
Status.On EQU 1
|
||
Status.Ignored EQU 2
|
||
; ‘â âãá ª«îç :
|
||
; 0 - ¥ ãáâ ®¢«¥
|
||
; 1 - ãáâ ®¢«¥
|
||
; 2 - ¨£®à¨àã¥âáï
|
||
/*
|
||
FilesInRootDIR
|
||
„«ï ⮬®¢ FAT12 ¨ FAT16 íâ® § 票¥ ¢á¥£¤ ¤®«¦® 㪠§ë¢ âì
|
||
ª®«¨ç¥á⢮, ª®â®à®¥ ¯à¨ 㬮¦¥¨¨ 32 ¤ ¥â ç¥â®¥ ç¨á«®, ªà ⮥
|
||
BPB_BytsPerSec. „«ï ¬ ªá¨¬ «ì®© ᮢ¬¥á⨬®á⨠¤«ï ⮬®¢ FAT16 á«¥¤ã¥â
|
||
¨á¯®«ì§®¢ âì § 票¥ 512.
|
||
*/
|
||
ENDMODULE
|
||
;-----------------------------------------------------------------------
|
||
|
||
|
||
;-----------------------------------------------------------------------
|
||
; root_dir_sectors = ((root_dir_entries * 32) + (bytes_per_sector - 1)) / bytes_per_sector
|
||
FAT_PARAMETERS:
|
||
.PART1 EQU $
|
||
;
|
||
.JMP: BYTE #EB,#FE,#00 ; [x] opcode jmp $
|
||
.ID_NAME BYTE "DDF " ; DSS Drive Formatter
|
||
.ID_NAME_VER BYTE "0."
|
||
.ID_NAME_MOD BYTE "00"
|
||
.BytesPerSector: WORD #200 ; predefined ; [x]
|
||
.SectorsPerCluster: BYTE 0 ; [x]
|
||
.RESERVED_SECTORS: WORD 0 ; [x]
|
||
.Number_of_FATs: BYTE 2 ; predefined ; [x]
|
||
.FilesInRootDIR: WORD 0 ; FAT32 constant ; [x]
|
||
.SectorsPerDrive: WORD 0 ; FAT32 constant ; [x] +-
|
||
.DRIVE_TYPE: BYTE 0 ; ; [x] +-
|
||
.SectorsPerFAT16: WORD 0 ; FAT32 constant ; [x]
|
||
.SectorsPerTrack WORD 9 ; BPB_SecPerTrk ; [x]
|
||
.HEADS WORD 2 ; [x]
|
||
.HIDDEN DWORD 0 ; ®â ç « MBR, extMBR ; [x]
|
||
.BPB_BIG_TOTAL_SECTORS_L WORD 0 ; [x] +-
|
||
.BPB_BIG_TOTAL_SECTORS_H WORD 0 ; [x] +-
|
||
.PART1_SIZE EQU $ - .PART1
|
||
; FAT 12, FAT 16
|
||
.PART2_FAT12_16 EQU $
|
||
;
|
||
.BPB_PHISICAL_DRIVE_NUMBER BYTE #80 ; [x]
|
||
.reserved_1 BYTE 0 ; predefined ;
|
||
; .FAT.EXT_BOOT_REC_SIGNATURE BYTE #29 ; constant ;
|
||
; .FAT.SERIAL_NUMBER DWORD 0 ;
|
||
; .FAT.LABEL DB 'NO_LABEL ' ;
|
||
; .ID_FAT DB 'FAT16 ' ;
|
||
.PART2_FAT12_16_END EQU $
|
||
|
||
; FAT32
|
||
.PART2_FAT32 EQU $
|
||
;
|
||
.SectorsPerFAT32 DWORD 0 ; [x] ;!TODO error ¥á«¨ áâ à訩 ¡ ©â !=0
|
||
.MainFATnumber WORD 0 ; BPB_ExtFlags ;
|
||
.Version WORD 0 ; constant ;
|
||
.RootDirStartCluster DWORD 2 ; FIXED! ¨á¯®«ì§ã¥âáï ¢ ä®à¬ã«¥
|
||
.FSINFO_Sector WORD 1 ; constant ;
|
||
.CopyBootSector WORD 6 ; constant ;
|
||
.reserved_block: BLOCK 12 ; constant ;
|
||
.FDD_Number BYTE 0 ; [x]
|
||
.reserved_2: BYTE 0 ; constant ;
|
||
; .FAT32.EXT_BOOT_REC_SIGNATURE BYTE #29 ; constant ;
|
||
; .FAT32.SERIAL_NUMBER DWORD 0 ;
|
||
; .FAT32.LABEL DB 'NO_LABEL ' ;
|
||
; .ID_FAT32 DB 'FAT32 ' ;
|
||
.PART2_FAT32_SIZE EQU $ - .PART2_FAT32
|
||
; SHARED
|
||
.PART3_SHARED EQU $
|
||
;
|
||
.EXT_BOOT_REC_SIGNATURE BYTE #29 ; constant ;
|
||
.SERIAL_NUMBER_1 WORD 0 ; [x]
|
||
.SERIAL_NUMBER_2 WORD 0 ; [x]
|
||
.LABEL DB 'NO_LABEL ' ; [x]
|
||
.LABEL.Size EQU $-.LABEL
|
||
.ID_FAT DB 'FAT32 ' ; [ ]
|
||
.PART3_SHARED_SIZE EQU $ - .PART3_SHARED
|
||
;-----------------------------------------------------------------------
|
||
|
||
|
||
;-----------------------------------------------------------------------
|
||
;----------------------------------------------------------------------- |