diff --git a/.vscode/settings.json b/.vscode/settings.json index f7b26e28..45145d9e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,11 @@ { + "z80-macroasm.format.enabled": true, + "z80-macroasm.format.baseIndent": 1, + "z80-macroasm.format.whitespaceAfterInstruction": "tab", + "z80-macroasm.format.uppercaseKeywords": true, + "z80-macroasm.format.spaceAfterArgument": true, + "z80-macroasm.format.hexaNumberStyle": "motorola", + "z80-macroasm.format.hexaNumberCase": true, "files.trimTrailingWhitespace": false, "files.eol": "\r\n", "files.associations": { 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 31d4623d..3976a6a0 100644 --- a/Source/HBIOS/ch376-native/scsi-drv/class_scsi.c.s +++ b/Source/HBIOS/ch376-native/scsi-drv/class_scsi.c.s @@ -37,10 +37,6 @@ _scsi_command_block_wrapper: DEFS 15 _next_tag: DEFS 2 -_csw: - DEFS 13 -_scsi_packet_request_sense: - DEFS 12 #ENDIF @@ -56,7 +52,7 @@ _scsi_packet_request_sense: ;-------------------------------------------------------- ; code ;-------------------------------------------------------- -;source-doc/scsi-drv/class_scsi.c:13: usb_error do_scsi_cmd(device_config_storage *const dev, +;source-doc/scsi-drv/class_scsi.c:11: usb_error do_scsi_cmd(device_config_storage *const dev, ; --------------------------------- ; Function do_scsi_cmd ; --------------------------------- @@ -64,15 +60,34 @@ _do_scsi_cmd: push ix ld ix,0 add ix,sp - ld hl, -8 + ld hl, -21 add hl, sp ld sp, hl -;source-doc/scsi-drv/class_scsi.c:20: cbw->dCBWTag[0] = next_tag++; +;source-doc/scsi-drv/class_scsi.c:17: _scsi_command_status_wrapper csw = {{{0}}}; + ld a,0x00 + ld (ix-21),a + ld (ix-20),a + ld (ix-19),a + ld (ix-18),a + xor a + ld (ix-17),a + ld (ix-16),a + xor a + ld (ix-15),a + ld (ix-14),a + ld a,0x00 + ld (ix-13),a + ld (ix-12),a + ld (ix-11),a + ld (ix-10),a + ld (ix-9),0x00 +;source-doc/scsi-drv/class_scsi.c:19: cbw->dCBWTag[0] = next_tag++; ld c,(ix+6) ld b,(ix+7) ld hl,0x0004 add hl, bc - ex (sp), hl + ld (ix-8),l + ld (ix-7),h ld a, (_next_tag) ld e, a ld hl,_next_tag + 1 @@ -80,24 +95,24 @@ _do_scsi_cmd: ld hl, (_next_tag) inc hl ld (_next_tag), hl - pop hl - push hl + ld l,(ix-8) + ld h,(ix-7) ld (hl), e inc hl ld (hl), d -;source-doc/scsi-drv/class_scsi.c:22: if (!send) +;source-doc/scsi-drv/class_scsi.c:21: if (!send) bit 0,(ix+10) jr NZ,l_do_scsi_cmd_00102 -;source-doc/scsi-drv/class_scsi.c:23: cbw->bmCBWFlags = 0x80; +;source-doc/scsi-drv/class_scsi.c:22: cbw->bmCBWFlags = 0x80; ld hl,0x000c add hl, bc ld (hl),0x80 l_do_scsi_cmd_00102: -;source-doc/scsi-drv/class_scsi.c:25: critical_begin(); +;source-doc/scsi-drv/class_scsi.c:24: critical_begin(); push bc call _critical_begin pop bc -;source-doc/scsi-drv/class_scsi.c:28: &dev->endpoints[ENDPOINT_BULK_OUT])); +;source-doc/scsi-drv/class_scsi.c:27: &dev->endpoints[ENDPOINT_BULK_OUT])); ld a,(ix+4) ld (ix-6),a ld e, a @@ -140,7 +155,7 @@ l_do_scsi_cmd_00102: ld a, l or a jp NZ, l_do_scsi_cmd_00120 -;source-doc/scsi-drv/class_scsi.c:30: if (cbw->dCBWDataTransferLength != 0) { +;source-doc/scsi-drv/class_scsi.c:29: if (cbw->dCBWDataTransferLength != 0) { ld hl,8 add hl, bc ld c, (hl) @@ -155,15 +170,15 @@ l_do_scsi_cmd_00102: or b or c jr Z,l_do_scsi_cmd_00113 -;source-doc/scsi-drv/class_scsi.c:33: &dev->endpoints[ENDPOINT_BULK_IN])); +;source-doc/scsi-drv/class_scsi.c:32: &dev->endpoints[ENDPOINT_BULK_IN])); ld (ix-2),c ld (ix-1),b ld c,(ix+8) ld b,(ix+9) -;source-doc/scsi-drv/class_scsi.c:31: if (!send) { +;source-doc/scsi-drv/class_scsi.c:30: if (!send) { bit 0,(ix+10) jr NZ,l_do_scsi_cmd_00110 -;source-doc/scsi-drv/class_scsi.c:33: &dev->endpoints[ENDPOINT_BULK_IN])); +;source-doc/scsi-drv/class_scsi.c:32: &dev->endpoints[ENDPOINT_BULK_IN])); ld a,(ix-6) add a,0x06 ld e, a @@ -195,7 +210,7 @@ l_do_scsi_cmd_00102: jr Z,l_do_scsi_cmd_00113 jr l_do_scsi_cmd_00120 l_do_scsi_cmd_00110: -;source-doc/scsi-drv/class_scsi.c:37: &dev->endpoints[ENDPOINT_BULK_OUT])); +;source-doc/scsi-drv/class_scsi.c:36: &dev->endpoints[ENDPOINT_BULK_OUT])); ld l,(ix-4) ld h,(ix-3) ld a, (hl) @@ -220,7 +235,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:42: 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:41: 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 c, a @@ -241,7 +256,8 @@ l_do_scsi_cmd_00113: inc sp ld hl,0x000d push hl - ld hl,_csw + ld hl,5 + add hl, sp push hl call _usb_data_in_transfer pop af @@ -251,38 +267,40 @@ l_do_scsi_cmd_00113: ld a, l or a jr NZ,l_do_scsi_cmd_00120 -;source-doc/scsi-drv/class_scsi.c:44: if (csw.bCSWStatus != 0 && csw.dCSWTag[0] != cbw->dCBWTag[0]) - ld a, (_csw + 12) +;source-doc/scsi-drv/class_scsi.c:43: if (csw.bCSWStatus != 0 || csw.dCSWTag[0] != cbw->dCBWTag[0]) + ld a,(ix-9) or a - jr Z,l_do_scsi_cmd_00117 - ld bc, (_csw + 4) - pop hl - ld a,(hl) - push hl + jr NZ,l_do_scsi_cmd_00116 + ld c,(ix-17) + ld b,(ix-16) + ld l,(ix-8) + ld h,(ix-7) + ld a, (hl) inc hl ld h, (hl) ld l, a xor a sbc hl,bc jr Z,l_do_scsi_cmd_00117 -;source-doc/scsi-drv/class_scsi.c:45: result = USB_ERR_FAIL; +l_do_scsi_cmd_00116: +;source-doc/scsi-drv/class_scsi.c:44: result = USB_ERR_FAIL; ld l,0x0e jr l_do_scsi_cmd_00120 l_do_scsi_cmd_00117: -;source-doc/scsi-drv/class_scsi.c:47: result = USB_ERR_OK; +;source-doc/scsi-drv/class_scsi.c:46: result = USB_ERR_OK; ld l,0x00 -;source-doc/scsi-drv/class_scsi.c:49: done: +;source-doc/scsi-drv/class_scsi.c:48: done: l_do_scsi_cmd_00120: -;source-doc/scsi-drv/class_scsi.c:50: critical_end(); +;source-doc/scsi-drv/class_scsi.c:49: critical_end(); push hl call _critical_end pop hl -;source-doc/scsi-drv/class_scsi.c:51: return result; -;source-doc/scsi-drv/class_scsi.c:52: } +;source-doc/scsi-drv/class_scsi.c:50: return result; +;source-doc/scsi-drv/class_scsi.c:51: } ld sp, ix pop ix ret -;source-doc/scsi-drv/class_scsi.c:54: usb_error scsi_test(device_config_storage *const dev) { +;source-doc/scsi-drv/class_scsi.c:53: usb_error scsi_test(device_config_storage *const dev) { ; --------------------------------- ; Function scsi_test ; --------------------------------- @@ -293,7 +311,7 @@ _scsi_test: ld hl, -27 add hl, sp ld sp, hl -;source-doc/scsi-drv/class_scsi.c:56: cbw_scsi.cbw = scsi_command_block_wrapper; +;source-doc/scsi-drv/class_scsi.c:55: cbw_scsi.cbw = scsi_command_block_wrapper; ld hl,0 add hl, sp ld e,l @@ -302,7 +320,7 @@ _scsi_test: ld bc,0x000f ld hl,_scsi_command_block_wrapper ldir -;source-doc/scsi-drv/class_scsi.c:57: memset(&cbw_scsi.test, 0, sizeof(_scsi_packet_test)); +;source-doc/scsi-drv/class_scsi.c:56: memset(&cbw_scsi.test, 0, sizeof(_scsi_packet_test)); ld hl,17 add hl, sp ld b,0x06 @@ -314,11 +332,11 @@ l_scsi_test_00103: inc hl djnz l_scsi_test_00103 pop bc -;source-doc/scsi-drv/class_scsi.c:59: cbw_scsi.cbw.bCBWLUN = 0; +;source-doc/scsi-drv/class_scsi.c:58: cbw_scsi.cbw.bCBWLUN = 0; ld (ix-14),0x00 -;source-doc/scsi-drv/class_scsi.c:60: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_test); +;source-doc/scsi-drv/class_scsi.c:59: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_test); ld (ix-13),0x0c -;source-doc/scsi-drv/class_scsi.c:61: cbw_scsi.cbw.dCBWDataTransferLength = 0; +;source-doc/scsi-drv/class_scsi.c:60: cbw_scsi.cbw.dCBWDataTransferLength = 0; ld hl,0x0008 add hl, bc xor a @@ -329,7 +347,7 @@ l_scsi_test_00103: ld (hl), a inc hl ld (hl), a -;source-doc/scsi-drv/class_scsi.c:63: return do_scsi_cmd(dev, &cbw_scsi.cbw, 0, false); +;source-doc/scsi-drv/class_scsi.c:62: return do_scsi_cmd(dev, &cbw_scsi.cbw, 0, false); xor a push af inc sp @@ -340,11 +358,11 @@ l_scsi_test_00103: ld h,(ix+5) push hl call _do_scsi_cmd -;source-doc/scsi-drv/class_scsi.c:64: } +;source-doc/scsi-drv/class_scsi.c:63: } ld sp,ix pop ix ret -;source-doc/scsi-drv/class_scsi.c:68: usb_error scsi_request_sense(device_config_storage *const dev, scsi_sense_result *const sens_result) { +;source-doc/scsi-drv/class_scsi.c:67: usb_error scsi_request_sense(device_config_storage *const dev, scsi_sense_result *const sens_result) { ; --------------------------------- ; Function scsi_request_sense ; --------------------------------- @@ -355,7 +373,7 @@ _scsi_request_sense: ld hl, -27 add hl, sp ld sp, hl -;source-doc/scsi-drv/class_scsi.c:70: cbw_scsi.cbw = scsi_command_block_wrapper; +;source-doc/scsi-drv/class_scsi.c:69: cbw_scsi.cbw = scsi_command_block_wrapper; ld hl,0 add hl, sp ld e,l @@ -364,7 +382,7 @@ _scsi_request_sense: ld bc,0x000f ld hl,_scsi_command_block_wrapper ldir -;source-doc/scsi-drv/class_scsi.c:71: cbw_scsi.request_sense = scsi_packet_request_sense; +;source-doc/scsi-drv/class_scsi.c:70: cbw_scsi.request_sense = scsi_packet_request_sense; ld hl,17 add hl, sp ex de, hl @@ -372,11 +390,11 @@ _scsi_request_sense: ld hl,_scsi_packet_request_sense ldir pop bc -;source-doc/scsi-drv/class_scsi.c:73: cbw_scsi.cbw.bCBWLUN = 0; +;source-doc/scsi-drv/class_scsi.c:72: cbw_scsi.cbw.bCBWLUN = 0; ld (ix-14),0x00 -;source-doc/scsi-drv/class_scsi.c:74: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_request_sense); +;source-doc/scsi-drv/class_scsi.c:73: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_request_sense); ld (ix-13),0x0c -;source-doc/scsi-drv/class_scsi.c:75: cbw_scsi.cbw.dCBWDataTransferLength = sizeof(scsi_sense_result); +;source-doc/scsi-drv/class_scsi.c:74: cbw_scsi.cbw.dCBWDataTransferLength = sizeof(scsi_sense_result); ld hl,0x0008 add hl, bc ld (hl),0x12 @@ -387,7 +405,7 @@ _scsi_request_sense: ld (hl), a inc hl ld (hl), a -;source-doc/scsi-drv/class_scsi.c:77: return do_scsi_cmd(dev, &cbw_scsi.cbw, sens_result, false); +;source-doc/scsi-drv/class_scsi.c:76: return do_scsi_cmd(dev, &cbw_scsi.cbw, sens_result, false); ld e,(ix+6) ld d,(ix+7) xor a @@ -399,37 +417,10 @@ _scsi_request_sense: ld h,(ix+5) push hl call _do_scsi_cmd -;source-doc/scsi-drv/class_scsi.c:78: } +;source-doc/scsi-drv/class_scsi.c:77: } ld sp,ix pop ix ret -_scsi_command_block_wrapper: - DEFB +0x55 - DEFB +0x53 - DEFB +0x42 - DEFB +0x43 - DEFW +0x0000 - DEFW +0x0000 - DEFB +0x00,0x00, +0x00, +0x00 - DEFB +0x00 - DEFB +0x00 - DEFB +0x00 -_next_tag: - DEFW +0x0000 -_csw: - DEFB +0x00 - DEFB 0x00 - DEFB 0x00 - DEFB 0x00 - DEFB 0x00 - DEFB 0x00 - DEFB 0x00 - DEFB 0x00 - DEFB 0x00 - DEFB 0x00 - DEFB 0x00 - DEFB 0x00 - DEFB +0x00 _scsi_packet_request_sense: DEFB +0x03 DEFB +0x00 @@ -443,3 +434,16 @@ _scsi_packet_request_sense: DEFB +0x00 DEFB +0x00 DEFB +0x00 +_scsi_command_block_wrapper: + DEFB +0x55 + DEFB +0x53 + DEFB +0x42 + DEFB +0x43 + DEFW +0x0000 + DEFW +0x0000 + DEFB +0x00,0x00, +0x00, +0x00 + DEFB +0x00 + DEFB +0x00 + DEFB +0x00 +_next_tag: + DEFW +0x0000 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 5a5a0e51..755681d3 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 @@ -8,14 +8,13 @@ _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 result; + _scsi_command_status_wrapper csw = {{{0}}}; cbw->dCBWTag[0] = next_tag++; @@ -41,7 +40,7 @@ usb_error do_scsi_cmd(device_config_storage *const dev, CHECK( usb_data_in_transfer((uint8_t *)&csw, sizeof(_scsi_command_status_wrapper), dev->address, &dev->endpoints[ENDPOINT_BULK_IN])); - if (csw.bCSWStatus != 0 && csw.dCSWTag[0] != cbw->dCBWTag[0]) + if (csw.bCSWStatus != 0 || csw.dCSWTag[0] != cbw->dCBWTag[0]) result = USB_ERR_FAIL; else result = USB_ERR_OK; @@ -63,7 +62,7 @@ usb_error scsi_test(device_config_storage *const dev) { return do_scsi_cmd(dev, &cbw_scsi.cbw, 0, false); } -_scsi_packet_request_sense scsi_packet_request_sense = {0x03, 0, 0, 0, 18, 0, {0, 0, 0, 0, 0, 0}}; +const _scsi_packet_request_sense scsi_packet_request_sense = {0x03, 0, 0, 0, 18, 0, {0, 0, 0, 0, 0, 0}}; usb_error scsi_request_sense(device_config_storage *const dev, scsi_sense_result *const sens_result) { cbw_scsi_request_sense cbw_scsi; diff --git a/Source/HBIOS/ez80cpudrv.asm b/Source/HBIOS/ez80cpudrv.asm index 510a8eec..e4d1499c 100644 --- a/Source/HBIOS/ez80cpudrv.asm +++ b/Source/HBIOS/ez80cpudrv.asm @@ -342,24 +342,20 @@ _EZ80_CPY_UHL_TO_EHL: ; set the upper byte (u of DE) to MB. _EZ80_EXTN_DE_TO_MB_DE: - PUSH IY - .DB $5B, $FD, $21, $00, $00, $00 ; LD.LIL IY, 0 + .DB $49, $D5 ; PUSH.L DE + .DB $5B, $FD, $21, $00, $00, $00 ; LD.LIL IY, 0 .DB $49, $FD, $39 ; ADD.L IY, SP - .DB $49, $FD, $1F, $FD ; LD.L (IY-3), DE - .DB $ED, $6E ; LD A, MB - .DB $49, $FD, $77, $FF ; LD.L (IY-1), A - .DB $49, $FD, $17, $FD ; LD.L DE, (IY-3) - POP IY + .DB $ED, $6E ; LD A, MB + .DB $5B, $FD, $77, $02 ; LD.LIL (IY+2), A + .DB $49, $D1 ; POP.L DE RET ; set the upper byte (u of IY) to MB. _EZ80_EXTN_IY_TO_MB_IY: - PUSH IX - .DB $5B, $DD, $21, $00, $00, $00 ; LD.LIL IX, 0 - .DB $49, $DD, $39 ; ADD.L IX, SP - .DB $49, $DD, $3E, $FD ; LD.L (IX-3), IY + .DB $49, $FD, $E5 ; PUSH.L IY + .DB $5B, $FD, $21, $00, $00, $00 ; LD.LIL IY, 0 + .DB $49, $FD, $39 ; ADD.L IY, SP .DB $ED, $6E ; LD A, MB - .DB $49, $DD, $77, $FF ; LD.L (IX-1), A - .DB $49, $DD, $31, $FD ; LD.L IY, (IX-3) - POP IX + .DB $5B, $FD, $77, $02 ; LD.LIL (IY+2), A + .DB $49, $FD, $E1 ; POP.L IY RET