FORMAT/data.z80
Tolik Trek fa0375aad3 ...
2026-04-16 16:34:46 +10:00

192 lines
6.4 KiB
Z80 Assembly
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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