SUBTTL *UUOERR* OLD-UUO ERROR HANDLER SUBROUTINE, V75B, APR 22,1975 ;THIS SUBROUTINE PROVIDES ERROR REPORTING THRU THE USE OF UUO'S. ERRMES: MOVEM 0,%ERAC0# ;SAVE AC0 IFDEF EXCASB,> MOVEM 1,%ERAC1# ;SAVE AC1 MOVEM 2,%ERAC2# ;SAVE AC2 AOS ERRTLS ;INCREMENT ERROR TOTALS HRRZ 0,$SVUPC ;GET PC OF UUO CAMN 0,ERRPC ;PC = PC OF LAST ERROR ? AOS MICNT# ;YES, ADD 1 TO ERROR COUNT MOVE 0,MICNT HRL 0,$SVUPC SKIPN KLFLG ;NOT KL10 SKIPE USER ;AND NOT USER? JRST .+2 DATAO PI,0 ;YES, DISPLAY ERROR PC,ERROR COUNT SETZM PROCED# ;CLEAR PROCEED FLAG SWITCH TLNE NOPNT ;PRINTOUT ? JRST %ERRS1 ;NO, RESTORE AC'S AND RETURN MOVE 1,$SVUUO LSH 1,-^D27 MOVEM 1,%ACS1A# ;SAVE UUO NUMBER MOVE 0,%ERAC0 MOVE 1,%ERAC1 SKIPGE @ERRLOP ;ERR LOOP AC > OR = 0 ? JRST %ERRS4 ;NO, SEE IF PRINT ALL %ERMS1: SETZM MICNT ;CLEAR ERROR COUNT SKIPL MONCTL ;DIAG MON OR SYS EXER ? JRST .+4 ;NO, DON'T NEED TITLE SKIPN %ERFST# ;FIRST ERROR ? PNTNM ;YES, PRINT PROGRAM TITLE SETOM %ERFST SKIPN PASCNT ;FIRST PASS ? JRST .+4 ;YES PMSG <^TEST PASS COUNT = > MOVE PASCNT PNTDEC PMSG <^PC = > HRRZ 0,$SVUPC ;GET PC OF UUO MOVEM 0,ERRPC ;SAVE FOR COMPARE PNT6 ;PRINT UUO ADDRESS XLIST IFDEF ERDIAG, MOVE 1,$SVUUO ;GET AC # OF UUO LSH 1,-27 ANDI 1,17 MOVE 0,(1) ;GET C(AC) CAIG 1,1 ;IS AC # = TO SAVE AC ? MOVE 0,%ERAC0(1) ;YES, GET SAVED AC PNTHW ;PRINT C(AC) MOVE CONSW TLNE TXTINH ;PRINT FAILURE DES AND FLT NBR ? JRST %ERMORE ;NO, RESTORE AC'S ETC. ;PRINT FAILURE DESCRIPTOR MOVE 1,%ACS1A ;GET UUO NUMBER CAIG 1,1 ;PRINT DESCRIPTOR ? JRST %ERMS3 ;NO, JUST PRINT FAULT NUMBER PCRL MOVE %FLTTB(1) PNTAL ;PRINT FAULT DESCRIPTOR ;PRINT FAULT NUMBER %ERMS3: PMSG <^FAULT NUMBER = > MOVEI TLET PNTA ;PRINT TEST LETTER HRRZ $SVUUO TRNE 700000 JRST %ER6X TRNE 070000 JRST %ER5X TRNE 007000 JRST %ER4X PNT3 ;PRINT FAULT NUMBER %ER7X: PCRL JRST %ERMORE %ER4X: PNT4 JRST %ER7X %ER5X: PNT5 JRST %ER7X %ER6X: PNT6 JRST %ER7X ;FAILURE DESCRIPTORS TLET: 0 ;TEST LETTER %FLTTB: 0 ;DESCRIPTOR TABLE %NODES: [0] ;NO DESCRIPTOR SPDES: [0] ;SPECIAL USER FAILURE DESCRIPTOR $ACF: [ASCIZ/C(AC) FAILED/] %AC1F: [ASCIZ/C(AC+1) FAILED/] %EF: [ASCIZ/C(E) FAILED/] %E1F: [ASCIZ/C(E+1) FAILED/] %ARF: [ASCIZ/C(C(ACR)) FAILED/] %AR1F: [ASCIZ/C(C(ACR+1)) FAILED/] %ALF: [ASCIZ/C(C(ACL)) FAILED/] %EEF: [ASCIZ/C(C(E)) FAILED/] %FF: [ASCIZ/FLAG FAILED/] > XLIST IFDEF ERRELB,< LIST ;RELIABILITY FORMAT ERROR PRINTER %ERMS2: SETZM %RAND# ;CLEAR PNT C(RAN) FLAG MOVE 1,%ACS1A CAIL 1,11 ;UUO # 11-13 SETOM %RAND ;YES, SET PNT C(RAN) FLAG TRZ 1,10 ;MAKE UUO # 1-7 MOVEM 1,%ACS1A MOVE 2,ERRPC ;GET UUO ADDRESS MOVE 2,-1(2) ;GET INST IN UUO-1 CAIL 1,4 ;UUO # < THAN 4 ? MOVE 2,$SVUUO ;YES, GET UUO MOVEM 2,%CNTE# ;SAVE E ADDRESS MOVE 2,%ERAC2 MOVE 1,%ERAC1 MOVE 0,%ERAC0 MOVEI 1,@%CNTE ;GET ADRS FIELD OF UUO OR UUO-1 MOVEM 1,%EE1# MOVE 1,%ERAC1 MOVE 1,@%EE1 ;GET C(E) MOVEM 1,%EE1A# MOVE 1,%ERAC1 MOVEI 1,@$SVUUO ;GET ADDRESS FIELD OF UUO MOVEM 1,%EE2# MOVE 1,%ACS1A CAIN 1,3 ;UUO # 3 ? JRST .+4 ;YES MOVE 1,%ERAC1 MOVE 1,@%EE2 ;GET C(E) OF UUO MOVEM 1,%EE2A# MOVE 2,%ACS1A ;GET UUO # MOVE 1,%CNTE LSH 1,-27 ;GET AC NUMBER ANDI 1,17 CAIG 2,5 ;UUO # 6,7 OR 2 CAIN 2,2 JRST %ERR2 ;YES, GO PNT E AND C(E) ;PRINT ERROR AC PMSG <^AC = > MOVE 0,1 PNT2 ;PRINT AC NUMBER PMSG <^C(AC)= > MOVE 0,(1) ;GET C(AC) CAIG 1,2 ;IS AC # = SAVED AC ? MOVE 0,%ERAC0(1) ;YES, GET SAVED AC %ERRB: PNTHW ;PRINT C(AC) OR UUO2 (E) ;PRINT ERROR INFO CAIN 2,5 ;UUO # 5 JRST %ERR4 ;YES, GO PNT 'TST','SKP', OR ETC. PMSG <^COR = > MOVE 0,(1) ;GET C(AC) CAIG 1,2 ;IS AC # = SAVED AC ? MOVE 0,%ERAC0(1) ;YES, GET SAVED AC CAIE 2,2 MOVE 0,%EE1A ;UUO # 2, GET C(E) PNTHW ;PRINT C(E) OR UUO2 C(AC) CAIL 2,4 ;UUO # >3 ? JRST %ERRC ;YES, RESTORE AC'S AND RETURN PMSG <^ ORIGINAL> %ERRB1: MOVE 1,$SVUUO LSH 1,-27 ;GET AC # OF UUO ANDI 1,17 PMSG <^C(AC)= > MOVE 0,(1) ;GET C(AC) CAIG 1,2 ;IS AC # = SAVED AC ? MOVE 0,%ERAC0(1) ;YES, GET SAVED AC SKIPE %RAND ;PRINT C(RAN) FLAG SET ? MOVE 0,RAN# ;YES PNTHW ;PRINT C(AC) OR C(RAN) CAIN 2,3 ;UUO # 3 ? JRST %ERR2 ;YES, PRINT E, RESTORE AC'S AND RETURN CAIN 2,7 ;UUO # 7 ? JRST %ERRC ;YES, BYPASS PRINTING C(E) PMSG <^C(E) = > MOVE 0,%EE2A PNTHW ;PRINT C(E) JRST %ERRC %ERR2: PMSG <^E = > MOVE 0,%EE2 CAIN 2,2 ;UUO # 2 ? MOVE 0,%EE1 PNT6 ;PRINT E OF UUO OR UUO-1 CAIL 2,6 ;UUO 6 OR 7 ? JRST %ERRB1 ;YES, GO PNT C(AC), C(E) AND RETURN CAIN 2,3 ;UUO # 3 ? JRST %ERRC ;YES, RESTORE AC'S AND RETURN PMSG <^C(E) = > MOVE 0,%EE1A ;GET C(E) JRST %ERRB ;PRINT ASCII COMMENT %ERR4: HRRZI 0,@$SVUUO PNTA ;PRINT 'TST','SKP', OR ETC. JRST %ERRC ;COMPLETE PRINTOUT %ERRC: PCRL XLIST IFDEF UUOTXT,< LIST MOVE 0,CONSW TLNN TXTINH ;PRINT DIAGNOSTIC COMMENT ? CAIE 2,7 ;UUO # 7 ? JRST %ERMORE ;NO, RESTORE AC'S AND RETURN MOVE 0,%EE2 ;YES PNTAL ;PRINT DIAGNOSTIC COMMENT PCRL > LIST JRST %ERMORE > LIST ;RESTORE AC'S AND RETURN OR HALT %ERMORE:XCT ERMORE PNTMGN ;PRINT MARGINS SWITCH %ERRS1: TTALTM ;ALTMODE CHECK JRST .+4 ;NONE MOVEI .+3 ;SAVE CONT ADDRESS MOVEM JOBOPC JRST @ALTMGO ;PERFORM TRANSFER MOVE CONSW TLNE 0,ERSTOP ;HALT ON ERROR SWITCH SET ? ERRHLT ;YES TLNN 0,LOOPER ;LOOP ON ERROR SWITCH SET ? SETOM PROCED ;NO, SET THE PROCEED FLAG TLNE 0,DING ;RING BELL SWITCH SET ? PBELL ;YES, GO RING BELL %ERRS2: MOVE 2,%ERAC2 ;RESTORE AC'S MOVE 1,%ERAC1 SETOM @ERRLOP ;SET C(ERR LOOP AC) TO -1 SKIPN PROCED ;LOOP ON ERROR ? JRST %ERRS5 ;YES AOS @ERRLOP ;NO, INC C(ERR LOOP AC) AOS @ERRLOP ;SO IT ='S 1 SKIPL MONCTL ;UNDER DIAGNOSTIC MONITOR ? JRST %ERRS5 ;NO, CONTINUE PROGRAM MOVE 0,ERRTLS ;YES CAIL 0,5 ;PRINTED ALLOWED ERRORS ? JRST $BEND2 %ERRS5: MOVE 0,%ERAC0 ;NO, CONTINUE PROGRAM IFDEF EXCASB,> JRST UUOEXT %ERRS4: MOVE 0,CONSW TLNN PALERS ;PRINT ALL ERRORS ? JRST %ERRS1 ;NO JRST %ERMS1 ;YES