📄 fat.lis
字号:
05AA .dbline 176
05AA 41E0 ldi R20,1
05AC 50E0 ldi R21,0
05AE 60E0 ldi R22,0
05B0 70E0 ldi R23,0
05B2 40900400 lds R4,_FileIndex+2+2
05B6 50900500 lds R5,_FileIndex+2+2+1
05BA 20900200 lds R2,_FileIndex+2
05BE 30900300 lds R3,_FileIndex+2+1
05C2 240E add R2,R20
05C4 351E adc R3,R21
05C6 461E adc R4,R22
05C8 571E adc R5,R23
05CA 30920300 sts _FileIndex+2+1,R3
05CE 20920200 sts _FileIndex+2,R2
05D2 50920500 sts _FileIndex+2+2+1,R5
05D6 40920400 sts _FileIndex+2+2,R4
05DA .dbline 177
05DA L86:
05DA .dbline 160
05DA 20900C00 lds R2,_Info
05DE 3324 clr R3
05E0 4424 clr R4
05E2 5524 clr R5
05E4 80900400 lds R8,_FileIndex+2+2
05E8 90900500 lds R9,_FileIndex+2+2+1
05EC 60900200 lds R6,_FileIndex+2
05F0 70900300 lds R7,_FileIndex+2+1
05F4 6214 cp R6,R2
05F6 7304 cpc R7,R3
05F8 8404 cpc R8,R4
05FA 9504 cpc R9,R5
05FC 08F4 brsh X3
05FE 60CF xjmp L85
0600 X3:
0600 .dbline 178
0600 L75:
0600 .dbline 151
0600 35CF xjmp L74
0602 X1:
0602 .dbline 179
0602 ; }
0602 ; }
0602 ; FileIndex.LBA++; //下一扇区号
0602 ; FileIndex.i++;
0602 ; }
0602 ; }
0602 ; return FALSE;
0602 0027 clr R16
0604 1127 clr R17
0606 .dbline -2
0606 L72:
0606 2496 adiw R28,4
0608 0E940000 xcall pop_gset3
060C 2496 adiw R28,4
060E .dbline 0 ; func end
060E 0895 ret
0610 .dbsym r data 10 pc
0610 .dbsym l Data 14 pV
0610 .dbsym l Length 10 l
0610 .dbend
0610 .dbfunc e FAT_FileWrite _FAT_FileWrite fV
0610 ; data -> R10,R11
0610 ; Data -> y+14
0610 ; Length -> y+10
.even
0610 _FAT_FileWrite::
0610 0E940000 xcall push_arg4
0614 0E940000 xcall push_gset3
0618 2497 sbiw R28,4
061A .dbline -1
061A .dbline 184
061A ; }
061A ; //********************************************************************************************
061A ; //写文件的数据
061A ; //********************************************************************************************
061A ; void FAT_FileWrite(uint32 Length, void* Data) {
061A .dbline 185
061A ; uint8 *data = Data;
061A AE84 ldd R10,y+14
061C BF84 ldd R11,y+15
061E .dbline 187
061E ;
061E ; goto FAT_FileWrite_Start;
061E 78C0 xjmp L113
0620 L99:
0620 .dbline 189
0620 ;
0620 ; while(1) {
0620 .dbline 190
0620 ; FileIndex.ClusID = FAT_ReadFAT(FileIndex.ClusID); //下一簇簇号
0620 00910600 lds R16,_FileIndex+6
0624 10910700 lds R17,_FileIndex+6+1
0628 CEDD xcall _FAT_ReadFAT
062A 10930700 sts _FileIndex+6+1,R17
062E 00930600 sts _FileIndex+6,R16
0632 .dbline 191
0632 ; FileIndex.LBA = ClusConvLBA(FileIndex.ClusID);
0632 AADD xcall _ClusConvLBA
0634 10930900 sts _FileIndex+8+1,R17
0638 00930800 sts _FileIndex+8,R16
063C 30930B00 sts _FileIndex+8+2+1,R19
0640 20930A00 sts _FileIndex+8+2,R18
0644 .dbline 192
0644 ; FileIndex.i = 0;
0644 40E0 ldi R20,0
0646 50E0 ldi R21,0
0648 60E0 ldi R22,0
064A 70E0 ldi R23,0
064C 50930300 sts _FileIndex+2+1,R21
0650 40930200 sts _FileIndex+2,R20
0654 70930500 sts _FileIndex+2+2+1,R23
0658 60930400 sts _FileIndex+2+2,R22
065C A2C0 xjmp L108
065E L107:
065E .dbline 193
065E ; while(FileIndex.i < Info.BPB_SecPerClus) {
065E .dbline 194
065E ; FAT_ReadBlock(FileIndex.LBA);
065E 20910A00 lds R18,_FileIndex+8+2
0662 30910B00 lds R19,_FileIndex+8+2+1
0666 00910800 lds R16,_FileIndex+8
066A 10910900 lds R17,_FileIndex+8+1
066E CADC xcall _FAT_ReadBlock
0670 .dbline 195
0670 ; FileIndex.m = 0;
0670 2224 clr R2
0672 3324 clr R3
0674 30920100 sts _FileIndex+1,R3
0678 20920000 sts _FileIndex,R2
067C 49C0 xjmp L113
067E L112:
067E .dbline 197
067E ; FAT_FileWrite_Start:
067E ; while(FileIndex.m < 512) {
067E .dbline 198
067E ; BUFFER[FileIndex.m] = *data++;
067E 80E0 ldi R24,<_BUFFER
0680 90E0 ldi R25,>_BUFFER
0682 E0910000 lds R30,_FileIndex
0686 F0910100 lds R31,_FileIndex+1
068A E80F add R30,R24
068C F91F adc R31,R25
068E D501 movw R26,R10
0690 2D90 ld R2,X+
0692 5D01 movw R10,R26
0694 2082 std z+0,R2
0696 .dbline 199
0696 ; FileIndex.m++;
0696 80910000 lds R24,_FileIndex
069A 90910100 lds R25,_FileIndex+1
069E 0196 adiw R24,1
06A0 90930100 sts _FileIndex+1,R25
06A4 80930000 sts _FileIndex,R24
06A8 .dbline 201
06A8 ; //如果读取完成就退出
06A8 ; if(--Length == 0) {
06A8 41E0 ldi R20,1
06AA 50E0 ldi R21,0
06AC 60E0 ldi R22,0
06AE 70E0 ldi R23,0
06B0 FE01 movw R30,R28
06B2 2284 ldd R2,z+10
06B4 3384 ldd R3,z+11
06B6 4484 ldd R4,z+12
06B8 5584 ldd R5,z+13
06BA 241A sub R2,R20
06BC 350A sbc R3,R21
06BE 460A sbc R4,R22
06C0 570A sbc R5,R23
06C2 FE01 movw R30,R28
06C4 2082 std z+0,R2
06C6 3182 std z+1,R3
06C8 4282 std z+2,R4
06CA 5382 std z+3,R5
06CC FE01 movw R30,R28
06CE 2080 ldd R2,z+0
06D0 3180 ldd R3,z+1
06D2 4280 ldd R4,z+2
06D4 5380 ldd R5,z+3
06D6 FE01 movw R30,R28
06D8 2286 std z+10,R2
06DA 3386 std z+11,R3
06DC 4486 std z+12,R4
06DE 5586 std z+13,R5
06E0 40E0 ldi R20,0
06E2 50E0 ldi R21,0
06E4 60E0 ldi R22,0
06E6 70E0 ldi R23,0
06E8 FE01 movw R30,R28
06EA 2080 ldd R2,z+0
06EC 3180 ldd R3,z+1
06EE 4280 ldd R4,z+2
06F0 5380 ldd R5,z+3
06F2 2416 cp R2,R20
06F4 3506 cpc R3,R21
06F6 4606 cpc R4,R22
06F8 5706 cpc R5,R23
06FA 51F4 brne L115
06FC .dbline 201
06FC .dbline 202
06FC ; FAT_WriteBlock(FileIndex.LBA); //回写扇区
06FC 20910A00 lds R18,_FileIndex+8+2
0700 30910B00 lds R19,_FileIndex+8+2+1
0704 00910800 lds R16,_FileIndex+8
0708 10910900 lds R17,_FileIndex+8+1
070C 8BDC xcall _FAT_WriteBlock
070E .dbline 203
070E ; return;
070E 5DC0 xjmp L97
0710 L115:
0710 .dbline 205
0710 L113:
0710 .dbline 197
0710 80910000 lds R24,_FileIndex
0714 90910100 lds R25,_FileIndex+1
0718 8030 cpi R24,0
071A E2E0 ldi R30,2
071C 9E07 cpc R25,R30
071E 08F4 brsh X5
0720 AECF xjmp L112
0722 X5:
0722 .dbline 206
0722 40900A00 lds R4,_FileIndex+8+2
0726 50900B00 lds R5,_FileIndex+8+2+1
072A 20900800 lds R2,_FileIndex+8
072E 30900900 lds R3,_FileIndex+8+1
0732 FE01 movw R30,R28
0734 2082 std z+0,R2
0736 3182 std z+1,R3
0738 4282 std z+2,R4
073A 5382 std z+3,R5
073C 41E0 ldi R20,1
073E 50E0 ldi R21,0
0740 60E0 ldi R22,0
0742 70E0 ldi R23,0
0744 FE01 movw R30,R28
0746 2080 ldd R2,z+0
0748 3180 ldd R3,z+1
074A 4280 ldd R4,z+2
074C 5380 ldd R5,z+3
074E 240E add R2,R20
0750 351E adc R3,R21
0752 461E adc R4,R22
0754 571E adc R5,R23
0756 30920900 sts _FileIndex+8+1,R3
075A 20920800 sts _FileIndex+8,R2
075E 50920B00 sts _FileIndex+8+2+1,R5
0762 40920A00 sts _FileIndex+8+2,R4
0766 FE01 movw R30,R28
0768 0081 ldd R16,z+0
076A 1181 ldd R17,z+1
076C 2281 ldd R18,z+2
076E 3381 ldd R19,z+3
0770 59DC xcall _FAT_WriteBlock
0772 .dbline 207
0772 41E0 ldi R20,1
0774 50E0 ldi R21,0
0776 60E0 ldi R22,0
0778 70E0 ldi R23,0
077A 40900400 lds R4,_FileIndex+2+2
077E 50900500 lds R5,_FileIndex+2+2+1
0782 20900200 lds R2,_FileIndex+2
0786 30900300 lds R3,_FileIndex+2+1
078A 240E add R2,R20
078C 351E adc R3,R21
078E 461E adc R4,R22
0790 571E adc R5,R23
0792 30920300 sts _FileIndex+2+1,R3
0796 20920200 sts _FileIndex+2,R2
079A 50920500 sts _FileIndex+2+2+1,R5
079E 40920400 sts _FileIndex+2+2,R4
07A2 .dbline 208
07A2 L108:
07A2 .dbline 193
07A2 20900C00 lds R2,_Info
07A6 3324 clr R3
07A8 4424 clr R4
07AA 5524 clr R5
07AC 80900400 lds R8,_FileIndex+2+2
07B0 90900500 lds R9,_FileIndex+2+2+1
07B4 60900200 lds R6,_FileIndex+2
07B8 70900300 lds R7,_FileIndex+2+1
07BC 6214 cp R6,R2
07BE 7304 cpc R7,R3
07C0 8404 cpc R8,R4
07C2 9504 cpc R9,R5
07C4 08F4 brsh X6
07C6 4BCF xjmp L107
07C8 X6:
07C8 .dbline 209
07C8 L100:
07C8 .dbline 189
07C8 2BCF xjmp L99
07CA X4:
07CA .dbline -2
07CA L97:
07CA 2496 adiw R28,4
07CC 0E940000 xcall pop_gset3
07D0 2496 adiw R28,4
07D2 .dbline 0 ; func end
07D2 0895 ret
07D4 .dbsym r data 10 pc
07D4 .dbsym l Data 14 pV
07D4 .dbsym l Length 10 l
07D4 .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\桌面\mp3\FAT\fat.c
0000 _FileIndex:
0000 .blkb 12
000C .dbstruct 0 12 .6
000C .dbfield 0 m i
000C .dbfield 2 i l
000C .dbfield 6 ClusID i
000C .dbfield 8 LBA l
000C .dbend
000C .dbsym s FileIndex _FileIndex S[.6]
000C _Info:
000C .blkb 24
0024 .dbstruct 0 24 .5
0024 .dbfield 0 BPB_SecPerClus c
0024 .dbfield 1 BPB_RsvdSecCnt i
0024 .dbfield 3 BPB_NumFATs c
0024 .dbfield 4 BPB_RootEntCnt i
0024 .dbfield 6 BPB_TotSec16 i
0024 .dbfield 8 BPB_FATSz16 i
0024 .dbfield 10 BPB_HiddSec l
0024 .dbfield 14 DirStartSec l
0024 .dbfield 18 DataStartSec l
0024 .dbfield 22 DirSecCount i
0024 .dbend
0024 .dbsym s Info _Info S[.5]
0024 _BUFFER:
0024 .blkb 512
0224 .dbsym s BUFFER _BUFFER A[512:512]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -