diff --git a/Source/HBIOS/usbfifo.asm b/Source/HBIOS/usbfifo.asm index 25bc018f..cf96aa68 100644 --- a/Source/HBIOS/usbfifo.asm +++ b/Source/HBIOS/usbfifo.asm @@ -13,9 +13,12 @@ ; 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) +FIFO_DATA .EQU (FIFO_BASE+0) ; READ/WRITE DATA +FIFO_STATUS .EQU (FIFO_BASE+1) ; READ/WRITE STATUS +FIFO_SEND_IMM .EQU (FIFO_BASE+2) ; WRITE PORT TO FORCE BUFFER FLUSH +FIFO_BUFFER .EQU FALSE ; OPTION TO BUFFER OUTPUT FOR 17ms +; +UF_USB_ACTIVE .DB 0 ; USB CABLE CONNECTED STATUS FLAG ; ; DEVICE DESCRIPTION TABLE ; @@ -29,7 +32,9 @@ UF_PREINIT: PUSH HL POP IY ; ... TO IY CALL UF_INITUNIT ; HAND OFF TO GENERIC INIT CODE + LD (UF_USB_ACTIVE),A ; SAVE USB CONNECTION STATUS POP DE ; GET ENTRY ADDRESS BACK, BUT PUT IN DE +; JR Z,UF_FAIL ; EXIT IF NO USB CONNECTION LD BC,UF_FNTBL ; BC := FUNCTION TABLE ADDRESS CALL CIO_ADDENT ; ADD ENTRY IF FOUND, BC:DE XOR A ; SIGNAL SUCCESS @@ -53,8 +58,12 @@ UF_INIT: CALL NEWLINE ; PRINT DEVICE PRTS("USB-FIFO: $") PRTS("IO=0x$") - LD A,FIFO_BASE - CALL PRTHEXBYTE ; PRINT PORT + LD A,FIFO_BASE ; PRINT PORT + CALL PRTHEXBYTE + LD A,(UF_USB_ACTIVE) ; PRINT CABLE STATUS + OR A + RET NZ + PRTS(" No Cable$") RET ; ; INPUT A CHARACTER AND RETURN IT IN E @@ -74,7 +83,9 @@ UF_OUT: JR Z,UF_OUT ; LOOP IF NOT LD C,FIFO_DATA OUT (C),E ; WRITE TO FIFO +#IF (FIFO_BUFFER) OUT (FIFO_SEND_IMM),A ; SEND IMMEDIATE +#ENDIF XOR A ; SIGNAL SUCCESS RET ; @@ -147,11 +158,11 @@ UF_DEVICE: ; USB-FIFO DETECTION ROUTINE ; UF_DETECT: -; IN A,(FIFO_STATUS) ; DON'T LOAD DRIVER IF -; AND 10000001B ; CABLE DISCONNECTED -; SUB 10000001B ; A=0 -; RET Z - LD A,1 ; A=1 + IN A,(FIFO_STATUS) + AND 10000001B + SUB 10000001B ; A=0 CABLE DISCONNECTED + RET Z + LD A,1 ; A=1 CABLE CONNECTED RET ; ; DRIVER FUNCTION TABLE