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

📄 fat16.lis

📁 AVR单片机做的MP3
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 00A0 FA93              st -y,R31
 00A2 EA93              st -y,R30
 00A4 9A93              st -y,R25
 00A6 8A93              st -y,R24
 00A8 00D0              rcall asgncblk
 00AA                   .dbline 89
 00AA FA01              movw R30,R20
 00AC 2080              ldd R2,z+0
 00AE 3324              clr R3
 00B0 822D              mov R24,R2
 00B2 853E              cpi R24,229
 00B4 11F0              breq L21
 00B6 8823              tst R24
 00B8 11F4              brne L19
 00BA           L21:
 00BA                   .dbline 89
 00BA           ;  if((a[0]==0xe5)||(a[0]==0)) return 0;
 00BA 0027              clr R16
 00BC 1FC0              rjmp L16
 00BE           L19:
 00BE                   .dbline 90
 00BE           ;  for(i=0;i<3;i++)
 00BE 6627              clr R22
 00C0 1AC0              rjmp L25
 00C2           L22:
 00C2                   .dbline 91
 00C2           ;  {
 00C2                   .dbline 92
 00C2           ;   if((a[i+8]!=b[i])&&(a[i+8]!=c[i]))
 00C2 E62F              mov R30,R22
 00C4 FF27              clr R31
 00C6 E40F              add R30,R20
 00C8 F51F              adc R31,R21
 00CA 2084              ldd R2,z+8
 00CC 3324              clr R3
 00CE CE01              movw R24,R28
 00D0 E62F              mov R30,R22
 00D2 FF27              clr R31
 00D4 E80F              add R30,R24
 00D6 F91F              adc R31,R25
 00D8 4080              ldd R4,z+0
 00DA 2414              cp R2,R4
 00DC 59F0              breq L26
 00DE CE01              movw R24,R28
 00E0 0396              adiw R24,3
 00E2 E62F              mov R30,R22
 00E4 FF27              clr R31
 00E6 E80F              add R30,R24
 00E8 F91F              adc R31,R25
 00EA 4080              ldd R4,z+0
 00EC 2414              cp R2,R4
 00EE 11F0              breq L26
 00F0                   .dbline 93
 00F0           ;      return 0;
 00F0 0027              clr R16
 00F2 04C0              rjmp L16
 00F4           L26:
 00F4                   .dbline 94
 00F4           L23:
 00F4                   .dbline 90
 00F4 6395              inc R22
 00F6           L25:
 00F6                   .dbline 90
 00F6 6330              cpi R22,3
 00F8 20F3              brlo L22
 00FA                   .dbline 95
 00FA           ;  }
 00FA           ;   return 1;
 00FA 01E0              ldi R16,1
 00FC                   .dbline -2
 00FC           L16:
 00FC 2696              adiw R28,6
 00FE 00D0              rcall pop_gset2
 0100                   .dbline 0 ; func end
 0100 0895              ret
 0102                   .dbsym l c 3 A[3:3]c
 0102                   .dbsym l b 0 A[3:3]c
 0102                   .dbsym r a 20 pc
 0102                   .dbsym r i 22 c
 0102                   .dbsym r A 22 pV
 0102                   .dbend
 0102                   .dbfunc e ReadBPB _ReadBPB fV
 0102                   .dbstruct 0 512 .1
 0102                   .dbfield 0 BS_jmpBoot A[3:3]c
 0102                   .dbfield 3 BS_OEMName A[8:8]c
 0102                   .dbfield 11 BPB_BytesPerSec i
 0102                   .dbfield 13 BPB_SecPerClus c
 0102                   .dbfield 14 BPB_RsvdSecCnt i
 0102                   .dbfield 16 BPB_NumFATs c
 0102                   .dbfield 17 BPB_RootEntCnt i
 0102                   .dbfield 19 BPB_TotSec16 i
 0102                   .dbfield 21 BPB_Media c
 0102                   .dbfield 22 BPB_FATSz16 i
 0102                   .dbfield 24 BPB_SecPerTrk i
 0102                   .dbfield 26 BPB_NumHeads i
 0102                   .dbfield 28 BPB_HiddSec l
 0102                   .dbfield 32 BPB_TotSec32 l
 0102                   .dbfield 36 BS_DrvNum c
 0102                   .dbfield 37 BS_Reservedl c
 0102                   .dbfield 38 BS_BootSig c
 0102                   .dbfield 39 BS_VolID l
 0102                   .dbfield 43 BS_VolLab A[11:11]c
 0102                   .dbfield 54 BS_FilSysType A[8:8]c
 0102                   .dbfield 62 ExecutableCode A[448:448]c
 0102                   .dbfield 510 ExecutableMarker A[2:2]c
 0102                   .dbend
 0102           ;            BPB -> R10,R11
                        .even
 0102           _ReadBPB::
 0102 00D0              rcall push_gset3
 0104                   .dbline -1
 0104                   .dbline 102
 0104           ; 
 0104           ; }
 0104           ; //********************************************************************************************
 0104           ; //读取BPB数据结构
 0104           ; void ReadBPB(void)
 0104           ; //********************************************************************************************
 0104           ; {
 0104                   .dbline 103
 0104           ;       FAT_BPB* BPB = (FAT_BPB*)BUFFER;
 0104 80E0              ldi R24,<_BUFFER
 0106 90E0              ldi R25,>_BUFFER
 0108 5C01              movw R10,R24
 010A                   .dbline 104
 010A           ;       ReadBlock(0);
 010A 00E0              ldi R16,0
 010C 10E0              ldi R17,0
 010E 20E0              ldi R18,0
 0110 30E0              ldi R19,0
 0112 7CDF              rcall _ReadBlock
 0114                   .dbline 107
 0114           ; 
 0114           ;       //缓存相关参数
 0114           ;       BPB_SecPerClus  =  BPB->BPB_SecPerClus;
 0114 F501              movw R30,R10
 0116 2584              ldd R2,z+13
 0118 20922100          sts _BPB_SecPerClus,R2
 011C                   .dbline 108
 011C           ;       BPB_RsvdSecCnt  =  BPB->BPB_RsvdSecCnt;
 011C F501              movw R30,R10
 011E 2684              ldd R2,z+14
 0120 3784              ldd R3,z+15
 0122 30922000          sts _BPB_RsvdSecCnt+1,R3
 0126 20921F00          sts _BPB_RsvdSecCnt,R2
 012A                   .dbline 109
 012A           ;       BPB_NumFATs     =  BPB->BPB_NumFATs;
 012A F501              movw R30,R10
 012C 2088              ldd R2,z+16
 012E 20921E00          sts _BPB_NumFATs,R2
 0132                   .dbline 110
 0132           ;       BPB_RootEntCnt  =  BPB->BPB_RootEntCnt;
 0132 F501              movw R30,R10
 0134 2188              ldd R2,z+17
 0136 3288              ldd R3,z+18
 0138 30921D00          sts _BPB_RootEntCnt+1,R3
 013C 20921C00          sts _BPB_RootEntCnt,R2
 0140                   .dbline 111
 0140           ;       BPB_TotSec16    =  BPB->BPB_TotSec16;
 0140 F501              movw R30,R10
 0142 2388              ldd R2,z+19
 0144 3488              ldd R3,z+20
 0146 30921B00          sts _BPB_TotSec16+1,R3
 014A 20921A00          sts _BPB_TotSec16,R2
 014E                   .dbline 112
 014E           ;       BPB_FATSz16     =  BPB->BPB_FATSz16;
 014E F501              movw R30,R10
 0150 2688              ldd R2,z+22
 0152 3788              ldd R3,z+23
 0154 30921900          sts _BPB_FATSz16+1,R3
 0158 20921800          sts _BPB_FATSz16,R2
 015C                   .dbline 113
 015C           ;       BPB_HiddSec     =  BPB->BPB_HiddSec;
 015C F501              movw R30,R10
 015E 248C              ldd R2,z+28
 0160 358C              ldd R3,z+29
 0162 468C              ldd R4,z+30
 0164 578C              ldd R5,z+31
 0166 30921500          sts _BPB_HiddSec+1,R3
 016A 20921400          sts _BPB_HiddSec,R2
 016E 50921700          sts _BPB_HiddSec+2+1,R5
 0172 40921600          sts _BPB_HiddSec+2,R4
 0176                   .dbline -2
 0176           L28:
 0176 00D0              rcall pop_gset3
 0178                   .dbline 0 ; func end
 0178 0895              ret
 017A                   .dbsym r BPB 10 pS[.1]
 017A                   .dbend
 017A                   .dbfunc s DirStartSec _DirStartSec fl
                        .even
 017A           _DirStartSec:
 017A                   .dbline -1
 017A                   .dbline 121
 017A           ; 
 017A           ; }
 017A           ; 
 017A           ; //********************************************************************************************
 017A           ; //获取根目录开始扇区号
 017A           ; static uint32 DirStartSec(void)
 017A           ; //********************************************************************************************
 017A           ; {
 017A                   .dbline 122
 017A           ;       return BPB_RsvdSecCnt + BPB_NumFATs * BPB_FATSz16;
 017A 20911800          lds R18,_BPB_FATSz16
 017E 30911900          lds R19,_BPB_FATSz16+1
 0182 00911E00          lds R16,_BPB_NumFATs
 0186 1127              clr R17
 0188 00D0              rcall empy16s
 018A 20901F00          lds R2,_BPB_RsvdSecCnt
 018E 30902000          lds R3,_BPB_RsvdSecCnt+1
 0192 200E              add R2,R16
 0194 311E              adc R3,R17
 0196 4424              clr R4
 0198 5524              clr R5
 019A 8101              movw R16,R2
 019C 9201              movw R18,R4
 019E                   .dbline -2
 019E           L29:
 019E                   .dbline 0 ; func end
 019E 0895              ret
 01A0                   .dbend
 01A0                   .dbfunc s DataStartSec _DataStartSec fl
                        .even
 01A0           _DataStartSec:
 01A0                   .dbline -1
 01A0                   .dbline 129
 01A0           ; }
 01A0           ; 
 01A0           ; //********************************************************************************************
 01A0           ; //获取数据区开始扇区号
 01A0           ; static uint32 DataStartSec(void)
 01A0           ; //********************************************************************************************
 01A0           ; {
 01A0                   .dbline 130
 01A0           ;       return DirStartSec() +( BPB_RootEntCnt >>4);
 01A0 ECDF              rcall _DirStartSec
 01A2 20901C00          lds R2,_BPB_RootEntCnt
 01A6 30901D00          lds R3,_BPB_RootEntCnt+1
 01AA 3694              lsr R3
 01AC 2794              ror R2
 01AE 3694              lsr R3
 01B0 2794              ror R2
 01B2 3694              lsr R3
 01B4 2794              ror R2
 01B6 3694              lsr R3
 01B8 2794              ror R2
 01BA 4424              clr R4
 01BC 5524              clr R5
 01BE 020D              add R16,R2
 01C0 131D              adc R17,R3
 01C2 241D              adc R18,R4
 01C4 351D              adc R19,R5
 01C6                   .dbline -2
 01C6           L30:
 01C6                   .dbline 0 ; func end
 01C6 0895              ret
 01C8                   .dbend
 01C8                   .dbfunc s GetDirSecCount _GetDirSecCount fi
                        .even
 01C8           _GetDirSecCount:
 01C8                   .dbline -1
 01C8                   .dbline 137
 01C8           ; } 
 01C8           ; 
 01C8           ; //********************************************************************************************
 01C8           ; //目录项占用的扇区数
 01C8           ; static uint16 GetDirSecCount(void)
 01C8           ; //********************************************************************************************
 01C8           ; {
 01C8                   .dbline 138
 01C8           ;       return (BPB_RootEntCnt >>4);
 01C8 00911C00          lds R16,_BPB_RootEntCnt
 01CC 10911D00          lds R17,_BPB_RootEntCnt+1
 01D0 1695              lsr R17
 01D2 0795              ror R16
 01D4 1695              lsr R17
 01D6 0795              ror R16
 01D8 1695              lsr R17
 01DA 0795              ror R16
 01DC 1695              lsr R17
 01DE 0795              ror R16
 01E0                   .dbline -2
 01E0           L31:
 01E0                   .dbline 0 ; func end
 01E0 0895              ret
 01E2                   .dbend
 01E2                   .dbfunc e ClusConvLBA _ClusConvLBA fl
 01E2           ;         ClusID -> R10,R11
                        .even
 01E2           _ClusConvLBA::
 01E2 00D0              rcall push_gset3
 01E4 5801              movw R10,R16
 01E6                   .dbline -1
 01E6                   .dbline 145
 01E6           ; }
 01E6           ; 
 01E6           ; //********************************************************************************************
 01E6           ; //获取一个簇的开始扇区
 01E6           ; uint32 ClusConvLBA(uint16 ClusID)
 01E6           ; //********************************************************************************************
 01E6           ; {
 01E6                   .dbline 146
 01E6           ;     return DataStartSec() + ((uint32)BPB_SecPerClus) * (ClusID - 2); 
 01E6 DCDF              rcall _DataStartSec
 01E8 1801              movw R2,R16
 01EA 2901              movw R4,R18
 01EC C501              movw R24,R10
 01EE 0297              sbiw R24,2
 01F0 3C01              movw R6,R24
 01F2 8824              clr R8
 01F4 9924              clr R9
 01F6 40912100          lds R20,_BPB_SecPerClus
 01FA 5527              clr R21
 01FC 6627              clr R22
 01FE 7727              clr R23
 0200 9A92              st -y,R9
 0202 8A92              st -y,R8
 0204 7A92              st -y,R7
 0206 6A92              st -y,R6
 0208 8A01              movw R16,R20
 020A 9B01              movw R18,R22
 020C 00D0              rcall empy32u
 020E 200E              add R2,R16
 0210 311E              adc R3,R17
 0212 421E              adc R4,R18
 0214 531E              adc R5,R19
 0216 8101              movw R16,R2
 0218 9201              movw R18,R4
 021A                   .dbline -2
 021A           L32:
 021A 00D0              rcall pop_gset3
 021C                   .dbline 0 ; func end
 021C 0895              ret
 021E                   .dbsym r ClusID 10 i
 021E                   .dbend

⌨️ 快捷键说明

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