|
|
|
@ -39,7 +39,7 @@ _next_tag: |
|
|
|
DEFS 2 |
|
|
|
_csw: |
|
|
|
DEFS 13 |
|
|
|
_scsi_read_capacity: |
|
|
|
_scsi_packet_read_capacity: |
|
|
|
DEFS 12 |
|
|
|
_scsi_packet_inquiry: |
|
|
|
DEFS 12 |
|
|
|
@ -62,7 +62,7 @@ _cbw: |
|
|
|
;-------------------------------------------------------- |
|
|
|
; code |
|
|
|
;-------------------------------------------------------- |
|
|
|
;source-doc/scsi-drv/class_scsi.c:12: usb_error do_scsi_cmd(device_config_storage *const dev, |
|
|
|
;source-doc/scsi-drv/class_scsi.c:13: usb_error do_scsi_cmd(device_config_storage *const dev, |
|
|
|
; --------------------------------- |
|
|
|
; Function do_scsi_cmd |
|
|
|
; --------------------------------- |
|
|
|
@ -73,7 +73,7 @@ _do_scsi_cmd: |
|
|
|
ld hl, -8 |
|
|
|
add hl, sp |
|
|
|
ld sp, hl |
|
|
|
;source-doc/scsi-drv/class_scsi.c:17: cbw->dCBWTag[0] = next_tag++; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:18: cbw->dCBWTag[0] = next_tag++; |
|
|
|
ld c,(ix+6) |
|
|
|
ld b,(ix+7) |
|
|
|
ld hl,0x0004 |
|
|
|
@ -91,19 +91,19 @@ _do_scsi_cmd: |
|
|
|
ld (hl), e |
|
|
|
inc hl |
|
|
|
ld (hl), d |
|
|
|
;source-doc/scsi-drv/class_scsi.c:19: if (!send) |
|
|
|
;source-doc/scsi-drv/class_scsi.c:20: if (!send) |
|
|
|
bit 0,(ix+10) |
|
|
|
jr NZ,l_do_scsi_cmd_00102 |
|
|
|
;source-doc/scsi-drv/class_scsi.c:20: cbw->bmCBWFlags = 0x80; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:21: cbw->bmCBWFlags = 0x80; |
|
|
|
ld hl,0x000c |
|
|
|
add hl, bc |
|
|
|
ld (hl),0x80 |
|
|
|
l_do_scsi_cmd_00102: |
|
|
|
;source-doc/scsi-drv/class_scsi.c:22: critical_begin(); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:23: critical_begin(); |
|
|
|
push bc |
|
|
|
call _critical_begin |
|
|
|
pop bc |
|
|
|
;source-doc/scsi-drv/class_scsi.c:25: &dev->endpoints[ENDPOINT_BULK_OUT])); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:26: &dev->endpoints[ENDPOINT_BULK_OUT])); |
|
|
|
ld a,(ix+4) |
|
|
|
ld (ix-6),a |
|
|
|
ld e, a |
|
|
|
@ -148,7 +148,7 @@ l_do_scsi_cmd_00102: |
|
|
|
ld a,(_result) |
|
|
|
or a |
|
|
|
jp NZ, l_do_scsi_cmd_00120 |
|
|
|
;source-doc/scsi-drv/class_scsi.c:27: if (cbw->dCBWDataTransferLength != 0) { |
|
|
|
;source-doc/scsi-drv/class_scsi.c:28: if (cbw->dCBWDataTransferLength != 0) { |
|
|
|
ld hl,8 |
|
|
|
add hl, bc |
|
|
|
ld c, (hl) |
|
|
|
@ -163,15 +163,15 @@ l_do_scsi_cmd_00102: |
|
|
|
or b |
|
|
|
or c |
|
|
|
jr Z,l_do_scsi_cmd_00113 |
|
|
|
;source-doc/scsi-drv/class_scsi.c:30: &dev->endpoints[ENDPOINT_BULK_IN])); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:31: &dev->endpoints[ENDPOINT_BULK_IN])); |
|
|
|
ld a,(ix+8) |
|
|
|
ld (ix-2),a |
|
|
|
ld a,(ix+9) |
|
|
|
ld (ix-1),a |
|
|
|
;source-doc/scsi-drv/class_scsi.c:28: if (!send) { |
|
|
|
;source-doc/scsi-drv/class_scsi.c:29: if (!send) { |
|
|
|
bit 0,(ix+10) |
|
|
|
jr NZ,l_do_scsi_cmd_00110 |
|
|
|
;source-doc/scsi-drv/class_scsi.c:30: &dev->endpoints[ENDPOINT_BULK_IN])); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:31: &dev->endpoints[ENDPOINT_BULK_IN])); |
|
|
|
ld a,(ix-6) |
|
|
|
add a,0x06 |
|
|
|
ld e, a |
|
|
|
@ -205,7 +205,7 @@ l_do_scsi_cmd_00102: |
|
|
|
jr Z,l_do_scsi_cmd_00113 |
|
|
|
jp l_do_scsi_cmd_00120 |
|
|
|
l_do_scsi_cmd_00110: |
|
|
|
;source-doc/scsi-drv/class_scsi.c:34: &dev->endpoints[ENDPOINT_BULK_OUT])); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:35: &dev->endpoints[ENDPOINT_BULK_OUT])); |
|
|
|
ld l,(ix-4) |
|
|
|
ld h,(ix-3) |
|
|
|
ld a, (hl) |
|
|
|
@ -232,7 +232,7 @@ l_do_scsi_cmd_00110: |
|
|
|
or a |
|
|
|
jr NZ,l_do_scsi_cmd_00120 |
|
|
|
l_do_scsi_cmd_00113: |
|
|
|
;source-doc/scsi-drv/class_scsi.c:39: usb_data_in_transfer((uint8_t *)&csw, sizeof(_scsi_command_status_wrapper), dev->address, &dev->endpoints[ENDPOINT_BULK_IN])); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:40: usb_data_in_transfer((uint8_t *)&csw, sizeof(_scsi_command_status_wrapper), dev->address, &dev->endpoints[ENDPOINT_BULK_IN])); |
|
|
|
ld a,(ix-6) |
|
|
|
add a,0x06 |
|
|
|
ld e, a |
|
|
|
@ -265,7 +265,7 @@ l_do_scsi_cmd_00113: |
|
|
|
ld a,(_result) |
|
|
|
or a |
|
|
|
jr NZ,l_do_scsi_cmd_00120 |
|
|
|
;source-doc/scsi-drv/class_scsi.c:41: if (csw.bCSWStatus != 0 && csw.dCSWTag[0] != cbw->dCBWTag[0]) |
|
|
|
;source-doc/scsi-drv/class_scsi.c:42: if (csw.bCSWStatus != 0 && csw.dCSWTag[0] != cbw->dCBWTag[0]) |
|
|
|
ld a, (_csw + 12) |
|
|
|
or a |
|
|
|
jr Z,l_do_scsi_cmd_00117 |
|
|
|
@ -279,36 +279,36 @@ l_do_scsi_cmd_00113: |
|
|
|
xor a |
|
|
|
sbc hl,bc |
|
|
|
jr Z,l_do_scsi_cmd_00117 |
|
|
|
;source-doc/scsi-drv/class_scsi.c:42: result = USB_ERR_FAIL; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:43: result = USB_ERR_FAIL; |
|
|
|
ld hl,_result |
|
|
|
ld (hl),0x0e |
|
|
|
jr l_do_scsi_cmd_00120 |
|
|
|
l_do_scsi_cmd_00117: |
|
|
|
;source-doc/scsi-drv/class_scsi.c:44: result = USB_ERR_OK; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:45: result = USB_ERR_OK; |
|
|
|
xor a |
|
|
|
ld (_result),a |
|
|
|
;source-doc/scsi-drv/class_scsi.c:46: done: |
|
|
|
;source-doc/scsi-drv/class_scsi.c:47: done: |
|
|
|
l_do_scsi_cmd_00120: |
|
|
|
;source-doc/scsi-drv/class_scsi.c:47: critical_end(); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:48: critical_end(); |
|
|
|
call _critical_end |
|
|
|
;source-doc/scsi-drv/class_scsi.c:48: return result; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:49: return result; |
|
|
|
ld hl, (_result) |
|
|
|
;source-doc/scsi-drv/class_scsi.c:49: } |
|
|
|
;source-doc/scsi-drv/class_scsi.c:50: } |
|
|
|
ld sp, ix |
|
|
|
pop ix |
|
|
|
ret |
|
|
|
;source-doc/scsi-drv/class_scsi.c:53: usb_error get_scsi_read_capacity(device_config_storage *const dev, scsi_read_capacity_result *cap_result) { |
|
|
|
;source-doc/scsi-drv/class_scsi.c:54: usb_error scsi_read_capacity(device_config_storage *const dev, scsi_read_capacity_result *cap_result) { |
|
|
|
; --------------------------------- |
|
|
|
; Function get_scsi_read_capacity |
|
|
|
; Function scsi_read_capacity |
|
|
|
; --------------------------------- |
|
|
|
_get_scsi_read_capacity: |
|
|
|
_scsi_read_capacity: |
|
|
|
push ix |
|
|
|
ld ix,0 |
|
|
|
add ix,sp |
|
|
|
ld hl, -27 |
|
|
|
add hl, sp |
|
|
|
ld sp, hl |
|
|
|
;source-doc/scsi-drv/class_scsi.c:55: cbw_scsi.cbw = scsi_command_block_wrapper; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:56: cbw_scsi.cbw = scsi_command_block_wrapper; |
|
|
|
ld hl,0 |
|
|
|
add hl, sp |
|
|
|
ld e,l |
|
|
|
@ -317,19 +317,19 @@ _get_scsi_read_capacity: |
|
|
|
ld bc,0x000f |
|
|
|
ld hl,_scsi_command_block_wrapper |
|
|
|
ldir |
|
|
|
;source-doc/scsi-drv/class_scsi.c:56: cbw_scsi.read_capacity = scsi_read_capacity; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:57: cbw_scsi.read_capacity = scsi_packet_read_capacity; |
|
|
|
ld hl,17 |
|
|
|
add hl, sp |
|
|
|
ex de, hl |
|
|
|
ld bc,0x000c |
|
|
|
ld hl,_scsi_read_capacity |
|
|
|
ld hl,_scsi_packet_read_capacity |
|
|
|
ldir |
|
|
|
pop bc |
|
|
|
;source-doc/scsi-drv/class_scsi.c:58: cbw_scsi.cbw.bCBWLUN = 0; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:59: cbw_scsi.cbw.bCBWLUN = 0; |
|
|
|
ld (ix-14),0x00 |
|
|
|
;source-doc/scsi-drv/class_scsi.c:59: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_read_capacity); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:60: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_read_capacity); |
|
|
|
ld (ix-13),0x0c |
|
|
|
;source-doc/scsi-drv/class_scsi.c:60: cbw_scsi.cbw.dCBWDataTransferLength = sizeof(scsi_read_capacity_result); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:61: cbw_scsi.cbw.dCBWDataTransferLength = sizeof(scsi_read_capacity_result); |
|
|
|
ld hl,0x0008 |
|
|
|
add hl, bc |
|
|
|
ld (hl),0x08 |
|
|
|
@ -340,7 +340,7 @@ _get_scsi_read_capacity: |
|
|
|
ld (hl), a |
|
|
|
inc hl |
|
|
|
ld (hl), a |
|
|
|
;source-doc/scsi-drv/class_scsi.c:62: return do_scsi_cmd(dev, &cbw_scsi.cbw, cap_result, false); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:63: return do_scsi_cmd(dev, &cbw_scsi.cbw, cap_result, false); |
|
|
|
ld e,(ix+6) |
|
|
|
ld d,(ix+7) |
|
|
|
xor a |
|
|
|
@ -352,11 +352,11 @@ _get_scsi_read_capacity: |
|
|
|
ld h,(ix+5) |
|
|
|
push hl |
|
|
|
call _do_scsi_cmd |
|
|
|
;source-doc/scsi-drv/class_scsi.c:63: } |
|
|
|
;source-doc/scsi-drv/class_scsi.c:64: } |
|
|
|
ld sp,ix |
|
|
|
pop ix |
|
|
|
ret |
|
|
|
;source-doc/scsi-drv/class_scsi.c:67: usb_error scsi_inquiry(device_config_storage *const dev, scsi_inquiry_result *inq_result) { |
|
|
|
;source-doc/scsi-drv/class_scsi.c:68: usb_error scsi_inquiry(device_config_storage *const dev, scsi_inquiry_result *inq_result) { |
|
|
|
; --------------------------------- |
|
|
|
; Function scsi_inquiry |
|
|
|
; --------------------------------- |
|
|
|
@ -367,7 +367,7 @@ _scsi_inquiry: |
|
|
|
ld hl, -27 |
|
|
|
add hl, sp |
|
|
|
ld sp, hl |
|
|
|
;source-doc/scsi-drv/class_scsi.c:69: cbw_scsi.cbw = scsi_command_block_wrapper; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:70: cbw_scsi.cbw = scsi_command_block_wrapper; |
|
|
|
ld hl,0 |
|
|
|
add hl, sp |
|
|
|
ld e,l |
|
|
|
@ -376,7 +376,7 @@ _scsi_inquiry: |
|
|
|
ld bc,0x000f |
|
|
|
ld hl,_scsi_command_block_wrapper |
|
|
|
ldir |
|
|
|
;source-doc/scsi-drv/class_scsi.c:70: cbw_scsi.inquiry = scsi_packet_inquiry; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:71: cbw_scsi.inquiry = scsi_packet_inquiry; |
|
|
|
ld hl,17 |
|
|
|
add hl, sp |
|
|
|
ex de, hl |
|
|
|
@ -384,11 +384,11 @@ _scsi_inquiry: |
|
|
|
ld hl,_scsi_packet_inquiry |
|
|
|
ldir |
|
|
|
pop bc |
|
|
|
;source-doc/scsi-drv/class_scsi.c:72: cbw_scsi.cbw.bCBWLUN = 0; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:73: cbw_scsi.cbw.bCBWLUN = 0; |
|
|
|
ld (ix-14),0x00 |
|
|
|
;source-doc/scsi-drv/class_scsi.c:73: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_inquiry); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:74: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_inquiry); |
|
|
|
ld (ix-13),0x0c |
|
|
|
;source-doc/scsi-drv/class_scsi.c:74: cbw_scsi.cbw.dCBWDataTransferLength = 0x24; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:75: cbw_scsi.cbw.dCBWDataTransferLength = 0x24; |
|
|
|
ld hl,0x0008 |
|
|
|
add hl, bc |
|
|
|
ld (hl),0x24 |
|
|
|
@ -399,7 +399,7 @@ _scsi_inquiry: |
|
|
|
ld (hl), a |
|
|
|
inc hl |
|
|
|
ld (hl), a |
|
|
|
;source-doc/scsi-drv/class_scsi.c:76: return do_scsi_cmd(dev, &cbw_scsi.cbw, inq_result, false); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:77: return do_scsi_cmd(dev, &cbw_scsi.cbw, inq_result, false); |
|
|
|
ld e,(ix+6) |
|
|
|
ld d,(ix+7) |
|
|
|
xor a |
|
|
|
@ -411,11 +411,11 @@ _scsi_inquiry: |
|
|
|
ld h,(ix+5) |
|
|
|
push hl |
|
|
|
call _do_scsi_cmd |
|
|
|
;source-doc/scsi-drv/class_scsi.c:77: } |
|
|
|
;source-doc/scsi-drv/class_scsi.c:78: } |
|
|
|
ld sp,ix |
|
|
|
pop ix |
|
|
|
ret |
|
|
|
;source-doc/scsi-drv/class_scsi.c:79: usb_error scsi_test(device_config_storage *const dev) { |
|
|
|
;source-doc/scsi-drv/class_scsi.c:80: usb_error scsi_test(device_config_storage *const dev) { |
|
|
|
; --------------------------------- |
|
|
|
; Function scsi_test |
|
|
|
; --------------------------------- |
|
|
|
@ -426,7 +426,7 @@ _scsi_test: |
|
|
|
ld hl, -27 |
|
|
|
add hl, sp |
|
|
|
ld sp, hl |
|
|
|
;source-doc/scsi-drv/class_scsi.c:81: cbw_scsi.cbw = scsi_command_block_wrapper; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:82: cbw_scsi.cbw = scsi_command_block_wrapper; |
|
|
|
ld hl,0 |
|
|
|
add hl, sp |
|
|
|
ld e,l |
|
|
|
@ -435,7 +435,7 @@ _scsi_test: |
|
|
|
ld bc,0x000f |
|
|
|
ld hl,_scsi_command_block_wrapper |
|
|
|
ldir |
|
|
|
;source-doc/scsi-drv/class_scsi.c:82: memset(&cbw_scsi.test, 0, sizeof(_scsi_packet_test)); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:83: memset(&cbw_scsi.test, 0, sizeof(_scsi_packet_test)); |
|
|
|
ld hl,17 |
|
|
|
add hl, sp |
|
|
|
ld b,0x06 |
|
|
|
@ -447,11 +447,11 @@ l_scsi_test_00103: |
|
|
|
inc hl |
|
|
|
djnz l_scsi_test_00103 |
|
|
|
pop bc |
|
|
|
;source-doc/scsi-drv/class_scsi.c:84: cbw_scsi.cbw.bCBWLUN = 0; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:85: cbw_scsi.cbw.bCBWLUN = 0; |
|
|
|
ld (ix-14),0x00 |
|
|
|
;source-doc/scsi-drv/class_scsi.c:85: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_test); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:86: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_test); |
|
|
|
ld (ix-13),0x0c |
|
|
|
;source-doc/scsi-drv/class_scsi.c:86: cbw_scsi.cbw.dCBWDataTransferLength = 0; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:87: cbw_scsi.cbw.dCBWDataTransferLength = 0; |
|
|
|
ld hl,0x0008 |
|
|
|
add hl, bc |
|
|
|
xor a |
|
|
|
@ -462,7 +462,7 @@ l_scsi_test_00103: |
|
|
|
ld (hl), a |
|
|
|
inc hl |
|
|
|
ld (hl), a |
|
|
|
;source-doc/scsi-drv/class_scsi.c:88: return do_scsi_cmd(dev, &cbw_scsi.cbw, 0, false); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:89: return do_scsi_cmd(dev, &cbw_scsi.cbw, 0, false); |
|
|
|
xor a |
|
|
|
push af |
|
|
|
inc sp |
|
|
|
@ -473,11 +473,11 @@ l_scsi_test_00103: |
|
|
|
ld h,(ix+5) |
|
|
|
push hl |
|
|
|
call _do_scsi_cmd |
|
|
|
;source-doc/scsi-drv/class_scsi.c:89: } |
|
|
|
;source-doc/scsi-drv/class_scsi.c:90: } |
|
|
|
ld sp,ix |
|
|
|
pop ix |
|
|
|
ret |
|
|
|
;source-doc/scsi-drv/class_scsi.c:93: usb_error scsi_request_sense(device_config_storage *const dev, scsi_sense_result *const sens_result) { |
|
|
|
;source-doc/scsi-drv/class_scsi.c:94: usb_error scsi_request_sense(device_config_storage *const dev, scsi_sense_result *const sens_result) { |
|
|
|
; --------------------------------- |
|
|
|
; Function scsi_request_sense |
|
|
|
; --------------------------------- |
|
|
|
@ -488,7 +488,7 @@ _scsi_request_sense: |
|
|
|
ld hl, -27 |
|
|
|
add hl, sp |
|
|
|
ld sp, hl |
|
|
|
;source-doc/scsi-drv/class_scsi.c:95: cbw_scsi.cbw = scsi_command_block_wrapper; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:96: cbw_scsi.cbw = scsi_command_block_wrapper; |
|
|
|
ld hl,0 |
|
|
|
add hl, sp |
|
|
|
ld e,l |
|
|
|
@ -497,7 +497,7 @@ _scsi_request_sense: |
|
|
|
ld bc,0x000f |
|
|
|
ld hl,_scsi_command_block_wrapper |
|
|
|
ldir |
|
|
|
;source-doc/scsi-drv/class_scsi.c:96: cbw_scsi.request_sense = scsi_packet_request_sense; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:97: cbw_scsi.request_sense = scsi_packet_request_sense; |
|
|
|
ld hl,17 |
|
|
|
add hl, sp |
|
|
|
ex de, hl |
|
|
|
@ -505,11 +505,11 @@ _scsi_request_sense: |
|
|
|
ld hl,_scsi_packet_request_sense |
|
|
|
ldir |
|
|
|
pop bc |
|
|
|
;source-doc/scsi-drv/class_scsi.c:98: cbw_scsi.cbw.bCBWLUN = 0; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:99: cbw_scsi.cbw.bCBWLUN = 0; |
|
|
|
ld (ix-14),0x00 |
|
|
|
;source-doc/scsi-drv/class_scsi.c:99: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_request_sense); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:100: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_request_sense); |
|
|
|
ld (ix-13),0x0c |
|
|
|
;source-doc/scsi-drv/class_scsi.c:100: cbw_scsi.cbw.dCBWDataTransferLength = sizeof(scsi_sense_result); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:101: cbw_scsi.cbw.dCBWDataTransferLength = sizeof(scsi_sense_result); |
|
|
|
ld hl,0x0008 |
|
|
|
add hl, bc |
|
|
|
ld (hl),0x12 |
|
|
|
@ -520,7 +520,7 @@ _scsi_request_sense: |
|
|
|
ld (hl), a |
|
|
|
inc hl |
|
|
|
ld (hl), a |
|
|
|
;source-doc/scsi-drv/class_scsi.c:102: return do_scsi_cmd(dev, &cbw_scsi.cbw, sens_result, false); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:103: return do_scsi_cmd(dev, &cbw_scsi.cbw, sens_result, false); |
|
|
|
ld e,(ix+6) |
|
|
|
ld d,(ix+7) |
|
|
|
xor a |
|
|
|
@ -532,11 +532,11 @@ _scsi_request_sense: |
|
|
|
ld h,(ix+5) |
|
|
|
push hl |
|
|
|
call _do_scsi_cmd |
|
|
|
;source-doc/scsi-drv/class_scsi.c:103: } |
|
|
|
;source-doc/scsi-drv/class_scsi.c:104: } |
|
|
|
ld sp,ix |
|
|
|
pop ix |
|
|
|
ret |
|
|
|
;source-doc/scsi-drv/class_scsi.c:105: usb_error scsi_sense_init(device_config_storage *const dev) { |
|
|
|
;source-doc/scsi-drv/class_scsi.c:106: usb_error scsi_sense_init(device_config_storage *const dev) { |
|
|
|
; --------------------------------- |
|
|
|
; Function scsi_sense_init |
|
|
|
; --------------------------------- |
|
|
|
@ -547,9 +547,9 @@ _scsi_sense_init: |
|
|
|
ld hl, -18 |
|
|
|
add hl, sp |
|
|
|
ld sp, hl |
|
|
|
;source-doc/scsi-drv/class_scsi.c:109: critical_begin(); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:110: critical_begin(); |
|
|
|
call _critical_begin |
|
|
|
;source-doc/scsi-drv/class_scsi.c:110: while ((result = scsi_test(dev)) && --counter > 0) |
|
|
|
;source-doc/scsi-drv/class_scsi.c:111: while ((result = scsi_test(dev)) && --counter > 0) |
|
|
|
ld c,0x03 |
|
|
|
l_scsi_sense_init_00102: |
|
|
|
push bc |
|
|
|
@ -565,7 +565,7 @@ l_scsi_sense_init_00102: |
|
|
|
jr Z,l_scsi_sense_init_00104 |
|
|
|
dec c |
|
|
|
jr Z,l_scsi_sense_init_00104 |
|
|
|
;source-doc/scsi-drv/class_scsi.c:111: scsi_request_sense(dev, &response); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:112: scsi_request_sense(dev, &response); |
|
|
|
ld hl,0 |
|
|
|
add hl, sp |
|
|
|
push bc |
|
|
|
@ -579,15 +579,15 @@ l_scsi_sense_init_00102: |
|
|
|
pop bc |
|
|
|
jr l_scsi_sense_init_00102 |
|
|
|
l_scsi_sense_init_00104: |
|
|
|
;source-doc/scsi-drv/class_scsi.c:112: critical_end(); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:113: critical_end(); |
|
|
|
call _critical_end |
|
|
|
;source-doc/scsi-drv/class_scsi.c:114: return result; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:115: return result; |
|
|
|
ld hl, (_result) |
|
|
|
;source-doc/scsi-drv/class_scsi.c:115: } |
|
|
|
;source-doc/scsi-drv/class_scsi.c:116: } |
|
|
|
ld sp, ix |
|
|
|
pop ix |
|
|
|
ret |
|
|
|
;source-doc/scsi-drv/class_scsi.c:119: usb_error scsi_read(device_config_storage *const dev, uint8_t *const buffer) { |
|
|
|
;source-doc/scsi-drv/class_scsi.c:120: usb_error scsi_read(device_config_storage *const dev, uint8_t *const buffer) { |
|
|
|
; --------------------------------- |
|
|
|
; Function scsi_read |
|
|
|
; --------------------------------- |
|
|
|
@ -595,7 +595,7 @@ _scsi_read: |
|
|
|
push ix |
|
|
|
ld ix,0 |
|
|
|
add ix,sp |
|
|
|
;source-doc/scsi-drv/class_scsi.c:120: memset(&cbw, 0, sizeof(cbw_scsi_read_write)); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:121: memset(&cbw, 0, sizeof(cbw_scsi_read_write)); |
|
|
|
ld de,_cbw |
|
|
|
ld l, e |
|
|
|
ld h, d |
|
|
|
@ -608,28 +608,28 @@ l_scsi_read_00113: |
|
|
|
ld (hl),0x00 |
|
|
|
inc hl |
|
|
|
djnz l_scsi_read_00112 |
|
|
|
;source-doc/scsi-drv/class_scsi.c:121: cbw.cbw = scsi_command_block_wrapper; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:122: cbw.cbw = scsi_command_block_wrapper; |
|
|
|
ld bc,0x000f |
|
|
|
ld hl,_scsi_command_block_wrapper |
|
|
|
ldir |
|
|
|
;source-doc/scsi-drv/class_scsi.c:123: cbw.cbw.bCBWLUN = 0; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:124: cbw.cbw.bCBWLUN = 0; |
|
|
|
ld hl,_cbw + 13 |
|
|
|
ld (hl),0x00 |
|
|
|
;source-doc/scsi-drv/class_scsi.c:124: cbw.cbw.bCBWCBLength = sizeof(_scsi_packet_read_write); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:125: cbw.cbw.bCBWCBLength = sizeof(_scsi_packet_read_write); |
|
|
|
ld hl,_cbw + 14 |
|
|
|
ld (hl),0x0c |
|
|
|
;source-doc/scsi-drv/class_scsi.c:125: cbw.cbw.dCBWDataTransferLength = 512; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:126: cbw.cbw.dCBWDataTransferLength = 512; |
|
|
|
ld hl,0x0200 |
|
|
|
ld (_cbw + 8),hl |
|
|
|
ld h, l |
|
|
|
ld (_cbw + 8 + 2),hl |
|
|
|
;source-doc/scsi-drv/class_scsi.c:127: cbw.scsi_cmd.operation_code = 0x28; // read operation |
|
|
|
;source-doc/scsi-drv/class_scsi.c:128: cbw.scsi_cmd.operation_code = 0x28; // read operation |
|
|
|
ld hl,_cbw + 15 |
|
|
|
ld (hl),0x28 |
|
|
|
;source-doc/scsi-drv/class_scsi.c:128: cbw.scsi_cmd.transfer_len[1] = 1; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:129: cbw.scsi_cmd.transfer_len[1] = 1; |
|
|
|
ld hl,_cbw + 23 |
|
|
|
ld (hl),0x01 |
|
|
|
;source-doc/scsi-drv/class_scsi.c:129: cbw.scsi_cmd.lba[0] = dev->current_lba >> 24; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:130: cbw.scsi_cmd.lba[0] = dev->current_lba >> 24; |
|
|
|
ld l,(ix+4) |
|
|
|
ld h,(ix+5) |
|
|
|
ld bc,0x000c |
|
|
|
@ -641,8 +641,8 @@ l_scsi_read_00113: |
|
|
|
inc hl |
|
|
|
ld a, (hl) |
|
|
|
ld ((_cbw + 17)),a |
|
|
|
;source-doc/scsi-drv/class_scsi.c:130: cbw.scsi_cmd.lba[1] = dev->current_lba >> 16; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:131: cbw.scsi_cmd.lba[2] = dev->current_lba >> 8; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:131: cbw.scsi_cmd.lba[1] = dev->current_lba >> 16; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:132: cbw.scsi_cmd.lba[2] = dev->current_lba >> 8; |
|
|
|
ld l,c |
|
|
|
ld h,b |
|
|
|
inc hl |
|
|
|
@ -653,11 +653,11 @@ l_scsi_read_00113: |
|
|
|
ld e, (hl) |
|
|
|
ld hl, +(_cbw + 19) |
|
|
|
ld (hl), e |
|
|
|
;source-doc/scsi-drv/class_scsi.c:132: cbw.scsi_cmd.lba[3] = dev->current_lba; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:133: cbw.scsi_cmd.lba[3] = dev->current_lba; |
|
|
|
ld a, (bc) |
|
|
|
inc hl |
|
|
|
ld (hl), a |
|
|
|
;source-doc/scsi-drv/class_scsi.c:134: result = do_scsi_cmd(dev, &cbw.cbw, buffer, false); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:135: result = do_scsi_cmd(dev, &cbw.cbw, buffer, false); |
|
|
|
ld e,(ix+6) |
|
|
|
ld d,(ix+7) |
|
|
|
push bc |
|
|
|
@ -678,11 +678,11 @@ l_scsi_read_00113: |
|
|
|
pop bc |
|
|
|
ld a, l |
|
|
|
ld (_result), a |
|
|
|
;source-doc/scsi-drv/class_scsi.c:136: if (result == USB_ERR_OK) |
|
|
|
;source-doc/scsi-drv/class_scsi.c:137: if (result == USB_ERR_OK) |
|
|
|
ld a,(_result) |
|
|
|
or a |
|
|
|
jr NZ,l_scsi_read_00102 |
|
|
|
;source-doc/scsi-drv/class_scsi.c:137: dev->current_lba++; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:138: dev->current_lba++; |
|
|
|
ld l, c |
|
|
|
ld h, b |
|
|
|
ld e, (hl) |
|
|
|
@ -711,12 +711,12 @@ l_scsi_read_00114: |
|
|
|
ld a, h |
|
|
|
ld (bc), a |
|
|
|
l_scsi_read_00102: |
|
|
|
;source-doc/scsi-drv/class_scsi.c:138: return result; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:139: return result; |
|
|
|
ld hl, (_result) |
|
|
|
;source-doc/scsi-drv/class_scsi.c:139: } |
|
|
|
;source-doc/scsi-drv/class_scsi.c:140: } |
|
|
|
pop ix |
|
|
|
ret |
|
|
|
;source-doc/scsi-drv/class_scsi.c:141: usb_error scsi_write(device_config_storage *const dev, uint8_t *const buffer) { |
|
|
|
;source-doc/scsi-drv/class_scsi.c:142: usb_error scsi_write(device_config_storage *const dev, uint8_t *const buffer) { |
|
|
|
; --------------------------------- |
|
|
|
; Function scsi_write |
|
|
|
; --------------------------------- |
|
|
|
@ -724,7 +724,7 @@ _scsi_write: |
|
|
|
push ix |
|
|
|
ld ix,0 |
|
|
|
add ix,sp |
|
|
|
;source-doc/scsi-drv/class_scsi.c:142: memset(&cbw, 0, sizeof(cbw_scsi_read_write)); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:143: memset(&cbw, 0, sizeof(cbw_scsi_read_write)); |
|
|
|
ld de,_cbw |
|
|
|
ld l, e |
|
|
|
ld h, d |
|
|
|
@ -737,28 +737,28 @@ l_scsi_write_00113: |
|
|
|
ld (hl),0x00 |
|
|
|
inc hl |
|
|
|
djnz l_scsi_write_00112 |
|
|
|
;source-doc/scsi-drv/class_scsi.c:143: cbw.cbw = scsi_command_block_wrapper; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:144: cbw.cbw = scsi_command_block_wrapper; |
|
|
|
ld bc,0x000f |
|
|
|
ld hl,_scsi_command_block_wrapper |
|
|
|
ldir |
|
|
|
;source-doc/scsi-drv/class_scsi.c:145: cbw.cbw.bCBWLUN = 0; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:146: cbw.cbw.bCBWLUN = 0; |
|
|
|
ld hl,_cbw + 13 |
|
|
|
ld (hl),0x00 |
|
|
|
;source-doc/scsi-drv/class_scsi.c:146: cbw.cbw.bCBWCBLength = sizeof(_scsi_packet_read_write); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:147: cbw.cbw.bCBWCBLength = sizeof(_scsi_packet_read_write); |
|
|
|
ld hl,_cbw + 14 |
|
|
|
ld (hl),0x0c |
|
|
|
;source-doc/scsi-drv/class_scsi.c:147: cbw.cbw.dCBWDataTransferLength = 512; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:148: cbw.cbw.dCBWDataTransferLength = 512; |
|
|
|
ld hl,0x0200 |
|
|
|
ld (_cbw + 8),hl |
|
|
|
ld h, l |
|
|
|
ld (_cbw + 8 + 2),hl |
|
|
|
;source-doc/scsi-drv/class_scsi.c:149: cbw.scsi_cmd.operation_code = 0x2A; // write operation |
|
|
|
;source-doc/scsi-drv/class_scsi.c:150: cbw.scsi_cmd.operation_code = 0x2A; // write operation |
|
|
|
ld hl,_cbw + 15 |
|
|
|
ld (hl),0x2a |
|
|
|
;source-doc/scsi-drv/class_scsi.c:150: cbw.scsi_cmd.transfer_len[1] = 1; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:151: cbw.scsi_cmd.transfer_len[1] = 1; |
|
|
|
ld hl,_cbw + 23 |
|
|
|
ld (hl),0x01 |
|
|
|
;source-doc/scsi-drv/class_scsi.c:151: cbw.scsi_cmd.lba[0] = dev->current_lba >> 24; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:152: cbw.scsi_cmd.lba[0] = dev->current_lba >> 24; |
|
|
|
ld l,(ix+4) |
|
|
|
ld h,(ix+5) |
|
|
|
ld bc,0x000c |
|
|
|
@ -770,8 +770,8 @@ l_scsi_write_00113: |
|
|
|
inc hl |
|
|
|
ld a, (hl) |
|
|
|
ld ((_cbw + 17)),a |
|
|
|
;source-doc/scsi-drv/class_scsi.c:152: cbw.scsi_cmd.lba[1] = dev->current_lba >> 16; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:153: cbw.scsi_cmd.lba[2] = dev->current_lba >> 8; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:153: cbw.scsi_cmd.lba[1] = dev->current_lba >> 16; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:154: cbw.scsi_cmd.lba[2] = dev->current_lba >> 8; |
|
|
|
ld l,c |
|
|
|
ld h,b |
|
|
|
inc hl |
|
|
|
@ -782,11 +782,11 @@ l_scsi_write_00113: |
|
|
|
ld e, (hl) |
|
|
|
ld hl, +(_cbw + 19) |
|
|
|
ld (hl), e |
|
|
|
;source-doc/scsi-drv/class_scsi.c:154: cbw.scsi_cmd.lba[3] = dev->current_lba; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:155: cbw.scsi_cmd.lba[3] = dev->current_lba; |
|
|
|
ld a, (bc) |
|
|
|
inc hl |
|
|
|
ld (hl), a |
|
|
|
;source-doc/scsi-drv/class_scsi.c:156: result = do_scsi_cmd(dev, &cbw.cbw, buffer, true); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:157: result = do_scsi_cmd(dev, &cbw.cbw, buffer, true); |
|
|
|
ld e,(ix+6) |
|
|
|
ld d,(ix+7) |
|
|
|
push bc |
|
|
|
@ -807,11 +807,11 @@ l_scsi_write_00113: |
|
|
|
pop bc |
|
|
|
ld a, l |
|
|
|
ld (_result), a |
|
|
|
;source-doc/scsi-drv/class_scsi.c:158: if (result == USB_ERR_OK) |
|
|
|
;source-doc/scsi-drv/class_scsi.c:159: if (result == USB_ERR_OK) |
|
|
|
ld a,(_result) |
|
|
|
or a |
|
|
|
jr NZ,l_scsi_write_00102 |
|
|
|
;source-doc/scsi-drv/class_scsi.c:159: dev->current_lba++; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:160: dev->current_lba++; |
|
|
|
ld l, c |
|
|
|
ld h, b |
|
|
|
ld e, (hl) |
|
|
|
@ -840,12 +840,12 @@ l_scsi_write_00114: |
|
|
|
ld a, h |
|
|
|
ld (bc), a |
|
|
|
l_scsi_write_00102: |
|
|
|
;source-doc/scsi-drv/class_scsi.c:160: return result; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:161: return result; |
|
|
|
ld hl, (_result) |
|
|
|
;source-doc/scsi-drv/class_scsi.c:161: } |
|
|
|
;source-doc/scsi-drv/class_scsi.c:162: } |
|
|
|
pop ix |
|
|
|
ret |
|
|
|
;source-doc/scsi-drv/class_scsi.c:163: usb_error scsi_eject(device_config_storage *const dev) { |
|
|
|
;source-doc/scsi-drv/class_scsi.c:164: usb_error scsi_eject(device_config_storage *const dev) { |
|
|
|
; --------------------------------- |
|
|
|
; Function scsi_eject |
|
|
|
; --------------------------------- |
|
|
|
@ -856,7 +856,7 @@ _scsi_eject: |
|
|
|
ld hl, -21 |
|
|
|
add hl, sp |
|
|
|
ld sp, hl |
|
|
|
;source-doc/scsi-drv/class_scsi.c:165: cbw_scsi.cbw = scsi_command_block_wrapper; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:166: cbw_scsi.cbw = scsi_command_block_wrapper; |
|
|
|
ld hl,0 |
|
|
|
add hl, sp |
|
|
|
ld e,l |
|
|
|
@ -865,7 +865,7 @@ _scsi_eject: |
|
|
|
ld bc,0x000f |
|
|
|
ld hl,_scsi_command_block_wrapper |
|
|
|
ldir |
|
|
|
;source-doc/scsi-drv/class_scsi.c:167: memset(&cbw_scsi.eject, 0, sizeof(_scsi_packet_eject)); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:168: memset(&cbw_scsi.eject, 0, sizeof(_scsi_packet_eject)); |
|
|
|
ld hl,17 |
|
|
|
add hl, sp |
|
|
|
ld b,0x03 |
|
|
|
@ -877,17 +877,17 @@ l_scsi_eject_00103: |
|
|
|
inc hl |
|
|
|
djnz l_scsi_eject_00103 |
|
|
|
pop bc |
|
|
|
;source-doc/scsi-drv/class_scsi.c:169: cbw_scsi.eject.operation_code = 0x1B; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:170: cbw_scsi.eject.operation_code = 0x1B; |
|
|
|
ld (ix-6),0x1b |
|
|
|
;source-doc/scsi-drv/class_scsi.c:170: cbw_scsi.eject.loej = 1; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:171: cbw_scsi.eject.loej = 1; |
|
|
|
ld hl,19 |
|
|
|
add hl, sp |
|
|
|
set 1, (hl) |
|
|
|
;source-doc/scsi-drv/class_scsi.c:172: cbw_scsi.cbw.bCBWLUN = 0; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:173: cbw_scsi.cbw.bCBWLUN = 0; |
|
|
|
ld (ix-8),0x00 |
|
|
|
;source-doc/scsi-drv/class_scsi.c:173: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_eject); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:174: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_eject); |
|
|
|
ld (ix-7),0x06 |
|
|
|
;source-doc/scsi-drv/class_scsi.c:174: cbw_scsi.cbw.dCBWDataTransferLength = 0; |
|
|
|
;source-doc/scsi-drv/class_scsi.c:175: cbw_scsi.cbw.dCBWDataTransferLength = 0; |
|
|
|
ld hl,0x0008 |
|
|
|
add hl, bc |
|
|
|
xor a |
|
|
|
@ -898,7 +898,7 @@ l_scsi_eject_00103: |
|
|
|
ld (hl), a |
|
|
|
inc hl |
|
|
|
ld (hl), a |
|
|
|
;source-doc/scsi-drv/class_scsi.c:176: return do_scsi_cmd(dev, &cbw_scsi.cbw, 0, false); |
|
|
|
;source-doc/scsi-drv/class_scsi.c:177: return do_scsi_cmd(dev, &cbw_scsi.cbw, 0, false); |
|
|
|
xor a |
|
|
|
push af |
|
|
|
inc sp |
|
|
|
@ -909,7 +909,7 @@ l_scsi_eject_00103: |
|
|
|
ld h,(ix+5) |
|
|
|
push hl |
|
|
|
call _do_scsi_cmd |
|
|
|
;source-doc/scsi-drv/class_scsi.c:177: } |
|
|
|
;source-doc/scsi-drv/class_scsi.c:178: } |
|
|
|
ld sp,ix |
|
|
|
pop ix |
|
|
|
ret |
|
|
|
@ -940,7 +940,7 @@ _csw: |
|
|
|
DEFB 0x00 |
|
|
|
DEFB 0x00 |
|
|
|
DEFB +0x00 |
|
|
|
_scsi_read_capacity: |
|
|
|
_scsi_packet_read_capacity: |
|
|
|
DEFB +0x25 |
|
|
|
DEFB +0x00 |
|
|
|
DEFB +0x00 |
|
|
|
|