📄 fat.lis
字号:
034E 2227 clr R18
0350 08E3 ldi R16,56
0352 0E940000 xcall _LCD_set_XY
0356 .dbline 131
0356 ; t1=data/100;
0356 24E6 ldi R18,100
0358 30E0 ldi R19,0
035A 8501 movw R16,R10
035C 0E940000 xcall div16u
0360 .dbline 132
0360 ; LCD_write_char(t1+48);
0360 005D subi R16,208 ; addi 48
0362 0E940000 xcall _LCD_write_char
0366 .dbline 133
0366 ; data=data%100;
0366 24E6 ldi R18,100
0368 30E0 ldi R19,0
036A 8501 movw R16,R10
036C 0E940000 xcall mod16u
0370 5801 movw R10,R16
0372 .dbline 134
0372 ; t1=data/10;
0372 2AE0 ldi R18,10
0374 30E0 ldi R19,0
0376 0E940000 xcall div16u
037A C02E mov R12,R16
037C .dbline 135
037C ; LCD_write_char(t1+48);
037C 005D subi R16,208 ; addi 48
037E 0E940000 xcall _LCD_write_char
0382 .dbline 136
0382 ; t2=data%10;
0382 2AE0 ldi R18,10
0384 30E0 ldi R19,0
0386 8501 movw R16,R10
0388 0E940000 xcall mod16u
038C A02E mov R10,R16
038E .dbline 137
038E ; LCD_write_char(t2+48);
038E 005D subi R16,208 ; addi 48
0390 0E940000 xcall _LCD_write_char
0394 .dbline 138
0394 ; LCD_write_english_string(76,0,"M");
0394 80E0 ldi R24,<L36
0396 90E0 ldi R25,>L36
0398 9983 std y+1,R25
039A 8883 std y+0,R24
039C 2227 clr R18
039E 0CE4 ldi R16,76
03A0 0E940000 xcall _LCD_write_english_string
03A4 .dbline 140
03A4 ; //LCD_write_english_string(0,1,"RATE");
03A4 ; return 0;
03A4 0027 clr R16
03A6 .dbline -2
03A6 L4:
03A6 2296 adiw R28,2
03A8 0E940000 xcall pop_gset4
03AC .dbline 0 ; func end
03AC 0895 ret
03AE .dbsym r t2 10 c
03AE .dbsym r t1 12 c
03AE .dbsym r data 10 i
03AE .dbsym r bpb 10 pS[bpb710]
03AE .dbend
.area data(ram, con, rel)
0008 .dbfile D:\Temp\AVRTest\SDMP3~1\fat.c
0008 _baseentry::
0008 .blkb 2
.area idata
0008 0000 .word 0
.area data(ram, con, rel)
000A .dbfile D:\Temp\AVRTest\SDMP3~1\fat.c
000A .dbsym e baseentry _baseentry i
000A _entrycount::
000A .blkb 2
.area idata
000A 0000 .word 0
.area data(ram, con, rel)
000C .dbfile D:\Temp\AVRTest\SDMP3~1\fat.c
000C .dbsym e entrycount _entrycount i
.area text(rom, con, rel)
03AE .dbfile D:\Temp\AVRTest\SDMP3~1\fat.c
03AE .dbfunc e fatGetDirEntry _fatGetDirEntry fl
03AE .dbstruct 0 32 winentry
03AE .dbfield 0 weCnt c
03AE .dbfield 1 wePart1 A[10:10]c
03AE .dbfield 11 weAttributes c
03AE .dbfield 12 weReserved1 c
03AE .dbfield 13 weChksum c
03AE .dbfield 14 wePart2 A[12:12]c
03AE .dbfield 26 weReserved2 i
03AE .dbfield 28 wePart3 A[4:4]c
03AE .dbend
03AE .dbstruct 0 32 direntry
03AE .dbfield 0 deName A[8:8]c
03AE .dbfield 8 deExtension A[3:3]c
03AE .dbfield 11 deAttributes c
03AE .dbfield 12 deLowerCase c
03AE .dbfield 13 deCHundredth c
03AE .dbfield 14 deCTime A[2:2]c
03AE .dbfield 16 deCDate A[2:2]c
03AE .dbfield 18 deADate A[2:2]c
03AE .dbfield 20 deHighClust i
03AE .dbfield 22 deMTime A[2:2]c
03AE .dbfield 24 deMDate A[2:2]c
03AE .dbfield 26 deStartCluster i
03AE .dbfield 28 deFileSize l
03AE .dbend
03AE ; rval -> y+10
03AE ; save2 -> R10,R11
03AE ; save -> y+6
03AE ; b -> y+22
03AE ; sector -> y+2
03AE ; hasBuffer -> y+20
03AE ; index -> y+18
03AE ; de -> y+16
03AE ; p -> R12,R13
03AE ; we -> y+14
03AE ; i -> R14,R15
03AE ; entry -> y+34
.even
03AE _fatGetDirEntry::
03AE 1A93 st -y,r17
03B0 0A93 st -y,r16
03B2 0E940000 xcall push_gset5
03B6 6897 sbiw R28,24
03B8 .dbline -1
03B8 .dbline 151
03B8 ; }
03B8 ;
03B8 ; /*-----------------------------------------------------------------------
03B8 ; 查询一个文件的开始簇
03B8 ; -----------------------------------------------------------------------*/
03B8 ; unsigned int baseentry = 0;
03B8 ; unsigned int entrycount = 0;
03B8 ;
03B8 ;
03B8 ; unsigned long fatGetDirEntry(unsigned int entry)
03B8 ; {
03B8 .dbline 153
03B8 ; unsigned long sector;
03B8 ; struct direntry *de = 0; // 防止compiler warning
03B8 0024 clr R0
03BA 1124 clr R1
03BC 198A std y+17,R1
03BE 088A std y+16,R0
03C0 .dbline 160
03C0 ; struct winentry *we;
03C0 ; unsigned int hasBuffer;
03C0 ; unsigned int b;
03C0 ; int i,index;
03C0 ; char *p;
03C0 ;
03C0 ; entrycount = 0;
03C0 2224 clr R2
03C2 3324 clr R3
03C4 30920B00 sts _entrycount+1,R3
03C8 20920A00 sts _entrycount,R2
03CC .dbline 161
03CC ; DirNameBuffer = 0;
03CC 30920300 sts _DirNameBuffer+1,R3
03D0 20920200 sts _DirNameBuffer,R2
03D4 .dbline 165
03D4 ;
03D4 ;
03D4 ; // 读取目录区数据
03D4 ; sector = fatClustToSect(FirstDirSector);
03D4 20910600 lds R18,_FirstDirSector+2
03D8 30910700 lds R19,_FirstDirSector+2+1
03DC 00910400 lds R16,_FirstDirSector
03E0 10910500 lds R17,_FirstDirSector+1
03E4 2ADE xcall _fatClustToSect
03E6 FE01 movw R30,R28
03E8 0283 std z+2,R16
03EA 1383 std z+3,R17
03EC 2483 std z+4,R18
03EE 3583 std z+5,R19
03F0 .dbline 167
03F0 ;
03F0 ; hasBuffer = 0;
03F0 0024 clr R0
03F2 1124 clr R1
03F4 1D8A std y+21,R1
03F6 0C8A std y+20,R0
03F8 .dbline 169
03F8 ;
03F8 ; index = 16;
03F8 80E1 ldi R24,16
03FA 90E0 ldi R25,0
03FC 9B8B std y+19,R25
03FE 8A8B std y+18,R24
0400 L38:
0400 .dbline 171
0400 ; do
0400 ; {
0400 .dbline 172
0400 ; if(index == 16) // 是否该一人一扇区time for next sector ?
0400 8A89 ldd R24,y+18
0402 9B89 ldd R25,y+19
0404 8031 cpi R24,16
0406 E0E0 ldi R30,0
0408 9E07 cpc R25,R30
040A 09F0 breq X6
040C 2AC0 xjmp L41
040E X6:
040E .dbline 173
040E ; {
040E .dbline 174
040E ; ReadBlock(sector++);
040E FE01 movw R30,R28
0410 2280 ldd R2,z+2
0412 3380 ldd R3,z+3
0414 4480 ldd R4,z+4
0416 5580 ldd R5,z+5
0418 FE01 movw R30,R28
041A 2682 std z+6,R2
041C 3782 std z+7,R3
041E 4086 std z+8,R4
0420 5186 std z+9,R5
0422 41E0 ldi R20,1
0424 50E0 ldi R21,0
0426 60E0 ldi R22,0
0428 70E0 ldi R23,0
042A FE01 movw R30,R28
042C 2680 ldd R2,z+6
042E 3780 ldd R3,z+7
0430 4084 ldd R4,z+8
0432 5184 ldd R5,z+9
0434 240E add R2,R20
0436 351E adc R3,R21
0438 461E adc R4,R22
043A 571E adc R5,R23
043C FE01 movw R30,R28
043E 2282 std z+2,R2
0440 3382 std z+3,R3
0442 4482 std z+4,R4
0444 5582 std z+5,R5
0446 FE01 movw R30,R28
0448 0681 ldd R16,z+6
044A 1781 ldd R17,z+7
044C 2085 ldd R18,z+8
044E 3185 ldd R19,z+9
0450 D7DD xcall _ReadBlock
0452 .dbline 175
0452 ; de = (struct direntry *)BUFFER;
0452 80E0 ldi R24,<_BUFFER
0454 90E0 ldi R25,>_BUFFER
0456 998B std y+17,R25
0458 888B std y+16,R24
045A .dbline 176
045A ; index = 0;
045A 0024 clr R0
045C 1124 clr R1
045E 1B8A std y+19,R1
0460 0A8A std y+18,R0
0462 .dbline 177
0462 ; }
0462 L41:
0462 .dbline 179
0462 ;
0462 ; if(*de->deName != 0xE5)
0462 E889 ldd R30,y+16
0464 F989 ldd R31,y+17
0466 8081 ldd R24,z+0
0468 853E cpi R24,229
046A 09F4 brne X7
046C 22C1 xjmp L43
046E X7:
046E .dbline 180
046E ; {
046E .dbline 182
046E ; // 如果if not a deleted entry
046E ; if(de->deAttributes == ATTR_LONG_FILENAME)
046E 8385 ldd R24,z+11
0470 8F30 cpi R24,15
0472 09F0 breq X8
0474 6FC0 xjmp L45
0476 X8:
0476 .dbline 183
0476 ; {
0476 .dbline 185
0476 ; // we have a long name entry
0476 ; we = (struct winentry *) de;
0476 0888 ldd R0,y+16
0478 1988 ldd R1,y+17
047A 1F86 std y+15,R1
047C 0E86 std y+14,R0
047E .dbline 186
047E ; b = 13 *( (we->weCnt-1) & 0x0f); // index into string
047E F001 movw R30,R0
0480 8081 ldd R24,z+0
0482 8150 subi R24,1
0484 8F70 andi R24,15
0486 9DE0 ldi R25,13
0488 989F mul R25,R24
048A 1F8A std y+23,R1
048C 0E8A std y+22,R0
048E .dbline 187
048E ; p = &LongNameBuffer[b];
048E 20900000 lds R2,_LongNameBuffer
0492 30900100 lds R3,_LongNameBuffer+1
0496 6001 movw R12,R0
0498 C20C add R12,R2
049A D31C adc R13,R3
049C .dbline 188
049C EE24 clr R14
049E FF24 clr R15
04A0 L47:
04A0 .dbline 188
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -