📄 scsi.s
字号:
.dbline 141
; Bulk_Control_r.BufCount=0;
clr R2
clr R3
sts _Bulk_Control_r+6+1,R3
sts _Bulk_Control_r+6,R2
.dbline 142
; bEPPflags.bits.bulk_state=BULK_DATA_TRANS;
lds R24,_bEPPflags+2
andi R24,248
ori R24,1
sts _bEPPflags+2,R24
.dbline 143
; Bulk_ErrorHandler(CSW_GOOD,CBW_bCBWCBLength);
lds R18,_Bulk_Block+8
lds R19,_Bulk_Block+8+1
clr R16
xcall _Bulk_ErrorHandler
.dbline 144
; D12_WriteEndpoint(5,EP2_PACKET_SIZE,PageBuf);
ldi R24,<_PageBuf
ldi R25,>_PageBuf
std y+1,R25
std y+0,R24
ldi R18,64
ldi R19,0
ldi R16,5
ldi R17,0
xcall _D12_WriteEndpoint
.dbline 145
; return TRUE;
ldi R16,1
.dbline -2
L25:
adiw R28,6
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l Logical_Block_Address 2 l
.dbend
.dbfunc e RBC_ReadCapacity _RBC_ReadCapacity fc
.even
_RBC_ReadCapacity::
.dbline -1
.dbline 149
; #undef cdbRead10
; }
; BOOLEAN RBC_ReadCapacity(void)
; {
.dbline 150
; Bulk_code_transmit((const unsigned char*)&ReadCapacityData,
ldi R18,8
ldi R19,0
ldi R16,<_ReadCapacityData
ldi R17,>_ReadCapacityData
xcall _Bulk_code_transmit
.dbline 152
; sizeof(READ_CAPACITY_DATA));
; return TRUE;
ldi R16,1
.dbline -2
L50:
.dbline 0 ; func end
ret
.dbend
.dbfunc e SPC_FormatCapacity _SPC_FormatCapacity fc
.even
_SPC_FormatCapacity::
.dbline -1
.dbline 155
; }
; BOOLEAN SPC_FormatCapacity(void)
; {
.dbline 156
; Bulk_code_transmit((const unsigned char*)&CapacitylistHead,
ldi R18,12
ldi R19,0
ldi R16,<_CapacitylistHead
ldi R17,>_CapacitylistHead
xcall _Bulk_code_transmit
.dbline 158
; CAPACITY_LIST_LENGTH);
; return TRUE;
ldi R16,1
.dbline -2
L51:
.dbline 0 ; func end
ret
.dbend
.dbfunc e SPC_TestUnit _SPC_TestUnit fc
.even
_SPC_TestUnit::
.dbline -1
.dbline 161
; }
; BOOLEAN SPC_TestUnit(void)
; {
.dbline 162
; Bulk_ErrorHandler(CSW_GOOD,0);
clr R18
clr R19
clr R16
xcall _Bulk_ErrorHandler
.dbline 163
; Bulk_CSWHandler();
xcall _Bulk_CSWHandler
.dbline 164
; return TRUE;
ldi R16,1
.dbline -2
L52:
.dbline 0 ; func end
ret
.dbend
.dbfunc e RBC_Verify10 _RBC_Verify10 fc
.even
_RBC_Verify10::
.dbline -1
.dbline 167
; }
; BOOLEAN RBC_Verify10(void)
; {
.dbline 168
; Bulk_ErrorHandler(CSW_GOOD,0);
clr R18
clr R19
clr R16
xcall _Bulk_ErrorHandler
.dbline 169
; Bulk_CSWHandler();
xcall _Bulk_CSWHandler
.dbline 170
; return TRUE;
ldi R16,1
.dbline -2
L53:
.dbline 0 ; func end
ret
.dbend
.dbfunc e RBC_Write10 _RBC_Write10 fc
; pageNum -> y+6
; Logical_Block_Address -> y+2
; blockNum -> R12,R13
; j -> R14
; i -> R10
.even
_RBC_Write10::
xcall push_gset5
sbiw R28,7
.dbline -1
.dbline 173
; }
; BOOLEAN RBC_Write10(void)
; {
.dbline 178
; #define cdbWrite10 Bulk_Block.cbw.CBWCB.RbcCdb_Write10
; unsigned char i,j,pageNum;
; unsigned int blockNum;
; unsigned long Logical_Block_Address;
; Logical_Block_Address=cdbWrite10.LogicalBlockAddress[0]*0x1000000;
lds R2,_Bulk_Block+15+2
clr R3
clr R4
clr R5
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,1
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
xcall empy32s
movw R30,R28
std z+2,R16
std z+3,R17
std z+4,R18
std z+5,R19
.dbline 179
; Logical_Block_Address+=cdbWrite10.LogicalBlockAddress[1]*0x10000;
lds R2,_Bulk_Block+15+2+1
clr R3
clr R4
clr R5
ldi R20,0
ldi R21,0
ldi R22,1
ldi R23,0
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
xcall empy32s
movw R30,R28
ldd R2,z+2
ldd R3,z+3
ldd R4,z+4
ldd R5,z+5
add R2,R16
adc R3,R17
adc R4,R18
adc R5,R19
movw R30,R28
std z+2,R2
std z+3,R3
std z+4,R4
std z+5,R5
.dbline 180
; Logical_Block_Address+=cdbWrite10.LogicalBlockAddress[2]*0x100;
lds R18,_Bulk_Block+15+2+2
clr R19
ldi R16,256
ldi R17,1
xcall empy16s
movw R2,R16
clr R4
sbrc R3,7
com R4
clr R5
sbrc R4,7
com R5
movw R30,R28
ldd R6,z+2
ldd R7,z+3
ldd R8,z+4
ldd R9,z+5
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
movw R30,R28
std z+2,R6
std z+3,R7
std z+4,R8
std z+5,R9
.dbline 181
; Logical_Block_Address+=cdbWrite10.LogicalBlockAddress[3];
lds R2,_Bulk_Block+15+2+3
clr R3
clr R4
clr R5
movw R30,R28
ldd R6,z+2
ldd R7,z+3
ldd R8,z+4
ldd R9,z+5
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
movw R30,R28
std z+2,R6
std z+3,R7
std z+4,R8
std z+5,R9
.dbline 182
; Bulk_Control_w.Transfer_Length=cdbWrite10.TransferLength[0]*256+cdbWrite10.TransferLength[1];
lds R18,_Bulk_Block+15+7
clr R19
ldi R16,256
ldi R17,1
xcall empy16s
movw R2,R16
lds R4,_Bulk_Block+15+7+1
clr R5
add R2,R4
adc R3,R5
sts _Bulk_Control_w+1,R3
sts _Bulk_Control_w,R2
.dbline 183
; Bulk_Control_w.CurrentPage=Logical_Block_Address%32;
ldi R20,31
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
ldd R2,z+2
ldd R3,z+3
ldd R4,z+4
ldd R5,z+5
and R2,R20
and R3,R21
and R4,R22
and R5,R23
sts _Bulk_Control_w+4,R2
.dbline 184
; Bulk_Control_w.CurrentBlock=Logical_Block_Address/32;
ldi R24,5
ldi R25,0
movw R30,R28
ldd R2,z+2
ldd R3,z+3
ldd R4,z+4
ldd R5,z+5
st -y,R24
movw R16,R2
movw R18,R4
xcall lsr32
sts _Bulk_Control_w+2+1,R17
sts _Bulk_Control_w+2,R16
.dbline 185
; Bulk_Control_w.BeginPage=Bulk_Control_w.CurrentPage;
lds R2,_Bulk_Control_w+4
sts _Bulk_Control_w+5,R2
.dbline 186
; Bulk_Control_w.BufCount=0;
clr R2
clr R3
sts _Bulk_Control_w+6+1,R3
sts _Bulk_Control_w+6,R2
.dbline 187
; bEPPflags.bits.bulk_state=BULK_DATA_RECIEVE;
lds R24,_bEPPflags+2
andi R24,248
ori R24,4
sts _bEPPflags+2,R24
.dbline 188
; Bulk_ErrorHandler(CSW_GOOD,CBW_bCBWCBLength);
lds R18,_Bulk_Block+8
lds R19,_Bulk_Block+8+1
clr R16
xcall _Bulk_ErrorHandler
.dbline 189
; pageNum=(Bulk_Control_w.BeginPage+Bulk_Control_w.Transfer_Length)%32;
lds R2,_Bulk_Control_w
lds R3,_Bulk_Control_w+1
lds R24,_Bulk_Control_w+5
clr R25
add R24,R2
adc R25,R3
andi R24,31
andi R25,0
std y+6,R24
.dbline 190
; blockNum=(Bulk_Control_w.BeginPage+Bulk_Control_w.Transfer_Length)/32;
lds R16,_Bulk_Control_w+5
clr R17
add R16,R2
adc R17,R3
ldi R18,5
ldi R19,0
xcall lsr16
movw R12,R16
.dbline 191
; blockNum+=Bulk_Control_w.CurrentBlock;
lds R2,_Bulk_Control_w+2
lds R3,_Bulk_Control_w+2+1
add R12,R2
adc R13,R3
.dbline 192
; Erase_Cluster(CANCEL_BLOCK);
ldi R16,2047
ldi R17,7
xcall _Erase_Cluster
.dbline 193
; if(blockNum==Bulk_Control_w.CurrentBlock)j=32;
lds R2,_Bulk_Control_w+2
lds R3,_Bulk_Control_w+2+1
cp R12,R2
cpc R13,R3
brne L81
.dbline 193
ldi R24,32
mov R14,R24
xjmp L82
L81:
.dbline 194
; else j=Bulk_Control_w.BeginPage;
lds R14,_Bulk_Control_w+5
L82:
.dbline 195
; for(i=0;i<j;i++)
clr R10
xjmp L88
L85:
.dbline 196
.dbline 197
ldi R24,<_PageBuf
ldi R25,>_PageBuf
std y+1,R25
std y+0,R24
mov R18,R10
clr R19
lds R16,_Bulk_Control_w+2
lds R17,_Bulk_Control_w+2+1
xcall _ReadPage
.dbline 198
ldi R24,<_PageBuf
ldi R25,>_PageBuf
std y+1,R25
std y+0,R24
mov R18,R10
clr R19
ldi R16,2047
ldi R17,7
xcall _WritePage
.dbline 199
L86:
.dbline 195
inc R10
L88:
.dbline 195
cp R10,R14
brlo L85
.dbline 200
; {
; ReadPage(Bulk_Control_w.CurrentBlock,i,PageBuf);
; WritePage(CANCEL_BLOCK,i,PageBuf);
; }
; Erase_Cluster(Bulk_Control_w.CurrentBlock);
lds R16,_Bulk_Control_w+2
lds R17,_Bulk_Control_w+2+1
xcall _Erase_Cluster
.dbline 201
; for(i=0;i<Bulk_Control_w.BeginPage;i++)
clr R10
xjmp L94
L91:
.dbline 202
.dbline 203
ldi R24,<_PageBuf
ldi R25,>_PageBuf
std y+1,R25
std y+0,R24
mov R18,R10
clr R19
ldi R16,2047
ldi R17,7
xcall _ReadPage
.dbline 204
ldi R24,<_PageBuf
ldi R25,>_PageBuf
std y+1,R25
std y+0,R24
mov R18,R10
clr R19
lds R16,_Bulk_Control_w+2
lds R17,_Bulk_Control_w+2+1
xcall _WritePage
.dbline 205
L92:
.dbline 201
inc R10
L94:
.dbline 201
lds R2,_Bulk_Control_w+5
cp R10,R2
brlo L91
.dbline 206
; {
; ReadPage(CANCEL_BLOCK,i,PageBuf);
; WritePage(Bulk_Control_w.CurrentBlock,i,PageBuf);
; }
; if(blockNum>Bulk_Control_w.CurrentBlock)
lds R2,_Bulk_Control_w+2
lds R3,_Bulk_Control_w+2+1
cp R2,R12
cpc R3,R13
brsh L97
.dbline 207
; {
.dbline 208
; Erase_Cluster(CANCEL_BLOCK);
ldi R16,2047
ldi R17,7
xcall _Erase_Cluster
.dbline 209
; for(i=pageNum;i<32;i++)
ldd R10,y+6
xjmp L103
L100:
.dbline 210
.dbline 211
ldi R24,<_PageBuf
ldi R25,>_PageBuf
std y+1,R25
std y+0,R24
mov R18,R10
clr R19
movw R16,R12
xcall _ReadPage
.dbline 212
ldi R24,<_PageBuf
ldi R25,>_PageBuf
std y+1,R25
std y+0,R24
mov R18,R10
clr R19
ldi R16,2047
ldi R17,7
xcall _WritePage
.dbline 213
L101:
.dbline 209
inc R10
L103:
.dbline 209
mov R24,R10
cpi R24,32
brlo L100
.dbline 214
; {
; ReadPage(blockNum,i,PageBuf);
; WritePage(CANCEL_BLOCK,i,PageBuf);
; }
; }
L97:
.dbline 215
; return TRUE;
ldi R16,1
.dbline -2
L54:
adiw R28,7
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym l pageNum 6 c
.dbsym l Logical_Block_Address 2 l
.dbsym r blockNum 12 i
.dbsym r j 14 c
.dbsym r i 10 c
.dbend
.dbfunc e SPC_LockMedia _SPC_LockMedia fc
.even
_SPC_LockMedia::
.dbline -1
.dbline 219
; #undef cdbWrite10
; }
; BOOLEAN SPC_LockMedia(void)
; {
.dbline 220
; Bulk_ErrorHandler(CSW_GOOD,0);
clr R18
clr R19
clr R16
xcall _Bulk_ErrorHandler
.dbline 221
; Bulk_CSWHandler();
xcall _Bulk_CSWHandler
.dbline 222
; return TRUE;
ldi R16,1
.dbline -2
L104:
.dbline 0 ; func end
ret
.dbend
.dbfunc e SPC_Reserve6 _SPC_Reserve6 fc
.even
_SPC_Reserve6::
.dbline -1
.dbline 225
; }
; BOOLEAN SPC_Reserve6(void)
; {
.dbline 226
; Bulk_ErrorHandler(CSW_FAIL,0);
clr R18
clr R19
ldi R16,1
xcall _Bulk_ErrorHandler
.dbline 227
; Bulk_CSWHandler();
xcall _Bulk_CSWHandler
.dbline 228
; return TRUE;
ldi R16,1
.dbline -2
L105:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile J:\PDIUSBD12-Materials\富昌\优盘5.0\SCSI.C
_PageBuf::
.blkb 512
.dbsym e PageBuf _PageBuf A[512:512]c
_Bulk_Control_w::
.blkb 10
.dbstruct 0 10 _BULK_CONTROL
.dbfield 0 Transfer_Length i
.dbfield 2 CurrentBlock i
.dbfield 4 CurrentPage c
.dbfield 5 BeginPage c
.dbfield 6 BufCount i
.dbfield 8 ReservedPage i
.dbend
.dbsym e Bulk_Control_w _Bulk_Control_w S[_BULK_CONTROL]
_Bulk_Control_r::
.blkb 10
.dbsym e Bulk_Control_r _Bulk_Control_r S[_BULK_CONTROL]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -