📄 fat32openfile.lst
字号:
163 =2 DWORD FATSz; //FAT表大小(扇区)
164 =2 DWORD FATSec; //FAT表开始扇区
C51 COMPILER V8.08 FAT32OPENFILE 06/01/2008 16:21:01 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 FAT32OPENFILE 06/01/2008 16:21:01 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 BYTE FAT32OpenFile(CHAR *filename);
6
7 BYTE FAT32OpenFile(CHAR *filename)
8 {
9 1 register BYTE i,j;
10 1
11 1 i=0;
12 1 while(i<FAT32_MAX_FCB&&FCB[i].FirstCluster) i++;
13 1
14 1 if (i==FAT32_MAX_FCB) return(FAT32_ERR_FILE_OPEN_ERROR); //文件控制块已满
15 1 else
16 1 {
17 2 j=FAT32FindDIREntry(filename);
18 2 if (j<16)
19 2 {
20 3 strcpy((char *)FCB[i].FileName,(char *)filename);
21 3 FCB[i].Size=MEMSwap32(sDIR[j].FileSize);
22 3 ((WORD *)&FCB[i].FirstCluster)[0]=MEMSwap16(sDIR[j].FstClusHI);
23 3 ((WORD *)&FCB[i].FirstCluster)[1]=MEMSwap16(sDIR[j].FstClusLO);
24 3 FCB[i].LastCluster=FCB[i].FirstCluster;
25 3 FCB[i].ClusSecCnt=0;
26 3 FCB[i].ByteCnt=0;
27 3 return(i);
28 3 }
29 2 else return(FAT32_ERR_FILE_OPEN_ERROR);
30 2 }
31 1 }
C51 COMPILER V8.08 FAT32OPENFILE 06/01/2008 16:21:01 PAGE 12
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION _FAT32OpenFile (BEGIN)
; SOURCE LINE # 7
0000 900000 R MOV DPTR,#filename
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 # 11
000B E4 CLR A
000C A3 INC DPTR
000D F0 MOVX @DPTR,A
000E ?C0001:
; SOURCE LINE # 12
000E 900000 R MOV DPTR,#i
0011 E0 MOVX A,@DPTR
0012 FF MOV R7,A
0013 C3 CLR C
0014 9402 SUBB A,#02H
0016 5027 JNC ?C0002
0018 EF MOV A,R7
0019 C4 SWAP A
001A 33 RLC A
001B 54E0 ANL A,#0E0H
001D 2400 E ADD A,#LOW FCB+010H
001F F582 MOV DPL,A
0021 E4 CLR A
0022 3400 E ADDC A,#HIGH FCB+010H
0024 F583 MOV DPH,A
0026 E0 MOVX A,@DPTR
0027 FC MOV R4,A
0028 A3 INC DPTR
0029 E0 MOVX A,@DPTR
002A FD MOV R5,A
002B A3 INC DPTR
002C E0 MOVX A,@DPTR
002D FE MOV R6,A
002E A3 INC DPTR
002F E0 MOVX A,@DPTR
0030 FF MOV R7,A
0031 EC MOV A,R4
0032 4D ORL A,R5
0033 4E ORL A,R6
0034 4F ORL A,R7
0035 6008 JZ ?C0002
0037 900000 R MOV DPTR,#i
003A E0 MOVX A,@DPTR
003B 04 INC A
003C F0 MOVX @DPTR,A
003D 80CF SJMP ?C0001
003F ?C0002:
; SOURCE LINE # 14
003F 900000 R MOV DPTR,#i
0042 E0 MOVX A,@DPTR
0043 B40203 CJNE A,#02H,?C0003
C51 COMPILER V8.08 FAT32OPENFILE 06/01/2008 16:21:01 PAGE 13
0046 7F02 MOV R7,#02H
0048 22 RET
0049 ?C0003:
; SOURCE LINE # 16
; SOURCE LINE # 17
0049 900000 R MOV DPTR,#filename
004C E0 MOVX A,@DPTR
004D FB MOV R3,A
004E A3 INC DPTR
004F E0 MOVX A,@DPTR
0050 FA MOV R2,A
0051 A3 INC DPTR
0052 E0 MOVX A,@DPTR
0053 F9 MOV R1,A
0054 120000 E LCALL _FAT32FindDIREntry
0057 900000 R MOV DPTR,#j
005A EF MOV A,R7
005B F0 MOVX @DPTR,A
; SOURCE LINE # 18
005C C3 CLR C
005D 9410 SUBB A,#010H
005F 4003 JC $ + 5H
0061 020000 R LJMP ?C0006
; SOURCE LINE # 19
; SOURCE LINE # 20
0064 900000 R MOV DPTR,#i
0067 E0 MOVX A,@DPTR
0068 75F020 MOV B,#020H
006B A4 MUL AB
006C 2400 E ADD A,#LOW FCB
006E F9 MOV R1,A
006F 7400 E MOV A,#HIGH FCB
0071 35F0 ADDC A,B
0073 A801 MOV R0,AR1
0075 FC MOV R4,A
0076 7D01 MOV R5,#01H
0078 900000 R MOV DPTR,#filename
007B E0 MOVX A,@DPTR
007C FB MOV R3,A
007D A3 INC DPTR
007E E0 MOVX A,@DPTR
007F FA MOV R2,A
0080 A3 INC DPTR
0081 E0 MOVX A,@DPTR
0082 F9 MOV R1,A
0083 120000 E LCALL ?C?STRCPY
; SOURCE LINE # 21
0086 900000 R MOV DPTR,#j
0089 E0 MOVX A,@DPTR
008A 75F020 MOV B,#020H
008D A4 MUL AB
008E FF MOV R7,A
008F 900000 E MOV DPTR,#sDIR
0092 E0 MOVX A,@DPTR
0093 FB MOV R3,A
0094 A3 INC DPTR
0095 E0 MOVX A,@DPTR
0096 FA MOV R2,A
0097 A3 INC DPTR
0098 E0 MOVX A,@DPTR
0099 2F ADD A,R7
009A F9 MOV R1,A
C51 COMPILER V8.08 FAT32OPENFILE 06/01/2008 16:21:01 PAGE 14
009B EA MOV A,R2
009C 35F0 ADDC A,B
009E FA MOV R2,A
009F 90001C MOV DPTR,#01CH
00A2 120000 E LCALL ?C?LLDOPTR
00A5 120000 E LCALL _MEMSwap32
00A8 900000 R MOV DPTR,#i
00AB E0 MOVX A,@DPTR
00AC C4 SWAP A
00AD 33 RLC A
00AE 54E0 ANL A,#0E0H
00B0 2400 E ADD A,#LOW FCB+0CH
00B2 F582 MOV DPL,A
00B4 E4 CLR A
00B5 3400 E ADDC A,#HIGH FCB+0CH
00B7 F583 MOV DPH,A
00B9 120000 E LCALL ?C?LSTXDATA
; SOURCE LINE # 22
00BC 900000 R MOV DPTR,#j
00BF E0 MOVX A,@DPTR
00C0 75F020 MOV B,#020H
00C3 A4 MUL AB
00C4 FF MOV R7,A
00C5 900000 E MOV DPTR,#sDIR
00C8 E0 MOVX A,@DPTR
00C9 FB MOV R3,A
00CA A3 INC DPTR
00CB E0 MOVX A,@DPTR
00CC FA MOV R2,A
00CD A3 INC DPTR
00CE E0 MOVX A,@DPTR
00CF 2F ADD A,R7
00D0 F9 MOV R1,A
00D1 EA MOV A,R2
00D2 35F0 ADDC A,B
00D4 FA MOV R2,A
00D5 900014 MOV DPTR,#014H
00D8 120000 E LCALL ?C?ILDOPTR
00DB FF MOV R7,A
00DC AEF0 MOV R6,B
00DE 120000 E LCALL _MEMSwap16
00E1 900000 R MOV DPTR,#i
00E4 E0 MOVX A,@DPTR
00E5 C4 SWAP A
00E6 33 RLC A
00E7 54E0 ANL A,#0E0H
00E9 2400 E ADD A,#LOW FCB+010H
00EB F582 MOV DPL,A
00ED E4 CLR A
00EE 3400 E ADDC A,#HIGH FCB+010H
00F0 F583 MOV DPH,A
00F2 EE MOV A,R6
00F3 F0 MOVX @DPTR,A
00F4 A3 INC DPTR
00F5 EF MOV A,R7
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -