91 lines
2.5 KiB
C
91 lines
2.5 KiB
C
#ifndef __FAT_H__
|
|
#define __FAT_H__
|
|
|
|
typedef struct {
|
|
unsigned char Drive; //useless
|
|
unsigned char FlagsNT;
|
|
unsigned char Signature; // 0x28 or 0x29
|
|
unsigned SerialNumber;
|
|
char VolumeLabel[11];
|
|
char SysIDString[8]; // unreliable
|
|
} __attribute__((packed)) BPB_EXT_16;
|
|
|
|
|
|
typedef struct {
|
|
unsigned SectorsPerFAT;
|
|
unsigned short Flags;
|
|
unsigned short Version;
|
|
unsigned ClusterOfRootDirectory;
|
|
unsigned short ClusterOfFSInfo;
|
|
unsigned short ClusterOfBackupBootSector;
|
|
unsigned char Reserved[12]; // Should be 0 at format
|
|
unsigned char Drive;
|
|
unsigned char FlagsNT;
|
|
unsigned char Signature; // 0x28 or 0x29
|
|
unsigned SerialNumber;
|
|
char VolumeLabel[11];
|
|
char SysIDString[8]; // always FAT12
|
|
|
|
} __attribute__((packed)) BPB_EXT_32;
|
|
|
|
|
|
typedef struct {
|
|
unsigned char _ignore[3];
|
|
|
|
// Bios Parameter Block
|
|
char OEMIdentify[8];
|
|
unsigned short BytesPerSector;
|
|
unsigned char SectorsPerCluster;
|
|
unsigned short ReservedSectors;
|
|
unsigned char NumberOfFATs;
|
|
unsigned short NumberOfDirectoryEntries;
|
|
unsigned short NumberOfSectors;
|
|
unsigned char MediaDescriptorType;
|
|
unsigned short SectorsPerFAT;
|
|
unsigned short SectorsPerTrack;
|
|
unsigned short HeadsPerCylinder;
|
|
unsigned HiddenSectors;
|
|
unsigned NumberOfSectorsLong;
|
|
|
|
union {
|
|
BPB_EXT_16 Ext16;
|
|
BPB_EXT_32 Ext32;
|
|
} Extended;
|
|
|
|
} __attribute__((packed)) FATBootSector, *FATBootSectorPointer;
|
|
|
|
|
|
typedef struct {
|
|
unsigned NumberOfSectors;
|
|
unsigned SizeOfSector;
|
|
unsigned FatOffset;
|
|
unsigned NumberOfRootEntries;
|
|
unsigned RootOffset;
|
|
unsigned SizeOfRoot;
|
|
unsigned SizeOfFat;
|
|
unsigned SizeOfFatEntry;
|
|
unsigned SizeOfCluster;
|
|
void (*ReadSector) (void* buffer, int lba);
|
|
} FatMountInfo, *FatMountInfoPointer;
|
|
|
|
|
|
typedef struct {
|
|
char FileName[8];
|
|
char Extension[3];
|
|
unsigned char Atributes;
|
|
unsigned char Reserved;
|
|
unsigned char CreateTimeFine;
|
|
unsigned short CreateTime;
|
|
unsigned short CreateDate;
|
|
unsigned short LastAccessedDate;
|
|
unsigned short EAIndex;
|
|
unsigned short LastModifiedTime;
|
|
unsigned short LastModifiedDate;
|
|
unsigned short FirstCluster;
|
|
unsigned FileSize;
|
|
} __attribute__((packed)) FatDirectoryEntry, *FatDirectoryEntryPointer;
|
|
|
|
|
|
extern FatMountInfo FloppyMount(int drive);
|
|
|
|
#endif |