📄 fat16listdirectory.lst
字号:
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 FAT16LISTDIRECTORY 12/24/2004 00:11:43 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 FAT16LISTDIRECTORY 12/24/2004 00:11:43 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 BYTE FAT16ListDirectory(void);
6
7 BYTE FAT16ListDirectory(void)
8 {
9 1 xdata BYTE i,j,m;
10 1 xdata DWORD Sector;
11 1 xdata struct FATClusterStr ReadCluster;
12 1
13 1 if (FAT.CurrentDirectory==FAT.RootClus) //根目录
14 1 {
15 2 Sector=FAT.CurrentDirectory;
16 2 for(m=0;m<FAT.RootSectors;m++)
17 2 {
18 3 StorageMedia.ReadSector(Sector++,DiskBuffer);
19 3 for (i=0;i<16;i++)
20 3 {
21 4 if (sDIR[i].Name[0]==0xe5||sDIR[i].Name[0]==0x00) continue; //空目录项跳过
22 4 if (sDIR[i].Attr&FAT_ATTR_VOLUME_ID)
23 4 printf("Driver Volume:");
24 4 for(j=0;j<11;j++)
25 4 printf("%c",sDIR[i].Name[j]);
26 4 if (sDIR[i].Attr&FAT_ATTR_DIRECTORY) printf("\t<DIR>"); else printf("\t<FILE>");
27 4 printf("\t%ld",MEMSwap32(sDIR[i].FileSize));
28 4 printf("\n");
29 4 }
C51 COMPILER V6.23a FAT16LISTDIRECTORY 12/24/2004 00:11:43 PAGE 12
30 3 }
31 2 }
32 1 else
33 1 {
34 2 ReadCluster.Cluster=FAT.CurrentDirectory;
35 2 ReadCluster.SecOffset=0;
36 2 while(ReadCluster.Cluster!=FAT_CLUSTER_END16)
37 2 {
38 3 FATReadCluster(&ReadCluster,DiskBuffer);
39 3 for (i=0;i<16;i++)
40 3 {
41 4 if (sDIR[i].Name[0]==0xe5||sDIR[i].Name[0]==0x00) continue; //空目录项跳过
42 4 if (sDIR[i].Attr&FAT_ATTR_VOLUME_ID)
43 4 printf("Driver Volume:");
44 4 for(j=0;j<11;j++)
45 4 printf("%c",sDIR[i].Name[j]);
46 4 if (sDIR[i].Attr&FAT_ATTR_DIRECTORY) printf("\t<DIR>"); else printf("\t<FILE>");
47 4 printf("\t%ld",MEMSwap32(sDIR[i].FileSize));
48 4 printf("\n");
49 4 }
50 3 }
51 2 }
52 1 return(0);
53 1 }
C51 COMPILER V6.23a FAT16LISTDIRECTORY 12/24/2004 00:11:43 PAGE 13
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION FAT16ListDirectory (BEGIN)
; SOURCE LINE # 7
; SOURCE LINE # 8
; SOURCE LINE # 13
0000 900000 E MOV DPTR,#FAT+05H
0003 E0 MOVX A,@DPTR
0004 FC MOV R4,A
0005 A3 INC DPTR
0006 E0 MOVX A,@DPTR
0007 FD MOV R5,A
0008 A3 INC DPTR
0009 E0 MOVX A,@DPTR
000A FE MOV R6,A
000B A3 INC DPTR
000C E0 MOVX A,@DPTR
000D FF MOV R7,A
000E 900000 E MOV DPTR,#FAT
0011 E0 MOVX A,@DPTR
0012 F8 MOV R0,A
0013 A3 INC DPTR
0014 E0 MOVX A,@DPTR
0015 F9 MOV R1,A
0016 A3 INC DPTR
0017 E0 MOVX A,@DPTR
0018 FA MOV R2,A
0019 A3 INC DPTR
001A E0 MOVX A,@DPTR
001B FB MOV R3,A
001C C3 CLR C
001D 120000 E LCALL ?C?ULCMP
0020 6003 JZ $ + 5H
0022 020000 R LJMP ?C0001
; SOURCE LINE # 14
; SOURCE LINE # 15
0025 900000 E MOV DPTR,#FAT
0028 E0 MOVX A,@DPTR
0029 FC MOV R4,A
002A A3 INC DPTR
002B E0 MOVX A,@DPTR
002C FD MOV R5,A
002D A3 INC DPTR
002E E0 MOVX A,@DPTR
002F FE MOV R6,A
0030 A3 INC DPTR
0031 E0 MOVX A,@DPTR
0032 FF MOV R7,A
0033 900000 R MOV DPTR,#Sector
0036 120000 E LCALL ?C?LSTXDATA
; SOURCE LINE # 16
0039 E4 CLR A
003A 900000 R MOV DPTR,#m
003D F0 MOVX @DPTR,A
003E ?C0002:
003E 900000 E MOV DPTR,#FAT+09H
0041 E0 MOVX A,@DPTR
0042 FF MOV R7,A
0043 900000 R MOV DPTR,#m
0046 E0 MOVX A,@DPTR
0047 C3 CLR C
C51 COMPILER V6.23a FAT16LISTDIRECTORY 12/24/2004 00:11:43 PAGE 14
0048 9F SUBB A,R7
0049 4003 JC $ + 5H
004B 020000 R LJMP ?C0016
; SOURCE LINE # 17
; SOURCE LINE # 18
004E A3 INC DPTR
004F 120000 E LCALL ?C?LLDIXDATA1
0052 7B01 MOV R3,#01H
0054 7A00 E MOV R2,#HIGH DiskBuffer
0056 7900 E MOV R1,#LOW DiskBuffer
0058 C002 PUSH AR2
005A 900000 E MOV DPTR,#StorageMedia+08H
005D A3 INC DPTR
005E E0 MOVX A,@DPTR
005F FA MOV R2,A
0060 A3 INC DPTR
0061 E0 MOVX A,@DPTR
0062 F582 MOV DPL,A
0064 8A83 MOV DPH,R2
0066 D002 POP AR2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -