Browse Source

ch376-native: some cleanup of build process and an initial readme added

pull/592/head
Dean Netherton 1 year ago
parent
commit
04dbb0e4bb
  1. 6
      Source/HBIOS/ch376-native/Dockerfile
  2. 148
      Source/HBIOS/ch376-native/Makefile
  3. 20
      Source/HBIOS/ch376-native/base-drv.asm
  4. 16
      Source/HBIOS/ch376-native/base-drv.s
  5. 1136
      Source/HBIOS/ch376-native/base-drv/ch376.c.asm
  6. 323
      Source/HBIOS/ch376-native/base-drv/ch376.c.s
  7. 458
      Source/HBIOS/ch376-native/base-drv/class_hub.c.asm
  8. 22
      Source/HBIOS/ch376-native/base-drv/class_hub.c.s
  9. 6
      Source/HBIOS/ch376-native/base-drv/critical-section.c.s
  10. 834
      Source/HBIOS/ch376-native/base-drv/dev_transfers.c.asm
  11. 345
      Source/HBIOS/ch376-native/base-drv/dev_transfers.c.s
  12. 1472
      Source/HBIOS/ch376-native/base-drv/enumerate.c.asm
  13. 524
      Source/HBIOS/ch376-native/base-drv/enumerate.c.s
  14. 160
      Source/HBIOS/ch376-native/base-drv/enumerate_hub.c.s
  15. 77
      Source/HBIOS/ch376-native/base-drv/enumerate_storage.c.s
  16. 182
      Source/HBIOS/ch376-native/base-drv/protocol.c.s
  17. 829
      Source/HBIOS/ch376-native/base-drv/transfers.c.asm
  18. 160
      Source/HBIOS/ch376-native/base-drv/transfers.c.s
  19. 441
      Source/HBIOS/ch376-native/base-drv/usb-base-drv.c.asm
  20. 22
      Source/HBIOS/ch376-native/base-drv/usb-base-drv.c.s
  21. 75
      Source/HBIOS/ch376-native/base-drv/usb-init.c.s
  22. 605
      Source/HBIOS/ch376-native/base-drv/usb_state.c.asm
  23. 82
      Source/HBIOS/ch376-native/base-drv/usb_state.c.s
  24. 520
      Source/HBIOS/ch376-native/base-drv/work-area.c.asm
  25. 2
      Source/HBIOS/ch376-native/base-drv/work-area.c.s
  26. 0
      Source/HBIOS/ch376-native/build-docker.sh
  27. 112
      Source/HBIOS/ch376-native/cruntime.asm
  28. 2
      Source/HBIOS/ch376-native/keyboard.s
  29. 87
      Source/HBIOS/ch376-native/keyboard/class_hid.c.s
  30. 24
      Source/HBIOS/ch376-native/keyboard/class_hid_keyboard.c.s
  31. 185
      Source/HBIOS/ch376-native/keyboard/kyb-init.c.s
  32. 60
      Source/HBIOS/ch376-native/readme.md
  33. 0
      Source/HBIOS/ch376-native/root.md
  34. 2
      Source/HBIOS/ch376-native/scsi-drv.s
  35. 432
      Source/HBIOS/ch376-native/scsi-drv/class_scsi.c.s
  36. 26
      Source/HBIOS/ch376-native/scsi-drv/scsi-init.c.s
  37. 30
      Source/HBIOS/ch376-native/source-doc/depends.d
  38. 2
      Source/HBIOS/ch376-native/ufi-drv.s
  39. 265
      Source/HBIOS/ch376-native/ufi-drv/class_ufi.c.s
  40. 127
      Source/HBIOS/ch376-native/ufi-drv/ufi-init.c.s
  41. 599
      Source/HBIOS/ch376-native/ufi-drv/usb_cbi.c.asm
  42. 72
      Source/HBIOS/ch376-native/ufi-drv/usb_cbi.c.s
  43. 11
      Source/HBIOS/util.asm

6
Source/HBIOS/ch376-native/Dockerfile

@ -1,6 +0,0 @@
# Build with: docker build --progress plain -t romwbw-z88dk .
# run with : docker run -v ${PWD}:/src/ --privileged=true -u $(id -u ${USER}):$(id -g ${USER}) -it romwbw-z88dk:latest
FROM z88dk/z88dk
RUN apk add build-base

148
Source/HBIOS/ch376-native/Makefile

@ -3,18 +3,21 @@ SHELLFLAGS := -c -e -x
.ONESHELL: .ONESHELL:
MAKEFLAGS += --warn-undefined-variables MAKEFLAGS += --warn-undefined-variables
MAKEFLAGS += --no-builtin-rules MAKEFLAGS += --no-builtin-rules
ZCC_EXTRA := --vc -Cs --Werror
ZCCRELFLAGS=
ifdef RELEASE
ZCCRELFLAGS=-SO3 --max-allocs-per-node600000 --allow-unsafe-read --opt-code-speed
endif
MAKEFLAGS += --always-make
ZCCRELFLAGS := -SO3 --max-allocs-per-node600000 --allow-unsafe-read --opt-code-speed
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)
ZCC := zcc +z80 -vn -startup=0 -clib=sdcc_iy -crt0 $(SRC)crt.asm -compiler=sdcc -Cs--std=c23 -Cs--Werror $(ZCCRELFLAGS) $(LIBS)
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')
ifeq ($(ZCC_PATH),)
$(info ZCC is set to use Docker to run zcc)
else
$(info ZCC is set to $(ZCC_PATH))
endif
ASSDIR := ./ ASSDIR := ./
@ -30,42 +33,6 @@ clean:
rm base-drv.s rm base-drv.s
rm keyboard.s rm keyboard.s
$(ASSDIR)base-drv.s:
@echo "Creating base-drv.s"
echo "; Generated File -- not to be modify directly" > $(ASSDIR)base-drv.s
for dep in $^; do
dep=$${dep#*/}
dep=$${dep#*/}
echo '#include "'ch376-native/base-drv/$${dep}'"' >> $(ASSDIR)base-drv.s
done
$(ASSDIR)scsi-drv.s:
@echo "Creating scsi-drv.s"
echo "; Generated File -- not to be modify directly" > $(ASSDIR)scsi-drv.s
for dep in $^; do
dep=$${dep#*/}
dep=$${dep#*/}
echo '#include "'ch376-native/scsi-drv/$${dep}'"' >> $(ASSDIR)scsi-drv.s
done
$(ASSDIR)ufi-drv.s:
@echo "Creating ufi-drv.s"
echo "; Generated File -- not to be modify directly" > $(ASSDIR)ufi-drv.s
for dep in $^; do
dep=$${dep#*/}
dep=$${dep#*/}
echo '#include "'ch376-native/ufi-drv/$${dep}'"' >> $(ASSDIR)ufi-drv.s
done
$(ASSDIR)keyboard.s:
@echo "Creating keyboard.s"
echo "; Generated File -- not to be modify directly" > $(ASSDIR)keyboard.s
for dep in $^; do
dep=$${dep#*/}
dep=$${dep#*/}
echo '#include "'ch376-native/keyboard/$${dep}'"' >> $(ASSDIR)keyboard.s
done
$(ASSDIR)%.c.s: $(ASSDIR)%.c.asm $(ASSDIR)%.c.s: $(ASSDIR)%.c.asm
@mkdir -p $(dir $@) @mkdir -p $(dir $@)
echo "Converting $< to $@" echo "Converting $< to $@"
@ -78,87 +45,30 @@ $(ASSDIR)%.s: $(SRC)%.asm
define compile define compile
@mkdir -p $(dir $@) @mkdir -p $(dir $@)
$(ZCC) --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
$(ASSDIR)base-drv/%.c.asm: $(SRC)base-drv/%.c; $(compile)
$(ASSDIR)scsi-drv/%.c.asm: $(SRC)scsi-drv/%.c; $(compile)
$(ASSDIR)keyboard/%.c.asm: $(SRC)keyboard/%.c; $(compile)
$(ASSDIR)ufi-drv/%.c.asm: $(SRC)ufi-drv/%.c; $(compile)
$(ASSDIR)%.c.asm: $(SRC)%.c; $(compile)
$(ASSDIR)libraries/delay/%.c.asm: ../apps/libraries/delay/%.c; $(compile)
$(ASSDIR)libraries/usb/%.c.asm: ../apps/libraries/usb/%.c; $(compile)
.PHONY: format
format: SHELL:=/bin/bash
format:
@clang-format --version
find \( -name "*.c" -o -name "*.h" \) -exec echo "formating {}" \; -exec clang-format -i {} \;
ZSDCPP_FLAGS= -I"${ZCCCFG}../../include/_DEVELOPMENT/sdcc" $(LIBS) ZSDCPP_FLAGS= -I"${ZCCCFG}../../include/_DEVELOPMENT/sdcc" $(LIBS)
include ${SRC}depends.d
deps:
@echo "" > ${SRC}/depends.d
# C Dependencies
(cd ${SRC} && find -name "*.c") | while read -r file; do
file_no_ext="$${file%.*}"
file_no_ext=$${file_no_ext#./}
filename=$$(basename $$file_no_ext)
from="$$filename.o"
to="${ASSDIR}$$file_no_ext.c.s"
echo -n "$${file}: " > /tmp/deps.deps
echo -n "$${file_no_ext}.c " >> /tmp/deps.deps
z88dk-ucpp ${ZSDCPP_FLAGS} -M ./${SRC}$$file_no_ext.c >> /tmp/deps.deps
touch /tmp/deps.deps
sed "s+$$from+$$to+g" /tmp/deps.deps >> ${SRC}/depends.d
done
# configure base-drv.s to all .s files
printf "##\r\n" >> ${SRC}/depends.d
printf "./base-drv.s: " >> ${SRC}/depends.d
(cd ${SRC}/base-drv && find -name "*.c") | while read -r file; do
file_no_ext="$${file%.*}"
file_no_ext=$${file_no_ext#./}
filename=$$(basename $$file_no_ext)
printf "base-drv/$$file.s " >> ${SRC}/depends.d
define build_subsystem =
$$(ASSDIR)$(1).s:
@echo "Creating $(1).s"
echo "; Generated File -- not to be modify directly" > $$(ASSDIR)$(1).s
for dep in $$^; do
dep=$$$${dep#*/}
dep=$$$${dep#*/}
echo '#include "'ch376-native/$(1)/$$$${dep}'"' >> $$(ASSDIR)$(1).s
done done
printf "\r\n" >> ${SRC}/depends.d
# # configure scsi-drv.s to all .s files
printf "##\r\n" >> ${SRC}/depends.d
printf "./scsi-drv.s: " >> ${SRC}/depends.d
(cd ${SRC}/scsi-drv && find -name "*.c") | while read -r file; do
file_no_ext="$${file%.*}"
file_no_ext=$${file_no_ext#./}
filename=$$(basename $$file_no_ext)
printf "scsi-drv/$$file.s " >> ${SRC}/depends.d
done
printf "\r\n" >> ${SRC}/depends.d
# # configure ufi-drv.s to all .s files
printf "##\r\n" >> ${SRC}/depends.d
printf "./ufi-drv.s: " >> ${SRC}/depends.d
(cd ${SRC}/ufi-drv && find -name "*.c") | while read -r file; do
file_no_ext="$${file%.*}"
file_no_ext=$${file_no_ext#./}
filename=$$(basename $$file_no_ext)
printf "ufi-drv/$$file.s " >> ${SRC}/depends.d
done
$$(ASSDIR)$(1)/%.c.asm: $$(SRC)$(1)/%.c; $$(compile)
printf "\r\n" >> ${SRC}/depends.d
# # configure keyboard.s to all .s files
printf "##\r\n" >> ${SRC}/depends.d
printf "./keyboard.s: " >> ${SRC}/depends.d
(cd ${SRC}/keyboard && find -name "*.c") | while read -r file; do
file_no_ext="$${file%.*}"
file_no_ext=$${file_no_ext#./}
filename=$$(basename $$file_no_ext)
printf "keyboard/$$file.s " >> ${SRC}/depends.d
done
echo "" >> ${SRC}/depends.d
$(1)_C_FILES := $$(wildcard $$(SRC)$(1)/*.c)
$(1)_S_FILES := $$(patsubst ./source-doc/%, ./%, $$($(1)_C_FILES:.c=.c.s))
./$(1).s: $$($(1)_S_FILES)
endef
echo "${SRC}depends.d created"
$(eval $(call build_subsystem,base-drv))
$(eval $(call build_subsystem,scsi-drv))
$(eval $(call build_subsystem,keyboard))
$(eval $(call build_subsystem,ufi-drv))

20
Source/HBIOS/ch376-native/base-drv.asm

@ -1,10 +1,10 @@
DELAY_FACTOR .EQU 640 DELAY_FACTOR .EQU 640
CMD01_RD_USB_DATA0 .EQU 0x27 ; Read data block from current USB interrupt endpoint buffer or host endpoint receive buffer
CMD01_RD_USB_DATA0 .EQU $27 ; Read data block from current USB interrupt endpoint buffer or host endpoint receive buffer
; output: length, data stream ; output: length, data stream
CMD10_WR_HOST_DATA .EQU 0x2C ; Write a data block to the send buffer of the USB host endpoint
CMD10_WR_HOST_DATA .EQU $2C ; Write a data block to the send buffer of the USB host endpoint
; input: length, data stream ; input: length, data stream
CH_CMD_RD_USB_DATA0 .EQU CMD01_RD_USB_DATA0 CH_CMD_RD_USB_DATA0 .EQU CMD01_RD_USB_DATA0
@ -36,26 +36,25 @@ keep_waiting:
or l or l
jr nz, _ch_wait_int_and_get_status jr nz, _ch_wait_int_and_get_status
CALL _delay
call _delay
ld a, $FF ld a, $FF
in a, (_CH376_COMMAND_PORT & 0xFF)
bit 4, a ; _CH376_COMMAND_PORT & PARA_STATE_BUSY
in a, (_CH376_COMMAND_PORT & $FF)
bit 4, a ; _CH376_COMMAND_PORT & PARA_STATE_BUSY
ld l, 0x0C ; USB_ERR_CH376_BLOCKED;
ld l, $0C ; USB_ERR_CH376_BLOCKED;
ret nz ret nz
ld l, 0x0D ; USB_ERR_CH376_TIMEOUT
ld l, $0D ; USB_ERR_CH376_TIMEOUT
ret ret
; uint8_t ch_read_data(uint8_t *buffer) __sdcccall(1); ; uint8_t ch_read_data(uint8_t *buffer) __sdcccall(1);
_ch_read_data: _ch_read_data:
; ch_command(CH_CMD_RD_USB_DATA0);
push hl push hl
ld l, CH_CMD_RD_USB_DATA0 ld l, CH_CMD_RD_USB_DATA0
call _ch_command call _ch_command
pop hl pop hl
CALL _delay
call _delay
ld bc, _CH376_DATA_PORT ld bc, _CH376_DATA_PORT
in a, (c) in a, (c)
@ -65,7 +64,7 @@ _ch_read_data:
ld e, a ld e, a
push af push af
read_block: read_block:
CALL _delay
call _delay
in a, (c) in a, (c)
ld (hl), a ld (hl), a
inc hl inc hl
@ -77,7 +76,6 @@ read_block:
;const uint8_t *ch_write_data(const uint8_t *buffer, uint8_t length) ;const uint8_t *ch_write_data(const uint8_t *buffer, uint8_t length)
_ch_write_data: _ch_write_data:
;libraries/usb/ch376.c:125: ch_command(CH_CMD_WR_HOST_DATA);
ld l, CH_CMD_WR_HOST_DATA ld l, CH_CMD_WR_HOST_DATA
call _ch_command call _ch_command

16
Source/HBIOS/ch376-native/base-drv.s

@ -1,14 +1,14 @@
; Generated File -- not to be modify directly ; Generated File -- not to be modify directly
#include "ch376-native/base-drv/dev_transfers.c.s"
#include "ch376-native/base-drv/ch376.c.s"
#include "ch376-native/base-drv/class_hub.c.s"
#include "ch376-native/base-drv/critical-section.c.s" #include "ch376-native/base-drv/critical-section.c.s"
#include "ch376-native/base-drv/dev_transfers.c.s"
#include "ch376-native/base-drv/enumerate.c.s" #include "ch376-native/base-drv/enumerate.c.s"
#include "ch376-native/base-drv/usb_state.c.s"
#include "ch376-native/base-drv/class_hub.c.s"
#include "ch376-native/base-drv/enumerate_storage.c.s"
#include "ch376-native/base-drv/enumerate_hub.c.s" #include "ch376-native/base-drv/enumerate_hub.c.s"
#include "ch376-native/base-drv/usb-base-drv.c.s"
#include "ch376-native/base-drv/transfers.c.s"
#include "ch376-native/base-drv/ch376.c.s"
#include "ch376-native/base-drv/enumerate_storage.c.s"
#include "ch376-native/base-drv/protocol.c.s" #include "ch376-native/base-drv/protocol.c.s"
#include "ch376-native/base-drv/work-area.c.s"
#include "ch376-native/base-drv/transfers.c.s"
#include "ch376-native/base-drv/usb-base-drv.c.s"
#include "ch376-native/base-drv/usb-init.c.s" #include "ch376-native/base-drv/usb-init.c.s"
#include "ch376-native/base-drv/usb_state.c.s"
#include "ch376-native/base-drv/work-area.c.s"

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

File diff suppressed because it is too large

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

@ -1,5 +1,5 @@
; ;
; Generated from source-doc/base-drv/./ch376.c.asm -- not to be modify directly
; Generated from source-doc/base-drv/ch376.c.asm -- not to be modify directly
; ;
; ;
;-------------------------------------------------------- ;--------------------------------------------------------
@ -50,12 +50,12 @@ _result:
;-------------------------------------------------------- ;--------------------------------------------------------
; code ; code
;-------------------------------------------------------- ;--------------------------------------------------------
;source-doc/base-drv/./ch376.c:8: void ch_command(const uint8_t command) __z88dk_fastcall {
;source-doc/base-drv/ch376.c:8: void ch_command(const uint8_t command) __z88dk_fastcall {
; --------------------------------- ; ---------------------------------
; Function ch_command ; Function ch_command
; --------------------------------- ; ---------------------------------
_ch_command: _ch_command:
;source-doc/base-drv/./ch376.c:10: while ((CH376_COMMAND_PORT & PARA_STATE_BUSY) && --counter != 0)
;source-doc/base-drv/ch376.c:10: while ((CH376_COMMAND_PORT & PARA_STATE_BUSY) && --counter != 0)
ld c,0xff ld c,0xff
l_ch_command_00102: l_ch_command_00102:
ld a, +((_CH376_COMMAND_PORT) / 256) ld a, +((_CH376_COMMAND_PORT) / 256)
@ -65,223 +65,224 @@ l_ch_command_00102:
dec c dec c
jr NZ,l_ch_command_00102 jr NZ,l_ch_command_00102
l_ch_command_00104: l_ch_command_00104:
;source-doc/base-drv/./ch376.c:21: CH376_COMMAND_PORT = command;
;source-doc/base-drv/ch376.c:21: CH376_COMMAND_PORT = command;
ld a, l ld a, l
ld bc,_CH376_COMMAND_PORT ld bc,_CH376_COMMAND_PORT
out (c),a out (c),a
;source-doc/base-drv/./ch376.c:22: }
;source-doc/base-drv/ch376.c:22: }
ret ret
;source-doc/base-drv/./ch376.c:26: usb_error ch_long_wait_int_and_get_status(void) { return ch_wait_int_and_get_status(5000); }
;source-doc/base-drv/ch376.c:26: usb_error ch_long_wait_int_and_get_status(void) { return ch_wait_int_and_get_status(5000); }
; --------------------------------- ; ---------------------------------
; Function ch_long_wait_int_and_get_status ; Function ch_long_wait_int_and_get_status
; --------------------------------- ; ---------------------------------
_ch_long_wait_int_and_get_statu: _ch_long_wait_int_and_get_statu:
ld hl,0x1388 ld hl,0x1388
jp _ch_wait_int_and_get_status jp _ch_wait_int_and_get_status
;source-doc/base-drv/./ch376.c:28: usb_error ch_short_wait_int_and_get_statu(void) { return ch_wait_int_and_get_status(100); }
;source-doc/base-drv/ch376.c:28: usb_error ch_short_wait_int_and_get_statu(void) { return ch_wait_int_and_get_status(100); }
; --------------------------------- ; ---------------------------------
; Function ch_short_wait_int_and_get_statu ; Function ch_short_wait_int_and_get_statu
; --------------------------------- ; ---------------------------------
_ch_short_wait_int_and_get_stat: _ch_short_wait_int_and_get_stat:
ld hl,0x0064 ld hl,0x0064
jp _ch_wait_int_and_get_status jp _ch_wait_int_and_get_status
;source-doc/base-drv/./ch376.c:30: usb_error ch_very_short_wait_int_and_get_(void) { return ch_wait_int_and_get_status(10); }
;source-doc/base-drv/ch376.c:30: usb_error ch_very_short_wait_int_and_get_(void) { return ch_wait_int_and_get_status(10); }
; --------------------------------- ; ---------------------------------
; Function ch_very_short_wait_int_and_get_ ; Function ch_very_short_wait_int_and_get_
; --------------------------------- ; ---------------------------------
_ch_very_short_wait_int_and_get: _ch_very_short_wait_int_and_get:
ld hl,0x000a ld hl,0x000a
jp _ch_wait_int_and_get_status jp _ch_wait_int_and_get_status
;source-doc/base-drv/./ch376.c:32: usb_error ch_get_status(void) {
;source-doc/base-drv/ch376.c:32: usb_error ch_get_status(void) {
; --------------------------------- ; ---------------------------------
; Function ch_get_status ; Function ch_get_status
; --------------------------------- ; ---------------------------------
_ch_get_status: _ch_get_status:
;source-doc/base-drv/./ch376.c:33: ch_command(CH_CMD_GET_STATUS);
;source-doc/base-drv/ch376.c:33: ch_command(CH_CMD_GET_STATUS);
ld l,0x22 ld l,0x22
call _ch_command call _ch_command
;source-doc/base-drv/./ch376.c:34: uint8_t ch_status = CH376_DATA_PORT;
;source-doc/base-drv/ch376.c:34: uint8_t ch_status = CH376_DATA_PORT;
ld a, +((_CH376_DATA_PORT) / 256) ld a, +((_CH376_DATA_PORT) / 256)
in a, (((_CH376_DATA_PORT) & 0xFF)) in a, (((_CH376_DATA_PORT) & 0xFF))
;source-doc/base-drv/./ch376.c:36: if (ch_status >= USB_FILERR_MIN && ch_status <= USB_FILERR_MAX)
;source-doc/base-drv/ch376.c:36: if (ch_status >= USB_FILERR_MIN && ch_status <= USB_FILERR_MAX)
ld l,a ld l,a
sub 0x41 sub 0x41
jr C,l_ch_get_status_00102 jr C,l_ch_get_status_00102
ld a,0xb4 ld a,0xb4
sub l sub l
;source-doc/base-drv/./ch376.c:37: return ch_status;
;source-doc/base-drv/ch376.c:37: return ch_status;
jr NC,l_ch_get_status_00126 jr NC,l_ch_get_status_00126
l_ch_get_status_00102: l_ch_get_status_00102:
;source-doc/base-drv/./ch376.c:39: if (ch_status == CH_CMD_RET_SUCCESS)
;source-doc/base-drv/ch376.c:39: if (ch_status == CH_CMD_RET_SUCCESS)
ld a, l ld a, l
;source-doc/base-drv/./ch376.c:40: return USB_ERR_OK;
;source-doc/base-drv/ch376.c:40: return USB_ERR_OK;
sub 0x51 sub 0x51
jr NZ,l_ch_get_status_00105 jr NZ,l_ch_get_status_00105
ld l,a ld l,a
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00105: l_ch_get_status_00105:
;source-doc/base-drv/./ch376.c:42: if (ch_status == CH_USB_INT_SUCCESS)
;source-doc/base-drv/ch376.c:42: if (ch_status == CH_USB_INT_SUCCESS)
ld a, l ld a, l
;source-doc/base-drv/./ch376.c:43: return USB_ERR_OK;
;source-doc/base-drv/ch376.c:43: return USB_ERR_OK;
sub 0x14 sub 0x14
jr NZ,l_ch_get_status_00107 jr NZ,l_ch_get_status_00107
ld l,a ld l,a
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00107: l_ch_get_status_00107:
;source-doc/base-drv/./ch376.c:45: if (ch_status == CH_USB_INT_CONNECT)
;source-doc/base-drv/ch376.c:45: if (ch_status == CH_USB_INT_CONNECT)
ld a, l ld a, l
sub 0x15 sub 0x15
jr NZ,l_ch_get_status_00109 jr NZ,l_ch_get_status_00109
;source-doc/base-drv/./ch376.c:46: return USB_INT_CONNECT;
;source-doc/base-drv/ch376.c:46: return USB_INT_CONNECT;
ld l,0x81 ld l,0x81
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00109: l_ch_get_status_00109:
;source-doc/base-drv/./ch376.c:48: if (ch_status == CH_USB_INT_DISK_READ)
;source-doc/base-drv/ch376.c:48: if (ch_status == CH_USB_INT_DISK_READ)
ld a, l ld a, l
sub 0x1d sub 0x1d
jr NZ,l_ch_get_status_00111 jr NZ,l_ch_get_status_00111
;source-doc/base-drv/./ch376.c:49: return USB_ERR_DISK_READ;
;source-doc/base-drv/ch376.c:49: return USB_ERR_DISK_READ;
ld l,0x1d ld l,0x1d
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00111: l_ch_get_status_00111:
;source-doc/base-drv/./ch376.c:51: if (ch_status == CH_USB_INT_DISK_WRITE)
;source-doc/base-drv/ch376.c:51: if (ch_status == CH_USB_INT_DISK_WRITE)
ld a, l ld a, l
sub 0x1e sub 0x1e
jr NZ,l_ch_get_status_00113 jr NZ,l_ch_get_status_00113
;source-doc/base-drv/./ch376.c:52: return USB_ERR_DISK_WRITE;
;source-doc/base-drv/ch376.c:52: return USB_ERR_DISK_WRITE;
ld l,0x1e ld l,0x1e
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00113: l_ch_get_status_00113:
;source-doc/base-drv/./ch376.c:54: if (ch_status == CH_USB_INT_DISCONNECT) {
;source-doc/base-drv/ch376.c:54: if (ch_status == CH_USB_INT_DISCONNECT) {
ld a, l ld a, l
sub 0x16 sub 0x16
jr NZ,l_ch_get_status_00115 jr NZ,l_ch_get_status_00115
;source-doc/base-drv/./ch376.c:55: ch_cmd_set_usb_mode(5);
;source-doc/base-drv/ch376.c:55: ch_cmd_set_usb_mode(5);
ld l,0x05 ld l,0x05
call _ch_cmd_set_usb_mode call _ch_cmd_set_usb_mode
;source-doc/base-drv/./ch376.c:56: return USB_ERR_NO_DEVICE;
;source-doc/base-drv/ch376.c:56: return USB_ERR_NO_DEVICE;
ld l,0x05 ld l,0x05
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00115: l_ch_get_status_00115:
;source-doc/base-drv/./ch376.c:59: if (ch_status == CH_USB_INT_BUF_OVER)
;source-doc/base-drv/ch376.c:59: if (ch_status == CH_USB_INT_BUF_OVER)
ld a, l ld a, l
sub 0x17 sub 0x17
jr NZ,l_ch_get_status_00117 jr NZ,l_ch_get_status_00117
;source-doc/base-drv/./ch376.c:60: return USB_ERR_DATA_ERROR;
;source-doc/base-drv/ch376.c:60: return USB_ERR_DATA_ERROR;
ld l,0x04 ld l,0x04
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00117: l_ch_get_status_00117:
;source-doc/base-drv/./ch376.c:62: ch_status &= 0x2F;
;source-doc/base-drv/ch376.c:62: ch_status &= 0x2F;
ld a, l ld a, l
and 0x2f and 0x2f
;source-doc/base-drv/./ch376.c:64: if (ch_status == 0x2A)
;source-doc/base-drv/ch376.c:64: if (ch_status == 0x2A)
cp 0x2a cp 0x2a
jr NZ,l_ch_get_status_00119 jr NZ,l_ch_get_status_00119
;source-doc/base-drv/./ch376.c:65: return USB_ERR_NAK;
;source-doc/base-drv/ch376.c:65: return USB_ERR_NAK;
ld l,0x01 ld l,0x01
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00119: l_ch_get_status_00119:
;source-doc/base-drv/./ch376.c:67: if (ch_status == 0x2E)
;source-doc/base-drv/ch376.c:67: if (ch_status == 0x2E)
cp 0x2e cp 0x2e
jr NZ,l_ch_get_status_00121 jr NZ,l_ch_get_status_00121
;source-doc/base-drv/./ch376.c:68: return USB_ERR_STALL;
;source-doc/base-drv/ch376.c:68: return USB_ERR_STALL;
ld l,0x02 ld l,0x02
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00121: l_ch_get_status_00121:
;source-doc/base-drv/./ch376.c:70: ch_status &= 0x23;
;source-doc/base-drv/ch376.c:70: ch_status &= 0x23;
and 0x23 and 0x23
;source-doc/base-drv/./ch376.c:72: if (ch_status == 0x20)
;source-doc/base-drv/ch376.c:72: if (ch_status == 0x20)
cp 0x20 cp 0x20
jr NZ,l_ch_get_status_00123 jr NZ,l_ch_get_status_00123
;source-doc/base-drv/./ch376.c:73: return USB_ERR_TIMEOUT;
;source-doc/base-drv/ch376.c:73: return USB_ERR_TIMEOUT;
ld l,0x03 ld l,0x03
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00123: l_ch_get_status_00123:
;source-doc/base-drv/./ch376.c:75: if (ch_status == 0x23)
;source-doc/base-drv/ch376.c:75: if (ch_status == 0x23)
sub 0x23 sub 0x23
jr NZ,l_ch_get_status_00125 jr NZ,l_ch_get_status_00125
;source-doc/base-drv/./ch376.c:76: return USB_TOKEN_OUT_OF_SYNC;
;source-doc/base-drv/ch376.c:76: return USB_TOKEN_OUT_OF_SYNC;
ld l,0x07 ld l,0x07
jr l_ch_get_status_00126 jr l_ch_get_status_00126
l_ch_get_status_00125: l_ch_get_status_00125:
;source-doc/base-drv/./ch376.c:78: return USB_ERR_UNEXPECTED_STATUS_FROM_;
;source-doc/base-drv/ch376.c:78: return USB_ERR_UNEXPECTED_STATUS_FROM_;
ld l,0x08 ld l,0x08
l_ch_get_status_00126: l_ch_get_status_00126:
;source-doc/base-drv/./ch376.c:79: }
;source-doc/base-drv/ch376.c:79: }
ret ret
;source-doc/base-drv/./ch376.c:81: void ch_cmd_reset_all(void) { ch_command(CH_CMD_RESET_ALL); }
;source-doc/base-drv/ch376.c:81: void ch_cmd_reset_all(void) { ch_command(CH_CMD_RESET_ALL); }
; --------------------------------- ; ---------------------------------
; Function ch_cmd_reset_all ; Function ch_cmd_reset_all
; --------------------------------- ; ---------------------------------
_ch_cmd_reset_all: _ch_cmd_reset_all:
ld l,0x05 ld l,0x05
jp _ch_command jp _ch_command
;source-doc/base-drv/./ch376.c:100: uint8_t ch_probe(void) {
;source-doc/base-drv/ch376.c:100: uint8_t ch_probe(void) {
; --------------------------------- ; ---------------------------------
; Function ch_probe ; Function ch_probe
; --------------------------------- ; ---------------------------------
_ch_probe: _ch_probe:
;source-doc/base-drv/./ch376.c:102: do {
ld c,0x05
push ix
ld ix,0
add ix,sp
dec sp
;source-doc/base-drv/ch376.c:102: do {
ld (ix-1),0x05
l_ch_probe_00103: l_ch_probe_00103:
;source-doc/base-drv/./ch376.c:85: ch_command(CH_CMD_CHECK_EXIST);
push bc
;source-doc/base-drv/ch376.c:85: ch_command(CH_CMD_CHECK_EXIST);
ld l,0x06 ld l,0x06
call _ch_command call _ch_command
pop bc
;source-doc/base-drv/./ch376.c:86: CH376_DATA_PORT = (uint8_t)~0x55;
;source-doc/base-drv/ch376.c:86: CH376_DATA_PORT = (uint8_t)~0x55;
ld a,0xaa ld a,0xaa
push bc
ld bc,_CH376_DATA_PORT ld bc,_CH376_DATA_PORT
out (c),a out (c),a
;source-doc/base-drv/ch376.c:87: delay();
call _delay call _delay
pop bc
;source-doc/base-drv/./ch376.c:88: complement = CH376_DATA_PORT;
;source-doc/base-drv/ch376.c:88: complement = CH376_DATA_PORT;
ld a, +((_CH376_DATA_PORT) / 256) ld a, +((_CH376_DATA_PORT) / 256)
in a, (((_CH376_DATA_PORT) & 0xFF)) in a, (((_CH376_DATA_PORT) & 0xFF))
;source-doc/base-drv/./ch376.c:89: return complement == 0x55;
;source-doc/base-drv/ch376.c:89: return complement == 0x55;
sub 0x55 sub 0x55
jr NZ,l_ch_probe_00102 jr NZ,l_ch_probe_00102
;source-doc/base-drv/./ch376.c:103: if (ch_cmd_check_exist())
;source-doc/base-drv/./ch376.c:104: return true;
;source-doc/base-drv/ch376.c:103: if (ch_cmd_check_exist())
;source-doc/base-drv/ch376.c:104: return true;
ld l,0x01 ld l,0x01
jr l_ch_probe_00107 jr l_ch_probe_00107
l_ch_probe_00102: l_ch_probe_00102:
;source-doc/base-drv/./ch376.c:106: delay_medium();
push bc
;source-doc/base-drv/ch376.c:106: delay_medium();
call _delay_medium call _delay_medium
pop bc
;source-doc/base-drv/./ch376.c:107: } while (--i != 0);
dec c
;source-doc/base-drv/ch376.c:107: } while (--i != 0);
dec (ix-1)
jr NZ,l_ch_probe_00103 jr NZ,l_ch_probe_00103
;source-doc/base-drv/./ch376.c:109: return false;
;source-doc/base-drv/ch376.c:109: return false;
ld l,0x00 ld l,0x00
l_ch_probe_00107: l_ch_probe_00107:
;source-doc/base-drv/./ch376.c:110: }
;source-doc/base-drv/ch376.c:110: }
inc sp
pop ix
ret ret
;source-doc/base-drv/./ch376.c:112: uint8_t ch_cmd_set_usb_mode(const uint8_t mode) __z88dk_fastcall {
;source-doc/base-drv/ch376.c:112: uint8_t ch_cmd_set_usb_mode(const uint8_t mode) __z88dk_fastcall {
; --------------------------------- ; ---------------------------------
; Function ch_cmd_set_usb_mode ; Function ch_cmd_set_usb_mode
; --------------------------------- ; ---------------------------------
_ch_cmd_set_usb_mode: _ch_cmd_set_usb_mode:
ld c, l ld c, l
;source-doc/base-drv/./ch376.c:113: uint8_t result = 0;
;source-doc/base-drv/ch376.c:113: uint8_t result = 0;
ld b,0x00 ld b,0x00
;source-doc/base-drv/./ch376.c:115: CH376_COMMAND_PORT = CH_CMD_SET_USB_MODE;
;source-doc/base-drv/ch376.c:115: CH376_COMMAND_PORT = CH_CMD_SET_USB_MODE;
ld a,0x15 ld a,0x15
push bc push bc
ld bc,_CH376_COMMAND_PORT ld bc,_CH376_COMMAND_PORT
out (c),a out (c),a
call _delay call _delay
pop bc pop bc
;source-doc/base-drv/./ch376.c:117: CH376_DATA_PORT = mode;
;source-doc/base-drv/ch376.c:117: CH376_DATA_PORT = mode;
ld a, c ld a, c
push bc push bc
ld bc,_CH376_DATA_PORT ld bc,_CH376_DATA_PORT
out (c),a out (c),a
call _delay call _delay
pop bc pop bc
;source-doc/base-drv/./ch376.c:122: while (result != CH_CMD_RET_SUCCESS && result != CH_CMD_RET_ABORT && --count != 0) {
;source-doc/base-drv/ch376.c:122: while (result != CH_CMD_RET_SUCCESS && result != CH_CMD_RET_ABORT && --count != 0) {
ld c,0x7f ld c,0x7f
l_ch_cmd_set_usb_mode_00103: l_ch_cmd_set_usb_mode_00103:
ld a, b ld a, b
@ -292,25 +293,25 @@ l_ch_cmd_set_usb_mode_00103:
l_ch_cmd_set_usb_mode_00146: l_ch_cmd_set_usb_mode_00146:
xor a xor a
l_ch_cmd_set_usb_mode_00147: l_ch_cmd_set_usb_mode_00147:
ld e, a
bit 0, e
ld e,a
bit 0,a
jr NZ,l_ch_cmd_set_usb_mode_00105 jr NZ,l_ch_cmd_set_usb_mode_00105
ld a, b ld a, b
sub 0x5f sub 0x5f
jr Z,l_ch_cmd_set_usb_mode_00105 jr Z,l_ch_cmd_set_usb_mode_00105
dec c dec c
jr Z,l_ch_cmd_set_usb_mode_00105 jr Z,l_ch_cmd_set_usb_mode_00105
;source-doc/base-drv/./ch376.c:123: result = CH376_DATA_PORT;
;source-doc/base-drv/ch376.c:123: result = CH376_DATA_PORT;
ld a, +((_CH376_DATA_PORT) / 256) ld a, +((_CH376_DATA_PORT) / 256)
in a, (((_CH376_DATA_PORT) & 0xFF)) in a, (((_CH376_DATA_PORT) & 0xFF))
ld b, a ld b, a
;source-doc/base-drv/./ch376.c:124: delay();
;source-doc/base-drv/ch376.c:124: delay();
push bc push bc
call _delay call _delay
pop bc pop bc
jr l_ch_cmd_set_usb_mode_00103 jr l_ch_cmd_set_usb_mode_00103
l_ch_cmd_set_usb_mode_00105: l_ch_cmd_set_usb_mode_00105:
;source-doc/base-drv/./ch376.c:127: return (result == CH_CMD_RET_SUCCESS) ? USB_ERR_OK : USB_ERR_FAIL;
;source-doc/base-drv/ch376.c:127: return (result == CH_CMD_RET_SUCCESS) ? USB_ERR_OK : USB_ERR_FAIL;
ld a, e ld a, e
or a or a
jr Z,l_ch_cmd_set_usb_mode_00108 jr Z,l_ch_cmd_set_usb_mode_00108
@ -319,24 +320,24 @@ l_ch_cmd_set_usb_mode_00105:
l_ch_cmd_set_usb_mode_00108: l_ch_cmd_set_usb_mode_00108:
ld l,0x0e ld l,0x0e
l_ch_cmd_set_usb_mode_00109: l_ch_cmd_set_usb_mode_00109:
;source-doc/base-drv/./ch376.c:128: }
;source-doc/base-drv/ch376.c:128: }
ret ret
;source-doc/base-drv/./ch376.c:130: uint8_t ch_cmd_get_ic_version(void) {
;source-doc/base-drv/ch376.c:130: uint8_t ch_cmd_get_ic_version(void) {
; --------------------------------- ; ---------------------------------
; Function ch_cmd_get_ic_version ; Function ch_cmd_get_ic_version
; --------------------------------- ; ---------------------------------
_ch_cmd_get_ic_version: _ch_cmd_get_ic_version:
;source-doc/base-drv/./ch376.c:131: ch_command(CH_CMD_GET_IC_VER);
;source-doc/base-drv/ch376.c:131: ch_command(CH_CMD_GET_IC_VER);
ld l,0x01 ld l,0x01
call _ch_command call _ch_command
;source-doc/base-drv/./ch376.c:132: return CH376_DATA_PORT & 0x1f;
;source-doc/base-drv/ch376.c:132: return CH376_DATA_PORT & 0x1f;
ld a, +((_CH376_DATA_PORT) / 256) ld a, +((_CH376_DATA_PORT) / 256)
in a, (((_CH376_DATA_PORT) & 0xFF)) in a, (((_CH376_DATA_PORT) & 0xFF))
and 0x1f and 0x1f
ld l, a ld l, a
;source-doc/base-drv/./ch376.c:133: }
;source-doc/base-drv/ch376.c:133: }
ret ret
;source-doc/base-drv/./ch376.c:135: void ch_issue_token(const uint8_t toggle_bit, const uint8_t endpoint, const ch376_pid pid) {
;source-doc/base-drv/ch376.c:135: void ch_issue_token(const uint8_t toggle_bit, const uint8_t endpoint, const ch376_pid pid) {
; --------------------------------- ; ---------------------------------
; Function ch_issue_token ; Function ch_issue_token
; --------------------------------- ; ---------------------------------
@ -344,14 +345,14 @@ _ch_issue_token:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
;source-doc/base-drv/./ch376.c:136: ch_command(CH_CMD_ISSUE_TKN_X);
;source-doc/base-drv/ch376.c:136: ch_command(CH_CMD_ISSUE_TKN_X);
ld l,0x4e ld l,0x4e
call _ch_command call _ch_command
;source-doc/base-drv/./ch376.c:137: CH376_DATA_PORT = toggle_bit;
;source-doc/base-drv/ch376.c:137: CH376_DATA_PORT = toggle_bit;
ld a,(ix+4) ld a,(ix+4)
ld bc,_CH376_DATA_PORT ld bc,_CH376_DATA_PORT
out (c),a out (c),a
;source-doc/base-drv/./ch376.c:138: CH376_DATA_PORT = endpoint << 4 | pid;
;source-doc/base-drv/ch376.c:138: CH376_DATA_PORT = endpoint << 4 | pid;
ld a,(ix+5) ld a,(ix+5)
add a, a add a, a
add a, a add a, a
@ -360,18 +361,17 @@ _ch_issue_token:
or (ix+6) or (ix+6)
ld bc,_CH376_DATA_PORT ld bc,_CH376_DATA_PORT
out (c),a out (c),a
;source-doc/base-drv/./ch376.c:139: }
;source-doc/base-drv/ch376.c:139: }
pop ix pop ix
ret ret
;source-doc/base-drv/./ch376.c:141: void ch_issue_token_in(const endpoint_param *const endpoint) __z88dk_fastcall {
;source-doc/base-drv/ch376.c:141: void ch_issue_token_in(const endpoint_param *const endpoint) __z88dk_fastcall {
; --------------------------------- ; ---------------------------------
; Function ch_issue_token_in ; Function ch_issue_token_in
; --------------------------------- ; ---------------------------------
_ch_issue_token_in: _ch_issue_token_in:
ex de, hl
;source-doc/base-drv/./ch376.c:142: ch_issue_token(endpoint->toggle ? 0x80 : 0x00, endpoint->number, CH_PID_IN);
ld l, e
ld h, d
;source-doc/base-drv/ch376.c:142: ch_issue_token(endpoint->toggle ? 0x80 : 0x00, endpoint->number, CH_PID_IN);
ld e,l
ld d,h
ld a, (hl) ld a, (hl)
rrca rrca
and 0x07 and 0x07
@ -386,26 +386,23 @@ l_ch_issue_token_in_00103:
xor a xor a
l_ch_issue_token_in_00104: l_ch_issue_token_in_00104:
ld h,0x09 ld h,0x09
ld l,b
push hl push hl
inc sp
push bc
inc sp
push af push af
inc sp inc sp
call _ch_issue_token call _ch_issue_token
pop af pop af
inc sp inc sp
;source-doc/base-drv/./ch376.c:143: }
;source-doc/base-drv/ch376.c:143: }
ret ret
;source-doc/base-drv/./ch376.c:145: void ch_issue_token_out(const endpoint_param *const endpoint) __z88dk_fastcall {
;source-doc/base-drv/ch376.c:145: void ch_issue_token_out(const endpoint_param *const endpoint) __z88dk_fastcall {
; --------------------------------- ; ---------------------------------
; Function ch_issue_token_out ; Function ch_issue_token_out
; --------------------------------- ; ---------------------------------
_ch_issue_token_out: _ch_issue_token_out:
ex de, hl
;source-doc/base-drv/./ch376.c:146: ch_issue_token(endpoint->toggle ? 0x40 : 0x00, endpoint->number, CH_PID_OUT);
ld l, e
ld h, d
;source-doc/base-drv/ch376.c:146: ch_issue_token(endpoint->toggle ? 0x40 : 0x00, endpoint->number, CH_PID_OUT);
ld e,l
ld d,h
ld a, (hl) ld a, (hl)
rrca rrca
and 0x07 and 0x07
@ -420,18 +417,16 @@ l_ch_issue_token_out_00103:
xor a xor a
l_ch_issue_token_out_00104: l_ch_issue_token_out_00104:
ld h,0x01 ld h,0x01
ld l,b
push hl push hl
inc sp
push bc
inc sp
push af push af
inc sp inc sp
call _ch_issue_token call _ch_issue_token
pop af pop af
inc sp inc sp
;source-doc/base-drv/./ch376.c:147: }
;source-doc/base-drv/ch376.c:147: }
ret ret
;source-doc/base-drv/./ch376.c:149: void ch_issue_token_out_ep0(void) { ch_issue_token(0x40, 0, CH_PID_OUT); }
;source-doc/base-drv/ch376.c:149: void ch_issue_token_out_ep0(void) { ch_issue_token(0x40, 0, CH_PID_OUT); }
; --------------------------------- ; ---------------------------------
; Function ch_issue_token_out_ep0 ; Function ch_issue_token_out_ep0
; --------------------------------- ; ---------------------------------
@ -447,7 +442,7 @@ _ch_issue_token_out_ep0:
pop af pop af
inc sp inc sp
ret ret
;source-doc/base-drv/./ch376.c:151: void ch_issue_token_in_ep0(void) { ch_issue_token(0x80, 0, CH_PID_IN); }
;source-doc/base-drv/ch376.c:151: void ch_issue_token_in_ep0(void) { ch_issue_token(0x80, 0, CH_PID_IN); }
; --------------------------------- ; ---------------------------------
; Function ch_issue_token_in_ep0 ; Function ch_issue_token_in_ep0
; --------------------------------- ; ---------------------------------
@ -463,7 +458,7 @@ _ch_issue_token_in_ep0:
pop af pop af
inc sp inc sp
ret ret
;source-doc/base-drv/./ch376.c:153: void ch_issue_token_setup(void) { ch_issue_token(0, 0, CH_PID_SETUP); }
;source-doc/base-drv/ch376.c:153: void ch_issue_token_setup(void) { ch_issue_token(0, 0, CH_PID_SETUP); }
; --------------------------------- ; ---------------------------------
; Function ch_issue_token_setup ; Function ch_issue_token_setup
; --------------------------------- ; ---------------------------------
@ -481,7 +476,7 @@ _ch_issue_token_setup:
pop af pop af
inc sp inc sp
ret ret
;source-doc/base-drv/./ch376.c:155: usb_error ch_data_in_transfer(uint8_t *buffer, int16_t buffer_size, endpoint_param *const endpoint) {
;source-doc/base-drv/ch376.c:155: usb_error ch_data_in_transfer(uint8_t *buffer, int16_t buffer_size, endpoint_param *const endpoint) {
; --------------------------------- ; ---------------------------------
; Function ch_data_in_transfer ; Function ch_data_in_transfer
; --------------------------------- ; ---------------------------------
@ -490,44 +485,43 @@ _ch_data_in_transfer:
ld ix,0 ld ix,0
add ix,sp add ix,sp
push af push af
;source-doc/base-drv/./ch376.c:158: if (buffer_size == 0)
;source-doc/base-drv/ch376.c:158: if (buffer_size == 0)
ld a,(ix+7) ld a,(ix+7)
or (ix+6) or (ix+6)
jr NZ,l_ch_data_in_transfer_00102 jr NZ,l_ch_data_in_transfer_00102
;source-doc/base-drv/./ch376.c:159: return USB_ERR_OK;
;source-doc/base-drv/ch376.c:159: return USB_ERR_OK;
ld l,0x00 ld l,0x00
jp l_ch_data_in_transfer_00111 jp l_ch_data_in_transfer_00111
l_ch_data_in_transfer_00102: l_ch_data_in_transfer_00102:
;source-doc/base-drv/./ch376.c:161: USB_MODULE_LEDS = 0x01;
;source-doc/base-drv/ch376.c:161: USB_MODULE_LEDS = 0x01;
ld a,0x01 ld a,0x01
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c),a out (c),a
;source-doc/base-drv/./ch376.c:162: do {
;source-doc/base-drv/ch376.c:162: do {
ld c,(ix+8) ld c,(ix+8)
ld b,(ix+9) ld b,(ix+9)
inc sp
inc sp
pop de
push bc push bc
l_ch_data_in_transfer_00107: l_ch_data_in_transfer_00107:
;source-doc/base-drv/./ch376.c:163: ch_issue_token_in(endpoint);
push bc
ld l, c
ld h, b
;source-doc/base-drv/ch376.c:163: ch_issue_token_in(endpoint);
ld l,c
ld h,b
push hl
call _ch_issue_token_in call _ch_issue_token_in
call _ch_long_wait_int_and_get_statu call _ch_long_wait_int_and_get_statu
pop bc pop bc
ld a, l ld a, l
ld (_result), a ld (_result), a
;source-doc/base-drv/./ch376.c:166: CHECK(result);
;source-doc/base-drv/ch376.c:166: CHECK(result);
ld a,(_result) ld a,(_result)
or a or a
jr NZ,l_ch_data_in_transfer_00110 jr NZ,l_ch_data_in_transfer_00110
;source-doc/base-drv/./ch376.c:168: endpoint->toggle = !endpoint->toggle;
;source-doc/base-drv/ch376.c:168: endpoint->toggle = !endpoint->toggle;
ld e, c ld e, c
ld d, b ld d, b
pop hl pop hl
ld a,(hl)
push hl push hl
ld a, (hl)
and 0x01 and 0x01
xor 0x01 xor 0x01
and 0x01 and 0x01
@ -536,32 +530,32 @@ l_ch_data_in_transfer_00107:
and 0xfe and 0xfe
or l or l
ld (de), a ld (de), a
;source-doc/base-drv/./ch376.c:170: count = ch_read_data(buffer);
;source-doc/base-drv/ch376.c:170: count = ch_read_data(buffer);
push bc push bc
ld l,(ix+4) ld l,(ix+4)
ld h,(ix+5) ld h,(ix+5)
call _ch_read_data call _ch_read_data
ld e, a ld e, a
pop bc pop bc
;source-doc/base-drv/./ch376.c:172: if (count == 0) {
;source-doc/base-drv/ch376.c:172: if (count == 0) {
ld a, e ld a, e
;source-doc/base-drv/./ch376.c:173: USB_MODULE_LEDS = 0x00;
;source-doc/base-drv/ch376.c:173: USB_MODULE_LEDS = 0x00;
or a or a
jr NZ,l_ch_data_in_transfer_00106 jr NZ,l_ch_data_in_transfer_00106
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c),a out (c),a
;source-doc/base-drv/./ch376.c:174: return USB_ERR_DATA_ERROR;
;source-doc/base-drv/ch376.c:174: return USB_ERR_DATA_ERROR;
ld l,0x04 ld l,0x04
jr l_ch_data_in_transfer_00111 jr l_ch_data_in_transfer_00111
l_ch_data_in_transfer_00106: l_ch_data_in_transfer_00106:
;source-doc/base-drv/./ch376.c:177: buffer += count;
;source-doc/base-drv/ch376.c:177: buffer += count;
ld a,(ix+4) ld a,(ix+4)
add a, e add a, e
ld (ix+4),a ld (ix+4),a
jr NC,l_ch_data_in_transfer_00148 jr NC,l_ch_data_in_transfer_00148
inc (ix+5) inc (ix+5)
l_ch_data_in_transfer_00148: l_ch_data_in_transfer_00148:
;source-doc/base-drv/./ch376.c:178: buffer_size -= count;
;source-doc/base-drv/ch376.c:178: buffer_size -= count;
ld d,0x00 ld d,0x00
ld a,(ix+6) ld a,(ix+6)
sub e sub e
@ -569,7 +563,7 @@ l_ch_data_in_transfer_00148:
ld a,(ix+7) ld a,(ix+7)
sbc a, d sbc a, d
ld (ix+7),a ld (ix+7),a
;source-doc/base-drv/./ch376.c:179: } while (buffer_size > 0);
;source-doc/base-drv/ch376.c:179: } while (buffer_size > 0);
xor a xor a
cp (ix+6) cp (ix+6)
sbc a,(ix+7) sbc a,(ix+7)
@ -577,24 +571,24 @@ l_ch_data_in_transfer_00148:
xor 0x80 xor 0x80
l_ch_data_in_transfer_00149: l_ch_data_in_transfer_00149:
jp M, l_ch_data_in_transfer_00107 jp M, l_ch_data_in_transfer_00107
;source-doc/base-drv/./ch376.c:181: USB_MODULE_LEDS = 0x00;
;source-doc/base-drv/ch376.c:181: USB_MODULE_LEDS = 0x00;
ld a,0x00 ld a,0x00
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c),a out (c),a
;source-doc/base-drv/./ch376.c:183: return USB_ERR_OK;
;source-doc/base-drv/ch376.c:183: return USB_ERR_OK;
ld l,0x00 ld l,0x00
jr l_ch_data_in_transfer_00111 jr l_ch_data_in_transfer_00111
;source-doc/base-drv/./ch376.c:184: done:
;source-doc/base-drv/ch376.c:184: done:
l_ch_data_in_transfer_00110: l_ch_data_in_transfer_00110:
;source-doc/base-drv/./ch376.c:185: return result;
ld hl,_result
ld l, (hl)
;source-doc/base-drv/ch376.c:185: return result;
ld hl,(_result)
ld h,+((_result) / 256)
l_ch_data_in_transfer_00111: l_ch_data_in_transfer_00111:
;source-doc/base-drv/./ch376.c:186: }
;source-doc/base-drv/ch376.c:186: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
;source-doc/base-drv/./ch376.c:188: usb_error ch_data_in_transfer_n(uint8_t *const buffer, int8_t *const buffer_size, endpoint_param *const endpoint) {
;source-doc/base-drv/ch376.c:188: usb_error ch_data_in_transfer_n(uint8_t *const buffer, int8_t *const buffer_size, endpoint_param *const endpoint) {
; --------------------------------- ; ---------------------------------
; Function ch_data_in_transfer_n ; Function ch_data_in_transfer_n
; --------------------------------- ; ---------------------------------
@ -602,21 +596,21 @@ _ch_data_in_transfer_n:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
;source-doc/base-drv/./ch376.c:192: USB_MODULE_LEDS = 0x01;
;source-doc/base-drv/ch376.c:192: USB_MODULE_LEDS = 0x01;
ld a,0x01 ld a,0x01
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c),a out (c),a
;source-doc/base-drv/./ch376.c:194: ch_issue_token_in(endpoint);
;source-doc/base-drv/ch376.c:194: ch_issue_token_in(endpoint);
ld l,(ix+8) ld l,(ix+8)
ld h,(ix+9) ld h,(ix+9)
call _ch_issue_token_in call _ch_issue_token_in
;source-doc/base-drv/./ch376.c:196: CHECK(ch_long_wait_int_and_get_status());
;source-doc/base-drv/ch376.c:196: CHECK(ch_long_wait_int_and_get_status());
call _ch_long_wait_int_and_get_statu call _ch_long_wait_int_and_get_statu
ld a, l ld a, l
ld b,a
ld b, a
or a or a
jr NZ,l_ch_data_in_transfer_n_00103 jr NZ,l_ch_data_in_transfer_n_00103
;source-doc/base-drv/./ch376.c:198: endpoint->toggle = !endpoint->toggle;
;source-doc/base-drv/ch376.c:198: endpoint->toggle = !endpoint->toggle;
ld e,(ix+8) ld e,(ix+8)
ld d,(ix+9) ld d,(ix+9)
ld c, e ld c, e
@ -631,30 +625,30 @@ _ch_data_in_transfer_n:
and 0xfe and 0xfe
or e or e
ld (bc), a ld (bc), a
;source-doc/base-drv/./ch376.c:200: count = ch_read_data(buffer);
;source-doc/base-drv/ch376.c:200: count = ch_read_data(buffer);
ld l,(ix+4) ld l,(ix+4)
ld h,(ix+5) ld h,(ix+5)
call _ch_read_data call _ch_read_data
;source-doc/base-drv/./ch376.c:202: *buffer_size = count;
;source-doc/base-drv/ch376.c:202: *buffer_size = count;
ld c,(ix+6) ld c,(ix+6)
ld b,(ix+7) ld b,(ix+7)
ld (bc), a ld (bc), a
;source-doc/base-drv/./ch376.c:204: USB_MODULE_LEDS = 0x00;
;source-doc/base-drv/ch376.c:204: USB_MODULE_LEDS = 0x00;
ld a,0x00 ld a,0x00
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c),a out (c),a
;source-doc/base-drv/./ch376.c:206: return USB_ERR_OK;
;source-doc/base-drv/ch376.c:206: return USB_ERR_OK;
ld l,0x00 ld l,0x00
jr l_ch_data_in_transfer_n_00104 jr l_ch_data_in_transfer_n_00104
;source-doc/base-drv/./ch376.c:207: done:
;source-doc/base-drv/ch376.c:207: done:
l_ch_data_in_transfer_n_00103: l_ch_data_in_transfer_n_00103:
;source-doc/base-drv/./ch376.c:208: return result;
;source-doc/base-drv/ch376.c:208: return result;
ld l, b ld l, b
l_ch_data_in_transfer_n_00104: l_ch_data_in_transfer_n_00104:
;source-doc/base-drv/./ch376.c:209: }
;source-doc/base-drv/ch376.c:209: }
pop ix pop ix
ret ret
;source-doc/base-drv/./ch376.c:211: usb_error ch_data_out_transfer(const uint8_t *buffer, int16_t buffer_length, endpoint_param *const endpoint) {
;source-doc/base-drv/ch376.c:211: usb_error ch_data_out_transfer(const uint8_t *buffer, int16_t buffer_length, endpoint_param *const endpoint) {
; --------------------------------- ; ---------------------------------
; Function ch_data_out_transfer ; Function ch_data_out_transfer
; --------------------------------- ; ---------------------------------
@ -664,7 +658,7 @@ _ch_data_out_transfer:
add ix,sp add ix,sp
push af push af
dec sp dec sp
;source-doc/base-drv/./ch376.c:214: const uint8_t max_packet_size = calc_max_packet_size(endpoint->max_packet_sizex);
;source-doc/base-drv/ch376.c:214: const uint8_t max_packet_size = calc_max_packet_size(endpoint->max_packet_sizex);
ld c,(ix+8) ld c,(ix+8)
ld b,(ix+9) ld b,(ix+9)
ld e, c ld e, c
@ -672,13 +666,13 @@ _ch_data_out_transfer:
inc de inc de
ld a, (de) ld a, (de)
ld (ix-3),a ld (ix-3),a
;source-doc/base-drv/./ch376.c:216: USB_MODULE_LEDS = 0x02;
;source-doc/base-drv/ch376.c:216: USB_MODULE_LEDS = 0x02;
ld a,0x02 ld a,0x02
push bc push bc
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c),a out (c),a
pop bc pop bc
;source-doc/base-drv/./ch376.c:218: while (buffer_length > 0) {
;source-doc/base-drv/ch376.c:218: while (buffer_length > 0) {
ld (ix-2),c ld (ix-2),c
ld (ix-1),b ld (ix-1),b
l_ch_data_out_transfer_00103: l_ch_data_out_transfer_00103:
@ -689,7 +683,7 @@ l_ch_data_out_transfer_00103:
xor 0x80 xor 0x80
l_ch_data_out_transfer_00139: l_ch_data_out_transfer_00139:
jp P, l_ch_data_out_transfer_00105 jp P, l_ch_data_out_transfer_00105
;source-doc/base-drv/./ch376.c:219: const uint8_t size = max_packet_size < buffer_length ? max_packet_size : buffer_length;
;source-doc/base-drv/ch376.c:219: const uint8_t size = max_packet_size < buffer_length ? max_packet_size : buffer_length;
ld d,(ix-3) ld d,(ix-3)
ld e,0x00 ld e,0x00
ld a, d ld a, d
@ -703,8 +697,9 @@ l_ch_data_out_transfer_00140:
jr l_ch_data_out_transfer_00110 jr l_ch_data_out_transfer_00110
l_ch_data_out_transfer_00109: l_ch_data_out_transfer_00109:
ld d,(ix+6) ld d,(ix+6)
ld e,(ix+7)
l_ch_data_out_transfer_00110: l_ch_data_out_transfer_00110:
;source-doc/base-drv/./ch376.c:220: buffer = ch_write_data(buffer, size);
;source-doc/base-drv/ch376.c:220: buffer = ch_write_data(buffer, size);
push bc push bc
push de push de
push de push de
@ -719,7 +714,7 @@ l_ch_data_out_transfer_00110:
pop bc pop bc
ld (ix+4),l ld (ix+4),l
ld (ix+5),h ld (ix+5),h
;source-doc/base-drv/./ch376.c:221: buffer_length -= size;
;source-doc/base-drv/ch376.c:221: buffer_length -= size;
ld e,0x00 ld e,0x00
ld a,(ix+6) ld a,(ix+6)
sub d sub d
@ -727,10 +722,10 @@ l_ch_data_out_transfer_00110:
ld a,(ix+7) ld a,(ix+7)
sbc a, e sbc a, e
ld (ix+7),a ld (ix+7),a
;source-doc/base-drv/./ch376.c:222: ch_issue_token_out(endpoint);
push bc
ld l, c
ld h, b
;source-doc/base-drv/ch376.c:222: ch_issue_token_out(endpoint);
ld l,c
ld h,b
push hl
call _ch_issue_token_out call _ch_issue_token_out
call _ch_long_wait_int_and_get_statu call _ch_long_wait_int_and_get_statu
ld a, l ld a, l
@ -738,7 +733,7 @@ l_ch_data_out_transfer_00110:
ld l, a ld l, a
or a or a
jr NZ,l_ch_data_out_transfer_00106 jr NZ,l_ch_data_out_transfer_00106
;source-doc/base-drv/./ch376.c:226: endpoint->toggle = !endpoint->toggle;
;source-doc/base-drv/ch376.c:226: endpoint->toggle = !endpoint->toggle;
ld e, c ld e, c
ld d, b ld d, b
ld l,(ix-2) ld l,(ix-2)
@ -754,34 +749,34 @@ l_ch_data_out_transfer_00110:
ld (de), a ld (de), a
jr l_ch_data_out_transfer_00103 jr l_ch_data_out_transfer_00103
l_ch_data_out_transfer_00105: l_ch_data_out_transfer_00105:
;source-doc/base-drv/./ch376.c:229: USB_MODULE_LEDS = 0x00;
;source-doc/base-drv/ch376.c:229: USB_MODULE_LEDS = 0x00;
ld a,0x00 ld a,0x00
ld bc,_USB_MODULE_LEDS ld bc,_USB_MODULE_LEDS
out (c),a out (c),a
;source-doc/base-drv/./ch376.c:231: return USB_ERR_OK;
;source-doc/base-drv/ch376.c:231: return USB_ERR_OK;
ld l,0x00 ld l,0x00
;source-doc/base-drv/./ch376.c:232: done:
;source-doc/base-drv/./ch376.c:233: return result;
;source-doc/base-drv/ch376.c:232: done:
;source-doc/base-drv/ch376.c:233: return result;
l_ch_data_out_transfer_00106: l_ch_data_out_transfer_00106:
;source-doc/base-drv/./ch376.c:234: }
;source-doc/base-drv/ch376.c:234: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
;source-doc/base-drv/./ch376.c:236: void ch_set_usb_address(const uint8_t device_address) __z88dk_fastcall {
;source-doc/base-drv/ch376.c:236: void ch_set_usb_address(const uint8_t device_address) __z88dk_fastcall {
; --------------------------------- ; ---------------------------------
; Function ch_set_usb_address ; Function ch_set_usb_address
; --------------------------------- ; ---------------------------------
_ch_set_usb_address: _ch_set_usb_address:
;source-doc/base-drv/./ch376.c:237: ch_command(CH_CMD_SET_USB_ADDR);
;source-doc/base-drv/ch376.c:237: ch_command(CH_CMD_SET_USB_ADDR);
push hl push hl
ld l,0x13 ld l,0x13
call _ch_command call _ch_command
pop hl pop hl
;source-doc/base-drv/./ch376.c:238: CH376_DATA_PORT = device_address;
;source-doc/base-drv/ch376.c:238: CH376_DATA_PORT = device_address;
ld a, l ld a, l
ld bc,_CH376_DATA_PORT ld bc,_CH376_DATA_PORT
out (c),a out (c),a
;source-doc/base-drv/./ch376.c:239: }
;source-doc/base-drv/ch376.c:239: }
ret ret
_result: _result:
DEFB +0x00 DEFB +0x00

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

@ -0,0 +1,458 @@
;--------------------------------------------------------
; 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

22
Source/HBIOS/ch376-native/base-drv/class_hub.c.s

@ -1,5 +1,5 @@
; ;
; Generated from source-doc/base-drv/./class_hub.c.asm -- not to be modify directly
; Generated from source-doc/base-drv/class_hub.c.asm -- not to be modify directly
; ;
; ;
;-------------------------------------------------------- ;--------------------------------------------------------
@ -48,39 +48,35 @@ _USB_MODULE_LEDS .EQU 0xff8a
;-------------------------------------------------------- ;--------------------------------------------------------
; code ; code
;-------------------------------------------------------- ;--------------------------------------------------------
;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) {
;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 ; Function hub_get_descriptor
; --------------------------------- ; ---------------------------------
_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);
;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 a,l
ld b,h
ld c,h
inc hl inc hl
ld c, (hl)
ld b, (hl)
ld l, a ld l, a
ld h, b
ld h, c
ld a, (hl) ld a, (hl)
rlca rlca
rlca rlca
rlca rlca
rlca rlca
and 0x0f and 0x0f
ld b, a
ld hl,_cmd_get_hub_descriptor
ld a, c
push af
inc sp
ld c, a
push bc push bc
inc sp
push de push de
ld hl,_cmd_get_hub_descriptor
push hl push hl
call _usb_control_transfer call _usb_control_transfer
pop af pop af
pop af pop af
pop af pop af
ld a, l ld a, l
;source-doc/base-drv/./class_hub.c:9: }
;source-doc/base-drv/class_hub.c:9: }
ret ret
_cmd_get_hub_descriptor: _cmd_get_hub_descriptor:
DEFB +0xa0 DEFB +0xa0

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

@ -1,5 +1,5 @@
; ;
; Generated from source-doc/base-drv/./critical-section.c.asm -- not to be modify directly
; Generated from source-doc/base-drv/critical-section.c.asm -- not to be modify directly
; ;
; ;
;-------------------------------------------------------- ;--------------------------------------------------------
@ -47,7 +47,7 @@ _in_critical_usb_section:
;-------------------------------------------------------- ;--------------------------------------------------------
; code ; code
;-------------------------------------------------------- ;--------------------------------------------------------
;source-doc/base-drv/./critical-section.c:6: void critical_begin() { in_critical_usb_section++; }
;source-doc/base-drv/critical-section.c:6: void critical_begin() { in_critical_usb_section++; }
; --------------------------------- ; ---------------------------------
; Function critical_begin ; Function critical_begin
; --------------------------------- ; ---------------------------------
@ -55,7 +55,7 @@ _critical_begin:
ld hl,_in_critical_usb_section ld hl,_in_critical_usb_section
inc (hl) inc (hl)
ret ret
;source-doc/base-drv/./critical-section.c:8: void critical_end() { in_critical_usb_section--; }
;source-doc/base-drv/critical-section.c:8: void critical_end() { in_critical_usb_section--; }
; --------------------------------- ; ---------------------------------
; Function critical_end ; Function critical_end
; --------------------------------- ; ---------------------------------

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

@ -0,0 +1,834 @@
;--------------------------------------------------------
; 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

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

@ -1,5 +1,5 @@
; ;
; Generated from source-doc/base-drv/./dev_transfers.c.asm -- not to be modify directly
; Generated from source-doc/base-drv/dev_transfers.c.asm -- not to be modify directly
; ;
; ;
;-------------------------------------------------------- ;--------------------------------------------------------
@ -48,7 +48,7 @@ _USB_MODULE_LEDS .EQU 0xff8a
;-------------------------------------------------------- ;--------------------------------------------------------
; code ; code
;-------------------------------------------------------- ;--------------------------------------------------------
;source-doc/base-drv/./dev_transfers.c:31: usb_error usbdev_control_transfer(device_config *const device, const setup_packet *const cmd_packet, uint8_t *const buffer) {
;source-doc/base-drv/dev_transfers.c:31: usb_error usbdev_control_transfer(device_config *const device, const setup_packet *const cmd_packet, uint8_t *const buffer) {
; --------------------------------- ; ---------------------------------
; Function usbdev_control_transfer ; Function usbdev_control_transfer
; --------------------------------- ; ---------------------------------
@ -56,11 +56,11 @@ _usbdev_control_transfer:
push ix push ix
ld ix,0 ld ix,0
add ix,sp 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 e,(ix+4)
ld d,(ix+5)
ld l, e
ld h, d
;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 inc hl
ld b, (hl) ld b, (hl)
ex de, hl ex de, hl
@ -72,10 +72,8 @@ _usbdev_control_transfer:
and 0x0f and 0x0f
ld e,(ix+8) ld e,(ix+8)
ld d,(ix+9) ld d,(ix+9)
ld c,a
push bc push bc
inc sp
push af
inc sp
push de push de
ld l,(ix+6) ld l,(ix+6)
ld h,(ix+7) ld h,(ix+7)
@ -84,10 +82,10 @@ _usbdev_control_transfer:
pop af pop af
pop af pop af
pop af pop af
;source-doc/base-drv/./dev_transfers.c:33: }
;source-doc/base-drv/dev_transfers.c:33: }
pop ix pop ix
ret ret
;source-doc/base-drv/./dev_transfers.c:35: usb_error usbdev_blk_out_trnsfer(device_config *const dev, const uint8_t *const buffer, const uint16_t buffer_size) {
;source-doc/base-drv/dev_transfers.c: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 ; Function usbdev_blk_out_trnsfer
; --------------------------------- ; ---------------------------------
@ -95,33 +93,27 @@ _usbdev_blk_out_trnsfer:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
push af
push af
;source-doc/base-drv/./dev_transfers.c:37: endpoint_param *const endpoint = &dev->endpoints[ENDPOINT_BULK_OUT];
ld a,(ix+4)
ld (ix-4),a
ld a,(ix+5)
ld (ix-3),a
ld a,(ix-4)
add a,0x03
ld (ix-2),a
ld a,(ix-3)
adc a,0x00
ld (ix-1),a
;source-doc/base-drv/./dev_transfers.c:39: result = usb_data_out_transfer(buffer, buffer_size, dev->address, endpoint);
pop hl
push hl
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) ld a, (hl)
rlca rlca
rlca rlca
rlca rlca
rlca rlca
and 0x0f and 0x0f
pop de
pop hl
push hl
push bc
push de push de
push hl
push bc
push af push af
inc sp inc sp
ld l,(ix+8) ld l,(ix+8)
@ -135,60 +127,60 @@ _usbdev_blk_out_trnsfer:
pop af pop af
pop af pop af
inc sp inc sp
pop de
pop bc
ld a, l ld a, l
ld (_result), a ld (_result), a
;source-doc/base-drv/./dev_transfers.c:41: if (result == USB_ERR_STALL) {
;source-doc/base-drv/dev_transfers.c:41: if (result == USB_ERR_STALL) {
ld a,(_result) ld a,(_result)
sub 0x02 sub 0x02
jr NZ,l_usbdev_blk_out_trnsfer_00102 jr NZ,l_usbdev_blk_out_trnsfer_00102
;source-doc/base-drv/./dev_transfers.c:42: usbtrn_clear_endpoint_halt(endpoint->number, dev->address, dev->max_packet_size);
pop hl
push hl
;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 inc hl
ld d, (hl)
pop hl
push hl
ld a, (hl)
ld (ix-1),a
ex de, hl
ld a, (hl) ld a, (hl)
rlca rlca
rlca rlca
rlca rlca
rlca rlca
and 0x0f and 0x0f
ld b, a
ld l,(ix-2)
ld h,(ix-1)
ld d, a
ld l, c
ld h, b
ld a, (hl) ld a, (hl)
rrca rrca
and 0x07 and 0x07
push de
inc sp
push bc push bc
inc sp
ld h,(ix-1)
ld l,d
push hl
push af push af
inc sp inc sp
call _usbtrn_clear_endpoint_halt call _usbtrn_clear_endpoint_halt
pop af pop af
inc sp inc sp
;source-doc/base-drv/./dev_transfers.c:43: endpoint->toggle = 0;
pop de
pop hl
push hl
push de
res 0, (hl)
;source-doc/base-drv/./dev_transfers.c:44: return USB_ERR_STALL;
pop bc
;source-doc/base-drv/dev_transfers.c:43: endpoint->toggle = 0;
ld a, (bc)
and 0xfe
ld (bc), a
;source-doc/base-drv/dev_transfers.c:44: return USB_ERR_STALL;
ld l,0x02 ld l,0x02
jr l_usbdev_blk_out_trnsfer_00104 jr l_usbdev_blk_out_trnsfer_00104
l_usbdev_blk_out_trnsfer_00102: 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
ld l, (hl)
;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: l_usbdev_blk_out_trnsfer_00104:
;source-doc/base-drv/./dev_transfers.c:51: }
ld sp, ix
;source-doc/base-drv/dev_transfers.c:51: }
inc sp
pop ix pop ix
ret ret
;source-doc/base-drv/./dev_transfers.c:53: usb_error usbdev_bulk_in_transfer(device_config *const dev, uint8_t *const buffer, uint8_t *const buffer_size) {
;source-doc/base-drv/dev_transfers.c: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 ; Function usbdev_bulk_in_transfer
; --------------------------------- ; ---------------------------------
@ -196,33 +188,25 @@ _usbdev_bulk_in_transfer:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
push af
push af
;source-doc/base-drv/./dev_transfers.c:54: endpoint_param *const endpoint = &dev->endpoints[ENDPOINT_BULK_IN];
ld a,(ix+4)
ld (ix-4),a
ld a,(ix+5)
ld (ix-3),a
ld a,(ix-4)
add a,0x06
ld (ix-2),a
ld a,(ix-3)
adc a,0x00
ld (ix-1),a
;source-doc/base-drv/./dev_transfers.c:56: result = usb_data_in_transfer_n(buffer, buffer_size, dev->address, endpoint);
pop hl
push hl
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) ld a, (hl)
rlca rlca
rlca rlca
rlca rlca
rlca rlca
and 0x0f and 0x0f
pop de
pop hl
push hl
push bc
push de
push de push de
push hl
push af push af
inc sp inc sp
ld l,(ix+8) ld l,(ix+8)
@ -236,19 +220,22 @@ _usbdev_bulk_in_transfer:
pop af pop af
pop af pop af
inc sp inc sp
pop de
pop bc
ld a, l ld a, l
ld (_result), a ld (_result), a
;source-doc/base-drv/./dev_transfers.c:58: if (result == USB_ERR_STALL) {
;source-doc/base-drv/dev_transfers.c:58: if (result == USB_ERR_STALL) {
ld a,(_result) ld a,(_result)
sub 0x02 sub 0x02
jr NZ,l_usbdev_bulk_in_transfer_00102 jr NZ,l_usbdev_bulk_in_transfer_00102
;source-doc/base-drv/./dev_transfers.c:59: usbtrn_clear_endpoint_halt(endpoint->number, dev->address, dev->max_packet_size);
pop hl
push hl
;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 inc hl
ld d, (hl)
pop hl
push hl
ld a, (hl)
ld (ix-1),a
ld l, c
ld h, b
ld a, (hl) ld a, (hl)
rlca rlca
rlca rlca
@ -256,40 +243,37 @@ _usbdev_bulk_in_transfer:
rlca rlca
and 0x0f and 0x0f
ld b, a ld b, a
ld l,(ix-2)
ld h,(ix-1)
ld l, e
ld h, d
ld a, (hl) ld a, (hl)
rrca rrca
and 0x07 and 0x07
push de push de
inc sp
push bc
inc sp
ld h,(ix-1)
ld l,b
push hl
push af push af
inc sp inc sp
call _usbtrn_clear_endpoint_halt call _usbtrn_clear_endpoint_halt
pop af pop af
inc sp inc sp
;source-doc/base-drv/./dev_transfers.c:60: endpoint->toggle = 0;
pop de pop de
pop hl
push hl
push de
;source-doc/base-drv/dev_transfers.c:60: endpoint->toggle = 0;
ex de, hl
res 0, (hl) res 0, (hl)
;source-doc/base-drv/./dev_transfers.c:61: return USB_ERR_STALL;
;source-doc/base-drv/dev_transfers.c:61: return USB_ERR_STALL;
ld l,0x02 ld l,0x02
jr l_usbdev_bulk_in_transfer_00104 jr l_usbdev_bulk_in_transfer_00104
l_usbdev_bulk_in_transfer_00102: 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
ld l, (hl)
;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: l_usbdev_bulk_in_transfer_00104:
;source-doc/base-drv/./dev_transfers.c:67: }
ld sp, ix
;source-doc/base-drv/dev_transfers.c:67: }
inc sp
pop ix pop ix
ret ret
;source-doc/base-drv/./dev_transfers.c:69: usb_error usbdev_dat_in_trnsfer(device_config *const device,
;source-doc/base-drv/dev_transfers.c:69: usb_error usbdev_dat_in_trnsfer(device_config *const device,
; --------------------------------- ; ---------------------------------
; Function usbdev_dat_in_trnsfer ; Function usbdev_dat_in_trnsfer
; --------------------------------- ; ---------------------------------
@ -297,41 +281,38 @@ _usbdev_dat_in_trnsfer:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
push af
push af
;source-doc/base-drv/./dev_transfers.c:74: endpoint_param *const endpoint = &device->endpoints[endpoint_type];
ld a,(ix+4)
ld (ix-4),a
ld a,(ix+5)
ld (ix-3),a
pop bc
push bc
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 inc bc
inc bc inc bc
push de
ld a,(ix+10) ld a,(ix+10)
ld e, a ld e, a
add a, a add a, a
add a, e add a, e
pop de
add a, c add a, c
ld (ix-2),a
ld c, a
ld a,0x00 ld a,0x00
adc a, b adc a, b
ld (ix-1),a
;source-doc/base-drv/./dev_transfers.c:76: result = usb_data_in_transfer(buffer, buffer_size, device->address, endpoint);
pop hl
push hl
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) ld a, (hl)
rlca rlca
rlca rlca
rlca rlca
rlca rlca
and 0x0f and 0x0f
pop de
pop hl
push hl
push bc
push de push de
push hl
push bc
push af push af
inc sp inc sp
ld l,(ix+8) ld l,(ix+8)
@ -345,60 +326,60 @@ _usbdev_dat_in_trnsfer:
pop af pop af
pop af pop af
inc sp inc sp
pop de
pop bc
ld a, l ld a, l
ld (_result), a ld (_result), a
;source-doc/base-drv/./dev_transfers.c:78: if (result == USB_ERR_STALL) {
;source-doc/base-drv/dev_transfers.c:78: if (result == USB_ERR_STALL) {
ld a,(_result) ld a,(_result)
sub 0x02 sub 0x02
jr NZ,l_usbdev_dat_in_trnsfer_00102 jr NZ,l_usbdev_dat_in_trnsfer_00102
;source-doc/base-drv/./dev_transfers.c:79: usbtrn_clear_endpoint_halt(endpoint->number, device->address, device->max_packet_size);
pop hl
push hl
;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 inc hl
ld d, (hl)
pop hl
push hl
ld a, (hl)
ld (ix-1),a
ex de, hl
ld a, (hl) ld a, (hl)
rlca rlca
rlca rlca
rlca rlca
rlca rlca
and 0x0f and 0x0f
ld b, a
ld l,(ix-2)
ld h,(ix-1)
ld d, a
ld l, c
ld h, b
ld a, (hl) ld a, (hl)
rrca rrca
and 0x07 and 0x07
push de
inc sp
push bc push bc
inc sp
ld h,(ix-1)
ld l,d
push hl
push af push af
inc sp inc sp
call _usbtrn_clear_endpoint_halt call _usbtrn_clear_endpoint_halt
pop af pop af
inc sp inc sp
;source-doc/base-drv/./dev_transfers.c:80: endpoint->toggle = 0;
pop de
pop hl
push hl
push de
res 0, (hl)
;source-doc/base-drv/./dev_transfers.c:81: return USB_ERR_STALL;
pop bc
;source-doc/base-drv/dev_transfers.c:80: endpoint->toggle = 0;
ld a, (bc)
and 0xfe
ld (bc), a
;source-doc/base-drv/dev_transfers.c:81: return USB_ERR_STALL;
ld l,0x02 ld l,0x02
jr l_usbdev_dat_in_trnsfer_00104 jr l_usbdev_dat_in_trnsfer_00104
l_usbdev_dat_in_trnsfer_00102: 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
ld l, (hl)
;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: l_usbdev_dat_in_trnsfer_00104:
;source-doc/base-drv/./dev_transfers.c:87: }
ld sp, ix
;source-doc/base-drv/dev_transfers.c:87: }
inc sp
pop ix pop ix
ret ret
;source-doc/base-drv/./dev_transfers.c:89: usb_error usbdev_dat_in_trnsfer_0(device_config *const device, uint8_t *const buffer, const uint8_t buffer_size) {
;source-doc/base-drv/dev_transfers.c: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 ; Function usbdev_dat_in_trnsfer_0
; --------------------------------- ; ---------------------------------
@ -407,21 +388,15 @@ _usbdev_dat_in_trnsfer_0:
ld ix,0 ld ix,0
add ix,sp add ix,sp
push af push af
push af
;source-doc/base-drv/./dev_transfers.c:90: endpoint_param *const endpoint = &device->endpoints[0];
ld a,(ix+4)
ld (ix-4),a
ld a,(ix+5)
ld (ix-3),a
ld a,(ix-4)
add a,0x03
ld (ix-2),a
ld a,(ix-3)
adc a,0x00
ld (ix-1),a
;source-doc/base-drv/./dev_transfers.c:92: result = usb_data_in_transfer(buffer, buffer_size, device->address, endpoint);
pop hl
push hl
;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) ld a, (hl)
rlca rlca
rlca rlca
@ -430,10 +405,9 @@ _usbdev_dat_in_trnsfer_0:
and 0x0f and 0x0f
ld c,(ix+8) ld c,(ix+8)
ld b,0x00 ld b,0x00
pop de
pop hl
push hl
push de push de
ld l,(ix-2)
ld h,(ix-1)
push hl push hl
push af push af
inc sp inc sp
@ -446,55 +420,50 @@ _usbdev_dat_in_trnsfer_0:
pop af pop af
pop af pop af
inc sp inc sp
pop de
ld a, l ld a, l
ld (_result), a ld (_result), a
;source-doc/base-drv/./dev_transfers.c:94: if (result == USB_ERR_STALL) {
;source-doc/base-drv/dev_transfers.c:94: if (result == USB_ERR_STALL) {
ld a,(_result) ld a,(_result)
sub 0x02 sub 0x02
jr NZ,l_usbdev_dat_in_trnsfer_0_00102 jr NZ,l_usbdev_dat_in_trnsfer_0_00102
;source-doc/base-drv/./dev_transfers.c:95: usbtrn_clear_endpoint_halt(endpoint->number, device->address, device->max_packet_size);
pop hl
push hl
;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 inc hl
ld d, (hl)
pop hl
push hl
ld b, (hl)
ex de, hl
ld a, (hl) ld a, (hl)
rlca rlca
rlca rlca
rlca rlca
rlca rlca
and 0x0f and 0x0f
ld b, a
ld l,(ix-2)
ld h,(ix-1)
ld a, (hl)
ld d, a
pop hl
ld a,(hl)
push hl
rrca rrca
and 0x07 and 0x07
push de
inc sp
ld c, d
push bc push bc
inc sp
push af push af
inc sp inc sp
call _usbtrn_clear_endpoint_halt call _usbtrn_clear_endpoint_halt
pop af pop af
inc sp inc sp
;source-doc/base-drv/./dev_transfers.c:96: endpoint->toggle = 0;
pop de
;source-doc/base-drv/dev_transfers.c:96: endpoint->toggle = 0;
pop hl pop hl
push hl push hl
push de
res 0, (hl) res 0, (hl)
;source-doc/base-drv/./dev_transfers.c:97: return USB_ERR_STALL;
;source-doc/base-drv/dev_transfers.c:97: return USB_ERR_STALL;
ld l,0x02 ld l,0x02
jr l_usbdev_dat_in_trnsfer_0_00103 jr l_usbdev_dat_in_trnsfer_0_00103
l_usbdev_dat_in_trnsfer_0_00102: l_usbdev_dat_in_trnsfer_0_00102:
;source-doc/base-drv/./dev_transfers.c:100: return result;
ld hl,_result
ld l, (hl)
;source-doc/base-drv/dev_transfers.c:100: return result;
ld hl,(_result)
l_usbdev_dat_in_trnsfer_0_00103: l_usbdev_dat_in_trnsfer_0_00103:
;source-doc/base-drv/./dev_transfers.c:101: }
;source-doc/base-drv/dev_transfers.c:101: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret

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

File diff suppressed because it is too large

524
Source/HBIOS/ch376-native/base-drv/enumerate.c.s

File diff suppressed because it is too large

160
Source/HBIOS/ch376-native/base-drv/enumerate_hub.c.s

@ -1,5 +1,5 @@
; ;
; Generated from source-doc/base-drv/./enumerate_hub.c.asm -- not to be modify directly
; Generated from source-doc/base-drv/enumerate_hub.c.asm -- not to be modify directly
; ;
; ;
;-------------------------------------------------------- ;--------------------------------------------------------
@ -48,7 +48,7 @@ _USB_MODULE_LEDS .EQU 0xff8a
;-------------------------------------------------------- ;--------------------------------------------------------
; code ; code
;-------------------------------------------------------- ;--------------------------------------------------------
;source-doc/base-drv/./enumerate_hub.c:13: usb_error hub_set_feature(const device_config_hub *const hub_config, const uint8_t feature, const uint8_t index) {
;source-doc/base-drv/enumerate_hub.c:13: usb_error hub_set_feature(const device_config_hub *const hub_config, const uint8_t feature, const uint8_t index) {
; --------------------------------- ; ---------------------------------
; Function hub_set_feature ; Function hub_set_feature
; --------------------------------- ; ---------------------------------
@ -59,49 +59,44 @@ _hub_set_feature:
ld hl, -8 ld hl, -8
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/base-drv/./enumerate_hub.c:15: set_feature = cmd_set_feature;
;source-doc/base-drv/enumerate_hub.c:15: set_feature = cmd_set_feature;
ld hl,0 ld hl,0
add hl, sp add hl, sp
ld c, l
ld b, h
ld e, c
ld d, b
push bc
ld hl,_cmd_set_feature
ld e,l
ld d,h
push hl
ld bc,0x0008 ld bc,0x0008
ld hl,_cmd_set_feature
ldir ldir
pop bc pop bc
;source-doc/base-drv/./enumerate_hub.c:17: set_feature.bValue[0] = feature;
;source-doc/base-drv/enumerate_hub.c:17: set_feature.bValue[0] = feature;
ld a,(ix+6) ld a,(ix+6)
ld (ix-6),a ld (ix-6),a
;source-doc/base-drv/./enumerate_hub.c:18: set_feature.bIndex[0] = index;
;source-doc/base-drv/enumerate_hub.c:18: set_feature.bIndex[0] = index;
ld a,(ix+7) ld a,(ix+7)
ld (ix-4),a ld (ix-4),a
;source-doc/base-drv/./enumerate_hub.c:19: return usb_control_transfer(&set_feature, 0, hub_config->address, hub_config->max_packet_size);
;source-doc/base-drv/enumerate_hub.c:19: return usb_control_transfer(&set_feature, 0, hub_config->address, hub_config->max_packet_size);
ld e,(ix+5)
ld a,(ix+4) ld a,(ix+4)
ld d,(ix+5)
ld l, a ld l, a
ld h, d
ld h, e
inc hl inc hl
ld e, (hl)
ld d, (hl)
ld l, a ld l, a
ld h, d
ld h, e
ld a, (hl) ld a, (hl)
rlca rlca
rlca rlca
rlca rlca
rlca rlca
and 0x0f and 0x0f
ld h, e
push hl
inc sp
push af
inc sp
ld e,a
push de
ld hl,0x0000 ld hl,0x0000
push hl push hl
push bc push bc
call _usb_control_transfer call _usb_control_transfer
;source-doc/base-drv/./enumerate_hub.c:20: }
;source-doc/base-drv/enumerate_hub.c:20: }
ld sp,ix ld sp,ix
pop ix pop ix
ret ret
@ -129,7 +124,7 @@ _cmd_get_status_port:
DEFB +0x01 DEFB +0x01
DEFB +0x00 DEFB +0x00
DEFW +0x0004 DEFW +0x0004
;source-doc/base-drv/./enumerate_hub.c:22: usb_error hub_clear_feature(const device_config_hub *const hub_config, const uint8_t feature, const uint8_t index) {
;source-doc/base-drv/enumerate_hub.c:22: usb_error hub_clear_feature(const device_config_hub *const hub_config, const uint8_t feature, const uint8_t index) {
; --------------------------------- ; ---------------------------------
; Function hub_clear_feature ; Function hub_clear_feature
; --------------------------------- ; ---------------------------------
@ -140,53 +135,48 @@ _hub_clear_feature:
ld hl, -8 ld hl, -8
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/base-drv/./enumerate_hub.c:24: clear_feature = cmd_clear_feature;
;source-doc/base-drv/enumerate_hub.c:24: clear_feature = cmd_clear_feature;
ld hl,0 ld hl,0
add hl, sp add hl, sp
ld c, l
ld b, h
ld e, c
ld d, b
push bc
ld hl,_cmd_clear_feature
ld e,l
ld d,h
push hl
ld bc,0x0008 ld bc,0x0008
ld hl,_cmd_clear_feature
ldir ldir
pop bc pop bc
;source-doc/base-drv/./enumerate_hub.c:26: clear_feature.bValue[0] = feature;
;source-doc/base-drv/enumerate_hub.c:26: clear_feature.bValue[0] = feature;
ld a,(ix+6) ld a,(ix+6)
ld (ix-6),a ld (ix-6),a
;source-doc/base-drv/./enumerate_hub.c:27: clear_feature.bIndex[0] = index;
;source-doc/base-drv/enumerate_hub.c:27: clear_feature.bIndex[0] = index;
ld a,(ix+7) ld a,(ix+7)
ld (ix-4),a ld (ix-4),a
;source-doc/base-drv/./enumerate_hub.c:28: return usb_control_transfer(&clear_feature, 0, hub_config->address, hub_config->max_packet_size);
;source-doc/base-drv/enumerate_hub.c:28: return usb_control_transfer(&clear_feature, 0, hub_config->address, hub_config->max_packet_size);
ld e,(ix+5)
ld a,(ix+4) ld a,(ix+4)
ld d,(ix+5)
ld l, a ld l, a
ld h, d
ld h, e
inc hl inc hl
ld e, (hl)
ld d, (hl)
ld l, a ld l, a
ld h, d
ld h, e
ld a, (hl) ld a, (hl)
rlca rlca
rlca rlca
rlca rlca
rlca rlca
and 0x0f and 0x0f
ld h, e
push hl
inc sp
push af
inc sp
ld e,a
push de
ld hl,0x0000 ld hl,0x0000
push hl push hl
push bc push bc
call _usb_control_transfer call _usb_control_transfer
;source-doc/base-drv/./enumerate_hub.c:29: }
;source-doc/base-drv/enumerate_hub.c:29: }
ld sp,ix ld sp,ix
pop ix pop ix
ret ret
;source-doc/base-drv/./enumerate_hub.c:31: usb_error hub_get_status_port(const device_config_hub *const hub_config, const uint8_t index, hub_port_status *const port_status) {
;source-doc/base-drv/enumerate_hub.c:31: usb_error hub_get_status_port(const device_config_hub *const hub_config, const uint8_t index, hub_port_status *const port_status) {
; --------------------------------- ; ---------------------------------
; Function hub_get_status_port ; Function hub_get_status_port
; --------------------------------- ; ---------------------------------
@ -197,21 +187,21 @@ _hub_get_status_port:
ld hl, -8 ld hl, -8
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/base-drv/./enumerate_hub.c:33: get_status_port = cmd_get_status_port;
;source-doc/base-drv/enumerate_hub.c:33: get_status_port = cmd_get_status_port;
ld hl,0 ld hl,0
add hl, sp add hl, sp
ex de, hl ex de, hl
ld hl,_cmd_get_status_port
ld bc,0x0008 ld bc,0x0008
ld hl,_cmd_get_status_port
ldir ldir
;source-doc/base-drv/./enumerate_hub.c:35: get_status_port.bIndex[0] = index;
;source-doc/base-drv/enumerate_hub.c:35: get_status_port.bIndex[0] = index;
ld a,(ix+6) ld a,(ix+6)
ld (ix-4),a ld (ix-4),a
;source-doc/base-drv/./enumerate_hub.c:36: return usb_control_transfer(&get_status_port, port_status, hub_config->address, hub_config->max_packet_size);
ld e,(ix+4)
ld d,(ix+5)
ld l, e
ld h, d
;source-doc/base-drv/enumerate_hub.c:36: return usb_control_transfer(&get_status_port, port_status, hub_config->address, hub_config->max_packet_size);
ld l,(ix+4)
ld h,(ix+5)
ld e,l
ld d,h
inc hl inc hl
ld b, (hl) ld b, (hl)
ex de, hl ex de, hl
@ -223,20 +213,18 @@ _hub_get_status_port:
and 0x0f and 0x0f
ld e,(ix+7) ld e,(ix+7)
ld d,(ix+8) ld d,(ix+8)
ld hl,0
add hl, sp
ld c,a
push bc push bc
inc sp
push af
inc sp
push de push de
ld hl,4
add hl, sp
push hl push hl
call _usb_control_transfer call _usb_control_transfer
;source-doc/base-drv/./enumerate_hub.c:37: }
;source-doc/base-drv/enumerate_hub.c:37: }
ld sp,ix ld sp,ix
pop ix pop ix
ret ret
;source-doc/base-drv/./enumerate_hub.c:39: usb_error configure_usb_hub(_working *const working) __z88dk_fastcall {
;source-doc/base-drv/enumerate_hub.c:39: usb_error configure_usb_hub(_working *const working) __z88dk_fastcall {
; --------------------------------- ; ---------------------------------
; Function configure_usb_hub ; Function configure_usb_hub
; --------------------------------- ; ---------------------------------
@ -249,32 +237,30 @@ _configure_usb_hub:
ld hl, -14 ld hl, -14
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/base-drv/enumerate_hub.c:45: const device_config_hub *const hub_config = working->hub_config;
ld (ix-2),c ld (ix-2),c
ld (ix-1),b ld (ix-1),b
;source-doc/base-drv/./enumerate_hub.c:45: const device_config_hub *const hub_config = working->hub_config;
ld c,(ix-2)
ld b,(ix-1)
ld hl,25 ld hl,25
add hl, bc add hl, bc
ld c, (hl) ld c, (hl)
inc hl inc hl
ld b, (hl) ld b, (hl)
;source-doc/base-drv/./enumerate_hub.c:47: CHECK(hub_get_descriptor(hub_config, &hub_description));
;source-doc/base-drv/enumerate_hub.c:47: CHECK(hub_get_descriptor(hub_config, &hub_description));
push bc push bc
ld hl,2 ld hl,2
add hl, sp add hl, sp
ex de, hl
ld l, c
ld h, b
ld e,c
ld d,b
ex de,hl
call _hub_get_descriptor call _hub_get_descriptor
pop bc pop bc
or a or a
jp NZ, l_configure_usb_hub_00129 jp NZ, l_configure_usb_hub_00129
;source-doc/base-drv/./enumerate_hub.c:49: uint8_t i = hub_description.bNbrPorts;
;source-doc/base-drv/enumerate_hub.c:49: uint8_t i = hub_description.bNbrPorts;
ld d,(ix-12) ld d,(ix-12)
;source-doc/base-drv/./enumerate_hub.c:50: do {
;source-doc/base-drv/enumerate_hub.c:50: do {
l_configure_usb_hub_00126: l_configure_usb_hub_00126:
;source-doc/base-drv/./enumerate_hub.c:51: CHECK(hub_clear_feature(hub_config, FEAT_PORT_POWER, i));
;source-doc/base-drv/enumerate_hub.c:51: CHECK(hub_clear_feature(hub_config, FEAT_PORT_POWER, i));
push bc push bc
push de push de
ld e,0x08 ld e,0x08
@ -288,7 +274,7 @@ l_configure_usb_hub_00126:
pop bc pop bc
or a or a
jp NZ, l_configure_usb_hub_00129 jp NZ, l_configure_usb_hub_00129
;source-doc/base-drv/./enumerate_hub.c:53: CHECK(hub_set_feature(hub_config, FEAT_PORT_POWER, i));
;source-doc/base-drv/enumerate_hub.c:53: CHECK(hub_set_feature(hub_config, FEAT_PORT_POWER, i));
push bc push bc
push de push de
ld e,0x08 ld e,0x08
@ -302,7 +288,7 @@ l_configure_usb_hub_00126:
pop bc pop bc
or a or a
jp NZ, l_configure_usb_hub_00129 jp NZ, l_configure_usb_hub_00129
;source-doc/base-drv/./enumerate_hub.c:55: hub_clear_feature(hub_config, FEAT_PORT_RESET, i);
;source-doc/base-drv/enumerate_hub.c:55: hub_clear_feature(hub_config, FEAT_PORT_RESET, i);
push bc push bc
push de push de
ld e,0x04 ld e,0x04
@ -313,7 +299,7 @@ l_configure_usb_hub_00126:
pop af pop af
pop de pop de
pop bc pop bc
;source-doc/base-drv/./enumerate_hub.c:57: CHECK(hub_set_feature(hub_config, FEAT_PORT_RESET, i));
;source-doc/base-drv/enumerate_hub.c:57: CHECK(hub_set_feature(hub_config, FEAT_PORT_RESET, i));
push bc push bc
push de push de
ld e,0x04 ld e,0x04
@ -327,7 +313,7 @@ l_configure_usb_hub_00126:
pop bc pop bc
or a or a
jp NZ, l_configure_usb_hub_00129 jp NZ, l_configure_usb_hub_00129
;source-doc/base-drv/./enumerate_hub.c:59: CHECK(hub_get_status_port(hub_config, i, &port_status));
;source-doc/base-drv/enumerate_hub.c:59: CHECK(hub_get_status_port(hub_config, i, &port_status));
push bc push bc
push de push de
ld hl,12 ld hl,12
@ -345,13 +331,13 @@ l_configure_usb_hub_00126:
pop bc pop bc
or a or a
jp NZ, l_configure_usb_hub_00129 jp NZ, l_configure_usb_hub_00129
;source-doc/base-drv/./enumerate_hub.c:61: if (port_status.wPortStatus.port_connection) {
;source-doc/base-drv/enumerate_hub.c:61: if (port_status.wPortStatus.port_connection) {
ld hl,8 ld hl,8
add hl, sp add hl, sp
ld a, (hl) ld a, (hl)
and 0x01 and 0x01
jr Z,l_configure_usb_hub_00124 jr Z,l_configure_usb_hub_00124
;source-doc/base-drv/./enumerate_hub.c:62: CHECK(hub_clear_feature(hub_config, HUB_FEATURE_PORT_CONNECTION_CHA, i));
;source-doc/base-drv/enumerate_hub.c:62: CHECK(hub_clear_feature(hub_config, HUB_FEATURE_PORT_CONNECTION_CHA, i));
push bc push bc
push de push de
ld e,0x10 ld e,0x10
@ -365,7 +351,7 @@ l_configure_usb_hub_00126:
pop bc pop bc
or a or a
jr NZ,l_configure_usb_hub_00129 jr NZ,l_configure_usb_hub_00129
;source-doc/base-drv/./enumerate_hub.c:64: CHECK(hub_clear_feature(hub_config, FEAT_PORT_ENABLE_CHANGE, i));
;source-doc/base-drv/enumerate_hub.c:64: CHECK(hub_clear_feature(hub_config, FEAT_PORT_ENABLE_CHANGE, i));
push bc push bc
push de push de
ld e,0x11 ld e,0x11
@ -379,7 +365,7 @@ l_configure_usb_hub_00126:
pop bc pop bc
or a or a
jr NZ,l_configure_usb_hub_00129 jr NZ,l_configure_usb_hub_00129
;source-doc/base-drv/./enumerate_hub.c:66: CHECK(hub_clear_feature(hub_config, FEAT_PORT_RESET_CHANGE, i));
;source-doc/base-drv/enumerate_hub.c:66: CHECK(hub_clear_feature(hub_config, FEAT_PORT_RESET_CHANGE, i));
push bc push bc
push de push de
ld e,0x14 ld e,0x14
@ -393,13 +379,13 @@ l_configure_usb_hub_00126:
pop bc pop bc
or a or a
jr NZ,l_configure_usb_hub_00129 jr NZ,l_configure_usb_hub_00129
;source-doc/base-drv/./enumerate_hub.c:67: delay_short();
;source-doc/base-drv/enumerate_hub.c:67: delay_short();
push bc push bc
push de push de
call _delay_short call _delay_short
pop de pop de
pop bc pop bc
;source-doc/base-drv/./enumerate_hub.c:69: CHECK(hub_get_status_port(hub_config, i, &port_status));
;source-doc/base-drv/enumerate_hub.c:69: CHECK(hub_get_status_port(hub_config, i, &port_status));
push bc push bc
push de push de
ld hl,12 ld hl,12
@ -417,13 +403,13 @@ l_configure_usb_hub_00126:
pop bc pop bc
or a or a
jr NZ,l_configure_usb_hub_00129 jr NZ,l_configure_usb_hub_00129
;source-doc/base-drv/./enumerate_hub.c:70: delay_short();
;source-doc/base-drv/enumerate_hub.c:70: delay_short();
push bc push bc
push de push de
call _delay_short call _delay_short
pop de pop de
pop bc pop bc
;source-doc/base-drv/./enumerate_hub.c:72: CHECK(read_all_configs(working->state));
;source-doc/base-drv/enumerate_hub.c:72: CHECK(read_all_configs(working->state));
ld l,(ix-2) ld l,(ix-2)
ld h,(ix-1) ld h,(ix-1)
ld a, (hl) ld a, (hl)
@ -442,7 +428,7 @@ l_configure_usb_hub_00126:
jr Z,l_configure_usb_hub_00127 jr Z,l_configure_usb_hub_00127
jr l_configure_usb_hub_00129 jr l_configure_usb_hub_00129
l_configure_usb_hub_00124: l_configure_usb_hub_00124:
;source-doc/base-drv/./enumerate_hub.c:75: CHECK(hub_clear_feature(hub_config, FEAT_PORT_POWER, i));
;source-doc/base-drv/enumerate_hub.c:75: CHECK(hub_clear_feature(hub_config, FEAT_PORT_POWER, i));
push bc push bc
push de push de
ld e,0x08 ld e,0x08
@ -457,18 +443,18 @@ l_configure_usb_hub_00124:
or a or a
jr NZ,l_configure_usb_hub_00129 jr NZ,l_configure_usb_hub_00129
l_configure_usb_hub_00127: l_configure_usb_hub_00127:
;source-doc/base-drv/./enumerate_hub.c:77: } while (--i != 0);
;source-doc/base-drv/enumerate_hub.c:77: } while (--i != 0);
dec d dec d
jp NZ, l_configure_usb_hub_00126 jp NZ, l_configure_usb_hub_00126
;source-doc/base-drv/./enumerate_hub.c:79: return USB_ERR_OK;
;source-doc/base-drv/enumerate_hub.c:79: return USB_ERR_OK;
ld l,0x00 ld l,0x00
jr l_configure_usb_hub_00130 jr l_configure_usb_hub_00130
;source-doc/base-drv/./enumerate_hub.c:80: done:
;source-doc/base-drv/enumerate_hub.c:80: done:
l_configure_usb_hub_00129: l_configure_usb_hub_00129:
;source-doc/base-drv/./enumerate_hub.c:81: return result;
;source-doc/base-drv/enumerate_hub.c:81: return result;
ld l, a ld l, a
l_configure_usb_hub_00130: l_configure_usb_hub_00130:
;source-doc/base-drv/./enumerate_hub.c:82: }
;source-doc/base-drv/enumerate_hub.c:82: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret

77
Source/HBIOS/ch376-native/base-drv/enumerate_storage.c.s

@ -1,5 +1,5 @@
; ;
; Generated from source-doc/base-drv/./enumerate_storage.c.asm -- not to be modify directly
; Generated from source-doc/base-drv/enumerate_storage.c.asm -- not to be modify directly
; ;
; ;
;-------------------------------------------------------- ;--------------------------------------------------------
@ -48,7 +48,7 @@ _USB_MODULE_LEDS .EQU 0xff8a
;-------------------------------------------------------- ;--------------------------------------------------------
; code ; code
;-------------------------------------------------------- ;--------------------------------------------------------
;source-doc/base-drv/./enumerate_storage.c:5: void parse_endpoints(device_config *const storage_dev, const endpoint_descriptor const *pEndpoint) {
;source-doc/base-drv/enumerate_storage.c:5: void parse_endpoints(device_config *const storage_dev, const endpoint_descriptor const *pEndpoint) {
; --------------------------------- ; ---------------------------------
; Function parse_endpoints ; Function parse_endpoints
; --------------------------------- ; ---------------------------------
@ -57,80 +57,75 @@ _parse_endpoints:
ld ix,0 ld ix,0
add ix,sp add ix,sp
push af push af
;source-doc/base-drv/./enumerate_storage.c:7: if (!(pEndpoint->bmAttributes & 0x02))
ld c,(ix+6)
ld b,(ix+7)
ld l, c
ld h, b
;source-doc/base-drv/enumerate_storage.c:7: if (!(pEndpoint->bmAttributes & 0x02))
ld l,(ix+6)
ld h,(ix+7)
ld c,l
ld b,h
inc hl inc hl
inc hl inc hl
inc hl inc hl
ld a, (hl) ld a, (hl)
ld (ix-2),a ld (ix-2),a
bit 1,(ix-2)
;source-doc/base-drv/./enumerate_storage.c:8: return;
bit 1,a
;source-doc/base-drv/enumerate_storage.c:8: return;
jr Z,l_parse_endpoints_00108 jr Z,l_parse_endpoints_00108
;source-doc/base-drv/./enumerate_storage.c:10: const uint8_t x = calc_max_packet_sizex(pEndpoint->wMaxPacketSize);
ld e, c
ld d, b
;source-doc/base-drv/enumerate_storage.c:10: const uint8_t x = calc_max_packet_sizex(pEndpoint->wMaxPacketSize);
ld hl,4 ld hl,4
add hl, de
add hl,bc
ld a, (hl) ld a, (hl)
ld (ix-1),a ld (ix-1),a
;source-doc/base-drv/./enumerate_storage.c:11: endpoint_param *const eps = storage_dev->endpoints;
;source-doc/base-drv/enumerate_storage.c:11: endpoint_param *const eps = storage_dev->endpoints;
ld e,(ix+4) ld e,(ix+4)
ld d,(ix+5) ld d,(ix+5)
inc de inc de
inc de inc de
inc de inc de
;source-doc/base-drv/./enumerate_storage.c:15: if (!(pEndpoint->bEndpointAddress & 0x80))
;source-doc/base-drv/enumerate_storage.c:15: if (!(pEndpoint->bEndpointAddress & 0x80))
inc bc inc bc
inc bc inc bc
ld a, (bc) ld a, (bc)
ld l,a
ld c,a
and 0x80 and 0x80
ld c, a
xor a
;source-doc/base-drv/./enumerate_storage.c:14: if (pEndpoint->bmAttributes & 0x01) { // 3 -> Interrupt
ld b,0x00
;source-doc/base-drv/enumerate_storage.c:14: if (pEndpoint->bmAttributes & 0x01) { // 3 -> Interrupt
bit 0,(ix-2) bit 0,(ix-2)
jr Z,l_parse_endpoints_00106 jr Z,l_parse_endpoints_00106
;source-doc/base-drv/./enumerate_storage.c:15: if (!(pEndpoint->bEndpointAddress & 0x80))
or c
;source-doc/base-drv/./enumerate_storage.c:16: return;
;source-doc/base-drv/enumerate_storage.c:15: if (!(pEndpoint->bEndpointAddress & 0x80))
or b
;source-doc/base-drv/enumerate_storage.c:16: return;
jr Z,l_parse_endpoints_00108 jr Z,l_parse_endpoints_00108
;source-doc/base-drv/./enumerate_storage.c:18: ep = &eps[ENDPOINT_INTERRUPT_IN];
ld a, e
add a,0x06
ld e, a
jr NC,l_parse_endpoints_00107
inc d
;source-doc/base-drv/enumerate_storage.c:18: ep = &eps[ENDPOINT_INTERRUPT_IN];
ld hl,0x0006
add hl, de
ex de, hl
jr l_parse_endpoints_00107 jr l_parse_endpoints_00107
l_parse_endpoints_00106: l_parse_endpoints_00106:
;source-doc/base-drv/./enumerate_storage.c:21: ep = (pEndpoint->bEndpointAddress & 0x80) ? &eps[ENDPOINT_BULK_IN] : &eps[ENDPOINT_BULK_OUT];
or c
;source-doc/base-drv/enumerate_storage.c:21: ep = (pEndpoint->bEndpointAddress & 0x80) ? &eps[ENDPOINT_BULK_IN] : &eps[ENDPOINT_BULK_OUT];
or b
jr Z,l_parse_endpoints_00110 jr Z,l_parse_endpoints_00110
inc de inc de
inc de inc de
inc de inc de
l_parse_endpoints_00110: l_parse_endpoints_00110:
l_parse_endpoints_00107: l_parse_endpoints_00107:
;source-doc/base-drv/./enumerate_storage.c:24: ep->number = pEndpoint->bEndpointAddress & 0x07;
ld c, e
ld b, d
ld a, l
;source-doc/base-drv/enumerate_storage.c:24: ep->number = pEndpoint->bEndpointAddress & 0x07;
ld l, e
ld h, d
ld a, c
and 0x07 and 0x07
rlca rlca
and 0x0e and 0x0e
ld l, a
ld a, (bc)
ld c, a
ld a, (hl)
and 0xf1 and 0xf1
or l
ld (bc), a
;source-doc/base-drv/./enumerate_storage.c:25: ep->toggle = 0;
or c
ld (hl), a
;source-doc/base-drv/enumerate_storage.c:25: ep->toggle = 0;
ld l, e ld l, e
ld h, d ld h, d
res 0, (hl) res 0, (hl)
;source-doc/base-drv/./enumerate_storage.c:26: ep->max_packet_sizex = x;
;source-doc/base-drv/enumerate_storage.c:26: ep->max_packet_sizex = x;
inc de inc de
ld a,(ix-1) ld a,(ix-1)
ld b,0x00 ld b,0x00
@ -144,7 +139,7 @@ l_parse_endpoints_00107:
or l or l
ld (de), a ld (de), a
l_parse_endpoints_00108: l_parse_endpoints_00108:
;source-doc/base-drv/./enumerate_storage.c:27: }
;source-doc/base-drv/enumerate_storage.c:27: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret

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

@ -1,5 +1,5 @@
; ;
; Generated from source-doc/base-drv/./protocol.c.asm -- not to be modify directly
; Generated from source-doc/base-drv/protocol.c.asm -- not to be modify directly
; ;
; ;
;-------------------------------------------------------- ;--------------------------------------------------------
@ -48,7 +48,7 @@ _USB_MODULE_LEDS .EQU 0xff8a
;-------------------------------------------------------- ;--------------------------------------------------------
; code ; code
;-------------------------------------------------------- ;--------------------------------------------------------
;source-doc/base-drv/./protocol.c:29: usb_error usbtrn_get_descriptor(device_descriptor *const buffer) {
;source-doc/base-drv/protocol.c:29: usb_error usbtrn_get_descriptor(device_descriptor *const buffer) {
; --------------------------------- ; ---------------------------------
; Function usbtrn_get_descriptor ; Function usbtrn_get_descriptor
; --------------------------------- ; ---------------------------------
@ -59,18 +59,18 @@ _usbtrn_get_descriptor:
ld hl, -8 ld hl, -8
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/base-drv/./protocol.c:31: cmd = cmd_get_device_descriptor;
;source-doc/base-drv/protocol.c:31: cmd = cmd_get_device_descriptor;
ld hl,0 ld hl,0
add hl, sp add hl, sp
ex de, hl ex de, hl
ld hl,_cmd_get_device_descriptor
ld bc,0x0008 ld bc,0x0008
ld hl,_cmd_get_device_descriptor
ldir ldir
;source-doc/base-drv/./protocol.c:32: cmd.wLength = 8;
;source-doc/base-drv/protocol.c:32: cmd.wLength = 8;
ld (ix-2),0x08 ld (ix-2),0x08
xor a xor a
ld (ix-1),a ld (ix-1),a
;source-doc/base-drv/./protocol.c:34: result = usb_control_transfer(&cmd, (uint8_t *)buffer, 0, 8);
;source-doc/base-drv/protocol.c:34: result = usb_control_transfer(&cmd, (uint8_t *)buffer, 0, 8);
ld c,(ix+4) ld c,(ix+4)
ld b,(ix+5) ld b,(ix+5)
ld e, c ld e, c
@ -93,24 +93,24 @@ _usbtrn_get_descriptor:
pop bc pop bc
ld a, l ld a, l
ld (_result), a ld (_result), a
;source-doc/base-drv/./protocol.c:36: CHECK(result);
;source-doc/base-drv/protocol.c:36: CHECK(result);
ld a,(_result) ld a,(_result)
or a or a
jr NZ,l_usbtrn_get_descriptor_00103 jr NZ,l_usbtrn_get_descriptor_00103
;source-doc/base-drv/./protocol.c:38: cmd = cmd_get_device_descriptor;
;source-doc/base-drv/protocol.c:38: cmd = cmd_get_device_descriptor;
ld hl,0 ld hl,0
add hl, sp add hl, sp
ex de, hl ex de, hl
push bc push bc
ld hl,_cmd_get_device_descriptor
ld bc,0x0008 ld bc,0x0008
ld hl,_cmd_get_device_descriptor
ldir ldir
pop bc pop bc
;source-doc/base-drv/./protocol.c:39: cmd.wLength = 18;
;source-doc/base-drv/protocol.c:39: cmd.wLength = 18;
ld (ix-2),0x12 ld (ix-2),0x12
xor a xor a
ld (ix-1),a ld (ix-1),a
;source-doc/base-drv/./protocol.c:40: result = usb_control_transfer(&cmd, (uint8_t *)buffer, 0, buffer->bMaxPacketSize0);
;source-doc/base-drv/protocol.c:40: result = usb_control_transfer(&cmd, (uint8_t *)buffer, 0, buffer->bMaxPacketSize0);
ld e,(ix+4) ld e,(ix+4)
ld d,(ix+5) ld d,(ix+5)
ld hl,7 ld hl,7
@ -131,13 +131,12 @@ _usbtrn_get_descriptor:
pop af pop af
ld a, l ld a, l
ld (_result), a ld (_result), a
;source-doc/base-drv/./protocol.c:42: RETURN_CHECK(result);
;source-doc/base-drv/./protocol.c:44: done:
;source-doc/base-drv/protocol.c:42: RETURN_CHECK(result);
;source-doc/base-drv/protocol.c:44: done:
l_usbtrn_get_descriptor_00103: l_usbtrn_get_descriptor_00103:
;source-doc/base-drv/./protocol.c:45: return result;
ld hl,_result
ld l, (hl)
;source-doc/base-drv/./protocol.c:46: }
;source-doc/base-drv/protocol.c:45: return result;
ld hl,(_result)
;source-doc/base-drv/protocol.c:46: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
@ -149,7 +148,7 @@ _cmd_get_device_descriptor:
DEFB +0x00 DEFB +0x00
DEFB +0x00 DEFB +0x00
DEFW +0x0008 DEFW +0x0008
;source-doc/base-drv/./protocol.c:54: usb_error usbtrn_get_descriptor2(device_descriptor *const buffer, const uint8_t device_address) {
;source-doc/base-drv/protocol.c:54: usb_error usbtrn_get_descriptor2(device_descriptor *const buffer, const uint8_t device_address) {
; --------------------------------- ; ---------------------------------
; Function usbtrn_get_descriptor2 ; Function usbtrn_get_descriptor2
; --------------------------------- ; ---------------------------------
@ -160,29 +159,26 @@ _usbtrn_get_descriptor2:
ld hl, -8 ld hl, -8
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/base-drv/./protocol.c:56: cmd = cmd_get_device_descriptor;
;source-doc/base-drv/protocol.c:56: cmd = cmd_get_device_descriptor;
ld hl,0 ld hl,0
add hl, sp add hl, sp
ex de, hl ex de, hl
ld hl,_cmd_get_device_descriptor
ld bc,0x0008 ld bc,0x0008
ld hl,_cmd_get_device_descriptor
ldir ldir
;source-doc/base-drv/./protocol.c:57: cmd.wLength = 8;
;source-doc/base-drv/protocol.c:57: cmd.wLength = 8;
ld (ix-2),0x08 ld (ix-2),0x08
xor a xor a
ld (ix-1),a ld (ix-1),a
;source-doc/base-drv/./protocol.c:59: result = usb_control_transfer(&cmd, (uint8_t *)buffer, device_address, 8);
;source-doc/base-drv/protocol.c:59: result = usb_control_transfer(&cmd, (uint8_t *)buffer, device_address, 8);
ld c,(ix+4) ld c,(ix+4)
ld b,(ix+5) ld b,(ix+5)
ld e, c ld e, c
ld d, b ld d, b
push bc push bc
ld a,0x08
push af
inc sp
ld a,(ix+6)
push af
inc sp
ld h,0x08
ld l,(ix+6)
push hl
push de push de
ld hl,6 ld hl,6
add hl, sp add hl, sp
@ -194,34 +190,31 @@ _usbtrn_get_descriptor2:
pop bc pop bc
ld a, l ld a, l
ld (_result), a ld (_result), a
;source-doc/base-drv/./protocol.c:61: CHECK(result);
;source-doc/base-drv/protocol.c:61: CHECK(result);
ld a,(_result) ld a,(_result)
or a or a
jr NZ,l_usbtrn_get_descriptor2_00103 jr NZ,l_usbtrn_get_descriptor2_00103
;source-doc/base-drv/./protocol.c:63: cmd = cmd_get_device_descriptor;
;source-doc/base-drv/protocol.c:63: cmd = cmd_get_device_descriptor;
ld hl,0 ld hl,0
add hl, sp add hl, sp
ex de, hl ex de, hl
push bc push bc
ld hl,_cmd_get_device_descriptor
ld bc,0x0008 ld bc,0x0008
ld hl,_cmd_get_device_descriptor
ldir ldir
pop bc pop bc
;source-doc/base-drv/./protocol.c:64: cmd.wLength = 18;
;source-doc/base-drv/protocol.c:64: cmd.wLength = 18;
ld (ix-2),0x12 ld (ix-2),0x12
xor a xor a
ld (ix-1),a ld (ix-1),a
;source-doc/base-drv/./protocol.c:65: RETURN_CHECK(usb_control_transfer(&cmd, (uint8_t *)buffer, device_address, buffer->bMaxPacketSize0));
;source-doc/base-drv/protocol.c:65: RETURN_CHECK(usb_control_transfer(&cmd, (uint8_t *)buffer, device_address, buffer->bMaxPacketSize0));
ld e,(ix+4) ld e,(ix+4)
ld d,(ix+5) ld d,(ix+5)
ld hl,7 ld hl,7
add hl, de add hl, de
ld a, (hl)
push af
inc sp
ld a,(ix+6)
push af
inc sp
ld h,(hl)
ld l,(ix+6)
push hl
push bc push bc
ld hl,4 ld hl,4
add hl, sp add hl, sp
@ -232,16 +225,15 @@ _usbtrn_get_descriptor2:
pop af pop af
ld a, l ld a, l
ld (_result), a ld (_result), a
;source-doc/base-drv/./protocol.c:66: done:
;source-doc/base-drv/protocol.c:66: done:
l_usbtrn_get_descriptor2_00103: l_usbtrn_get_descriptor2_00103:
;source-doc/base-drv/./protocol.c:67: return result;
ld hl,_result
ld l, (hl)
;source-doc/base-drv/./protocol.c:68: }
;source-doc/base-drv/protocol.c:67: return result;
ld hl,(_result)
;source-doc/base-drv/protocol.c:68: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
;source-doc/base-drv/./protocol.c:78: usb_error usbtrn_set_address(const uint8_t device_address) __z88dk_fastcall {
;source-doc/base-drv/protocol.c:78: usb_error usbtrn_set_address(const uint8_t device_address) __z88dk_fastcall {
; --------------------------------- ; ---------------------------------
; Function usbtrn_set_address ; Function usbtrn_set_address
; --------------------------------- ; ---------------------------------
@ -254,18 +246,18 @@ _usbtrn_set_address:
push af push af
push af push af
ld c, l ld c, l
;source-doc/base-drv/./protocol.c:80: cmd = cmd_set_device_address;
;source-doc/base-drv/protocol.c:80: cmd = cmd_set_device_address;
ld hl,0 ld hl,0
add hl, sp add hl, sp
ex de, hl ex de, hl
push bc push bc
ld hl,_cmd_set_device_address
ld bc,0x0008 ld bc,0x0008
ld hl,_cmd_set_device_address
ldir ldir
pop bc pop bc
;source-doc/base-drv/./protocol.c:81: cmd.bValue[0] = device_address;
;source-doc/base-drv/protocol.c:81: cmd.bValue[0] = device_address;
ld (ix-6),c ld (ix-6),c
;source-doc/base-drv/./protocol.c:83: return usb_control_transfer(&cmd, 0, 0, 0);
;source-doc/base-drv/protocol.c:83: return usb_control_transfer(&cmd, 0, 0, 0);
xor a xor a
push af push af
inc sp inc sp
@ -278,7 +270,7 @@ _usbtrn_set_address:
add hl, sp add hl, sp
push hl push hl
call _usb_control_transfer call _usb_control_transfer
;source-doc/base-drv/./protocol.c:84: }
;source-doc/base-drv/protocol.c:84: }
ld sp,ix ld sp,ix
pop ix pop ix
ret ret
@ -290,7 +282,7 @@ _cmd_set_device_address:
DEFB +0x00 DEFB +0x00
DEFB +0x00 DEFB +0x00
DEFW +0x0000 DEFW +0x0000
;source-doc/base-drv/./protocol.c:94: usb_error usbtrn_set_configuration(const uint8_t device_address, const uint8_t max_packet_size, const uint8_t configuration) {
;source-doc/base-drv/protocol.c:94: usb_error usbtrn_set_configuration(const uint8_t device_address, const uint8_t max_packet_size, const uint8_t configuration) {
; --------------------------------- ; ---------------------------------
; Function usbtrn_set_configuration ; Function usbtrn_set_configuration
; --------------------------------- ; ---------------------------------
@ -301,22 +293,20 @@ _usbtrn_set_configuration:
ld hl, -8 ld hl, -8
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/base-drv/./protocol.c:96: cmd = cmd_set_configuration;
;source-doc/base-drv/protocol.c:96: cmd = cmd_set_configuration;
ld hl,0 ld hl,0
add hl, sp add hl, sp
ld c, l
ld b, h
ld e, c
ld d, b
push bc
ld hl,_cmd_set_configuration
ld e,l
ld d,h
push hl
ld bc,0x0008 ld bc,0x0008
ld hl,_cmd_set_configuration
ldir ldir
pop bc pop bc
;source-doc/base-drv/./protocol.c:97: cmd.bValue[0] = configuration;
;source-doc/base-drv/protocol.c:97: cmd.bValue[0] = configuration;
ld a,(ix+6) ld a,(ix+6)
ld (ix-6),a ld (ix-6),a
;source-doc/base-drv/./protocol.c:99: return usb_control_transfer(&cmd, 0, device_address, max_packet_size);
;source-doc/base-drv/protocol.c:99: return usb_control_transfer(&cmd, 0, device_address, max_packet_size);
ld h,(ix+5) ld h,(ix+5)
ld l,(ix+4) ld l,(ix+4)
push hl push hl
@ -324,7 +314,7 @@ _usbtrn_set_configuration:
push hl push hl
push bc push bc
call _usb_control_transfer call _usb_control_transfer
;source-doc/base-drv/./protocol.c:100: }
;source-doc/base-drv/protocol.c:100: }
ld sp,ix ld sp,ix
pop ix pop ix
ret ret
@ -336,7 +326,7 @@ _cmd_set_configuration:
DEFB +0x00 DEFB +0x00
DEFB +0x00 DEFB +0x00
DEFW +0x0000 DEFW +0x0000
;source-doc/base-drv/./protocol.c:114: usb_error usbtrn_get_config_descriptor(config_descriptor *const buffer,
;source-doc/base-drv/protocol.c:114: usb_error usbtrn_get_config_descriptor(config_descriptor *const buffer,
; --------------------------------- ; ---------------------------------
; Function usbtrn_get_config_descriptor ; Function usbtrn_get_config_descriptor
; --------------------------------- ; ---------------------------------
@ -347,26 +337,24 @@ _usbtrn_get_config_descriptor:
ld hl, -8 ld hl, -8
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/base-drv/./protocol.c:120: cmd = cmd_get_config_descriptor;
;source-doc/base-drv/protocol.c:120: cmd = cmd_get_config_descriptor;
ld hl,0 ld hl,0
add hl, sp add hl, sp
ld c, l
ld b, h
ld e, c
ld d, b
push bc
ld hl,_cmd_get_config_descriptor
ld e,l
ld d,h
push hl
ld bc,0x0008 ld bc,0x0008
ld hl,_cmd_get_config_descriptor
ldir ldir
pop bc pop bc
;source-doc/base-drv/./protocol.c:121: cmd.bValue[0] = config_index;
;source-doc/base-drv/protocol.c:121: cmd.bValue[0] = config_index;
ld a,(ix+6) ld a,(ix+6)
ld (ix-6),a ld (ix-6),a
;source-doc/base-drv/./protocol.c:122: cmd.wLength = (uint16_t)buffer_size;
;source-doc/base-drv/protocol.c:122: cmd.wLength = (uint16_t)buffer_size;
ld e,(ix+7) ld e,(ix+7)
ld (ix-2),e ld (ix-2),e
ld (ix-1),0x00 ld (ix-1),0x00
;source-doc/base-drv/./protocol.c:124: return usb_control_transfer(&cmd, (uint8_t *)buffer, device_address, max_packet_size);
;source-doc/base-drv/protocol.c:124: return usb_control_transfer(&cmd, (uint8_t *)buffer, device_address, max_packet_size);
ld e,(ix+4) ld e,(ix+4)
ld d,(ix+5) ld d,(ix+5)
ld h,(ix+9) ld h,(ix+9)
@ -375,7 +363,7 @@ _usbtrn_get_config_descriptor:
push de push de
push bc push bc
call _usb_control_transfer call _usb_control_transfer
;source-doc/base-drv/./protocol.c:125: }
;source-doc/base-drv/protocol.c:125: }
ld sp,ix ld sp,ix
pop ix pop ix
ret ret
@ -387,7 +375,7 @@ _cmd_get_config_descriptor:
DEFB +0x00 DEFB +0x00
DEFB +0x00 DEFB +0x00
DEFW +0x0000 DEFW +0x0000
;source-doc/base-drv/./protocol.c:127: usb_error usbtrn_gfull_cfg_desc(const uint8_t config_index,
;source-doc/base-drv/protocol.c:127: usb_error usbtrn_gfull_cfg_desc(const uint8_t config_index,
; --------------------------------- ; ---------------------------------
; Function usbtrn_gfull_cfg_desc ; Function usbtrn_gfull_cfg_desc
; --------------------------------- ; ---------------------------------
@ -395,7 +383,7 @@ _usbtrn_gfull_cfg_desc:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
;source-doc/base-drv/./protocol.c:134: max_packet_size));
;source-doc/base-drv/protocol.c:134: max_packet_size));
ld c,(ix+8) ld c,(ix+8)
ld b,(ix+9) ld b,(ix+9)
push bc push bc
@ -419,28 +407,25 @@ _usbtrn_gfull_cfg_desc:
ld a,(_result) ld a,(_result)
or a or a
jr NZ,l_usbtrn_gfull_cfg_desc_00107 jr NZ,l_usbtrn_gfull_cfg_desc_00107
;source-doc/base-drv/./protocol.c:136: uint8_t max_length = ((config_descriptor *)buffer)->wTotalLength;
;source-doc/base-drv/protocol.c:136: uint8_t max_length = ((config_descriptor *)buffer)->wTotalLength;
ld l, c ld l, c
ld h, b ld h, b
inc hl inc hl
inc hl inc hl
ld d, (hl) ld d, (hl)
;source-doc/base-drv/./protocol.c:137: if (max_length > max_buffer_size)
;source-doc/base-drv/protocol.c:137: if (max_length > max_buffer_size)
ld a,(ix+7) ld a,(ix+7)
sub d sub d
jr NC,l_usbtrn_gfull_cfg_desc_00104 jr NC,l_usbtrn_gfull_cfg_desc_00104
;source-doc/base-drv/./protocol.c:138: max_length = max_buffer_size;
;source-doc/base-drv/protocol.c:138: max_length = max_buffer_size;
ld d,(ix+7) ld d,(ix+7)
l_usbtrn_gfull_cfg_desc_00104: l_usbtrn_gfull_cfg_desc_00104:
;source-doc/base-drv/./protocol.c:140: CHECK(usbtrn_get_config_descriptor((config_descriptor *)buffer, config_index, max_length, device_address, max_packet_size));
;source-doc/base-drv/protocol.c:140: CHECK(usbtrn_get_config_descriptor((config_descriptor *)buffer, config_index, max_length, device_address, max_packet_size));
ld h,(ix+6) ld h,(ix+6)
ld l,(ix+5) ld l,(ix+5)
push hl push hl
ld e,(ix+4)
push de push de
inc sp
ld a,(ix+4)
push af
inc sp
push bc push bc
call _usbtrn_get_config_descriptor call _usbtrn_get_config_descriptor
pop af pop af
@ -449,21 +434,20 @@ l_usbtrn_gfull_cfg_desc_00104:
ld a, l ld a, l
ld (_result), a ld (_result), a
ld a,(_result) ld a,(_result)
;source-doc/base-drv/./protocol.c:142: return USB_ERR_OK;
;source-doc/base-drv/protocol.c:142: return USB_ERR_OK;
or a or a
jr NZ,l_usbtrn_gfull_cfg_desc_00107 jr NZ,l_usbtrn_gfull_cfg_desc_00107
ld l,a ld l,a
jr l_usbtrn_gfull_cfg_desc_00108 jr l_usbtrn_gfull_cfg_desc_00108
;source-doc/base-drv/./protocol.c:143: done:
;source-doc/base-drv/protocol.c:143: done:
l_usbtrn_gfull_cfg_desc_00107: l_usbtrn_gfull_cfg_desc_00107:
;source-doc/base-drv/./protocol.c:144: return result;
ld hl,_result
ld l, (hl)
;source-doc/base-drv/protocol.c:144: return result;
ld hl,(_result)
l_usbtrn_gfull_cfg_desc_00108: l_usbtrn_gfull_cfg_desc_00108:
;source-doc/base-drv/./protocol.c:145: }
;source-doc/base-drv/protocol.c:145: }
pop ix pop ix
ret ret
;source-doc/base-drv/./protocol.c:149: usb_error usbtrn_clear_endpoint_halt(const uint8_t endpoint_number, const uint8_t device_address, const uint8_t max_packet_size) {
;source-doc/base-drv/protocol.c:149: usb_error usbtrn_clear_endpoint_halt(const uint8_t endpoint_number, const uint8_t device_address, const uint8_t max_packet_size) {
; --------------------------------- ; ---------------------------------
; Function usbtrn_clear_endpoint_halt ; Function usbtrn_clear_endpoint_halt
; --------------------------------- ; ---------------------------------
@ -474,22 +458,20 @@ _usbtrn_clear_endpoint_halt:
ld hl, -8 ld hl, -8
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/base-drv/./protocol.c:151: cmd = usb_cmd_clear_endpoint_halt;
;source-doc/base-drv/protocol.c:151: cmd = usb_cmd_clear_endpoint_halt;
ld hl,0 ld hl,0
add hl, sp add hl, sp
ld c, l
ld b, h
ld e, c
ld d, b
push bc
ld hl,_usb_cmd_clear_endpoint_halt
ld e,l
ld d,h
push hl
ld bc,0x0008 ld bc,0x0008
ld hl,_usb_cmd_clear_endpoint_halt
ldir ldir
pop bc pop bc
;source-doc/base-drv/./protocol.c:152: cmd.bIndex[0] = endpoint_number;
;source-doc/base-drv/protocol.c:152: cmd.bIndex[0] = endpoint_number;
ld a,(ix+4) ld a,(ix+4)
ld (ix-4),a ld (ix-4),a
;source-doc/base-drv/./protocol.c:154: return usb_control_transfer(&cmd, (uint8_t *)0, device_address, max_packet_size);
;source-doc/base-drv/protocol.c:154: return usb_control_transfer(&cmd, (uint8_t *)0, device_address, max_packet_size);
ld h,(ix+6) ld h,(ix+6)
ld l,(ix+5) ld l,(ix+5)
push hl push hl
@ -497,7 +479,7 @@ _usbtrn_clear_endpoint_halt:
push hl push hl
push bc push bc
call _usb_control_transfer call _usb_control_transfer
;source-doc/base-drv/./protocol.c:155: }
;source-doc/base-drv/protocol.c:155: }
ld sp,ix ld sp,ix
pop ix pop ix
ret ret

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

@ -0,0 +1,829 @@
;--------------------------------------------------------
; 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

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

@ -1,5 +1,5 @@
; ;
; Generated from source-doc/base-drv/./transfers.c.asm -- not to be modify directly
; Generated from source-doc/base-drv/transfers.c.asm -- not to be modify directly
; ;
; ;
;-------------------------------------------------------- ;--------------------------------------------------------
@ -48,7 +48,7 @@ _USB_MODULE_LEDS .EQU 0xff8a
;-------------------------------------------------------- ;--------------------------------------------------------
; code ; code
;-------------------------------------------------------- ;--------------------------------------------------------
;source-doc/base-drv/./transfers.c:24: usb_error usb_ctrl_trnsfer_ext(const setup_packet *const cmd_packet,
;source-doc/base-drv/transfers.c:24: usb_error usb_ctrl_trnsfer_ext(const setup_packet *const cmd_packet,
; --------------------------------- ; ---------------------------------
; Function usb_ctrl_trnsfer_ext ; Function usb_ctrl_trnsfer_ext
; --------------------------------- ; ---------------------------------
@ -56,26 +56,26 @@ _usb_ctrl_trnsfer_ext:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
;source-doc/base-drv/./transfers.c:28: if ((uint16_t)cmd_packet < LOWER_SAFE_RAM_ADDRESS)
;source-doc/base-drv/transfers.c:28: if ((uint16_t)cmd_packet < LOWER_SAFE_RAM_ADDRESS)
ld a,(ix+5) ld a,(ix+5)
sub 0x80 sub 0x80
jr NC,l_usb_ctrl_trnsfer_ext_00102 jr NC,l_usb_ctrl_trnsfer_ext_00102
;source-doc/base-drv/./transfers.c:29: return USB_BAD_ADDRESS;
;source-doc/base-drv/transfers.c:29: return USB_BAD_ADDRESS;
ld l,0x82 ld l,0x82
jr l_usb_ctrl_trnsfer_ext_00106 jr l_usb_ctrl_trnsfer_ext_00106
l_usb_ctrl_trnsfer_ext_00102: l_usb_ctrl_trnsfer_ext_00102:
;source-doc/base-drv/./transfers.c:31: if (buffer != 0 && (uint16_t)buffer < LOWER_SAFE_RAM_ADDRESS)
;source-doc/base-drv/transfers.c:31: if (buffer != 0 && (uint16_t)buffer < LOWER_SAFE_RAM_ADDRESS)
ld a,(ix+7) ld a,(ix+7)
or (ix+6) or (ix+6)
jr Z,l_usb_ctrl_trnsfer_ext_00104 jr Z,l_usb_ctrl_trnsfer_ext_00104
ld a,(ix+7) ld a,(ix+7)
sub 0x80 sub 0x80
jr NC,l_usb_ctrl_trnsfer_ext_00104 jr NC,l_usb_ctrl_trnsfer_ext_00104
;source-doc/base-drv/./transfers.c:32: return USB_BAD_ADDRESS;
;source-doc/base-drv/transfers.c:32: return USB_BAD_ADDRESS;
ld l,0x82 ld l,0x82
jr l_usb_ctrl_trnsfer_ext_00106 jr l_usb_ctrl_trnsfer_ext_00106
l_usb_ctrl_trnsfer_ext_00104: l_usb_ctrl_trnsfer_ext_00104:
;source-doc/base-drv/./transfers.c:34: return usb_control_transfer(cmd_packet, buffer, device_address, max_packet_size);
;source-doc/base-drv/transfers.c:34: return usb_control_transfer(cmd_packet, buffer, device_address, max_packet_size);
ld h,(ix+9) ld h,(ix+9)
ld l,(ix+8) ld l,(ix+8)
push hl push hl
@ -90,10 +90,10 @@ l_usb_ctrl_trnsfer_ext_00104:
pop af pop af
pop af pop af
l_usb_ctrl_trnsfer_ext_00106: l_usb_ctrl_trnsfer_ext_00106:
;source-doc/base-drv/./transfers.c:35: }
;source-doc/base-drv/transfers.c:35: }
pop ix pop ix
ret ret
;source-doc/base-drv/./transfers.c:47: usb_error usb_control_transfer(const setup_packet *const cmd_packet,
;source-doc/base-drv/transfers.c:47: usb_error usb_control_transfer(const setup_packet *const cmd_packet,
; --------------------------------- ; ---------------------------------
; Function usb_control_transfer ; Function usb_control_transfer
; --------------------------------- ; ---------------------------------
@ -103,7 +103,7 @@ _usb_control_transfer:
add ix,sp add ix,sp
push af push af
push af push af
;source-doc/base-drv/./transfers.c:52: endpoint_param endpoint = {1, 0, max_packet_size};
;source-doc/base-drv/transfers.c:52: endpoint_param endpoint = {1, 0, max_packet_size};
ld hl,0 ld hl,0
add hl, sp add hl, sp
set 0, (hl) set 0, (hl)
@ -125,29 +125,29 @@ _usb_control_transfer:
and 0xfc and 0xfc
or e or e
ld (hl), a ld (hl), a
;source-doc/base-drv/./transfers.c:54: const uint8_t transferIn = (cmd_packet->bmRequestType & 0x80);
;source-doc/base-drv/transfers.c:54: const uint8_t transferIn = (cmd_packet->bmRequestType & 0x80);
ld c,(ix+4) ld c,(ix+4)
ld b,(ix+5) ld b,(ix+5)
ld a, (bc) ld a, (bc)
and 0x80 and 0x80
;source-doc/base-drv/./transfers.c:56: if (transferIn && buffer == 0)
;source-doc/base-drv/transfers.c:56: if (transferIn && buffer == 0)
ld (ix-1),a ld (ix-1),a
or a or a
jr Z,l_usb_control_transfer_00102 jr Z,l_usb_control_transfer_00102
ld a,(ix+7) ld a,(ix+7)
or (ix+6) or (ix+6)
jr NZ,l_usb_control_transfer_00102 jr NZ,l_usb_control_transfer_00102
;source-doc/base-drv/./transfers.c:57: return USB_ERR_OTHER;
;source-doc/base-drv/transfers.c:57: return USB_ERR_OTHER;
ld l,0x0f ld l,0x0f
jp l_usb_control_transfer_00114 jp l_usb_control_transfer_00114
l_usb_control_transfer_00102: l_usb_control_transfer_00102:
;source-doc/base-drv/./transfers.c:59: critical_begin();
;source-doc/base-drv/transfers.c:59: critical_begin();
push bc push bc
call _critical_begin call _critical_begin
ld l,(ix+8) ld l,(ix+8)
call _ch_set_usb_address call _ch_set_usb_address
pop bc pop bc
;source-doc/base-drv/./transfers.c:63: ch_write_data((const uint8_t *)cmd_packet, sizeof(setup_packet));
;source-doc/base-drv/transfers.c:63: ch_write_data((const uint8_t *)cmd_packet, sizeof(setup_packet));
ld e,(ix+4) ld e,(ix+4)
ld d,(ix+5) ld d,(ix+5)
push bc push bc
@ -161,18 +161,18 @@ l_usb_control_transfer_00102:
call _ch_issue_token_setup call _ch_issue_token_setup
call _ch_short_wait_int_and_get_stat call _ch_short_wait_int_and_get_stat
pop bc pop bc
;source-doc/base-drv/./transfers.c:66: CHECK(result);
;source-doc/base-drv/transfers.c:66: CHECK(result);
ld a, l ld a, l
or a or a
jr NZ,l_usb_control_transfer_00113 jr NZ,l_usb_control_transfer_00113
;source-doc/base-drv/./transfers.c:68: const uint16_t length = cmd_packet->wLength;
;source-doc/base-drv/transfers.c:68: const uint16_t length = cmd_packet->wLength;
ld hl,6 ld hl,6
add hl, bc add hl, bc
ld c, (hl) ld c, (hl)
inc hl inc hl
ld b, (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, b
;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 c or c
jr Z,l_usb_control_transfer_00116 jr Z,l_usb_control_transfer_00116
ld e,(ix+6) ld e,(ix+6)
@ -203,59 +203,58 @@ l_usb_control_transfer_00118:
l_usb_control_transfer_00119: l_usb_control_transfer_00119:
jr l_usb_control_transfer_00117 jr l_usb_control_transfer_00117
l_usb_control_transfer_00116: l_usb_control_transfer_00116:
;source-doc/base-drv/./transfers.c:72: : USB_ERR_OK;
;source-doc/base-drv/transfers.c:72: : USB_ERR_OK;
ld l,0x00 ld l,0x00
l_usb_control_transfer_00117: l_usb_control_transfer_00117:
;source-doc/base-drv/./transfers.c:74: CHECK(result)
;source-doc/base-drv/transfers.c:74: CHECK(result)
ld a, l ld a, l
or a or a
jr NZ,l_usb_control_transfer_00113 jr NZ,l_usb_control_transfer_00113
;source-doc/base-drv/./transfers.c:76: if (transferIn) {
;source-doc/base-drv/transfers.c:76: if (transferIn) {
ld a,(ix-1) ld a,(ix-1)
or a or a
jr Z,l_usb_control_transfer_00112 jr Z,l_usb_control_transfer_00112
;source-doc/base-drv/./transfers.c:77: ch_command(CH_CMD_WR_HOST_DATA);
;source-doc/base-drv/transfers.c:77: ch_command(CH_CMD_WR_HOST_DATA);
ld l,0x2c ld l,0x2c
call _ch_command call _ch_command
;source-doc/base-drv/./transfers.c:78: CH376_DATA_PORT = 0;
;source-doc/base-drv/transfers.c:78: CH376_DATA_PORT = 0;
ld a,0x00 ld a,0x00
ld bc,_CH376_DATA_PORT ld bc,_CH376_DATA_PORT
out (c),a out (c),a
;source-doc/base-drv/./transfers.c:79: ch_issue_token_out_ep0();
;source-doc/base-drv/transfers.c:79: ch_issue_token_out_ep0();
call _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 */
;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_statu call _ch_long_wait_int_and_get_statu
;source-doc/base-drv/./transfers.c:82: if (result == USB_ERR_OK || result == USB_ERR_STALL) {
ld a, l
;source-doc/base-drv/transfers.c:82: if (result == USB_ERR_OK || result == USB_ERR_STALL) {
ld a,l
or a or a
jr Z,l_usb_control_transfer_00108 jr Z,l_usb_control_transfer_00108
ld a, l
sub 0x02 sub 0x02
jr NZ,l_usb_control_transfer_00113 jr NZ,l_usb_control_transfer_00113
l_usb_control_transfer_00108: l_usb_control_transfer_00108:
;source-doc/base-drv/./transfers.c:83: result = USB_ERR_OK;
;source-doc/base-drv/transfers.c:83: result = USB_ERR_OK;
ld l,0x00 ld l,0x00
;source-doc/base-drv/./transfers.c:84: goto done;
;source-doc/base-drv/transfers.c:84: goto done;
jr l_usb_control_transfer_00113 jr l_usb_control_transfer_00113
;source-doc/base-drv/./transfers.c:87: RETURN_CHECK(result);
;source-doc/base-drv/transfers.c:87: RETURN_CHECK(result);
l_usb_control_transfer_00112: l_usb_control_transfer_00112:
;source-doc/base-drv/./transfers.c:90: ch_issue_token_in_ep0();
;source-doc/base-drv/transfers.c:90: ch_issue_token_in_ep0();
call _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();
;source-doc/base-drv/transfers.c:91: result = ch_long_wait_int_and_get_status();
call _ch_long_wait_int_and_get_statu call _ch_long_wait_int_and_get_statu
;source-doc/base-drv/./transfers.c:95: done:
;source-doc/base-drv/transfers.c:95: done:
l_usb_control_transfer_00113: l_usb_control_transfer_00113:
;source-doc/base-drv/./transfers.c:96: critical_end();
;source-doc/base-drv/transfers.c:96: critical_end();
push hl push hl
call _critical_end call _critical_end
pop hl pop hl
;source-doc/base-drv/./transfers.c:97: return result;
;source-doc/base-drv/transfers.c:97: return result;
l_usb_control_transfer_00114: l_usb_control_transfer_00114:
;source-doc/base-drv/./transfers.c:98: }
;source-doc/base-drv/transfers.c:98: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
;source-doc/base-drv/./transfers.c:101: usb_dat_in_trnsfer_ext(uint8_t *buffer, const uint16_t buffer_size, const uint8_t device_address, endpoint_param *const endpoint) {
;source-doc/base-drv/transfers.c: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 ; Function usb_dat_in_trnsfer_ext
; --------------------------------- ; ---------------------------------
@ -263,26 +262,26 @@ _usb_dat_in_trnsfer_ext:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
;source-doc/base-drv/./transfers.c:102: if (buffer != 0 && (uint16_t)buffer < LOWER_SAFE_RAM_ADDRESS)
;source-doc/base-drv/transfers.c:102: if (buffer != 0 && (uint16_t)buffer < LOWER_SAFE_RAM_ADDRESS)
ld a,(ix+5) ld a,(ix+5)
or (ix+4) or (ix+4)
jr Z,l_usb_dat_in_trnsfer_ext_00102 jr Z,l_usb_dat_in_trnsfer_ext_00102
ld a,(ix+5) ld a,(ix+5)
sub 0x80 sub 0x80
jr NC,l_usb_dat_in_trnsfer_ext_00102 jr NC,l_usb_dat_in_trnsfer_ext_00102
;source-doc/base-drv/./transfers.c:103: return USB_BAD_ADDRESS;
;source-doc/base-drv/transfers.c:103: return USB_BAD_ADDRESS;
ld l,0x82 ld l,0x82
jr l_usb_dat_in_trnsfer_ext_00106 jr l_usb_dat_in_trnsfer_ext_00106
l_usb_dat_in_trnsfer_ext_00102: l_usb_dat_in_trnsfer_ext_00102:
;source-doc/base-drv/./transfers.c:105: if ((uint16_t)endpoint < LOWER_SAFE_RAM_ADDRESS)
;source-doc/base-drv/transfers.c:105: if ((uint16_t)endpoint < LOWER_SAFE_RAM_ADDRESS)
ld a,(ix+10) ld a,(ix+10)
sub 0x80 sub 0x80
jr NC,l_usb_dat_in_trnsfer_ext_00105 jr NC,l_usb_dat_in_trnsfer_ext_00105
;source-doc/base-drv/./transfers.c:106: return USB_BAD_ADDRESS;
;source-doc/base-drv/transfers.c:106: return USB_BAD_ADDRESS;
ld l,0x82 ld l,0x82
jr l_usb_dat_in_trnsfer_ext_00106 jr l_usb_dat_in_trnsfer_ext_00106
l_usb_dat_in_trnsfer_ext_00105: l_usb_dat_in_trnsfer_ext_00105:
;source-doc/base-drv/./transfers.c:108: return usb_data_in_transfer(buffer, buffer_size, device_address, endpoint);
;source-doc/base-drv/transfers.c:108: return usb_data_in_transfer(buffer, buffer_size, device_address, endpoint);
ld l,(ix+9) ld l,(ix+9)
ld h,(ix+10) ld h,(ix+10)
push hl push hl
@ -301,10 +300,10 @@ l_usb_dat_in_trnsfer_ext_00105:
pop af pop af
inc sp inc sp
l_usb_dat_in_trnsfer_ext_00106: l_usb_dat_in_trnsfer_ext_00106:
;source-doc/base-drv/./transfers.c:109: }
;source-doc/base-drv/transfers.c:109: }
pop ix pop ix
ret ret
;source-doc/base-drv/./transfers.c:112: usb_dat_in_trns_n_ext(uint8_t *buffer, uint16_t *buffer_size, const uint8_t device_address, endpoint_param *const endpoint) {
;source-doc/base-drv/transfers.c: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 ; Function usb_dat_in_trns_n_ext
; --------------------------------- ; ---------------------------------
@ -312,34 +311,34 @@ _usb_dat_in_trns_n_ext:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
;source-doc/base-drv/./transfers.c:113: if (buffer != 0 && ((uint16_t)buffer & 0xC000) == 0)
;source-doc/base-drv/transfers.c:113: if (buffer != 0 && ((uint16_t)buffer & 0xC000) == 0)
ld a,(ix+5) ld a,(ix+5)
or (ix+4) or (ix+4)
jr Z,l_usb_dat_in_trns_n_ext_00102 jr Z,l_usb_dat_in_trns_n_ext_00102
ld a,(ix+5) ld a,(ix+5)
and 0xc0 and 0xc0
jr NZ,l_usb_dat_in_trns_n_ext_00102 jr NZ,l_usb_dat_in_trns_n_ext_00102
;source-doc/base-drv/./transfers.c:114: return USB_BAD_ADDRESS;
;source-doc/base-drv/transfers.c:114: return USB_BAD_ADDRESS;
ld l,0x82 ld l,0x82
jr l_usb_dat_in_trns_n_ext_00108 jr l_usb_dat_in_trns_n_ext_00108
l_usb_dat_in_trns_n_ext_00102: l_usb_dat_in_trns_n_ext_00102:
;source-doc/base-drv/./transfers.c:116: if (((uint16_t)endpoint & 0xC000) == 0)
;source-doc/base-drv/transfers.c:116: if (((uint16_t)endpoint & 0xC000) == 0)
ld a,(ix+10) ld a,(ix+10)
and 0xc0 and 0xc0
jr NZ,l_usb_dat_in_trns_n_ext_00105 jr NZ,l_usb_dat_in_trns_n_ext_00105
;source-doc/base-drv/./transfers.c:117: return USB_BAD_ADDRESS;
;source-doc/base-drv/transfers.c:117: return USB_BAD_ADDRESS;
ld l,0x82 ld l,0x82
jr l_usb_dat_in_trns_n_ext_00108 jr l_usb_dat_in_trns_n_ext_00108
l_usb_dat_in_trns_n_ext_00105: l_usb_dat_in_trns_n_ext_00105:
;source-doc/base-drv/./transfers.c:119: if (((uint16_t)buffer_size & 0xC000) == 0)
;source-doc/base-drv/transfers.c:119: if (((uint16_t)buffer_size & 0xC000) == 0)
ld a,(ix+7) ld a,(ix+7)
and 0xc0 and 0xc0
jr NZ,l_usb_dat_in_trns_n_ext_00107 jr NZ,l_usb_dat_in_trns_n_ext_00107
;source-doc/base-drv/./transfers.c:120: return USB_BAD_ADDRESS;
;source-doc/base-drv/transfers.c:120: return USB_BAD_ADDRESS;
ld l,0x82 ld l,0x82
jr l_usb_dat_in_trns_n_ext_00108 jr l_usb_dat_in_trns_n_ext_00108
l_usb_dat_in_trns_n_ext_00107: l_usb_dat_in_trns_n_ext_00107:
;source-doc/base-drv/./transfers.c:122: return usb_data_in_transfer_n(buffer, buffer_size, device_address, endpoint);
;source-doc/base-drv/transfers.c:122: return usb_data_in_transfer_n(buffer, buffer_size, device_address, endpoint);
ld c,(ix+6) ld c,(ix+6)
ld b,(ix+7) ld b,(ix+7)
ld l,(ix+9) ld l,(ix+9)
@ -358,10 +357,10 @@ l_usb_dat_in_trns_n_ext_00107:
pop af pop af
inc sp inc sp
l_usb_dat_in_trns_n_ext_00108: l_usb_dat_in_trns_n_ext_00108:
;source-doc/base-drv/./transfers.c:123: }
;source-doc/base-drv/transfers.c:123: }
pop ix pop ix
ret ret
;source-doc/base-drv/./transfers.c:135: usb_data_in_transfer(uint8_t *buffer, const uint16_t buffer_size, const uint8_t device_address, endpoint_param *const endpoint) {
;source-doc/base-drv/transfers.c: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 ; Function usb_data_in_transfer
; --------------------------------- ; ---------------------------------
@ -369,12 +368,12 @@ _usb_data_in_transfer:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
;source-doc/base-drv/./transfers.c:136: critical_begin();
;source-doc/base-drv/transfers.c:136: critical_begin();
call _critical_begin call _critical_begin
;source-doc/base-drv/./transfers.c:138: ch_set_usb_address(device_address);
;source-doc/base-drv/transfers.c:138: ch_set_usb_address(device_address);
ld l,(ix+8) ld l,(ix+8)
call _ch_set_usb_address call _ch_set_usb_address
;source-doc/base-drv/./transfers.c:140: result = ch_data_in_transfer(buffer, buffer_size, endpoint);
;source-doc/base-drv/transfers.c:140: result = ch_data_in_transfer(buffer, buffer_size, endpoint);
ld l,(ix+9) ld l,(ix+9)
ld h,(ix+10) ld h,(ix+10)
push hl push hl
@ -390,15 +389,14 @@ _usb_data_in_transfer:
pop af pop af
ld a, l ld a, l
ld (_result), a ld (_result), a
;source-doc/base-drv/./transfers.c:142: critical_end();
;source-doc/base-drv/transfers.c:142: critical_end();
call _critical_end call _critical_end
;source-doc/base-drv/./transfers.c:144: return result;
ld hl,_result
ld l, (hl)
;source-doc/base-drv/./transfers.c:145: }
;source-doc/base-drv/transfers.c:144: return result;
ld hl,(_result)
;source-doc/base-drv/transfers.c:145: }
pop ix pop ix
ret ret
;source-doc/base-drv/./transfers.c:157: usb_data_in_transfer_n(uint8_t *buffer, uint8_t *const buffer_size, const uint8_t device_address, endpoint_param *const endpoint) {
;source-doc/base-drv/transfers.c: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 ; Function usb_data_in_transfer_n
; --------------------------------- ; ---------------------------------
@ -406,12 +404,12 @@ _usb_data_in_transfer_n:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
;source-doc/base-drv/./transfers.c:158: critical_begin();
;source-doc/base-drv/transfers.c:158: critical_begin();
call _critical_begin call _critical_begin
;source-doc/base-drv/./transfers.c:160: ch_set_usb_address(device_address);
;source-doc/base-drv/transfers.c:160: ch_set_usb_address(device_address);
ld l,(ix+8) ld l,(ix+8)
call _ch_set_usb_address call _ch_set_usb_address
;source-doc/base-drv/./transfers.c:162: result = ch_data_in_transfer_n(buffer, buffer_size, endpoint);
;source-doc/base-drv/transfers.c:162: result = ch_data_in_transfer_n(buffer, buffer_size, endpoint);
ld l,(ix+9) ld l,(ix+9)
ld h,(ix+10) ld h,(ix+10)
push hl push hl
@ -427,15 +425,14 @@ _usb_data_in_transfer_n:
pop af pop af
ld a, l ld a, l
ld (_result), a ld (_result), a
;source-doc/base-drv/./transfers.c:164: critical_end();
;source-doc/base-drv/transfers.c:164: critical_end();
call _critical_end call _critical_end
;source-doc/base-drv/./transfers.c:166: return result;
ld hl,_result
ld l, (hl)
;source-doc/base-drv/./transfers.c:167: }
;source-doc/base-drv/transfers.c:166: return result;
ld hl,(_result)
;source-doc/base-drv/transfers.c:167: }
pop ix pop ix
ret ret
;source-doc/base-drv/./transfers.c:179: usb_data_out_transfer(const uint8_t *buffer, uint16_t buffer_size, const uint8_t device_address, endpoint_param *const endpoint) {
;source-doc/base-drv/transfers.c: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 ; Function usb_data_out_transfer
; --------------------------------- ; ---------------------------------
@ -443,12 +440,12 @@ _usb_data_out_transfer:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
;source-doc/base-drv/./transfers.c:180: critical_begin();
;source-doc/base-drv/transfers.c:180: critical_begin();
call _critical_begin call _critical_begin
;source-doc/base-drv/./transfers.c:182: ch_set_usb_address(device_address);
;source-doc/base-drv/transfers.c:182: ch_set_usb_address(device_address);
ld l,(ix+8) ld l,(ix+8)
call _ch_set_usb_address call _ch_set_usb_address
;source-doc/base-drv/./transfers.c:184: result = ch_data_out_transfer(buffer, buffer_size, endpoint);
;source-doc/base-drv/transfers.c:184: result = ch_data_out_transfer(buffer, buffer_size, endpoint);
ld l,(ix+9) ld l,(ix+9)
ld h,(ix+10) ld h,(ix+10)
push hl push hl
@ -464,11 +461,10 @@ _usb_data_out_transfer:
pop af pop af
ld a, l ld a, l
ld (_result), a ld (_result), a
;source-doc/base-drv/./transfers.c:186: critical_end();
;source-doc/base-drv/transfers.c:186: critical_end();
call _critical_end call _critical_end
;source-doc/base-drv/./transfers.c:188: return result;
ld hl,_result
ld l, (hl)
;source-doc/base-drv/./transfers.c:189: }
;source-doc/base-drv/transfers.c:188: return result;
ld hl,(_result)
;source-doc/base-drv/transfers.c:189: }
pop ix pop ix
ret ret

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

@ -0,0 +1,441 @@
;--------------------------------------------------------
; 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

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

@ -1,5 +1,5 @@
; ;
; Generated from source-doc/base-drv/./usb-base-drv.c.asm -- not to be modify directly
; Generated from source-doc/base-drv/usb-base-drv.c.asm -- not to be modify directly
; ;
; ;
;-------------------------------------------------------- ;--------------------------------------------------------
@ -48,24 +48,22 @@ _USB_MODULE_LEDS .EQU 0xff8a
;-------------------------------------------------------- ;--------------------------------------------------------
; code ; code
;-------------------------------------------------------- ;--------------------------------------------------------
;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) {
;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 ; Function chnative_seek
; --------------------------------- ; ---------------------------------
_chnative_seek: _chnative_seek:
push ix push ix
;source-doc/base-drv/usb-base-drv.c:7: storage_device->current_lba = lba;
ld ix,0 ld ix,0
add ix,sp add ix,sp
push af
ld c, l
ld b, h
;source-doc/base-drv/./usb-base-drv.c:7: storage_device->current_lba = lba;
ld a,(ix+4)
ld (ix-2),a
ld a,(ix+5)
ld (ix-1),a
ld c,(ix+4)
ld b,(ix+5)
push bc
ld a,(ix-2) ld a,(ix-2)
add a,0x0c add a,0x0c
ld c,l
ld b,h
ld l, a ld l, a
ld a,(ix-1) ld a,(ix-1)
adc a,0x00 adc a,0x00
@ -77,9 +75,9 @@ _chnative_seek:
ld (hl), c ld (hl), c
inc hl inc hl
ld (hl), b ld (hl), b
;source-doc/base-drv/./usb-base-drv.c:8: return 0;
;source-doc/base-drv/usb-base-drv.c:8: return 0;
xor a xor a
;source-doc/base-drv/./usb-base-drv.c:9: }
;source-doc/base-drv/usb-base-drv.c:9: }
ld sp, ix ld sp, ix
pop ix pop ix
pop hl pop hl

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

@ -1,5 +1,5 @@
; ;
; Generated from source-doc/base-drv/./usb-init.c.asm -- not to be modify directly
; Generated from source-doc/base-drv/usb-init.c.asm -- not to be modify directly
; ;
; ;
;-------------------------------------------------------- ;--------------------------------------------------------
@ -48,109 +48,110 @@ _USB_MODULE_LEDS .EQU 0xff8a
;-------------------------------------------------------- ;--------------------------------------------------------
; code ; code
;-------------------------------------------------------- ;--------------------------------------------------------
;source-doc/base-drv/./usb-init.c:8: static usb_error usb_host_bus_reset(void) {
;source-doc/base-drv/usb-init.c:8: static usb_error usb_host_bus_reset(void) {
; --------------------------------- ; ---------------------------------
; Function usb_host_bus_reset ; Function usb_host_bus_reset
; --------------------------------- ; ---------------------------------
_usb_host_bus_reset: _usb_host_bus_reset:
;source-doc/base-drv/./usb-init.c:9: ch_cmd_set_usb_mode(CH_MODE_HOST);
;source-doc/base-drv/usb-init.c:9: ch_cmd_set_usb_mode(CH_MODE_HOST);
ld l,0x06 ld l,0x06
call _ch_cmd_set_usb_mode call _ch_cmd_set_usb_mode
;source-doc/base-drv/./usb-init.c:10: delay_20ms();
;source-doc/base-drv/usb-init.c:10: delay_20ms();
call _delay_20ms call _delay_20ms
;source-doc/base-drv/./usb-init.c:12: ch_cmd_set_usb_mode(CH_MODE_HOST_RESET);
;source-doc/base-drv/usb-init.c:12: ch_cmd_set_usb_mode(CH_MODE_HOST_RESET);
ld l,0x07 ld l,0x07
call _ch_cmd_set_usb_mode call _ch_cmd_set_usb_mode
;source-doc/base-drv/./usb-init.c:13: delay_20ms();
;source-doc/base-drv/usb-init.c:13: delay_20ms();
call _delay_20ms call _delay_20ms
;source-doc/base-drv/./usb-init.c:15: ch_cmd_set_usb_mode(CH_MODE_HOST);
;source-doc/base-drv/usb-init.c:15: ch_cmd_set_usb_mode(CH_MODE_HOST);
ld l,0x06 ld l,0x06
call _ch_cmd_set_usb_mode call _ch_cmd_set_usb_mode
;source-doc/base-drv/./usb-init.c:16: delay_20ms();
;source-doc/base-drv/usb-init.c:16: delay_20ms();
call _delay_20ms call _delay_20ms
;source-doc/base-drv/./ch376.h:163: ch_command(CH_CMD_WRITE_VAR8);
;source-doc/base-drv/ch376.h:163: ch_command(CH_CMD_WRITE_VAR8);
ld l,0x0b ld l,0x0b
call _ch_command call _ch_command
;source-doc/base-drv/./ch376.h:164: CH376_DATA_PORT = CH_VAR_RETRY_TIMES;
;source-doc/base-drv/ch376.h:164: CH376_DATA_PORT = CH_VAR_RETRY_TIMES;
ld a,0x25 ld a,0x25
ld bc,_CH376_DATA_PORT ld bc,_CH376_DATA_PORT
out (c),a out (c),a
;source-doc/base-drv/./ch376.h:165: CH376_DATA_PORT = retry << 6 | (number_of_retries & 0x1F);
;source-doc/base-drv/ch376.h:165: CH376_DATA_PORT = retry << 6 | (number_of_retries & 0x1F);
ld a,0xdf ld a,0xdf
ld bc,_CH376_DATA_PORT ld bc,_CH376_DATA_PORT
out (c),a out (c),a
;source-doc/base-drv/./usb-init.c:20: return USB_ERR_OK;
;source-doc/base-drv/usb-init.c:20: return USB_ERR_OK;
ld l,0x00 ld l,0x00
;source-doc/base-drv/./usb-init.c:21: }
;source-doc/base-drv/usb-init.c:21: }
ret ret
;source-doc/base-drv/./usb-init.c:25: void chnative_init(void) {
;source-doc/base-drv/usb-init.c:25: void chnative_init(void) {
; --------------------------------- ; ---------------------------------
; Function chnative_init ; Function chnative_init
; --------------------------------- ; ---------------------------------
_chnative_init: _chnative_init:
;source-doc/base-drv/./usb-init.c:26: memset(get_usb_work_area(), 0, sizeof(_usb_state));
;source-doc/base-drv/usb-init.c:26: memset(get_usb_work_area(), 0, sizeof(_usb_state));
ld hl,_x ld hl,_x
ld b,0x63
l_chnative_init_00139:
ld (hl),0x00 ld (hl),0x00
inc hl
djnz l_chnative_init_00139
;source-doc/base-drv/./usb-init.c:28: ch_cmd_reset_all();
ld e, l
ld d, h
inc de
ld bc,0x0062
ldir
;source-doc/base-drv/usb-init.c:28: ch_cmd_reset_all();
call _ch_cmd_reset_all call _ch_cmd_reset_all
;source-doc/base-drv/./usb-init.c:30: delay_medium();
;source-doc/base-drv/usb-init.c:30: delay_medium();
call _delay_medium call _delay_medium
;source-doc/base-drv/./usb-init.c:32: if (!ch_probe()) {
;source-doc/base-drv/usb-init.c:32: if (!ch_probe()) {
call _ch_probe call _ch_probe
ld a, l ld a, l
or a or a
jr NZ,l_chnative_init_00102 jr NZ,l_chnative_init_00102
;source-doc/base-drv/./usb-init.c:33: print_string("\r\nCH376: NOT PRESENT$");
;source-doc/base-drv/./usb-init.c:34: return;
;source-doc/base-drv/usb-init.c:33: print_string("\r\nCH376: NOT PRESENT$");
;source-doc/base-drv/usb-init.c:34: return;
ld hl,usb_init_str_0 ld hl,usb_init_str_0
jp _print_string jp _print_string
l_chnative_init_00102: l_chnative_init_00102:
;source-doc/base-drv/./usb-init.c:37: print_string("\r\nCH376: PRESENT (VER $");
;source-doc/base-drv/usb-init.c:37: print_string("\r\nCH376: PRESENT (VER $");
ld hl,usb_init_str_1 ld hl,usb_init_str_1
call _print_string call _print_string
;source-doc/base-drv/./usb-init.c:38: print_hex(ch_cmd_get_ic_version());
;source-doc/base-drv/usb-init.c:38: print_hex(ch_cmd_get_ic_version());
call _ch_cmd_get_ic_version call _ch_cmd_get_ic_version
call _print_hex call _print_hex
;source-doc/base-drv/./usb-init.c:39: print_string("); $");
;source-doc/base-drv/usb-init.c:39: print_string("); $");
ld hl,usb_init_str_2 ld hl,usb_init_str_2
call _print_string call _print_string
;source-doc/base-drv/./usb-init.c:41: usb_host_bus_reset();
;source-doc/base-drv/usb-init.c:41: usb_host_bus_reset();
call _usb_host_bus_reset call _usb_host_bus_reset
;source-doc/base-drv/./usb-init.c:43: for (uint8_t i = 0; i < 4; i++) {
;source-doc/base-drv/usb-init.c:43: for (uint8_t i = 0; i < 4; i++) {
ld c,0x00 ld c,0x00
l_chnative_init_00107: l_chnative_init_00107:
ld a, c ld a, c
sub 0x04 sub 0x04
jr NC,l_chnative_init_00105 jr NC,l_chnative_init_00105
;source-doc/base-drv/./usb-init.c:44: const uint8_t r = ch_very_short_wait_int_and_get_();
;source-doc/base-drv/usb-init.c:44: const uint8_t r = ch_very_short_wait_int_and_get_();
push bc push bc
call _ch_very_short_wait_int_and_get call _ch_very_short_wait_int_and_get
ld a, l ld a, l
pop bc pop bc
;source-doc/base-drv/./usb-init.c:46: if (r == USB_INT_CONNECT) {
;source-doc/base-drv/usb-init.c:46: if (r == USB_INT_CONNECT) {
sub 0x81 sub 0x81
jr NZ,l_chnative_init_00108 jr NZ,l_chnative_init_00108
;source-doc/base-drv/./usb-init.c:47: print_string("USB: CONNECTED$");
;source-doc/base-drv/usb-init.c:47: print_string("USB: CONNECTED$");
ld hl,usb_init_str_3 ld hl,usb_init_str_3
call _print_string call _print_string
;source-doc/base-drv/./usb-init.c:49: enumerate_all_devices();
;source-doc/base-drv/usb-init.c:49: enumerate_all_devices();
jp _enumerate_all_devices jp _enumerate_all_devices
;source-doc/base-drv/./usb-init.c:51: return;
;source-doc/base-drv/usb-init.c:51: return;
jr l_chnative_init_00109 jr l_chnative_init_00109
l_chnative_init_00108: l_chnative_init_00108:
;source-doc/base-drv/./usb-init.c:43: for (uint8_t i = 0; i < 4; i++) {
;source-doc/base-drv/usb-init.c:43: for (uint8_t i = 0; i < 4; i++) {
inc c inc c
jr l_chnative_init_00107 jr l_chnative_init_00107
l_chnative_init_00105: l_chnative_init_00105:
;source-doc/base-drv/./usb-init.c:55: print_string("USB: DISCONNECTED$");
;source-doc/base-drv/usb-init.c:55: print_string("USB: DISCONNECTED$");
ld hl,usb_init_str_4 ld hl,usb_init_str_4
jp _print_string jp _print_string
l_chnative_init_00109: l_chnative_init_00109:
;source-doc/base-drv/./usb-init.c:56: }
;source-doc/base-drv/usb-init.c:56: }
ret ret
usb_init_str_0: usb_init_str_0:
DEFB 0x0d DEFB 0x0d

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

@ -0,0 +1,605 @@
;--------------------------------------------------------
; 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

82
Source/HBIOS/ch376-native/base-drv/usb_state.c.s

@ -1,5 +1,5 @@
; ;
; Generated from source-doc/base-drv/./usb_state.c.asm -- not to be modify directly
; Generated from source-doc/base-drv/usb_state.c.asm -- not to be modify directly
; ;
; ;
;-------------------------------------------------------- ;--------------------------------------------------------
@ -48,7 +48,7 @@ _USB_MODULE_LEDS .EQU 0xff8a
;-------------------------------------------------------- ;--------------------------------------------------------
; code ; code
;-------------------------------------------------------- ;--------------------------------------------------------
;source-doc/base-drv/./usb_state.c:13: device_config *find_device_config(const usb_device_type requested_type) {
;source-doc/base-drv/usb_state.c:13: device_config *find_device_config(const usb_device_type requested_type) {
; --------------------------------- ; ---------------------------------
; Function find_device_config ; Function find_device_config
; --------------------------------- ; ---------------------------------
@ -56,38 +56,38 @@ _find_device_config:
push ix push ix
ld ix,0 ld ix,0
add ix,sp 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);
;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 ld hl,_x
call _first_device_config call _first_device_config
;source-doc/base-drv/./usb_state.c:17: while (p_config) {
;source-doc/base-drv/usb_state.c:17: while (p_config) {
l_find_device_config_00103: l_find_device_config_00103:
ld a, d ld a, d
or e or e
jr Z,l_find_device_config_00105 jr Z,l_find_device_config_00105
;source-doc/base-drv/./usb_state.c:18: const uint8_t type = p_config->type;
;source-doc/base-drv/usb_state.c:18: const uint8_t type = p_config->type;
ld l, e ld l, e
ld h, d ld h, d
ld a, (hl) ld a, (hl)
and 0x0f and 0x0f
ld c, a ld c, a
;source-doc/base-drv/./usb_state.c:20: if (type == requested_type)
;source-doc/base-drv/usb_state.c:20: if (type == requested_type)
ld a,(ix+4) ld a,(ix+4)
sub c sub c
jr NZ,l_find_device_config_00102 jr NZ,l_find_device_config_00102
;source-doc/base-drv/./usb_state.c:21: return (device_config *)p_config;
;source-doc/base-drv/usb_state.c:21: return (device_config *)p_config;
ex de, hl ex de, hl
jr l_find_device_config_00106 jr l_find_device_config_00106
l_find_device_config_00102: l_find_device_config_00102:
;source-doc/base-drv/./usb_state.c:23: p_config = next_device_config(p, p_config);
;source-doc/base-drv/usb_state.c:23: p_config = next_device_config(p, p_config);
ld hl,_x ld hl,_x
call _next_device_config call _next_device_config
jr l_find_device_config_00103 jr l_find_device_config_00103
l_find_device_config_00105: l_find_device_config_00105:
;source-doc/base-drv/./usb_state.c:26: return NULL;
;source-doc/base-drv/usb_state.c:26: return NULL;
ld hl,0x0000 ld hl,0x0000
l_find_device_config_00106: l_find_device_config_00106:
;source-doc/base-drv/./usb_state.c:27: }
;source-doc/base-drv/usb_state.c:27: }
pop ix pop ix
ret ret
_device_config_sizes: _device_config_sizes:
@ -98,41 +98,41 @@ _device_config_sizes:
DEFB +0x06 DEFB +0x06
DEFB 0x00 DEFB 0x00
DEFB 0x00 DEFB 0x00
;source-doc/base-drv/./usb_state.c:30: device_config *find_first_free(void) {
;source-doc/base-drv/usb_state.c:30: device_config *find_first_free(void) {
; --------------------------------- ; ---------------------------------
; Function find_first_free ; Function find_first_free
; --------------------------------- ; ---------------------------------
_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);
;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 ld hl,_x
call _first_device_config call _first_device_config
;source-doc/base-drv/./usb_state.c:35: while (p) {
;source-doc/base-drv/usb_state.c:35: while (p) {
l_find_first_free_00103: l_find_first_free_00103:
ld a, d ld a, d
or e or e
jr Z,l_find_first_free_00105 jr Z,l_find_first_free_00105
;source-doc/base-drv/./usb_state.c:36: if (p->type == 0)
;source-doc/base-drv/usb_state.c:36: if (p->type == 0)
ld l, e ld l, e
ld h, d ld h, d
ld a, (hl) ld a, (hl)
and 0x0f and 0x0f
jr NZ,l_find_first_free_00102 jr NZ,l_find_first_free_00102
;source-doc/base-drv/./usb_state.c:37: return p;
;source-doc/base-drv/usb_state.c:37: return p;
ex de, hl ex de, hl
jr l_find_first_free_00106 jr l_find_first_free_00106
l_find_first_free_00102: l_find_first_free_00102:
;source-doc/base-drv/./usb_state.c:39: p = next_device_config(boot_state, p);
;source-doc/base-drv/usb_state.c:39: p = next_device_config(boot_state, p);
ld hl,_x ld hl,_x
call _next_device_config call _next_device_config
jr l_find_first_free_00103 jr l_find_first_free_00103
l_find_first_free_00105: l_find_first_free_00105:
;source-doc/base-drv/./usb_state.c:42: return NULL;
;source-doc/base-drv/usb_state.c:42: return NULL;
ld hl,0x0000 ld hl,0x0000
l_find_first_free_00106: l_find_first_free_00106:
;source-doc/base-drv/./usb_state.c:43: }
;source-doc/base-drv/usb_state.c:43: }
ret 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]; }
;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 ; Function first_device_config
; --------------------------------- ; ---------------------------------
@ -141,24 +141,24 @@ _first_device_config:
inc de inc de
inc de inc de
ret 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) {
;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 ; Function next_device_config
; --------------------------------- ; ---------------------------------
_next_device_config: _next_device_config:
ld c, l ld c, l
ld b, h ld b, h
;source-doc/base-drv/./usb_state.c:48: if (p->type == 0)
;source-doc/base-drv/usb_state.c:48: if (p->type == 0)
ld l, e ld l, e
ld h, d ld h, d
ld a, (hl) ld a, (hl)
and 0x0f and 0x0f
jr NZ,l_next_device_config_00102 jr NZ,l_next_device_config_00102
;source-doc/base-drv/./usb_state.c:49: return NULL;
;source-doc/base-drv/usb_state.c:49: return NULL;
ld de,0x0000 ld de,0x0000
jr l_next_device_config_00105 jr l_next_device_config_00105
l_next_device_config_00102: l_next_device_config_00102:
;source-doc/base-drv/./usb_state.c:51: const uint8_t size = device_config_sizes[p->type];
;source-doc/base-drv/usb_state.c:51: const uint8_t size = device_config_sizes[p->type];
ld l, e ld l, e
ld h, d ld h, d
ld a, (hl) ld a, (hl)
@ -169,12 +169,12 @@ l_next_device_config_00102:
adc a, +((_device_config_sizes) / 256) adc a, +((_device_config_sizes) / 256)
ld h, a ld h, a
ld l, (hl) 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);
;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 ld h,0x00
add hl, de add hl, de
ex de, hl ex de, hl
;source-doc/base-drv/./usb_state.c:61: if (result >= (device_config *)&usb_state->device_configs_end)
;source-doc/base-drv/usb_state.c:61: if (result >= (device_config *)&usb_state->device_configs_end)
ld hl,0x0062 ld hl,0x0062
add hl, bc add hl, bc
ld a, e ld a, e
@ -182,20 +182,20 @@ l_next_device_config_00102:
ld a, d ld a, d
sbc a, h sbc a, h
ret C ret C
;source-doc/base-drv/./usb_state.c:62: return NULL;
;source-doc/base-drv/usb_state.c:62: return NULL;
ld de,0x0000 ld de,0x0000
;source-doc/base-drv/./usb_state.c:64: return result;
;source-doc/base-drv/usb_state.c:64: return result;
l_next_device_config_00105: l_next_device_config_00105:
;source-doc/base-drv/./usb_state.c:65: }
;source-doc/base-drv/usb_state.c:65: }
ret ret
;source-doc/base-drv/./usb_state.c:68: device_config *get_usb_device_config(const uint8_t device_index) __sdcccall(1) {
;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 ; Function get_usb_device_config
; --------------------------------- ; ---------------------------------
_get_usb_device_config: _get_usb_device_config:
ld c, a 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)) {
;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 push bc
ld hl,_x ld hl,_x
call _first_device_config call _first_device_config
@ -205,29 +205,29 @@ l_get_usb_device_config_00107:
ld a, d ld a, d
or e or e
jr Z,l_get_usb_device_config_00105 jr Z,l_get_usb_device_config_00105
;source-doc/base-drv/./usb_state.c:74: if (p->type != USB_NOT_SUPPORTED) {
;source-doc/base-drv/usb_state.c:74: if (p->type != USB_NOT_SUPPORTED) {
ld l, e ld l, e
ld h, d ld h, d
ld a, (hl) ld a, (hl)
and 0x0f and 0x0f
jr Z,l_get_usb_device_config_00108 jr Z,l_get_usb_device_config_00108
;source-doc/base-drv/./usb_state.c:75: if (counter == device_index)
;source-doc/base-drv/usb_state.c:75: if (counter == device_index)
ld a, c ld a, c
sub b sub b
;source-doc/base-drv/./usb_state.c:76: return p;
;source-doc/base-drv/usb_state.c:76: return p;
jr Z,l_get_usb_device_config_00109 jr Z,l_get_usb_device_config_00109
;source-doc/base-drv/./usb_state.c:77: counter++;
;source-doc/base-drv/usb_state.c:77: counter++;
inc b inc b
l_get_usb_device_config_00108: 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)) {
;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 push bc
ld hl,_x ld hl,_x
call _next_device_config call _next_device_config
pop bc pop bc
jr l_get_usb_device_config_00107 jr l_get_usb_device_config_00107
l_get_usb_device_config_00105: l_get_usb_device_config_00105:
;source-doc/base-drv/./usb_state.c:81: return NULL; // is not a usb device
;source-doc/base-drv/usb_state.c:81: return NULL; // is not a usb device
ld de,0x0000 ld de,0x0000
l_get_usb_device_config_00109: l_get_usb_device_config_00109:
;source-doc/base-drv/./usb_state.c:82: }
;source-doc/base-drv/usb_state.c:82: }
ret ret

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

@ -0,0 +1,520 @@
;--------------------------------------------------------
; 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

2
Source/HBIOS/ch376-native/base-drv/work-area.c.s

@ -1,5 +1,5 @@
; ;
; Generated from source-doc/base-drv/./work-area.c.asm -- not to be modify directly
; Generated from source-doc/base-drv/work-area.c.asm -- not to be modify directly
; ;
; ;
;-------------------------------------------------------- ;--------------------------------------------------------

0
Source/HBIOS/ch376-native/build-docker.sh

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

@ -20,21 +20,20 @@ _memset_callee:
dec bc dec bc
ld a, b ld a, b
or c or c
ret Z
ret z
push hl push hl
ldir ldir
pop hl pop hl
ret ret
_memcpy_callee: _memcpy_callee:
pop af
pop bc
pop hl
pop de
push af
pop af
pop bc
pop hl
pop de
push af
; enter : bc = size_t n ; enter : bc = size_t n
@ -48,99 +47,18 @@ _memcpy_callee:
; ;
; uses : af, bc, de, hl ; uses : af, bc, de, hl
ld a,b
or c
jr Z,zero_n
ld a, b
or c
jr z, zero_n
asm0_memcpy: asm0_memcpy:
push de
ldir
pop hl
or a
ret
push de
ldir
pop hl
or a
ret
zero_n: zero_n:
push de push de
pop hl pop hl
ret
; ; ===============================================================
; ; Stefano Bodrato
; ; aralbrec: accommodate nmos z80 bug
; ; ===============================================================
; ;
; ; void z80_push_di(void)
; ;
; ; Save the current ei/di status on the stack and disable ints.
; ;
; ; ===============================================================
; ____sdcc_cpu_push_di:
; ; exit : stack = ei_di_status
; ;
; ; uses : af
; ex (sp),hl
; push hl
; ld a,i
; di
; push af
; pop hl ; hl = ei_di status
; pop af ; af = ret
; ex (sp),hl ; restore hl, push ei_di_status
; push af
; ret
; ; ===============================================================
; ; Stefano Bodrato
; ; ===============================================================
; ;
; ; void z80_pop_ei(void)
; ;
; ; Pop the ei_di_status from the stack and restore the di/ei
; ; state to what it was previously when a push was called.
; ;
; ; The "ei" in the function name has no bearing on what the
; ; function does; the name is meant to balance "z80_push_di".
; ;
; ; ===============================================================
; ____sdcc_cpu_pop_ei:
; ; enter : stack = ei_di_status, ret
; ;
; ; uses : af
; ex (sp),hl
; pop af ; af = old hl
; ex (sp),hl ; hl = ei_di_status
; push af
; ex (sp),hl ; hl restored
; ____sdcc_cpu_pop_ei_jp:
; ; enter : stack = ret, ei_di_status
; ;
; ; uses : af
; pop af ; af = ei_di_status
; jp PO, di_state
; ei_state:
; ei
; ret
; di_state:
; di
; ret
ret

2
Source/HBIOS/ch376-native/keyboard.s

@ -1,4 +1,4 @@
; Generated File -- not to be modify directly ; Generated File -- not to be modify directly
#include "ch376-native/keyboard/kyb-init.c.s"
#include "ch376-native/keyboard/class_hid.c.s" #include "ch376-native/keyboard/class_hid.c.s"
#include "ch376-native/keyboard/class_hid_keyboard.c.s" #include "ch376-native/keyboard/class_hid_keyboard.c.s"
#include "ch376-native/keyboard/kyb-init.c.s"

87
Source/HBIOS/ch376-native/keyboard/class_hid.c.s

@ -1,5 +1,5 @@
; ;
; Generated from source-doc/keyboard/./class_hid.c.asm -- not to be modify directly
; Generated from source-doc/keyboard/class_hid.c.asm -- not to be modify directly
; ;
; ;
;-------------------------------------------------------- ;--------------------------------------------------------
@ -48,7 +48,7 @@ _USB_MODULE_LEDS .EQU 0xff8a
;-------------------------------------------------------- ;--------------------------------------------------------
; code ; code
;-------------------------------------------------------- ;--------------------------------------------------------
;source-doc/keyboard/./class_hid.c:6: usb_error hid_set_protocol(const device_config_keyboard *const dev, const uint8_t protocol) __sdcccall(1) {
;source-doc/keyboard/class_hid.c:6: usb_error hid_set_protocol(const device_config_keyboard *const dev, const uint8_t protocol) __sdcccall(1) {
; --------------------------------- ; ---------------------------------
; Function hid_set_protocol ; Function hid_set_protocol
; --------------------------------- ; ---------------------------------
@ -60,27 +60,25 @@ _hid_set_protocol:
push af push af
push af push af
push af push af
ex de, hl
;source-doc/keyboard/./class_hid.c:8: cmd = cmd_hid_set;
push de
ex de, hl
;source-doc/keyboard/class_hid.c:8: cmd = cmd_hid_set;
push hl
ld hl,2 ld hl,2
add hl, sp add hl, sp
ex de, hl ex de, hl
ld hl,_cmd_hid_set
ld bc,0x0008 ld bc,0x0008
ld hl,_cmd_hid_set
ldir ldir
pop de pop de
;source-doc/keyboard/./class_hid.c:10: cmd.bRequest = HID_SET_PROTOCOL;
;source-doc/keyboard/class_hid.c:10: cmd.bRequest = HID_SET_PROTOCOL;
ld (ix-7),0x0b ld (ix-7),0x0b
;source-doc/keyboard/./class_hid.c:11: cmd.bValue[0] = protocol;
;source-doc/keyboard/class_hid.c:11: cmd.bValue[0] = protocol;
ld a,(ix+4) ld a,(ix+4)
ld (ix-6),a ld (ix-6),a
;source-doc/keyboard/./class_hid.c:13: return usb_control_transfer(&cmd, NULL, dev->address, dev->max_packet_size);
;source-doc/keyboard/class_hid.c:13: return usb_control_transfer(&cmd, NULL, dev->address, dev->max_packet_size);
ld l, e ld l, e
ld h, d ld h, d
inc hl inc hl
ld c, (hl)
ld b, (hl)
ex de, hl ex de, hl
ld a, (hl) ld a, (hl)
rlca rlca
@ -88,11 +86,8 @@ _hid_set_protocol:
rlca rlca
rlca rlca
and 0x0f and 0x0f
ld h, c
push hl
inc sp
push af
inc sp
ld c,a
push bc
ld hl,0x0000 ld hl,0x0000
push hl push hl
ld hl,4 ld hl,4
@ -103,7 +98,7 @@ _hid_set_protocol:
pop af pop af
pop af pop af
ld a, l ld a, l
;source-doc/keyboard/./class_hid.c:14: }
;source-doc/keyboard/class_hid.c:14: }
ld sp, ix ld sp, ix
pop ix pop ix
pop hl pop hl
@ -117,7 +112,7 @@ _cmd_hid_set:
DEFB +0x00 DEFB +0x00
DEFB +0x00 DEFB +0x00
DEFW +0x0000 DEFW +0x0000
;source-doc/keyboard/./class_hid.c:16: usb_error hid_set_idle(const device_config_keyboard *const dev, const uint8_t duration) __sdcccall(1) {
;source-doc/keyboard/class_hid.c:16: usb_error hid_set_idle(const device_config_keyboard *const dev, const uint8_t duration) __sdcccall(1) {
; --------------------------------- ; ---------------------------------
; Function hid_set_idle ; Function hid_set_idle
; --------------------------------- ; ---------------------------------
@ -129,27 +124,25 @@ _hid_set_idle:
push af push af
push af push af
push af push af
ex de, hl
;source-doc/keyboard/./class_hid.c:18: cmd = cmd_hid_set;
push de
ex de, hl
;source-doc/keyboard/class_hid.c:18: cmd = cmd_hid_set;
push hl
ld hl,2 ld hl,2
add hl, sp add hl, sp
ex de, hl ex de, hl
ld hl,_cmd_hid_set
ld bc,0x0008 ld bc,0x0008
ld hl,_cmd_hid_set
ldir ldir
pop de pop de
;source-doc/keyboard/./class_hid.c:20: cmd.bRequest = HID_SET_IDLE;
;source-doc/keyboard/class_hid.c:20: cmd.bRequest = HID_SET_IDLE;
ld (ix-7),0x0a ld (ix-7),0x0a
;source-doc/keyboard/./class_hid.c:21: cmd.bValue[0] = duration;
;source-doc/keyboard/class_hid.c:21: cmd.bValue[0] = duration;
ld a,(ix+4) ld a,(ix+4)
ld (ix-6),a ld (ix-6),a
;source-doc/keyboard/./class_hid.c:23: return usb_control_transfer(&cmd, NULL, dev->address, dev->max_packet_size);
;source-doc/keyboard/class_hid.c:23: return usb_control_transfer(&cmd, NULL, dev->address, dev->max_packet_size);
ld l, e ld l, e
ld h, d ld h, d
inc hl inc hl
ld c, (hl)
ld b, (hl)
ex de, hl ex de, hl
ld a, (hl) ld a, (hl)
rlca rlca
@ -157,11 +150,8 @@ _hid_set_idle:
rlca rlca
rlca rlca
and 0x0f and 0x0f
ld h, c
push hl
inc sp
push af
inc sp
ld c,a
push bc
ld hl,0x0000 ld hl,0x0000
push hl push hl
ld hl,4 ld hl,4
@ -172,13 +162,13 @@ _hid_set_idle:
pop af pop af
pop af pop af
ld a, l ld a, l
;source-doc/keyboard/./class_hid.c:24: }
;source-doc/keyboard/class_hid.c:24: }
ld sp, ix ld sp, ix
pop ix pop ix
pop hl pop hl
inc sp inc sp
jp (hl) jp (hl)
;source-doc/keyboard/./class_hid.c:26: usb_error hid_get_input_report(const device_config_keyboard *const dev, uint8_t const *report) __sdcccall(1) {
;source-doc/keyboard/class_hid.c:26: usb_error hid_get_input_report(const device_config_keyboard *const dev, uint8_t const *report) __sdcccall(1) {
; --------------------------------- ; ---------------------------------
; Function hid_get_input_report ; Function hid_get_input_report
; --------------------------------- ; ---------------------------------
@ -193,31 +183,32 @@ _hid_get_input_report:
ld sp, hl ld sp, hl
ld l, c ld l, c
ld h, b ld h, b
;source-doc/keyboard/./class_hid.c:28: cmd = cmd_hid_set;
;source-doc/keyboard/class_hid.c:28: cmd = cmd_hid_set;
push de push de
push hl push hl
ex de, hl ex de, hl
ld hl,4 ld hl,4
add hl, sp add hl, sp
ex de, hl ex de, hl
ld hl,_cmd_hid_set
ld bc,0x0008 ld bc,0x0008
ld hl,_cmd_hid_set
ldir ldir
pop bc pop bc
pop de pop de
;source-doc/keyboard/./class_hid.c:30: cmd.bmRequestType = 0xA1;
;source-doc/keyboard/class_hid.c:30: cmd.bmRequestType = 0xA1;
ld (ix-9),0xa1 ld (ix-9),0xa1
;source-doc/keyboard/./class_hid.c:31: cmd.bValue[0] = 1;
ld (ix-7),0x01
;source-doc/keyboard/./class_hid.c:32: cmd.bValue[1] = 1;
ld (ix-6),0x01
;source-doc/keyboard/./class_hid.c:33: cmd.bRequest = HID_GET_REPORT;
ld (ix-8),0x01
;source-doc/keyboard/./class_hid.c:34: cmd.wLength = 8;
;source-doc/keyboard/class_hid.c:31: cmd.bValue[0] = 1;
;source-doc/keyboard/class_hid.c:32: cmd.bValue[1] = 1;
;source-doc/keyboard/class_hid.c:33: cmd.bRequest = HID_GET_REPORT;
ld a,0x01
ld (ix-7),a
ld (ix-6),a
ld (ix-8),a
;source-doc/keyboard/class_hid.c:34: cmd.wLength = 8;
ld (ix-3),0x08 ld (ix-3),0x08
xor a xor a
ld (ix-2),a ld (ix-2),a
;source-doc/keyboard/./class_hid.c:36: return usb_control_transfer(&cmd, report, dev->address, dev->max_packet_size);
;source-doc/keyboard/class_hid.c:36: return usb_control_transfer(&cmd, report, dev->address, dev->max_packet_size);
ld l, c ld l, c
ld h, b ld h, b
inc hl inc hl
@ -232,10 +223,8 @@ _hid_get_input_report:
rlca rlca
and 0x0f and 0x0f
ld h,(ix-1) ld h,(ix-1)
ld l,a
push hl push hl
inc sp
push af
inc sp
push de push de
ld hl,4 ld hl,4
add hl, sp add hl, sp
@ -245,7 +234,7 @@ _hid_get_input_report:
pop af pop af
pop af pop af
ld a, l ld a, l
;source-doc/keyboard/./class_hid.c:37: }
;source-doc/keyboard/class_hid.c:37: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret

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

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

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

@ -1,5 +1,5 @@
; ;
; Generated from source-doc/keyboard/./kyb-init.c.asm -- not to be modify directly
; Generated from source-doc/keyboard/kyb-init.c.asm -- not to be modify directly
; ;
; ;
;-------------------------------------------------------- ;--------------------------------------------------------
@ -60,81 +60,77 @@ _report:
;-------------------------------------------------------- ;--------------------------------------------------------
; code ; code
;-------------------------------------------------------- ;--------------------------------------------------------
;source-doc/keyboard/./kyb-init.c:11: void keyboard_init(void) {
;source-doc/keyboard/kyb-init.c:11: void keyboard_init(void) {
; --------------------------------- ; ---------------------------------
; Function keyboard_init ; Function keyboard_init
; --------------------------------- ; ---------------------------------
_keyboard_init: _keyboard_init:
;source-doc/keyboard/./kyb-init.c:13: uint8_t index = 1;
;source-doc/keyboard/kyb-init.c:13: uint8_t index = 1;
ld c,0x01 ld c,0x01
;source-doc/keyboard/./kyb-init.c:14: keyboard_config = NULL;
xor a
ld hl,_keyboard_config
ld (hl), a
inc hl
ld (hl), a
;source-doc/keyboard/./kyb-init.c:16: do {
;source-doc/keyboard/kyb-init.c:14: keyboard_config = NULL;
ld hl,0x0000
ld (_keyboard_config),hl
;source-doc/keyboard/kyb-init.c:16: do {
ld b,0x01 ld b,0x01
l_keyboard_init_00105: l_keyboard_init_00105:
;source-doc/keyboard/./kyb-init.c:17: keyboard_config = (device_config_keyboard *)get_usb_device_config(index);
;source-doc/keyboard/kyb-init.c:17: keyboard_config = (device_config_keyboard *)get_usb_device_config(index);
push bc push bc
ld a, b ld a, b
call _get_usb_device_config call _get_usb_device_config
ex de, hl ex de, hl
pop bc pop bc
ld (_keyboard_config), hl ld (_keyboard_config), hl
;source-doc/keyboard/./kyb-init.c:19: if (keyboard_config == NULL)
ld hl,_keyboard_config + 1
ld a, (hl)
dec hl
or (hl)
;source-doc/keyboard/kyb-init.c:19: if (keyboard_config == NULL)
ld hl,(_keyboard_config)
ld a,h
or l
jr Z,l_keyboard_init_00107 jr Z,l_keyboard_init_00107
;source-doc/keyboard/./kyb-init.c:22: const usb_device_type t = keyboard_config->type;
;source-doc/keyboard/kyb-init.c:22: const usb_device_type t = keyboard_config->type;
ld hl, (_keyboard_config) ld hl, (_keyboard_config)
ld a, (hl) ld a, (hl)
and 0x0f and 0x0f
;source-doc/keyboard/./kyb-init.c:24: if (t == USB_IS_KEYBOARD) {
;source-doc/keyboard/kyb-init.c:24: if (t == USB_IS_KEYBOARD) {
sub 0x04 sub 0x04
jr NZ,l_keyboard_init_00106 jr NZ,l_keyboard_init_00106
;source-doc/keyboard/./kyb-init.c:25: print_string("\r\nUSB: KEYBOARD @ $");
;source-doc/keyboard/kyb-init.c:25: print_string("\r\nUSB: KEYBOARD @ $");
push bc push bc
ld hl,kyb_init_str_0 ld hl,kyb_init_str_0
call _print_string call _print_string
pop bc pop bc
;source-doc/keyboard/./kyb-init.c:26: print_uint16(index);
;source-doc/keyboard/kyb-init.c:26: print_uint16(index);
ld h,0x00 ld h,0x00
ld l, c ld l, c
call _print_uint16 call _print_uint16
;source-doc/keyboard/./kyb-init.c:27: print_string(" $");
;source-doc/keyboard/kyb-init.c:27: print_string(" $");
ld hl,kyb_init_str_1 ld hl,kyb_init_str_1
call _print_string call _print_string
;source-doc/keyboard/./kyb-init.c:29: hid_set_protocol(keyboard_config, 1);
;source-doc/keyboard/kyb-init.c:29: hid_set_protocol(keyboard_config, 1);
ld a,0x01 ld a,0x01
push af push af
inc sp inc sp
ld hl, (_keyboard_config) ld hl, (_keyboard_config)
call _hid_set_protocol call _hid_set_protocol
;source-doc/keyboard/./kyb-init.c:30: hid_set_idle(keyboard_config, 0x80);
;source-doc/keyboard/kyb-init.c:30: hid_set_idle(keyboard_config, 0x80);
ld a,0x80 ld a,0x80
push af push af
inc sp inc sp
ld hl, (_keyboard_config) ld hl, (_keyboard_config)
call _hid_set_idle call _hid_set_idle
;source-doc/keyboard/./kyb-init.c:31: return;
;source-doc/keyboard/kyb-init.c:31: return;
jr l_keyboard_init_00108 jr l_keyboard_init_00108
l_keyboard_init_00106: l_keyboard_init_00106:
;source-doc/keyboard/./kyb-init.c:33: } while (++index != MAX_NUMBER_OF_DEVICES + 1);
;source-doc/keyboard/kyb-init.c:33: } while (++index != MAX_NUMBER_OF_DEVICES + 1);
inc b inc b
ld a,b ld a,b
ld c,a
ld c,b
sub 0x07 sub 0x07
jr NZ,l_keyboard_init_00105 jr NZ,l_keyboard_init_00105
l_keyboard_init_00107: l_keyboard_init_00107:
;source-doc/keyboard/./kyb-init.c:35: print_string("\r\nUSB: KEYBOARD: NOT FOUND$");
;source-doc/keyboard/kyb-init.c:35: print_string("\r\nUSB: KEYBOARD: NOT FOUND$");
ld hl,kyb_init_str_2 ld hl,kyb_init_str_2
jp _print_string jp _print_string
l_keyboard_init_00108: l_keyboard_init_00108:
;source-doc/keyboard/./kyb-init.c:36: }
;source-doc/keyboard/kyb-init.c:36: }
ret ret
kyb_init_str_0: kyb_init_str_0:
DEFB 0x0d DEFB 0x0d
@ -149,7 +145,7 @@ kyb_init_str_2:
DEFB 0x0a DEFB 0x0a
DEFM "USB: KEYBOARD: NOT FOUND$" DEFM "USB: KEYBOARD: NOT FOUND$"
DEFB 0x00 DEFB 0x00
;source-doc/keyboard/./kyb-init.c:48: void keyboard_buf_put(const uint8_t modifier_keys, const uint8_t key_code) {
;source-doc/keyboard/kyb-init.c:48: void keyboard_buf_put(const uint8_t modifier_keys, const uint8_t key_code) {
; --------------------------------- ; ---------------------------------
; Function keyboard_buf_put ; Function keyboard_buf_put
; --------------------------------- ; ---------------------------------
@ -157,35 +153,33 @@ _keyboard_buf_put:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
;source-doc/keyboard/./kyb-init.c:49: if (key_code >= 0x80 || key_code == 0)
;source-doc/keyboard/kyb-init.c:49: if (key_code >= 0x80 || key_code == 0)
ld a,(ix+5) ld a,(ix+5)
sub 0x80 sub 0x80
jr NC,l_keyboard_buf_put_00106 jr NC,l_keyboard_buf_put_00106
ld a,(ix+5) ld a,(ix+5)
or a or a
;source-doc/keyboard/./kyb-init.c:50: return; // ignore ???
;source-doc/keyboard/kyb-init.c:50: return; // ignore ???
jr Z,l_keyboard_buf_put_00106 jr Z,l_keyboard_buf_put_00106
;source-doc/keyboard/./kyb-init.c:52: uint8_t next_write_index = (write_index + 1) & KEYBOARD_BUFFER_SIZE_MASK;
;source-doc/keyboard/kyb-init.c:52: uint8_t next_write_index = (write_index + 1) & KEYBOARD_BUFFER_SIZE_MASK;
ld a,(_write_index) ld a,(_write_index)
inc a inc a
and 0x07 and 0x07
ld b, a
;source-doc/keyboard/./kyb-init.c:53: if (next_write_index != read_index) { // Check if buffer is not full
ld c, a
;source-doc/keyboard/kyb-init.c:53: if (next_write_index != read_index) { // Check if buffer is not full
ld a,(_read_index) ld a,(_read_index)
sub b
sub c
jr Z,l_keyboard_buf_put_00106 jr Z,l_keyboard_buf_put_00106
;source-doc/keyboard/./kyb-init.c:54: buffer[write_index].modifier_keys = modifier_keys;
;source-doc/keyboard/kyb-init.c:54: buffer[write_index].modifier_keys = modifier_keys;
ld de,_buffer+0 ld de,_buffer+0
ld hl,_write_index
ld l, (hl)
ld hl,(_write_index)
ld h,0x00 ld h,0x00
add hl, hl add hl, hl
add hl, de add hl, de
ld a,(ix+4) ld a,(ix+4)
ld (hl), a ld (hl), a
;source-doc/keyboard/./kyb-init.c:55: buffer[write_index].key_code = key_code;
ld hl,_write_index
ld l, (hl)
;source-doc/keyboard/kyb-init.c:55: buffer[write_index].key_code = key_code;
ld hl,(_write_index)
ld h,0x00 ld h,0x00
add hl, hl add hl, hl
add hl, de add hl, de
@ -193,30 +187,30 @@ _keyboard_buf_put:
inc de inc de
ld a,(ix+5) ld a,(ix+5)
ld (de), a ld (de), a
;source-doc/keyboard/./kyb-init.c:56: write_index = next_write_index;
;source-doc/keyboard/kyb-init.c:56: write_index = next_write_index;
ld hl,_write_index ld hl,_write_index
ld (hl), b
ld (hl), c
l_keyboard_buf_put_00106: l_keyboard_buf_put_00106:
;source-doc/keyboard/./kyb-init.c:58: }
;source-doc/keyboard/kyb-init.c:58: }
pop ix pop ix
ret ret
;source-doc/keyboard/./kyb-init.c:60: uint8_t keyboard_buf_size() __sdcccall(1) {
;source-doc/keyboard/kyb-init.c:60: uint8_t keyboard_buf_size() __sdcccall(1) {
; --------------------------------- ; ---------------------------------
; Function keyboard_buf_size ; Function keyboard_buf_size
; --------------------------------- ; ---------------------------------
_keyboard_buf_size: _keyboard_buf_size:
;source-doc/keyboard/./kyb-init.c:61: if (write_index >= read_index)
;source-doc/keyboard/kyb-init.c:61: if (write_index >= read_index)
ld a,(_write_index) ld a,(_write_index)
ld hl,_read_index ld hl,_read_index
sub (hl) sub (hl)
jr C,l_keyboard_buf_size_00102 jr C,l_keyboard_buf_size_00102
;source-doc/keyboard/./kyb-init.c:62: return write_index - read_index;
;source-doc/keyboard/kyb-init.c:62: return write_index - read_index;
ld a,(_write_index) ld a,(_write_index)
ld hl,_read_index ld hl,_read_index
sub (hl) sub (hl)
jr l_keyboard_buf_size_00103 jr l_keyboard_buf_size_00103
l_keyboard_buf_size_00102: l_keyboard_buf_size_00102:
;source-doc/keyboard/./kyb-init.c:64: return KEYBOARD_BUFFER_SIZE - read_index + write_index;
;source-doc/keyboard/kyb-init.c:64: return KEYBOARD_BUFFER_SIZE - read_index + write_index;
ld hl,_read_index ld hl,_read_index
ld c, (hl) ld c, (hl)
ld a,0x08 ld a,0x08
@ -225,9 +219,9 @@ l_keyboard_buf_size_00102:
ld c, (hl) ld c, (hl)
add a, c add a, c
l_keyboard_buf_size_00103: l_keyboard_buf_size_00103:
;source-doc/keyboard/./kyb-init.c:65: }
;source-doc/keyboard/kyb-init.c:65: }
ret ret
;source-doc/keyboard/./kyb-init.c:67: uint32_t keyboard_buf_get_next() {
;source-doc/keyboard/kyb-init.c:67: uint32_t keyboard_buf_get_next() {
; --------------------------------- ; ---------------------------------
; Function keyboard_buf_get_next ; Function keyboard_buf_get_next
; --------------------------------- ; ---------------------------------
@ -237,83 +231,84 @@ _keyboard_buf_get_next:
add ix,sp add ix,sp
push af push af
push af push af
;source-doc/keyboard/./kyb-init.c:68: if (write_index == read_index) // Check if buffer is empty
;source-doc/keyboard/kyb-init.c:68: if (write_index == read_index) // Check if buffer is empty
ld a,(_write_index) ld a,(_write_index)
ld hl,_read_index ld hl,_read_index
sub (hl) sub (hl)
jr NZ,l_keyboard_buf_get_next_00102 jr NZ,l_keyboard_buf_get_next_00102
;source-doc/keyboard/./kyb-init.c:69: return 255 << 8;
;source-doc/keyboard/kyb-init.c:69: return 255 << 8;
ld hl,0xff00 ld hl,0xff00
ld e, h ld e, h
ld d, h ld d, h
jr l_keyboard_buf_get_next_00103 jr l_keyboard_buf_get_next_00103
l_keyboard_buf_get_next_00102: l_keyboard_buf_get_next_00102:
;source-doc/keyboard/./kyb-init.c:71: const uint8_t modifier_key = buffer[read_index].modifier_keys;
;source-doc/keyboard/kyb-init.c:71: const uint8_t modifier_key = buffer[read_index].modifier_keys;
ld bc,_buffer+0 ld bc,_buffer+0
ld hl,_read_index
ld l, (hl)
ld hl,(_read_index)
ld h,0x00 ld h,0x00
add hl, hl add hl, hl
add hl, bc add hl, bc
ld d, (hl)
;source-doc/keyboard/./kyb-init.c:72: const uint8_t key_code = buffer[read_index].key_code;
ld b, (hl)
;source-doc/keyboard/kyb-init.c:72: const uint8_t key_code = buffer[read_index].key_code;
inc hl inc hl
ld e, (hl)
;source-doc/keyboard/./kyb-init.c:73: read_index = (read_index + 1) & KEYBOARD_BUFFER_SIZE_MASK;
ld c, (hl)
;source-doc/keyboard/kyb-init.c:73: read_index = (read_index + 1) & KEYBOARD_BUFFER_SIZE_MASK;
ld hl,_read_index ld hl,_read_index
ld a, (hl) ld a, (hl)
inc a inc a
and 0x07 and 0x07
ld (hl), a ld (hl), a
;source-doc/keyboard/./kyb-init.c:74: const unsigned char c = scancode_to_char(modifier_key, key_code);
push de
ld l, e
ld a, d
;source-doc/keyboard/kyb-init.c:74: const unsigned char c = scancode_to_char(modifier_key, key_code);
push bc
ld l, c
ld a, b
call _scancode_to_char call _scancode_to_char
pop de
;source-doc/keyboard/./kyb-init.c:76: return (uint32_t)modifier_key << 24 | (uint32_t)c << 16 | key_code;
ld (ix-1),d
ld (ix-4),0x00
ld (ix-3),0x00
ld (ix-2),0x00
ld l, a
ld a,(ix-1)
ld (ix-4),e
ld (ix-3),0x00
ld (ix-2),0x00
ld (ix-1),0x00
pop de
push de
ld h, a
ex de, hl
ld e, a
pop bc
;source-doc/keyboard/kyb-init.c:76: return (uint32_t)modifier_key << 24 | (uint32_t)c << 16 | key_code;
xor a
ld (ix-1),b
xor a
ld (ix-4),a
ld (ix-3),a
ld (ix-2),a
xor a
ld d,(ix-1)
ld (ix-4),c
xor a
ld (ix-3),a
ld (ix-2),a
ld (ix-1),a
pop hl
push hl
l_keyboard_buf_get_next_00103: l_keyboard_buf_get_next_00103:
;source-doc/keyboard/./kyb-init.c:77: }
;source-doc/keyboard/kyb-init.c:77: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
;source-doc/keyboard/./kyb-init.c:79: void keyboard_buf_flush() {
;source-doc/keyboard/kyb-init.c:79: void keyboard_buf_flush() {
; --------------------------------- ; ---------------------------------
; Function keyboard_buf_flush ; Function keyboard_buf_flush
; --------------------------------- ; ---------------------------------
_keyboard_buf_flush: _keyboard_buf_flush:
;source-doc/keyboard/./kyb-init.c:80: write_index = 0;
;source-doc/keyboard/kyb-init.c:80: write_index = 0;
ld hl,_write_index ld hl,_write_index
ld (hl),0x00 ld (hl),0x00
;source-doc/keyboard/./kyb-init.c:81: read_index = 0;
;source-doc/keyboard/kyb-init.c:81: read_index = 0;
ld hl,_read_index ld hl,_read_index
ld (hl),0x00 ld (hl),0x00
;source-doc/keyboard/./kyb-init.c:82: }
;source-doc/keyboard/kyb-init.c:82: }
ret ret
;source-doc/keyboard/./kyb-init.c:88: void keyboard_tick(void) {
;source-doc/keyboard/kyb-init.c:88: void keyboard_tick(void) {
; --------------------------------- ; ---------------------------------
; Function keyboard_tick ; Function keyboard_tick
; --------------------------------- ; ---------------------------------
_keyboard_tick: _keyboard_tick:
;source-doc/keyboard/./kyb-init.c:89: if (is_in_critical_section())
;source-doc/keyboard/kyb-init.c:89: if (is_in_critical_section())
ld hl,_in_critical_usb_section ld hl,_in_critical_usb_section
ld a, (hl) ld a, (hl)
or a or a
;source-doc/keyboard/./kyb-init.c:90: return;
;source-doc/keyboard/kyb-init.c:90: return;
ret NZ ret NZ
;././source-doc/base-drv//ch376.h:163: ch_command(CH_CMD_WRITE_VAR8); ;././source-doc/base-drv//ch376.h:163: ch_command(CH_CMD_WRITE_VAR8);
ld l,0x0b ld l,0x0b
@ -326,7 +321,7 @@ _keyboard_tick:
ld a,0x1f ld a,0x1f
ld bc,_CH376_DATA_PORT ld bc,_CH376_DATA_PORT
out (c),a out (c),a
;source-doc/keyboard/./kyb-init.c:93: result = usbdev_dat_in_trnsfer_0((device_config *)keyboard_config, (uint8_t *)report, 8);
;source-doc/keyboard/kyb-init.c:93: result = usbdev_dat_in_trnsfer_0((device_config *)keyboard_config, (uint8_t *)report, 8);
ld bc,_report ld bc,_report
ld hl, (_keyboard_config) ld hl, (_keyboard_config)
ld a,0x08 ld a,0x08
@ -351,22 +346,20 @@ _keyboard_tick:
ld a,0xdf ld a,0xdf
ld bc,_CH376_DATA_PORT ld bc,_CH376_DATA_PORT
out (c),a out (c),a
;source-doc/keyboard/./kyb-init.c:95: if (result == 0)
;source-doc/keyboard/kyb-init.c:95: if (result == 0)
ld hl,_result ld hl,_result
ld a, (hl) ld a, (hl)
or a or a
ret NZ ret NZ
;source-doc/keyboard/./kyb-init.c:96: keyboard_buf_put(report.bModifierKeys, report.keyCode[0]);
;source-doc/keyboard/kyb-init.c:96: keyboard_buf_put(report.bModifierKeys, report.keyCode[0]);
ld a, (_report + 2) ld a, (_report + 2)
ld hl,_report + 0
ld b, (hl)
push af
inc sp
ld hl,_report
ld c, (hl)
ld b,a
push bc push bc
inc sp
call _keyboard_buf_put call _keyboard_buf_put
pop af pop af
;source-doc/keyboard/./kyb-init.c:97: }
;source-doc/keyboard/kyb-init.c:97: }
ret ret
_keyboard_config: _keyboard_config:
DEFW +0x0000 DEFW +0x0000

60
Source/HBIOS/ch376-native/readme.md

@ -0,0 +1,60 @@
# Native CH376 Driver
The native CH376 HBIOS driver is written in c, using z88dk's zcc compiler.
The build process, is a 3 stage process.
1. Compile all the C code to assembly files (.asm)
2. Translate the produced .asm files syntax to compile with the RomWBW assembler (.s)
3. Assemble the driver .s files as per the standard HBIOS build process
The original C code and produced/translated .s files are all committed units in the repo. But it is
expected, that only the c files are to be modified/updated.
The .s files are checked in, to builders to not require the C compiler tool chain (z88dk) to be installed.
The c compiling/translating process is also only support on linux, as the script to translate the .asm files
to .s files is a linux bash script. (Although the script can be easily run within Windows's Sub-system for linux)
## Compiling the C code
To compile the c code, to update the .s files:
Within the `Source/HBIOS/ch376-native` directly:
```
make
```
The make script will search for z88dk's `zcc` compiler, if not found, will attempt to use a docker wrapper.
It will not work if z88dk or docker is not installed.
## USB Native Driver systems
The usb driver is divided into a few sub-system, which can be individually enabled within the standard HBIOS config files.
### base-drv
The `base-drv` system contains the core code to discover, enumerate, and communicate to USB devices.
It also includes the driver code for enumerate and operating USB devices on USB hubs.
### scsi-drv
The `scsi-drv` system can be enabled with the HBIOS config `CHSCSIENABLE`
When activated, access to most USB mass storage devices (thumb drives, magnetic usb drives) is enabled.
### ufi-drv
The `ufi-drv` system can be enabled with the HBIOS config `CHUFIENABLE`
When activated, access to 3.5" Floppy USB devices will be enabled.
### keyboard
The `keyboard` system can be enabled with the HBIOS config `USBKYBENABLE`
When activated, usb keyboards can be used as input devices.

0
Source/HBIOS/ch376-native/root.md

2
Source/HBIOS/ch376-native/scsi-drv.s

@ -1,3 +1,3 @@
; Generated File -- not to be modify directly ; Generated File -- not to be modify directly
#include "ch376-native/scsi-drv/scsi-init.c.s"
#include "ch376-native/scsi-drv/class_scsi.c.s" #include "ch376-native/scsi-drv/class_scsi.c.s"
#include "ch376-native/scsi-drv/scsi-init.c.s"

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

@ -1,5 +1,5 @@
; ;
; Generated from source-doc/scsi-drv/./class_scsi.c.asm -- not to be modify directly
; Generated from source-doc/scsi-drv/class_scsi.c.asm -- not to be modify directly
; ;
; ;
;-------------------------------------------------------- ;--------------------------------------------------------
@ -62,7 +62,7 @@ _cbw:
;-------------------------------------------------------- ;--------------------------------------------------------
; code ; code
;-------------------------------------------------------- ;--------------------------------------------------------
;source-doc/scsi-drv/./class_scsi.c:12: usb_error do_scsi_cmd(device_config_storage *const dev,
;source-doc/scsi-drv/class_scsi.c:12: usb_error do_scsi_cmd(device_config_storage *const dev,
; --------------------------------- ; ---------------------------------
; Function do_scsi_cmd ; Function do_scsi_cmd
; --------------------------------- ; ---------------------------------
@ -70,19 +70,16 @@ _do_scsi_cmd:
push ix push ix
ld ix,0 ld ix,0
add ix,sp add ix,sp
ld hl, -8
ld hl, -6
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/scsi-drv/./class_scsi.c:17: cbw->dCBWTag[0] = next_tag++;
;source-doc/scsi-drv/class_scsi.c:17: cbw->dCBWTag[0] = next_tag++;
ld c,(ix+6) ld c,(ix+6)
ld b,(ix+7) ld b,(ix+7)
ld hl,0x0004 ld hl,0x0004
add hl, bc add hl, bc
ex (sp), hl ex (sp), hl
ld hl,_next_tag
ld e, (hl)
inc hl
ld d, (hl)
ld de,(_next_tag)
ld hl, (_next_tag) ld hl, (_next_tag)
inc hl inc hl
ld (_next_tag), hl ld (_next_tag), hl
@ -91,33 +88,31 @@ _do_scsi_cmd:
ld (hl), e ld (hl), e
inc hl inc hl
ld (hl), d ld (hl), d
;source-doc/scsi-drv/./class_scsi.c:19: if (!send)
;source-doc/scsi-drv/class_scsi.c:19: if (!send)
bit 0,(ix+10) bit 0,(ix+10)
jr NZ,l_do_scsi_cmd_00102 jr NZ,l_do_scsi_cmd_00102
;source-doc/scsi-drv/./class_scsi.c:20: cbw->bmCBWFlags = 0x80;
;source-doc/scsi-drv/class_scsi.c:20: cbw->bmCBWFlags = 0x80;
ld hl,0x000c ld hl,0x000c
add hl, bc add hl, bc
ld (hl),0x80 ld (hl),0x80
l_do_scsi_cmd_00102: l_do_scsi_cmd_00102:
;source-doc/scsi-drv/./class_scsi.c:22: critical_begin();
;source-doc/scsi-drv/class_scsi.c:22: critical_begin();
push bc push bc
call _critical_begin call _critical_begin
pop bc pop bc
;source-doc/scsi-drv/./class_scsi.c:25: &dev->endpoints[ENDPOINT_BULK_OUT]));
;source-doc/scsi-drv/class_scsi.c:25: &dev->endpoints[ENDPOINT_BULK_OUT]));
ld a,(ix+4) ld a,(ix+4)
ld (ix-6),a
ld (ix-4),a
ld a,(ix+5) ld a,(ix+5)
ld (ix-5),a
ld a,(ix-6)
ld (ix-3),a
ld a,(ix-4)
add a,0x03 add a,0x03
ld (ix-4),a
ld a,(ix-5)
ld (ix-2),a
ld a,(ix-3)
adc a,0x00 adc a,0x00
ld (ix-3),a
pop de
pop hl
push hl
push de
ld (ix-1),a
ld l,(ix-4)
ld h,(ix-3)
ld a, (hl) ld a, (hl)
rlca rlca
rlca rlca
@ -127,8 +122,8 @@ l_do_scsi_cmd_00102:
ld e,(ix+6) ld e,(ix+6)
ld d,(ix+7) ld d,(ix+7)
push bc push bc
ld l,(ix-4)
ld h,(ix-3)
ld l,(ix-2)
ld h,(ix-1)
push hl push hl
push af push af
inc sp inc sp
@ -146,7 +141,7 @@ l_do_scsi_cmd_00102:
ld a,(_result) ld a,(_result)
or a or a
jp NZ, l_do_scsi_cmd_00120 jp NZ, l_do_scsi_cmd_00120
;source-doc/scsi-drv/./class_scsi.c:27: if (cbw->dCBWDataTransferLength != 0) {
;source-doc/scsi-drv/class_scsi.c:27: if (cbw->dCBWDataTransferLength != 0) {
ld hl,8 ld hl,8
add hl, bc add hl, bc
ld e, (hl) ld e, (hl)
@ -155,29 +150,26 @@ l_do_scsi_cmd_00102:
inc hl inc hl
ld c, (hl) ld c, (hl)
inc hl inc hl
ld b, (hl)
;source-doc/scsi-drv/./class_scsi.c:30: &dev->endpoints[ENDPOINT_BULK_IN]));
ld a,(ix-6)
add a,0x06
ld (ix-2),a
ld a,(ix-5)
adc a,0x00
ld (ix-1),a
;source-doc/scsi-drv/./class_scsi.c:27: if (cbw->dCBWDataTransferLength != 0) {
ld a, b
ld a, (hl)
or c or c
or d or d
or e or e
jr Z,l_do_scsi_cmd_00113 jr Z,l_do_scsi_cmd_00113
;source-doc/scsi-drv/./class_scsi.c:30: &dev->endpoints[ENDPOINT_BULK_IN]));
;source-doc/scsi-drv/class_scsi.c:30: &dev->endpoints[ENDPOINT_BULK_IN]));
ld c,(ix+8) ld c,(ix+8)
ld b,(ix+9) ld b,(ix+9)
;source-doc/scsi-drv/./class_scsi.c:28: if (!send) {
;source-doc/scsi-drv/class_scsi.c:28: if (!send) {
bit 0,(ix+10) bit 0,(ix+10)
jr NZ,l_do_scsi_cmd_00110 jr NZ,l_do_scsi_cmd_00110
;source-doc/scsi-drv/./class_scsi.c:30: &dev->endpoints[ENDPOINT_BULK_IN]));
ld l,(ix-6)
ld h,(ix-5)
;source-doc/scsi-drv/class_scsi.c:30: &dev->endpoints[ENDPOINT_BULK_IN]));
ld a,(ix-4)
add a,0x06
ld (ix-2),a
ld a,(ix-3)
adc a,0x00
ld (ix-1),a
ld l,(ix-4)
ld h,(ix-3)
ld a, (hl) ld a, (hl)
rlca rlca
rlca rlca
@ -203,17 +195,17 @@ l_do_scsi_cmd_00102:
jr Z,l_do_scsi_cmd_00113 jr Z,l_do_scsi_cmd_00113
jp l_do_scsi_cmd_00120 jp l_do_scsi_cmd_00120
l_do_scsi_cmd_00110: l_do_scsi_cmd_00110:
;source-doc/scsi-drv/./class_scsi.c:34: &dev->endpoints[ENDPOINT_BULK_OUT]));
ld l,(ix-6)
ld h,(ix-5)
;source-doc/scsi-drv/class_scsi.c:34: &dev->endpoints[ENDPOINT_BULK_OUT]));
ld l,(ix-4)
ld h,(ix-3)
ld a, (hl) ld a, (hl)
rlca rlca
rlca rlca
rlca rlca
rlca rlca
and 0x0f and 0x0f
ld l,(ix-4)
ld h,(ix-3)
ld l,(ix-2)
ld h,(ix-1)
push hl push hl
push af push af
inc sp inc sp
@ -230,11 +222,15 @@ l_do_scsi_cmd_00110:
or a or a
jr NZ,l_do_scsi_cmd_00120 jr NZ,l_do_scsi_cmd_00120
l_do_scsi_cmd_00113: l_do_scsi_cmd_00113:
;source-doc/scsi-drv/./class_scsi.c:39: usb_data_in_transfer((uint8_t *)&csw, sizeof(_scsi_command_status_wrapper), dev->address, &dev->endpoints[ENDPOINT_BULK_IN]));
pop de
pop hl
push hl
push de
;source-doc/scsi-drv/class_scsi.c:39: usb_data_in_transfer((uint8_t *)&csw, sizeof(_scsi_command_status_wrapper), dev->address, &dev->endpoints[ENDPOINT_BULK_IN]));
ld a,(ix-4)
add a,0x06
ld e, a
ld a,(ix-3)
adc a,0x00
ld d, a
ld l,(ix-4)
ld h,(ix-3)
ld a, (hl) ld a, (hl)
rlca rlca
rlca rlca
@ -242,9 +238,7 @@ l_do_scsi_cmd_00113:
rlca rlca
and 0x0f and 0x0f
ld b, a ld b, a
ld l,(ix-2)
ld h,(ix-1)
push hl
push de
push bc push bc
inc sp inc sp
ld hl,0x000d ld hl,0x000d
@ -261,40 +255,39 @@ l_do_scsi_cmd_00113:
ld a,(_result) ld a,(_result)
or a or a
jr NZ,l_do_scsi_cmd_00120 jr NZ,l_do_scsi_cmd_00120
;source-doc/scsi-drv/./class_scsi.c:41: if (csw.bCSWStatus != 0 && csw.dCSWTag[0] != cbw->dCBWTag[0])
;source-doc/scsi-drv/class_scsi.c:41: if (csw.bCSWStatus != 0 && csw.dCSWTag[0] != cbw->dCBWTag[0])
ld a, (_csw + 12) ld a, (_csw + 12)
or a or a
jr Z,l_do_scsi_cmd_00117 jr Z,l_do_scsi_cmd_00117
ld bc, (_csw + 4) ld bc, (_csw + 4)
pop hl pop hl
ld a,(hl)
push hl push hl
ld a, (hl)
inc hl inc hl
ld h, (hl) ld h, (hl)
ld l, a ld l, a
cp a
sbc hl, bc
xor a
sbc hl,bc
jr Z,l_do_scsi_cmd_00117 jr Z,l_do_scsi_cmd_00117
;source-doc/scsi-drv/./class_scsi.c:42: result = USB_ERR_FAIL;
;source-doc/scsi-drv/class_scsi.c:42: result = USB_ERR_FAIL;
ld hl,_result ld hl,_result
ld (hl),0x0e ld (hl),0x0e
jr l_do_scsi_cmd_00120 jr l_do_scsi_cmd_00120
l_do_scsi_cmd_00117: l_do_scsi_cmd_00117:
;source-doc/scsi-drv/./class_scsi.c:44: result = USB_ERR_OK;
;source-doc/scsi-drv/class_scsi.c:44: result = USB_ERR_OK;
ld hl,_result ld hl,_result
ld (hl),0x00 ld (hl),0x00
;source-doc/scsi-drv/./class_scsi.c:46: done:
;source-doc/scsi-drv/class_scsi.c:46: done:
l_do_scsi_cmd_00120: l_do_scsi_cmd_00120:
;source-doc/scsi-drv/./class_scsi.c:47: critical_end();
;source-doc/scsi-drv/class_scsi.c:47: critical_end();
call _critical_end call _critical_end
;source-doc/scsi-drv/./class_scsi.c:48: return result;
ld hl,_result
ld l, (hl)
;source-doc/scsi-drv/./class_scsi.c:49: }
;source-doc/scsi-drv/class_scsi.c:48: return result;
ld hl,(_result)
;source-doc/scsi-drv/class_scsi.c:49: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
;source-doc/scsi-drv/./class_scsi.c:53: usb_error get_scsi_read_capacity(device_config_storage *const dev, scsi_read_capacity_result *cap_result) {
;source-doc/scsi-drv/class_scsi.c:53: usb_error get_scsi_read_capacity(device_config_storage *const dev, scsi_read_capacity_result *cap_result) {
; --------------------------------- ; ---------------------------------
; Function get_scsi_read_capacity ; Function get_scsi_read_capacity
; --------------------------------- ; ---------------------------------
@ -305,31 +298,31 @@ _get_scsi_read_capacity:
ld hl, -27 ld hl, -27
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/scsi-drv/./class_scsi.c:55: cbw_scsi.cbw = scsi_command_block_wrapper;
;source-doc/scsi-drv/class_scsi.c:55: cbw_scsi.cbw = scsi_command_block_wrapper;
ld hl,0 ld hl,0
add hl, sp add hl, sp
ex de, hl ex de, hl
ld hl,_scsi_command_block_wrapper
ld bc,0x000f ld bc,0x000f
ld hl,_scsi_command_block_wrapper
ldir ldir
;source-doc/scsi-drv/./class_scsi.c:56: cbw_scsi.read_capacity = scsi_read_capacity;
;source-doc/scsi-drv/class_scsi.c:56: cbw_scsi.read_capacity = scsi_read_capacity;
ld hl,15 ld hl,15
add hl, sp add hl, sp
ex de, hl ex de, hl
ld hl,_scsi_read_capacity
ld bc,0x000c ld bc,0x000c
ld hl,_scsi_read_capacity
ldir ldir
;source-doc/scsi-drv/./class_scsi.c:58: cbw_scsi.cbw.bCBWLUN = 0;
;source-doc/scsi-drv/class_scsi.c:58: cbw_scsi.cbw.bCBWLUN = 0;
ld (ix-14),0x00 ld (ix-14),0x00
;source-doc/scsi-drv/./class_scsi.c:59: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_read_capacity);
;source-doc/scsi-drv/class_scsi.c:59: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_read_capacity);
ld (ix-13),0x0c ld (ix-13),0x0c
;source-doc/scsi-drv/./class_scsi.c:60: cbw_scsi.cbw.dCBWDataTransferLength = sizeof(scsi_read_capacity_result);
;source-doc/scsi-drv/class_scsi.c:60: cbw_scsi.cbw.dCBWDataTransferLength = sizeof(scsi_read_capacity_result);
ld (ix-19),0x08 ld (ix-19),0x08
xor a xor a
ld (ix-18),a ld (ix-18),a
ld (ix-17),a ld (ix-17),a
ld (ix-16),a ld (ix-16),a
;source-doc/scsi-drv/./class_scsi.c:62: return do_scsi_cmd(dev, &cbw_scsi.cbw, cap_result, false);
;source-doc/scsi-drv/class_scsi.c:62: return do_scsi_cmd(dev, &cbw_scsi.cbw, cap_result, false);
ld c,(ix+6) ld c,(ix+6)
ld b,(ix+7) ld b,(ix+7)
xor a xor a
@ -343,11 +336,11 @@ _get_scsi_read_capacity:
ld h,(ix+5) ld h,(ix+5)
push hl push hl
call _do_scsi_cmd call _do_scsi_cmd
;source-doc/scsi-drv/./class_scsi.c:63: }
;source-doc/scsi-drv/class_scsi.c:63: }
ld sp,ix ld sp,ix
pop ix pop ix
ret ret
;source-doc/scsi-drv/./class_scsi.c:67: usb_error scsi_inquiry(device_config_storage *const dev, scsi_inquiry_result *inq_result) {
;source-doc/scsi-drv/class_scsi.c:67: usb_error scsi_inquiry(device_config_storage *const dev, scsi_inquiry_result *inq_result) {
; --------------------------------- ; ---------------------------------
; Function scsi_inquiry ; Function scsi_inquiry
; --------------------------------- ; ---------------------------------
@ -358,31 +351,31 @@ _scsi_inquiry:
ld hl, -27 ld hl, -27
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/scsi-drv/./class_scsi.c:69: cbw_scsi.cbw = scsi_command_block_wrapper;
;source-doc/scsi-drv/class_scsi.c:69: cbw_scsi.cbw = scsi_command_block_wrapper;
ld hl,0 ld hl,0
add hl, sp add hl, sp
ex de, hl ex de, hl
ld hl,_scsi_command_block_wrapper
ld bc,0x000f ld bc,0x000f
ld hl,_scsi_command_block_wrapper
ldir ldir
;source-doc/scsi-drv/./class_scsi.c:70: cbw_scsi.inquiry = scsi_packet_inquiry;
;source-doc/scsi-drv/class_scsi.c:70: cbw_scsi.inquiry = scsi_packet_inquiry;
ld hl,15 ld hl,15
add hl, sp add hl, sp
ex de, hl ex de, hl
ld hl,_scsi_packet_inquiry
ld bc,0x000c ld bc,0x000c
ld hl,_scsi_packet_inquiry
ldir ldir
;source-doc/scsi-drv/./class_scsi.c:72: cbw_scsi.cbw.bCBWLUN = 0;
;source-doc/scsi-drv/class_scsi.c:72: cbw_scsi.cbw.bCBWLUN = 0;
ld (ix-14),0x00 ld (ix-14),0x00
;source-doc/scsi-drv/./class_scsi.c:73: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_inquiry);
;source-doc/scsi-drv/class_scsi.c:73: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_inquiry);
ld (ix-13),0x0c ld (ix-13),0x0c
;source-doc/scsi-drv/./class_scsi.c:74: cbw_scsi.cbw.dCBWDataTransferLength = 0x24;
;source-doc/scsi-drv/class_scsi.c:74: cbw_scsi.cbw.dCBWDataTransferLength = 0x24;
ld (ix-19),0x24 ld (ix-19),0x24
xor a xor a
ld (ix-18),a ld (ix-18),a
ld (ix-17),a ld (ix-17),a
ld (ix-16),a ld (ix-16),a
;source-doc/scsi-drv/./class_scsi.c:76: return do_scsi_cmd(dev, &cbw_scsi.cbw, inq_result, false);
;source-doc/scsi-drv/class_scsi.c:76: return do_scsi_cmd(dev, &cbw_scsi.cbw, inq_result, false);
ld c,(ix+6) ld c,(ix+6)
ld b,(ix+7) ld b,(ix+7)
xor a xor a
@ -396,11 +389,11 @@ _scsi_inquiry:
ld h,(ix+5) ld h,(ix+5)
push hl push hl
call _do_scsi_cmd call _do_scsi_cmd
;source-doc/scsi-drv/./class_scsi.c:77: }
;source-doc/scsi-drv/class_scsi.c:77: }
ld sp,ix ld sp,ix
pop ix pop ix
ret ret
;source-doc/scsi-drv/./class_scsi.c:79: usb_error scsi_test(device_config_storage *const dev) {
;source-doc/scsi-drv/class_scsi.c:79: usb_error scsi_test(device_config_storage *const dev) {
; --------------------------------- ; ---------------------------------
; Function scsi_test ; Function scsi_test
; --------------------------------- ; ---------------------------------
@ -411,38 +404,40 @@ _scsi_test:
ld hl, -27 ld hl, -27
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/scsi-drv/./class_scsi.c:81: cbw_scsi.cbw = scsi_command_block_wrapper;
;source-doc/scsi-drv/class_scsi.c:81: cbw_scsi.cbw = scsi_command_block_wrapper;
ld hl,0 ld hl,0
add hl, sp add hl, sp
ex de, hl ex de, hl
ld hl,_scsi_command_block_wrapper
ld bc,0x000f ld bc,0x000f
ld hl,_scsi_command_block_wrapper
ldir ldir
;source-doc/scsi-drv/./class_scsi.c:82: memset(&cbw_scsi.test, 0, sizeof(_scsi_packet_test));
;source-doc/scsi-drv/class_scsi.c:82: memset(&cbw_scsi.test, 0, sizeof(_scsi_packet_test));
ld hl,15 ld hl,15
add hl, sp add hl, sp
ld b,0x0c
ld b,0x06
l_scsi_test_00103: l_scsi_test_00103:
ld (hl),0x00
xor a
ld (hl), a
inc hl
ld (hl), a
inc hl inc hl
djnz l_scsi_test_00103 djnz l_scsi_test_00103
;source-doc/scsi-drv/./class_scsi.c:84: cbw_scsi.cbw.bCBWLUN = 0;
;source-doc/scsi-drv/class_scsi.c:84: cbw_scsi.cbw.bCBWLUN = 0;
ld (ix-14),0x00 ld (ix-14),0x00
;source-doc/scsi-drv/./class_scsi.c:85: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_test);
;source-doc/scsi-drv/class_scsi.c:85: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_test);
ld (ix-13),0x0c ld (ix-13),0x0c
;source-doc/scsi-drv/./class_scsi.c:86: cbw_scsi.cbw.dCBWDataTransferLength = 0;
;source-doc/scsi-drv/class_scsi.c:86: cbw_scsi.cbw.dCBWDataTransferLength = 0;
ld hl,8 ld hl,8
add hl, sp add hl, sp
ex de, hl
xor a xor a
ld (de), a
inc de
ld (de), a
inc de
ld (de), a
inc de
ld (de), a
;source-doc/scsi-drv/./class_scsi.c:88: return do_scsi_cmd(dev, &cbw_scsi.cbw, 0, false);
ld (hl),a
inc hl
ld (hl),a
inc hl
ld (hl),a
inc hl
ld (hl),a
;source-doc/scsi-drv/class_scsi.c:88: return do_scsi_cmd(dev, &cbw_scsi.cbw, 0, false);
xor a xor a
push af push af
inc sp inc sp
@ -455,11 +450,11 @@ l_scsi_test_00103:
ld h,(ix+5) ld h,(ix+5)
push hl push hl
call _do_scsi_cmd call _do_scsi_cmd
;source-doc/scsi-drv/./class_scsi.c:89: }
;source-doc/scsi-drv/class_scsi.c:89: }
ld sp,ix ld sp,ix
pop ix pop ix
ret ret
;source-doc/scsi-drv/./class_scsi.c:93: usb_error scsi_request_sense(device_config_storage *const dev, scsi_sense_result *const sens_result) {
;source-doc/scsi-drv/class_scsi.c:93: usb_error scsi_request_sense(device_config_storage *const dev, scsi_sense_result *const sens_result) {
; --------------------------------- ; ---------------------------------
; Function scsi_request_sense ; Function scsi_request_sense
; --------------------------------- ; ---------------------------------
@ -470,31 +465,31 @@ _scsi_request_sense:
ld hl, -27 ld hl, -27
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/scsi-drv/./class_scsi.c:95: cbw_scsi.cbw = scsi_command_block_wrapper;
;source-doc/scsi-drv/class_scsi.c:95: cbw_scsi.cbw = scsi_command_block_wrapper;
ld hl,0 ld hl,0
add hl, sp add hl, sp
ex de, hl ex de, hl
ld hl,_scsi_command_block_wrapper
ld bc,0x000f ld bc,0x000f
ld hl,_scsi_command_block_wrapper
ldir ldir
;source-doc/scsi-drv/./class_scsi.c:96: cbw_scsi.request_sense = scsi_packet_request_sense;
;source-doc/scsi-drv/class_scsi.c:96: cbw_scsi.request_sense = scsi_packet_request_sense;
ld hl,15 ld hl,15
add hl, sp add hl, sp
ex de, hl ex de, hl
ld hl,_scsi_packet_request_sense
ld bc,0x000c ld bc,0x000c
ld hl,_scsi_packet_request_sense
ldir ldir
;source-doc/scsi-drv/./class_scsi.c:98: cbw_scsi.cbw.bCBWLUN = 0;
;source-doc/scsi-drv/class_scsi.c:98: cbw_scsi.cbw.bCBWLUN = 0;
ld (ix-14),0x00 ld (ix-14),0x00
;source-doc/scsi-drv/./class_scsi.c:99: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_request_sense);
;source-doc/scsi-drv/class_scsi.c:99: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_request_sense);
ld (ix-13),0x0c ld (ix-13),0x0c
;source-doc/scsi-drv/./class_scsi.c:100: cbw_scsi.cbw.dCBWDataTransferLength = sizeof(scsi_sense_result);
;source-doc/scsi-drv/class_scsi.c:100: cbw_scsi.cbw.dCBWDataTransferLength = sizeof(scsi_sense_result);
ld (ix-19),0x12 ld (ix-19),0x12
xor a xor a
ld (ix-18),a ld (ix-18),a
ld (ix-17),a ld (ix-17),a
ld (ix-16),a ld (ix-16),a
;source-doc/scsi-drv/./class_scsi.c:102: return do_scsi_cmd(dev, &cbw_scsi.cbw, sens_result, false);
;source-doc/scsi-drv/class_scsi.c:102: return do_scsi_cmd(dev, &cbw_scsi.cbw, sens_result, false);
ld c,(ix+6) ld c,(ix+6)
ld b,(ix+7) ld b,(ix+7)
xor a xor a
@ -508,11 +503,11 @@ _scsi_request_sense:
ld h,(ix+5) ld h,(ix+5)
push hl push hl
call _do_scsi_cmd call _do_scsi_cmd
;source-doc/scsi-drv/./class_scsi.c:103: }
;source-doc/scsi-drv/class_scsi.c:103: }
ld sp,ix ld sp,ix
pop ix pop ix
ret ret
;source-doc/scsi-drv/./class_scsi.c:105: usb_error scsi_sense_init(device_config_storage *const dev) {
;source-doc/scsi-drv/class_scsi.c:105: usb_error scsi_sense_init(device_config_storage *const dev) {
; --------------------------------- ; ---------------------------------
; Function scsi_sense_init ; Function scsi_sense_init
; --------------------------------- ; ---------------------------------
@ -523,9 +518,9 @@ _scsi_sense_init:
ld hl, -18 ld hl, -18
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/scsi-drv/./class_scsi.c:109: critical_begin();
;source-doc/scsi-drv/class_scsi.c:109: critical_begin();
call _critical_begin call _critical_begin
;source-doc/scsi-drv/./class_scsi.c:110: while ((result = scsi_test(dev)) && --counter > 0)
;source-doc/scsi-drv/class_scsi.c:110: while ((result = scsi_test(dev)) && --counter > 0)
ld c,0x03 ld c,0x03
l_scsi_sense_init_00102: l_scsi_sense_init_00102:
push bc push bc
@ -541,10 +536,10 @@ l_scsi_sense_init_00102:
jr Z,l_scsi_sense_init_00104 jr Z,l_scsi_sense_init_00104
dec c dec c
jr Z,l_scsi_sense_init_00104 jr Z,l_scsi_sense_init_00104
;source-doc/scsi-drv/./class_scsi.c:111: scsi_request_sense(dev, &response);
push bc
ld hl,2
;source-doc/scsi-drv/class_scsi.c:111: scsi_request_sense(dev, &response);
ld hl,0
add hl, sp add hl, sp
push bc
push hl push hl
ld l,(ix+4) ld l,(ix+4)
ld h,(ix+5) ld h,(ix+5)
@ -555,16 +550,15 @@ l_scsi_sense_init_00102:
pop bc pop bc
jr l_scsi_sense_init_00102 jr l_scsi_sense_init_00102
l_scsi_sense_init_00104: l_scsi_sense_init_00104:
;source-doc/scsi-drv/./class_scsi.c:112: critical_end();
;source-doc/scsi-drv/class_scsi.c:112: critical_end();
call _critical_end call _critical_end
;source-doc/scsi-drv/./class_scsi.c:114: return result;
ld hl,_result
ld l, (hl)
;source-doc/scsi-drv/./class_scsi.c:115: }
;source-doc/scsi-drv/class_scsi.c:114: return result;
ld hl,(_result)
;source-doc/scsi-drv/class_scsi.c:115: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
;source-doc/scsi-drv/./class_scsi.c:119: usb_error scsi_read(device_config_storage *const dev, uint8_t *const buffer) {
;source-doc/scsi-drv/class_scsi.c:119: usb_error scsi_read(device_config_storage *const dev, uint8_t *const buffer) {
; --------------------------------- ; ---------------------------------
; Function scsi_read ; Function scsi_read
; --------------------------------- ; ---------------------------------
@ -573,70 +567,67 @@ _scsi_read:
ld ix,0 ld ix,0
add ix,sp add ix,sp
push af push af
;source-doc/scsi-drv/./class_scsi.c:120: memset(&cbw, 0, sizeof(cbw_scsi_read_write));
;source-doc/scsi-drv/class_scsi.c:120: memset(&cbw, 0, sizeof(cbw_scsi_read_write));
ld hl,_cbw ld hl,_cbw
ld b,0x1b
l_scsi_read_00112:
ld (hl),0x00 ld (hl),0x00
inc hl
djnz l_scsi_read_00112
;source-doc/scsi-drv/./class_scsi.c:121: cbw.cbw = scsi_command_block_wrapper;
ld e, l
ld d, h
inc de
ld bc,0x001a
ldir
;source-doc/scsi-drv/class_scsi.c:121: cbw.cbw = scsi_command_block_wrapper;
ld de,_cbw ld de,_cbw
ld hl,_scsi_command_block_wrapper
ld bc,0x000f ld bc,0x000f
ld hl,_scsi_command_block_wrapper
ldir ldir
;source-doc/scsi-drv/./class_scsi.c:123: cbw.cbw.bCBWLUN = 0;
;source-doc/scsi-drv/class_scsi.c:123: cbw.cbw.bCBWLUN = 0;
ld hl,_cbw + 13 ld hl,_cbw + 13
ld (hl),0x00 ld (hl),0x00
;source-doc/scsi-drv/./class_scsi.c:124: cbw.cbw.bCBWCBLength = sizeof(_scsi_packet_read_write);
;source-doc/scsi-drv/class_scsi.c:124: cbw.cbw.bCBWCBLength = sizeof(_scsi_packet_read_write);
ld hl,_cbw + 14 ld hl,_cbw + 14
ld (hl),0x0c ld (hl),0x0c
;source-doc/scsi-drv/./class_scsi.c:125: cbw.cbw.dCBWDataTransferLength = 512;
;source-doc/scsi-drv/class_scsi.c:125: cbw.cbw.dCBWDataTransferLength = 512;
ld hl,0x0200 ld hl,0x0200
ld ((_cbw + 8)), hl
ld (_cbw + 8),hl
ld h, l ld h, l
ld ((_cbw + 8)+2), hl
;source-doc/scsi-drv/./class_scsi.c:127: cbw.scsi_cmd.operation_code = 0x28; // read operation
ld (_cbw + 8 + 2),hl
;source-doc/scsi-drv/class_scsi.c:127: cbw.scsi_cmd.operation_code = 0x28; // read operation
ld hl,_cbw + 15 ld hl,_cbw + 15
ld (hl),0x28 ld (hl),0x28
;source-doc/scsi-drv/./class_scsi.c:128: cbw.scsi_cmd.transfer_len[1] = 1;
;source-doc/scsi-drv/class_scsi.c:128: cbw.scsi_cmd.transfer_len[1] = 1;
ld hl,_cbw + 23 ld hl,_cbw + 23
ld (hl),0x01 ld (hl),0x01
;source-doc/scsi-drv/./class_scsi.c:129: cbw.scsi_cmd.lba[0] = dev->current_lba >> 24;
;source-doc/scsi-drv/class_scsi.c:129: cbw.scsi_cmd.lba[0] = dev->current_lba >> 24;
ld c,(ix+4) ld c,(ix+4)
ld b,(ix+5) ld b,(ix+5)
ld hl,0x000c ld hl,0x000c
add hl, bc add hl, bc
ex (sp), hl
pop hl
pop af
push hl push hl
inc hl inc hl
inc hl inc hl
inc hl inc hl
ld a, (hl) ld a, (hl)
ld ((_cbw + 17)),a ld ((_cbw + 17)),a
;source-doc/scsi-drv/./class_scsi.c:130: cbw.scsi_cmd.lba[1] = dev->current_lba >> 16;
;source-doc/scsi-drv/class_scsi.c:130: cbw.scsi_cmd.lba[1] = dev->current_lba >> 16;
pop hl pop hl
push hl push hl
inc hl inc hl
inc hl inc hl
inc hl
dec hl
ld a, (hl) ld a, (hl)
ld ((_cbw + 18)),a ld ((_cbw + 18)),a
;source-doc/scsi-drv/./class_scsi.c:131: cbw.scsi_cmd.lba[2] = dev->current_lba >> 8;
;source-doc/scsi-drv/class_scsi.c:131: cbw.scsi_cmd.lba[2] = dev->current_lba >> 8;
pop hl pop hl
push hl push hl
inc hl inc hl
ld d, (hl)
ld hl, +(_cbw + 19)
ld (hl), d
;source-doc/scsi-drv/./class_scsi.c:132: cbw.scsi_cmd.lba[3] = dev->current_lba;
ld a,(hl)
ld ((_cbw + 19)),a
;source-doc/scsi-drv/class_scsi.c:132: cbw.scsi_cmd.lba[3] = dev->current_lba;
pop hl pop hl
ld a,(hl)
push hl push hl
ld a, (hl)
ld ((_cbw + 20)),a ld ((_cbw + 20)),a
;source-doc/scsi-drv/./class_scsi.c:134: result = do_scsi_cmd(dev, &cbw.cbw, buffer, false);
;source-doc/scsi-drv/class_scsi.c:134: result = do_scsi_cmd(dev, &cbw.cbw, buffer, false);
ld e,(ix+6) ld e,(ix+6)
ld d,(ix+7) ld d,(ix+7)
xor a xor a
@ -653,14 +644,14 @@ l_scsi_read_00112:
inc sp inc sp
ld a, l ld a, l
ld (_result), a ld (_result), a
;source-doc/scsi-drv/./class_scsi.c:136: if (result == USB_ERR_OK)
;source-doc/scsi-drv/class_scsi.c:136: if (result == USB_ERR_OK)
ld a,(_result) ld a,(_result)
or a or a
jr NZ,l_scsi_read_00102 jr NZ,l_scsi_read_00102
;source-doc/scsi-drv/./class_scsi.c:137: dev->current_lba++;
;source-doc/scsi-drv/class_scsi.c:137: dev->current_lba++;
pop hl pop hl
ld c,(hl)
push hl push hl
ld c, (hl)
inc hl inc hl
ld b, (hl) ld b, (hl)
inc hl inc hl
@ -668,11 +659,11 @@ l_scsi_read_00112:
inc hl inc hl
ld d, (hl) ld d, (hl)
inc c inc c
jr NZ,l_scsi_read_00114
jr NZ,l_scsi_read_00112
inc b inc b
jr NZ,l_scsi_read_00114
jr NZ,l_scsi_read_00112
inc de inc de
l_scsi_read_00114:
l_scsi_read_00112:
pop hl pop hl
push hl push hl
ld (hl), c ld (hl), c
@ -683,14 +674,13 @@ l_scsi_read_00114:
inc hl inc hl
ld (hl), d ld (hl), d
l_scsi_read_00102: l_scsi_read_00102:
;source-doc/scsi-drv/./class_scsi.c:138: return result;
ld hl,_result
ld l, (hl)
;source-doc/scsi-drv/./class_scsi.c:139: }
;source-doc/scsi-drv/class_scsi.c:138: return result;
ld hl,(_result)
;source-doc/scsi-drv/class_scsi.c:139: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
;source-doc/scsi-drv/./class_scsi.c:141: usb_error scsi_write(device_config_storage *const dev, uint8_t *const buffer) {
;source-doc/scsi-drv/class_scsi.c:141: usb_error scsi_write(device_config_storage *const dev, uint8_t *const buffer) {
; --------------------------------- ; ---------------------------------
; Function scsi_write ; Function scsi_write
; --------------------------------- ; ---------------------------------
@ -699,70 +689,67 @@ _scsi_write:
ld ix,0 ld ix,0
add ix,sp add ix,sp
push af push af
;source-doc/scsi-drv/./class_scsi.c:142: memset(&cbw, 0, sizeof(cbw_scsi_read_write));
;source-doc/scsi-drv/class_scsi.c:142: memset(&cbw, 0, sizeof(cbw_scsi_read_write));
ld hl,_cbw ld hl,_cbw
ld b,0x1b
l_scsi_write_00112:
ld (hl),0x00 ld (hl),0x00
inc hl
djnz l_scsi_write_00112
;source-doc/scsi-drv/./class_scsi.c:143: cbw.cbw = scsi_command_block_wrapper;
ld e, l
ld d, h
inc de
ld bc,0x001a
ldir
;source-doc/scsi-drv/class_scsi.c:143: cbw.cbw = scsi_command_block_wrapper;
ld de,_cbw ld de,_cbw
ld hl,_scsi_command_block_wrapper
ld bc,0x000f ld bc,0x000f
ld hl,_scsi_command_block_wrapper
ldir ldir
;source-doc/scsi-drv/./class_scsi.c:145: cbw.cbw.bCBWLUN = 0;
;source-doc/scsi-drv/class_scsi.c:145: cbw.cbw.bCBWLUN = 0;
ld hl,_cbw + 13 ld hl,_cbw + 13
ld (hl),0x00 ld (hl),0x00
;source-doc/scsi-drv/./class_scsi.c:146: cbw.cbw.bCBWCBLength = sizeof(_scsi_packet_read_write);
;source-doc/scsi-drv/class_scsi.c:146: cbw.cbw.bCBWCBLength = sizeof(_scsi_packet_read_write);
ld hl,_cbw + 14 ld hl,_cbw + 14
ld (hl),0x0c ld (hl),0x0c
;source-doc/scsi-drv/./class_scsi.c:147: cbw.cbw.dCBWDataTransferLength = 512;
;source-doc/scsi-drv/class_scsi.c:147: cbw.cbw.dCBWDataTransferLength = 512;
ld hl,0x0200 ld hl,0x0200
ld ((_cbw + 8)), hl
ld (_cbw + 8),hl
ld h, l ld h, l
ld ((_cbw + 8)+2), hl
;source-doc/scsi-drv/./class_scsi.c:149: cbw.scsi_cmd.operation_code = 0x2A; // write operation
ld (_cbw + 8 + 2),hl
;source-doc/scsi-drv/class_scsi.c:149: cbw.scsi_cmd.operation_code = 0x2A; // write operation
ld hl,_cbw + 15 ld hl,_cbw + 15
ld (hl),0x2a ld (hl),0x2a
;source-doc/scsi-drv/./class_scsi.c:150: cbw.scsi_cmd.transfer_len[1] = 1;
;source-doc/scsi-drv/class_scsi.c:150: cbw.scsi_cmd.transfer_len[1] = 1;
ld hl,_cbw + 23 ld hl,_cbw + 23
ld (hl),0x01 ld (hl),0x01
;source-doc/scsi-drv/./class_scsi.c:151: cbw.scsi_cmd.lba[0] = dev->current_lba >> 24;
;source-doc/scsi-drv/class_scsi.c:151: cbw.scsi_cmd.lba[0] = dev->current_lba >> 24;
ld c,(ix+4) ld c,(ix+4)
ld b,(ix+5) ld b,(ix+5)
ld hl,0x000c ld hl,0x000c
add hl, bc add hl, bc
ex (sp), hl
pop hl
pop af
push hl push hl
inc hl inc hl
inc hl inc hl
inc hl inc hl
ld a, (hl) ld a, (hl)
ld ((_cbw + 17)),a ld ((_cbw + 17)),a
;source-doc/scsi-drv/./class_scsi.c:152: cbw.scsi_cmd.lba[1] = dev->current_lba >> 16;
;source-doc/scsi-drv/class_scsi.c:152: cbw.scsi_cmd.lba[1] = dev->current_lba >> 16;
pop hl pop hl
push hl push hl
inc hl inc hl
inc hl inc hl
inc hl
dec hl
ld a, (hl) ld a, (hl)
ld ((_cbw + 18)),a ld ((_cbw + 18)),a
;source-doc/scsi-drv/./class_scsi.c:153: cbw.scsi_cmd.lba[2] = dev->current_lba >> 8;
;source-doc/scsi-drv/class_scsi.c:153: cbw.scsi_cmd.lba[2] = dev->current_lba >> 8;
pop hl pop hl
push hl push hl
inc hl inc hl
ld d, (hl)
ld hl, +(_cbw + 19)
ld (hl), d
;source-doc/scsi-drv/./class_scsi.c:154: cbw.scsi_cmd.lba[3] = dev->current_lba;
ld a,(hl)
ld ((_cbw + 19)),a
;source-doc/scsi-drv/class_scsi.c:154: cbw.scsi_cmd.lba[3] = dev->current_lba;
pop hl pop hl
ld a,(hl)
push hl push hl
ld a, (hl)
ld ((_cbw + 20)),a ld ((_cbw + 20)),a
;source-doc/scsi-drv/./class_scsi.c:156: result = do_scsi_cmd(dev, &cbw.cbw, buffer, true);
;source-doc/scsi-drv/class_scsi.c:156: result = do_scsi_cmd(dev, &cbw.cbw, buffer, true);
ld e,(ix+6) ld e,(ix+6)
ld d,(ix+7) ld d,(ix+7)
ld a,0x01 ld a,0x01
@ -779,14 +766,14 @@ l_scsi_write_00112:
inc sp inc sp
ld a, l ld a, l
ld (_result), a ld (_result), a
;source-doc/scsi-drv/./class_scsi.c:158: if (result == USB_ERR_OK)
;source-doc/scsi-drv/class_scsi.c:158: if (result == USB_ERR_OK)
ld a,(_result) ld a,(_result)
or a or a
jr NZ,l_scsi_write_00102 jr NZ,l_scsi_write_00102
;source-doc/scsi-drv/./class_scsi.c:159: dev->current_lba++;
;source-doc/scsi-drv/class_scsi.c:159: dev->current_lba++;
pop hl pop hl
ld c,(hl)
push hl push hl
ld c, (hl)
inc hl inc hl
ld b, (hl) ld b, (hl)
inc hl inc hl
@ -794,11 +781,11 @@ l_scsi_write_00112:
inc hl inc hl
ld d, (hl) ld d, (hl)
inc c inc c
jr NZ,l_scsi_write_00114
jr NZ,l_scsi_write_00112
inc b inc b
jr NZ,l_scsi_write_00114
jr NZ,l_scsi_write_00112
inc de inc de
l_scsi_write_00114:
l_scsi_write_00112:
pop hl pop hl
push hl push hl
ld (hl), c ld (hl), c
@ -809,14 +796,13 @@ l_scsi_write_00114:
inc hl inc hl
ld (hl), d ld (hl), d
l_scsi_write_00102: l_scsi_write_00102:
;source-doc/scsi-drv/./class_scsi.c:160: return result;
ld hl,_result
ld l, (hl)
;source-doc/scsi-drv/./class_scsi.c:161: }
;source-doc/scsi-drv/class_scsi.c:160: return result;
ld hl,(_result)
;source-doc/scsi-drv/class_scsi.c:161: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
;source-doc/scsi-drv/./class_scsi.c:163: usb_error scsi_eject(device_config_storage *const dev) {
;source-doc/scsi-drv/class_scsi.c:163: usb_error scsi_eject(device_config_storage *const dev) {
; --------------------------------- ; ---------------------------------
; Function scsi_eject ; Function scsi_eject
; --------------------------------- ; ---------------------------------
@ -827,44 +813,46 @@ _scsi_eject:
ld hl, -21 ld hl, -21
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/scsi-drv/./class_scsi.c:165: cbw_scsi.cbw = scsi_command_block_wrapper;
;source-doc/scsi-drv/class_scsi.c:165: cbw_scsi.cbw = scsi_command_block_wrapper;
ld hl,0 ld hl,0
add hl, sp add hl, sp
ex de, hl ex de, hl
ld hl,_scsi_command_block_wrapper
ld bc,0x000f ld bc,0x000f
ld hl,_scsi_command_block_wrapper
ldir ldir
;source-doc/scsi-drv/./class_scsi.c:167: memset(&cbw_scsi.eject, 0, sizeof(_scsi_packet_eject));
;source-doc/scsi-drv/class_scsi.c:167: memset(&cbw_scsi.eject, 0, sizeof(_scsi_packet_eject));
ld hl,15 ld hl,15
add hl, sp add hl, sp
ld b,0x06
ld b,0x03
l_scsi_eject_00103: l_scsi_eject_00103:
ld (hl),0x00
xor a
ld (hl), a
inc hl
ld (hl), a
inc hl inc hl
djnz l_scsi_eject_00103 djnz l_scsi_eject_00103
;source-doc/scsi-drv/./class_scsi.c:169: cbw_scsi.eject.operation_code = 0x1B;
;source-doc/scsi-drv/class_scsi.c:169: cbw_scsi.eject.operation_code = 0x1B;
ld (ix-6),0x1b ld (ix-6),0x1b
;source-doc/scsi-drv/./class_scsi.c:170: cbw_scsi.eject.loej = 1;
;source-doc/scsi-drv/class_scsi.c:170: cbw_scsi.eject.loej = 1;
ld hl,19 ld hl,19
add hl, sp add hl, sp
set 1, (hl) set 1, (hl)
;source-doc/scsi-drv/./class_scsi.c:172: cbw_scsi.cbw.bCBWLUN = 0;
;source-doc/scsi-drv/class_scsi.c:172: cbw_scsi.cbw.bCBWLUN = 0;
ld (ix-8),0x00 ld (ix-8),0x00
;source-doc/scsi-drv/./class_scsi.c:173: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_eject);
;source-doc/scsi-drv/class_scsi.c:173: cbw_scsi.cbw.bCBWCBLength = sizeof(_scsi_packet_eject);
ld (ix-7),0x06 ld (ix-7),0x06
;source-doc/scsi-drv/./class_scsi.c:174: cbw_scsi.cbw.dCBWDataTransferLength = 0;
;source-doc/scsi-drv/class_scsi.c:174: cbw_scsi.cbw.dCBWDataTransferLength = 0;
ld hl,8 ld hl,8
add hl, sp add hl, sp
ex de, hl
xor a xor a
ld (de), a
inc de
ld (de), a
inc de
ld (de), a
inc de
ld (de), a
;source-doc/scsi-drv/./class_scsi.c:176: return do_scsi_cmd(dev, &cbw_scsi.cbw, 0, false);
ld (hl),a
inc hl
ld (hl),a
inc hl
ld (hl),a
inc hl
ld (hl),a
;source-doc/scsi-drv/class_scsi.c:176: return do_scsi_cmd(dev, &cbw_scsi.cbw, 0, false);
xor a xor a
push af push af
inc sp inc sp
@ -877,7 +865,7 @@ l_scsi_eject_00103:
ld h,(ix+5) ld h,(ix+5)
push hl push hl
call _do_scsi_cmd call _do_scsi_cmd
;source-doc/scsi-drv/./class_scsi.c:177: }
;source-doc/scsi-drv/class_scsi.c:177: }
ld sp,ix ld sp,ix
pop ix pop ix
ret ret

26
Source/HBIOS/ch376-native/scsi-drv/scsi-init.c.s

@ -1,5 +1,5 @@
; ;
; Generated from source-doc/scsi-drv/./scsi-init.c.asm -- not to be modify directly
; Generated from source-doc/scsi-drv/scsi-init.c.asm -- not to be modify directly
; ;
; ;
;-------------------------------------------------------- ;--------------------------------------------------------
@ -48,7 +48,7 @@ _USB_MODULE_LEDS .EQU 0xff8a
;-------------------------------------------------------- ;--------------------------------------------------------
; code ; code
;-------------------------------------------------------- ;--------------------------------------------------------
;source-doc/scsi-drv/./scsi-init.c:13: void chscsi_init(void) {
;source-doc/scsi-drv/scsi-init.c:13: void chscsi_init(void) {
; --------------------------------- ; ---------------------------------
; Function chscsi_init ; Function chscsi_init
; --------------------------------- ; ---------------------------------
@ -57,30 +57,30 @@ _chscsi_init:
ld ix,0 ld ix,0
add ix,sp add ix,sp
dec sp dec sp
;source-doc/scsi-drv/./scsi-init.c:15: do {
;source-doc/scsi-drv/scsi-init.c:15: do {
ld (ix-1),0x01 ld (ix-1),0x01
l_chscsi_init_00105: l_chscsi_init_00105:
;source-doc/scsi-drv/./scsi-init.c:16: device_config_storage *const storage_device = (device_config_storage *)get_usb_device_config(index);
;source-doc/scsi-drv/scsi-init.c:16: device_config_storage *const storage_device = (device_config_storage *)get_usb_device_config(index);
ld a,(ix-1) ld a,(ix-1)
call _get_usb_device_config call _get_usb_device_config
;source-doc/scsi-drv/./scsi-init.c:18: if (storage_device == NULL)
;source-doc/scsi-drv/scsi-init.c:18: if (storage_device == NULL)
ld a, d ld a, d
or e or e
jr Z,l_chscsi_init_00108 jr Z,l_chscsi_init_00108
;source-doc/scsi-drv/./scsi-init.c:21: const usb_device_type t = storage_device->type;
;source-doc/scsi-drv/scsi-init.c:21: const usb_device_type t = storage_device->type;
ld l, e ld l, e
ld h, d ld h, d
ld a, (hl) ld a, (hl)
and 0x0f and 0x0f
;source-doc/scsi-drv/./scsi-init.c:23: if (t == USB_IS_MASS_STORAGE) {
;source-doc/scsi-drv/scsi-init.c:23: if (t == USB_IS_MASS_STORAGE) {
sub 0x02 sub 0x02
jr NZ,l_chscsi_init_00106 jr NZ,l_chscsi_init_00106
;source-doc/scsi-drv/./scsi-init.c:24: print_string("\r\nUSB: MASS STORAGE @ $");
;source-doc/scsi-drv/scsi-init.c:24: print_string("\r\nUSB: MASS STORAGE @ $");
push de push de
ld hl,scsi_init_str_0 ld hl,scsi_init_str_0
call _print_string call _print_string
pop de pop de
;source-doc/scsi-drv/./scsi-init.c:25: print_uint16(index);
;source-doc/scsi-drv/scsi-init.c:25: print_uint16(index);
ld l,(ix-1) ld l,(ix-1)
ld h,0x00 ld h,0x00
push de push de
@ -88,23 +88,23 @@ l_chscsi_init_00105:
ld hl,scsi_init_str_1 ld hl,scsi_init_str_1
call _print_string call _print_string
pop de pop de
;source-doc/scsi-drv/./scsi-init.c:28: scsi_sense_init(storage_device);
;source-doc/scsi-drv/scsi-init.c:28: scsi_sense_init(storage_device);
push de push de
push de push de
call _scsi_sense_init call _scsi_sense_init
pop af pop af
pop de pop de
;source-doc/scsi-drv/./scsi-init.c:29: dio_add_entry(ch_scsi_fntbl, storage_device);
;source-doc/scsi-drv/scsi-init.c:29: dio_add_entry(ch_scsi_fntbl, storage_device);
ld hl,_ch_scsi_fntbl ld hl,_ch_scsi_fntbl
call _dio_add_entry call _dio_add_entry
l_chscsi_init_00106: l_chscsi_init_00106:
;source-doc/scsi-drv/./scsi-init.c:32: } while (++index != MAX_NUMBER_OF_DEVICES + 1);
;source-doc/scsi-drv/scsi-init.c:32: } while (++index != MAX_NUMBER_OF_DEVICES + 1);
inc (ix-1) inc (ix-1)
ld a,(ix-1) ld a,(ix-1)
sub 0x07 sub 0x07
jr NZ,l_chscsi_init_00105 jr NZ,l_chscsi_init_00105
l_chscsi_init_00108: l_chscsi_init_00108:
;source-doc/scsi-drv/./scsi-init.c:33: }
;source-doc/scsi-drv/scsi-init.c:33: }
inc sp inc sp
pop ix pop ix
ret ret

30
Source/HBIOS/ch376-native/source-doc/depends.d

@ -1,30 +0,0 @@
./base-drv/dev_transfers.c: base-drv/dev_transfers.c ././source-doc/base-drv/dev_transfers.h ././source-doc/base-drv/ch376.h ././source-doc/base-drv/ch376inc.h ././source-doc/base-drv/delay.h ././source-doc/base-drv/transfers.h ././source-doc/base-drv/protocol.h
./base-drv/critical-section.c: base-drv/critical-section.c ././source-doc/base-drv/critical-section.h
./base-drv/enumerate.c: base-drv/enumerate.c ././source-doc/base-drv/enumerate.h ././source-doc/base-drv/ch376.h ././source-doc/base-drv/ch376inc.h ././source-doc/base-drv/delay.h ././source-doc/base-drv/protocol.h ././source-doc/base-drv/dev_transfers.h ././source-doc/base-drv/transfers.h ././source-doc/base-drv/usb_state.h ././source-doc/base-drv/enumerate_hub.h ././source-doc/base-drv/enumerate_storage.h ././source-doc/base-drv/work-area.h ././source-doc/base-drv/print.h
./base-drv/usb_state.c: base-drv/usb_state.c ././source-doc/base-drv/usb_state.h ././source-doc/base-drv/ch376.h ././source-doc/base-drv/ch376inc.h ././source-doc/base-drv/delay.h ././source-doc/base-drv/protocol.h ././source-doc/base-drv/dev_transfers.h ././source-doc/base-drv/transfers.h ././source-doc/base-drv/work-area.h
./base-drv/class_hub.c: base-drv/class_hub.c ././source-doc/base-drv/class_hub.h ././source-doc/base-drv/ch376.h ././source-doc/base-drv/ch376inc.h ././source-doc/base-drv/delay.h ././source-doc/base-drv/protocol.h ././source-doc/base-drv/dev_transfers.h ././source-doc/base-drv/transfers.h ././source-doc/base-drv/usb_state.h
./base-drv/enumerate_storage.c: base-drv/enumerate_storage.c ././source-doc/base-drv/enumerate_storage.h ././source-doc/base-drv/protocol.h ././source-doc/base-drv/ch376.h ././source-doc/base-drv/ch376inc.h ././source-doc/base-drv/delay.h ././source-doc/base-drv/dev_transfers.h ././source-doc/base-drv/transfers.h
./base-drv/enumerate_hub.c: base-drv/enumerate_hub.c ././source-doc/base-drv/enumerate_hub.h ././source-doc/base-drv/enumerate.h ././source-doc/base-drv/ch376.h ././source-doc/base-drv/ch376inc.h ././source-doc/base-drv/delay.h ././source-doc/base-drv/protocol.h ././source-doc/base-drv/dev_transfers.h ././source-doc/base-drv/transfers.h ././source-doc/base-drv/usb_state.h ././source-doc/base-drv/class_hub.h ././source-doc/base-drv/work-area.h
./base-drv/usb-base-drv.c: base-drv/usb-base-drv.c ././source-doc/base-drv/usb-base-drv.h ././source-doc/base-drv//ch376inc.h ././source-doc/base-drv//delay.h
./base-drv/transfers.c: base-drv/transfers.c ././source-doc/base-drv/transfers.h ././source-doc/base-drv/ch376.h ././source-doc/base-drv/ch376inc.h ././source-doc/base-drv/delay.h ././source-doc/base-drv/z80.h ././source-doc/base-drv/ez80-helpers.h ././source-doc/base-drv/print.h
./base-drv/ch376.c: base-drv/ch376.c ././source-doc/base-drv/ch376.h ././source-doc/base-drv/ch376inc.h ././source-doc/base-drv/delay.h ././source-doc/base-drv/ez80-helpers.h ././source-doc/base-drv/print.h
./base-drv/protocol.c: base-drv/protocol.c ././source-doc/base-drv/protocol.h ././source-doc/base-drv/ch376.h ././source-doc/base-drv/ch376inc.h ././source-doc/base-drv/delay.h ././source-doc/base-drv/dev_transfers.h ././source-doc/base-drv/transfers.h ././source-doc/base-drv/ez80-helpers.h ././source-doc/base-drv/print.h
./base-drv/work-area.c: base-drv/work-area.c ././source-doc/base-drv/usb_state.h ././source-doc/base-drv/ch376.h ././source-doc/base-drv/ch376inc.h ././source-doc/base-drv/delay.h ././source-doc/base-drv/protocol.h ././source-doc/base-drv/dev_transfers.h ././source-doc/base-drv/transfers.h
./base-drv/usb-init.c: base-drv/usb-init.c ././source-doc/base-drv/ch376.h ././source-doc/base-drv/ch376inc.h ././source-doc/base-drv/delay.h ././source-doc/base-drv/enumerate.h ././source-doc/base-drv/protocol.h ././source-doc/base-drv/dev_transfers.h ././source-doc/base-drv/transfers.h ././source-doc/base-drv/usb_state.h ././source-doc/base-drv/print.h ././source-doc/base-drv/work-area.h ././source-doc/base-drv/z80.h
./ufi-drv/ufi-init.c: ufi-drv/ufi-init.c ././source-doc/ufi-drv/class_ufi.h ././source-doc/base-drv//transfers.h ././source-doc/ufi-drv/usb_cbi.h
./ufi-drv/usb_cbi.c: ufi-drv/usb_cbi.c ././source-doc/ufi-drv/usb_cbi.h
./ufi-drv/class_ufi.c: ufi-drv/class_ufi.c ././source-doc/ufi-drv/class_ufi.h ././source-doc/base-drv//transfers.h ././source-doc/ufi-drv/usb_cbi.h
./keyboard/kyb-init.c: keyboard/kyb-init.c ././source-doc/keyboard/class_hid.h ././source-doc/base-drv//transfers.h ././source-doc/keyboard/class_hid_keyboard.h
./keyboard/class_hid.c: keyboard/class_hid.c ././source-doc/keyboard/class_hid.h ././source-doc/base-drv//transfers.h
./keyboard/class_hid_keyboard.c: keyboard/class_hid_keyboard.c ././source-doc/keyboard/class_hid_keyboard.h
./scsi-drv/scsi-init.c: scsi-drv/scsi-init.c ././source-doc/scsi-drv/class_scsi.h ././source-doc/base-drv//ch376inc.h ././source-doc/base-drv//delay.h ././source-doc/base-drv//transfers.h
./scsi-drv/class_scsi.c: scsi-drv/class_scsi.c ././source-doc/scsi-drv/class_scsi.h ././source-doc/base-drv//ch376inc.h ././source-doc/base-drv//delay.h ././source-doc/base-drv//transfers.h
##
./base-drv.s: base-drv/./dev_transfers.c.s base-drv/./critical-section.c.s base-drv/./enumerate.c.s base-drv/./usb_state.c.s base-drv/./class_hub.c.s base-drv/./enumerate_storage.c.s base-drv/./enumerate_hub.c.s base-drv/./usb-base-drv.c.s base-drv/./transfers.c.s base-drv/./ch376.c.s base-drv/./protocol.c.s base-drv/./work-area.c.s base-drv/./usb-init.c.s
##
./scsi-drv.s: scsi-drv/./scsi-init.c.s scsi-drv/./class_scsi.c.s
##
./ufi-drv.s: ufi-drv/./ufi-init.c.s ufi-drv/./usb_cbi.c.s ufi-drv/./class_ufi.c.s
##
./keyboard.s: keyboard/./kyb-init.c.s keyboard/./class_hid.c.s keyboard/./class_hid_keyboard.c.s

2
Source/HBIOS/ch376-native/ufi-drv.s

@ -1,4 +1,4 @@
; Generated File -- not to be modify directly ; Generated File -- not to be modify directly
#include "ch376-native/ufi-drv/class_ufi.c.s"
#include "ch376-native/ufi-drv/ufi-init.c.s" #include "ch376-native/ufi-drv/ufi-init.c.s"
#include "ch376-native/ufi-drv/usb_cbi.c.s" #include "ch376-native/ufi-drv/usb_cbi.c.s"
#include "ch376-native/ufi-drv/class_ufi.c.s"

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

@ -1,5 +1,5 @@
; ;
; Generated from source-doc/ufi-drv/./class_ufi.c.asm -- not to be modify directly
; Generated from source-doc/ufi-drv/class_ufi.c.asm -- not to be modify directly
; ;
; ;
;-------------------------------------------------------- ;--------------------------------------------------------
@ -48,7 +48,7 @@ _USB_MODULE_LEDS .EQU 0xff8a
;-------------------------------------------------------- ;--------------------------------------------------------
; code ; code
;-------------------------------------------------------- ;--------------------------------------------------------
;source-doc/ufi-drv/./class_ufi.c:14: uint8_t wait_for_device_ready(device_config *const storage_device, uint8_t timeout_counter) {
;source-doc/ufi-drv/class_ufi.c:14: uint8_t wait_for_device_ready(device_config *const storage_device, uint8_t timeout_counter) {
; --------------------------------- ; ---------------------------------
; Function wait_for_device_ready ; Function wait_for_device_ready
; --------------------------------- ; ---------------------------------
@ -59,18 +59,21 @@ _wait_for_device_ready:
ld hl, -18 ld hl, -18
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/ufi-drv/./class_ufi.c:18: do {
;source-doc/ufi-drv/class_ufi.c:18: do {
ld c,(ix+6) ld c,(ix+6)
l_wait_for_device_ready_00105: l_wait_for_device_ready_00105:
;source-doc/ufi-drv/./class_ufi.c:19: memset(&sense, 0, sizeof(sense));
;source-doc/ufi-drv/class_ufi.c:19: memset(&sense, 0, sizeof(sense));
ld hl,0 ld hl,0
add hl, sp add hl, sp
ld b,0x12
ld b,0x09
l_wait_for_device_ready_00132: l_wait_for_device_ready_00132:
ld (hl),0x00
xor a
ld (hl), a
inc hl
ld (hl), a
inc hl inc hl
djnz l_wait_for_device_ready_00132 djnz l_wait_for_device_ready_00132
;source-doc/ufi-drv/./class_ufi.c:20: result = ufi_test_unit_ready(storage_device, &sense);
;source-doc/ufi-drv/class_ufi.c:20: result = ufi_test_unit_ready(storage_device, &sense);
push bc push bc
ld hl,2 ld hl,2
add hl, sp add hl, sp
@ -84,11 +87,11 @@ l_wait_for_device_ready_00132:
ld a, l ld a, l
pop bc pop bc
ld b, a ld b, a
;source-doc/ufi-drv/./class_ufi.c:22: if ((result == USB_ERR_OK && sense.sense_key == 0) || timeout_counter-- == 0)
ld hl,0+1+1
add hl,sp
;source-doc/ufi-drv/class_ufi.c:22: if ((result == USB_ERR_OK && sense.sense_key == 0) || timeout_counter-- == 0)
or a or a
jr NZ,l_wait_for_device_ready_00104 jr NZ,l_wait_for_device_ready_00104
ld hl,2
add hl, sp
ld a, (hl) ld a, (hl)
and 0x0f and 0x0f
jr Z,l_wait_for_device_ready_00107 jr Z,l_wait_for_device_ready_00107
@ -97,19 +100,21 @@ l_wait_for_device_ready_00104:
dec c dec c
or a or a
jr Z,l_wait_for_device_ready_00107 jr Z,l_wait_for_device_ready_00107
;source-doc/ufi-drv/./class_ufi.c:25: delay_medium();
;source-doc/ufi-drv/class_ufi.c:25: delay_medium();
push bc push bc
call _delay_medium call _delay_medium
pop bc pop bc
;source-doc/ufi-drv/./class_ufi.c:27: } while (true);
;source-doc/ufi-drv/class_ufi.c:27: } while (true);
jr l_wait_for_device_ready_00105 jr l_wait_for_device_ready_00105
l_wait_for_device_ready_00107: l_wait_for_device_ready_00107:
;source-doc/ufi-drv/./class_ufi.c:29: return result | sense.sense_key;
;source-doc/ufi-drv/class_ufi.c:29: return result | sense.sense_key;
ld hl,2
add hl, sp
ld a, (hl) ld a, (hl)
and 0x0f and 0x0f
or b or b
ld l, a ld l, a
;source-doc/ufi-drv/./class_ufi.c:30: }
;source-doc/ufi-drv/class_ufi.c:30: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
@ -178,7 +183,7 @@ __ufi_cmd_send_diagnostic:
DEFB +0x00 DEFB +0x00
DEFB +0x00 DEFB +0x00
DEFB +0x00 DEFB +0x00
;source-doc/ufi-drv/./class_ufi.c:32: usb_error ufi_test_unit_ready(device_config *const storage_device, ufi_request_sense_response const *response) {
;source-doc/ufi-drv/class_ufi.c:32: usb_error ufi_test_unit_ready(device_config *const storage_device, ufi_request_sense_response const *response) {
; --------------------------------- ; ---------------------------------
; Function ufi_test_unit_ready ; Function ufi_test_unit_ready
; --------------------------------- ; ---------------------------------
@ -189,18 +194,20 @@ _ufi_test_unit_ready:
ld hl, -24 ld hl, -24
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/ufi-drv/./class_ufi.c:35: memset(&ufi_cmd_request_test_unit_ready, 0, sizeof(ufi_test_unit_ready_command));
;source-doc/ufi-drv/class_ufi.c:35: memset(&ufi_cmd_request_test_unit_ready, 0, sizeof(ufi_test_unit_ready_command));
ld hl,0 ld hl,0
add hl, sp add hl, sp
ex de, hl
ld l, e
ld h, d
ld b,0x0c
ld e,l
ld d,h
ld b,0x06
l_ufi_test_unit_ready_00104: l_ufi_test_unit_ready_00104:
ld (hl),0x00
xor a
ld (hl), a
inc hl
ld (hl), a
inc hl inc hl
djnz l_ufi_test_unit_ready_00104 djnz l_ufi_test_unit_ready_00104
;source-doc/ufi-drv/./class_ufi.c:37: usb_execute_cbi(storage_device, (uint8_t *)&ufi_cmd_request_test_unit_ready, false, 0, NULL, NULL);
;source-doc/ufi-drv/class_ufi.c:37: usb_execute_cbi(storage_device, (uint8_t *)&ufi_cmd_request_test_unit_ready, false, 0, NULL, NULL);
ld hl,0x0000 ld hl,0x0000
push hl push hl
push hl push hl
@ -216,22 +223,20 @@ l_ufi_test_unit_ready_00104:
ld hl,11 ld hl,11
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/ufi-drv/./class_ufi.c:40: ufi_cmd_request_sense = _ufi_cmd_request_sense;
;source-doc/ufi-drv/class_ufi.c:40: ufi_cmd_request_sense = _ufi_cmd_request_sense;
ld hl,12 ld hl,12
add hl, sp add hl, sp
ld c, l
ld b, h
ld e, c
ld d, b
push bc
ld hl,__ufi_cmd_request_sense
ld e,l
ld d,h
push hl
ld bc,0x000c ld bc,0x000c
ld hl,__ufi_cmd_request_sense
ldir ldir
pop bc pop bc
;source-doc/ufi-drv/./class_ufi.c:43: (uint8_t *)response, NULL);
;source-doc/ufi-drv/class_ufi.c:43: (uint8_t *)response, NULL);
ld e,(ix+6) ld e,(ix+6)
ld d,(ix+7) ld d,(ix+7)
;source-doc/ufi-drv/./class_ufi.c:42: result = usb_execute_cbi(storage_device, (uint8_t *)&ufi_cmd_request_sense, false, sizeof(ufi_request_sense_response),
;source-doc/ufi-drv/class_ufi.c:42: result = usb_execute_cbi(storage_device, (uint8_t *)&ufi_cmd_request_sense, false, sizeof(ufi_request_sense_response),
ld hl,0x0000 ld hl,0x0000
push hl push hl
push de push de
@ -245,12 +250,12 @@ l_ufi_test_unit_ready_00104:
ld h,(ix+5) ld h,(ix+5)
push hl push hl
call _usb_execute_cbi call _usb_execute_cbi
;source-doc/ufi-drv/./class_ufi.c:46: return result;
;source-doc/ufi-drv/./class_ufi.c:47: }
;source-doc/ufi-drv/class_ufi.c:46: return result;
;source-doc/ufi-drv/class_ufi.c:47: }
ld sp,ix ld sp,ix
pop ix pop ix
ret ret
;source-doc/ufi-drv/./class_ufi.c:49: usb_error ufi_request_sense(device_config *const storage_device, ufi_request_sense_response const *response) {
;source-doc/ufi-drv/class_ufi.c:49: usb_error ufi_request_sense(device_config *const storage_device, ufi_request_sense_response const *response) {
; --------------------------------- ; ---------------------------------
; Function ufi_request_sense ; Function ufi_request_sense
; --------------------------------- ; ---------------------------------
@ -261,19 +266,17 @@ _ufi_request_sense:
ld hl, -12 ld hl, -12
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/ufi-drv/./class_ufi.c:51: ufi_cmd_request_sense = _ufi_cmd_request_sense;
;source-doc/ufi-drv/class_ufi.c:51: ufi_cmd_request_sense = _ufi_cmd_request_sense;
ld hl,0 ld hl,0
add hl, sp add hl, sp
ld c, l
ld b, h
ld e, c
ld d, b
push bc
ld hl,__ufi_cmd_request_sense
ld e,l
ld d,h
push hl
ld bc,0x000c ld bc,0x000c
ld hl,__ufi_cmd_request_sense
ldir ldir
pop bc pop bc
;source-doc/ufi-drv/./class_ufi.c:53: usb_error result = usb_execute_cbi(storage_device, (uint8_t *)&ufi_cmd_request_sense, false, sizeof(ufi_request_sense_response),
;source-doc/ufi-drv/class_ufi.c:53: usb_error result = usb_execute_cbi(storage_device, (uint8_t *)&ufi_cmd_request_sense, false, sizeof(ufi_request_sense_response),
ld e,(ix+6) ld e,(ix+6)
ld d,(ix+7) ld d,(ix+7)
ld hl,0x0000 ld hl,0x0000
@ -289,12 +292,12 @@ _ufi_request_sense:
ld h,(ix+5) ld h,(ix+5)
push hl push hl
call _usb_execute_cbi call _usb_execute_cbi
;source-doc/ufi-drv/./class_ufi.c:58: return result;
;source-doc/ufi-drv/./class_ufi.c:59: }
;source-doc/ufi-drv/class_ufi.c:58: return result;
;source-doc/ufi-drv/class_ufi.c:59: }
ld sp,ix ld sp,ix
pop ix pop ix
ret ret
;source-doc/ufi-drv/./class_ufi.c:61: usb_error ufi_read_frmt_caps(device_config *const storage_device, ufi_format_capacities_response const *response) {
;source-doc/ufi-drv/class_ufi.c:61: usb_error ufi_read_frmt_caps(device_config *const storage_device, ufi_format_capacities_response const *response) {
; --------------------------------- ; ---------------------------------
; Function ufi_read_frmt_caps ; Function ufi_read_frmt_caps
; --------------------------------- ; ---------------------------------
@ -305,14 +308,14 @@ _ufi_read_frmt_caps:
ld hl, -24 ld hl, -24
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/ufi-drv/./class_ufi.c:65: ufi_cmd_read_format_capacities = _ufi_cmd_read_format_capacities;
;source-doc/ufi-drv/class_ufi.c:65: ufi_cmd_read_format_capacities = _ufi_cmd_read_format_capacities;
ld hl,0 ld hl,0
add hl, sp add hl, sp
ex de, hl ex de, hl
ld hl,__ufi_cmd_read_format_capacitie
ld bc,0x000c ld bc,0x000c
ld hl,__ufi_cmd_read_format_capacitie
ldir ldir
;source-doc/ufi-drv/./class_ufi.c:66: result = usb_execute_cbi(storage_device, (uint8_t *)&ufi_cmd_read_format_capacities, false, 12, (uint8_t *)response, NULL);
;source-doc/ufi-drv/class_ufi.c:66: result = usb_execute_cbi(storage_device, (uint8_t *)&ufi_cmd_read_format_capacities, false, 12, (uint8_t *)response, NULL);
ld c,(ix+6) ld c,(ix+6)
ld b,(ix+7) ld b,(ix+7)
push bc push bc
@ -339,24 +342,24 @@ _ufi_read_frmt_caps:
inc sp inc sp
ld e, l ld e, l
pop bc pop bc
;source-doc/ufi-drv/./class_ufi.c:69: CHECK(result);
;source-doc/ufi-drv/class_ufi.c:69: CHECK(result);
ld a,e ld a,e
ld d,a
ld l,a
or a or a
jr NZ,l_ufi_read_frmt_caps_00103 jr NZ,l_ufi_read_frmt_caps_00103
;source-doc/ufi-drv/./class_ufi.c:71: const uint8_t available_length = response->capacity_list_length;
;source-doc/ufi-drv/class_ufi.c:71: const uint8_t available_length = response->capacity_list_length;
ld e,(ix+6) ld e,(ix+6)
ld d,(ix+7) ld d,(ix+7)
ld hl,3 ld hl,3
add hl, de add hl, de
ld e, (hl) ld e, (hl)
;source-doc/ufi-drv/./class_ufi.c:73: const uint8_t max_length =
;source-doc/ufi-drv/class_ufi.c:73: const uint8_t max_length =
ld a,0x24 ld a,0x24
sub e sub e
jr NC,l_ufi_read_frmt_caps_00106 jr NC,l_ufi_read_frmt_caps_00106
ld e,0x24 ld e,0x24
l_ufi_read_frmt_caps_00106: l_ufi_read_frmt_caps_00106:
;source-doc/ufi-drv/./class_ufi.c:77: memcpy(&cmd, &ufi_cmd_read_format_capacities, sizeof(cmd));
;source-doc/ufi-drv/class_ufi.c:77: memcpy(&cmd, &ufi_cmd_read_format_capacities, sizeof(cmd));
push de push de
push bc push bc
ex de, hl ex de, hl
@ -369,11 +372,11 @@ l_ufi_read_frmt_caps_00106:
ldir ldir
pop bc pop bc
pop de pop de
;source-doc/ufi-drv/./class_ufi.c:78: cmd.allocation_length[1] = max_length;
;source-doc/ufi-drv/class_ufi.c:78: cmd.allocation_length[1] = max_length;
ld (ix-4),e ld (ix-4),e
;source-doc/ufi-drv/./class_ufi.c:80: result = usb_execute_cbi(storage_device, (uint8_t *)&cmd, false, max_length, (uint8_t *)response, NULL);
ld d,0x00
;source-doc/ufi-drv/class_ufi.c:80: result = usb_execute_cbi(storage_device, (uint8_t *)&cmd, false, max_length, (uint8_t *)response, NULL);
ld hl,0x0000 ld hl,0x0000
ld d,l
push hl push hl
push bc push bc
push de push de
@ -393,16 +396,14 @@ l_ufi_read_frmt_caps_00106:
pop af pop af
pop af pop af
inc sp inc sp
ld d, l
;source-doc/ufi-drv/./class_ufi.c:84: done:
;source-doc/ufi-drv/class_ufi.c:84: done:
l_ufi_read_frmt_caps_00103: l_ufi_read_frmt_caps_00103:
;source-doc/ufi-drv/./class_ufi.c:85: return result;
ld l, d
;source-doc/ufi-drv/./class_ufi.c:86: }
;source-doc/ufi-drv/class_ufi.c:85: return result;
;source-doc/ufi-drv/class_ufi.c:86: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
;source-doc/ufi-drv/./class_ufi.c:88: usb_error ufi_inquiry(device_config *const storage_device, ufi_inquiry_response const *response) {
;source-doc/ufi-drv/class_ufi.c:88: usb_error ufi_inquiry(device_config *const storage_device, ufi_inquiry_response const *response) {
; --------------------------------- ; ---------------------------------
; Function ufi_inquiry ; Function ufi_inquiry
; --------------------------------- ; ---------------------------------
@ -413,19 +414,17 @@ _ufi_inquiry:
ld hl, -12 ld hl, -12
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/ufi-drv/./class_ufi.c:90: ufi_cmd_inquiry = _ufi_cmd_inquiry;
;source-doc/ufi-drv/class_ufi.c:90: ufi_cmd_inquiry = _ufi_cmd_inquiry;
ld hl,0 ld hl,0
add hl, sp add hl, sp
ld c, l
ld b, h
ld e, c
ld d, b
push bc
ld hl,__ufi_cmd_inquiry
ld e,l
ld d,h
push hl
ld bc,0x000c ld bc,0x000c
ld hl,__ufi_cmd_inquiry
ldir ldir
pop bc pop bc
;source-doc/ufi-drv/./class_ufi.c:92: usb_error result =
;source-doc/ufi-drv/class_ufi.c:92: usb_error result =
ld e,(ix+6) ld e,(ix+6)
ld d,(ix+7) ld d,(ix+7)
ld hl,0x0000 ld hl,0x0000
@ -441,12 +440,12 @@ _ufi_inquiry:
ld h,(ix+5) ld h,(ix+5)
push hl push hl
call _usb_execute_cbi call _usb_execute_cbi
;source-doc/ufi-drv/./class_ufi.c:97: return result;
;source-doc/ufi-drv/./class_ufi.c:98: }
;source-doc/ufi-drv/class_ufi.c:97: return result;
;source-doc/ufi-drv/class_ufi.c:98: }
ld sp,ix ld sp,ix
pop ix pop ix
ret ret
;source-doc/ufi-drv/./class_ufi.c:100: usb_error ufi_read_write_sector(device_config *const storage_device,
;source-doc/ufi-drv/class_ufi.c:100: usb_error ufi_read_write_sector(device_config *const storage_device,
; --------------------------------- ; ---------------------------------
; Function ufi_read_write_sector ; Function ufi_read_write_sector
; --------------------------------- ; ---------------------------------
@ -457,15 +456,22 @@ _ufi_read_write_sector:
ld hl, -12 ld hl, -12
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/ufi-drv/./class_ufi.c:107: memset(&cmd, 0, sizeof(cmd));
;source-doc/ufi-drv/class_ufi.c:107: memset(&cmd, 0, sizeof(cmd));
ld hl,0 ld hl,0
add hl, sp add hl, sp
ld b,0x0c
ld e,l
ld d,h
ld b,0x06
l_ufi_read_write_sector_00113: l_ufi_read_write_sector_00113:
ld (hl),0x00
xor a
ld (hl), a
inc hl
ld (hl), a
inc hl inc hl
djnz l_ufi_read_write_sector_00113 djnz l_ufi_read_write_sector_00113
;source-doc/ufi-drv/./class_ufi.c:108: cmd.operation_code = send ? 0x2A : 0x28;
;source-doc/ufi-drv/class_ufi.c:108: cmd.operation_code = send ? 0x2A : 0x28;
ld c, e
ld b, d
bit 0,(ix+6) bit 0,(ix+6)
jr Z,l_ufi_read_write_sector_00104 jr Z,l_ufi_read_write_sector_00104
ld a,0x2a ld a,0x2a
@ -473,18 +479,17 @@ l_ufi_read_write_sector_00113:
l_ufi_read_write_sector_00104: l_ufi_read_write_sector_00104:
ld a,0x28 ld a,0x28
l_ufi_read_write_sector_00105: l_ufi_read_write_sector_00105:
ld (ix-12),a
;source-doc/ufi-drv/./class_ufi.c:109: cmd.lba[2] = sector_number >> 8;
ld (bc), a
;source-doc/ufi-drv/class_ufi.c:109: cmd.lba[2] = sector_number >> 8;
ld a,(ix+8) ld a,(ix+8)
ld (ix-8),a ld (ix-8),a
;source-doc/ufi-drv/./class_ufi.c:110: cmd.lba[3] = sector_number & 0xFF;
;source-doc/ufi-drv/class_ufi.c:110: cmd.lba[3] = sector_number & 0xFF;
ld a,(ix+7) ld a,(ix+7)
ld (ix-7),a ld (ix-7),a
;source-doc/ufi-drv/./class_ufi.c:111: cmd.transfer_length[1] = sector_count;
;source-doc/ufi-drv/class_ufi.c:111: cmd.transfer_length[1] = sector_count;
;source-doc/ufi-drv/class_ufi.c:113: usb_error result = usb_execute_cbi(storage_device, (uint8_t *)&cmd, send, 512 * sector_count, (uint8_t *)buffer, sense_codes);
ld a,(ix+9) ld a,(ix+9)
ld (ix-4),a ld (ix-4),a
;source-doc/ufi-drv/./class_ufi.c:113: usb_error result = usb_execute_cbi(storage_device, (uint8_t *)&cmd, send, 512 * sector_count, (uint8_t *)buffer, sense_codes);
ld a,(ix+9)
add a, a add a, a
ld c,0x00 ld c,0x00
ld l,(ix+12) ld l,(ix+12)
@ -498,19 +503,17 @@ l_ufi_read_write_sector_00105:
ld a,(ix+6) ld a,(ix+6)
push af push af
inc sp inc sp
ld hl,7
add hl, sp
push hl
push de
ld l,(ix+4) ld l,(ix+4)
ld h,(ix+5) ld h,(ix+5)
push hl push hl
call _usb_execute_cbi call _usb_execute_cbi
;source-doc/ufi-drv/./class_ufi.c:117: return result;
;source-doc/ufi-drv/./class_ufi.c:118: }
;source-doc/ufi-drv/class_ufi.c:117: return result;
;source-doc/ufi-drv/class_ufi.c:118: }
ld sp,ix ld sp,ix
pop ix pop ix
ret ret
;source-doc/ufi-drv/./class_ufi.c:127: usb_error ufi_format(device_config *const storage_device,
;source-doc/ufi-drv/class_ufi.c:127: usb_error ufi_format(device_config *const storage_device,
; --------------------------------- ; ---------------------------------
; Function ufi_format ; Function ufi_format
; --------------------------------- ; ---------------------------------
@ -521,33 +524,36 @@ _ufi_format:
ld hl, -26 ld hl, -26
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/ufi-drv/./class_ufi.c:134: memset(&parameter_list, 0, sizeof(parameter_list));
;source-doc/ufi-drv/class_ufi.c:134: memset(&parameter_list, 0, sizeof(parameter_list));
ld hl,2 ld hl,2
add hl, sp add hl, sp
push hl push hl
ld b,0x0c
ld b,0x06
l_ufi_format_00104: l_ufi_format_00104:
ld (hl),0x00
xor a
ld (hl), a
inc hl
ld (hl), a
inc hl inc hl
djnz l_ufi_format_00104 djnz l_ufi_format_00104
pop bc pop bc
;source-doc/ufi-drv/./class_ufi.c:137: cmd = _ufi_cmd_format;
;source-doc/ufi-drv/class_ufi.c:137: cmd = _ufi_cmd_format;
ld hl,14 ld hl,14
add hl, sp add hl, sp
ex de, hl ex de, hl
push bc push bc
ld hl,__ufi_cmd_format
ld bc,0x000c ld bc,0x000c
ld hl,__ufi_cmd_format
ldir ldir
pop bc pop bc
;source-doc/ufi-drv/./class_ufi.c:140: cmd.track_number = track_number;
;source-doc/ufi-drv/class_ufi.c:140: cmd.track_number = track_number;
ld a,(ix+7) ld a,(ix+7)
ld (ix-10),a ld (ix-10),a
;source-doc/ufi-drv/./class_ufi.c:141: cmd.interleave[1] = 0;
;source-doc/ufi-drv/class_ufi.c:141: cmd.interleave[1] = 0;
ld (ix-8),0x00 ld (ix-8),0x00
;source-doc/ufi-drv/./class_ufi.c:142: cmd.parameter_list_length[1] = sizeof(parameter_list);
;source-doc/ufi-drv/class_ufi.c:142: cmd.parameter_list_length[1] = sizeof(parameter_list);
ld (ix-4),0x0c ld (ix-4),0x0c
;source-doc/ufi-drv/./class_ufi.c:144: parameter_list.defect_list_header.side = side;
;source-doc/ufi-drv/class_ufi.c:144: parameter_list.defect_list_header.side = side;
ld e, c ld e, c
ld d, b ld d, b
inc de inc de
@ -558,49 +564,46 @@ l_ufi_format_00104:
and 0xfe and 0xfe
or l or l
ld (de), a ld (de), a
;source-doc/ufi-drv/./class_ufi.c:145: parameter_list.defect_list_header.immediate = 0;
;source-doc/ufi-drv/class_ufi.c:145: parameter_list.defect_list_header.immediate = 0;
ld l, e ld l, e
ld h, d ld h, d
res 1, (hl) res 1, (hl)
;source-doc/ufi-drv/./class_ufi.c:146: parameter_list.defect_list_header.reserved2 = 0;
;source-doc/ufi-drv/class_ufi.c:146: parameter_list.defect_list_header.reserved2 = 0;
ld l, e ld l, e
ld h, d ld h, d
ld a, (hl) ld a, (hl)
and 0xf3 and 0xf3
ld (hl), a ld (hl), a
;source-doc/ufi-drv/./class_ufi.c:147: parameter_list.defect_list_header.single_track = 1;
;source-doc/ufi-drv/class_ufi.c:147: parameter_list.defect_list_header.single_track = 1;
ld l, e ld l, e
ld h, d ld h, d
set 4, (hl) set 4, (hl)
;source-doc/ufi-drv/./class_ufi.c:148: parameter_list.defect_list_header.dcrt = 1;
;source-doc/ufi-drv/class_ufi.c:148: parameter_list.defect_list_header.dcrt = 1;
ld l, e ld l, e
ld h, d ld h, d
set 5, (hl) set 5, (hl)
;source-doc/ufi-drv/./class_ufi.c:149: parameter_list.defect_list_header.extend = 0;
;source-doc/ufi-drv/class_ufi.c:149: parameter_list.defect_list_header.extend = 0;
ld l, e ld l, e
ld h, d ld h, d
res 6, (hl) res 6, (hl)
;source-doc/ufi-drv/./class_ufi.c:150: parameter_list.defect_list_header.fov = 1;
;source-doc/ufi-drv/class_ufi.c:150: parameter_list.defect_list_header.fov = 1;
ex de, hl ex de, hl
set 7, (hl) set 7, (hl)
;source-doc/ufi-drv/./class_ufi.c:151: parameter_list.defect_list_header.defect_list_length_msb = 0;
;source-doc/ufi-drv/class_ufi.c:151: parameter_list.defect_list_header.defect_list_length_msb = 0;
ld (ix-22),0x00 ld (ix-22),0x00
;source-doc/ufi-drv/./class_ufi.c:152: parameter_list.defect_list_header.defect_list_length_lsb = 8;
;source-doc/ufi-drv/class_ufi.c:152: parameter_list.defect_list_header.defect_list_length_lsb = 8;
ld (ix-21),0x08 ld (ix-21),0x08
;source-doc/ufi-drv/./class_ufi.c:153: memcpy(&parameter_list.format_descriptor, (void *)format, sizeof(ufi_format_capacity_descriptor));
;source-doc/ufi-drv/class_ufi.c:153: memcpy(&parameter_list.format_descriptor, (void *)format, sizeof(ufi_format_capacity_descriptor));
ld e,(ix+8) ld e,(ix+8)
ld d,(ix+9) ld d,(ix+9)
push bc push bc
ld l, e
ld h, d
ex de, hl
ld hl,8 ld hl,8
add hl, sp add hl, sp
ex de, hl ex de, hl
ld bc,0x0008 ld bc,0x0008
ldir ldir
pop bc pop bc
;source-doc/ufi-drv/./class_ufi.c:155: usb_error result = usb_execute_cbi(storage_device, (uint8_t *)&cmd, true, sizeof(parameter_list), (uint8_t *)&parameter_list,
;source-doc/ufi-drv/class_ufi.c:155: usb_error result = usb_execute_cbi(storage_device, (uint8_t *)&cmd, true, sizeof(parameter_list), (uint8_t *)&parameter_list,
ld hl,0 ld hl,0
add hl, sp add hl, sp
push hl push hl
@ -617,12 +620,12 @@ l_ufi_format_00104:
ld h,(ix+5) ld h,(ix+5)
push hl push hl
call _usb_execute_cbi call _usb_execute_cbi
;source-doc/ufi-drv/./class_ufi.c:162: return result;
;source-doc/ufi-drv/./class_ufi.c:163: }
;source-doc/ufi-drv/class_ufi.c:162: return result;
;source-doc/ufi-drv/class_ufi.c:163: }
ld sp,ix ld sp,ix
pop ix pop ix
ret ret
;source-doc/ufi-drv/./class_ufi.c:165: usb_error ufi_send_diagnostics(device_config *const storage_device) {
;source-doc/ufi-drv/class_ufi.c:165: usb_error ufi_send_diagnostics(device_config *const storage_device) {
; --------------------------------- ; ---------------------------------
; Function ufi_send_diagnostics ; Function ufi_send_diagnostics
; --------------------------------- ; ---------------------------------
@ -633,19 +636,17 @@ _ufi_send_diagnostics:
ld hl, -12 ld hl, -12
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/ufi-drv/./class_ufi.c:168: ufi_cmd_send_diagnostic = _ufi_cmd_send_diagnostic;
;source-doc/ufi-drv/class_ufi.c:168: ufi_cmd_send_diagnostic = _ufi_cmd_send_diagnostic;
ld hl,0 ld hl,0
add hl, sp add hl, sp
ld c, l
ld b, h
ld e, c
ld d, b
push bc
ld hl,__ufi_cmd_send_diagnostic
ld e,l
ld d,h
push hl
ld bc,0x000c ld bc,0x000c
ld hl,__ufi_cmd_send_diagnostic
ldir ldir
pop bc pop bc
;source-doc/ufi-drv/./class_ufi.c:170: return usb_execute_cbi(storage_device, (uint8_t *)&ufi_cmd_send_diagnostic, true, 0, NULL, NULL);
;source-doc/ufi-drv/class_ufi.c:170: return usb_execute_cbi(storage_device, (uint8_t *)&ufi_cmd_send_diagnostic, true, 0, NULL, NULL);
ld hl,0x0000 ld hl,0x0000
push hl push hl
push hl push hl
@ -658,11 +659,11 @@ _ufi_send_diagnostics:
ld h,(ix+5) ld h,(ix+5)
push hl push hl
call _usb_execute_cbi call _usb_execute_cbi
;source-doc/ufi-drv/./class_ufi.c:171: }
;source-doc/ufi-drv/class_ufi.c:171: }
ld sp,ix ld sp,ix
pop ix pop ix
ret ret
;source-doc/ufi-drv/./class_ufi.c:173: uint32_t convert_from_msb_first(const uint8_t *const buffer) {
;source-doc/ufi-drv/class_ufi.c:173: uint32_t convert_from_msb_first(const uint8_t *const buffer) {
; --------------------------------- ; ---------------------------------
; Function convert_from_msb_first ; Function convert_from_msb_first
; --------------------------------- ; ---------------------------------
@ -672,40 +673,40 @@ _convert_from_msb_first:
add ix,sp add ix,sp
push af push af
push af push af
;source-doc/ufi-drv/./class_ufi.c:175: uint8_t *p_output = ((uint8_t *)&result);
;source-doc/ufi-drv/class_ufi.c:175: uint8_t *p_output = ((uint8_t *)&result);
ld hl,0 ld hl,0
add hl, sp add hl, sp
ex de, hl ex de, hl
;source-doc/ufi-drv/./class_ufi.c:176: const uint8_t *p_input = buffer + 3;
;source-doc/ufi-drv/class_ufi.c:176: const uint8_t *p_input = buffer + 3;
ld c,(ix+4) ld c,(ix+4)
ld b,(ix+5) ld b,(ix+5)
inc bc inc bc
inc bc inc bc
inc bc inc bc
;source-doc/ufi-drv/./class_ufi.c:178: *p_output++ = *p_input--;
;source-doc/ufi-drv/class_ufi.c:178: *p_output++ = *p_input--;
ld a, (bc) ld a, (bc)
dec bc dec bc
ld (de), a ld (de), a
inc de inc de
;source-doc/ufi-drv/./class_ufi.c:179: *p_output++ = *p_input--;
;source-doc/ufi-drv/class_ufi.c:179: *p_output++ = *p_input--;
ld a, (bc) ld a, (bc)
dec bc dec bc
ld (de), a ld (de), a
inc de inc de
;source-doc/ufi-drv/./class_ufi.c:180: *p_output++ = *p_input--;
;source-doc/ufi-drv/class_ufi.c:180: *p_output++ = *p_input--;
ld a, (bc) ld a, (bc)
ld (de), a ld (de), a
inc de inc de
;source-doc/ufi-drv/./class_ufi.c:181: *p_output = *p_input--;
;source-doc/ufi-drv/class_ufi.c:181: *p_output = *p_input--;
dec bc dec bc
ld a, (bc) ld a, (bc)
ld (de), a ld (de), a
;source-doc/ufi-drv/./class_ufi.c:183: return result;
;source-doc/ufi-drv/class_ufi.c:183: return result;
pop hl pop hl
push hl push hl
ld e,(ix-2) ld e,(ix-2)
ld d,(ix-1) ld d,(ix-1)
;source-doc/ufi-drv/./class_ufi.c:184: }
;source-doc/ufi-drv/class_ufi.c:184: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret

127
Source/HBIOS/ch376-native/ufi-drv/ufi-init.c.s

@ -1,5 +1,5 @@
; ;
; Generated from source-doc/ufi-drv/./ufi-init.c.asm -- not to be modify directly
; Generated from source-doc/ufi-drv/ufi-init.c.asm -- not to be modify directly
; ;
; ;
;-------------------------------------------------------- ;--------------------------------------------------------
@ -48,7 +48,7 @@ _USB_MODULE_LEDS .EQU 0xff8a
;-------------------------------------------------------- ;--------------------------------------------------------
; code ; code
;-------------------------------------------------------- ;--------------------------------------------------------
;source-doc/ufi-drv/./ufi-init.c:11: void chufi_init(void) {
;source-doc/ufi-drv/ufi-init.c:11: void chufi_init(void) {
; --------------------------------- ; ---------------------------------
; Function chufi_init ; Function chufi_init
; --------------------------------- ; ---------------------------------
@ -57,30 +57,30 @@ _chufi_init:
ld ix,0 ld ix,0
add ix,sp add ix,sp
dec sp dec sp
;source-doc/ufi-drv/./ufi-init.c:14: do {
;source-doc/ufi-drv/ufi-init.c:14: do {
ld (ix-1),0x01 ld (ix-1),0x01
l_chufi_init_00105: l_chufi_init_00105:
;source-doc/ufi-drv/./ufi-init.c:15: device_config_storage *const storage_device = (device_config_storage *)get_usb_device_config(index);
;source-doc/ufi-drv/ufi-init.c:15: device_config_storage *const storage_device = (device_config_storage *)get_usb_device_config(index);
ld a,(ix-1) ld a,(ix-1)
call _get_usb_device_config call _get_usb_device_config
;source-doc/ufi-drv/./ufi-init.c:17: if (storage_device == NULL)
;source-doc/ufi-drv/ufi-init.c:17: if (storage_device == NULL)
ld a, d ld a, d
or e or e
jr Z,l_chufi_init_00108 jr Z,l_chufi_init_00108
;source-doc/ufi-drv/./ufi-init.c:20: const usb_device_type t = storage_device->type;
;source-doc/ufi-drv/ufi-init.c:20: const usb_device_type t = storage_device->type;
ld l, e ld l, e
ld h, d ld h, d
ld a, (hl) ld a, (hl)
and 0x0f and 0x0f
;source-doc/ufi-drv/./ufi-init.c:22: if (t == USB_IS_FLOPPY) {
;source-doc/ufi-drv/ufi-init.c:22: if (t == USB_IS_FLOPPY) {
dec a dec a
jr NZ,l_chufi_init_00106 jr NZ,l_chufi_init_00106
;source-doc/ufi-drv/./ufi-init.c:23: print_string("\r\nUSB: FLOPPY @ $");
;source-doc/ufi-drv/ufi-init.c:23: print_string("\r\nUSB: FLOPPY @ $");
push de push de
ld hl,ufi_init_str_0 ld hl,ufi_init_str_0
call _print_string call _print_string
pop de pop de
;source-doc/ufi-drv/./ufi-init.c:24: print_uint16(index);
;source-doc/ufi-drv/ufi-init.c:24: print_uint16(index);
ld l,(ix-1) ld l,(ix-1)
ld h,0x00 ld h,0x00
push de push de
@ -88,17 +88,17 @@ l_chufi_init_00105:
ld hl,ufi_init_str_1 ld hl,ufi_init_str_1
call _print_string call _print_string
pop de pop de
;source-doc/ufi-drv/./ufi-init.c:26: dio_add_entry(ch_ufi_fntbl, storage_device);
;source-doc/ufi-drv/ufi-init.c:26: dio_add_entry(ch_ufi_fntbl, storage_device);
ld hl,_ch_ufi_fntbl ld hl,_ch_ufi_fntbl
call _dio_add_entry call _dio_add_entry
l_chufi_init_00106: l_chufi_init_00106:
;source-doc/ufi-drv/./ufi-init.c:29: } while (++index != MAX_NUMBER_OF_DEVICES + 1);
;source-doc/ufi-drv/ufi-init.c:29: } while (++index != MAX_NUMBER_OF_DEVICES + 1);
inc (ix-1) inc (ix-1)
ld a,(ix-1) ld a,(ix-1)
sub 0x07 sub 0x07
jr NZ,l_chufi_init_00105 jr NZ,l_chufi_init_00105
l_chufi_init_00108: l_chufi_init_00108:
;source-doc/ufi-drv/./ufi-init.c:30: }
;source-doc/ufi-drv/ufi-init.c:30: }
inc sp inc sp
pop ix pop ix
ret ret
@ -110,7 +110,7 @@ ufi_init_str_0:
ufi_init_str_1: ufi_init_str_1:
DEFM " $" DEFM " $"
DEFB 0x00 DEFB 0x00
;source-doc/ufi-drv/./ufi-init.c:32: uint32_t chufi_get_cap(device_config *const dev) {
;source-doc/ufi-drv/ufi-init.c:32: uint32_t chufi_get_cap(device_config *const dev) {
; --------------------------------- ; ---------------------------------
; Function chufi_get_cap ; Function chufi_get_cap
; --------------------------------- ; ---------------------------------
@ -121,15 +121,18 @@ _chufi_get_cap:
ld hl, -72 ld hl, -72
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/ufi-drv/./ufi-init.c:34: memset(&response, 0, sizeof(ufi_format_capacities_response));
;source-doc/ufi-drv/ufi-init.c:34: memset(&response, 0, sizeof(ufi_format_capacities_response));
ld hl,0 ld hl,0
add hl, sp add hl, sp
ld b,0x24
ld b,0x12
l_chufi_get_cap_00112: l_chufi_get_cap_00112:
ld (hl),0x00
xor a
ld (hl), a
inc hl
ld (hl), a
inc hl inc hl
djnz l_chufi_get_cap_00112 djnz l_chufi_get_cap_00112
;source-doc/ufi-drv/./ufi-init.c:36: wait_for_device_ready(dev, 25);
;source-doc/ufi-drv/ufi-init.c:36: wait_for_device_ready(dev, 25);
ld a,0x19 ld a,0x19
push af push af
inc sp inc sp
@ -139,7 +142,7 @@ l_chufi_get_cap_00112:
call _wait_for_device_ready call _wait_for_device_ready
pop af pop af
inc sp inc sp
;source-doc/ufi-drv/./ufi-init.c:40: ufi_inquiry(dev, &inquiry);
;source-doc/ufi-drv/ufi-init.c:40: ufi_inquiry(dev, &inquiry);
ld hl,36 ld hl,36
add hl, sp add hl, sp
push hl push hl
@ -148,7 +151,7 @@ l_chufi_get_cap_00112:
push hl push hl
call _ufi_inquiry call _ufi_inquiry
pop af pop af
;source-doc/ufi-drv/./ufi-init.c:42: wait_for_device_ready(dev, 15);
;source-doc/ufi-drv/ufi-init.c:42: wait_for_device_ready(dev, 15);
ld h,0x0f ld h,0x0f
ex (sp),hl ex (sp),hl
inc sp inc sp
@ -158,7 +161,7 @@ l_chufi_get_cap_00112:
call _wait_for_device_ready call _wait_for_device_ready
pop af pop af
inc sp inc sp
;source-doc/ufi-drv/./ufi-init.c:44: const usb_error result = ufi_read_frmt_caps(dev, &response);
;source-doc/ufi-drv/ufi-init.c:44: const usb_error result = ufi_read_frmt_caps(dev, &response);
ld hl,0 ld hl,0
add hl, sp add hl, sp
push hl push hl
@ -169,27 +172,27 @@ l_chufi_get_cap_00112:
pop af pop af
pop af pop af
ld a, l ld a, l
;source-doc/ufi-drv/./ufi-init.c:45: if (result != USB_ERR_OK)
;source-doc/ufi-drv/ufi-init.c:45: if (result != USB_ERR_OK)
or a or a
jr Z,l_chufi_get_cap_00102 jr Z,l_chufi_get_cap_00102
;source-doc/ufi-drv/./ufi-init.c:46: return 0;
;source-doc/ufi-drv/ufi-init.c:46: return 0;
ld hl,0x0000 ld hl,0x0000
ld e, l ld e, l
ld d, l ld d, l
jr l_chufi_get_cap_00103 jr l_chufi_get_cap_00103
l_chufi_get_cap_00102: l_chufi_get_cap_00102:
;source-doc/ufi-drv/./ufi-init.c:48: return convert_from_msb_first(response.descriptors[0].number_of_blocks);
;source-doc/ufi-drv/ufi-init.c:48: return convert_from_msb_first(response.descriptors[0].number_of_blocks);
ld hl,4 ld hl,4
add hl, sp add hl, sp
push hl push hl
call _convert_from_msb_first call _convert_from_msb_first
pop af pop af
l_chufi_get_cap_00103: l_chufi_get_cap_00103:
;source-doc/ufi-drv/./ufi-init.c:49: }
;source-doc/ufi-drv/ufi-init.c:49: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
;source-doc/ufi-drv/./ufi-init.c:51: uint8_t chufi_read(device_config_storage *const dev, uint8_t *const buffer) {
;source-doc/ufi-drv/ufi-init.c:51: uint8_t chufi_read(device_config_storage *const dev, uint8_t *const buffer) {
; --------------------------------- ; ---------------------------------
; Function chufi_read ; Function chufi_read
; --------------------------------- ; ---------------------------------
@ -200,7 +203,7 @@ _chufi_read:
ld hl, -20 ld hl, -20
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/ufi-drv/./ufi-init.c:53: if (wait_for_device_ready((device_config *)dev, 20) != 0)
;source-doc/ufi-drv/ufi-init.c:53: if (wait_for_device_ready((device_config *)dev, 20) != 0)
ld c,(ix+4) ld c,(ix+4)
ld b,(ix+5) ld b,(ix+5)
push bc push bc
@ -211,23 +214,22 @@ _chufi_read:
call _wait_for_device_ready call _wait_for_device_ready
pop af pop af
inc sp inc sp
ld e, l
ld a, l
pop bc pop bc
ld a, e
or a or a
jr Z,l_chufi_read_00102 jr Z,l_chufi_read_00102
;source-doc/ufi-drv/./ufi-init.c:54: return -1; // Not READY!
;source-doc/ufi-drv/ufi-init.c:54: return -1; // Not READY!
ld l,0xff ld l,0xff
jr l_chufi_read_00109 jr l_chufi_read_00109
l_chufi_read_00102: l_chufi_read_00102:
;source-doc/ufi-drv/./ufi-init.c:59: memset(&sense_codes, 0, sizeof(sense_codes));
;source-doc/ufi-drv/ufi-init.c:59: memset(&sense_codes, 0, sizeof(sense_codes));
ld hl,0 ld hl,0
add hl, sp add hl, sp
xor a xor a
ld (hl), a ld (hl), a
inc hl inc hl
ld (hl), a ld (hl), a
;source-doc/ufi-drv/./ufi-init.c:61: if (ufi_read_write_sector((device_config *)dev, false, dev->current_lba, 1, buffer, (uint8_t *)&sense_codes) != USB_ERR_OK)
;source-doc/ufi-drv/ufi-init.c:61: if (ufi_read_write_sector((device_config *)dev, false, dev->current_lba, 1, buffer, (uint8_t *)&sense_codes) != USB_ERR_OK)
ld e,(ix+4) ld e,(ix+4)
ld d,(ix+5) ld d,(ix+5)
ld hl,12 ld hl,12
@ -260,21 +262,24 @@ l_chufi_read_00102:
pop bc pop bc
or a or a
jr Z,l_chufi_read_00104 jr Z,l_chufi_read_00104
;source-doc/ufi-drv/./ufi-init.c:62: return -1; // general error
;source-doc/ufi-drv/ufi-init.c:62: return -1; // general error
ld l,0xff ld l,0xff
jr l_chufi_read_00109 jr l_chufi_read_00109
l_chufi_read_00104: l_chufi_read_00104:
;source-doc/ufi-drv/./ufi-init.c:65: memset(&response, 0, sizeof(response));
;source-doc/ufi-drv/ufi-init.c:65: memset(&response, 0, sizeof(response));
push bc push bc
ld hl,4 ld hl,4
add hl, sp add hl, sp
ld b,0x12
ld b,0x09
l_chufi_read_00139: l_chufi_read_00139:
ld (hl),0x00
xor a
ld (hl), a
inc hl
ld (hl), a
inc hl inc hl
djnz l_chufi_read_00139 djnz l_chufi_read_00139
pop bc pop bc
;source-doc/ufi-drv/./ufi-init.c:67: if ((result = ufi_request_sense((device_config *)dev, &response)) != USB_ERR_OK)
;source-doc/ufi-drv/ufi-init.c:67: if ((result = ufi_request_sense((device_config *)dev, &response)) != USB_ERR_OK)
ld hl,2 ld hl,2
add hl, sp add hl, sp
push hl push hl
@ -285,29 +290,29 @@ l_chufi_read_00139:
ld a, l ld a, l
or a or a
jr Z,l_chufi_read_00106 jr Z,l_chufi_read_00106
;source-doc/ufi-drv/./ufi-init.c:68: return -1; // error
;source-doc/ufi-drv/ufi-init.c:68: return -1; // error
ld l,0xff ld l,0xff
jr l_chufi_read_00109 jr l_chufi_read_00109
l_chufi_read_00106: l_chufi_read_00106:
;source-doc/ufi-drv/./ufi-init.c:72: const uint8_t sense_key = response.sense_key;
;source-doc/ufi-drv/ufi-init.c:72: const uint8_t sense_key = response.sense_key;
ld hl,4 ld hl,4
add hl, sp add hl, sp
ld a, (hl) ld a, (hl)
;source-doc/ufi-drv/./ufi-init.c:74: if (sense_key != 0)
;source-doc/ufi-drv/ufi-init.c:74: if (sense_key != 0)
and 0x0f and 0x0f
jr Z,l_chufi_read_00108 jr Z,l_chufi_read_00108
;source-doc/ufi-drv/./ufi-init.c:75: return -1;
;source-doc/ufi-drv/ufi-init.c:75: return -1;
ld l,0xff ld l,0xff
jr l_chufi_read_00109 jr l_chufi_read_00109
l_chufi_read_00108: l_chufi_read_00108:
;source-doc/ufi-drv/./ufi-init.c:77: return USB_ERR_OK;
;source-doc/ufi-drv/ufi-init.c:77: return USB_ERR_OK;
ld l,0x00 ld l,0x00
l_chufi_read_00109: l_chufi_read_00109:
;source-doc/ufi-drv/./ufi-init.c:78: }
;source-doc/ufi-drv/ufi-init.c:78: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret
;source-doc/ufi-drv/./ufi-init.c:80: usb_error chufi_write(device_config_storage *const dev, uint8_t *const buffer) {
;source-doc/ufi-drv/ufi-init.c:80: usb_error chufi_write(device_config_storage *const dev, uint8_t *const buffer) {
; --------------------------------- ; ---------------------------------
; Function chufi_write ; Function chufi_write
; --------------------------------- ; ---------------------------------
@ -318,7 +323,7 @@ _chufi_write:
ld hl, -20 ld hl, -20
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/ufi-drv/./ufi-init.c:82: if (wait_for_device_ready((device_config *)dev, 20) != 0)
;source-doc/ufi-drv/ufi-init.c:82: if (wait_for_device_ready((device_config *)dev, 20) != 0)
ld c,(ix+4) ld c,(ix+4)
ld b,(ix+5) ld b,(ix+5)
push bc push bc
@ -329,23 +334,22 @@ _chufi_write:
call _wait_for_device_ready call _wait_for_device_ready
pop af pop af
inc sp inc sp
ld e, l
ld a, l
pop bc pop bc
ld a, e
or a or a
jr Z,l_chufi_write_00102 jr Z,l_chufi_write_00102
;source-doc/ufi-drv/./ufi-init.c:83: return -1; // Not READY!
;source-doc/ufi-drv/ufi-init.c:83: return -1; // Not READY!
ld l,0xff ld l,0xff
jr l_chufi_write_00109 jr l_chufi_write_00109
l_chufi_write_00102: l_chufi_write_00102:
;source-doc/ufi-drv/./ufi-init.c:87: memset(&sense_codes, 0, sizeof(sense_codes));
;source-doc/ufi-drv/ufi-init.c:87: memset(&sense_codes, 0, sizeof(sense_codes));
ld hl,0 ld hl,0
add hl, sp add hl, sp
xor a xor a
ld (hl), a ld (hl), a
inc hl inc hl
ld (hl), a ld (hl), a
;source-doc/ufi-drv/./ufi-init.c:88: if ((ufi_read_write_sector((device_config *)dev, true, dev->current_lba, 1, buffer, (uint8_t *)&sense_codes)) != USB_ERR_OK) {
;source-doc/ufi-drv/ufi-init.c:88: if ((ufi_read_write_sector((device_config *)dev, true, dev->current_lba, 1, buffer, (uint8_t *)&sense_codes)) != USB_ERR_OK) {
ld e,(ix+4) ld e,(ix+4)
ld d,(ix+5) ld d,(ix+5)
ld hl,12 ld hl,12
@ -378,21 +382,24 @@ l_chufi_write_00102:
pop bc pop bc
or a or a
jr Z,l_chufi_write_00104 jr Z,l_chufi_write_00104
;source-doc/ufi-drv/./ufi-init.c:89: return -1;
;source-doc/ufi-drv/ufi-init.c:89: return -1;
ld l,0xff ld l,0xff
jr l_chufi_write_00109 jr l_chufi_write_00109
l_chufi_write_00104: l_chufi_write_00104:
;source-doc/ufi-drv/./ufi-init.c:93: memset(&response, 0, sizeof(response));
;source-doc/ufi-drv/ufi-init.c:93: memset(&response, 0, sizeof(response));
push bc push bc
ld hl,4 ld hl,4
add hl, sp add hl, sp
ld b,0x12
ld b,0x09
l_chufi_write_00139: l_chufi_write_00139:
ld (hl),0x00
xor a
ld (hl), a
inc hl
ld (hl), a
inc hl inc hl
djnz l_chufi_write_00139 djnz l_chufi_write_00139
pop bc pop bc
;source-doc/ufi-drv/./ufi-init.c:95: if ((ufi_request_sense((device_config *)dev, &response)) != USB_ERR_OK) {
;source-doc/ufi-drv/ufi-init.c:95: if ((ufi_request_sense((device_config *)dev, &response)) != USB_ERR_OK) {
ld hl,2 ld hl,2
add hl, sp add hl, sp
push hl push hl
@ -403,25 +410,25 @@ l_chufi_write_00139:
ld a, l ld a, l
or a or a
jr Z,l_chufi_write_00106 jr Z,l_chufi_write_00106
;source-doc/ufi-drv/./ufi-init.c:96: return -1;
;source-doc/ufi-drv/ufi-init.c:96: return -1;
ld l,0xff ld l,0xff
jr l_chufi_write_00109 jr l_chufi_write_00109
l_chufi_write_00106: l_chufi_write_00106:
;source-doc/ufi-drv/./ufi-init.c:101: const uint8_t sense_key = response.sense_key;
;source-doc/ufi-drv/ufi-init.c:101: const uint8_t sense_key = response.sense_key;
ld hl,4 ld hl,4
add hl, sp add hl, sp
ld a, (hl) ld a, (hl)
;source-doc/ufi-drv/./ufi-init.c:103: if (sense_key != 0)
;source-doc/ufi-drv/ufi-init.c:103: if (sense_key != 0)
and 0x0f and 0x0f
jr Z,l_chufi_write_00108 jr Z,l_chufi_write_00108
;source-doc/ufi-drv/./ufi-init.c:104: return -1;
;source-doc/ufi-drv/ufi-init.c:104: return -1;
ld l,0xff ld l,0xff
jr l_chufi_write_00109 jr l_chufi_write_00109
l_chufi_write_00108: l_chufi_write_00108:
;source-doc/ufi-drv/./ufi-init.c:106: return USB_ERR_OK;
;source-doc/ufi-drv/ufi-init.c:106: return USB_ERR_OK;
ld l,0x00 ld l,0x00
l_chufi_write_00109: l_chufi_write_00109:
;source-doc/ufi-drv/./ufi-init.c:107: }
;source-doc/ufi-drv/ufi-init.c:107: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret

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

@ -0,0 +1,599 @@
;--------------------------------------------------------
; 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

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

@ -1,5 +1,5 @@
; ;
; Generated from source-doc/ufi-drv/./usb_cbi.c.asm -- not to be modify directly
; Generated from source-doc/ufi-drv/usb_cbi.c.asm -- not to be modify directly
; ;
; ;
;-------------------------------------------------------- ;--------------------------------------------------------
@ -50,7 +50,7 @@ _cbi2_adsc:
;-------------------------------------------------------- ;--------------------------------------------------------
; code ; code
;-------------------------------------------------------- ;--------------------------------------------------------
;source-doc/ufi-drv/./usb_cbi.c:10: usb_error usb_execute_cbi(device_config *const storage_device,
;source-doc/ufi-drv/usb_cbi.c:10: usb_error usb_execute_cbi(device_config *const storage_device,
; --------------------------------- ; ---------------------------------
; Function usb_execute_cbi ; Function usb_execute_cbi
; --------------------------------- ; ---------------------------------
@ -61,33 +61,33 @@ _usb_execute_cbi:
ld hl, -8 ld hl, -8
add hl, sp add hl, sp
ld sp, hl ld sp, hl
;source-doc/ufi-drv/./usb_cbi.c:17: const uint8_t interface_number = storage_device->interface_number;
ld c,(ix+4)
ld b,(ix+5)
ld l, c
ld h, b
;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
inc hl inc hl
ld e, (hl) ld e, (hl)
;source-doc/ufi-drv/./usb_cbi.c:20: adsc = cbi2_adsc;
;source-doc/ufi-drv/usb_cbi.c:20: adsc = cbi2_adsc;
push de push de
push bc push bc
ex de, hl ex de, hl
ld hl,4 ld hl,4
add hl, sp add hl, sp
ex de, hl ex de, hl
ld hl,_cbi2_adsc
ld bc,0x0008 ld bc,0x0008
ld hl,_cbi2_adsc
ldir ldir
pop bc pop bc
pop de pop de
;source-doc/ufi-drv/./usb_cbi.c:21: adsc.bIndex[0] = interface_number;
;source-doc/ufi-drv/usb_cbi.c:21: adsc.bIndex[0] = interface_number;
ld (ix-4),e ld (ix-4),e
;source-doc/ufi-drv/./usb_cbi.c:23: critical_begin();
;source-doc/ufi-drv/usb_cbi.c:23: critical_begin();
push bc push bc
call _critical_begin call _critical_begin
pop bc pop bc
;source-doc/ufi-drv/./usb_cbi.c:25: result = usbdev_control_transfer(storage_device, &adsc, (uint8_t *const)cmd);
;source-doc/ufi-drv/usb_cbi.c:25: result = usbdev_control_transfer(storage_device, &adsc, (uint8_t *const)cmd);
ld l,(ix+6) ld l,(ix+6)
ld h,(ix+7) ld h,(ix+7)
push hl push hl
@ -101,15 +101,15 @@ _usb_execute_cbi:
pop af pop af
ld a, l ld a, l
ld (_result), a ld (_result), a
;source-doc/ufi-drv/./usb_cbi.c:27: if (result == USB_ERR_STALL) {
;source-doc/ufi-drv/usb_cbi.c:27: if (result == USB_ERR_STALL) {
ld a,(_result) ld a,(_result)
sub 0x02 sub 0x02
jr NZ,l_usb_execute_cbi_00104 jr NZ,l_usb_execute_cbi_00104
;source-doc/ufi-drv/./usb_cbi.c:28: if (sense_codes != NULL)
;source-doc/ufi-drv/usb_cbi.c:28: if (sense_codes != NULL)
ld a,(ix+14) ld a,(ix+14)
or (ix+13) or (ix+13)
jr Z,l_usb_execute_cbi_00102 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);
;source-doc/ufi-drv/usb_cbi.c:29: usbdev_dat_in_trnsfer(storage_device, sense_codes, 2, ENDPOINT_INTERRUPT_IN);
ld a,0x02 ld a,0x02
push af push af
inc sp inc sp
@ -122,25 +122,24 @@ _usb_execute_cbi:
ld h,(ix+5) ld h,(ix+5)
push hl push hl
call _usbdev_dat_in_trnsfer call _usbdev_dat_in_trnsfer
pop af
pop af
pop af
inc sp
ld hl,7
add hl, sp
ld sp, hl
l_usb_execute_cbi_00102: l_usb_execute_cbi_00102:
;source-doc/ufi-drv/./usb_cbi.c:31: result = USB_ERR_STALL;
;source-doc/ufi-drv/usb_cbi.c:31: result = USB_ERR_STALL;
ld hl,_result ld hl,_result
ld (hl),0x02 ld (hl),0x02
;source-doc/ufi-drv/./usb_cbi.c:32: goto done;
;source-doc/ufi-drv/usb_cbi.c:32: goto done;
jp l_usb_execute_cbi_00116 jp l_usb_execute_cbi_00116
l_usb_execute_cbi_00104: l_usb_execute_cbi_00104:
;source-doc/ufi-drv/./usb_cbi.c:35: if (result != USB_ERR_OK) {
;source-doc/ufi-drv/usb_cbi.c:35: if (result != USB_ERR_OK) {
ld a,(_result) ld a,(_result)
or a or a
jp NZ, l_usb_execute_cbi_00116 jp NZ, l_usb_execute_cbi_00116
;source-doc/ufi-drv/./usb_cbi.c:40: if (send) {
;source-doc/ufi-drv/usb_cbi.c:40: if (send) {
bit 0,(ix+8) bit 0,(ix+8)
jr Z,l_usb_execute_cbi_00112 jr Z,l_usb_execute_cbi_00112
;source-doc/ufi-drv/./usb_cbi.c:41: result = usbdev_blk_out_trnsfer(storage_device, buffer, buffer_size);
;source-doc/ufi-drv/usb_cbi.c:41: result = usbdev_blk_out_trnsfer(storage_device, buffer, buffer_size);
ld l,(ix+9) ld l,(ix+9)
ld h,(ix+10) ld h,(ix+10)
push hl push hl
@ -156,14 +155,14 @@ l_usb_execute_cbi_00104:
pop af pop af
ld a, l ld a, l
ld (_result), a ld (_result), a
;source-doc/ufi-drv/./usb_cbi.c:43: if (result != USB_ERR_OK) {
;source-doc/ufi-drv/usb_cbi.c:43: if (result != USB_ERR_OK) {
ld a,(_result) ld a,(_result)
or a or a
jr Z,l_usb_execute_cbi_00113 jr Z,l_usb_execute_cbi_00113
;source-doc/ufi-drv/./usb_cbi.c:45: goto done;
;source-doc/ufi-drv/usb_cbi.c:45: goto done;
jr l_usb_execute_cbi_00116 jr l_usb_execute_cbi_00116
l_usb_execute_cbi_00112: 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);
;source-doc/ufi-drv/usb_cbi.c:48: result = usbdev_dat_in_trnsfer(storage_device, buffer, buffer_size, ENDPOINT_BULK_IN);
ld a,0x01 ld a,0x01
push af push af
inc sp inc sp
@ -183,17 +182,17 @@ l_usb_execute_cbi_00112:
inc sp inc sp
ld a, l ld a, l
ld (_result), a ld (_result), a
;source-doc/ufi-drv/./usb_cbi.c:50: if (result != USB_ERR_OK) {
;source-doc/ufi-drv/usb_cbi.c:50: if (result != USB_ERR_OK) {
ld a,(_result) ld a,(_result)
or a or a
jr NZ,l_usb_execute_cbi_00116 jr NZ,l_usb_execute_cbi_00116
;source-doc/ufi-drv/./usb_cbi.c:52: goto done;
;source-doc/ufi-drv/usb_cbi.c:52: goto done;
l_usb_execute_cbi_00113: l_usb_execute_cbi_00113:
;source-doc/ufi-drv/./usb_cbi.c:56: if (sense_codes != NULL) {
;source-doc/ufi-drv/usb_cbi.c:56: if (sense_codes != NULL) {
ld a,(ix+14) ld a,(ix+14)
or (ix+13) or (ix+13)
jr Z,l_usb_execute_cbi_00116 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);
;source-doc/ufi-drv/usb_cbi.c:57: result = usbdev_dat_in_trnsfer(storage_device, sense_codes, 2, ENDPOINT_INTERRUPT_IN);
ld a,0x02 ld a,0x02
push af push af
inc sp inc sp
@ -212,14 +211,13 @@ l_usb_execute_cbi_00113:
inc sp inc sp
ld a, l ld a, l
ld (_result), a ld (_result), a
;source-doc/ufi-drv/./usb_cbi.c:65: done:
;source-doc/ufi-drv/usb_cbi.c:65: done:
l_usb_execute_cbi_00116: l_usb_execute_cbi_00116:
;source-doc/ufi-drv/./usb_cbi.c:66: critical_end();
;source-doc/ufi-drv/usb_cbi.c:66: critical_end();
call _critical_end call _critical_end
;source-doc/ufi-drv/./usb_cbi.c:68: return result;
ld hl,_result
ld l, (hl)
;source-doc/ufi-drv/./usb_cbi.c:69: }
;source-doc/ufi-drv/usb_cbi.c:68: return result;
ld hl,(_result)
;source-doc/ufi-drv/usb_cbi.c:69: }
ld sp, ix ld sp, ix
pop ix pop ix
ret ret

11
Source/HBIOS/util.asm

@ -578,17 +578,6 @@ DELAY1: ; |
; --- LOOP = ((CPUSCL * 16) - 5) TS ------------+ | ; --- LOOP = ((CPUSCL * 16) - 5) TS ------------+ |
DEC A ; 4TS | | DEC A ; 4TS | |
#IF (BIOS == BIOS_WBW) ; | | #IF (BIOS == BIOS_WBW) ; | |
#IF (CPUFAM == CPU_EZ80) ; | |
OR A ; +?TS FOR EZ80 | |
OR A ; +?TS FOR EZ80 | |
OR A ; +?TS FOR EZ80 | |
OR A ; +?TS FOR EZ80 | |
OR A ; +?TS FOR EZ80 | |
OR A ; +?TS FOR EZ80 | |
OR A ; +?TS FOR EZ80 | |
OR A ; +?TS FOR EZ80 | |
OR A ; +?TS FOR EZ80 | |
#ENDIF ; | |
#IF (CPUFAM == CPU_Z180) ; | | #IF (CPUFAM == CPU_Z180) ; | |
OR A ; +4TS FOR Z180 | | OR A ; +4TS FOR Z180 | |
#ENDIF ; | | #ENDIF ; | |

Loading…
Cancel
Save