Browse Source

ch376-native: removed some intermediate files that should not have beeen committed

pull/592/head
Dean Netherton 1 year ago
parent
commit
a92bd780c8
  1. 21
      Source/HBIOS/ch376-native/Makefile
  2. 1
      Source/HBIOS/ch376-native/base-drv/.gitignore
  3. 1136
      Source/HBIOS/ch376-native/base-drv/ch376.c.asm
  4. 458
      Source/HBIOS/ch376-native/base-drv/class_hub.c.asm
  5. 834
      Source/HBIOS/ch376-native/base-drv/dev_transfers.c.asm
  6. 1472
      Source/HBIOS/ch376-native/base-drv/enumerate.c.asm
  7. 829
      Source/HBIOS/ch376-native/base-drv/transfers.c.asm
  8. 441
      Source/HBIOS/ch376-native/base-drv/usb-base-drv.c.asm
  9. 605
      Source/HBIOS/ch376-native/base-drv/usb_state.c.asm
  10. 520
      Source/HBIOS/ch376-native/base-drv/work-area.c.asm
  11. 69
      Source/HBIOS/ch376-native/cruntime.asm
  12. 1
      Source/HBIOS/ch376-native/keyboard/.gitignore
  13. 1
      Source/HBIOS/ch376-native/scsi-drv/.gitignore
  14. 1
      Source/HBIOS/ch376-native/ufi-drv/.gitignore
  15. 599
      Source/HBIOS/ch376-native/ufi-drv/usb_cbi.c.asm

21
Source/HBIOS/ch376-native/Makefile

@ -8,7 +8,7 @@ ZCCRELFLAGS := -SO3 --max-allocs-per-node600000 --allow-unsafe-read --opt-code-s
SRC := ./source-doc/ SRC := ./source-doc/
LIBS := -I./$(SRC)base-drv/ LIBS := -I./$(SRC)base-drv/
ZCCFLAGS := +z80 -vn -startup=0 -clib=sdcc_iy -crt0 $(SRC)crt.asm -compiler=sdcc -Cs--std=c23 -Cs--Werror $(ZCCRELFLAGS) $(LIBS)
ZCCFLAGS := +z80 -vn -startup=0 -clib=sdcc_iy -compiler=sdcc -Cs--std=c23 -Cs--Werror $(ZCCRELFLAGS) $(LIBS)
ZCC_PATH := $(shell command -v zcc) ZCC_PATH := $(shell command -v zcc)
ZCC := $(shell command -v zcc >/dev/null 2>&1 && echo zcc || echo 'docker run -w /host/${PWD} -v /:/host/ -u $(shell id -u ${USER}):$(shell id -g ${USER}) -t z88dk/z88dk zcc') ZCC := $(shell command -v zcc >/dev/null 2>&1 && echo zcc || echo 'docker run -w /host/${PWD} -v /:/host/ -u $(shell id -u ${USER}):$(shell id -g ${USER}) -t z88dk/z88dk zcc')
@ -24,10 +24,14 @@ ASSDIR := ./
all: $(ASSDIR)base-drv.s $(ASSDIR)scsi-drv.s $(ASSDIR)ufi-drv.s $(ASSDIR)keyboard.s all: $(ASSDIR)base-drv.s $(ASSDIR)scsi-drv.s $(ASSDIR)ufi-drv.s $(ASSDIR)keyboard.s
clean: clean:
@rm -rf base-drv
rm -rf scsi-drv
rm -rf ufi-drv
rm -rf keyboard
@rm -rf base-drv/*.s
rm -rf base-drv/*.asm
rm -rf scsi-drv/*.s
rm -rf scsi-drv/*.asm
rm -rf ufi-drv/*.s
rm -rf ufi-drv/*.asm
rm -rf keyboard/*.s
rm -rf keyboard/*.asm
rm ufi-drv.s rm ufi-drv.s
rm scsi-drv.s rm scsi-drv.s
rm base-drv.s rm base-drv.s
@ -38,19 +42,12 @@ $(ASSDIR)%.c.s: $(ASSDIR)%.c.asm
echo "Converting $< to $@" echo "Converting $< to $@"
${SRC}convert-for-uz80as.sh $< $@ ${SRC}convert-for-uz80as.sh $< $@
$(ASSDIR)%.s: $(SRC)%.asm
@mkdir -p $(dir $@)
cp $< $@
sed -i "1i\;\r\n; Generated from $< -- not to be modify directly\r\n;\r\n; " $@
define compile define compile
@mkdir -p $(dir $@) @mkdir -p $(dir $@)
$(ZCC) $(ZCCFLAGS) --c-code-in-asm --assemble-only $< -o $@ $(ZCC) $(ZCCFLAGS) --c-code-in-asm --assemble-only $< -o $@
echo "Compiled $(notdir $@) from $(notdir $<)" echo "Compiled $(notdir $@) from $(notdir $<)"
endef endef
ZSDCPP_FLAGS= -I"${ZCCCFG}../../include/_DEVELOPMENT/sdcc" $(LIBS)
define build_subsystem = define build_subsystem =
$$(ASSDIR)$(1).s: $$(ASSDIR)$(1).s:
@echo "Creating $(1).s" @echo "Creating $(1).s"

1
Source/HBIOS/ch376-native/base-drv/.gitignore

@ -0,0 +1 @@
*.asm

1136
Source/HBIOS/ch376-native/base-drv/ch376.c.asm

File diff suppressed because it is too large

458
Source/HBIOS/ch376-native/base-drv/class_hub.c.asm

@ -1,458 +0,0 @@
;--------------------------------------------------------
; File Created by SDCC : free open source ISO C Compiler
; Version 4.4.0 #14648 (Linux)
;--------------------------------------------------------
; Processed by Z88DK
;--------------------------------------------------------
EXTERN __divschar
EXTERN __divschar_callee
EXTERN __divsint
EXTERN __divsint_callee
EXTERN __divslong
EXTERN __divslong_callee
EXTERN __divslonglong
EXTERN __divslonglong_callee
EXTERN __divsuchar
EXTERN __divsuchar_callee
EXTERN __divuchar
EXTERN __divuchar_callee
EXTERN __divuint
EXTERN __divuint_callee
EXTERN __divulong
EXTERN __divulong_callee
EXTERN __divulonglong
EXTERN __divulonglong_callee
EXTERN __divuschar
EXTERN __divuschar_callee
EXTERN __modschar
EXTERN __modschar_callee
EXTERN __modsint
EXTERN __modsint_callee
EXTERN __modslong
EXTERN __modslong_callee
EXTERN __modslonglong
EXTERN __modslonglong_callee
EXTERN __modsuchar
EXTERN __modsuchar_callee
EXTERN __moduchar
EXTERN __moduchar_callee
EXTERN __moduint
EXTERN __moduint_callee
EXTERN __modulong
EXTERN __modulong_callee
EXTERN __modulonglong
EXTERN __modulonglong_callee
EXTERN __moduschar
EXTERN __moduschar_callee
EXTERN __mulint
EXTERN __mulint_callee
EXTERN __mullong
EXTERN __mullong_callee
EXTERN __mullonglong
EXTERN __mullonglong_callee
EXTERN __mulschar
EXTERN __mulschar_callee
EXTERN __mulsuchar
EXTERN __mulsuchar_callee
EXTERN __muluchar
EXTERN __muluchar_callee
EXTERN __muluschar
EXTERN __muluschar_callee
EXTERN __rlslonglong
EXTERN __rlslonglong_callee
EXTERN __rlulonglong
EXTERN __rlulonglong_callee
EXTERN __rrslonglong
EXTERN __rrslonglong_callee
EXTERN __rrulonglong
EXTERN __rrulonglong_callee
EXTERN ___mulsint2slong
EXTERN ___mulsint2slong_callee
EXTERN ___muluint2ulong
EXTERN ___muluint2ulong_callee
EXTERN ___sdcc_call_hl
EXTERN ___sdcc_call_iy
EXTERN ___sdcc_enter_ix
EXTERN banked_call
EXTERN _banked_ret
EXTERN ___fs2schar
EXTERN ___fs2schar_callee
EXTERN ___fs2sint
EXTERN ___fs2sint_callee
EXTERN ___fs2slong
EXTERN ___fs2slong_callee
EXTERN ___fs2slonglong
EXTERN ___fs2slonglong_callee
EXTERN ___fs2uchar
EXTERN ___fs2uchar_callee
EXTERN ___fs2uint
EXTERN ___fs2uint_callee
EXTERN ___fs2ulong
EXTERN ___fs2ulong_callee
EXTERN ___fs2ulonglong
EXTERN ___fs2ulonglong_callee
EXTERN ___fsadd
EXTERN ___fsadd_callee
EXTERN ___fsdiv
EXTERN ___fsdiv_callee
EXTERN ___fseq
EXTERN ___fseq_callee
EXTERN ___fsgt
EXTERN ___fsgt_callee
EXTERN ___fslt
EXTERN ___fslt_callee
EXTERN ___fsmul
EXTERN ___fsmul_callee
EXTERN ___fsneq
EXTERN ___fsneq_callee
EXTERN ___fssub
EXTERN ___fssub_callee
EXTERN ___schar2fs
EXTERN ___schar2fs_callee
EXTERN ___sint2fs
EXTERN ___sint2fs_callee
EXTERN ___slong2fs
EXTERN ___slong2fs_callee
EXTERN ___slonglong2fs
EXTERN ___slonglong2fs_callee
EXTERN ___uchar2fs
EXTERN ___uchar2fs_callee
EXTERN ___uint2fs
EXTERN ___uint2fs_callee
EXTERN ___ulong2fs
EXTERN ___ulong2fs_callee
EXTERN ___ulonglong2fs
EXTERN ___ulonglong2fs_callee
EXTERN ____sdcc_2_copy_src_mhl_dst_deix
EXTERN ____sdcc_2_copy_src_mhl_dst_bcix
EXTERN ____sdcc_4_copy_src_mhl_dst_deix
EXTERN ____sdcc_4_copy_src_mhl_dst_bcix
EXTERN ____sdcc_4_copy_src_mhl_dst_mbc
EXTERN ____sdcc_4_ldi_nosave_bc
EXTERN ____sdcc_4_ldi_save_bc
EXTERN ____sdcc_4_push_hlix
EXTERN ____sdcc_4_push_mhl
EXTERN ____sdcc_lib_setmem_hl
EXTERN ____sdcc_ll_add_de_bc_hl
EXTERN ____sdcc_ll_add_de_bc_hlix
EXTERN ____sdcc_ll_add_de_hlix_bc
EXTERN ____sdcc_ll_add_de_hlix_bcix
EXTERN ____sdcc_ll_add_deix_bc_hl
EXTERN ____sdcc_ll_add_deix_hlix
EXTERN ____sdcc_ll_add_hlix_bc_deix
EXTERN ____sdcc_ll_add_hlix_deix_bc
EXTERN ____sdcc_ll_add_hlix_deix_bcix
EXTERN ____sdcc_ll_asr_hlix_a
EXTERN ____sdcc_ll_asr_mbc_a
EXTERN ____sdcc_ll_copy_src_de_dst_hlix
EXTERN ____sdcc_ll_copy_src_de_dst_hlsp
EXTERN ____sdcc_ll_copy_src_deix_dst_hl
EXTERN ____sdcc_ll_copy_src_deix_dst_hlix
EXTERN ____sdcc_ll_copy_src_deixm_dst_hlsp
EXTERN ____sdcc_ll_copy_src_desp_dst_hlsp
EXTERN ____sdcc_ll_copy_src_hl_dst_de
EXTERN ____sdcc_ll_copy_src_hlsp_dst_de
EXTERN ____sdcc_ll_copy_src_hlsp_dst_deixm
EXTERN ____sdcc_ll_lsl_hlix_a
EXTERN ____sdcc_ll_lsl_mbc_a
EXTERN ____sdcc_ll_lsr_hlix_a
EXTERN ____sdcc_ll_lsr_mbc_a
EXTERN ____sdcc_ll_push_hlix
EXTERN ____sdcc_ll_push_mhl
EXTERN ____sdcc_ll_sub_de_bc_hl
EXTERN ____sdcc_ll_sub_de_bc_hlix
EXTERN ____sdcc_ll_sub_de_hlix_bc
EXTERN ____sdcc_ll_sub_de_hlix_bcix
EXTERN ____sdcc_ll_sub_deix_bc_hl
EXTERN ____sdcc_ll_sub_deix_hlix
EXTERN ____sdcc_ll_sub_hlix_bc_deix
EXTERN ____sdcc_ll_sub_hlix_deix_bc
EXTERN ____sdcc_ll_sub_hlix_deix_bcix
EXTERN ____sdcc_load_debc_deix
EXTERN ____sdcc_load_dehl_deix
EXTERN ____sdcc_load_debc_mhl
EXTERN ____sdcc_load_hlde_mhl
EXTERN ____sdcc_store_dehl_bcix
EXTERN ____sdcc_store_debc_hlix
EXTERN ____sdcc_store_debc_mhl
EXTERN ____sdcc_cpu_pop_ei
EXTERN ____sdcc_cpu_pop_ei_jp
EXTERN ____sdcc_cpu_push_di
EXTERN ____sdcc_outi
EXTERN ____sdcc_outi_128
EXTERN ____sdcc_outi_256
EXTERN ____sdcc_ldi
EXTERN ____sdcc_ldi_128
EXTERN ____sdcc_ldi_256
EXTERN ____sdcc_4_copy_srcd_hlix_dst_deix
EXTERN ____sdcc_4_and_src_mbc_mhl_dst_deix
EXTERN ____sdcc_4_or_src_mbc_mhl_dst_deix
EXTERN ____sdcc_4_xor_src_mbc_mhl_dst_deix
EXTERN ____sdcc_4_or_src_dehl_dst_bcix
EXTERN ____sdcc_4_xor_src_dehl_dst_bcix
EXTERN ____sdcc_4_and_src_dehl_dst_bcix
EXTERN ____sdcc_4_xor_src_mbc_mhl_dst_debc
EXTERN ____sdcc_4_or_src_mbc_mhl_dst_debc
EXTERN ____sdcc_4_and_src_mbc_mhl_dst_debc
EXTERN ____sdcc_4_cpl_src_mhl_dst_debc
EXTERN ____sdcc_4_xor_src_debc_mhl_dst_debc
EXTERN ____sdcc_4_or_src_debc_mhl_dst_debc
EXTERN ____sdcc_4_and_src_debc_mhl_dst_debc
EXTERN ____sdcc_4_and_src_debc_hlix_dst_debc
EXTERN ____sdcc_4_or_src_debc_hlix_dst_debc
EXTERN ____sdcc_4_xor_src_debc_hlix_dst_debc
;--------------------------------------------------------
; Public variables in this module
;--------------------------------------------------------
GLOBAL _cmd_get_hub_descriptor
GLOBAL _hub_get_descriptor
;--------------------------------------------------------
; Externals used
;--------------------------------------------------------
GLOBAL _get_usb_device_config
GLOBAL _find_device_config
GLOBAL _next_device_config
GLOBAL _first_device_config
GLOBAL _find_first_free
GLOBAL _usbtrn_clear_endpoint_halt
GLOBAL _usbtrn_set_address
GLOBAL _usbtrn_set_configuration
GLOBAL _usbtrn_gfull_cfg_desc
GLOBAL _usbtrn_get_config_descriptor
GLOBAL _usbtrn_get_descriptor2
GLOBAL _usbtrn_get_descriptor
GLOBAL _usbdev_dat_in_trnsfer_0
GLOBAL _usbdev_dat_in_trnsfer
GLOBAL _usbdev_bulk_in_transfer
GLOBAL _usbdev_blk_out_trnsfer
GLOBAL _usbdev_control_transfer
GLOBAL _usb_data_out_transfer
GLOBAL _usb_data_in_transfer_n
GLOBAL _usb_data_in_transfer
GLOBAL _usb_control_transfer
GLOBAL _ch_issue_token_in_ep0
GLOBAL _ch_issue_token_out_ep0
GLOBAL _ch_issue_token_setup
GLOBAL _ch_data_out_transfer
GLOBAL _ch_data_in_transfer_n
GLOBAL _ch_data_in_transfer
GLOBAL _ch_control_transfer_set_config
GLOBAL _ch_control_transfer_set_address
GLOBAL _ch_control_transfer_request_descriptor
GLOBAL _ch_set_usb_address
GLOBAL _ch_write_data
GLOBAL _ch_cmd_get_ic_version
GLOBAL _ch_cmd_set_usb_mode
GLOBAL _ch_probe
GLOBAL _ch_cmd_reset_all
GLOBAL _ch_read_data
GLOBAL _ch_very_short_wait_int_and_get_status
GLOBAL _ch_short_wait_int_and_get_status
GLOBAL _ch_long_wait_int_and_get_status
GLOBAL _ch_get_status
GLOBAL _ch_command
GLOBAL _delay_medium
GLOBAL _delay_short
GLOBAL _delay_20ms
GLOBAL _printf
GLOBAL _delay
GLOBAL _ulltoa_callee
GLOBAL _ulltoa
GLOBAL _strtoull_callee
GLOBAL _strtoull
GLOBAL _strtoll_callee
GLOBAL _strtoll
GLOBAL _lltoa_callee
GLOBAL _lltoa
GLOBAL _llabs_callee
GLOBAL _llabs
GLOBAL __lldivu__callee
GLOBAL __lldivu_
GLOBAL __lldiv__callee
GLOBAL __lldiv_
GLOBAL _atoll_callee
GLOBAL _atoll
GLOBAL _realloc_unlocked_callee
GLOBAL _realloc_unlocked
GLOBAL _malloc_unlocked_fastcall
GLOBAL _malloc_unlocked
GLOBAL _free_unlocked_fastcall
GLOBAL _free_unlocked
GLOBAL _calloc_unlocked_callee
GLOBAL _calloc_unlocked
GLOBAL _aligned_alloc_unlocked_callee
GLOBAL _aligned_alloc_unlocked
GLOBAL _realloc_callee
GLOBAL _realloc
GLOBAL _malloc_fastcall
GLOBAL _malloc
GLOBAL _free_fastcall
GLOBAL _free
GLOBAL _calloc_callee
GLOBAL _calloc
GLOBAL _aligned_alloc_callee
GLOBAL _aligned_alloc
GLOBAL _utoa_callee
GLOBAL _utoa
GLOBAL _ultoa_callee
GLOBAL _ultoa
GLOBAL _system_fastcall
GLOBAL _system
GLOBAL _strtoul_callee
GLOBAL _strtoul
GLOBAL _strtol_callee
GLOBAL _strtol
GLOBAL _strtof_callee
GLOBAL _strtof
GLOBAL _strtod_callee
GLOBAL _strtod
GLOBAL _srand_fastcall
GLOBAL _srand
GLOBAL _rand
GLOBAL _quick_exit_fastcall
GLOBAL _quick_exit
GLOBAL _qsort_callee
GLOBAL _qsort
GLOBAL _ltoa_callee
GLOBAL _ltoa
GLOBAL _labs_fastcall
GLOBAL _labs
GLOBAL _itoa_callee
GLOBAL _itoa
GLOBAL _ftoh_callee
GLOBAL _ftoh
GLOBAL _ftog_callee
GLOBAL _ftog
GLOBAL _ftoe_callee
GLOBAL _ftoe
GLOBAL _ftoa_callee
GLOBAL _ftoa
GLOBAL _exit_fastcall
GLOBAL _exit
GLOBAL _dtoh_callee
GLOBAL _dtoh
GLOBAL _dtog_callee
GLOBAL _dtog
GLOBAL _dtoe_callee
GLOBAL _dtoe
GLOBAL _dtoa_callee
GLOBAL _dtoa
GLOBAL _bsearch_callee
GLOBAL _bsearch
GLOBAL _atol_fastcall
GLOBAL _atol
GLOBAL _atoi_fastcall
GLOBAL _atoi
GLOBAL _atof_fastcall
GLOBAL _atof
GLOBAL _atexit_fastcall
GLOBAL _atexit
GLOBAL _at_quick_exit_fastcall
GLOBAL _at_quick_exit
GLOBAL _abs_fastcall
GLOBAL _abs
GLOBAL _abort
GLOBAL __strtou__callee
GLOBAL __strtou_
GLOBAL __strtoi__callee
GLOBAL __strtoi_
GLOBAL __random_uniform_xor_8__fastcall
GLOBAL __random_uniform_xor_8_
GLOBAL __random_uniform_xor_32__fastcall
GLOBAL __random_uniform_xor_32_
GLOBAL __random_uniform_cmwc_8__fastcall
GLOBAL __random_uniform_cmwc_8_
GLOBAL __shellsort__callee
GLOBAL __shellsort_
GLOBAL __quicksort__callee
GLOBAL __quicksort_
GLOBAL __insertion_sort__callee
GLOBAL __insertion_sort_
GLOBAL __ldivu__callee
GLOBAL __ldivu_
GLOBAL __ldiv__callee
GLOBAL __ldiv_
GLOBAL __divu__callee
GLOBAL __divu_
GLOBAL __div__callee
GLOBAL __div_
GLOBAL _result
;--------------------------------------------------------
; special function registers
;--------------------------------------------------------
defc _CH376_DATA_PORT = 0xff88
defc _CH376_COMMAND_PORT = 0xff89
defc _USB_MODULE_LEDS = 0xff8a
;--------------------------------------------------------
; ram data
;--------------------------------------------------------
SECTION bss_compiler
;--------------------------------------------------------
; ram data
;--------------------------------------------------------
IF 0
; .area _INITIALIZED removed by z88dk
ENDIF
;--------------------------------------------------------
; absolute external ram data
;--------------------------------------------------------
SECTION IGNORE
;--------------------------------------------------------
; global & static initialisations
;--------------------------------------------------------
SECTION code_crt_init
;--------------------------------------------------------
; Home
;--------------------------------------------------------
SECTION IGNORE
;--------------------------------------------------------
; code
;--------------------------------------------------------
SECTION code_compiler
;source-doc/base-drv/class_hub.c:7: usb_error hub_get_descriptor(const device_config_hub *const hub_config, hub_descriptor *const hub_description) __sdcccall(1) {
; ---------------------------------
; Function hub_get_descriptor
; ---------------------------------
_hub_get_descriptor:
;source-doc/base-drv/class_hub.c:8: return usb_control_transfer(&cmd_get_hub_descriptor, hub_description, hub_config->address, hub_config->max_packet_size);
ld a,l
ld c,h
inc hl
ld b, (hl)
ld l, a
ld h, c
ld a, (hl)
rlca
rlca
rlca
rlca
and a,0x0f
ld c, a
push bc
push de
ld hl,_cmd_get_hub_descriptor
push hl
call _usb_control_transfer
pop af
pop af
pop af
ld a, l
;source-doc/base-drv/class_hub.c:9: }
ret
SECTION rodata_compiler
_cmd_get_hub_descriptor:
DEFB +0xa0
DEFB +0x06
DEFB +0x00
DEFB +0x29
DEFB +0x00
DEFB +0x00
DEFW +0x0008
SECTION IGNORE

834
Source/HBIOS/ch376-native/base-drv/dev_transfers.c.asm

@ -1,834 +0,0 @@
;--------------------------------------------------------
; File Created by SDCC : free open source ISO C Compiler
; Version 4.4.0 #14648 (Linux)
;--------------------------------------------------------
; Processed by Z88DK
;--------------------------------------------------------
EXTERN __divschar
EXTERN __divschar_callee
EXTERN __divsint
EXTERN __divsint_callee
EXTERN __divslong
EXTERN __divslong_callee
EXTERN __divslonglong
EXTERN __divslonglong_callee
EXTERN __divsuchar
EXTERN __divsuchar_callee
EXTERN __divuchar
EXTERN __divuchar_callee
EXTERN __divuint
EXTERN __divuint_callee
EXTERN __divulong
EXTERN __divulong_callee
EXTERN __divulonglong
EXTERN __divulonglong_callee
EXTERN __divuschar
EXTERN __divuschar_callee
EXTERN __modschar
EXTERN __modschar_callee
EXTERN __modsint
EXTERN __modsint_callee
EXTERN __modslong
EXTERN __modslong_callee
EXTERN __modslonglong
EXTERN __modslonglong_callee
EXTERN __modsuchar
EXTERN __modsuchar_callee
EXTERN __moduchar
EXTERN __moduchar_callee
EXTERN __moduint
EXTERN __moduint_callee
EXTERN __modulong
EXTERN __modulong_callee
EXTERN __modulonglong
EXTERN __modulonglong_callee
EXTERN __moduschar
EXTERN __moduschar_callee
EXTERN __mulint
EXTERN __mulint_callee
EXTERN __mullong
EXTERN __mullong_callee
EXTERN __mullonglong
EXTERN __mullonglong_callee
EXTERN __mulschar
EXTERN __mulschar_callee
EXTERN __mulsuchar
EXTERN __mulsuchar_callee
EXTERN __muluchar
EXTERN __muluchar_callee
EXTERN __muluschar
EXTERN __muluschar_callee
EXTERN __rlslonglong
EXTERN __rlslonglong_callee
EXTERN __rlulonglong
EXTERN __rlulonglong_callee
EXTERN __rrslonglong
EXTERN __rrslonglong_callee
EXTERN __rrulonglong
EXTERN __rrulonglong_callee
EXTERN ___mulsint2slong
EXTERN ___mulsint2slong_callee
EXTERN ___muluint2ulong
EXTERN ___muluint2ulong_callee
EXTERN ___sdcc_call_hl
EXTERN ___sdcc_call_iy
EXTERN ___sdcc_enter_ix
EXTERN banked_call
EXTERN _banked_ret
EXTERN ___fs2schar
EXTERN ___fs2schar_callee
EXTERN ___fs2sint
EXTERN ___fs2sint_callee
EXTERN ___fs2slong
EXTERN ___fs2slong_callee
EXTERN ___fs2slonglong
EXTERN ___fs2slonglong_callee
EXTERN ___fs2uchar
EXTERN ___fs2uchar_callee
EXTERN ___fs2uint
EXTERN ___fs2uint_callee
EXTERN ___fs2ulong
EXTERN ___fs2ulong_callee
EXTERN ___fs2ulonglong
EXTERN ___fs2ulonglong_callee
EXTERN ___fsadd
EXTERN ___fsadd_callee
EXTERN ___fsdiv
EXTERN ___fsdiv_callee
EXTERN ___fseq
EXTERN ___fseq_callee
EXTERN ___fsgt
EXTERN ___fsgt_callee
EXTERN ___fslt
EXTERN ___fslt_callee
EXTERN ___fsmul
EXTERN ___fsmul_callee
EXTERN ___fsneq
EXTERN ___fsneq_callee
EXTERN ___fssub
EXTERN ___fssub_callee
EXTERN ___schar2fs
EXTERN ___schar2fs_callee
EXTERN ___sint2fs
EXTERN ___sint2fs_callee
EXTERN ___slong2fs
EXTERN ___slong2fs_callee
EXTERN ___slonglong2fs
EXTERN ___slonglong2fs_callee
EXTERN ___uchar2fs
EXTERN ___uchar2fs_callee
EXTERN ___uint2fs
EXTERN ___uint2fs_callee
EXTERN ___ulong2fs
EXTERN ___ulong2fs_callee
EXTERN ___ulonglong2fs
EXTERN ___ulonglong2fs_callee
EXTERN ____sdcc_2_copy_src_mhl_dst_deix
EXTERN ____sdcc_2_copy_src_mhl_dst_bcix
EXTERN ____sdcc_4_copy_src_mhl_dst_deix
EXTERN ____sdcc_4_copy_src_mhl_dst_bcix
EXTERN ____sdcc_4_copy_src_mhl_dst_mbc
EXTERN ____sdcc_4_ldi_nosave_bc
EXTERN ____sdcc_4_ldi_save_bc
EXTERN ____sdcc_4_push_hlix
EXTERN ____sdcc_4_push_mhl
EXTERN ____sdcc_lib_setmem_hl
EXTERN ____sdcc_ll_add_de_bc_hl
EXTERN ____sdcc_ll_add_de_bc_hlix
EXTERN ____sdcc_ll_add_de_hlix_bc
EXTERN ____sdcc_ll_add_de_hlix_bcix
EXTERN ____sdcc_ll_add_deix_bc_hl
EXTERN ____sdcc_ll_add_deix_hlix
EXTERN ____sdcc_ll_add_hlix_bc_deix
EXTERN ____sdcc_ll_add_hlix_deix_bc
EXTERN ____sdcc_ll_add_hlix_deix_bcix
EXTERN ____sdcc_ll_asr_hlix_a
EXTERN ____sdcc_ll_asr_mbc_a
EXTERN ____sdcc_ll_copy_src_de_dst_hlix
EXTERN ____sdcc_ll_copy_src_de_dst_hlsp
EXTERN ____sdcc_ll_copy_src_deix_dst_hl
EXTERN ____sdcc_ll_copy_src_deix_dst_hlix
EXTERN ____sdcc_ll_copy_src_deixm_dst_hlsp
EXTERN ____sdcc_ll_copy_src_desp_dst_hlsp
EXTERN ____sdcc_ll_copy_src_hl_dst_de
EXTERN ____sdcc_ll_copy_src_hlsp_dst_de
EXTERN ____sdcc_ll_copy_src_hlsp_dst_deixm
EXTERN ____sdcc_ll_lsl_hlix_a
EXTERN ____sdcc_ll_lsl_mbc_a
EXTERN ____sdcc_ll_lsr_hlix_a
EXTERN ____sdcc_ll_lsr_mbc_a
EXTERN ____sdcc_ll_push_hlix
EXTERN ____sdcc_ll_push_mhl
EXTERN ____sdcc_ll_sub_de_bc_hl
EXTERN ____sdcc_ll_sub_de_bc_hlix
EXTERN ____sdcc_ll_sub_de_hlix_bc
EXTERN ____sdcc_ll_sub_de_hlix_bcix
EXTERN ____sdcc_ll_sub_deix_bc_hl
EXTERN ____sdcc_ll_sub_deix_hlix
EXTERN ____sdcc_ll_sub_hlix_bc_deix
EXTERN ____sdcc_ll_sub_hlix_deix_bc
EXTERN ____sdcc_ll_sub_hlix_deix_bcix
EXTERN ____sdcc_load_debc_deix
EXTERN ____sdcc_load_dehl_deix
EXTERN ____sdcc_load_debc_mhl
EXTERN ____sdcc_load_hlde_mhl
EXTERN ____sdcc_store_dehl_bcix
EXTERN ____sdcc_store_debc_hlix
EXTERN ____sdcc_store_debc_mhl
EXTERN ____sdcc_cpu_pop_ei
EXTERN ____sdcc_cpu_pop_ei_jp
EXTERN ____sdcc_cpu_push_di
EXTERN ____sdcc_outi
EXTERN ____sdcc_outi_128
EXTERN ____sdcc_outi_256
EXTERN ____sdcc_ldi
EXTERN ____sdcc_ldi_128
EXTERN ____sdcc_ldi_256
EXTERN ____sdcc_4_copy_srcd_hlix_dst_deix
EXTERN ____sdcc_4_and_src_mbc_mhl_dst_deix
EXTERN ____sdcc_4_or_src_mbc_mhl_dst_deix
EXTERN ____sdcc_4_xor_src_mbc_mhl_dst_deix
EXTERN ____sdcc_4_or_src_dehl_dst_bcix
EXTERN ____sdcc_4_xor_src_dehl_dst_bcix
EXTERN ____sdcc_4_and_src_dehl_dst_bcix
EXTERN ____sdcc_4_xor_src_mbc_mhl_dst_debc
EXTERN ____sdcc_4_or_src_mbc_mhl_dst_debc
EXTERN ____sdcc_4_and_src_mbc_mhl_dst_debc
EXTERN ____sdcc_4_cpl_src_mhl_dst_debc
EXTERN ____sdcc_4_xor_src_debc_mhl_dst_debc
EXTERN ____sdcc_4_or_src_debc_mhl_dst_debc
EXTERN ____sdcc_4_and_src_debc_mhl_dst_debc
EXTERN ____sdcc_4_and_src_debc_hlix_dst_debc
EXTERN ____sdcc_4_or_src_debc_hlix_dst_debc
EXTERN ____sdcc_4_xor_src_debc_hlix_dst_debc
;--------------------------------------------------------
; Public variables in this module
;--------------------------------------------------------
GLOBAL _usbdev_control_transfer
GLOBAL _usbdev_blk_out_trnsfer
GLOBAL _usbdev_bulk_in_transfer
GLOBAL _usbdev_dat_in_trnsfer
GLOBAL _usbdev_dat_in_trnsfer_0
;--------------------------------------------------------
; Externals used
;--------------------------------------------------------
GLOBAL _critical_end
GLOBAL _critical_begin
GLOBAL _usbtrn_clear_endpoint_halt
GLOBAL _usbtrn_set_address
GLOBAL _usbtrn_set_configuration
GLOBAL _usbtrn_gfull_cfg_desc
GLOBAL _usbtrn_get_config_descriptor
GLOBAL _usbtrn_get_descriptor2
GLOBAL _usbtrn_get_descriptor
GLOBAL _usb_data_out_transfer
GLOBAL _usb_data_in_transfer_n
GLOBAL _usb_data_in_transfer
GLOBAL _usb_control_transfer
GLOBAL _ch_issue_token_in_ep0
GLOBAL _ch_issue_token_out_ep0
GLOBAL _ch_issue_token_setup
GLOBAL _ch_data_out_transfer
GLOBAL _ch_data_in_transfer_n
GLOBAL _ch_data_in_transfer
GLOBAL _ch_control_transfer_set_config
GLOBAL _ch_control_transfer_set_address
GLOBAL _ch_control_transfer_request_descriptor
GLOBAL _ch_set_usb_address
GLOBAL _ch_write_data
GLOBAL _ch_cmd_get_ic_version
GLOBAL _ch_cmd_set_usb_mode
GLOBAL _ch_probe
GLOBAL _ch_cmd_reset_all
GLOBAL _ch_read_data
GLOBAL _ch_very_short_wait_int_and_get_status
GLOBAL _ch_short_wait_int_and_get_status
GLOBAL _ch_long_wait_int_and_get_status
GLOBAL _ch_get_status
GLOBAL _ch_command
GLOBAL _delay_medium
GLOBAL _delay_short
GLOBAL _delay_20ms
GLOBAL _printf
GLOBAL _delay
GLOBAL _ulltoa_callee
GLOBAL _ulltoa
GLOBAL _strtoull_callee
GLOBAL _strtoull
GLOBAL _strtoll_callee
GLOBAL _strtoll
GLOBAL _lltoa_callee
GLOBAL _lltoa
GLOBAL _llabs_callee
GLOBAL _llabs
GLOBAL __lldivu__callee
GLOBAL __lldivu_
GLOBAL __lldiv__callee
GLOBAL __lldiv_
GLOBAL _atoll_callee
GLOBAL _atoll
GLOBAL _realloc_unlocked_callee
GLOBAL _realloc_unlocked
GLOBAL _malloc_unlocked_fastcall
GLOBAL _malloc_unlocked
GLOBAL _free_unlocked_fastcall
GLOBAL _free_unlocked
GLOBAL _calloc_unlocked_callee
GLOBAL _calloc_unlocked
GLOBAL _aligned_alloc_unlocked_callee
GLOBAL _aligned_alloc_unlocked
GLOBAL _realloc_callee
GLOBAL _realloc
GLOBAL _malloc_fastcall
GLOBAL _malloc
GLOBAL _free_fastcall
GLOBAL _free
GLOBAL _calloc_callee
GLOBAL _calloc
GLOBAL _aligned_alloc_callee
GLOBAL _aligned_alloc
GLOBAL _utoa_callee
GLOBAL _utoa
GLOBAL _ultoa_callee
GLOBAL _ultoa
GLOBAL _system_fastcall
GLOBAL _system
GLOBAL _strtoul_callee
GLOBAL _strtoul
GLOBAL _strtol_callee
GLOBAL _strtol
GLOBAL _strtof_callee
GLOBAL _strtof
GLOBAL _strtod_callee
GLOBAL _strtod
GLOBAL _srand_fastcall
GLOBAL _srand
GLOBAL _rand
GLOBAL _quick_exit_fastcall
GLOBAL _quick_exit
GLOBAL _qsort_callee
GLOBAL _qsort
GLOBAL _ltoa_callee
GLOBAL _ltoa
GLOBAL _labs_fastcall
GLOBAL _labs
GLOBAL _itoa_callee
GLOBAL _itoa
GLOBAL _ftoh_callee
GLOBAL _ftoh
GLOBAL _ftog_callee
GLOBAL _ftog
GLOBAL _ftoe_callee
GLOBAL _ftoe
GLOBAL _ftoa_callee
GLOBAL _ftoa
GLOBAL _exit_fastcall
GLOBAL _exit
GLOBAL _dtoh_callee
GLOBAL _dtoh
GLOBAL _dtog_callee
GLOBAL _dtog
GLOBAL _dtoe_callee
GLOBAL _dtoe
GLOBAL _dtoa_callee
GLOBAL _dtoa
GLOBAL _bsearch_callee
GLOBAL _bsearch
GLOBAL _atol_fastcall
GLOBAL _atol
GLOBAL _atoi_fastcall
GLOBAL _atoi
GLOBAL _atof_fastcall
GLOBAL _atof
GLOBAL _atexit_fastcall
GLOBAL _atexit
GLOBAL _at_quick_exit_fastcall
GLOBAL _at_quick_exit
GLOBAL _abs_fastcall
GLOBAL _abs
GLOBAL _abort
GLOBAL __strtou__callee
GLOBAL __strtou_
GLOBAL __strtoi__callee
GLOBAL __strtoi_
GLOBAL __random_uniform_xor_8__fastcall
GLOBAL __random_uniform_xor_8_
GLOBAL __random_uniform_xor_32__fastcall
GLOBAL __random_uniform_xor_32_
GLOBAL __random_uniform_cmwc_8__fastcall
GLOBAL __random_uniform_cmwc_8_
GLOBAL __shellsort__callee
GLOBAL __shellsort_
GLOBAL __quicksort__callee
GLOBAL __quicksort_
GLOBAL __insertion_sort__callee
GLOBAL __insertion_sort_
GLOBAL __ldivu__callee
GLOBAL __ldivu_
GLOBAL __ldiv__callee
GLOBAL __ldiv_
GLOBAL __divu__callee
GLOBAL __divu_
GLOBAL __div__callee
GLOBAL __div_
GLOBAL _in_critical_usb_section
GLOBAL _result
;--------------------------------------------------------
; special function registers
;--------------------------------------------------------
defc _CH376_DATA_PORT = 0xff88
defc _CH376_COMMAND_PORT = 0xff89
defc _USB_MODULE_LEDS = 0xff8a
;--------------------------------------------------------
; ram data
;--------------------------------------------------------
SECTION bss_compiler
;--------------------------------------------------------
; ram data
;--------------------------------------------------------
IF 0
; .area _INITIALIZED removed by z88dk
ENDIF
;--------------------------------------------------------
; absolute external ram data
;--------------------------------------------------------
SECTION IGNORE
;--------------------------------------------------------
; global & static initialisations
;--------------------------------------------------------
SECTION code_crt_init
;--------------------------------------------------------
; Home
;--------------------------------------------------------
SECTION IGNORE
;--------------------------------------------------------
; code
;--------------------------------------------------------
SECTION code_compiler
;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) {
; ---------------------------------
; Function usbdev_control_transfer
; ---------------------------------
_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);
ld l,(ix+4)
ld h,(ix+5)
ld e,l
ld d,h
inc hl
ld b, (hl)
ex de, hl
ld a, (hl)
rlca
rlca
rlca
rlca
and a,0x0f
ld e,(ix+8)
ld d,(ix+9)
ld c,a
push bc
push de
ld l,(ix+6)
ld h,(ix+7)
push hl
call _usb_control_transfer
pop af
pop af
pop af
;source-doc/base-drv/dev_transfers.c:33: }
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) {
; ---------------------------------
; Function usbdev_blk_out_trnsfer
; ---------------------------------
_usbdev_blk_out_trnsfer:
push ix
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];
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:39: result = usb_data_out_transfer(buffer, buffer_size, dev->address, endpoint);
ld l, e
ld h, d
ld a, (hl)
rlca
rlca
rlca
rlca
and a,0x0f
push bc
push de
push bc
push af
inc sp
ld l,(ix+8)
ld h,(ix+9)
push hl
ld l,(ix+6)
ld h,(ix+7)
push hl
call _usb_data_out_transfer
pop af
pop af
pop af
inc sp
pop de
pop bc
ld a, l
ld (_result), a
;source-doc/base-drv/dev_transfers.c:41: if (result == USB_ERR_STALL) {
ld a,(_result)
sub a,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);
ld l, e
ld h, d
inc hl
ld a, (hl)
ld (ix-1),a
ex de, hl
ld a, (hl)
rlca
rlca
rlca
rlca
and a,0x0f
ld d, a
ld l, c
ld h, b
ld a, (hl)
rrca
and a,0x07
push bc
ld h,(ix-1)
ld l,d
push hl
push af
inc sp
call _usbtrn_clear_endpoint_halt
pop af
inc sp
pop bc
;source-doc/base-drv/dev_transfers.c:43: endpoint->toggle = 0;
ld a, (bc)
and a,0xfe
ld (bc), a
;source-doc/base-drv/dev_transfers.c:44: return USB_ERR_STALL;
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;
ld hl,(_result)
l_usbdev_blk_out_trnsfer_00104:
;source-doc/base-drv/dev_transfers.c:51: }
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) {
; ---------------------------------
; Function usbdev_bulk_in_transfer
; ---------------------------------
_usbdev_bulk_in_transfer:
push ix
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];
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);
ld e,c
ld d,b
ex de,hl
ld a, (hl)
rlca
rlca
rlca
rlca
and a,0x0f
push bc
push de
push de
push af
inc sp
ld l,(ix+8)
ld h,(ix+9)
push hl
ld l,(ix+6)
ld h,(ix+7)
push hl
call _usb_data_in_transfer_n
pop af
pop af
pop af
inc sp
pop de
pop bc
ld a, l
ld (_result), a
;source-doc/base-drv/dev_transfers.c:58: if (result == USB_ERR_STALL) {
ld a,(_result)
sub a,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);
ld l, c
ld h, b
inc hl
ld a, (hl)
ld (ix-1),a
ld l, c
ld h, b
ld a, (hl)
rlca
rlca
rlca
rlca
and a,0x0f
ld b, a
ld l, e
ld h, d
ld a, (hl)
rrca
and a,0x07
push de
ld h,(ix-1)
ld l,b
push hl
push af
inc sp
call _usbtrn_clear_endpoint_halt
pop af
inc sp
pop de
;source-doc/base-drv/dev_transfers.c:60: endpoint->toggle = 0;
ex de, hl
res 0, (hl)
;source-doc/base-drv/dev_transfers.c:61: return USB_ERR_STALL;
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;
ld hl,(_result)
l_usbdev_bulk_in_transfer_00104:
;source-doc/base-drv/dev_transfers.c:67: }
inc sp
pop ix
ret
;source-doc/base-drv/dev_transfers.c:69: usb_error usbdev_dat_in_trnsfer(device_config *const device,
; ---------------------------------
; Function usbdev_dat_in_trnsfer
; ---------------------------------
_usbdev_dat_in_trnsfer:
push ix
ld ix,0
add ix,sp
dec sp
;source-doc/base-drv/dev_transfers.c:74: endpoint_param *const endpoint = &device->endpoints[endpoint_type];
ld e,(ix+4)
ld d,(ix+5)
ld c, e
ld b, d
inc bc
inc bc
inc bc
push de
ld a,(ix+10)
ld e, a
add a, a
add a, e
pop de
add a, c
ld c, a
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);
ld l, e
ld h, d
ld a, (hl)
rlca
rlca
rlca
rlca
and a,0x0f
push bc
push de
push bc
push af
inc sp
ld l,(ix+8)
ld h,(ix+9)
push hl
ld l,(ix+6)
ld h,(ix+7)
push hl
call _usb_data_in_transfer
pop af
pop af
pop af
inc sp
pop de
pop bc
ld a, l
ld (_result), a
;source-doc/base-drv/dev_transfers.c:78: if (result == USB_ERR_STALL) {
ld a,(_result)
sub a,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);
ld l, e
ld h, d
inc hl
ld a, (hl)
ld (ix-1),a
ex de, hl
ld a, (hl)
rlca
rlca
rlca
rlca
and a,0x0f
ld d, a
ld l, c
ld h, b
ld a, (hl)
rrca
and a,0x07
push bc
ld h,(ix-1)
ld l,d
push hl
push af
inc sp
call _usbtrn_clear_endpoint_halt
pop af
inc sp
pop bc
;source-doc/base-drv/dev_transfers.c:80: endpoint->toggle = 0;
ld a, (bc)
and a,0xfe
ld (bc), a
;source-doc/base-drv/dev_transfers.c:81: return USB_ERR_STALL;
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;
ld hl,(_result)
l_usbdev_dat_in_trnsfer_00104:
;source-doc/base-drv/dev_transfers.c:87: }
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) {
; ---------------------------------
; Function usbdev_dat_in_trnsfer_0
; ---------------------------------
_usbdev_dat_in_trnsfer_0:
push ix
ld ix,0
add ix,sp
push af
;source-doc/base-drv/dev_transfers.c:90: endpoint_param *const endpoint = &device->endpoints[0];
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);
ld l, e
ld h, d
ld a, (hl)
rlca
rlca
rlca
rlca
and a,0x0f
ld c,(ix+8)
ld b,0x00
push de
ld l,(ix-2)
ld h,(ix-1)
push hl
push af
inc sp
push bc
ld l,(ix+6)
ld h,(ix+7)
push hl
call _usb_data_in_transfer
pop af
pop af
pop af
inc sp
pop de
ld a, l
ld (_result), a
;source-doc/base-drv/dev_transfers.c:94: if (result == USB_ERR_STALL) {
ld a,(_result)
sub a,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);
ld l, e
ld h, d
inc hl
ld b, (hl)
ex de, hl
ld a, (hl)
rlca
rlca
rlca
rlca
and a,0x0f
ld d, a
pop hl
ld a,(hl)
push hl
rrca
and a,0x07
ld c, d
push bc
push af
inc sp
call _usbtrn_clear_endpoint_halt
pop af
inc sp
;source-doc/base-drv/dev_transfers.c:96: endpoint->toggle = 0;
pop hl
push hl
res 0, (hl)
;source-doc/base-drv/dev_transfers.c:97: return USB_ERR_STALL;
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;
ld hl,(_result)
l_usbdev_dat_in_trnsfer_0_00103:
;source-doc/base-drv/dev_transfers.c:101: }
ld sp, ix
pop ix
ret
SECTION IGNORE

1472
Source/HBIOS/ch376-native/base-drv/enumerate.c.asm

File diff suppressed because it is too large

829
Source/HBIOS/ch376-native/base-drv/transfers.c.asm

@ -1,829 +0,0 @@
;--------------------------------------------------------
; File Created by SDCC : free open source ISO C Compiler
; Version 4.4.0 #14648 (Linux)
;--------------------------------------------------------
; Processed by Z88DK
;--------------------------------------------------------
EXTERN __divschar
EXTERN __divschar_callee
EXTERN __divsint
EXTERN __divsint_callee
EXTERN __divslong
EXTERN __divslong_callee
EXTERN __divslonglong
EXTERN __divslonglong_callee
EXTERN __divsuchar
EXTERN __divsuchar_callee
EXTERN __divuchar
EXTERN __divuchar_callee
EXTERN __divuint
EXTERN __divuint_callee
EXTERN __divulong
EXTERN __divulong_callee
EXTERN __divulonglong
EXTERN __divulonglong_callee
EXTERN __divuschar
EXTERN __divuschar_callee
EXTERN __modschar
EXTERN __modschar_callee
EXTERN __modsint
EXTERN __modsint_callee
EXTERN __modslong
EXTERN __modslong_callee
EXTERN __modslonglong
EXTERN __modslonglong_callee
EXTERN __modsuchar
EXTERN __modsuchar_callee
EXTERN __moduchar
EXTERN __moduchar_callee
EXTERN __moduint
EXTERN __moduint_callee
EXTERN __modulong
EXTERN __modulong_callee
EXTERN __modulonglong
EXTERN __modulonglong_callee
EXTERN __moduschar
EXTERN __moduschar_callee
EXTERN __mulint
EXTERN __mulint_callee
EXTERN __mullong
EXTERN __mullong_callee
EXTERN __mullonglong
EXTERN __mullonglong_callee
EXTERN __mulschar
EXTERN __mulschar_callee
EXTERN __mulsuchar
EXTERN __mulsuchar_callee
EXTERN __muluchar
EXTERN __muluchar_callee
EXTERN __muluschar
EXTERN __muluschar_callee
EXTERN __rlslonglong
EXTERN __rlslonglong_callee
EXTERN __rlulonglong
EXTERN __rlulonglong_callee
EXTERN __rrslonglong
EXTERN __rrslonglong_callee
EXTERN __rrulonglong
EXTERN __rrulonglong_callee
EXTERN ___mulsint2slong
EXTERN ___mulsint2slong_callee
EXTERN ___muluint2ulong
EXTERN ___muluint2ulong_callee
EXTERN ___sdcc_call_hl
EXTERN ___sdcc_call_iy
EXTERN ___sdcc_enter_ix
EXTERN banked_call
EXTERN _banked_ret
EXTERN ___fs2schar
EXTERN ___fs2schar_callee
EXTERN ___fs2sint
EXTERN ___fs2sint_callee
EXTERN ___fs2slong
EXTERN ___fs2slong_callee
EXTERN ___fs2slonglong
EXTERN ___fs2slonglong_callee
EXTERN ___fs2uchar
EXTERN ___fs2uchar_callee
EXTERN ___fs2uint
EXTERN ___fs2uint_callee
EXTERN ___fs2ulong
EXTERN ___fs2ulong_callee
EXTERN ___fs2ulonglong
EXTERN ___fs2ulonglong_callee
EXTERN ___fsadd
EXTERN ___fsadd_callee
EXTERN ___fsdiv
EXTERN ___fsdiv_callee
EXTERN ___fseq
EXTERN ___fseq_callee
EXTERN ___fsgt
EXTERN ___fsgt_callee
EXTERN ___fslt
EXTERN ___fslt_callee
EXTERN ___fsmul
EXTERN ___fsmul_callee
EXTERN ___fsneq
EXTERN ___fsneq_callee
EXTERN ___fssub
EXTERN ___fssub_callee
EXTERN ___schar2fs
EXTERN ___schar2fs_callee
EXTERN ___sint2fs
EXTERN ___sint2fs_callee
EXTERN ___slong2fs
EXTERN ___slong2fs_callee
EXTERN ___slonglong2fs
EXTERN ___slonglong2fs_callee
EXTERN ___uchar2fs
EXTERN ___uchar2fs_callee
EXTERN ___uint2fs
EXTERN ___uint2fs_callee
EXTERN ___ulong2fs
EXTERN ___ulong2fs_callee
EXTERN ___ulonglong2fs
EXTERN ___ulonglong2fs_callee
EXTERN ____sdcc_2_copy_src_mhl_dst_deix
EXTERN ____sdcc_2_copy_src_mhl_dst_bcix
EXTERN ____sdcc_4_copy_src_mhl_dst_deix
EXTERN ____sdcc_4_copy_src_mhl_dst_bcix
EXTERN ____sdcc_4_copy_src_mhl_dst_mbc
EXTERN ____sdcc_4_ldi_nosave_bc
EXTERN ____sdcc_4_ldi_save_bc
EXTERN ____sdcc_4_push_hlix
EXTERN ____sdcc_4_push_mhl
EXTERN ____sdcc_lib_setmem_hl
EXTERN ____sdcc_ll_add_de_bc_hl
EXTERN ____sdcc_ll_add_de_bc_hlix
EXTERN ____sdcc_ll_add_de_hlix_bc
EXTERN ____sdcc_ll_add_de_hlix_bcix
EXTERN ____sdcc_ll_add_deix_bc_hl
EXTERN ____sdcc_ll_add_deix_hlix
EXTERN ____sdcc_ll_add_hlix_bc_deix
EXTERN ____sdcc_ll_add_hlix_deix_bc
EXTERN ____sdcc_ll_add_hlix_deix_bcix
EXTERN ____sdcc_ll_asr_hlix_a
EXTERN ____sdcc_ll_asr_mbc_a
EXTERN ____sdcc_ll_copy_src_de_dst_hlix
EXTERN ____sdcc_ll_copy_src_de_dst_hlsp
EXTERN ____sdcc_ll_copy_src_deix_dst_hl
EXTERN ____sdcc_ll_copy_src_deix_dst_hlix
EXTERN ____sdcc_ll_copy_src_deixm_dst_hlsp
EXTERN ____sdcc_ll_copy_src_desp_dst_hlsp
EXTERN ____sdcc_ll_copy_src_hl_dst_de
EXTERN ____sdcc_ll_copy_src_hlsp_dst_de
EXTERN ____sdcc_ll_copy_src_hlsp_dst_deixm
EXTERN ____sdcc_ll_lsl_hlix_a
EXTERN ____sdcc_ll_lsl_mbc_a
EXTERN ____sdcc_ll_lsr_hlix_a
EXTERN ____sdcc_ll_lsr_mbc_a
EXTERN ____sdcc_ll_push_hlix
EXTERN ____sdcc_ll_push_mhl
EXTERN ____sdcc_ll_sub_de_bc_hl
EXTERN ____sdcc_ll_sub_de_bc_hlix
EXTERN ____sdcc_ll_sub_de_hlix_bc
EXTERN ____sdcc_ll_sub_de_hlix_bcix
EXTERN ____sdcc_ll_sub_deix_bc_hl
EXTERN ____sdcc_ll_sub_deix_hlix
EXTERN ____sdcc_ll_sub_hlix_bc_deix
EXTERN ____sdcc_ll_sub_hlix_deix_bc
EXTERN ____sdcc_ll_sub_hlix_deix_bcix
EXTERN ____sdcc_load_debc_deix
EXTERN ____sdcc_load_dehl_deix
EXTERN ____sdcc_load_debc_mhl
EXTERN ____sdcc_load_hlde_mhl
EXTERN ____sdcc_store_dehl_bcix
EXTERN ____sdcc_store_debc_hlix
EXTERN ____sdcc_store_debc_mhl
EXTERN ____sdcc_cpu_pop_ei
EXTERN ____sdcc_cpu_pop_ei_jp
EXTERN ____sdcc_cpu_push_di
EXTERN ____sdcc_outi
EXTERN ____sdcc_outi_128
EXTERN ____sdcc_outi_256
EXTERN ____sdcc_ldi
EXTERN ____sdcc_ldi_128
EXTERN ____sdcc_ldi_256
EXTERN ____sdcc_4_copy_srcd_hlix_dst_deix
EXTERN ____sdcc_4_and_src_mbc_mhl_dst_deix
EXTERN ____sdcc_4_or_src_mbc_mhl_dst_deix
EXTERN ____sdcc_4_xor_src_mbc_mhl_dst_deix
EXTERN ____sdcc_4_or_src_dehl_dst_bcix
EXTERN ____sdcc_4_xor_src_dehl_dst_bcix
EXTERN ____sdcc_4_and_src_dehl_dst_bcix
EXTERN ____sdcc_4_xor_src_mbc_mhl_dst_debc
EXTERN ____sdcc_4_or_src_mbc_mhl_dst_debc
EXTERN ____sdcc_4_and_src_mbc_mhl_dst_debc
EXTERN ____sdcc_4_cpl_src_mhl_dst_debc
EXTERN ____sdcc_4_xor_src_debc_mhl_dst_debc
EXTERN ____sdcc_4_or_src_debc_mhl_dst_debc
EXTERN ____sdcc_4_and_src_debc_mhl_dst_debc
EXTERN ____sdcc_4_and_src_debc_hlix_dst_debc
EXTERN ____sdcc_4_or_src_debc_hlix_dst_debc
EXTERN ____sdcc_4_xor_src_debc_hlix_dst_debc
;--------------------------------------------------------
; Public variables in this module
;--------------------------------------------------------
GLOBAL _usb_dat_in_trns_n_ext
GLOBAL _usb_dat_in_trnsfer_ext
GLOBAL _usb_ctrl_trnsfer_ext
GLOBAL _usb_control_transfer
GLOBAL _usb_data_in_transfer
GLOBAL _usb_data_in_transfer_n
GLOBAL _usb_data_out_transfer
;--------------------------------------------------------
; Externals used
;--------------------------------------------------------
GLOBAL _critical_end
GLOBAL _critical_begin
GLOBAL _print_uint16
GLOBAL _print_string
GLOBAL _print_hex
GLOBAL _ch_issue_token_in_ep0
GLOBAL _ch_issue_token_out_ep0
GLOBAL _ch_issue_token_setup
GLOBAL _ch_data_out_transfer
GLOBAL _ch_data_in_transfer_n
GLOBAL _ch_data_in_transfer
GLOBAL _ch_control_transfer_set_config
GLOBAL _ch_control_transfer_set_address
GLOBAL _ch_control_transfer_request_descriptor
GLOBAL _ch_set_usb_address
GLOBAL _ch_write_data
GLOBAL _ch_cmd_get_ic_version
GLOBAL _ch_cmd_set_usb_mode
GLOBAL _ch_probe
GLOBAL _ch_cmd_reset_all
GLOBAL _ch_read_data
GLOBAL _ch_very_short_wait_int_and_get_status
GLOBAL _ch_short_wait_int_and_get_status
GLOBAL _ch_long_wait_int_and_get_status
GLOBAL _ch_get_status
GLOBAL _ch_command
GLOBAL _delay_medium
GLOBAL _delay_short
GLOBAL _delay_20ms
GLOBAL _printf
GLOBAL _delay
GLOBAL _ulltoa_callee
GLOBAL _ulltoa
GLOBAL _strtoull_callee
GLOBAL _strtoull
GLOBAL _strtoll_callee
GLOBAL _strtoll
GLOBAL _lltoa_callee
GLOBAL _lltoa
GLOBAL _llabs_callee
GLOBAL _llabs
GLOBAL __lldivu__callee
GLOBAL __lldivu_
GLOBAL __lldiv__callee
GLOBAL __lldiv_
GLOBAL _atoll_callee
GLOBAL _atoll
GLOBAL _realloc_unlocked_callee
GLOBAL _realloc_unlocked
GLOBAL _malloc_unlocked_fastcall
GLOBAL _malloc_unlocked
GLOBAL _free_unlocked_fastcall
GLOBAL _free_unlocked
GLOBAL _calloc_unlocked_callee
GLOBAL _calloc_unlocked
GLOBAL _aligned_alloc_unlocked_callee
GLOBAL _aligned_alloc_unlocked
GLOBAL _realloc_callee
GLOBAL _realloc
GLOBAL _malloc_fastcall
GLOBAL _malloc
GLOBAL _free_fastcall
GLOBAL _free
GLOBAL _calloc_callee
GLOBAL _calloc
GLOBAL _aligned_alloc_callee
GLOBAL _aligned_alloc
GLOBAL _utoa_callee
GLOBAL _utoa
GLOBAL _ultoa_callee
GLOBAL _ultoa
GLOBAL _system_fastcall
GLOBAL _system
GLOBAL _strtoul_callee
GLOBAL _strtoul
GLOBAL _strtol_callee
GLOBAL _strtol
GLOBAL _strtof_callee
GLOBAL _strtof
GLOBAL _strtod_callee
GLOBAL _strtod
GLOBAL _srand_fastcall
GLOBAL _srand
GLOBAL _rand
GLOBAL _quick_exit_fastcall
GLOBAL _quick_exit
GLOBAL _qsort_callee
GLOBAL _qsort
GLOBAL _ltoa_callee
GLOBAL _ltoa
GLOBAL _labs_fastcall
GLOBAL _labs
GLOBAL _itoa_callee
GLOBAL _itoa
GLOBAL _ftoh_callee
GLOBAL _ftoh
GLOBAL _ftog_callee
GLOBAL _ftog
GLOBAL _ftoe_callee
GLOBAL _ftoe
GLOBAL _ftoa_callee
GLOBAL _ftoa
GLOBAL _exit_fastcall
GLOBAL _exit
GLOBAL _dtoh_callee
GLOBAL _dtoh
GLOBAL _dtog_callee
GLOBAL _dtog
GLOBAL _dtoe_callee
GLOBAL _dtoe
GLOBAL _dtoa_callee
GLOBAL _dtoa
GLOBAL _bsearch_callee
GLOBAL _bsearch
GLOBAL _atol_fastcall
GLOBAL _atol
GLOBAL _atoi_fastcall
GLOBAL _atoi
GLOBAL _atof_fastcall
GLOBAL _atof
GLOBAL _atexit_fastcall
GLOBAL _atexit
GLOBAL _at_quick_exit_fastcall
GLOBAL _at_quick_exit
GLOBAL _abs_fastcall
GLOBAL _abs
GLOBAL _abort
GLOBAL __strtou__callee
GLOBAL __strtou_
GLOBAL __strtoi__callee
GLOBAL __strtoi_
GLOBAL __random_uniform_xor_8__fastcall
GLOBAL __random_uniform_xor_8_
GLOBAL __random_uniform_xor_32__fastcall
GLOBAL __random_uniform_xor_32_
GLOBAL __random_uniform_cmwc_8__fastcall
GLOBAL __random_uniform_cmwc_8_
GLOBAL __shellsort__callee
GLOBAL __shellsort_
GLOBAL __quicksort__callee
GLOBAL __quicksort_
GLOBAL __insertion_sort__callee
GLOBAL __insertion_sort_
GLOBAL __ldivu__callee
GLOBAL __ldivu_
GLOBAL __ldiv__callee
GLOBAL __ldiv_
GLOBAL __divu__callee
GLOBAL __divu_
GLOBAL __div__callee
GLOBAL __div_
GLOBAL _in_critical_usb_section
GLOBAL _result
;--------------------------------------------------------
; special function registers
;--------------------------------------------------------
defc _CH376_DATA_PORT = 0xff88
defc _CH376_COMMAND_PORT = 0xff89
defc _USB_MODULE_LEDS = 0xff8a
;--------------------------------------------------------
; ram data
;--------------------------------------------------------
SECTION bss_compiler
;--------------------------------------------------------
; ram data
;--------------------------------------------------------
IF 0
; .area _INITIALIZED removed by z88dk
ENDIF
;--------------------------------------------------------
; absolute external ram data
;--------------------------------------------------------
SECTION IGNORE
;--------------------------------------------------------
; global & static initialisations
;--------------------------------------------------------
SECTION code_crt_init
;--------------------------------------------------------
; Home
;--------------------------------------------------------
SECTION IGNORE
;--------------------------------------------------------
; code
;--------------------------------------------------------
SECTION code_compiler
;source-doc/base-drv/transfers.c:24: usb_error usb_ctrl_trnsfer_ext(const setup_packet *const cmd_packet,
; ---------------------------------
; Function usb_ctrl_trnsfer_ext
; ---------------------------------
_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)
ld a,(ix+5)
sub a,0x80
jr NC,l_usb_ctrl_trnsfer_ext_00102
;source-doc/base-drv/transfers.c:29: return USB_BAD_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)
ld a,(ix+7)
or a,(ix+6)
jr Z,l_usb_ctrl_trnsfer_ext_00104
ld a,(ix+7)
sub a,0x80
jr NC,l_usb_ctrl_trnsfer_ext_00104
;source-doc/base-drv/transfers.c:32: return USB_BAD_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);
ld h,(ix+9)
ld l,(ix+8)
push hl
ld l,(ix+6)
ld h,(ix+7)
push hl
ld l,(ix+4)
ld h,(ix+5)
push hl
call _usb_control_transfer
pop af
pop af
pop af
l_usb_ctrl_trnsfer_ext_00106:
;source-doc/base-drv/transfers.c:35: }
pop ix
ret
;source-doc/base-drv/transfers.c:47: usb_error usb_control_transfer(const setup_packet *const cmd_packet,
; ---------------------------------
; Function usb_control_transfer
; ---------------------------------
_usb_control_transfer:
push ix
ld ix,0
add ix,sp
push af
push af
;source-doc/base-drv/transfers.c:52: endpoint_param endpoint = {1, 0, max_packet_size};
ld hl,0
add hl, sp
set 0, (hl)
ld hl,0
add hl, sp
ld a, (hl)
and a,0xf1
ld (hl), a
ld c,(ix+9)
ld b,0x00
ld hl,1
add hl, sp
ld (hl), c
inc hl
ld a, b
and a,0x03
ld e,a
ld a, (hl)
and a,0xfc
or a, e
ld (hl), a
;source-doc/base-drv/transfers.c:54: const uint8_t transferIn = (cmd_packet->bmRequestType & 0x80);
ld c,(ix+4)
ld b,(ix+5)
ld a, (bc)
and a,0x80
;source-doc/base-drv/transfers.c:56: if (transferIn && buffer == 0)
ld (ix-1),a
or a, a
jr Z,l_usb_control_transfer_00102
ld a,(ix+7)
or a,(ix+6)
jr NZ,l_usb_control_transfer_00102
;source-doc/base-drv/transfers.c:57: return USB_ERR_OTHER;
ld l,0x0f
jp l_usb_control_transfer_00114
l_usb_control_transfer_00102:
;source-doc/base-drv/transfers.c:59: critical_begin();
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));
ld e,(ix+4)
ld d,(ix+5)
push bc
ld a,0x08
push af
inc sp
push de
call _ch_write_data
pop af
inc sp
call _ch_issue_token_setup
call _ch_short_wait_int_and_get_status
pop bc
;source-doc/base-drv/transfers.c:66: CHECK(result);
ld a, l
or a, a
jr NZ,l_usb_control_transfer_00113
;source-doc/base-drv/transfers.c:68: const uint16_t length = cmd_packet->wLength;
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))
ld a,(hl)
ld b,a
or a, c
jr Z,l_usb_control_transfer_00116
ld e,(ix+6)
ld d,(ix+7)
ld a,(ix-1)
or a, a
jr Z,l_usb_control_transfer_00118
ld hl,0
add hl, sp
push hl
push bc
push de
call _ch_data_in_transfer
pop af
pop af
pop af
jr l_usb_control_transfer_00119
l_usb_control_transfer_00118:
ld hl,0
add hl, sp
push hl
push bc
push de
call _ch_data_out_transfer
pop af
pop af
pop af
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;
ld l,0x00
l_usb_control_transfer_00117:
;source-doc/base-drv/transfers.c:74: CHECK(result)
ld a, l
or a, a
jr NZ,l_usb_control_transfer_00113
;source-doc/base-drv/transfers.c:76: if (transferIn) {
ld a,(ix-1)
or a, a
jr Z,l_usb_control_transfer_00112
;source-doc/base-drv/transfers.c:77: ch_command(CH_CMD_WR_HOST_DATA);
ld l,0x2c
call _ch_command
;source-doc/base-drv/transfers.c:78: CH376_DATA_PORT = 0;
ld a,0x00
ld bc,_CH376_DATA_PORT
out (c),a
;source-doc/base-drv/transfers.c:79: ch_issue_token_out_ep0();
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 */
call _ch_long_wait_int_and_get_status
;source-doc/base-drv/transfers.c:82: if (result == USB_ERR_OK || result == USB_ERR_STALL) {
ld a,l
or a, a
jr Z,l_usb_control_transfer_00108
sub a,0x02
jr NZ,l_usb_control_transfer_00113
l_usb_control_transfer_00108:
;source-doc/base-drv/transfers.c:83: result = USB_ERR_OK;
ld l,0x00
;source-doc/base-drv/transfers.c:84: goto done;
jr l_usb_control_transfer_00113
;source-doc/base-drv/transfers.c:87: RETURN_CHECK(result);
l_usb_control_transfer_00112:
;source-doc/base-drv/transfers.c:90: ch_issue_token_in_ep0();
call _ch_issue_token_in_ep0
;source-doc/base-drv/transfers.c:91: result = ch_long_wait_int_and_get_status();
call _ch_long_wait_int_and_get_status
;source-doc/base-drv/transfers.c:95: done:
l_usb_control_transfer_00113:
;source-doc/base-drv/transfers.c:96: critical_end();
push hl
call _critical_end
pop hl
;source-doc/base-drv/transfers.c:97: return result;
l_usb_control_transfer_00114:
;source-doc/base-drv/transfers.c:98: }
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) {
; ---------------------------------
; Function usb_dat_in_trnsfer_ext
; ---------------------------------
_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)
ld a,(ix+5)
or a,(ix+4)
jr Z,l_usb_dat_in_trnsfer_ext_00102
ld a,(ix+5)
sub a,0x80
jr NC,l_usb_dat_in_trnsfer_ext_00102
;source-doc/base-drv/transfers.c:103: return USB_BAD_ADDRESS;
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)
ld a,(ix+10)
sub a,0x80
jr NC,l_usb_dat_in_trnsfer_ext_00105
;source-doc/base-drv/transfers.c:106: return USB_BAD_ADDRESS;
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);
ld l,(ix+9)
ld h,(ix+10)
push hl
ld a,(ix+8)
push af
inc sp
ld l,(ix+6)
ld h,(ix+7)
push hl
ld l,(ix+4)
ld h,(ix+5)
push hl
call _usb_data_in_transfer
pop af
pop af
pop af
inc sp
l_usb_dat_in_trnsfer_ext_00106:
;source-doc/base-drv/transfers.c:109: }
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) {
; ---------------------------------
; Function usb_dat_in_trns_n_ext
; ---------------------------------
_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)
ld a,(ix+5)
or a,(ix+4)
jr Z,l_usb_dat_in_trns_n_ext_00102
ld a,(ix+5)
and a,0xc0
jr NZ,l_usb_dat_in_trns_n_ext_00102
;source-doc/base-drv/transfers.c:114: return USB_BAD_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)
ld a,(ix+10)
and a,0xc0
jr NZ,l_usb_dat_in_trns_n_ext_00105
;source-doc/base-drv/transfers.c:117: return USB_BAD_ADDRESS;
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)
ld a,(ix+7)
and a,0xc0
jr NZ,l_usb_dat_in_trns_n_ext_00107
;source-doc/base-drv/transfers.c:120: return USB_BAD_ADDRESS;
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);
ld c,(ix+6)
ld b,(ix+7)
ld l,(ix+9)
ld h,(ix+10)
push hl
ld a,(ix+8)
push af
inc sp
push bc
ld l,(ix+4)
ld h,(ix+5)
push hl
call _usb_data_in_transfer_n
pop af
pop af
pop af
inc sp
l_usb_dat_in_trns_n_ext_00108:
;source-doc/base-drv/transfers.c:123: }
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) {
; ---------------------------------
; Function usb_data_in_transfer
; ---------------------------------
_usb_data_in_transfer:
push ix
ld ix,0
add ix,sp
;source-doc/base-drv/transfers.c:136: critical_begin();
call _critical_begin
;source-doc/base-drv/transfers.c:138: ch_set_usb_address(device_address);
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);
ld l,(ix+9)
ld h,(ix+10)
push hl
ld l,(ix+6)
ld h,(ix+7)
push hl
ld l,(ix+4)
ld h,(ix+5)
push hl
call _ch_data_in_transfer
pop af
pop af
pop af
ld a, l
ld (_result), a
;source-doc/base-drv/transfers.c:142: critical_end();
call _critical_end
;source-doc/base-drv/transfers.c:144: return result;
ld hl,(_result)
;source-doc/base-drv/transfers.c:145: }
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) {
; ---------------------------------
; Function usb_data_in_transfer_n
; ---------------------------------
_usb_data_in_transfer_n:
push ix
ld ix,0
add ix,sp
;source-doc/base-drv/transfers.c:158: critical_begin();
call _critical_begin
;source-doc/base-drv/transfers.c:160: ch_set_usb_address(device_address);
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);
ld l,(ix+9)
ld h,(ix+10)
push hl
ld l,(ix+6)
ld h,(ix+7)
push hl
ld l,(ix+4)
ld h,(ix+5)
push hl
call _ch_data_in_transfer_n
pop af
pop af
pop af
ld a, l
ld (_result), a
;source-doc/base-drv/transfers.c:164: critical_end();
call _critical_end
;source-doc/base-drv/transfers.c:166: return result;
ld hl,(_result)
;source-doc/base-drv/transfers.c:167: }
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) {
; ---------------------------------
; Function usb_data_out_transfer
; ---------------------------------
_usb_data_out_transfer:
push ix
ld ix,0
add ix,sp
;source-doc/base-drv/transfers.c:180: critical_begin();
call _critical_begin
;source-doc/base-drv/transfers.c:182: ch_set_usb_address(device_address);
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);
ld l,(ix+9)
ld h,(ix+10)
push hl
ld l,(ix+6)
ld h,(ix+7)
push hl
ld l,(ix+4)
ld h,(ix+5)
push hl
call _ch_data_out_transfer
pop af
pop af
pop af
ld a, l
ld (_result), a
;source-doc/base-drv/transfers.c:186: critical_end();
call _critical_end
;source-doc/base-drv/transfers.c:188: return result;
ld hl,(_result)
;source-doc/base-drv/transfers.c:189: }
pop ix
ret
SECTION IGNORE

