This commit is contained in:
Tolik 2025-05-25 01:02:32 +10:00
parent 1b6a539aea
commit 25ac1c89f4

View File

@ -62,114 +62,146 @@ BOOT_SECTOR EQU #00
//////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////
STRUCT _sFSinfo STRUCT _sFSinfo
.LEAD_SIGNATURE DWORD #41615252 ; #52 #52 #61 #41 .LEAD_SIGNATURE DWORD #4161'5252 ; #00 ; #52,#52,#61,#41
.RESERVED_1 BLOCK #1E0,0 .RESERVED_1 BLOCK #1E0,0 ; #04
.DATA_SIGNATURE DWORD #61417272 ; #72 #72 #41 #61 .DATA_SIGNATURE DWORD #6141'7272 ; #1E4 ; #72,#72,#41,#61
.FREE_CLUSTERS_COUNT DWORD #FFFF'FFFF .FREE_CLUSTERS_COUNT DWORD #FFFF'FFFF ; #1E8
.FIRST_FREE_CLUSTER DWORD #FFFF'FFFF .FIRST_FREE_CLUSTER DWORD #FFFF'FFFF ; #1EC
.RESERVED_2 BLOCK #0C,0 .RESERVED_2 BLOCK #0C,0 ; #1F0
.SECTOR_SIGNATURE DWORD #AA550000 ; #00 #00 #55 #AA .SECTOR_SIGNATURE DWORD #AA55'0000 ; #00 #00 #55 #AA
ENDS ENDS
; ;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
STRUCT _sBOOT_SECTOR_PARAMS STRUCT _sBOOT_SECTOR_PARAMS ; FAT 12-16
.JMP: BLOCK 3,0 ; BS_jmpBoot +#00 "JMP" .JMP D24 #000000 ; BS_jmpBoot +#00 "JMP"
.ID_NAME: TEXT 8,{"DSS_1.7","0"} ; BS_OEMName +#03 DOS NAME - DB "DSS_1.70" .ID_NAME TEXT 8,{"DSS 1.7","1"} ; BS_OEMName +#03 DOS NAME - DB "DSS_1.70"
; Block Parameters BIOS ; Block Parameters BIOS
.BytesPerSector: WORD #200 ; BPB_BytsPerSec +#0B <20> §¬¥à ᥪâ®à  ¢ ¡ ©â å .BytesPerSector WORD #200 ; BPB_BytsPerSec +#0B <20> §¬¥à ᥪâ®à  ¢ ¡ ©â å
.SectorsPerCluster: BYTE 2 ; BPB_SecPerClus +#0D <20> §¬¥à ª« áâ¥à  ¢ ᥪâ®à å .SectorsPerCluster BYTE 2 ; BPB_SecPerClus +#0D <20> §¬¥à ª« áâ¥à  ¢ ᥪâ®à å
.RESERVED_SECTORS: WORD 1 ; BPB_RsvdSecCnt +#0E <20> §¬¥à á¨á⥬­®© ®¡« á⨠(¢ª«îç ï íâ®â ᥪâ®à) RESERVE SECTORS .RESERVED_SECTORS WORD 1 ; BPB_RsvdSecCnt +#0E <20> §¬¥à á¨á⥬­®© ®¡« á⨠(¢ª«îç ï íâ®â ᥪâ®à) RESERVE SECTORS
.Number_of_FATs: BYTE 2 ; BPB_NumFATs +#10 Š®«¨ç¥á⢮ â ¡«¨æ FAT .Number_of_FATs BYTE 2 ; BPB_NumFATs +#10 Š®«¨ç¥á⢮ â ¡«¨æ FAT
.FilesInRootDIR: WORD 112 ; BPB_RootEntCnt +#11 —¨á«® ®¯¨á â¥«¥© ä ©«®¢ ¢ ª®à­¥¢®¬ ª â «®£¥ (¢ FAT32 - 0) .FilesInRootDIR WORD 112 ; BPB_RootEntCnt +#11 —¨á«® ®¯¨á â¥«¥© ä ©«®¢ ¢ ª®à­¥¢®¬ ª â «®£¥ (¢ FAT32 - 0)
.SectorsPerDrive: WORD 1440 ; BPB_TotSec16 +#13 ޡ饥 ç¨á«® ᥪâ®à®¢ ­  ¤¨áª¥ (¥á«¨ 0, â® à §¬¥à - ¢ .BPB_BIG_TOTAL_SECTORS) .SectorsPerDrive WORD 1440 ; BPB_TotSec16 +#13 ޡ饥 ç¨á«® ᥪâ®à®¢ ­  ¤¨áª¥ (¥á«¨ 0, â® à §¬¥à - ¢ .BPB_BIG_TOTAL_SECTORS)
.DRIVE_TYPE: BYTE #F0 ; BPB_Media +#15 ’¨¯ ãáâனá⢠ .DRIVE_TYPE BYTE #F0 ; BPB_Media +#15 ’¨¯ ãáâனá⢠
.SectorsPerFAT16: WORD 2 ; BPB_FATSz16 +#16 <20> §¬¥à ®¤­®© FAT ¢ ᥪâ®à å (0 ¢ FAT32) .SectorsPerFAT16 WORD 2 ; BPB_FATSz16 +#16 <20> §¬¥à ®¤­®© FAT ¢ ᥪâ®à å (0 ¢ FAT32)
.SectorsPerTrack: WORD 9 ; BPB_SecPerTrk +#18 <20> §¬¥à ¤®à®¦ª¨ ¢ ᥪâ®à å .SectorsPerTrack WORD 9 ; BPB_SecPerTrk +#18 <20> §¬¥à ¤®à®¦ª¨ ¢ ᥪâ®à å
.HEADS: WORD 2 ; BPB_NumHeads +#1A ª®«¨ç¥á⢮ £®«®¢®ª .HEADS WORD 2 ; BPB_NumHeads +#1A ª®«¨ç¥á⢮ £®«®¢®ª
.HIDDEN: DWORD 0 ; BPB_HiddSec +#1C ª®«¨ç¥á⢮ ªàëâëå ᥪâ®à®¢ .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_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 .BPB_BIG_TOTAL_SECTORS_H WORD 0 ; BPB_TotSec32 +#22 BIG TOTAL SECTOR High word
; FAT 12-16 ; FAT 12-16
.BPB_PHISICAL_DRIVE_NUMBER: BYTE #80 ; BS_DrvNum +#24 ”¨§¨ç¥áª¨© ­®¬¥à ¤à ©¢  .BPB_PHISICAL_DRIVE_NUMBER BYTE #80 ; BS_DrvNum +#24 ”¨§¨ç¥áª¨© ­®¬¥à ¤à ©¢ 
.reserved: BYTE 0 ; BS_Reserved1 +#25 ‡ à¥§¥à¢¨à®¢ ­® .reserved BYTE 0 ; BS_Reserved1 +#25 ‡ à¥§¥à¢¨à®¢ ­®
.BPB_EXT_BOOT_RECORD_SIGNATURE: BYTE #29 ; BS_BootSig +#26 ‘¨£­ âãà  - #29 .BPB_EXT_BOOT_RECORD_SIGNATURE BYTE #29 ; BS_BootSig +#26 ‘¨£­ âãà  - #29
.BPB_SERIAL_NUMBER: DWORD 0 ; BS_VolID +#27 VOLUME SERIAL NUMBER .BPB_SERIAL_NUMBER DWORD 0 ; BS_VolID +#27 VOLUME SERIAL NUMBER
.BPB_LABEL: TEXT 11,{"NO NAME"," "}; BS_VolLab +#2B Œ¥âª  ¤¨áª  .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! .ID_FAT TEXT 8,{"FAT16"," "} ; BS_FilSysType +#36 FILE SYSTEM ID (BPB_FS_ID) ;!TODO detect fat type by clusters!
ENDS ; ENDS ;
; ;
; FAT 32 ; FAT 32
STRUCT _sBOOT_SECTOR_PARAMS_FAT32 STRUCT _sBOOT_SECTOR_PARAMS_FAT32
.skip BLOCK #24,0 .skip BLOCK #24,0
.SectorsPerFAT32: DWORD 4 ; +#24 <20> §¬¥à ®¤­®© FAT ¢ ᥪâ®à å .SectorsPerFAT32 DWORD 4 ; +#24 <20> §¬¥à ®¤­®© FAT ¢ ᥪâ®à å
.MainFATnumber WORD 0 ; +#28 <20>®¬¥à £« ¢­®© â ¡«¨æë FAT .MainFATnumber WORD 0 ; +#28 <20>®¬¥à £« ¢­®© â ¡«¨æë FAT
.Version WORD 0 ; +#2A ‚¥àá¨ï FAT32 (®¡ëç­® 0) .Version WORD 0 ; +#2A ‚¥àá¨ï FAT32 (®¡ëç­® 0)
.RootDirStartCluster: DWORD 2 ; +#2C <20>¥à¢ë© ª« áâ¥à ª®à­¥¢®£® ª â «®£  (®¡ëç­® 2) .RootDirStartCluster DWORD 2 ; +#2C <20>¥à¢ë© ª« áâ¥à ª®à­¥¢®£® ª â «®£  (®¡ëç­® 2)
.FSINFO_Sector WORD 1 ; +#30 <20>®¬¥à ᥪâ®à  áâàãªâãàë FSINFO (®¡ëç­® 1) .FSINFO_Sector WORD 1 ; +#30 <20>®¬¥à ᥪâ®à  áâàãªâãàë FSINFO (®¡ëç­® 1)
.CopyBootSector WORD 6 ; +#32 <20>®¬¥à ᥪâ®à  - ª®¯¨¨ § £à㧮筮£® (®¡ëç­® 6) .CopyBootSector WORD 6 ; +#32 <20>®¬¥à ᥪâ®à  - ª®¯¨¨ § £à㧮筮£® (®¡ëç­® 6)
.reserved_block: BLOCK 12 ; +#34 ‡ à¥§¥à¢¨à®¢ ­® .reserved_block BLOCK 12 ; +#34 ‡ à¥§¥à¢¨à®¢ ­®
.FDD_Number BYTE 0 ; +#40 <20>®¬¥à ¤¨áª®¢®¤  ¤«ï ä㭪権 BIOS .FDD_Number BYTE 0 ; +#40 <20>®¬¥à ¤¨áª®¢®¤  ¤«ï ä㭪権 BIOS
.reserved: BYTE 0 ; +#41 ‡ à¥§¥à¢¨à®¢ ­® .reserved BYTE 0 ; +#41 ‡ à¥§¥à¢¨à®¢ ­®
.BPB_EXT_BOOT_RECORD_SIGNATURE: BYTE #29 ; +#42 ‘¨£­ âãà  - #29 .BPB_EXT_BOOT_RECORD_SIGNATURE BYTE #29 ; +#42 ‘¨£­ âãà  - #29
.BPB_SERIAL_NUMBER: DWORD 0 ; +#43 VOLUME SERIAL NUMBER .BPB_SERIAL_NUMBER DWORD 0 ; +#43 VOLUME SERIAL NUMBER
.BPB_LABEL: TEXT 11,{"NO NAME"," "} ; +#47 Œ¥âª  ¤¨áª  .BPB_LABEL TEXT 11,{"NO NAME"," "} ; +#47 Œ¥âª  ¤¨áª 
.ID_FAT: TEXT 8,{"FAT16"," "} ; +#52 €¡¡à¥¢¨ âãà  ä ©«®¢®© á¨á⥬ë .ID_FAT TEXT 8,{"FAT16"," "} ; +#52 €¡¡à¥¢¨ âãà  ä ©«®¢®© á¨á⥬ë
ENDS ; +#5A ENDS ; +#5A
; ;
; ;
STRUCT _sMBR_PARTITION_RECORD STRUCT _sMBR_PARTITION_RECORD
.isActive: BYTE 0 ; +#00 .isActive BYTE 0 ; +#00
.Start_head: BYTE 0 ; +#01 .Start_head BYTE 0 ; +#01
.Start_sector: BYTE 0 ; +#02 .Start_sector BYTE 0 ; +#02
.Start_cylinder: BYTE 0 ; +#03 .Start_cylinder BYTE 0 ; +#03
.FS_ID: BYTE 0 ; +#04 .FS_ID BYTE 0 ; +#04
.End_head: BYTE 0 ; +#05 .End_head BYTE 0 ; +#05
.End_sector: BYTE 0 ; +#06 .End_sector BYTE 0 ; +#06
.End_cylinder: BYTE 0 ; +#07 .End_cylinder BYTE 0 ; +#07
.Start_LBA: DWORD 0 ; +#08 .Start_LBA DWORD 0 ; +#08
.Size_LBA: DWORD 0 ; +#0C .Size_LBA DWORD 0 ; +#0C
ENDS ENDS
; ;
; ;
STRUCT _sMBR_PARTITION_TABLE ;, #01BE ; MBR: Offset of partition table in the MBR STRUCT _sMBR_PARTITION_TABLE ;, #01BE ; MBR: Offset of partition table in the MBR
.Record_1: _sMBR_PARTITION_RECORD ; +#1BE .Record_1 _sMBR_PARTITION_RECORD ; +#1BE
.Record_2: _sMBR_PARTITION_RECORD ; +#1CE .Record_2 _sMBR_PARTITION_RECORD ; +#1CE
.Record_3: _sMBR_PARTITION_RECORD ; +#1DE .Record_3 _sMBR_PARTITION_RECORD ; +#1DE
.Record_4: _sMBR_PARTITION_RECORD ; +#1EE .Record_4 _sMBR_PARTITION_RECORD ; +#1EE
ENDS ENDS
; ;
; ;
STRUCT _sBOOT_SECTOR STRUCT _sBOOT_SECTOR
.PARAMS: _sBOOT_SECTOR_PARAMS_FAT32 .PARAMS _sBOOT_SECTOR_PARAMS_FAT32
.BOOT_CODE: BLOCK #1BE-_sBOOT_SECTOR_PARAMS_FAT32,0 ; +#3E boot loader's code .BOOT_CODE BLOCK #1BE-_sBOOT_SECTOR_PARAMS_FAT32,0 ; +#3E boot loader's code
.PARTITION_TABLE: _sMBR_PARTITION_TABLE ; +#1BE table = 4x16 bytes .PARTITION_TABLE _sMBR_PARTITION_TABLE ; +#1BE table = 4x16 bytes
.MBR_SIGNATURE: WORD #AA55 ; +#1FE Signature .MBR_SIGNATURE WORD #AA55 ; +#1FE Signature
ENDS ENDS
; ;
; ;
STRUCT FAT_DIRECTORY_RECORD STRUCT FAT_DIRECTORY_RECORD
.NAME: TEXT 8,{". "," "} ; DIR_Name #00 +00 NAME .NAME TEXT 8,{". "," "} ; DIR_Name #00 +00 NAME
.EXT: TEXT 3,{" "," "} ; --//--//; #08 +08 EXT .EXT TEXT 3,{" "," "} ; --//--//; #08 +08 EXT
.ATTRIBUT: BYTE #10 ; DIR_Attr; #0B +11 ATTRIBUT .ATTRIBUT BYTE #10 ; DIR_Attr; #0B +11 ATTRIBUT
.RESERVED_NT: BYTE #00 ; DIR_NTRes; #0C +12 RESERVED .RESERVED_NT BYTE #00 ; DIR_NTRes; #0C +12 RESERVED
.RESERVED_FAT32: BYTE #00 ; DIR_CrtTimeHundth #0D +13 „¥áïâë¥ ¤®«¨ ᥪ㭤ë á®§¤ ­¨ï ä ©«  (0-1.99) .RESERVED_FAT32 BYTE #00 ; DIR_CrtTimeHundth #0D +13 „¥áïâë¥ ¤®«¨ ᥪ㭤ë á®§¤ ­¨ï ä ©«  (0-1.99)
.CREATE_TIME_FAT32: WORD #0000 ; DIR_CrtTime #0E +14 ‚६ï á®§¤ ­¨ï ä ©«  .CREATE_TIME_FAT32 WORD #0000 ; DIR_CrtTime #0E +14 ‚६ï á®§¤ ­¨ï ä ©« 
.CREATE_DATE_FAT32: WORD #0000 ; DIR_CrtDate #10 +16 „ â  á®§¤ ­¨ï ä ©«  .CREATE_DATE_FAT32 WORD #0000 ; DIR_CrtDate #10 +16 „ â  á®§¤ ­¨ï ä ©« 
.LAST_ACCESS_DATE_FAT32: WORD #0000 ; DIR_LstAccDate #12 +18 „ â  ¯®á«¥¤­¥£® ¤®áâ㯠 (r/w) .LAST_ACCESS_DATE_FAT32 WORD #0000 ; DIR_LstAccDate #12 +18 „ â  ¯®á«¥¤­¥£® ¤®áâ㯠 (r/w)
.FIRST_CLUSTER_H: WORD #0000 ; DIR_FstClusHI #14 +20 START CLUSTER high ;!TODO fat32 .FIRST_CLUSTER_H WORD #0000 ; DIR_FstClusHI #14 +20 START CLUSTER high ;!TODO fat32
.TIME: WORD #0000 ; DIR_WrtTime #16 +22 Time of last write. .TIME WORD #0000 ; DIR_WrtTime #16 +22 Time of last write.
.DATE: WORD #0000 ; DIR_WrtDate #18 +24 Date of last write. .DATE WORD #0000 ; DIR_WrtDate #18 +24 Date of last write.
.FIRST_CLUSTER_L: WORD #0000 ; DIR_FstClusLO #1A +26 START CLUSTER low .FIRST_CLUSTER_L WORD #0000 ; DIR_FstClusLO #1A +26 START CLUSTER low
.F_SIZE: DWORD #00000000 ; DIR_FileSize #1C +28 SIZE FILE .F_SIZE DWORD #00000000 ; DIR_FileSize #1C +28 SIZE FILE
ENDS ; structure size #20 +32 ENDS ; structure size #20 +32
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ; ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
////////////////////////////////////////////////////////////////////////////////////////////
STRUCT BOOT_SECTOR_PARAMS_NTFS
.JMP D24 #000000 ; #00 BS_jmpBoot
.ID_NAME TEXT 8,{"NTFS"," "} ; #03 BS_OEMName
; Block Parameters BIOS
.BytesPerSector WORD #0002 ; #0B
.SectorsPerCluster BYTE #08 ; #0D
.ReservedSectors WORD #0000 ; #0E
.Always0_1 D24 #000000 ; #10
.NotUsedByNTFS_1 WORD #0000 ; #13
.MediaDescriptor BYTE #F8 ; #15
.Always0_2 WORD #0000 ; #16
.SectorsPerTrack WORD #3F00 ; #18
.NumberOfHeads WORD #FF00 ; #1A
.HiddenSectors DWORD #3F000000 ; #1C
.NotUsedByNTFS_2 DWORD #00000000 ; #20
.NotUsedByNTFS_3 DWORD #80008000 ; #24
.TotalSectorsLow DWORD #00000000 ; #28
.TotalSectorsHigh DWORD #4AF57F00 ; #2C
.LogClusterNumberLow_MFT DWORD #00000000 ; #30
.LogClusterNumberHigh_MFT DWORD #04000000 ; #34
.LogClusterNumberLow_MFTMirr DWORD #00000000 ; #38
.LogClusterNumberHigh_MFTMirr DWORD #54FF0700 ; #3C
.ClustersPerFileRecordSegment DWORD #F6000000 ; #40
.ClustersPerIndexBuffer BYTE #01 ; #44
.NotUsedByNTFS_4 D24 #000000 ; #45
.VolumeSerialNumberLow DWORD #C91B741C ; #48
.VolumeSerialNumberHigh DWORD #14A51B74 ; #4C
.Checksum DWORD #00000000 ; #50
.BootCode BLOCK 426 ; #54
.MBR_Signature WORD #AA55 ; #1FE
ENDS
////////////////////////////////////////////////////////////////////////////////////////////
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ; ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
@ -615,4 +647,4 @@ PartitionSysTypes:
; GPTE_FstLba 32 ; GPT PTE: First LBA (QWORD) ; GPTE_FstLba 32 ; GPT PTE: First LBA (QWORD)
; GPTE_LstLba 40 ; GPT PTE: Last LBA inclusive (QWORD) ; GPTE_LstLba 40 ; GPT PTE: Last LBA inclusive (QWORD)
; GPTE_Flags 48 ; GPT PTE: Flags (QWORD) ; GPTE_Flags 48 ; GPT PTE: Flags (QWORD)
; GPTE_Name 56 ; GPT PTE: Name ; GPTE_Name 56 ; GPT PTE: Name