diff --git a/structures/FileSystem.inc b/structures/FileSystem.inc index 6ffffbf..ca8568e 100644 --- a/structures/FileSystem.inc +++ b/structures/FileSystem.inc @@ -1,50 +1,111 @@ +//////////////////////////////////////////////////////////////////////////////////////////// +BOOT_SECTOR EQU #00 +.JMP EQU #00 ; BLOCK 3,0 BS_jmpBoot "JMP" +.ID_NAME EQU #03 ; TEXT 8 BS_OEMName DOS NAME - DB "DSS_1.70" + ; Block Parameters BIOS +.BytesPerSector EQU #0B ; WORD #200 BPB_BytsPerSec Размер сектора в байтах +.SectorsPerCluster EQU #0D ; BYTE 2 BPB_SecPerClus Размер кластера в секторах +.RESERVED_SECTORS EQU #0E ; WORD 1 BPB_RsvdSecCnt Размер системной области (включая этот сектор) RESERVE SECTORS +.Number_of_FATs EQU #10 ; BYTE 2 BPB_NumFATs Количество таблиц FAT +.FilesInRootDIR EQU #11 ; WORD 112 BPB_RootEntCnt Число описателей файлов в корневом каталоге (в FAT32 - 0) +.SectorsPerDrive EQU #13 ; WORD 1440 BPB_TotSec16 Общее число секторов на диске (если 0, то размер - в .BPB_BIG_TOTAL_SECTORS) +.DRIVE_TYPE EQU #15 ; BYTE #F0 BPB_Media Тип устройства +.SectorsPerFAT16 EQU #16 ; WORD 2 BPB_FATSz16 Размер одной FAT в секторах (0 в FAT32) +.SectorsPerTrack EQU #18 ; WORD 9 BPB_SecPerTrk Размер дорожки в секторах +.HEADS EQU #1A ; WORD 2 BPB_NumHeads количество головок +.HIDDEN EQU #1C ; DWORD 0 BPB_HiddSec количество крытых секторов +.BPB_BIG_TOTAL_SECTORS_L EQU #20 ; WORD 0 BPB_TotSec32 BIG TOTAL SECTOR Low word +.BPB_BIG_TOTAL_SECTORS_H EQU #22 ; WORD 0 BPB_TotSec32 BIG TOTAL SECTOR High word + ; FAT 12, FAT 16 +.BPB_PHISICAL_DRIVE_NUMBER EQU #24 ; BYTE #80 BS_DrvNum Физический номер драйва +.reserved_1 EQU #25 ; BYTE 0 BS_Reserved1 Зарезервировано +.FAT.EXT_BOOT_REC_SIGNATURE EQU #26 ; BYTE #29 BS_BootSig Сигнатура - #29 +.FAT.SERIAL_NUMBER EQU #27 ; DWORD 0 BS_VolID VOLUME SERIAL NUMBER +.FAT.LABEL EQU #2B ; TEXT 11 BS_VolLab Метка диска +.ID_FAT EQU #36 ; TEXT 8 BS_FilSysType FILE SYSTEM ID (BPB_FS_ID) ;!TODO detect fat type by clusters! + ; FAT 32 +.SectorsPerFAT32 EQU #24 ; DWORD 4 BPB_FATSz32 Размер одной FAT в секторах +.MainFATnumber EQU #28 ; WORD 0 BPB_ExtFlags Номер главной таблицы FAT +.Version EQU #2A ; WORD 0 BPB_FSVer Версия FAT32 (обычно 0) +.RootDirStartCluster EQU #2C ; DWORD 2 BPB_RootClus Первый кластер корневого каталога (обычно 2) +.FSINFO_Sector EQU #30 ; WORD 1 BPB_FSInfo Номер сектора структуры FSINFO (обычно 1) +.CopyBootSector EQU #32 ; WORD 6 BPB_BkBootSec Номер сектора - копии загрузочного (обычно 6) +.reserved_block: EQU #34 ; BLOCK 12 BPB_Reserved Зарезервировано +.FDD_Number EQU #40 ; BYTE 0 BS_DrvNum Номер дисковода для функций BIOS +.reserved_2: EQU #41 ; BYTE 0 BS_Reserved1 Зарезервировано +.FAT32.EXT_BOOT_REC_SIGNATURE EQU #42 ; BYTE #29 BS_BootSig Сигнатура - #29 +.FAT32.SERIAL_NUMBER EQU #43 ; DWORD 0 BS_VolID VOLUME SERIAL NUMBER +.FAT32.LABEL EQU #47 ; TEXT 11, BS_VolLab Метка диска +.ID_FAT32 EQU #52 ; TEXT 8, BS_FilSysType Аббревиатура файловой системы + ; PC Loader +.BOOT_CODE_FAT16 EQU #3E +.BOOT_CODE_FAT32 EQU #5A + ; Partition table +.PARTITION_TABLE EQU #1BE +.PARTITION_TABLE.Size EQU #40 +.RECORD_SIZE EQU #10 + ; Record +.Partition.isActive EQU #00 ; BYTE 0 +.Partition.Start_head EQU #01 ; BYTE 0 +.Partition.Start_sector EQU #02 ; BYTE 0 +.Partition.Start_cylinder EQU #03 ; BYTE 0 +.Partition.FS_ID EQU #04 ; BYTE 0 +.Partition.End_head EQU #05 ; BYTE 0 +.Partition.End_sector EQU #06 ; BYTE 0 +.Partition.End_cylinder EQU #07 ; BYTE 0 +.Partition.Start_LBA EQU #08 ; DWORD 0 +.Partition.Size_LBA EQU #0C ; DWORD 0 + ; Signature +.MBR_SIGNATURE EQU #1FE; WORD #AA55 +//////////////////////////////////////////////////////////////////////////////////////////// + + ; //--------------------------------------------------------------------------- - 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" + STRUCT _sBOOT_SECTOR_PARAMS +.JMP: BLOCK 3,0 ; BS_jmpBoot +#00 "JMP" +.ID_NAME: TEXT 8,{"DSS_1.7","0"} ; BS_OEMName +#03 DOS NAME - DB "DSS_1.70" ; Block Parameters BIOS -.BytesPerSector: WORD #200 ; +#0B Размер сектора в байтах -.SectorsPerCluster: BYTE 2 ; +#0D Размер кластера в секторах -.RESERVED_SECTORS: WORD 1 ; +#0E Размер системной области (включая этот сектор) RESERVE SECTORS -.Number_of_FATs: BYTE 2 ; +#10 Количество таблиц FAT -.FilesInRootDIR: WORD 112 ; +#11 Число описателей файлов в корневом каталоге (в FAT32 - 0) -.SectorsPerDrive: WORD 1440 ; +#13 Общее число секторов на диске (если 0, то размер - в .BPB_BIG_TOTAL_SECTORS) -.DRIVE_TYPE: BYTE #F0 ; +#15 Тип устройства -.SectorsPerFAT16: WORD 2 ; +#16 Размер одной FAT в секторах (0 в FAT32) -.SectorsPerTrack: WORD 9 ; +#18 Размер дорожки в секторах -.HEADS: WORD 2 ; +#1A количество головок -.HIDDEN: DWORD 0 ; +#1C количество крытых секторов -.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 +.BytesPerSector: WORD #200 ; BPB_BytsPerSec +#0B Размер сектора в байтах +.SectorsPerCluster: BYTE 2 ; BPB_SecPerClus +#0D Размер кластера в секторах +.RESERVED_SECTORS: WORD 1 ; BPB_RsvdSecCnt +#0E Размер системной области (включая этот сектор) RESERVE SECTORS +.Number_of_FATs: BYTE 2 ; BPB_NumFATs +#10 Количество таблиц FAT +.FilesInRootDIR: WORD 112 ; BPB_RootEntCnt +#11 Число описателей файлов в корневом каталоге (в FAT32 - 0) +.SectorsPerDrive: WORD 1440 ; BPB_TotSec16 +#13 Общее число секторов на диске (если 0, то размер - в .BPB_BIG_TOTAL_SECTORS) +.DRIVE_TYPE: BYTE #F0 ; BPB_Media +#15 Тип устройства +.SectorsPerFAT16: WORD 2 ; BPB_FATSz16 +#16 Размер одной FAT в секторах (0 в FAT32) +.SectorsPerTrack: WORD 9 ; BPB_SecPerTrk +#18 Размер дорожки в секторах +.HEADS: WORD 2 ; BPB_NumHeads +#1A количество головок +.HIDDEN: DWORD 0 ; BPB_HiddSec +#1C количество крытых секторов +.BPB_BIG_TOTAL_SECTORS_L: WORD 0 ; BPB_TotSec32 +#20 BIG TOTAL SECTOR Low word +.BPB_BIG_TOTAL_SECTORS_H: WORD 0 ; BPB_TotSec32 +#22 BIG TOTAL SECTOR High word ; FAT 12-16 -.BPB_PHISICAL_DRIVE_NUMBER: BYTE #80 ; +#24 Физический номер драйва -.reserved: BYTE 0 ; +#25 Зарезервировано -.BPB_EXT_BOOT_RECORD_SIGNATURE: BYTE #29 ; +#26 Сигнатура - #29 -.BPB_SERIAL_NUMBER: DWORD 0 ; +#27 VOLUME SERIAL NUMBER -.BPB_LABEL: TEXT 11, {"NO NAME"," "} ; +#2B Метка диска -.ID_FAT: TEXT 8, {"FAT16"," "} ; +#36 FILE SYSTEM ID (BPB_FS_ID) ;!TODO detect fat type by clusters! - ENDS -;.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 +.BPB_PHISICAL_DRIVE_NUMBER: BYTE #80 ; BS_DrvNum +#24 Физический номер драйва +.reserved: BYTE 0 ; BS_Reserved1 +#25 Зарезервировано +.BPB_EXT_BOOT_RECORD_SIGNATURE: BYTE #29 ; BS_BootSig +#26 Сигнатура - #29 +.BPB_SERIAL_NUMBER: DWORD 0 ; BS_VolID +#27 VOLUME SERIAL NUMBER +.BPB_LABEL: TEXT 11,{"NO NAME"," "}; BS_VolLab +#2B Метка диска +.ID_FAT: TEXT 8,{"FAT16"," "} ; BS_FilSysType +#36 FILE SYSTEM ID (BPB_FS_ID) ;!TODO detect fat type by clusters! + ENDS ; ; + ; FAT 32 STRUCT _sBOOT_SECTOR_PARAMS_FAT32 -.SectorsPerFAT32: DWORD 4 ; +#24 Размер одной FAT в секторах -.MainFATnumber WORD 0 ; +#28 Номер главной таблицы FAT -.Version WORD 0 ; +#2A Версия FAT32 (обычно 0) -.RootDirStartCluster: DWORD 2 ; +#2C Первый кластер корневого каталога (обычно 2) -.FSINFO_Sector WORD 1 ; +#30 Номер сектора структуры FSINFO (обычно 1) -.CopyBootSector WORD 6 ; +#32 Номер сектора - копии загрузочного (обычно 6) -.reserved_block: BLOCK 12 ; +#34 Зарезервировано -.FDD_Number BYTE 0 ; +#40 Номер дисковода для функций BIOS -.reserved: BYTE 0 ; +#41 Зарезервировано -.BPB_EXT_BOOT_RECORD_SIGNATURE: BYTE #29 ; +#42 Сигнатура - #29 -.BPB_SERIAL_NUMBER: DWORD 0 ; +#43 VOLUME SERIAL NUMBER -.BPB_LABEL: TEXT 11, {"NO NAME"," "} ; +#47 Метка диска -.ID_FAT: TEXT 8, {"FAT16"," "} ; +#52 Аббревиатура файловой системы - ENDS +.skip BLOCK #24,0 +.SectorsPerFAT32: DWORD 4 ; +#24 Размер одной FAT в секторах +.MainFATnumber WORD 0 ; +#28 Номер главной таблицы FAT +.Version WORD 0 ; +#2A Версия FAT32 (обычно 0) +.RootDirStartCluster: DWORD 2 ; +#2C Первый кластер корневого каталога (обычно 2) +.FSINFO_Sector WORD 1 ; +#30 Номер сектора структуры FSINFO (обычно 1) +.CopyBootSector WORD 6 ; +#32 Номер сектора - копии загрузочного (обычно 6) +.reserved_block: BLOCK 12 ; +#34 Зарезервировано +.FDD_Number BYTE 0 ; +#40 Номер дисковода для функций BIOS +.reserved: BYTE 0 ; +#41 Зарезервировано +.BPB_EXT_BOOT_RECORD_SIGNATURE: BYTE #29 ; +#42 Сигнатура - #29 +.BPB_SERIAL_NUMBER: DWORD 0 ; +#43 VOLUME SERIAL NUMBER +.BPB_LABEL: TEXT 11,{"NO NAME"," "} ; +#47 Метка диска +.ID_FAT: TEXT 8,{"FAT16"," "} ; +#52 Аббревиатура файловой системы + ENDS ; +#5A ; ; @@ -75,10 +136,12 @@ 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 +.PARTITION_TABLE: _sMBR_PARTITION_TABLE ; +#1BE table = 4x16 bytes +.MBR_SIGNATURE: WORD #AA55 ; +#1FE Signature ENDS +; +; STRUCT _sFAT_DIRECTORY_RECORD .NAME: TEXT 8,{". "," "} ;+ #00 +00 NAME .EXT: TEXT 3,{" "," "} ;+ #08 +08 EXT