|
|
|
@ -1,13 +1,29 @@ |
|
|
|
;================================================================================================== |
|
|
|
; ECB USB-FIFO DRIVER FOR WILL SOWERBUTTS ADAFRUIT BASED FT232H ECB-FIFO BOARD |
|
|
|
; REFER https://www.retrobrewcomputers.org/doku.php?id=boards:ecb:usb-fifo:start |
|
|
|
; PHIL SUMMERS (b1ackmai1er) |
|
|
|
;================================================================================================== |
|
|
|
; |
|
|
|
; BASE PORT IS SET IN PLT_SBC.INC |
|
|
|
; INTERRUPTS ARE NOT USED. |
|
|
|
; ONLY ONE BOARD SUPPORTED. |
|
|
|
; |
|
|
|
; HBIOS CALLS: |
|
|
|
; |
|
|
|
; UF_PREINIT SETUP THE DISPATCH TABLE ENTRY AND INITIALIZE HARDWARE |
|
|
|
; UF_INIT ANNOUNCE DEVICE DESCRIPTION AND PORT |
|
|
|
; |
|
|
|
FIFO_DATA .EQU (FIFO_BASE+0) |
|
|
|
FIFO_STATUS .EQU (FIFO_BASE+1) |
|
|
|
FIFO_SEND_IMM .EQU (FIFO_BASE+2) |
|
|
|
; |
|
|
|
;================================================================================================== |
|
|
|
; DEVICE DESCRIPTION TABLE |
|
|
|
; |
|
|
|
UF_PREINIT: |
|
|
|
UF_CFG: .DW DEFSIOACFG ; DUMMY CONFIGURATION |
|
|
|
; |
|
|
|
; SETUP THE DISPATCH TABLE ENTRY |
|
|
|
; SETUP THE DISPATCH TABLE ENTRY AND INITIALIZE HARDWARE |
|
|
|
; |
|
|
|
UF_PREINIT: |
|
|
|
LD HL,UF_CFG ; POINT TO START OF CFG TABLE |
|
|
|
PUSH HL ; COPY CFG DATA PTR |
|
|
|
PUSH HL |
|
|
|
@ -30,19 +46,17 @@ UF_INITUNIT: |
|
|
|
LD DE,-1 ; LEAVE CONFIG ALONE |
|
|
|
JR UF_INITDEV ; IMPLEMENT IT AND RETURN |
|
|
|
; |
|
|
|
; |
|
|
|
; ANNOUNCE DEVICE DESCRIPTION AND PORT |
|
|
|
; |
|
|
|
UF_INIT: |
|
|
|
LD HL,UF_CFG ; POINT TO START OF CFG TABLE |
|
|
|
PUSH HL ; COPY CFG DATA PTR |
|
|
|
POP IY ; ... TO IY |
|
|
|
; |
|
|
|
LD A,1 ; SET TYPE |
|
|
|
OR A ; SET FLAGS |
|
|
|
CALL NZ,UF_PRTCFG ; PRINT IF NOT ZERO |
|
|
|
CALL NEWLINE ; PRINT DEVICE |
|
|
|
PRTS("USB-FIFO: $") |
|
|
|
PRTS("IO=0x$") |
|
|
|
LD A,FIFO_BASE |
|
|
|
CALL PRTHEXBYTE ; PRINT PORT |
|
|
|
RET |
|
|
|
; |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET ; DONE |
|
|
|
; INPUT A CHARACTER AND RETURN IT IN E |
|
|
|
; |
|
|
|
UF_IN: |
|
|
|
CALL UF_IST ; CHAR WAITING? |
|
|
|
@ -62,7 +76,7 @@ UF_OUT: |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET |
|
|
|
; |
|
|
|
; INPUT STATUS - CAN WE SEND A CHARACTERV |
|
|
|
; INPUT STATUS - CAN WE SEND A CHARACTER |
|
|
|
; |
|
|
|
UF_IST: |
|
|
|
IN A,(FIFO_STATUS) ; IS THE QUEUE EMPTY? |
|
|
|
@ -81,7 +95,7 @@ UF_OST: |
|
|
|
; |
|
|
|
; INITIALIZATION THE SETUP PARAMETER WORD AND INITIALIZE DEVICE |
|
|
|
; SAVE NEW SPW IF NOT A RE-INIT. ALWAYS INITIALIZE DEVICE. |
|
|
|
; SPW IS NOT VAIDATED BUT IT IS USED FOR ANYTHING. |
|
|
|
; SPW IS NOT VAIDATED BUT IT IS NOT USED FOR ANYTHING. |
|
|
|
; |
|
|
|
UF_INITDEV: |
|
|
|
; |
|
|
|
@ -91,30 +105,27 @@ UF_INITDEV: |
|
|
|
INC A ; ... SO Z SET IF -1 |
|
|
|
JR NZ,UF_INITDEV1 ; IF DE == -1, REINIT CURRENT CONFIG |
|
|
|
; |
|
|
|
; GET CURRENT PSW BECAUSE WE ALWAYS RESAVE AT END |
|
|
|
; GET CURRENT PSW. WE ALWAYS RESAVE AT END |
|
|
|
LD E,(IY+0) ; LOW BYTE |
|
|
|
LD D,(IY+1) ; HIGH BYTE |
|
|
|
; |
|
|
|
UF_INITDEV1: |
|
|
|
XOR A ; INTERRUPTS OFF |
|
|
|
OR 00110000B |
|
|
|
OUT (FIFO_STATUS),A |
|
|
|
|
|
|
|
; |
|
|
|
UF_FLUSH: |
|
|
|
IN A,(FIFO_STATUS) ; IS THERE ANY DATA |
|
|
|
RLCA ; IN THE BUFFER ? |
|
|
|
JR C,UFBUFEMPTY ; EXIT IF EMPTY |
|
|
|
|
|
|
|
; |
|
|
|
IN A,(FIFO_DATA) ; CLEAR BUFFER BY READING |
|
|
|
JR UF_FLUSH ; ALL THE DATA |
|
|
|
UFBUFEMPTY: |
|
|
|
|
|
|
|
LD (IY + 0),E ; SAVE LOW WORD |
|
|
|
LD (IY + 1),D ; SAVE HI WORD |
|
|
|
|
|
|
|
RET ; NZ STATUS HERE INDICATES FAIL. |
|
|
|
; |
|
|
|
; USB-FIFO WILL A SERIAL DEVICE AT DEFAULT SERIAL MODE |
|
|
|
; USB-FIFO WILL APPEAR AS A SERIAL DEVICE AT DEFAULT SERIAL MODE |
|
|
|
; |
|
|
|
UF_QUERY: |
|
|
|
LD E,(IY+0) ; FIRST CONFIG BYTE TO E |
|
|
|
@ -137,18 +148,6 @@ UF_DETECT: |
|
|
|
LD A,1 ; 0 = NONE |
|
|
|
RET |
|
|
|
; |
|
|
|
; ANNOUNCE DEVICE DESCRIPTION AND PORT |
|
|
|
; |
|
|
|
UF_PRTCFG: |
|
|
|
CALL NEWLINE |
|
|
|
PRTS("USB-FIFO: IO=0x$") ; PRINT DEVICE |
|
|
|
|
|
|
|
LD A,FIFO_BASE |
|
|
|
CALL PRTHEXBYTE ; PRINT PORT |
|
|
|
; |
|
|
|
XOR A |
|
|
|
RET |
|
|
|
; |
|
|
|
; DRIVER FUNCTION TABLE |
|
|
|
; |
|
|
|
UF_FNTBL: |
|
|
|
@ -163,16 +162,3 @@ UF_FNTBL: |
|
|
|
.ECHO "*** INVALID SIO FUNCTION TABLE ***\n" |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; DEVICE DESCRIPTION |
|
|
|
; |
|
|
|
UF_TYPE_MAP: |
|
|
|
.DW UF_STR_NONE |
|
|
|
.DW UF_STR_UF |
|
|
|
|
|
|
|
UF_STR_NONE .DB "<NOT PRESENT>$" |
|
|
|
UF_STR_UF .DB "USB-FIFO$" |
|
|
|
; |
|
|
|
; DEVICE DESCRIPTION TABLE |
|
|
|
; |
|
|
|
UF_CFG: .DW DEFSIOACFG ; LINE CONFIGURATION |
|
|
|
; |
|
|
|
|