📄 flash.lis
字号:
019C ; unsigned char v;
019C ; unsigned int blockPage=sblock*32+spage;
019C 00E2 ldi R16,32
019E 10E0 ldi R17,0
01A0 9601 movw R18,R12
01A2 0E940000 xcall empy16s
01A6 1801 movw R2,R16
01A8 240E add R2,R20
01AA 351E adc R3,R21
01AC A101 movw R20,R2
01AE .dbline 108
01AE ; fWPs;
01AE 959A SBI 0x12,5
01B0 .dbline 108
01B0 .dbline 109
01B0 ; FC_CMD=COPY_BACK_1C;
01B0 2224 clr R2
01B2 209200A0 sts 40960,R2
01B6 .dbline 110
01B6 ; FC_ADDR=0x00;
01B6 20920090 sts 36864,R2
01BA .dbline 111
01BA ; FC_ADDR=blockPage&0xff;
01BA CA01 movw R24,R20
01BC 9070 andi R25,0
01BE 80930090 sts 36864,R24
01C2 .dbline 112
01C2 ; FC_ADDR=(blockPage>>8)&0xff;
01C2 CA01 movw R24,R20
01C4 892F mov R24,R25
01C6 9927 clr R25
01C8 9070 andi R25,0
01CA 80930090 sts 36864,R24
01CE .dbline 113
01CE ; asm("nop \n nop");
01CE 0000 nop
01D0 0000 nop
01D2 L32:
01D2 .dbline 114
01D2 L33:
01D2 .dbline 114
01D2 ; WAITRB;
01D2 849B sbis 0x10,4
01D4 FECF rjmp L32
01D6 .dbline 115
01D6 ; blockPage=(dblock<<5)+dpage;
01D6 25E0 ldi R18,5
01D8 30E0 ldi R19,0
01DA 8501 movw R16,R10
01DC 0E940000 xcall lsl16
01E0 A801 movw R20,R16
01E2 460F add R20,R22
01E4 571F adc R21,R23
01E6 .dbline 116
01E6 ; FC_CMD=COPY_BACK_2C;
01E6 8AE8 ldi R24,138
01E8 809300A0 sts 40960,R24
01EC .dbline 117
01EC ; FC_ADDR=0x00;
01EC 2224 clr R2
01EE 20920090 sts 36864,R2
01F2 .dbline 118
01F2 ; FC_ADDR=blockPage&0xff;
01F2 CA01 movw R24,R20
01F4 9070 andi R25,0
01F6 80930090 sts 36864,R24
01FA .dbline 119
01FA ; FC_ADDR=(blockPage>>8)&0xff;
01FA CA01 movw R24,R20
01FC 892F mov R24,R25
01FE 9927 clr R25
0200 9070 andi R25,0
0202 80930090 sts 36864,R24
0206 .dbline 120
0206 ; asm("nop \n nop");
0206 0000 nop
0208 0000 nop
020A L35:
020A .dbline 121
020A L36:
020A .dbline 121
020A ; WAITRB;
020A 849B sbis 0x10,4
020C FECF rjmp L35
020E .dbline 122
020E ; FC_CMD=READSTATUS;
020E 80E7 ldi R24,112
0210 809300A0 sts 40960,R24
0214 .dbline 123
0214 ; v=FC_DATA;
0214 C0900080 lds R12,32768
0218 .dbline 124
0218 ; FC_INACTIVE
0218 609301FC sts 0xfc01,R22
021C .dbline 125
021C ; fWPc;
021C 9598 CBI 0x12,5
021E .dbline 125
021E .dbline 126
021E ; if(v&0x1)
021E C0FE sbrs R12,0
0220 02C0 rjmp L38
0222 .dbline 127
0222 ; return FALSE;
0222 0027 clr R16
0224 01C0 xjmp L31
0226 L38:
0226 .dbline 128
0226 ; return TRUE;
0226 01E0 ldi R16,1
0228 .dbline -2
0228 L31:
0228 0E940000 xcall pop_gset4
022C .dbline 0 ; func end
022C 0895 ret
022E .dbsym r v 12 c
022E .dbsym r blockPage 20 i
022E .dbsym r dpage 22 i
022E .dbsym r dblock 10 i
022E .dbsym r spage 20 i
022E .dbsym r sblock 12 i
022E .dbend
022E .dbfunc e Format_Fat16Media _Format_Fat16Media fV
022E ; j -> <dead>
022E ; i -> R20,R21
.even
022E _Format_Fat16Media::
022E 0E940000 xcall push_gset1
0232 2297 sbiw R28,2
0234 .dbline -1
0234 .dbline 131
0234 ; }
0234 ; void Format_Fat16Media()
0234 ; {
0234 .dbline 133
0234 4427 clr R20
0236 5527 clr R21
0238 0EC0 xjmp L44
023A L41:
023A .dbline 133
023A 80E0 ldi R24,<_Fat16_Bpb
023C 90E0 ldi R25,>_Fat16_Bpb
023E FA01 movw R30,R20
0240 E80F add R30,R24
0242 F91F adc R31,R25
0244 E491 lpm R30,Z
0246 80E0 ldi R24,<_PageBuf
0248 90E0 ldi R25,>_PageBuf
024A DA01 movw R26,R20
024C A80F add R26,R24
024E B91F adc R27,R25
0250 EC93 st x,R30
0252 L42:
0252 .dbline 133
0252 4F5F subi R20,255 ; offset = 1
0254 5F4F sbci R21,255
0256 L44:
0256 .dbline 133
0256 ; unsigned int i,j;
0256 ; for(i=0;i<512;i++)PageBuf[i]=Fat16_Bpb[i];
0256 4030 cpi R20,0
0258 E2E0 ldi R30,2
025A 5E07 cpc R21,R30
025C 70F3 brlo L41
025E .dbline 134
025E ; Erase_Cluster(0);
025E 0027 clr R16
0260 1127 clr R17
0262 E9DE xcall _Erase_Cluster
0264 .dbline 135
0264 ; Erase_Cluster(1);
0264 01E0 ldi R16,1
0266 10E0 ldi R17,0
0268 E6DE xcall _Erase_Cluster
026A .dbline 136
026A ; WritePage(0,0,PageBuf);
026A 80E0 ldi R24,<_PageBuf
026C 90E0 ldi R25,>_PageBuf
026E 9983 std y+1,R25
0270 8883 std y+0,R24
0272 2227 clr R18
0274 3327 clr R19
0276 0027 clr R16
0278 1127 clr R17
027A 43DF xcall _WritePage
027C .dbline 137
027C 4427 clr R20
027E 5527 clr R21
0280 09C0 xjmp L48
0282 L45:
0282 .dbline 137
0282 80E0 ldi R24,<_PageBuf
0284 90E0 ldi R25,>_PageBuf
0286 FA01 movw R30,R20
0288 E80F add R30,R24
028A F91F adc R31,R25
028C 2224 clr R2
028E 2082 std z+0,R2
0290 L46:
0290 .dbline 137
0290 4F5F subi R20,255 ; offset = 1
0292 5F4F sbci R21,255
0294 L48:
0294 .dbline 137
0294 ; for(i=0;i<512;i++)PageBuf[i]=0;
0294 4030 cpi R20,0
0296 E2E0 ldi R30,2
0298 5E07 cpc R21,R30
029A 98F3 brlo L45
029C .dbline 138
029C ; PageBuf[0]=0xF8;
029C 88EF ldi R24,248
029E 80930000 sts _PageBuf,R24
02A2 .dbline 139
02A2 ; PageBuf[1]=0xFF;
02A2 8FEF ldi R24,255
02A4 80930100 sts _PageBuf+1,R24
02A8 .dbline 140
02A8 ; PageBuf[2]=0xFF;
02A8 80930200 sts _PageBuf+2,R24
02AC .dbline 141
02AC ; PageBuf[3]=0xFF;
02AC 80930300 sts _PageBuf+3,R24
02B0 .dbline 142
02B0 ; WritePage(0,1,PageBuf);
02B0 80E0 ldi R24,<_PageBuf
02B2 90E0 ldi R25,>_PageBuf
02B4 9983 std y+1,R25
02B6 8883 std y+0,R24
02B8 21E0 ldi R18,1
02BA 30E0 ldi R19,0
02BC 0027 clr R16
02BE 1127 clr R17
02C0 20DF xcall _WritePage
02C2 .dbline 143
02C2 ; WritePage(0,5,PageBuf);
02C2 80E0 ldi R24,<_PageBuf
02C4 90E0 ldi R25,>_PageBuf
02C6 9983 std y+1,R25
02C8 8883 std y+0,R24
02CA 25E0 ldi R18,5
02CC 30E0 ldi R19,0
02CE 0027 clr R16
02D0 1127 clr R17
02D2 17DF xcall _WritePage
02D4 .dbline 144
02D4 ; PageBuf[0]=0x0;
02D4 2224 clr R2
02D6 20920000 sts _PageBuf,R2
02DA .dbline 145
02DA ; PageBuf[1]=0x0;
02DA 20920100 sts _PageBuf+1,R2
02DE .dbline 146
02DE ; PageBuf[2]=0x0;
02DE 20920200 sts _PageBuf+2,R2
02E2 .dbline 147
02E2 ; PageBuf[3]=0x0;
02E2 20920300 sts _PageBuf+3,R2
02E6 .dbline 148
02E6 ; WritePage(0,2,PageBuf);
02E6 80E0 ldi R24,<_PageBuf
02E8 90E0 ldi R25,>_PageBuf
02EA 9983 std y+1,R25
02EC 8883 std y+0,R24
02EE 22E0 ldi R18,2
02F0 30E0 ldi R19,0
02F2 0027 clr R16
02F4 1127 clr R17
02F6 05DF xcall _WritePage
02F8 .dbline 149
02F8 ; WritePage(0,3,PageBuf);
02F8 80E0 ldi R24,<_PageBuf
02FA 90E0 ldi R25,>_PageBuf
02FC 9983 std y+1,R25
02FE 8883 std y+0,R24
0300 23E0 ldi R18,3
0302 30E0 ldi R19,0
0304 0027 clr R16
0306 1127 clr R17
0308 FCDE xcall _WritePage
030A .dbline 150
030A ; WritePage(0,4,PageBuf);
030A 80E0 ldi R24,<_PageBuf
030C 90E0 ldi R25,>_PageBuf
030E 9983 std y+1,R25
0310 8883 std y+0,R24
0312 24E0 ldi R18,4
0314 30E0 ldi R19,0
0316 0027 clr R16
0318 1127 clr R17
031A F3DE xcall _WritePage
031C .dbline 151
031C ; for(i=6;i<32;i++)
031C 46E0 ldi R20,6
031E 50E0 ldi R21,0
0320 0AC0 xjmp L58
0322 L55:
0322 .dbline 152
0322 80E0 ldi R24,<_PageBuf
0324 90E0 ldi R25,>_PageBuf
0326 9983 std y+1,R25
0328 8883 std y+0,R24
032A 9A01 movw R18,R20
032C 0027 clr R16
032E 1127 clr R17
0330 E8DE xcall _WritePage
0332 L56:
0332 .dbline 151
0332 4F5F subi R20,255 ; offset = 1
0334 5F4F sbci R21,255
0336 L58:
0336 .dbline 151
0336 4032 cpi R20,32
0338 E0E0 ldi R30,0
033A 5E07 cpc R21,R30
033C 90F3 brlo L55
033E .dbline 153
033E ; WritePage(0,i,PageBuf);
033E ; for(i=0;i<32;i++)
033E 4427 clr R20
0340 5527 clr R21
0342 0AC0 xjmp L62
0344 L59:
0344 .dbline 154
0344 80E0 ldi R24,<_PageBuf
0346 90E0 ldi R25,>_PageBuf
0348 9983 std y+1,R25
034A 8883 std y+0,R24
034C 9A01 movw R18,R20
034E 01E0 ldi R16,1
0350 10E0 ldi R17,0
0352 D7DE xcall _WritePage
0354 L60:
0354 .dbline 153
0354 4F5F subi R20,255 ; offset = 1
0356 5F4F sbci R21,255
0358 L62:
0358 .dbline 153
0358 4032 cpi R20,32
035A E0E0 ldi R30,0
035C 5E07 cpc R21,R30
035E 90F3 brlo L59
0360 .dbline -2
0360 .dbline 155
0360 ; WritePage(1,i,PageBuf);
0360 ; }
0360 L40:
0360 2296 adiw R28,2
0362 0E940000 xcall pop_gset1
0366 .dbline 0 ; func end
0366 0895 ret
0368 .dbsym l j 3 i
0368 .dbsym r i 20 i
0368 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -