Browse Source

Update uart.asm

Fixed some stuff in 16C2552 support
- Concurrent write was being enabled unintentionally
- Swapped the EPDSER UART base ports to match the boards annotations
patch
Wayne Warthen 6 years ago
parent
commit
180b7fddec
  1. 34
      Source/HBIOS/uart.asm

34
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

Loading…
Cancel
Save