7 //-----------------------------------------------------------------------------
10 //-----------------------------------------------------------------------------
13 #define BS_JMPBOOT 0 // Length = 3
14 #define BS_OEMNAME 3 // Length = 8
15 #define BPB_BYTSPERSEC 11 // Length = 2
16 #define BPB_SECPERCLUS 13 // Length = 1
17 #define BPB_RSVDSECCNT 14 // Length = 2
18 #define BPB_NUMFATS 16 // Length = 1
19 #define BPB_ROOTENTCNT 17 // Length = 2
20 #define BPB_TOTSEC16 19 // Length = 2
21 #define BPB_MEDIA 21 // Length = 1
22 #define BPB_FATSZ16 22 // Length = 2
23 #define BPB_SECPERTRK 24 // Length = 2
24 #define BPB_NUMHEADS 26 // Length = 2
25 #define BPB_HIDDSEC 28 // Length = 4
26 #define BPB_TOTSEC32 32 // Length = 4
29 #define BS_FAT_DRVNUM 36 // Length = 1
30 #define BS_FAT_BOOTSIG 38 // Length = 1
31 #define BS_FAT_VOLID 39 // Length = 4
32 #define BS_FAT_VOLLAB 43 // Length = 11
33 #define BS_FAT_FILSYSTYPE 54 // Length = 8
36 #define BPB_FAT32_FATSZ32 36 // Length = 4
37 #define BPB_FAT32_EXTFLAGS 40 // Length = 2
38 #define BPB_FAT32_FSVER 42 // Length = 2
39 #define BPB_FAT32_ROOTCLUS 44 // Length = 4
40 #define BPB_FAT32_FSINFO 48 // Length = 2
41 #define BPB_FAT32_BKBOOTSEC 50 // Length = 2
42 #define BS_FAT32_DRVNUM 64 // Length = 1
43 #define BS_FAT32_BOOTSIG 66 // Length = 1
44 #define BS_FAT32_VOLID 67 // Length = 4
45 #define BS_FAT32_VOLLAB 71 // Length = 11
46 #define BS_FAT32_FILSYSTYPE 82 // Length = 8
48 //-----------------------------------------------------------------------------
50 //-----------------------------------------------------------------------------
51 #define FAT_TYPE_FAT12 1
52 #define FAT_TYPE_FAT16 2
53 #define FAT_TYPE_FAT32 3
55 //-----------------------------------------------------------------------------
56 // FAT32 Specific Statics
57 //-----------------------------------------------------------------------------
58 #define SIGNATURE_POSITION 510
59 #define SIGNATURE_VALUE 0xAA55
60 #define PARTITION1_TYPECODE_LOCATION 450
61 #define FAT32_TYPECODE1 0x0B
62 #define FAT32_TYPECODE2 0x0C
63 #define PARTITION1_LBA_BEGIN_LOCATION 454
64 #define PARTITION1_SIZE_LOCATION 458
66 #define FAT_DIR_ENTRY_SIZE 32
67 #define FAT_SFN_SIZE_FULL 11
68 #define FAT_SFN_SIZE_PARTIAL 8
70 //-----------------------------------------------------------------------------
71 // FAT32 File Attributes and Types
72 //-----------------------------------------------------------------------------
73 #define FILE_ATTR_READ_ONLY 0x01
74 #define FILE_ATTR_HIDDEN 0x02
75 #define FILE_ATTR_SYSTEM 0x04
76 #define FILE_ATTR_SYSHID 0x06
77 #define FILE_ATTR_VOLUME_ID 0x08
78 #define FILE_ATTR_DIRECTORY 0x10
79 #define FILE_ATTR_ARCHIVE 0x20
80 #define FILE_ATTR_LFN_TEXT 0x0F
81 #define FILE_HEADER_BLANK 0x00
82 #define FILE_HEADER_DELETED 0xE5
83 #define FILE_TYPE_DIR 0x10
84 #define FILE_TYPE_FILE 0x20
86 //-----------------------------------------------------------------------------
87 // Time / Date details
88 //-----------------------------------------------------------------------------
89 #define FAT_TIME_HOURS_SHIFT 11
90 #define FAT_TIME_HOURS_MASK 0x1F
91 #define FAT_TIME_MINUTES_SHIFT 5
92 #define FAT_TIME_MINUTES_MASK 0x3F
93 #define FAT_TIME_SECONDS_SHIFT 0
94 #define FAT_TIME_SECONDS_MASK 0x1F
95 #define FAT_TIME_SECONDS_SCALE 2
96 #define FAT_DATE_YEAR_SHIFT 9
97 #define FAT_DATE_YEAR_MASK 0x7F
98 #define FAT_DATE_MONTH_SHIFT 5
99 #define FAT_DATE_MONTH_MASK 0xF
100 #define FAT_DATE_DAY_SHIFT 0
101 #define FAT_DATE_DAY_MASK 0x1F
102 #define FAT_DATE_YEAR_OFFSET 1980
104 //-----------------------------------------------------------------------------
106 //-----------------------------------------------------------------------------
107 #define FAT32_LAST_CLUSTER 0xFFFFFFFF
108 #define FAT32_INVALID_CLUSTER 0xFFFFFFFF
111 struct fat_dir_entry STRUCT_PACK