mirror of https://github.com/wwarthen/RomWBW.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
2.6 KiB
143 lines
2.6 KiB
; 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
|
|
|
|
; 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
|
|
|
|
; extern void usb_kyb_init(const uint8_t dev_index) __sdcccall(1);
|
|
_usb_kyb_init:
|
|
LD C, A
|
|
EZ80_EX_USB_KYB_INIT
|
|
RET
|
|
|
|
; extern uint8_t usb_kyb_flush() __sdcccall(1);
|
|
_usb_kyb_flush:
|
|
EZ80_EX_USB_KYB_FLUSH
|
|
RET
|
|
|
|
; extern uint8_t usb_kyb_status() __sdcccall(1);
|
|
_usb_kyb_status:
|
|
EZ80_EX_USB_KYB_STATUS
|
|
RET
|
|
|
|
; extern uint16_t usb_kyb_read();
|
|
; H = 0/1 set if char, L=>code
|
|
_usb_kyb_read:
|
|
EZ80_EX_USB_KYB_READ
|
|
LD H, A
|
|
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
|
|
|