91 lines
2.5 KiB
C
Raw Normal View History

2021-09-14 18:46:50 +03:00
#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