;ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл ;лллллллллллллллллллллллллллллллл DATA ллллллллллллллллллллллллллллллллл ;ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл ;----------------------------------------------------------------------- MACRO FAT_TYPES_LINE vol_size, clu_size, fat_type WORD vol_size, clu_size BYTE fat_type ENDM MODULE TABLES FAT12 EQU 3 FAT16 EQU 2 FAT32 EQU 4 ; VOL SIZE CLUSTER SIZE FAT TYPE FAT_TYPES: FAT_TYPES_LINE #0800, 32768, FAT32 ; > 32768 FAT_TYPES_LINE #0400, 16384, FAT32 ; 16384..32768 Mb FAT_TYPES_LINE #0200, 8192, FAT32 ; 8192..16384 Mb FAT_TYPES_LINE #0100, 4096, FAT32 ; 4096..8192 Mb FAT_TYPES_LINE #0080, 32768, FAT16 ; 2048..4096 Mb FAT_TYPES_LINE #0040, 16384, FAT16 ; 1023..2048 Mb FAT_TYPES_LINE #0020, 8192, FAT16 ; 511..1023 Mb FAT_TYPES_LINE #0010, 4096, FAT16 ; 256..511 Mb FAT_TYPES_LINE #0008, 2048, FAT16 ; 128..256 Mb FAT_TYPES_LINE #0004, 1024, FAT16 ; 64..128 Mb FAT_TYPES_LINE #0002, 512, FAT16 ; 32..64 Mb ; ЅсЋЈ ЌЅ­ьшЅ, тЎ FAT12 .LineSize EQU 5 .Records EQU ($ - FAT_TYPES)/.LineSize ENDMODULE ;----------------------------------------------------------------------- ;----------------------------------------------------------------------- VARIABLES EQU $ .FAT_TYPE BYTE TABLES.FAT12 ; [x] .CurrentDrive DB 0 .VOLUME_SIZE_BYTES BLOCK 5,0 .FatFDD_ReservedSectors WORD 1 .FatHDD_ReservedSectors WORD 8 .Fat32_ReservedSectors WORD 32 .RootDirSectors WORD 0 .NotUsedSpace BYTE 0 ; in sectors .total_clusters_L: WORD 0 .total_clusters_H: WORD 0 .FAT32_RootDirClusters WORD 1 .FAT.LABEL BYTE 'NO_LABEL ' .DriveExtendedParameters BYTE 0 ;----------------------------------------------------------------------- ;----------------------------------------------------------------------- ; ŠЋюч Ђыст ЂЋЅ­ : „ЅфЎЋт­ЎЅ Ї­ чЅ­ЈЅ KEYS_PARAMETERS EQU $ .ONLY_HELP BYTE 0 : BYTE 0 ; [ ] /? ; ЂыЂЎЄ сЏр ЂЊЈ .FAT_TYPE BYTE 0 : BYTE TABLES.FAT12 ; [ ] /t ; .BytesPerSector BYTE 0 : WORD #200 ; [ ] /s ; .SectorsPerCluster: BYTE 0 : BYTE 0 ; [ ] /c ; .Number_of_FATs: BYTE 0 : BYTE 2 ; [ ] /n ; .FilesInRootDIR: BYTE 0 : WORD 0 ; [ ] /d ; .RESERVED_SECTORS: BYTE 0 : WORD 0 ; [ ] /r ; .LOW_FORMAT BYTE 0 : BYTE 0 ; [ ] /l ; ЄЋя ЄЈсЊЅт ;----------------------------------------------------------------------- ;----------------------------------------------------------------------- ; 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 ; [ ] FAT ; [x] FAT32 .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 $ ; .FAT.EXT_BOOT_REC_SIGNATURE BYTE #29 ; constant ; .FAT.SERIAL_NUMBER DWORD 0 ; [ ] .FAT.LABEL DB 'NO_LABEL ' ; [ ] ;!TODO ЄЎЏЎЋ­ЈтЅЋь­Ў ЏЈс ть Ђ ЊЎр­ЅЂую ЄЈрЅЊтЎрЈю .ID_FAT DB 'FAT32 ' ; .PART3_SHARED_SIZE EQU $ - .PART3_SHARED ;----------------------------------------------------------------------- ;----------------------------------------------------------------------- ;-----------------------------------------------------------------------