From b0063437404d6135abecf884ac774f2ae8d65a74 Mon Sep 17 00:00:00 2001 From: Dean Netherton Date: Wed, 23 Apr 2025 12:57:00 +1000 Subject: [PATCH] ch376-native: implemented ez80 delegated version of ufi driver --- Source/HBIOS/Config/RCEZ80_std.asm | 4 +-- Source/HBIOS/ch376-native/ez80-firmware.asm | 36 ++++++++++++++++++- .../source-doc/ufi-drv/class_ufi.h | 6 ++-- Source/HBIOS/ez80instr.inc | 10 ++++-- 4 files changed, 48 insertions(+), 8 deletions(-) diff --git a/Source/HBIOS/Config/RCEZ80_std.asm b/Source/HBIOS/Config/RCEZ80_std.asm index 65ef248f..a25e59d4 100644 --- a/Source/HBIOS/Config/RCEZ80_std.asm +++ b/Source/HBIOS/Config/RCEZ80_std.asm @@ -88,8 +88,8 @@ CH0USBENABLE .SET FALSE ; CH375: ENABLE CH375 USB DRIVER CH1USBENABLE .SET FALSE ; CH376: ENABLE CH376 USB DRIVER CHNATIVEENABLE .SET TRUE ; CH376: ENABLE CH376 NATIVE USB DRIVER CHNATIVEFORCE .SET TRUE ; CH376: DISABLE AUTO-DETECTION OF MODULE - ASSUME ITS INSTALLED -CHSCSIENABLE .SET TRUE ; CH376: ENABLE CH376 NATIVE MASS STORAGE DEVICES (REQUIRES CHNATIVEENABLE) +CHSCSIENABLE .SET FALSE ; CH376: ENABLE CH376 NATIVE MASS STORAGE DEVICES (REQUIRES CHNATIVEENABLE) CHUFIENABLE .SET TRUE ; CH376: ENABLE CH376 NATIVE UFI FLOPPY DISK DEVICES (REQUIRES CHNATIVEENABLE) -CHNATIVEEZ80 .SET FALSE +CHNATIVEEZ80 .SET TRUE EZ80TIMER .SET EZ80TMR_INT ; EZ80: TIMER TICK MODEL: EZ80TMR_[INT|FIRM] diff --git a/Source/HBIOS/ch376-native/ez80-firmware.asm b/Source/HBIOS/ch376-native/ez80-firmware.asm index b83bc751..2553e9d1 100644 --- a/Source/HBIOS/ch376-native/ez80-firmware.asm +++ b/Source/HBIOS/ch376-native/ez80-firmware.asm @@ -69,9 +69,44 @@ _usb_scsi_read_capacity: LD L, A RET +; extern uint8_t usb_ufi_read(const uint16_t dev_index, uint8_t *const buffer) _usb_ufi_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_UFI_READ + LD L, A + RET + +;extern usb_error usb_ufi_write(const uint16_t dev_index, uint8_t *const buffer); _usb_ufi_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_UFI_WRITE + LD L, A + RET + +; extern uint32_t usb_ufi_get_cap(const uint16_t dev_index) _usb_ufi_get_cap: + LD IY, 0 + ADD IY, SP + + LD C, (IY+2) + EZ80_EXTN_DE_TO_MB_DE + EZ80_EX_USB_UFI_GET_CAP ; + + LD D, E ; convert E:uHL to DE:HL + EZ80_CPY_UHL_TO_EHL + RET _usb_kyb_flush: _usb_kyb_report: @@ -88,4 +123,3 @@ _usb_get_device_type: EZ80_EX_USB_GET_DEV_TYPE LD L, A RET - diff --git a/Source/HBIOS/ch376-native/source-doc/ufi-drv/class_ufi.h b/Source/HBIOS/ch376-native/source-doc/ufi-drv/class_ufi.h index 73e887fc..58df1c6e 100644 --- a/Source/HBIOS/ch376-native/source-doc/ufi-drv/class_ufi.h +++ b/Source/HBIOS/ch376-native/source-doc/ufi-drv/class_ufi.h @@ -78,17 +78,17 @@ typedef struct { // device_type: identifies the device currently connected to the requested logical unit. // 00h Direct-access device (floppy) // 1Fh none (no FDD connected to the requested logical unit) - uint8_t device_typex; // lower 5 bits + uint8_t device_type; // lower 5 bits // Removable Media Bit: this shall be set to one to indicate removable media. - uint8_t removable_mediax; // top bit + uint8_t removable_media; // top bit // ANSI Version: must contain a zero to comply with this version of the Specification. // ISO/ECMA: These fields shall be zero for the UFI device. uint8_t version; // Response Data Format: a value of 01h shall be used for UFI device - uint8_t response_data_formatx; // lower 4 bits + uint8_t response_data_format; // lower 4 bits // The Additional Length field shall specify the length in bytes of the parameters. If the Allocation Length of the // Command Packet is too small to transfer all of the parameters, the Additional Length shall not be adjusted to diff --git a/Source/HBIOS/ez80instr.inc b/Source/HBIOS/ez80instr.inc index 2daa3268..873b6b27 100644 --- a/Source/HBIOS/ez80instr.inc +++ b/Source/HBIOS/ez80instr.inc @@ -49,12 +49,18 @@ #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_GET_DEV_TYPE LD A, 6 \ LD B, 253 \ 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_EX_USB_SCSI_INIT LD A, 6 \ LD B, 15 \ EZ80_FN + #DEFINE EZ80_EX_USB_UFI_READ LD A, 6 \ LD B, 16 \ EZ80_FN + #DEFINE EZ80_EX_USB_UFI_WRITE LD A, 6 \ LD B, 17 \ EZ80_FN + #DEFINE EZ80_EX_USB_UFI_GET_CAP LD A, 6 \ LD B, 18 \ EZ80_FN +; #DEFINE EZ80_EX_USB_UFI_INIT LD A, 6 \ LD B, 31 \ EZ80_FN + #DEFINE EZ80_THROTTLE_START(p,store) \ #DEFCONT \ PUSH AF #DEFCONT \ PUSH BC