diff --git a/Source/HBIOS/usbfifo.asm b/Source/HBIOS/usbfifo.asm index 8b935b8e..7e6ccb55 100644 --- a/Source/HBIOS/usbfifo.asm +++ b/Source/HBIOS/usbfifo.asm @@ -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 "$" -UF_STR_UF .DB "USB-FIFO$" -; -; DEVICE DESCRIPTION TABLE -; -UF_CFG: .DW DEFSIOACFG ; LINE CONFIGURATION -;