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
15 ;APR DETECTED ERRORS
\r
16 ;PUSHDOWN OVERFLOW,ILLEGAL MEMORY, NONEXISTENT MEMORY
\r
17 ;FOR WHICH THE USER IS NOT ENABLED.
\r
18 ;SEE APRSER TO SEE HOW APR INTERRUPTS ARE HANDLED
\r
19 ;CALL: SKIPE TAC,APRERR ;RESULT OF CONI APR,APRERR
\r
20 ; PUSHJ PDP,APRLIM ;FROM CLK SERVICE ROUT,(LOWEST PRIORTY PI)
\r
21 ; RETURN TO RESCHEDULE NEW USER
\r
24 EXTERNAL USRREL,APRPC
\r
25 EXTERNAL APRERR,CONMES,HOLD,INLMES,JOBN,PJOB,PRQM
\r
26 EXTERNAL STOP1,TTYFUW,USRXIT,UUO0,WSCHED
\r
28 APRILM: SETZM APRERR ;CLEAR FLAG IMMEDIATELY,IN CASE OTHER ERRORS OCCUR
\r
29 TRNN TAC,ILM ;ILLEGAL MEMORY?
\r
31 HRRZ TAC,APRPC ;YES, PC STORED BY APR INTERRUPT
\r
33 CAMG TAC,USRREL ;IS PC IN BOUNDS/
\r
37 CAMLE TAC,USRREL ;IS PC IN BOUNDS(LOG SEG)?
\r
38 PUSHJ PDP,SEGILM ;NO. IS PC IN LEGAL MEMORY IN HIGH SEG?
\r
40 JRST APRILR ;YES. GO PRINT ILL MEM REF
\r
41 JSP TAC,ERRPTU ;NO. PRINT PC EXCEEDS MEM BOUND
\r
42 ASCIZ /PC OUT OF BOUNDS/
\r
43 JRST APRSCD ;PRINT LOC, THEN STOP JOB
\r
45 APRILR: JSP TAC,ERRPTU
\r
47 JRST APRSCD ;PRINT LOC, THEN STOP JOB
\r
49 \fAPRNXM: TRNN TAC,NXM ;NON-EX MEM?
\r
53 JRST APRSCD ;PRINT LOC, THEN STOP JOB
\r
55 APRPDL: TRNN TAC,POV ;PUSHDOWN OVERFLOW?
\r
56 JSP DAT,UERROR ;NO, MUST BE HARDWARE PROBLEM
\r
59 APRSCD: MOVE TAC1,APRPC ;PRINT APR PC
\r
61 ; 1)"AT USER LOC XXX" OR
\r
62 ; 2)"AT EXEC LOC XXX; EXEC CALLED FROM
\r
64 \f;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
114 \f;OUTPUT UUO FOR INPUT DEVICE
\r
115 ;CALLED AT UUO LEVEL ONLY
\r
119 ILLOUT: JSP TAC,ERRPTU
\r
121 PUSHJ PDP,ERNAM ;PRINT "DEVICE XXX"
\r
122 JSP TAC,UUOMES ;PRINT MESSAGE,UUOPC,STOP JOB
\r
123 ASCIZ / CANNOT DO OUTPUT/
\r
125 ;ILLEGAL DEVICE DATA MODE (INIT, OPEN, OR SETSTS UUOS)
\r
126 ;CALLED AT UUO LEVEL ONLY
\r
130 ILLMOD: JSP TAC,ERRPTU
\r
131 ASCIZ /ILLEGAL DATA MODE FOR /
\r
132 JRST DEVEXC ;PRINT "DEVICE XXX",UUO PC
\r
134 ;IO UUO TO USER CHANNEL WITH NO PREVIOUS INIT OR OPEN
\r
135 ;CALLED AT UUO LEVEL ONLY
\r
139 IOIERR: JSP TAC,ERRPTU
\r
140 ASCIZ /IO TO UNASSIGNED CHANNEL/
\r
141 JRST UUOPCP ;PRINT UUO PC
\r
143 ;CALLED AT UUO LEVEL ONLY
\r
147 UUOERR: JSP TAC,ERRPTU
\r
148 ASCIZ /ILLEGAL UUO/
\r
149 MOVE TAC1,UUO0 ;GET LAST UUO PC
\r
151 TLNN TAC1,USRMOD ;UUO FROM EXEC?
\r
152 HALT .+1 ;YES, HALT SO DUMP CAN BE TAKEN
\r
153 ; CONTINUE WILL PRINT MESSAGE
\r
155 SOJA TAC1,PCPNT ;AND PRINT, PRINT USER UUO PC IF DIFF.
\r
157 ;ILLEGAL INSTRUCTION
\r
159 ;HALT INSTRUCTION IS A SPECIAL CASE WHICH STOPS JOB BUT
\r
160 ;THE USER MAY CONTINUE FROM IT(EFFECTIVE ADR.)
\r
161 ;CALLED AT UUO LEVEL WITH A JRST
\r
164 EXTERNAL JOBPD1,TTYSTC
\r
166 ILLINS: HLRZ TAC,UUO ;ILLEGAL OPCODE
\r
167 CAIN TAC,254200+PROG ;IS IT A HALT?
\r
168 JRST HALTI ;YES, PRINT DIFFERENT MESSAGE
\r
171 JRST UUOPCP ;PRINT UUO PC AD STOP JOB
\r
173 HALTI: JSP TAC,ERRPTU
\r
175 SOS TAC1,JOBPD1(JDAT) ;UUOPC=LOC OF HALT+1
\r
176 PUSHJ PDP,PCP ;PRINT "USER LOC XXX"
\r
177 PUSHJ PDP,INLMES ;PRINT MONITOR MODE RESPONSE
\r
182 HRRM UUO,JOBPD1(JDAT) ;SAVE EFFECTIVE ADDRESS OF HALT
\r
183 PUSHJ PDP,TTYSTC ;START TTY TYPING
\r
184 PUSHJ PDP,STOP1 ;STOP JOB
\r
185 ; RETURN ONLY IF HE TYPES CONT
\r
186 PUSH PDP,JOBPD1(JDAT) ;PUT USER RETURN ON END OF PD LIST
\r
187 JRST USRXIT ;RETURN TO USER IN CASE HE TYPES CONT COMMAND
\r
188 \f;ROUTINE FOR HUNG IO DEVICE
\r
189 ;CALL MOVE DEVDAT,ADDRESS OF DEVICE DATA BLOCK
\r
194 DEVHNG: MOVEI TAC,IOACT ;TURN OFF IO DEVICE ACTIVE BIT IN
\r
195 ANDCAM TAC,DEVIOS(DEVDAT);MEMORY AND IOS
\r
201 ;BAD DECTAPE DIRECTORY
\r
202 ;CALLED AT INTERRUPT AND UUO LEVELS WITH DEVDAT AND ITEM SETUP
\r
206 BADDIR: JSP TAC,ERRPNT
\r
207 ASCIZ /BAD DIRECTORY FOR /
\r
209 ;ROUTINE TO PRINT "DEVICE XXX; EXEC CALLED FOR EXEC/USER YYY"
\r
211 ;TO BE USED BY DEVICE DEPENDENT ERROR MESSAGES AFTER JSP TAC,DEVERR
\r
215 DEVEXC: PUSHJ PDP,ERNAM ;PRINT "DEVICE XXX"
\r
216 JRST EXCALP ;PRINT "EXEC CALLED FROM EXEC/USER LOC YYY"
\r
217 \f;ROUTINE TO HALT A JOB WHEN A DEVICE IS NOT READY FOR I/O
\r
218 ;CALLED FROM XXSER AT UUO LEVEL
\r
219 ;CALL MOVE DEVDAT,ADDR. OF DEV. DDB
\r
224 HNGSTP: PUSH PDP,ITEM
\r
226 PUSH PDP,DEVDAT ;SAVE DEV'S IOS WORD & DDB
\r
227 PUSHJ PDP,TTYFUW ;FIND JOB'S TTY & WAIT UNTIL I/O IS FINISHED
\r
228 PUSHJ PDP,PRQM ;PRINT QUESTION MARK FOR BATCH
\r
229 PUSHJ PDP,ERNAM ;PRINT "DEVICE XXX"
\r
230 PUSHJ PDP,INLMES ;AND MSG.
\r
234 PUSHJ PDP,TTYSTC ;START UP TTY IN COMMAND MODE
\r
235 POP PDP,DEVDAT ;BRING BACK DEV DDB & IOS WORD
\r
237 PUSHJ PDP,STOP1 ;STOP JOB &
\r
239 JRST WSCHED ;RESCHEDULE
\r
240 \f;COMMON ERROR MESSAGE SETUP ROUTINES
\r
241 ;CALL: JSP TAC,ERRPTU, ERRDEV, OR ERRPNT
\r
243 ; RETURNS HERE WITH DEVDAT SAVED 0(PDP)
\r
244 ; C(DEVDAT)=TTYDDB, DAT TO TTY OUTPUT BUFFER POINTER
\r
247 ;USE ERRPTU IF AT UUO LEVEL FOR SURE
\r
248 ;ERRDEV IF ERROR FOR AN ASSIGNED DEVICE AT ANY LEVEL
\r
249 ;ERRPNT WITH ITEM ALREADY SET TO OFFENDING JOB NUMBER
\r
250 ;THE JSP CALL IS USED IN CASE PUSHDOWN SPACE BECOMES CRITICAL
\r
251 ;AGAIN AND ERRPNT HAS TO WIRE EXISTING LIST OUT
\r
254 INTERNAL ERRDEV,ERRPNT
\r
255 EXTERNAL PJOBN,JOB,JBTADR,JBTDAT,TTYFND,NULERR
\r
256 IFN FTTTYSER,<EXTERNAL TTYERP>
\r
258 ERRPTU: SKIPA ITEM,JOB ;BLAME CURRENT JOB IS NOT 0.
\r
259 ERRDEV: LDB ITEM,PJOBN ;JOB NO, FROM DEVICE DATA BLOCK
\r
260 ERRPNT: SKIPN ITEM ;ERROR IN NULL JOB?
\r
261 SETOM NULERR ;YES, SET FLAG FOR ERROR IN NULL JOB
\r
262 ; SO STATE OF NULL JOB WILL BE REESTABLISHED
\r
263 ; WHEN IS IT RUN AGAIN(SEE CLOCK1)
\r
265 PUSH PDP,DAT ;SAVE CALL TO ERROR(JSP DAT,ERROR)
\r
267 CAIL ITEM,JOBN ;JOB NUMBER
\r
268 HALT . ;OUT OF RANGE?
\r
270 PUSH PDP,DEVDAT ;SAVE ADR, OF DEV. DATA BLOCK
\r
271 PUSH PDP,TAC ;SAVE RETURN FROM ERRPNT
\r
272 MOVE JDAT,JBTDAT(ITEM) ;EVEN NULL JOB HAS JOB DATA AREA
\r
274 MOVE PROG,JBTADR(ITEM) ;JOB RELOCATION
\r
276 IFE FTTTYSER,< PUSHJ PDP,TTYFND ;FIND TTY FOR THIS JOB(ITEM)>
\r
277 IFN FTTTYSER,< PUSHJ PDP,TTYERP ;FIND THIS TTY AND
\r
283 PUSHJ PDP,PJOB ;PRINT JOB NO.
\r
284 JRST INLMES ;PRINT MESSAGE SPECIFIED BY CALLER
\r
285 ; AND RETRUN TO LOC. AFTER MESSAGE
\r
286 \f;ROUTINE TO PRINT UUO PC AND STOP JOB
\r
287 ;IF IN USER MODE PC WILL PRINT AS "AT USER LOC XXX"
\r
288 ;IF IN EXEC MODE "AT EXEC LOC XXX; EXEC CALLED FROM EXEC/USER/ LOC YYY
\r
290 INTERNAL UUOPCP,UUOMES
\r
293 UUOMES: PUSHJ PDP,CONMES ;PRINT MESSAGE POINTED TO BY TAC
\r
294 UUOPCP: MOVE TAC1,JOBPD1(JDAT) ;UUO PC STORED IN JOB DATA AREA
\r
295 ; FIRST LOC ON PD LIST
\r
296 SOJA TAC1,PCPNT ;DECREMENT TO POINT TO UUO IN USER AREA
\r
298 ;ROUTINE TO PRINT ONE OF THREE MESSAGES AND STOP JOB
\r
299 ;1) "AT EXEC LOC XXX; EXEC CALLED FROM EXEC LOC YYY"
\r
300 ;2) "AT EXEC LOC XXX; EXEC CALLED FROM USER LOC YYY"
\r
301 ;3) "AT USER LOC YYY"
\r
303 ;CALL: MOVE TAC1, XXX ;WITH PC FLAGS IN LH
\r
306 ; NEVER RETURN IF AT UUO LEVEL
\r
311 PCPNT: PUSHJ PDP,PCP ;PRINT " AT EXEC XXX" OR "AT USER "
\r
312 TLNE TAC1,USRMOD ;WAS PC IN USER MODE?
\r
313 JRST PCSTOP ;YES, ENOUGH INFO.
\r
315 ;ROUTINE TO PRINT EITHER
\r
316 ;1) "; EXEC CALLED FROM EXEC LOC YYY"
\r
317 ;2) "; EXEC CALLED FROM USER LOC YYY"
\r
319 ;CALL: PUSHJ PDP,EXCALP
\r
320 ; NEVER RETURNS IF AT UUO LEVEL
\r
322 INTERNAL EXCALP,PCSTOP
\r
324 EXCALP: PUSHJ PDP,INLMES
\r
326 MOVE TAC1,JOBPD1(JDAT) ;UUO PC IN JOB DATA AREA
\r
327 SUBI TAC1,1 ;BACK IT UP TO POINT TO UUO
\r
328 PUSHJ PDP,PCP ;PRINT "EXEC LOC " OF USER LOC
\r
329 PCSTOP: PUSHJ PDP,HOLD ;STOP JOB, START TTY AND SET JOB ERROR BIT
\r
330 POP PDP,DEVDAT ;RETURN ONLY IF AT INTERRUPT LEVEL
\r
331 JRST TPOPJ ;REMOVE ERROR CALL AND RETURN
\r
332 \f;ROUTINE TO PRINT PC AS:
\r
333 ;1) "EXEC LOC XXX" OR "USER LOC XXX"
\r
334 ;CALL: MOVE TAC1,PC TO PRINT(LH=PC FLAGS)
\r
338 XMODE: ASCIZ / AT EXEC /
\r
339 UMODE: ASCIZ / AT USER /
\r
341 PCP: MOVEI TAC,XMODE ;ASSUME PC IN EXEC MODE
\r
342 TLNE TAC1,USRMOD ;IS IT?
\r
343 MOVEI TAC,UMODE ;NO, USER MODE
\r
344 PUSHJ PDP,CONMES ;PRINT ONE OR OTHER
\r
345 HRRZ TAC,TAC1 ;PRINT RIGHT HALF IN OCTAL
\r
350 ;ROUTINE TO PRINT 6 DIGIT OCTAL NUMBER
\r
351 ;CALL: MOVE DAT,TTY OUTPUT BYTE POINTER
\r
352 ; HRR TAC, OCTAL NUMBER
\r
354 ; RETURN TAC1,PRESERVED,TAC DESTROYED
\r
356 OCTPNT: HRLZ TAC,TAC ;MOVE TO LH FOR ROTATING
\r
357 TRO TAC,700000 ;SETUP AN END FLAG
\r
359 OCTP1: ROT TAC,3 ;GET NEXT OCTAL DIGIT
\r
360 TLNN TAC,777777 ;WAS THAT FLAG?
\r
361 POPJ PDP, ;YES, DO NOT PRINT IT
\r
362 PUSHJ PDP,PRTNUM ;NO, PRINT OCTAL DIGIT
\r
363 HRRI TAC,0 ;CLEAR RH
\r
364 JRST OCTP1 ;GET NEXT OCTAL DIGIT
\r
366 ;ROUTINE TO ADD 1 TO TAC AND PRINT DECIMAL
\r
367 ;SAME CALL AS OCTPNT
\r
371 DECP1: AOJA TAC,RADX10 ;ADD 1 AND GO PRINT
\r
373 ;ROUTINE TO PRINT DECIMAL
\r
374 ;CALL: SAME AS OCTPNT
\r
379 RADX10: PUSH PDP,TAC1 ;SAVE TAC1
\r
380 PUSHJ PDP,PRTDIG ;PRINT DECIMAL DIGITS
\r
381 POP PDP,TAC1 ;RESTORE TAC1
\r
382 POPJ PDP, ;AND RETURN
\r
384 ;RECURSIVE DECIMAL PRINT ROUTINE
\r
385 ;CALL: MOVE TAC,DECIMAL NO.
\r
388 PRTDIG: IDIVI TAC,12 ;DIVIDE BY 10
\r
389 HRLM TAC1,(PDP) ;RT ON PD LIST
\r
390 JUMPE TAC,.+2 ;FINISHED?
\r
391 PUSHJ PDP,PRTDIG ;NO, CALL S OR F
\r
392 HRLZ TAC,(PDP) ;YES, GET LAST NUMBER
\r
393 PRTNUM: ADDI TAC,"0" ;CONVERT TO ASCIZ
\r
396 MOVE TEM,TAC ;PUT CHAR IN CHAR AC
\r
397 JRST OUTCHS ;AND OUTPUT IN SCNSRF
\r
400 IDPB TAC,DAT ;ADD CHAR TO HALGF DUPLEX OUTPUT STREAM
\r
403 \f;ROUTINE TO PRINT "DEVICE XXX"
\r
404 ;CALL MOVE DAT,ASCII OUTPUT BYTE POINTER
\r
410 ERNAM: PUSHJ PDP,INLMES
\r
412 SKIPE TAC1,-1(PDP) ;IS DEVDAT = 0?
\r
413 MOVE TAC1,DEVNAM(TAC1) ;NO, GET DEVICE NAME
\r
415 ;ROUTINE TO PRINT SIXBIT NAME
\r
416 ;CALL MOVE DAT,ASCII OUTPUT BYTE POINTER
\r
423 PRNAME: MOVEI TAC,0
\r
424 LSHC TAC,6 ;SHIFT IN NEXT CHAR.
\r
426 MOVEI TEM,40(TAC) ;ASCII VERSION INTO CHREC FOR OUTCHS
\r