This commit is contained in:
Anatoliy Belyanskiy 2024-04-15 02:16:09 +10:00
parent 0e2bbfb73c
commit e9bcf54a51

View File

@ -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 <09> §¬¥à ᥪâ®à  ¢ ¡ ©â å
.SectorsPerCluster EQU #0D ; BYTE 2 BPB_SecPerClus <09> §¬¥à ª« áâ¥à  ¢ ᥪâ®à å
.RESERVED_SECTORS EQU #0E ; WORD 1 BPB_RsvdSecCnt <09> §¬¥à á¨á⥬­®© ®¡« á⨠(¢ª«îç ï íâ®â ᥪâ®à) 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 <09> §¬¥à ®¤­®© FAT ¢ ᥪâ®à å (0 ¢ FAT32)
.SectorsPerTrack EQU #18 ; WORD 9 BPB_SecPerTrk <09> §¬¥à ¤®à®¦ª¨ ¢ ᥪâ®à å
.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 <09> §¬¥à ®¤­®© FAT ¢ ᥪâ®à å
.MainFATnumber EQU #28 ; WORD 0 BPB_ExtFlags <09>®¬¥à £« ¢­®© â ¡«¨æë FAT
.Version EQU #2A ; WORD 0 BPB_FSVer ‚¥àá¨ï FAT32 (®¡ëç­® 0)
.RootDirStartCluster EQU #2C ; DWORD 2 BPB_RootClus <09>¥à¢ë© ª« áâ¥à ª®à­¥¢®£® ª â «®£  (®¡ëç­® 2)
.FSINFO_Sector EQU #30 ; WORD 1 BPB_FSInfo <09>®¬¥à ᥪâ®à  áâàãªâãàë FSINFO (®¡ëç­® 1)
.CopyBootSector EQU #32 ; WORD 6 BPB_BkBootSec <09>®¬¥à ᥪâ®à  - ª®¯¨¨ § £à㧮筮£® (®¡ëç­® 6)
.reserved_block: EQU #34 ; BLOCK 12 BPB_Reserved ‡ à¥§¥à¢¨à®¢ ­®
.FDD_Number EQU #40 ; BYTE 0 BS_DrvNum <09>®¬¥à ¤¨áª®¢®¤  ¤«ï ä㭪権 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 <20> §¬¥à ᥪâ®à  ¢ ¡ ©â å
.SectorsPerCluster: BYTE 2 ; +#0D <20> §¬¥à ª« áâ¥à  ¢ ᥪâ®à å
.RESERVED_SECTORS: WORD 1 ; +#0E <20> §¬¥à á¨á⥬­®© ®¡« á⨠(¢ª«îç ï íâ®â ᥪâ®à) 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 <20> §¬¥à ®¤­®© FAT ¢ ᥪâ®à å (0 ¢ FAT32)
.SectorsPerTrack: WORD 9 ; +#18 <20> §¬¥à ¤®à®¦ª¨ ¢ ᥪâ®à å
.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 <20> §¬¥à ᥪâ®à  ¢ ¡ ©â å
.SectorsPerCluster: BYTE 2 ; BPB_SecPerClus +#0D <20> §¬¥à ª« áâ¥à  ¢ ᥪâ®à å
.RESERVED_SECTORS: WORD 1 ; BPB_RsvdSecCnt +#0E <20> §¬¥à á¨á⥬­®© ®¡« á⨠(¢ª«îç ï íâ®â ᥪâ®à) 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 <20> §¬¥à ®¤­®© FAT ¢ ᥪâ®à å (0 ¢ FAT32)
.SectorsPerTrack: WORD 9 ; BPB_SecPerTrk +#18 <20> §¬¥à ¤®à®¦ª¨ ¢ ᥪâ®à å
.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 <20> §¬¥à ®¤­®© FAT ¢ ᥪâ®à å
.MainFATnumber WORD 0 ; +#28 <20>®¬¥à £« ¢­®© â ¡«¨æë FAT
.Version WORD 0 ; +#2A ‚¥àá¨ï FAT32 (®¡ëç­® 0)
.RootDirStartCluster: DWORD 2 ; +#2C <20>¥à¢ë© ª« áâ¥à ª®à­¥¢®£® ª â «®£  (®¡ëç­® 2)
.FSINFO_Sector WORD 1 ; +#30 <20>®¬¥à ᥪâ®à  áâàãªâãàë FSINFO (®¡ëç­® 1)
.CopyBootSector WORD 6 ; +#32 <20>®¬¥à ᥪâ®à  - ª®¯¨¨ § £à㧮筮£® (®¡ëç­® 6)
.reserved_block: BLOCK 12 ; +#34 ‡ à¥§¥à¢¨à®¢ ­®
.FDD_Number BYTE 0 ; +#40 <20>®¬¥à ¤¨áª®¢®¤  ¤«ï ä㭪権 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 <20> §¬¥à ®¤­®© FAT ¢ ᥪâ®à å
.MainFATnumber WORD 0 ; +#28 <20>®¬¥à £« ¢­®© â ¡«¨æë FAT
.Version WORD 0 ; +#2A ‚¥àá¨ï FAT32 (®¡ëç­® 0)
.RootDirStartCluster: DWORD 2 ; +#2C <20>¥à¢ë© ª« áâ¥à ª®à­¥¢®£® ª â «®£  (®¡ëç­® 2)
.FSINFO_Sector WORD 1 ; +#30 <20>®¬¥à ᥪâ®à  áâàãªâãàë FSINFO (®¡ëç­® 1)
.CopyBootSector WORD 6 ; +#32 <20>®¬¥à ᥪâ®à  - ª®¯¨¨ § £à㧮筮£® (®¡ëç­® 6)
.reserved_block: BLOCK 12 ; +#34 ‡ à¥§¥à¢¨à®¢ ­®
.FDD_Number BYTE 0 ; +#40 <20>®¬¥à ¤¨áª®¢®¤  ¤«ï ä㭪権 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