?? disk.lst
字號:
1 .file "Disk.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:
81 .global _Z9Disk_Initv
83 _Z9Disk_Initv:
1:Disk.c **** /*
2:Disk.c **** ;**************************************************************************************************
3:Disk.c **** ;* Copyright (c) 2006 by JiaoJinXing.
4:Disk.c **** ;* All rights reserved.
5:Disk.c **** ;*
6:Disk.c **** ;*---- 文件信息 -----------------------------------------------------------------------------------
7:Disk.c **** ;* 文 件 名 : Disk.c
8:Disk.c **** ;* 創 建 人 : 焦進星
9:Disk.c **** ;* 描 述 : 磁盤管理文件
10:Disk.c **** ;*
11:Disk.c **** ;*---- 歷史版本信息 -------------------------------------------------------------------------------
12:Disk.c **** ;* 日 期 : 2008年 12 月 15 日
13:Disk.c **** ;* 創 建 人 : 焦進星
14:Disk.c **** ;* 描 述 : 建立版本 V1.0.0
15:Disk.c **** ;*
16:Disk.c **** ;*---- 聯系方式 -----------------------------------------------------------------------------------
17:Disk.c **** ;* Email : wyoujtg@163.com
18:Disk.c **** ;* Web : http://wyoujtg.blog.163.com
19:Disk.c **** ;**************************************************************************************************
20:Disk.c **** ;*/
21:Disk.c ****
22:Disk.c **** #include "minifs.h"
23:Disk.c ****
24:Disk.c **** /*
25:Disk.c **** ;**************************************************************************************************
26:Disk.c **** ;* 函數名稱 : Disk_Init
27:Disk.c **** ;* 描 述 : 磁盤初始化
28:Disk.c **** ;* 輸 入 : 無
29:Disk.c **** ;*
30:Disk.c **** ;* 輸 出 : TRUE OR FALSE
31:Disk.c **** ;**************************************************************************************************
32:Disk.c **** ;*/
33:Disk.c **** uint8 Disk_Init(void)
34:Disk.c **** {
85 .LM1:
86 /* prologue: frame size=0 */
87 0000 8F92 push r8
88 0002 9F92 push r9
89 0004 AF92 push r10
90 0006 BF92 push r11
91 0008 DF92 push r13
92 000a EF92 push r14
93 000c FF92 push r15
94 000e 0F93 push r16
95 0010 1F93 push r17
96 0012 CF93 push r28
97 0014 DF93 push r29
98 /* prologue end (size=11) */
99 .LBB2:
100 .LBB3:
35:Disk.c **** uint8 *Buf;
36:Disk.c **** uint8 NumFATs;
37:Disk.c **** uint32 RootSecCnt;
38:Disk.c **** uint32 FATSz;
39:Disk.c **** uint32 TotSec;
40:Disk.c ****
41:Disk.c **** if (!Init_IDE())
102 .LM2:
103 0016 0E94 0000 call _Z8Init_IDEv
104 001a 8823 tst r24
105 001c 09F4 brne .+2
106 001e FDC0 rjmp .L9
42:Disk.c **** {
43:Disk.c **** return FALSE;
44:Disk.c **** }
45:Disk.c ****
46:Disk.c **** Buf = OpenSector(0);
108 .LM3:
109 0020 60E0 ldi r22,lo8(0)
110 0022 70E0 ldi r23,hi8(0)
111 0024 80E0 ldi r24,hlo8(0)
112 0026 90E0 ldi r25,hhi8(0)
113 0028 0E94 0000 call _Z10OpenSectorm
114 002c 7C01 movw r14,r24
47:Disk.c **** if (Buf == NULL)
116 .LM4:
117 002e 0097 sbiw r24,0
118 0030 09F4 brne .+2
119 0032 F8C0 rjmp .L1
48:Disk.c **** {
49:Disk.c **** return FALSE;
50:Disk.c **** }
51:Disk.c ****
52:Disk.c **** /* 每扇區字節數 */
53:Disk.c **** if (GET_UINT16(Buf, BPB_BytsPerSec) != 512) /* 必須為512 */
121 .LM5:
122 0034 FC01 movw r30,r24
123 0036 8385 ldd r24,Z+11
124 0038 282F mov r18,r24
125 003a 3327 clr r19
126 003c 8485 ldd r24,Z+12
127 003e 9927 clr r25
128 0040 982F mov r25,r24
129 0042 8827 clr r24
130 0044 282B or r18,r24
131 0046 392B or r19,r25
132 0048 2050 subi r18,lo8(512)
133 004a 3240 sbci r19,hi8(512)
134 004c 09F0 breq .+2
135 004e E5C0 rjmp .L9
54:Disk.c **** {
55:Disk.c **** return FALSE;
56:Disk.c **** }
57:Disk.c ****
58:Disk.c **** /* 檢查0扇區末尾是否為0xAA55 */
59:Disk.c **** if (GET_UINT16(Buf, 510) != 0xAA55)
137 .LM6:
138 0050 4EEF ldi r20,lo8(510)
139 0052 51E0 ldi r21,hi8(510)
140 0054 E40E add r14,r20
141 0056 F51E adc r15,r21
142 0058 F701 movw r30,r14
143 005a 8191 ld r24,Z+
144 005c 7F01 movw r14,r30
145 005e 282F mov r18,r24
146 0060 3327 clr r19
147 0062 8081 ld r24,Z
148 0064 41E0 ldi r20,lo8(-511)
149 0066 5EEF ldi r21,hi8(-511)
150 0068 E40E add r14,r20
151 006a F51E adc r15,r21
152 006c 9927 clr r25
153 006e 982F mov r25,r24
154 0070 8827 clr r24
155 0072 282B or r18,r24
156 0074 392B or r19,r25
157 0076 2555 subi r18,lo8(-21931)
158 0078 3A4A sbci r19,hi8(-21931)
159 007a 09F0 breq .+2
160 007c CEC0 rjmp .L9
60:Disk.c **** {
61:Disk.c **** return FALSE;
62:Disk.c **** }
63:Disk.c ****
64:Disk.c **** /* 保留扇區數 */
65:Disk.c **** /* 第一張FAT表開始扇區 */
66:Disk.c **** FS_FATStartSec = GET_UINT16(Buf, BPB_RsvdSecCnt);
162 .LM7:
163 007e F701 movw r30,r14
164 0080 D684 ldd r13,Z+14
165 0082 D092 0000 sts FS_FATStartSec,r13
67:Disk.c ****
68:Disk.c **** /* FAT表數 */
69:Disk.c **** NumFATs = Buf[BPB_NumFATs];
167 .LM8:
168 0086 4089 ldd r20,Z+16
70:Disk.c ****
71:Disk.c **** /* 每張FAT表占扇區數 */
72:Disk.c **** FATSz = GET_UINT16(Buf, BPB_FATSz16);
170 .LM9:
171 0088 8689 ldd r24,Z+22
172 008a 282F mov r18,r24
173 008c 3327 clr r19
174 008e 8789 ldd r24,Z+23
175 0090 9927 clr r25
176 0092 982F mov r25,r24
177 0094 8827 clr r24
178 0096 282B or r18,r24
179 0098 392B or r19,r25
180 009a 4901 movw r8,r18
181 009c AA24 clr r10
182 009e BB24 clr r11
73:Disk.c **** if (FATSz == 0)
184 .LM10:
185 00a0 8114 cp r8,__zero_reg__
186 00a2 9104 cpc r9,__zero_reg__
187 00a4 A104 cpc r10,__zero_reg__
188 00a6 B104 cpc r11,__zero_reg__
189 00a8 41F5 brne .L6
74:Disk.c **** FATSz = GET_UINT32(Buf, BPB_FATSz32);
191 .LM11:
192 00aa 84A1 ldd r24,Z+36
193 00ac 882E mov r8,r24
194 00ae 9924 clr r9
195 00b0 AA24 clr r10
196 00b2 BB24 clr r11
197 00b4 85A1 ldd r24,Z+37
198 00b6 9927 clr r25
199 00b8 AA27 clr r26
200 00ba BB27 clr r27
201 00bc BA2F mov r27,r26
202 00be A92F mov r26,r25
203 00c0 982F mov r25,r24
204 00c2 8827 clr r24
205 00c4 882A or r8,r24
206 00c6 992A or r9,r25
207 00c8 AA2A or r10,r26
208 00ca BB2A or r11,r27
209 00cc 86A1 ldd r24,Z+38
210 00ce 9927 clr r25
211 00d0 AA27 clr r26
212 00d2 BB27 clr r27
213 00d4 DC01 movw r26,r24
214 00d6 9927 clr r25
215 00d8 8827 clr r24
216 00da 882A or r8,r24
217 00dc 992A or r9,r25
218 00de AA2A or r10,r26
219 00e0 BB2A or r11,r27
220 00e2 87A1 ldd r24,Z+39
221 00e4 9927 clr r25
222 00e6 AA27 clr r26
223 00e8 BB27 clr r27
224 00ea B82F mov r27,r24
225 00ec AA27 clr r26
226 00ee 9927 clr r25
227 00f0 8827 clr r24
228 00f2 882A or r8,r24
229 00f4 992A or r9,r25
230 00f6 AA2A or r10,r26
231 00f8 BB2A or r11,r27
232 .L6:
75:Disk.c ****
76:Disk.c **** /* 根目錄目錄項數 */
77:Disk.c **** FS_RootEntCnt = GET_UINT16(Buf, BPB_RootEntCnt);
234 .LM12:
235 00fa F701 movw r30,r14
236 00fc 8189 ldd r24,Z+17
237 00fe 082F mov r16,r24
238 0100 1127 clr r17
239 0102 8289 ldd r24,Z+18
240 0104 9927 clr r25
241 0106 982F mov r25,r24
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -