📄 disk.s
字号:
adiw R26,15
ld R3,x
clr R4
clr R5
std z+0,R2
std z+1,R3
std z+2,R4
std z+3,R5
; #if FS_DEBUG_EN
; #if USART1_EN
; {
; Uart1_SendString("\n 3.FATStartSec:");//调试用 ,FAT开始扇区号
ldi R16,<L51
ldi R17,>L51
xcall _Uart1_SendString
; PUT_INT32U_DecTOString(DiskInfo[i].FATStartSec);
ldi R24,46
mul R24,R10
movw R30,R0
ldi R24,<_DiskInfo+4
ldi R25,>_DiskInfo+4
add R30,R24
adc R31,R25
ldd R16,z+0
ldd R17,z+1
ldd R18,z+2
ldd R19,z+3
xcall _PUT_INT32U_DecTOString
; }
; #endif
; #endif
;
; /* FAT表占用扇区数 */
; temp=((INT32U)Buf[23]<<8)+Buf[22];
ldi R24,8
ldi R25,0
movw R30,R14
ldd R2,z+23
clr R3
clr R4
clr R5
st -y,R24
movw R16,R2
movw R18,R4
xcall lsl32
movw R2,R16
movw R4,R18
movw R30,R14
ldd R6,z+22
clr R7
clr R8
clr R9
add R2,R6
adc R3,R7
adc R4,R8
adc R5,R9
movw R12,R2
; if(temp!=0)
tst R2
brne X3
tst R3
breq L53
X3:
; DiskInfo[i].FATSecCnt=temp ;
ldi R24,46
mul R24,R10
movw R30,R0
ldi R24,<_DiskInfo+8
ldi R25,>_DiskInfo+8
add R30,R24
adc R31,R25
movw R2,R12
clr R4
clr R5
std z+0,R2
std z+1,R3
std z+2,R4
std z+3,R5
xjmp L54
L53:
; else
; {
; DiskInfo[i].FATSecCnt=((INT32U)Buf[37]<<8)+Buf[36];
ldi R24,8
ldi R25,0
movw R30,R14
ldd R2,z+37
clr R3
clr R4
clr R5
st -y,R24
movw R16,R2
movw R18,R4
xcall lsl32
movw R2,R16
movw R4,R18
movw R30,R14
ldd R6,z+36
clr R7
clr R8
clr R9
add R2,R6
adc R3,R7
adc R4,R8
adc R5,R9
ldi R24,46
mul R24,R10
movw R30,R0
ldi R24,<_DiskInfo+8
ldi R25,>_DiskInfo+8
add R30,R24
adc R31,R25
std z+0,R2
std z+1,R3
std z+2,R4
std z+3,R5
; DiskInfo[i].FATSecCnt|=(((INT32U)Buf[38]<<16)+((INT32U)Buf[39]<<24));
ldi R24,46
mul R24,R10
movw R2,R0
ldi R24,<_DiskInfo+8
ldi R25,>_DiskInfo+8
add R2,R24
adc R3,R25
ldi R24,24
ldi R25,0
movw R30,R14
ldd R4,z+39
clr R5
clr R6
clr R7
st -y,R24
movw R16,R4
movw R18,R6
xcall lsl32
movw R30,R14
ldd R4,z+38
clr R5
clr R6
clr R7
movw R6,R4
clr R4
clr R5
add R4,R16
adc R5,R17
adc R6,R18
adc R7,R19
movw R30,R2
ldd R20,z+0
ldd R21,z+1
ldd R22,z+2
ldd R23,z+3
or R20,R4
or R21,R5
or R22,R6
or R23,R7
std z+0,R20
std z+1,R21
std z+2,R22
std z+3,R23
; }
L54:
; #if FS_DEBUG_EN
; #if USART1_EN
; {
; Uart1_SendString("\n 4.FATSecCnt:");//FAT表占用扇区数
ldi R16,<L58
ldi R17,>L58
xcall _Uart1_SendString
; PUT_INT32U_DecTOString(DiskInfo[i].FATSecCnt);
ldi R24,46
mul R24,R10
movw R30,R0
ldi R24,<_DiskInfo+8
ldi R25,>_DiskInfo+8
add R30,R24
adc R31,R25
ldd R16,z+0
ldd R17,z+1
ldd R18,z+2
ldd R19,z+3
xcall _PUT_INT32U_DecTOString
; }
; #endif
; #endif
;
; /* FAT表个数 */
; DiskInfo[i].NumFATs=Buf[16];
ldi R24,46
mul R24,R10
movw R30,R0
ldi R24,<_DiskInfo+3
ldi R25,>_DiskInfo+3
add R30,R24
adc R31,R25
movw R26,R14
adiw R26,16
ld R2,x
std z+0,R2
; #if FS_DEBUG_EN
; #if USART1_EN
; {
; Uart1_SendString("\n 5.NumFATs:");//调试用 ,FAT表个数
ldi R16,<L61
ldi R17,>L61
xcall _Uart1_SendString
; PUT_INT32U_DecTOString(DiskInfo[i].NumFATs);
ldi R24,46
mul R24,R10
movw R30,R0
ldi R24,<_DiskInfo+3
ldi R25,>_DiskInfo+3
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
clr R4
clr R5
movw R16,R2
movw R18,R4
xcall _PUT_INT32U_DecTOString
; }
; #endif
; #endif
;
; /* 根目录占扇区数 */
; DiskInfo[i].RootSecCnt=((((INT16U)Buf[18]<<8)+Buf[17])*32+DiskInfo[i].BytsPerSec-1)/DiskInfo[i].BytsPerSec ;
ldi R24,46
mul R24,R10
movw R2,R0
movw R30,R14
ldd R4,z+17
movw R30,R14
ldd R5,z+18
mov R19,R5
mov R18,R4
ldi R16,32
ldi R17,0
xcall empy16s
movw R4,R16
clr R6
clr R7
ldi R24,<_DiskInfo+16
ldi R25,>_DiskInfo+16
movw R30,R2
add R30,R24
adc R31,R25
ldd R20,z+0
ldd R21,z+1
ldd R22,z+2
ldd R23,z+3
add R4,R20
adc R5,R21
adc R6,R22
adc R7,R23
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
sub R4,R20
sbc R5,R21
sbc R6,R22
sbc R7,R23
movw R30,R2
add R30,R24
adc R31,R25
ldd R20,z+0
ldd R21,z+1
ldd R22,z+2
ldd R23,z+3
st -y,R23
st -y,R22
st -y,R21
st -y,R20
movw R16,R4
movw R18,R6
xcall div32u
ldi R24,<_DiskInfo+24
ldi R25,>_DiskInfo+24
movw R30,R2
add R30,R24
adc R31,R25
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
; #if FS_DEBUG_EN
; #if USART1_EN
; {
; Uart1_SendString("\n 6.RootSecCnt:");//根目录占扇区数
ldi R16,<L66
ldi R17,>L66
xcall _Uart1_SendString
; PUT_INT32U_DecTOString(DiskInfo[i].RootSecCnt);
ldi R24,46
mul R24,R10
movw R30,R0
ldi R24,<_DiskInfo+24
ldi R25,>_DiskInfo+24
add R30,R24
adc R31,R25
ldd R16,z+0
ldd R17,z+1
ldd R18,z+2
ldd R19,z+3
xcall _PUT_INT32U_DecTOString
; }
; #endif
; #endif
;
; /* 逻辑盘(卷)占扇区数 */
; temp=((INT16U)Buf[20]<<8)+Buf[19];
movw R30,R14
ldd R2,z+19
movw R30,R14
ldd R3,z+20
mov R13,R3
mov R12,R2
; if(temp!=0)
tst R12
brne X4
tst R13
breq L68
X4:
; DiskInfo[i].SecPerDisk=temp ;
ldi R24,46
mul R24,R10
movw R30,R0
ldi R24,<_DiskInfo+12
ldi R25,>_DiskInfo+12
add R30,R24
adc R31,R25
movw R2,R12
clr R4
clr R5
std z+0,R2
std z+1,R3
std z+2,R4
std z+3,R5
xjmp L69
L68:
; else
; {
; DiskInfo[i].SecPerDisk=((INT32U)Buf[33]<<8)+Buf[32];
ldi R24,8
ldi R25,0
movw R30,R14
ldd R2,z+33
clr R3
clr R4
clr R5
st -y,R24
movw R16,R2
movw R18,R4
xcall lsl32
movw R2,R16
movw R4,R18
movw R30,R14
ldd R6,z+32
clr R7
clr R8
clr R9
add R2,R6
adc R3,R7
adc R4,R8
adc R5,R9
ldi R24,46
mul R24,R10
movw R30,R0
ldi R24,<_DiskInfo+12
ldi R25,>_DiskInfo+12
add R30,R24
adc R31,R25
std z+0,R2
std z+1,R3
std z+2,R4
std z+3,R5
; DiskInfo[i].SecPerDisk|=(((INT32U)Buf[34]<<16)+((INT32U)Buf[35]<<24));
ldi R24,46
mul R24,R10
movw R2,R0
ldi R24,<_DiskInfo+12
ldi R25,>_DiskInfo+12
add R2,R24
adc R3,R25
ldi R24,24
ldi R25,0
movw R30,R14
ldd R4,z+35
clr R5
clr R6
clr R7
st -y,R24
movw R16,R4
movw R18,R6
xcall lsl32
movw R30,R14
ldd R4,z+34
clr R5
clr R6
clr R7
movw R6,R4
clr R4
clr R5
add R4,R16
adc R5,R17
adc R6,R18
adc R7,R19
movw R30,R2
ldd R20,z+0
ldd R21,z+1
ldd R22,z+2
ldd R23,z+3
or R20,R4
or R21,R5
or R22,R6
or R23,R7
std z+0,R20
std z+1,R21
std z+2,R22
std z+3,R23
; }
L69:
; #if FS_DEBUG_EN
; #if USART1_EN
; {
; Uart1_SendString("\n 7.SecPerDisk:");//逻辑盘(卷)占扇区数
ldi R16,<L73
ldi R17,>L73
xcall _Uart1_SendString
; PUT_INT32U_DecTOString(DiskInfo[i].SecPerDisk);
ldi R24,46
mul R24,R10
movw R30,R0
ldi R24,<_DiskInfo+12
ldi R25,>_DiskInfo+12
add R30,R24
adc R31,R25
ldd R16,z+0
ldd R17,z+1
ldd R18,z+2
ldd R19,z+3
xcall _PUT_INT32U_DecTOString
; }
; #endif
; #endif
;
; DiskInfo[i].PathClusIndex=0 ;/* 当前目录为根目录 */
ldi R24,46
mul R24,R10
movw R30,R0
ldi R24,<_DiskInfo+36
ldi R25,>_DiskInfo+36
add R30,R24
adc R31,R25
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
std z+0,R20
std z+1,R21
std z+2,R22
std z+3,R23
;
; /* 根目录开始扇区号 */
; DiskInfo[i].RootDirTable=DiskInfo[i].NumFATs*DiskInfo[i].FATSecCnt+DiskInfo[i].FATStartSec ;
ldi R24,46
mul R24,R10
movw R2,R0
ldi R24,<_DiskInfo+8
ldi R25,>_DiskInfo+8
movw R30,R2
add R30,R24
adc R31,R25
ldd R4,z+0
ldd R5,z+1
ldd R6,z+2
ldd R7,z+3
ldi R24,<_DiskInfo+3
ldi R25,>_DiskInfo+3
movw R30,R2
add R30,R24
adc R31,R25
ldd R20,z+0
clr R21
clr R22
clr R23
st -y,R7
st -y,R6
st -y,R5
st -y,R4
movw R16,R20
movw R18,R22
xcall empy32u
movw R4,R16
movw R6,R18
ldi R24,<_DiskInfo+4
ldi R25,>_DiskInfo+4
movw R30,R2
add R30,R24
adc R31,R25
ldd R20,z+0
ldd R21,z+1
ldd R22,z+2
ldd R23,z+3
add R4,R20
adc R5,R21
adc R6,R22
adc R7,R23
ldi R24,<_DiskInfo+20
ldi R25,>_DiskInfo+20
movw R30,R2
add R30,R24
adc R31,R25
std z+0,R4
std z+1,R5
std z+2,R6
std z+3,R7
; #if FS_DEBUG_EN
; #if USART1_EN
; {
; Uart1_SendString("\n 8.RootDirTable:");//根目录开始扇区号
ldi R16,<L80
ldi R17,>L80
xcall _Uart1_SendString
; PUT_INT32U_DecTOString(DiskInfo[i].RootDirTable);
ldi R24,46
mul R24,R10
movw R30,R0
ldi R24,<_DiskInfo+20
ldi R25,>_DiskInfo+20
add R30,R24
adc R31,R25
ldd R16,z+0
ldd R17,z+1
ldd R18,z+2
ldd R19,z+3
xcall _PUT_INT32U_DecTOString
; }
; #endif
; #endif
;
; /* 数据区开始扇区号 */
; DiskInfo[i].DataStartSec=DiskInfo[i].RootDirTable+DiskInfo[i].RootSecCnt ;
ldi R24,46
mul R24,R10
ldi R24,<_DiskInfo+24
ldi R25,>_DiskInfo+24
movw R30,R0
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
ldi R24,<_DiskInfo+20
ldi R25,>_DiskInfo+20
movw R30,R0
add R30,R24
adc R31,R25
ldd R6,z+0
ldd R7,z+1
ldd R8,z+2
ldd R9,z+3
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
ldi R24,<_DiskInfo+28
ldi R25,>_DiskInfo+28
movw R30,R0
add R30,R24
adc R31,R25
std z+0,R6
std z+1,R7
std z+2,R8
std z+3,R9
; #if FS_DEBUG_EN
; #if USART1_EN
; {
; Uart1_SendString("\n 9.DataStartSec:");//数据区开始扇区号
ldi R16,<L85
ldi R17,>L85
xcall _Uart1_SendString
; PUT_INT32U_DecTOString(DiskInfo[i].DataStartSec);
ldi R24,46
mul R24,R10
movw R30,R0
ldi R24,<_DiskInfo+28
ldi R25,>_DiskInfo+28
add R30,R24
adc R31,R25
ldd R16,z+0
ldd R17,z+1
ldd R18,z+2
ldd R19,z+3
xcall _PUT_INT32U_DecTOString
; }
; #endif
; #endif
;
; temp1=DiskInfo[i].SecPerDisk-DiskInfo[i].DataStartSec ;
ldi R24,46
mul R24,R10
ldi R24,<_DiskInfo+28
ldi R25,>_DiskInfo+28
movw R30,R0
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
ldi R24,<_DiskInfo+12
ldi R25,>_DiskInfo+12
movw R30,R0
add R30,R24
adc R31,R25
ldd R6,z+0
ldd R7,z+1
ldd R8,z+2
ldd R9,z+3
sub R6,R2
sbc R7,R3
sbc R8,R4
sbc R9,R5
movw R30,R28
std z+2,R6
std z+3,R7
std z+4,R8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -