Cleaned up more typos and fixed paging issues.
[retro-software/dec/tops10/v4.5.git] / src / errcon.mac
1 TITLE ERRCON - MONITOR DETECTED ERROR HANDLING ROUTINES - V404\r
2 SUBTTL T.HASTINGS/TH/RCC   TS  01 JUN 69\r
3 XP VERRCN,404\r
4                         ;THIS MACRO PUTS VERSION NO. IN STORAGE MAP AND GLOB\r
5 \r
6         ENTRY ERRCON    ;ALWAYS LOAD ERRCON(IF LIB SEARCH)\r
7 ERRCON:\r
8 \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
13 \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
21 \r
22 INTERNAL APRILM\r
23 EXTERNAL USRREL,APRPC\r
24 EXTERNAL APRERR,CONMES,HOLD,INLMES,JOBN,PJOB,PRQM\r
25 EXTERNAL STOP1,TTYFUW,USRXIT,UUO0,WSCHED\r
26 \r
27 APRILM: SETZM APRERR            ;CLEAR FLAG IMMEDIATELY,IN CASE OTHER ERRORS OCCUR\r
28         TRNN TAC,ILM            ;ILLEGAL MEMORY?\r
29         JRST APRNXM             ;NO\r
30         HRRZ TAC,APRPC          ;YES, PC STORED BY APR INTERRUPT\r
31 IFE FT2REL,<\r
32         CAMG TAC,USRREL         ;IS PC IN BOUNDS/\r
33 >\r
34 IFN FT2REL,<\r
35         EXTERN SEGILM\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
38 >\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
43 \r
44 APRILR: JSP TAC,ERRPTU\r
45         ASCIZ /ILL MEM REF/\r
46         JRST APRSCD             ;PRINT LOC, THEN STOP JOB\r
47 \f\r
48 APRNXM: TRNN TAC,NXM            ;NON-EX MEM?\r
49         JRST APRPDL             ;NO\r
50         JSP TAC,ERRPTU          ;YES\r
51         ASCIZ /NON EX MEM/\r
52         JRST APRSCD             ;PRINT LOC, THEN STOP JOB\r
53 \r
54 APRPDL: TRNN TAC,POV            ;PUSHDOWN OVERFLOW?\r
55         JSP DAT,UERROR          ;NO, MUST BE HARDWARE PROBLEM\r
56         JSP TAC,ERRPTU          ;YES\r
57         ASCIZ /PDL OV/\r
58 APRSCD: MOVE TAC1,APRPC         ;PRINT APR PC\r
59         JRST PCPNT              ;AS:\r
60                                 ; 1)"AT USER LOC XXX" OR\r
61                                 ; 2)"AT EXEC LOC XXX; EXEC CALLED FROM \r
62                                 ; EXEC/USER LOC YYY\r
63 \f\r
64 ;ADDRESS CHECK ERROR AT ANY LEVEL\r
65 ;DEVDAT MUST BE SET UP TO POINT TO OFFENDING DEVICE\r
66 \r
67 INTERNAL ADRERR\r
68 \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
73                                 ; THEN STOP JOB\r
74 \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
81 \r
82 INTERNAL ERROR,UERROR,CERROR,OERROR\r
83 EXTERNAL JOB,ERRPDL,NULADR\r
84 NLADDR: EXP 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
92 CERROR:\r
93 IFN FTHALT,<\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
96 >\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
102                                 ; THEN STOP JOB\r
103 \r
104 ;INPUT UUO FOR OUTPUT DEVICE\r
105 ;CALLED AT UUO LEVEL ONLY\r
106 \r
107 INTERNAL ILLINP\r
108 \r
109 ILLINP: JSP TAC,ERRPTU\r
110         ASCIZ /OUTPUT /\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\r
115 ;OUTPUT UUO FOR INPUT DEVICE\r
116 ;CALLED AT UUO LEVEL ONLY\r
117 \r
118 INTERNAL ILLOUT\r
119 \r
120 ILLOUT: JSP TAC,ERRPTU\r
121         ASCIZ /INPUT /\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
125 \r
126 ;ILLEGAL DEVICE DATA MODE (INIT, OPEN, OR SETSTS UUOS)\r
127 ;CALLED AT UUO LEVEL ONLY\r
128 \r
129 INTERNAL ILLMOD\r
130 \r
131 ILLMOD: JSP TAC,ERRPTU\r
132         ASCIZ /ILLEGAL DATA MODE FOR /\r
133         JRST DEVEXC             ;PRINT "DEVICE XXX",UUO PC\r
134 \r
135 ;IO UUO TO USER CHANNEL WITH NO PREVIOUS INIT OR OPEN\r
136 ;CALLED AT UUO LEVEL ONLY\r
137 \r
138 INTERNAL IOIERR\r
139 \r
140 IOIERR: JSP TAC,ERRPTU\r
141         ASCIZ /IO TO UNASSIGNED CHANNEL/\r
142         JRST UUOPCP             ;PRINT UUO PC\r
143 \f;ILLEGAL UUO\r
144 ;CALLED AT UUO LEVEL ONLY\r
145 \r
146 INTERNAL UUOERR\r
147 \r
148 UUOERR: JSP TAC,ERRPTU\r
149         ASCIZ /ILLEGAL UUO/\r
150         MOVE TAC1,UUO0          ;GET LAST UUO PC\r
151 IFN FTHALT,<\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
155 >\r
156         SOJA TAC1,PCPNT         ;AND PRINT, PRINT USER UUO PC IF DIFF.\r
157 \r
158 ;ILLEGAL INSTRUCTION\r
159 \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
163 \r
164 INTERNAL ILLINS\r
165 EXTERNAL JOBPD1,TTYSTC\r
166 \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
170         JSP TAC,ERRPTU\r
171         ASCIZ /ILL INST./\r
172         JRST UUOPCP             ;PRINT UUO PC AD STOP JOB\r
173 \r
174 HALTI:  JSP TAC,ERRPTU\r
175         ASCIZ /HALT/\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
179         ASCIZ /\r
180 ^C\r
181 \r
182 ./\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
191 ;       PUSHJ PDP,DEVHNG\r
192 \r
193 INTERNAL DEVHNG\r
194 \r
195 DEVHNG: MOVEI TAC,IOACT         ;TURN OFF IO DEVICE ACTIVE BIT IN\r
196         ANDCAM TAC,DEVIOS(DEVDAT);MEMORY AND IOS\r
197         TRZ IOS,IOACT\r
198         JSP TAC,ERRDEV\r
199         ASCIZ /HUNG /\r
200         JRST DEVEXC\r
201 \r
202 ;BAD DECTAPE DIRECTORY\r
203 ;CALLED AT INTERRUPT AND UUO LEVELS WITH DEVDAT AND ITEM SETUP\r
204 \r
205 INTERNAL BADDIR\r
206 \r
207 BADDIR: JSP TAC,ERRPNT\r
208         ASCIZ /BAD DIRECTORY FOR /\r
209 \r
210 ;ROUTINE TO PRINT "DEVICE XXX; EXEC CALLED FOR EXEC/USER YYY"\r
211 ;THEN STOP JOB\r
212 ;TO BE USED BY DEVICE DEPENDENT ERROR MESSAGES AFTER JSP TAC,DEVERR\r
213 \r
214 INTERNAL DEVEXC\r
215 \r
216 DEVEXC: PUSHJ PDP,ERNAM         ;PRINT "DEVICE XXX"\r
217         JRST EXCALP             ;PRINT "EXEC CALLED FROM EXEC/USER LOC YYY"\r
218 \r
219 \f\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
223 ;       PUSHJ PDP,HNGSTP\r
224 \r
225 INTERNAL HNGSTP\r
226 \r
227 HNGSTP: PUSH PDP,ITEM\r
228         PUSH PDP,IOS\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
234 ASCIZ   / OK?\r
235 ^C\r
236 \r
237 ./\r
238         PUSHJ PDP,TTYSTC        ;START UP TTY IN COMMAND MODE\r
239         POP PDP,DEVDAT          ;BRING BACK DEV DDB & IOS WORD\r
240         POP PDP,IOS\r
241         PUSHJ PDP,STOP1         ;STOP JOB &\r
242         POP PDP,ITEM\r
243         JRST WSCHED             ;RESCHEDULE\r
244 \f\r
245 ;COMMON ERROR MESSAGE SETUP ROUTINES\r
246 ;CALL:  JSP TAC,ERRPTU, ERRDEV, OR ERRPNT\r
247 ;       ASCIZ /MESSAGE/\r
248 ;       RETURNS HERE WITH DEVDAT SAVED 0(PDP)\r
249 ;       C(DEVDAT)=TTYDDB, DAT TO TTY OUTPUT BUFFER POINTER\r
250 ;       ITEM=JOB NUMBER\r
251 \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
257 \r
258 INTERNAL ERRPTU\r
259 INTERNAL ERRDEV,ERRPNT\r
260 EXTERNAL PJOBN,JOB,JBTADR,JBTDAT,TTYFND,NULERR\r
261 IFN FTTTYSER,<EXTERNAL TTYERP>\r
262 \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
269 \r
270         PUSH PDP,DAT            ;SAVE CALL TO ERROR(JSP DAT,ERROR)\r
271 IFN FTRCHK,<\r
272         CAIL    ITEM,JOBN       ;JOB NUMBER\r
273         HALT    .               ;OUT OF RANGE?\r
274 >\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
278 IFN JDAT-PROG,<\r
279         MOVE PROG,JBTADR(ITEM)  ;JOB RELOCATION\r
280 >\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
283                                 ;SET MERTPO IN DDB\r
284 >\r
285         PUSHJ PDP,INLMES\r
286         ASCIZ /?\r
287 ERROR IN JOB /\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
294 \r
295 INTERNAL UUOPCP,UUOMES\r
296 EXTERNAL JOBPD1\r
297 \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
302 \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
307 \r
308 ;CALL:  MOVE TAC1, XXX          ;WITH PC FLAGS IN LH\r
309 \r
310 ;       PUSHJ PDP,PCPNT\r
311 ;       NEVER RETURN IF AT UUO LEVEL\r
312 \r
313 INTERNAL PCPNT\r
314 EXTERNAL TPOPJ\r
315 \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
319 \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
323 ;AND STOP JOB\r
324 ;CALL:  PUSHJ PDP,EXCALP\r
325 ;       NEVER RETURNS IF AT UUO LEVEL\r
326 \r
327 INTERNAL EXCALP,PCSTOP\r
328 \r
329 EXCALP: PUSHJ PDP,INLMES\r
330         ASCIZ /; UUO/\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
337 \f\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
341 ;       PUSHJ PDP,PCP\r
342 \r
343 \r
344 XMODE:  ASCIZ / AT EXEC /\r
345 UMODE:  ASCIZ / AT USER /\r
346 \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
352                                 ; FALL INTO OCTPNT\r
353 \r
354 \r
355 INTERN OCTPNT\r
356 \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
360 ;       PUSHJ PDP,OCTPNT\r
361 ;       RETURN TAC1,PRESERVED,TAC DESTROYED\r
362 \r
363 OCTPNT: HRLZ TAC,TAC            ;MOVE TO LH FOR ROTATING\r
364         TRO TAC,700000          ;SETUP AN END FLAG\r
365 \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
372 \r
373 ;ROUTINE TO ADD 1 TO TAC AND PRINT DECIMAL\r
374 ;SAME CALL AS OCTPNT\r
375 \r
376         INTERN DECP1\r
377 \r
378 DECP1:  AOJA TAC,RADX10         ;ADD 1 AND GO PRINT\r
379 \r
380 ;ROUTINE TO PRINT DECIMAL\r
381 ;CALL:  SAME AS OCTPNT\r
382 ;TAC1:  PRESERVED\r
383 \r
384 INTERN RADX10\r
385 \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
390 \r
391 ;RECURSIVE DECIMAL PRINT ROUTINE\r
392 ;CALL:  MOVE TAC,DECIMAL NO.\r
393 ;       PUSHJ PDP,PRTDIG\r
394 \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         HRLZ TAC,(PDP)          ;YES, GET LAST NUMBER\r
400 PRTNUM: ADDI TAC,"0"            ;CONVERT TO ASCIZ\r
401 IFN FTTTYSER,<\r
402 EXTERN OUTCHS\r
403         MOVE    TEM,TAC         ;PUT CHAR IN CHAR AC\r
404         JRST    OUTCHS          ;AND OUTPUT IN SCNSRF\r
405 >\r
406 IFE FTTTYSER,<\r
407         IDPB    TAC,DAT         ;ADD CHAR TO HALGF DUPLEX OUTPUT STREAM\r
408         POPJ PDP,\r
409 >\r
410 \f\r
411 ;ROUTINE TO PRINT "DEVICE XXX"\r
412 ;CALL   MOVE DAT,ASCII OUTPUT BYTE POINTER\r
413 ;       PUSH PDP,DEVDAT\r
414 ;       PUSHJ PDP,ERNAM\r
415 \r
416 INTERNAL ERNAM\r
417 \r
418 ERNAM:  PUSHJ PDP,INLMES\r
419         ASCIZ /DEVICE /\r
420         SKIPE TAC1,-1(PDP)      ;IS DEVDAT = 0?\r
421         MOVE TAC1,DEVNAM(TAC1)  ;NO, GET DEVICE NAME\r
422 \r
423 \r
424 ;ROUTINE TO PRINT SIXBIT NAME\r
425 ;CALL   MOVE DAT,ASCII OUTPUT BYTE POINTER\r
426 ;       MOVE TAC1,NAME\r
427 ;       PUSHJ PDP,PRNAME\r
428 \r
429 INTERNAL PRNAME\r
430 EXTERNAL CPOPJ\r
431 \r
432 PRNAME: MOVEI TAC,0\r
433         LSHC TAC,6              ;SHIFT IN NEXT CHAR.\r
434         JUMPE TAC,CPOPJ\r
435         MOVEI   TEM,40(TAC)     ;ASCII VERSION INTO CHREC FOR OUTCHS\r
436 IFN FTTTYSER,<\r
437 EXTERN OUTCHS\r
438         PUSHJ   PDP,OUTCHS\r
439 >\r
440 IFE FTTTYSER,<\r
441         IDPB    TEM,DAT\r
442 >\r
443         JRST PRNAME\r
444 \r
445 \r
446 ERREND: END\r
447 \f\r
448 \0\r