FORMAT/format/data.z80
2026-04-03 22:40:08 +10:00

129 lines
4.7 KiB
Z80 Assembly

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