📄 fat.lis
字号:
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_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_String
03A4 .dbline 139
03A4 ; LCD_write_String(0,1,"RATE");
03A4 80E0 ldi R24,<L37
03A6 90E0 ldi R25,>L37
03A8 9983 std y+1,R25
03AA 8883 std y+0,R24
03AC 21E0 ldi R18,1
03AE 0027 clr R16
03B0 0E940000 xcall _LCD_write_String
03B4 .dbline 140
03B4 ; return 0;
03B4 0027 clr R16
03B6 .dbline -2
03B6 L4:
03B6 2296 adiw R28,2
03B8 0E940000 xcall pop_gset4
03BC .dbline 0 ; func end
03BC 0895 ret
03BE .dbsym r t2 10 c
03BE .dbsym r t1 12 c
03BE .dbsym r data 10 i
03BE .dbsym r bpb 10 pS[bpb710]
03BE .dbend
.area data(ram, con, rel)
0008 .dbfile E:\V3U~1\sd\M64-SD卡MP3程序\fat.c
0008 _baseentry::
0008 .blkb 2
.area idata
0008 0000 .word 0
.area data(ram, con, rel)
000A .dbfile E:\V3U~1\sd\M64-SD卡MP3程序\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 E:\V3U~1\sd\M64-SD卡MP3程序\fat.c
000C .dbsym e entrycount _entrycount i
.area text(rom, con, rel)
03BE .dbfile E:\V3U~1\sd\M64-SD卡MP3程序\fat.c
03BE .dbfunc e fatGetDirEntry _fatGetDirEntry fl
03BE .dbstruct 0 32 winentry
03BE .dbfield 0 weCnt c
03BE .dbfield 1 wePart1 A[10:10]c
03BE .dbfield 11 weAttributes c
03BE .dbfield 12 weReserved1 c
03BE .dbfield 13 weChksum c
03BE .dbfield 14 wePart2 A[12:12]c
03BE .dbfield 26 weReserved2 i
03BE .dbfield 28 wePart3 A[4:4]c
03BE .dbend
03BE .dbstruct 0 32 direntry
03BE .dbfield 0 deName A[8:8]c
03BE .dbfield 8 deExtension A[3:3]c
03BE .dbfield 11 deAttributes c
03BE .dbfield 12 deLowerCase c
03BE .dbfield 13 deCHundredth c
03BE .dbfield 14 deCTime A[2:2]c
03BE .dbfield 16 deCDate A[2:2]c
03BE .dbfield 18 deADate A[2:2]c
03BE .dbfield 20 deHighClust i
03BE .dbfield 22 deMTime A[2:2]c
03BE .dbfield 24 deMDate A[2:2]c
03BE .dbfield 26 deStartCluster i
03BE .dbfield 28 deFileSize l
03BE .dbend
03BE ; rval -> y+8
03BE ; save2 -> R10,R11
03BE ; save -> y+4
03BE ; b -> y+20
03BE ; sector -> y+0
03BE ; hasBuffer -> y+18
03BE ; index -> y+16
03BE ; de -> y+14
03BE ; p -> R12,R13
03BE ; we -> y+12
03BE ; i -> R14,R15
03BE ; entry -> y+32
.even
03BE _fatGetDirEntry::
03BE 1A93 st -y,r17
03C0 0A93 st -y,r16
03C2 0E940000 xcall push_gset5
03C6 6697 sbiw R28,22
03C8 .dbline -1
03C8 .dbline 151
03C8 ; }
03C8 ;
03C8 ; /*-----------------------------------------------------------------------
03C8 ; 查询一个文件的开始簇
03C8 ; -----------------------------------------------------------------------*/
03C8 ; unsigned int baseentry = 0;
03C8 ; unsigned int entrycount = 0;
03C8 ;
03C8 ;
03C8 ; unsigned long fatGetDirEntry(unsigned int entry)
03C8 ; {
03C8 .dbline 153
03C8 ; unsigned long sector;
03C8 ; struct direntry *de = 0; // 防止compiler warning
03C8 0024 clr R0
03CA 1124 clr R1
03CC 1F86 std y+15,R1
03CE 0E86 std y+14,R0
03D0 .dbline 160
03D0 ; struct winentry *we;
03D0 ; unsigned int hasBuffer;
03D0 ; unsigned int b;
03D0 ; int i,index;
03D0 ; char *p;
03D0 ;
03D0 ; entrycount = 0;
03D0 2224 clr R2
03D2 3324 clr R3
03D4 30920B00 sts _entrycount+1,R3
03D8 20920A00 sts _entrycount,R2
03DC .dbline 161
03DC ; DirNameBuffer = 0;
03DC 30920300 sts _DirNameBuffer+1,R3
03E0 20920200 sts _DirNameBuffer,R2
03E4 .dbline 165
03E4 ;
03E4 ;
03E4 ; // 读取目录区数据
03E4 ; sector = fatClustToSect(FirstDirSector);
03E4 20910600 lds R18,_FirstDirSector+2
03E8 30910700 lds R19,_FirstDirSector+2+1
03EC 00910400 lds R16,_FirstDirSector
03F0 10910500 lds R17,_FirstDirSector+1
03F4 22DE xcall _fatClustToSect
03F6 FE01 movw R30,R28
03F8 0083 std z+0,R16
03FA 1183 std z+1,R17
03FC 2283 std z+2,R18
03FE 3383 std z+3,R19
0400 .dbline 167
0400 ;
0400 ; hasBuffer = 0;
0400 0024 clr R0
0402 1124 clr R1
0404 1B8A std y+19,R1
0406 0A8A std y+18,R0
0408 .dbline 169
0408 ;
0408 ; index = 16;
0408 80E1 ldi R24,16
040A 90E0 ldi R25,0
040C 998B std y+17,R25
040E 888B std y+16,R24
0410 L39:
0410 .dbline 171
0410 ; do
0410 ; {
0410 .dbline 172
0410 ; if(index == 16) // 是否该一人一扇区time for next sector ?
0410 8889 ldd R24,y+16
0412 9989 ldd R25,y+17
0414 8031 cpi R24,16
0416 E0E0 ldi R30,0
0418 9E07 cpc R25,R30
041A 09F0 breq X6
041C 2AC0 xjmp L42
041E X6:
041E .dbline 173
041E ; {
041E .dbline 174
041E ; ReadBlock(sector++);
041E FE01 movw R30,R28
0420 2080 ldd R2,z+0
0422 3180 ldd R3,z+1
0424 4280 ldd R4,z+2
0426 5380 ldd R5,z+3
0428 FE01 movw R30,R28
042A 2482 std z+4,R2
042C 3582 std z+5,R3
042E 4682 std z+6,R4
0430 5782 std z+7,R5
0432 41E0 ldi R20,1
0434 50E0 ldi R21,0
0436 60E0 ldi R22,0
0438 70E0 ldi R23,0
043A FE01 movw R30,R28
043C 2480 ldd R2,z+4
043E 3580 ldd R3,z+5
0440 4680 ldd R4,z+6
0442 5780 ldd R5,z+7
0444 240E add R2,R20
0446 351E adc R3,R21
0448 461E adc R4,R22
044A 571E adc R5,R23
044C FE01 movw R30,R28
044E 2082 std z+0,R2
0450 3182 std z+1,R3
0452 4282 std z+2,R4
0454 5382 std z+3,R5
0456 FE01 movw R30,R28
0458 0481 ldd R16,z+4
045A 1581 ldd R17,z+5
045C 2681 ldd R18,z+6
045E 3781 ldd R19,z+7
0460 CFDD xcall _ReadBlock
0462 .dbline 175
0462 ; de = (struct direntry *)BUFFER;
0462 80E0 ldi R24,<_BUFFER
0464 90E0 ldi R25,>_BUFFER
0466 9F87 std y+15,R25
0468 8E87 std y+14,R24
046A .dbline 176
046A ; index = 0;
046A 0024 clr R0
046C 1124 clr R1
046E 198A std y+17,R1
0470 088A std y+16,R0
0472 .dbline 177
0472 ; }
0472 L42:
0472 .dbline 179
0472 ;
0472 ; if(*de->deName != 0xE5)
0472 EE85 ldd R30,y+14
0474 FF85 ldd R31,y+15
0476 8081 ldd R24,z+0
0478 853E cpi R24,229
047A 09F4 brne X7
047C 22C1 xjmp L44
047E X7:
047E .dbline 180
047E ; {
047E .dbline 182
047E ; // 如果if not a deleted entry
047E ; if(de->deAttributes == ATTR_LONG_FILENAME)
047E 8385 ldd R24,z+11
0480 8F30 cpi R24,15
0482 09F0 breq X8
0484 6FC0 xjmp L46
0486 X8:
0486 .dbline 183
0486 ; {
0486 .dbline 185
0486 ; // we have a long name entry
0486 ; we = (struct winentry *) de;
0486 0E84 ldd R0,y+14
0488 1F84 ldd R1,y+15
048A 1D86 std y+13,R1
048C 0C86 std y+12,R0
048E .dbline 186
048E ; b = 13 *( (we->weCnt-1) & 0x0f); // index into string
048E F001 movw R30,R0
0490 8081 ldd R24,z+0
0492 8150 subi R24,1
0494 8F70 andi R24,15
0496 9DE0 ldi R25,13
0498 989F mul R25,R24
049A 1D8A std y+21,R1
049C 0C8A std y+20,R0
049E .dbline 187
049E ; p = &LongNameBuffer[b];
049E 20900000 lds R2,_LongNameBuffer
04A2 30900100 lds R3,_LongNameBuffer+1
04A6 6001 movw R12,R0
04A8 C20C add R12,R2
04AA D31C adc R13,R3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -