From 7464507d7fb1f53a52412567cb1206d7bf87d24c Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Tue, 12 Mar 2024 01:26:14 +1000 Subject: [PATCH] ... --- structures/FileSystem.inc | 120 +++++++++++++++++++++----------------- 1 file changed, 68 insertions(+), 52 deletions(-) diff --git a/structures/FileSystem.inc b/structures/FileSystem.inc index e36d42d..ae5c094 100644 --- a/structures/FileSystem.inc +++ b/structures/FileSystem.inc @@ -1,29 +1,29 @@ ; //--------------------------------------------------------------------------- STRUCT _sBOOT_SECTOR_PARAMS ; 62 bytes -.JMP BLOCK 3,0 ; +#00 "JMP" -.ID_NAME TEXT 8, {"DSS_1.7","0"} ; +#03 DOS NAME - DB "DSS_1.70" +.JMP: BLOCK 3,0 ; +#00 "JMP" +.ID_NAME: TEXT 8, {"DSS_1.7","0"} ; +#03 DOS NAME - DB "DSS_1.70" ; Block Parameters BIOS -.B_P_S WORD #200 ; +#0B BYTE PER SECTOR -.S_P_C BYTE 2 ; +#0D SECTORS PER CLUSTER -.RESERVED_SECTORS WORD 1 ; +#0E Размер системной области (включая этот сектор) RESERVE SECTORS -.FAT_NUM BYTE 2 ; +#10 AMOUNT FATS -.F_P_DIR WORD 112 ; +#11 Число описателей файлов в корневом каталоге (в FAT32 - 0) -.S_P_D WORD 1440 ; +#13 Общее число секторов на диске (если 0, то размер - в .BPB_BIG_TOTAL_SECTORS) -.DRIVE_TYPE BYTE #F0 ; +#15 Тип устройства -.S_P_F WORD 2 ; +#16 SIZE FAT IN SECTORS (0 в FAT32) -.S_P_T WORD 9 ; +#18 SECTOR PER TRACK -.HEADS WORD 2 ; +#1A AMOUNT SIDES -.HIDDEN DWORD 0 ; +#1C HIDDEN SECTORS -.BPB_BIG_TOTAL_SECTORS_L WORD 0 ; +#20 BIG TOTAL SECTOR Low word -.BPB_BIG_TOTAL_SECTORS_H WORD 0 ; +#22 BIG TOTAL SECTOR High word +.B_P_S: WORD #200 ; +#0B BYTE PER SECTOR +.S_P_C: BYTE 2 ; +#0D SECTORS PER CLUSTER +.RESERVED_SECTORS: WORD 1 ; +#0E Размер системной области (включая этот сектор) RESERVE SECTORS +.FAT_NUM: BYTE 2 ; +#10 AMOUNT FATS +.F_P_DIR: WORD 112 ; +#11 Число описателей файлов в корневом каталоге (в FAT32 - 0) +.S_P_D: WORD 1440 ; +#13 Общее число секторов на диске (если 0, то размер - в .BPB_BIG_TOTAL_SECTORS) +.DRIVE_TYPE: BYTE #F0 ; +#15 Тип устройства +.S_P_F: WORD 2 ; +#16 SIZE FAT IN SECTORS (0 в FAT32) +.S_P_T: WORD 9 ; +#18 SECTOR PER TRACK +.HEADS: WORD 2 ; +#1A AMOUNT SIDES +.HIDDEN: DWORD 0 ; +#1C HIDDEN SECTORS +.BPB_BIG_TOTAL_SECTORS_L: WORD 0 ; +#20 BIG TOTAL SECTOR Low word +.BPB_BIG_TOTAL_SECTORS_H: WORD 0 ; +#22 BIG TOTAL SECTOR High word ; FAT 12-16 -.BPB_PHISICAL_DRIVE_NUMBER BYTE #80 ; +#24 PHISICAL DRIVE NUMBER -.reserved BYTE 0 ; +#25 Зарезервировано -.BPB_EXT_BOOT_RECORD_SIGNATURE BYTE #29 ; +#26 EXTENDED BOOT RECORD SIGNATURE -.BPB_SERIAL_NUMBER DWORD 0 ; +#27 VOLUME SERIAL NUMBER -.BPB_LABEL TEXT 11, {"NO NAME"," "} ; +#2B DISK LABEL -.ID_FAT TEXT 8, {"FAT16"," "} ; +#36 FILE SYSTEM ID (BPB_FS_ID) ;!TODO detect fat type by clusters! +.BPB_PHISICAL_DRIVE_NUMBER: BYTE #80 ; +#24 PHISICAL DRIVE NUMBER +.reserved: BYTE 0 ; +#25 Зарезервировано +.BPB_EXT_BOOT_RECORD_SIGNATURE: BYTE #29 ; +#26 EXTENDED BOOT RECORD SIGNATURE +.BPB_SERIAL_NUMBER: DWORD 0 ; +#27 VOLUME SERIAL NUMBER +.BPB_LABEL: TEXT 11, {"NO NAME"," "} ; +#2B DISK LABEL +.ID_FAT: TEXT 8, {"FAT16"," "} ; +#36 FILE SYSTEM ID (BPB_FS_ID) ;!TODO detect fat type by clusters! ;.BOOT_CODE BLOCK 448,0 ; +#3E boot loader's code ;.MBR_PARTITION_TABLE BLOCK 4*16 ; +#1BE table = 4x16 bytes ;.MBR_SIGNATURE WORD #AA55 ; +#1FE Signature @@ -32,53 +32,69 @@ ; STRUCT _sMBR_PARTITION_RECORD -.isActive BYTE 0 ; +#00 -.Start_head BYTE 0 ; +#01 -.Start_sector BYTE 0 ; +#02 -.Start_cylinder BYTE 0 ; +#03 -.FS_ID BYTE 0 ; +#04 -.End_head BYTE 0 ; +#05 -.End_sector BYTE 0 ; +#06 -.End_cylinder BYTE 0 ; +#07 -.Start_LBA DWORD 0 ; +#08 -.Size_LBA DWORD 0 ; +#0C +.isActive: BYTE 0 ; +#00 +.Start_head: BYTE 0 ; +#01 +.Start_sector: BYTE 0 ; +#02 +.Start_cylinder: BYTE 0 ; +#03 +.FS_ID: BYTE 0 ; +#04 +.End_head: BYTE 0 ; +#05 +.End_sector: BYTE 0 ; +#06 +.End_cylinder: BYTE 0 ; +#07 +.Start_LBA: DWORD 0 ; +#08 +.Size_LBA: DWORD 0 ; +#0C ENDS ; ; STRUCT _sMBR_PARTITION_TABLE ;, #01BE ; MBR: Offset of partition table in the MBR -.Record_1 _sMBR_PARTITION_RECORD ; +#01BE -.Record_2 _sMBR_PARTITION_RECORD ; +#01CE -.Record_3 _sMBR_PARTITION_RECORD ; +#01DE -.Record_4 _sMBR_PARTITION_RECORD ; +#01EE +.Record_1: _sMBR_PARTITION_RECORD ; +#01BE +.Record_2: _sMBR_PARTITION_RECORD ; +#01CE +.Record_3: _sMBR_PARTITION_RECORD ; +#01DE +.Record_4: _sMBR_PARTITION_RECORD ; +#01EE ENDS ; ; STRUCT _sBOOT_SECTOR -.PARAMS _sBOOT_SECTOR_PARAMS -.BOOT_CODE BLOCK 384,0 ; +#3E boot loader's code -.PARTITION_TABLE _sMBR_PARTITION_TABLE -.MBR_SIGNATURE WORD #AA55 ; +#01FE +.PARAMS: _sBOOT_SECTOR_PARAMS +.BOOT_CODE: BLOCK 384,0 ; +#3E boot loader's code +.PARTITION_TABLE: _sMBR_PARTITION_TABLE +.MBR_SIGNATURE: WORD #AA55 ; +#01FE ENDS + + STRUCT _sFAT_DIRECTORY_RECORD +.NAME: TEXT 8,{". "," "} ;+ #00 +00 NAME +.EXT: TEXT 3,{" "," "} ;+ #08 +08 EXT +.ATTRIBUT: BYTE #10 ;+ #0B +11 ATTRIBUT +.RESERVED_NT: BYTE #00 ;+ #0C +12 RESERVED +.RESERVED_FAT32: BYTE #00 ;+ #0D +13 RESERVED +.CREATE_TIME_FAT32: WORD #0000 ;+ #0E +14 RESERVED +.CREATE_DATE_FAT32: WORD #0000 ;+ #10 +16 RESERVED +.RESERVED_FAT32_1: WORD #0000 ;+ #12 +18 RESERVED +.FIRST_CLUSTER_H: WORD #0000 ;+ #14 +20 RESERVED +.TIME: WORD #0000 ;+ #16 +22 TIME +.DATE: WORD #0000 ;+ #18 +24 DATE +.FIRST_CLUSTER_L: WORD #0000 ;+ #1A +26 START CLUSTER ;!TODO fat32 +.F_SIZE: DWORD #00000000 ;+ #1C +28 SIZE FILE + ENDS //--------------------------------------------------------------------------- ; //--------------------------------------------------------------------------- PartitionSysTypes: -.Empty EQU #00 -.FAT12 EQU #01 -.FAT16_32Mb EQU #04 -.Extended EQU #05 -.FAT16 EQU #06 -.HPFS_NTFS EQU #07 -.FAT32 EQU #0B -.FAT32_LBA EQU #0C -.FAT16_LBA EQU #0E -.Win_Ext_LBA EQU #0F -.Linux_swap EQU #82 -.Linux EQU #83 -.Linux_extended EQU #85 +.Empty: EQU #00 +.FAT12: EQU #01 +.FAT16_32Mb: EQU #04 +.Extended: EQU #05 +.FAT16: EQU #06 +.HPFS_NTFS: EQU #07 +.FAT32: EQU #0B +.FAT32_LBA: EQU #0C +.FAT16_LBA: EQU #0E +.Win_Ext_LBA: EQU #0F +.Linux_swap: EQU #82 +.Linux: EQU #83 +.Linux_extended: EQU #85 //--------------------------------------------------------------------------- ;