mirror of
https://github.com/Tolik-Trek/FORMAT.git
synced 2026-06-15 01:11:39 +03:00
222 lines
7.5 KiB
Z80 Assembly
222 lines
7.5 KiB
Z80 Assembly
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ DATA ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
;-----------------------------------------------------------------------
|
||
MODULE CONSTANTS
|
||
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
|
||
.HDD EQU 512
|
||
;
|
||
FAT_ReservedSectors:
|
||
.FAT EQU 1
|
||
.FAT32 EQU 32
|
||
ENDMODULE
|
||
;-----------------------------------------------------------------------
|
||
|
||
|
||
;-----------------------------------------------------------------------
|
||
MACRO FAT_TYPES_LINE vol_size, clu_size, fat_type
|
||
DWORD vol_size
|
||
WORD clu_size
|
||
BYTE fat_type
|
||
ENDM
|
||
|
||
MODULE TABLES
|
||
; VOL SIZE CLUSTER SIZE FAT TYPE
|
||
FAT_TYPES: FAT_TYPES_LINE #04000000, 32768, CONSTANTS.FAT32 ; > 16383
|
||
FAT_TYPES_LINE #02000000, 16384, CONSTANTS.FAT32 ; 8191..16383 Mb
|
||
FAT_TYPES_LINE #01000000, 8192, CONSTANTS.FAT32 ; 4095..8191 Mb
|
||
FAT_TYPES_LINE #007FFE80, 4096, CONSTANTS.FAT32 ; 2048..4095 Mb
|
||
FAT_TYPES_LINE #00400140, 32768, CONSTANTS.FAT16 ; 1023..2047 Mb
|
||
FAT_TYPES_LINE #002002A0, 16384, CONSTANTS.FAT16 ; 511..1023 Mb
|
||
FAT_TYPES_LINE #00100350, 8192, CONSTANTS.FAT16 ; 255..511 Mb
|
||
FAT_TYPES_LINE #000803A8, 4096, CONSTANTS.FAT16 ; 127..255 Mb
|
||
FAT_TYPES_LINE #0001FED0, 2048, CONSTANTS.FAT16 ; 32..127 Mb
|
||
FAT_TYPES_LINE #0000FF80, 8192, CONSTANTS.FAT12 ; 16..32 Mb
|
||
FAT_TYPES_LINE #00007FD8, 4096, CONSTANTS.FAT12 ; 8..16 Mb
|
||
FAT_TYPES_LINE #00004004, 2048, CONSTANTS.FAT12 ; 4..8 Mb
|
||
FAT_TYPES_LINE #0000201A, 1024, CONSTANTS.FAT12 ; 2..4 Mb
|
||
FAT_TYPES_LINE #000012C0, 512, CONSTANTS.FAT12 ; 1,2..2 Mb
|
||
FAT_TYPES_LINE #000005A0, 1024, CONSTANTS.FAT12 ; 0,36..1.1 Mb
|
||
FAT_TYPES_LINE #00000008, 512, CONSTANTS.FAT12 ; 0..0,35 Mb
|
||
; ¥á«¨ ¬¥ìè¥, â® error
|
||
.LineSize EQU 7
|
||
.Records EQU ($ - FAT_TYPES)/.LineSize
|
||
ENDMODULE
|
||
;
|
||
; ¤«ï ¤¢ãå â ¡«¨æ FAT „«ï ®¤®©
|
||
; #007FFE80 #007FFC80 ; 2048..8191 Mb
|
||
; #00400140 #003FFF40 ; 1023..2047 Mb
|
||
; #002002A0 #002000A0 ; 511..1023 Mb
|
||
; #00100350 #00100150 ; 255..511 Mb
|
||
; #000803A8 #000801A8 ; 127..255 Mb
|
||
; #0001FED0 #0001FEB8 ; 32..127 Mb
|
||
; #0000FF80 #0000FF68 ; 16..32 Mb
|
||
; #00007FD8 #00007FC0 ; 8..16 Mb
|
||
; #00004004 #00003FEC ; 4..8 Mb
|
||
; #0000201A #00002002 ; 2..4 Mb
|
||
;-----------------------------------------------------------------------
|
||
|
||
;-----------------------------------------------------------------------
|
||
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
|
||
;-----------------------------------------------------------------------
|
||
|
||
|
||
;-----------------------------------------------------------------------
|
||
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 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 ; [ ] ¥¯à ¢¨«ì® áç¨â îâáï?
|
||
.RootDirFirstSector_L WORD 0 ; [x] ¢ëç¨á«ï¥âáï ¢ FORMAT_DRIVE
|
||
.RootDirFirstSector_H WORD 0 ; [x] ¢ëç¨á«ï¥âáï ¢ FORMAT_DRIVE
|
||
.SectorsPerFAT_L WORD 0 ; [x]
|
||
.SectorsPerFAT_H WORD 0 ; [x]
|
||
.ClusterSize WORD 0 ; [x]
|
||
;-----------------------------------------------------------------------
|
||
|
||
|
||
;-----------------------------------------------------------------------
|
||
; 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_SIZE 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
|
||
;-----------------------------------------------------------------------
|
||
|
||
|
||
;-----------------------------------------------------------------------
|
||
;----------------------------------------------------------------------- |