📄 fat16.lst
字号:
1 .file "fat16.c"
2 .arch atmega128
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
80 .global FS_DataStartSec
81 .global FS_DataStartSec
82 .section .bss
85 FS_DataStartSec:
86 0000 0000 0000 .skip 4,0
87 .global FS_RootDirStartSec
88 .global FS_RootDirStartSec
91 FS_RootDirStartSec:
92 0004 0000 .skip 2,0
93 .global FS_RootEntCnt
94 .global FS_RootEntCnt
97 FS_RootEntCnt:
98 0006 0000 .skip 2,0
99 .global FS_MaxClus
100 .global FS_MaxClus
103 FS_MaxClus:
104 0008 0000 .skip 2,0
105 .global FS_FATStartSec
106 .global FS_FATStartSec
109 FS_FATStartSec:
110 000a 00 .skip 1,0
111 .global FS_SecPerClus
112 .global FS_SecPerClus
115 FS_SecPerClus:
116 000b 00 .skip 1,0
117 .text
120 .global _Z11GetNextClusj
122 _Z11GetNextClusj:
1:fat16.c **** /*
2:fat16.c **** ;**************************************************************************************************
3:fat16.c **** ;* Copyright (c) 2006 by JiaoJinXing.
4:fat16.c **** ;* All rights reserved.
5:fat16.c **** ;*
6:fat16.c **** ;*---- 文件信息 -----------------------------------------------------------------------------------
7:fat16.c **** ;* 文 件 名 : FAT16.c
8:fat16.c **** ;* 创 建 人 : 焦进星
9:fat16.c **** ;* 描 述 : FAT16文件分配表文件
10:fat16.c **** ;*
11:fat16.c **** ;*---- 历史版本信息 -------------------------------------------------------------------------------
12:fat16.c **** ;* 日 期 : 2008年 12 月 15 日
13:fat16.c **** ;* 创 建 人 : 焦进星
14:fat16.c **** ;* 描 述 : 建立版本 V1.0.0
15:fat16.c **** ;*
16:fat16.c **** ;*---- 联系方式 -----------------------------------------------------------------------------------
17:fat16.c **** ;* Email : wyoujtg@163.com
18:fat16.c **** ;* Web : http://wyoujtg.blog.163.com
19:fat16.c **** ;**************************************************************************************************
20:fat16.c **** ;*/
21:fat16.c ****
22:fat16.c **** #define IN_FAT16
23:fat16.c **** #include "minifs.h"
24:fat16.c ****
25:fat16.c **** /*
26:fat16.c **** ;**************************************************************************************************
27:fat16.c **** ;* 函数名称 : GetNextClus
28:fat16.c **** ;* 描 述 : 获得指定簇的下一簇号
29:fat16.c **** ;* 输 入 : ClusIndex: 簇号
30:fat16.c **** ;*
31:fat16.c **** ;* 输 出 : 下一簇号
32:fat16.c **** ;**************************************************************************************************
33:fat16.c **** ;*/
34:fat16.c **** uint16 GetNextClus(uint16 ClusIndex)
35:fat16.c **** {
124 .LM1:
125 /* prologue: frame size=0 */
126 0000 CF93 push r28
127 0002 DF93 push r29
128 /* prologue end (size=2) */
129 0004 FC01 movw r30,r24
130 .LBB2:
131 .LBB3:
36:fat16.c **** uint8 *Buf;
37:fat16.c **** uint16 ByteOffset, Value;
38:fat16.c **** uint32 SecIndex;
39:fat16.c ****
40:fat16.c **** if (ClusIndex >= FS_MaxClus) /* 簇号无效 */
133 .LM2:
134 0006 8091 0000 lds r24,FS_MaxClus
135 000a 9091 0000 lds r25,(FS_MaxClus)+1
136 000e E817 cp r30,r24
137 0010 F907 cpc r31,r25
138 0012 90F4 brsh .L4
41:fat16.c **** {
42:fat16.c **** return BAD_CLUS;
43:fat16.c **** }
44:fat16.c ****
45:fat16.c **** SecIndex = ClusIndex / 256 + FS_FATStartSec; /* 扇区号 */
140 .LM3:
141 0014 8F2F mov r24,r31
142 0016 9927 clr r25
143 0018 2091 0000 lds r18,FS_FATStartSec
144 001c 820F add r24,r18
145 001e 911D adc r25,__zero_reg__
146 0020 AA27 clr r26
147 0022 BB27 clr r27
46:fat16.c **** ByteOffset = ClusIndex * 2 % 512; /* 字节偏移 */
149 .LM4:
150 0024 EF01 movw r28,r30
151 0026 CE0F add r28,r30
152 0028 DF1F adc r29,r31
153 002a D170 andi r29,hi8(511)
47:fat16.c ****
48:fat16.c **** Buf = OpenSector(SecIndex); /* 打开扇区 */
155 .LM5:
156 002c BC01 movw r22,r24
157 002e CD01 movw r24,r26
158 0030 0E94 0000 call _Z10OpenSectorm
49:fat16.c **** if (Buf == NULL)
160 .LM6:
161 0034 0097 sbiw r24,0
162 0036 19F4 brne .L3
163 .L4:
50:fat16.c **** {
51:fat16.c **** return BAD_CLUS;
165 .LM7:
166 0038 27EF ldi r18,lo8(-9)
167 003a 3FEF ldi r19,hi8(-9)
168 003c 0CC0 rjmp .L1
169 .L3:
52:fat16.c **** }
53:fat16.c ****
54:fat16.c **** Value = GET_UINT16(Buf, ByteOffset); /* 获得下一簇号 */
171 .LM8:
172 003e FE01 movw r30,r28
173 0040 E80F add r30,r24
174 0042 F91F adc r31,r25
175 0044 8081 ld r24,Z
176 0046 282F mov r18,r24
177 0048 3327 clr r19
178 004a 8181 ldd r24,Z+1
179 004c 9927 clr r25
180 004e 982F mov r25,r24
181 0050 8827 clr r24
182 0052 282B or r18,r24
183 0054 392B or r19,r25
184 .L1:
185 .LBE3:
186 .LBE2:
55:fat16.c ****
56:fat16.c **** return Value;
57:fat16.c **** }
188 .LM9:
189 0056 C901 movw r24,r18
190 /* epilogue: frame size=0 */
191 0058 DF91 pop r29
192 005a CF91 pop r28
193 005c 0895 ret
194 /* epilogue end (size=3) */
195 /* function uint16 GetNextClus(uint16) size 48 (43) */
204 .global _Z11SetNextClusjj
206 _Z11SetNextClusjj:
58:fat16.c ****
59:fat16.c **** /*
60:fat16.c **** ;**************************************************************************************************
61:fat16.c **** ;* 函数名称 : SetNextClus
62:fat16.c **** ;* 描 述 : 设置指定簇的下一簇号
63:fat16.c **** ;* 输 入 : ClusIndex: 簇号, Value: 下一簇号
64:fat16.c **** ;*
65:fat16.c **** ;* 输 出 : 下一簇号
66:fat16.c **** ;**************************************************************************************************
67:fat16.c **** ;*/
68:fat16.c **** uint16 SetNextClus(uint16 ClusIndex, uint16 Value)
69:fat16.c **** {
208 .LM10:
209 /* prologue: frame size=0 */
210 005e 0F93 push r16
211 0060 1F93 push r17
212 0062 CF93 push r28
213 0064 DF93 push r29
214 /* prologue end (size=4) */
215 0066 FC01 movw r30,r24
216 0068 8B01 movw r16,r22
217 .LBB4:
218 .LBB5:
70:fat16.c **** uint8 *Buf;
71:fat16.c **** uint16 ByteOffset;
72:fat16.c **** uint32 SecIndex;
73:fat16.c ****
74:fat16.c **** if (ClusIndex >= FS_MaxClus) /* 簇号无效 */
220 .LM11:
221 006a 8091 0000 lds r24,FS_MaxClus
222 006e 9091 0000 lds r25,(FS_MaxClus)+1
223 0072 E817 cp r30,r24
224 0074 F907 cpc r31,r25
225 0076 90F4 brsh .L8
75:fat16.c **** {
76:fat16.c **** return BAD_CLUS;
77:fat16.c **** }
78:fat16.c ****
79:fat16.c **** SecIndex = ClusIndex / 256 + FS_FATStartSec; /* 扇区号 */
227 .LM12:
228 0078 8F2F mov r24,r31
229 007a 9927 clr r25
230 007c 2091 0000 lds r18,FS_FATStartSec
231 0080 820F add r24,r18
232 0082 911D adc r25,__zero_reg__
233 0084 AA27 clr r26
234 0086 BB27 clr r27
80:fat16.c **** ByteOffset = ClusIndex * 2 % 512; /* 字节偏移 */
236 .LM13:
237 0088 EF01 movw r28,r30
238 008a CE0F add r28,r30
239 008c DF1F adc r29,r31
240 008e D170 andi r29,hi8(511)
81:fat16.c ****
82:fat16.c **** Buf = OpenSector(SecIndex); /* 打开扇区 */
242 .LM14:
243 0090 BC01 movw r22,r24
244 0092 CD01 movw r24,r26
245 0094 0E94 0000 call _Z10OpenSectorm
83:fat16.c **** if (Buf == NULL)
247 .LM15:
248 0098 0097 sbiw r24,0
249 009a 19F4 brne .L7
250 .L8:
84:fat16.c **** {
85:fat16.c **** return BAD_CLUS;
252 .LM16:
253 009c 67EF ldi r22,lo8(-9)
254 009e 7FEF ldi r23,hi8(-9)
255 00a0 0AC0 rjmp .L5
256 .L7:
86:fat16.c **** }
87:fat16.c ****
88:fat16.c **** SET_UINT16(Buf, ByteOffset, Value); /* 设置下一簇号 */
258 .LM17:
259 00a2 FE01 movw r30,r28
260 00a4 E80F add r30,r24
261 00a6 F91F adc r31,r25
262 00a8 0083 st Z,r16
263 00aa 812F mov r24,r17
264 00ac 9927 clr r25
265 00ae 8183 std Z+1,r24
89:fat16.c ****
90:fat16.c **** WriteSector(); /* 写扇区 */
267 .LM18:
268 00b0 0E94 0000 call _Z11WriteSectorv
91:fat16.c ****
92:fat16.c **** return Value;
270 .LM19:
271 00b4 B801 movw r22,r16
272 .L5:
273 .LBE5:
274 .LBE4:
93:fat16.c **** }
276 .LM20:
277 00b6 CB01 movw r24,r22
278 /* epilogue: frame size=0 */
279 00b8 DF91 pop r29
280 00ba CF91 pop r28
281 00bc 1F91 pop r17
282 00be 0F91 pop r16
283 00c0 0895 ret
284 /* epilogue end (size=5) */
285 /* function uint16 SetNextClus(uint16, uint16) size 51 (42) */
293 .global _Z10AddNewClusj
295 _Z10AddNewClusj:
94:fat16.c ****
95:fat16.c **** /*
96:fat16.c **** ;**************************************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -