fat.lis

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

LIS
1,740
字号
 0656 AA20              tst R10
 0658 11F4              brne X15
 065A BB20              tst R11
 065C 61F0              breq L40
 065E           X15:
 065E C501              movw R24,R10
 0660 8130              cpi R24,1
 0662 E0E0              ldi R30,0
 0664 9E07              cpc R25,R30
 0666 09F4              brne X21
 0668 73C0              xjmp L41
 066A           X21:
 066A 8230              cpi R24,2
 066C E0E0              ldi R30,0
 066E 9E07              cpc R25,R30
 0670 09F4              brne X22
 0672 C0C0              xjmp L42
 0674           X22:
 0674 91C2              xjmp L30
 0676           X16:
 0676           ;     {
 0676           L40:
 0676           ;         case FAT12 :
 0676           ;              SecIndex=Index*3/(2*Disk->BytsPerSec);
 0676 EA81              ldd R30,y+2
 0678 FB81              ldd R31,y+3
 067A 2088              ldd R2,z+16
 067C 3188              ldd R3,z+17
 067E 4288              ldd R4,z+18
 0680 5388              ldd R5,z+19
 0682 42E0              ldi R20,2
 0684 50E0              ldi R21,0
 0686 60E0              ldi R22,0
 0688 70E0              ldi R23,0
 068A 5A92              st -y,R5
 068C 4A92              st -y,R4
 068E 3A92              st -y,R3
 0690 2A92              st -y,R2
 0692 8A01              movw R16,R20
 0694 9B01              movw R18,R22
 0696 0E940000          xcall empy32u
 069A 1801              movw R2,R16
 069C 2901              movw R4,R18
 069E FE01              movw R30,R28
 06A0 6288              ldd R6,z+18
 06A2 7388              ldd R7,z+19
 06A4 8488              ldd R8,z+20
 06A6 9588              ldd R9,z+21
 06A8 43E0              ldi R20,3
 06AA 50E0              ldi R21,0
 06AC 60E0              ldi R22,0
 06AE 70E0              ldi R23,0
 06B0 9A92              st -y,R9
 06B2 8A92              st -y,R8
 06B4 7A92              st -y,R7
 06B6 6A92              st -y,R6
 06B8 8A01              movw R16,R20
 06BA 9B01              movw R18,R22
 06BC 0E940000          xcall empy32u
 06C0 5A92              st -y,R5
 06C2 4A92              st -y,R4
 06C4 3A92              st -y,R3
 06C6 2A92              st -y,R2
 06C8 0E940000          xcall div32u
 06CC 1D83              std y+5,R17
 06CE 0C83              std y+4,R16
 06D0           ;              ByteIndex=((Index*3)/2)-(SecIndex*Disk->BytsPerSec);
 06D0 EA81              ldd R30,y+2
 06D2 FB81              ldd R31,y+3
 06D4 2088              ldd R2,z+16
 06D6 3188              ldd R3,z+17
 06D8 4288              ldd R4,z+18
 06DA 5388              ldd R5,z+19
 06DC 3801              movw R6,R16
 06DE 8824              clr R8
 06E0 9924              clr R9
 06E2 5A92              st -y,R5
 06E4 4A92              st -y,R4
 06E6 3A92              st -y,R3
 06E8 2A92              st -y,R2
 06EA 8301              movw R16,R6
 06EC 9401              movw R18,R8
 06EE 0E940000          xcall empy32u
 06F2 1801              movw R2,R16
 06F4 2901              movw R4,R18
 06F6 FE01              movw R30,R28
 06F8 6288              ldd R6,z+18
 06FA 7388              ldd R7,z+19
 06FC 8488              ldd R8,z+20
 06FE 9588              ldd R9,z+21
 0700 43E0              ldi R20,3
 0702 50E0              ldi R21,0
 0704 60E0              ldi R22,0
 0706 70E0              ldi R23,0
 0708 9A92              st -y,R9
 070A 8A92              st -y,R8
 070C 7A92              st -y,R7
 070E 6A92              st -y,R6
 0710 8A01              movw R16,R20
 0712 9B01              movw R18,R22
 0714 0E940000          xcall empy32u
 0718 3801              movw R6,R16
 071A 4901              movw R8,R18
 071C 9694              lsr R9
 071E 8794              ror R8
 0720 7794              ror R7
 0722 6794              ror R6
 0724 6218              sub R6,R2
 0726 7308              sbc R7,R3
 0728 8408              sbc R8,R4
 072A 9508              sbc R9,R5
 072C 5301              movw R10,R6
 072E           ;              SecIndex+=Disk->FATStartSec ;
 072E EA81              ldd R30,y+2
 0730 FB81              ldd R31,y+3
 0732 2480              ldd R2,z+4
 0734 3580              ldd R3,z+5
 0736 4680              ldd R4,z+6
 0738 5780              ldd R5,z+7
 073A 6C80              ldd R6,y+4
 073C 7D80              ldd R7,y+5
 073E 8824              clr R8
 0740 9924              clr R9
 0742 620C              add R6,R2
 0744 731C              adc R7,R3
 0746 841C              adc R8,R4
 0748 951C              adc R9,R5
 074A 7D82              std y+5,R7
 074C 6C82              std y+4,R6
 074E           ;              break ;
 074E A3C0              xjmp L38
 0750           L41:
 0750           ;         case FAT16 :
 0750           ;              SecIndex=Index*2/Disk->BytsPerSec+Disk->FATStartSec ;
 0750 FE01              movw R30,R28
 0752 2288              ldd R2,z+18
 0754 3388              ldd R3,z+19
 0756 4488              ldd R4,z+20
 0758 5588              ldd R5,z+21
 075A 42E0              ldi R20,2
 075C 50E0              ldi R21,0
 075E 60E0              ldi R22,0
 0760 70E0              ldi R23,0
 0762 5A92              st -y,R5
 0764 4A92              st -y,R4
 0766 3A92              st -y,R3
 0768 2A92              st -y,R2
 076A 8A01              movw R16,R20
 076C 9B01              movw R18,R22
 076E 0E940000          xcall empy32u
 0772 EA81              ldd R30,y+2
 0774 FB81              ldd R31,y+3
 0776 6088              ldd R6,z+16
 0778 7188              ldd R7,z+17
 077A 8288              ldd R8,z+18
 077C 9388              ldd R9,z+19
 077E 9A92              st -y,R9
 0780 8A92              st -y,R8
 0782 7A92              st -y,R7
 0784 6A92              st -y,R6
 0786 0E940000          xcall div32u
 078A 1801              movw R2,R16
 078C 2901              movw R4,R18
 078E EA81              ldd R30,y+2
 0790 FB81              ldd R31,y+3
 0792 6480              ldd R6,z+4
 0794 7580              ldd R7,z+5
 0796 8680              ldd R8,z+6
 0798 9780              ldd R9,z+7
 079A 260C              add R2,R6
 079C 371C              adc R3,R7
 079E 481C              adc R4,R8
 07A0 591C              adc R5,R9
 07A2 3D82              std y+5,R3
 07A4 2C82              std y+4,R2
 07A6           ;              ByteIndex=(Index*2)&(Disk->BytsPerSec-1);
 07A6 41E0              ldi R20,1
 07A8 50E0              ldi R21,0
 07AA 60E0              ldi R22,0
 07AC 70E0              ldi R23,0
 07AE EA81              ldd R30,y+2
 07B0 FB81              ldd R31,y+3
 07B2 2088              ldd R2,z+16
 07B4 3188              ldd R3,z+17
 07B6 4288              ldd R4,z+18
 07B8 5388              ldd R5,z+19
 07BA 241A              sub R2,R20
 07BC 350A              sbc R3,R21
 07BE 460A              sbc R4,R22
 07C0 570A              sbc R5,R23
 07C2 FE01              movw R30,R28
 07C4 6288              ldd R6,z+18
 07C6 7388              ldd R7,z+19
 07C8 8488              ldd R8,z+20
 07CA 9588              ldd R9,z+21
 07CC 42E0              ldi R20,2
 07CE 50E0              ldi R21,0
 07D0 60E0              ldi R22,0
 07D2 70E0              ldi R23,0
 07D4 9A92              st -y,R9
 07D6 8A92              st -y,R8
 07D8 7A92              st -y,R7
 07DA 6A92              st -y,R6
 07DC 8A01              movw R16,R20
 07DE 9B01              movw R18,R22
 07E0 0E940000          xcall empy32u
 07E4 3801              movw R6,R16
 07E6 4901              movw R8,R18
 07E8 6220              and R6,R2
 07EA 7320              and R7,R3
 07EC 8420              and R8,R4
 07EE 9520              and R9,R5
 07F0 5301              movw R10,R6
 07F2           ;              break ;
 07F2 51C0              xjmp L38
 07F4           L42:
 07F4           ;         case FAT32 :
 07F4           ;              SecIndex=Index*4/Disk->BytsPerSec+Disk->FATStartSec ;
 07F4 FE01              movw R30,R28
 07F6 2288              ldd R2,z+18
 07F8 3388              ldd R3,z+19
 07FA 4488              ldd R4,z+20
 07FC 5588              ldd R5,z+21
 07FE 44E0              ldi R20,4
 0800 50E0              ldi R21,0
 0802 60E0              ldi R22,0
 0804 70E0              ldi R23,0
 0806 5A92              st -y,R5
 0808 4A92              st -y,R4
 080A 3A92              st -y,R3
 080C 2A92              st -y,R2
 080E 8A01              movw R16,R20
 0810 9B01              movw R18,R22
 0812 0E940000          xcall empy32u
 0816 EA81              ldd R30,y+2
 0818 FB81              ldd R31,y+3
 081A 6088              ldd R6,z+16
 081C 7188              ldd R7,z+17
 081E 8288              ldd R8,z+18
 0820 9388              ldd R9,z+19
 0822 9A92              st -y,R9
 0824 8A92              st -y,R8
 0826 7A92              st -y,R7
 0828 6A92              st -y,R6
 082A 0E940000          xcall div32u
 082E 1801              movw R2,R16
 0830 2901              movw R4,R18
 0832 EA81              ldd R30,y+2
 0834 FB81              ldd R31,y+3
 0836 6480              ldd R6,z+4
 0838 7580              ldd R7,z+5
 083A 8680              ldd R8,z+6
 083C 9780              ldd R9,z+7
 083E 260C              add R2,R6
 0840 371C              adc R3,R7
 0842 481C              adc R4,R8
 0844 591C              adc R5,R9
 0846 3D82              std y+5,R3
 0848 2C82              std y+4,R2
 084A           ;              ByteIndex=(Index*4)&(Disk->BytsPerSec-1);
 084A 41E0              ldi R20,1
 084C 50E0              ldi R21,0
 084E 60E0              ldi R22,0
 0850 70E0              ldi R23,0
 0852 EA81              ldd R30,y+2
 0854 FB81              ldd R31,y+3
 0856 2088              ldd R2,z+16
 0858 3188              ldd R3,z+17
 085A 4288              ldd R4,z+18
 085C 5388              ldd R5,z+19
 085E 241A              sub R2,R20
 0860 350A              sbc R3,R21
 0862 460A              sbc R4,R22
 0864 570A              sbc R5,R23
 0866 FE01              movw R30,R28
 0868 6288              ldd R6,z+18
 086A 7388              ldd R7,z+19
 086C 8488              ldd R8,z+20
 086E 9588              ldd R9,z+21
 0870 44E0              ldi R20,4
 0872 50E0              ldi R21,0
 0874 60E0              ldi R22,0
 0876 70E0              ldi R23,0
 0878 9A92              st -y,R9
 087A 8A92              st -y,R8
 087C 7A92              st -y,R7
 087E 6A92              st -y,R6
 0880 8A01              movw R16,R20
 0882 9B01              movw R18,R22
 0884 0E940000          xcall empy32u
 0888 3801              movw R6,R16
 088A 4901              movw R8,R18
 088C 6220              and R6,R2
 088E 7320              and R7,R3
 0890 8420              and R8,R4
 0892 9520              and R9,R5
 0894 5301              movw R10,R6
 0896           ;              break ;
 0896           ;         default :
 0896           ;              return ;
 0896           L38:
 0896           ;     }
 0896           ;     
 0896           ;     Buf=OpenSec(Drive,SecIndex);
 0896 2C80              ldd R2,y+4
 0898 3D80              ldd R3,y+5
 089A 4424              clr R4
 089C 5524              clr R5
 089E 4882              std y+0,R4
 08A0 5982              std y+1,R5
 08A2 9101              movw R18,R2
 08A4 0889              ldd R16,y+16
 08A6 0E940000          xcall _OpenSec
 08AA 7801              movw R14,R16
 08AC           ;     if(Buf==NULL)
 08AC 0030              cpi R16,0
 08AE 0107              cpc R16,R17
 08B0 09F4              brne L43
 08B2           X17:
 08B2           ;     {
 08B2           ;         return ;
 08B2 72C1              xjmp L30
 08B4           L43:
 08B4           ;     }
 08B4           ;     ReadSec(Drive,SecIndex);
 08B4 2C80              ldd R2,y+4
 08B6 3D80              ldd R3,y+5
 08B8 4424              clr R4
 08BA 5524              clr R5
 08BC 4882              std y+0,R4
 08BE 5982              std y+1,R5
 08C0 9101              movw R18,R2
 08C2 0889              ldd R16,y+16
 08C4 0E940000          xcall _ReadSec
 08C8           ;     
 08C8           ;     switch(Disk->FATType)
 08C8 EA81              ldd R30,y+2
 08CA FB81              ldd R31,y+3
 08CC C180              ldd R12,z+1
 08CE DD24              clr R13
 08D0 CC20              tst R12
 08D2 11F4              brne X18
 08D4 DD20              tst R13
 08D6 61F0              breq L48
 08D8           X18:
 08D8 C601              movw R24,R12
 08DA 8130              cpi R24,1
 08DC E0E0              ldi R30,0

⌨️ 快捷键说明

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