441
Source/HBIOS/ch376-native/base-drv/usb-base-drv.c.asm

@ -1,441 +0,0 @@
;--------------------------------------------------------
; File Created by SDCC : free open source ISO C Compiler
; Version 4.4.0 #14648 (Linux)
;--------------------------------------------------------
; Processed by Z88DK
;--------------------------------------------------------
EXTERN __divschar
EXTERN __divschar_callee
EXTERN __divsint
EXTERN __divsint_callee
EXTERN __divslong
EXTERN __divslong_callee
EXTERN __divslonglong
EXTERN __divslonglong_callee
EXTERN __divsuchar
EXTERN __divsuchar_callee
EXTERN __divuchar
EXTERN __divuchar_callee
EXTERN __divuint
EXTERN __divuint_callee
EXTERN __divulong
EXTERN __divulong_callee
EXTERN __divulonglong
EXTERN __divulonglong_callee
EXTERN __divuschar
EXTERN __divuschar_callee
EXTERN __modschar
EXTERN __modschar_callee
EXTERN __modsint
EXTERN __modsint_callee
EXTERN __modslong
EXTERN __modslong_callee
EXTERN __modslonglong
EXTERN __modslonglong_callee
EXTERN __modsuchar
EXTERN __modsuchar_callee
EXTERN __moduchar
EXTERN __moduchar_callee
EXTERN __moduint
EXTERN __moduint_callee
EXTERN __modulong
EXTERN __modulong_callee
EXTERN __modulonglong
EXTERN __modulonglong_callee
EXTERN __moduschar
EXTERN __moduschar_callee
EXTERN __mulint
EXTERN __mulint_callee
EXTERN __mullong
EXTERN __mullong_callee
EXTERN __mullonglong
EXTERN __mullonglong_callee
EXTERN __mulschar
EXTERN __mulschar_callee
EXTERN __mulsuchar
EXTERN __mulsuchar_callee
EXTERN __muluchar
EXTERN __muluchar_callee
EXTERN __muluschar
EXTERN __muluschar_callee
EXTERN __rlslonglong
EXTERN __rlslonglong_callee
EXTERN __rlulonglong
EXTERN __rlulonglong_callee
EXTERN __rrslonglong
EXTERN __rrslonglong_callee
EXTERN __rrulonglong
EXTERN __rrulonglong_callee
EXTERN ___mulsint2slong
EXTERN ___mulsint2slong_callee
EXTERN ___muluint2ulong
EXTERN ___muluint2ulong_callee
EXTERN ___sdcc_call_hl
EXTERN ___sdcc_call_iy
EXTERN ___sdcc_enter_ix
EXTERN banked_call
EXTERN _banked_ret
EXTERN ___fs2schar
EXTERN ___fs2schar_callee
EXTERN ___fs2sint
EXTERN ___fs2sint_callee
EXTERN ___fs2slong
EXTERN ___fs2slong_callee
EXTERN ___fs2slonglong
EXTERN ___fs2slonglong_callee
EXTERN ___fs2uchar
EXTERN ___fs2uchar_callee
EXTERN ___fs2uint
EXTERN ___fs2uint_callee
EXTERN ___fs2ulong
EXTERN ___fs2ulong_callee
EXTERN ___fs2ulonglong
EXTERN ___fs2ulonglong_callee
EXTERN ___fsadd
EXTERN ___fsadd_callee
EXTERN ___fsdiv
EXTERN ___fsdiv_callee
EXTERN ___fseq
EXTERN ___fseq_callee
EXTERN ___fsgt
EXTERN ___fsgt_callee
EXTERN ___fslt
EXTERN ___fslt_callee
EXTERN ___fsmul
EXTERN ___fsmul_callee
EXTERN ___fsneq
EXTERN ___fsneq_callee
EXTERN ___fssub
EXTERN ___fssub_callee
EXTERN ___schar2fs
EXTERN ___schar2fs_callee
EXTERN ___sint2fs
EXTERN ___sint2fs_callee
EXTERN ___slong2fs
EXTERN ___slong2fs_callee
EXTERN ___slonglong2fs
EXTERN ___slonglong2fs_callee
EXTERN ___uchar2fs
EXTERN ___uchar2fs_callee
EXTERN ___uint2fs
EXTERN ___uint2fs_callee
EXTERN ___ulong2fs
EXTERN ___ulong2fs_callee
EXTERN ___ulonglong2fs
EXTERN ___ulonglong2fs_callee
EXTERN ____sdcc_2_copy_src_mhl_dst_deix
EXTERN ____sdcc_2_copy_src_mhl_dst_bcix
EXTERN ____sdcc_4_copy_src_mhl_dst_deix
EXTERN ____sdcc_4_copy_src_mhl_dst_bcix
EXTERN ____sdcc_4_copy_src_mhl_dst_mbc
EXTERN ____sdcc_4_ldi_nosave_bc
EXTERN ____sdcc_4_ldi_save_bc
EXTERN ____sdcc_4_push_hlix
EXTERN ____sdcc_4_push_mhl
EXTERN ____sdcc_lib_setmem_hl
EXTERN ____sdcc_ll_add_de_bc_hl
EXTERN ____sdcc_ll_add_de_bc_hlix
EXTERN ____sdcc_ll_add_de_hlix_bc
EXTERN ____sdcc_ll_add_de_hlix_bcix
EXTERN ____sdcc_ll_add_deix_bc_hl
EXTERN ____sdcc_ll_add_deix_hlix
EXTERN ____sdcc_ll_add_hlix_bc_deix
EXTERN ____sdcc_ll_add_hlix_deix_bc
EXTERN ____sdcc_ll_add_hlix_deix_bcix
EXTERN ____sdcc_ll_asr_hlix_a
EXTERN ____sdcc_ll_asr_mbc_a
EXTERN ____sdcc_ll_copy_src_de_dst_hlix
EXTERN ____sdcc_ll_copy_src_de_dst_hlsp
EXTERN ____sdcc_ll_copy_src_deix_dst_hl
EXTERN ____sdcc_ll_copy_src_deix_dst_hlix
EXTERN ____sdcc_ll_copy_src_deixm_dst_hlsp
EXTERN ____sdcc_ll_copy_src_desp_dst_hlsp
EXTERN ____sdcc_ll_copy_src_hl_dst_de
EXTERN ____sdcc_ll_copy_src_hlsp_dst_de
EXTERN ____sdcc_ll_copy_src_hlsp_dst_deixm
EXTERN ____sdcc_ll_lsl_hlix_a
EXTERN ____sdcc_ll_lsl_mbc_a
EXTERN ____sdcc_ll_lsr_hlix_a
EXTERN ____sdcc_ll_lsr_mbc_a
EXTERN ____sdcc_ll_push_hlix
EXTERN ____sdcc_ll_push_mhl
EXTERN ____sdcc_ll_sub_de_bc_hl
EXTERN ____sdcc_ll_sub_de_bc_hlix
EXTERN ____sdcc_ll_sub_de_hlix_bc
EXTERN ____sdcc_ll_sub_de_hlix_bcix
EXTERN ____sdcc_ll_sub_deix_bc_hl
EXTERN ____sdcc_ll_sub_deix_hlix
EXTERN ____sdcc_ll_sub_hlix_bc_deix
EXTERN ____sdcc_ll_sub_hlix_deix_bc
EXTERN ____sdcc_ll_sub_hlix_deix_bcix
EXTERN ____sdcc_load_debc_deix
EXTERN ____sdcc_load_dehl_deix
EXTERN ____sdcc_load_debc_mhl
EXTERN ____sdcc_load_hlde_mhl
EXTERN ____sdcc_store_dehl_bcix
EXTERN ____sdcc_store_debc_hlix
EXTERN ____sdcc_store_debc_mhl
EXTERN ____sdcc_cpu_pop_ei
EXTERN ____sdcc_cpu_pop_ei_jp
EXTERN ____sdcc_cpu_push_di
EXTERN ____sdcc_outi
EXTERN ____sdcc_outi_128
EXTERN ____sdcc_outi_256
EXTERN ____sdcc_ldi
EXTERN ____sdcc_ldi_128
EXTERN ____sdcc_ldi_256
EXTERN ____sdcc_4_copy_srcd_hlix_dst_deix
EXTERN ____sdcc_4_and_src_mbc_mhl_dst_deix
EXTERN ____sdcc_4_or_src_mbc_mhl_dst_deix
EXTERN ____sdcc_4_xor_src_mbc_mhl_dst_deix
EXTERN ____sdcc_4_or_src_dehl_dst_bcix
EXTERN ____sdcc_4_xor_src_dehl_dst_bcix
EXTERN ____sdcc_4_and_src_dehl_dst_bcix
EXTERN ____sdcc_4_xor_src_mbc_mhl_dst_debc
EXTERN ____sdcc_4_or_src_mbc_mhl_dst_debc
EXTERN ____sdcc_4_and_src_mbc_mhl_dst_debc
EXTERN ____sdcc_4_cpl_src_mhl_dst_debc
EXTERN ____sdcc_4_xor_src_debc_mhl_dst_debc
EXTERN ____sdcc_4_or_src_debc_mhl_dst_debc
EXTERN ____sdcc_4_and_src_debc_mhl_dst_debc
EXTERN ____sdcc_4_and_src_debc_hlix_dst_debc
EXTERN ____sdcc_4_or_src_debc_hlix_dst_debc
EXTERN ____sdcc_4_xor_src_debc_hlix_dst_debc
;--------------------------------------------------------
; Public variables in this module
;--------------------------------------------------------
GLOBAL _chnative_seek
;--------------------------------------------------------
; Externals used
;--------------------------------------------------------
GLOBAL _usbdev_dat_in_trnsfer_0
GLOBAL _usbdev_dat_in_trnsfer
GLOBAL _usbdev_bulk_in_transfer
GLOBAL _usbdev_blk_out_trnsfer
GLOBAL _usbdev_control_transfer
GLOBAL _usb_data_out_transfer
GLOBAL _usb_data_in_transfer_n
GLOBAL _usb_data_in_transfer
GLOBAL _usb_control_transfer
GLOBAL _ch_issue_token_in_ep0
GLOBAL _ch_issue_token_out_ep0
GLOBAL _ch_issue_token_setup
GLOBAL _ch_data_out_transfer
GLOBAL _ch_data_in_transfer_n
GLOBAL _ch_data_in_transfer
GLOBAL _ch_control_transfer_set_config
GLOBAL _ch_control_transfer_set_address
GLOBAL _ch_control_transfer_request_descriptor
GLOBAL _ch_set_usb_address
GLOBAL _ch_write_data
GLOBAL _ch_cmd_get_ic_version
GLOBAL _ch_cmd_set_usb_mode
GLOBAL _ch_probe
GLOBAL _ch_cmd_reset_all
GLOBAL _ch_read_data
GLOBAL _ch_very_short_wait_int_and_get_status
GLOBAL _ch_short_wait_int_and_get_status
GLOBAL _ch_long_wait_int_and_get_status
GLOBAL _ch_get_status
GLOBAL _ch_command
GLOBAL _delay_medium
GLOBAL _delay_short
GLOBAL _delay_20ms
GLOBAL _printf
GLOBAL _delay
GLOBAL _ulltoa_callee
GLOBAL _ulltoa
GLOBAL _strtoull_callee
GLOBAL _strtoull
GLOBAL _strtoll_callee
GLOBAL _strtoll
GLOBAL _lltoa_callee
GLOBAL _lltoa
GLOBAL _llabs_callee
GLOBAL _llabs
GLOBAL __lldivu__callee
GLOBAL __lldivu_
GLOBAL __lldiv__callee
GLOBAL __lldiv_
GLOBAL _atoll_callee
GLOBAL _atoll
GLOBAL _realloc_unlocked_callee
GLOBAL _realloc_unlocked
GLOBAL _malloc_unlocked_fastcall
GLOBAL _malloc_unlocked
GLOBAL _free_unlocked_fastcall
GLOBAL _free_unlocked
GLOBAL _calloc_unlocked_callee
GLOBAL _calloc_unlocked
GLOBAL _aligned_alloc_unlocked_callee
GLOBAL _aligned_alloc_unlocked
GLOBAL _realloc_callee
GLOBAL _realloc
GLOBAL _malloc_fastcall
GLOBAL _malloc
GLOBAL _free_fastcall
GLOBAL _free
GLOBAL _calloc_callee
GLOBAL _calloc
GLOBAL _aligned_alloc_callee
GLOBAL _aligned_alloc
GLOBAL _utoa_callee
GLOBAL _utoa
GLOBAL _ultoa_callee
GLOBAL _ultoa
GLOBAL _system_fastcall
GLOBAL _system
GLOBAL _strtoul_callee
GLOBAL _strtoul
GLOBAL _strtol_callee
GLOBAL _strtol
GLOBAL _strtof_callee
GLOBAL _strtof
GLOBAL _strtod_callee
GLOBAL _strtod
GLOBAL _srand_fastcall
GLOBAL _srand
GLOBAL _rand
GLOBAL _quick_exit_fastcall
GLOBAL _quick_exit
GLOBAL _qsort_callee
GLOBAL _qsort
GLOBAL _ltoa_callee
GLOBAL _ltoa
GLOBAL _labs_fastcall
GLOBAL _labs
GLOBAL _itoa_callee
GLOBAL _itoa
GLOBAL _ftoh_callee
GLOBAL _ftoh
GLOBAL _ftog_callee
GLOBAL _ftog
GLOBAL _ftoe_callee
GLOBAL _ftoe
GLOBAL _ftoa_callee
GLOBAL _ftoa
GLOBAL _exit_fastcall
GLOBAL _exit
GLOBAL _dtoh_callee
GLOBAL _dtoh
GLOBAL _dtog_callee
GLOBAL _dtog
GLOBAL _dtoe_callee
GLOBAL _dtoe
GLOBAL _dtoa_callee
GLOBAL _dtoa
GLOBAL _bsearch_callee
GLOBAL _bsearch
GLOBAL _atol_fastcall
GLOBAL _atol
GLOBAL _atoi_fastcall
GLOBAL _atoi
GLOBAL _atof_fastcall
GLOBAL _atof
GLOBAL _atexit_fastcall
GLOBAL _atexit
GLOBAL _at_quick_exit_fastcall
GLOBAL _at_quick_exit
GLOBAL _abs_fastcall
GLOBAL _abs
GLOBAL _abort
GLOBAL __strtou__callee
GLOBAL __strtou_
GLOBAL __strtoi__callee
GLOBAL __strtoi_
GLOBAL __random_uniform_xor_8__fastcall
GLOBAL __random_uniform_xor_8_
GLOBAL __random_uniform_xor_32__fastcall
GLOBAL __random_uniform_xor_32_
GLOBAL __random_uniform_cmwc_8__fastcall
GLOBAL __random_uniform_cmwc_8_
GLOBAL __shellsort__callee
GLOBAL __shellsort_
GLOBAL __quicksort__callee
GLOBAL __quicksort_
GLOBAL __insertion_sort__callee
GLOBAL __insertion_sort_
GLOBAL __ldivu__callee
GLOBAL __ldivu_
GLOBAL __ldiv__callee
GLOBAL __ldiv_
GLOBAL __divu__callee
GLOBAL __divu_
GLOBAL __div__callee
GLOBAL __div_
GLOBAL _result
;--------------------------------------------------------
; special function registers
;--------------------------------------------------------
defc _CH376_DATA_PORT = 0xff88
defc _CH376_COMMAND_PORT = 0xff89
defc _USB_MODULE_LEDS = 0xff8a
;--------------------------------------------------------
; ram data
;--------------------------------------------------------
SECTION bss_compiler
;--------------------------------------------------------
; ram data
;--------------------------------------------------------
IF 0
; .area _INITIALIZED removed by z88dk
ENDIF
;--------------------------------------------------------
; absolute external ram data
;--------------------------------------------------------
SECTION IGNORE
;--------------------------------------------------------
; global & static initialisations
;--------------------------------------------------------
SECTION code_crt_init
;--------------------------------------------------------
; Home
;--------------------------------------------------------
SECTION IGNORE
;--------------------------------------------------------
; code
;--------------------------------------------------------
SECTION code_compiler
;source-doc/base-drv/usb-base-drv.c:6: uint8_t chnative_seek(const uint32_t lba, device_config_storage *const storage_device) __sdcccall(1) {
; ---------------------------------
; Function chnative_seek
; ---------------------------------
_chnative_seek:
push ix
;source-doc/base-drv/usb-base-drv.c:7: storage_device->current_lba = lba;
ld ix,0
add ix,sp
ld c,(ix+4)
ld b,(ix+5)
push bc
ld a,(ix-2)
add a,0x0c
ld c,l
ld b,h
ld l, a
ld a,(ix-1)
adc a,0x00
ld h, a
ld (hl), e
inc hl
ld (hl), d
inc hl
ld (hl), c
inc hl
ld (hl), b
;source-doc/base-drv/usb-base-drv.c:8: return 0;
xor a, a
;source-doc/base-drv/usb-base-drv.c:9: }
ld sp, ix
pop ix
pop hl
pop bc
jp (hl)
SECTION IGNORE

