⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fat16.h

📁 ARM SYS CODE 用于ARM上的各种原代码,包括当前最常用的驱动程序
💻 H
📖 第 1 页 / 共 2 页
字号:
00021 
00022 #ifndef FAT_H
00023 #define FAT_H
00024 
00025 #include "global.h"
00026 
00027 
00028 // Some useful cluster numbers
00029 #define MSDOSFSROOT     0               // cluster 0 means the root dir
00030 #define CLUST_FREE      0               // cluster 0 also means a free cluster
00031 #define MSDOSFSFREE     CLUST_FREE
00032 #define CLUST_FIRST     2               // first legal cluster number
00033 #define CLUST_RSRVD     0xfffffff6      // reserved cluster range
00034 #define CLUST_BAD       0xfffffff7      // a cluster with a defect
00035 #define CLUST_EOFS      0xfffffff8      // start of eof cluster range
00036 #define CLUST_EOFE      0xffffffff      // end of eof cluster range
00037 
00038 #define FAT12_MASK      0x00000fff      // mask for 12 bit cluster numbers
00039 #define FAT16_MASK      0x0000ffff      // mask for 16 bit cluster numbers
00040 #define FAT32_MASK      0x0fffffff      // mask for FAT32 cluster numbers
00041 
00042 
00043 // Partition Type used in the partition record
00044 #define PART_TYPE_UNKNOWN       0x00
00045 #define PART_TYPE_FAT12         0x01
00046 #define PART_TYPE_XENIX         0x02
00047 #define PART_TYPE_DOSFAT16      0x04
00048 #define PART_TYPE_EXTDOS        0x05
00049 #define PART_TYPE_FAT16         0x06
00050 #define PART_TYPE_NTFS          0x07
00051 #define PART_TYPE_FAT32         0x0B
00052 #define PART_TYPE_FAT32LBA      0x0C
00053 #define PART_TYPE_FAT16LBA      0x0E
00054 #define PART_TYPE_EXTDOSLBA     0x0F
00055 #define PART_TYPE_ONTRACK       0x33
00056 #define PART_TYPE_NOVELL        0x40
00057 #define PART_TYPE_PCIX          0x4B
00058 #define PART_TYPE_PHOENIXSAVE   0xA0
00059 #define PART_TYPE_CPM           0xDB
00060 #define PART_TYPE_DBFS          0xE0
00061 #define PART_TYPE_BBT           0xFF
00062 
00063 struct partrecord // length 16 bytes
00064 {           
00065     BYTE    prIsActive;                 // 0x80 indicates active partition
00066     BYTE    prStartHead;                // starting head for partition
00067     WORD    prStartCylSect;             // starting cylinder and sector
00068     BYTE    prPartType;                 // partition type (see above)
00069     BYTE    prEndHead;                  // ending head for this partition
00070     WORD    prEndCylSect;               // ending cylinder and sector
00071     DWORD   prStartLBA;                 // first LBA sector for this partition
00072     DWORD   prSize;                     // size of this partition (bytes or sectors ?)
00073 };
00074 
00075         
00076 struct partsector
00077 {
00078     CHAR    psPartCode[512-64-2];       // pad so struct is 512b
00079     BYTE    psPart[64];                 // four partition records (64 bytes)
00080     BYTE    psBootSectSig0;             // two signature bytes (2 bytes)
00081     BYTE    psBootSectSig1;
00082 #define BOOTSIG0        0x55
00083 #define BOOTSIG1        0xaa
00084 };
00085 
00086 
00087 
00088 // Format of a boot sector.  This is the first sector on a DOS floppy disk
00089 // or the first sector of a partition on a hard disk.  But, it is not the
00090 // first sector of a partitioned hard disk.
00091 struct bootsector33 {
00092     BYTE    bsJump[3];                  // jump inst E9xxxx or EBxx90
00093     CHAR    bsOemName[8];               // OEM name and version
00094     CHAR    bsBPB[19];                  // BIOS parameter block
00095     CHAR    bsDriveNumber;              // drive number (0x80)
00096     CHAR    bsBootCode[479];            // pad so struct is 512b
00097     BYTE    bsBootSectSig0;             // boot sector signature byte 0x55
00098     BYTE    bsBootSectSig1;             // boot sector signature byte 0xAA
00099 #define BOOTSIG0        0x55
00100 #define BOOTSIG1        0xaa
00101 };
00102 
00103 struct extboot {
00104     CHAR    exDriveNumber;              // drive number (0x80)
00105     CHAR    exReserved1;                // reserved
00106     CHAR    exBootSignature;            // ext. boot signature (0x29)
00107 #define EXBOOTSIG       0x29
00108     CHAR    exVolumeID[4];              // volume ID number
00109     CHAR    exVolumeLabel[11];          // volume label
00110     CHAR    exFileSysType[8];           // fs type (FAT12 or FAT16)
00111 };
00112 
00113 struct bootsector50 {
00114     BYTE    bsJump[3];                  // jump inst E9xxxx or EBxx90
00115     CHAR    bsOemName[8];               // OEM name and version
00116     CHAR    bsBPB[25];                  // BIOS parameter block
00117     CHAR    bsExt[26];                  // Bootsector Extension
00118     CHAR    bsBootCode[448];            // pad so structure is 512b
00119     BYTE    bsBootSectSig0;             // boot sector signature byte 0x55 
00120     BYTE    bsBootSectSig1;             // boot sector signature byte 0xAA
00121 #define BOOTSIG0        0x55
00122 #define BOOTSIG1        0xaa
00123 };
00124 
00125 struct bootsector710 {
00126     BYTE    bsJump[3];                  // jump inst E9xxxx or EBxx90
00127     CHAR    bsOEMName[8];               // OEM name and version
00128     CHAR    bsBPB[53];                  // BIOS parameter block
00129     CHAR    bsExt[26];                  // Bootsector Extension
00130     CHAR    bsBootCode[418];            // pad so structure is 512b
00131     BYTE    bsBootSectSig2;             // 2 & 3 are only defined for FAT32?
00132     BYTE    bsBootSectSig3;
00133     BYTE    bsBootSectSig0;             // boot sector signature byte 0x55
00134     BYTE    bsBootSectSig1;             // boot sector signature byte 0xAA
00135 #define BOOTSIG0        0x55
00136 #define BOOTSIG1        0xaa
00137 #define BOOTSIG2        0
00138 #define BOOTSIG3        0
00139 };
00140 
00141 
00142 /***************************************************************/
00143 /***************************************************************/
00144 
00145 // BIOS Parameter Block (BPB) for DOS 3.3
00146 struct bpb33 {
00147         WORD    bpbBytesPerSec; // bytes per sector
00148         BYTE    bpbSecPerClust; // sectors per cluster
00149         WORD    bpbResSectors;  // number of reserved sectors
00150         BYTE    bpbFATs;        // number of FATs
00151         WORD    bpbRootDirEnts; // number of root directory entries
00152         WORD    bpbSectors;     // total number of sectors
00153         BYTE    bpbMedia;       // media descriptor
00154         WORD    bpbFATsecs;     // number of sectors per FAT
00155         WORD    bpbSecPerTrack; // sectors per track
00156         WORD    bpbHeads;       // number of heads
00157         WORD    bpbHiddenSecs;  // number of hidden sectors
00158 };
00159 
00160 // BPB for DOS 5.0
00161 // The difference is bpbHiddenSecs is a short for DOS 3.3,
00162 // and bpbHugeSectors is not present in the DOS 3.3 bpb.
00163 struct bpb50 {
00164         WORD    bpbBytesPerSec; // bytes per sector
00165         BYTE    bpbSecPerClust; // sectors per cluster
00166         WORD    bpbResSectors;  // number of reserved sectors
00167         BYTE    bpbFATs;        // number of FATs
00168         WORD    bpbRootDirEnts; // number of root directory entries
00169         WORD    bpbSectors;     // total number of sectors
00170         BYTE    bpbMedia;       // media descriptor
00171         WORD    bpbFATsecs;     // number of sectors per FAT
00172         WORD    bpbSecPerTrack; // sectors per track
00173         WORD    bpbHeads;       // number of heads
00174         DWORD   bpbHiddenSecs;  // # of hidden sectors
00175 // 3.3 compat ends here
00176         DWORD   bpbHugeSectors; // # of sectors if bpbSectors == 0
00177 };
00178 
00179 // BPB for DOS 7.10 (FAT32)
00180 // This one has a few extensions to bpb50.
00181 struct bpb710 {
00182         WORD    bpbBytesPerSec; // bytes per sector
00183         BYTE    bpbSecPerClust; // sectors per cluster
00184         WORD    bpbResSectors;  // number of reserved sectors
00185         BYTE    bpbFATs;        // number of FATs
00186         WORD    bpbRootDirEnts; // number of root directory entries
00187         WORD    bpbSectors;     // total number of sectors
00188         BYTE    bpbMedia;       // media descriptor
00189         WORD    bpbFATsecs;     // number of sectors per FAT
00190         WORD    bpbSecPerTrack; // sectors per track
00191         WORD    bpbHeads;       // number of heads
00192         DWORD   bpbHiddenSecs;  // # of hidden sectors
00193 // 3.3 compat ends here
00194         DWORD   bpbHugeSectors; // # of sectors if bpbSectors == 0
00195 // 5.0 compat ends here
00196         DWORD     bpbBigFATsecs;// like bpbFATsecs for FAT32
00197         WORD      bpbExtFlags;  // extended flags:
00198 #define FATNUM    0xf           // mask for numbering active FAT
00199 #define FATMIRROR 0x80          // FAT is mirrored (like it always was)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -