📄 fat32readcluster.lst
字号:
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 };
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参数表
155 =2 {
156 =2 BYTE ClusSecCnt; //当前簇扇区计数
157 =2 DWORD CurrentDirectory; //当前目录入口(簇号)
158 =2 BYTE SecPerClus; //每簇扇区数 1 2 4 8 16 32 64 128
159 =2 WORD RsvdSecCnt; //保留扇区数 0x20
160 =2 BYTE NumFATs; //FAT表个数 2
161 =2 DWORD RootClus; //根目录开始的簇
162 =2 DWORD ClusSec; //簇开始的扇区
163 =2 DWORD FATSz; //FAT表大小(扇区)
164 =2 DWORD FATSec; //FAT表开始扇区
C51 COMPILER V8.08 FAT32READCLUSTER 06/01/2008 16:21:02 PAGE 10
165 =2 DWORD FSISec; //FSI所在扇区
166 =2 DWORD FSIFreeCount; //空闲簇数
167 =2 DWORD FSINxtFree; //空闲簇搜索指针
168 =2 };
169 =2
170 =2 struct FCBStr
171 =2 {
172 =2 CHAR FileName[12]; //文件名
173 =2 DWORD Size; //文件大小
174 =2 DWORD FirstCluster; //第一个簇
175 =2 DWORD LastCluster; //最近一次读到的簇号
176 =2 DWORD ClusSecCnt; //当前簇扇区计数
177 =2 DWORD ByteCnt; //当前字节计数
178 =2 };
179 =2
180 =2 struct FATStr
181 =2 {
182 =2 DWORD Sector;
183 =2 DWORD FAT[128];
184 =2 };
185 =2
186 =2 #ifndef _LIBRARY_DEFINE
=2 xdata BYTE DiskBuffer[512];
=2
=2 xdata struct sDPTStr sDPT[4];
=2 xdata struct FAT32Str FAT32;
=2 xdata struct FCBStr FCB[FAT32_MAX_FCB];
=2 xdata CHAR LongFileName[256];
=2 xdata struct FATStr FAT;
=2 xdata struct DPTStr *DPT; //分区表结构指针
=2 xdata struct BootSecStr *BOOTSEC; //引导扇区结构指针
=2 xdata struct FAT32FSInfoStr *FSI; //FAT32扩展信息
=2 xdata struct FAT32SDirStr *sDIR; //FAT目录结构指针
=2 xdata struct FAT32LDirStr *lDIR; //FAT目录结构指针
=2 #endif
200 =2 #endif
201 =2
202 =2 extern xdata BYTE DiskBuffer[512];
203 =2
204 =2 extern xdata struct sDPTStr sDPT[4];
205 =2 extern xdata struct FAT32Str FAT32;
206 =2 extern xdata struct FCBStr FCB[FAT32_MAX_FCB];
207 =2 extern xdata CHAR LongFileName[256];
208 =2 extern xdata struct FATStr FAT;
209 =2 extern xdata struct DPTStr *DPT; //分区表结构指针
210 =2 extern xdata struct BootSecStr *BOOTSEC; //引导扇区结构指针
211 =2 extern xdata struct FAT32FSInfoStr *FSI; //FAT32扩展信息
212 =2 extern xdata struct FAT32SDirStr *sDIR; //FAT目录结构指针
213 =2 extern xdata struct FAT32LDirStr *lDIR; //FAT目录结构指针
214 =2
215 =2 extern void FAT32Init(void);
216 =2 extern BYTE FAT32MountPartition(void);
217 =2 extern BYTE FAT32MountVolumeID(BYTE Partition);
218 =2 extern BYTE FAT32GetDirName(WORD SecNum);
219 =2 extern void FAT32GetPartLongName(struct FAT32LDirStr *ldp,CHAR *name);
220 =2 extern DWORD FAT32DiskSize(void);
221 =2 extern DWORD FAT32DiskFreeSize(void);
222 =2 extern BYTE FAT32FindDIREntry(CHAR *DirName);
223 =2 extern void FAT32ReadCluster(DWORD *Cluster);
224 =2 extern BYTE FAT32ChangeDirectory(CHAR *DirName);
225 =2 extern BYTE FAT32ListDirectory(void);
226 =2 extern DWORD FAT32NextCluster(DWORD CurrentCluster);
C51 COMPILER V8.08 FAT32READCLUSTER 06/01/2008 16:21:02 PAGE 11
227 =2 extern BYTE FAT32OpenFile(CHAR *filename);
228 =2 extern void FAT32CloseFile(BYTE fp);
229 =2 extern WORD FAT32ReadFile(BYTE fp);
11 =1
12 =1
3 #endif
4
5 void FAT32ReadCluster(DWORD *Cluster);
6
7 void FAT32ReadCluster(DWORD *Cluster)
8 {
9 1 if (FAT32.ClusSecCnt==FAT32.SecPerClus) //读下一簇
10 1 {
11 2 *Cluster=FAT32NextCluster(*Cluster);
12 2 IDEReadSector(ClusterToSector(*Cluster));
13 2 FAT32.ClusSecCnt=1;
14 2 }
15 1 else if (FAT32.ClusSecCnt==0) //读第一簇
16 1 {
17 2 IDEReadSector(ClusterToSector(*Cluster));
18 2 FAT32.ClusSecCnt++;
19 2 }
20 1 else //读当前簇下一扇区
21 1 {
22 2 IDEReadSector(IDE.CurrentSector+1);
23 2 FAT32.ClusSecCnt++;
24 2 }
25 1 }
C51 COMPILER V8.08 FAT32READCLUSTER 06/01/2008 16:21:02 PAGE 12
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION _FAT32ReadCluster (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 E MOV DPTR,#FAT32+05H
000E E0 MOVX A,@DPTR
000F FF MOV R7,A
0010 900000 E MOV DPTR,#FAT32
0013 E0 MOVX A,@DPTR
0014 6F XRL A,R7
0015 7071 JNZ ?C0001
; SOURCE LINE # 10
; SOURCE LINE # 11
0017 900000 R MOV DPTR,#Cluster
001A E0 MOVX A,@DPTR
001B FB MOV R3,A
001C A3 INC DPTR
001D E0 MOVX A,@DPTR
001E FA MOV R2,A
001F A3 INC DPTR
0020 E0 MOVX A,@DPTR
0021 F9 MOV R1,A
0022 120000 E LCALL ?C?LLDPTR
0025 120000 E LCALL _FAT32NextCluster
0028 900000 R MOV DPTR,#Cluster
002B E0 MOVX A,@DPTR
002C FB MOV R3,A
002D A3 INC DPTR
002E E0 MOVX A,@DPTR
002F FA MOV R2,A
0030 A3 INC DPTR
0031 E0 MOVX A,@DPTR
0032 F9 MOV R1,A
0033 120000 E LCALL ?C?LSTPTR
; SOURCE LINE # 12
0036 900000 R MOV DPTR,#Cluster
0039 E0 MOVX A,@DPTR
003A FB MOV R3,A
003B A3 INC DPTR
003C E0 MOVX A,@DPTR
003D FA MOV R2,A
003E A3 INC DPTR
003F E0 MOVX A,@DPTR
0040 F9 MOV R1,A
0041 120000 E LCALL ?C?LLDPTR
0044 EF MOV A,R7
0045 24FE ADD A,#0FEH
0047 FB MOV R3,A
0048 EE MOV A,R6
0049 34FF ADDC A,#0FFH
C51 COMPILER V8.08 FAT32READCLUSTER 06/01/2008 16:21:02 PAGE 13
004B FA MOV R2,A
004C ED MOV A,R5
004D 34FF ADDC A,#0FFH
004F F9 MOV R1,A
0050 EC MOV A,R4
0051 34FF ADDC A,#0FFH
0053 F8 MOV R0,A
0054 900000 E MOV DPTR,#FAT32+05H
0057 E0 MOVX A,@DPTR
0058 FF MOV R7,A
0059 E4 CLR A
005A FC MOV R4,A
005B FD MOV R5,A
005C FE MOV R6,A
005D 120000 E LCALL ?C?LMUL
0060 900000 E MOV DPTR,#FAT32+0DH
0063 E0 MOVX A,@DPTR
0064 F8 MOV R0,A
0065 A3 INC DPTR
0066 E0 MOVX A,@DPTR
0067 F9 MOV R1,A
0068 A3 INC DPTR
0069 E0 MOVX A,@DPTR
006A FA MOV R2,A
006B A3 INC DPTR
006C E0 MOVX A,@DPTR
006D 2F ADD A,R7
006E FF MOV R7,A
006F EA MOV A,R2
0070 3E ADDC A,R6
0071 FE MOV R6,A
0072 E9 MOV A,R1
0073 3D ADDC A,R5
0074 FD MOV R5,A
0075 E8 MOV A,R0
0076 3C ADDC A,R4
0077 FC MOV R4,A
0078 900000 E MOV DPTR,#IDE+02H
007B 120000 E LCALL ?C?LSTXDATA
007E 120000 E LCALL _IDEReadSector
; SOURCE LINE # 13
0081 900000 E MOV DPTR,#FAT32
0084 7401 MOV A,#01H
0086 F0 MOVX @DPTR,A
; SOURCE LINE # 14
0087 22 RET
0088 ?C0001:
; SOURCE LINE # 15
0088 900000 E MOV DPTR,#FAT32
008B E0 MOVX A,@DPTR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -