                	.TITLE	ERTRP
;	VERSION V006A
;			001
;
;	COPYRIGHT 1973 DIGITAL EQUIPMENT CORP., MAYNARD MASS.,01754
;
;
;	STANDARD REGISTER DEFINITIONS
;
R0=%0
R1=%1
R2=%2
R3=%3
R4=%4
R5=%5
SP=%6
PC=%7
;ERROR TRAP AND
; UNINITIALIZED VECTORS SERVICE ROUTINE
;  ALL SUCH ARE SET TO TRAP TO THIS ROUTINE WITH A CODE IN
;  BITS 1,2,3 OF THE STATUS WORD AS FOLLOWS:
;
;	1 -- ERROR TRAP 4
;	2 -- RESERVED INSTRUCTION TRAP 10
;	3 -- TRACE TRAP 14
;	4 -- POWER FAIL TRAP 24
;	5 -- TRAP INSTRUCTION TRAP 34
;
;	GLOBAL DEFINITIONS
;
	.GLOBL	PF.B		;USED BY SRSX TASK
	.GLOBL	PF.CL		;INSTUCTION TOBE MODIFIED IF NO
				;NO CLOCK IN THE SYSTEM
	.GLOBL	RM.SOV	;EXEC ERROR-SYSTEM STACK OVERFLOW HALT
	.GLOBL	RM.T	;EXEC ERROR TRAP ROUTINE FOR TRAP TRAP
	.GLOBL	RM.TRP	;EXEC ERROR TRAP ROUTINE
