📄 fat.lis
字号:
04A0 02E0 ldi R16,2
04A2 10E0 ldi R17,0
04A4 9701 movw R18,R14
04A6 0E940000 xcall empy16s
04AA F801 movw R30,R16
04AC 8E85 ldd R24,y+14
04AE 9F85 ldd R25,y+15
04B0 0196 adiw R24,1
04B2 E80F add R30,R24
04B4 F91F adc R31,R25
04B6 2080 ldd R2,z+0
04B8 F601 movw R30,R12
04BA 2192 st Z+,R2
04BC 6F01 movw R12,R30
04BE L48:
04BE .dbline 188
04BE ; for (i=0;i<5;i++) *p++ = we->wePart1[i*2]; // copy first part
04BE C701 movw R24,R14
04C0 0196 adiw R24,1
04C2 7C01 movw R14,R24
04C4 .dbline 188
04C4 8530 cpi R24,5
04C6 E0E0 ldi R30,0
04C8 9E07 cpc R25,R30
04CA 54F3 brlt L47
04CC .dbline 189
04CC EE24 clr R14
04CE FF24 clr R15
04D0 L51:
04D0 .dbline 189
04D0 02E0 ldi R16,2
04D2 10E0 ldi R17,0
04D4 9701 movw R18,R14
04D6 0E940000 xcall empy16s
04DA F801 movw R30,R16
04DC 8E85 ldd R24,y+14
04DE 9F85 ldd R25,y+15
04E0 0E96 adiw R24,14
04E2 E80F add R30,R24
04E4 F91F adc R31,R25
04E6 2080 ldd R2,z+0
04E8 F601 movw R30,R12
04EA 2192 st Z+,R2
04EC 6F01 movw R12,R30
04EE L52:
04EE .dbline 189
04EE ; for (i=0;i<6;i++) *p++ = we->wePart2[i*2]; // second part
04EE C701 movw R24,R14
04F0 0196 adiw R24,1
04F2 7C01 movw R14,R24
04F4 .dbline 189
04F4 8630 cpi R24,6
04F6 E0E0 ldi R30,0
04F8 9E07 cpc R25,R30
04FA 54F3 brlt L51
04FC .dbline 190
04FC EE24 clr R14
04FE FF24 clr R15
0500 L55:
0500 .dbline 190
0500 02E0 ldi R16,2
0502 10E0 ldi R17,0
0504 9701 movw R18,R14
0506 0E940000 xcall empy16s
050A F801 movw R30,R16
050C 8E85 ldd R24,y+14
050E 9F85 ldd R25,y+15
0510 4C96 adiw R24,28
0512 E80F add R30,R24
0514 F91F adc R31,R25
0516 2080 ldd R2,z+0
0518 F601 movw R30,R12
051A 2192 st Z+,R2
051C 6F01 movw R12,R30
051E L56:
051E .dbline 190
051E ; for (i=0;i<2;i++) *p++ = we->wePart3[i*2]; // and third part
051E C701 movw R24,R14
0520 0196 adiw R24,1
0522 7C01 movw R14,R24
0524 .dbline 190
0524 8230 cpi R24,2
0526 E0E0 ldi R30,0
0528 9E07 cpc R25,R30
052A 54F3 brlt L55
052C .dbline 191
052C ; if (we->weCnt & 0x40) *p = 0; // in case dirnamelength is multiple of 13
052C EE85 ldd R30,y+14
052E FF85 ldd R31,y+15
0530 2080 ldd R2,z+0
0532 26FE sbrs R2,6
0534 03C0 rjmp L59
0536 .dbline 191
0536 2224 clr R2
0538 F601 movw R30,R12
053A 2082 std z+0,R2
053C L59:
053C .dbline 192
053C ; if ((we->weCnt & 0x0f) == 1) hasBuffer = 1; // mark that we have a long entry
053C EE85 ldd R30,y+14
053E FF85 ldd R31,y+15
0540 8081 ldd R24,z+0
0542 8F70 andi R24,15
0544 8130 cpi R24,1
0546 09F0 breq X9
0548 B4C0 xjmp L46
054A X9:
054A .dbline 192
054A 81E0 ldi R24,1
054C 90E0 ldi R25,0
054E 9D8B std y+21,R25
0550 8C8B std y+20,R24
0552 .dbline 193
0552 ; }
0552 AFC0 xjmp L46
0554 L45:
0554 .dbline 195
0554 ; else
0554 ; {
0554 .dbline 198
0554 ; // we have a short name entry
0554 ; // check if this is the end of a multi-part long name entry
0554 ; if(hasBuffer)
0554 0C88 ldd R0,y+20
0556 1D88 ldd R1,y+21
0558 0020 tst R0
055A 19F4 brne X4
055C 1120 tst R1
055E 09F4 brne X10
0560 A8C0 xjmp L63
0562 X10:
0562 X4:
0562 .dbline 199
0562 ; {
0562 .dbline 202
0562 ; // a long entry name has been collected
0562 ; // is it a directory ?
0562 ; if(de->deAttributes == ATTR_DIRECTORY)
0562 E889 ldd R30,y+16
0564 F989 ldd R31,y+17
0566 8385 ldd R24,z+11
0568 8031 cpi R24,16
056A 09F0 breq X11
056C 8BC0 xjmp L65
056E X11:
056E .dbline 203
056E ; {
056E .dbline 204
056E ; unsigned long save = FirstDirSector;
056E 40900600 lds R4,_FirstDirSector+2
0572 50900700 lds R5,_FirstDirSector+2+1
0576 20900400 lds R2,_FirstDirSector
057A 30900500 lds R3,_FirstDirSector+1
057E FE01 movw R30,R28
0580 2682 std z+6,R2
0582 3782 std z+7,R3
0584 4086 std z+8,R4
0586 5186 std z+9,R5
0588 .dbline 205
0588 ; unsigned int save2 = baseentry;
0588 A0900800 lds R10,_baseentry
058C B0900900 lds R11,_baseentry+1
0590 .dbline 208
0590 ; unsigned long rval;
0590 ;
0590 ; strcpy(DirNameBuffer,LongNameBuffer);
0590 20910000 lds R18,_LongNameBuffer
0594 30910100 lds R19,_LongNameBuffer+1
0598 00910200 lds R16,_DirNameBuffer
059C 10910300 lds R17,_DirNameBuffer+1
05A0 0E940000 xcall _strcpy
05A4 .dbline 209
05A4 ; strcat(DirNameBuffer,"/");
05A4 20E0 ldi R18,<L67
05A6 30E0 ldi R19,>L67
05A8 00910200 lds R16,_DirNameBuffer
05AC 10910300 lds R17,_DirNameBuffer+1
05B0 0E940000 xcall _strcat
05B4 .dbline 214
05B4 ;
05B4 ; // rprintfStr(LongNameBuffer); rprintfProgStrM("/"); //EOL();
05B4 ;
05B4 ; // call recursively
05B4 ; FirstDirSector = ((unsigned long)de->deHighClust << 16) + de->deStartCluster;
05B4 E889 ldd R30,y+16
05B6 F989 ldd R31,y+17
05B8 228C ldd R2,z+26
05BA 338C ldd R3,z+27
05BC 4424 clr R4
05BE 5524 clr R5
05C0 E889 ldd R30,y+16
05C2 F989 ldd R31,y+17
05C4 6488 ldd R6,z+20
05C6 7588 ldd R7,z+21
05C8 8824 clr R8
05CA 9924 clr R9
05CC 4301 movw R8,R6
05CE 6624 clr R6
05D0 7724 clr R7
05D2 620C add R6,R2
05D4 731C adc R7,R3
05D6 841C adc R8,R4
05D8 951C adc R9,R5
05DA 70920500 sts _FirstDirSector+1,R7
05DE 60920400 sts _FirstDirSector,R6
05E2 90920700 sts _FirstDirSector+2+1,R9
05E6 80920600 sts _FirstDirSector+2,R8
05EA .dbline 215
05EA ; rval = fatGetDirEntry(entry);
05EA 0AA1 ldd R16,y+34
05EC 1BA1 ldd R17,y+35
05EE DFDE xcall _fatGetDirEntry
05F0 FE01 movw R30,R28
05F2 0287 std z+10,R16
05F4 1387 std z+11,R17
05F6 2487 std z+12,R18
05F8 3587 std z+13,R19
05FA .dbline 216
05FA ; FirstDirSector = save;
05FA FE01 movw R30,R28
05FC 2680 ldd R2,z+6
05FE 3780 ldd R3,z+7
0600 4084 ldd R4,z+8
0602 5184 ldd R5,z+9
0604 30920500 sts _FirstDirSector+1,R3
0608 20920400 sts _FirstDirSector,R2
060C 50920700 sts _FirstDirSector+2+1,R5
0610 40920600 sts _FirstDirSector+2,R4
0614 .dbline 217
0614 ; baseentry = save2;
0614 B0920900 sts _baseentry+1,R11
0618 A0920800 sts _baseentry,R10
061C .dbline 218
061C ; if (rval)
061C 40E0 ldi R20,0
061E 50E0 ldi R21,0
0620 60E0 ldi R22,0
0622 70E0 ldi R23,0
0624 FE01 movw R30,R28
0626 2284 ldd R2,z+10
0628 3384 ldd R3,z+11
062A 4484 ldd R4,z+12
062C 5584 ldd R5,z+13
062E 2416 cp R2,R20
0630 3506 cpc R3,R21
0632 4606 cpc R4,R22
0634 5706 cpc R5,R23
0636 31F0 breq L68
0638 .dbline 219
0638 ; return rval;
0638 FE01 movw R30,R28
063A 0285 ldd R16,z+10
063C 1385 ldd R17,z+11
063E 2485 ldd R18,z+12
0640 3585 ldd R19,z+13
0642 86C0 xjmp L37
0644 L68:
0644 .dbline 221
0644 ; else
0644 ; {
0644 .dbline 223
0644 ; // reload original sector
0644 ; ReadBlock(sector-1);//ataReadSectors( DRIVE0, sector-1, 1, SectorBuffer);
0644 41E0 ldi R20,1
0646 50E0 ldi R21,0
0648 60E0 ldi R22,0
064A 70E0 ldi R23,0
064C FE01 movw R30,R28
064E 2280 ldd R2,z+2
0650 3380 ldd R3,z+3
0652 4480 ldd R4,z+4
0654 5580 ldd R5,z+5
0656 241A sub R2,R20
0658 350A sbc R3,R21
065A 460A sbc R4,R22
065C 570A sbc R5,R23
065E 8101 movw R16,R2
0660 9201 movw R18,R4
0662 CEDC xcall _ReadBlock
0664 .dbline 224
0664 ; entrycount--; // decrement entry counter
0664 80910A00 lds R24,_entrycount
0668 90910B00 lds R25,_entrycount+1
066C 0197 sbiw R24,1
066E 90930B00 sts _entrycount+1,R25
0672 80930A00 sts _entrycount,R24
0676 .dbline 225
0676 ; *DirNameBuffer = 0;
0676 2224 clr R2
0678 E0910200 lds R30,_DirNameBuffer
067C F0910300 lds R31,_DirNameBuffer+1
0680 2082 std z+0,R2
0682 .dbline 226
0682 ; }
0682 .dbline 227
0682 ; }
0682 0AC0 xjmp L66
0684 L65:
0684 .dbline 229
0684 ; else // normal file entry
0684 ; if(entrycount == entry)
0684 20900A00 lds R2,_entrycount
0688 30900B00 lds R3,_entrycount+1
068C 0AA0 ldd R0,y+34
068E 1BA0 ldd R1,y+35
0690 2014 cp R2,R0
0692 3104 cpc R3,R1
0694 09F4 brne L70
0696 .dbline 230
0696 ; break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -