.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