Browse Source

Finalize UART Interrupt Receive

pull/246/head
Wayne Warthen 4 years ago
parent
commit
097777c043
  1. 4
      Source/HBIOS/hbios.asm
  2. 2
      Source/HBIOS/std.asm
  3. 63
      Source/HBIOS/uart.asm
  4. 2
      Source/ver.inc
  5. 2
      Source/ver.lib

4
Source/HBIOS/hbios.asm

@ -773,8 +773,8 @@ HBX_INTSTK .EQU $
; 1 CTC0B INT2 |
; 2 CTC0C TIM0 |
; 3 CTC0D TIM1 |
; 4 DMA0 +- Z180 INTERNAL
; 5 DMA1 |
; 4 UART0 DMA0 +- Z180 INTERNAL
; 5 UART1 DMA1 |
; 6 CSIO |
; 7 SIO0 SER0 |
; 8 SIO1 SER1 -+

2
Source/HBIOS/std.asm

@ -637,6 +637,8 @@ INT_CTC0A .EQU 0 ; ZILOG CTC 0, CHANNEL A
INT_CTC0B .EQU 1 ; ZILOG CTC 0, CHANNEL B
INT_CTC0C .EQU 2 ; ZILOG CTC 0, CHANNEL C
INT_CTC0D .EQU 3 ; ZILOG CTC 0, CHANNEL D
INT_UART0 .EQU 4 ; MBC UART 0
INT_UART1 .EQU 5 ; MBC UART 1
INT_SIO0 .EQU 7 ; ZILOG SIO 0, CHANNEL A & B
INT_SIO1 .EQU 8 ; ZILOG SIO 1, CHANNEL A & B
INT_PIO0A .EQU 9 ; ZILOG PIO 0, CHANNEL A

63
Source/HBIOS/uart.asm

@ -58,6 +58,18 @@ UARTCBASE .EQU $80
UARTMBASE .EQU $48
UART4BASE .EQU $C0
UARTRBASE .EQU $A0
;
#IF (UARTINTS)
;
#IF ((INTMODE == 2) | (INTMODE == 3))
;
UART0_IVT .EQU IVT(INT_UART0)
UART1_IVT .EQU IVT(INT_UART1)
;
#ENDIF
;
#ENDIF
;
#DEFINE UART_INP(RID) CALL UART_INP_IMP \ .DB RID
#DEFINE UART_OUTP(RID) CALL UART_OUTP_IMP \ .DB RID
@ -121,7 +133,17 @@ UART_PREINIT2:
#ENDIF
;
#IF ((INTMODE == 2) | (INTMODE == 3))
; *** FIXME *** IMPLEMENT THIS!!!
; SETUP IM2/3 VECTORS
#IF (UARTSBC)
LD HL,UART_INTSBC
LD (UART0_IVT),HL ; IVT INDEX
#ENDIF
;
#IF (UARTCAS)
LD HL,UART_INTCAS
LD (UART1_IVT),HL ; IVT INDEX
#ENDIF
;
#ENDIF
;
#ENDIF
@ -192,22 +214,46 @@ UART_INIT1:
; POLLING CHAIN WHEN DEVICES ARE INITIALIZED SUCH THAT
; ONLY DEVICES ACTUALLY USING INTS ARE POLLED HERE.
;
#IF (INTMODE == 1)
UART_INT:
;
#IF (UARTSBC)
#IF (UARTSBC)
LD IY,UART_CFG_SBC
CALL UART_INTRCV
RET NZ
#ENDIF
#ENDIF
;
#IF (UARTCAS)
#IF (UARTCAS)
LD IY,UART_CFG_CAS
CALL UART_INTRCV
RET NZ
#ENDIF
#ENDIF
;
#ENDIF
;
#IF ((INTMODE == 2) | (INTMODE == 3))
;
#IF (UARTSBC)
UART_INTSBC:
LD IY,UART_CFG_SBC
JR UART_INTRCV
#ENDIF
;
#IF (UARTCAS)
UART_INTCAS:
LD IY,UART_CFG_CAS
JR UART_INTRCV
#ENDIF
;
#ENDIF
;
XOR A ; CLEAR ACCUM (INT NOT HANDLED)
RET ; DONE
;
; IM2 ENTRY POINTS
;
;
; HANDLE INT FOR A SPECIFIC CHANNEL
; BASED ON UNIT CFG POINTED TO BY IY
@ -648,12 +694,7 @@ UART_DETECT:
RET Z ; DONE IF NO CHIP
LD C,A ; PUT CHIP VARIANT IN C
;
; *** FIXME *** THIS NEEDS TO CHANGE WHEN INTMODE 2/3 IS IMPLEMENTED. AT THIS
; POINT, WE ONLY SET THE INT RCV FEATURE BIT FOR IM1 BECAUSE THAT IS ALL
; THAT IS IMPLEMENTED.
;
;#IF ((UARTINTS) & (INTMODE > 0))
#IF ((UARTINTS) & (INTMODE == 1))
#IF ((UARTINTS) & (INTMODE > 0))
;
; CHECK TO SEE IF INT RCV WANTED ON THIS DEVICE
PUSH AF ; SAVE CHIP ID

2
Source/ver.inc

@ -2,4 +2,4 @@
#DEFINE RMN 1
#DEFINE RUP 1
#DEFINE RTP 0
#DEFINE BIOSVER "3.1.1-pre.115"
#DEFINE BIOSVER "3.1.1-pre.116"

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 1
rup equ 1
rtp equ 0
biosver macro
db "3.1.1-pre.115"
db "3.1.1-pre.116"
endm

Loading…
Cancel
Save