diff --git a/Source/HBIOS/uart.asm b/Source/HBIOS/uart.asm index 75466d50..b4c43101 100644 --- a/Source/HBIOS/uart.asm +++ b/Source/HBIOS/uart.asm @@ -230,11 +230,23 @@ UART_INITDEV1: LD A,C UART_OUTP(UART_DLL) ; SET DIVISOR (LS) ; - ; SETUP FCR (DLAB MUST STILL BE ON FOR ACCESS TO BIT 5) - LD A,%00100111 ; FIFO ENABLE & RESET, 64 BYTE FIFO ENABLE ON 750+ + ; FOR 750+, WE ENABLE THE 64-BYTE FIFO + ; DLAB MUST STILL BE ON FOR ACCESS TO BIT 5 + ; WE DO *NOT* ENABLE ANY OTHER FCR BITS HERE + ; BEACAUSE IT WILL SCREW UP THE 2552!!! + LD A,%00100000 UART_OUTP(UART_FCR) ; DO IT ; - ; SETUP LCR FROM SECOND CONFIG BYTE (DLAB IS CLEARED) + XOR A ; DLAB OFF NOW + UART_OUTP(UART_LCR) ; DO IT +; + ; SETUP FCR, BIT 5 IS KEPT ON EVEN THOUGH IT IS PROBABLY + ; IRRELEVANT BECAUSE IT ONLY APPLIES TO 750 AND DLAB IS + ; NOW OFF, BUT DOESN'T HURT. + LD A,%00100111 ; FIFO ENABLE & RESET + UART_OUTP(UART_FCR) ; DO IT +; + ; SETUP LCR FROM SECOND CONFIG BYTE LD A,(IY + 4) ; GET CONFIG BYTE AND ~$C0 ; ISOLATE PARITY, STOP/DATA BITS UART_OUTP(UART_LCR) ; SAVE IT @@ -364,8 +376,9 @@ UART_DETECT: CP $5A ; SPR STILL THERE? JR NZ,UART_DETECT1 ; NOPE, HIDDEN, MUST BE 16650/850 ; - ; RESET LCR TO DEFAULT - LD A,$80 ; DLAB BIT ON + ; RESET LCR TO DEFAULT (DLAB OFF) + ;LD A,$80 ; DLAB BIT ON + XOR A ; DLAB BIT OFF UART_OUTP(UART_LCR) ; RESET LCR ; ; TEST FCR TO ISOLATE 16450/550/550A @@ -381,6 +394,9 @@ UART_DETECT: JR UART_DETECT_16750 ; ONLY THING LEFT IS 16750 ; UART_DETECT1: ; PICK BETWEEN 16650/850 + ; RESET LCR TO DEFAULT (DLAB OFF) + XOR A ; DLAB BIT OFF + UART_OUTP(UART_LCR) ; RESET LCR ; NOT SURE HOW TO DIFFERENTIATE 16650 FROM 16850 YET JR UART_DETECT_16650 ; ASSUME 16650 RET @@ -630,15 +646,15 @@ UART_CFG: ; UARTRC SERIAL PORT A .DB 0 ; DEVICE NUMBER (UPDATED DURING INIT) .DB 0 ; UART TYPE - .DB $A0 ; IO PORT BASE (RBR, THR) - .DB $A0 + UART_LSR ; LINE STATUS PORT (LSR) + .DB $A8 ; IO PORT BASE (RBR, THR) + .DB $A8 + UART_LSR ; LINE STATUS PORT (LSR) .DW UARTCFG ; LINE CONFIGURATION .FILL 2,$FF ; FILLER ; UARTRC SERIAL PORT B .DB 0 ; DEVICE NUMBER (UPDATED DURING INIT) .DB 0 ; UART TYPE - .DB $A8 ; IO PORT BASE (RBR, THR) - .DB $A8 + UART_LSR ; LINE STATUS PORT (LSR) + .DB $A0 ; IO PORT BASE (RBR, THR) + .DB $A0 + UART_LSR ; LINE STATUS PORT (LSR) .DW UARTCFG ; LINE CONFIGURATION .FILL 2,$FF ; FILLER #ENDIF