fat.lis

来自「Atmega64单片机程序(完整工程)」· LIS 代码 · 共 1,740 行 · 第 1/5 页

LIS
1,740
字号
 0204 7320              and R7,R3
 0206 8420              and R8,R4
 0208 9520              and R9,R5
 020A 7301              movw R14,R6
 020C           ;              break ;
 020C 5AC0              xjmp L7
 020E           L11:
 020E           ;         case FAT32 :
 020E           ;              SecIndex=Index*4/Disk->BytsPerSec+Disk->FATStartSec ;
 020E FE01              movw R30,R28
 0210 208C              ldd R2,z+24
 0212 318C              ldd R3,z+25
 0214 428C              ldd R4,z+26
 0216 538C              ldd R5,z+27
 0218 44E0              ldi R20,4
 021A 50E0              ldi R21,0
 021C 60E0              ldi R22,0
 021E 70E0              ldi R23,0
 0220 5A92              st -y,R5
 0222 4A92              st -y,R4
 0224 3A92              st -y,R3
 0226 2A92              st -y,R2
 0228 8A01              movw R16,R20
 022A 9B01              movw R18,R22
 022C 0E940000          xcall empy32u
 0230 EA85              ldd R30,y+10
 0232 FB85              ldd R31,y+11
 0234 6088              ldd R6,z+16
 0236 7188              ldd R7,z+17
 0238 8288              ldd R8,z+18
 023A 9388              ldd R9,z+19
 023C 9A92              st -y,R9
 023E 8A92              st -y,R8
 0240 7A92              st -y,R7
 0242 6A92              st -y,R6
 0244 0E940000          xcall div32u
 0248 1801              movw R2,R16
 024A 2901              movw R4,R18
 024C EA85              ldd R30,y+10
 024E FB85              ldd R31,y+11
 0250 6480              ldd R6,z+4
 0252 7580              ldd R7,z+5
 0254 8680              ldd R8,z+6
 0256 9780              ldd R9,z+7
 0258 260C              add R2,R6
 025A 371C              adc R3,R7
 025C 481C              adc R4,R8
 025E 591C              adc R5,R9
 0260 FE01              movw R30,R28
 0262 2282              std z+2,R2
 0264 3382              std z+3,R3
 0266 4482              std z+4,R4
 0268 5582              std z+5,R5
 026A           ;              ByteIndex=(Index*4)&(Disk->BytsPerSec-1);
 026A 41E0              ldi R20,1
 026C 50E0              ldi R21,0
 026E 60E0              ldi R22,0
 0270 70E0              ldi R23,0
 0272 EA85              ldd R30,y+10
 0274 FB85              ldd R31,y+11
 0276 2088              ldd R2,z+16
 0278 3188              ldd R3,z+17
 027A 4288              ldd R4,z+18
 027C 5388              ldd R5,z+19
 027E 241A              sub R2,R20
 0280 350A              sbc R3,R21
 0282 460A              sbc R4,R22
 0284 570A              sbc R5,R23
 0286 FE01              movw R30,R28
 0288 608C              ldd R6,z+24
 028A 718C              ldd R7,z+25
 028C 828C              ldd R8,z+26
 028E 938C              ldd R9,z+27
 0290 44E0              ldi R20,4
 0292 50E0              ldi R21,0
 0294 60E0              ldi R22,0
 0296 70E0              ldi R23,0
 0298 9A92              st -y,R9
 029A 8A92              st -y,R8
 029C 7A92              st -y,R7
 029E 6A92              st -y,R6
 02A0 8A01              movw R16,R20
 02A2 9B01              movw R18,R22
 02A4 0E940000          xcall empy32u
 02A8 3801              movw R6,R16
 02AA 4901              movw R8,R18
 02AC 6220              and R6,R2
 02AE 7320              and R7,R3
 02B0 8420              and R8,R4
 02B2 9520              and R9,R5
 02B4 7301              movw R14,R6
 02B6           ;              break ;
 02B6 05C0              xjmp L7
 02B8           L6:
 02B8           ;         default :
 02B8           ;              return BAD_CLUS ;
 02B8 07EF              ldi R16,247
 02BA 1FEF              ldi R17,255
 02BC 2FEF              ldi R18,255
 02BE 3FE0              ldi R19,15
 02C0 92C1              xjmp L1
 02C2           L7:
 02C2           ;     }
 02C2           ;     
 02C2           ;     Buf=OpenSec(Drive,SecIndex);
 02C2 FE01              movw R30,R28
 02C4 2280              ldd R2,z+2
 02C6 3380              ldd R3,z+3
 02C8 4480              ldd R4,z+4
 02CA 5580              ldd R5,z+5
 02CC 4882              std y+0,R4
 02CE 5982              std y+1,R5
 02D0 9101              movw R18,R2
 02D2 0E89              ldd R16,y+22
 02D4 0E940000          xcall _OpenSec
 02D8 6801              movw R12,R16
 02DA           ;     if(Buf==NULL)
 02DA 0030              cpi R16,0
 02DC 0107              cpc R16,R17
 02DE 29F4              brne L12
 02E0           X3:
 02E0           ;     {
 02E0           ;         return BAD_CLUS ;
 02E0 07EF              ldi R16,247
 02E2 1FEF              ldi R17,255
 02E4 2FEF              ldi R18,255
 02E6 3FE0              ldi R19,15
 02E8 7EC1              xjmp L1
 02EA           L12:
 02EA           ;     }
 02EA           ;     ReadSec(Drive,SecIndex);
 02EA FE01              movw R30,R28
 02EC 2280              ldd R2,z+2
 02EE 3380              ldd R3,z+3
 02F0 4480              ldd R4,z+4
 02F2 5580              ldd R5,z+5
 02F4 4882              std y+0,R4
 02F6 5982              std y+1,R5
 02F8 9101              movw R18,R2
 02FA 0E89              ldd R16,y+22
 02FC 0E940000          xcall _ReadSec
 0300           ;     
 0300           ;     /* 读取FAT表数据 */
 0300           ;     switch(Disk->FATType)
 0300 EA85              ldd R30,y+10
 0302 FB85              ldd R31,y+11
 0304 A180              ldd R10,z+1
 0306 BB24              clr R11
 0308 AA20              tst R10
 030A 11F4              brne X4
 030C BB20              tst R11
 030E 61F0              breq L17
 0310           X4:
 0310 C501              movw R24,R10
 0312 8130              cpi R24,1
 0314 E0E0              ldi R30,0
 0316 9E07              cpc R25,R30
 0318 09F4              brne X9
 031A BBC0              xjmp L26
 031C           X9:
 031C 8230              cpi R24,2
 031E E0E0              ldi R30,0
 0320 9E07              cpc R25,R30
 0322 09F4              brne X10
 0324 E9C0              xjmp L29
 0326           X10:
 0326 46C1              xjmp L14
 0328           X5:
 0328           ;     {
 0328           L17:
 0328           ;         case FAT12 :
 0328           ;              temp=Buf[ByteIndex];
 0328 F701              movw R30,R14
 032A EC0D              add R30,R12
 032C FD1D              adc R31,R13
 032E A080              ldd R10,z+0
 0330 BB24              clr R11
 0332           ;              ByteIndex++;
 0332 C701              movw R24,R14
 0334 0196              adiw R24,1
 0336 7C01              movw R14,R24
 0338           ;              /* 下一个字节是否在下一个扇区 */
 0338           ;              if(ByteIndex>=Disk->BytsPerSec)
 0338 EA85              ldd R30,y+10
 033A FB85              ldd R31,y+11
 033C 2088              ldd R2,z+16
 033E 3188              ldd R3,z+17
 0340 4288              ldd R4,z+18
 0342 5388              ldd R5,z+19
 0344 3C01              movw R6,R24
 0346 8824              clr R8
 0348 9924              clr R9
 034A 6214              cp R6,R2
 034C 7304              cpc R7,R3
 034E 8404              cpc R8,R4
 0350 9504              cpc R9,R5
 0352 08F4              brsh X11
 0354 4AC0              xjmp L18
 0356           X11:
 0356           ;              {
 0356           ;                  Buf=OpenSec(Drive,SecIndex+1);
 0356 41E0              ldi R20,1
 0358 50E0              ldi R21,0
 035A 60E0              ldi R22,0
 035C 70E0              ldi R23,0
 035E FE01              movw R30,R28
 0360 2280              ldd R2,z+2
 0362 3380              ldd R3,z+3
 0364 4480              ldd R4,z+4
 0366 5580              ldd R5,z+5
 0368 240E              add R2,R20
 036A 351E              adc R3,R21
 036C 461E              adc R4,R22
 036E 571E              adc R5,R23
 0370 4882              std y+0,R4
 0372 5982              std y+1,R5
 0374 9101              movw R18,R2
 0376 0E89              ldd R16,y+22
 0378 0E940000          xcall _OpenSec
 037C 6801              movw R12,R16
 037E           ;                if(Buf==NULL)
 037E 0030              cpi R16,0
 0380 0107              cpc R16,R17
 0382 29F4              brne L20
 0384           X6:
 0384           ;             	 {
 0384           ;                      return BAD_CLUS ;
 0384 07EF              ldi R16,247
 0386 1FEF              ldi R17,255
 0388 2FEF              ldi R18,255
 038A 3FE0              ldi R19,15
 038C 2CC1              xjmp L1
 038E           L20:
 038E           ;             	 }
 038E           ;             	 ReadSec(Drive,SecIndex+1);
 038E 41E0              ldi R20,1
 0390 50E0              ldi R21,0
 0392 60E0              ldi R22,0
 0394 70E0              ldi R23,0
 0396 FE01              movw R30,R28
 0398 2280              ldd R2,z+2
 039A 3380              ldd R3,z+3
 039C 4480              ldd R4,z+4
 039E 5580              ldd R5,z+5
 03A0 240E              add R2,R20
 03A2 351E              adc R3,R21
 03A4 461E              adc R4,R22
 03A6 571E              adc R5,R23
 03A8 4882              std y+0,R4
 03AA 5982              std y+1,R5
 03AC 9101              movw R18,R2
 03AE 0E89              ldd R16,y+22
 03B0 0E940000          xcall _ReadSec
 03B4           ;                temp=temp|((INT16U)Buf[0]<<8);
 03B4 F601              movw R30,R12
 03B6 2080              ldd R2,z+0
 03B8 3324              clr R3
 03BA 322C              mov R3,R2
 03BC 2224              clr R2
 03BE A228              or R10,R2
 03C0 B328              or R11,R3
 03C2           ;                CloseSec(Drive,SecIndex+1);
 03C2 41E0              ldi R20,1
 03C4 50E0              ldi R21,0
 03C6 60E0              ldi R22,0
 03C8 70E0              ldi R23,0
 03CA FE01              movw R30,R28
 03CC 2280              ldd R2,z+2
 03CE 3380              ldd R3,z+3
 03D0 4480              ldd R4,z+4
 03D2 5580              ldd R5,z+5
 03D4 240E              add R2,R20
 03D6 351E              adc R3,R21
 03D8 461E              adc R4,R22
 03DA 571E              adc R5,R23
 03DC 4882              std y+0,R4
 03DE 5982              std y+1,R5
 03E0 9101              movw R18,R2
 03E2 0E89              ldd R16,y+22
 03E4 0E940000          xcall _CloseSec
 03E8           ;              }
 03E8 09C0              xjmp L19
 03EA           L18:
 03EA           ;        	     else 
 03EA           ;              {
 03EA           ;                  temp=temp|((INT16U)Buf[ByteIndex]<<8);
 03EA F701              movw R30,R14
 03EC EC0D              add R30,R12
 03EE FD1D              adc R31,R13
 03F0 2080              ldd R2,z+0
 03F2 3324              clr R3
 03F4 322C              mov R3,R2
 03F6 2224              clr R2
 03F8 A228              or R10,R2
 03FA B328              or R11,R3
 03FC           ;              }
 03FC           L19:
 03FC           ;              /* 判断哪12位有效 */
 03FC           ;              if((Index&0x01)!=0)
 03FC 41E0              ldi R20,1
 03FE 50E0              ldi R21,0
 0400 60E0              ldi R22,0
 0402 70E0              ldi R23,0
 0404 FE01              movw R30,R28
 0406 208C              ldd R2,z+24
 0408 318C              ldd R3,z+25
 040A 428C              ldd R4,z+26
 040C 538C              ldd R5,z+27
 040E 2422              and R2,R20
 0410 3522              and R3,R21
 0412 4622              and R4,R22
 0414 5722              and R5,R23
 0416 40E0              ldi R20,0
 0418 50E0              ldi R21,0
 041A 60E0              ldi R22,0
 041C 70E0              ldi R23,0
 041E 2416              cp R2,R20
 0420 3506              cpc R3,R21
 0422 4606              cpc R4,R22
 0424 5706              cpc R5,R23
 0426 59F0              breq L22
 0428           ;              {
 0428           ;                  temp=temp/16 ;
 0428 1501              movw R2,R10
 042A 3694              lsr R3
 042C 2794              ror R2
 042E 3694              lsr R3
 0430 2794              ror R2
 0432 3694              lsr R3
 0434 2794              ror R2
 0436 3694              lsr R3
 0438 2794              ror R2
 043A 5101              movw R10,R2
 043C           ;              }
 043C 03C0              xjmp L23
 043E           L22:
 043E           ;              else 
 043E           ;              {
 043E           ;                  temp=temp&0x0fff ;
 043E C501              movw R24,R10
 0440 9F70              andi R25,15
 0442 5C01              movw R10,R24
 0444           ;              }
 0444           L23:
 0444           ;              Rt=temp ;
 0444 1501              movw R2,R10
 0446 4424              clr R4
 0448 5524              clr R5

⌨️ 快捷键说明

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