diff --git a/constants/SP2000.inc b/constants/SP2000.inc index 76f3627..3bc449d 100644 --- a/constants/SP2000.inc +++ b/constants/SP2000.inc @@ -551,12 +551,15 @@ SYS_PAGE EQU #FE .INT_PAGE EQU #C126 ; страница с обработчиком прерывания .INT_ID EQU #C127 ; если = #AA - значить обработчик установлен .DS_1440 EQU #C128 ; флаги переключения 720/1440 -.F_P_S EQU #C129 ; число файловых записей в секторе -.S_P_C EQU #C12A ; число секторов файловых записей в кластере Root Dir +;.F_P_S EQU #C129 ; число файловых записей в секторе +;.S_P_C EQU #C12A ; число секторов файловых записей в кластере Root Dir +.FilesPerSector EQU #C129 ; число файловых записей в секторе +.SectorsPerCluster EQU #C12A ; число секторов файловых записей в кластере Root Dir .COUNT_FL EQU #C12B ; счетчик файлов в секторе .COUNT_SEC EQU #C12C ; счетчик секторов в каталоге .CURRENT_HDD EQU #C12D ; [x] bit0 - master/slave, bit1: Primary/Secondary, bit2..3: использующийся раздел в MBR ;.C_P_B EQU #C12D ; НЕ ИСПОЛЬЗУЕТСЯ число кластеров на блок ОЗУ +;.ClusterPerBank EQU #C12D ; НЕ ИСПОЛЬЗУЕТСЯ число кластеров на блок ОЗУ ;!TODO WORD EQU #C12E .FAT_FLAG EQU #C130 ; FAT флаг + FAT sector??? #81FF - FAT16, #01FF - FAT12 .MSD_CONT_SEC EQU #C132 ; текущий сектор для MS-DOS @@ -728,25 +731,27 @@ SYS_PAGE EQU #FE ; MODULE FDD_INI_TABLE ; !FIXIT таблицы для FDD устройств 32 байта. привязаться к структуре выше -FDD EQU 3 ; ????? хер его знает, что за параметр, разобраться -FDD_0 EQU SYS_PAGE.FDD_0 -.DISK EQU FDD_0+0 -.F144 EQU .DISK -.SECTORS EQU FDD_0+1 -.MS_SECS EQU .SECTORS -.HEADS EQU FDD_0+2 -.CYLINDL EQU FDD_0+3 -.CYLINDH EQU FDD_0+4 -.B_P_S EQU FDD_0+5 ;WORD -FDD_1 EQU SYS_PAGE.FDD_1 -.DISK EQU FDD_1+0 -.F144 EQU .DISK -.SECTORS EQU FDD_1+1 -.MS_SECS EQU .SECTORS -.HEADS EQU FDD_1+2 -.CYLINDL EQU FDD_1+3 -.CYLINDH EQU FDD_1+4 -.B_P_S EQU FDD_1+5 +FDD EQU 3 ; ????? хер его знает, что за параметр, разобраться +FDD_0 EQU SYS_PAGE.FDD_0 +.DISK EQU FDD_0+0 +.F144 EQU .DISK +.SECTORS EQU FDD_0+1 +.MS_SECS EQU .SECTORS +.HEADS EQU FDD_0+2 +.CYLINDL EQU FDD_0+3 +.CYLINDH EQU FDD_0+4 +;.B_P_S EQU FDD_0+5 ;WORD +.BytesPerSector EQU FDD_0+5 ;WORD +FDD_1 EQU SYS_PAGE.FDD_1 +.DISK EQU FDD_1+0 +.F144 EQU .DISK +.SECTORS EQU FDD_1+1 +.MS_SECS EQU .SECTORS +.HEADS EQU FDD_1+2 +.CYLINDL EQU FDD_1+3 +.CYLINDH EQU FDD_1+4 +;.B_P_S EQU FDD_1+5 ;WORD +.BytesPerSector EQU FDD_1+5 ENDMODULE ; diff --git a/constants/dss_equ.inc b/constants/dss_equ.inc index 6f9ce06..9d168f4 100644 --- a/constants/dss_equ.inc +++ b/constants/dss_equ.inc @@ -28,6 +28,7 @@ FAT_ATTR: .NoDIRnoVolID EQU .READ_ONLY + .HIDDEN + .ARCHIVE + .SYSTEM ; .NoVolID EQU .READ_ONLY + .HIDDEN + .DIRECTORY + .ARCHIVE + .SYSTEM ; .NoSYSnoVolID EQU .READ_ONLY + .HIDDEN + .DIRECTORY + .ARCHIVE ; +.HiddenSysDir EQU + .HIDDEN + .DIRECTORY + + .SYSTEM ; ;------------[DSS Functions]------------ Dss: .Version EQU #00 diff --git a/structures/FileSystem.inc b/structures/FileSystem.inc index ae5c094..6ffffbf 100644 --- a/structures/FileSystem.inc +++ b/structures/FileSystem.inc @@ -4,29 +4,46 @@ .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 +.BytesPerSector: WORD #200 ; +#0B Размер сектора в байтах +.SectorsPerCluster: BYTE 2 ; +#0D Размер кластера в секторах .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) +.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 Тип устройства -.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 +.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 ; FAT 12-16 -.BPB_PHISICAL_DRIVE_NUMBER: BYTE #80 ; +#24 PHISICAL DRIVE NUMBER +.BPB_PHISICAL_DRIVE_NUMBER: BYTE #80 ; +#24 Физический номер драйва .reserved: BYTE 0 ; +#25 Зарезервировано -.BPB_EXT_BOOT_RECORD_SIGNATURE: BYTE #29 ; +#26 EXTENDED BOOT RECORD SIGNATURE +.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 DISK LABEL +.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 +; +; 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 ; @@ -71,10 +88,10 @@ .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 +.FIRST_CLUSTER_H: WORD #0000 ;+ #14 +20 START CLUSTER high ;!TODO fat32 .TIME: WORD #0000 ;+ #16 +22 TIME .DATE: WORD #0000 ;+ #18 +24 DATE -.FIRST_CLUSTER_L: WORD #0000 ;+ #1A +26 START CLUSTER ;!TODO fat32 +.FIRST_CLUSTER_L: WORD #0000 ;+ #1A +26 START CLUSTER low .F_SIZE: DWORD #00000000 ;+ #1C +28 SIZE FILE ENDS //---------------------------------------------------------------------------