@ -52,6 +52,7 @@ UART_EFR .EQU 2 ; LCR=$BF: ENHANCED FEATURE REG (READ/WRITE)
UART_INTACT .EQU 7 ; INT RCV ACTIVE BIT
UART_FIFOACT .EQU 6 ; FIFO ACTIVE BIT
UART_AFCACT .EQU 5 ; AUTO FLOW CONTROL ACTIVE BIT
UART_CTSBAD .EQU 4 ; CTS STALL DETECTED
;
# IF ( PLATFORM = = PLT_DUO )
UARTSBASE .EQU $ 58
@ -173,7 +174,19 @@ UART_INITUNIT:
LD A ,( HL ) ; PUT IN ACCUM
INC ( HL ) ; INCREMENT IT (FOR NEXT LOOP)
LD ( IY ), A ; UDPATE UNIT NUM
;
; CHECK FOR CTS STALL (CTS SHOULD BE ASSERTED HERE)
BIT 5 ,( IY + 5 ) ; IS RTS REQUESTED?
JR Z , UART_INITUNIT1 ; IF NOT, SKIP CTS CHECK
UART_INP ( UART_MSR ) ; LOAD MODEM STATUS REG
BIT 4 , A ; CTS
JR NZ , UART_INITUNIT1 ; IF CTS HIGH (GOOD), SKIP AHEAD
;
; CTS LOOKS BORKED, SHUT OFF RTS/CTS FLOW CONTROL
RES 5 ,( IY + 5 ) ; CLEAR RTS BIT OF CONFIG MSB
SET UART_CTSBAD ,( IY + 1 ) ; RECORD BAD CTS
;
UART_INITUNIT1:
; SET DEFAULT CONFIG
LD DE , - 1 ; LEAVE CONFIG ALONE
JP UART_INITDEVX ; IMPLEMENT IT AND RETURN
@ -197,8 +210,21 @@ UART_INIT1:
LD A ,( IY + 1 ) ; GET UART TYPE
OR A ; SET FLAGS
CALL NZ , UART_PRTCFG ; PRINT IF NOT ZERO
JR Z , UART_INIT2 ; SKIP IF ZERO (NOT DETECTED)
PUSH AF ; SAVE TYPE VALUE
CALL UART_PRTCFG ; PRINT IF NOT ZERO
POP AF ; RESTORE TYPE VALUE
BIT UART_CTSBAD , A ; CTS STALL?
JR Z , UART_INIT2 ; IF NOT, SKIP AHEAD
CALL NEWLINE ; FORMATTING
PRTS ( "UART$" ) ; FORMATTING
LD A ,( IY ) ; DEVICE NUM
CALL PRTDECB ; PRINT DEVICE NUM
PRTS ( ": $" ) ; FORMATTING
LD DE , UART_STR_BADCTS ; LOAD WARNING MESSAGE
CALL WRITESTR ; ... AND PRINT IT
;
UART_INIT2:
POP BC ; RESTORE LOOP CONTROL
INC C ; NEXT UNIT
DJNZ UART_INIT1 ; LOOP TILL DONE
@ -992,6 +1018,8 @@ UART_STR_16850 .DB "16850$"
;
UART_PAR_MAP .DB "NONENMNS"
;
UART_STR_BADCTS .DB "CTS STALL, HARDWARE FLOW CONTROL SUSPENDED$"
;
; WORKING VARIABLES
;
UART_DEV .DB 0 ; DEVICE NUM USED DURING INIT