disk.lis
来自「Atmega64单片机程序(完整工程)」· LIS 代码 · 共 1,577 行 · 第 1/5 页
LIS
1,577 行
076E F001 movw R30,R0
0770 80E0 ldi R24,<_DiskInfo+2
0772 90E0 ldi R25,>_DiskInfo+2
0774 E80F add R30,R24
0776 F91F adc R31,R25
0778 2080 ldd R2,z+0
077A 3324 clr R3
077C 4424 clr R4
077E 5524 clr R5
0780 FE01 movw R30,R28
0782 6280 ldd R6,z+2
0784 7380 ldd R7,z+3
0786 8480 ldd R8,z+4
0788 9580 ldd R9,z+5
078A 5A92 st -y,R5
078C 4A92 st -y,R4
078E 3A92 st -y,R3
0790 2A92 st -y,R2
0792 8301 movw R16,R6
0794 9401 movw R18,R8
0796 0E940000 xcall div32u
079A FE01 movw R30,R28
079C 0283 std z+2,R16
079E 1383 std z+3,R17
07A0 2483 std z+4,R18
07A2 3583 std z+5,R19
07A4 ; DiskInfo[i].ClusPerData=temp1 ;
07A4 8EE2 ldi R24,46
07A6 8A9D mul R24,R10
07A8 F001 movw R30,R0
07AA 80E0 ldi R24,<_DiskInfo+32
07AC 90E0 ldi R25,>_DiskInfo+32
07AE E80F add R30,R24
07B0 F91F adc R31,R25
07B2 DE01 movw R26,R28
07B4 1296 adiw R26,2
07B6 2D90 ld R2,x+
07B8 3D90 ld R3,x+
07BA 4D90 ld R4,x+
07BC 5C90 ld R5,x
07BE 2082 std z+0,R2
07C0 3182 std z+1,R3
07C2 4282 std z+2,R4
07C4 5382 std z+3,R5
07C6 ;
07C6 ; /* 判断是FAT12、FAT16还是FAT32 */
07C6 ; if(temp1<4085)
07C6 45EF ldi R20,245
07C8 5FE0 ldi R21,15
07CA 60E0 ldi R22,0
07CC 70E0 ldi R23,0
07CE FE01 movw R30,R28
07D0 2280 ldd R2,z+2
07D2 3380 ldd R3,z+3
07D4 4480 ldd R4,z+4
07D6 5580 ldd R5,z+5
07D8 2416 cp R2,R20
07DA 3506 cpc R3,R21
07DC 4606 cpc R4,R22
07DE 5706 cpc R5,R23
07E0 70F4 brsh L91
07E2 ; {
07E2 ; DiskInfo[i].FATType=FAT12 ;
07E2 8EE2 ldi R24,46
07E4 8A9D mul R24,R10
07E6 F001 movw R30,R0
07E8 80E0 ldi R24,<_DiskInfo+1
07EA 90E0 ldi R25,>_DiskInfo+1
07EC E80F add R30,R24
07EE F91F adc R31,R25
07F0 2224 clr R2
07F2 2082 std z+0,R2
07F4 ; #if FS_DEBUG_EN
07F4 ; #if USART1_EN
07F4 ; Uart1_SendString("\n10.File System is FAT12\n");//调试用
07F4 00E0 ldi R16,<L94
07F6 10E0 ldi R17,>L94
07F8 0E940000 xcall _Uart1_SendString
07FC ; #endif
07FC ; #endif
07FC ; }
07FC 8BC0 xjmp L92
07FE L91:
07FE ; else if(temp1<65525)
07FE 45EF ldi R20,245
0800 5FEF ldi R21,255
0802 60E0 ldi R22,0
0804 70E0 ldi R23,0
0806 FE01 movw R30,R28
0808 2280 ldd R2,z+2
080A 3380 ldd R3,z+3
080C 4480 ldd R4,z+4
080E 5580 ldd R5,z+5
0810 2416 cp R2,R20
0812 3506 cpc R3,R21
0814 4606 cpc R4,R22
0816 5706 cpc R5,R23
0818 70F4 brsh L95
081A ; {
081A ; DiskInfo[i].FATType=FAT16 ;
081A 8EE2 ldi R24,46
081C 8A9D mul R24,R10
081E F001 movw R30,R0
0820 80E0 ldi R24,<_DiskInfo+1
0822 90E0 ldi R25,>_DiskInfo+1
0824 E80F add R30,R24
0826 F91F adc R31,R25
0828 81E0 ldi R24,1
082A 8083 std z+0,R24
082C ; #if FS_DEBUG_EN
082C ; #if USART1_EN
082C ; Uart1_SendString("\n10.File System is FAT16\n");//调试用
082C 00E0 ldi R16,<L98
082E 10E0 ldi R17,>L98
0830 0E940000 xcall _Uart1_SendString
0834 ; #endif
0834 ; #endif
0834 ; }
0834 6FC0 xjmp L96
0836 L95:
0836 ; else
0836 ; {
0836 ; DiskInfo[i].FATType=FAT32 ;
0836 8EE2 ldi R24,46
0838 8A9D mul R24,R10
083A F001 movw R30,R0
083C 80E0 ldi R24,<_DiskInfo+1
083E 90E0 ldi R25,>_DiskInfo+1
0840 E80F add R30,R24
0842 F91F adc R31,R25
0844 82E0 ldi R24,2
0846 8083 std z+0,R24
0848 ; #if FS_DEBUG_EN
0848 ; //#if USART1_EN
0848 ; Uart1_SendString("\n10.File System is FAT32\n");//调试用
0848 00E0 ldi R16,<L100
084A 10E0 ldi R17,>L100
084C 0E940000 xcall _Uart1_SendString
0850 ; //#endif
0850 ; #endif
0850 ;
0850 ; /* FAT32 RootDirTable为开始簇号 */
0850 ; DiskInfo[i].RootDirTable= ((INT32U)Buf[45]<<8)+Buf[44];
0850 88E0 ldi R24,8
0852 90E0 ldi R25,0
0854 F701 movw R30,R14
0856 25A4 ldd R2,z+45
0858 3324 clr R3
085A 4424 clr R4
085C 5524 clr R5
085E 8A93 st -y,R24
0860 8101 movw R16,R2
0862 9201 movw R18,R4
0864 0E940000 xcall lsl32
0868 1801 movw R2,R16
086A 2901 movw R4,R18
086C F701 movw R30,R14
086E 64A4 ldd R6,z+44
0870 7724 clr R7
0872 8824 clr R8
0874 9924 clr R9
0876 260C add R2,R6
0878 371C adc R3,R7
087A 481C adc R4,R8
087C 591C adc R5,R9
087E 8EE2 ldi R24,46
0880 8A9D mul R24,R10
0882 F001 movw R30,R0
0884 80E0 ldi R24,<_DiskInfo+20
0886 90E0 ldi R25,>_DiskInfo+20
0888 E80F add R30,R24
088A F91F adc R31,R25
088C 2082 std z+0,R2
088E 3182 std z+1,R3
0890 4282 std z+2,R4
0892 5382 std z+3,R5
0894 ; DiskInfo[i].RootDirTable|=(((INT32U)Buf[46]<<16)+((INT32U)Buf[47]<<24));
0894 8EE2 ldi R24,46
0896 8A9D mul R24,R10
0898 1001 movw R2,R0
089A 80E0 ldi R24,<_DiskInfo+20
089C 90E0 ldi R25,>_DiskInfo+20
089E 280E add R2,R24
08A0 391E adc R3,R25
08A2 88E1 ldi R24,24
08A4 90E0 ldi R25,0
08A6 F701 movw R30,R14
08A8 47A4 ldd R4,z+47
08AA 5524 clr R5
08AC 6624 clr R6
08AE 7724 clr R7
08B0 8A93 st -y,R24
08B2 8201 movw R16,R4
08B4 9301 movw R18,R6
08B6 0E940000 xcall lsl32
08BA F701 movw R30,R14
08BC 46A4 ldd R4,z+46
08BE 5524 clr R5
08C0 6624 clr R6
08C2 7724 clr R7
08C4 3201 movw R6,R4
08C6 4424 clr R4
08C8 5524 clr R5
08CA 400E add R4,R16
08CC 511E adc R5,R17
08CE 621E adc R6,R18
08D0 731E adc R7,R19
08D2 F101 movw R30,R2
08D4 4081 ldd R20,z+0
08D6 5181 ldd R21,z+1
08D8 6281 ldd R22,z+2
08DA 7381 ldd R23,z+3
08DC 4429 or R20,R4
08DE 5529 or R21,R5
08E0 6629 or R22,R6
08E2 7729 or R23,R7
08E4 4083 std z+0,R20
08E6 5183 std z+1,R21
08E8 6283 std z+2,R22
08EA 7383 std z+3,R23
08EC ; DiskInfo[i].PathClusIndex=DiskInfo[i].RootDirTable ;
08EC 8EE2 ldi R24,46
08EE 8A9D mul R24,R10
08F0 80E0 ldi R24,<_DiskInfo+20
08F2 90E0 ldi R25,>_DiskInfo+20
08F4 F001 movw R30,R0
08F6 E80F add R30,R24
08F8 F91F adc R31,R25
08FA 2080 ldd R2,z+0
08FC 3180 ldd R3,z+1
08FE 4280 ldd R4,z+2
0900 5380 ldd R5,z+3
0902 80E0 ldi R24,<_DiskInfo+36
0904 90E0 ldi R25,>_DiskInfo+36
0906 F001 movw R30,R0
0908 E80F add R30,R24
090A F91F adc R31,R25
090C 2082 std z+0,R2
090E 3182 std z+1,R3
0910 4282 std z+2,R4
0912 5382 std z+3,R5
0914 ; }
0914 L96:
0914 L92:
0914 ; }
0914 L42:
0914 ; CloseSec(DiskInfo[i].Drive,0);/* 关闭扇区 */
0914 40E0 ldi R20,0
0916 50E0 ldi R21,0
0918 60E0 ldi R22,0
091A 70E0 ldi R23,0
091C 6883 std y+0,R22
091E 7983 std y+1,R23
0920 9A01 movw R18,R20
0922 8EE2 ldi R24,46
0924 8A9D mul R24,R10
0926 F001 movw R30,R0
0928 80E0 ldi R24,<_DiskInfo
092A 90E0 ldi R25,>_DiskInfo
092C E80F add R30,R24
092E F91F adc R31,R25
0930 0081 ldd R16,z+0
0932 0E940000 xcall _CloseSec
0936 ; }
0936 L40:
0936 L37:
0936 A394 inc R10
0938 L39:
0938 8A2D mov R24,R10
093A 8130 cpi R24,1
093C 08F4 brsh X7
093E 6ACC xjmp L36
0940 X7:
0940 L30:
0940 2696 adiw R28,6
0942 0E940000 xcall pop_gset5
0946 .dbline 0 ; func end
0946 0895 ret
0948 ; Pa -> y+0
0948 ; Drive -> R10
.even
0948 _RemoveFileDriver::
0948 0E940000 xcall push_gset3
094C A02E mov R10,R16
094E 2B97 sbiw R28,11
0950 ; }
0950 ; }
0950 ;
0950 ; /*********************************************************************************************************
0950 ; ** 函数名称: RemoveFileDriver
0950 ; ** 功能描述: 删除一个底层驱动程序
0950 ; ** 输 入: Drive:逻辑驱动器号
0950 ; ** 输 出: 无
0950 ; ** 全局变量: DiskInfo
0950 ; ** 调用模块: 无
0950 ; ** 作 者: 陈明计
0950 ; ** 日 期: 2003年9月5日
0950 ; **-------------------------------------------------------------------------------------------------------
0950 ; ** 修 改 人: 陈明计
0950 ; ** 日 期: 2004年4月10日
0950 ; **------------------------------------------------------------------------------------------------------
0950 ; ********************************************************************************************************/
0950 ; void RemoveFileDriver(INT8U Drive)
0950 ; {
0950 ; Disk_RW_Parameter Pa ;
0950 ;
0950 ; if(Drive<MAX_DRIVES)
0950 8A2D mov R24,R10
0952 8130 cpi R24,1
0954 08F0 brlo X8
0956 D1C0 xjmp L106
0958 X8:
0958 ; if(DiskInfo[Drive].Drive!=EMPTY_DRIVE
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?