Browse Source

ch376-native: fixed issue where keyboard int handler could cause corruption of io

pull/592/head
Dean Netherton 9 months ago
parent
commit
024074b2cf
  1. 4
      Source/HBIOS/Config/RCEZ80_std.asm
  2. 284
      Source/HBIOS/ch376-native/base-drv/ch376.c.s
  3. 331
      Source/HBIOS/ch376-native/base-drv/dev_transfers.c.s
  4. 128
      Source/HBIOS/ch376-native/base-drv/protocol.c.s
  5. 56
      Source/HBIOS/ch376-native/base-drv/transfers.c.s
  6. 6
      Source/HBIOS/ch376-native/base-drv/usb-base-drv.c.s
  7. 51
      Source/HBIOS/ch376-native/keyboard/kyb_driver.c.s
  8. 107
      Source/HBIOS/ch376-native/scsi-drv/class_scsi.c.s
  9. 295
      Source/HBIOS/ch376-native/scsi-drv/scsi_driver.c.s
  10. 5
      Source/HBIOS/ch376-native/source-doc/base-drv/ch376.c
  11. 2
      Source/HBIOS/ch376-native/source-doc/base-drv/ch376.h
  12. 6
      Source/HBIOS/ch376-native/source-doc/base-drv/dev_transfers.c
  13. 4
      Source/HBIOS/ch376-native/source-doc/base-drv/protocol.c
  14. 4
      Source/HBIOS/ch376-native/source-doc/base-drv/transfers.c
  15. 2
      Source/HBIOS/ch376-native/source-doc/keyboard/kyb_driver.c
  16. 2
      Source/HBIOS/ch376-native/source-doc/scsi-drv/class_scsi.c
  17. 5
      Source/HBIOS/ch376-native/source-doc/scsi-drv/scsi_driver.c
  18. 2
      Source/HBIOS/ch376-native/source-doc/ufi-drv/usb_cbi.c
  19. 26
      Source/HBIOS/ch376-native/ufi-drv/usb_cbi.c.s

4
Source/HBIOS/Config/RCEZ80_std.asm

@ -89,7 +89,7 @@ CH1USBENABLE .SET FALSE ; CH376: ENABLE CH376 USB DRIVER
CHNATIVEENABLE .SET TRUE ; CH376: ENABLE CH376 NATIVE USB DRIVER CHNATIVEENABLE .SET TRUE ; CH376: ENABLE CH376 NATIVE USB DRIVER
CHSCSIENABLE .SET TRUE ; CH376: ENABLE CH376 NATIVE MASS STORAGE DEVICES (REQUIRES CHNATIVEENABLE) CHSCSIENABLE .SET TRUE ; CH376: ENABLE CH376 NATIVE MASS STORAGE DEVICES (REQUIRES CHNATIVEENABLE)
CHUFIENABLE .SET TRUE ; CH376: ENABLE CH376 NATIVE UFI FLOPPY DISK DEVICES (REQUIRES CHNATIVEENABLE) CHUFIENABLE .SET TRUE ; CH376: ENABLE CH376 NATIVE UFI FLOPPY DISK DEVICES (REQUIRES CHNATIVEENABLE)
CHNATIVEEZ80 .SET FALSE ; CH376: DELEGATE USB DRIVERS TO EZ80'S FIRMWARE
CHNATIVEEZ80 .SET TRUE ; CH376: DELEGATE USB DRIVERS TO EZ80'S FIRMWARE
CHNATIVEFORCE .SET TRUE ; CH376: DISABLE AUTO-DETECTION OF MODULE - ASSUME ITS INSTALLED CHNATIVEFORCE .SET TRUE ; CH376: DISABLE AUTO-DETECTION OF MODULE - ASSUME ITS INSTALLED
EZ80TIMER .SET EZ80TMR_INT ; EZ80: TIMER TICK MODEL: EZ80TMR_[INT|FIRM]
EZ80TIMER .SET EZ80TMR_FIRM ; EZ80: TIMER TICK MODEL: EZ80TMR_[INT|FIRM]

284
Source/HBIOS/ch376-native/base-drv/ch376.c.s

@ -33,8 +33,6 @@ _USB_MODULE_LEDS .EQU 0xff8a
; .area _INITIALIZED removed by z88dk ; .area _INITIALIZED removed by z88dk
_result:
DEFS 1
#ENDIF #ENDIF
@ -50,12 +48,12 @@ _result:
;-------------------------------------------------------- ;--------------------------------------------------------
; code ; code
;-------------------------------------------------------- ;--------------------------------------------------------
;source-doc/base-drv/ch376.c:8: void ch_command(const uint8_t command) __z88dk_fastcall {
;source-doc/base-drv/ch376.c:6: void ch_command(const uint8_t command) __z88dk_fastcall {
; --------------------------------- ; ---------------------------------
; Function ch_command ; Function ch_command
; --------------------------------- ; ---------------------------------
_ch_command: _ch_command:
;source-doc/base-drv/ch376.c:10: while ((CH376_COMMAND_PORT & PARA_STATE_BUSY) && --counter != 0)
;source-doc/base-drv/ch376.c:8: while ((CH376_COMMAND_PORT & PARA_STATE_BUSY) && --counter != 0)
ld b,0xff ld b,0xff
l_ch_command_00102: l_ch_command_00102:
ld a, +((_CH376_COMMAND_PORT) / 256) ld a, +((_CH376_COMMAND_PORT) / 256)
@ -64,150 +62,150 @@ l_ch_command_00102:
jr Z,l_ch_command_00104 jr Z,l_ch_command_00104
djnz l_ch_command_00102 djnz l_ch_command_00102
l_ch_command_00104: l_ch_command_00104:
;source-doc/base-drv/ch376.c:21: CH376_COMMAND_PORT = command;
;source-doc/base-drv/ch376.c:19: CH376_COMMAND_PORT = command;
ld a, l ld a, l
ld bc,_CH376_COMMAND_PORT ld bc,_CH376_COMMAND_PORT
out (c), a out (c), a
;source-doc/base-drv/ch376.c:22: }
;source-doc/base-drv/ch376.c:20: }
ret ret
;source-doc/base-drv/ch376.c:26: usb_error ch_long_wait_int_and_get_status(void) { return ch_wait_int_and_get_status(5000); }
;source-doc/base-drv/ch376.c:24: usb_error ch_long_wait_int_and_get_status(void) { return ch_wait_int_and_get_status(5000); }
; --------------------------------- ; ---------------------------------
; Function ch_long_wait_int_and_get_status ; Function ch_long_wait_int_and_get_status
; --------------------------------- ; ---------------------------------
_ch_long_wait_int_and_get_statu: _ch_long_wait_int_and_get_statu:
ld hl,0x1388 ld hl,0x1388
jp _ch_wait_int_and_get_status jp _ch_wait_int_and_get_status
;source-doc/base-drv/ch376.c:28: usb_error ch_short_wait_int_and_get_statu(void) { return ch_wait_int_and_get_status(100); }
;source-doc/base-drv/ch376.c:26: usb_error ch_short_wait_int_and_get_statu(void) { return ch_wait_int_and_get_status(100); }
; --------------------------------- ; ---------------------------------
; Function ch_short_wait_int_and_get_statu ; Function ch_short_wait_int_and_get_statu
; --------------------------------- ; ---------------------------------
_ch_short_wait_int_and_get_stat: _ch_short_wait_int_and_get_stat:
ld hl,0x0064 ld hl,0x0064
jp _ch_wait_int_and_get_status jp _ch_wait_int_and_get_status
;source-doc/base-drv/ch376.c:30: usb_error ch_very_short_wait_int_and_get_(void) { return ch_wait_int_and_get_status(10); }
;source-doc/base-drv/ch376.c:28: usb_error ch_very_short_wait_int_and_get_(void) { return ch_wait_int_and_get_status(10); }
; --------------------------------- ; ---------------------------------
; Function ch_very_short_wait_int_and_get_ ; Function ch_very_short_wait_int_and_get_
; --------------------------------- ; ---------------------------------
_ch_very_short_wait_int_and_get: _ch_very_short_wait_int_and_get:
ld hl,0x000a ld hl,0x000a
jp _ch_wait_int_and_get_status jp _ch_wait_int_and_get_status
;source-doc/base-drv/ch376.c:32: usb_error ch_get_status(void) {
;source-doc/base-drv/ch376.c:30: usb_error ch_get_status(void) {
; --------------------------------- ; ---------------------------------
; Function ch_get_status ; Function ch_get_status
; --------------------------------- ; ---------------------------------
_ch_get_status: _ch_get_status:
;source-doc/base-drv/ch376.c:33: ch_command(CH_CMD_GET_STATUS);
;source-doc/base-drv/ch376.c:31: ch_command(CH_CMD_GET_STATUS);
ld l,0x22 ld l,0x22
call _ch_command call _ch_command
;source-doc/base-drv/ch376.c:34: uint8_t ch_status = CH376_DATA_PORT;
;source-doc/base-drv/ch376.c:32: uint8_t ch_status = CH376_DATA_PORT;
ld a, +((_CH376_DATA_PORT) / 256) ld a, +((_CH376_DATA_PORT) / 256)
in a, (((_CH376_DATA_PORT) & 0xFF)) in a, (((_CH376_DATA_PORT) & 0xFF))
;source-doc/base-drv/ch376.c:36: if (ch_status >= USB_FILERR_MIN && ch_status <= USB_FILERR_MAX)
;source-doc/base-drv/ch376.c:34: if (ch_status >= USB_FILERR_MIN && ch_status <= USB_FILERR_MAX)
cp 0x41 cp 0x41
jr C,l_ch_get_status_00102 jr C,l_ch_get_status_00102
cp 0xb5 cp 0xb5
jr NC,l_ch_get_status_00102 jr NC,l_ch_get_status_00102
;source-doc/base-drv/ch376.c:37: return ch_status;
;source-doc/base-drv/ch376.c:35: return ch_status;
ld l, a ld l, a
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00102: l_ch_get_status_00102:
;source-doc/base-drv/ch376.c:39: if (ch_status == CH_CMD_RET_SUCCESS)
;source-doc/base-drv/ch376.c:37: if (ch_status == CH_CMD_RET_SUCCESS)
cp 0x51 cp 0x51
jr NZ,l_ch_get_status_00105 jr NZ,l_ch_get_status_00105
;source-doc/base-drv/ch376.c:40: return USB_ERR_OK;
;source-doc/base-drv/ch376.c:38: return USB_ERR_OK;
ld l,0x00 ld l,0x00
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00105: l_ch_get_status_00105:
;source-doc/base-drv/ch376.c:42: if (ch_status == CH_USB_INT_SUCCESS)
;source-doc/base-drv/ch376.c:40: if (ch_status == CH_USB_INT_SUCCESS)
cp 0x14 cp 0x14
jr NZ,l_ch_get_status_00107 jr NZ,l_ch_get_status_00107
;source-doc/base-drv/ch376.c:43: return USB_ERR_OK;
;source-doc/base-drv/ch376.c:41: return USB_ERR_OK;
ld l,0x00 ld l,0x00
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00107: l_ch_get_status_00107:
;source-doc/base-drv/ch376.c:45: if (ch_status == CH_USB_INT_CONNECT)
;source-doc/base-drv/ch376.c:43: if (ch_status == CH_USB_INT_CONNECT)
cp 0x15 cp 0x15
jr NZ,l_ch_get_status_00109 jr NZ,l_ch_get_status_00109
;source-doc/base-drv/ch376.c:46: return USB_INT_CONNECT;
;source-doc/base-drv/ch376.c:44: return USB_INT_CONNECT;
ld l,0x81 ld l,0x81
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00109: l_ch_get_status_00109:
;source-doc/base-drv/ch376.c:48: if (ch_status == CH_USB_INT_DISK_READ)
;source-doc/base-drv/ch376.c:46: if (ch_status == CH_USB_INT_DISK_READ)
cp 0x1d cp 0x1d
jr NZ,l_ch_get_status_00111 jr NZ,l_ch_get_status_00111
;source-doc/base-drv/ch376.c:49: return USB_ERR_DISK_READ;
;source-doc/base-drv/ch376.c:47: return USB_ERR_DISK_READ;
ld l,0x1d ld l,0x1d
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00111: l_ch_get_status_00111:
;source-doc/base-drv/ch376.c:51: if (ch_status == CH_USB_INT_DISK_WRITE)
;source-doc/base-drv/ch376.c:49: if (ch_status == CH_USB_INT_DISK_WRITE)
cp 0x1e cp 0x1e
jr NZ,l_ch_get_status_00113 jr NZ,l_ch_get_status_00113
;source-doc/base-drv/ch376.c:52: return USB_ERR_DISK_WRITE;
;source-doc/base-drv/ch376.c:50: return USB_ERR_DISK_WRITE;
ld l,0x1e ld l,0x1e
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00113: l_ch_get_status_00113:
;source-doc/base-drv/ch376.c:54: if (ch_status == CH_USB_INT_DISCONNECT) {
;source-doc/base-drv/ch376.c:52: if (ch_status == CH_USB_INT_DISCONNECT) {
cp 0x16 cp 0x16
jr NZ,l_ch_get_status_00115 jr NZ,l_ch_get_status_00115
;source-doc/base-drv/ch376.c:55: ch_cmd_set_usb_mode(5);
;source-doc/base-drv/ch376.c:53: ch_cmd_set_usb_mode(5);
ld l,0x05 ld l,0x05
call _ch_cmd_set_usb_mode call _ch_cmd_set_usb_mode
;source-doc/base-drv/ch376.c:56: return USB_ERR_NO_DEVICE;
;source-doc/base-drv/ch376.c:54: return USB_ERR_NO_DEVICE;
ld l,0x05 ld l,0x05
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00115: l_ch_get_status_00115:
;source-doc/base-drv/ch376.c:59: if (ch_status == CH_USB_INT_BUF_OVER)
;source-doc/base-drv/ch376.c:57: if (ch_status == CH_USB_INT_BUF_OVER)
cp 0x17 cp 0x17
jr NZ,l_ch_get_status_00117 jr NZ,l_ch_get_status_00117
;source-doc/base-drv/ch376.c:60: return USB_ERR_DATA_ERROR;
;source-doc/base-drv/ch376.c:58: return USB_ERR_DATA_ERROR;
ld l,0x04 ld l,0x04
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00117: l_ch_get_status_00117:
;source-doc/base-drv/ch376.c:62: ch_status &= 0x2F;
;source-doc/base-drv/ch376.c:60: ch_status &= 0x2F;
and 0x2f and 0x2f
;source-doc/base-drv/ch376.c:64: if (ch_status == 0x2A)
;source-doc/base-drv/ch376.c:62: if (ch_status == 0x2A)
cp 0x2a cp 0x2a
jr NZ,l_ch_get_status_00119 jr NZ,l_ch_get_status_00119
;source-doc/base-drv/ch376.c:65: return USB_ERR_NAK;
;source-doc/base-drv/ch376.c:63: return USB_ERR_NAK;
ld l,0x01 ld l,0x01
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00119: l_ch_get_status_00119:
;source-doc/base-drv/ch376.c:67: if (ch_status == 0x2E)
;source-doc/base-drv/ch376.c:65: if (ch_status == 0x2E)
cp 0x2e cp 0x2e
jr NZ,l_ch_get_status_00121 jr NZ,l_ch_get_status_00121
;source-doc/base-drv/ch376.c:68: return USB_ERR_STALL;
;source-doc/base-drv/ch376.c:66: return USB_ERR_STALL;
ld l,0x02 ld l,0x02
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00121: l_ch_get_status_00121:
;source-doc/base-drv/ch376.c:70: ch_status &= 0x23;
;source-doc/base-drv/ch376.c:68: ch_status &= 0x23;
and 0x23 and 0x23
;source-doc/base-drv/ch376.c:72: if (ch_status == 0x20)
;source-doc/base-drv/ch376.c:70: if (ch_status == 0x20)
cp 0x20 cp 0x20
jr NZ,l_ch_get_status_00123 jr NZ,l_ch_get_status_00123
;source-doc/base-drv/ch376.c:73: return USB_ERR_TIMEOUT;
;source-doc/base-drv/ch376.c:71: return USB_ERR_TIMEOUT;
ld l,0x03 ld l,0x03
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00123: l_ch_get_status_00123:
;source-doc/base-drv/ch376.c:75: if (ch_status == 0x23)
;source-doc/base-drv/ch376.c:73: if (ch_status == 0x23)
sub 0x23 sub 0x23
jr NZ,l_ch_get_status_00125 jr NZ,l_ch_get_status_00125
;source-doc/base-drv/ch376.c:76: return USB_TOKEN_OUT_OF_SYNC;
;source-doc/base-drv/ch376.c:74: return USB_TOKEN_OUT_OF_SYNC;
ld l,0x07 ld l,0x07
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00125: l_ch_get_status_00125:
;source-doc/base-drv/ch376.c:78: return USB_ERR_UNEXPECTED_STATUS_FROM_;
;source-doc/base-drv/ch376.c:76: return USB_ERR_UNEXPECTED_STATUS_FROM_;
ld l,0x08 ld l,0x08
l_ch_get_status_00126: l_ch_get_status_00126:
;source-doc/base-drv/ch376.c:79: }
;source-doc/base-drv/ch376.c:77: }
ret ret
;source-doc/base-drv/ch376.c:81: void ch_cmd_reset_all(void) { ch_command(CH_CMD_RESET_ALL); }
;source-doc/base-drv/ch376.c:79: void ch_cmd_reset_all(void) { ch_command(CH_CMD_RESET_ALL); }
; --------------------------------- ; ---------------------------------
; Function ch_cmd_reset_all ; Function ch_cmd_reset_all
; --------------------------------- ; ---------------------------------
_ch_cmd_reset_all: _ch_cmd_reset_all:
ld l,0x05 ld l,0x05
jp _ch_command jp _ch_command
;source-doc/base-drv/ch376.c:100: uint8_t ch_probe(void) {
;source-doc/base-drv/ch376.c:98: uint8_t ch_probe(void) {
; --------------------------------- ; ---------------------------------
; Function ch_probe ; Function ch_probe
; --------------------------------- ; ---------------------------------
@ -216,66 +214,66 @@ _ch_probe:
ld ix,0 ld ix,0
add ix,sp add ix,sp
dec sp dec sp
;source-doc/base-drv/ch376.c:102: do {
;source-doc/base-drv/ch376.c:100: do {
ld (ix-1),0x05 ld (ix-1),0x05
l_ch_probe_00103: l_ch_probe_00103:
;source-doc/base-drv/ch376.c:85: ch_command(CH_CMD_CHECK_EXIST);
;source-doc/base-drv/ch376.c:83: ch_command(CH_CMD_CHECK_EXIST);
ld l,0x06 ld l,0x06
call _ch_command call _ch_command
;source-doc/base-drv/ch376.c:86: CH376_DATA_PORT = (uint8_t)~0x55;
;source-doc/base-drv/ch376.c:84: CH376_DATA_PORT = (uint8_t)~0x55;
ld a,0xaa ld a,0xaa
ld bc,_CH376_DATA_PORT ld bc,_CH376_DATA_PORT
out (c), a out (c), a
;source-doc/base-drv/ch376.c:87: delay();
;source-doc/base-drv/ch376.c:85: delay();
call _delay call _delay
;source-doc/base-drv/ch376.c:88: complement = CH376_DATA_PORT;
;source-doc/base-drv/ch376.c:86: complement = CH376_DATA_PORT;
ld a, +((_CH376_DATA_PORT) / 256) ld a, +((_CH376_DATA_PORT) / 256)
in a, (((_CH376_DATA_PORT) & 0xFF)) in a, (((_CH376_DATA_PORT) & 0xFF))
;source-doc/base-drv/ch376.c:89: return complement == 0x55;
;source-doc/base-drv/ch376.c:87: return complement == 0x55;
sub 0x55 sub 0x55
jr NZ,l_ch_probe_00102 jr NZ,l_ch_probe_00102
;source-doc/base-drv/ch376.c:103: if (ch_cmd_check_exist())
;source-doc/base-drv/ch376.c:104: return true;
;source-doc/base-drv/ch376.c:101: if (ch_cmd_check_exist())
;source-doc/base-drv/ch376.c:102: return true;
ld l,0x01 ld l,0x01
jr l_ch_probe_00107 jr l_ch_probe_00107
l_ch_probe_00102: l_ch_probe_00102:
;source-doc/base-drv/ch376.c:106: delay_medium();
;source-doc/base-drv/ch376.c:104: delay_medium();
call _delay_medium call _delay_medium
;source-doc/base-drv/ch376.c:107: } while (--i != 0);
;source-doc/base-drv/ch376.c:105: } while (--i != 0);
dec (ix-1) dec (ix-1)
jr NZ,l_ch_probe_00103 jr NZ,l_ch_probe_00103
;source-doc/base-drv/ch376.c:109: return false;
;source-doc/base-drv/ch376.c:107: return false;
ld l,0x00 ld l,0x00
l_ch_probe_00107: l_ch_probe_00107:
;source-doc/base-drv/ch376.c:110: }
;source-doc/base-drv/ch376.c:108: }
inc sp inc sp
pop ix pop ix
ret ret
;source-doc/base-drv/ch376.c:112: usb_error ch_cmd_set_usb_mode(const uint8_t mode) __z88dk_fastcall {
;source-doc/base-drv/ch376.c:110: usb_error ch_cmd_set_usb_mode(const uint8_t mode) __z88dk_fastcall {
; --------------------------------- ; ---------------------------------
; Function ch_cmd_set_usb_mode ; Function ch_cmd_set_usb_mode
; --------------------------------- ; ---------------------------------
_ch_cmd_set_usb_mode: _ch_cmd_set_usb_mode:
ld c, l ld c, l
;source-doc/base-drv/ch376.c:113: uint8_t result = 0;
;source-doc/base-drv/ch376.c:111: uint8_t result = 0;
ld b,0x00 ld b,0x00
;source-doc/base-drv/ch376.c:115: CH376_COMMAND_PORT = CH_CMD_SET_USB_MODE;
;source-doc/base-drv/ch376.c:113: CH376_COMMAND_PORT = CH_CMD_SET_USB_MODE;
ld a,0x15 ld a,0x15
push bc push bc
ld bc,_CH376_COMMAND_PORT ld bc,_CH376_COMMAND_PORT
out (c), a out (c), a
;source-doc/base-drv/ch376.c:116: delay();
;source-doc/base-drv/ch376.c:114: delay();
call _delay call _delay
pop bc pop bc
;source-doc/base-drv/ch376.c:117: CH376_DATA_PORT = mode;
;source-doc/base-drv/ch376.c:115: CH376_DATA_PORT = mode;
ld a, c ld a, c
push bc push bc
ld bc,_CH376_DATA_PORT ld bc,_CH376_DATA_PORT
out (c), a out (c), a
;source-doc/base-drv/ch376.c:118: delay();
;source-doc/base-drv/ch376.c:116: delay();
call _delay call _delay
pop bc pop bc
;source-doc/base-drv/ch376.c:122: while (result != CH_CMD_RET_SUCCESS && result != CH_CMD_RET_ABORT && --count != 0) {
;source-doc/base-drv/ch376.c:120: while (result != CH_CMD_RET_SUCCESS && result != CH_CMD_RET_ABORT && --count != 0) {
ld c,0x7f ld c,0x7f
l_ch_cmd_set_usb_mode_00103: l_ch_cmd_set_usb_mode_00103:
ld a, b ld a, b
@ -294,17 +292,17 @@ l_ch_cmd_set_usb_mode_00147:
jr Z,l_ch_cmd_set_usb_mode_00105 jr Z,l_ch_cmd_set_usb_mode_00105
dec c dec c
jr Z,l_ch_cmd_set_usb_mode_00105 jr Z,l_ch_cmd_set_usb_mode_00105
;source-doc/base-drv/ch376.c:123: result = CH376_DATA_PORT;
;source-doc/base-drv/ch376.c:121: result = CH376_DATA_PORT;
ld a, +((_CH376_DATA_PORT) / 256) ld a, +((_CH376_DATA_PORT) / 256)
in a, (((_CH376_DATA_PORT) & 0xFF)) in a, (((_CH376_DATA_PORT) & 0xFF))
ld b, a ld b, a
;source-doc/base-drv/ch376.c:124: delay();
;source-doc/base-drv/ch376.c:122: delay();
push bc push bc
call _delay call _delay
pop bc pop bc
jr l_ch_cmd_set_usb_mode_00103 jr l_ch_cmd_set_usb_mode_00103
l_ch_cmd_set_usb_mode_00105: l_ch_cmd_set_usb_mode_00105:
;source-doc/base-drv/ch376.c:127: return (result == CH_CMD_RET_SUCCESS) ? USB_ERR_OK : USB_ERR_FAIL;
;source-doc/base-drv/ch376.c:125: return (result == CH_CMD_RET_SUCCESS) ? USB_ERR_OK : USB_ERR_FAIL;
ld a, e ld a, e
or a or a
jr Z,l_ch_cmd_set_usb_mode_00108 jr Z,l_ch_cmd_set_usb_mode_00108
@ -313,24 +311,24 @@ l_ch_cmd_set_usb_mode_00105:
l_ch_cmd_set_usb_mode_00108: l_ch_cmd_set_usb_mode_00108:
ld l,0x0e ld l,0x0e
l_ch_cmd_set_usb_mode_00109: l_ch_cmd_set_usb_mode_00109:
;source-doc/base-drv/ch376.c:128: }
;source-doc/base-drv/ch376.c:126: }
ret ret
;source-doc/base-drv/ch376.c:130: uint8_t ch_cmd_get_ic_version(void) {
;source-doc/base-drv/ch376.c:128: uint8_t ch_cmd_get_ic_version(void) {
; --------------------------------- ; ---------------------------------
; Function ch_cmd_get_ic_version ; Function ch_cmd_get_ic_version
; --------------------------------- ; ---------------------------------
_ch_cmd_get_ic_version: _ch_cmd_get_ic_version:
;source-doc/base-drv/ch376.c:131: ch_command(CH_CMD_GET_IC_VER);
;source-doc/base-drv/ch376.c:129: ch_command(CH_CMD_GET_IC_VER);
ld l,0x01 ld l,0x01
call _ch_command call _ch_command
;source-doc/base-drv/ch376.c:132: return CH376_DATA_PORT & 0x1f;
;source-doc/base-drv/ch376.c:130: return CH376_DATA_PORT & 0x1f;
ld a, +((_CH376_DATA_PORT) / 256) ld a, +((_CH376_DATA_PORT) / 256)
in a, (((_CH376_DATA_PORT) & 0xFF)) in a, (((_CH376_DATA_PORT) & 0xFF))
and 0x1f and 0x1f
ld l, a ld l, a
;source-doc/base-drv/ch376.c:133: }
;source-doc/base-drv/ch376.c:131: }
ret ret
;source-doc/base-drv/ch376.c:135: void ch_issue_token(const uint8_t toggle_bit, const uint8_t endpoint, const ch376_pid pid) {
;source-doc/base-drv/ch376.c:133: void ch_issue_token(const uint8_t toggle_bit, const uint8_t endpoint, const ch376_pid pid) {
; --------------------------------- ; ---------------------------------
; Function ch_issue_token ; Function ch_issue_token
; --------------------------------- ; ---------------------------------
@ -338,14 +336,14 @@ _ch_issue_token:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
;source-doc/base-drv/ch376.c:136: ch_command(CH_CMD_ISSUE_TKN_X);
;source-doc/base-drv/ch376.c:134: ch_command(CH_CMD_ISSUE_TKN_X);
ld l,0x4e ld l,0x4e
call _ch_command call _ch_command
;source-doc/base-drv/ch376.c:137: CH376_DATA_PORT = toggle_bit;
;source-doc/base-drv/ch376.c:135: CH376_DATA_PORT = toggle_bit;
ld a,(ix+4) ld a,(ix+4)
ld bc,_CH376_DATA_PORT ld bc,_CH376_DATA_PORT
out (c), a out (c), a
;source-doc/base-drv/ch376.c:138: CH376_DATA_PORT = endpoint << 4 | pid;
;source-doc/base-drv/ch376.c:136: CH376_DATA_PORT = endpoint << 4 | pid;
ld a,(ix+5) ld a,(ix+5)
add a, a add a, a
add a, a add a, a
@ -354,15 +352,15 @@ _ch_issue_token:
or (ix+6) or (ix+6)
ld bc,_CH376_DATA_PORT ld bc,_CH376_DATA_PORT
out (c), a out (c), a
;source-doc/base-drv/ch376.c:139: }
;source-doc/base-drv/ch376.c:137: }
pop ix pop ix
ret ret
;source-doc/base-drv/ch376.c:141: void ch_issue_token_in(const endpoint_param *const endpoint) __z88dk_fastcall {
;source-doc/base-drv/ch376.c:139: void ch_issue_token_in(const endpoint_param *const endpoint) __z88dk_fastcall {
; --------------------------------- ; ---------------------------------
; Function ch_issue_token_in ; Function ch_issue_token_in
; --------------------------------- ; ---------------------------------
_ch_issue_token_in: _ch_issue_token_in:
;source-doc/base-drv/ch376.c:142: ch_issue_token(endpoint->toggle ? 0x80 : 0x00, endpoint->number, CH_PID_IN);
;source-doc/base-drv/ch376.c:140: ch_issue_token(endpoint->toggle ? 0x80 : 0x00, endpoint->number, CH_PID_IN);
ld e,l ld e,l
ld d,h ld d,h
ld a, (hl) ld a, (hl)
@ -386,14 +384,14 @@ l_ch_issue_token_in_00104:
call _ch_issue_token call _ch_issue_token
pop af pop af
inc sp inc sp
;source-doc/base-drv/ch376.c:143: }
;source-doc/base-drv/ch376.c:141: }
ret ret
;source-doc/base-drv/ch376.c:145: void ch_issue_token_out(const endpoint_param *const endpoint) __z88dk_fastcall {
;source-doc/base-drv/ch376.c:143: void ch_issue_token_out(const endpoint_param *const endpoint) __z88dk_fastcall {
; --------------------------------- ; ---------------------------------
; Function ch_issue_token_out ; Function ch_issue_token_out
; --------------------------------- ; ---------------------------------
_ch_issue_token_out: _ch_issue_token_out:
;source-doc/base-drv/ch376.c:146: ch_issue_token(endpoint->toggle ? 0x40 : 0x00, endpoint->number, CH_PID_OUT);
;source-doc/base-drv/ch376.c:144: ch_issue_token(endpoint->toggle ? 0x40 : 0x00, endpoint->number, CH_PID_OUT);
ld e,l ld e,l
ld d,h ld d,h
ld a, (hl) ld a, (hl)
@ -417,9 +415,9 @@ l_ch_issue_token_out_00104:
call _ch_issue_token call _ch_issue_token
pop af pop af
inc sp inc sp
;source-doc/base-drv/ch376.c:147: }
;source-doc/base-drv/ch376.c:145: }
ret ret
;source-doc/base-drv/ch376.c:149: void ch_issue_token_out_ep0(void) { ch_issue_token(0x40, 0, CH_PID_OUT); }
;source-doc/base-drv/ch376.c:147: void ch_issue_token_out_ep0(void) { ch_issue_token(0x40, 0, CH_PID_OUT); }
; --------------------------------- ; ---------------------------------
; Function ch_issue_token_out_ep0 ; Function ch_issue_token_out_ep0
; --------------------------------- ; ---------------------------------
@ -435,7 +433,7 @@ _ch_issue_token_out_ep0:
pop af pop af
inc sp inc sp
ret ret
;source-doc/base-drv/ch376.c:151: void ch_issue_token_in_ep0(void) { ch_issue_token(0x80, 0, CH_PID_IN); }
;source-doc/base-drv/ch376.c:149: void ch_issue_token_in_ep0(void) { ch_issue_token(0x80, 0, CH_PID_IN); }
; --------------------------------- ; ---------------------------------
; Function ch_issue_token_in_ep0 ; Function ch_issue_token_in_ep0
; --------------------------------- ; ---------------------------------
@ -451,7 +449,7 @@ _ch_issue_token_in_ep0:
pop af pop af
inc sp inc sp
ret ret
;source-doc/base-drv/ch376.c:153: void ch_issue_token_setup(void) { ch_issue_token(0, 0, CH_PID_SETUP); }
;source-doc/base-drv/ch376.c:151: void ch_issue_token_setup(void) { ch_issue_token(0, 0, CH_PID_SETUP); }
; --------------------------------- ; ---------------------------------
; Function ch_issue_token_setup ; Function ch_issue_token_setup
; --------------------------------- ; ---------------------------------
@ -469,7 +467,7 @@ _ch_issue_token_setup:
pop af pop af
inc sp inc sp
ret ret
;source-doc/base-drv/ch376.c:155: usb_error ch_data_in_transfer(uint8_t *buffer, int16_t buffer_size, endpoint_param *const endpoint) {
;source-doc/base-drv/ch376.c:153: usb_error ch_data_in_transfer(uint8_t *buffer, int16_t buffer_size, endpoint_param *const endpoint) {
; --------------------------------- ; ---------------------------------
; Function ch_data_in_transfer ; Function ch_data_in_transfer
; --------------------------------- ; ---------------------------------
@ -477,37 +475,36 @@ _ch_data_in_transfer:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
;source-doc/base-drv/ch376.c:158: if (buffer_size == 0)
;source-doc/base-drv/ch376.c:157: if (buffer_size == 0)
ld a,(ix+7) ld a,(ix+7)
or (ix+6) or (ix+6)
jr NZ,l_ch_data_in_transfer_00102 jr NZ,l_ch_data_in_transfer_00102
;source-doc/base-drv/ch376.c:159: return USB_ERR_OK;
;source-doc/base-drv/ch376.c:158: return USB_ERR_OK;
ld l,0x00 ld l,0x00
jp l_ch_data_in_transfer_00111 jp l_ch_data_in_transfer_00111
l_ch_data_in_transfer_00102: l_ch_data_in_transfer_00102:
;source-doc/base-drv/ch376.c:161: USB_MODULE_LEDS = 0x01;
;source-doc/base-drv/ch376.c:160: USB_MODULE_LEDS = 0x01;
ld a,0x01 ld a,0x01
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c), a out (c), a
;source-doc/base-drv/ch376.c:162: do {
;source-doc/base-drv/ch376.c:161: do {
ld c,(ix+8) ld c,(ix+8)
ld b,(ix+9) ld b,(ix+9)
l_ch_data_in_transfer_00107: l_ch_data_in_transfer_00107:
;source-doc/base-drv/ch376.c:163: ch_issue_token_in(endpoint);
;source-doc/base-drv/ch376.c:162: ch_issue_token_in(endpoint);
ld l,c ld l,c
ld h,b ld h,b
push hl push hl
call _ch_issue_token_in call _ch_issue_token_in
;source-doc/base-drv/ch376.c:165: result = ch_long_wait_int_and_get_status();
;source-doc/base-drv/ch376.c:164: result = ch_long_wait_int_and_get_status();
call _ch_long_wait_int_and_get_statu call _ch_long_wait_int_and_get_statu
pop bc
ld a, l ld a, l
ld (_result), a
;source-doc/base-drv/ch376.c:166: CHECK(result);
ld a,(_result)
pop bc
ld l, a
;source-doc/base-drv/ch376.c:165: CHECK(result);
or a or a
jr NZ,l_ch_data_in_transfer_00110 jr NZ,l_ch_data_in_transfer_00110
;source-doc/base-drv/ch376.c:168: endpoint->toggle = !endpoint->toggle;
;source-doc/base-drv/ch376.c:167: endpoint->toggle = !endpoint->toggle;
ld e, c ld e, c
ld d, b ld d, b
ld l, e ld l, e
@ -521,32 +518,32 @@ l_ch_data_in_transfer_00107:
and 0xfe and 0xfe
or l or l
ld (de), a ld (de), a
;source-doc/base-drv/ch376.c:170: count = ch_read_data(buffer);
;source-doc/base-drv/ch376.c:169: count = ch_read_data(buffer);
push bc push bc
ld l,(ix+4) ld l,(ix+4)
ld h,(ix+5) ld h,(ix+5)
call _ch_read_data call _ch_read_data
ld e, a ld e, a
pop bc pop bc
;source-doc/base-drv/ch376.c:172: if (count == 0) {
;source-doc/base-drv/ch376.c:171: if (count == 0) {
ld a, e ld a, e
;source-doc/base-drv/ch376.c:173: USB_MODULE_LEDS = 0x00;
;source-doc/base-drv/ch376.c:172: USB_MODULE_LEDS = 0x00;
or a or a
jr NZ,l_ch_data_in_transfer_00106 jr NZ,l_ch_data_in_transfer_00106
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c), a out (c), a
;source-doc/base-drv/ch376.c:174: return USB_ERR_DATA_ERROR;
;source-doc/base-drv/ch376.c:173: return USB_ERR_DATA_ERROR;
ld l,0x04 ld l,0x04
jr l_ch_data_in_transfer_00111 jr l_ch_data_in_transfer_00111
l_ch_data_in_transfer_00106: l_ch_data_in_transfer_00106:
;source-doc/base-drv/ch376.c:177: buffer += count;
;source-doc/base-drv/ch376.c:176: buffer += count;
ld a,(ix+4) ld a,(ix+4)
add a, e add a, e
ld (ix+4),a ld (ix+4),a
jr NC,l_ch_data_in_transfer_00148 jr NC,l_ch_data_in_transfer_00148
inc (ix+5) inc (ix+5)
l_ch_data_in_transfer_00148: l_ch_data_in_transfer_00148:
;source-doc/base-drv/ch376.c:178: buffer_size -= count;
;source-doc/base-drv/ch376.c:177: buffer_size -= count;
ld d,0x00 ld d,0x00
ld a,(ix+6) ld a,(ix+6)
sub e sub e
@ -554,7 +551,7 @@ l_ch_data_in_transfer_00148:
ld a,(ix+7) ld a,(ix+7)
sbc a, d sbc a, d
ld (ix+7),a ld (ix+7),a
;source-doc/base-drv/ch376.c:179: } while (buffer_size > 0);
;source-doc/base-drv/ch376.c:178: } while (buffer_size > 0);
xor a xor a
cp (ix+6) cp (ix+6)
sbc a,(ix+7) sbc a,(ix+7)
@ -562,26 +559,25 @@ l_ch_data_in_transfer_00148:
xor 0x80 xor 0x80
l_ch_data_in_transfer_00149: l_ch_data_in_transfer_00149:
jp M, l_ch_data_in_transfer_00107 jp M, l_ch_data_in_transfer_00107
;source-doc/base-drv/ch376.c:181: USB_MODULE_LEDS = 0x00;
;source-doc/base-drv/ch376.c:180: USB_MODULE_LEDS = 0x00;
ld a,0x00 ld a,0x00
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c), a out (c), a
;source-doc/base-drv/ch376.c:182: return USB_ERR_OK;
;source-doc/base-drv/ch376.c:181: return USB_ERR_OK;
ld l,0x00 ld l,0x00
jr l_ch_data_in_transfer_00111 jr l_ch_data_in_transfer_00111
;source-doc/base-drv/ch376.c:184: done:
;source-doc/base-drv/ch376.c:183: done:
l_ch_data_in_transfer_00110: l_ch_data_in_transfer_00110:
;source-doc/base-drv/ch376.c:185: USB_MODULE_LEDS = 0x00;
;source-doc/base-drv/ch376.c:184: USB_MODULE_LEDS = 0x00;
ld a,0x00 ld a,0x00
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c), a out (c), a
;source-doc/base-drv/ch376.c:186: return result;
ld hl, (_result)
;source-doc/base-drv/ch376.c:185: return result;
l_ch_data_in_transfer_00111: l_ch_data_in_transfer_00111:
;source-doc/base-drv/ch376.c:187: }
;source-doc/base-drv/ch376.c:186: }
pop ix pop ix
ret ret
;source-doc/base-drv/ch376.c:190: usb_error ch_data_in_transfer_n(uint8_t *const buffer, uint8_t *const buffer_size, endpoint_param *const endpoint) {
;source-doc/base-drv/ch376.c:189: usb_error ch_data_in_transfer_n(uint8_t *const buffer, uint8_t *const buffer_size, endpoint_param *const endpoint) {
; --------------------------------- ; ---------------------------------
; Function ch_data_in_transfer_n ; Function ch_data_in_transfer_n
; --------------------------------- ; ---------------------------------
@ -589,20 +585,20 @@ _ch_data_in_transfer_n:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
;source-doc/base-drv/ch376.c:194: USB_MODULE_LEDS = 0x01;
;source-doc/base-drv/ch376.c:193: USB_MODULE_LEDS = 0x01;
ld a,0x01 ld a,0x01
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c), a out (c), a
;source-doc/base-drv/ch376.c:196: ch_issue_token_in(endpoint);
;source-doc/base-drv/ch376.c:195: ch_issue_token_in(endpoint);
ld l,(ix+8) ld l,(ix+8)
ld h,(ix+9) ld h,(ix+9)
call _ch_issue_token_in call _ch_issue_token_in
;source-doc/base-drv/ch376.c:198: CHECK(ch_long_wait_int_and_get_status());
;source-doc/base-drv/ch376.c:197: CHECK(ch_long_wait_int_and_get_status());
call _ch_long_wait_int_and_get_statu call _ch_long_wait_int_and_get_statu
ld a,l ld a,l
or a or a
jr NZ,l_ch_data_in_transfer_n_00103 jr NZ,l_ch_data_in_transfer_n_00103
;source-doc/base-drv/ch376.c:200: endpoint->toggle = !endpoint->toggle;
;source-doc/base-drv/ch376.c:199: endpoint->toggle = !endpoint->toggle;
ld l,(ix+8) ld l,(ix+8)
ld h,(ix+9) ld h,(ix+9)
ld a, (hl) ld a, (hl)
@ -614,33 +610,33 @@ _ch_data_in_transfer_n:
and 0xfe and 0xfe
or c or c
ld (hl), a ld (hl), a
;source-doc/base-drv/ch376.c:202: count = ch_read_data(buffer);
;source-doc/base-drv/ch376.c:201: count = ch_read_data(buffer);
ld l,(ix+4) ld l,(ix+4)
ld h,(ix+5) ld h,(ix+5)
call _ch_read_data call _ch_read_data
;source-doc/base-drv/ch376.c:204: *buffer_size = count;
;source-doc/base-drv/ch376.c:203: *buffer_size = count;
ld c,(ix+6) ld c,(ix+6)
ld b,(ix+7) ld b,(ix+7)
ld (bc), a ld (bc), a
;source-doc/base-drv/ch376.c:206: USB_MODULE_LEDS = 0x00;
;source-doc/base-drv/ch376.c:205: USB_MODULE_LEDS = 0x00;
ld a,0x00 ld a,0x00
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c), a out (c), a
;source-doc/base-drv/ch376.c:208: return USB_ERR_OK;
;source-doc/base-drv/ch376.c:207: return USB_ERR_OK;
ld l,0x00 ld l,0x00
jr l_ch_data_in_transfer_n_00104 jr l_ch_data_in_transfer_n_00104
;source-doc/base-drv/ch376.c:209: done:
;source-doc/base-drv/ch376.c:208: done:
l_ch_data_in_transfer_n_00103: l_ch_data_in_transfer_n_00103:
;source-doc/base-drv/ch376.c:210: USB_MODULE_LEDS = 0x00;
;source-doc/base-drv/ch376.c:209: USB_MODULE_LEDS = 0x00;
ld a,0x00 ld a,0x00
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c), a out (c), a
;source-doc/base-drv/ch376.c:211: return result;
;source-doc/base-drv/ch376.c:210: return result;
l_ch_data_in_transfer_n_00104: l_ch_data_in_transfer_n_00104:
;source-doc/base-drv/ch376.c:212: }
;source-doc/base-drv/ch376.c:211: }
pop ix pop ix
ret ret
;source-doc/base-drv/ch376.c:214: usb_error ch_data_out_transfer(const uint8_t *buffer, int16_t buffer_length, endpoint_param *const endpoint) {
;source-doc/base-drv/ch376.c:213: usb_error ch_data_out_transfer(const uint8_t *buffer, int16_t buffer_length, endpoint_param *const endpoint) {
; --------------------------------- ; ---------------------------------
; Function ch_data_out_transfer ; Function ch_data_out_transfer
; --------------------------------- ; ---------------------------------
@ -649,7 +645,7 @@ _ch_data_out_transfer:
ld ix,0 ld ix,0
add ix,sp add ix,sp
dec sp dec sp
;source-doc/base-drv/ch376.c:217: const uint8_t max_packet_size = calc_max_packet_size(endpoint->max_packet_sizex);
;source-doc/base-drv/ch376.c:216: const uint8_t max_packet_size = calc_max_packet_size(endpoint->max_packet_sizex);
ld c,(ix+8) ld c,(ix+8)
ld b,(ix+9) ld b,(ix+9)
ld e, c ld e, c
@ -657,13 +653,13 @@ _ch_data_out_transfer:
inc de inc de
ld a, (de) ld a, (de)
ld (ix-1),a ld (ix-1),a
;source-doc/base-drv/ch376.c:219: USB_MODULE_LEDS = 0x02;
;source-doc/base-drv/ch376.c:218: USB_MODULE_LEDS = 0x02;
ld a,0x02 ld a,0x02
push bc push bc
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c), a out (c), a
pop bc pop bc
;source-doc/base-drv/ch376.c:221: while (buffer_length > 0) {
;source-doc/base-drv/ch376.c:220: while (buffer_length > 0) {
l_ch_data_out_transfer_00103: l_ch_data_out_transfer_00103:
xor a xor a
cp (ix+6) cp (ix+6)
@ -672,7 +668,7 @@ l_ch_data_out_transfer_00103:
xor 0x80 xor 0x80
l_ch_data_out_transfer_00139: l_ch_data_out_transfer_00139:
jp P, l_ch_data_out_transfer_00105 jp P, l_ch_data_out_transfer_00105
;source-doc/base-drv/ch376.c:222: const uint8_t size = max_packet_size < buffer_length ? max_packet_size : buffer_length;
;source-doc/base-drv/ch376.c:221: const uint8_t size = max_packet_size < buffer_length ? max_packet_size : buffer_length;
ld d,(ix-1) ld d,(ix-1)
ld e,0x00 ld e,0x00
ld a, d ld a, d
@ -688,7 +684,7 @@ l_ch_data_out_transfer_00109:
ld d,(ix+6) ld d,(ix+6)
ld e,(ix+7) ld e,(ix+7)
l_ch_data_out_transfer_00110: l_ch_data_out_transfer_00110:
;source-doc/base-drv/ch376.c:223: buffer = ch_write_data(buffer, size);
;source-doc/base-drv/ch376.c:222: buffer = ch_write_data(buffer, size);
push bc push bc
push de push de
push de push de
@ -703,7 +699,7 @@ l_ch_data_out_transfer_00110:
pop bc pop bc
ld (ix+4),l ld (ix+4),l
ld (ix+5),h ld (ix+5),h
;source-doc/base-drv/ch376.c:224: buffer_length -= size;
;source-doc/base-drv/ch376.c:223: buffer_length -= size;
ld e,0x00 ld e,0x00
ld a,(ix+6) ld a,(ix+6)
sub d sub d
@ -711,19 +707,19 @@ l_ch_data_out_transfer_00110:
ld a,(ix+7) ld a,(ix+7)
sbc a, e sbc a, e
ld (ix+7),a ld (ix+7),a
;source-doc/base-drv/ch376.c:225: ch_issue_token_out(endpoint);
;source-doc/base-drv/ch376.c:224: ch_issue_token_out(endpoint);
ld l,c ld l,c
ld h,b ld h,b
push hl push hl
call _ch_issue_token_out call _ch_issue_token_out
;source-doc/base-drv/ch376.c:227: CHECK(ch_long_wait_int_and_get_status());
;source-doc/base-drv/ch376.c:226: CHECK(ch_long_wait_int_and_get_status());
call _ch_long_wait_int_and_get_statu call _ch_long_wait_int_and_get_statu
ld a, l ld a, l
pop bc pop bc
ld l, a ld l, a
or a or a
jr NZ,l_ch_data_out_transfer_00106 jr NZ,l_ch_data_out_transfer_00106
;source-doc/base-drv/ch376.c:229: endpoint->toggle = !endpoint->toggle;
;source-doc/base-drv/ch376.c:228: endpoint->toggle = !endpoint->toggle;
ld e, c ld e, c
ld d, b ld d, b
ld l, e ld l, e
@ -739,40 +735,38 @@ l_ch_data_out_transfer_00110:
ld (de), a ld (de), a
jr l_ch_data_out_transfer_00103 jr l_ch_data_out_transfer_00103
l_ch_data_out_transfer_00105: l_ch_data_out_transfer_00105:
;source-doc/base-drv/ch376.c:232: USB_MODULE_LEDS = 0x00;
;source-doc/base-drv/ch376.c:231: USB_MODULE_LEDS = 0x00;
ld a,0x00 ld a,0x00
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c), a out (c), a
;source-doc/base-drv/ch376.c:233: return USB_ERR_OK;
;source-doc/base-drv/ch376.c:232: return USB_ERR_OK;
ld l,0x00 ld l,0x00
jr l_ch_data_out_transfer_00107 jr l_ch_data_out_transfer_00107
;source-doc/base-drv/ch376.c:235: done:
;source-doc/base-drv/ch376.c:234: done:
l_ch_data_out_transfer_00106: l_ch_data_out_transfer_00106:
;source-doc/base-drv/ch376.c:236: USB_MODULE_LEDS = 0x00;
;source-doc/base-drv/ch376.c:235: USB_MODULE_LEDS = 0x00;
ld a,0x00 ld a,0x00
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c), a out (c), a
;source-doc/base-drv/ch376.c:237: return result;
;source-doc/base-drv/ch376.c:236: return result;
l_ch_data_out_transfer_00107: l_ch_data_out_transfer_00107:
;source-doc/base-drv/ch376.c:238: }
;source-doc/base-drv/ch376.c:237: }
inc sp inc sp
pop ix pop ix
ret ret
;source-doc/base-drv/ch376.c:240: void ch_set_usb_address(const uint8_t device_address) __z88dk_fastcall {
;source-doc/base-drv/ch376.c:239: void ch_set_usb_address(const uint8_t device_address) __z88dk_fastcall {
; --------------------------------- ; ---------------------------------
; Function ch_set_usb_address ; Function ch_set_usb_address
; --------------------------------- ; ---------------------------------
_ch_set_usb_address: _ch_set_usb_address:
;source-doc/base-drv/ch376.c:241: ch_command(CH_CMD_SET_USB_ADDR);
;source-doc/base-drv/ch376.c:240: ch_command(CH_CMD_SET_USB_ADDR);
push hl push hl
ld l,0x13 ld l,0x13
call _ch_command call _ch_command
pop hl pop hl
;source-doc/base-drv/ch376.c:242: CH376_DATA_PORT = device_address;
;source-doc/base-drv/ch376.c:241: CH376_DATA_PORT = device_address;
ld a, l ld a, l
ld bc,_CH376_DATA_PORT ld bc,_CH376_DATA_PORT
out (c), a out (c), a
;source-doc/base-drv/ch376.c:243: }
;source-doc/base-drv/ch376.c:242: }
ret ret
_result:
DEFB +0x00

331
Source/HBIOS/ch376-native/base-drv/dev_transfers.c.s

@ -94,30 +94,28 @@ _usbdev_blk_out_trnsfer:
ld ix,0 ld ix,0
add ix,sp add ix,sp
push af push af
push af
;source-doc/base-drv/dev_transfers.c:29: */
ld e,(ix+4)
ld d,(ix+5)
ld hl,0x0003
add hl, de
ex (sp), hl
;source-doc/base-drv/dev_transfers.c:31: return usb_control_transfer(cmd_packet, buffer, device->address, device->max_packet_size);
ld (ix-2),e
ld (ix-1),d
pop bc
;source-doc/base-drv/dev_transfers.c:30: usb_error usbdev_control_transfer(device_config *const device, const setup_packet *const cmd_packet, uint8_t *const buffer) {
ld c,(ix+4)
ld b,(ix+5)
ld e, c
ld d, b
inc de
inc de
inc de
;source-doc/base-drv/dev_transfers.c:32: }
pop hl pop hl
ld l,c
ld h,b
ld a,(hl) ld a,(hl)
push hl push hl
push bc
rlca rlca
rlca rlca
rlca rlca
rlca rlca
and 0x0f and 0x0f
push bc
push de
push de push de
ld l,(ix-4)
ld h,(ix-3)
push hl
push af push af
inc sp inc sp
ld l,(ix+8) ld l,(ix+8)
@ -132,55 +130,51 @@ _usbdev_blk_out_trnsfer:
pop af pop af
inc sp inc sp
pop de pop de
pop bc
;source-doc/base-drv/dev_transfers.c:34: usb_error usbdev_blk_out_trnsfer(device_config *const dev, const uint8_t *const buffer, const uint16_t buffer_size) {
ld a, l ld a, l
ld (_result), a
;source-doc/base-drv/dev_transfers.c:33:
ld hl,_result
ld a, (hl)
sub 0x02 sub 0x02
jr NZ,l_usbdev_blk_out_trnsfer_00102 jr NZ,l_usbdev_blk_out_trnsfer_00102
;source-doc/base-drv/dev_transfers.c:34: usb_error usbdev_blk_out_trnsfer(device_config *const dev, const uint8_t *const buffer, const uint16_t buffer_size) {
ex de, hl
inc hl
ld d, (hl)
ld l,(ix-2)
ld h,(ix-1)
ld a, (hl)
;source-doc/base-drv/dev_transfers.c:35: usb_error result;
inc bc
ld a, (bc)
ld b, a
pop hl
ld a,(hl)
push hl
rlca rlca
rlca rlca
rlca rlca
rlca rlca
and 0x0f and 0x0f
ld b, a
pop hl
ld a,(hl)
push hl
ld c, a
ld l, e
ld h, d
ld a, (hl)
rrca rrca
and 0x07 and 0x07
ld e,b
push de push de
push af
push bc
inc sp inc sp
ld h, c
ld l,a
push hl
call _usbtrn_clear_endpoint_halt call _usbtrn_clear_endpoint_halt
pop af pop af
inc sp inc sp
;source-doc/base-drv/dev_transfers.c:35:
pop hl
push hl
pop de
;source-doc/base-drv/dev_transfers.c:36:
ex de, hl
res 0, (hl) res 0, (hl)
;source-doc/base-drv/dev_transfers.c:36: endpoint_param *const endpoint = &dev->endpoints[ENDPOINT_BULK_OUT];
;source-doc/base-drv/dev_transfers.c:37: endpoint_param *const endpoint = &dev->endpoints[ENDPOINT_BULK_OUT];
ld l,0x02 ld l,0x02
jr l_usbdev_blk_out_trnsfer_00104
;source-doc/base-drv/dev_transfers.c:43: endpoint->toggle = 0;
l_usbdev_blk_out_trnsfer_00102: l_usbdev_blk_out_trnsfer_00102:
;source-doc/base-drv/dev_transfers.c:39:
;source-doc/base-drv/dev_transfers.c:42: endpoint->toggle = 0;
ld hl, (_result)
l_usbdev_blk_out_trnsfer_00104:
;source-doc/base-drv/dev_transfers.c:43: return USB_ERR_STALL;
;source-doc/base-drv/dev_transfers.c:44: return USB_ERR_STALL;
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
;source-doc/base-drv/dev_transfers.c:45:
;source-doc/base-drv/dev_transfers.c:46:
; --------------------------------- ; ---------------------------------
; Function usbdev_bulk_in_transfer ; Function usbdev_bulk_in_transfer
; --------------------------------- ; ---------------------------------
@ -189,30 +183,26 @@ _usbdev_bulk_in_transfer:
ld ix,0 ld ix,0
add ix,sp add ix,sp
push af push af
push af
;source-doc/base-drv/dev_transfers.c:46: RETURN_CHECK(result);
ld e,(ix+4)
ld d,(ix+5)
;source-doc/base-drv/dev_transfers.c:49: done:
ld c,(ix+4)
ld b,(ix+5)
ld hl,0x0006 ld hl,0x0006
add hl, de
ex (sp), hl
;source-doc/base-drv/dev_transfers.c:48: done:
ld (ix-2),e
ld (ix-1),d
pop bc
pop hl
add hl, bc
;source-doc/base-drv/dev_transfers.c:51: }
pop de
ld e,c
ld d,b
ex de,hl
ld a,(hl) ld a,(hl)
push hl push hl
push bc
rlca rlca
rlca rlca
rlca rlca
rlca rlca
and 0x0f and 0x0f
push bc
push de
push de push de
ld l,(ix-4)
ld h,(ix-3)
push hl
push af push af
inc sp inc sp
ld l,(ix+8) ld l,(ix+8)
@ -227,55 +217,51 @@ _usbdev_bulk_in_transfer:
pop af pop af
inc sp inc sp
pop de pop de
pop bc
;source-doc/base-drv/dev_transfers.c:53: usb_error usbdev_bulk_in_transfer(device_config *const dev, uint8_t *const buffer, uint8_t *const buffer_size) {
ld a, l ld a, l
ld (_result), a
;source-doc/base-drv/dev_transfers.c:50: }
ld hl,_result
ld a, (hl)
sub 0x02 sub 0x02
jr NZ,l_usbdev_bulk_in_transfer_00102 jr NZ,l_usbdev_bulk_in_transfer_00102
;source-doc/base-drv/dev_transfers.c:51:
ex de, hl
inc hl
ld d, (hl)
ld l,(ix-2)
ld h,(ix-1)
ld a, (hl)
;source-doc/base-drv/dev_transfers.c:54: usb_error result;
inc bc
ld a, (bc)
ld b, a
pop hl
ld a,(hl)
push hl
rlca rlca
rlca rlca
rlca rlca
rlca rlca
and 0x0f and 0x0f
ld b, a
pop hl
ld a,(hl)
push hl
ld c, a
ld l, e
ld h, d
ld a, (hl)
rrca rrca
and 0x07 and 0x07
ld e,b
push de push de
push af
push bc
inc sp inc sp
ld h, c
ld l,a
push hl
call _usbtrn_clear_endpoint_halt call _usbtrn_clear_endpoint_halt
pop af pop af
inc sp inc sp
;source-doc/base-drv/dev_transfers.c:52: usb_error usbdev_bulk_in_transfer(device_config *const dev, uint8_t *const buffer, uint8_t *const buffer_size) {
pop hl
push hl
pop de
;source-doc/base-drv/dev_transfers.c:55:
ex de, hl
res 0, (hl) res 0, (hl)
;source-doc/base-drv/dev_transfers.c:53: endpoint_param *const endpoint = &dev->endpoints[ENDPOINT_BULK_IN];
;source-doc/base-drv/dev_transfers.c:56: endpoint_param *const endpoint = &dev->endpoints[ENDPOINT_BULK_IN];
ld l,0x02 ld l,0x02
jr l_usbdev_bulk_in_transfer_00104
;source-doc/base-drv/dev_transfers.c:61: usbtrn_clear_endpoint_halt(endpoint->number, dev->address, dev->max_packet_size);
l_usbdev_bulk_in_transfer_00102: l_usbdev_bulk_in_transfer_00102:
;source-doc/base-drv/dev_transfers.c:56:
;source-doc/base-drv/dev_transfers.c:58: usbtrn_clear_endpoint_halt(endpoint->number, dev->address, dev->max_packet_size);
ld hl, (_result)
l_usbdev_bulk_in_transfer_00104:
;source-doc/base-drv/dev_transfers.c:59: endpoint->toggle = 0;
;source-doc/base-drv/dev_transfers.c:62: endpoint->toggle = 0;
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
;source-doc/base-drv/dev_transfers.c:61: }
;source-doc/base-drv/dev_transfers.c:64: }
; --------------------------------- ; ---------------------------------
; Function usbdev_dat_in_trnsfer ; Function usbdev_dat_in_trnsfer
; --------------------------------- ; ---------------------------------
@ -284,43 +270,39 @@ _usbdev_dat_in_trnsfer:
ld ix,0 ld ix,0
add ix,sp add ix,sp
push af push af
push af
;source-doc/base-drv/dev_transfers.c:66: }
ld e,(ix+4)
ld d,(ix+5)
ld c, e
ld b, d
inc bc
inc bc
inc bc
;source-doc/base-drv/dev_transfers.c:70:
ld c,(ix+4)
ld b,(ix+5)
ld e, c
ld d, b
inc de
inc de
inc de
push de push de
ld a,(ix+10) ld a,(ix+10)
ld e, a ld e, a
add a, a add a, a
add a, e add a, e
pop de pop de
add a, c
ld (ix-4),a
add a, e
ld e, a
ld a,0x00 ld a,0x00
adc a, b
ld (ix-3),a
;source-doc/base-drv/dev_transfers.c:68: usb_error usbdev_dat_in_trnsfer(device_config *const device,
ld (ix-2),e
ld (ix-1),d
pop bc
adc a, d
ld d, a
;source-doc/base-drv/dev_transfers.c:72: uint8_t *const buffer,
pop hl pop hl
ld l,c
ld h,b
ld a,(hl) ld a,(hl)
push hl push hl
push bc
rlca rlca
rlca rlca
rlca rlca
rlca rlca
and 0x0f and 0x0f
push bc
push de
push de push de
ld l,(ix-4)
ld h,(ix-3)
push hl
push af push af
inc sp inc sp
ld l,(ix+8) ld l,(ix+8)
@ -335,55 +317,51 @@ _usbdev_dat_in_trnsfer:
pop af pop af
inc sp inc sp
pop de pop de
pop bc
;source-doc/base-drv/dev_transfers.c:74: const usb_endpoint_type endpoint_type) {
ld a, l ld a, l
ld (_result), a
;source-doc/base-drv/dev_transfers.c:70: const uint16_t buffer_size,
ld hl,_result
ld a, (hl)
sub 0x02 sub 0x02
jr NZ,l_usbdev_dat_in_trnsfer_00102 jr NZ,l_usbdev_dat_in_trnsfer_00102
;source-doc/base-drv/dev_transfers.c:71: const usb_endpoint_type endpoint_type) {
ex de, hl
inc hl
ld d, (hl)
ld l,(ix-2)
ld h,(ix-1)
ld a, (hl)
;source-doc/base-drv/dev_transfers.c:75: usb_error result;
inc bc
ld a, (bc)
ld b, a
pop hl
ld a,(hl)
push hl
rlca rlca
rlca rlca
rlca rlca
rlca rlca
and 0x0f and 0x0f
ld b, a
pop hl
ld a,(hl)
push hl
ld c, a
ld l, e
ld h, d
ld a, (hl)
rrca rrca
and 0x07 and 0x07
ld e,b
push de push de
push af
push bc
inc sp inc sp
ld h, c
ld l,a
push hl
call _usbtrn_clear_endpoint_halt call _usbtrn_clear_endpoint_halt
pop af pop af
inc sp inc sp
;source-doc/base-drv/dev_transfers.c:72:
pop hl
push hl
pop de
;source-doc/base-drv/dev_transfers.c:76:
ex de, hl
res 0, (hl) res 0, (hl)
;source-doc/base-drv/dev_transfers.c:73: endpoint_param *const endpoint = &device->endpoints[endpoint_type];
;source-doc/base-drv/dev_transfers.c:77: endpoint_param *const endpoint = &device->endpoints[endpoint_type];
ld l,0x02 ld l,0x02
jr l_usbdev_dat_in_trnsfer_00104
;source-doc/base-drv/dev_transfers.c:82: usbtrn_clear_endpoint_halt(endpoint->number, device->address, device->max_packet_size);
l_usbdev_dat_in_trnsfer_00102: l_usbdev_dat_in_trnsfer_00102:
;source-doc/base-drv/dev_transfers.c:76:
;source-doc/base-drv/dev_transfers.c:78: usbtrn_clear_endpoint_halt(endpoint->number, device->address, device->max_packet_size);
ld hl, (_result)
l_usbdev_dat_in_trnsfer_00104:
;source-doc/base-drv/dev_transfers.c:79: endpoint->toggle = 0;
;source-doc/base-drv/dev_transfers.c:83: endpoint->toggle = 0;
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
;source-doc/base-drv/dev_transfers.c:81: }
;source-doc/base-drv/dev_transfers.c:85: }
; --------------------------------- ; ---------------------------------
; Function usbdev_dat_in_trnsfer_0 ; Function usbdev_dat_in_trnsfer_0
; --------------------------------- ; ---------------------------------
@ -392,35 +370,33 @@ _usbdev_dat_in_trnsfer_0:
ld ix,0 ld ix,0
add ix,sp add ix,sp
push af push af
push af
;source-doc/base-drv/dev_transfers.c:82:
ld e,(ix+4)
ld d,(ix+5)
ld hl,0x0003
add hl, de
ex (sp), hl
;source-doc/base-drv/dev_transfers.c:84: done:
ld (ix-2),e
ld (ix-1),d
pop bc
;source-doc/base-drv/dev_transfers.c:88: done:
ld c,(ix+4)
ld b,(ix+5)
ld e, c
ld d, b
inc de
inc de
inc de
;source-doc/base-drv/dev_transfers.c:90: }
pop hl pop hl
ld l,c
ld h,b
ld a,(hl) ld a,(hl)
push hl push hl
push bc
rlca rlca
rlca rlca
rlca rlca
rlca rlca
and 0x0f and 0x0f
ld c,(ix+8)
ld b,0x00
ld l,(ix+8)
ld h,0x00
push bc
push de
push de push de
ld l,(ix-4)
ld h,(ix-3)
push hl
push af push af
inc sp inc sp
push bc
push hl
ld l,(ix+6) ld l,(ix+6)
ld h,(ix+7) ld h,(ix+7)
push hl push hl
@ -430,50 +406,47 @@ _usbdev_dat_in_trnsfer_0:
pop af pop af
inc sp inc sp
pop de pop de
pop bc
;source-doc/base-drv/dev_transfers.c:92: usb_error usbdev_dat_in_trnsfer_0(device_config *const device, uint8_t *const buffer, const uint8_t buffer_size) {
ld a, l ld a, l
ld (_result), a
;source-doc/base-drv/dev_transfers.c:86: }
ld hl,_result
ld a, (hl)
sub 0x02 sub 0x02
jr NZ,l_usbdev_dat_in_trnsfer_0_00102 jr NZ,l_usbdev_dat_in_trnsfer_0_00102
;source-doc/base-drv/dev_transfers.c:87:
ex de, hl
inc hl
ld d, (hl)
ld l,(ix-2)
ld h,(ix-1)
ld a, (hl)
;source-doc/base-drv/dev_transfers.c:93: usb_error result;
inc bc
ld a, (bc)
ld b, a
pop hl
ld a,(hl)
push hl
rlca rlca
rlca rlca
rlca rlca
rlca rlca
and 0x0f and 0x0f
ld b, a
pop hl
ld a,(hl)
push hl
ld c, a
ld l, e
ld h, d
ld a, (hl)
rrca rrca
and 0x07 and 0x07
ld e,b
push de push de
push af
push bc
inc sp inc sp
ld h, c
ld l,a
push hl
call _usbtrn_clear_endpoint_halt call _usbtrn_clear_endpoint_halt
pop af pop af
inc sp inc sp
;source-doc/base-drv/dev_transfers.c:88: usb_error usbdev_dat_in_trnsfer_0(device_config *const device, uint8_t *const buffer, const uint8_t buffer_size) {
pop hl
push hl
pop de
;source-doc/base-drv/dev_transfers.c:94:
ex de, hl
res 0, (hl) res 0, (hl)
;source-doc/base-drv/dev_transfers.c:89: endpoint_param *const endpoint = &device->endpoints[0];
;source-doc/base-drv/dev_transfers.c:95: endpoint_param *const endpoint = &device->endpoints[0];
ld l,0x02 ld l,0x02
jr l_usbdev_dat_in_trnsfer_0_00103
;source-doc/base-drv/dev_transfers.c:98:
l_usbdev_dat_in_trnsfer_0_00102: l_usbdev_dat_in_trnsfer_0_00102:
;source-doc/base-drv/dev_transfers.c:92:
ld hl, (_result)
l_usbdev_dat_in_trnsfer_0_00103:
;source-doc/base-drv/dev_transfers.c:93: if (result == USB_ERR_STALL) {
;source-doc/base-drv/dev_transfers.c:99: if (result == USB_ERR_STALL) {
ld sp, ix ld sp, ix
pop ix pop ix
ret ret

128
Source/HBIOS/ch376-native/base-drv/protocol.c.s

@ -59,18 +59,18 @@ _usbtrn_get_descriptor:
ld hl, -8 ld hl, -8
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/base-drv/protocol.c:27: * @return usb_error USB_ERR_OK if all good, otherwise specific error code
;source-doc/base-drv/protocol.c:28: */
ld hl,0 ld hl,0
add hl, sp add hl, sp
ex de, hl ex de, hl
ld bc,0x0008 ld bc,0x0008
ld hl,_cmd_get_device_descriptor ld hl,_cmd_get_device_descriptor
ldir ldir
;source-doc/base-drv/protocol.c:28: */
;source-doc/base-drv/protocol.c:29: usb_error usbtrn_get_descriptor(device_descriptor *const buffer) {
ld (ix-2),0x08 ld (ix-2),0x08
xor a xor a
ld (ix-1),a ld (ix-1),a
;source-doc/base-drv/protocol.c:30: setup_packet cmd;
;source-doc/base-drv/protocol.c:31: setup_packet cmd;
ld c,(ix+4) ld c,(ix+4)
ld b,(ix+5) ld b,(ix+5)
push bc push bc
@ -91,15 +91,14 @@ _usbtrn_get_descriptor:
pop af pop af
pop af pop af
pop af pop af
ld a, l
pop de pop de
pop bc pop bc
ld a, l
ld (_result), a
;source-doc/base-drv/protocol.c:32: cmd.wLength = 8;
ld a,(_result)
ld l, a
;source-doc/base-drv/protocol.c:33: cmd.wLength = 8;
or a or a
jr NZ,l_usbtrn_get_descriptor_00103 jr NZ,l_usbtrn_get_descriptor_00103
;source-doc/base-drv/protocol.c:34: result = usb_control_transfer(&cmd, (uint8_t *)buffer, 0, 8);
;source-doc/base-drv/protocol.c:35: result = usb_control_transfer(&cmd, (uint8_t *)buffer, 0, 8);
push de push de
push bc push bc
ld hl,4 ld hl,4
@ -110,11 +109,11 @@ _usbtrn_get_descriptor:
ldir ldir
pop bc pop bc
pop de pop de
;source-doc/base-drv/protocol.c:35:
;source-doc/base-drv/protocol.c:36:
ld (ix-2),0x12 ld (ix-2),0x12
xor a xor a
ld (ix-1),a ld (ix-1),a
;source-doc/base-drv/protocol.c:36: CHECK(result);
;source-doc/base-drv/protocol.c:37: CHECK(result);
ld hl,7 ld hl,7
add hl, bc add hl, bc
ld a, (hl) ld a, (hl)
@ -131,14 +130,10 @@ _usbtrn_get_descriptor:
pop af pop af
pop af pop af
pop af pop af
ld a, l
ld (_result), a
;source-doc/base-drv/protocol.c:38: cmd = cmd_get_device_descriptor;
;source-doc/base-drv/protocol.c:40: result = usb_control_transfer(&cmd, (uint8_t *)buffer, 0, buffer->bMaxPacketSize0);
;source-doc/base-drv/protocol.c:41: result = usb_control_transfer(&cmd, (uint8_t *)buffer, 0, buffer->bMaxPacketSize0);
l_usbtrn_get_descriptor_00103: l_usbtrn_get_descriptor_00103:
;source-doc/base-drv/protocol.c:41:
ld hl, (_result)
;source-doc/base-drv/protocol.c:42: RETURN_CHECK(result);
;source-doc/base-drv/protocol.c:42:
;source-doc/base-drv/protocol.c:43: RETURN_CHECK(result);
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
@ -150,7 +145,7 @@ _cmd_get_device_descriptor:
DEFB +0x00 DEFB +0x00
DEFB +0x00 DEFB +0x00
DEFW +0x0008 DEFW +0x0008
;source-doc/base-drv/protocol.c:46: }
;source-doc/base-drv/protocol.c:47: }
; --------------------------------- ; ---------------------------------
; Function usbtrn_get_descriptor2 ; Function usbtrn_get_descriptor2
; --------------------------------- ; ---------------------------------
@ -161,18 +156,18 @@ _usbtrn_get_descriptor2:
ld hl, -8 ld hl, -8
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/base-drv/protocol.c:48: /**
;source-doc/base-drv/protocol.c:51: *
ld hl,0 ld hl,0
add hl, sp add hl, sp
ex de, hl ex de, hl
ld bc,0x0008 ld bc,0x0008
ld hl,_cmd_get_device_descriptor ld hl,_cmd_get_device_descriptor
ldir ldir
;source-doc/base-drv/protocol.c:49: * @brief Issue GET_DESCRIPTOR request to retrieve the device descriptor for usb device at the specified address
;source-doc/base-drv/protocol.c:52: * @param buffer the buffer to store the device descriptor in
ld (ix-2),0x08 ld (ix-2),0x08
xor a xor a
ld (ix-1),a ld (ix-1),a
;source-doc/base-drv/protocol.c:51: * @param buffer the buffer to store the device descriptor in
;source-doc/base-drv/protocol.c:54: */
ld c,(ix+4) ld c,(ix+4)
ld b,(ix+5) ld b,(ix+5)
push bc push bc
@ -190,15 +185,14 @@ _usbtrn_get_descriptor2:
pop af pop af
pop af pop af
pop af pop af
ld a, l
pop de pop de
pop bc pop bc
ld a, l
ld (_result), a
;source-doc/base-drv/protocol.c:53: */
ld a,(_result)
ld l, a
;source-doc/base-drv/protocol.c:56: usb_error result;
or a or a
jr NZ,l_usbtrn_get_descriptor2_00103 jr NZ,l_usbtrn_get_descriptor2_00103
;source-doc/base-drv/protocol.c:55: setup_packet cmd;
;source-doc/base-drv/protocol.c:58: setup_packet cmd;
push de push de
push bc push bc
ld hl,4 ld hl,4
@ -209,11 +203,11 @@ _usbtrn_get_descriptor2:
ldir ldir
pop bc pop bc
pop de pop de
;source-doc/base-drv/protocol.c:56: cmd = cmd_get_device_descriptor;
;source-doc/base-drv/protocol.c:59: cmd = cmd_get_device_descriptor;
ld (ix-2),0x12 ld (ix-2),0x12
xor a xor a
ld (ix-1),a ld (ix-1),a
;source-doc/base-drv/protocol.c:57: cmd.wLength = 8;
;source-doc/base-drv/protocol.c:60: cmd.wLength = 8;
ld hl,7 ld hl,7
add hl, bc add hl, bc
ld h,(hl) ld h,(hl)
@ -227,17 +221,14 @@ _usbtrn_get_descriptor2:
pop af pop af
pop af pop af
pop af pop af
ld a, l
ld (_result), a
;source-doc/base-drv/protocol.c:58:
;source-doc/base-drv/protocol.c:61:
l_usbtrn_get_descriptor2_00103: l_usbtrn_get_descriptor2_00103:
;source-doc/base-drv/protocol.c:59: result = usb_control_transfer(&cmd, (uint8_t *)buffer, device_address, 8);
ld hl, (_result)
;source-doc/base-drv/protocol.c:60:
;source-doc/base-drv/protocol.c:62: result = usb_control_transfer(&cmd, (uint8_t *)buffer, device_address, 8);
;source-doc/base-drv/protocol.c:63:
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
;source-doc/base-drv/protocol.c:66: done:
;source-doc/base-drv/protocol.c:69: done:
; --------------------------------- ; ---------------------------------
; Function usbtrn_set_address ; Function usbtrn_set_address
; --------------------------------- ; ---------------------------------
@ -250,7 +241,7 @@ _usbtrn_set_address:
push af push af
push af push af
ld c, l ld c, l
;source-doc/base-drv/protocol.c:68: }
;source-doc/base-drv/protocol.c:71: }
push bc push bc
ld hl,2 ld hl,2
add hl, sp add hl, sp
@ -259,9 +250,9 @@ _usbtrn_set_address:
ld hl,_cmd_set_device_address ld hl,_cmd_set_device_address
ldir ldir
pop bc pop bc
;source-doc/base-drv/protocol.c:69:
;source-doc/base-drv/protocol.c:72:
ld (ix-6),c ld (ix-6),c
;source-doc/base-drv/protocol.c:71:
;source-doc/base-drv/protocol.c:74:
xor a xor a
push af push af
inc sp inc sp
@ -274,7 +265,7 @@ _usbtrn_set_address:
add hl, sp add hl, sp
push hl push hl
call _usb_control_transfer call _usb_control_transfer
;source-doc/base-drv/protocol.c:72: /**
;source-doc/base-drv/protocol.c:75: /**
ld sp,ix ld sp,ix
pop ix pop ix
ret ret
@ -286,7 +277,7 @@ _cmd_set_device_address:
DEFB +0x00 DEFB +0x00
DEFB +0x00 DEFB +0x00
DEFW +0x0000 DEFW +0x0000
;source-doc/base-drv/protocol.c:78: usb_error usbtrn_set_address(const uint8_t device_address) __z88dk_fastcall {
;source-doc/base-drv/protocol.c:81: usb_error usbtrn_set_address(const uint8_t device_address) __z88dk_fastcall {
; --------------------------------- ; ---------------------------------
; Function usbtrn_set_configuration ; Function usbtrn_set_configuration
; --------------------------------- ; ---------------------------------
@ -297,7 +288,7 @@ _usbtrn_set_configuration:
ld hl, -8 ld hl, -8
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/base-drv/protocol.c:80: cmd = cmd_set_device_address;
;source-doc/base-drv/protocol.c:83: cmd = cmd_set_device_address;
ld hl,0 ld hl,0
add hl, sp add hl, sp
ld e,l ld e,l
@ -307,10 +298,10 @@ _usbtrn_set_configuration:
ld hl,_cmd_set_configuration ld hl,_cmd_set_configuration
ldir ldir
pop bc pop bc
;source-doc/base-drv/protocol.c:81: cmd.bValue[0] = device_address;
;source-doc/base-drv/protocol.c:84: cmd.bValue[0] = device_address;
ld a,(ix+6) ld a,(ix+6)
ld (ix-6),a ld (ix-6),a
;source-doc/base-drv/protocol.c:83: return usb_control_transfer(&cmd, 0, 0, 0);
;source-doc/base-drv/protocol.c:86: return usb_control_transfer(&cmd, 0, 0, 0);
ld h,(ix+5) ld h,(ix+5)
ld l,(ix+4) ld l,(ix+4)
push hl push hl
@ -318,7 +309,7 @@ _usbtrn_set_configuration:
push hl push hl
push bc push bc
call _usb_control_transfer call _usb_control_transfer
;source-doc/base-drv/protocol.c:84: }
;source-doc/base-drv/protocol.c:87: }
ld sp,ix ld sp,ix
pop ix pop ix
ret ret
@ -330,7 +321,7 @@ _cmd_set_configuration:
DEFB +0x00 DEFB +0x00
DEFB +0x00 DEFB +0x00
DEFW +0x0000 DEFW +0x0000
;source-doc/base-drv/protocol.c:90: *
;source-doc/base-drv/protocol.c:93: *
; --------------------------------- ; ---------------------------------
; Function usbtrn_get_config_descriptor ; Function usbtrn_get_config_descriptor
; --------------------------------- ; ---------------------------------
@ -341,7 +332,7 @@ _usbtrn_get_config_descriptor:
ld hl, -8 ld hl, -8
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/base-drv/protocol.c:96: cmd = cmd_set_configuration;
;source-doc/base-drv/protocol.c:99: cmd = cmd_set_configuration;
ld hl,0 ld hl,0
add hl, sp add hl, sp
ld e,l ld e,l
@ -351,10 +342,10 @@ _usbtrn_get_config_descriptor:
ld hl,_cmd_get_config_descriptor ld hl,_cmd_get_config_descriptor
ldir ldir
pop bc pop bc
;source-doc/base-drv/protocol.c:97: cmd.bValue[0] = configuration;
;source-doc/base-drv/protocol.c:100: cmd.bValue[0] = configuration;
ld a,(ix+6) ld a,(ix+6)
ld (ix-6),a ld (ix-6),a
;source-doc/base-drv/protocol.c:98:
;source-doc/base-drv/protocol.c:101:
ld hl,0x0006 ld hl,0x0006
add hl, bc add hl, bc
ld e,(ix+7) ld e,(ix+7)
@ -362,7 +353,7 @@ _usbtrn_get_config_descriptor:
ld (hl), e ld (hl), e
inc hl inc hl
ld (hl), a ld (hl), a
;source-doc/base-drv/protocol.c:100: }
;source-doc/base-drv/protocol.c:103: }
ld e,(ix+4) ld e,(ix+4)
ld d,(ix+5) ld d,(ix+5)
ld h,(ix+9) ld h,(ix+9)
@ -371,7 +362,7 @@ _usbtrn_get_config_descriptor:
push de push de
push bc push bc
call _usb_control_transfer call _usb_control_transfer
;source-doc/base-drv/protocol.c:101:
;source-doc/base-drv/protocol.c:104:
ld sp,ix ld sp,ix
pop ix pop ix
ret ret
@ -383,7 +374,7 @@ _cmd_get_config_descriptor:
DEFB +0x00 DEFB +0x00
DEFB +0x00 DEFB +0x00
DEFW +0x0000 DEFW +0x0000
;source-doc/base-drv/protocol.c:103:
;source-doc/base-drv/protocol.c:106:
; --------------------------------- ; ---------------------------------
; Function usbtrn_gfull_cfg_desc ; Function usbtrn_gfull_cfg_desc
; --------------------------------- ; ---------------------------------
@ -391,7 +382,7 @@ _usbtrn_gfull_cfg_desc:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
;source-doc/base-drv/protocol.c:110: * @param device_address the usb address of the device
;source-doc/base-drv/protocol.c:114: * @param max_packet_size the max packet size for control transfers (endpoint 0)
ld c,(ix+8) ld c,(ix+8)
ld b,(ix+9) ld b,(ix+9)
push bc push bc
@ -411,24 +402,22 @@ _usbtrn_gfull_cfg_desc:
pop af pop af
pop bc pop bc
ld a, l ld a, l
ld (_result), a
ld a,(_result)
or a or a
jr NZ,l_usbtrn_gfull_cfg_desc_00107 jr NZ,l_usbtrn_gfull_cfg_desc_00107
;source-doc/base-drv/protocol.c:112: * @return usb_error USB_ERR_OK if all good, otherwise specific error code
;source-doc/base-drv/protocol.c:116: */
ld l,(ix+8) ld l,(ix+8)
ld h,(ix+9) ld h,(ix+9)
inc hl inc hl
inc hl inc hl
ld d, (hl) ld d, (hl)
;source-doc/base-drv/protocol.c:113: */
;source-doc/base-drv/protocol.c:117: usb_error usbtrn_get_config_descriptor(config_descriptor *const buffer,
ld a,(ix+7) ld a,(ix+7)
sub d sub d
jr NC,l_usbtrn_gfull_cfg_desc_00104 jr NC,l_usbtrn_gfull_cfg_desc_00104
;source-doc/base-drv/protocol.c:114: usb_error usbtrn_get_config_descriptor(config_descriptor *const buffer,
;source-doc/base-drv/protocol.c:118: const uint8_t config_index,
ld d,(ix+7) ld d,(ix+7)
l_usbtrn_gfull_cfg_desc_00104: l_usbtrn_gfull_cfg_desc_00104:
;source-doc/base-drv/protocol.c:116: const uint8_t buffer_size,
;source-doc/base-drv/protocol.c:120: const uint8_t device_address,
ld h,(ix+6) ld h,(ix+6)
ld l,(ix+5) ld l,(ix+5)
push hl push hl
@ -440,22 +429,17 @@ l_usbtrn_gfull_cfg_desc_00104:
pop af pop af
pop af pop af
ld a, l ld a, l
ld (_result), a
ld a,(_result)
;source-doc/base-drv/protocol.c:118: const uint8_t max_packet_size) {
;source-doc/base-drv/protocol.c:122: setup_packet cmd;
or a or a
jr NZ,l_usbtrn_gfull_cfg_desc_00107 jr NZ,l_usbtrn_gfull_cfg_desc_00107
ld l,a ld l,a
jr l_usbtrn_gfull_cfg_desc_00108
;source-doc/base-drv/protocol.c:119: setup_packet cmd;
;source-doc/base-drv/protocol.c:123: cmd = cmd_get_config_descriptor;
;source-doc/base-drv/protocol.c:124: cmd.bValue[0] = config_index;
l_usbtrn_gfull_cfg_desc_00107: l_usbtrn_gfull_cfg_desc_00107:
;source-doc/base-drv/protocol.c:120: cmd = cmd_get_config_descriptor;
ld hl, (_result)
l_usbtrn_gfull_cfg_desc_00108:
;source-doc/base-drv/protocol.c:121: cmd.bValue[0] = config_index;
;source-doc/base-drv/protocol.c:125: cmd.wLength = (uint16_t)buffer_size;
pop ix pop ix
ret ret
;source-doc/base-drv/protocol.c:125: }
;source-doc/base-drv/protocol.c:129:
; --------------------------------- ; ---------------------------------
; Function usbtrn_clear_endpoint_halt ; Function usbtrn_clear_endpoint_halt
; --------------------------------- ; ---------------------------------
@ -466,7 +450,7 @@ _usbtrn_clear_endpoint_halt:
ld hl, -8 ld hl, -8
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/base-drv/protocol.c:127: usb_error usbtrn_gfull_cfg_desc(const uint8_t config_index,
;source-doc/base-drv/protocol.c:131: const uint8_t device_address,
ld hl,0 ld hl,0
add hl, sp add hl, sp
ld e,l ld e,l
@ -476,10 +460,10 @@ _usbtrn_clear_endpoint_halt:
ld hl,_usb_cmd_clear_endpoint_halt ld hl,_usb_cmd_clear_endpoint_halt
ldir ldir
pop bc pop bc
;source-doc/base-drv/protocol.c:128: const uint8_t device_address,
;source-doc/base-drv/protocol.c:132: const uint8_t max_packet_size,
ld a,(ix+4) ld a,(ix+4)
ld (ix-4),a ld (ix-4),a
;source-doc/base-drv/protocol.c:130: const uint8_t max_buffer_size,
;source-doc/base-drv/protocol.c:134: uint8_t *const buffer) {
ld h,(ix+6) ld h,(ix+6)
ld l,(ix+5) ld l,(ix+5)
push hl push hl
@ -487,7 +471,7 @@ _usbtrn_clear_endpoint_halt:
push hl push hl
push bc push bc
call _usb_control_transfer call _usb_control_transfer
;source-doc/base-drv/protocol.c:131: uint8_t *const buffer) {
;source-doc/base-drv/protocol.c:135: usb_error result;
ld sp,ix ld sp,ix
pop ix pop ix
ret ret

56
Source/HBIOS/ch376-native/base-drv/transfers.c.s

@ -218,12 +218,12 @@ _usb_data_in_transfer:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
;source-doc/base-drv/transfers.c:80: critical_end();
;source-doc/base-drv/transfers.c:81: return result;
call _critical_begin call _critical_begin
;source-doc/base-drv/transfers.c:82: }
;source-doc/base-drv/transfers.c:83:
ld l,(ix+8) ld l,(ix+8)
call _ch_set_usb_address call _ch_set_usb_address
;source-doc/base-drv/transfers.c:84: /**
;source-doc/base-drv/transfers.c:85: * @brief Perform a USB data in on the specified endpoint
ld l,(ix+9) ld l,(ix+9)
ld h,(ix+10) ld h,(ix+10)
push hl push hl
@ -236,17 +236,15 @@ _usb_data_in_transfer:
call _ch_data_in_transfer call _ch_data_in_transfer
pop af pop af
pop af pop af
pop af
ld a, l
ld (_result), a
;source-doc/base-drv/transfers.c:86: *
;source-doc/base-drv/transfers.c:87: * @param buffer the buffer to receive the data
ex (sp),hl
call _critical_end call _critical_end
;source-doc/base-drv/transfers.c:88: * @param buffer_size the maximum size of data to be received
ld hl, (_result)
pop hl
;source-doc/base-drv/transfers.c:89: * @param device_address the usb address of the device ;source-doc/base-drv/transfers.c:89: * @param device_address the usb address of the device
;source-doc/base-drv/transfers.c:90: * @param endpoint the usb endpoint to receive from (toggle of endpoint is updated)
pop ix pop ix
ret ret
;source-doc/base-drv/transfers.c:94: usb_data_in_transfer(uint8_t *buffer, const uint16_t buffer_size, const uint8_t device_address, endpoint_param *const endpoint) {
;source-doc/base-drv/transfers.c:95: usb_error result;
; --------------------------------- ; ---------------------------------
; Function usb_data_in_transfer_n ; Function usb_data_in_transfer_n
; --------------------------------- ; ---------------------------------
@ -254,12 +252,12 @@ _usb_data_in_transfer_n:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
;source-doc/base-drv/transfers.c:95: critical_begin();
;source-doc/base-drv/transfers.c:98: ch_set_usb_address(device_address);
call _critical_begin call _critical_begin
;source-doc/base-drv/transfers.c:97: ch_set_usb_address(device_address);
;source-doc/base-drv/transfers.c:100: result = ch_data_in_transfer(buffer, buffer_size, endpoint);
ld l,(ix+8) ld l,(ix+8)
call _ch_set_usb_address call _ch_set_usb_address
;source-doc/base-drv/transfers.c:99: result = ch_data_in_transfer(buffer, buffer_size, endpoint);
;source-doc/base-drv/transfers.c:102: critical_end();
ld l,(ix+9) ld l,(ix+9)
ld h,(ix+10) ld h,(ix+10)
push hl push hl
@ -272,17 +270,15 @@ _usb_data_in_transfer_n:
call _ch_data_in_transfer_n call _ch_data_in_transfer_n
pop af pop af
pop af pop af
pop af
ld a, l
ld (_result), a
;source-doc/base-drv/transfers.c:101: critical_end();
;source-doc/base-drv/transfers.c:104: return result;
ex (sp),hl
call _critical_end call _critical_end
;source-doc/base-drv/transfers.c:103: return result;
ld hl, (_result)
;source-doc/base-drv/transfers.c:104: }
pop hl
;source-doc/base-drv/transfers.c:106:
;source-doc/base-drv/transfers.c:107: /**
pop ix pop ix
ret ret
;source-doc/base-drv/transfers.c:109: * @param buffer the buffer to receive the data - must be 62 bytes
;source-doc/base-drv/transfers.c:112: * @param device_address the usb address of the device
; --------------------------------- ; ---------------------------------
; Function usb_data_out_transfer ; Function usb_data_out_transfer
; --------------------------------- ; ---------------------------------
@ -290,12 +286,12 @@ _usb_data_out_transfer:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
;source-doc/base-drv/transfers.c:110: * @param buffer_size on exit the actual size of data received
;source-doc/base-drv/transfers.c:114: * @return usb_error USB_ERR_OK if all good, otherwise specific error code
call _critical_begin call _critical_begin
;source-doc/base-drv/transfers.c:112: * @param endpoint the usb endpoint to receive from (toggle of endpoint is updated)
;source-doc/base-drv/transfers.c:116: usb_error
ld l,(ix+8) ld l,(ix+8)
call _ch_set_usb_address call _ch_set_usb_address
;source-doc/base-drv/transfers.c:114: */
;source-doc/base-drv/transfers.c:118: usb_error result;
ld l,(ix+9) ld l,(ix+9)
ld h,(ix+10) ld h,(ix+10)
push hl push hl
@ -308,13 +304,11 @@ _usb_data_out_transfer:
call _ch_data_out_transfer call _ch_data_out_transfer
pop af pop af
pop af pop af
pop af
ld a, l
ld (_result), a
;source-doc/base-drv/transfers.c:116: usb_data_in_transfer_n(uint8_t *buffer, uint8_t *const buffer_size, const uint8_t device_address, endpoint_param *const endpoint) {
;source-doc/base-drv/transfers.c:120: critical_begin();
ex (sp),hl
call _critical_end call _critical_end
;source-doc/base-drv/transfers.c:118:
ld hl, (_result)
;source-doc/base-drv/transfers.c:119: ch_set_usb_address(device_address);
pop hl
;source-doc/base-drv/transfers.c:122: ch_set_usb_address(device_address);
;source-doc/base-drv/transfers.c:123:
pop ix pop ix
ret ret

6
Source/HBIOS/ch376-native/base-drv/usb-base-drv.c.s

@ -68,14 +68,14 @@ _usb_host_bus_reset:
call _ch_cmd_set_usb_mode call _ch_cmd_set_usb_mode
;source-doc/base-drv/usb-base-drv.c:15: delay_20ms(); ;source-doc/base-drv/usb-base-drv.c:15: delay_20ms();
call _delay_20ms call _delay_20ms
;source-doc/base-drv/ch376.h:111:
;source-doc/base-drv/ch376.h:108: #define TRACE_USB_ERROR(result)
ld l,0x0b ld l,0x0b
call _ch_command call _ch_command
;source-doc/base-drv/ch376.h:112: #endif
;source-doc/base-drv/ch376.h:109:
ld a,0x25 ld a,0x25
ld bc,_CH376_DATA_PORT ld bc,_CH376_DATA_PORT
out (c), a out (c), a
;source-doc/base-drv/ch376.h:113:
;source-doc/base-drv/ch376.h:110: #endif
ld a,0xdf ld a,0xdf
ld bc,_CH376_DATA_PORT ld bc,_CH376_DATA_PORT
out (c), a out (c), a

51
Source/HBIOS/ch376-native/keyboard/kyb_driver.c.s

@ -273,24 +273,24 @@ l_usb_kyb_flush_00101:
; Function usb_kyb_tick ; Function usb_kyb_tick
; --------------------------------- ; ---------------------------------
_usb_kyb_tick: _usb_kyb_tick:
;source-doc/keyboard/kyb_driver.c:107:
;source-doc/keyboard/kyb_driver.c:109: usb_error result;
ld hl,_in_critical_usb_section ld hl,_in_critical_usb_section
ld a, (hl) ld a, (hl)
or a or a
;source-doc/keyboard/kyb_driver.c:108: void usb_kyb_tick(void) {
;source-doc/keyboard/kyb_driver.c:110:
jr NZ,l_usb_kyb_tick_00112 jr NZ,l_usb_kyb_tick_00112
;././source-doc/base-drv//ch376.h:111:
;././source-doc/base-drv//ch376.h:108: #define TRACE_USB_ERROR(result)
ld l,0x0b ld l,0x0b
call _ch_command call _ch_command
;././source-doc/base-drv//ch376.h:112: #endif
;././source-doc/base-drv//ch376.h:109:
ld a,0x25 ld a,0x25
ld bc,_CH376_DATA_PORT ld bc,_CH376_DATA_PORT
out (c), a out (c), a
;././source-doc/base-drv//ch376.h:113:
;././source-doc/base-drv//ch376.h:110: #endif
ld a,0x1f ld a,0x1f
ld bc,_CH376_DATA_PORT ld bc,_CH376_DATA_PORT
out (c), a out (c), a
;source-doc/keyboard/kyb_driver.c:111:
;source-doc/keyboard/kyb_driver.c:113:
ld bc,_report+0 ld bc,_report+0
ld hl, (_keyboard_config) ld hl, (_keyboard_config)
ld a,0x08 ld a,0x08
@ -302,74 +302,75 @@ _usb_kyb_tick:
pop af pop af
pop af pop af
inc sp inc sp
ld a, l
ld (_result), a
;././source-doc/base-drv//ch376.h:108: #define TRACE_USB_ERROR(result)
push hl
ld l,0x0b ld l,0x0b
call _ch_command call _ch_command
;././source-doc/base-drv//ch376.h:112: #endif
pop hl
;././source-doc/base-drv//ch376.h:109:
ld a,0x25 ld a,0x25
ld bc,_CH376_DATA_PORT ld bc,_CH376_DATA_PORT
out (c), a out (c), a
;././source-doc/base-drv//ch376.h:113:
;././source-doc/base-drv//ch376.h:110: #endif
ld a,0xdf ld a,0xdf
ld bc,_CH376_DATA_PORT ld bc,_CH376_DATA_PORT
out (c), a out (c), a
ld hl,_result
ld a, (hl)
;source-doc/keyboard/kyb_driver.c:115: result = usbdev_dat_in_trnsfer_0((device_config *)keyboard_config, (uint8_t *)&report, 8);
ld a, l
or a or a
jr NZ,l_usb_kyb_tick_00112 jr NZ,l_usb_kyb_tick_00112
;source-doc/keyboard/kyb_driver.c:114: ch_configure_nak_retry_3s();
;source-doc/keyboard/kyb_driver.c:116: ch_configure_nak_retry_3s();
call _report_diff call _report_diff
or a or a
jr Z,l_usb_kyb_tick_00112 jr Z,l_usb_kyb_tick_00112
;source-doc/keyboard/kyb_driver.c:116: if (report_diff()) {
;source-doc/keyboard/kyb_driver.c:118: if (report_diff()) {
ld b,0x06 ld b,0x06
l_usb_kyb_tick_00103: l_usb_kyb_tick_00103:
;source-doc/keyboard/kyb_driver.c:117: uint8_t i = 6;
;source-doc/keyboard/kyb_driver.c:119: uint8_t i = 6;
ld a, b ld a, b
dec a dec a
push bc push bc
call _keyboard_buf_put call _keyboard_buf_put
pop bc pop bc
;source-doc/keyboard/kyb_driver.c:118: do {
;source-doc/keyboard/kyb_driver.c:120: do {
djnz l_usb_kyb_tick_00103 djnz l_usb_kyb_tick_00103
;source-doc/keyboard/kyb_driver.c:119: keyboard_buf_put(i - 1);
;source-doc/keyboard/kyb_driver.c:121: keyboard_buf_put(i - 1);
ld de,_previous ld de,_previous
ld bc,0x0008 ld bc,0x0008
ld hl,_report ld hl,_report
ldir ldir
l_usb_kyb_tick_00112: l_usb_kyb_tick_00112:
;source-doc/keyboard/kyb_driver.c:122: }
ret
;source-doc/keyboard/kyb_driver.c:124: } ;source-doc/keyboard/kyb_driver.c:124: }
ret
;source-doc/keyboard/kyb_driver.c:126: }
; --------------------------------- ; ---------------------------------
; Function usb_kyb_init ; Function usb_kyb_init
; --------------------------------- ; ---------------------------------
_usb_kyb_init: _usb_kyb_init:
;source-doc/keyboard/kyb_driver.c:125:
;source-doc/keyboard/kyb_driver.c:127:
call _get_usb_device_config call _get_usb_device_config
ex de, hl ex de, hl
ld (_keyboard_config), hl ld (_keyboard_config), hl
;source-doc/keyboard/kyb_driver.c:127: keyboard_config = (device_config_keyboard *)get_usb_device_config(dev_index);
;source-doc/keyboard/kyb_driver.c:129: keyboard_config = (device_config_keyboard *)get_usb_device_config(dev_index);
ld hl,_keyboard_config + 1 ld hl,_keyboard_config + 1
ld a, (hl) ld a, (hl)
dec hl dec hl
or (hl) or (hl)
;source-doc/keyboard/kyb_driver.c:128:
;source-doc/keyboard/kyb_driver.c:130:
ret Z ret Z
;source-doc/keyboard/kyb_driver.c:130: return;
;source-doc/keyboard/kyb_driver.c:132: return;
ld a,0x01 ld a,0x01
push af push af
inc sp inc sp
ld hl, (_keyboard_config) ld hl, (_keyboard_config)
call _hid_set_protocol call _hid_set_protocol
;source-doc/keyboard/kyb_driver.c:131:
;source-doc/keyboard/kyb_driver.c:133:
ld a,0x80 ld a,0x80
push af push af
inc sp inc sp
ld hl, (_keyboard_config) ld hl, (_keyboard_config)
call _hid_set_idle call _hid_set_idle
;source-doc/keyboard/kyb_driver.c:132: hid_set_protocol(keyboard_config, 1);
;source-doc/keyboard/kyb_driver.c:134: hid_set_protocol(keyboard_config, 1);
ret ret
_caps_lock_engaged: _caps_lock_engaged:
DEFB +0x01 DEFB +0x01

107
Source/HBIOS/ch376-native/scsi-drv/class_scsi.c.s

@ -67,7 +67,7 @@ _do_scsi_cmd:
ld hl, -8 ld hl, -8
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/scsi-drv/class_scsi.c:18: cbw->dCBWTag[0] = next_tag++;
;source-doc/scsi-drv/class_scsi.c:20: cbw->dCBWTag[0] = next_tag++;
ld c,(ix+6) ld c,(ix+6)
ld b,(ix+7) ld b,(ix+7)
ld hl,0x0004 ld hl,0x0004
@ -85,19 +85,19 @@ _do_scsi_cmd:
ld (hl), e ld (hl), e
inc hl inc hl
ld (hl), d ld (hl), d
;source-doc/scsi-drv/class_scsi.c:20: if (!send)
;source-doc/scsi-drv/class_scsi.c:22: if (!send)
bit 0,(ix+10) bit 0,(ix+10)
jr NZ,l_do_scsi_cmd_00102 jr NZ,l_do_scsi_cmd_00102
;source-doc/scsi-drv/class_scsi.c:21: cbw->bmCBWFlags = 0x80;
;source-doc/scsi-drv/class_scsi.c:23: cbw->bmCBWFlags = 0x80;
ld hl,0x000c ld hl,0x000c
add hl, bc add hl, bc
ld (hl),0x80 ld (hl),0x80
l_do_scsi_cmd_00102: l_do_scsi_cmd_00102:
;source-doc/scsi-drv/class_scsi.c:23: critical_begin();
;source-doc/scsi-drv/class_scsi.c:25: critical_begin();
push bc push bc
call _critical_begin call _critical_begin
pop bc pop bc
;source-doc/scsi-drv/class_scsi.c:26: &dev->endpoints[ENDPOINT_BULK_OUT]));
;source-doc/scsi-drv/class_scsi.c:28: &dev->endpoints[ENDPOINT_BULK_OUT]));
ld a,(ix+4) ld a,(ix+4)
ld (ix-6),a ld (ix-6),a
ld e, a ld e, a
@ -138,11 +138,9 @@ l_do_scsi_cmd_00102:
pop de pop de
pop bc pop bc
ld a, l ld a, l
ld (_result), a
ld a,(_result)
or a or a
jp NZ, l_do_scsi_cmd_00120 jp NZ, l_do_scsi_cmd_00120
;source-doc/scsi-drv/class_scsi.c:28: if (cbw->dCBWDataTransferLength != 0) {
;source-doc/scsi-drv/class_scsi.c:30: if (cbw->dCBWDataTransferLength != 0) {
ld hl,8 ld hl,8
add hl, bc add hl, bc
ld c, (hl) ld c, (hl)
@ -157,15 +155,15 @@ l_do_scsi_cmd_00102:
or b or b
or c or c
jr Z,l_do_scsi_cmd_00113 jr Z,l_do_scsi_cmd_00113
;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:29: if (!send) {
;source-doc/scsi-drv/class_scsi.c:33: &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) {
bit 0,(ix+10) bit 0,(ix+10)
jr NZ,l_do_scsi_cmd_00110 jr NZ,l_do_scsi_cmd_00110
;source-doc/scsi-drv/class_scsi.c:31: &dev->endpoints[ENDPOINT_BULK_IN]));
;source-doc/scsi-drv/class_scsi.c:33: &dev->endpoints[ENDPOINT_BULK_IN]));
ld a,(ix-6) ld a,(ix-6)
add a,0x06 add a,0x06
ld e, a ld e, a
@ -183,23 +181,21 @@ l_do_scsi_cmd_00102:
push de push de
push af push af
inc sp inc sp
push bc
ld l,(ix-2) ld l,(ix-2)
ld h,(ix-1) ld h,(ix-1)
push hl push hl
push bc
call _usb_data_in_transfer call _usb_data_in_transfer
pop af pop af
pop af pop af
pop af pop af
inc sp inc sp
ld a, l ld a, l
ld (_result), a
ld a,(_result)
or a or a
jr Z,l_do_scsi_cmd_00113 jr Z,l_do_scsi_cmd_00113
jp l_do_scsi_cmd_00120
jr l_do_scsi_cmd_00120
l_do_scsi_cmd_00110: l_do_scsi_cmd_00110:
;source-doc/scsi-drv/class_scsi.c:35: &dev->endpoints[ENDPOINT_BULK_OUT]));
;source-doc/scsi-drv/class_scsi.c:37: &dev->endpoints[ENDPOINT_BULK_OUT]));
ld l,(ix-4) ld l,(ix-4)
ld h,(ix-3) ld h,(ix-3)
ld a, (hl) ld a, (hl)
@ -211,28 +207,26 @@ l_do_scsi_cmd_00110:
push de push de
push af push af
inc sp inc sp
push bc
ld l,(ix-2) ld l,(ix-2)
ld h,(ix-1) ld h,(ix-1)
push hl push hl
push bc
call _usb_data_out_transfer call _usb_data_out_transfer
pop af pop af
pop af pop af
pop af pop af
inc sp inc sp
ld a, l ld a, l
ld (_result), a
ld a,(_result)
or a or a
jr NZ,l_do_scsi_cmd_00120 jr NZ,l_do_scsi_cmd_00120
l_do_scsi_cmd_00113: l_do_scsi_cmd_00113:
;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]));
;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]));
ld a,(ix-6) ld a,(ix-6)
add a,0x06 add a,0x06
ld e, a
ld c, a
ld a,(ix-5) ld a,(ix-5)
adc a,0x00 adc a,0x00
ld d, a
ld b, a
ld l,(ix-4) ld l,(ix-4)
ld h,(ix-3) ld h,(ix-3)
ld a, (hl) ld a, (hl)
@ -241,9 +235,9 @@ l_do_scsi_cmd_00113:
rlca rlca
rlca rlca
and 0x0f and 0x0f
ld b, a
push de
ld d, a
push bc push bc
push de
inc sp inc sp
ld hl,0x000d ld hl,0x000d
push hl push hl
@ -255,11 +249,9 @@ l_do_scsi_cmd_00113:
pop af pop af
inc sp inc sp
ld a, l ld a, l
ld (_result), a
ld a,(_result)
or a or a
jr NZ,l_do_scsi_cmd_00120 jr NZ,l_do_scsi_cmd_00120
;source-doc/scsi-drv/class_scsi.c:42: if (csw.bCSWStatus != 0 && csw.dCSWTag[0] != cbw->dCBWTag[0])
;source-doc/scsi-drv/class_scsi.c:44: if (csw.bCSWStatus != 0 && csw.dCSWTag[0] != cbw->dCBWTag[0])
ld a, (_csw + 12) ld a, (_csw + 12)
or a or a
jr Z,l_do_scsi_cmd_00117 jr Z,l_do_scsi_cmd_00117
@ -273,25 +265,24 @@ l_do_scsi_cmd_00113:
xor a xor a
sbc hl,bc sbc hl,bc
jr Z,l_do_scsi_cmd_00117 jr Z,l_do_scsi_cmd_00117
;source-doc/scsi-drv/class_scsi.c:43: result = USB_ERR_FAIL;
ld hl,_result
ld (hl),0x0e
;source-doc/scsi-drv/class_scsi.c:45: result = USB_ERR_FAIL;
ld l,0x0e
jr l_do_scsi_cmd_00120 jr l_do_scsi_cmd_00120
l_do_scsi_cmd_00117: l_do_scsi_cmd_00117:
;source-doc/scsi-drv/class_scsi.c:45: result = USB_ERR_OK;
xor a
ld (_result),a
;source-doc/scsi-drv/class_scsi.c:47: done:
;source-doc/scsi-drv/class_scsi.c:47: result = USB_ERR_OK;
ld l,0x00
;source-doc/scsi-drv/class_scsi.c:49: done:
l_do_scsi_cmd_00120: l_do_scsi_cmd_00120:
;source-doc/scsi-drv/class_scsi.c:48: critical_end();
;source-doc/scsi-drv/class_scsi.c:50: critical_end();
push hl
call _critical_end call _critical_end
;source-doc/scsi-drv/class_scsi.c:49: return result;
ld hl, (_result)
;source-doc/scsi-drv/class_scsi.c:50: }
pop hl
;source-doc/scsi-drv/class_scsi.c:51: return result;
;source-doc/scsi-drv/class_scsi.c:52: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
;source-doc/scsi-drv/class_scsi.c:52: usb_error scsi_test(device_config_storage *const dev) {
;source-doc/scsi-drv/class_scsi.c:54: usb_error scsi_test(device_config_storage *const dev) {
; --------------------------------- ; ---------------------------------
; Function scsi_test ; Function scsi_test
; --------------------------------- ; ---------------------------------
@ -302,7 +293,7 @@ _scsi_test:
ld hl, -27 ld hl, -27
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/scsi-drv/class_scsi.c:54: 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 ld hl,0
add hl, sp add hl, sp
ld e,l ld e,l
@ -311,7 +302,7 @@ _scsi_test:
ld bc,0x000f ld bc,0x000f
ld hl,_scsi_command_block_wrapper ld hl,_scsi_command_block_wrapper
ldir ldir
;source-doc/scsi-drv/class_scsi.c:55: memset(&cbw_scsi.test, 0, sizeof(_scsi_packet_test));
;source-doc/scsi-drv/class_scsi.c:57: memset(&cbw_scsi.test, 0, sizeof(_scsi_packet_test));
ld hl,17 ld hl,17
add hl, sp add hl, sp
ld b,0x06 ld b,0x06
@ -323,11 +314,11 @@ l_scsi_test_00103:
inc hl inc hl
djnz l_scsi_test_00103 djnz l_scsi_test_00103
pop bc pop bc
;source-doc/scsi-drv/class_scsi.c:57: cbw_scsi.cbw.bCBWLUN = 0;
;source-doc/scsi-drv/class_scsi.c:59: cbw_scsi.cbw.bCBWLUN = 0;
ld (ix-14),0x00 ld (ix-14),0x00
;source-doc/scsi-drv/class_scsi.c:58: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_test);
;source-doc/scsi-drv/class_scsi.c:60: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_test);
ld (ix-13),0x0c ld (ix-13),0x0c
;source-doc/scsi-drv/class_scsi.c:59: cbw_scsi.cbw.dCBWDataTransferLength = 0;
;source-doc/scsi-drv/class_scsi.c:61: cbw_scsi.cbw.dCBWDataTransferLength = 0;
ld hl,0x0008 ld hl,0x0008
add hl, bc add hl, bc
xor a xor a
@ -338,7 +329,7 @@ l_scsi_test_00103:
ld (hl), a ld (hl), a
inc hl inc hl
ld (hl), a ld (hl), a
;source-doc/scsi-drv/class_scsi.c:61: return do_scsi_cmd(dev, &cbw_scsi.cbw, 0, false);
;source-doc/scsi-drv/class_scsi.c:63: return do_scsi_cmd(dev, &cbw_scsi.cbw, 0, false);
xor a xor a
push af push af
inc sp inc sp
@ -349,11 +340,11 @@ l_scsi_test_00103:
ld h,(ix+5) ld h,(ix+5)
push hl push hl
call _do_scsi_cmd call _do_scsi_cmd
;source-doc/scsi-drv/class_scsi.c:62: }
;source-doc/scsi-drv/class_scsi.c:64: }
ld sp,ix ld sp,ix
pop ix pop ix
ret ret
;source-doc/scsi-drv/class_scsi.c:66: usb_error scsi_request_sense(device_config_storage *const dev, scsi_sense_result *const sens_result) {
;source-doc/scsi-drv/class_scsi.c:68: usb_error scsi_request_sense(device_config_storage *const dev, scsi_sense_result *const sens_result) {
; --------------------------------- ; ---------------------------------
; Function scsi_request_sense ; Function scsi_request_sense
; --------------------------------- ; ---------------------------------
@ -364,7 +355,7 @@ _scsi_request_sense:
ld hl, -27 ld hl, -27
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/scsi-drv/class_scsi.c:68: 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 ld hl,0
add hl, sp add hl, sp
ld e,l ld e,l
@ -373,7 +364,7 @@ _scsi_request_sense:
ld bc,0x000f ld bc,0x000f
ld hl,_scsi_command_block_wrapper ld hl,_scsi_command_block_wrapper
ldir ldir
;source-doc/scsi-drv/class_scsi.c:69: cbw_scsi.request_sense = scsi_packet_request_sense;
;source-doc/scsi-drv/class_scsi.c:71: cbw_scsi.request_sense = scsi_packet_request_sense;
ld hl,17 ld hl,17
add hl, sp add hl, sp
ex de, hl ex de, hl
@ -381,11 +372,11 @@ _scsi_request_sense:
ld hl,_scsi_packet_request_sense ld hl,_scsi_packet_request_sense
ldir ldir
pop bc pop bc
;source-doc/scsi-drv/class_scsi.c:71: cbw_scsi.cbw.bCBWLUN = 0;
;source-doc/scsi-drv/class_scsi.c:73: cbw_scsi.cbw.bCBWLUN = 0;
ld (ix-14),0x00 ld (ix-14),0x00
;source-doc/scsi-drv/class_scsi.c:72: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_request_sense);
;source-doc/scsi-drv/class_scsi.c:74: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_request_sense);
ld (ix-13),0x0c ld (ix-13),0x0c
;source-doc/scsi-drv/class_scsi.c:73: cbw_scsi.cbw.dCBWDataTransferLength = sizeof(scsi_sense_result);
;source-doc/scsi-drv/class_scsi.c:75: cbw_scsi.cbw.dCBWDataTransferLength = sizeof(scsi_sense_result);
ld hl,0x0008 ld hl,0x0008
add hl, bc add hl, bc
ld (hl),0x12 ld (hl),0x12
@ -396,7 +387,7 @@ _scsi_request_sense:
ld (hl), a ld (hl), a
inc hl inc hl
ld (hl), a ld (hl), a
;source-doc/scsi-drv/class_scsi.c:75: return do_scsi_cmd(dev, &cbw_scsi.cbw, sens_result, false);
;source-doc/scsi-drv/class_scsi.c:77: return do_scsi_cmd(dev, &cbw_scsi.cbw, sens_result, false);
ld e,(ix+6) ld e,(ix+6)
ld d,(ix+7) ld d,(ix+7)
xor a xor a
@ -408,7 +399,7 @@ _scsi_request_sense:
ld h,(ix+5) ld h,(ix+5)
push hl push hl
call _do_scsi_cmd call _do_scsi_cmd
;source-doc/scsi-drv/class_scsi.c:76: }
;source-doc/scsi-drv/class_scsi.c:78: }
ld sp,ix ld sp,ix
pop ix pop ix
ret ret

