Browse Source

ch376-native: enabled usb drivers for z80 config

pull/592/head
Dean Netherton 1 year ago
parent
commit
3f8bc43596
  1. 30
      .gitignore
  2. 8
      Source/HBIOS/Config/RCZ80_std.asm
  3. 84
      Source/HBIOS/ch376-native/base-drv/dev_transfers.c.s
  4. 108
      Source/HBIOS/ch376-native/base-drv/protocol.c.s
  5. 142
      Source/HBIOS/ch376-native/base-drv/transfers.c.s
  6. 6
      Source/HBIOS/ch376-native/base-drv/usb-init.c.s
  7. 14
      Source/HBIOS/ch376-native/keyboard/class_hid_keyboard.c.s
  8. 80
      Source/HBIOS/ch376-native/keyboard/kyb-init.c.s
  9. 64
      Source/HBIOS/ch376-native/ufi-drv/class_ufi.c.s
  10. 4
      Source/HBIOS/ch376kyb.asm

30
.gitignore

@ -114,20 +114,24 @@ Source/ZPM3/genbnk.dat
Source/ZSDOS/zsdos.err
# Lets explicit list all generate untracked binary files
Binary/*.upd
Binary/Apps/bbcbasic.txt
Binary/Apps/copysl.doc
Binary/Apps/copysl.doc
Binary/Apps/fdu.doc
Binary/Apps/fdu.doc
Binary/Apps/Tunes/bgm.vgm
Binary/Apps/Tunes/ending.vgm
Binary/Apps/Tunes/inchina.vgm
Binary/Apps/Tunes/shirakaw.vgm
Binary/Apps/Tunes/startdem.vgm
Binary/Apps/Tunes/wonder01.vgm
Binary/Apps/copysl.doc
Binary/Apps/fdu.doc
Binary/Apps/zmconfig.ovr
Binary/Apps/zminit.ovr
Binary/Apps/zmp.doc
Binary/Apps/zmp.hlp
Binary/Apps/zmp.cfg
Binary/Apps/zmp.doc
Binary/Apps/zmp.fon
Binary/Apps/zmp.hlp
Binary/Apps/zmterm.ovr
Binary/Apps/zmxfer.ovr
Binary/CPM3/bdos3.spr
@ -146,13 +150,12 @@ Binary/CPNET/cpn12ser.lbr
Binary/CPNET/cpn3duo.lbr
Binary/CPNET/cpn3mt.lbr
Binary/CPNET/cpn3ser.lbr
Binary/*.upd
Binary/hd1k_prefix.dat
Binary/ZPM3/bnkbdos3.spr
Binary/ZPM3/bnkbios3.spr
Binary/ZPM3/gencpm.dat
Binary/ZPM3/resbdos3.spr
Binary/ZPM3/zinstal.zpm
Binary/hd1k_prefix.dat
Source/BPBIOS/def-ww.lib
Source/CPNET/cpn12duo.lbr
Source/CPNET/cpn12mt.lbr
@ -177,6 +180,8 @@ Source/Fonts/fontvgarcc.bin
Source/Fonts/fontvgarcu.asm
Source/HBIOS/*.upd
Source/HBIOS/build_env.cmd
Source/HBIOS/build_env.cmd
Source/HBIOS/hbios_env.sh
Source/HBIOS/hbios_env.sh
Source/HBIOS/netboot.mod
Source/Images/*.cat
@ -194,16 +199,3 @@ Source/ZPM3/setz3.com
Tools/unix/OpenSpin/build/
Tools/unix/zxcc/config.h
Tools/unix/zxcc/zxcc
Binary/Apps/bbcbasic.txt
Source/Images/hd1k_msxroms1.img
Source/Images/hd1k_msxroms1.img
Source/Images/hd1k_msxroms2.img
Source/Images/hd512_msxroms1.img
Source/Images/hd512_msxroms2.img
Source/Images/fd144_z3plus.img
Source/Images/hd1k_z3plus.img
Source/Images/hd512_z3plus.img
Source/Images/*.cat
Source/RomDsk/*.cat

8
Source/HBIOS/Config/RCZ80_std.asm

@ -106,3 +106,11 @@ SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER
AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER
AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU]
AY_FORCE .SET FALSE ; AY: BYPASS AUTO-DETECT, FORCED PRESENT
CHENABLE .SET FALSE ; CH: ENABLE CH375/376 USB SUPPORT
CH0USBENABLE .SET FALSE ; CH375: ENABLE CH375 USB DRIVER
CH1USBENABLE .SET FALSE ; CH376: ENABLE CH376 USB DRIVER
CHNATIVEENABLE .SET TRUE ; CH376: ENABLE CH376 NATIVE USB DRIVER
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)
USBKYBENABLE .SET TRUE ; USB KEYBOARD DRIVER

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

@ -48,7 +48,7 @@ _USB_MODULE_LEDS .EQU 0xff8a
;--------------------------------------------------------
; code
;--------------------------------------------------------
;source-doc/base-drv/dev_transfers.c:31: usb_error usbdev_control_transfer(device_config *const device, const setup_packet *const cmd_packet, uint8_t *const buffer) {
;source-doc/base-drv/dev_transfers.c:24: * See https://www.beyondlogic.org/usbnutshell/usb4.shtml for a description of the USB control transfer
; ---------------------------------
; Function usbdev_control_transfer
; ---------------------------------
@ -56,7 +56,7 @@ _usbdev_control_transfer:
push ix
ld ix,0
add ix,sp
;source-doc/base-drv/dev_transfers.c:32: return usb_control_transfer(cmd_packet, buffer, device->address, device->max_packet_size);
;source-doc/base-drv/dev_transfers.c:25: *
ld l,(ix+4)
ld h,(ix+5)
ld e,l
@ -82,10 +82,10 @@ _usbdev_control_transfer:
pop af
pop af
pop af
;source-doc/base-drv/dev_transfers.c:33: }
;source-doc/base-drv/dev_transfers.c:26: * @param device the usb device
pop ix
ret
;source-doc/base-drv/dev_transfers.c:35: usb_error usbdev_blk_out_trnsfer(device_config *const dev, const uint8_t *const buffer, const uint16_t buffer_size) {
;source-doc/base-drv/dev_transfers.c:28: * @param buffer Pointer of data to send or receive into
; ---------------------------------
; Function usbdev_blk_out_trnsfer
; ---------------------------------
@ -94,7 +94,7 @@ _usbdev_blk_out_trnsfer:
ld ix,0
add ix,sp
dec sp
;source-doc/base-drv/dev_transfers.c:37: endpoint_param *const endpoint = &dev->endpoints[ENDPOINT_BULK_OUT];
;source-doc/base-drv/dev_transfers.c:30: */
ld e,(ix+4)
ld d,(ix+5)
ld c, e
@ -102,7 +102,7 @@ _usbdev_blk_out_trnsfer:
inc bc
inc bc
inc bc
;source-doc/base-drv/dev_transfers.c:39: result = usb_data_out_transfer(buffer, buffer_size, dev->address, endpoint);
;source-doc/base-drv/dev_transfers.c:32: return usb_control_transfer(cmd_packet, buffer, device->address, device->max_packet_size);
ld l, e
ld h, d
ld a, (hl)
@ -131,11 +131,11 @@ _usbdev_blk_out_trnsfer:
pop bc
ld a, l
ld (_result), a
;source-doc/base-drv/dev_transfers.c:41: if (result == USB_ERR_STALL) {
;source-doc/base-drv/dev_transfers.c:34:
ld a,(_result)
sub 0x02
jr NZ,l_usbdev_blk_out_trnsfer_00102
;source-doc/base-drv/dev_transfers.c:42: usbtrn_clear_endpoint_halt(endpoint->number, dev->address, dev->max_packet_size);
;source-doc/base-drv/dev_transfers.c:35: usb_error usbdev_blk_out_trnsfer(device_config *const dev, const uint8_t *const buffer, const uint16_t buffer_size) {
ld l, e
ld h, d
inc hl
@ -164,23 +164,23 @@ _usbdev_blk_out_trnsfer:
pop af
inc sp
pop bc
;source-doc/base-drv/dev_transfers.c:43: endpoint->toggle = 0;
;source-doc/base-drv/dev_transfers.c:36:
ld a, (bc)
and 0xfe
ld (bc), a
;source-doc/base-drv/dev_transfers.c:44: return USB_ERR_STALL;
;source-doc/base-drv/dev_transfers.c:37: endpoint_param *const endpoint = &dev->endpoints[ENDPOINT_BULK_OUT];
ld l,0x02
jr l_usbdev_blk_out_trnsfer_00104
l_usbdev_blk_out_trnsfer_00102:
;source-doc/base-drv/dev_transfers.c:47: RETURN_CHECK(result);
;source-doc/base-drv/dev_transfers.c:50: return result;
;source-doc/base-drv/dev_transfers.c:40:
;source-doc/base-drv/dev_transfers.c:43: endpoint->toggle = 0;
ld hl,(_result)
l_usbdev_blk_out_trnsfer_00104:
;source-doc/base-drv/dev_transfers.c:51: }
;source-doc/base-drv/dev_transfers.c:44: return USB_ERR_STALL;
inc sp
pop ix
ret
;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) {
;source-doc/base-drv/dev_transfers.c:46:
; ---------------------------------
; Function usbdev_bulk_in_transfer
; ---------------------------------
@ -189,12 +189,12 @@ _usbdev_bulk_in_transfer:
ld ix,0
add ix,sp
dec sp
;source-doc/base-drv/dev_transfers.c:54: endpoint_param *const endpoint = &dev->endpoints[ENDPOINT_BULK_IN];
;source-doc/base-drv/dev_transfers.c:47: RETURN_CHECK(result);
ld c,(ix+4)
ld b,(ix+5)
ld hl,0x0006
add hl, bc
;source-doc/base-drv/dev_transfers.c:56: result = usb_data_in_transfer_n(buffer, buffer_size, dev->address, endpoint);
;source-doc/base-drv/dev_transfers.c:49: done:
ld e,c
ld d,b
ex de,hl
@ -224,11 +224,11 @@ _usbdev_bulk_in_transfer:
pop bc
ld a, l
ld (_result), a
;source-doc/base-drv/dev_transfers.c:58: if (result == USB_ERR_STALL) {
;source-doc/base-drv/dev_transfers.c:51: }
ld a,(_result)
sub 0x02
jr NZ,l_usbdev_bulk_in_transfer_00102
;source-doc/base-drv/dev_transfers.c:59: usbtrn_clear_endpoint_halt(endpoint->number, dev->address, dev->max_packet_size);
;source-doc/base-drv/dev_transfers.c:52:
ld l, c
ld h, b
inc hl
@ -258,22 +258,22 @@ _usbdev_bulk_in_transfer:
pop af
inc sp
pop de
;source-doc/base-drv/dev_transfers.c:60: endpoint->toggle = 0;
;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) {
ex de, hl
res 0, (hl)
;source-doc/base-drv/dev_transfers.c:61: return USB_ERR_STALL;
;source-doc/base-drv/dev_transfers.c:54: endpoint_param *const endpoint = &dev->endpoints[ENDPOINT_BULK_IN];
ld l,0x02
jr l_usbdev_bulk_in_transfer_00104
l_usbdev_bulk_in_transfer_00102:
;source-doc/base-drv/dev_transfers.c:64: RETURN_CHECK(result);
;source-doc/base-drv/dev_transfers.c:66: return result;
;source-doc/base-drv/dev_transfers.c:57:
;source-doc/base-drv/dev_transfers.c:59: 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:67: }
;source-doc/base-drv/dev_transfers.c:60: endpoint->toggle = 0;
inc sp
pop ix
ret
;source-doc/base-drv/dev_transfers.c:69: usb_error usbdev_dat_in_trnsfer(device_config *const device,
;source-doc/base-drv/dev_transfers.c:62: }
; ---------------------------------
; Function usbdev_dat_in_trnsfer
; ---------------------------------
@ -282,7 +282,7 @@ _usbdev_dat_in_trnsfer:
ld ix,0
add ix,sp
dec sp
;source-doc/base-drv/dev_transfers.c:74: endpoint_param *const endpoint = &device->endpoints[endpoint_type];
;source-doc/base-drv/dev_transfers.c:67: }
ld e,(ix+4)
ld d,(ix+5)
ld c, e
@ -301,7 +301,7 @@ _usbdev_dat_in_trnsfer:
ld a,0x00
adc a, b
ld b, a
;source-doc/base-drv/dev_transfers.c:76: result = usb_data_in_transfer(buffer, buffer_size, device->address, endpoint);
;source-doc/base-drv/dev_transfers.c:69: usb_error usbdev_dat_in_trnsfer(device_config *const device,
ld l, e
ld h, d
ld a, (hl)
@ -330,11 +330,11 @@ _usbdev_dat_in_trnsfer:
pop bc
ld a, l
ld (_result), a
;source-doc/base-drv/dev_transfers.c:78: if (result == USB_ERR_STALL) {
;source-doc/base-drv/dev_transfers.c:71: const uint16_t buffer_size,
ld a,(_result)
sub 0x02
jr NZ,l_usbdev_dat_in_trnsfer_00102
;source-doc/base-drv/dev_transfers.c:79: usbtrn_clear_endpoint_halt(endpoint->number, device->address, device->max_packet_size);
;source-doc/base-drv/dev_transfers.c:72: const usb_endpoint_type endpoint_type) {
ld l, e
ld h, d
inc hl
@ -363,23 +363,23 @@ _usbdev_dat_in_trnsfer:
pop af
inc sp
pop bc
;source-doc/base-drv/dev_transfers.c:80: endpoint->toggle = 0;
;source-doc/base-drv/dev_transfers.c:73:
ld a, (bc)
and 0xfe
ld (bc), a
;source-doc/base-drv/dev_transfers.c:81: return USB_ERR_STALL;
;source-doc/base-drv/dev_transfers.c:74: endpoint_param *const endpoint = &device->endpoints[endpoint_type];
ld l,0x02
jr l_usbdev_dat_in_trnsfer_00104
l_usbdev_dat_in_trnsfer_00102:
;source-doc/base-drv/dev_transfers.c:84: RETURN_CHECK(result);
;source-doc/base-drv/dev_transfers.c:86: return result;
;source-doc/base-drv/dev_transfers.c:77:
;source-doc/base-drv/dev_transfers.c:79: 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:87: }
;source-doc/base-drv/dev_transfers.c:80: endpoint->toggle = 0;
inc sp
pop ix
ret
;source-doc/base-drv/dev_transfers.c:89: usb_error usbdev_dat_in_trnsfer_0(device_config *const device, uint8_t *const buffer, const uint8_t buffer_size) {
;source-doc/base-drv/dev_transfers.c:82: }
; ---------------------------------
; Function usbdev_dat_in_trnsfer_0
; ---------------------------------
@ -388,13 +388,13 @@ _usbdev_dat_in_trnsfer_0:
ld ix,0
add ix,sp
push af
;source-doc/base-drv/dev_transfers.c:90: endpoint_param *const endpoint = &device->endpoints[0];
;source-doc/base-drv/dev_transfers.c:83:
ld e,(ix+4)
ld d,(ix+5)
ld hl,0x0003
add hl, de
ex (sp), hl
;source-doc/base-drv/dev_transfers.c:92: result = usb_data_in_transfer(buffer, buffer_size, device->address, endpoint);
;source-doc/base-drv/dev_transfers.c:85: done:
ld l, e
ld h, d
ld a, (hl)
@ -423,11 +423,11 @@ _usbdev_dat_in_trnsfer_0:
pop de
ld a, l
ld (_result), a
;source-doc/base-drv/dev_transfers.c:94: if (result == USB_ERR_STALL) {
;source-doc/base-drv/dev_transfers.c:87: }
ld a,(_result)
sub 0x02
jr NZ,l_usbdev_dat_in_trnsfer_0_00102
;source-doc/base-drv/dev_transfers.c:95: usbtrn_clear_endpoint_halt(endpoint->number, device->address, device->max_packet_size);
;source-doc/base-drv/dev_transfers.c:88:
ld l, e
ld h, d
inc hl
@ -452,18 +452,18 @@ _usbdev_dat_in_trnsfer_0:
call _usbtrn_clear_endpoint_halt
pop af
inc sp
;source-doc/base-drv/dev_transfers.c:96: endpoint->toggle = 0;
;source-doc/base-drv/dev_transfers.c:89: usb_error usbdev_dat_in_trnsfer_0(device_config *const device, uint8_t *const buffer, const uint8_t buffer_size) {
pop hl
push hl
res 0, (hl)
;source-doc/base-drv/dev_transfers.c:97: return USB_ERR_STALL;
;source-doc/base-drv/dev_transfers.c:90: endpoint_param *const endpoint = &device->endpoints[0];
ld l,0x02
jr l_usbdev_dat_in_trnsfer_0_00103
l_usbdev_dat_in_trnsfer_0_00102:
;source-doc/base-drv/dev_transfers.c:100: return result;
;source-doc/base-drv/dev_transfers.c:93:
ld hl,(_result)
l_usbdev_dat_in_trnsfer_0_00103:
;source-doc/base-drv/dev_transfers.c:101: }
;source-doc/base-drv/dev_transfers.c:94: if (result == USB_ERR_STALL) {
ld sp, ix
pop ix
ret

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

@ -48,7 +48,7 @@ _USB_MODULE_LEDS .EQU 0xff8a
;--------------------------------------------------------
; code
;--------------------------------------------------------
;source-doc/base-drv/protocol.c:29: usb_error usbtrn_get_descriptor(device_descriptor *const buffer) {
;source-doc/base-drv/protocol.c:25: *
; ---------------------------------
; Function usbtrn_get_descriptor
; ---------------------------------
@ -59,18 +59,18 @@ _usbtrn_get_descriptor:
ld hl, -8
add hl, sp
ld sp, hl
;source-doc/base-drv/protocol.c:31: cmd = cmd_get_device_descriptor;
;source-doc/base-drv/protocol.c:27: * @return usb_error USB_ERR_OK if all good, otherwise specific error code
ld hl,0
add hl, sp
ex de, hl
ld bc,0x0008
ld hl,_cmd_get_device_descriptor
ldir
;source-doc/base-drv/protocol.c:32: cmd.wLength = 8;
;source-doc/base-drv/protocol.c:28: */
ld (ix-2),0x08
xor a
ld (ix-1),a
;source-doc/base-drv/protocol.c:34: result = usb_control_transfer(&cmd, (uint8_t *)buffer, 0, 8);
;source-doc/base-drv/protocol.c:30: setup_packet cmd;
ld c,(ix+4)
ld b,(ix+5)
ld e, c
@ -93,11 +93,11 @@ _usbtrn_get_descriptor:
pop bc
ld a, l
ld (_result), a
;source-doc/base-drv/protocol.c:36: CHECK(result);
;source-doc/base-drv/protocol.c:32: cmd.wLength = 8;
ld a,(_result)
or a
jr NZ,l_usbtrn_get_descriptor_00103
;source-doc/base-drv/protocol.c:38: cmd = cmd_get_device_descriptor;
;source-doc/base-drv/protocol.c:34: result = usb_control_transfer(&cmd, (uint8_t *)buffer, 0, 8);
ld hl,0
add hl, sp
ex de, hl
@ -106,11 +106,11 @@ _usbtrn_get_descriptor:
ld hl,_cmd_get_device_descriptor
ldir
pop bc
;source-doc/base-drv/protocol.c:39: cmd.wLength = 18;
;source-doc/base-drv/protocol.c:35:
ld (ix-2),0x12
xor a
ld (ix-1),a
;source-doc/base-drv/protocol.c:40: result = usb_control_transfer(&cmd, (uint8_t *)buffer, 0, buffer->bMaxPacketSize0);
;source-doc/base-drv/protocol.c:36: CHECK(result);
ld e,(ix+4)
ld d,(ix+5)
ld hl,7
@ -131,12 +131,12 @@ _usbtrn_get_descriptor:
pop af
ld a, l
ld (_result), a
;source-doc/base-drv/protocol.c:42: RETURN_CHECK(result);
;source-doc/base-drv/protocol.c:44: done:
;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);
l_usbtrn_get_descriptor_00103:
;source-doc/base-drv/protocol.c:45: return result;
;source-doc/base-drv/protocol.c:41:
ld hl,(_result)
;source-doc/base-drv/protocol.c:46: }
;source-doc/base-drv/protocol.c:42: RETURN_CHECK(result);
ld sp, ix
pop ix
ret
@ -148,7 +148,7 @@ _cmd_get_device_descriptor:
DEFB +0x00
DEFB +0x00
DEFW +0x0008
;source-doc/base-drv/protocol.c:54: usb_error usbtrn_get_descriptor2(device_descriptor *const buffer, const uint8_t device_address) {
;source-doc/base-drv/protocol.c:46: }
; ---------------------------------
; Function usbtrn_get_descriptor2
; ---------------------------------
@ -159,18 +159,18 @@ _usbtrn_get_descriptor2:
ld hl, -8
add hl, sp
ld sp, hl
;source-doc/base-drv/protocol.c:56: cmd = cmd_get_device_descriptor;
;source-doc/base-drv/protocol.c:48: /**
ld hl,0
add hl, sp
ex de, hl
ld bc,0x0008
ld hl,_cmd_get_device_descriptor
ldir
;source-doc/base-drv/protocol.c:57: cmd.wLength = 8;
;source-doc/base-drv/protocol.c:49: * @brief Issue GET_DESCRIPTOR request to retrieve the device descriptor for usb device at the specified address
ld (ix-2),0x08
xor a
ld (ix-1),a
;source-doc/base-drv/protocol.c:59: result = usb_control_transfer(&cmd, (uint8_t *)buffer, device_address, 8);
;source-doc/base-drv/protocol.c:51: * @param buffer the buffer to store the device descriptor in
ld c,(ix+4)
ld b,(ix+5)
ld e, c
@ -190,11 +190,11 @@ _usbtrn_get_descriptor2:
pop bc
ld a, l
ld (_result), a
;source-doc/base-drv/protocol.c:61: CHECK(result);
;source-doc/base-drv/protocol.c:53: */
ld a,(_result)
or a
jr NZ,l_usbtrn_get_descriptor2_00103
;source-doc/base-drv/protocol.c:63: cmd = cmd_get_device_descriptor;
;source-doc/base-drv/protocol.c:55: setup_packet cmd;
ld hl,0
add hl, sp
ex de, hl
@ -203,11 +203,11 @@ _usbtrn_get_descriptor2:
ld hl,_cmd_get_device_descriptor
ldir
pop bc
;source-doc/base-drv/protocol.c:64: cmd.wLength = 18;
;source-doc/base-drv/protocol.c:56: cmd = cmd_get_device_descriptor;
ld (ix-2),0x12
xor a
ld (ix-1),a
;source-doc/base-drv/protocol.c:65: RETURN_CHECK(usb_control_transfer(&cmd, (uint8_t *)buffer, device_address, buffer->bMaxPacketSize0));
;source-doc/base-drv/protocol.c:57: cmd.wLength = 8;
ld e,(ix+4)
ld d,(ix+5)
ld hl,7
@ -225,15 +225,15 @@ _usbtrn_get_descriptor2:
pop af
ld a, l
ld (_result), a
;source-doc/base-drv/protocol.c:66: done:
;source-doc/base-drv/protocol.c:58:
l_usbtrn_get_descriptor2_00103:
;source-doc/base-drv/protocol.c:67: return result;
;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:68: }
;source-doc/base-drv/protocol.c:60:
ld sp, ix
pop ix
ret
;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:66: done:
; ---------------------------------
; Function usbtrn_set_address
; ---------------------------------
@ -246,7 +246,7 @@ _usbtrn_set_address:
push af
push af
ld c, l
;source-doc/base-drv/protocol.c:80: cmd = cmd_set_device_address;
;source-doc/base-drv/protocol.c:68: }
ld hl,0
add hl, sp
ex de, hl
@ -255,9 +255,9 @@ _usbtrn_set_address:
ld hl,_cmd_set_device_address
ldir
pop bc
;source-doc/base-drv/protocol.c:81: cmd.bValue[0] = device_address;
;source-doc/base-drv/protocol.c:69:
ld (ix-6),c
;source-doc/base-drv/protocol.c:83: return usb_control_transfer(&cmd, 0, 0, 0);
;source-doc/base-drv/protocol.c:71:
xor a
push af
inc sp
@ -270,7 +270,7 @@ _usbtrn_set_address:
add hl, sp
push hl
call _usb_control_transfer
;source-doc/base-drv/protocol.c:84: }
;source-doc/base-drv/protocol.c:72: /**
ld sp,ix
pop ix
ret
@ -282,7 +282,7 @@ _cmd_set_device_address:
DEFB +0x00
DEFB +0x00
DEFW +0x0000
;source-doc/base-drv/protocol.c:94: usb_error usbtrn_set_configuration(const uint8_t device_address, const uint8_t max_packet_size, const uint8_t configuration) {
;source-doc/base-drv/protocol.c:78: usb_error usbtrn_set_address(const uint8_t device_address) __z88dk_fastcall {
; ---------------------------------
; Function usbtrn_set_configuration
; ---------------------------------
@ -293,7 +293,7 @@ _usbtrn_set_configuration:
ld hl, -8
add hl, sp
ld sp, hl
;source-doc/base-drv/protocol.c:96: cmd = cmd_set_configuration;
;source-doc/base-drv/protocol.c:80: cmd = cmd_set_device_address;
ld hl,0
add hl, sp
ld e,l
@ -303,10 +303,10 @@ _usbtrn_set_configuration:
ld hl,_cmd_set_configuration
ldir
pop bc
;source-doc/base-drv/protocol.c:97: cmd.bValue[0] = configuration;
;source-doc/base-drv/protocol.c:81: cmd.bValue[0] = device_address;
ld a,(ix+6)
ld (ix-6),a
;source-doc/base-drv/protocol.c:99: return usb_control_transfer(&cmd, 0, device_address, max_packet_size);
;source-doc/base-drv/protocol.c:83: return usb_control_transfer(&cmd, 0, 0, 0);
ld h,(ix+5)
ld l,(ix+4)
push hl
@ -314,7 +314,7 @@ _usbtrn_set_configuration:
push hl
push bc
call _usb_control_transfer
;source-doc/base-drv/protocol.c:100: }
;source-doc/base-drv/protocol.c:84: }
ld sp,ix
pop ix
ret
@ -326,7 +326,7 @@ _cmd_set_configuration:
DEFB +0x00
DEFB +0x00
DEFW +0x0000
;source-doc/base-drv/protocol.c:114: usb_error usbtrn_get_config_descriptor(config_descriptor *const buffer,
;source-doc/base-drv/protocol.c:90: *
; ---------------------------------
; Function usbtrn_get_config_descriptor
; ---------------------------------
@ -337,7 +337,7 @@ _usbtrn_get_config_descriptor:
ld hl, -8
add hl, sp
ld sp, hl
;source-doc/base-drv/protocol.c:120: cmd = cmd_get_config_descriptor;
;source-doc/base-drv/protocol.c:96: cmd = cmd_set_configuration;
ld hl,0
add hl, sp
ld e,l
@ -347,14 +347,14 @@ _usbtrn_get_config_descriptor:
ld hl,_cmd_get_config_descriptor
ldir
pop bc
;source-doc/base-drv/protocol.c:121: cmd.bValue[0] = config_index;
;source-doc/base-drv/protocol.c:97: cmd.bValue[0] = configuration;
ld a,(ix+6)
ld (ix-6),a
;source-doc/base-drv/protocol.c:122: cmd.wLength = (uint16_t)buffer_size;
;source-doc/base-drv/protocol.c:98:
ld e,(ix+7)
ld (ix-2),e
ld (ix-1),0x00
;source-doc/base-drv/protocol.c:124: return usb_control_transfer(&cmd, (uint8_t *)buffer, device_address, max_packet_size);
;source-doc/base-drv/protocol.c:100: }
ld e,(ix+4)
ld d,(ix+5)
ld h,(ix+9)
@ -363,7 +363,7 @@ _usbtrn_get_config_descriptor:
push de
push bc
call _usb_control_transfer
;source-doc/base-drv/protocol.c:125: }
;source-doc/base-drv/protocol.c:101:
ld sp,ix
pop ix
ret
@ -375,7 +375,7 @@ _cmd_get_config_descriptor:
DEFB +0x00
DEFB +0x00
DEFW +0x0000
;source-doc/base-drv/protocol.c:127: usb_error usbtrn_gfull_cfg_desc(const uint8_t config_index,
;source-doc/base-drv/protocol.c:103:
; ---------------------------------
; Function usbtrn_gfull_cfg_desc
; ---------------------------------
@ -383,7 +383,7 @@ _usbtrn_gfull_cfg_desc:
push ix
ld ix,0
add ix,sp
;source-doc/base-drv/protocol.c:134: max_packet_size));
;source-doc/base-drv/protocol.c:110: * @param device_address the usb address of the device
ld c,(ix+8)
ld b,(ix+9)
push bc
@ -407,20 +407,20 @@ _usbtrn_gfull_cfg_desc:
ld a,(_result)
or a
jr NZ,l_usbtrn_gfull_cfg_desc_00107
;source-doc/base-drv/protocol.c:136: uint8_t max_length = ((config_descriptor *)buffer)->wTotalLength;
;source-doc/base-drv/protocol.c:112: * @return usb_error USB_ERR_OK if all good, otherwise specific error code
ld l, c
ld h, b
inc hl
inc hl
ld d, (hl)
;source-doc/base-drv/protocol.c:137: if (max_length > max_buffer_size)
;source-doc/base-drv/protocol.c:113: */
ld a,(ix+7)
sub d
jr NC,l_usbtrn_gfull_cfg_desc_00104
;source-doc/base-drv/protocol.c:138: max_length = max_buffer_size;
;source-doc/base-drv/protocol.c:114: usb_error usbtrn_get_config_descriptor(config_descriptor *const buffer,
ld d,(ix+7)
l_usbtrn_gfull_cfg_desc_00104:
;source-doc/base-drv/protocol.c:140: CHECK(usbtrn_get_config_descriptor((config_descriptor *)buffer, config_index, max_length, device_address, max_packet_size));
;source-doc/base-drv/protocol.c:116: const uint8_t buffer_size,
ld h,(ix+6)
ld l,(ix+5)
push hl
@ -434,20 +434,20 @@ l_usbtrn_gfull_cfg_desc_00104:
ld a, l
ld (_result), a
ld a,(_result)
;source-doc/base-drv/protocol.c:142: return USB_ERR_OK;
;source-doc/base-drv/protocol.c:118: const uint8_t max_packet_size) {
or a
jr NZ,l_usbtrn_gfull_cfg_desc_00107
ld l,a
jr l_usbtrn_gfull_cfg_desc_00108
;source-doc/base-drv/protocol.c:143: done:
;source-doc/base-drv/protocol.c:119: setup_packet cmd;
l_usbtrn_gfull_cfg_desc_00107:
;source-doc/base-drv/protocol.c:144: return result;
;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:145: }
;source-doc/base-drv/protocol.c:121: cmd.bValue[0] = config_index;
pop ix
ret
;source-doc/base-drv/protocol.c:149: usb_error usbtrn_clear_endpoint_halt(const uint8_t endpoint_number, const uint8_t device_address, const uint8_t max_packet_size) {
;source-doc/base-drv/protocol.c:125: }
; ---------------------------------
; Function usbtrn_clear_endpoint_halt
; ---------------------------------
@ -458,7 +458,7 @@ _usbtrn_clear_endpoint_halt:
ld hl, -8
add hl, sp
ld sp, hl
;source-doc/base-drv/protocol.c:151: cmd = usb_cmd_clear_endpoint_halt;
;source-doc/base-drv/protocol.c:127: usb_error usbtrn_gfull_cfg_desc(const uint8_t config_index,
ld hl,0
add hl, sp
ld e,l
@ -468,10 +468,10 @@ _usbtrn_clear_endpoint_halt:
ld hl,_usb_cmd_clear_endpoint_halt
ldir
pop bc
;source-doc/base-drv/protocol.c:152: cmd.bIndex[0] = endpoint_number;
;source-doc/base-drv/protocol.c:128: const uint8_t device_address,
ld a,(ix+4)
ld (ix-4),a
;source-doc/base-drv/protocol.c:154: return usb_control_transfer(&cmd, (uint8_t *)0, device_address, max_packet_size);
;source-doc/base-drv/protocol.c:130: const uint8_t max_buffer_size,
ld h,(ix+6)
ld l,(ix+5)
push hl
@ -479,7 +479,7 @@ _usbtrn_clear_endpoint_halt:
push hl
push bc
call _usb_control_transfer
;source-doc/base-drv/protocol.c:155: }
;source-doc/base-drv/protocol.c:131: uint8_t *const buffer) {
ld sp,ix
pop ix
ret

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

@ -48,7 +48,7 @@ _USB_MODULE_LEDS .EQU 0xff8a
;--------------------------------------------------------
; code
;--------------------------------------------------------
;source-doc/base-drv/transfers.c:24: usb_error usb_ctrl_trnsfer_ext(const setup_packet *const cmd_packet,
;source-doc/base-drv/transfers.c:23:
; ---------------------------------
; Function usb_ctrl_trnsfer_ext
; ---------------------------------
@ -56,26 +56,26 @@ _usb_ctrl_trnsfer_ext:
push ix
ld ix,0
add ix,sp
;source-doc/base-drv/transfers.c:28: if ((uint16_t)cmd_packet < LOWER_SAFE_RAM_ADDRESS)
;source-doc/base-drv/transfers.c:27: const uint8_t max_packet_size) {
ld a,(ix+5)
sub 0x80
jr NC,l_usb_ctrl_trnsfer_ext_00102
;source-doc/base-drv/transfers.c:29: return USB_BAD_ADDRESS;
;source-doc/base-drv/transfers.c:28: if ((uint16_t)cmd_packet < LOWER_SAFE_RAM_ADDRESS)
ld l,0x82
jr l_usb_ctrl_trnsfer_ext_00106
l_usb_ctrl_trnsfer_ext_00102:
;source-doc/base-drv/transfers.c:31: if (buffer != 0 && (uint16_t)buffer < LOWER_SAFE_RAM_ADDRESS)
;source-doc/base-drv/transfers.c:30:
ld a,(ix+7)
or (ix+6)
jr Z,l_usb_ctrl_trnsfer_ext_00104
ld a,(ix+7)
sub 0x80
jr NC,l_usb_ctrl_trnsfer_ext_00104
;source-doc/base-drv/transfers.c:32: return USB_BAD_ADDRESS;
;source-doc/base-drv/transfers.c:31: if (buffer != 0 && (uint16_t)buffer < LOWER_SAFE_RAM_ADDRESS)
ld l,0x82
jr l_usb_ctrl_trnsfer_ext_00106
l_usb_ctrl_trnsfer_ext_00104:
;source-doc/base-drv/transfers.c:34: return usb_control_transfer(cmd_packet, buffer, device_address, max_packet_size);
;source-doc/base-drv/transfers.c:33:
ld h,(ix+9)
ld l,(ix+8)
push hl
@ -90,10 +90,10 @@ l_usb_ctrl_trnsfer_ext_00104:
pop af
pop af
l_usb_ctrl_trnsfer_ext_00106:
;source-doc/base-drv/transfers.c:35: }
;source-doc/base-drv/transfers.c:34: return usb_control_transfer(cmd_packet, buffer, device_address, max_packet_size);
pop ix
ret
;source-doc/base-drv/transfers.c:47: usb_error usb_control_transfer(const setup_packet *const cmd_packet,
;source-doc/base-drv/transfers.c:38: * @brief Perform a USB control transfer (in or out)
; ---------------------------------
; Function usb_control_transfer
; ---------------------------------
@ -103,7 +103,7 @@ _usb_control_transfer:
add ix,sp
push af
push af
;source-doc/base-drv/transfers.c:52: endpoint_param endpoint = {1, 0, max_packet_size};
;source-doc/base-drv/transfers.c:43: * @param device_address usb device address
ld hl,0
add hl, sp
set 0, (hl)
@ -125,29 +125,29 @@ _usb_control_transfer:
and 0xfc
or e
ld (hl), a
;source-doc/base-drv/transfers.c:54: const uint8_t transferIn = (cmd_packet->bmRequestType & 0x80);
;source-doc/base-drv/transfers.c:45: * @return usb_error USB_ERR_OK if all good, otherwise specific error code
ld c,(ix+4)
ld b,(ix+5)
ld a, (bc)
and 0x80
;source-doc/base-drv/transfers.c:56: if (transferIn && buffer == 0)
;source-doc/base-drv/transfers.c:47: usb_error usb_control_transfer(const setup_packet *const cmd_packet,
ld (ix-1),a
or a
jr Z,l_usb_control_transfer_00102
ld a,(ix+7)
or (ix+6)
jr NZ,l_usb_control_transfer_00102
;source-doc/base-drv/transfers.c:57: return USB_ERR_OTHER;
;source-doc/base-drv/transfers.c:48: void *const buffer,
ld l,0x0f
jp l_usb_control_transfer_00114
l_usb_control_transfer_00102:
;source-doc/base-drv/transfers.c:59: critical_begin();
;source-doc/base-drv/transfers.c:50: const uint8_t max_packet_size) {
push bc
call _critical_begin
ld l,(ix+8)
call _ch_set_usb_address
pop bc
;source-doc/base-drv/transfers.c:63: ch_write_data((const uint8_t *)cmd_packet, sizeof(setup_packet));
;source-doc/base-drv/transfers.c:54: const uint8_t transferIn = (cmd_packet->bmRequestType & 0x80);
ld e,(ix+4)
ld d,(ix+5)
push bc
@ -161,16 +161,16 @@ l_usb_control_transfer_00102:
call _ch_issue_token_setup
call _ch_short_wait_int_and_get_stat
pop bc
;source-doc/base-drv/transfers.c:66: CHECK(result);
;source-doc/base-drv/transfers.c:57: return USB_ERR_OTHER;
ld a, l
or a
jr NZ,l_usb_control_transfer_00113
;source-doc/base-drv/transfers.c:68: const uint16_t length = cmd_packet->wLength;
;source-doc/base-drv/transfers.c:59: critical_begin();
ld hl,6
add hl, bc
ld c, (hl)
inc hl
;source-doc/base-drv/transfers.c:71: ? (transferIn ? ch_data_in_transfer(buffer, length, &endpoint) : ch_data_out_transfer(buffer, length, &endpoint))
;source-doc/base-drv/transfers.c:62:
ld a,(hl)
ld b,a
or c
@ -203,58 +203,58 @@ l_usb_control_transfer_00118:
l_usb_control_transfer_00119:
jr l_usb_control_transfer_00117
l_usb_control_transfer_00116:
;source-doc/base-drv/transfers.c:72: : USB_ERR_OK;
;source-doc/base-drv/transfers.c:63: ch_write_data((const uint8_t *)cmd_packet, sizeof(setup_packet));
ld l,0x00
l_usb_control_transfer_00117:
;source-doc/base-drv/transfers.c:74: CHECK(result)
;source-doc/base-drv/transfers.c:65: result = ch_short_wait_int_and_get_statu();
ld a, l
or a
jr NZ,l_usb_control_transfer_00113
;source-doc/base-drv/transfers.c:76: if (transferIn) {
;source-doc/base-drv/transfers.c:67:
ld a,(ix-1)
or a
jr Z,l_usb_control_transfer_00112
;source-doc/base-drv/transfers.c:77: ch_command(CH_CMD_WR_HOST_DATA);
;source-doc/base-drv/transfers.c:68: const uint16_t length = cmd_packet->wLength;
ld l,0x2c
call _ch_command
;source-doc/base-drv/transfers.c:78: CH376_DATA_PORT = 0;
;source-doc/base-drv/transfers.c:69:
ld a,0x00
ld bc,_CH376_DATA_PORT
out (c),a
;source-doc/base-drv/transfers.c:79: ch_issue_token_out_ep0();
;source-doc/base-drv/transfers.c:70: result = length != 0
call _ch_issue_token_out_ep0
;source-doc/base-drv/transfers.c:80: result = ch_long_wait_int_and_get_status(); /* sometimes we get STALL here - seems to be ok to ignore */
;source-doc/base-drv/transfers.c:71: ? (transferIn ? ch_data_in_transfer(buffer, length, &endpoint) : ch_data_out_transfer(buffer, length, &endpoint))
call _ch_long_wait_int_and_get_statu
;source-doc/base-drv/transfers.c:82: if (result == USB_ERR_OK || result == USB_ERR_STALL) {
;source-doc/base-drv/transfers.c:73:
ld a,l
or a
jr Z,l_usb_control_transfer_00108
sub 0x02
jr NZ,l_usb_control_transfer_00113
l_usb_control_transfer_00108:
;source-doc/base-drv/transfers.c:83: result = USB_ERR_OK;
;source-doc/base-drv/transfers.c:74: CHECK(result)
ld l,0x00
;source-doc/base-drv/transfers.c:84: goto done;
;source-doc/base-drv/transfers.c:75:
jr l_usb_control_transfer_00113
;source-doc/base-drv/transfers.c:87: RETURN_CHECK(result);
;source-doc/base-drv/transfers.c:78: CH376_DATA_PORT = 0;
l_usb_control_transfer_00112:
;source-doc/base-drv/transfers.c:90: ch_issue_token_in_ep0();
;source-doc/base-drv/transfers.c:81:
call _ch_issue_token_in_ep0
;source-doc/base-drv/transfers.c:91: result = ch_long_wait_int_and_get_status();
;source-doc/base-drv/transfers.c:82: if (result == USB_ERR_OK || result == USB_ERR_STALL) {
call _ch_long_wait_int_and_get_statu
;source-doc/base-drv/transfers.c:95: done:
;source-doc/base-drv/transfers.c:86:
l_usb_control_transfer_00113:
;source-doc/base-drv/transfers.c:96: critical_end();
;source-doc/base-drv/transfers.c:87: RETURN_CHECK(result);
push hl
call _critical_end
pop hl
;source-doc/base-drv/transfers.c:97: return result;
;source-doc/base-drv/transfers.c:88: }
l_usb_control_transfer_00114:
;source-doc/base-drv/transfers.c:98: }
;source-doc/base-drv/transfers.c:89:
ld sp, ix
pop ix
ret
;source-doc/base-drv/transfers.c:101: usb_dat_in_trnsfer_ext(uint8_t *buffer, const uint16_t buffer_size, const uint8_t device_address, endpoint_param *const endpoint) {
;source-doc/base-drv/transfers.c:92:
; ---------------------------------
; Function usb_dat_in_trnsfer_ext
; ---------------------------------
@ -262,26 +262,26 @@ _usb_dat_in_trnsfer_ext:
push ix
ld ix,0
add ix,sp
;source-doc/base-drv/transfers.c:102: if (buffer != 0 && (uint16_t)buffer < LOWER_SAFE_RAM_ADDRESS)
;source-doc/base-drv/transfers.c:93: RETURN_CHECK(result);
ld a,(ix+5)
or (ix+4)
jr Z,l_usb_dat_in_trnsfer_ext_00102
ld a,(ix+5)
sub 0x80
jr NC,l_usb_dat_in_trnsfer_ext_00102
;source-doc/base-drv/transfers.c:103: return USB_BAD_ADDRESS;
;source-doc/base-drv/transfers.c:94:
ld l,0x82
jr l_usb_dat_in_trnsfer_ext_00106
l_usb_dat_in_trnsfer_ext_00102:
;source-doc/base-drv/transfers.c:105: if ((uint16_t)endpoint < LOWER_SAFE_RAM_ADDRESS)
;source-doc/base-drv/transfers.c:96: critical_end();
ld a,(ix+10)
sub 0x80
jr NC,l_usb_dat_in_trnsfer_ext_00105
;source-doc/base-drv/transfers.c:106: return USB_BAD_ADDRESS;
;source-doc/base-drv/transfers.c:97: return result;
ld l,0x82
jr l_usb_dat_in_trnsfer_ext_00106
l_usb_dat_in_trnsfer_ext_00105:
;source-doc/base-drv/transfers.c:108: return usb_data_in_transfer(buffer, buffer_size, device_address, endpoint);
;source-doc/base-drv/transfers.c:99:
ld l,(ix+9)
ld h,(ix+10)
push hl
@ -300,10 +300,10 @@ l_usb_dat_in_trnsfer_ext_00105:
pop af
inc sp
l_usb_dat_in_trnsfer_ext_00106:
;source-doc/base-drv/transfers.c:109: }
;source-doc/base-drv/transfers.c:100: usb_error
pop ix
ret
;source-doc/base-drv/transfers.c:112: usb_dat_in_trns_n_ext(uint8_t *buffer, uint16_t *buffer_size, const uint8_t device_address, endpoint_param *const endpoint) {
;source-doc/base-drv/transfers.c:103: return USB_BAD_ADDRESS;
; ---------------------------------
; Function usb_dat_in_trns_n_ext
; ---------------------------------
@ -311,34 +311,34 @@ _usb_dat_in_trns_n_ext:
push ix
ld ix,0
add ix,sp
;source-doc/base-drv/transfers.c:113: if (buffer != 0 && ((uint16_t)buffer & 0xC000) == 0)
;source-doc/base-drv/transfers.c:104:
ld a,(ix+5)
or (ix+4)
jr Z,l_usb_dat_in_trns_n_ext_00102
ld a,(ix+5)
and 0xc0
jr NZ,l_usb_dat_in_trns_n_ext_00102
;source-doc/base-drv/transfers.c:114: return USB_BAD_ADDRESS;
;source-doc/base-drv/transfers.c:105: if ((uint16_t)endpoint < LOWER_SAFE_RAM_ADDRESS)
ld l,0x82
jr l_usb_dat_in_trns_n_ext_00108
l_usb_dat_in_trns_n_ext_00102:
;source-doc/base-drv/transfers.c:116: if (((uint16_t)endpoint & 0xC000) == 0)
;source-doc/base-drv/transfers.c:107:
ld a,(ix+10)
and 0xc0
jr NZ,l_usb_dat_in_trns_n_ext_00105
;source-doc/base-drv/transfers.c:117: return USB_BAD_ADDRESS;
;source-doc/base-drv/transfers.c:108: return usb_data_in_transfer(buffer, buffer_size, device_address, endpoint);
ld l,0x82
jr l_usb_dat_in_trns_n_ext_00108
l_usb_dat_in_trns_n_ext_00105:
;source-doc/base-drv/transfers.c:119: if (((uint16_t)buffer_size & 0xC000) == 0)
;source-doc/base-drv/transfers.c:110:
ld a,(ix+7)
and 0xc0
jr NZ,l_usb_dat_in_trns_n_ext_00107
;source-doc/base-drv/transfers.c:120: return USB_BAD_ADDRESS;
;source-doc/base-drv/transfers.c:111: usb_error
ld l,0x82
jr l_usb_dat_in_trns_n_ext_00108
l_usb_dat_in_trns_n_ext_00107:
;source-doc/base-drv/transfers.c:122: return usb_data_in_transfer_n(buffer, buffer_size, device_address, endpoint);
;source-doc/base-drv/transfers.c:113: if (buffer != 0 && ((uint16_t)buffer & 0xC000) == 0)
ld c,(ix+6)
ld b,(ix+7)
ld l,(ix+9)
@ -357,10 +357,10 @@ l_usb_dat_in_trns_n_ext_00107:
pop af
inc sp
l_usb_dat_in_trns_n_ext_00108:
;source-doc/base-drv/transfers.c:123: }
;source-doc/base-drv/transfers.c:114: return USB_BAD_ADDRESS;
pop ix
ret
;source-doc/base-drv/transfers.c:135: 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:119: if (((uint16_t)buffer_size & 0xC000) == 0)
; ---------------------------------
; Function usb_data_in_transfer
; ---------------------------------
@ -368,12 +368,12 @@ _usb_data_in_transfer:
push ix
ld ix,0
add ix,sp
;source-doc/base-drv/transfers.c:136: critical_begin();
;source-doc/base-drv/transfers.c:120: return USB_BAD_ADDRESS;
call _critical_begin
;source-doc/base-drv/transfers.c:138: ch_set_usb_address(device_address);
;source-doc/base-drv/transfers.c:122: return usb_data_in_transfer_n(buffer, buffer_size, device_address, endpoint);
ld l,(ix+8)
call _ch_set_usb_address
;source-doc/base-drv/transfers.c:140: result = ch_data_in_transfer(buffer, buffer_size, endpoint);
;source-doc/base-drv/transfers.c:124:
ld l,(ix+9)
ld h,(ix+10)
push hl
@ -389,14 +389,14 @@ _usb_data_in_transfer:
pop af
ld a, l
ld (_result), a
;source-doc/base-drv/transfers.c:142: critical_end();
;source-doc/base-drv/transfers.c:126: * @brief Perform a USB data in on the specififed endpoint
call _critical_end
;source-doc/base-drv/transfers.c:144: return result;
;source-doc/base-drv/transfers.c:128: * @param buffer the buffer to receive the data
ld hl,(_result)
;source-doc/base-drv/transfers.c:145: }
;source-doc/base-drv/transfers.c:129: * @param buffer_size the maximum size of data to be received
pop ix
ret
;source-doc/base-drv/transfers.c:157: 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:134: usb_error
; ---------------------------------
; Function usb_data_in_transfer_n
; ---------------------------------
@ -404,12 +404,12 @@ _usb_data_in_transfer_n:
push ix
ld ix,0
add ix,sp
;source-doc/base-drv/transfers.c:158: critical_begin();
;source-doc/base-drv/transfers.c:135: usb_data_in_transfer(uint8_t *buffer, const uint16_t buffer_size, const uint8_t device_address, endpoint_param *const endpoint) {
call _critical_begin
;source-doc/base-drv/transfers.c:160: ch_set_usb_address(device_address);
;source-doc/base-drv/transfers.c:137:
ld l,(ix+8)
call _ch_set_usb_address
;source-doc/base-drv/transfers.c:162: result = ch_data_in_transfer_n(buffer, buffer_size, endpoint);
;source-doc/base-drv/transfers.c:139:
ld l,(ix+9)
ld h,(ix+10)
push hl
@ -425,14 +425,14 @@ _usb_data_in_transfer_n:
pop af
ld a, l
ld (_result), a
;source-doc/base-drv/transfers.c:164: critical_end();
;source-doc/base-drv/transfers.c:141:
call _critical_end
;source-doc/base-drv/transfers.c:166: return result;
;source-doc/base-drv/transfers.c:143:
ld hl,(_result)
;source-doc/base-drv/transfers.c:167: }
;source-doc/base-drv/transfers.c:144: return result;
pop ix
ret
;source-doc/base-drv/transfers.c:179: usb_data_out_transfer(const uint8_t *buffer, uint16_t buffer_size, const uint8_t device_address, endpoint_param *const endpoint) {
;source-doc/base-drv/transfers.c:149: *
; ---------------------------------
; Function usb_data_out_transfer
; ---------------------------------
@ -440,12 +440,12 @@ _usb_data_out_transfer:
push ix
ld ix,0
add ix,sp
;source-doc/base-drv/transfers.c:180: critical_begin();
;source-doc/base-drv/transfers.c:150: * @param buffer the buffer to receive the data - must be 62 bytes
call _critical_begin
;source-doc/base-drv/transfers.c:182: ch_set_usb_address(device_address);
;source-doc/base-drv/transfers.c:152: * @param device_address the usb address of the device
ld l,(ix+8)
call _ch_set_usb_address
;source-doc/base-drv/transfers.c:184: result = ch_data_out_transfer(buffer, buffer_size, endpoint);
;source-doc/base-drv/transfers.c:154: * @return usb_error USB_ERR_OK if all good, otherwise specific error code
ld l,(ix+9)
ld h,(ix+10)
push hl
@ -461,10 +461,10 @@ _usb_data_out_transfer:
pop af
ld a, l
ld (_result), a
;source-doc/base-drv/transfers.c:186: critical_end();
;source-doc/base-drv/transfers.c:156: usb_error
call _critical_end
;source-doc/base-drv/transfers.c:188: return result;
;source-doc/base-drv/transfers.c:158: critical_begin();
ld hl,(_result)
;source-doc/base-drv/transfers.c:189: }
;source-doc/base-drv/transfers.c:159:
pop ix
ret

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

@ -68,14 +68,14 @@ _usb_host_bus_reset:
call _ch_cmd_set_usb_mode
;source-doc/base-drv/usb-init.c:16: delay_20ms();
call _delay_20ms
;source-doc/base-drv/ch376.h:163: ch_command(CH_CMD_WRITE_VAR8);
;source-doc/base-drv/ch376.h:110: #endif
ld l,0x0b
call _ch_command
;source-doc/base-drv/ch376.h:164: CH376_DATA_PORT = CH_VAR_RETRY_TIMES;
;source-doc/base-drv/ch376.h:111:
ld a,0x25
ld bc,_CH376_DATA_PORT
out (c),a
;source-doc/base-drv/ch376.h:165: CH376_DATA_PORT = retry << 6 | (number_of_retries & 0x1F);
;source-doc/base-drv/ch376.h:112: #define calc_max_packet_sizex(packet_size) (packet_size & 0x3FF)
ld a,0xdf
ld bc,_CH376_DATA_PORT
out (c),a

14
Source/HBIOS/ch376-native/keyboard/class_hid_keyboard.c.s

@ -49,39 +49,39 @@ _scancodes_table:
;--------------------------------------------------------
; code
;--------------------------------------------------------
;source-doc/keyboard/class_hid_keyboard.c:335: char scancode_to_char(const uint8_t modifier_keys, const uint8_t code) __sdcccall(1) {
;source-doc/keyboard/class_hid_keyboard.c:333: };
; ---------------------------------
; Function scancode_to_char
; ---------------------------------
_scancode_to_char:
ld c, a
;source-doc/keyboard/class_hid_keyboard.c:336: if (code >= 0x80)
;source-doc/keyboard/class_hid_keyboard.c:334:
ld a,l
ld e,l
sub 0x80
jr C,l_scancode_to_char_00102
;source-doc/keyboard/class_hid_keyboard.c:337: return 0;
;source-doc/keyboard/class_hid_keyboard.c:335: char scancode_to_char(const uint8_t modifier_keys, const uint8_t code) __sdcccall(1) {
xor a
jr l_scancode_to_char_00105
l_scancode_to_char_00102:
;source-doc/keyboard/class_hid_keyboard.c:339: if (modifier_keys & (KEY_MOD_LSHIFT | KEY_MOD_RSHIFT))
;source-doc/keyboard/class_hid_keyboard.c:337: return 0;
ld a, c
and 0x22
jr Z,l_scancode_to_char_00104
;source-doc/keyboard/class_hid_keyboard.c:340: return scancodes_shift_table[code];
;source-doc/keyboard/class_hid_keyboard.c:338:
ld d,0x00
ld hl,_scancodes_shift_table
add hl, de
ld a, (hl)
jr l_scancode_to_char_00105
l_scancode_to_char_00104:
;source-doc/keyboard/class_hid_keyboard.c:342: return scancodes_table[code];
;source-doc/keyboard/class_hid_keyboard.c:340: return scancodes_shift_table[code];
ld d,0x00
ld hl,_scancodes_table
add hl, de
ld a, (hl)
l_scancode_to_char_00105:
;source-doc/keyboard/class_hid_keyboard.c:343: }
;source-doc/keyboard/class_hid_keyboard.c:341:
ret
_scancodes_shift_table:
DEFB +0x00

80
Source/HBIOS/ch376-native/keyboard/kyb-init.c.s

@ -145,7 +145,7 @@ kyb_init_str_2:
DEFB 0x0a
DEFM "USB: KEYBOARD: NOT FOUND$"
DEFB 0x00
;source-doc/keyboard/kyb-init.c:48: void keyboard_buf_put(const uint8_t modifier_keys, const uint8_t key_code) {
;source-doc/keyboard/kyb-init.c:47:
; ---------------------------------
; Function keyboard_buf_put
; ---------------------------------
@ -153,24 +153,24 @@ _keyboard_buf_put:
push ix
ld ix,0
add ix,sp
;source-doc/keyboard/kyb-init.c:49: if (key_code >= 0x80 || key_code == 0)
;source-doc/keyboard/kyb-init.c:48: void keyboard_buf_put(const uint8_t modifier_keys, const uint8_t key_code) {
ld a,(ix+5)
sub 0x80
jr NC,l_keyboard_buf_put_00106
ld a,(ix+5)
or a
;source-doc/keyboard/kyb-init.c:50: return; // ignore ???
;source-doc/keyboard/kyb-init.c:49: if (key_code >= 0x80 || key_code == 0)
jr Z,l_keyboard_buf_put_00106
;source-doc/keyboard/kyb-init.c:52: uint8_t next_write_index = (write_index + 1) & KEYBOARD_BUFFER_SIZE_MASK;
;source-doc/keyboard/kyb-init.c:51:
ld a,(_write_index)
inc a
and 0x07
ld c, a
;source-doc/keyboard/kyb-init.c:53: if (next_write_index != read_index) { // Check if buffer is not full
;source-doc/keyboard/kyb-init.c:52: uint8_t next_write_index = (write_index + 1) & KEYBOARD_BUFFER_SIZE_MASK;
ld a,(_read_index)
sub c
jr Z,l_keyboard_buf_put_00106
;source-doc/keyboard/kyb-init.c:54: buffer[write_index].modifier_keys = modifier_keys;
;source-doc/keyboard/kyb-init.c:53: if (next_write_index != read_index) { // Check if buffer is not full
ld de,_buffer+0
ld hl,(_write_index)
ld h,0x00
@ -178,7 +178,7 @@ _keyboard_buf_put:
add hl, de
ld a,(ix+4)
ld (hl), a
;source-doc/keyboard/kyb-init.c:55: buffer[write_index].key_code = key_code;
;source-doc/keyboard/kyb-init.c:54: buffer[write_index].modifier_keys = modifier_keys;
ld hl,(_write_index)
ld h,0x00
add hl, hl
@ -187,30 +187,30 @@ _keyboard_buf_put:
inc de
ld a,(ix+5)
ld (de), a
;source-doc/keyboard/kyb-init.c:56: write_index = next_write_index;
;source-doc/keyboard/kyb-init.c:55: buffer[write_index].key_code = key_code;
ld hl,_write_index
ld (hl), c
l_keyboard_buf_put_00106:
;source-doc/keyboard/kyb-init.c:58: }
;source-doc/keyboard/kyb-init.c:57: }
pop ix
ret
;source-doc/keyboard/kyb-init.c:60: uint8_t keyboard_buf_size() __sdcccall(1) {
;source-doc/keyboard/kyb-init.c:59:
; ---------------------------------
; Function keyboard_buf_size
; ---------------------------------
_keyboard_buf_size:
;source-doc/keyboard/kyb-init.c:61: if (write_index >= read_index)
;source-doc/keyboard/kyb-init.c:60: uint8_t keyboard_buf_size() __sdcccall(1) {
ld a,(_write_index)
ld hl,_read_index
sub (hl)
jr C,l_keyboard_buf_size_00102
;source-doc/keyboard/kyb-init.c:62: return write_index - read_index;
;source-doc/keyboard/kyb-init.c:61: if (write_index >= read_index)
ld a,(_write_index)
ld hl,_read_index
sub (hl)
jr l_keyboard_buf_size_00103
l_keyboard_buf_size_00102:
;source-doc/keyboard/kyb-init.c:64: return KEYBOARD_BUFFER_SIZE - read_index + write_index;
;source-doc/keyboard/kyb-init.c:63:
ld hl,_read_index
ld c, (hl)
ld a,0x08
@ -219,9 +219,9 @@ l_keyboard_buf_size_00102:
ld c, (hl)
add a, c
l_keyboard_buf_size_00103:
;source-doc/keyboard/kyb-init.c:65: }
;source-doc/keyboard/kyb-init.c:64: return KEYBOARD_BUFFER_SIZE - read_index + write_index;
ret
;source-doc/keyboard/kyb-init.c:67: uint32_t keyboard_buf_get_next() {
;source-doc/keyboard/kyb-init.c:66:
; ---------------------------------
; Function keyboard_buf_get_next
; ---------------------------------
@ -231,41 +231,41 @@ _keyboard_buf_get_next:
add ix,sp
push af
push af
;source-doc/keyboard/kyb-init.c:68: if (write_index == read_index) // Check if buffer is empty
;source-doc/keyboard/kyb-init.c:67: uint32_t keyboard_buf_get_next() {
ld a,(_write_index)
ld hl,_read_index
sub (hl)
jr NZ,l_keyboard_buf_get_next_00102
;source-doc/keyboard/kyb-init.c:69: return 255 << 8;
;source-doc/keyboard/kyb-init.c:68: if (write_index == read_index) // Check if buffer is empty
ld hl,0xff00
ld e, h
ld d, h
jr l_keyboard_buf_get_next_00103
l_keyboard_buf_get_next_00102:
;source-doc/keyboard/kyb-init.c:71: const uint8_t modifier_key = buffer[read_index].modifier_keys;
;source-doc/keyboard/kyb-init.c:70:
ld bc,_buffer+0
ld hl,(_read_index)
ld h,0x00
add hl, hl
add hl, bc
ld b, (hl)
;source-doc/keyboard/kyb-init.c:72: const uint8_t key_code = buffer[read_index].key_code;
;source-doc/keyboard/kyb-init.c:71: const uint8_t modifier_key = buffer[read_index].modifier_keys;
inc hl
ld c, (hl)
;source-doc/keyboard/kyb-init.c:73: read_index = (read_index + 1) & KEYBOARD_BUFFER_SIZE_MASK;
;source-doc/keyboard/kyb-init.c:72: const uint8_t key_code = buffer[read_index].key_code;
ld hl,_read_index
ld a, (hl)
inc a
and 0x07
ld (hl), a
;source-doc/keyboard/kyb-init.c:74: const unsigned char c = scancode_to_char(modifier_key, key_code);
;source-doc/keyboard/kyb-init.c:73: read_index = (read_index + 1) & KEYBOARD_BUFFER_SIZE_MASK;
push bc
ld l, c
ld a, b
call _scancode_to_char
ld e, a
pop bc
;source-doc/keyboard/kyb-init.c:76: return (uint32_t)modifier_key << 24 | (uint32_t)c << 16 | key_code;
;source-doc/keyboard/kyb-init.c:75: /* D = modifier, e-> char, H = 0, L=>code */
xor a
ld (ix-1),b
xor a
@ -282,46 +282,46 @@ l_keyboard_buf_get_next_00102:
pop hl
push hl
l_keyboard_buf_get_next_00103:
;source-doc/keyboard/kyb-init.c:77: }
;source-doc/keyboard/kyb-init.c:76: return (uint32_t)modifier_key << 24 | (uint32_t)c << 16 | key_code;
ld sp, ix
pop ix
ret
;source-doc/keyboard/kyb-init.c:79: void keyboard_buf_flush() {
;source-doc/keyboard/kyb-init.c:78:
; ---------------------------------
; Function keyboard_buf_flush
; ---------------------------------
_keyboard_buf_flush:
;source-doc/keyboard/kyb-init.c:80: write_index = 0;
;source-doc/keyboard/kyb-init.c:79: void keyboard_buf_flush() {
ld hl,_write_index
ld (hl),0x00
;source-doc/keyboard/kyb-init.c:81: read_index = 0;
;source-doc/keyboard/kyb-init.c:80: write_index = 0;
ld hl,_read_index
ld (hl),0x00
;source-doc/keyboard/kyb-init.c:82: }
;source-doc/keyboard/kyb-init.c:81: read_index = 0;
ret
;source-doc/keyboard/kyb-init.c:88: void keyboard_tick(void) {
;source-doc/keyboard/kyb-init.c:87:
; ---------------------------------
; Function keyboard_tick
; ---------------------------------
_keyboard_tick:
;source-doc/keyboard/kyb-init.c:89: if (is_in_critical_section())
;source-doc/keyboard/kyb-init.c:88: void keyboard_tick(void) {
ld hl,_in_critical_usb_section
ld a, (hl)
or a
;source-doc/keyboard/kyb-init.c:90: return;
;source-doc/keyboard/kyb-init.c:89: if (is_in_critical_section())
ret NZ
;././source-doc/base-drv//ch376.h:163: ch_command(CH_CMD_WRITE_VAR8);
;././source-doc/base-drv//ch376.h:110: #endif
ld l,0x0b
call _ch_command
;././source-doc/base-drv//ch376.h:164: CH376_DATA_PORT = CH_VAR_RETRY_TIMES;
;././source-doc/base-drv//ch376.h:111:
ld a,0x25
ld bc,_CH376_DATA_PORT
out (c),a
;././source-doc/base-drv//ch376.h:165: CH376_DATA_PORT = retry << 6 | (number_of_retries & 0x1F);
;././source-doc/base-drv//ch376.h:112: #define calc_max_packet_sizex(packet_size) (packet_size & 0x3FF)
ld a,0x1f
ld bc,_CH376_DATA_PORT
out (c),a
;source-doc/keyboard/kyb-init.c:93: result = usbdev_dat_in_trnsfer_0((device_config *)keyboard_config, (uint8_t *)report, 8);
;source-doc/keyboard/kyb-init.c:92: ch_configure_nak_retry_disable();
ld bc,_report
ld hl, (_keyboard_config)
ld a,0x08
@ -335,23 +335,23 @@ _keyboard_tick:
inc sp
ld a, l
ld (_result), a
;././source-doc/base-drv//ch376.h:163: ch_command(CH_CMD_WRITE_VAR8);
;././source-doc/base-drv//ch376.h:110: #endif
ld l,0x0b
call _ch_command
;././source-doc/base-drv//ch376.h:164: CH376_DATA_PORT = CH_VAR_RETRY_TIMES;
;././source-doc/base-drv//ch376.h:111:
ld a,0x25
ld bc,_CH376_DATA_PORT
out (c),a
;././source-doc/base-drv//ch376.h:165: CH376_DATA_PORT = retry << 6 | (number_of_retries & 0x1F);
;././source-doc/base-drv//ch376.h:112: #define calc_max_packet_sizex(packet_size) (packet_size & 0x3FF)
ld a,0xdf
ld bc,_CH376_DATA_PORT
out (c),a
;source-doc/keyboard/kyb-init.c:95: if (result == 0)
;source-doc/keyboard/kyb-init.c:94: ch_configure_nak_retry_3s();
ld hl,_result
ld a, (hl)
or a
ret NZ
;source-doc/keyboard/kyb-init.c:96: keyboard_buf_put(report.bModifierKeys, report.keyCode[0]);
;source-doc/keyboard/kyb-init.c:95: if (result == 0)
ld a, (_report + 2)
ld hl,_report
ld c, (hl)
@ -359,7 +359,7 @@ _keyboard_tick:
push bc
call _keyboard_buf_put
pop af
;source-doc/keyboard/kyb-init.c:97: }
;source-doc/keyboard/kyb-init.c:96: keyboard_buf_put(report.bModifierKeys, report.keyCode[0]);
ret
_keyboard_config:
DEFW +0x0000

64
Source/HBIOS/ch376-native/ufi-drv/class_ufi.c.s

@ -513,7 +513,7 @@ l_ufi_read_write_sector_00105:
ld sp,ix
pop ix
ret
;source-doc/ufi-drv/class_ufi.c:127: usb_error ufi_format(device_config *const storage_device,
;source-doc/ufi-drv/class_ufi.c:123: * HD | 93h | 1.25 MB | 77 | 2 | 8 | 1232 04D0h | 1024 0400h |
; ---------------------------------
; Function ufi_format
; ---------------------------------
@ -524,7 +524,7 @@ _ufi_format:
ld hl, -26
add hl, sp
ld sp, hl
;source-doc/ufi-drv/class_ufi.c:134: memset(&parameter_list, 0, sizeof(parameter_list));
;source-doc/ufi-drv/class_ufi.c:130: const ufi_format_capacity_descriptor *const format) {
ld hl,2
add hl, sp
push hl
@ -537,7 +537,7 @@ l_ufi_format_00104:
inc hl
djnz l_ufi_format_00104
pop bc
;source-doc/ufi-drv/class_ufi.c:137: cmd = _ufi_cmd_format;
;source-doc/ufi-drv/class_ufi.c:133: ufi_format_parameter_list parameter_list;
ld hl,14
add hl, sp
ex de, hl
@ -546,14 +546,14 @@ l_ufi_format_00104:
ld hl,__ufi_cmd_format
ldir
pop bc
;source-doc/ufi-drv/class_ufi.c:140: cmd.track_number = track_number;
;source-doc/ufi-drv/class_ufi.c:136: ufi_format_command cmd;
ld a,(ix+7)
ld (ix-10),a
;source-doc/ufi-drv/class_ufi.c:141: cmd.interleave[1] = 0;
;source-doc/ufi-drv/class_ufi.c:137: cmd = _ufi_cmd_format;
ld (ix-8),0x00
;source-doc/ufi-drv/class_ufi.c:142: cmd.parameter_list_length[1] = sizeof(parameter_list);
;source-doc/ufi-drv/class_ufi.c:138: // memcpy(&cmd, &_ufi_cmd_format, sizeof(cmd));
ld (ix-4),0x0c
;source-doc/ufi-drv/class_ufi.c:144: parameter_list.defect_list_header.side = side;
;source-doc/ufi-drv/class_ufi.c:140: cmd.track_number = track_number;
ld e, c
ld d, b
inc de
@ -564,36 +564,36 @@ l_ufi_format_00104:
and 0xfe
or l
ld (de), a
;source-doc/ufi-drv/class_ufi.c:145: parameter_list.defect_list_header.immediate = 0;
;source-doc/ufi-drv/class_ufi.c:141: cmd.interleave[1] = 0;
ld l, e
ld h, d
res 1, (hl)
;source-doc/ufi-drv/class_ufi.c:146: parameter_list.defect_list_header.reserved2 = 0;
;source-doc/ufi-drv/class_ufi.c:142: cmd.parameter_list_length[1] = sizeof(parameter_list);
ld l, e
ld h, d
ld a, (hl)
and 0xf3
ld (hl), a
;source-doc/ufi-drv/class_ufi.c:147: parameter_list.defect_list_header.single_track = 1;
;source-doc/ufi-drv/class_ufi.c:143:
ld l, e
ld h, d
set 4, (hl)
;source-doc/ufi-drv/class_ufi.c:148: parameter_list.defect_list_header.dcrt = 1;
;source-doc/ufi-drv/class_ufi.c:144: parameter_list.defect_list_header.side = side;
ld l, e
ld h, d
set 5, (hl)
;source-doc/ufi-drv/class_ufi.c:149: parameter_list.defect_list_header.extend = 0;
;source-doc/ufi-drv/class_ufi.c:145: parameter_list.defect_list_header.immediate = 0;
ld l, e
ld h, d
res 6, (hl)
;source-doc/ufi-drv/class_ufi.c:150: parameter_list.defect_list_header.fov = 1;
;source-doc/ufi-drv/class_ufi.c:146: parameter_list.defect_list_header.reserved2 = 0;
ex de, hl
set 7, (hl)
;source-doc/ufi-drv/class_ufi.c:151: parameter_list.defect_list_header.defect_list_length_msb = 0;
;source-doc/ufi-drv/class_ufi.c:147: parameter_list.defect_list_header.single_track = 1;
ld (ix-22),0x00
;source-doc/ufi-drv/class_ufi.c:152: parameter_list.defect_list_header.defect_list_length_lsb = 8;
;source-doc/ufi-drv/class_ufi.c:148: parameter_list.defect_list_header.dcrt = 1;
ld (ix-21),0x08
;source-doc/ufi-drv/class_ufi.c:153: memcpy(&parameter_list.format_descriptor, (void *)format, sizeof(ufi_format_capacity_descriptor));
;source-doc/ufi-drv/class_ufi.c:149: parameter_list.defect_list_header.extend = 0;
ld e,(ix+8)
ld d,(ix+9)
push bc
@ -603,7 +603,7 @@ l_ufi_format_00104:
ld bc,0x0008
ldir
pop bc
;source-doc/ufi-drv/class_ufi.c:155: usb_error result = usb_execute_cbi(storage_device, (uint8_t *)&cmd, true, sizeof(parameter_list), (uint8_t *)&parameter_list,
;source-doc/ufi-drv/class_ufi.c:151: parameter_list.defect_list_header.defect_list_length_msb = 0;
ld hl,0
add hl, sp
push hl
@ -620,12 +620,12 @@ l_ufi_format_00104:
ld h,(ix+5)
push hl
call _usb_execute_cbi
;source-doc/ufi-drv/class_ufi.c:162: return result;
;source-doc/ufi-drv/class_ufi.c:163: }
;source-doc/ufi-drv/class_ufi.c:158: // trace_printf("ufi_format: %d, %02X %02X (len: %d)\r\n", result, sense_codes.bASC, sense_codes.bASCQ, sizeof(parameter_list));
;source-doc/ufi-drv/class_ufi.c:159:
ld sp,ix
pop ix
ret
;source-doc/ufi-drv/class_ufi.c:165: usb_error ufi_send_diagnostics(device_config *const storage_device) {
;source-doc/ufi-drv/class_ufi.c:161: done:
; ---------------------------------
; Function ufi_send_diagnostics
; ---------------------------------
@ -636,7 +636,7 @@ _ufi_send_diagnostics:
ld hl, -12
add hl, sp
ld sp, hl
;source-doc/ufi-drv/class_ufi.c:168: ufi_cmd_send_diagnostic = _ufi_cmd_send_diagnostic;
;source-doc/ufi-drv/class_ufi.c:164:
ld hl,0
add hl, sp
ld e,l
@ -646,7 +646,7 @@ _ufi_send_diagnostics:
ld hl,__ufi_cmd_send_diagnostic
ldir
pop bc
;source-doc/ufi-drv/class_ufi.c:170: return usb_execute_cbi(storage_device, (uint8_t *)&ufi_cmd_send_diagnostic, true, 0, NULL, NULL);
;source-doc/ufi-drv/class_ufi.c:166: ufi_send_diagnostic_command ufi_cmd_send_diagnostic;
ld hl,0x0000
push hl
push hl
@ -659,11 +659,11 @@ _ufi_send_diagnostics:
ld h,(ix+5)
push hl
call _usb_execute_cbi
;source-doc/ufi-drv/class_ufi.c:171: }
;source-doc/ufi-drv/class_ufi.c:167:
ld sp,ix
pop ix
ret
;source-doc/ufi-drv/class_ufi.c:173: uint32_t convert_from_msb_first(const uint8_t *const buffer) {
;source-doc/ufi-drv/class_ufi.c:169:
; ---------------------------------
; Function convert_from_msb_first
; ---------------------------------
@ -673,40 +673,40 @@ _convert_from_msb_first:
add ix,sp
push af
push af
;source-doc/ufi-drv/class_ufi.c:175: uint8_t *p_output = ((uint8_t *)&result);
;source-doc/ufi-drv/class_ufi.c:171: }
ld hl,0
add hl, sp
ex de, hl
;source-doc/ufi-drv/class_ufi.c:176: const uint8_t *p_input = buffer + 3;
;source-doc/ufi-drv/class_ufi.c:172:
ld c,(ix+4)
ld b,(ix+5)
inc bc
inc bc
inc bc
;source-doc/ufi-drv/class_ufi.c:178: *p_output++ = *p_input--;
;source-doc/ufi-drv/class_ufi.c:174: uint32_t result;
ld a, (bc)
dec bc
ld (de), a
inc de
;source-doc/ufi-drv/class_ufi.c:179: *p_output++ = *p_input--;
;source-doc/ufi-drv/class_ufi.c:175: uint8_t *p_output = ((uint8_t *)&result);
ld a, (bc)
dec bc
ld (de), a
inc de
;source-doc/ufi-drv/class_ufi.c:180: *p_output++ = *p_input--;
;source-doc/ufi-drv/class_ufi.c:176: const uint8_t *p_input = buffer + 3;
ld a, (bc)
ld (de), a
inc de
;source-doc/ufi-drv/class_ufi.c:181: *p_output = *p_input--;
;source-doc/ufi-drv/class_ufi.c:177:
dec bc
ld a, (bc)
ld (de), a
;source-doc/ufi-drv/class_ufi.c:183: return result;
;source-doc/ufi-drv/class_ufi.c:179: *p_output++ = *p_input--;
pop hl
push hl
ld e,(ix-2)
ld d,(ix-1)
;source-doc/ufi-drv/class_ufi.c:184: }
;source-doc/ufi-drv/class_ufi.c:180: *p_output++ = *p_input--;
ld sp, ix
pop ix
ret

4
Source/HBIOS/ch376kyb.asm

@ -3,6 +3,7 @@
; CH376 NATIVE USB KEYBOARD DRIVER
;==================================================================================================
;
; This driver is designed to work within the TMS video driver for a CRT solution.
#DEFINE DEFM .DB
#DEFINE DEFB .DB
@ -61,8 +62,6 @@ CHUKB_TICK:
; we gonna need a bigger stack
EZ80_UTIL_DEBUG
LD (UKY_INT_SP),SP ; SAVE ORIGINAL STACK FRAME
LD SP,UKY_INTSTK ; USE DEDICATED INT STACK FRAME IN HI MEM
@ -155,6 +154,5 @@ UKY_READ:
JR NZ, UKY_READ
LD C, 0
LD D, 0
; LD E, 'A'
XOR A
RET

Loading…
Cancel
Save