605
Source/HBIOS/ch376-native/base-drv/usb_state.c.asm

@ -1,605 +0,0 @@
;--------------------------------------------------------
; File Created by SDCC : free open source ISO C Compiler
; Version 4.4.0 #14648 (Linux)
;--------------------------------------------------------
; Processed by Z88DK
;--------------------------------------------------------
EXTERN __divschar
EXTERN __divschar_callee
EXTERN __divsint
EXTERN __divsint_callee
EXTERN __divslong
EXTERN __divslong_callee
EXTERN __divslonglong
EXTERN __divslonglong_callee
EXTERN __divsuchar
EXTERN __divsuchar_callee
EXTERN __divuchar
EXTERN __divuchar_callee
EXTERN __divuint
EXTERN __divuint_callee
EXTERN __divulong
EXTERN __divulong_callee
EXTERN __divulonglong
EXTERN __divulonglong_callee
EXTERN __divuschar
EXTERN __divuschar_callee
EXTERN __modschar
EXTERN __modschar_callee
EXTERN __modsint
EXTERN __modsint_callee
EXTERN __modslong
EXTERN __modslong_callee
EXTERN __modslonglong
EXTERN __modslonglong_callee
EXTERN __modsuchar
EXTERN __modsuchar_callee
EXTERN __moduchar
EXTERN __moduchar_callee
EXTERN __moduint
EXTERN __moduint_callee
EXTERN __modulong
EXTERN __modulong_callee
EXTERN __modulonglong
EXTERN __modulonglong_callee
EXTERN __moduschar
EXTERN __moduschar_callee
EXTERN __mulint
EXTERN __mulint_callee
EXTERN __mullong
EXTERN __mullong_callee
EXTERN __mullonglong
EXTERN __mullonglong_callee
EXTERN __mulschar
EXTERN __mulschar_callee
EXTERN __mulsuchar
EXTERN __mulsuchar_callee
EXTERN __muluchar
EXTERN __muluchar_callee
EXTERN __muluschar
EXTERN __muluschar_callee
EXTERN __rlslonglong
EXTERN __rlslonglong_callee
EXTERN __rlulonglong
EXTERN __rlulonglong_callee
EXTERN __rrslonglong
EXTERN __rrslonglong_callee
EXTERN __rrulonglong
EXTERN __rrulonglong_callee
EXTERN ___mulsint2slong
EXTERN ___mulsint2slong_callee
EXTERN ___muluint2ulong
EXTERN ___muluint2ulong_callee
EXTERN ___sdcc_call_hl
EXTERN ___sdcc_call_iy
EXTERN ___sdcc_enter_ix
EXTERN banked_call
EXTERN _banked_ret
EXTERN ___fs2schar
EXTERN ___fs2schar_callee
EXTERN ___fs2sint
EXTERN ___fs2sint_callee
EXTERN ___fs2slong
EXTERN ___fs2slong_callee
EXTERN ___fs2slonglong
EXTERN ___fs2slonglong_callee
EXTERN ___fs2uchar
EXTERN ___fs2uchar_callee
EXTERN ___fs2uint
EXTERN ___fs2uint_callee
EXTERN ___fs2ulong
EXTERN ___fs2ulong_callee
EXTERN ___fs2ulonglong
EXTERN ___fs2ulonglong_callee
EXTERN ___fsadd
EXTERN ___fsadd_callee
EXTERN ___fsdiv
EXTERN ___fsdiv_callee
EXTERN ___fseq
EXTERN ___fseq_callee
EXTERN ___fsgt
EXTERN ___fsgt_callee
EXTERN ___fslt
EXTERN ___fslt_callee
EXTERN ___fsmul
EXTERN ___fsmul_callee
EXTERN ___fsneq
EXTERN ___fsneq_callee
EXTERN ___fssub
EXTERN ___fssub_callee
EXTERN ___schar2fs
EXTERN ___schar2fs_callee
EXTERN ___sint2fs
EXTERN ___sint2fs_callee
EXTERN ___slong2fs
EXTERN ___slong2fs_callee
EXTERN ___slonglong2fs
EXTERN ___slonglong2fs_callee
EXTERN ___uchar2fs
EXTERN ___uchar2fs_callee
EXTERN ___uint2fs
EXTERN ___uint2fs_callee
EXTERN ___ulong2fs
EXTERN ___ulong2fs_callee
EXTERN ___ulonglong2fs
EXTERN ___ulonglong2fs_callee
EXTERN ____sdcc_2_copy_src_mhl_dst_deix
EXTERN ____sdcc_2_copy_src_mhl_dst_bcix
EXTERN ____sdcc_4_copy_src_mhl_dst_deix
EXTERN ____sdcc_4_copy_src_mhl_dst_bcix
EXTERN ____sdcc_4_copy_src_mhl_dst_mbc
EXTERN ____sdcc_4_ldi_nosave_bc
EXTERN ____sdcc_4_ldi_save_bc
EXTERN ____sdcc_4_push_hlix
EXTERN ____sdcc_4_push_mhl
EXTERN ____sdcc_lib_setmem_hl
EXTERN ____sdcc_ll_add_de_bc_hl
EXTERN ____sdcc_ll_add_de_bc_hlix
EXTERN ____sdcc_ll_add_de_hlix_bc
EXTERN ____sdcc_ll_add_de_hlix_bcix
EXTERN ____sdcc_ll_add_deix_bc_hl
EXTERN ____sdcc_ll_add_deix_hlix
EXTERN ____sdcc_ll_add_hlix_bc_deix
EXTERN ____sdcc_ll_add_hlix_deix_bc
EXTERN ____sdcc_ll_add_hlix_deix_bcix
EXTERN ____sdcc_ll_asr_hlix_a
EXTERN ____sdcc_ll_asr_mbc_a
EXTERN ____sdcc_ll_copy_src_de_dst_hlix
EXTERN ____sdcc_ll_copy_src_de_dst_hlsp
EXTERN ____sdcc_ll_copy_src_deix_dst_hl
EXTERN ____sdcc_ll_copy_src_deix_dst_hlix
EXTERN ____sdcc_ll_copy_src_deixm_dst_hlsp
EXTERN ____sdcc_ll_copy_src_desp_dst_hlsp
EXTERN ____sdcc_ll_copy_src_hl_dst_de
EXTERN ____sdcc_ll_copy_src_hlsp_dst_de
EXTERN ____sdcc_ll_copy_src_hlsp_dst_deixm
EXTERN ____sdcc_ll_lsl_hlix_a
EXTERN ____sdcc_ll_lsl_mbc_a
EXTERN ____sdcc_ll_lsr_hlix_a
EXTERN ____sdcc_ll_lsr_mbc_a
EXTERN ____sdcc_ll_push_hlix
EXTERN ____sdcc_ll_push_mhl
EXTERN ____sdcc_ll_sub_de_bc_hl
EXTERN ____sdcc_ll_sub_de_bc_hlix
EXTERN ____sdcc_ll_sub_de_hlix_bc
EXTERN ____sdcc_ll_sub_de_hlix_bcix
EXTERN ____sdcc_ll_sub_deix_bc_hl
EXTERN ____sdcc_ll_sub_deix_hlix
EXTERN ____sdcc_ll_sub_hlix_bc_deix
EXTERN ____sdcc_ll_sub_hlix_deix_bc
EXTERN ____sdcc_ll_sub_hlix_deix_bcix
EXTERN ____sdcc_load_debc_deix
EXTERN ____sdcc_load_dehl_deix
EXTERN ____sdcc_load_debc_mhl
EXTERN ____sdcc_load_hlde_mhl
EXTERN ____sdcc_store_dehl_bcix
EXTERN ____sdcc_store_debc_hlix
EXTERN ____sdcc_store_debc_mhl
EXTERN ____sdcc_cpu_pop_ei
EXTERN ____sdcc_cpu_pop_ei_jp
EXTERN ____sdcc_cpu_push_di
EXTERN ____sdcc_outi
EXTERN ____sdcc_outi_128
EXTERN ____sdcc_outi_256
EXTERN ____sdcc_ldi
EXTERN ____sdcc_ldi_128
EXTERN ____sdcc_ldi_256
EXTERN ____sdcc_4_copy_srcd_hlix_dst_deix
EXTERN ____sdcc_4_and_src_mbc_mhl_dst_deix
EXTERN ____sdcc_4_or_src_mbc_mhl_dst_deix
EXTERN ____sdcc_4_xor_src_mbc_mhl_dst_deix
EXTERN ____sdcc_4_or_src_dehl_dst_bcix
EXTERN ____sdcc_4_xor_src_dehl_dst_bcix
EXTERN ____sdcc_4_and_src_dehl_dst_bcix
EXTERN ____sdcc_4_xor_src_mbc_mhl_dst_debc
EXTERN ____sdcc_4_or_src_mbc_mhl_dst_debc
EXTERN ____sdcc_4_and_src_mbc_mhl_dst_debc
EXTERN ____sdcc_4_cpl_src_mhl_dst_debc
EXTERN ____sdcc_4_xor_src_debc_mhl_dst_debc
EXTERN ____sdcc_4_or_src_debc_mhl_dst_debc
EXTERN ____sdcc_4_and_src_debc_mhl_dst_debc
EXTERN ____sdcc_4_and_src_debc_hlix_dst_debc
EXTERN ____sdcc_4_or_src_debc_hlix_dst_debc
EXTERN ____sdcc_4_xor_src_debc_hlix_dst_debc
;--------------------------------------------------------
; Public variables in this module
;--------------------------------------------------------
GLOBAL _device_config_sizes
GLOBAL _find_device_config
GLOBAL _find_first_free
GLOBAL _first_device_config
GLOBAL _next_device_config
GLOBAL _get_usb_device_config
;--------------------------------------------------------
; Externals used
;--------------------------------------------------------
GLOBAL _get_number_of_usb_drives
GLOBAL _usbtrn_clear_endpoint_halt
GLOBAL _usbtrn_set_address
GLOBAL _usbtrn_set_configuration
GLOBAL _usbtrn_gfull_cfg_desc
GLOBAL _usbtrn_get_config_descriptor
GLOBAL _usbtrn_get_descriptor2
GLOBAL _usbtrn_get_descriptor
GLOBAL _usbdev_dat_in_trnsfer_0
GLOBAL _usbdev_dat_in_trnsfer
GLOBAL _usbdev_bulk_in_transfer
GLOBAL _usbdev_blk_out_trnsfer
GLOBAL _usbdev_control_transfer
GLOBAL _usb_data_out_transfer
GLOBAL _usb_data_in_transfer_n
GLOBAL _usb_data_in_transfer
GLOBAL _usb_control_transfer
GLOBAL _ch_issue_token_in_ep0
GLOBAL _ch_issue_token_out_ep0
GLOBAL _ch_issue_token_setup
GLOBAL _ch_data_out_transfer
GLOBAL _ch_data_in_transfer_n
GLOBAL _ch_data_in_transfer
GLOBAL _ch_control_transfer_set_config
GLOBAL _ch_control_transfer_set_address
GLOBAL _ch_control_transfer_request_descriptor
GLOBAL _ch_set_usb_address
GLOBAL _ch_write_data
GLOBAL _ch_cmd_get_ic_version
GLOBAL _ch_cmd_set_usb_mode
GLOBAL _ch_probe
GLOBAL _ch_cmd_reset_all
GLOBAL _ch_read_data
GLOBAL _ch_very_short_wait_int_and_get_status
GLOBAL _ch_short_wait_int_and_get_status
GLOBAL _ch_long_wait_int_and_get_status
GLOBAL _ch_get_status
GLOBAL _ch_command
GLOBAL _delay_medium
GLOBAL _delay_short
GLOBAL _delay_20ms
GLOBAL _printf
GLOBAL _delay
GLOBAL _ulltoa_callee
GLOBAL _ulltoa
GLOBAL _strtoull_callee
GLOBAL _strtoull
GLOBAL _strtoll_callee
GLOBAL _strtoll
GLOBAL _lltoa_callee
GLOBAL _lltoa
GLOBAL _llabs_callee
GLOBAL _llabs
GLOBAL __lldivu__callee
GLOBAL __lldivu_
GLOBAL __lldiv__callee
GLOBAL __lldiv_
GLOBAL _atoll_callee
GLOBAL _atoll
GLOBAL _realloc_unlocked_callee
GLOBAL _realloc_unlocked
GLOBAL _malloc_unlocked_fastcall
GLOBAL _malloc_unlocked
GLOBAL _free_unlocked_fastcall
GLOBAL _free_unlocked
GLOBAL _calloc_unlocked_callee
GLOBAL _calloc_unlocked
GLOBAL _aligned_alloc_unlocked_callee
GLOBAL _aligned_alloc_unlocked
GLOBAL _realloc_callee
GLOBAL _realloc
GLOBAL _malloc_fastcall
GLOBAL _malloc
GLOBAL _free_fastcall
GLOBAL _free
GLOBAL _calloc_callee
GLOBAL _calloc
GLOBAL _aligned_alloc_callee
GLOBAL _aligned_alloc
GLOBAL _utoa_callee
GLOBAL _utoa
GLOBAL _ultoa_callee
GLOBAL _ultoa
GLOBAL _system_fastcall
GLOBAL _system
GLOBAL _strtoul_callee
GLOBAL _strtoul
GLOBAL _strtol_callee
GLOBAL _strtol
GLOBAL _strtof_callee
GLOBAL _strtof
GLOBAL _strtod_callee
GLOBAL _strtod
GLOBAL _srand_fastcall
GLOBAL _srand
GLOBAL _rand
GLOBAL _quick_exit_fastcall
GLOBAL _quick_exit
GLOBAL _qsort_callee
GLOBAL _qsort
GLOBAL _ltoa_callee
GLOBAL _ltoa
GLOBAL _labs_fastcall
GLOBAL _labs
GLOBAL _itoa_callee
GLOBAL _itoa
GLOBAL _ftoh_callee
GLOBAL _ftoh
GLOBAL _ftog_callee
GLOBAL _ftog
GLOBAL _ftoe_callee
GLOBAL _ftoe
GLOBAL _ftoa_callee
GLOBAL _ftoa
GLOBAL _exit_fastcall
GLOBAL _exit
GLOBAL _dtoh_callee
GLOBAL _dtoh
GLOBAL _dtog_callee
GLOBAL _dtog
GLOBAL _dtoe_callee
GLOBAL _dtoe
GLOBAL _dtoa_callee
GLOBAL _dtoa
GLOBAL _bsearch_callee
GLOBAL _bsearch
GLOBAL _atol_fastcall
GLOBAL _atol
GLOBAL _atoi_fastcall
GLOBAL _atoi
GLOBAL _atof_fastcall
GLOBAL _atof
GLOBAL _atexit_fastcall
GLOBAL _atexit
GLOBAL _at_quick_exit_fastcall
GLOBAL _at_quick_exit
GLOBAL _abs_fastcall
GLOBAL _abs
GLOBAL _abort
GLOBAL __strtou__callee
GLOBAL __strtou_
GLOBAL __strtoi__callee
GLOBAL __strtoi_
GLOBAL __random_uniform_xor_8__fastcall
GLOBAL __random_uniform_xor_8_
GLOBAL __random_uniform_xor_32__fastcall
GLOBAL __random_uniform_xor_32_
GLOBAL __random_uniform_cmwc_8__fastcall
GLOBAL __random_uniform_cmwc_8_
GLOBAL __shellsort__callee
GLOBAL __shellsort_
GLOBAL __quicksort__callee
GLOBAL __quicksort_
GLOBAL __insertion_sort__callee
GLOBAL __insertion_sort_
GLOBAL __ldivu__callee
GLOBAL __ldivu_
GLOBAL __ldiv__callee
GLOBAL __ldiv_
GLOBAL __divu__callee
GLOBAL __divu_
GLOBAL __div__callee
GLOBAL __div_
GLOBAL _x
GLOBAL _result
;--------------------------------------------------------
; special function registers
;--------------------------------------------------------
defc _CH376_DATA_PORT = 0xff88
defc _CH376_COMMAND_PORT = 0xff89
defc _USB_MODULE_LEDS = 0xff8a
;--------------------------------------------------------
; ram data
;--------------------------------------------------------
SECTION bss_compiler
;--------------------------------------------------------
; ram data
;--------------------------------------------------------
IF 0
; .area _INITIALIZED removed by z88dk
ENDIF
;--------------------------------------------------------
; absolute external ram data
;--------------------------------------------------------
SECTION IGNORE
;--------------------------------------------------------
; global & static initialisations
;--------------------------------------------------------
SECTION code_crt_init
;--------------------------------------------------------
; Home
;--------------------------------------------------------
SECTION IGNORE
;--------------------------------------------------------
; code
;--------------------------------------------------------
SECTION code_compiler
;source-doc/base-drv/usb_state.c:13: device_config *find_device_config(const usb_device_type requested_type) {
; ---------------------------------
; Function find_device_config
; ---------------------------------
_find_device_config:
push ix
ld ix,0
add ix,sp
;source-doc/base-drv/usb_state.c:14: _usb_state *const p = get_usb_work_area();
;source-doc/base-drv/usb_state.c:16: const device_config *p_config = first_device_config(p);
ld hl,_x
call _first_device_config
;source-doc/base-drv/usb_state.c:17: while (p_config) {
l_find_device_config_00103:
ld a, d
or a, e
jr Z,l_find_device_config_00105
;source-doc/base-drv/usb_state.c:18: const uint8_t type = p_config->type;
ld l, e
ld h, d
ld a, (hl)
and a,0x0f
ld c, a
;source-doc/base-drv/usb_state.c:20: if (type == requested_type)
ld a,(ix+4)
sub a, c
jr NZ,l_find_device_config_00102
;source-doc/base-drv/usb_state.c:21: return (device_config *)p_config;
ex de, hl
jr l_find_device_config_00106
l_find_device_config_00102:
;source-doc/base-drv/usb_state.c:23: p_config = next_device_config(p, p_config);
ld hl,_x
call _next_device_config
jr l_find_device_config_00103
l_find_device_config_00105:
;source-doc/base-drv/usb_state.c:26: return NULL;
ld hl,0x0000
l_find_device_config_00106:
;source-doc/base-drv/usb_state.c:27: }
pop ix
ret
SECTION rodata_compiler
_device_config_sizes:
DEFB +0x00
DEFB +0x10
DEFB +0x10
DEFB +0x0c
DEFB +0x06
DEFB 0x00
DEFB 0x00
SECTION code_compiler
;source-doc/base-drv/usb_state.c:30: device_config *find_first_free(void) {
; ---------------------------------
; Function find_first_free
; ---------------------------------
_find_first_free:
;source-doc/base-drv/usb_state.c:31: _usb_state *const boot_state = get_usb_work_area();
;source-doc/base-drv/usb_state.c:34: device_config *p = first_device_config(boot_state);
ld hl,_x
call _first_device_config
;source-doc/base-drv/usb_state.c:35: while (p) {
l_find_first_free_00103:
ld a, d
or a, e
jr Z,l_find_first_free_00105
;source-doc/base-drv/usb_state.c:36: if (p->type == 0)
ld l, e
ld h, d
ld a, (hl)
and a,0x0f
jr NZ,l_find_first_free_00102
;source-doc/base-drv/usb_state.c:37: return p;
ex de, hl
jr l_find_first_free_00106
l_find_first_free_00102:
;source-doc/base-drv/usb_state.c:39: p = next_device_config(boot_state, p);
ld hl,_x
call _next_device_config
jr l_find_first_free_00103
l_find_first_free_00105:
;source-doc/base-drv/usb_state.c:42: return NULL;
ld hl,0x0000
l_find_first_free_00106:
;source-doc/base-drv/usb_state.c:43: }
ret
;source-doc/base-drv/usb_state.c:45: device_config *first_device_config(const _usb_state *const p) __sdcccall(1) { return (device_config *)&p->device_configs[0]; }
; ---------------------------------
; Function first_device_config
; ---------------------------------
_first_device_config:
ex de, hl
inc de
inc de
ret
;source-doc/base-drv/usb_state.c:47: device_config *next_device_config(const _usb_state *const usb_state, const device_config *const p) __sdcccall(1) {
; ---------------------------------
; Function next_device_config
; ---------------------------------
_next_device_config:
ld c, l
ld b, h
;source-doc/base-drv/usb_state.c:48: if (p->type == 0)
ld l, e
ld h, d
ld a, (hl)
and a,0x0f
jr NZ,l_next_device_config_00102
;source-doc/base-drv/usb_state.c:49: return NULL;
ld de,0x0000
jr l_next_device_config_00105
l_next_device_config_00102:
;source-doc/base-drv/usb_state.c:51: const uint8_t size = device_config_sizes[p->type];
ld l, e
ld h, d
ld a, (hl)
and a,0x0f
add a, +((_device_config_sizes) & 0xFF)
ld l, a
ld a,0x00
adc a, +((_device_config_sizes) / 256)
ld h, a
ld l, (hl)
;source-doc/base-drv/usb_state.c:58: const uint8_t *_p = (uint8_t *)p;
;source-doc/base-drv/usb_state.c:59: device_config *const result = (device_config *)(_p + size);
ld h,0x00
add hl, de
ex de, hl
;source-doc/base-drv/usb_state.c:61: if (result >= (device_config *)&usb_state->device_configs_end)
ld hl,0x0062
add hl, bc
ld a, e
sub a, l
ld a, d
sbc a, h
ret C
;source-doc/base-drv/usb_state.c:62: return NULL;
ld de,0x0000
;source-doc/base-drv/usb_state.c:64: return result;
l_next_device_config_00105:
;source-doc/base-drv/usb_state.c:65: }
ret
;source-doc/base-drv/usb_state.c:68: device_config *get_usb_device_config(const uint8_t device_index) __sdcccall(1) {
; ---------------------------------
; Function get_usb_device_config
; ---------------------------------
_get_usb_device_config:
ld c, a
;source-doc/base-drv/usb_state.c:69: const _usb_state *const usb_state = get_usb_work_area();
;source-doc/base-drv/usb_state.c:73: for (device_config *p = first_device_config(usb_state); p; p = next_device_config(usb_state, p)) {
push bc
ld hl,_x
call _first_device_config
pop bc
ld b,0x01
l_get_usb_device_config_00107:
ld a, d
or a, e
jr Z,l_get_usb_device_config_00105
;source-doc/base-drv/usb_state.c:74: if (p->type != USB_NOT_SUPPORTED) {
ld l, e
ld h, d
ld a, (hl)
and a,0x0f
jr Z,l_get_usb_device_config_00108
;source-doc/base-drv/usb_state.c:75: if (counter == device_index)
ld a, c
sub a, b
;source-doc/base-drv/usb_state.c:76: return p;
jr Z,l_get_usb_device_config_00109
;source-doc/base-drv/usb_state.c:77: counter++;
inc b
l_get_usb_device_config_00108:
;source-doc/base-drv/usb_state.c:73: for (device_config *p = first_device_config(usb_state); p; p = next_device_config(usb_state, p)) {
push bc
ld hl,_x
call _next_device_config
pop bc
jr l_get_usb_device_config_00107
l_get_usb_device_config_00105:
;source-doc/base-drv/usb_state.c:81: return NULL; // is not a usb device
ld de,0x0000
l_get_usb_device_config_00109:
;source-doc/base-drv/usb_state.c:82: }
ret
SECTION IGNORE

520
Source/HBIOS/ch376-native/base-drv/work-area.c.asm

@ -1,520 +0,0 @@
;--------------------------------------------------------
; File Created by SDCC : free open source ISO C Compiler
; Version 4.4.0 #14648 (Linux)
;--------------------------------------------------------
; Processed by Z88DK
;--------------------------------------------------------
EXTERN __divschar
EXTERN __divschar_callee
EXTERN __divsint
EXTERN __divsint_callee
EXTERN __divslong
EXTERN __divslong_callee
EXTERN __divslonglong
EXTERN __divslonglong_callee
EXTERN __divsuchar
EXTERN __divsuchar_callee
EXTERN __divuchar
EXTERN __divuchar_callee
EXTERN __divuint
EXTERN __divuint_callee
EXTERN __divulong
EXTERN __divulong_callee
EXTERN __divulonglong
EXTERN __divulonglong_callee
EXTERN __divuschar
EXTERN __divuschar_callee
EXTERN __modschar
EXTERN __modschar_callee
EXTERN __modsint
EXTERN __modsint_callee
EXTERN __modslong
EXTERN __modslong_callee
EXTERN __modslonglong
EXTERN __modslonglong_callee
EXTERN __modsuchar
EXTERN __modsuchar_callee
EXTERN __moduchar
EXTERN __moduchar_callee
EXTERN __moduint
EXTERN __moduint_callee
EXTERN __modulong
EXTERN __modulong_callee
EXTERN __modulonglong
EXTERN __modulonglong_callee
EXTERN __moduschar
EXTERN __moduschar_callee
EXTERN __mulint
EXTERN __mulint_callee
EXTERN __mullong
EXTERN __mullong_callee
EXTERN __mullonglong
EXTERN __mullonglong_callee
EXTERN __mulschar
EXTERN __mulschar_callee
EXTERN __mulsuchar
EXTERN __mulsuchar_callee
EXTERN __muluchar
EXTERN __muluchar_callee
EXTERN __muluschar
EXTERN __muluschar_callee
EXTERN __rlslonglong
EXTERN __rlslonglong_callee
EXTERN __rlulonglong
EXTERN __rlulonglong_callee
EXTERN __rrslonglong
EXTERN __rrslonglong_callee
EXTERN __rrulonglong
EXTERN __rrulonglong_callee
EXTERN ___mulsint2slong
EXTERN ___mulsint2slong_callee
EXTERN ___muluint2ulong
EXTERN ___muluint2ulong_callee
EXTERN ___sdcc_call_hl
EXTERN ___sdcc_call_iy
EXTERN ___sdcc_enter_ix
EXTERN banked_call
EXTERN _banked_ret
EXTERN ___fs2schar
EXTERN ___fs2schar_callee
EXTERN ___fs2sint
EXTERN ___fs2sint_callee
EXTERN ___fs2slong
EXTERN ___fs2slong_callee
EXTERN ___fs2slonglong
EXTERN ___fs2slonglong_callee
EXTERN ___fs2uchar
EXTERN ___fs2uchar_callee
EXTERN ___fs2uint
EXTERN ___fs2uint_callee
EXTERN ___fs2ulong
EXTERN ___fs2ulong_callee
EXTERN ___fs2ulonglong
EXTERN ___fs2ulonglong_callee
EXTERN ___fsadd
EXTERN ___fsadd_callee
EXTERN ___fsdiv
EXTERN ___fsdiv_callee
EXTERN ___fseq
EXTERN ___fseq_callee
EXTERN ___fsgt
EXTERN ___fsgt_callee
EXTERN ___fslt
EXTERN ___fslt_callee
EXTERN ___fsmul
EXTERN ___fsmul_callee
EXTERN ___fsneq
EXTERN ___fsneq_callee
EXTERN ___fssub
EXTERN ___fssub_callee
EXTERN ___schar2fs
EXTERN ___schar2fs_callee
EXTERN ___sint2fs
EXTERN ___sint2fs_callee
EXTERN ___slong2fs
EXTERN ___slong2fs_callee
EXTERN ___slonglong2fs
EXTERN ___slonglong2fs_callee
EXTERN ___uchar2fs
EXTERN ___uchar2fs_callee
EXTERN ___uint2fs
EXTERN ___uint2fs_callee
EXTERN ___ulong2fs
EXTERN ___ulong2fs_callee
EXTERN ___ulonglong2fs
EXTERN ___ulonglong2fs_callee
EXTERN ____sdcc_2_copy_src_mhl_dst_deix
EXTERN ____sdcc_2_copy_src_mhl_dst_bcix
EXTERN ____sdcc_4_copy_src_mhl_dst_deix
EXTERN ____sdcc_4_copy_src_mhl_dst_bcix
EXTERN ____sdcc_4_copy_src_mhl_dst_mbc
EXTERN ____sdcc_4_ldi_nosave_bc
EXTERN ____sdcc_4_ldi_save_bc
EXTERN ____sdcc_4_push_hlix
EXTERN ____sdcc_4_push_mhl
EXTERN ____sdcc_lib_setmem_hl
EXTERN ____sdcc_ll_add_de_bc_hl
EXTERN ____sdcc_ll_add_de_bc_hlix
EXTERN ____sdcc_ll_add_de_hlix_bc
EXTERN ____sdcc_ll_add_de_hlix_bcix
EXTERN ____sdcc_ll_add_deix_bc_hl
EXTERN ____sdcc_ll_add_deix_hlix
EXTERN ____sdcc_ll_add_hlix_bc_deix
EXTERN ____sdcc_ll_add_hlix_deix_bc
EXTERN ____sdcc_ll_add_hlix_deix_bcix
EXTERN ____sdcc_ll_asr_hlix_a
EXTERN ____sdcc_ll_asr_mbc_a
EXTERN ____sdcc_ll_copy_src_de_dst_hlix
EXTERN ____sdcc_ll_copy_src_de_dst_hlsp
EXTERN ____sdcc_ll_copy_src_deix_dst_hl
EXTERN ____sdcc_ll_copy_src_deix_dst_hlix
EXTERN ____sdcc_ll_copy_src_deixm_dst_hlsp
EXTERN ____sdcc_ll_copy_src_desp_dst_hlsp
EXTERN ____sdcc_ll_copy_src_hl_dst_de
EXTERN ____sdcc_ll_copy_src_hlsp_dst_de
EXTERN ____sdcc_ll_copy_src_hlsp_dst_deixm
EXTERN ____sdcc_ll_lsl_hlix_a
EXTERN ____sdcc_ll_lsl_mbc_a
EXTERN ____sdcc_ll_lsr_hlix_a
EXTERN ____sdcc_ll_lsr_mbc_a
EXTERN ____sdcc_ll_push_hlix
EXTERN ____sdcc_ll_push_mhl
EXTERN ____sdcc_ll_sub_de_bc_hl
EXTERN ____sdcc_ll_sub_de_bc_hlix
EXTERN ____sdcc_ll_sub_de_hlix_bc
EXTERN ____sdcc_ll_sub_de_hlix_bcix
EXTERN ____sdcc_ll_sub_deix_bc_hl
EXTERN ____sdcc_ll_sub_deix_hlix
EXTERN ____sdcc_ll_sub_hlix_bc_deix
EXTERN ____sdcc_ll_sub_hlix_deix_bc
EXTERN ____sdcc_ll_sub_hlix_deix_bcix
EXTERN ____sdcc_load_debc_deix
EXTERN ____sdcc_load_dehl_deix
EXTERN ____sdcc_load_debc_mhl
EXTERN ____sdcc_load_hlde_mhl
EXTERN ____sdcc_store_dehl_bcix
EXTERN ____sdcc_store_debc_hlix
EXTERN ____sdcc_store_debc_mhl
EXTERN ____sdcc_cpu_pop_ei
EXTERN ____sdcc_cpu_pop_ei_jp
EXTERN ____sdcc_cpu_push_di
EXTERN ____sdcc_outi
EXTERN ____sdcc_outi_128
EXTERN ____sdcc_outi_256
EXTERN ____sdcc_ldi
EXTERN ____sdcc_ldi_128
EXTERN ____sdcc_ldi_256
EXTERN ____sdcc_4_copy_srcd_hlix_dst_deix
EXTERN ____sdcc_4_and_src_mbc_mhl_dst_deix
EXTERN ____sdcc_4_or_src_mbc_mhl_dst_deix
EXTERN ____sdcc_4_xor_src_mbc_mhl_dst_deix
EXTERN ____sdcc_4_or_src_dehl_dst_bcix
EXTERN ____sdcc_4_xor_src_dehl_dst_bcix
EXTERN ____sdcc_4_and_src_dehl_dst_bcix
EXTERN ____sdcc_4_xor_src_mbc_mhl_dst_debc
EXTERN ____sdcc_4_or_src_mbc_mhl_dst_debc
EXTERN ____sdcc_4_and_src_mbc_mhl_dst_debc
EXTERN ____sdcc_4_cpl_src_mhl_dst_debc
EXTERN ____sdcc_4_xor_src_debc_mhl_dst_debc
EXTERN ____sdcc_4_or_src_debc_mhl_dst_debc
EXTERN ____sdcc_4_and_src_debc_mhl_dst_debc
EXTERN ____sdcc_4_and_src_debc_hlix_dst_debc
EXTERN ____sdcc_4_or_src_debc_hlix_dst_debc
EXTERN ____sdcc_4_xor_src_debc_hlix_dst_debc
;--------------------------------------------------------
; Public variables in this module
;--------------------------------------------------------
GLOBAL _x
;--------------------------------------------------------
; Externals used
;--------------------------------------------------------
GLOBAL _get_usb_device_config
GLOBAL _find_device_config
GLOBAL _next_device_config
GLOBAL _first_device_config
GLOBAL _find_first_free
GLOBAL _usbtrn_clear_endpoint_halt
GLOBAL _usbtrn_set_address
GLOBAL _usbtrn_set_configuration
GLOBAL _usbtrn_gfull_cfg_desc
GLOBAL _usbtrn_get_config_descriptor
GLOBAL _usbtrn_get_descriptor2
GLOBAL _usbtrn_get_descriptor
GLOBAL _usbdev_dat_in_trnsfer_0
GLOBAL _usbdev_dat_in_trnsfer
GLOBAL _usbdev_bulk_in_transfer
GLOBAL _usbdev_blk_out_trnsfer
GLOBAL _usbdev_control_transfer
GLOBAL _usb_data_out_transfer
GLOBAL _usb_data_in_transfer_n
GLOBAL _usb_data_in_transfer
GLOBAL _usb_control_transfer
GLOBAL _ch_issue_token_in_ep0
GLOBAL _ch_issue_token_out_ep0
GLOBAL _ch_issue_token_setup
GLOBAL _ch_data_out_transfer
GLOBAL _ch_data_in_transfer_n
GLOBAL _ch_data_in_transfer
GLOBAL _ch_control_transfer_set_config
GLOBAL _ch_control_transfer_set_address
GLOBAL _ch_control_transfer_request_descriptor
GLOBAL _ch_set_usb_address
GLOBAL _ch_write_data
GLOBAL _ch_cmd_get_ic_version
GLOBAL _ch_cmd_set_usb_mode
GLOBAL _ch_probe
GLOBAL _ch_cmd_reset_all
GLOBAL _ch_read_data
GLOBAL _ch_very_short_wait_int_and_get_status
GLOBAL _ch_short_wait_int_and_get_status
GLOBAL _ch_long_wait_int_and_get_status
GLOBAL _ch_get_status
GLOBAL _ch_command
GLOBAL _delay_medium
GLOBAL _delay_short
GLOBAL _delay_20ms
GLOBAL _printf
GLOBAL _delay
GLOBAL _ulltoa_callee
GLOBAL _ulltoa
GLOBAL _strtoull_callee
GLOBAL _strtoull
GLOBAL _strtoll_callee
GLOBAL _strtoll
GLOBAL _lltoa_callee
GLOBAL _lltoa
GLOBAL _llabs_callee
GLOBAL _llabs
GLOBAL __lldivu__callee
GLOBAL __lldivu_
GLOBAL __lldiv__callee
GLOBAL __lldiv_
GLOBAL _atoll_callee
GLOBAL _atoll
GLOBAL _realloc_unlocked_callee
GLOBAL _realloc_unlocked
GLOBAL _malloc_unlocked_fastcall
GLOBAL _malloc_unlocked
GLOBAL _free_unlocked_fastcall
GLOBAL _free_unlocked
GLOBAL _calloc_unlocked_callee
GLOBAL _calloc_unlocked
GLOBAL _aligned_alloc_unlocked_callee
GLOBAL _aligned_alloc_unlocked
GLOBAL _realloc_callee
GLOBAL _realloc
GLOBAL _malloc_fastcall
GLOBAL _malloc
GLOBAL _free_fastcall
GLOBAL _free
GLOBAL _calloc_callee
GLOBAL _calloc
GLOBAL _aligned_alloc_callee
GLOBAL _aligned_alloc
GLOBAL _utoa_callee
GLOBAL _utoa
GLOBAL _ultoa_callee
GLOBAL _ultoa
GLOBAL _system_fastcall
GLOBAL _system
GLOBAL _strtoul_callee
GLOBAL _strtoul
GLOBAL _strtol_callee
GLOBAL _strtol
GLOBAL _strtof_callee
GLOBAL _strtof
GLOBAL _strtod_callee
GLOBAL _strtod
GLOBAL _srand_fastcall
GLOBAL _srand
GLOBAL _rand
GLOBAL _quick_exit_fastcall
GLOBAL _quick_exit
GLOBAL _qsort_callee
GLOBAL _qsort
GLOBAL _ltoa_callee
GLOBAL _ltoa
GLOBAL _labs_fastcall
GLOBAL _labs
GLOBAL _itoa_callee
GLOBAL _itoa
GLOBAL _ftoh_callee
GLOBAL _ftoh
GLOBAL _ftog_callee
GLOBAL _ftog
GLOBAL _ftoe_callee
GLOBAL _ftoe
GLOBAL _ftoa_callee
GLOBAL _ftoa
GLOBAL _exit_fastcall
GLOBAL _exit
GLOBAL _dtoh_callee
GLOBAL _dtoh
GLOBAL _dtog_callee
GLOBAL _dtog
GLOBAL _dtoe_callee
GLOBAL _dtoe
GLOBAL _dtoa_callee
GLOBAL _dtoa
GLOBAL _bsearch_callee
GLOBAL _bsearch
GLOBAL _atol_fastcall
GLOBAL _atol
GLOBAL _atoi_fastcall
GLOBAL _atoi
GLOBAL _atof_fastcall
GLOBAL _atof
GLOBAL _atexit_fastcall
GLOBAL _atexit
GLOBAL _at_quick_exit_fastcall
GLOBAL _at_quick_exit
GLOBAL _abs_fastcall
GLOBAL _abs
GLOBAL _abort
GLOBAL __strtou__callee
GLOBAL __strtou_
GLOBAL __strtoi__callee
GLOBAL __strtoi_
GLOBAL __random_uniform_xor_8__fastcall
GLOBAL __random_uniform_xor_8_
GLOBAL __random_uniform_xor_32__fastcall
GLOBAL __random_uniform_xor_32_
GLOBAL __random_uniform_cmwc_8__fastcall
GLOBAL __random_uniform_cmwc_8_
GLOBAL __shellsort__callee
GLOBAL __shellsort_
GLOBAL __quicksort__callee
GLOBAL __quicksort_
GLOBAL __insertion_sort__callee
GLOBAL __insertion_sort_
GLOBAL __ldivu__callee
GLOBAL __ldivu_
GLOBAL __ldiv__callee
GLOBAL __ldiv_
GLOBAL __divu__callee
GLOBAL __divu_
GLOBAL __div__callee
GLOBAL __div_
GLOBAL _result
;--------------------------------------------------------
; special function registers
;--------------------------------------------------------
defc _CH376_DATA_PORT = 0xff88
defc _CH376_COMMAND_PORT = 0xff89
defc _USB_MODULE_LEDS = 0xff8a
;--------------------------------------------------------
; ram data
;--------------------------------------------------------
SECTION bss_compiler
;--------------------------------------------------------
; ram data
;--------------------------------------------------------
IF 0
; .area _INITIALIZED removed by z88dk
_x:
DEFS 99
ENDIF
;--------------------------------------------------------
; absolute external ram data
;--------------------------------------------------------
SECTION IGNORE
;--------------------------------------------------------
; global & static initialisations
;--------------------------------------------------------
SECTION code_crt_init
;--------------------------------------------------------
; Home
;--------------------------------------------------------
SECTION IGNORE
;--------------------------------------------------------
; code
;--------------------------------------------------------
SECTION data_compiler
_x:
DEFB 0x00
DEFB +0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB 0x00
DEFB +0x00
SECTION IGNORE

69
Source/HBIOS/ch376-native/cruntime.asm

@ -62,3 +62,72 @@ zero_n:
push de push de
pop hl pop hl
ret ret
.if 0
; required if --optimise-for-size is targetted
; but there appears to be a regression that stop the driver from working
; if optimised for size is selected
___sdcc_enter_ix:
ex (sp), ix
push ix
ld ix, 2
add ix, sp
ret
____sdcc_lib_setmem_hl:
l_setmem_hl:
ret
____sdcc_load_debc_mhl:
ld c, (hl)
inc hl
ld b, (hl)
inc hl
ld e, (hl)
inc hl
ld d, (hl)
ret
____sdcc_4_push_hlix:
pop af
push af
push af
push af
push de
push ix
pop de
add hl, de
ex de, hl
ld hl, 2+2
add hl, sp
ex de, hl
ldi
ldi
ldi
ld a, (hl)
ld (de), a
inc bc
inc bc
inc bc
pop de
ret
____sdcc_store_debc_mhl:
ld (hl), c
inc hl
ld (hl), b
inc hl
ld (hl), e
inc hl
ld (hl), d
ret
.endif

1
Source/HBIOS/ch376-native/keyboard/.gitignore

@ -0,0 +1 @@
*.asm

1
Source/HBIOS/ch376-native/scsi-drv/.gitignore

@ -0,0 +1 @@
*.asm

1
Source/HBIOS/ch376-native/ufi-drv/.gitignore

@ -0,0 +1 @@
*.asm

599
Source/HBIOS/ch376-native/ufi-drv/usb_cbi.c.asm

@ -1,599 +0,0 @@
;--------------------------------------------------------
; File Created by SDCC : free open source ISO C Compiler
; Version 4.4.0 #14648 (Linux)
;--------------------------------------------------------
; Processed by Z88DK
;--------------------------------------------------------
EXTERN __divschar
EXTERN __divschar_callee
EXTERN __divsint
EXTERN __divsint_callee
EXTERN __divslong
EXTERN __divslong_callee
EXTERN __divslonglong
EXTERN __divslonglong_callee
EXTERN __divsuchar
EXTERN __divsuchar_callee
EXTERN __divuchar
EXTERN __divuchar_callee
EXTERN __divuint
EXTERN __divuint_callee
EXTERN __divulong
EXTERN __divulong_callee
EXTERN __divulonglong
EXTERN __divulonglong_callee
EXTERN __divuschar
EXTERN __divuschar_callee
EXTERN __modschar
EXTERN __modschar_callee
EXTERN __modsint
EXTERN __modsint_callee
EXTERN __modslong
EXTERN __modslong_callee
EXTERN __modslonglong
EXTERN __modslonglong_callee
EXTERN __modsuchar
EXTERN __modsuchar_callee
EXTERN __moduchar
EXTERN __moduchar_callee
EXTERN __moduint
EXTERN __moduint_callee
EXTERN __modulong
EXTERN __modulong_callee
EXTERN __modulonglong
EXTERN __modulonglong_callee
EXTERN __moduschar
EXTERN __moduschar_callee
EXTERN __mulint
EXTERN __mulint_callee
EXTERN __mullong
EXTERN __mullong_callee
EXTERN __mullonglong
EXTERN __mullonglong_callee
EXTERN __mulschar
EXTERN __mulschar_callee
EXTERN __mulsuchar
EXTERN __mulsuchar_callee
EXTERN __muluchar
EXTERN __muluchar_callee
EXTERN __muluschar
EXTERN __muluschar_callee
EXTERN __rlslonglong
EXTERN __rlslonglong_callee
EXTERN __rlulonglong
EXTERN __rlulonglong_callee
EXTERN __rrslonglong
EXTERN __rrslonglong_callee
EXTERN __rrulonglong
EXTERN __rrulonglong_callee
EXTERN ___mulsint2slong
EXTERN ___mulsint2slong_callee
EXTERN ___muluint2ulong
EXTERN ___muluint2ulong_callee
EXTERN ___sdcc_call_hl
EXTERN ___sdcc_call_iy
EXTERN ___sdcc_enter_ix
EXTERN banked_call
EXTERN _banked_ret
EXTERN ___fs2schar
EXTERN ___fs2schar_callee
EXTERN ___fs2sint
EXTERN ___fs2sint_callee
EXTERN ___fs2slong
EXTERN ___fs2slong_callee
EXTERN ___fs2slonglong
EXTERN ___fs2slonglong_callee
EXTERN ___fs2uchar
EXTERN ___fs2uchar_callee
EXTERN ___fs2uint
EXTERN ___fs2uint_callee
EXTERN ___fs2ulong
EXTERN ___fs2ulong_callee
EXTERN ___fs2ulonglong
EXTERN ___fs2ulonglong_callee
EXTERN ___fsadd
EXTERN ___fsadd_callee
EXTERN ___fsdiv
EXTERN ___fsdiv_callee
EXTERN ___fseq
EXTERN ___fseq_callee
EXTERN ___fsgt
EXTERN ___fsgt_callee
EXTERN ___fslt
EXTERN ___fslt_callee
EXTERN ___fsmul
EXTERN ___fsmul_callee
EXTERN ___fsneq
EXTERN ___fsneq_callee
EXTERN ___fssub
EXTERN ___fssub_callee
EXTERN ___schar2fs
EXTERN ___schar2fs_callee
EXTERN ___sint2fs
EXTERN ___sint2fs_callee
EXTERN ___slong2fs
EXTERN ___slong2fs_callee
EXTERN ___slonglong2fs
EXTERN ___slonglong2fs_callee
EXTERN ___uchar2fs
EXTERN ___uchar2fs_callee
EXTERN ___uint2fs
EXTERN ___uint2fs_callee
EXTERN ___ulong2fs
EXTERN ___ulong2fs_callee
EXTERN ___ulonglong2fs
EXTERN ___ulonglong2fs_callee
EXTERN ____sdcc_2_copy_src_mhl_dst_deix
EXTERN ____sdcc_2_copy_src_mhl_dst_bcix
EXTERN ____sdcc_4_copy_src_mhl_dst_deix
EXTERN ____sdcc_4_copy_src_mhl_dst_bcix
EXTERN ____sdcc_4_copy_src_mhl_dst_mbc
EXTERN ____sdcc_4_ldi_nosave_bc
EXTERN ____sdcc_4_ldi_save_bc
EXTERN ____sdcc_4_push_hlix
EXTERN ____sdcc_4_push_mhl
EXTERN ____sdcc_lib_setmem_hl
EXTERN ____sdcc_ll_add_de_bc_hl
EXTERN ____sdcc_ll_add_de_bc_hlix
EXTERN ____sdcc_ll_add_de_hlix_bc
EXTERN ____sdcc_ll_add_de_hlix_bcix
EXTERN ____sdcc_ll_add_deix_bc_hl
EXTERN ____sdcc_ll_add_deix_hlix
EXTERN ____sdcc_ll_add_hlix_bc_deix
EXTERN ____sdcc_ll_add_hlix_deix_bc
EXTERN ____sdcc_ll_add_hlix_deix_bcix
EXTERN ____sdcc_ll_asr_hlix_a
EXTERN ____sdcc_ll_asr_mbc_a
EXTERN ____sdcc_ll_copy_src_de_dst_hlix
EXTERN ____sdcc_ll_copy_src_de_dst_hlsp
EXTERN ____sdcc_ll_copy_src_deix_dst_hl
EXTERN ____sdcc_ll_copy_src_deix_dst_hlix
EXTERN ____sdcc_ll_copy_src_deixm_dst_hlsp
EXTERN ____sdcc_ll_copy_src_desp_dst_hlsp
EXTERN ____sdcc_ll_copy_src_hl_dst_de
EXTERN ____sdcc_ll_copy_src_hlsp_dst_de
EXTERN ____sdcc_ll_copy_src_hlsp_dst_deixm
EXTERN ____sdcc_ll_lsl_hlix_a
EXTERN ____sdcc_ll_lsl_mbc_a
EXTERN ____sdcc_ll_lsr_hlix_a
EXTERN ____sdcc_ll_lsr_mbc_a
EXTERN ____sdcc_ll_push_hlix
EXTERN ____sdcc_ll_push_mhl
EXTERN ____sdcc_ll_sub_de_bc_hl
EXTERN ____sdcc_ll_sub_de_bc_hlix
EXTERN ____sdcc_ll_sub_de_hlix_bc
EXTERN ____sdcc_ll_sub_de_hlix_bcix
EXTERN ____sdcc_ll_sub_deix_bc_hl
EXTERN ____sdcc_ll_sub_deix_hlix
EXTERN ____sdcc_ll_sub_hlix_bc_deix
EXTERN ____sdcc_ll_sub_hlix_deix_bc
EXTERN ____sdcc_ll_sub_hlix_deix_bcix
EXTERN ____sdcc_load_debc_deix
EXTERN ____sdcc_load_dehl_deix
EXTERN ____sdcc_load_debc_mhl
EXTERN ____sdcc_load_hlde_mhl
EXTERN ____sdcc_store_dehl_bcix
EXTERN ____sdcc_store_debc_hlix
EXTERN ____sdcc_store_debc_mhl
EXTERN ____sdcc_cpu_pop_ei
EXTERN ____sdcc_cpu_pop_ei_jp
EXTERN ____sdcc_cpu_push_di
EXTERN ____sdcc_outi
EXTERN ____sdcc_outi_128
EXTERN ____sdcc_outi_256
EXTERN ____sdcc_ldi
EXTERN ____sdcc_ldi_128
EXTERN ____sdcc_ldi_256
EXTERN ____sdcc_4_copy_srcd_hlix_dst_deix
EXTERN ____sdcc_4_and_src_mbc_mhl_dst_deix
EXTERN ____sdcc_4_or_src_mbc_mhl_dst_deix
EXTERN ____sdcc_4_xor_src_mbc_mhl_dst_deix
EXTERN ____sdcc_4_or_src_dehl_dst_bcix
EXTERN ____sdcc_4_xor_src_dehl_dst_bcix
EXTERN ____sdcc_4_and_src_dehl_dst_bcix
EXTERN ____sdcc_4_xor_src_mbc_mhl_dst_debc
EXTERN ____sdcc_4_or_src_mbc_mhl_dst_debc
EXTERN ____sdcc_4_and_src_mbc_mhl_dst_debc
EXTERN ____sdcc_4_cpl_src_mhl_dst_debc
EXTERN ____sdcc_4_xor_src_debc_mhl_dst_debc
EXTERN ____sdcc_4_or_src_debc_mhl_dst_debc
EXTERN ____sdcc_4_and_src_debc_mhl_dst_debc
EXTERN ____sdcc_4_and_src_debc_hlix_dst_debc
EXTERN ____sdcc_4_or_src_debc_hlix_dst_debc
EXTERN ____sdcc_4_xor_src_debc_hlix_dst_debc
;--------------------------------------------------------
; Public variables in this module
;--------------------------------------------------------
GLOBAL _cbi2_adsc
GLOBAL _usb_execute_cbi
;--------------------------------------------------------
; Externals used
;--------------------------------------------------------
GLOBAL _critical_end
GLOBAL _critical_begin
GLOBAL _usbtrn_clear_endpoint_halt
GLOBAL _usbtrn_set_address
GLOBAL _usbtrn_set_configuration
GLOBAL _usbtrn_gfull_cfg_desc
GLOBAL _usbtrn_get_config_descriptor
GLOBAL _usbtrn_get_descriptor2
GLOBAL _usbtrn_get_descriptor
GLOBAL _usbdev_dat_in_trnsfer_0
GLOBAL _usbdev_dat_in_trnsfer
GLOBAL _usbdev_bulk_in_transfer
GLOBAL _usbdev_blk_out_trnsfer
GLOBAL _usbdev_control_transfer
GLOBAL _usb_data_out_transfer
GLOBAL _usb_data_in_transfer_n
GLOBAL _usb_data_in_transfer
GLOBAL _usb_control_transfer
GLOBAL _ch_issue_token_in_ep0
GLOBAL _ch_issue_token_out_ep0
GLOBAL _ch_issue_token_setup
GLOBAL _ch_data_out_transfer
GLOBAL _ch_data_in_transfer_n
GLOBAL _ch_data_in_transfer
GLOBAL _ch_control_transfer_set_config
GLOBAL _ch_control_transfer_set_address
GLOBAL _ch_control_transfer_request_descriptor
GLOBAL _ch_set_usb_address
GLOBAL _ch_write_data
GLOBAL _ch_cmd_get_ic_version
GLOBAL _ch_cmd_set_usb_mode
GLOBAL _ch_probe
GLOBAL _ch_cmd_reset_all
GLOBAL _ch_read_data
GLOBAL _ch_very_short_wait_int_and_get_status
GLOBAL _ch_short_wait_int_and_get_status
GLOBAL _ch_long_wait_int_and_get_status
GLOBAL _ch_get_status
GLOBAL _ch_command
GLOBAL _delay_medium
GLOBAL _delay_short
GLOBAL _delay_20ms
GLOBAL _printf
GLOBAL _delay
GLOBAL _ulltoa_callee
GLOBAL _ulltoa
GLOBAL _strtoull_callee
GLOBAL _strtoull
GLOBAL _strtoll_callee
GLOBAL _strtoll
GLOBAL _lltoa_callee
GLOBAL _lltoa
GLOBAL _llabs_callee
GLOBAL _llabs
GLOBAL __lldivu__callee
GLOBAL __lldivu_
GLOBAL __lldiv__callee
GLOBAL __lldiv_
GLOBAL _atoll_callee
GLOBAL _atoll
GLOBAL _realloc_unlocked_callee
GLOBAL _realloc_unlocked
GLOBAL _malloc_unlocked_fastcall
GLOBAL _malloc_unlocked
GLOBAL _free_unlocked_fastcall
GLOBAL _free_unlocked
GLOBAL _calloc_unlocked_callee
GLOBAL _calloc_unlocked
GLOBAL _aligned_alloc_unlocked_callee
GLOBAL _aligned_alloc_unlocked
GLOBAL _realloc_callee
GLOBAL _realloc
GLOBAL _malloc_fastcall
GLOBAL _malloc
GLOBAL _free_fastcall
GLOBAL _free
GLOBAL _calloc_callee
GLOBAL _calloc
GLOBAL _aligned_alloc_callee
GLOBAL _aligned_alloc
GLOBAL _utoa_callee
GLOBAL _utoa
GLOBAL _ultoa_callee
GLOBAL _ultoa
GLOBAL _system_fastcall
GLOBAL _system
GLOBAL _strtoul_callee
GLOBAL _strtoul
GLOBAL _strtol_callee
GLOBAL _strtol
GLOBAL _strtof_callee
GLOBAL _strtof
GLOBAL _strtod_callee
GLOBAL _strtod
GLOBAL _srand_fastcall
GLOBAL _srand
GLOBAL _rand
GLOBAL _quick_exit_fastcall
GLOBAL _quick_exit
GLOBAL _qsort_callee
GLOBAL _qsort
GLOBAL _ltoa_callee
GLOBAL _ltoa
GLOBAL _labs_fastcall
GLOBAL _labs
GLOBAL _itoa_callee
GLOBAL _itoa
GLOBAL _ftoh_callee
GLOBAL _ftoh
GLOBAL _ftog_callee
GLOBAL _ftog
GLOBAL _ftoe_callee
GLOBAL _ftoe
GLOBAL _ftoa_callee
GLOBAL _ftoa
GLOBAL _exit_fastcall
GLOBAL _exit
GLOBAL _dtoh_callee
GLOBAL _dtoh
GLOBAL _dtog_callee
GLOBAL _dtog
GLOBAL _dtoe_callee
GLOBAL _dtoe
GLOBAL _dtoa_callee
GLOBAL _dtoa
GLOBAL _bsearch_callee
GLOBAL _bsearch
GLOBAL _atol_fastcall
GLOBAL _atol
GLOBAL _atoi_fastcall
GLOBAL _atoi
GLOBAL _atof_fastcall
GLOBAL _atof
GLOBAL _atexit_fastcall
GLOBAL _atexit
GLOBAL _at_quick_exit_fastcall
GLOBAL _at_quick_exit
GLOBAL _abs_fastcall
GLOBAL _abs
GLOBAL _abort
GLOBAL __strtou__callee
GLOBAL __strtou_
GLOBAL __strtoi__callee
GLOBAL __strtoi_
GLOBAL __random_uniform_xor_8__fastcall
GLOBAL __random_uniform_xor_8_
GLOBAL __random_uniform_xor_32__fastcall
GLOBAL __random_uniform_xor_32_
GLOBAL __random_uniform_cmwc_8__fastcall
GLOBAL __random_uniform_cmwc_8_
GLOBAL __shellsort__callee
GLOBAL __shellsort_
GLOBAL __quicksort__callee
GLOBAL __quicksort_
GLOBAL __insertion_sort__callee
GLOBAL __insertion_sort_
GLOBAL __ldivu__callee
GLOBAL __ldivu_
GLOBAL __ldiv__callee
GLOBAL __ldiv_
GLOBAL __divu__callee
GLOBAL __divu_
GLOBAL __div__callee
GLOBAL __div_
GLOBAL _in_critical_usb_section
GLOBAL _result
;--------------------------------------------------------
; special function registers
;--------------------------------------------------------
defc _CH376_DATA_PORT = 0xff88
defc _CH376_COMMAND_PORT = 0xff89
defc _USB_MODULE_LEDS = 0xff8a
;--------------------------------------------------------
; ram data
;--------------------------------------------------------
SECTION bss_compiler
;--------------------------------------------------------
; ram data
;--------------------------------------------------------
IF 0
; .area _INITIALIZED removed by z88dk
_cbi2_adsc:
DEFS 8
ENDIF
;--------------------------------------------------------
; absolute external ram data
;--------------------------------------------------------
SECTION IGNORE
;--------------------------------------------------------
; global & static initialisations
;--------------------------------------------------------
SECTION code_crt_init
;--------------------------------------------------------
; Home
;--------------------------------------------------------
SECTION IGNORE
;--------------------------------------------------------
; code
;--------------------------------------------------------
SECTION code_compiler
;source-doc/ufi-drv/usb_cbi.c:10: usb_error usb_execute_cbi(device_config *const storage_device,
; ---------------------------------
; Function usb_execute_cbi
; ---------------------------------
_usb_execute_cbi:
push ix
ld ix,0
add ix,sp
ld hl, -8
add hl, sp
ld sp, hl
;source-doc/ufi-drv/usb_cbi.c:17: const uint8_t interface_number = storage_device->interface_number;
ld l,(ix+4)
ld h,(ix+5)
ld c,l
ld b,h
inc hl
inc hl
ld e, (hl)
;source-doc/ufi-drv/usb_cbi.c:20: adsc = cbi2_adsc;
push de
push bc
ex de, hl
ld hl,4
add hl, sp
ex de, hl
ld bc,0x0008
ld hl,_cbi2_adsc
ldir
pop bc
pop de
;source-doc/ufi-drv/usb_cbi.c:21: adsc.bIndex[0] = interface_number;
ld (ix-4),e
;source-doc/ufi-drv/usb_cbi.c:23: critical_begin();
push bc
call _critical_begin
pop bc
;source-doc/ufi-drv/usb_cbi.c:25: result = usbdev_control_transfer(storage_device, &adsc, (uint8_t *const)cmd);
ld l,(ix+6)
ld h,(ix+7)
push hl
ld hl,2
add hl, sp
push hl
push bc
call _usbdev_control_transfer
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) {
ld a,(_result)
sub a,0x02
jr NZ,l_usb_execute_cbi_00104
;source-doc/ufi-drv/usb_cbi.c:28: if (sense_codes != NULL)
ld a,(ix+14)
or a,(ix+13)
jr Z,l_usb_execute_cbi_00102
;source-doc/ufi-drv/usb_cbi.c:29: usbdev_dat_in_trnsfer(storage_device, sense_codes, 2, ENDPOINT_INTERRUPT_IN);
ld a,0x02
push af
inc sp
ld hl,0x0002
push hl
ld l,(ix+13)
ld h,(ix+14)
push hl
ld l,(ix+4)
ld h,(ix+5)
push hl
call _usbdev_dat_in_trnsfer
ld hl,7
add hl, sp
ld sp, hl
l_usb_execute_cbi_00102:
;source-doc/ufi-drv/usb_cbi.c:31: result = USB_ERR_STALL;
ld hl,_result
ld (hl),0x02
;source-doc/ufi-drv/usb_cbi.c:32: goto done;
jp l_usb_execute_cbi_00116
l_usb_execute_cbi_00104:
;source-doc/ufi-drv/usb_cbi.c:35: if (result != USB_ERR_OK) {
ld a,(_result)
or a, a
jp NZ, l_usb_execute_cbi_00116
;source-doc/ufi-drv/usb_cbi.c:40: if (send) {
bit 0,(ix+8)
jr Z,l_usb_execute_cbi_00112
;source-doc/ufi-drv/usb_cbi.c:41: result = usbdev_blk_out_trnsfer(storage_device, buffer, buffer_size);
ld l,(ix+9)
ld h,(ix+10)
push hl
ld l,(ix+11)
ld h,(ix+12)
push hl
ld l,(ix+4)
ld h,(ix+5)
push hl
call _usbdev_blk_out_trnsfer
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) {
ld a,(_result)
or a, a
jr Z,l_usb_execute_cbi_00113
;source-doc/ufi-drv/usb_cbi.c:45: goto done;
jr l_usb_execute_cbi_00116
l_usb_execute_cbi_00112:
;source-doc/ufi-drv/usb_cbi.c:48: result = usbdev_dat_in_trnsfer(storage_device, buffer, buffer_size, ENDPOINT_BULK_IN);
ld a,0x01
push af
inc sp
ld l,(ix+9)
ld h,(ix+10)
push hl
ld l,(ix+11)
ld h,(ix+12)
push hl
ld l,(ix+4)
ld h,(ix+5)
push hl
call _usbdev_dat_in_trnsfer
pop af
pop af
pop af
inc sp
ld a, l
ld (_result), a
;source-doc/ufi-drv/usb_cbi.c:50: if (result != USB_ERR_OK) {
ld a,(_result)
or a, a
jr NZ,l_usb_execute_cbi_00116
;source-doc/ufi-drv/usb_cbi.c:52: goto done;
l_usb_execute_cbi_00113:
;source-doc/ufi-drv/usb_cbi.c:56: if (sense_codes != NULL) {
ld a,(ix+14)
or a,(ix+13)
jr Z,l_usb_execute_cbi_00116
;source-doc/ufi-drv/usb_cbi.c:57: result = usbdev_dat_in_trnsfer(storage_device, sense_codes, 2, ENDPOINT_INTERRUPT_IN);
ld a,0x02
push af
inc sp
ld hl,0x0002
push hl
ld l,(ix+13)
ld h,(ix+14)
push hl
ld l,(ix+4)
ld h,(ix+5)
push hl
call _usbdev_dat_in_trnsfer
pop af
pop af
pop af
inc sp
ld a, l
ld (_result), a
;source-doc/ufi-drv/usb_cbi.c:65: done:
l_usb_execute_cbi_00116:
;source-doc/ufi-drv/usb_cbi.c:66: critical_end();
call _critical_end
;source-doc/ufi-drv/usb_cbi.c:68: return result;
ld hl,(_result)
;source-doc/ufi-drv/usb_cbi.c:69: }
ld sp, ix
pop ix
ret
SECTION data_compiler
_cbi2_adsc:
DEFB +0x21
DEFB +0x00
DEFB +0x00
DEFB +0x00
DEFB +0xff
DEFB +0x00
DEFW +0x000c
SECTION IGNORE
Loading…
Cancel
Save