📄 fat32mountpartition.lst
字号:
=2 typedef unsigned char BYTE;
=2 typedef unsigned char CHAR;
=2 typedef unsigned int WORD;
=2 typedef unsigned long DWORD;
=2 #endif
16 =2
17 =2 #ifndef _IDEIO_DEFINE
18 =2 #define _IDEIO_DEFINE
19 =2
20 =2 //IDE设备基地址
21 =2 #define IDE_ADDR_BASE 0x8000
22 =2
23 =2 //IDE设备寄存器组地址偏移量
24 =2 #define IDE_ADDR_CTRL 0x1000
25 =2 #define IDE_ADDR_CMD 0x0000
26 =2
27 =2 //IDE设备寄存器偏移量
28 =2 #define IDE_IO_DA0 0x01
29 =2 #define IDE_IO_DA1 0x02
30 =2 #define IDE_IO_DA2 0x04
31 =2
32 =2 //IDE设备控制I/O线
33 =2 #define IDE_IO_RESET P5_0
34 =2
35 =2 //IDE设备数据端口
36 =2 #define IDE_PORT_DATLSB ACC
37 =2 #define IDE_PORT_DATMSB DAT16H
38 =2
39 =2 //IDE 函数返回值
40 =2 #define IDE_SUCCESSFUL 0x00
41 =2 #define IDE_ERROR_RESET 0x01
42 =2 #define IDE_ERROR_DIAGNOSTIC 0x01
43 =2 #define IDE_ERROR_BSY 0x10
44 =2 #define IDE_ERROR_DRQ 0x11
45 =2 #define IDE_ERROR_DRDY 0x12
46 =2 #define IDE_ERROR_NODATA 0x13
47 =2
48 =2 //电源管理
49 =2 #define IDE_POWER_SLEEP 0x00
50 =2 #define IDE_POWER_IDLE 0x01
51 =2 #define IDE_POWER_STANDBY 0x02
52 =2
53 =2 //设备编号
54 =2 #define IDE_DEVICE0 0
55 =2 #define IDE_DEVICE1 1
56 =2
57 =2 #define IDE_RESET_HARDWARE 0
58 =2 #define IDE_RESET_SOFTWARE 1
C51 COMPILER V6.23a FAT32MOUNTPARTITION 12/24/2004 00:11:02 PAGE 6
59 =2
60 =2 #define IDE_DEVICE_MASTER 0x00
61 =2 #define IDE_DEVICE_SLAVE 0x10
62 =2
63 =2 //设备类型
64 =2 #define DRIVER_TYPE_HDD 0x01 //硬盘
65 =2 #define DRIVER_TYPE_CDROM 0x02 //光驱
66 =2 #define DRIVER_TYPE_FLASH 0x03 //FLASH
67 =2
68 =2 //IDE扇区读写
69 =2 #define IDEReadSector(X) IDE.CurrentSector=X; _IDEReadSector()
70 =2 #define IDEWriteSector(X) IDE.CurrentSector=X; _IDEWriteSector()
71 =2
72 =2 //IDE接口参数表
73 =2 struct IDEStr
74 =2 {
75 =2 BYTE TotalDevices; //驱动器数量
76 =2 BYTE CurrentDevice; //当前驱动器
77 =2 DWORD CurrentSector; //当前扇区号
78 =2 WORD BytesPerSec; //每扇区字节数
79 =2 };
80 =2
81 =2 //IDE设备参数表
82 =2 struct IDEDeviceStr
83 =2 {
84 =2 BYTE DriverType; //驱动器类型
85 =2 DWORD TotalSectors; //总扇区数
86 =2 };
87 =2
88 =2 //硬盘参数表
89 =2 struct HDDStr //硬盘介质参数表
90 =2 {
91 =2 BYTE TotalPartitions; //分区数
92 =2 BYTE CurrentPartition; //当前分区
93 =2 };
94 =2 #ifndef _LIBRARY_DEFINE
=2 xdata BYTE DiskBuffer[512];
=2
=2 xdata struct IDEStr IDE;
=2 xdata struct IDEDeviceStr IDEDevice[2];
=2 xdata struct HDDStr HDD;
=2 #endif
101 =2 #endif
102 =2
103 =2 //磁盘缓冲区
104 =2 extern xdata BYTE DiskBuffer[512];
105 =2
106 =2 extern xdata struct IDEStr IDE;
107 =2 extern xdata struct IDEDeviceStr IDEDevice[2];
108 =2 extern xdata struct HDDStr HDD;
109 =2
110 =2 extern void IDEInit(void);
111 =2 extern BYTE IDEIdentifiedDevice(BYTE DeviceNum);
112 =2 extern void IDESetCurrentDevice(BYTE DeviceNum);
113 =2 extern BYTE IDEReset(BYTE bRestMode);
114 =2 extern BOOL IDEStatus(BYTE flag,BYTE wait,BYTE logic,WORD timeout);
115 =2 extern void IDEPowerManagement(BYTE cmd);
116 =2 extern BYTE _IDEReadSector(); //读一个扇区
117 =2 extern BYTE _IDEWriteSector(); //写一个扇区
10 =1 #include "FAT32.h"
1 =2 /********************************************************/
2 =2 /* */
C51 COMPILER V6.23a FAT32MOUNTPARTITION 12/24/2004 00:11:02 PAGE 7
3 =2 /* 库 名 称:FAT32文件系统函数库 */
4 =2
5 =2 /* 功 能 描 述:提供对FAT32文件系统按文件名存取 */
6 =2 /* */
7 =2 /* */
8 =2 /********************************************************/
9 =2
10 =2 #ifndef _TYPE_DEFINE
=2 #define _TYPE_DEFINE
=2 typedef bit BOOL;
=2 typedef unsigned char BYTE;
=2 typedef unsigned char CHAR;
=2 typedef unsigned int WORD;
=2 typedef unsigned long DWORD;
=2 #endif
18 =2
19 =2 #ifndef _FAT32_DEFINE
20 =2 #define _FAT32_DEFINE
21 =2
22 =2 #define FAT32_MAX_FCB 2
23 =2
24 =2 //文件属性
25 =2 #define FAT32_ATTR_READ_ONLY 0x01 //文件属性:只读
26 =2 #define FAT32_ATTR_HIDDEN 0x02 //文件属性:隐含
27 =2 #define FAT32_ATTR_SYSTEM 0x04 //文件属性:系统
28 =2 #define FAT32_ATTR_VOLUME_ID 0x08 //文件属性:卷ID
29 =2 #define FAT32_ATTR_DIRECTORY 0x10 //文件属性:目录
30 =2 #define FAT32_ATTR_ARCHIVE 0x20 //文件属性:归档
31 =2 #define FAT32_ATTR_LONG_NAME FAT32_ATTR_READ_ONLY+FAT32_ATTR_HIDDEN+FAT32_ATTR_SYSTEM+FAT32_ATTR_VOLUME_
-ID //文件属性:长文件名
32 =2 #define FAT32_ATTR_LONG_NAME_MASK FAT32_ATTR_READ_ONLY+FAT32_ATTR_HIDDEN+FAT32_ATTR_SYSTEM+FAT32_ATTR_VOL
-UME_ID+FAT32_ATTR_DIRECTORY+FAT32_ATTR_ARCHIVE //文件属性:长文件名
33 =2 #define FAT32_LAST_LONG_ENTRY 0x40 //长文件名入口标记
34 =2
35 =2 #define FAT32_ERR_MBR_FLAG 0x01 //MBR扇区标志错误 FAT32MountPartition
36 =2 #define FAT32_ERR_PARTITION_NOT_FOUND 0x02 //指定分区没找到 FAT32MountVolumeID
37 =2 #define FAT32_ERR_FILE_OPEN_ERROR FAT32_MAX_FCB //文件打开错误
38 =2 #define FAT32_ERR_DIR_NOT_FOUND 0x01 //指定的目录入口没有找到F FAT32ChangeDirectory
39 =2 #define FAT32_ERR_NOT_DIR 0x02 //不是一个目录入口 FAT32ChangeDirectory
40 =2
41 =2 //#define IO_ERROR 0x00 //遇到io错误
42 =2 //#define NO_IO_ERROR 0x01 //没有遇到io错误
43 =2
44 =2 //计算指定簇的开始扇区号
45 =2 #define ClusterToSector(X) FAT32.ClusSec + (X - 2) * FAT32.SecPerClus
46 =2
47 =2 struct BootSecFAT16Str //引导扇区 FAT16 扩展结构
48 =2 {
49 =2 BYTE BS_DrvNum;
50 =2 BYTE BS_Reserved1;
51 =2 BYTE BS_BootSig;
52 =2 DWORD BS_VolID;
53 =2 char BS_VolLab[11];
54 =2 char BS_FilSysType[8];
55 =2 };
56 =2
57 =2 struct BootSecFAT32Str //引导扇区 FAT32 扩展结构
58 =2 {
59 =2 DWORD BPB_FATSz32; //FAT32扇区总数
60 =2 WORD BPB_ExtFlags;
61 =2 WORD BPB_FSVer;
62 =2 DWORD BPB_RootClus; //根目录开始的簇
C51 COMPILER V6.23a FAT32MOUNTPARTITION 12/24/2004 00:11:02 PAGE 8
63 =2 WORD BPB_FSInfo;
64 =2 WORD BPB_BkBootSec;
65 =2 char BPB_Reserved[12];
66 =2 BYTE BS_DrvNum;
67 =2 BYTE BS_Reserved1;
68 =2 BYTE BS_BootSig;
69 =2 DWORD BS_VolID;
70 =2 char BS_VolLab[11];
71 =2 char BS_FilSysType[8];
72 =2 };
73 =2
74 =2 struct BootSecStr //引导扇区结构
75 =2 {
76 =2 BYTE BS_jmpBoot[3];
77 =2 BYTE BS_OEMName[8];
78 =2 WORD BPB_BytesPerSec; //每扇区字节数 512
79 =2 BYTE BPB_SecPerClus; //每簇扇区数 1 2 4 8 16 32 64 128
80 =2 WORD BPB_RsvdSecCnt; //保留扇区数 0x20
81 =2 BYTE BPB_NumFATs; //FAT表个数 2
82 =2 WORD BPB_RootEntCnt;
83 =2 WORD BPB_TotSec16;
84 =2 BYTE BPB_Media;
85 =2 WORD BPB_FATSz16;
86 =2 WORD BPB_SecPerTrk;
87 =2 WORD BPB_NumHeads;
88 =2 DWORD BPB_HiddSec;
89 =2 DWORD BPB_TotSec32;
90 =2 union FATUni
91 =2 {
92 =2 struct BootSecFAT32Str F32;
93 =2 struct BootSecFAT16Str F16;
94 =2 }FAT;
95 =2
96 =2 };
97 =2
98 =2 struct DPTStr //分区表结构
99 =2 {
100 =2 BYTE BootFlag;
101 =2 BYTE CHSBegin[3];
102 =2 BYTE TypeCode;
103 =2 BYTE CHSEnd[3];
104 =2 DWORD LBABegin;
105 =2 DWORD CntSec;
106 =2 };
107 =2
108 =2 struct sDPTStr //简化的分区表
109 =2 {
110 =2 BYTE TypeCode;
111 =2 DWORD LBABegin;
112 =2 DWORD CntSec;
113 =2 };
114 =2
115 =2 struct FAT32FSInfoStr //FAT32扩展信息结构
116 =2 {
117 =2 DWORD LeadSig;
118 =2 BYTE Reserved1[480];
119 =2 DWORD StrucSig;
120 =2 DWORD FreeCount;
121 =2 DWORD NxtFree;
122 =2 BYTE Reserved2[12];
123 =2 DWORD TrailSig;
124 =2 };
C51 COMPILER V6.23a FAT32MOUNTPARTITION 12/24/2004 00:11:02 PAGE 9
125 =2
126 =2 struct FAT32SDirStr //FAT目录结构 短文件名
127 =2 {
128 =2 CHAR Name[11];
129 =2 BYTE Attr;
130 =2 BYTE NTRes;
131 =2 BYTE CrtTimeTenth;
132 =2 WORD CrtTime;
133 =2 WORD CrtDate;
134 =2 WORD LstAccDate;
135 =2 WORD FstClusHI;
136 =2 WORD WrtTime;
137 =2 WORD WrtDate;
138 =2 WORD FstClusLO;
139 =2 DWORD FileSize;
140 =2 };
141 =2
142 =2 struct FAT32LDirStr //FAT目录结构 长文件名
143 =2 {
144 =2 BYTE Ord;
145 =2 BYTE Name1[10];
146 =2 BYTE Attr;
147 =2 BYTE Type;
148 =2 BYTE Chksum;
149 =2 BYTE Name2[12];
150 =2 WORD FstClusLO;
151 =2 BYTE Name3[4];
152 =2 };
153 =2
154 =2 struct FAT32Str //FAT32参数表
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -