Browse Source

ch376-native: implemented ez80 delegated version of ufi driver

pull/592/head
Dean Netherton 9 months ago
parent
commit
b006343740
  1. 4
      Source/HBIOS/Config/RCEZ80_std.asm
  2. 36
      Source/HBIOS/ch376-native/ez80-firmware.asm
  3. 6
      Source/HBIOS/ch376-native/source-doc/ufi-drv/class_ufi.h
  4. 10
      Source/HBIOS/ez80instr.inc

4
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]

36
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

6
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

10
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

Loading…
Cancel
Save