295
Source/HBIOS/ch376-native/scsi-drv/scsi_driver.c.s

@ -63,14 +63,14 @@ _usb_scsi_init:
ld hl, -18 ld hl, -18
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/scsi-drv/scsi_driver.c:9: device_config_storage *const dev = (device_config_storage *)get_usb_device_config(dev_index);
;source-doc/scsi-drv/scsi_driver.c:11: device_config_storage *const dev = (device_config_storage *)get_usb_device_config(dev_index);
ld a,(ix+4) ld a,(ix+4)
call _get_usb_device_config call _get_usb_device_config
;source-doc/scsi-drv/scsi_driver.c:14: critical_begin();
;source-doc/scsi-drv/scsi_driver.c:16: critical_begin();
push de push de
call _critical_begin call _critical_begin
pop de pop de
;source-doc/scsi-drv/scsi_driver.c:15: while ((result = scsi_test(dev)) && --counter > 0)
;source-doc/scsi-drv/scsi_driver.c:17: while ((result = scsi_test(dev)) && --counter > 0)
ld c,0x03 ld c,0x03
l_usb_scsi_init_00102: l_usb_scsi_init_00102:
push bc push bc
@ -81,16 +81,16 @@ l_usb_scsi_init_00102:
ld a, l ld a, l
pop de pop de
pop bc pop bc
ld (_result),a
ld l, a
or a or a
jr Z,l_usb_scsi_init_00104 jr Z,l_usb_scsi_init_00104
dec c dec c
jr Z,l_usb_scsi_init_00104 jr Z,l_usb_scsi_init_00104
;source-doc/scsi-drv/scsi_driver.c:16: scsi_request_sense(dev, &response);
ld hl,0
add hl, sp
;source-doc/scsi-drv/scsi_driver.c:18: scsi_request_sense(dev, &response);
push bc push bc
push de push de
ld hl,4
add hl, sp
push hl push hl
push de push de
call _scsi_request_sense call _scsi_request_sense
@ -100,15 +100,16 @@ l_usb_scsi_init_00102:
pop bc pop bc
jr l_usb_scsi_init_00102 jr l_usb_scsi_init_00102
l_usb_scsi_init_00104: l_usb_scsi_init_00104:
;source-doc/scsi-drv/scsi_driver.c:17: critical_end();
;source-doc/scsi-drv/scsi_driver.c:19: critical_end();
push hl
call _critical_end call _critical_end
;source-doc/scsi-drv/scsi_driver.c:19: return result;
ld hl, (_result)
;source-doc/scsi-drv/scsi_driver.c:20: }
pop hl
;source-doc/scsi-drv/scsi_driver.c:21: return result;
;source-doc/scsi-drv/scsi_driver.c:22: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
;source-doc/scsi-drv/scsi_driver.c:24: usb_error usb_scsi_read_capacity(const uint16_t dev_index, scsi_read_capacity_result *cap_result) {
;source-doc/scsi-drv/scsi_driver.c:26: usb_error usb_scsi_read_capacity(const uint16_t dev_index, scsi_read_capacity_result *cap_result) {
; --------------------------------- ; ---------------------------------
; Function usb_scsi_read_capacity ; Function usb_scsi_read_capacity
; --------------------------------- ; ---------------------------------
@ -119,10 +120,10 @@ _usb_scsi_read_capacity:
ld hl, -27 ld hl, -27
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/scsi-drv/scsi_driver.c:25: device_config_storage *const dev = (device_config_storage *)get_usb_device_config(dev_index);
;source-doc/scsi-drv/scsi_driver.c:27: device_config_storage *const dev = (device_config_storage *)get_usb_device_config(dev_index);
ld a,(ix+4) ld a,(ix+4)
call _get_usb_device_config call _get_usb_device_config
;source-doc/scsi-drv/scsi_driver.c:28: cbw_scsi.cbw = scsi_command_block_wrapper;
;source-doc/scsi-drv/scsi_driver.c:30: cbw_scsi.cbw = scsi_command_block_wrapper;
push de push de
ld hl,2 ld hl,2
add hl, sp add hl, sp
@ -131,7 +132,7 @@ _usb_scsi_read_capacity:
ld hl,_scsi_command_block_wrapper ld hl,_scsi_command_block_wrapper
ldir ldir
pop de pop de
;source-doc/scsi-drv/scsi_driver.c:29: cbw_scsi.read_capacity = scsi_packet_read_capacity;
;source-doc/scsi-drv/scsi_driver.c:31: cbw_scsi.read_capacity = scsi_packet_read_capacity;
push de push de
ld hl,17 ld hl,17
add hl, sp add hl, sp
@ -140,17 +141,17 @@ _usb_scsi_read_capacity:
ld hl,_scsi_packet_read_capacity ld hl,_scsi_packet_read_capacity
ldir ldir
pop de pop de
;source-doc/scsi-drv/scsi_driver.c:31: cbw_scsi.cbw.bCBWLUN = 0;
;source-doc/scsi-drv/scsi_driver.c:33: cbw_scsi.cbw.bCBWLUN = 0;
ld (ix-14),0x00 ld (ix-14),0x00
;source-doc/scsi-drv/scsi_driver.c:32: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_read_capacity);
;source-doc/scsi-drv/scsi_driver.c:34: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_read_capacity);
ld (ix-13),0x0c ld (ix-13),0x0c
;source-doc/scsi-drv/scsi_driver.c:33: cbw_scsi.cbw.dCBWDataTransferLength = sizeof(scsi_read_capacity_result);
;source-doc/scsi-drv/scsi_driver.c:35: cbw_scsi.cbw.dCBWDataTransferLength = sizeof(scsi_read_capacity_result);
ld (ix-19),0x08 ld (ix-19),0x08
xor a xor a
ld (ix-18),a ld (ix-18),a
ld (ix-17),a ld (ix-17),a
ld (ix-16),a ld (ix-16),a
;source-doc/scsi-drv/scsi_driver.c:35: return do_scsi_cmd(dev, &cbw_scsi.cbw, cap_result, false);
;source-doc/scsi-drv/scsi_driver.c:37: return do_scsi_cmd(dev, &cbw_scsi.cbw, cap_result, false);
ld c,(ix+6) ld c,(ix+6)
ld b,(ix+7) ld b,(ix+7)
xor a xor a
@ -166,11 +167,11 @@ _usb_scsi_read_capacity:
pop af pop af
pop af pop af
inc sp inc sp
;source-doc/scsi-drv/scsi_driver.c:36: }
;source-doc/scsi-drv/scsi_driver.c:38: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
;source-doc/scsi-drv/scsi_driver.c:56: usb_error usb_scsi_read(const uint16_t dev_index, uint8_t *const buffer) {
;source-doc/scsi-drv/scsi_driver.c:58: usb_error usb_scsi_read(const uint16_t dev_index, uint8_t *const buffer) {
; --------------------------------- ; ---------------------------------
; Function usb_scsi_read ; Function usb_scsi_read
; --------------------------------- ; ---------------------------------
@ -179,12 +180,12 @@ _usb_scsi_read:
ld ix,0 ld ix,0
add ix,sp add ix,sp
push af push af
;source-doc/scsi-drv/scsi_driver.c:57: device_config_storage *const dev = (device_config_storage *)get_usb_device_config(dev_index);
;source-doc/scsi-drv/scsi_driver.c:61: device_config_storage *const dev = (device_config_storage *)get_usb_device_config(dev_index);
ld a,(ix+4) ld a,(ix+4)
call _get_usb_device_config call _get_usb_device_config
pop bc pop bc
push de push de
;source-doc/scsi-drv/scsi_driver.c:59: memset(&cbw, 0, sizeof(cbw_scsi_read_write));
;source-doc/scsi-drv/scsi_driver.c:63: memset(&cbw, 0, sizeof(cbw_scsi_read_write));
ld de,_cbw ld de,_cbw
ld l, e ld l, e
ld h, d ld h, d
@ -197,116 +198,111 @@ l_usb_scsi_read_00113:
ld (hl),0x00 ld (hl),0x00
inc hl inc hl
djnz l_usb_scsi_read_00112 djnz l_usb_scsi_read_00112
;source-doc/scsi-drv/scsi_driver.c:60: cbw.cbw = scsi_command_block_wrapper;
;source-doc/scsi-drv/scsi_driver.c:64: cbw.cbw = scsi_command_block_wrapper;
ld bc,0x000f ld bc,0x000f
ld hl,_scsi_command_block_wrapper ld hl,_scsi_command_block_wrapper
ldir ldir
;source-doc/scsi-drv/scsi_driver.c:62: cbw.cbw.bCBWLUN = 0;
;source-doc/scsi-drv/scsi_driver.c:66: cbw.cbw.bCBWLUN = 0;
ld hl,_cbw + 13 ld hl,_cbw + 13
ld (hl),0x00 ld (hl),0x00
;source-doc/scsi-drv/scsi_driver.c:63: cbw.cbw.bCBWCBLength = sizeof(_scsi_packet_read_write);
;source-doc/scsi-drv/scsi_driver.c:67: cbw.cbw.bCBWCBLength = sizeof(_scsi_packet_read_write);
ld hl,_cbw + 14 ld hl,_cbw + 14
ld (hl),0x0c ld (hl),0x0c
;source-doc/scsi-drv/scsi_driver.c:64: cbw.cbw.dCBWDataTransferLength = 512;
;source-doc/scsi-drv/scsi_driver.c:68: cbw.cbw.dCBWDataTransferLength = 512;
ld hl,0x0200 ld hl,0x0200
ld (_cbw + 8),hl ld (_cbw + 8),hl
ld h, l ld h, l
ld (_cbw + 8 + 2),hl ld (_cbw + 8 + 2),hl
;source-doc/scsi-drv/scsi_driver.c:66: cbw.scsi_cmd.operation_code = 0x28; // read operation
;source-doc/scsi-drv/scsi_driver.c:70: cbw.scsi_cmd.operation_code = 0x28; // read operation
ld hl,_cbw + 15 ld hl,_cbw + 15
ld (hl),0x28 ld (hl),0x28
;source-doc/scsi-drv/scsi_driver.c:67: cbw.scsi_cmd.transfer_len[1] = 1;
;source-doc/scsi-drv/scsi_driver.c:71: cbw.scsi_cmd.transfer_len[1] = 1;
ld hl,_cbw + 23 ld hl,_cbw + 23
ld (hl),0x01 ld (hl),0x01
;source-doc/scsi-drv/scsi_driver.c:68: cbw.scsi_cmd.lba[0] = dev->current_lba >> 24;
ld l,(ix-2)
ld h,(ix-1)
ld bc,0x000c
add hl,bc
ld c,l
ld b,h
;source-doc/scsi-drv/scsi_driver.c:72: cbw.scsi_cmd.lba[0] = dev->current_lba >> 24;
pop hl
push hl
ld de,0x000c
add hl, de
push hl
inc hl inc hl
inc hl inc hl
inc hl inc hl
ld a, (hl) ld a, (hl)
ld ((_cbw + 17)),a ld ((_cbw + 17)),a
;source-doc/scsi-drv/scsi_driver.c:69: cbw.scsi_cmd.lba[1] = dev->current_lba >> 16;
;source-doc/scsi-drv/scsi_driver.c:70: cbw.scsi_cmd.lba[2] = dev->current_lba >> 8;
ld l,c
ld h,b
pop hl
;source-doc/scsi-drv/scsi_driver.c:73: cbw.scsi_cmd.lba[1] = dev->current_lba >> 16;
push hl
inc hl inc hl
inc hl inc hl
ld a,(hl)
ld a, (hl)
ld ((_cbw + 18)),a ld ((_cbw + 18)),a
dec hl
ld e, (hl)
ld hl, +(_cbw + 19)
ld (hl), e
;source-doc/scsi-drv/scsi_driver.c:71: cbw.scsi_cmd.lba[3] = dev->current_lba;
ld a, (bc)
pop hl
;source-doc/scsi-drv/scsi_driver.c:74: cbw.scsi_cmd.lba[2] = dev->current_lba >> 8;
push hl
inc hl inc hl
ld (hl), a
;source-doc/scsi-drv/scsi_driver.c:73: result = do_scsi_cmd(dev, &cbw.cbw, buffer, false);
ld e,(ix+6)
ld d,(ix+7)
push bc
ld a, (hl)
ld ((_cbw + 19)),a
pop hl
;source-doc/scsi-drv/scsi_driver.c:75: cbw.scsi_cmd.lba[3] = dev->current_lba;
ld bc,_cbw + 20
ld a, (hl)
ld (bc), a
;source-doc/scsi-drv/scsi_driver.c:77: result = do_scsi_cmd(dev, &cbw.cbw, buffer, false);
ld c,(ix+6)
ld b,(ix+7)
push hl
xor a xor a
push af push af
inc sp inc sp
push bc
ld de,_cbw
push de
ld e,(ix-2)
ld d,(ix-1)
push de push de
ld hl,_cbw
push hl
ld l,(ix-2)
ld h,(ix-1)
push hl
call _do_scsi_cmd call _do_scsi_cmd
pop af pop af
pop af pop af
pop af pop af
inc sp inc sp
pop bc
ld a, l ld a, l
ld (_result), a
;source-doc/scsi-drv/scsi_driver.c:75: if (result == USB_ERR_OK)
ld a,(_result)
pop hl
ld (ix-1),a
;source-doc/scsi-drv/scsi_driver.c:79: if (result == USB_ERR_OK)
or a or a
jr NZ,l_usb_scsi_read_00102 jr NZ,l_usb_scsi_read_00102
;source-doc/scsi-drv/scsi_driver.c:76: dev->current_lba++;
ld l, c
ld h, b
ld e, (hl)
;source-doc/scsi-drv/scsi_driver.c:80: dev->current_lba++;
ld c,(hl)
push hl
inc hl inc hl
ld d, (hl)
ld b, (hl)
inc hl inc hl
ld a,(hl)
ld e, (hl)
inc hl inc hl
ld h,(hl)
ld l,a
inc e
ld d, (hl)
pop hl
inc c
jr NZ,l_usb_scsi_read_00114 jr NZ,l_usb_scsi_read_00114
inc d
inc b
jr NZ,l_usb_scsi_read_00114 jr NZ,l_usb_scsi_read_00114
inc hl
inc de
l_usb_scsi_read_00114: l_usb_scsi_read_00114:
ld a, e
ld (bc), a
inc bc
ld a, d
ld (bc), a
inc bc
ld a, l
ld (bc), a
inc bc
ld a, h
ld (bc), a
ld (hl), c
inc hl
ld (hl), b
inc hl
ld (hl), e
inc hl
ld (hl), d
l_usb_scsi_read_00102: l_usb_scsi_read_00102:
;source-doc/scsi-drv/scsi_driver.c:77: return result;
ld hl, (_result)
;source-doc/scsi-drv/scsi_driver.c:78: }
;source-doc/scsi-drv/scsi_driver.c:81: return result;
ld l,(ix-1)
;source-doc/scsi-drv/scsi_driver.c:82: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
;source-doc/scsi-drv/scsi_driver.c:80: usb_error usb_scsi_write(const uint16_t dev_index, uint8_t *const buffer) {
;source-doc/scsi-drv/scsi_driver.c:84: usb_error usb_scsi_write(const uint16_t dev_index, uint8_t *const buffer) {
; --------------------------------- ; ---------------------------------
; Function usb_scsi_write ; Function usb_scsi_write
; --------------------------------- ; ---------------------------------
@ -315,12 +311,12 @@ _usb_scsi_write:
ld ix,0 ld ix,0
add ix,sp add ix,sp
push af push af
;source-doc/scsi-drv/scsi_driver.c:81: device_config_storage *const dev = (device_config_storage *)get_usb_device_config(dev_index);
;source-doc/scsi-drv/scsi_driver.c:86: device_config_storage *const dev = (device_config_storage *)get_usb_device_config(dev_index);
ld a,(ix+4) ld a,(ix+4)
call _get_usb_device_config call _get_usb_device_config
pop bc pop bc
push de push de
;source-doc/scsi-drv/scsi_driver.c:83: memset(&cbw, 0, sizeof(cbw_scsi_read_write));
;source-doc/scsi-drv/scsi_driver.c:88: memset(&cbw, 0, sizeof(cbw_scsi_read_write));
ld de,_cbw ld de,_cbw
ld l, e ld l, e
ld h, d ld h, d
@ -333,112 +329,107 @@ l_usb_scsi_write_00113:
ld (hl),0x00 ld (hl),0x00
inc hl inc hl
djnz l_usb_scsi_write_00112 djnz l_usb_scsi_write_00112
;source-doc/scsi-drv/scsi_driver.c:84: cbw.cbw = scsi_command_block_wrapper;
;source-doc/scsi-drv/scsi_driver.c:89: cbw.cbw = scsi_command_block_wrapper;
ld bc,0x000f ld bc,0x000f
ld hl,_scsi_command_block_wrapper ld hl,_scsi_command_block_wrapper
ldir ldir
;source-doc/scsi-drv/scsi_driver.c:86: cbw.cbw.bCBWLUN = 0;
;source-doc/scsi-drv/scsi_driver.c:91: cbw.cbw.bCBWLUN = 0;
ld hl,_cbw + 13 ld hl,_cbw + 13
ld (hl),0x00 ld (hl),0x00
;source-doc/scsi-drv/scsi_driver.c:87: cbw.cbw.bCBWCBLength = sizeof(_scsi_packet_read_write);
;source-doc/scsi-drv/scsi_driver.c:92: cbw.cbw.bCBWCBLength = sizeof(_scsi_packet_read_write);
ld hl,_cbw + 14 ld hl,_cbw + 14
ld (hl),0x0c ld (hl),0x0c
;source-doc/scsi-drv/scsi_driver.c:88: cbw.cbw.dCBWDataTransferLength = 512;
;source-doc/scsi-drv/scsi_driver.c:93: cbw.cbw.dCBWDataTransferLength = 512;
ld hl,0x0200 ld hl,0x0200
ld (_cbw + 8),hl ld (_cbw + 8),hl
ld h, l ld h, l
ld (_cbw + 8 + 2),hl ld (_cbw + 8 + 2),hl
;source-doc/scsi-drv/scsi_driver.c:90: cbw.scsi_cmd.operation_code = 0x2A; // write operation
;source-doc/scsi-drv/scsi_driver.c:95: cbw.scsi_cmd.operation_code = 0x2A; // write operation
ld hl,_cbw + 15 ld hl,_cbw + 15
ld (hl),0x2a ld (hl),0x2a
;source-doc/scsi-drv/scsi_driver.c:91: cbw.scsi_cmd.transfer_len[1] = 1;
;source-doc/scsi-drv/scsi_driver.c:96: cbw.scsi_cmd.transfer_len[1] = 1;
ld hl,_cbw + 23 ld hl,_cbw + 23
ld (hl),0x01 ld (hl),0x01
;source-doc/scsi-drv/scsi_driver.c:92: cbw.scsi_cmd.lba[0] = dev->current_lba >> 24;
ld l,(ix-2)
ld h,(ix-1)
ld bc,0x000c
add hl,bc
ld c,l
ld b,h
;source-doc/scsi-drv/scsi_driver.c:97: cbw.scsi_cmd.lba[0] = dev->current_lba >> 24;
pop hl
push hl
ld de,0x000c
add hl, de
push hl
inc hl inc hl
inc hl inc hl
inc hl inc hl
ld a, (hl) ld a, (hl)
ld ((_cbw + 17)),a ld ((_cbw + 17)),a
;source-doc/scsi-drv/scsi_driver.c:93: cbw.scsi_cmd.lba[1] = dev->current_lba >> 16;
;source-doc/scsi-drv/scsi_driver.c:94: cbw.scsi_cmd.lba[2] = dev->current_lba >> 8;
ld l,c
ld h,b
pop hl
;source-doc/scsi-drv/scsi_driver.c:98: cbw.scsi_cmd.lba[1] = dev->current_lba >> 16;
push hl
inc hl inc hl
inc hl inc hl
ld a,(hl)
ld a, (hl)
ld ((_cbw + 18)),a ld ((_cbw + 18)),a
dec hl
ld e, (hl)
ld hl, +(_cbw + 19)
ld (hl), e
;source-doc/scsi-drv/scsi_driver.c:95: cbw.scsi_cmd.lba[3] = dev->current_lba;
ld a, (bc)
pop hl
;source-doc/scsi-drv/scsi_driver.c:99: cbw.scsi_cmd.lba[2] = dev->current_lba >> 8;
push hl
inc hl inc hl
ld (hl), a
;source-doc/scsi-drv/scsi_driver.c:97: result = do_scsi_cmd(dev, &cbw.cbw, buffer, true);
ld e,(ix+6)
ld d,(ix+7)
push bc
ld a, (hl)
ld ((_cbw + 19)),a
pop hl
;source-doc/scsi-drv/scsi_driver.c:100: cbw.scsi_cmd.lba[3] = dev->current_lba;
ld bc,_cbw + 20
ld a, (hl)
ld (bc), a
;source-doc/scsi-drv/scsi_driver.c:102: result = do_scsi_cmd(dev, &cbw.cbw, buffer, true);
ld c,(ix+6)
ld b,(ix+7)
push hl
ld a,0x01 ld a,0x01
push af push af
inc sp inc sp
push bc
ld de,_cbw
push de
ld e,(ix-2)
ld d,(ix-1)
push de push de
ld hl,_cbw
push hl
ld l,(ix-2)
ld h,(ix-1)
push hl
call _do_scsi_cmd call _do_scsi_cmd
pop af pop af
pop af pop af
pop af pop af
inc sp inc sp
pop bc
ld a, l ld a, l
ld (_result), a
;source-doc/scsi-drv/scsi_driver.c:99: if (result == USB_ERR_OK)
ld a,(_result)
pop hl
ld (ix-1),a
;source-doc/scsi-drv/scsi_driver.c:104: if (result == USB_ERR_OK)
or a or a
jr NZ,l_usb_scsi_write_00102 jr NZ,l_usb_scsi_write_00102
;source-doc/scsi-drv/scsi_driver.c:100: dev->current_lba++;
ld l, c
ld h, b
ld e, (hl)
;source-doc/scsi-drv/scsi_driver.c:105: dev->current_lba++;
ld c,(hl)
push hl
inc hl inc hl
ld d, (hl)
ld b, (hl)
inc hl inc hl
ld a,(hl)
ld e, (hl)
inc hl inc hl
ld h,(hl)
ld l,a
inc e
ld d, (hl)
pop hl
inc c
jr NZ,l_usb_scsi_write_00114 jr NZ,l_usb_scsi_write_00114
inc d
inc b
jr NZ,l_usb_scsi_write_00114 jr NZ,l_usb_scsi_write_00114
inc hl
inc de
l_usb_scsi_write_00114: l_usb_scsi_write_00114:
ld a, e
ld (bc), a
inc bc
ld a, d
ld (bc), a
inc bc
ld a, l
ld (bc), a
inc bc
ld a, h
ld (bc), a
ld (hl), c
inc hl
ld (hl), b
inc hl
ld (hl), e
inc hl
ld (hl), d
l_usb_scsi_write_00102: l_usb_scsi_write_00102:
;source-doc/scsi-drv/scsi_driver.c:101: return result;
ld hl, (_result)
;source-doc/scsi-drv/scsi_driver.c:102: }
;source-doc/scsi-drv/scsi_driver.c:106: return result;
ld l,(ix-1)
;source-doc/scsi-drv/scsi_driver.c:107: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret

5
Source/HBIOS/ch376-native/source-doc/base-drv/ch376.c

@ -3,8 +3,6 @@
#include "ez80-helpers.h" #include "ez80-helpers.h"
#include "print.h" #include "print.h"
usb_error result = 0;
void ch_command(const uint8_t command) __z88dk_fastcall { void ch_command(const uint8_t command) __z88dk_fastcall {
uint8_t counter = 255; uint8_t counter = 255;
while ((CH376_COMMAND_PORT & PARA_STATE_BUSY) && --counter != 0) while ((CH376_COMMAND_PORT & PARA_STATE_BUSY) && --counter != 0)
@ -153,7 +151,8 @@ void ch_issue_token_in_ep0(void) { ch_issue_token(0x80, 0, CH_PID_IN); }
void ch_issue_token_setup(void) { ch_issue_token(0, 0, CH_PID_SETUP); } void ch_issue_token_setup(void) { ch_issue_token(0, 0, CH_PID_SETUP); }
usb_error ch_data_in_transfer(uint8_t *buffer, int16_t buffer_size, endpoint_param *const endpoint) { usb_error ch_data_in_transfer(uint8_t *buffer, int16_t buffer_size, endpoint_param *const endpoint) {
uint8_t count;
uint8_t count;
usb_error result;
if (buffer_size == 0) if (buffer_size == 0)
return USB_ERR_OK; return USB_ERR_OK;

2
Source/HBIOS/ch376-native/source-doc/base-drv/ch376.h

@ -90,8 +90,6 @@ extern int printf(const char *msg, ...);
#else #else
extern usb_error result;
#define trace_printf(...) #define trace_printf(...)
#define CHECK(fn) \ #define CHECK(fn) \

6
Source/HBIOS/ch376-native/source-doc/base-drv/dev_transfers.c

@ -32,6 +32,7 @@ usb_error usbdev_control_transfer(device_config *const device, const setup_packe
} }
usb_error usbdev_blk_out_trnsfer(device_config *const dev, const uint8_t *const buffer, const uint16_t buffer_size) { usb_error usbdev_blk_out_trnsfer(device_config *const dev, const uint8_t *const buffer, const uint16_t buffer_size) {
usb_error result;
endpoint_param *const endpoint = &dev->endpoints[ENDPOINT_BULK_OUT]; endpoint_param *const endpoint = &dev->endpoints[ENDPOINT_BULK_OUT];
@ -50,6 +51,8 @@ done:
} }
usb_error usbdev_bulk_in_transfer(device_config *const dev, uint8_t *const buffer, uint8_t *const buffer_size) { usb_error usbdev_bulk_in_transfer(device_config *const dev, uint8_t *const buffer, uint8_t *const buffer_size) {
usb_error result;
endpoint_param *const endpoint = &dev->endpoints[ENDPOINT_BULK_IN]; endpoint_param *const endpoint = &dev->endpoints[ENDPOINT_BULK_IN];
result = usb_data_in_transfer_n(buffer, buffer_size, dev->address, endpoint); result = usb_data_in_transfer_n(buffer, buffer_size, dev->address, endpoint);
@ -69,6 +72,7 @@ usb_error usbdev_dat_in_trnsfer(device_config *const device,
uint8_t *const buffer, uint8_t *const buffer,
const uint16_t buffer_size, const uint16_t buffer_size,
const usb_endpoint_type endpoint_type) { const usb_endpoint_type endpoint_type) {
usb_error result;
endpoint_param *const endpoint = &device->endpoints[endpoint_type]; endpoint_param *const endpoint = &device->endpoints[endpoint_type];
@ -86,6 +90,8 @@ done:
} }
usb_error usbdev_dat_in_trnsfer_0(device_config *const device, uint8_t *const buffer, const uint8_t buffer_size) { usb_error usbdev_dat_in_trnsfer_0(device_config *const device, uint8_t *const buffer, const uint8_t buffer_size) {
usb_error result;
endpoint_param *const endpoint = &device->endpoints[0]; endpoint_param *const endpoint = &device->endpoints[0];
result = usb_data_in_transfer(buffer, buffer_size, device->address, endpoint); result = usb_data_in_transfer(buffer, buffer_size, device->address, endpoint);

4
Source/HBIOS/ch376-native/source-doc/base-drv/protocol.c

@ -27,6 +27,7 @@ const setup_packet cmd_get_device_descriptor = {0x80, 6, {0, 1}, {0, 0}, 8};
* @return usb_error USB_ERR_OK if all good, otherwise specific error code * @return usb_error USB_ERR_OK if all good, otherwise specific error code
*/ */
usb_error usbtrn_get_descriptor(device_descriptor *const buffer) { usb_error usbtrn_get_descriptor(device_descriptor *const buffer) {
usb_error result;
setup_packet cmd; setup_packet cmd;
cmd = cmd_get_device_descriptor; cmd = cmd_get_device_descriptor;
cmd.wLength = 8; cmd.wLength = 8;
@ -52,6 +53,8 @@ done:
* @return usb_error USB_ERR_OK if all good, otherwise specific error code * @return usb_error USB_ERR_OK if all good, otherwise specific error code
*/ */
usb_error usbtrn_get_descriptor2(device_descriptor *const buffer, const uint8_t device_address) { usb_error usbtrn_get_descriptor2(device_descriptor *const buffer, const uint8_t device_address) {
usb_error result;
setup_packet cmd; setup_packet cmd;
cmd = cmd_get_device_descriptor; cmd = cmd_get_device_descriptor;
cmd.wLength = 8; cmd.wLength = 8;
@ -129,6 +132,7 @@ usb_error usbtrn_gfull_cfg_desc(const uint8_t config_index,
const uint8_t max_packet_size, const uint8_t max_packet_size,
const uint8_t max_buffer_size, const uint8_t max_buffer_size,
uint8_t *const buffer) { uint8_t *const buffer) {
usb_error result;
CHECK(usbtrn_get_config_descriptor((config_descriptor *)buffer, config_index, sizeof(config_descriptor), device_address, CHECK(usbtrn_get_config_descriptor((config_descriptor *)buffer, config_index, sizeof(config_descriptor), device_address,
max_packet_size)); max_packet_size));

4
Source/HBIOS/ch376-native/source-doc/base-drv/transfers.c

@ -92,6 +92,7 @@ done:
*/ */
usb_error usb_error
usb_data_in_transfer(uint8_t *buffer, const uint16_t buffer_size, const uint8_t device_address, endpoint_param *const endpoint) { usb_data_in_transfer(uint8_t *buffer, const uint16_t buffer_size, const uint8_t device_address, endpoint_param *const endpoint) {
usb_error result;
critical_begin(); critical_begin();
ch_set_usb_address(device_address); ch_set_usb_address(device_address);
@ -114,6 +115,8 @@ usb_data_in_transfer(uint8_t *buffer, const uint16_t buffer_size, const uint8_t
*/ */
usb_error usb_error
usb_data_in_transfer_n(uint8_t *buffer, uint8_t *const buffer_size, const uint8_t device_address, endpoint_param *const endpoint) { usb_data_in_transfer_n(uint8_t *buffer, uint8_t *const buffer_size, const uint8_t device_address, endpoint_param *const endpoint) {
usb_error result;
critical_begin(); critical_begin();
ch_set_usb_address(device_address); ch_set_usb_address(device_address);
@ -136,6 +139,7 @@ usb_data_in_transfer_n(uint8_t *buffer, uint8_t *const buffer_size, const uint8_
*/ */
usb_error usb_error
usb_data_out_transfer(const uint8_t *buffer, uint16_t buffer_size, const uint8_t device_address, endpoint_param *const endpoint) { usb_data_out_transfer(const uint8_t *buffer, uint16_t buffer_size, const uint8_t device_address, endpoint_param *const endpoint) {
usb_error result;
critical_begin(); critical_begin();
ch_set_usb_address(device_address); ch_set_usb_address(device_address);

2
Source/HBIOS/ch376-native/source-doc/keyboard/kyb_driver.c

@ -106,6 +106,8 @@ uint8_t usb_kyb_flush() __sdcccall(1) {
} }
void usb_kyb_tick(void) { void usb_kyb_tick(void) {
usb_error result;
if (is_in_critical_section()) if (is_in_critical_section())
return; return;

2
Source/HBIOS/ch376-native/source-doc/scsi-drv/class_scsi.c

@ -15,6 +15,8 @@ usb_error do_scsi_cmd(device_config_storage *const dev,
void *const send_receive_buffer, void *const send_receive_buffer,
const bool send) { const bool send) {
usb_error result;
cbw->dCBWTag[0] = next_tag++; cbw->dCBWTag[0] = next_tag++;
if (!send) if (!send)

5
Source/HBIOS/ch376-native/source-doc/scsi-drv/scsi_driver.c

@ -6,6 +6,8 @@
#include <usb_state.h> #include <usb_state.h>
usb_error usb_scsi_init(const uint16_t dev_index) { usb_error usb_scsi_init(const uint16_t dev_index) {
usb_error result;
device_config_storage *const dev = (device_config_storage *)get_usb_device_config(dev_index); device_config_storage *const dev = (device_config_storage *)get_usb_device_config(dev_index);
scsi_sense_result response; scsi_sense_result response;
@ -54,6 +56,8 @@ usb_error usb_scsi_read_capacity(const uint16_t dev_index, scsi_read_capacity_re
static cbw_scsi_read_write cbw = {{{0}}}; static cbw_scsi_read_write cbw = {{{0}}};
usb_error usb_scsi_read(const uint16_t dev_index, uint8_t *const buffer) { usb_error usb_scsi_read(const uint16_t dev_index, uint8_t *const buffer) {
usb_error result;
device_config_storage *const dev = (device_config_storage *)get_usb_device_config(dev_index); device_config_storage *const dev = (device_config_storage *)get_usb_device_config(dev_index);
memset(&cbw, 0, sizeof(cbw_scsi_read_write)); memset(&cbw, 0, sizeof(cbw_scsi_read_write));
@ -78,6 +82,7 @@ usb_error usb_scsi_read(const uint16_t dev_index, uint8_t *const buffer) {
} }
usb_error usb_scsi_write(const uint16_t dev_index, uint8_t *const buffer) { usb_error usb_scsi_write(const uint16_t dev_index, uint8_t *const buffer) {
usb_error result;
device_config_storage *const dev = (device_config_storage *)get_usb_device_config(dev_index); device_config_storage *const dev = (device_config_storage *)get_usb_device_config(dev_index);
memset(&cbw, 0, sizeof(cbw_scsi_read_write)); memset(&cbw, 0, sizeof(cbw_scsi_read_write));

2
Source/HBIOS/ch376-native/source-doc/ufi-drv/usb_cbi.c

@ -13,7 +13,7 @@ usb_error usb_execute_cbi(device_config *const storage_device,
const uint16_t buffer_size, const uint16_t buffer_size,
uint8_t *const buffer, uint8_t *const buffer,
uint8_t *const sense_codes) { uint8_t *const sense_codes) {
usb_error result;
const uint8_t interface_number = storage_device->interface_number; const uint8_t interface_number = storage_device->interface_number;
setup_packet adsc; setup_packet adsc;

26
Source/HBIOS/ch376-native/ufi-drv/usb_cbi.c.s

@ -98,10 +98,8 @@ _usb_execute_cbi:
pop af pop af
pop af pop af
pop af pop af
ld a, l
ld (_result), a
;source-doc/ufi-drv/usb_cbi.c:27: if (result == USB_ERR_STALL) { ;source-doc/ufi-drv/usb_cbi.c:27: if (result == USB_ERR_STALL) {
ld a,(_result)
ld a, l
sub 0x02 sub 0x02
jr NZ,l_usb_execute_cbi_00104 jr NZ,l_usb_execute_cbi_00104
;source-doc/ufi-drv/usb_cbi.c:28: if (sense_codes != NULL) ;source-doc/ufi-drv/usb_cbi.c:28: if (sense_codes != NULL)
@ -126,15 +124,14 @@ _usb_execute_cbi:
ld sp, hl ld sp, hl
l_usb_execute_cbi_00102: l_usb_execute_cbi_00102:
;source-doc/ufi-drv/usb_cbi.c:31: result = USB_ERR_STALL; ;source-doc/ufi-drv/usb_cbi.c:31: result = USB_ERR_STALL;
ld hl,_result
ld (hl),0x02
ld l,0x02
;source-doc/ufi-drv/usb_cbi.c:32: goto done; ;source-doc/ufi-drv/usb_cbi.c:32: goto done;
jp l_usb_execute_cbi_00116
jr l_usb_execute_cbi_00116
l_usb_execute_cbi_00104: l_usb_execute_cbi_00104:
;source-doc/ufi-drv/usb_cbi.c:35: if (result != USB_ERR_OK) { ;source-doc/ufi-drv/usb_cbi.c:35: if (result != USB_ERR_OK) {
ld a,(_result)
ld a, l
or a or a
jp NZ, l_usb_execute_cbi_00116
jr NZ,l_usb_execute_cbi_00116
;source-doc/ufi-drv/usb_cbi.c:40: if (send) { ;source-doc/ufi-drv/usb_cbi.c:40: if (send) {
bit 0,(ix+8) bit 0,(ix+8)
jr Z,l_usb_execute_cbi_00112 jr Z,l_usb_execute_cbi_00112
@ -152,10 +149,8 @@ l_usb_execute_cbi_00104:
pop af pop af
pop af pop af
pop af pop af
ld a, l
ld (_result), a
;source-doc/ufi-drv/usb_cbi.c:43: if (result != USB_ERR_OK) { ;source-doc/ufi-drv/usb_cbi.c:43: if (result != USB_ERR_OK) {
ld a,(_result)
ld a, l
or a or a
jr Z,l_usb_execute_cbi_00113 jr Z,l_usb_execute_cbi_00113
;source-doc/ufi-drv/usb_cbi.c:45: goto done; ;source-doc/ufi-drv/usb_cbi.c:45: goto done;
@ -179,10 +174,8 @@ l_usb_execute_cbi_00112:
pop af pop af
pop af pop af
inc sp inc sp
ld a, l
ld (_result), a
;source-doc/ufi-drv/usb_cbi.c:50: if (result != USB_ERR_OK) { ;source-doc/ufi-drv/usb_cbi.c:50: if (result != USB_ERR_OK) {
ld a,(_result)
ld a, l
or a or a
jr NZ,l_usb_execute_cbi_00116 jr NZ,l_usb_execute_cbi_00116
;source-doc/ufi-drv/usb_cbi.c:52: goto done; ;source-doc/ufi-drv/usb_cbi.c:52: goto done;
@ -208,14 +201,13 @@ l_usb_execute_cbi_00113:
pop af pop af
pop af pop af
inc sp inc sp
ld a, l
ld (_result), a
;source-doc/ufi-drv/usb_cbi.c:65: done: ;source-doc/ufi-drv/usb_cbi.c:65: done:
l_usb_execute_cbi_00116: l_usb_execute_cbi_00116:
;source-doc/ufi-drv/usb_cbi.c:66: critical_end(); ;source-doc/ufi-drv/usb_cbi.c:66: critical_end();
push hl
call _critical_end call _critical_end
pop hl
;source-doc/ufi-drv/usb_cbi.c:68: return result; ;source-doc/ufi-drv/usb_cbi.c:68: return result;
ld hl, (_result)
;source-doc/ufi-drv/usb_cbi.c:69: } ;source-doc/ufi-drv/usb_cbi.c:69: }
ld sp, ix ld sp, ix
pop ix pop ix

Loading…
Cancel
Save