📄 fatreadcluster.lst
字号:
7 =2
8 =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
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 FATREADCLUSTER 12/24/2004 00:11:40 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 "FAT.h"
1 =2 /********************************************************/
2 =2 /* */
C51 COMPILER V6.23a FATREADCLUSTER 12/24/2004 00:11:40 PAGE 7
3 =2 /* 库 名 称:FAT文件系统函数库 */
4 =2
5 =2 /* 功 能 描 述:提供对FAT文件系统按文件名存取 */
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 _FAT_DEFINE
20 =2 #define _FAT_DEFINE
21 =2
22 =2 #define FAT_MAX_FCB 2
23 =2
24 =2 //文件属性
25 =2 #define FAT_ATTR_READ_ONLY 0x01 //文件属性:只读
26 =2 #define FAT_ATTR_HIDDEN 0x02 //文件属性:隐含
27 =2 #define FAT_ATTR_SYSTEM 0x04 //文件属性:系统
28 =2 #define FAT_ATTR_VOLUME_ID 0x08 //文件属性:卷ID
29 =2 #define FAT_ATTR_DIRECTORY 0x10 //文件属性:目录
30 =2 #define FAT_ATTR_ARCHIVE 0x20 //文件属性:归档
31 =2 #define FAT_ATTR_LONG_NAME FAT_ATTR_READ_ONLY+FAT_ATTR_HIDDEN+FAT_ATTR_SYSTEM+FAT_ATTR_VOLUME_ID //文件
-属性:长文件名
32 =2 #define FAT_ATTR_LONG_NAME_MASK FAT_ATTR_READ_ONLY+FAT_ATTR_HIDDEN+FAT_ATTR_SYSTEM+FAT_ATTR_VOLUME_ID+FA
-T_ATTR_DIRECTORY+FAT_ATTR_ARCHIVE //文件属性:长文件名
33 =2 #define FAT_LAST_LONG_ENTRY 0x40 //长文件名入口标记
34 =2
35 =2 #define FAT_ERR_MBR_FLAG 0x01 //MBR扇区标志错误 FATMountPartition
36 =2 #define FAT_ERR_PARTITION_NOT_FOUND 0x02 //指定分区没找到 FATMountVolumeID
37 =2 #define FAT_ERR_FILE_OPEN_ERROR FAT_MAX_FCB //文件打开错误
38 =2 #define FAT_ERR_DIR_NOT_FOUND 0x01 //指定的目录入口没有找到F FATChangeDirectory
39 =2 #define FAT_ERR_NOT_DIR 0x02 //不是一个目录入口 FATChangeDirectory
40 =2
41 =2 #define FAT_SEEK_BEGIN 0x01
42 =2 #define FAT_SEEK_CURRENT 0x02
43 =2 #define FAT_SEEK_END 0x03
44 =2
45 =2 #define FAT_TYPE_FAT12 0x01
46 =2 #define FAT_TYPE_FAT16 0x02
47 =2 #define FAT_TYPE_FAT32 0x03
48 =2
49 =2 #define FAT_CLUSTER_END32 0xffffffff //簇链终点
50 =2 #define FAT_CLUSTER_END16 0xffff //簇链终点
51 =2 #define FAT_CLUSTER_END12 0xfff //簇链终点
52 =2 #define FAT_CLUSTER_RESERVED32 0xfffffff6 //保留簇
53 =2 #define FAT_CLUSTER_RESERVED16 0xfff6 //保留簇
54 =2 #define FAT_CLUSTER_RESERVED12 0xff6 //保留簇
55 =2 #define FAT_CLUSTER_BAD32 0xfffffff7 //坏簇
56 =2 #define FAT_CLUSTER_BAD16 0xfff7 //坏簇
57 =2 #define FAT_CLUSTER_BAD12 0xff7 //坏簇
58 =2
59 =2 #define FAT_MASK_FAT32 0x0fffffff
60 =2 #define FAT_MASK_FAT16 0x0000ffff
61 =2 #define FAT_MASK_FAT12 0x00000fff
62 =2
C51 COMPILER V6.23a FATREADCLUSTER 12/24/2004 00:11:40 PAGE 8
63 =2 #define FAT_MAX_PARTITIONS 0x10
64 =2 //#define IO_ERROR 0x00 //遇到io错误
65 =2 //#define NO_IO_ERROR 0x01 //没有遇到io错误
66 =2
67 =2 //计算指定簇的开始扇区号
68 =2 #define ClusterToSector(X) FAT.ClusSec + (X - 2) * FAT.SecPerClus
69 =2
70 =2 struct StorageMediaStr
71 =2 {
72 =2 WORD BytesPerSec; //每扇区字节数
73 =2 DWORD TotalSectors; //总扇区数
74 =2 BYTE TotalPartitions; //分区数
75 =2 BYTE CurrentPartition; //当前分区
76 =2 BYTE (*ReadSector)(DWORD Sector,BYTE *Buffer);
77 =2 BYTE (*WriteSector)(DWORD Sector,BYTE *Buffer);
78 =2 };
79 =2
80 =2 struct BootSecFAT16Str //引导扇区 FAT16 扩展结构
81 =2 {
82 =2 BYTE BS_DrvNum;
83 =2 BYTE BS_Reserved1;
84 =2 BYTE BS_BootSig;
85 =2 DWORD BS_VolID;
86 =2 char BS_VolLab[11];
87 =2 char BS_FilSysType[8];
88 =2 };
89 =2
90 =2 struct BootSecFAT32Str //引导扇区 FAT 扩展结构
91 =2 {
92 =2 DWORD BPB_FATSz32; //FAT扇区总数
93 =2 WORD BPB_ExtFlags;
94 =2 WORD BPB_FSVer;
95 =2 DWORD BPB_RootClus; //根目录开始的簇
96 =2 WORD BPB_FSInfo;
97 =2 WORD BPB_BkBootSec;
98 =2 char BPB_Reserved[12];
99 =2 BYTE BS_DrvNum;
100 =2 BYTE BS_Reserved1;
101 =2 BYTE BS_BootSig;
102 =2 DWORD BS_VolID;
103 =2 char BS_VolLab[11];
104 =2 char BS_FilSysType[8];
105 =2 };
106 =2
107 =2 struct BootSecStr //引导扇区结构
108 =2 {
109 =2 BYTE BS_jmpBoot[3];
110 =2 BYTE BS_OEMName[8];
111 =2 WORD BPB_BytesPerSec; //每扇区字节数 512
112 =2 BYTE BPB_SecPerClus; //每簇扇区数 1 2 4 8 16 32 64 128
113 =2 WORD BPB_RsvdSecCnt; //保留扇区数 0x20
114 =2 BYTE BPB_NumFATs; //FAT表个数 2
115 =2 WORD BPB_RootEntCnt;
116 =2 WORD BPB_TotSec16;
117 =2 BYTE BPB_Media;
118 =2 WORD BPB_FATSz16;
119 =2 WORD BPB_SecPerTrk;
120 =2 WORD BPB_NumHeads;
121 =2 DWORD BPB_HiddSec;
122 =2 DWORD BPB_TotSec32;
123 =2 union FATUni
124 =2 {
C51 COMPILER V6.23a FATREADCLUSTER 12/24/2004 00:11:40 PAGE 9
125 =2 struct BootSecFAT32Str F32;
126 =2 struct BootSecFAT16Str F16;
127 =2 }FAT;
128 =2
129 =2 };
130 =2
131 =2 struct DPTStr //分区表结构
132 =2 {
133 =2 BYTE BootFlag;
134 =2 BYTE CHSBegin[3];
135 =2 BYTE TypeCode;
136 =2 BYTE CHSEnd[3];
137 =2 DWORD LBABegin;
138 =2 DWORD CntSec;
139 =2 };
140 =2
141 =2 struct sDPTStr //简化的分区表
142 =2 {
143 =2 BYTE FATType;
144 =2 DWORD LBABegin;
145 =2 DWORD CntSec;
146 =2 };
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -