📄 fatreadcluster.lst
字号:
147 =2
148 =2 struct FAT32FSInfoStr //FAT32扩展信息结构
149 =2 {
150 =2 DWORD LeadSig;
151 =2 BYTE Reserved1[480];
152 =2 DWORD StrucSig;
153 =2 DWORD FreeCount;
154 =2 DWORD NxtFree;
155 =2 BYTE Reserved2[12];
156 =2 DWORD TrailSig;
157 =2 };
158 =2
159 =2 struct FATSDirStr //FAT目录结构 短文件名
160 =2 {
161 =2 CHAR Name[11];
162 =2 BYTE Attr;
163 =2 BYTE NTRes;
164 =2 BYTE CrtTimeTenth;
165 =2 WORD CrtTime;
166 =2 WORD CrtDate;
167 =2 WORD LstAccDate;
168 =2 WORD FstClusHI;
169 =2 WORD WrtTime;
170 =2 WORD WrtDate;
171 =2 WORD FstClusLO;
172 =2 DWORD FileSize;
173 =2 };
174 =2
175 =2 struct FATLDirStr //FAT目录结构 长文件名
176 =2 {
177 =2 BYTE Ord;
178 =2 BYTE Name1[10];
179 =2 BYTE Attr;
180 =2 BYTE Type;
181 =2 BYTE Chksum;
182 =2 BYTE Name2[12];
183 =2 WORD FstClusLO;
184 =2 BYTE Name3[4];
185 =2 };
186 =2
C51 COMPILER V6.23a FATREADCLUSTER 12/24/2004 00:11:40 PAGE 10
187 =2 struct FATStr //FAT参数表
188 =2 {
189 =2 // BYTE ClusSecCnt; //当前簇扇区计数
190 =2 DWORD CurrentDirectory; //当前目录入口(簇号)
191 =2 BYTE SecPerClus; //每簇扇区数 1 2 4 8 16 32 64 128
192 =2 DWORD RootClus; //根目录开始的簇
193 =2 BYTE RootSectors; //根目录占用的扇区数
194 =2 DWORD ClusSec; //簇开始的扇区
195 =2 DWORD FATSz; //FAT表大小(扇区)
196 =2 DWORD FATSec; //FAT表开始扇区
197 =2 DWORD FSISec; //FSI所在扇区
198 =2 DWORD FSIFreeCount; //空闲簇数
199 =2 DWORD FSINxtFree; //空闲簇搜索指针
200 =2 };
201 =2
202 =2 struct FCBStr
203 =2 {
204 =2 CHAR FileName[12]; //文件名
205 =2 DWORD Size; //文件大小
206 =2 DWORD FirstCluster; //第一个簇
207 =2 DWORD LastCluster; //最近一次读到的簇号
208 =2 DWORD ClusSecCnt; //当前簇扇区计数
209 =2 DWORD ByteCnt; //当前字节计数
210 =2 };
211 =2
212 =2 struct FATTableStr
213 =2 {
214 =2 DWORD Sector;
215 =2 union FATUin
216 =2 {
217 =2 DWORD F32[128];
218 =2 WORD F16[256];
219 =2 BYTE F12[512];
220 =2 }FAT;
221 =2 };
222 =2
223 =2 struct FATClusterStr
224 =2 {
225 =2 BYTE SecOffset; //扇区偏移量
226 =2 DWORD Sector; //扇区号
227 =2 DWORD Cluster; //簇号
228 =2 };
229 =2
230 =2 #ifndef _LIBRARY_DEFINE
=2 xdata BYTE DiskBuffer[512];
=2
=2 xdata struct StorageMediaStr StorageMedia;
=2 xdata struct sDPTStr sDPT[FAT_MAX_PARTITIONS];
=2 xdata struct FATStr FAT;
=2 xdata struct FCBStr FCB[FAT_MAX_FCB];
=2 xdata CHAR LongFileName[256];
=2 xdata struct FATTableStr FATTable;
=2 xdata struct DPTStr *DPT; //分区表结构指针
=2 xdata struct BootSecStr *BOOTSEC; //引导扇区结构指针
=2 xdata struct FAT32FSInfoStr *FSI; //FAT32扩展信息
=2 xdata struct FATSDirStr *sDIR; //FAT目录结构指针
=2 xdata struct FATLDirStr *lDIR; //FAT目录结构指针
=2 #endif
245 =2 #endif
246 =2
247 =2 extern xdata BYTE DiskBuffer[512];
248 =2
C51 COMPILER V6.23a FATREADCLUSTER 12/24/2004 00:11:40 PAGE 11
249 =2 extern xdata struct StorageMediaStr StorageMedia;
250 =2 extern xdata struct sDPTStr sDPT[FAT_MAX_PARTITIONS];
251 =2 extern xdata struct FATStr FAT;
252 =2 extern xdata struct FCBStr FCB[FAT_MAX_FCB];
253 =2 extern xdata CHAR LongFileName[256];
254 =2 extern xdata struct FATTableStr FATTable;
255 =2 extern xdata struct DPTStr *DPT; //分区表结构指针
256 =2 extern xdata struct BootSecStr *BOOTSEC; //引导扇区结构指针
257 =2 extern xdata struct FAT32FSInfoStr *FSI; //FAT32扩展信息
258 =2 extern xdata struct FATSDirStr *sDIR; //FAT目录结构指针
259 =2 extern xdata struct FATLDirStr *lDIR; //FAT目录结构指针
260 =2
261 =2 extern void FATInit(void);
262 =2 extern BYTE FATSelectMedia(BYTE Media);
263 =2 extern BYTE FATFindPartitions(void);
264 =2 extern BYTE FATMountPartition(void);
265 =2 extern BYTE FATMountVolumeID(BYTE Partition);
266 =2 extern void FATGetPartLongName(struct FATLDirStr *ldp,CHAR *name);
267 =2 extern DWORD FATDiskSize(void);
268 =2 extern DWORD FATDiskFreeSize(void);
269 =2 extern BYTE FATFindDIREntry(CHAR *DirName);
270 =2 extern BYTE FAT32FindDIREntry(CHAR *DirName);
271 =2 extern BYTE FAT16FindDIREntry(CHAR *DirName);
272 =2 void FATReadCluster(struct FATClusterStr *Cluster,BYTE *Buffer);
273 =2 extern BYTE FATChangeDirectory(CHAR *DirName);
274 =2 extern BYTE FATListDirectory(void);
275 =2 extern BYTE FAT32ListDirectory(void);
276 =2 extern BYTE FAT16ListDirectory(void);
277 =2 extern void FATNextCluster(DWORD *CurrentCluster);
278 =2 extern BYTE FATGetDirName(WORD SecNum);
279 =2 extern BYTE FATOpenFile(CHAR *filename);
280 =2 extern void FATCloseFile(BYTE fp);
281 =2 extern WORD FATReadFile(BYTE fp);
282 =2
11 =1
3 #endif
4
5 void FATReadCluster(struct FATClusterStr *Cluster,BYTE *Buffer);
6
7 void FATReadCluster(struct FATClusterStr *Cluster,BYTE *Buffer)
8 {
9 1 if (Cluster->SecOffset==0) //读第一簇
10 1 Cluster->Sector=ClusterToSector(Cluster->Cluster);
11 1 StorageMedia.ReadSector(Cluster->Sector,Buffer);
12 1
13 1 Cluster->SecOffset++;
14 1 if (Cluster->SecOffset==FAT.SecPerClus) //读下一簇
15 1 {
16 2 FATNextCluster(&(Cluster->Cluster));
17 2 Cluster->SecOffset=0;
18 2 }
19 1 else
20 1 Cluster->Sector++;
21 1
22 1 }
C51 COMPILER V6.23a FATREADCLUSTER 12/24/2004 00:11:40 PAGE 12
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION _FATReadCluster (BEGIN)
; SOURCE LINE # 7
0000 900000 R MOV DPTR,#Cluster
0003 EB MOV A,R3
0004 F0 MOVX @DPTR,A
0005 A3 INC DPTR
0006 EA MOV A,R2
0007 F0 MOVX @DPTR,A
0008 A3 INC DPTR
0009 E9 MOV A,R1
000A F0 MOVX @DPTR,A
; SOURCE LINE # 8
; SOURCE LINE # 9
000B 900000 R MOV DPTR,#Cluster
000E E0 MOVX A,@DPTR
000F FB MOV R3,A
0010 A3 INC DPTR
0011 E0 MOVX A,@DPTR
0012 FA MOV R2,A
0013 A3 INC DPTR
0014 E0 MOVX A,@DPTR
0015 F9 MOV R1,A
0016 120000 E LCALL ?C?CLDPTR
0019 704B JNZ ?C0001
; SOURCE LINE # 10
001B 900005 MOV DPTR,#05H
001E 120000 E LCALL ?C?LLDOPTR
0021 EF MOV A,R7
0022 24FE ADD A,#0FEH
0024 FB MOV R3,A
0025 EE MOV A,R6
0026 34FF ADDC A,#0FFH
0028 FA MOV R2,A
0029 ED MOV A,R5
002A 34FF ADDC A,#0FFH
002C F9 MOV R1,A
002D EC MOV A,R4
002E 34FF ADDC A,#0FFH
0030 F8 MOV R0,A
0031 900000 E MOV DPTR,#FAT+04H
0034 E0 MOVX A,@DPTR
0035 FF MOV R7,A
0036 E4 CLR A
0037 FC MOV R4,A
0038 FD MOV R5,A
0039 FE MOV R6,A
003A 120000 E LCALL ?C?LMUL
003D 900000 E MOV DPTR,#FAT+0AH
0040 E0 MOVX A,@DPTR
0041 F8 MOV R0,A
0042 A3 INC DPTR
0043 E0 MOVX A,@DPTR
0044 F9 MOV R1,A
0045 A3 INC DPTR
0046 E0 MOVX A,@DPTR
0047 FA MOV R2,A
0048 A3 INC DPTR
0049 E0 MOVX A,@DPTR
004A 2F ADD A,R7
C51 COMPILER V6.23a FATREADCLUSTER 12/24/2004 00:11:40 PAGE 13
004B FF MOV R7,A
004C EA MOV A,R2
004D 3E ADDC A,R6
004E FE MOV R6,A
004F E9 MOV A,R1
0050 3D ADDC A,R5
0051 FD MOV R5,A
0052 E8 MOV A,R0
0053 3C ADDC A,R4
0054 FC MOV R4,A
0055 900000 R MOV DPTR,#Cluster
0058 E0 MOVX A,@DPTR
0059 FB MOV R3,A
005A A3 INC DPTR
005B E0 MOVX A,@DPTR
005C FA MOV R2,A
005D A3 INC DPTR
005E E0 MOVX A,@DPTR
005F F9 MOV R1,A
0060 900001 MOV DPTR,#01H
0063 120000 E LCALL ?C?LSTOPTR
0066 ?C0001:
; SOURCE LINE # 11
0066 900000 R MOV DPTR,#Cluster
0069 E0 MOVX A,@DPTR
006A FB MOV R3,A
006B A3 INC DPTR
006C E0 MOVX A,@DPTR
006D FA MOV R2,A
006E A3 INC DPTR
006F E0 MOVX A,@DPTR
0070 F9 MOV R1,A
0071 900001 MOV DPTR,#01H
0074 120000 E LCALL ?C?LLDOPTR
0077 900000 R MOV DPTR,#Buffer
007A E0 MOVX A,@DPTR
007B FB MOV R3,A
007C A3 INC DPTR
007D E0 MOVX A,@DPTR
007E FA MOV R2,A
007F A3 INC DPTR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -