📄 fdt.s
字号:
tst R16
breq L143
; {
; break ;
xjmp L142
L143:
; }
;
; if(TempFDT.Name[0]==EMPTY_FDT)
ldd R2,y+8
tst R2
brne L145
; {
; temp=NOT_FIND_FDT ;
ldi R24,7
mov R10,R24
; break ;
xjmp L142
L145:
; }
; if((TempFDT.Attr&ATTR_VOLUME_ID)==0)
ldd R2,y+19
sbrc R2,3
rjmp L147
; if(FileName[0]==TempFDT.Name[0])
ldd R2,y+8
movw R30,R12
ldd R3,z+0
cp R3,R2
breq X37
xjmp L150
X37:
; if(FileName[1]==TempFDT.Name[1])
ldd R2,y+9
ldd R3,z+1
cp R3,R2
breq X38
xjmp L152
X38:
; if(FileName[2]==TempFDT.Name[2])
ldd R2,y+10
movw R30,R12
ldd R3,z+2
cp R3,R2
breq X39
xjmp L155
X39:
; if(FileName[3]==TempFDT.Name[3])
ldd R2,y+11
movw R30,R12
ldd R3,z+3
cp R3,R2
breq X40
xjmp L158
X40:
; if(FileName[4]==TempFDT.Name[4])
ldd R2,y+12
movw R30,R12
ldd R3,z+4
cp R3,R2
breq X41
xjmp L161
X41:
; if(FileName[5]==TempFDT.Name[5])
ldd R2,y+13
movw R30,R12
ldd R3,z+5
cp R3,R2
breq X42
xjmp L164
X42:
; if(FileName[6]==TempFDT.Name[6])
ldd R2,y+14
movw R30,R12
ldd R3,z+6
cp R3,R2
breq X43
xjmp L167
X43:
; if(FileName[7]==TempFDT.Name[7])
ldd R2,y+15
movw R30,R12
ldd R3,z+7
cp R3,R2
breq X44
xjmp L170
X44:
; if(FileName[8]==TempFDT.Name[8])
ldd R2,y+16
movw R30,R12
ldd R3,z+8
cp R3,R2
brne L173
; if(FileName[9]==TempFDT.Name[9])
ldd R2,y+17
movw R30,R12
ldd R3,z+9
cp R3,R2
brne L176
; if(FileName[10]==TempFDT.Name[10])
ldd R2,y+18
movw R30,R12
ldd R3,z+10
cp R3,R2
brne L179
; {
; TempFDT.Name[0]=DEL_FDT ;
ldi R24,229
std y+8,R24
; temp=SetFDTInfo(Drive,ClusIndex,i,&TempFDT);
movw R24,R28
adiw R24,8
std y+7,R25
std y+6,R24
movw R30,R28
ldd R2,z+40
ldd R3,z+41
ldd R4,z+42
ldd R5,z+43
std y+2,R2
std y+3,R3
std y+4,R4
std y+5,R5
movw R30,R28
ldd R2,z+54
ldd R3,z+55
ldd R4,z+56
ldd R5,z+57
std y+0,R4
std y+1,R5
movw R18,R2
mov R16,R14
xcall _SetFDTInfo
mov R10,R16
; break ;
xjmp L142
L179:
L176:
L173:
L170:
L167:
L164:
L161:
L158:
L155:
L152:
L150:
L147:
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
ldd R2,z+40
ldd R3,z+41
ldd R4,z+42
ldd R5,z+43
add R2,R20
adc R3,R21
adc R4,R22
adc R5,R23
movw R30,R28
std z+40,R2
std z+41,R3
std z+42,R4
std z+43,R5
L141:
xjmp L140
L142:
; }
; i++;
; }
; if(FileName[0]==ESC_FDT)
movw R30,R12
ldd R24,z+0
cpi R24,5
brne L182
; {
; FileName[0]=DEL_FDT ;
ldi R24,229
std z+0,R24
; }
L182:
; return temp ;
mov R16,R10
L137:
adiw R28,44
xcall pop_gset5
adiw R28,2
.dbline 0 ; func end
ret
; i -> y+40
; temp -> R10
; TempFDT -> y+8
; FDTData -> R12,R13
; ClusIndex -> y+54
; Drive -> R14
.even
_ChangeFDT::
st -y,r19
st -y,r18
xcall push_gset5
mov R14,R16
sbiw R28,44
ldd R12,y+58
ldd R13,y+59
; }
;
; /*********************************************************************************************************
; ** 函数名称: ChangeFDT
; ** 功能描述: 改变指定目录指定文件(目录)的属性
; **
; ** 输 入: Rt:存储返回信息的指针
; ** Drive:驱动器号
; ** ClusIndex:目录首簇号
; ** FileName:文件(目录)名
; ** 输 出: RETURN_OK:成功
; ** 其它参考fat.h中关于返回值的说明
; ** 全局变量: 无
; ** 调用模块: GetDiskInfo,GetFDTInfo,SetFDTInfo
; **
; ** 作 者: 陈明计
; ** 日 期: 2003年9月8日
; **-------------------------------------------------------------------------------------------------------
; ** 修改人:
; ** 日 期:
; **------------------------------------------------------------------------------------------------------
; ********************************************************************************************************/
; INT8U ChangeFDT(INT8U Drive,INT32U ClusIndex,FDT *FDTData)
; {
; INT32U i ;
; INT8U temp ;
; FDT TempFDT ;
;
; i=0 ;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
std z+40,R20
std z+41,R21
std z+42,R22
std z+43,R23
; if(FDTData->Name[0]==DEL_FDT)
movw R30,R12
ldd R24,z+0
cpi R24,229
breq X45
xjmp L188
X45:
; {
; FDTData->Name[0]=ESC_FDT ;
ldi R24,5
std z+0,R24
; }
xjmp L188
L187:
; while(1)
; {
; temp=GetFDTInfo(&TempFDT,Drive,ClusIndex,i);
movw R30,R28
ldd R2,z+40
ldd R3,z+41
ldd R4,z+42
ldd R5,z+43
std y+4,R2
std y+5,R3
std y+6,R4
std y+7,R5
movw R30,R28
ldd R2,z+54
ldd R3,z+55
ldd R4,z+56
ldd R5,z+57
std y+0,R2
std y+1,R3
std y+2,R4
std y+3,R5
mov R18,R14
movw R16,R28
subi R16,248 ; offset = 8
sbci R17,255
xcall _GetFDTInfo
mov R10,R16
; if(temp!=RETURN_OK)
tst R16
breq L190
; {
; break ;
xjmp L189
L190:
; }
;
; if(TempFDT.Name[0]==EMPTY_FDT)
ldd R2,y+8
tst R2
brne L192
; {
; temp=NOT_FIND_FDT ;
ldi R24,7
mov R10,R24
; break ;
xjmp L189
L192:
; }
; if((TempFDT.Attr&ATTR_VOLUME_ID)==0)
ldd R2,y+19
sbrc R2,3
rjmp L194
; if(FDTData->Name[0]==TempFDT.Name[0])
ldd R2,y+8
movw R30,R12
ldd R3,z+0
cp R3,R2
breq X46
xjmp L197
X46:
; if(FDTData->Name[1]==TempFDT.Name[1])
ldd R2,y+9
ldd R3,z+1
cp R3,R2
breq X47
xjmp L199
X47:
; if(FDTData->Name[2]==TempFDT.Name[2])
ldd R2,y+10
movw R30,R12
ldd R3,z+2
cp R3,R2
breq X48
xjmp L202
X48:
; if(FDTData->Name[3]==TempFDT.Name[3])
ldd R2,y+11
movw R30,R12
ldd R3,z+3
cp R3,R2
breq X49
xjmp L205
X49:
; if(FDTData->Name[4]==TempFDT.Name[4])
ldd R2,y+12
movw R30,R12
ldd R3,z+4
cp R3,R2
breq X50
xjmp L208
X50:
; if(FDTData->Name[5]==TempFDT.Name[5])
ldd R2,y+13
movw R30,R12
ldd R3,z+5
cp R3,R2
breq X51
xjmp L211
X51:
; if(FDTData->Name[6]==TempFDT.Name[6])
ldd R2,y+14
movw R30,R12
ldd R3,z+6
cp R3,R2
breq X52
xjmp L214
X52:
; if(FDTData->Name[7]==TempFDT.Name[7])
ldd R2,y+15
movw R30,R12
ldd R3,z+7
cp R3,R2
breq X53
xjmp L217
X53:
; if(FDTData->Name[8]==TempFDT.Name[8])
ldd R2,y+16
movw R30,R12
ldd R3,z+8
cp R3,R2
brne L220
; if(FDTData->Name[9]==TempFDT.Name[9])
ldd R2,y+17
movw R30,R12
ldd R3,z+9
cp R3,R2
brne L223
; if(FDTData->Name[10]==TempFDT.Name[10])
ldd R2,y+18
movw R30,R12
ldd R3,z+10
cp R3,R2
brne L226
; {
; temp=SetFDTInfo(Drive,ClusIndex,i,FDTData);
std y+7,R13
std y+6,R12
movw R30,R28
ldd R2,z+40
ldd R3,z+41
ldd R4,z+42
ldd R5,z+43
std y+2,R2
std y+3,R3
std y+4,R4
std y+5,R5
movw R30,R28
ldd R2,z+54
ldd R3,z+55
ldd R4,z+56
ldd R5,z+57
std y+0,R4
std y+1,R5
movw R18,R2
mov R16,R14
xcall _SetFDTInfo
mov R10,R16
; break ;
xjmp L189
L226:
L223:
L220:
L217:
L214:
L211:
L208:
L205:
L202:
L199:
L197:
L194:
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
ldd R2,z+40
ldd R3,z+41
ldd R4,z+42
ldd R5,z+43
add R2,R20
adc R3,R21
adc R4,R22
adc R5,R23
movw R30,R28
std z+40,R2
std z+41,R3
std z+42,R4
std z+43,R5
L188:
xjmp L187
L189:
; }
; i++;
; }
; if(FDTData->Name[0]==ESC_FDT)
movw R30,R12
ldd R24,z+0
cpi R24,5
brne L229
; {
; FDTData->Name[0]=DEL_FDT ;
ldi R24,229
std z+0,R24
; }
L229:
; return temp ;
mov R16,R10
L184:
adiw R28,44
xcall pop_gset5
adiw R28,2
.dbline 0 ; func end
ret
; Disk -> R12,R13
; i -> y+40
; temp -> R12
; TempFDT -> y+8
; ClusIndex -> y+52
; Drive -> R10
.even
_DirIsEmpty::
st -y,r19
st -y,r18
xcall push_gset4
mov R10,R16
sbiw R28,44
; }
;
; /*********************************************************************************************************
; ** 函数名称: DirIsEmpty
; ** 功能描述:
; **
; ** 输 入: Drive:驱动器号
; ** ClusIndex:目录首簇号
; ** 输 出: DIR_EMPTY:空
; ** DIR_NOT_EMPTY:不空
; ** 其它参考fat.h中关于返回值的说明
; ** 全局变量: 无
; ** 调用模块: GetFDTInfo
; **
; ** 作 者: 陈明计
; ** 日 期: 2003年9月8日
; **-------------------------------------------------------------------------------------------------------
; ** 修改人: 陈明计
; ** 日 期: 2004年4月10日
; **------------------------------------------------------------------------------------------------------
; ********************************************************************************************************/
; INT8U DirIsEmpty(INT8U Drive,INT32U ClusIndex)
; {
; INT32U i ;
; FDT TempFDT ;
; INT8U temp ;
; Disk_Info*Disk ;
;
;
; if(ClusIndex==EMPTY_CLUS)
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
ldd R2,z+52
ldd R3,z+53
ldd R4,z+54
ldd R5,z+55
cp R2,R20
cpc R3,R21
cpc R4,R22
cpc R5,R23
brne L232
; {
; return DIR_NOT_EMPTY ;
ldi R16,13
xjmp L231
L232:
; }
; /* 判断是否是fat32 的根目录 */
; Disk=GetDiskInfo(Drive);
mov R16,R10
xcall _GetDiskInfo
movw R12,R16
; if(Disk==NULL)
cpi R16,0
cpc R16,R17
brne L234
X54:
; {
; return NOT_FIND_DISK ;
ldi R16,1
xjmp L231
L234:
; }
; if(Disk->FATType==FAT32)
movw R30,R12
ldd R24,z+1
cpi R24,2
brne L236
; if(ClusIndex==Disk->RootDirTable)
movw R30,R12
ldd R2,z+20
ldd R3,z+21
ldd R4,z+22
ldd R5,z+23
movw R30,R28
ldd R6,z+52
ldd R7,z+53
ldd R8,z+54
ldd R9,z+55
cp R6,R2
cpc R7,R3
cpc R8,R4
cpc R9,R5
brne L238
; {
; return DIR_NOT_EMPTY ;
ldi R16,13
xjmp L231
L238:
L236:
; }
;
; i=2 ;
ldi R20,2
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
std z+40,R20
std z+41,R21
std z+42,R22
std z+43,R23
xjmp L241
L240:
; while(1)
; {
; temp=GetFDTInfo(&TempFDT,Drive,ClusIndex,i);
movw R30,R28
ldd R2,z+40
ldd R3,z+41
ldd R4,z+42
ldd R5,z+43
std y+4,R2
std y+5,R3
std y+6,R4
std y+7,R5
movw R30,R28
ldd R2,z+52
ldd R3,z+53
ldd R4,z+54
ldd R5,z+55
std y+0,R2
std y+1,R3
std y+2,R4
std y+3,R5
mov R18,R10
movw R16,R28
subi R16,248 ; offset = 8
sbci R17,255
xcall _GetFDTInfo
mov R12,R16
; if(temp!=RETURN_OK)
tst R16
breq L243
; {
; return temp ;
xjmp L231
L243:
; }
;
; if((TempFDT.Attr&ATTR_VOLUME_ID)==0)
ldd R2,y+19
sbrc R2,3
rjmp L245
; if(TempFDT.Name[0]!=DEL_FDT)
ldd R24,y+8
cpi R24,229
breq L248
; {
; break ;
xjmp L242
L248:
L245:
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
ldd R2,z+40
ldd R3,z+41
ldd R4,z+42
ldd R5,z+43
add R2,R20
adc R3,R21
adc R4,R22
adc R5,R23
movw R30,R28
std z+40,R2
std z+41,R3
std z+42,R4
std z+43,R5
L241:
xjmp L240
L242:
; }
; i++;
; }
; if(TempFDT.Name[0]==EMPTY_FDT)
ldd R2,y+8
tst R2
brne L250
; {
; return DIR_EMPTY ;
ldi R16,12
xjmp L231
L250:
; }
; else
; {
; return DIR_NOT_EMPTY ;
ldi R16,13
L231:
adiw R28,44
xcall pop_gset4
adiw R28,2
.dbline 0 ; func end
ret
; i -> y+40
; temp1 -> y+8
; temp -> R10
; FileName -> R12,R13
; ClusIndex -> y+54
; Drive -> R14
.even
_FDTIsLie::
st -y,r19
st -y,r18
xcall push_gset5
mov R14,R16
sbiw R28,44
ldd R12,y+58
ldd R13,y+59
; }
; }
;
; /*********************************************************************************************************
; ** 函数名称: FDTIsLie
; ** 功能描述: 在指定目录查看指定文件(目录)是否存在
; **
; ** 输 入: Drive:驱动器号
; ** ClusIndex:目录首簇号
; ** FileName:文件(目录)名
; ** 输 出: RETURN_OK:成功
; ** 其它参考fat.h中关于返回值的说明
; ** 全局变量: 无
; ** 调用模块: GetDiskInfo,GetFDTInfo
; **
; ** 作 者: 陈明计
; ** 日 期: 2003年9月8日
; **-------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -