📄 flash.s
字号:
nop
nop
L19:
.dbline 77
L20:
.dbline 77
; WAITRB;
sbis 0x10,4
rjmp L19
.dbline 78
; FC_INACTIVE
sts 0xfc01,R22
.dbline -2
.dbline 79
; }
L12:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r blockPage 10 i
.dbsym r i 20 i
.dbsym r pPage 22 pc
.dbsym r page 10 i
.dbsym r block 12 i
.dbend
.dbfunc e WritePage _WritePage fc
; v -> R10
; blockPage -> R10,R11
; i -> R20,R21
; pPage -> R22,R23
; page -> R10,R11
; block -> R12,R13
.even
_WritePage::
xcall push_gset4
movw R10,R18
movw R12,R16
ldd R22,y+8
ldd R23,y+9
.dbline -1
.dbline 81
; BOOL WritePage(unsigned int block,unsigned int page,unsigned char *pPage)
; {
.dbline 83
; unsigned char v;
; int i=512;
ldi R20,512
ldi R21,2
.dbline 84
; unsigned int blockPage=block*32+page;
ldi R16,32
ldi R17,0
movw R18,R12
xcall empy16s
movw R2,R16
add R2,R10
adc R3,R11
movw R10,R2
.dbline 85
; fWPs;
SBI 0x12,5
.dbline 85
.dbline 86
; FC_CMD=PAGEPROGRAM_1C;
ldi R24,128
sts 40960,R24
.dbline 87
; FC_ADDR=0x00;
clr R2
sts 36864,R2
.dbline 88
; FC_ADDR=blockPage%256;
movw R24,R10
andi R25,0
sts 36864,R24
.dbline 89
; FC_ADDR=blockPage/256;
movw R2,R10
mov R2,R3
clr R3
sts 36864,R2
xjmp L24
L23:
.dbline 90
.dbline 90
movw R30,R22
ld R2,Z+
movw R22,R30
sts 32768,R2
.dbline 90
L24:
.dbline 90
; while(i--){FC_DATA=*pPage++;}
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L23
tst R3
brne L23
X1:
.dbline 91
; FC_CMD=PAGEPROGRAM_2C;
ldi R24,16
sts 40960,R24
.dbline 92
; asm("nop \n nop");
nop
nop
L26:
.dbline 93
L27:
.dbline 93
; WAITRB;
sbis 0x10,4
rjmp L26
.dbline 94
; FC_CMD=READSTATUS;
ldi R24,112
sts 40960,R24
.dbline 95
; v=FC_DATA;
lds R10,32768
.dbline 96
; FC_INACTIVE
sts 0xfc01,R22
.dbline 97
; fWPc;
CBI 0x12,5
.dbline 97
.dbline 98
; if(v&0x1)
sbrs R10,0
rjmp L29
.dbline 99
; return FALSE;
clr R16
xjmp L22
L29:
.dbline 100
; return TRUE;
ldi R16,1
.dbline -2
L22:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r v 10 c
.dbsym r blockPage 10 i
.dbsym r i 20 I
.dbsym r pPage 22 pc
.dbsym r page 10 i
.dbsym r block 12 i
.dbend
.dbfunc e CopyBlack _CopyBlack fc
; v -> R12
; blockPage -> R20,R21
; dpage -> R22,R23
; dblock -> R10,R11
; spage -> R20,R21
; sblock -> R12,R13
.even
_CopyBlack::
xcall push_gset4
movw R20,R18
movw R12,R16
ldd R10,y+8
ldd R11,y+9
ldd R22,y+10
ldd R23,y+11
.dbline -1
.dbline 105
;
; }
; BOOL CopyBlack(unsigned int sblock,unsigned int spage,
; unsigned int dblock,unsigned int dpage)
; {
.dbline 107
; unsigned char v;
; unsigned int blockPage=sblock*32+spage;
ldi R16,32
ldi R17,0
movw R18,R12
xcall empy16s
movw R2,R16
add R2,R20
adc R3,R21
movw R20,R2
.dbline 108
; fWPs;
SBI 0x12,5
.dbline 108
.dbline 109
; FC_CMD=COPY_BACK_1C;
clr R2
sts 40960,R2
.dbline 110
; FC_ADDR=0x00;
sts 36864,R2
.dbline 111
; FC_ADDR=blockPage&0xff;
movw R24,R20
andi R25,0
sts 36864,R24
.dbline 112
; FC_ADDR=(blockPage>>8)&0xff;
movw R24,R20
mov R24,R25
clr R25
andi R25,0
sts 36864,R24
.dbline 113
; asm("nop \n nop");
nop
nop
L32:
.dbline 114
L33:
.dbline 114
; WAITRB;
sbis 0x10,4
rjmp L32
.dbline 115
; blockPage=(dblock<<5)+dpage;
ldi R18,5
ldi R19,0
movw R16,R10
xcall lsl16
movw R20,R16
add R20,R22
adc R21,R23
.dbline 116
; FC_CMD=COPY_BACK_2C;
ldi R24,138
sts 40960,R24
.dbline 117
; FC_ADDR=0x00;
clr R2
sts 36864,R2
.dbline 118
; FC_ADDR=blockPage&0xff;
movw R24,R20
andi R25,0
sts 36864,R24
.dbline 119
; FC_ADDR=(blockPage>>8)&0xff;
movw R24,R20
mov R24,R25
clr R25
andi R25,0
sts 36864,R24
.dbline 120
; asm("nop \n nop");
nop
nop
L35:
.dbline 121
L36:
.dbline 121
; WAITRB;
sbis 0x10,4
rjmp L35
.dbline 122
; FC_CMD=READSTATUS;
ldi R24,112
sts 40960,R24
.dbline 123
; v=FC_DATA;
lds R12,32768
.dbline 124
; FC_INACTIVE
sts 0xfc01,R22
.dbline 125
; fWPc;
CBI 0x12,5
.dbline 125
.dbline 126
; if(v&0x1)
sbrs R12,0
rjmp L38
.dbline 127
; return FALSE;
clr R16
xjmp L31
L38:
.dbline 128
; return TRUE;
ldi R16,1
.dbline -2
L31:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r v 12 c
.dbsym r blockPage 20 i
.dbsym r dpage 22 i
.dbsym r dblock 10 i
.dbsym r spage 20 i
.dbsym r sblock 12 i
.dbend
.dbfunc e Format_Fat16Media _Format_Fat16Media fV
; j -> <dead>
; i -> R20,R21
.even
_Format_Fat16Media::
xcall push_gset1
sbiw R28,2
.dbline -1
.dbline 131
; }
; void Format_Fat16Media()
; {
.dbline 133
clr R20
clr R21
xjmp L44
L41:
.dbline 133
ldi R24,<_Fat16_Bpb
ldi R25,>_Fat16_Bpb
movw R30,R20
add R30,R24
adc R31,R25
lpm R30,Z
ldi R24,<_PageBuf
ldi R25,>_PageBuf
movw R26,R20
add R26,R24
adc R27,R25
st x,R30
L42:
.dbline 133
subi R20,255 ; offset = 1
sbci R21,255
L44:
.dbline 133
; unsigned int i,j;
; for(i=0;i<512;i++)PageBuf[i]=Fat16_Bpb[i];
cpi R20,0
ldi R30,2
cpc R21,R30
brlo L41
.dbline 134
; Erase_Cluster(0);
clr R16
clr R17
xcall _Erase_Cluster
.dbline 135
; Erase_Cluster(1);
ldi R16,1
ldi R17,0
xcall _Erase_Cluster
.dbline 136
; WritePage(0,0,PageBuf);
ldi R24,<_PageBuf
ldi R25,>_PageBuf
std y+1,R25
std y+0,R24
clr R18
clr R19
clr R16
clr R17
xcall _WritePage
.dbline 137
clr R20
clr R21
xjmp L48
L45:
.dbline 137
ldi R24,<_PageBuf
ldi R25,>_PageBuf
movw R30,R20
add R30,R24
adc R31,R25
clr R2
std z+0,R2
L46:
.dbline 137
subi R20,255 ; offset = 1
sbci R21,255
L48:
.dbline 137
; for(i=0;i<512;i++)PageBuf[i]=0;
cpi R20,0
ldi R30,2
cpc R21,R30
brlo L45
.dbline 138
; PageBuf[0]=0xF8;
ldi R24,248
sts _PageBuf,R24
.dbline 139
; PageBuf[1]=0xFF;
ldi R24,255
sts _PageBuf+1,R24
.dbline 140
; PageBuf[2]=0xFF;
sts _PageBuf+2,R24
.dbline 141
; PageBuf[3]=0xFF;
sts _PageBuf+3,R24
.dbline 142
; WritePage(0,1,PageBuf);
ldi R24,<_PageBuf
ldi R25,>_PageBuf
std y+1,R25
std y+0,R24
ldi R18,1
ldi R19,0
clr R16
clr R17
xcall _WritePage
.dbline 143
; WritePage(0,5,PageBuf);
ldi R24,<_PageBuf
ldi R25,>_PageBuf
std y+1,R25
std y+0,R24
ldi R18,5
ldi R19,0
clr R16
clr R17
xcall _WritePage
.dbline 144
; PageBuf[0]=0x0;
clr R2
sts _PageBuf,R2
.dbline 145
; PageBuf[1]=0x0;
sts _PageBuf+1,R2
.dbline 146
; PageBuf[2]=0x0;
sts _PageBuf+2,R2
.dbline 147
; PageBuf[3]=0x0;
sts _PageBuf+3,R2
.dbline 148
; WritePage(0,2,PageBuf);
ldi R24,<_PageBuf
ldi R25,>_PageBuf
std y+1,R25
std y+0,R24
ldi R18,2
ldi R19,0
clr R16
clr R17
xcall _WritePage
.dbline 149
; WritePage(0,3,PageBuf);
ldi R24,<_PageBuf
ldi R25,>_PageBuf
std y+1,R25
std y+0,R24
ldi R18,3
ldi R19,0
clr R16
clr R17
xcall _WritePage
.dbline 150
; WritePage(0,4,PageBuf);
ldi R24,<_PageBuf
ldi R25,>_PageBuf
std y+1,R25
std y+0,R24
ldi R18,4
ldi R19,0
clr R16
clr R17
xcall _WritePage
.dbline 151
; for(i=6;i<32;i++)
ldi R20,6
ldi R21,0
xjmp L58
L55:
.dbline 152
ldi R24,<_PageBuf
ldi R25,>_PageBuf
std y+1,R25
std y+0,R24
movw R18,R20
clr R16
clr R17
xcall _WritePage
L56:
.dbline 151
subi R20,255 ; offset = 1
sbci R21,255
L58:
.dbline 151
cpi R20,32
ldi R30,0
cpc R21,R30
brlo L55
.dbline 153
; WritePage(0,i,PageBuf);
; for(i=0;i<32;i++)
clr R20
clr R21
xjmp L62
L59:
.dbline 154
ldi R24,<_PageBuf
ldi R25,>_PageBuf
std y+1,R25
std y+0,R24
movw R18,R20
ldi R16,1
ldi R17,0
xcall _WritePage
L60:
.dbline 153
subi R20,255 ; offset = 1
sbci R21,255
L62:
.dbline 153
cpi R20,32
ldi R30,0
cpc R21,R30
brlo L59
.dbline -2
.dbline 155
; WritePage(1,i,PageBuf);
; }
L40:
adiw R28,2
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym l j 3 i
.dbsym r i 20 i
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -