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

📄 fat.lis

📁 采用Mega16+VS1011B+SD卡制作的Mp3
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 06F2 40E0              ldi R20,0
 06F4 50E0              ldi R21,0
 06F6 60E0              ldi R22,0
 06F8 70E0              ldi R23,0
 06FA 4E83              std y+6,R20
 06FC 5F83              std y+7,R21
 06FE 6887              std y+8,R22
 0700 7987              std y+9,R23
 0702                   .dbline 181
 0702           ;       unsigned long blk;
 0702           ;       unsigned int a;
 0702           ;       struct DirEntry *dir;                   //文件目录指针
 0702           ; 
 0702           ;       if (dir_cluster == 0)   //读取根目录,得到FDT起始扇区号
 0702 2C88              ldd R2,y+20
 0704 3D88              ldd R3,y+21
 0706 4E88              ldd R4,y+22
 0708 5F88              ldd R5,y+23
 070A 00E0              ldi R16,0
 070C 2016              cp R2,R16
 070E 3006              cpc R3,R16
 0710 4006              cpc R4,R16
 0712 5006              cpc R5,R16
 0714 69F4              brne L35
 0716           X24:
 0716                   .dbline 182
 0716           ;       {
 0716                   .dbline 183
 0716           ;               Block = FirstRootDirSecNum;
 0716 40900600          lds R4,_FirstRootDirSecNum+2
 071A 50900700          lds R5,_FirstRootDirSecNum+2+1
 071E 20900400          lds R2,_FirstRootDirSecNum
 0722 30900500          lds R3,_FirstRootDirSecNum+1
 0726 2E82              std y+6,R2
 0728 3F82              std y+7,R3
 072A 4886              std y+8,R4
 072C 5986              std y+9,R5
 072E                   .dbline 184
 072E           ;       }
 072E 29C0              xjmp L36
 0730           L35:
 0730                   .dbline 186
 0730           ;       else                                    //读取子目录,本程序中用不到
 0730           ;       {
 0730                   .dbline 187
 0730           ;               Block = (dir_cluster-2)*SecPerClus+data_offset;
 0730 42E0              ldi R20,2
 0732 50E0              ldi R21,0
 0734 60E0              ldi R22,0
 0736 70E0              ldi R23,0
 0738 0C89              ldd R16,y+20
 073A 1D89              ldd R17,y+21
 073C 2E89              ldd R18,y+22
 073E 3F89              ldd R19,y+23
 0740 041B              sub R16,R20
 0742 150B              sbc R17,R21
 0744 260B              sbc R18,R22
 0746 370B              sbc R19,R23
 0748 20900A00          lds R2,_SecPerClus
 074C 3324              clr R3
 074E 4424              clr R4
 0750 5524              clr R5
 0752 5A92              st -y,R5
 0754 4A92              st -y,R4
 0756 3A92              st -y,R3
 0758 2A92              st -y,R2
 075A 0E940000          xcall empy32u
 075E 1801              movw R2,R16
 0760 2901              movw R4,R18
 0762 80901200          lds R8,_data_offset+2
 0766 90901300          lds R9,_data_offset+2+1
 076A 60901000          lds R6,_data_offset
 076E 70901100          lds R7,_data_offset+1
 0772 260C              add R2,R6
 0774 371C              adc R3,R7
 0776 481C              adc R4,R8
 0778 591C              adc R5,R9
 077A 2E82              std y+6,R2
 077C 3F82              std y+7,R3
 077E 4886              std y+8,R4
 0780 5986              std y+9,R5
 0782                   .dbline 188
 0782           ;       }
 0782           L36:
 0782                   .dbline 191
 0782           ;       //下面的算法效率有问题。注意它每次都是从根目录下面依次去找第Entry_Count个文件
 0782           ;       //for (blk = old_pos_blk;;blk++)
 0782           ;       for (blk = Block;;blk++)    //从该目录下面,依次读取一个扇区
 0782 2E80              ldd R2,y+6
 0784 3F80              ldd R3,y+7
 0786 4884              ldd R4,y+8
 0788 5984              ldd R5,y+9
 078A 2A82              std y+2,R2
 078C 3B82              std y+3,R3
 078E 4C82              std y+4,R4
 0790 5D82              std y+5,R5
 0792           L37:
 0792                   .dbline 192
 0792           ;       {
 0792                   .dbline 193
 0792           ;               MMC_SD_ReadSingleBlock(blk,buff);
 0792 0E8C              ldd R0,y+30
 0794 1F8C              ldd R1,y+31
 0796 1982              std y+1,R1
 0798 0882              std y+0,R0
 079A 0A81              ldd R16,y+2
 079C 1B81              ldd R17,y+3
 079E 2C81              ldd R18,y+4
 07A0 3D81              ldd R19,y+5
 07A2 0E940000          xcall _MMC_SD_ReadSingleBlock
 07A6           L41:
 07A6                   .dbline 196
 07A6           ;       Next_a: 
 07A6           ;               //for (a=old_pos_a;a<BlockSize; a = a + 32)
 07A6           ;               for (a=0;a<BlockSize; a = a + 32)  //依次分析每一个32字节的目录/文件结构
 07A6 EE24              clr R14
 07A8 FF24              clr R15
 07AA D8C0              xjmp L45
 07AC           L42:
 07AC                   .dbline 197
 07AC           ;               {       //依次分析每一个文件或目录,可能会出现空的、已删除、正常的目录/文件
 07AC                   .dbline 198
 07AC           ;                       dir=(struct DirEntry *)(buff + a); //装载目录内容
 07AC 6701              movw R12,R14
 07AE 0E8C              ldd R0,y+30
 07B0 1F8C              ldd R1,y+31
 07B2 C00C              add R12,R0
 07B4 D11C              adc R13,R1
 07B6                   .dbline 199
 07B6           ;                       if (dir->DIR_Name[0] == 0)               //目录已经搜索完毕,返回.
 07B6 F601              movw R30,R12
 07B8 2080              ldd R2,z+0
 07BA 2220              tst R2
 07BC 29F4              brne L46
 07BE           X25:
 07BE                   .dbline 200
 07BE           ;                       {
 07BE                   .dbline 201
 07BE           ;                               return (0xFFFFFFFE);
 07BE 0EEF              ldi R16,254
 07C0 1FEF              ldi R17,255
 07C2 2FEF              ldi R18,255
 07C4 3FEF              ldi R19,255
 07C6 E3C0              xjmp L34
 07C8           L46:
 07C8                   .dbline 204
 07C8           ;                       }
 07C8           ;                       //非卷标,非长文件名,并且文件没有删除
 07C8           ;                       if ((dir->DIR_Attr != ATTR_LONG_NAME) && (dir->DIR_Attr != DIR_ATTRIB_VOL_ID) && (dir->DIR_Name[0] != DIR_ENTRY_IS_FREE)) 
 07C8 F601              movw R30,R12
 07CA 2384              ldd R2,z+11
 07CC 3324              clr R3
 07CE 822D              mov R24,R2
 07D0 8F30              cpi R24,15
 07D2 09F4              brne X42
 07D4 C0C0              xjmp L48
 07D6           X42:
 07D6           X26:
 07D6 8830              cpi R24,8
 07D8 09F4              brne X43
 07DA BDC0              xjmp L48
 07DC           X43:
 07DC           X27:
 07DC 8081              ldd R24,z+0
 07DE 853E              cpi R24,229
 07E0 09F4              brne X44
 07E2 B9C0              xjmp L48
 07E4           X44:
 07E4           X28:
 07E4                   .dbline 205
 07E4           ;                       {   
 07E4                   .dbline 207
 07E4           ;                               //搜索字库文件:
 07E4           ;                               if(Entry_Count==0 && dir->DIR_Name[2] == 'F' && dir->DIR_Name[3] == 'O' && dir->DIR_Name[4] == 'N' && dir->DIR_Name[5] == 'T' && dir->DIR_Name[6] == '1' && dir->DIR_Name[7] == '6')
 07E4 088C              ldd R0,y+24
 07E6 198C              ldd R1,y+25
 07E8 0020              tst R0
 07EA 09F0              breq X45
 07EC 57C0              xjmp L50
 07EE           X45:
 07EE 1120              tst R1
 07F0 09F0              breq X46
 07F2 54C0              xjmp L50
 07F4           X46:
 07F4           X29:
 07F4 8281              ldd R24,z+2
 07F6 8634              cpi R24,70
 07F8 09F0              breq X47
 07FA 50C0              xjmp L50
 07FC           X47:
 07FC           X30:
 07FC 8381              ldd R24,z+3
 07FE 8F34              cpi R24,79
 0800 09F0              breq X48
 0802 4CC0              xjmp L50
 0804           X48:
 0804           X31:
 0804 8481              ldd R24,z+4
 0806 8E34              cpi R24,78
 0808 09F0              breq X49
 080A 48C0              xjmp L50
 080C           X49:
 080C           X32:
 080C 8581              ldd R24,z+5
 080E 8435              cpi R24,84
 0810 09F0              breq X50
 0812 44C0              xjmp L50
 0814           X50:
 0814           X33:
 0814 8681              ldd R24,z+6
 0816 8133              cpi R24,49
 0818 09F0              breq X51
 081A 40C0              xjmp L50
 081C           X51:
 081C           X34:
 081C 8781              ldd R24,z+7
 081E 8633              cpi R24,54
 0820 09F0              breq X52
 0822 3CC0              xjmp L50
 0824           X52:
 0824           X35:
 0824                   .dbline 208
 0824           ;                               {
 0824                   .dbline 209
 0824           ;                                   pointer_FDT=buff + a;                                       
 0824 1701              movw R2,R14
 0826 0E8C              ldd R0,y+30
 0828 1F8C              ldd R1,y+31
 082A 200C              add R2,R0
 082C 311C              adc R3,R1
 082E 30920900          sts _pointer_FDT+1,R3
 0832 20920800          sts _pointer_FDT,R2
 0836                   .dbline 210
 0836           ;                                       *Dir_Attrib = dir->DIR_Attr;
 0836 2384              ldd R2,z+11
 0838 EC8D              ldd R30,y+28
 083A FD8D              ldd R31,y+29
 083C 2082              std z+0,R2
 083E                   .dbline 213
 083E           ; 
 083E           ;                                       //文件长度
 083E           ;                                       *Size=dir->DIR_FileSize;
 083E F601              movw R30,R12
 0840 248C              ldd R2,z+28
 0842 358C              ldd R3,z+29
 0844 468C              ldd R4,z+30
 0846 578C              ldd R5,z+31
 0848 EA8D              ldd R30,y+26
 084A FB8D              ldd R31,y+27
 084C 2082              std z+0,R2
 084E 3182              std z+1,R3
 0850 4282              std z+2,R4
 0852 5382              std z+3,R5
 0854                   .dbline 216
 0854           ;                                       
 0854           ;                                       //文件起始簇的低16位
 0854           ;                                       dir_cluster = dir->DIR_FstClusLO + (dir->DIR_FstClusHI)*65536;
 0854 F601              movw R30,R12
 0856 2488              ldd R2,z+20
 0858 3588              ldd R3,z+21
 085A 4424              clr R4
 085C 5524              clr R5
 085E 40E0              ldi R20,0
 0860 50E0              ldi R21,0
 0862 61E0              ldi R22,1
 0864 70E0              ldi R23,0
 0866 5A92              st -y,R5
 0868 4A92              st -y,R4
 086A 3A92              st -y,R3
 086C 2A92              st -y,R2
 086E 8A01              movw R16,R20
 0870 9B01              movw R18,R22
 0872 0E940000          xcall empy32s
 0876 F601              movw R30,R12
 0878 7A96              adiw R30,26
 087A 2080              ldd R2,z+0
 087C 3180              ldd R3,z+1
 087E 4424              clr R4
 0880 5524              clr R5
 0882 200E              add R2,R16
 0884 311E              adc R3,R17
 0886 421E              adc R4,R18
 0888 531E              adc R5,R19
 088A 2C8A              std y+20,R2
 088C 3D8A              std y+21,R3
 088E 4E8A              std y+22,R4
 0890 5F8A              std y+23,R5
 0892                   .dbline 219
 0892           ;                                               
 0892           ;                                       //返回起始簇
 0892           ;                                       return(dir_cluster);
 0892 0C89              ldd R16,y+20
 0894 1D89              ldd R17,y+21
 0896 2E89              ldd R18,y+22
 0898 3F89              ldd R19,y+23
 089A 79C0              xjmp L34
 089C           L50:
 089C                   .dbline 222
 089C           ;                               }
 089C           ;                           //搜索mp3文件:
 089C           ;                               else if(dir->DIR_Name[8] == Search_FileExName1[0] && dir->DIR_Name[9] == Search_FileExName1[1] && dir->DIR_Name[10] == Search_FileExName1[2]) //找到要搜索的文件
 089C E0E0              ldi R30,<_Search_FileExName1
 089E F0E0              ldi R31,>_Search_FileExName1
 08A0 2490              lpm R2,Z
 08A2 F601              movw R30,R12
 08A4 3084              ldd R3,z+8
 08A6 3214              cp R3,R2
 08A8 09F0              breq X53
 08AA 55C0              xjmp L52
 08AC           X53:
 08AC           X36:
 08AC E0E0              ldi R30,<_Search_FileExName1+1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -