diff --git a/Source/HBIOS/ch376-native/base-drv/enumerate.c.s b/Source/HBIOS/ch376-native/base-drv/enumerate.c.s index 6a6c17c2..d6ec0f46 100644 --- a/Source/HBIOS/ch376-native/base-drv/enumerate.c.s +++ b/Source/HBIOS/ch376-native/base-drv/enumerate.c.s @@ -245,10 +245,12 @@ l_op_interface_next_00103: ; --------------------------------- _op_endpoint_next: ex de, hl -;source-doc/base-drv/enumerate.c:49: if (--working->endpoint_count > 0) { +;source-doc/base-drv/enumerate.c:49: if (working->endpoint_count != 0 && --working->endpoint_count > 0) { ld hl,0x0017 add hl, de ld a, (hl) + or a + jr Z,l_op_endpoint_next_00102 dec a ld (hl), a or a @@ -271,13 +273,13 @@ _op_endpoint_next: ;source-doc/base-drv/enumerate.c:51: return op_parse_endpoint(working); ex de, hl jp _op_parse_endpoint - jr l_op_endpoint_next_00103 + jr l_op_endpoint_next_00104 l_op_endpoint_next_00102: ;source-doc/base-drv/enumerate.c:54: return op_interface_next(working); ex de, hl call _op_interface_next ld a, l -l_op_endpoint_next_00103: +l_op_endpoint_next_00104: ;source-doc/base-drv/enumerate.c:55: } ret ;source-doc/base-drv/enumerate.c:57: usb_error op_parse_endpoint(_working *const working) __sdcccall(1) { diff --git a/Source/HBIOS/ch376-native/scsi-drv/class_scsi.c.s b/Source/HBIOS/ch376-native/scsi-drv/class_scsi.c.s index 672829ab..bc712804 100644 --- a/Source/HBIOS/ch376-native/scsi-drv/class_scsi.c.s +++ b/Source/HBIOS/ch376-native/scsi-drv/class_scsi.c.s @@ -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 diff --git a/Source/HBIOS/ch376-native/source-doc/base-drv/ch376.c b/Source/HBIOS/ch376-native/source-doc/base-drv/ch376.c index e8d9a87b..376a5ef2 100644 --- a/Source/HBIOS/ch376-native/source-doc/base-drv/ch376.c +++ b/Source/HBIOS/ch376-native/source-doc/base-drv/ch376.c @@ -186,7 +186,7 @@ done: return result; } -//TODO: review: does buffer_size need to be signed? +// TODO: review: does buffer_size need to be signed? usb_error ch_data_in_transfer_n(uint8_t *const buffer, int8_t *const buffer_size, endpoint_param *const endpoint) { uint8_t count; usb_error result; diff --git a/Source/HBIOS/ch376-native/source-doc/base-drv/enumerate.c b/Source/HBIOS/ch376-native/source-doc/base-drv/enumerate.c index 8393ec65..d294985b 100644 --- a/Source/HBIOS/ch376-native/source-doc/base-drv/enumerate.c +++ b/Source/HBIOS/ch376-native/source-doc/base-drv/enumerate.c @@ -46,7 +46,7 @@ usb_error op_interface_next(_working *const working) __z88dk_fastcall { } usb_error op_endpoint_next(_working *const working) __sdcccall(1) { - if (--working->endpoint_count > 0) { + if (working->endpoint_count != 0 && --working->endpoint_count > 0) { working->ptr += ((endpoint_descriptor *)working->ptr)->bLength; return op_parse_endpoint(working); } diff --git a/Source/HBIOS/ch376-native/source-doc/base-drv/transfers.c b/Source/HBIOS/ch376-native/source-doc/base-drv/transfers.c index 5b8ef9ae..2aab410e 100644 --- a/Source/HBIOS/ch376-native/source-doc/base-drv/transfers.c +++ b/Source/HBIOS/ch376-native/source-doc/base-drv/transfers.c @@ -159,7 +159,7 @@ usb_data_in_transfer_n(uint8_t *buffer, uint8_t *const buffer_size, const uint8_ ch_set_usb_address(device_address); - result = ch_data_in_transfer_n(buffer, buffer_size, endpoint); //does ch_data_in_transfer_n size need to be signed? + result = ch_data_in_transfer_n(buffer, buffer_size, endpoint); // does ch_data_in_transfer_n size need to be signed? critical_end(); diff --git a/Source/HBIOS/ch376-native/source-doc/scsi-drv/class_scsi.c b/Source/HBIOS/ch376-native/source-doc/scsi-drv/class_scsi.c index b4f34fc2..86e962c9 100644 --- a/Source/HBIOS/ch376-native/source-doc/scsi-drv/class_scsi.c +++ b/Source/HBIOS/ch376-native/source-doc/scsi-drv/class_scsi.c @@ -9,10 +9,11 @@ _scsi_command_block_wrapper scsi_command_block_wrapper = {{0x55, 0x53, 0x42, 0x4 uint16_t next_tag = 0; _scsi_command_status_wrapper csw = {{{0}}}; -usb_error do_scsi_cmd(device_config_storage *const dev, - _scsi_command_block_wrapper *const cbw, - void *const send_receive_buffer, - const bool send) { + +usb_error do_scsi_cmd(device_config_storage *const dev, + _scsi_command_block_wrapper *const cbw, + void *const send_receive_buffer, + const bool send) { cbw->dCBWTag[0] = next_tag++; @@ -48,12 +49,12 @@ done: return result; } -_scsi_read_capacity scsi_read_capacity = {0x25, 0, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0}}; +_scsi_read_capacity scsi_packet_read_capacity = {0x25, 0, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0}}; -usb_error get_scsi_read_capacity(device_config_storage *const dev, scsi_read_capacity_result *cap_result) { +usb_error scsi_read_capacity(device_config_storage *const dev, scsi_read_capacity_result *cap_result) { cbw_scsi_read_capacity cbw_scsi; cbw_scsi.cbw = scsi_command_block_wrapper; - cbw_scsi.read_capacity = scsi_read_capacity; + cbw_scsi.read_capacity = scsi_packet_read_capacity; cbw_scsi.cbw.bCBWLUN = 0; cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_read_capacity); diff --git a/Source/HBIOS/ch376-native/source-doc/scsi-drv/class_scsi.h b/Source/HBIOS/ch376-native/source-doc/scsi-drv/class_scsi.h index 356da856..bcdcc031 100644 --- a/Source/HBIOS/ch376-native/source-doc/scsi-drv/class_scsi.h +++ b/Source/HBIOS/ch376-native/source-doc/scsi-drv/class_scsi.h @@ -182,15 +182,12 @@ typedef struct { _scsi_packet_read_write scsi_cmd; } cbw_scsi_read_write; -extern usb_error get_scsi_read_capacity(device_config_storage *const dev, scsi_read_capacity_result *result); +extern usb_error scsi_read_capacity(device_config_storage *const dev, scsi_read_capacity_result *result); extern usb_error scsi_inquiry(device_config_storage *const dev, scsi_inquiry_result *inq_result); extern usb_error scsi_sense_init(device_config_storage *const dev); extern usb_error scsi_test(device_config_storage *const dev); extern usb_error scsi_request_sense(device_config_storage *const dev, scsi_sense_result *const sens_result); extern usb_error scsi_eject(device_config_storage *const dev); -extern usb_error scsi_read_write( - device_config_storage *const dev, const bool send, uint32_t sector_number, const uint8_t sector_count, uint8_t *const buffer); - extern usb_error scsi_read(device_config_storage *const dev, uint8_t *const buffer); extern usb_error scsi_write(device_config_storage *const dev, uint8_t *const buffer); #endif diff --git a/Source/HBIOS/ch376scsi.asm b/Source/HBIOS/ch376scsi.asm index 31c71dfc..5fad919e 100644 --- a/Source/HBIOS/ch376scsi.asm +++ b/Source/HBIOS/ch376scsi.asm @@ -237,7 +237,7 @@ CH_SCSI_CAP: push ix push iy - call _get_scsi_read_capacity + call _scsi_read_capacity pop iy pop ix