	.TITLE	UBAINTDSP - UNIBUS ADAPTER INTERRUPT DISPATCHER
	.IDENT	/01/
 
;
; COPYRIGHT (C) 1977
; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
;
; THIS SOFTWARE IS FURNISHED UNDER  A LICENSE FOR USE ONLY  ON  A
; SINGLE COMPUTER SYSTEM AND MAY BE  COPIED ONLY WITH  THE INCLU-
; SION OF  THE  ABOVE  COPYRIGHT NOTICE.  THIS SOFTWARE,  OR  ANY
; OTHER COPIES THEREOF, MAY NOT BE  PROVIDED  OR  OTHERWISE  MADE
; AVAILABLE TO ANY OTHER PERSON EXCEPT  FOR  USE  ON  SUCH SYSTEM
; AND TO  ONE WHO AGREES  TO  THESE LICENSE  TERMS.  TITLE TO AND
; OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC.
;
; THE INFORMATION IN THIS SOFTWARE  IS  SUBJECT TO CHANGE WITHOUT
; NOTICE AND SHOULD NOT BE CONSTRUED  AS  A COMMITMENT BY DIGITAL
; EQUIPMENT CORPORATION.
;
; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
;
; D. N. CUTLER 10-FEB-77
;
; UNIBUS ADAPTER INTERRUPT DISPATCHER
;
; MACRO LIBRARY CALLS
;
 
	$PRDEF				;DEFINE PROCESSOR REGISTERS
	$UBADEF				;DEFINE UBA REGISTER OFFSETS
	.PAGE
	.SBTTL	UNIBUS ADAPTER INTERRUPT DISPATCHER
;+
; UBA$INT - UNIBUS ADAPTER INTERRUPT DISPATCHER
;
; THIS ROUTINE IS ENTERED VIA A JSB INSTRUCTION WHEN AN INTERRUPT OCCURS
; ON A UNIBUS ADAPTER. THE STATE OF THE STACK ON ENTRY IS:
;
;	00(SP) = ADDRESS OF INTERRUPT TABLE CASE INSTRUCTION.
;	04(SP) = SAVED PSL.
;	08(SP) = SAVED R4.
;	12(SP) = SAVED R5.
;	16(SP) = INTERRUPT PC.
;	20(SP) = INTERRUPT PSL.
;
;	R5 = ADDRESS OF UBA CONFIGURATION STATUS REGISTER.
;
; INTERRUPT DISPATCHING OCCURS AS FOLLOWS:
;
;
; TWO CONDITIONS CAUSE ERROR LOG ENTRIES:
;
;-
 
	.PSECT	WIONONPAGED
UBA$INT::				;UNIBUS ADAPTER INTERRUPT DISPATCHER
	MFPR	#PR$_IPL,R4		;GET CURRENT PROCESSOR PRIORITY
	MOVL	UBA$L_BRRVR-<4*20>(R5)[R4],R4 ;READ INTERRUPT VECTOR ADDRESS
	BGEQ	10$			;IF GEQ NO ADAPTER INTERRUPT PENDING
;******* TEMP ******
	HALT				;
;******* TEMP ******
10$:	DIVL	#4,R4			;CALCULATE VECTOR NUMBER
	JSB	@(SP)+			;DISPATCH INTERRUPT TO PROPER ROUTINE
	MOVQ	(SP)+,R4		;RESTORE REGISTERS
	REI				;
;
; UNEXPECTED UBA INTERRUPT
;
  
UBA$UNEXPINT::				;UNEXPECTED INTERRUPT
;******* TEMP ******
	REI				;
;******* TEMP ******
	.PAGE
	.SBTTL	UNIBUS ADAPTER INITIALIZATION
;+
; UBA$INITIAL - UNIBUS ADAPTER INITIALIZATION
;
; THIS ROUTINE IS CALLED VIA A JSB INSTRUCTION AT SYSTEM STARTUP AND AFTER
; A POWER RECOVERY RESTART TO ALLOW INITIALIZATION OF UNIBUS ADAPTERS.
; 
; INPUTS:
;
;	R4 = ADDRESS OF UNIBUS ADAPTER CONFIGURATION STATUS REGISTER.
;
;	ALL INTERRUPTS ARE LOCKED OUT.
;
; OUTPUTS:
;
;	THE UNIBUS ADAPTER IS INITIALIZED AND INTERRUPTS ARE ENABLED.
;-
 
UBA$INITIAL::				;UNIBUS ADAPTER INITIALIZATION
	MCOML	#0,UBA$L_CSR(R4)	;CLEAR ALL ADAPTER CONFIGURATION ERRORS
	MCOML	#0,UBA$L_SR(R4)		;CLEAR ALL ADAPTER STATUS BITS
	MOVL	#UBA$M_CR_CNFIE!-	;ENABLE INTERRUPTS
		UBA$M_CR_SUEFIE!-	;
		UBA$M_CR_BRIE!-		;
		UBA$M_CR_IFSIE,UBA$L_CR(R4) ;
	RSB				;
 
	.END
