Browse Source

ch376-native: added new config CHNATIVEEZ80 to enable use of ez80's firmware version of usb support

pull/592/head
Dean Netherton 9 months ago
parent
commit
d1722923fd
  1. 5
      Source/HBIOS/Config/RCEZ80_std.asm
  2. 20
      Source/HBIOS/ch376-native/Makefile
  3. 24
      Source/HBIOS/ch376-native/base-drv.s
  4. 14
      Source/HBIOS/ch376-native/base-drv/usb_state.c.s
  5. 91
      Source/HBIOS/ch376-native/ez80-firmware.asm
  6. 8
      Source/HBIOS/ch376-native/keyboard.s
  7. 28
      Source/HBIOS/ch376-native/keyboard/kyb-init.c.s
  8. 4
      Source/HBIOS/ch376-native/scsi-drv.s
  9. 62
      Source/HBIOS/ch376-native/scsi-drv/scsi-init.c.s
  10. 2
      Source/HBIOS/ch376-native/source-doc/base-drv/usb_state.c
  11. 2
      Source/HBIOS/ch376-native/source-doc/base-drv/usb_state.h
  12. 2
      Source/HBIOS/ch376-native/source-doc/keyboard/kyb-init.c
  13. 4
      Source/HBIOS/ch376-native/source-doc/scsi-drv/scsi-init.c
  14. 4
      Source/HBIOS/ch376-native/source-doc/ufi-drv/ufi-init.c
  15. 6
      Source/HBIOS/ch376-native/ufi-drv.s
  16. 69
      Source/HBIOS/ch376-native/ufi-drv/ufi-init.c.s
  17. 21
      Source/HBIOS/ch376.asm
  18. 9
      Source/HBIOS/ch376kyb.asm
  19. 1
      Source/HBIOS/ch376scsi.asm
  20. 1
      Source/HBIOS/ch376ufi.asm
  21. 52
      Source/HBIOS/ez80cpudrv.asm
  22. 17
      Source/HBIOS/ez80instr.inc
  23. 22
      Source/HBIOS/hbios.asm

5
Source/HBIOS/Config/RCEZ80_std.asm

@ -55,7 +55,7 @@ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD
;;
TMSENABLE .SET TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM)
TMSMODE .SET TMSMODE_MSXUKY ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU|MSXUKY]
TMSMODE .SET TMSMODE_MSX ;UKY ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU|MSXUKY]
TMS80COLS .SET TRUE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958
TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1)
VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM)
@ -89,6 +89,7 @@ CH1USBENABLE .SET FALSE ; CH376: ENABLE CH376 USB DRIVER
CHNATIVEENABLE .SET TRUE ; CH376: ENABLE CH376 NATIVE USB DRIVER
CHNATIVEFORCE .SET TRUE ; CH376: DISABLE AUTO-DETECTION OF MODULE - ASSUME ITS INSTALLED
CHSCSIENABLE .SET TRUE ; CH376: ENABLE CH376 NATIVE MASS STORAGE DEVICES (REQUIRES CHNATIVEENABLE)
CHUFIENABLE .SET TRUE ; CH376: ENABLE CH376 NATIVE UFI FLOPPY DISK DEVICES (REQUIRES CHNATIVEENABLE)
CHUFIENABLE .SET FALSE ; CH376: ENABLE CH376 NATIVE UFI FLOPPY DISK DEVICES (REQUIRES CHNATIVEENABLE)
CHNATIVEEZ80 .SET TRUE
EZ80TIMER .SET EZ80TMR_INT ; EZ80: TIMER TICK MODEL: EZ80TMR_[INT|FIRM]

20
Source/HBIOS/ch376-native/Makefile

