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 + -
显示快捷键?