⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scsi.s

📁 Atmeag162-k9f5608-pdiusbd12-u usb接口 u盘源码 包括fat文件源码
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module SCSI.C
	.area lit(rom, con, rel)
_inquiryData::
	.byte 0
	.byte 128
	.byte 2
	.byte 2
	.byte 31,0
	.byte 0
	.byte 0
	.byte 'Y,'U
	.byte 'X,'K
	.byte 50,48
	.byte 48,53
	.byte 'U,'S
	.byte 'B,45
	.byte 'M,'A
	.byte 'S,'S
	.byte 45,'S
	.byte 'T,'O
	.byte 'R,'A
	.byte 'G,'E
	.byte 48,46
	.byte 48,48
	.dbfile D:\AvrUSB\SCSI.C
	.dbsym e inquiryData _inquiryData kX
_ModeData::
	.byte 3
	.byte 0
	.byte 0
	.byte 0
	.dbsym e ModeData _ModeData kX
_ReadCapacityData::
	.byte 0,0
	.byte 251,255
	.byte 0,0
	.byte 2,0
	.dbsym e ReadCapacityData _ReadCapacityData kX
_CapacitylistHead::
	.byte 0,0
	.byte 0
	.byte 8
	.dbsym e CapacitylistHead _CapacitylistHead kX
_CMFormatCapacityData::
	.byte 0,16
	.byte 0,0
	.byte 3
	.byte 0,2
	.byte 0
	.dbsym e CMFormatCapacityData _CMFormatCapacityData kX
	.area text(rom, con, rel)
	.dbfile D:\AvrUSB\SCSI.C
	.dbfunc e RBC_Hander _RBC_Hander fc
;         result -> R20
	.even
_RBC_Hander::
	xcall push_gset2
	.dbline -1
	.dbline 73