@ -59,6 +59,8 @@ define compile
echo "Compiled $(notdir $@) from $(notdir $<)"
endef
FIRMWARE_ALT = kyb-init ch376_init scsi-init ufi-init hbios-driver-storage
define build_subsystem =
$$(ASSDIR)$(1).s:
@echo "Creating $(1).s"
@ -66,10 +68,22 @@ $$(ASSDIR)$(1).s:
for dep in $$^; do
dep=$$$${dep#*/}
dep=$$$${dep#*/}
if [ -n "$$$${dep%%*.asm}" ]; then
echo '#include "'ch376-native/$(1)/$$$${dep}'"' >> $$(ASSDIR)$(1).s
filename=$$$${dep##*/}
basename=$$$${filename%.*.*}
if echo "$(FIRMWARE_ALT)" | grep -w -q "$$$${basename}"; then
if [ -n "$$$${dep%%*.asm}" ]; then
echo '#include "'ch376-native/$(1)/$$$${dep}'"' >> $$(ASSDIR)$(1).s
else
echo '#include "'ch376-native/source-doc/$(1)/$$$${dep}'"' >> $$(ASSDIR)$(1).s
fi
else
echo '#include "'ch376-native/source-doc/$(1)/$$$${dep}'"' >> $$(ASSDIR)$(1).s
echo '#IF (!CHNATIVEEZ80)' >> $$(ASSDIR)$(1).s
if [ -n "$$$${dep%%*.asm}" ]; then
echo '#include "'ch376-native/$(1)/$$$${dep}'"' >> $$(ASSDIR)$(1).s
else
echo '#include "'ch376-native/source-doc/$(1)/$$$${dep}'"' >> $$(ASSDIR)$(1).s
fi
echo '#ENDIF' >> $$(ASSDIR)$(1).s
fi
done

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

@ -1,15 +1,39 @@
; Generated File -- not to be modify directly
#IF (!CHNATIVEEZ80)
#include "ch376-native/base-drv/ch376.c.s"
#ENDIF
#include "ch376-native/base-drv/ch376_init.c.s"
#IF (!CHNATIVEEZ80)
#include "ch376-native/base-drv/class_hub.c.s"
#ENDIF
#IF (!CHNATIVEEZ80)
#include "ch376-native/base-drv/critical-section.c.s"
#ENDIF
#IF (!CHNATIVEEZ80)
#include "ch376-native/base-drv/dev_transfers.c.s"
#ENDIF
#IF (!CHNATIVEEZ80)
#include "ch376-native/base-drv/enumerate.c.s"
#ENDIF
#IF (!CHNATIVEEZ80)
#include "ch376-native/base-drv/enumerate_hub.c.s"
#ENDIF
#IF (!CHNATIVEEZ80)
#include "ch376-native/base-drv/enumerate_storage.c.s"
#ENDIF
#include "ch376-native/base-drv/hbios-driver-storage.c.s"
#IF (!CHNATIVEEZ80)
#include "ch376-native/base-drv/protocol.c.s"
#ENDIF
#IF (!CHNATIVEEZ80)
#include "ch376-native/base-drv/transfers.c.s"
#ENDIF
#IF (!CHNATIVEEZ80)
#include "ch376-native/base-drv/usb-base-drv.c.s"
#ENDIF
#IF (!CHNATIVEEZ80)
#include "ch376-native/base-drv/usb_state.c.s"
#ENDIF
#IF (!CHNATIVEEZ80)
#include "ch376-native/base-drv/work-area.c.s"
#ENDIF

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

@ -230,11 +230,11 @@ l_get_usb_device_config_00105:
l_get_usb_device_config_00109:
;source-doc/base-drv/usb_state.c:88: }
ret
;source-doc/base-drv/usb_state.c:90: usb_device_type get_usb_device_type(const uint8_t dev_index) {
;source-doc/base-drv/usb_state.c:90: usb_device_type usb_get_device_type(const uint16_t dev_index) {
; ---------------------------------
; Function get_usb_device_type
; Function usb_get_device_type
; ---------------------------------
_get_usb_device_type:
_usb_get_device_type:
push ix
ld ix,0
add ix,sp
@ -246,16 +246,16 @@ _get_usb_device_type:
ld a,d
ld h,a
or e
jr NZ,l_get_usb_device_type_00102
jr NZ,l_usb_get_device_type_00102
;source-doc/base-drv/usb_state.c:94: return -1;
ld l,0xff
jr l_get_usb_device_type_00103
l_get_usb_device_type_00102:
jr l_usb_get_device_type_00103
l_usb_get_device_type_00102:
;source-doc/base-drv/usb_state.c:96: return dev->type;
ld a, (hl)
and 0x0f
ld l, a
l_get_usb_device_type_00103:
l_usb_get_device_type_00103:
;source-doc/base-drv/usb_state.c:97: }
pop ix
ret

91
Source/HBIOS/ch376-native/ez80-firmware.asm

@ -0,0 +1,91 @@
; delegate usb function to firmware of ez80 module
; extern uint16_t usb_init(uint8_t state) __z88dk_fastcall;
_usb_init:
EZ80_EX_USB_INIT
RET
; usb_error usb_scsi_seek(const uint16_t dev_index, const uint32_t lba)
_usb_scsi_seek:
; iy+2 : dev_index
; iy+4:5:6:7 : lba
LD IY, 0
ADD IY, SP
EZ80_EXTN_IY_TO_MB_IY
LD C, (IY+2)
LD_DE_IY_P_.L(4) ; LD.L DE, (IY+4)
LD L, (IY+7)
EZ80_EX_USB_STORAGE_SEEK
LD L, A
RET
; usb_error usb_scsi_init(const uint16_t dev_index)
_usb_scsi_init:
LD IY, 0
ADD IY, SP
LD C, (IY+2)
EZ80_EX_USB_SCSI_INIT
LD L, A
RET
; usb_error usb_scsi_read(const uint16_t dev_index, uint8_t *const buffer);
_usb_scsi_read:
LD IY, 0
ADD IY, SP
LD C, (IY+2)
LD E, (IY+4)
LD D, (IY+5)
EZ80_EXTN_DE_TO_MB_DE
EZ80_EX_USB_SCSI_READ
LD L, A
RET
; usb_error usb_scsi_write(const uint16_t dev_index, uint8_t *const buffer)
_usb_scsi_write:
LD IY, 0
ADD IY, SP
LD C, (IY+2)
LD E, (IY+4)
LD D, (IY+5)
EZ80_EXTN_DE_TO_MB_DE
EZ80_EX_USB_SCSI_WRITE
LD L, A
RET
; usb_error usb_scsi_read_capacity(const uint16_t dev_index, scsi_read_capacity_result *cap_result)
_usb_scsi_read_capacity:
LD IY, 0
ADD IY, SP
LD C, (IY+2)
LD E, (IY+4)
LD D, (IY+5)
EZ80_EXTN_DE_TO_MB_DE
EZ80_EX_USB_SCSI_READ_CAP
LD L, A
RET
_usb_ufi_read:
_usb_ufi_write:
_usb_ufi_get_cap:
_usb_kyb_flush:
_usb_kyb_report:
_usb_kyb_buf_get_next:
_usb_kyb_init:
RET
;usb_device_type usb_get_device_type(const uint16_t dev_index)
_usb_get_device_type:
LD IY, 0
ADD IY, SP
LD C, (IY+2)
EZ80_EX_USB_GET_DEV_TYPE
LD L, A
RET

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

@ -1,6 +1,14 @@
; Generated File -- not to be modify directly
#IF (!CHNATIVEEZ80)
#include "ch376-native/keyboard/class_hid.c.s"
#ENDIF
#IF (!CHNATIVEEZ80)
#include "ch376-native/keyboard/class_hid_keyboard.c.s"
#ENDIF
#include "ch376-native/keyboard/kyb-init.c.s"
#IF (!CHNATIVEEZ80)
#include "ch376-native/keyboard/kyb_driver.c.s"
#ENDIF
#IF (!CHNATIVEEZ80)
#include "ch376-native/source-doc/keyboard/kyb_driver.asm"
#ENDIF

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

@ -59,26 +59,30 @@ _keyboard_init:
dec sp
;source-doc/keyboard/kyb-init.c:7: uint8_t index = 1;
;source-doc/keyboard/kyb-init.c:9: do {
ld b,0x01
ld (ix-1),b
ld c,0x01
ld (ix-1),c
l_keyboard_init_00103:
;source-doc/keyboard/kyb-init.c:10: usb_device_type t = get_usb_device_type(index);
;source-doc/keyboard/kyb-init.c:10: usb_device_type t = usb_get_device_type(index);
ld e, c
ld d,0x00
push bc
push bc
inc sp
call _get_usb_device_type
inc sp
push de
push de
call _usb_get_device_type
pop af
ld a, l
pop de
pop bc
;source-doc/keyboard/kyb-init.c:12: if (t == USB_IS_KEYBOARD) {
sub 0x04
jr NZ,l_keyboard_init_00104
;source-doc/keyboard/kyb-init.c:13: print_string("\r\nUSB: KEYBOARD @ $");
push de
ld hl,kyb_init_str_0
call _print_string
pop de
;source-doc/keyboard/kyb-init.c:14: print_uint16(index);
ld l,(ix-1)
ld h,0x00
ex de, hl
call _print_uint16
;source-doc/keyboard/kyb-init.c:15: print_string(" $");
ld hl,kyb_init_str_1
@ -94,9 +98,9 @@ l_keyboard_init_00103:
jr l_keyboard_init_00106
l_keyboard_init_00104:
;source-doc/keyboard/kyb-init.c:20: } while (++index != MAX_NUMBER_OF_DEVICES + 1);
inc b
ld (ix-1),b
ld a, b
inc c
ld (ix-1),c
ld a, c
sub 0x07
jr NZ,l_keyboard_init_00103
;source-doc/keyboard/kyb-init.c:22: print_string("\r\nUSB: KEYBOARD: NOT FOUND$");

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

@ -1,4 +1,8 @@
; Generated File -- not to be modify directly
#IF (!CHNATIVEEZ80)
#include "ch376-native/scsi-drv/class_scsi.c.s"
#ENDIF
#include "ch376-native/scsi-drv/scsi-init.c.s"
#IF (!CHNATIVEEZ80)
#include "ch376-native/scsi-drv/scsi_driver.c.s"
#ENDIF

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

@ -61,71 +61,71 @@ _chscsi_init:
;source-doc/scsi-drv/scsi-init.c:11: do {
ld (ix-1),0x01
l_chscsi_init_00103:
;source-doc/scsi-drv/scsi-init.c:12: usb_device_type t = get_usb_device_type(index);
;source-doc/scsi-drv/scsi-init.c:12: usb_device_type t = usb_get_device_type(index);
ld a,(ix-1)
push af
inc sp
call _get_usb_device_type
inc sp
ld (ix-3),a
ld (ix-2),0x00
pop hl
push hl
push hl
call _usb_get_device_type
pop af
ld a, l
;source-doc/scsi-drv/scsi-init.c:14: if (t == USB_IS_MASS_STORAGE) {
sub 0x02
jr NZ,l_chscsi_init_00104
;source-doc/scsi-drv/scsi-init.c:15: const uint8_t dev_index = find_storage_dev(); // index == -1 (no more left) should never happen
call _find_storage_dev
;source-doc/scsi-drv/scsi-init.c:17: hbios_usb_storage_devices[dev_index].drive_index = dev_index + 1;
ld c,l
ld e,l
ld d,0x00
ld a, e
ld b, d
;source-doc/scsi-drv/scsi-init.c:17: hbios_usb_storage_devices[dev_index].drive_index = dev_index+1;
ld a, l
ld c,0x00
add a, a
rl b
rl c
add a, +((_hbios_usb_storage_devices) & 0xFF)
ld (ix-3),a
ld a, b
ld e, a
ld a, c
adc a, +((_hbios_usb_storage_devices) / 256)
ld (ix-2),a
pop hl
push hl
inc c
ld (hl), c
ld d, a
ld c, e
ld b, d
ld a, l
inc a
ld (bc), a
;source-doc/scsi-drv/scsi-init.c:18: hbios_usb_storage_devices[dev_index].usb_device = index;
pop bc
push bc
ld c, e
ld b, d
inc bc
ld a,(ix-1)
ld (bc), a
;source-doc/scsi-drv/scsi-init.c:20: print_string("\r\nUSB: MASS STORAGE @ $");
push hl
push de
ld hl,scsi_init_str_0
call _print_string
pop de
;source-doc/scsi-drv/scsi-init.c:21: print_uint16(index);
ld l,(ix-1)
ld l,(ix-3)
ld h,0x00
push hl
push de
call _print_uint16
;source-doc/scsi-drv/scsi-init.c:22: print_string(":$");
ld hl,scsi_init_str_1
call _print_string
pop de
pop hl
;source-doc/scsi-drv/scsi-init.c:23: print_uint16(dev_index + 1);
inc de
push hl
ex de, hl
;source-doc/scsi-drv/scsi-init.c:23: print_uint16(dev_index);
ld h,0x00
push de
call _print_uint16
;source-doc/scsi-drv/scsi-init.c:24: print_string(" $");
ld hl,scsi_init_str_2
call _print_string
;source-doc/scsi-drv/scsi-init.c:25: usb_scsi_init(index);
ld l,(ix-3)
ld h,0x00
push hl
call _usb_scsi_init
pop af
;source-doc/scsi-drv/scsi-init.c:26: dio_add_entry(ch_scsi_fntbl, &hbios_usb_storage_devices[dev_index]);
pop de
push de
;source-doc/scsi-drv/scsi-init.c:26: dio_add_entry(ch_scsi_fntbl, &hbios_usb_storage_devices[dev_index]);
ld hl,_ch_scsi_fntbl
call _dio_add_entry
l_chscsi_init_00104:

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

@ -87,7 +87,7 @@ device_config *get_usb_device_config(const uint8_t device_index) __sdcccall(1) {
return NULL; // is not a usb device
}
usb_device_type get_usb_device_type(const uint8_t dev_index) {
usb_device_type usb_get_device_type(const uint16_t dev_index) {
const device_config *dev = get_usb_device_config(dev_index);
if (dev == NULL)

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

@ -21,6 +21,6 @@ extern device_config *find_first_free(void);
extern uint8_t count_of_devices(void) __sdcccall(1);
extern device_config *get_usb_device_config(const uint8_t device_index) __sdcccall(1);
extern usb_device_type get_usb_device_type(const uint8_t dev_index);
extern usb_device_type usb_get_device_type(const uint16_t dev_index);
#endif

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

@ -7,7 +7,7 @@ uint8_t keyboard_init(void) __sdcccall(1) {
uint8_t index = 1;
do {
usb_device_type t = get_usb_device_type(index);
usb_device_type t = usb_get_device_type(index);
if (t == USB_IS_KEYBOARD) {
print_string("\r\nUSB: KEYBOARD @ $");

4
Source/HBIOS/ch376-native/source-doc/scsi-drv/scsi-init.c

@ -9,7 +9,7 @@ extern const uint16_t const ch_scsi_fntbl[];
void chscsi_init(void) {
uint8_t index = 1;
do {
usb_device_type t = get_usb_device_type(index);
usb_device_type t = usb_get_device_type(index);
if (t == USB_IS_MASS_STORAGE) {
const uint8_t dev_index = find_storage_dev(); // index == -1 (no more left) should never happen
@ -20,7 +20,7 @@ void chscsi_init(void) {
print_string("\r\nUSB: MASS STORAGE @ $");
print_uint16(index);
print_string(":$");
print_uint16(dev_index + 1);
print_uint16(dev_index);
print_string(" $");
usb_scsi_init(index);
dio_add_entry(ch_scsi_fntbl, &hbios_usb_storage_devices[dev_index]);

4
Source/HBIOS/ch376-native/source-doc/ufi-drv/ufi-init.c

@ -9,7 +9,7 @@ void chufi_init(void) {
uint8_t index = 1;
do {
usb_device_type t = get_usb_device_type(index);
usb_device_type t = usb_get_device_type(index);
if (t == USB_IS_FLOPPY) {
const uint8_t dev_index = find_storage_dev(); // dev_index == -1 (no more left) should never happen
@ -20,7 +20,7 @@ void chufi_init(void) {
print_string("\r\nUSB: FLOPPY @ $");
print_uint16(index);
print_string(":$");
print_uint16(dev_index + 1);
print_uint16(dev_index);
print_string(" $");
dio_add_entry(ch_ufi_fntbl, &hbios_usb_storage_devices[dev_index]);
}

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

@ -1,5 +1,11 @@
; Generated File -- not to be modify directly
#IF (!CHNATIVEEZ80)
#include "ch376-native/ufi-drv/class_ufi.c.s"
#ENDIF
#include "ch376-native/ufi-drv/ufi-init.c.s"
#IF (!CHNATIVEEZ80)
#include "ch376-native/ufi-drv/ufi_driver.c.s"
#ENDIF
#IF (!CHNATIVEEZ80)
#include "ch376-native/ufi-drv/usb_cbi.c.s"
#ENDIF

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

@ -57,69 +57,66 @@ _chufi_init:
ld ix,0
add ix,sp
push af
dec sp
;source-doc/ufi-drv/ufi-init.c:11: do {
ld (ix-1),0x01
l_chufi_init_00103:
;source-doc/ufi-drv/ufi-init.c:12: usb_device_type t = get_usb_device_type(index);
ld a,(ix-1)
push af
inc sp
call _get_usb_device_type
inc sp
;source-doc/ufi-drv/ufi-init.c:12: usb_device_type t = usb_get_device_type(index);
ld e,(ix-1)
ld d,0x00
push de
push de
call _usb_get_device_type
pop af
pop de
;source-doc/ufi-drv/ufi-init.c:14: if (t == USB_IS_FLOPPY) {
dec l
jr NZ,l_chufi_init_00104
;source-doc/ufi-drv/ufi-init.c:15: const uint8_t dev_index = find_storage_dev(); // dev_index == -1 (no more left) should never happen
push de
call _find_storage_dev
;source-doc/ufi-drv/ufi-init.c:17: hbios_usb_storage_devices[dev_index].drive_index = dev_index + 1;
ld (ix-3),l
ld (ix-2),0x00
ld a,l
ld c,l
ld b,0x00
add a, a
rl b
add a, +((_hbios_usb_storage_devices) & 0xFF)
ld e, a
ld a, b
adc a, +((_hbios_usb_storage_devices) / 256)
ld d, a
ld l, e
ld h, d
inc c
ld (hl), c
ld (ix-2),l
pop de
;source-doc/ufi-drv/ufi-init.c:17: hbios_usb_storage_devices[dev_index].drive_index = dev_index+1;
ld l,(ix-2)
ld h,0x00
add hl, hl
ld bc,_hbios_usb_storage_devices
add hl, bc
ld a,(ix-2)
inc a
ld (hl),a
;source-doc/ufi-drv/ufi-init.c:18: hbios_usb_storage_devices[dev_index].usb_device = index;
ld c, e
ld b, d
inc bc
inc hl
ld a,(ix-1)
ld (bc), a
ld (hl),a
dec hl
;source-doc/ufi-drv/ufi-init.c:20: print_string("\r\nUSB: FLOPPY @ $");
push hl
push de
ld hl,ufi_init_str_0
call _print_string
pop de
pop hl
;source-doc/ufi-drv/ufi-init.c:21: print_uint16(index);
ld l,(ix-1)
ld h,0x00
push de
push hl
ex de, hl
call _print_uint16
;source-doc/ufi-drv/ufi-init.c:22: print_string(":$");
ld hl,ufi_init_str_1
call _print_string
pop de
;source-doc/ufi-drv/ufi-init.c:23: print_uint16(dev_index + 1);
pop hl
;source-doc/ufi-drv/ufi-init.c:23: print_uint16(dev_index);
ld e,(ix-2)
ld d,0x00
push hl
inc hl
push de
ex de, hl
call _print_uint16
;source-doc/ufi-drv/ufi-init.c:24: print_string(" $");
ld hl,ufi_init_str_2
call _print_string
pop de
pop hl
;source-doc/ufi-drv/ufi-init.c:25: dio_add_entry(ch_ufi_fntbl, &hbios_usb_storage_devices[dev_index]);
ex de, hl
ld hl,_ch_ufi_fntbl
call _dio_add_entry
l_chufi_init_00104:

21
Source/HBIOS/ch376.asm

@ -14,6 +14,17 @@ _print_hex:
ld a, l
JP PRTHEXBYTE
_dio_add_entry:
LD B, H
LD C, L
JP DIO_ADDENT ; ADD ENTRY TO GLOBAL DISK DEV TABLE
#IF (CHNATIVEEZ80)
#include "./ch376-native/ez80-firmware.asm"
#ELSE
_delay:
push af
call DELAY
@ -32,15 +43,13 @@ _delay_short:
; DELAY approx 1/2 second
_delay_medium .EQU LDELAY
_dio_add_entry:
LD B, H
LD C, L
JP DIO_ADDENT ; ADD ENTRY TO GLOBAL DISK DEV TABLE
#include "./ch376-native/cruntime.asm"
#include "./ch376-native/base-drv.asm"
#ENDIF
#include "./ch376-native/print.asm"
#include "./ch376-native/cruntime.asm"
#include "./ch376-native/base-drv.s"
CHNATIVE_INIT .EQU _chnative_init
CHNATIVE_INITF .EQU _chnative_init_force

9
Source/HBIOS/ch376kyb.asm

@ -9,13 +9,19 @@
#DEFINE DEFB .DB
#DEFINE DEFW .DW
#IF (!CHNATIVEEZ80)
#IF (SYSTIM == TM_NONE)
.ECHO "*** ERROR: MKY REQUIRES SYSTEM TIMER -- NONE CONFIGURED!!!\n"
!!! ; FORCE AN ASSEMBLY ERROR
#ENDIF
#ENDIF
#include "./ch376-native/keyboard.s"
#IF (CHNATIVEEZ80)
CHUKB_INIT .EQU _keyboard_init
#ELSE
; COUNT FOR INTERRUPT HANDLER TO TRIGGER KEYBOARD SCANNER (EG: SCAN KEYBOARD ONLY EVERY 2ND INTERRUPT (2/60))
SCAN_INT_PERIOD: .EQU 2
@ -76,6 +82,8 @@ UKY_INT_SP .EQU $ - 2
VEC_CHUKB_TICK:
JP HB_TICK
#ENDIF
; ### Function 0x4C -- Keyboard Status (VDAKST)
;
; Inputs:
@ -163,4 +171,3 @@ UKY_READ:
LD C, L
XOR A
RET

1
Source/HBIOS/ch376scsi.asm

@ -210,6 +210,7 @@ CH_SCSI_DEVICE:
LD C, %00111010
LD D, DIODEV_USB
LD E, (IY+0) ; drive_index
DEC E
LD HL, 0
XOR A
RET

1
Source/HBIOS/ch376ufi.asm

@ -212,6 +212,7 @@ CH_UFI_DEVICE:
LD C, %11010110
LD D, DIODEV_USB
LD E, (IY+0) ; drive_index
DEC E
LD HL, 0
XOR A
RET

52
Source/HBIOS/ez80cpudrv.asm

@ -40,13 +40,20 @@ EZ80_PREINIT:
LD A, 5
LD (HB_CPUTYPE),A
; DETECT IF USING ALT-FIRMWARE
LD A, C
AND $80
LD (EZ80_ALT_FIRM), A
LD (EZ80_PLT_VERSION), HL
LD (EZ80_PLT_VERSION+2), DE
; need version 0.4.x.x at miniumum
LD HL, 4-1
XOR A
SBC HL, DE
JR c, EZ80_VEROK
CPL
EZ80_VEROK:
LD (EZ80_VER_WARNING), A
EXX
LD A, C
LD (EZ80_BUILD_DATE), A ; DAY
@ -272,11 +279,12 @@ EZ80_RPT_FIRMWARE:
CALL PC_LEADING_ZERO
CALL PRTDECB
LD A, (EZ80_ALT_FIRM)
OR A
RET Z
CALL PRTSTRD
.TEXT " (ALT)$"
LD A, (EZ80_VER_WARNING)
OR A
RET Z
CALL PRTSTRD
.TEXT " (WARN-VER-OOD)$"
RET
PC_LEADING_ZERO:
@ -302,7 +310,7 @@ EZ80_PLT_FLSHWS:
EZ80_PLT_VERSION:
.DB 0, 0, 0, 0
EZ80_ALT_FIRM:
EZ80_VER_WARNING:
.DB 0
EZ80_BUILD_DATE:
@ -331,3 +339,27 @@ _EZ80_CPY_UHL_TO_EHL:
.DB $49, $E1 ; POP.L HL
POP IX
RET
; set the upper byte (u of DE) to MB.
_EZ80_EXTN_DE_TO_MB_DE:
PUSH IY
.DB $5B, $FD, $21, $00, $00, $00 ; LD.LIL IY, 0
.DB $49, $FD, $39 ; ADD.L IY, SP
.DB $49, $FD, $1F, $FD ; LD.L (IY-3), DE
.DB $ED, $6E ; LD A, MB
.DB $49, $FD, $77, $FF ; LD.L (IY-1), A
.DB $49, $FD, $17, $FD ; LD.L DE, (IY-3)
POP IY
RET
; set the upper byte (u of IY) to MB.
_EZ80_EXTN_IY_TO_MB_IY:
PUSH IX
.DB $5B, $DD, $21, $00, $00, $00 ; LD.LIL IX, 0
.DB $49, $DD, $39 ; ADD.L IX, SP
.DB $49, $DD, $3E, $FD ; LD.L (IX-3), IY
.DB $ED, $6E ; LD A, MB
.DB $49, $DD, $77, $FF ; LD.L (IX-1), A
.DB $49, $DD, $31, $FD ; LD.L IY, (IX-3)
POP IX
RET

17
Source/HBIOS/ez80instr.inc

@ -47,7 +47,13 @@
#DEFINE EZ80_TMR_IS_TICK_ISR LD A, 2 \ LD B, 10 \ EZ80_FN
#DEFINE EZ80_TMR_DELAY LD A, 2 \ LD B, 11 \ EZ80_FN
#DEFINE EZ80_EX_USB_INIT LD A, 6 \ LD B, 0 \ EZ80_FN
#DEFINE EZ80_EX_USB_INIT LD A, 6 \ LD B, 255 \ EZ80_FN
#DEFINE EZ80_EX_USB_STORAGE_SEEK LD A, 6 \ LD B, 254 \ EZ80_FN
#DEFINE EZ80_EX_USB_SCSI_INIT LD A, 6 \ LD B, 253 \ EZ80_FN
#DEFINE EZ80_EX_USB_GET_DEV_TYPE LD A, 6 \ LD B, 252 \ EZ80_FN
#DEFINE EZ80_EX_USB_SCSI_READ LD A, 6 \ LD B, 0 \ EZ80_FN
#DEFINE EZ80_EX_USB_SCSI_WRITE LD A, 6 \ LD B, 1 \ EZ80_FN
#DEFINE EZ80_EX_USB_SCSI_READ_CAP LD A, 6 \ LD B, 2 \ EZ80_FN
#DEFINE EZ80_THROTTLE_START(p,store) \
#DEFCONT \ PUSH AF
@ -114,6 +120,13 @@
#defcont \ .DB $49
#defcont \ SBC HL, BC
; LD.L DE,(IY+d) $49, $FD, $17, d
#DEFINE LD_DE_IY_P_.L(dd) \
#DEFCONT \ .DB $49
#DEFCONT \ .DB $FD
#DEFCONT \ .DB $17
#DEFCONT \ .DB dd
IO_SEGMENT .EQU $FF ; THE UPPER 8-BIT ADDRESS FOR I/O
#DEFINE OUT_NN_A(addr) \
@ -128,6 +141,8 @@ IO_SEGMENT .EQU $FF ; THE UPPER 8-BIT ADDRESS FOR I/O
#define EZ80_CPY_EHL_TO_UHL CALL _EZ80_CPY_EHL_TO_UHL
#define EZ80_CPY_UHL_TO_EHL CALL _EZ80_CPY_UHL_TO_EHL
#define EZ80_EXTN_DE_TO_MB_DE CALL _EZ80_EXTN_DE_TO_MB_DE
#DEFINE EZ80_EXTN_IY_TO_MB_IY CALL _EZ80_EXTN_IY_TO_MB_IY
#ELSE
#DEFINE EZ80_IO

22
Source/HBIOS/hbios.asm

@ -9263,15 +9263,6 @@ SIZ_MKY .EQU $ - ORG_MKY
MEMECHO " bytes.\n"
#ENDIF
;
#IF (USBKYBENABLE)
ORG_UKY .EQU $
#INCLUDE "ch376kyb.asm"
SIZ_UKY .EQU $ - ORG_UKY
MEMECHO "CH376 USB Keyboard occupies "
MEMECHO SIZ_UKY
MEMECHO " bytes.\n"
#ENDIF
;
#IF (NABUKBENABLE)
ORG_NABUKB .EQU $
#INCLUDE "nabukb.asm"
@ -9487,7 +9478,7 @@ SIZ_CHNATIVE .EQU $ - ORG_CHNATIVE
ORG_CHSCSI .EQU $
#INCLUDE "ch376scsi.asm"
SIZ_CHSCSI .EQU $ - ORG_CHSCSI
MEMECHO "CH376 SCSI Mass Storage occupies "
MEMECHO " CH376 SCSI Mass Storage occupies "
MEMECHO SIZ_CHSCSI
MEMECHO " bytes.\n"
#ENDIF
@ -9496,11 +9487,20 @@ SIZ_CHSCSI .EQU $ - ORG_CHSCSI
ORG_CHUFI .EQU $
#INCLUDE "ch376ufi.asm"
SIZ_CHUFI .EQU $ - ORG_CHUFI
MEMECHO "CH376 UFI Floppy Storage occupies "
MEMECHO " CH376 UFI Floppy Storage occupies "
MEMECHO SIZ_CHUFI
MEMECHO " bytes.\n"
#ENDIF
;
#IF (USBKYBENABLE)
ORG_UKY .EQU $
#INCLUDE "ch376kyb.asm"
SIZ_UKY .EQU $ - ORG_UKY
MEMECHO " CH376 USB Keyboard occupies "
MEMECHO SIZ_UKY
MEMECHO " bytes.\n"
#ENDIF
;
#IF (CPUFAM == CPU_EZ80)
MEMECHO "EZ80 DRIVERS\n"
ORG_EZ80DRVS .EQU $

Loading…
Cancel
Save