;
;	GLOBAL REFERENCES
;
	.GLOBL	PAN$	;PANIC DUMP ADDRESS.
	.GLOBL	PF.S	;POWERFAIL SAVE AREA.
	.GLOBL	PF.SA	;POWERFAIL SAVE AREA.
	.GLOBL	PL7	;PRIORITY LEVEL 7
	.GLOBL	PS	;PROCESSOR STATUS WORD
	.GLOBL	PWFLF	;POWER FAILURE FLAG( (COUNT OF FAILURES)
	.GLOBL	STRG	;COMMON SYSTEM  ENTRY SUBROUTINE.
	.GLOBL	SYAUA	;SYSTEM,USER ACTIVE FLAG
	.GLOBL	S.EFAT	;FATAL CLASS MESSAGE
	.GLOBL	S.RRES	;SYSTEM REGISTER RESTORE ROUTINE/
	.GLOBL	S.RSAV	;SYSTEM REGISTER SAVE ROUTINE/
	.GLOBL	S.STAT	;PROCESSOR STATUS WORD.
	.GLOBL	TKI.CS	;ADDRESS OF LIST OF KB&TT INPUT STATUS REGISTER
	.GLOBL	TKO.CS	;ADDRESS OF LIST OF KB&TT OUTPUT STATUS REGISTE
	.GLOBL	UPSTK	;USER STACK AT ENTRY TO EXEC
;
RM.TRP:	BR	RM.ER		; BUS ERROR, SP OVERFLOW.
	BR	RM.RE		; RESERVED INST
	BR	RM.TT		; TRACE TRAP
	BR	RM.PW		; POWER FAIL
RM.T:				; TRAP TRAP
RM.RE:
RM.TT:	MOVB	S.STAT,RM.TMP	; SAVE CURRENT STATUS
RM.TTA:	JSR	R5,STRG		; STORE REGS AND FIX STACKS
	TST	(SP)		; WHERE DID WE COME FROM?
	BLT	RM.XE		;IF LT BAD NEWS FELLOW
	MOV	UPSTK,R0	; USER ERROR. GET USER'S STACK.
	MOV	16(R0),-(SP)	; PUSH ERROR PC
	MOV	#S.EFAT,-(SP)		;PUSH ERROR CLASS
	MOVB	RM.TMP,(SP)		;INCLUDE ERROR #
	MOVB	SYAUA,-(SP)	; TASK #
	IOT			; GO PRINT
;
;BUS ERROR OR SP OVERFLOW
;
RM.ER:	MOVB	S.STAT,RM.TMP	; SAVE CURRENT STATUS
	CMP	SP,#400		; SP OVERFLOW?
	BHIS	RM.TTA		; NO - TREAT AS NORMAL ERROR.
RM.SOV:	HALT			;HALT ON SYSTEM STACK OVERFLOW.
RM.XE:	MOV	RM.TMP,R0	; EXEC ERROR! TROUBLE!
	MOV	#RM.EMA+3,R2	; PTR TO ERR MSG.
	BR	RM.XEA
RM.XEB:	ASR	R0
	ASR	R0
	ASR	R0
RM.XEA:	MOV	R0,R1
	BIC	#-7-1,R1	; SAVE LOW 3 BITS
	ADD	#60,R1		; CONVERT TO ASCII
	MOVB	R1,(R2)		; PUT INTO MESSAGE
	TSTB	-(R2)		; DONE?
	BPL	RM.XEB		; NO-
	MOV	#RM.EM,R2	; PTR TO MESSAGE
	MOV	TKO.CS-2,R3	;ADDRESS OF CONSOLE TELEPRINTER
RM.XEC:	TSTB	(R3)		; TTY DONE?
	BPL	.-2		; NO - WAIT.
	MOVB	(R2)+,2(R3)	; OUTPUT
	TSTB	(R2)		; END OF MESSAGE?
	BNE	RM.XEC		; NO
	MOVB	#7,-(R2)	; GET A BELL.
;	COUNT # OF BELLS USING # IN R1
	DECB	R1		; DONE?
	BPL	RM.XEC		; NO - GO PRINT THE BELL
	MOV	20(SP),R0	; ELSE, GET ERROR ADDRESS
	MOV	RM.TMP,R1	; ERROR # TO R1
RM.SER:	JSR	PC,PAN$		;SYSTEM ERROR
	BR	RM.XE		; IF CONTINUE, PRINT AGAIN.
RM.EM:	.BYTE	15,12
	.ASCII	/?F/
RM.EMA:	.BYTE	200,1,1,1,0	; ROOM FOR ERROR # AND NULL TERMINATOR.
	.EVEN
RM.TMP:	.WORD	0		; TEMP STORAGE

;
;POWER FAILURE
;

;	POWER DOWN SEQUENCE
RM.PW:	MOV	SP,PF.S		;SAVE CURRENT SP
	MOV	#PF.S,SP	;SET NEW SP
	JSR	R5,S.RSAV	;SAVE R0-R5
	MOV	#PF.B,24	;CHANGE VECTOR TO POWER-UP SEQUENCE.
RM.PWA:	HALT			;WAIT FOR POWER TO FAIL.
	BR	RM.PWA		;DON'T CONTINUE!
;
;	POWER-UP SEQUENCE
PF.B:	INCB	PWFLF		;TALLY THE FAILURE.
	MOV	#PL7,PS		;LOCK OUT INTERRUPTS
PF.CL:	MOV	#TKI.CS-2,R1	;ADDRESS OF CLOCK AND TTY CSR'S
PF.BB:	MOV	(R1)+,R2	;ADR OF STATUS REG.
	BEQ	PF.BA		;DONE -
	BISB	#100,(R2)	;ENABLE INTERRUPTS.
	BR	PF.BB		;DO NEXT ONE
PF.BA:				;REFERENCE LABEL


	.IFDF	UD.CHN


	.IFGT	UD.CHN

	MOV	#36,171776	;ENABLE UDC INTERRUPTS

	.ENDC


	.ENDC


	MOV	#RM.PW,24	;RESET VECTOR ADDRESS
	MOV	#PF.SA,SP	;GET TEMPORARY SP
	JSR	R5,S.RRES	;RESTORE REGISTERS 0-5
	MOV	PF.S,SP		;RESTORE ORIGINAL SP
	RTI			;RETURN TO INTERRUPTED PROGRAM.
;
	.END
                                                                                                                  