📄 fat.lis
字号:
04A8 C20C add R12,R2
04AA D31C adc R13,R3
04AC .dbline 187
04AC EE24 clr R14
04AE FF24 clr R15
04B0 L48:
04B0 .dbline 187
04B0 02E0 ldi R16,2
04B2 10E0 ldi R17,0
04B4 9701 movw R18,R14
04B6 0E940000 xcall empy16s
04BA F801 movw R30,R16
04BC 8C85 ldd R24,y+12
04BE 9D85 ldd R25,y+13
04C0 0196 adiw R24,1
04C2 E80F add R30,R24
04C4 F91F adc R31,R25
04C6 2080 ldd R2,z+0
04C8 F601 movw R30,R12
04CA 2192 st Z+,R2
04CC 6F01 movw R12,R30
04CE L49:
04CE .dbline 187
04CE ; for (i=0;i<5;i++) *p++ = we->wePart1[i*2]; // copy first part
04CE C701 movw R24,R14
04D0 0196 adiw R24,1
04D2 7C01 movw R14,R24
04D4 .dbline 187
04D4 8530 cpi R24,5
04D6 E0E0 ldi R30,0
04D8 9E07 cpc R25,R30
04DA 54F3 brlt L48
04DC .dbline 188
04DC EE24 clr R14
04DE FF24 clr R15
04E0 L52:
04E0 .dbline 188
04E0 02E0 ldi R16,2
04E2 10E0 ldi R17,0
04E4 9701 movw R18,R14
04E6 0E940000 xcall empy16s
04EA F801 movw R30,R16
04EC 8C85 ldd R24,y+12
04EE 9D85 ldd R25,y+13
04F0 0E96 adiw R24,14
04F2 E80F add R30,R24
04F4 F91F adc R31,R25
04F6 2080 ldd R2,z+0
04F8 F601 movw R30,R12
04FA 2192 st Z+,R2
04FC 6F01 movw R12,R30
04FE L53:
04FE .dbline 188
04FE ; for (i=0;i<6;i++) *p++ = we->wePart2[i*2]; // second part
04FE C701 movw R24,R14
0500 0196 adiw R24,1
0502 7C01 movw R14,R24
0504 .dbline 188
0504 8630 cpi R24,6
0506 E0E0 ldi R30,0
0508 9E07 cpc R25,R30
050A 54F3 brlt L52
050C .dbline 189
050C EE24 clr R14
050E FF24 clr R15
0510 L56:
0510 .dbline 189
0510 02E0 ldi R16,2
0512 10E0 ldi R17,0
0514 9701 movw R18,R14
0516 0E940000 xcall empy16s
051A F801 movw R30,R16
051C 8C85 ldd R24,y+12
051E 9D85 ldd R25,y+13
0520 4C96 adiw R24,28
0522 E80F add R30,R24
0524 F91F adc R31,R25
0526 2080 ldd R2,z+0
0528 F601 movw R30,R12
052A 2192 st Z+,R2
052C 6F01 movw R12,R30
052E L57:
052E .dbline 189
052E ; for (i=0;i<2;i++) *p++ = we->wePart3[i*2]; // and third part
052E C701 movw R24,R14
0530 0196 adiw R24,1
0532 7C01 movw R14,R24
0534 .dbline 189
0534 8230 cpi R24,2
0536 E0E0 ldi R30,0
0538 9E07 cpc R25,R30
053A 54F3 brlt L56
053C .dbline 190
053C ; if (we->weCnt & 0x40) *p = 0; // in case dirnamelength is multiple of 13
053C EC85 ldd R30,y+12
053E FD85 ldd R31,y+13
0540 2080 ldd R2,z+0
0542 26FE sbrs R2,6
0544 03C0 rjmp L60
0546 .dbline 190
0546 2224 clr R2
0548 F601 movw R30,R12
054A 2082 std z+0,R2
054C L60:
054C .dbline 191
054C ; if ((we->weCnt & 0x0f) == 1) hasBuffer = 1; // mark that we have a long entry
054C EC85 ldd R30,y+12
054E FD85 ldd R31,y+13
0550 8081 ldd R24,z+0
0552 8F70 andi R24,15
0554 8130 cpi R24,1
0556 09F0 breq X9
0558 B4C0 xjmp L47
055A X9:
055A .dbline 191
055A 81E0 ldi R24,1
055C 90E0 ldi R25,0
055E 9B8B std y+19,R25
0560 8A8B std y+18,R24
0562 .dbline 192
0562 ; }
0562 AFC0 xjmp L47
0564 L46:
0564 .dbline 194
0564 ; else
0564 ; {
0564 .dbline 197
0564 ; // we have a short name entry
0564 ; // check if this is the end of a multi-part long name entry
0564 ; if(hasBuffer)
0564 0A88 ldd R0,y+18
0566 1B88 ldd R1,y+19
0568 0020 tst R0
056A 19F4 brne X4
056C 1120 tst R1
056E 09F4 brne X10
0570 A8C0 xjmp L64
0572 X10:
0572 X4:
0572 .dbline 198
0572 ; {
0572 .dbline 201
0572 ; // a long entry name has been collected
0572 ; // is it a directory ?
0572 ; if(de->deAttributes == ATTR_DIRECTORY)
0572 EE85 ldd R30,y+14
0574 FF85 ldd R31,y+15
0576 8385 ldd R24,z+11
0578 8031 cpi R24,16
057A 09F0 breq X11
057C 8BC0 xjmp L66
057E X11:
057E .dbline 202
057E ; {
057E .dbline 203
057E ; unsigned long save = FirstDirSector;
057E 40900600 lds R4,_FirstDirSector+2
0582 50900700 lds R5,_FirstDirSector+2+1
0586 20900400 lds R2,_FirstDirSector
058A 30900500 lds R3,_FirstDirSector+1
058E FE01 movw R30,R28
0590 2482 std z+4,R2
0592 3582 std z+5,R3
0594 4682 std z+6,R4
0596 5782 std z+7,R5
0598 .dbline 204
0598 ; unsigned int save2 = baseentry;
0598 A0900800 lds R10,_baseentry
059C B0900900 lds R11,_baseentry+1
05A0 .dbline 207
05A0 ; unsigned long rval;
05A0 ;
05A0 ; strcpy(DirNameBuffer,LongNameBuffer);
05A0 20910000 lds R18,_LongNameBuffer
05A4 30910100 lds R19,_LongNameBuffer+1
05A8 00910200 lds R16,_DirNameBuffer
05AC 10910300 lds R17,_DirNameBuffer+1
05B0 0E940000 xcall _strcpy
05B4 .dbline 208
05B4 ; strcat(DirNameBuffer,"/");
05B4 20E0 ldi R18,<L68
05B6 30E0 ldi R19,>L68
05B8 00910200 lds R16,_DirNameBuffer
05BC 10910300 lds R17,_DirNameBuffer+1
05C0 0E940000 xcall _strcat
05C4 .dbline 213
05C4 ;
05C4 ; // rprintfStr(LongNameBuffer); rprintfProgStrM("/"); //EOL();
05C4 ;
05C4 ; // call recursively
05C4 ; FirstDirSector = ((unsigned long)de->deHighClust << 16) + de->deStartCluster;
05C4 EE85 ldd R30,y+14
05C6 FF85 ldd R31,y+15
05C8 228C ldd R2,z+26
05CA 338C ldd R3,z+27
05CC 4424 clr R4
05CE 5524 clr R5
05D0 EE85 ldd R30,y+14
05D2 FF85 ldd R31,y+15
05D4 6488 ldd R6,z+20
05D6 7588 ldd R7,z+21
05D8 8824 clr R8
05DA 9924 clr R9
05DC 4301 movw R8,R6
05DE 6624 clr R6
05E0 7724 clr R7
05E2 620C add R6,R2
05E4 731C adc R7,R3
05E6 841C adc R8,R4
05E8 951C adc R9,R5
05EA 70920500 sts _FirstDirSector+1,R7
05EE 60920400 sts _FirstDirSector,R6
05F2 90920700 sts _FirstDirSector+2+1,R9
05F6 80920600 sts _FirstDirSector+2,R8
05FA .dbline 214
05FA ; rval = fatGetDirEntry(entry);
05FA 08A1 ldd R16,y+32
05FC 19A1 ldd R17,y+33
05FE DFDE xcall _fatGetDirEntry
0600 FE01 movw R30,R28
0602 0087 std z+8,R16
0604 1187 std z+9,R17
0606 2287 std z+10,R18
0608 3387 std z+11,R19
060A .dbline 215
060A ; FirstDirSector = save;
060A FE01 movw R30,R28
060C 2480 ldd R2,z+4
060E 3580 ldd R3,z+5
0610 4680 ldd R4,z+6
0612 5780 ldd R5,z+7
0614 30920500 sts _FirstDirSector+1,R3
0618 20920400 sts _FirstDirSector,R2
061C 50920700 sts _FirstDirSector+2+1,R5
0620 40920600 sts _FirstDirSector+2,R4
0624 .dbline 216
0624 ; baseentry = save2;
0624 B0920900 sts _baseentry+1,R11
0628 A0920800 sts _baseentry,R10
062C .dbline 217
062C ; if (rval)
062C 40E0 ldi R20,0
062E 50E0 ldi R21,0
0630 60E0 ldi R22,0
0632 70E0 ldi R23,0
0634 FE01 movw R30,R28
0636 2084 ldd R2,z+8
0638 3184 ldd R3,z+9
063A 4284 ldd R4,z+10
063C 5384 ldd R5,z+11
063E 2416 cp R2,R20
0640 3506 cpc R3,R21
0642 4606 cpc R4,R22
0644 5706 cpc R5,R23
0646 31F0 breq L69
0648 .dbline 218
0648 ; return rval;
0648 FE01 movw R30,R28
064A 0085 ldd R16,z+8
064C 1185 ldd R17,z+9
064E 2285 ldd R18,z+10
0650 3385 ldd R19,z+11
0652 7CC0 xjmp L38
0654 L69:
0654 .dbline 220
0654 ; else
0654 ; {
0654 .dbline 222
0654 ; // reload original sector
0654 ; ReadBlock(sector-1);//ataReadSectors( DRIVE0, sector-1, 1, SectorBuffer);
0654 41E0 ldi R20,1
0656 50E0 ldi R21,0
0658 60E0 ldi R22,0
065A 70E0 ldi R23,0
065C FE01 movw R30,R28
065E 2080 ldd R2,z+0
0660 3180 ldd R3,z+1
0662 4280 ldd R4,z+2
0664 5380 ldd R5,z+3
0666 241A sub R2,R20
0668 350A sbc R3,R21
066A 460A sbc R4,R22
066C 570A sbc R5,R23
066E 8101 movw R16,R2
0670 9201 movw R18,R4
0672 C6DC xcall _ReadBlock
0674 .dbline 223
0674 ; entrycount--; // decrement entry counter
0674 80910A00 lds R24,_entrycount
0678 90910B00 lds R25,_entrycount+1
067C 0197 sbiw R24,1
067E 90930B00 sts _entrycount+1,R25
0682 80930A00 sts _entrycount,R24
0686 .dbline 224
0686 ; *DirNameBuffer = 0;
0686 2224 clr R2
0688 E0910200 lds R30,_DirNameBuffer
068C F0910300 lds R31,_DirNameBuffer+1
0690 2082 std z+0,R2
0692 .dbline 225
0692 ; }
0692 .dbline 226
0692 ; }
0692 0AC0 xjmp L67
0694 L66:
0694 .dbline 228
0694 ; else // normal file entry
0694 ; if(entrycount == entry)
0694 20900A00 lds R2,_entrycount
0698 30900B00 lds R3,_entrycount+1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -