⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fat.lis

📁 /*** *** *** *** *** *** *** *** *** *** / /* MP3 Code for M32L */ /* By pasyong
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 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 + -