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

📄 fat16.h

📁 ARM SYS CODE 用于ARM上的各种原代码,包括当前最常用的驱动程序
💻 H
📖 第 1 页 / 共 2 页
字号:
00200         WORD      bpbFSVers;    // filesystem version
00201 #define FSVERS    0             // currently only 0 is understood
00202         DWORD     bpbRootClust; // start cluster for root directory
00203         WORD      bpbFSInfo;    // filesystem info structure sector
00204         WORD      bpbBackup;    // backup boot sector
00205         // There is a 12 byte filler here, but we ignore it
00206 };
00207 
00208 
00209 
00210 
00211 // ***************************************************************
00212 // * byte versions of the above structs                          *
00213 // ***************************************************************
00214 
00215 
00216 // BIOS Parameter Block (BPB) for DOS 3.3
00217 struct byte_bpb33 {
00218         CHAR bpbBytesPerSec[2];     // bytes per sector
00219         CHAR bpbSecPerClust;        // sectors per cluster
00220         CHAR bpbResSectors[2];      // number of reserved sectors
00221         CHAR bpbFATs;               // number of FATs
00222         CHAR bpbRootDirEnts[2];     // number of root directory entries
00223         CHAR bpbSectors[2];         // total number of sectors
00224         CHAR bpbMedia;              // media descriptor
00225         CHAR bpbFATsecs[2];         // number of sectors per FAT
00226         CHAR bpbSecPerTrack[2];     // sectors per track
00227         CHAR bpbHeads[2];           // number of heads
00228         CHAR bpbHiddenSecs[2];      // number of hidden sectors
00229 };
00230 
00231 // BPB for DOS 5.0
00232 // The difference is bpbHiddenSecs is a short for DOS 3.3,
00233 // and bpbHugeSectors is not in the 3.3 bpb.
00234 struct byte_bpb50 {
00235         CHAR bpbBytesPerSec[2];     // bytes per sector
00236         CHAR bpbSecPerClust;        // sectors per cluster
00237         CHAR bpbResSectors[2];      // number of reserved sectors
00238         CHAR bpbFATs;               // number of FATs
00239         CHAR bpbRootDirEnts[2];     // number of root directory entries
00240         CHAR bpbSectors[2];         // total number of sectors
00241         CHAR bpbMedia;              // media descriptor
00242         CHAR bpbFATsecs[2];         // number of sectors per FAT
00243         CHAR bpbSecPerTrack[2];     // sectors per track
00244         CHAR bpbHeads[2];           // number of heads
00245         CHAR bpbHiddenSecs[4];      // number of hidden sectors
00246         CHAR bpbHugeSectors[4];     // # of sectors if bpbSectors == 0
00247 };
00248 
00249 // BPB for DOS 7.10 (FAT32).
00250 // This one has a few extensions to bpb50.
00251 struct byte_bpb710 {
00252         BYTE bpbBytesPerSec[2];     // bytes per sector
00253         BYTE bpbSecPerClust;        // sectors per cluster
00254         BYTE bpbResSectors[2];      // number of reserved sectors
00255         BYTE bpbFATs;               // number of FATs
00256         BYTE bpbRootDirEnts[2];     // number of root directory entries
00257         BYTE bpbSectors[2];         // total number of sectors
00258         BYTE bpbMedia;              // media descriptor
00259         BYTE bpbFATsecs[2];         // number of sectors per FAT
00260         BYTE bpbSecPerTrack[2];     // sectors per track
00261         BYTE bpbHeads[2];           // number of heads
00262         BYTE bpbHiddenSecs[4];      // # of hidden sectors
00263         BYTE bpbHugeSectors[4];     // # of sectors if bpbSectors == 0
00264         BYTE bpbBigFATsecs[4];      // like bpbFATsecs for FAT32
00265         BYTE bpbExtFlags[2];        // extended flags:
00266         BYTE bpbFSVers[2];          // filesystem version
00267         BYTE bpbRootClust[4];       // start cluster for root directory
00268         BYTE bpbFSInfo[2];          // filesystem info structure sector
00269         BYTE bpbBackup[2];          // backup boot sector
00270         // There is a 12 byte filler here, but we ignore it
00271 };
00272 
00273 // FAT32 FSInfo block.
00274 struct fsinfo {
00275         BYTE fsisig1[4];
00276         BYTE fsifill1[480];
00277         BYTE fsisig2[4];
00278         BYTE fsinfree[4];
00279         BYTE fsinxtfree[4];
00280         BYTE fsifill2[12];
00281         BYTE fsisig3[4];
00282         BYTE fsifill3[508];
00283         BYTE fsisig4[4];
00284 };
00285 
00286 
00287 /***************************************************************/
00288 /***************************************************************/
00289 
00290 
00291 // Structure of a dos directory entry.
00292 struct direntry {
00293         BYTE        deName[8];      // filename, blank filled
00294 #define SLOT_EMPTY      0x00            // slot has never been used
00295 #define SLOT_E5         0x05            // the real value is 0xe5
00296 #define SLOT_DELETED    0xe5            // file in this slot deleted
00297         BYTE        deExtension[3]; // extension, blank filled
00298         BYTE        deAttributes;   // file attributes
00299 #define ATTR_NORMAL     0x00            // normal file
00300 #define ATTR_READONLY   0x01            // file is readonly
00301 #define ATTR_HIDDEN     0x02            // file is hidden
00302 #define ATTR_SYSTEM     0x04            // file is a system file
00303 #define ATTR_VOLUME     0x08            // entry is a volume label
00304 #define ATTR_LONG_FILENAME  0x0f        // this is a long filename entry                
00305 #define ATTR_DIRECTORY  0x10            // entry is a directory name
00306 #define ATTR_ARCHIVE    0x20            // file is new or modified
00307         BYTE        deLowerCase;    // NT VFAT lower case flags
00308 #define LCASE_BASE      0x08            // filename base in lower case
00309 #define LCASE_EXT       0x10            // filename extension in lower case
00310         BYTE        deCHundredth;   // hundredth of seconds in CTime
00311         BYTE        deCTime[2];     // create time
00312         BYTE        deCDate[2];     // create date
00313         BYTE        deADate[2];     // access date
00314         WORD        deHighClust;    // high bytes of cluster number
00315         BYTE        deMTime[2];     // last update time
00316         BYTE        deMDate[2];     // last update date
00317         WORD        deStartCluster; // starting cluster of file
00318         DWORD       deFileSize;     // size of file in bytes
00319 };
00320 
00321 // number of directory entries in one sector
00322 #define DIRENTRIES_PER_SECTOR   0x10
00323 
00324 // Structure of a Win95 long name directory entry
00325 struct winentry {
00326         BYTE        weCnt;
00327 #define WIN_LAST        0x40
00328 #define WIN_CNT         0x3f
00329         BYTE        wePart1[10];
00330         BYTE        weAttributes;
00331 #define ATTR_WIN95      0x0f
00332         BYTE        weReserved1;
00333         BYTE        weChksum;
00334         BYTE        wePart2[12];
00335         WORD        weReserved2;
00336         BYTE        wePart3[4];
00337 };
00338 
00339 #define WIN_CHARS   13      // Number of chars per winentry
00340 
00341 // Maximum filename length in Win95
00342 // Note: Must be < sizeof(dirent.d_name)
00343 #define WIN_MAXLEN      255
00344 
00345 // This is the format of the contents of the deTime field in the direntry
00346 // structure.
00347 // We don't use bitfields because we don't know how compilers for
00348 // arbitrary machines will lay them out.
00349 #define DT_2SECONDS_MASK        0x1F    // seconds divided by 2
00350 #define DT_2SECONDS_SHIFT       0
00351 #define DT_MINUTES_MASK         0x7E0   // minutes
00352 #define DT_MINUTES_SHIFT        5
00353 #define DT_HOURS_MASK           0xF800  // hours
00354 #define DT_HOURS_SHIFT          11
00355 
00356 // This is the format of the contents of the deDate field in the direntry
00357 // structure.
00358 #define DD_DAY_MASK             0x1F    // day of month
00359 #define DD_DAY_SHIFT            0
00360 #define DD_MONTH_MASK           0x1E0   // month
00361 #define DD_MONTH_SHIFT          5
00362 #define DD_YEAR_MASK            0xFE00  // year - 1980
00363 #define DD_YEAR_SHIFT           9
00364 
00365 // Prototypes
00366 unsigned char fatInit( unsigned char device);
00367 unsigned int fatClusterSize(void);
00368 unsigned long fatGetDirEntry(unsigned int entry, unsigned int count);
00369 unsigned long fatGetFilesize(void);
00370 char* fatGetFilename(void);
00371 char* fatGetDirname(void);
00372 void fatLoadCluster(unsigned long cluster, unsigned char *buffer);
00373 unsigned long fatNextCluster(unsigned long cluster);
00374 
00375 #endif

⌨️ 快捷键说明

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