; #include <iom162v.h>
; #include <macros.h>
; #include "SCSI.H"
; #include "SCSIDef.H"
; #include "BulkOnly.H"
; #include "MAIN.H"
; 
; #include "Fat.h"
; 
; 
; extern BULK_STRUCT  Bulk_Block;
; extern CONTROL_XFER ControlData;
; extern EPPFLAGS         bEPPflags;
; BULK_CONTROL            Bulk_Control_r;
; BULK_CONTROL            Bulk_Control_w;
; unsigned char           PageBuf[512];
; 
; #define CBW_bCBWCBLength Bulk_Block.cbw.dCBWDataTransferLength
; 
; const STD_INQUIRY_DATA inquiryData={
;    0,//unsigned       DeviceType             :5;
;    0,//unsigned       Reserved0              :3;
;    0,//unsigned       Reserved1              :7;
;    1,//unsigned       RemovableMedia         :1;
;    2,//unsigned char  Reserved2;
;    2,//unsigned       Reserved3              :5;
;    0,//unsigned       NormACA                :1;
;    0,//unsigned       Obsolete0              :1;
;    0,//unsigned       AERC                   :1;
;    0x1f,0,0,//unsigned char  Reserved4[3];
;    0,//unsigned       SoftReset              :1;
;    0,//unsigned       CommandQueue           :1;
;    0,//unsigned       Reserved5              :1;
;    0,//unsigned       LinkedCommands         :1;
;    0,//unsigned       Synchronous            :1;
;    0,//unsigned       Wide16Bit              :1;
;    0,//unsigned       Wide32Bit              :1;
;    0,//unsigned       RelativeAddressing     :1;
;    'Y','U','X','K',  //VendorInformation[8];
;    '2','0','0','5',
;    'U','S','B','-',  //ProductInformation[16];
;    'M','A','S','S',
;    '-','S','T','O',
;    'R','A','G','E',
;    '0','.','0','0',   //ProductReisionLevel[4];
; };
; 
; const MODE_DATA ModeData={
;    3,//unsigned char  OperationCode;
;    0,//unsigned char  Reserved0;
;    0,//unsigned       Reserved1               :7;
;    0,//unsigned       WP                      :1;   
;    0 //unsigned char  Reserved2;  
; };
; const READ_CAPACITY_DATA ReadCapacityData={
;    0,0,0xfb,0xff,//unsigned char LogicalBlockAddress[4];
;    0,0,0x02,0//unsigned char LogicalLength[4];
; };
; #define CAPACITY_LIST_LENGTH sizeof(CAPACITYLIST_HEAD)+sizeof(CM_FORMAT_CAPACITY_DATA)
; const CAPACITYLIST_HEAD CapacitylistHead={
;    0,0,0,//unsigned char Reserved0[3];
;    sizeof(CM_FORMAT_CAPACITY_DATA) //unsigned char CapacityLength;
; };
; const CM_FORMAT_CAPACITY_DATA CMFormatCapacityData={
;    0,0x10,0,0,//unsigned char LogicalBlockAddress[4];
;    3, //unsigned      DescriptorCode                  :2;
;    0, //unsigned      Reserved0                       :6;
;    0,2,0 //unsigned char LogicalLength[3];
; };
; 
; 
; BOOLEAN  RBC_Hander(void)
; {                              
	.dbline 76
; #define cdbGeneric  Bulk_Block.cbw.CBWCB.RbcCdb_Generic
; 
;   BOOLEAN result=FALSE;
	clr R20
	.dbline 77
;   ControlData.wLength=0;
	clr R2
	clr R3
	sts _ControlData+8+1,R3
	sts _ControlData+8,R2
	.dbline 78
;   switch(cdbGeneric.OperationCode)
	lds R22,_Bulk_Block+15
	clr R23
	cpi R22,26
	ldi R30,0
	cpc R23,R30
	brne X2
	xjmp L8
X2:
	ldi R24,26
	ldi R25,0
	cp R24,R22
	cpc R25,R23
	brlt L18
L17:
	cpi R22,18
	ldi R30,0
	cpc R23,R30
	breq L7
	ldi R24,18
	ldi R25,0
	cp R24,R22
	cpc R25,R23
	brlt L20
L19:
	cpi R22,0
	cpc R22,R23
	brne X3
	xjmp L12
X3:
X0:
	xjmp L3
L20:
	cpi R22,22
	ldi R30,0
	cpc R23,R30
	brne X4
	xjmp L16
X4:
	xjmp L3
L18:
	cpi R22,35
	ldi R30,0
	cpc R23,R30
	breq L11
	cpi R22,37
	ldi R30,0
	cpc R23,R30
	breq L10
	cpi R22,40
	ldi R30,0
	cpc R23,R30
	breq L9
	cpi R22,42
	ldi R30,0
	cpc R23,R30
	breq L14
	ldi R24,42
	ldi R25,0
	cp R24,R22
	cpc R25,R23
	brlt L22
L21:
	cpi R22,30
	ldi R30,0
	cpc R23,R30
	breq L15
	xjmp L3
L22:
	cpi R22,47
	ldi R30,0
	cpc R23,R30
	breq L13
	xjmp L3
X1:
	.dbline 79
;   {  
L7:
	.dbline 81
;        case SPC_CMD_INQUIRY:
;            result=SPC_InQuiry();
	xcall _SPC_InQuiry
	mov R20,R16
	.dbline 82
;            break;
	xjmp L4
L8:
	.dbline 84
; 	   case SPC_CMD_MODESENSE6:
;            result=SPC_ModeSense();
	xcall _SPC_ModeSense
	mov R20,R16
	.dbline 85
;            break;	   
	xjmp L4
L9:
	.dbline 87
; 	   case RBC_CMD_READ10:
; 	       result=RBC_Read10();
	xcall _RBC_Read10
	mov R20,R16
	.dbline 88
; 	       break;   
	xjmp L4
L10:
	.dbline 90
;   	   case RBC_CMD_READCAPACITY:
; 	       result=RBC_ReadCapacity();
	xcall _RBC_ReadCapacity
	mov R20,R16
	.dbline 91
; 	       break;
	xjmp L4
L11:
	.dbline 93
; 	   case SPC_CMD_FORMAT_CAPACITY:
;            result=SPC_FormatCapacity();
	xcall _SPC_FormatCapacity
	mov R20,R16
	.dbline 94
;            break;
	xjmp L4
L12:
	.dbline 96
; 	   case SPC_CMD_TESTUNITREADY:
;            result=SPC_TestUnit();
	xcall _SPC_TestUnit
	mov R20,R16
	.dbline 97
;            break;
	xjmp L4
L13:
	.dbline 99
;       case RBC_CMD_VERIFY10:
;            result=RBC_Verify10();
	xcall _RBC_Verify10
	mov R20,R16
	.dbline 100
;            break;
	xjmp L4
L14:
	.dbline 102
;       case RBC_CMD_WRITE10:
;            result=RBC_Write10();
	xcall _RBC_Write10
	mov R20,R16
	.dbline 103
;            break;
	xjmp L4
L15:
	.dbline 105
;       case SPC_CMD_PRVENTALLOWMEDIUMREMOVAL:
;            result=SPC_LockMedia();
	xcall _SPC_LockMedia
	mov R20,R16
	.dbline 106
;            break;
	xjmp L4
L16:
L3:
	.dbline 109
;       case SPC_CMD_RESERVE6:
;       default:
; 	       result=SPC_Reserve6();
	xcall _SPC_Reserve6
	mov R20,R16
	.dbline 110
;            break;   
L4:
	.dbline 112
;   } 
;   return result;
	mov R16,R20
	.dbline -2
L1:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r result 20 c
	.dbend
	.dbfunc e SPC_InQuiry _SPC_InQuiry fc
	.even
_SPC_InQuiry::
	.dbline -1
	.dbline 116
; #undef cdbGeneric  
; }
; BOOLEAN  SPC_InQuiry(void)
; {
	.dbline 117
;   Bulk_code_transmit((const unsigned char*)&inquiryData,
	ldi R18,36
	ldi R19,0
	ldi R16,<_inquiryData
	ldi R17,>_inquiryData
	xcall _Bulk_code_transmit
	.dbline 119
;                       sizeof(STD_INQUIRY_DATA));
;   return TRUE;
	ldi R16,1
	.dbline -2
L23:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e SPC_ModeSense _SPC_ModeSense fc
	.even
_SPC_ModeSense::
	.dbline -1
	.dbline 122
; }
; BOOLEAN  SPC_ModeSense(void)
; {
	.dbline 123
;  Bulk_code_transmit((const unsigned char*)&ModeData,
	ldi R18,4
	ldi R19,0
	ldi R16,<_ModeData
	ldi R17,>_ModeData
	xcall _Bulk_code_transmit
	.dbline 125
; 		                       sizeof(MODE_DATA)); 
;   return TRUE;
	ldi R16,1
	.dbline -2
L24:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e RBC_Read10 _RBC_Read10 fc
; Logical_Block_Address -> y+2
	.even
_RBC_Read10::
	xcall push_gset2
	sbiw R28,6
	.dbline -1
	.dbline 128
; }
; BOOLEAN  RBC_Read10(void)
; {  
	.dbline 131
; #define cdbRead10 Bulk_Block.cbw.CBWCB.RbcCdb_Read10
;   unsigned long Logical_Block_Address;
;   Logical_Block_Address=cdbRead10.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 132
;   Logical_Block_Address+=cdbRead10.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 133
;   Logical_Block_Address+=cdbRead10.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 134
;   Logical_Block_Address+=cdbRead10.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 135
;   Bulk_Control_r.Transfer_Length=cdbRead10.TransferLength[0]*256+cdbRead10.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_r+1,R3
	sts _Bulk_Control_r,R2
	.dbline 136
;   Bulk_Control_r.CurrentPage=Logical_Block_Address%0x20;
	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_r+4,R2
	.dbline 137
;   Bulk_Control_r.CurrentBlock=Logical_Block_Address/0x20;
	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_r+2+1,R17
	sts _Bulk_Control_r+2,R16
	.dbline 138
;   ReadPage(Bulk_Control_r.CurrentBlock,Bulk_Control_r.CurrentPage,PageBuf);  
	ldi R24,<_PageBuf
	ldi R25,>_PageBuf
	std y+1,R25
	std y+0,R24
	lds R18,_Bulk_Control_r+4
	clr R19
	xcall _ReadPage
	.dbline 139
;   Bulk_Control_r.Transfer_Length--;
	lds R24,_Bulk_Control_r
	lds R25,_Bulk_Control_r+1
	sbiw R24,1
	sts _Bulk_Control_r+1,R25
	sts _Bulk_Control_r,R24
	.dbline 140
;   Bulk_Control_r.CurrentPage++;
	lds R24,_Bulk_Control_r+4
	subi R24,255    ; addi 1
	sts _Bulk_Control_r+4,R24
	.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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -