dir.lis
来自「Atmega64单片机程序(完整工程)」· LIS 代码 · 共 1,634 行 · 第 1/5 页
LIS
1,634 行
05F0 2E8E std y+30,R2
05F2 ; //temp.FstClusHI=ClusIndex/0x10000 ;
05F2 ; temp.FstClusHI=(INT16U)(Temp1>>16);
05F2 FE01 movw R30,R28
05F4 24A0 ldd R2,z+36
05F6 35A0 ldd R3,z+37
05F8 46A0 ldd R4,z+38
05FA 57A0 ldd R5,z+39
05FC 1201 movw R2,R4
05FE 398E std y+25,R3
0600 288E std y+24,R2
0602 ;
0602 ; Rt=AddFDT(Drive,Temp1,&temp);
0602 CE01 movw R24,R28
0604 0496 adiw R24,4
0606 9B83 std y+3,R25
0608 8A83 std y+2,R24
060A FE01 movw R30,R28
060C 24A0 ldd R2,z+36
060E 35A0 ldd R3,z+37
0610 46A0 ldd R4,z+38
0612 57A0 ldd R5,z+39
0614 4882 std y+0,R4
0616 5982 std y+1,R5
0618 9101 movw R18,R2
061A 0C2D mov R16,R12
061C 0E940000 xcall _AddFDT
0620 A02E mov R10,R16
0622 ; }
0622 0BC0 xjmp L128
0624 L127:
0624 ; else
0624 ; {
0624 ; FATDelClusChain(Drive,Temp1);
0624 FE01 movw R30,R28
0626 24A0 ldd R2,z+36
0628 35A0 ldd R3,z+37
062A 46A0 ldd R4,z+38
062C 57A0 ldd R5,z+39
062E 4882 std y+0,R4
0630 5982 std y+1,R5
0632 9101 movw R18,R2
0634 0C2D mov R16,R12
0636 0E940000 xcall _FATDelClusChain
063A ; }
063A L128:
063A ; return Rt ;
063A 0A2D mov R16,R10
063C L108:
063C AC96 adiw R28,44
063E 0E940000 xcall pop_gset4
0642 .dbline 0 ; func end
0642 0895 ret
0644 ; ClusIndex1 -> y+54
0644 ; temp -> y+22
0644 ; DirName -> y+10
0644 ; Drive -> R12
0644 ; ClusIndex -> y+6
0644 ; Rt -> R10
0644 ; Path -> R10,R11
.even
0644 _RemoveDir::
0644 0E940000 xcall push_gset4
0648 5801 movw R10,R16
064A EA97 sbiw R28,58
064C ; }
064C ;
064C ; /*********************************************************************************************************
064C ; ** 函数名称: RemoveDir
064C ; ** 功能描述: 删除目录
064C ; ** 输 入: Path:路径名
064C ; ** 输 出: RETURN_OK:成功
064C ; ** 其它参考fat.h中关于返回值的说明
064C ; ** 全局变量: 无
064C ; ** 调用模块: strupr,DelFDT
064C ; ** 作 者: 陈明计
064C ; ** 日 期: 2003年9月8日
064C ; **-------------------------------------------------------------------------------------------------------
064C ; ** 修 改 人: 陈明计
064C ; ** 日 期: 2004年4月10日
064C ; **------------------------------------------------------------------------------------------------------
064C ; ********************************************************************************************************/
064C ; INT8U RemoveDir(char *Path)
064C ; {
064C ; INT32U ClusIndex,ClusIndex1 ;
064C ; INT8U Drive,Rt ;
064C ; char DirName[12];
064C ; FDT temp ;
064C ;
064C ; strupr(Path);
064C 8501 movw R16,R10
064E B1D0 xcall _strupr
0650 ; /* 变为大写 */
0650 ; ClusIndex=_GetFDTInfo(DirName,Path);
0650 9501 movw R18,R10
0652 8E01 movw R16,R28
0654 065F subi R16,246 ; offset = 10
0656 1F4F sbci R17,255
0658 3CDD xcall __GetFDTInfo
065A FE01 movw R30,R28
065C 0683 std z+6,R16
065E 1783 std z+7,R17
0660 2087 std z+8,R18
0662 3187 std z+9,R19
0664 ; if(ClusIndex==BAD_CLUS)
0664 47EF ldi R20,247
0666 5FEF ldi R21,255
0668 6FEF ldi R22,255
066A 7FE0 ldi R23,15
066C FE01 movw R30,R28
066E 2680 ldd R2,z+6
0670 3780 ldd R3,z+7
0672 4084 ldd R4,z+8
0674 5184 ldd R5,z+9
0676 2416 cp R2,R20
0678 3506 cpc R3,R21
067A 4606 cpc R4,R22
067C 5706 cpc R5,R23
067E 11F4 brne L143
0680 ; {
0680 ; return PATH_NOT_FIND ;
0680 0EE0 ldi R16,14
0682 5EC0 xjmp L142
0684 L143:
0684 ; }
0684 ;
0684 ; Drive=GetDrive(Path);
0684 8501 movw R16,R10
0686 8CDD xcall _GetDrive
0688 C02E mov R12,R16
068A ;
068A ; /* 获取FDT其信息 */
068A ; Rt=FindFDTInfo(&temp,Drive,ClusIndex,DirName);
068A CE01 movw R24,R28
068C 0A96 adiw R24,10
068E 9D83 std y+5,R25
0690 8C83 std y+4,R24
0692 FE01 movw R30,R28
0694 2680 ldd R2,z+6
0696 3780 ldd R3,z+7
0698 4084 ldd R4,z+8
069A 5184 ldd R5,z+9
069C 2882 std y+0,R2
069E 3982 std y+1,R3
06A0 4A82 std y+2,R4
06A2 5B82 std y+3,R5
06A4 2C2D mov R18,R12
06A6 8E01 movw R16,R28
06A8 0A5E subi R16,234 ; offset = 22
06AA 1F4F sbci R17,255
06AC 0E940000 xcall _FindFDTInfo
06B0 A02E mov R10,R16
06B2 ; if(Rt==RETURN_OK)
06B2 0023 tst R16
06B4 09F0 breq X8
06B6 43C0 xjmp L145
06B8 X8:
06B8 ; {
06B8 ; /* 是否是目录 */
06B8 ; if((temp.Attr&ATTR_DIRECTORY)!=0)
06B8 29A0 ldd R2,y+33
06BA 24FE sbrs R2,4
06BC 3EC0 rjmp L147
06BE ; {
06BE ; /* 是 */
06BE ; ClusIndex1=temp.FstClusLO+((INT32U)(temp.FstClusHI)<<16);
06BE 2AA4 ldd R2,y+42
06C0 3BA4 ldd R3,y+43
06C2 4424 clr R4
06C4 5524 clr R5
06C6 2101 movw R4,R2
06C8 2224 clr R2
06CA 3324 clr R3
06CC 68A8 ldd R6,y+48
06CE 79A8 ldd R7,y+49
06D0 8824 clr R8
06D2 9924 clr R9
06D4 620C add R6,R2
06D6 731C adc R7,R3
06D8 841C adc R8,R4
06DA 951C adc R9,R5
06DC FE01 movw R30,R28
06DE 66AA std z+54,R6
06E0 77AA std z+55,R7
06E2 80AE std z+56,R8
06E4 91AE std z+57,R9
06E6 ; /* 是否是空目录 */
06E6 ; Rt=DirIsEmpty(Drive,ClusIndex1);
06E6 FE01 movw R30,R28
06E8 26A8 ldd R2,z+54
06EA 37A8 ldd R3,z+55
06EC 40AC ldd R4,z+56
06EE 51AC ldd R5,z+57
06F0 4882 std y+0,R4
06F2 5982 std y+1,R5
06F4 9101 movw R18,R2
06F6 0C2D mov R16,R12
06F8 0E940000 xcall _DirIsEmpty
06FC A02E mov R10,R16
06FE ; if(Rt==DIR_EMPTY)
06FE 0C30 cpi R16,12
0700 F1F4 brne L148
0702 ; {
0702 ; /* 是,删除 */
0702 ; FATDelClusChain(Drive,ClusIndex1);
0702 FE01 movw R30,R28
0704 26A8 ldd R2,z+54
0706 37A8 ldd R3,z+55
0708 40AC ldd R4,z+56
070A 51AC ldd R5,z+57
070C 4882 std y+0,R4
070E 5982 std y+1,R5
0710 9101 movw R18,R2
0712 0C2D mov R16,R12
0714 0E940000 xcall _FATDelClusChain
0718 ; Rt=DelFDT(Drive,ClusIndex,DirName);
0718 CE01 movw R24,R28
071A 0A96 adiw R24,10
071C 9B83 std y+3,R25
071E 8A83 std y+2,R24
0720 FE01 movw R30,R28
0722 2680 ldd R2,z+6
0724 3780 ldd R3,z+7
0726 4084 ldd R4,z+8
0728 5184 ldd R5,z+9
072A 4882 std y+0,R4
072C 5982 std y+1,R5
072E 9101 movw R18,R2
0730 0C2D mov R16,R12
0732 0E940000 xcall _DelFDT
0736 A02E mov R10,R16
0738 ; }
0738 ; }
0738 02C0 xjmp L148
073A L147:
073A ; else
073A ; {
073A ; return PATH_NOT_FIND ;
073A 0EE0 ldi R16,14
073C 01C0 xjmp L142
073E L148:
073E ; }
073E ; }
073E L145:
073E ; return Rt ;
073E 0A2D mov R16,R10
0740 L142:
0740 EA96 adiw R28,58
0742 0E940000 xcall pop_gset4
0746 .dbline 0 ; func end
0746 0895 ret
0748 ; Drive -> R12
0748 ; Disk -> R12,R13
0748 ; ClusIndex -> y+0
0748 ; Rt -> R10
0748 ; Path -> R12,R13
.even
0748 _ChangeDir::
0748 0E940000 xcall push_gset4
074C 6801 movw R12,R16
074E 2497 sbiw R28,4
0750 ; }
0750 ;
0750 ; /*********************************************************************************************************
0750 ; ** 函数名称: ChangeDir
0750 ; ** 功能描述: 改变当前目录
0750 ; ** 输 入: Path:路径名
0750 ; ** 输 出: RETURN_OK:成功
0750 ; ** 其它参考fat.h中关于返回值的说明
0750 ; ** 全局变量: 无
0750 ; ** 调用模块: GetDirClusIndex,GetDiskInfo
0750 ; ** 作 者: 陈明计
0750 ; ** 日 期: 2003年9月8日
0750 ; **-------------------------------------------------------------------------------------------------------
0750 ; ** 修 改 人:
0750 ; ** 日 期:
0750 ; **------------------------------------------------------------------------------------------------------
0750 ; ********************************************************************************************************/
0750 ; INT8U ChangeDir(char *Path)
0750 ; {
0750 ; INT32U ClusIndex ;
0750 ; INT8U Rt,Drive ;
0750 ; Disk_Info *Disk ;
0750 ;
0750 ; Rt=PATH_NOT_FIND ;
0750 8EE0 ldi R24,14
0752 A82E mov R10,R24
0754 ; ClusIndex=GetDirClusIndex(Path);
0754 8601 movw R16,R12
0756 57DD xcall _GetDirClusIndex
0758 FE01 movw R30,R28
075A 0083 std z+0,R16
075C 1183 std z+1,R17
075E 2283 std z+2,R18
0760 3383 std z+3,R19
0762 ; if(ClusIndex!=BAD_CLUS)
0762 47EF ldi R20,247
0764 5FEF ldi R21,255
0766 6FEF ldi R22,255
0768 7FE0 ldi R23,15
076A FE01 movw R30,R28
076C 2080 ldd R2,z+0
076E 3180 ldd R3,z+1
0770 4280 ldd R4,z+2
0772 5380 ldd R5,z+3
0774 2416 cp R2,R20
0776 3506 cpc R3,R21
0778 4606 cpc R4,R22
077A 5706 cpc R5,R23
077C A9F0 breq L155
077E ; {
077E ; Drive=GetDrive(Path);
077E 8601 movw R16,R12
0780 0FDD xcall _GetDrive
0782 ; Disk=GetDiskInfo(Drive);
0782 0E940000 xcall _GetDiskInfo
0786 6801 movw R12,R16
0788 ; Rt=NOT_FIND_DISK ;
0788 AA24 clr R10
078A A394 inc R10
078C ; if(Disk!=NULL)
078C 0030 cpi R16,0
078E 0107 cpc R16,R17
0790 59F0 breq L157
0792 X9:
0792 ;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?