1 TITLE ERRCON - MONITOR DETECTED ERROR HANDLING ROUTINES - V404
\r
2 SUBTTL T.HASTINGS/TH/RCC TS 01 JUN 69
\r
4 ;THIS MACRO PUTS VERSION NO. IN STORAGE MAP AND GLOB
\r
6 ENTRY ERRCON ;ALWAYS LOAD ERRCON(IF LIB SEARCH)
\r
9 ;THESE ERROR ROUTINE PRINT "ERROR IN JOB N"
\r
10 ;FOLLOWED BY AN APPROPRIATE ERROR MESSAGE
\r
11 ;THEN THE JOB IS STOPPED AND CONSOLE IS RETURNED TO
\r
12 ;MONITOR COMMAND MODE
\r
14 ;APR DETECTED ERRORS
\r
15 ;PUSHDOWN OVERFLOW,ILLEGAL MEMORY, NONEXISTENT MEMORY
\r
16 ;FOR WHICH THE USER IS NOT ENABLED.
\r
17 ;SEE APRSER TO SEE HOW APR INTERRUPTS ARE HANDLED
\r
18 ;CALL: SKIPE TAC,APRERR ;RESULT OF CONI APR,APRERR
\r
19 ; PUSHJ PDP,APRLIM ;FROM CLK SERVICE ROUT,(LOWEST PRIORTY PI)
\r
20 ; RETURN TO RESCHEDULE NEW USER
\r
23 EXTERNAL USRREL,APRPC
\r
24 EXTERNAL APRERR,CONMES,HOLD,INLMES,JOBN,PJOB,PRQM
\r
25 EXTERNAL STOP1,TTYFUW,USRXIT,UUO0,WSCHED
\r
27 APRILM: SETZM APRERR ;CLEAR FLAG IMMEDIATELY,IN CASE OTHER ERRORS OCCUR
\r
28 TRNN TAC,ILM ;ILLEGAL MEMORY?
\r
30 HRRZ TAC,APRPC ;YES, PC STORED BY APR INTERRUPT
\r
32 CAMG TAC,USRREL ;IS PC IN BOUNDS/
\r
36 CAMLE TAC,USRREL ;IS PC IN BOUNDS(LOG SEG)?
\r
37 PUSHJ PDP,SEGILM ;NO. IS PC IN LEGAL MEMORY IN HIGH SEG?
\r
39 JRST APRILR ;YES. GO PRINT ILL MEM REF
\r
40 JSP TAC,ERRPTU ;NO. PRINT PC EXCEEDS MEM BOUND
\r
41 ASCIZ /PC OUT OF BOUNDS/
\r
42 JRST APRSCD ;PRINT LOC, THEN STOP JOB
\r
44 APRILR: JSP TAC,ERRPTU
\r
46 JRST APRSCD ;PRINT LOC, THEN STOP JOB
\r
48 APRNXM: TRNN TAC,NXM ;NON-EX MEM?
\r
52 JRST APRSCD ;PRINT LOC, THEN STOP JOB
\r
54 APRPDL: TRNN TAC,POV ;PUSHDOWN OVERFLOW?
\r
55 JSP DAT,UERROR ;NO, MUST BE HARDWARE PROBLEM
\r
58 APRSCD: MOVE TAC1,APRPC ;PRINT APR PC
\r
60 ; 1)"AT USER LOC XXX" OR
\r
61 ; 2)"AT EXEC LOC XXX; EXEC CALLED FROM
\r
64 ;ADDRESS CHECK ERROR AT ANY LEVEL
\r
65 ;DEVDAT MUST BE SET UP TO POINT TO OFFENDING DEVICE
\r
69 ADRERR: JSP TAC,ERRDEV ;GET JOB NO. FROM DEVICE DATA BLOCK
\r
70 ASCIZ /ADDRESS CHECK FOR /
\r
71 JRST DEVEXC ;PRINT "DEVICE XXX; EXEC CALLED FROM
\r
72 ; EXEC/USER LOC YYY"
\r
75 ;UNEXPLAINABLE MONITOR ERROR
\r
76 ;CALL: JSP DAT,UERROR ;AT UUO LEVEL(PDP SET UP)
\r
77 ; JSP DAT,ERROR ;AT INTERRUPT LEVEL(PDP NOT SET UP)
\r
78 ; JSP DAT,OERROR ;AT INTERRUPT OR UUO LEVEL (PDP SET UP) -MESSAGE TO
\r
79 ; ; OPERATOR'S CONSOLE RATHER THAN SPECIAL JOB
\r
80 ; JSP DAT,CERROR ;BLAME JOB=C(ITEM), PDP SETUP
\r
82 INTERNAL ERROR,UERROR,CERROR,OERROR
\r
83 EXTERNAL JOB,ERRPDL,NULADR
\r
85 ERROR: MOVEI PDP,ERRPDL ;USE LOWER CORE FOR PD LIST
\r
86 OERROR: PUSH PDP,NLADDR ;PUSH ADR, OF NULJOB ON PD LIST IN CASE
\r
87 ; THIS ERROR IS AT PI LEVEL 7 OR HIGHER
\r
88 ; SO NULL JOB WILL BE STARTED WHEN LAST
\r
89 ; POPJ IS DONE(STOP2 IN RUNCSS)
\r
90 TDZA ITEM,ITEM ;BLAME JOB 0(PRINT ON OPERATORS TTY)
\r
91 UERROR: MOVE ITEM,JOB ;PRINT FOR CURRENT JOB
\r
94 HALT .+1 ;PUT ADR OF JSP DAT, IN PC AND STOP SO A
\r
95 ; DUMP CAN BE TAKEN,CONTINUE WILL PRINT ERROR MESSAGE
\r
97 JSP TAC,ERRPNT ;ITEM ALREADY SETUP
\r
98 ASCIZ /ERROR IN MONITOR/
\r
99 MOVE TAC1,-1(PDP) ;GET LOC OF JSP DAT,ERROR
\r
100 JRST PCPNT ;PRINT "AT EXEC LOC XXX:
\r
101 ; EXEC CALLED FROM EXEC/USER YYY"
\r
104 ;INPUT UUO FOR OUTPUT DEVICE
\r
105 ;CALLED AT UUO LEVEL ONLY
\r
109 ILLINP: JSP TAC,ERRPTU
\r
111 PUSHJ PDP,ERNAM ;PRINT "DEVICE XXX"
\r
112 JSP TAC,UUOMES ;PRINT MESSAGE,UUOPC,STOP JOB
\r
113 ASCIZ / CANNOT DO INPUT/
\r
115 ;OUTPUT UUO FOR INPUT DEVICE
\r
116 ;CALLED AT UUO LEVEL ONLY
\r
120 ILLOUT: JSP TAC,ERRPTU
\r
122 PUSHJ PDP,ERNAM ;PRINT "DEVICE XXX"
\r
123 JSP TAC,UUOMES ;PRINT MESSAGE,UUOPC,STOP JOB
\r
124 ASCIZ / CANNOT DO OUTPUT/
\r
126 ;ILLEGAL DEVICE DATA MODE (INIT, OPEN, OR SETSTS UUOS)
\r
127 ;CALLED AT UUO LEVEL ONLY
\r
131 ILLMOD: JSP TAC,ERRPTU
\r
132 ASCIZ /ILLEGAL DATA MODE FOR /
\r
133 JRST DEVEXC ;PRINT "DEVICE XXX",UUO PC
\r
135 ;IO UUO TO USER CHANNEL WITH NO PREVIOUS INIT OR OPEN
\r
136 ;CALLED AT UUO LEVEL ONLY
\r
140 IOIERR: JSP TAC,ERRPTU
\r
141 ASCIZ /IO TO UNASSIGNED CHANNEL/
\r
142 JRST UUOPCP ;PRINT UUO PC
\r
144 ;CALLED AT UUO LEVEL ONLY
\r
148 UUOERR: JSP TAC,ERRPTU
\r
149 ASCIZ /ILLEGAL UUO/
\r
150 MOVE TAC1,UUO0 ;GET LAST UUO PC
\r
152 TLNN TAC1,USRMOD ;UUO FROM EXEC?
\r
153 HALT .+1 ;YES, HALT SO DUMP CAN BE TAKEN
\r
154 ; CONTINUE WILL PRINT MESSAGE
\r
156 SOJA TAC1,PCPNT ;AND PRINT, PRINT USER UUO PC IF DIFF.
\r
158 ;ILLEGAL INSTRUCTION
\r
160 ;HALT INSTRUCTION IS A SPECIAL CASE WHICH STOPS JOB BUT
\r
161 ;THE USER MAY CONTINUE FROM IT(EFFECTIVE ADR.)
\r
162 ;CALLED AT UUO LEVEL WITH A JRST
\r
165 EXTERNAL JOBPD1,TTYSTC
\r
167 ILLINS: HLRZ TAC,UUO ;ILLEGAL OPCODE
\r
168 CAIN TAC,254200+PROG ;IS IT A HALT?
\r
169 JRST HALTI ;YES, PRINT DIFFERENT MESSAGE
\r
172 JRST UUOPCP ;PRINT UUO PC AD STOP JOB
\r
174 HALTI: JSP TAC,ERRPTU
\r
176 SOS TAC1,JOBPD1(JDAT) ;UUOPC=LOC OF HALT+1
\r
177 PUSHJ PDP,PCP ;PRINT "USER LOC XXX"
\r
178 PUSHJ PDP,INLMES ;PRINT MONITOR MODE RESPONSE
\r
183 HRRM UUO,JOBPD1(JDAT) ;SAVE EFFECTIVE ADDRESS OF HALT
\r
184 PUSHJ PDP,TTYSTC ;START TTY TYPING
\r
185 PUSHJ PDP,STOP1 ;STOP JOB
\r
186 ; RETURN ONLY IF HE TYPES CONT
\r
187 PUSH PDP,JOBPD1(JDAT) ;PUT USER RETURN ON END OF PD LIST
\r
188 JRST USRXIT ;RETURN TO USER IN CASE HE TYPES CONT COMMAND
\r
189 \f;ROUTINE FOR HUNG IO DEVICE
\r
190 ;CALL MOVE DEVDAT,ADDRESS OF DEVICE DATA BLOCK
\r
195 DEVHNG: MOVEI TAC,IOACT ;TURN OFF IO DEVICE ACTIVE BIT IN
\r
196 ANDCAM TAC,DEVIOS(DEVDAT);MEMORY AND IOS
\r
202 ;BAD DECTAPE DIRECTORY
\r
203 ;CALLED AT INTERRUPT AND UUO LEVELS WITH DEVDAT AND ITEM SETUP
\r
207 BADDIR: JSP TAC,ERRPNT
\r
208 ASCIZ /BAD DIRECTORY FOR /
\r
210 ;ROUTINE TO PRINT "DEVICE XXX; EXEC CALLED FOR EXEC/USER YYY"
\r
212 ;TO BE USED BY DEVICE DEPENDENT ERROR MESSAGES AFTER JSP TAC,DEVERR
\r
216 DEVEXC: PUSHJ PDP,ERNAM ;PRINT "DEVICE XXX"
\r
217 JRST EXCALP ;PRINT "EXEC CALLED FROM EXEC/USER LOC YYY"
\r
220 ;ROUTINE TO HALT A JOB WHEN A DEVICE IS NOT READY FOR I/O
\r
221 ;CALLED FROM XXSER AT UUO LEVEL
\r
222 ;CALL MOVE DEVDAT,ADDR. OF DEV. DDB
\r
227 HNGSTP: PUSH PDP,ITEM
\r
229 PUSH PDP,DEVDAT ;SAVE DEV'S IOS WORD & DDB
\r
230 PUSHJ PDP,TTYFUW ;FIND JOB'S TTY & WAIT UNTIL I/O IS FINISHED
\r
231 PUSHJ PDP,PRQM ;PRINT QUESTION MARK FOR BATCH
\r
232 PUSHJ PDP,ERNAM ;PRINT "DEVICE XXX"
\r
233 PUSHJ PDP,INLMES ;AND MSG.
\r
238 PUSHJ PDP,TTYSTC ;START UP TTY IN COMMAND MODE
\r
239 POP PDP,DEVDAT ;BRING BACK DEV DDB & IOS WORD
\r
241 PUSHJ PDP,STOP1 ;STOP JOB &
\r
243 JRST WSCHED ;RESCHEDULE
\r
245 ;COMMON ERROR MESSAGE SETUP ROUTINES
\r
246 ;CALL: JSP TAC,ERRPTU, ERRDEV, OR ERRPNT
\r
248 ; RETURNS HERE WITH DEVDAT SAVED 0(PDP)
\r
249 ; C(DEVDAT)=TTYDDB, DAT TO TTY OUTPUT BUFFER POINTER
\r
252 ;USE ERRPTU IF AT UUO LEVEL FOR SURE
\r
253 ;ERRDEV IF ERROR FOR AN ASSIGNED DEVICE AT ANY LEVEL
\r
254 ;ERRPNT WITH ITEM ALREADY SET TO OFFENDING JOB NUMBER
\r
255 ;THE JSP CALL IS USED IN CASE PUSHDOWN SPACE BECOMES CRITICAL
\r
256 ;AGAIN AND ERRPNT HAS TO WIRE EXISTING LIST OUT
\r
259 INTERNAL ERRDEV,ERRPNT
\r
260 EXTERNAL PJOBN,JOB,JBTADR,JBTDAT,TTYFND,NULERR
\r
261 IFN FTTTYSER,<EXTERNAL TTYERP>
\r
263 ERRPTU: SKIPA ITEM,JOB ;BLAME CURRENT JOB IS NOT 0.
\r
264 ERRDEV: LDB ITEM,PJOBN ;JOB NO, FROM DEVICE DATA BLOCK
\r
265 ERRPNT: SKIPN ITEM ;ERROR IN NULL JOB?
\r
266 SETOM NULERR ;YES, SET FLAG FOR ERROR IN NULL JOB
\r
267 ; SO STATE OF NULL JOB WILL BE REESTABLISHED
\r
268 ; WHEN IS IT RUN AGAIN(SEE CLOCK1)
\r
270 PUSH PDP,DAT ;SAVE CALL TO ERROR(JSP DAT,ERROR)
\r
272 CAIL ITEM,JOBN ;JOB NUMBER
\r
273 HALT . ;OUT OF RANGE?
\r
275 PUSH PDP,DEVDAT ;SAVE ADR, OF DEV. DATA BLOCK
\r
276 PUSH PDP,TAC ;SAVE RETURN FROM ERRPNT
\r
277 MOVE JDAT,JBTDAT(ITEM) ;EVEN NULL JOB HAS JOB DATA AREA
\r
279 MOVE PROG,JBTADR(ITEM) ;JOB RELOCATION
\r
281 IFE FTTTYSER,< PUSHJ PDP,TTYFND ;FIND TTY FOR THIS JOB(ITEM)>
\r
282 IFN FTTTYSER,< PUSHJ PDP,TTYERP ;FIND THIS TTY AND
\r
288 PUSHJ PDP,PJOB ;PRINT JOB NO.
\r
289 JRST INLMES ;PRINT MESSAGE SPECIFIED BY CALLER
\r
290 ; AND RETRUN TO LOC. AFTER MESSAGE
\r
291 \f;ROUTINE TO PRINT UUO PC AND STOP JOB
\r
292 ;IF IN USER MODE PC WILL PRINT AS "AT USER LOC XXX"
\r
293 ;IF IN EXEC MODE "AT EXEC LOC XXX; EXEC CALLED FROM EXEC/USER/ LOC YYY
\r
295 INTERNAL UUOPCP,UUOMES
\r
298 UUOMES: PUSHJ PDP,CONMES ;PRINT MESSAGE POINTED TO BY TAC
\r
299 UUOPCP: MOVE TAC1,JOBPD1(JDAT) ;UUO PC STORED IN JOB DATA AREA
\r
300 ; FIRST LOC ON PD LIST
\r
301 SOJA TAC1,PCPNT ;DECREMENT TO POINT TO UUO IN USER AREA
\r
303 ;ROUTINE TO PRINT ONE OF THREE MESSAGES AND STOP JOB
\r
304 ;1) "AT EXEC LOC XXX; EXEC CALLED FROM EXEC LOC YYY"
\r
305 ;2) "AT EXEC LOC XXX; EXEC CALLED FROM USER LOC YYY"
\r
306 ;3) "AT USER LOC YYY"
\r
308 ;CALL: MOVE TAC1, XXX ;WITH PC FLAGS IN LH
\r
311 ; NEVER RETURN IF AT UUO LEVEL
\r
316 PCPNT: PUSHJ PDP,PCP ;PRINT " AT EXEC XXX" OR "AT USER "
\r
317 TLNE TAC1,USRMOD ;WAS PC IN USER MODE?
\r
318 JRST PCSTOP ;YES, ENOUGH INFO.
\r
320 ;ROUTINE TO PRINT EITHER
\r
321 ;1) "; EXEC CALLED FROM EXEC LOC YYY"
\r
322 ;2) "; EXEC CALLED FROM USER LOC YYY"
\r
324 ;CALL: PUSHJ PDP,EXCALP
\r
325 ; NEVER RETURNS IF AT UUO LEVEL
\r
327 INTERNAL EXCALP,PCSTOP
\r
329 EXCALP: PUSHJ PDP,INLMES
\r
331 MOVE TAC1,JOBPD1(JDAT) ;UUO PC IN JOB DATA AREA
\r
332 SUBI TAC1,1 ;BACK IT UP TO POINT TO UUO
\r
333 PUSHJ PDP,PCP ;PRINT "EXEC LOC " OF USER LOC
\r
334 PCSTOP: PUSHJ PDP,HOLD ;STOP JOB, START TTY AND SET JOB ERROR BIT
\r
335 POP PDP,DEVDAT ;RETURN ONLY IF AT INTERRUPT LEVEL
\r
336 JRST TPOPJ ;REMOVE ERROR CALL AND RETURN
\r
338 ;ROUTINE TO PRINT PC AS:
\r
339 ;1) "EXEC LOC XXX" OR "USER LOC XXX"
\r
340 ;CALL: MOVE TAC1,PC TO PRINT(LH=PC FLAGS)
\r
344 XMODE: ASCIZ / AT EXEC /
\r
345 UMODE: ASCIZ / AT USER /
\r
347 PCP: MOVEI TAC,XMODE ;ASSUME PC IN EXEC MODE
\r
348 TLNE TAC1,USRMOD ;IS IT?
\r
349 MOVEI TAC,UMODE ;NO, USER MODE
\r
350 PUSHJ PDP,CONMES ;PRINT ONE OR OTHER
\r
351 HRRZ TAC,TAC1 ;PRINT RIGHT HALF IN OCTAL
\r
357 ;ROUTINE TO PRINT 6 DIGIT OCTAL NUMBER
\r
358 ;CALL: MOVE DAT,TTY OUTPUT BYTE POINTER
\r
359 ; HRR TAC, OCTAL NUMBER
\r
361 ; RETURN TAC1,PRESERVED,TAC DESTROYED
\r
363 OCTPNT: HRLZ TAC,TAC ;MOVE TO LH FOR ROTATING
\r
364 TRO TAC,700000 ;SETUP AN END FLAG
\r
366 OCTP1: ROT TAC,3 ;GET NEXT OCTAL DIGIT
\r
367 TLNN TAC,777777 ;WAS THAT FLAG?
\r
368 POPJ PDP, ;YES, DO NOT PRINT IT
\r
369 PUSHJ PDP,PRTNUM ;NO, PRINT OCTAL DIGIT
\r
370 HRRI TAC,0 ;CLEAR RH
\r
371 JRST OCTP1 ;GET NEXT OCTAL DIGIT
\r
373 ;ROUTINE TO ADD 1 TO TAC AND PRINT DECIMAL
\r
374 ;SAME CALL AS OCTPNT
\r
378 DECP1: AOJA TAC,RADX10 ;ADD 1 AND GO PRINT
\r
380 ;ROUTINE TO PRINT DECIMAL
\r
381 ;CALL: SAME AS OCTPNT
\r
386 RADX10: PUSH PDP,TAC1 ;SAVE TAC1
\r
387 PUSHJ PDP,PRTDIG ;PRINT DECIMAL DIGITS
\r
388 POP PDP,TAC1 ;RESTORE TAC1
\r
389 POPJ PDP, ;AND RETURN
\r
391 ;RECURSIVE DECIMAL PRINT ROUTINE
\r
392 ;CALL: MOVE TAC,DECIMAL NO.
\r
395 PRTDIG: IDIVI TAC,12 ;DIVIDE BY 10
\r
396 HRLM TAC1,(PDP) ;RT ON PD LIST
\r
397 JUMPE TAC,.+2 ;FINISHED?
\r
398 PUSHJ PDP,PRTDIG ;NO, CALL S OR F
\r
399 HLRZ TAC,(PDP) ;YES, GET LAST NUMBER
\r
400 PRTNUM: ADDI TAC,"0" ;CONVERT TO ASCIZ
\r
403 MOVE TEM,TAC ;PUT CHAR IN CHAR AC
\r
404 JRST OUTCHS ;AND OUTPUT IN SCNSRF
\r
407 IDPB TAC,DAT ;ADD CHAR TO HALGF DUPLEX OUTPUT STREAM
\r
411 ;ROUTINE TO PRINT "DEVICE XXX"
\r
412 ;CALL MOVE DAT,ASCII OUTPUT BYTE POINTER
\r
418 ERNAM: PUSHJ PDP,INLMES
\r
420 SKIPE TAC1,-1(PDP) ;IS DEVDAT = 0?
\r
421 MOVE TAC1,DEVNAM(TAC1) ;NO, GET DEVICE NAME
\r
424 ;ROUTINE TO PRINT SIXBIT NAME
\r
425 ;CALL MOVE DAT,ASCII OUTPUT BYTE POINTER
\r
432 PRNAME: MOVEI TAC,0
\r
433 LSHC TAC,6 ;SHIFT IN NEXT CHAR.
\r
435 MOVEI TEM,40(TAC) ;ASCII VERSION INTO CHREC FOR OUTCHS
\r