2 ;;; Copyright (c) 1999 Massachusetts Institute of Technology
4 ;;; This program is free software; you can redistribute it and/or
5 ;;; modify it under the terms of the GNU General Public License as
6 ;;; published by the Free Software Foundation; either version 2 of the
7 ;;; License, or (at your option) any later version.
9 ;;; This program is distributed in the hope that it will be useful,
10 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 ;;; General Public License for more details.
14 ;;; You should have received a copy of the GNU General Public License
15 ;;; along with this program; if not, write to the Free Software
16 ;;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 SUBTTL DEMON JOB INTERFACE ROUTINES
20 ;GIVE STUFF TO DEMON JOB RUNNING IN USER MODE, WHICH THEN OUTPUTS
21 ;STUFF IN ITS OWN FORMAT TO THE DISK
22 ;COMMUNICATION IS VIA DMNBUF (BUFFER) AND POINTERS,
23 ;DEMON JOB FINDS IT BY LOOKING UP SYSTEM SYMS
26 ;ROUTINES MUST BE CALLED WITH CLK OFF OR IN PROGRESS
27 ;FIRST CALL DMNP TO SET UP D AS "PDL POINTER" INTO DMNBF
28 ;DMNPSH ADR ;PUSH ADR INTO DMNBF (ASSEMBLES INTO A PUSH)
29 ;FIRST WORD PUSHED SHOULD HAVE ENTRY TYPE DESCRIPTOR IN HIGH SIX BITS
31 ;ENTRY TYPE DESCRIPTORS:
32 DMNELI==10000 ;LOGIN (DMNPLI)
33 DMNELO==20000 ;LOGOUT (DMNPLO)
34 ;^ ADD MORE AS NEEDED, NEED NOT BE SYMBOLIC BUT PLEASE COMMENT THEM HERE FOR XREF
36 ;DMNRS ;NORMALLIZE POINTER (DUE TO STANDARD LENGTH ENTRY IN TABLE)
37 ;ASSEMBLES INTO ONE STORAGE WORD
38 ;THEN CALL (PUSHJ) DMNRT WHICH STORES BACK D
39 ;ALL DMNPSH'S SHOULD BE ASSEMBLED BEFORE DMNRT;
40 ;ALL ROUTINES SHOULD BE BETWEEN THIS PAGE AND DMNBUF
42 ;DMNSZ (# ENTRIES IN DMNBF) DEFINED EARLY IN SYSTEM ENGLISH SO CAN BE CHANGED EASILY
44 DMNFMT==2 ;ASCENDING FORMAT NUMBER, SHOULD BE INCREMENTED EACH TIME
45 ;A CHANGE IS MADE REQUIRING CHANGE IN CODING EITHER OF DEMON JOB
46 ;OR OF PROGRAMS READING ITS OUTPUT
47 ;DMNFNT 1 -> 2 9/71 SWAPIN RQ INCLUDED W/LOGOUT
49 DMNBAC==0 ;DMNPSH COUNTER, AFTER FIRST TIME GETS RE-INITIALIZED TO DMNBLM
56 IF1,DMNBEL==0 ;BECOMES LENGTH PER ENTRY IN DMNBF
60 IF1,IFG DMNBAC-DMNBEL,DMNBEL==DMNBAC
64 ;PUSHJ P,DMNP ;SET UP D FOR DMNPSH'S INTO DMNBF
66 DMNP: MOVE D,DMNBFP ;GET POINTER
67 CAIL D,DMNBFE-1 ;AT END OF BUFFER?
68 MOVEI D,DMNBF-1 ;YES, RE-INITIALIZE
69 AOS DMNBC ;INDICATE ENTRY ABOUT TO BE FILLED, SO DEMON KNOWS IF IT LOST
70 DMNP0: ;DMNP0 MAY BE CALLED IN USER MODE FROM DEMON JOB
71 DMNPSH TIME ;FIRST WORD IN BUFFER ALWAYS TIME OF ENTRY
72 ;^ MAYBE ADD MORE STANDARD PUSHES HERE
75 DMNBLM==DMNBAC ;NUMBER OF INITIAL WORDS PUSHED
77 ;PUSHJ P,DMNRT (BUT USUALLY JRST DMNRT FOR RETURN)
78 ;DMNBF ENTRY COMPLETED, STORE BACK POINTERS
80 DMNRT: TLZ D,-1 ;CLEAR OUT LEFT HALF OF POINTER
81 CAIL D,DMNBFE ;AFTER END OF BUFFER?
82 JRST 4,.+1 ;DMNBF POINTER INCREMENTED INCORRECTLY SOMEWHERE ALONG THE LINE
83 ;PROBABLY PROGRAMMER FORGOT TO DO DMNRS; CODING AFTER DMNBF MIGHT BE CLOBBERED
84 AOS DMNBD ;ENTRY COMPLETE, GIVE IT TO DEMON JOB
88 ;NOW FOR INDIVIDUAL ROUTINES
92 DMNPLI: PUSHJ P,DMNP ;SET UP
93 HRLI U,DMNELI ;INDICATE LOGIN
94 ;PUT FOLLOWING INTO DMNBF:
95 DMNPSH U ;INDEX OF USER BEING LOGGED IN
97 DMNPSH UNAME(U) ;UNAME
98 DMNPSH JNAME(U) ;JNAME
99 DMNPSH TRMNAM(U) ;TERMINAL NAME
106 DMNPLO: PUSHJ P,DMNP ;SET UP D
107 PUSHJ P,LOGUSE ;GET TREE'S USAGE IN T AND TT
108 HRLI U,DMNELO ;INDICATE LOGOUT
109 ;PUT FOLLOWING IN DMNBF FOR DEMON JOB TO DUMP OUT ON DISK:
110 DMNPSH U ;INDEX OF USER BEING LOGGED OUT
112 DMNPSH UNAME(U) ;UNAME OF USER
113 DMNPSH JNAME(U) ;JNAME
114 DMNPSH TT ;TIME USED, IN 4.069 USEC UNITS
115 DMNPSH T ;# SWAPIN REQUESTS (THESE VALID SINCE LOGUSE ALREADY CALLED)
117 ADDM TT,LOUTIM ;COUNT UP TOTAL TIME USED BY ALL LOSERS
121 DMNPL0==CPOPJ ;DMNPL0 MAY BE CALLED FROM DEMON JOB IN USER MODE
122 ;IT IS NO LONGER POSSIBLE TO MAKE THIS WORK RIGHT,
123 ;SO WE JUST RETURN. PFTHMG DRAGON SHOULD BE FIXED.
126 ;DEMON VARIABLES, MUST FOLLOW CODING
127 ;USE CARE IN REDEFINING SYMBOLS ON THIS PAGE; DEMON JOB RUNNING IN USER MODE
128 ;LOOKS AT SOME OF THEM, EXCEPT AS INDICATED
130 DMNBF: BLOCK DMNBEL*DMNSZ ;BUFFER
133 DMNBC: 0 ;ENTRY COUNT, INCREMENTED JUST BEFORE ENTRY ADDED TO DMNBF (USED BY DEMON)
134 DMNBD: 0 ;ENTRY COUNT, INCREMENTED JUST AFTER " " "
135 DMNBFP: DMNBF-1 ;POINTER INTO BUFFER, HAS ADR OF LAST WORD WRITTEN (NOT USED BY DEMON)
136 VSCLAU: 0 .SEE VSCLA1 ;LAST JOB TREE ACCOUNTING UPDATE DONE FOR
137 ;NO MORE CODING ALLOWED AFTER THIS POINT
140 INFORM DMNPSH AT .,\.
152 TPLI==11 ;PSEUDO LPT IN
153 PRTO==12 ;REAL LPT OUT
155 IFN DEMON,TPLI==11 ;FOR DEMON HACKER
156 IFN DEMON,TEMPC==16 ;FOR TESTING WHETHER DEMON FILE EXISTS.
159 ;CODE FROM ICLR TO SCOR EXECUTED ONLY ONCE (SEE BEG)
160 ICLR: MOVE A,[GO,,GO+1] ;PICK UP BLT POINTER (COPY EXCH WORD INTO NEXT)
161 SETZM GO ;CLEAR FIRST WORD
162 BLT A,IEND ;CLEAR OUT INITIALIZING CODE (IN AREA TO BE USER VAR BLOCKS)
163 SKIPL CORRQ ;SKIP IF CORE RQ FOR SYSTEM'S SPACE PROCESSED
164 PUSHJ P,UFLS ;WAIT AS NECESSARY
165 PUSHJ P,SYSCOP ;"OPEN" SYSTEM CONSOLE CHANNEL
167 JRST .+3 ;JFCL FOR CHESS CLK MODE
182 ADDI A,30.*60.*5 ;5 MINUTES BEFORE SHUTDOWN?
187 JRST SYSOUT ;JUMP IF SYS DYING & NO ONE LOGGED IN
189 MOVEM T,FORTY ;TELL PEEK WHAT OUR UFLS REALLY IS.
192 SKIPN SUPCOR ;SKIP IF ANY BITS ON IN SUPCOR
193 PUSHJ P,UFLS ;HANG TILL A BIT ON
194 ;SYS JOB IS HUNG IF SYSITM IS 30 SEC OLD AND PC ISN'T SCOR1.
195 SCOR1: MOVSI A,(SETZ)
197 SYSDP1: TDNE A,SUPCOR
203 SYSDP2: SKIPGE SYSDTB(B) ;SKIP UNLESS 4.9 BIT OF ENTRY ON
204 ANDCAM A,SUPCOR ;4.9 ON, CLEAR SUPCOR BIT
205 LDB C,[370200,,SYSDTB(B)]
206 TRNE C,2 ;IF ROUTINE IS GOING TO USE TTY,
207 PUSHJ P,WARMTTY ;THEN WARM IT UP FOR IT
210 LDB T,[420100,,SYSDTB(B)] ;GET 4.8 BIT
211 JUMPE T,@SYSDTB(B) ;IF 4.8 BIT = 0, JUMP TO ROUTINE
212 PUSH P,A ;4.8 .NE. 0, SAVE A
214 PUSHJ P,@SYSDTB(B) ;CALL ROUTINE
217 LDB T,[410100,,SYSDTB(B)] ;GET 4.7 BIT
218 JUMPE T,SYSDP3 ;IF ZERO RETURN TO LOOP
219 ANDCAM A,SUPCOR ;NON-ZERO, CLEAR SUPCOR BIT
222 SUBTTL SUPCOR DISPATCH TABLE
224 ;DISPATCH TABLE FOR BITS IN SUPCOR
225 ;4.9 = 1 TO CLEAR SUPCOR BIT BEFORE DISPATCHING
226 ;4.8 = 0, JRST TO ROUTINE ; = 1, PUSHJ
227 ;4.7 = 1 TO CLEAR SUPCOR BIT AFTER (ONLY USEFUL IF PUSHJ)
228 ;4.6 WARM UP TELETYPE BEFORE CALL
229 ;4.5 DING BEFORE CALL
231 SCL==1,,525252 ;BIT TYPEOUT MASK FOR SUPCOR
235 SCLEX==400000 ? 300000,,SYSEX ;INCREASE USER-VAR BLOCK SPACE.
236 SCLSHD==200000 ? 340000,,SYSSHD ;HANDLE .SHUTDN - PRINT "GOING DOWN" MESSAGES.
237 SCLOUT==100000 ? 400000,,SYSOUT ;TIME FOR SYSTEM TO GO DOWN.
238 IFE KS10P,[ 660000,,SYSCK5 ;CHECK FOR DEVICES GIVING SPURIOUS INTERRUPTS.
240 IFN KS10P, 400000,,SYSDP3
241 SCLDAT==020000 ? 600000,,DATIME ;CONTINUE TRYING TO DETERMINE DATE AND TIME.
242 SCLPAR==010000 ? 360000,,PARTYP ;PRINT "PARITY ERROR..."
243 SCLSET==004000 ? 340000,,SYSSET ;DEPOSIT IN SYSTEM (.SETLOC).
244 SCLIMP==002000 ? 600000,,SYSIMU ;PRINT "NETWORK UP ..."
245 SCLWRT==001000 ? 340000,,SYSWRT ;PRINT WRITING-ON-SYS: MESSAGE.
246 SCLLGI==000400 ? 340000,,SYSLGI ;PRINT LOGIN MESSAGE.
247 SCLDEC==000200 ? 300000,,SYSDEC ;DECREASE USER-VAR SPACE.
248 SCLVSK==000100 ? 600000,,VSCLK ;VERY SLOW (2 MINUTE) CLOCK.
249 SCLGUN==000040 ? 600000,,SYSGUN ;FLUSH TREES THAT ARE TRYING TO LOG OUT.
250 SCLNET==000020 ? 460000,,SYSNET ;BRING NCP DOWN AND UP.
251 IFN DEMON,[ 600000,,DEMCHK ;RUN ANY DEMONS WHICH NEED IT.
253 IFE DEMON, 400000,,SYSDP3
254 SCLNXM==000004 ? 360000,,NXMTYP ;PRINT "NON-EX MEM ERROR ..."
256 SCLBPF==000002 ? 360000,,BPFTYP ;BAD PAGE FAIL
257 ].ELSE 400000,,SYSDP3
258 SCLIDK==000001 ? 600000,,ISYS ;DISK IS INITIALIZED
259 SCRTPP==400000 ? 600000,,TPLPRT ;TRANSFER DATA TO LPT (FROM TPL)
260 SCRTPC==200000 ? 600000,,VSCL6 ;SEE IF ANY FILES HAVE BEEN SPOOLED.
262 SCRHNG==040000 ? 600000,,SYSDIL ;DIALUP LINE CONNECT OR DISCONNECT
263 SCRDET==020000 ? 600000,,SYSDT ;DETACH TOP-LEVEL JOBS WITH INTERRUPTS.
264 SCRCFM==010000 ? 600000,,SYSCFM ;PRINT CONSOLE FREE MSGS
265 SCRMSG==004000 ? 640000,,SYSMPR ;PRINT RANDOM SYSTEM MESSAG
266 REPEAT 5,400000,,SYSDP3 ;CAN BE SET BY USER (.SUPSET)
267 IFN N11TYS,[ 600000,,VWHO ;UPDATE WHO LINES (40)
270 IFN N11TYS,[ 640000,,SYS11D ;TV 11 GONE DOWN (20)
273 IFN N11TYS,[ 640000,,SYS11U ;TV 11 COME UP, INIT IT (10)
276 IFE DEMON, 400000,,SYSDP3 ;(4)
277 IFN DEMON,[ 600000,,DMNOFF
279 SCRTPF==000002 ? 300000,,TPLOFF ;BLOCK TPL.
280 SCRCKS==000001 ? 600000,,SYSCKS ;PERFORM CHECKSUMMING
282 IFN .-SYSDTB-36.,.ERR SYS JOB DISPATCH
284 SUBTTL DM DAEMON OVERSEER
287 DEMCHK: PUSHJ P,SYSDEX ;HANDLE REQUESTS TO KNOW WHETHER A FILE
288 ;EXISTS TO BE SIGNALLED AS A DEMON.
289 PUSHJ P,LSWTL ;SYSTEM JOB SIEZES DEMON TABLE SWITCH WITH UTCOFF
292 CAMN B,[-DMLNG,,0] ;IF AT BEGINNING OF TABLE SET FLAG
295 DMSCN9: SKIPE TT,DMTTBL(B)
296 SKIPE DMTTBL+1(B) ;ONLY PAY ATTENTION IF NOT DOWN
297 JRST DMSCN1 ;AND GUY THERE
304 JRST DMSC11 ;IF FLAG SET CAN'T LOAD EM
305 CAME TT,[SIXBIT /UNSPOO/]
306 JRST DMSCN4 ;DON'T BOTHER WITH TPL STUFF, IF NOT TPL
308 JRST DMSC10 ;REMOVE FROM WORLD
311 DMSCN4: HLRM T,DMTTBL+3(B) ;SET UP IMPLICIT REQUEST
312 CONO PI,UTCON ;ATTEMPT LOAD HERE
314 MOVEM T,DMOBLK+2 ;CHECK TO SEE IF FILE EXITS
316 .OPEN TPLI,DMOBLK ;DON'T WORRY CAN'T PCLSR
317 JRST DMSCN5 ;OPEN FAILURE
318 .IOPOP TPLI, ;GET BACK STUFF
320 PUSHJ P,NUJBST ;TRY TO LOAD
321 JRST DMSCN6 ;COME BACK LATER, NO ENTRY FOR THIS GUY.
322 DMSCN8: ADD B,[DMTLL,,DMTLL]
325 MOVEM B,DMLSEX ;FIX UP TABLE
326 DMSCN7: MOVSI B,SCLDMN
327 IORM B,SUPCOP ;IF MORE REQUESTS, RUN AGAIN IN 1 SECOND.
328 SOSLE REQCNT ;NO MORE REQUESTS =>
331 ANDCAM B,SUPCOP ;DON'T RUN AGAIN.
332 ANDCAM B,SUPCOR ;THEN CLEAR OUT SUPCOR BIT
336 DMSCN5: .IOPOP TPLI, ;FILE DOESN'T EXIST
338 DMSC10: PUSHJ P,DEMMRV ;REMOVE DEAMON
339 JRST DMSCN8 ;AND REQUEST
341 DMSCN3: JUMPG C,DMSCN0 ;LOAD
344 DMSCN2: CONO PI,UTCON ;CONTINUE AROUND LOOP
346 DMSCN6: MOVEM B,DMLSEX
347 JRST LSWPOP ;COME BACK LATTER WITHOUT FLUSHING REQ
349 DMSCN1: ADD B,[DMTLL,,DMTLL] ;ADD ON VAL
350 JUMPL B,DMSCN9 ;CONTINUE AROUND LOOP
354 DMSC11: SETZM REQCNT ;IF RAN THROUGH WHOLE TABLE WITHOUT ANY PROCESS
356 JRST DMSCN7 ;FLUSH ALL REQUESTS AND RETURN
358 DMNOFF: MOVNS TT,DMNFLG
359 JUMPLE TT,DMNOF1 ;DEAMONS OFF
362 DMNOF3: SKIPE DMTTBL(B)
366 DMNOF2: ADD B,[DMTLL,,DMTLL]
372 DMNOF1: MOVSI B,SCLDMN
374 SETZM REQCNT ;ZERO COUNT
377 ;CALL HERE TO HANDLE ALL JOBS THAT ARE WAITING IN .DEMSIG TO
378 ;BE TOLD WHETHER A PURPORTED DEMON REALLY EXISTS. GIVE THEM
379 ;THEIR ANSWERS AND START THEM UP AGAIN.
383 SYSDE1: CONO PI,CLKOFF
384 SKIPN SRN3(A) ;THIS JOB'S ALREADY BEEN SERVICED?^
385 SKIPN UNAME(A) ;OR DOESN'T REALLY EXIST?
387 MOVE B,UPC(A) ;IS IT WAITING FOR SERVICE FROM US?
388 XORI B,ADEMS1 ;MUST BE IN EXEC MODE AT THE RIGHT PLACE.
391 MOVE E,AC0S+A(A) ;GET THE FN2 IT WANTS TO CHECK.
393 SETZ T, ;T GETS 0 IFF FILE CAN BE OPENED.
397 LDB T,[220600,,IOCHST+TEMPC]
400 SYSDE2: .CLOSE TEMPC,
402 SKIPN UNAME(A) ;SEE IF JOB IS STILL WAITING FOR SERVICE
403 JRST SYSDE3 ;SO IT ISN'T CLOBBERED IF IT GOT AN
404 MOVE B,UPC(A) ;INTERRUPT AND IS DOING SOMETHING ELSE.
409 MOVEM T,AC0S+T(A) ;GIVE THE JOB ITS ANSWER IN T, AND
410 SETOM SRN3(A) ;TELL THE JOB IT HAS BEEN SERVED.
411 SYSDE3: CONO PI,CLKON
418 SUBTTL VERY SLOW CLOCK
420 ;SUBROUTINES CALLED BY THE VERY SLOW CLOCK.
422 ;CHECK FOR DEMON REQUESTS WHOSE TIME HAS COME.
424 VSCLDM: PUSHJ P,LSWTL
427 VSCLD2: SKIPG DMTTBL+3(B) ;IF SPECIFIC ENTRY IS < = O, IGNORE
431 HLRZ T,DMTTBL+2(B) ;SIGNAL DEAMON
434 PUSHJ P,DEMSIG ;SIGNAL REQUEST FOR THIS GUY
435 BUG ;ENTRY IN TABLE NOT FOUND EVEN THOUGH NON ZERO TIME
436 VSCLD1: ADD B,[DMTLL,,DMTLL]
441 ;CHECK FOR CLOBBERED TEN-11 INTERFACE CONTROL PAGE WORDS,
442 ;AND RESET THEM TO THEIR CORRECT SETTINGS.
447 T11CKL: MOVE A,T11MP(I)
449 MOVEI A,0 ;HARDWARE SHOULD BE 0 ON CONFLICT PAGE
450 TLZ A,174000 ;USAGE COUNT
451 MOVE B,400000+T11CP*2000(I)
454 T11CL1: AOBJN I,T11CKL
458 MOVEM A,400000+T11CP*2000(I)
465 ;VERY SLOW CLOCK (EVERY 2 MIN). SIGNALLED BY SCLVSK, SET BY A CLOCK-QUEUE ENTRY.
466 ;CALLS THE ULTRA-SLOW CLOCK (EVERY 2 HOURS) WHEN IT'S TIME.
468 VSCLK:;JSP E,CHECK ;CHECK FOR CLOBBERED DEVICES (WOULD BE NICE, BUT BUGS...)
469 IFN DEMON,PUSHJ P,VSCLDM ;DEAMON SLOW CLOCK BREAK ROUTINE
470 IFN TEN11P,PUSHJ P,T11CK
471 MOVE U,VSCLAU ;ACCOUNTING UPDATE, FIND A JOB TREE
479 AOJE TT,VSCLA1 ;DON'T IF NOT LOGGED IN YET
486 SKIPLE CTLCNT ;Time to print date on console log?
488 PUSHJ P,GLPDTM ;Yes - get localized pdtime.
489 JRST VSCLA2 ; Can't print time if we don't know it.
490 PUSHJ P,WARMTTY ;Warm up tty, newline.
491 PUSHJ P,DATIM6 ;Print what time it is now.
492 MOVEI TT,CTLMAX ;Restart countdown of lines printed.
494 VSCLA2: PUSHJ P,VSCOLD ;CHECK FOR OLD DETACHED TREES TO BE KILLED
495 PUSHJ P,TTTMNT ;TURN OFF MOTORS OF IDLE TERMINETS.
496 VSCL7: SETOM UFDFLF ;CAUSE CORE JOB TO TRY TO FLUSH 2311 UFDS
498 MOVSI I,-NCLCH ;LOOK FOR UNOPEND CORE LINK BUFFERS THAT HAVE BEEN
499 PUSHJ P,SWTL ;AROUND FOR MORE THAN 2 MINUTES
501 VSCLCL: SKIPE CLSYN(I) ;SKIP IF VARS UNUSED
504 AOJN A,VSCLC2 ;JUMP IF OPEN
507 JRST VSCLCR ;BIT ALREADY ON, BUFFER OLD
509 VSCLC2: AOBJN I,VSCLCL ;LOOP FOR ALL SETS OF VARIABLES
510 PUSHJ P,LSWPOP ;RELEASE SWITCH
512 MOVE A,UTTBF ;IF MANY 200-WORD BUFFERS ARE FREE,
515 SETOM UTBFLF ;HAVE THE CORE JOB FLUSH THEM
519 SKIPGE IMPUP ;SKIP IF IMP UP, OR PERMANENTLY DOWN
520 PUSHJ P,SYSIMU ;TRY TO BRING IT UP
522 IFN TPLP,PUSHJ P,VSCL6 ;MAYBE START PRINTING FROM .LPTR.
524 SKIPL NLUSR ;IF LPT ISN'T IN USE,
526 AOS TT,NLFREE ;KEEP TRACK OF HOW LONG THAT'S BEEN SO.
527 SOJN TT,VSCNL1 ;IF TRUE FOR >=2 VSCLK INTREVALS (4 MIN)
528 CONO NLPT,1000 ;TURN LPT MOTOR OFF: 1ST PUT LPT IN IMAGE MODE
529 DATAO NLPT,[.BYTE 7 ? 24 ? 177 ? 177 ? 177 ? 177] ;THEN TURN OFF.
534 ;IT'S TIME FOR THE ULTRA-SLOW CLOCK
535 MOVEI A,IINTIC ;GET HERE EVERY TWO HOURS OR SO
538 POPJ P, ;TIME NOT KNOWN
540 JRST DATIM6 ;TIME KNOWN, TELL SYSTEM CONSOLE
543 PUSHJ P,BRTN ;RETURN BUFFER
544 SETZM CLSYN(I) ;FREE VARIABLES
547 ;CHECK FOR TREES WITH BUMRTL SET THAT HAVE NOT RUN FOR
548 ;A WHOLE HOUR, AND GUN THEM.
554 SUBI A,60.*60.*30. ;1 HOUR AGO
555 VSCOL0: SKIPE UNAME(J)
557 JRST VSCOL1 ;JOB NON EX OR DOSN'T HAVE BUMRTL
558 SKIPGE SUPPRO(J) ;NO GOOD IF NOT TOP LEVEL.
559 TDNE C,APRC(J) ;IGNORE JOBS THAT ARE ALREADY LOGGING OUT.
561 CAML A,LUBTM(J) ;NOT RUNNING AND HASN'T RUN FOR 1 HOUR => GUN.
563 VSCOL1: ADDI J,LUBLK ;KEEP LOOKING TILL FIND JOB THAT NEEDS GUNING.
566 JRST CLKONJ ;NO TREES NEED TO BE GUNNED.
568 VSCOL2: MOVEI I,[ASCIZ /KILLED HOUR-OLD DETACHED JOB, # /]
569 PUSHJ P,SYSJEX ;PRINT MESSAGE AFTER CALLING ALOGO6
571 JRST VSCOLD ;LOOK FOR ANOTHER TREE TO GUN.
573 ; MOVEI I,[ASCIZ/DID FOO TO JOB # /]
576 ;DOES FOO TO THE JOB WITH IDX IN J, AND PRINTS A SYSTEM MSG.
577 ;FOO WILL FIND THE USR IDX IN A AND J. IT IS OK TO ENTER
578 ;SYSJEX WITH CLOCK OFF BUT FOO MUST TURN IT ON.
582 PUSH P,A ;SAVE ALL THE INFO WE NEED FOR THE MESSAGE.
586 AOS -4(P) ;SKIP OVER THE PUSHJ TO FOO.
589 PUSHJ P,SYSSP ;PRINT THE STRING IN I
593 PUSHJ P,(I) ;IF LH(I) WAS NONZERO, CALL THAT PRINT ROUTINE
596 PUSHJ P,SYSOPT ;PRINT THE JOB #
597 MOVEI I,[ASCIZ /, USR:/]
600 PUSHJ P,SYSIXP ;PRINT UNAME, AND SPACE
603 PUSHJ P,SYSIXP ;PRINT JNAME
604 JRST SYSTCR ;SPACE, TIME AND CR.
608 VSCL6: ;CHECK TPL: SEE IF LPT FREE AND ANY FILE TO PRINT.
612 MOVE A,[SIXBIT /UNSPOO/]
614 JRST LSWPOP ;REQUEST FAILED, TOO BAD
620 MOVEI A,SCRTPP ;ALSO ENTER HERE FOR TPL CHECK
621 TDNE A,SUPCOR ;SKIP IF NOT ALREADY PRINTING FILE
643 POPJ P, ;.OPEN OF LPT WOULD HANG
646 TDNE A,SUPCOR ;BLOCKED
648 .OPEN TPLI,[SIXBIT / TPL.FILE.(DIR)/] ;MAKE SURE FILE DIR IN CORE
668 JUMPL I,VSCL2A ;IGNORE SPACES BEFORE THE PACK NUMBER.
669 CAIN I,3 ;AFTER 4 CHARS STARTING WITH BEGINNING OF PACK NUMBER
670 JRST VSCL2E ;COMES THE START OF THE FN1.
672 MOVEI C,0 ;INDICATE LINK
673 AOJA I,VSCL2A ;FIRST NON SPACE CRUFTY
688 MOVE B,[440600,,TPLFN2]
696 JRST VSCLL1 ;TRY AGAIN
707 CAMN T,NLPTBR ;SKIP ON OPEN WOULD HANG
708 .OPEN PRTO,[3,,(SIXBIT /LPT/)]
716 CAMG A,LPTCC ;SKIP IF .OPEN WOULD HANG
717 IFN NLPTP,.OPEN PRTO,[3,,'OLP]
718 .ELSE .OPEN PRTO,[3,,(SIXBIT /LPT/)]
723 IORM A,SUPCOR ;PRINT THIS FILE
724 IORM A,SUPCOP ;PRINT MORE EVERY SECOND.
729 MOVEI B,1 ;LINK THAT DIDN'T EXIST
734 ;COME HERE TO TRANSFER SOME CHARS FROM DSK TO LPT,
735 ;ASSUMING BOTH CHNLS ALREADY OPEN.
750 MOVEI A,10.*TPLBSZ ;LEAVE SPACE FOR CHARS THAT TAKE MORE THAN 1 CHAR
755 MOVE A,[-TPLBSZ,,TPLBUF] ;"UN-RELOCATE"
760 JUMPE A,TPLPR1 ;JUMP ON END OF FILE
763 JUMPL B,TPLPR1 ;LAST BUFFER-FULL PRINTED
766 TPLPR4: CLEARM TPLFN3
767 .FDELE TPLFN ;DELETE FILE JUST PRINTED
770 ANDCAM A,SUPCOP ;DON'T NEED TO CALL TPLPRT EVERY SECOND.
783 TPLPR1: PUSHJ P,TPLPR4
788 ;HANDLE A USER'S REQUEST TO "BLOCK THE TPL"
790 ;IF SYS JOB IS SPOOLING, JUST THROW AWAY CURRENT FILE.
791 TPLOFF: MOVEI A,SCRTPP
793 POPJ P, ;NOTHING HAPPENING
797 MOVE A,[SIXBIT /TPLOFF/]
802 IFE TPLP+UNSPLP,TPLOFF==CPOPJ
805 TPLOFF: MOVNS B,TPLFLG
806 JUMPG B,VSCL6 ;IF NOW RUNNING GIVE REQ
808 TPLOF1: SKIPE C,DMTTBL(B)
809 SKIPG D,DMTTBL+1(B) ;USER INDEX -0 IF NOT YET LOADED
811 CAME C,[SIXBIT /UNSPOO/]
815 PUSHJ P,ALOGOUT ;DOES ONE USTOP FOR YOU
819 TPLOF2: ADD B,[DMTLL,,DMTLL]
821 TPLOF3: PUSHJ P,WARMTTY
822 MOVE A,[SIXBIT /TPLOFF/ ]
830 ;PDP11 COMM AREA (SYSTEM WIDE)
831 ;STARTS AT PDP11 ADDRESS 40
835 ;SORCE FILE VERSION #
836 ;--PDP10 WD BOARDARY-- 0 , INITED
840 ; ADDR OF SYSTEM WHO-LINE VARS
841 ; ADDR OF 10-11 COMMAND BUFFER
842 ; TENWHO , 0 ;PDP10 SETS TO TELL PDP11 TO UPDATE WHO-LINES
843 ; MAXTV , 0 ;MAXTV = # TV'S 11 IS SET UP TO HANDLE
844 ; NF11TY , 0 ;10 TELLS 11 WHAT TTY # OF 1ST BUFFER IS.
847 ; EVEN PDP11 WORD ODD PDP11 WORD
848 ;TT11HD - CHAIN OF ACTIVE INPUT BUFFERS 0
849 ; PNTR TO OUTPUT BUFFER CHNL 0 VIDEO BUFFER,KBD # (377 IF NONE)
852 ; OUTPUT BFR EMPTY NOTIFY RQ FLAG TO FREE CHNL
854 ; PNTR TO WHO LINE BLOCK FREE
856 ;THE 11 HAS COME UP, SO INIT COMMUNICATION VARIABLES AND START USING IT
859 LDB A,[$11AD0,,TT11HA] ;GET PDP10 ADDRESS OF INPUT-BFR-CHAIN PTR
861 BUG HALT,[GARBAGE POINTER IN TV-11 MEMORY]
864 MOVEM A,TT11HD ;SAVE IT FOR CLOCK LVL TO CHECK.
865 LDB C,[$11WD0,,TT11HA+1] ;GET PDP11 IO VERSION #.
866 MOVEI B,12. ;OLD TV PROGRAMS HANDLE 12. BUFFERS
867 LDB T,[$11AD1,,TT11HA] ;GET ADDR OF POINTA
868 CAIL C,3 ;VERSION 3 AND UP TV PGM HAS MAXTV - READ IT
869 LDB B,[$11WD0,,TT11LO+2(T)]
870 MOVEM B,TT1111 ;THAT'S HOW MANY TV'S THE 11 THINKS TERE ARE
872 MOVEI B,N11TYS ;MIN OF THAT AND # TEN THINKS THERE ARE
875 CAIL C,3 ;VERSION 3 TV PGM AND UP WANTS NF11TY
876 DPB B,[$11WD0,,TT11LO+3(T)]
877 HRLZ I,TT11RL ;GET AOBJN -> TV'S BOTH 10 AND 11 WILL HANDLE.
879 VSCL7C: LDB B,[$11AD0,,1(A)] ;GET DPY BUFFER ADRESS FOR THIS TTY
880 ADDI B,TT11LO+2 ;CONVERT TO PDP10 ADDRESS.
881 HRLI B,040000+TT11BY_6 ;GET BP TO ILDB 1ST DATA WORD.
882 MOVEM B,NF11TY+TOBBP(I) ;PNTR TO BEG OF OUTPUT BUFFER
883 LDB C,[$11AD0,,(B)] ;GET # BYTES IN DATA AREA
884 ADDI B,(C) ;GET BP TO LAST WORD IN AREA
885 MOVEM B,NF11TY+TOBEP(I)
886 MOVEM B,NF11TY+TOIP(I)
889 MOVEM C,TT11OL ;REMEMBER LENGTH OF OUTPUT BUFFERS.
890 SETOM TT11P ;TV TTYS NOW UP.
892 MOVE A,[-N11TYS,,NF11TY]
893 MOVSI B,%TACFM ;NOW SAY ALL PDP11 TTYS NEED
894 ANDCAM B,TTYSTA(A) ;CONSOLE FREE MESSAGES,
897 IORM A,SUPCOR ;TELL SYS JOB TO PRINT THEM.
898 PUSHJ P,CLQAD1 ;ADD WHO LINE BLOCK TO CLOCK QUEUE IF NOT THERE
900 MOVEI I,[ASCIZ /TV 11 IS UP -/]
901 JRST SYSSTD ;STRING,SPACE TIME AND DATE THEN CR
908 ;UPDATE WHO-LINE VARIABLES.
909 VWHO: SKIPL TT11P ;DON'T SCREW UP IF PDP11 ISN'T UP.
914 HRR A,TT11HD ;-<# TV'S BEING USED>,,<HEADER ADDR>
916 ADD A,TT1111 ;NOW RH -> 2 11-WDS BEFORE PTR TO WHOLINE VARS OF 1ST TV
917 VWHO1: LDB B,[$11AD0,,1(A)] ;GET WHO LINE VAR PDP11-ADDR, SHIFTED 2.
918 ADDI B,TT11LO ;CONVERT TO PDP10 ADDRESS.
920 MOVE TT,WHJOB(B) ;JOB # (SHIFTED 4+16.)
921 MOVE C,WHMODE(B) ;MODE (SHIFTED 4+16.)
924 JUMPL C,VWHO2 ;MODE < 0 => NO WHOLINE.
925 HLRE I,A ;GET -<# TIMES REMAINING THRU LOOP>
927 HRRZ TT,TTYSTS+NF11TY(I) ;MODE 0, USE JOB WHICH HAS THE TTY.
932 ;FOR OTHER MODES, COME BACK HERE, WITH USER IDX IN TT.
933 VWHO3R: CONO PI,CLKOFF
936 HRLZM C,WHUNM2(B) ;STORE THE JOB'S UNAME
939 HRLZM C,WHJNM2(B) ;AND JNAME.
942 HRLZM C,WHSNM2(B) ;AND SNAME.
943 MOVE C,[SIXBIT /STOP/]
944 SKIPE USTP(TT) ;AND "STATUS": IF NOT RUNNABLE, "STOP".
946 MOVE C,[SIXBIT /RUN/] ;IF NOT WAITING, "RUN".
949 MOVE C,[SIXBIT /PAGE/] ;DETECT WAITING FOR PAGE.
955 VWHO4A: MOVE E,UPC(TT) ;JOB RUNNING: USER MODE?
956 TLNE E,%PCUSR ;IF SO, STATUS IS "RUN" (C ALREADY SET UP)
958 VWHO4B: MOVE E,SV40(TT) ;ELSE DECODE SYSTEM CALL TO GET STATUS.
961 JRST VWHO4D ;SYMBOLIC SYSTEM CALL.
971 VWHO4E: CAIN Q,(.IOT) ;.IOT => DECODE DEVICE IN USE.
974 JRST VWHOO1 ;.OPER => DECODE ADDRESS FIELD.
976 JRST VWHOC1 ;.CALL BUT NOT SYMBOLIC => DECODE AC FIELD.
980 VWHO4F: SKIPA C,[SIXBIT /UUO/] ;UNRECOGNIZED UUO.
981 MOVE C,UUOSXB-40(Q) ;ELSE GET SIXBIT NAME OF UUO.
984 ;A SYMBOLIC SYSTEM CALL IS IN PROGRESS.
985 VWHO4D: MOVE C,LSCALL(TT) ;USE SYSTEM CALL NAME AS STATUS
986 CAME C,[SIXBIT /SIOT/]
987 CAMN C,[SIXBIT /IOT/]
988 JRST VWHOI2 ;BUT IF IT'S "IOT", DECODE DEVICE TYPE.
989 VWHO4C: SKIPE FLSINS(TT)
992 TLO C,'+_12. ;STICK "+" ON FRONT IF RUNNING IN SYSTEM
993 ;DROPS THROUGH ;(NOT IF IN USER MODE, OR IF HUNG).
995 ;COME HERE WITH STATUS AS SIXBIT IN C.
997 IFE SWPWSP, SKIPL USWSCD(TT) ;SKIP IF SWAP-BLOCKED
998 IFN SWPWSP,[ MOVE Q,USWST(TT)
1008 MOVE Q,JTMU(TT) ;COMPUTE % RUN TIME FROM SCHEDULER PRIORITY.
1014 IDPB Q,C ;JOB RUNTIME IN .1 SEC UNITS.
1018 IDPB I,C ;JOB # REAL PAGES.
1019 IDPB Q,C ;JOB # VIRTUAL PAGES.
1020 ;HANDLE THE USER-SPECIFIED FIELDS IN THE WHOLINE.
1023 MOVEM Q,1(C) ;STORE JOB'S WHOLINE FLAGS.
1025 HLLZM Q,2(C) ;STORE FIRST USER WHO VAR
1028 HLLZM Q,4(C) ;STORE SECOND USER WHO VAR
1030 VWHO2: CONO PI,CLKON
1034 VWHOO1: HRRZ Q,E ;JOB EXECUTING .OPER.
1036 SKIPA C,[SIXBIT/UUO/]
1037 MOVE C,OPRSXB(Q) ;GET .OPER NAME AS STATUS
1040 VWHOI2: SKIPL Q,UUAC(TT) ;NEW SYS CALL IOT
1041 JRST VWHO4C ;GETTING ARGUMENTS, UUAC NOT SET UP YET
1042 MOVE I,C ;SAVE NAME IN I
1045 VWHOI1: LDB Q,[270400,,E] ;.IOT
1047 VWHOI4: ADDI Q,IOCHNM(TT) ;Q HAS IOCHNM WORD ADDR FOR CHANNEL.
1048 MOVE Q,(Q) ;GET IOCHNM WORD CONTENTS (RH INDEXES TABLES)
1050 HLL Q,IOTTB(Q) ;LH GETS BITS SAYING DIRECTION, BLOCK VS UNIT.
1052 TLNE C,%CLSJ ;IF JOB DEVICE
1053 JRST [ MOVE C,JBDEV(C) ;GET NAME OF SIMULATED DEVICE
1055 HLLZ C,DCHSTB(Q) ;C GETS DEVICE NAME (LEFT-JUST SIXBIT)
1056 JUMPL C,VWHOI6 ;JUMP IF NORMAL 3-CHARACTER NAME
1057 MOVSS C ;NO, IS ADDRESS OF 6-CHARACTER NAME
1059 VWHOI6: SETZ D, ;EVENTUALLY MAKE STATUS BE 9 CHARS, NOT 6?
1061 ILDB J,E ;FIND FIRST SPACE IN THAT DEVICE NAME
1063 JUMPGE Q,VWHOI3 .SEE %IOTBK ;IF BLOCK MODE, PUT A "B" THERE.
1067 VWHOI3: CAME I,[SIXBIT /SIOT/]
1072 VWHOI5: MOVEI J,'O ;FOLLOW WITH "O" OR "I" SAYING DIRECTION.
1076 JRST VWHO4C ;COMPLETED STATUS LOOKS LIKE "TTYBO".
1078 VWHOC1: LDB Q,[270400,,E] ;.CALL: GET AC FIELD,
1079 MOVE C,CALSXB(Q) ;GIVE SIXBIT NAME OF .CALL.
1082 ;MODE ISN'T 0: FIGURE OUT WHICH JOB TO DISPLAY WHO-LINE FOR,
1083 ;AND GO TO VWHO3R WITH JOB'S IDX IN TT. COME HERE WITH TTYCHN OFF.
1084 VWHO3: LSH TT,-16.-4 ;WHAT JOB WAS LAST DISPLAY DONE FOR?
1088 JRST VWHO3B ;JOB WE WERE LOOKING AT HAS VANISHED.
1089 TLNE C,<-4>_<16.+4-18.>
1090 JRST VWHO3B ;THIS TTY IS GETTING SYSTEM WHO-LINE.
1091 TLNN C,2_<16.+4-18.>
1092 JRST VWHO3E ;WANT SAME JOB AS LAST TIME.
1094 ;MODE 2 OR 3: COME HERE TO SEARCH FOR DESIRED JOB.
1095 VWHO3A: MOVSI E,1_<16.+4-18.>
1096 MOVEM E,WHMODE(B) ;SWITCH TO MODE 1.
1097 MOVEI E,MAXJ+5 ;DON'T LOOP FOREVER
1098 VWHO3D: ADDI TT,LUBLK ;ADVANCE TO NEXT JOB UP OR DOWN.
1099 TLNE C,1_<16.+4-18.>
1101 SKIPGE TT ;WRAP AROUND IF NEC GOING DOWN.
1103 CAML TT,USRHI ;WRAP AROUND IF NEC. GOING UP.
1105 CAMN D,UNAME(TT) ;BELONGS TO SOMEONE ELSE => KEEP GOING.
1106 JRST VWHO3C ;BELONGS TO THIS USER => STOP.
1107 SOJG E,VWHO3D ;KEEP LOOKING BUT DON'T LOOP IF NO JOB TO BE FOUND.
1108 VWHO3B: SETZM WHSTAT(B) ;NO JOB TO BE FOUND.
1112 VWHO3C: MOVE Q,TT ;DESIRED JOB FOUND: SET UP FOR MODE 1
1113 IDIVI Q,LUBLK ;LOOKING AT THIS JOB.
1116 VWHO3E: CONO PI,TTYON
1120 ;USER WHO LIES UPDATED; NOW UPDATE SYSTEM WHO LINE VARS.
1121 VWSYS: LDB A,[$11AD1,,TT11HA]
1122 LDB B,[$11AD0,,TT11LO(A)]
1123 ADD B,[$11WD1,,TT11LO] ;FIRST WORD OF BLOCK SET BY 11
1125 IDPB C,B ;ITS VERSION#.
1128 IFN SWPWSP, MOVSI TT,%SWSB
1130 VWSYS2: CAML Q,USRHI ;COUNT # JOBS.
1134 AOS C ;C GETS # JOBS,
1137 IFE SWPWSP, SKIPGE USWSCD(Q)
1138 IFN SWPWSP, TDNE TT,USWST(Q)
1139 AOS E ;E GETS NUMBER OF ACTIVE SWAPPED BLOCKED JOBS
1140 VWSYS3: ADDI Q,LUBLK
1143 VWSYS1: IDPB C,B ;TOTAL # JOBS
1145 IDPB D,B ;TOTAL MEM (= TOTAL # PAGES, COUNTING SHARED PAGES ONLY ONCE).
1148 IDPB C,B ;RUNNABLE USERS
1149 IDPB E,B ;# SWAP-BLOCKED JOBS
1151 IDPB TT,B ;# WAITING FOR PAGE.
1152 MOVE C,TRUMM ;TOTAL RUNNABLE USER MEMORY
1155 MOVE TT,USRHI ;COUNT PAGES AVAILABLE FOR USE OR ACTUALLY USED FOR USER MEM
1158 VWSYS5: LDB D,[MUR,,MEMBLT(TT)]
1161 AOS C ;FREE OR USER MEM.
1164 IDPB C,B ;TOTAL MEM AVAIL FOR USERS
1169 AOS B ;SKIP A WHOLE WORD FOR TIME OF DAY
1170 MOVEI D,(B) ;SAVE ADDRESS FOR BELOW
1171 MOVE C,SUSRS ;# LOGGED IN USERS.
1173 MOVEI E,10000. ;FAIR SHARE IN %
1174 IDIV E,SLOADU ;BASHES TT
1176 MOVE C,TIMOFF ;TIME OF DAY IN .5 SEC UNITS.
1178 MOVEM C,(D) ;DEPOSITING TIME OF DAY TRIGGERS WHO-LINE UPDATE
1179 POPJ P, ; BY THE PDP-11, SO DEPOSIT IT LAST
1183 SUBTTL EXPAND/CONTRACT USER VARIABLES AREA
1185 SYSEX: PUSHJ P,SCOREX
1191 SYSDEC: MOVE A,TIME ;TRY TO DECREASE CORE RESERVED FOR USER VARIABLES
1194 POPJ P, ;TOO SOON SINCE GOT MORE CORE
1201 MOVEM A,USRHI ;USRHI=> HIGHEST USER+L
1204 SETOM SJCFF ;INHIBIT ALLOCATION WHILE HUSRAD IS CHANGING
1206 MOVEI U,0 ;FOR ACORE
1207 LSHC A,-10.-36. ;MOVE INTO B AS WELL
1209 BUG ;LOST FLUSHING CORE?
1213 SCOREX: LDB B,[121000,,HUSRAD] ;EXTEND CORE FOR USER VARIABLES AT TOP OF SYSTEM
1216 MOVEI B,LIOBLK ;TRYING TO GET TOO BIG, DON'T
1222 ;THIS ROUTINE AWAKENED BY .LOGOUT, .GUN, ETC.
1223 ;SEARCH FOR TREES THAT ARE LOGGING OUT AND READY TO BE FLUSHED
1224 ;(IE HAVE BULGO SET) AND FLUSH THEM, PRINTING LOGOUT MESSAGE IF APPRO.
1226 SYSGU0: MOVE T,APRC(U)
1227 TLNE T,BULGO ;IS THIS JOB READY TO BE FLUSHED?
1231 SKIPGE TTYTBL(U) ;IF CONSOLE-CONTROLLED, FLUSH UTAPE ASSIGNMENTS
1240 AOJE B,SYSGU3 ;IF THIS TREE COUNTS AS A LOGGED-IN USER,
1242 SOS SUSRS ;DECREMENT COUNT OF SUCH.
1243 SYSGU3: CONO PI,CLKOFF
1244 PUSHJ P,DMNPLO ;UPDATE TREE'S USAGE AND INFORM DEMON JOB
1245 MOVEM TT,TRUNTM(U) ;SAVE RUN TIME FOR LOGOUT MSG
1248 JRST SYSGU4 ;IF TREE HAS CONSOLE,
1251 PUSHJ P,TTYLO1 ;FREE IT.
1252 CAMN U,EPDL(U) ;UNLESS GUNNED DOWN,
1253 SKIPN SUPPLG ;MAY NOT WANT TO BOTHER PRINTING MESSAGE ON SYS CONSOLE
1255 JRST SYSGU4 ;IF LOGGED OUT BECAUSE SYS DOWN, SPARE THE LOGOUT MSG
1257 MOVEI I,[ASCIZ / LOGOUT /]
1260 PUSHJ P,SYSIXP ;UNAME.
1261 PUSHJ P,STYOS ;SPACE.
1263 PUSHJ P,SYSOPT ;TTY #.
1265 ;VALUE PRINTED IS WRONG, AND HARD TO FIX, SO FOLLOWING CODE HAS BEEN FLUSHED.
1266 ;THE REASON IT'S WRONG IS BECAUSE TIME ALREADY SENT TO THE DAEMON IS NOT INCLUDED.
1267 ;MOVEI I,[ASCIZ / TUSED= /]
1273 ;MOVEI I,[ASCIZ / USECS/]
1275 CAMN U,EPDL(U) ;WAS LOGGED OUT BY SELF?
1277 MOVEI I,[ASCIZ / ^^ GUNNED DOWN BY /]
1280 PUSHJ P,SYSIXP ;UNAME OF GUNNER.
1282 PUSHJ P,SYSSIX ;SPACE, AND JNAME OF GUNNER.
1283 PUSHJ P,SYSTCR ;CRLF.
1284 ;MESSAGES PRINTED IF NECESSARY.
1286 PUSHJ P,ZUSER ;COMPLETELY ELIMINATE THE JOB.
1288 SYSGU1: ADDI U,LUBLK
1294 ;DETACH ANY TREES WHOSE TOP-LEVEL JOBS HAD FATAL INTS
1301 MOVSI T,BULGOS+400000
1302 SYSDT0: SKIPN UNAME(J)
1304 SKIPGE SUPPRO(J) ;LOOK FOR TOP-LEVEL
1305 TDNE T,APRC(J) ;IGNORE JOBS ALREADY DISOWNED, OR LOGGING OUT.
1307 TDNE B,USTP(J) ;THAT HAS BEEN STOPPED AS BY SUPERIOR
1309 SYSDT1: ADDI J,LUBLK
1312 JRST CLKOPJ ;NO MORE SUCH JOBS, DONE; LSWPOP AND CLKON.
1314 ;FOUND A TOP LEVEL JOB NEEDING TO BE DETACHED.
1318 JRST [ IDIVI J,LUBLK ;BASHES R
1319 .CALL [SETZ ? 'UNLOCK ? SETZI %JSNUM(J)] ;UNLOCK THE LOCKS
1323 CONO PI,CLKOFF ;IODCSS MIGHT HAVE TURNED IT ON
1324 SKIPL E,JBI(J) ;NOTE CLKOFF IN EFFECT WHILE HACKING JOB DEVICE STUFF
1327 MOVE A,JBCUI(E) ;JOB DEVICE, GIVE IOCER1 OR OPNL7
1328 LDB T,[000400,,JBSTS(E)]
1330 JRST [ MOVSI T,7_5 ;NON IOT, UNHANG CREATOR SO WILL SEE OPNL7
1336 MOVEI B,1 ;IOT GIVE IOCER1
1342 MOVE I,[SYSDT8,,[ASCIZ/TOP LEVEL INTERRUPT /]]
1347 SYSDT8: MOVE A,-1(P) ;USER INDEX
1348 MOVE A,PIRQC(A) ;TOP LEVEL INTERRUPT BITS
1350 SYSDT9: MOVEI I,[ASCIZ/ DETACHED JOB # /]
1353 ;JOB IN J SHOULD BE DETACHED, AND GUNNED AFTER AN HOUR,
1354 ; OR RIGHT AWAY IF NOT LOGGED IN
1355 SYSDT4: HLRE B,UNAME(J)
1356 AOJE B,SYSDT5 ;NOT LOGGED IN => KILL
1362 SYSDT5: HRLI I,[MOVEI I,[ASCIZ / KILLED JOB # /]
1368 SYSDT6: PUSHJ P,SYSDT3 ;FIRST DETACH (LEAVES USER INDEX OF TOP LEVEL JOB IN A).
1369 JRST ALOGO6 ;THEN LOG OUT. SINCE DETACHED, NO ADDITIONAL MSG FROM SYSGUN.
1371 ;CALL WITH CLOCK OFF TO DETACH THE JOB WITH IDX IN A AND J.
1372 ;ASSUME JOB'S BULGOS HAS BEEN CHECKED, AND TREESW LOCKED.
1373 ;TURNS CLOCK BACK ON AND DOES A LSWCLR
1374 SYSDT7: TDZA B,B ;HERE TO LEAVE AROUND
1375 SYSDT3: MOVEI B,10 ;HERE TO SET BUMRTL WHEN WE DETACH
1387 ;HANDLE DIAL-UP LINE CONNECTS OR DISCONNECTS ON DL-10 AND DTE20.
1392 JRST SYSDL2 ;THERE'S NONE TO PROCESS?
1393 SETZM DL10CL ;FREE THE VAR FOR THE PDP11
1405 SYSDL0: LDB I,[.BP 77,A] ;GET OUT THE TTY NUMBER
1409 JRST SYSDL1 ;IT'S A CONNECT
1410 PUSHJ P,SWTL ;IT'S A DISCONNECT
1412 MOVE J,TTYSTS(I) ;DETACH THE TREE ON THAT TTY.
1413 JUMPL J,LSWPOP ;THERE'S NO TREE.
1415 JRST LSWPOP ;TTY IS OPEN AS A DEVICE.
1417 TLNE I,BULGOS ;GIVE UP IF TREE LOGGING OUT.
1420 MOVEI I,[ASCIZ /DIALUP LINE DISCONNECTED,/]
1423 ;ON A CONNECT, SNARF THE LINE SPEEDS DETERMINED BY THE PDP11.
1424 SYSDL1: LDB B,[.BP 7000,A]
1425 DPB B,[$TTISP,,TTYTYP(I)]
1427 DPB B,[$TTOSP,,TTYTYP(I)]
1428 PUSHJ P,NCNSSP ;SET UP INITIAL TTY TYPE AS PRINTING, ACCORDING TO SPEED
1429 MOVEI B,20 ;DON'T ASSUME TTY IS AT LEFT MARGIN
1432 MOVEM B,TPHP+TPLEN(TT)
1438 SYS11D: MOVEI I,[ASCIZ /TV 11 WENT DOWN --/]
1439 PUSHJ P,SYSSTD ;STRING, SPACE, TIME AND CR
1440 SETZM TT11P ;IN CASE SCR11D WAS SET BY A USER, AND HE DIDN'T HACK THIS.
1442 MOVEM A,TT11HD ;PREVENT TT11IN FROM BEING CALLED ANY MORE.
1443 SYS11G: PUSHJ P,SWTL ;PREPARE FOR DOING DETACHES
1445 MOVE I,[-N11TYS,,NF11TY]
1446 SYS11F: SKIPGE J,TTYSTS(I) ;DETACH ALL 11TV TREES.
1447 JRST SYS11E ;THIS 11TV NOT IN USE
1449 JRST SYS11P ;THIS 11TV IN USE AS A DEVICE, DON'T DETACH BUT DO PCLSR
1452 JRST SYS11E ;DON'T DETACH TREES THAT ARE LOGGING OUT.
1454 MOVEI I,[ASCIZ / .../]
1455 PUSHJ P,SYSDT4 ;DETACH OR KILL JOB W/ # IN J, AND PRINT MESSAGE.
1456 JRST SYS11G ;TREESW NOW UNLOCKED; MUST RE-LOCK.
1458 SYS11P: HRRZ A,J ;PCLSR THE NAME DRAGON
1460 PUSHJ P,NJUPCL ;AND DROP INTO SYS11E
1462 SYS11E: AOBJN I,SYS11F
1463 PUSHJ P,LSWPOP ;TREESW NOT NEEDED IF NOTHING TO DETACH.
1464 MOVSI T,-MXVBN ;FLUSH VIDEO BUFFER ASSIGNMENTS.
1468 SYS11V: CAML T,USRHI
1471 SETOM TVCREG(T) ;FLUSH TV BUFFER NUMBERS IN CREGS
1475 TVBNCL: PUSH P,T ;"DEASSIGN" TVVBN(U) AND CLEAR IT ON SCREEN IF NECC
1482 PUSH P,400000+TTR10*2000
1483 MOVEM T,400000+TTR10*2000
1485 CLEARM 400000+TTR0*2000(T)
1486 POP P,400000+TTR10*2000
1487 TVBNC1: SETOM TVVBN(U)
1491 ;PRINT CONSOLE FREE MSGS ON ALL TTYS THAT NEED IT.
1492 ;NOTE THAT THERE ARE LOWER CASE MESSAGES ON THIS PAGE.
1493 .SEE TTYLO1 ;THIS RTN SIGNALLED WHEN A TTY BECOMES FREE.
1494 SYSCFM: CLEARM IOCHNM+STYOC ;REUSE SYSTEM CONSOLE CHANNEL
1497 JRST SYSCOP ;DONE, SWITCH SYSCON CHANNEL BACK TO SYSCON
1498 SKIPGE B,TTYSTA(A) .SEE %TACFM
1501 TLZ B,%TACTZ ;%TANJS MEANS A FAILED ^Z - FORGET ABOUT THAT ^Z.
1503 SKIPGE TTYSTS(A) .SEE %TSFRE
1505 AOJA A,SYSCF1 ;IN PROCESS OF LOADING TREE FOR THIS CONSOLE
1507 ADD T,[%TJDIS+%TJMOR,,TYODN]
1508 MOVEM T,IOCHNM+STYOC ;"OPEN" A CHANNEL TO THAT TTY.
1510 PUSHJ P,SYSTS1 ;IF SHUTDOWN AND A DISPLAY, CLEAR THE SCREEN
1512 Top level interrupt, tree detached
1514 MOVSI B,%TCDET ;IF TTY FREE DUE TO DETACH FOR TOP LEVEL INT,
1516 PUSHJ P,SYSSP .SEE NDETAC ;SAY SO.
1520 EXCH B,TTYSTA(A) ;CLEAR BIT, SAVE OLD VALUE
1524 JRST SYSCF2 ;SYSTEM IS DOWN, SAY SO
1527 JRST SYSCF2 ;SYSTEM JOB USING THIS CONSOLE, SAY SO
1528 SRITYP [ System fully loaded. Console ]
1532 IFN N11TYS, CAIE A,NF11TY ;ON ALL FREE PDP11-TV CONSOLES
1534 MOVEI I,[ASCIZ / Free./]
1538 SYSCF2: PUSHJ P,SYSSTD ;SAY "SYS BEING DEBUGGED" IF NEC.
1540 PUSHJ P,SYSSHM ;SAY "SYS GOING DOWN" IF NEC.
1542 MOVSI B,%TACFM ;TTY NO LONGER NEEDS CONSOLE FREE MSG.
1544 IFN N11TYS,PUSHJ P,TTYLO2 ;TELL THE PDP11 THIS TTY IS FREE
1550 ;HANDLE .SHUTDN - PRINT "GOING DOWN" MSGS, ETC.
1551 SYSSHD: LDB D,[221700,,SHUTLK+1]
1560 SKIPE D ;SKIP IF LEFT FROM >5 MIN PRINT OUT
1563 MOVEI I,[ASCIZ /CULPRIT = /]
1571 ;GOING DOWN, WHAT A SHAME
1572 SYSSHM: SRITYP [GOING DOWN IN ]
1579 IDIVI B,30. ;CONVERT TO SECONDS
1580 PUSHJ P,RTIME ;CONVERT TO SIXBIT
1583 SYSSHN: MOVEI I,[.ASCII /. /]
1586 ;AND COME HERE WHEN TIME FOR SYS TO GO DOWN.
1587 ;MARK THE SYSTEM "DOWN", START FLAPPING TAPES AND DISKS,
1588 ;GUN ALL USERS, ETC. COMPLETION OF GOING DOWN IS DETECTED AT
1589 ;SLOW CLOCK LEVEL ("COFFIN").
1590 SYSOUT: PUSHJ P,CLQDEL
1592 SETOM DEDTIM ;PREVENT ^Z'S
1593 .FDELE [SIXBIT/ SYSDOWN MAIL/ ? 0 ? 0]
1596 SYSCK3: SKIPGE SUPPRO(U) ;LOOK FOR ALL TOP-LEVEL JOBS.
1602 MOVE T,OPTION(U) ;IS THIS JOB AN EXCEPTION?
1604 JRST SYSCK4 ;YES, LET IT LOG ITSELF OUT
1605 SYSCK1: PUSHJ P,ALOGOUT ;LOG IT OUT (TELLS IT TO PREPARE ITSELF, SIGNAL SYSGUN)
1606 SYSCK4: ADDI U,LUBLK
1610 DWNMSG: SRITYP [NOT IN OPERATION]
1611 PUSHJ P,SYALCP ;TYPE OUT ON FREE CONSOLES
1612 IFN TPLP, MOVEI A,SCRTPF ;TPLOFF
1613 IFN TPLP, IORM A,SUPCOR
1614 IFN UNSPLP,[ SKIPG TPLFLG
1622 SYSCK7: MOVE I,DCHBT(A)
1628 SYSUDM: SKIPL UDIRO(A)
1629 .UDISMT A, ;DISMOUNT TAPES
1636 PUSHJ P,TTTMNT ;TURN OFF ALL TERMINET MOTORS
1639 SUBTTL SYSTEM CHECKS
1640 ;CHECK FOR DEVICES THAT LOSE THE PIA, DEVICES THAT INTERRUPT SPURIOUSLY,
1641 ;CLOBBERD LOCATIONS IN MEMORY.
1643 IFE KS10P,[ ; KS has no devices to speak of...
1645 SYSCK5: MOVSI A,-128.
1646 SYSC51: SKIPL B,DCHNTC(A)
1647 SYSC5A: AOBJN A,SYSC51
1656 SYSC52: PUSHJ P,SYSC5C
1662 SYSC5C: PUSHJ P,SYSC5B
1663 MOVEI I,[ASCIZ / CLOBBERED/]
1666 SYSC5S: PUSHJ P,SYSC5B
1667 MOVEI I,[ASCIZ / SUSPECTED OF INTERRUPTING ON CHANNEL /]
1669 LDB T,[360300,,DCHNTC(A)]
1679 SYSC5B: MOVEI I,[ASCIZ /DEVICE /]
1684 MOVEI I,[ASCIZ / (CONI= /]
1688 MOVEI I,[ASCIZ /) /]
1693 SYSCKS: HRRZ T,UPDBR1 ;CHECK FOR CLOBBERED DBRS
1697 BUG HALT,[PAGER DATA CLOBBERED. MAY BE DEC-TTL LEVEL CONVERTERS LOSING.]
1705 CAME C,CKSUMS-TSTB(A)
1708 SYSKS3: MOVE A,[-LTSTB,,TSTB]
1709 SYSKS1: MOVEM A,SYSCKP
1712 SYSKS2: EXCH C,CKSUMS-TSTB(A)
1713 XOR C,CKSUMS-TSTB(A) ;SAVE XOR
1716 MOVEI I,[ASCIZ /SYSTEM CLOBBERED BETWEEN /]
1720 MOVEI I,[ASCIZ / AND /]
1724 SETCMM A ;OFFSET BY ONE
1728 MOVEI I,[ASCIZ / XOR= /]
1732 MOVEI I,[ASCIZ / !/]
1734 CLEARM TCKXOR ;TRY TO DETERMINE EXACT ADR AND PREV CONTENTS
1735 MOVE A,[TCKXOR,,TCKXOR+1]
1737 MOVE A,[-LTSTB,,TSTB]
1740 REPEAT 36.,[IFL .RPCNT-18.,TLNE C,400000_<-.RPCNT>
1741 IFGE .RPCNT-18.,TRNE C,400000_<18.-.RPCNT>
1742 XORM B,TCKXOR+.RPCNT
1747 SYSKS7: MOVE A,TCKXOR(D) ;UPDATE CKXORS TBL AND FILL TCKXOR TBL WITH POSSIBLE ADRS
1752 PUSHJ P,STYOT ;INDENT LINE
1754 MOVSI E,400000 ;CURRENT BIT
1755 CLEARB I,J ;COUNT OF #'S PRINTED, CLOBBERED WD
1756 SYSKS8: SKIPE A,TCKXOR(D)
1757 AOJA J,SYSKS9 ;INCR COUNT OF ADRS PRINTED
1760 SOJN J,SYSKT1 ;MORE THAN 1 ADR CLOBBERD SO CANT PRINT PREV CONTENTS
1763 MOVE A,I ;PRINT CONTENTS PRIOR TO CLOBBERAGE
1764 XOR A,(R) ;XOR CURRENT CONTENTS
1771 PUSHJ P,SYSFWP ;CURRENT CONTENTS
1772 SYSKT1: PUSHJ P,SYSCRF
1775 SCKX1: PUSH P,T ;UPDATE CKXORS TO REFLECT CHANGING WD IN T IN ADR IN Q
1783 SYSKS9: PUSHJ P,SYSOPT
1785 MOVE R,TCKXOR(D) ;CLEAR DUP ENTRIES
1787 MOVE Q,E ;ALSO LEAVE LAST ADR IN R (IN CASE ITS ONLY ADR)
1788 SYSKT3: CAME R,TCKXOR(T)
1796 SUBTTL SUPPORT ROUTINES FOR BUG MACRO
1798 ;NOTE: THESE REPLACE THE SYSMSG ROUTINE THAT USED TO BE HERE
1802 MOVE TT,SYSMPT ;HOW MANY MESSAGES BEHIND?
1804 CAIGE TT,<8_SYSMLNG>-8
1806 JRST BUGPSE+1 ;TREAT AS BUGPSE IF BUFFER FULL OR SYSDBG
1809 PUSHJ P,SYSMS0 ;HAND MESSAGE TO SYSTEM JOB TO BE PRINTED
1810 JRST POPTTJ ;CONTINUE TRAPPED ROUTINE
1813 PUSHJ P,SYSMS0 ;COPY MESSAGE INTO SYSTEM JOB BUFFER
1814 JSP TT,BUGDD0 ;PRINT MESSAGE AND GO TO DDT
1815 ASCIZ/PAUSE. FIND A WIZARD, CONSIDER TAKING A CRASH DUMP,
1816 OR TYPE <ALTMODE>P TO ATTEMPT TO REVIVE THE SYSTEM./
1819 PUSHJ P,SYSMS0 ;COPY MESSAGE INTO SYSTEM JOB BUFFER
1820 JSP TT,BUGDD0 ;PRINT MESSAGE AND GO TO DDT
1821 ASCIZ/DDT. TYPE <ALTMODE>P TO CONTINUE./
1824 JRST BUGHL1 ;NO MESSAGE, JUST GO STRAIGHT TO DDT.
1826 BUGAWF: 0 ;JSR HERE WHEN AWFUL THINGS HAVE HAPPENED
1827 CONO PI,PIOFF ;BETTER DO THIS AS SOON AS POSSIBLE
1828 MOVEM P,BUGACS+P ;SAVE P AND GET A PDL TO USE
1830 PUSH P,BUGAWF ;SIMULATE PUSHJ P,BUGHLT
1832 PUSHJ P,SYSMS0 ;COPY MESSAGE INTO SYSTEM JOB BUFFER
1833 BUGHL1: JSP TT,BUGDD0 ;PRINT MESSAGE AND GO TO DDT
1834 ASCIZ/HALT. FIND A WIZARD OR CONSIDER TAKING A CRASH DUMP.
1835 THE SYSTEM HAS CRASHED AND CANNOT BE REVIVED WITHOUT EXPERT ATTENTION.
1836 IF YOU CAN'T FIND HELP, RELOAD THE SYSTEM./
1838 ;ROUTINE TO PICK UP THE DATA OUT OF THE BUG TABLE, EVALUATE THE
1839 ;ARGUMENTS, AND DUMP THE RESULTS INTO THE SYSMSG BUFFER TO BE
1840 ;PRINTED LATER. THE THIRD THING DOWN ON THE STACK IS THE PC+1
1841 ;AT WHICH THE BUG WAS DETECTED. TT IS THE ONLY SMASHABLE REGISTER.
1842 SYSMS0: MOVEI TT,8 ;8 WORDS IN ENTRY
1843 ADDB TT,SYSMPT ;UPDATE STORING POINTER
1844 ANDI TT,8_SYSMLNG-1 ;MASK TO BUFFER INDEX
1847 PUSH P,A ;NOW LOCATE BUG TABLE ENTRY
1849 MOVE A,TIME ;STASH TIME IN EXTRA WORD OF ENTRY
1854 JRST SYSMS2 ;PC MATCHES
1855 HLRZ A,(B) ;ADVANCE TO NEXT ENTRY
1858 JRST 4,. ;NOT IN TABLE?? MACROS MUST BE SCHROD
1862 EXCH TT,-2(P) ;TT START OF ENTRY, -2(P) END
1864 HRLI A,1(B) ;COPY BITS,,STRING AND ARG POINTERS
1868 SUBM TT,(P) ;(P) GETS -NARGS
1869 SKIPE (P) ;IN CASE NO ARGS
1870 SYSMS3: PUSH TT,@1(TT) ;EVALUATE ARGUMENT POINTERS
1873 MOVEI TT,SCRMSG ;BIT FOR MSG PRINT
1874 IORM TT,SUPCOP ;TRY EVERY SECOND TO PRINT SOME MSGS
1875 IORM TT,SUPCOR ;FIRST ATTEMPT RIGHT AWAY.
1876 JRST POP1J ;RETURN TO BUGINF OR WHEREVER
1878 ;CALL HERE TO PRINT THE MESSAGES OUT OF THE BUFFER
1880 SYSMPR: MOVE TT,SYSMPT ;LAST MESSAGE IN
1881 CAMG TT,SYSMPU ;LAST MESSAGE OUT
1882 JRST [ ANDCAM A,SUPCOP ;CAUGHT UP
1886 JRST [ MOVE A,TT ;BEHIND BY MORE THAN SIZE OF BUFFER
1889 LSH A,-3 ;NUMBER OF MESSAGES LOST
1892 MOVEI I,[ASCIZ/ SYS MSGS LOST/]
1900 HLLZ D,(TT) ;GET MODE FLAGS
1901 HRRZ I,(TT) ;GET ASCIZ MSG
1910 SYSMP1: PUSHJ P,STYOS ;SPACE AND OUTPUT REMAINING ARGS
1912 JRST SYSTCR ;END WITH TIME, POPJ
1915 SYSMP3: PUSH P,T ;OUTPUT THIS MANY ARGS
1916 SYSMP4: PUSHJ P,SYSMP2
1925 LSHC C,3 ;GET A BYTE
1926 JUMPE C,CPOPJ ;NO MORE ARGS TO PRINT
1933 ;DISPATCH TABLE FOR SYSTEM MESSAGE PRINTER
1935 SYSMTB: JRST 4,. ;0 CHECKED FOR END
1936 SYSFWP ;1 FULL WORD OCTAL
1937 SYSDPT ;2 FULL WD DECIMAL
1938 SYSDPC ;3 " WITH COMMAS
1945 ;ROUTINE FOR BUGS THAT NEED TO HALT INTO DDT
1946 BUGDD0: HRLI TT,440700
1947 CONO PI,PIOFF ;PREVENT INTERFERENCE, AND HACK STYO
1948 MOVEM TT,T00POS ;SAVE ADDRESS OF MESSAGE TEMPORARILY
1949 POP P,TT ;RESTORE TT AT TIME OF BUG
1950 POP P,BUGPC ;ADDRESS+1 OF BUG
1952 MOVE P,BUGACS+P ;CORRECT P AT TIME OF BUG
1953 SETZM BUGAWF ;CLEAR FLAG FOR NEXT BUG IN CASE REVIVED
1954 MOVEM 17,BUGACS+17 ;SAVE ACS
1957 MOVE P,BUGPDL ;USE THIS PDL FOR TYPING OUT
1958 PUSH P,T00POS ;RECOVER ASCIZ STRING FOR FLAVOR OF BUG
1959 PUSHJ P,SYSCRF ;CARRIAGE RETURN
1960 BUGDD1: MOVEI A,SCRMSG
1961 PUSHJ P,SYSMPR ;DUMP SYSMSG BUFFER
1963 CONSZ TTY,40 ;PUNT IF CHARACTER TYPED
1973 SKIPE DTEF11 ;INPUT TYPED?
1974 JRST BUGDD2 ;YES, PUNT
1977 SKIPE 8CTYIN ; Any input available?
1978 JRST BUGDD2 ; Yes: Punt.
1980 MOVE TT,SYSMPT ;LAST MESSAGE IN
1981 CAMLE TT,SYSMPU ;LAST MESSAGE OUT
1983 BUGDD2: CONI PI,A-1 ;CHECK FOR PI IN PROGRESS
1986 JFFO A-1,[ MOVEI I,[ASCIZ/PI LEVEL /]
1991 MOVEI I,[ASCIZ/BUG/]
1993 POP P,I ;PAUSE OR HALT MESSAGE
1994 SKIPN SYSDBG ;PUNT LONG-WINDED MESSAGE IF DEBUGGING
1997 YOU ARE NOW IN DDT./]
1999 MOVEI TT,[ASCIZ|BUGPC/
\eQ-2/|]
2001 MOVEM TT,777777 ;TELL DDT TO EXAMINE BUGHLT ADDRESS
2002 MOVE TT,BUGPC ;ARRANGE FOR <ALT>P TO JUMP THERE
2003 MOVEM TT,@DDT-6 ;IN OLDER DDT WILL JUST CLOBBER AC0
2004 MOVSI 17,BUGACS ;RESTORE ACS
2011 ;DATA AREAS POINTERS AND BUFFER FOR SYS MSG PRINTER
2013 CTLMAX==55. ;Number of lines after which we should print the date.
2014 CTLCNT: 0 ;Keeps track of number of lines printed on console.
2016 SYSMPT: 0 ;POINTER TO MESSAGE MOST RECENTLY INSERTED
2017 SYSMPU: 0 ;POINTER TO MESSAGE MOST RECENTLY PRINTED
2018 ;(MUST TAKE MODULO LENGTH OF TABLE, AND ADD OFFSET OF BEGIN OF TABLE)
2019 IFNDEF SYSMLNG,SYSMLNG==5 ;LOG(2) OF # ENTRIES (5=>32)
2021 SYSMBF: BLOCK 8_SYSMLNG ;8 WDS PER ENTRY: BITS,,STRING, 6 ARGS, TIME
2023 BUGPC: 0 ;RESTART PC FROM BUG
2024 BUGACS: BLOCK 20 ;AC SAVE AREA FOR BUGDD0
2027 T00POS: 0 ;TTY00 HORIZONTAL POSITION
2031 SUBTTL .SETLOC ROUTINE (DOCUMENT THEN DOES IT)
2033 SYSSET: MOVE A,SETSLC ;LOCATION TO BE MODIFIED
2034 TLNN A,-1 ;SKIP IF ALREADY DONE
2035 SKIPA C,SETSLQ ;NEW VAL IN SETSLQ
2036 SKIPA C,(A) ;NEW VAL IN LOC
2037 SKIPA D,A ;OLD VAL IN @A
2038 MOVEI D,SETSLQ ;OLD VAL IN SETSLQ
2039 PUSHJ P,SYSSCT ;PRINT OUT DDT-TYPE SEQUENCE
2040 MOVE A,SETSU ;GET USET NAME
2041 PUSHJ P,STYOT ;TYPE OUT A TAB
2043 PUSHJ P,SYSIXP ;PRINT NAME OF GUILTY PARTY
2044 PUSHJ P,SYSTCR ;STANDARD SYS CARRIAGE RETURN
2045 SKIPGE SETSLC ;IF ALREADY MUNGED AT UUO LEVEL
2046 POPJ P, ;THEN EXIT NOW
2047 MOVE T,SETSLQ ;GET DESIRED VALUE
2049 ; JRST SYSSE8 ;DON'T HACK METABITS
2050 ; LMB Q,@SETSLC ;GET META BIT OF DESIRED LOCATION
2051 ; TRNE Q,1 ;IF 1 THEN HAVE TO MOMENTARILY CLEAR IT
2053 SYSSE8: EXCH T,@SETSLC ;META BIT=0, CHANGE LOCATION
2054 SYSSE6: MOVE Q,SETSLC ;GET ADR OF MUNGED LOC
2055 MOVE A,[-LTSTB,,TSTB]
2064 PUSHJ P,SCKX1 ;UPDATE CKXORS TBL TOO
2066 EQVM T,CKSUMS-TSTB(A)
2068 PUSHJ P,SCKX1 ;UPDATE TO REFLECT NEW CONTENTS
2069 SYSSE2: MOVSI A,SCLSET
2071 CAIE Q,SYSDBG ;IF NOT DEBUG SWITCH
2073 PUSHJ P,DBGINT ;SYSDBG STATE CHANGE, TELL ALL USERS
2076 ;SYSDBG CLEARED, GIVE "IN OPERATION" MESSAGE BY DROPPING INTO ISYS
2077 ;HERE WHEN SYSTEM IS UP AND DISKS HAVE BEEN INITIALIZED
2078 ;RE-ENTER HERE WHEN SYSDBG STATE CHANGED
2079 ISYS: PUSHJ P,DATIME ;MAY BE ABLE TO FIND TIME IMMEDIATELY (ONCE MFD IN)
2080 PUSHJ P,TTTMN2 ;MAKE SURE WE THINK THAT ALL TERMINET
2081 ;MOTORS ARE OFF, SO WE'LL TRY TO TURN THEM ALL ON WHEN WE TYPE
2082 ;"ITS IN OPERATION" ON THEM.
2083 PUSHJ P,TTRSAL ;SEND %TDORS TO ALL SOFTWARE TTYS
2084 SRITYP [
\aIN OPERATION
\a]
2085 SKIPE SYSDBG ;IF SYS IN DEBUG MODE
2086 DMESSG: SRITYP [
\aBEING DEBUGGED
\a] ;SET TO APPROP MSG
2087 PUSHJ P,SYALCP ;PRINT ON ALL CONSOLES
2088 SCMESG: SRITYP [SYSTEM JOB USING THIS CONSOLE.]
2089 PUSHJ P,SYSSP ;PRINT ON SYS JOB CONSOLE
2090 SKIPGE DMLLDF ;START DRAGON (DAEMON) IF WANTED
2091 SKIPL DMON+1 ;AND NOT DONE ALREADY
2096 BUG ;SHOULD BE ROOM IN REQUEST BUFFER
2099 SYSSE3: AOBJN A,SYSSE1
2102 ;SETLOC ROUTINE TO MODIFY LOCATION WITH META BIT = 1
2110 SUBTTL MEMORY ERROR MESSAGES
2112 NXMTYP: MOVEI I,[ASCIZ /NON-EX MEM ERROR #/]
2117 BPFTYP: MOVEI I,[ASCIZ /PAGE FAIL ERROR #/]
2122 PARTYP: MOVEI I,[ASCIZ /PARITY ERROR #/] ;PARITY ERROR
2124 MEMTYP: PUSHJ P,SYSSP
2127 MOVEI I,[ASCIZ /, PC = /]
2131 MOVEI I,[ASCIZ /, JOB # /]
2136 MOVEI I,[ASCIZ /, USR:/]
2144 JRST @.+1(TT) ;DISPATCH ON TYPE OF ERROR
2150 BPFTY2: MOVEI I,[ASCIZ /, PFW = /]
2157 PARTY2: PUSHJ P,SYSTCR
2159 MOVEI I,[ASCIZ /ERR ADDR = /]
2161 MOVE T,PARERA ; Error address is all we collect on the KS.
2168 MOVEI I,[ASCIZ /ERR ADDR = /]
2169 PUSHJ P,SYSSP ;PAR ERR INT ALWAYS GIVES ERR ADDR
2173 PARTP1: MOVEI I,[ASCIZ /PFW = /]
2174 PUSHJ P,SYSSP ;PAR ERR TRAP GIVES PFW AND BAD DATA
2175 MOVE T,PARPFW ;EVEN IF SCAN DOESN'T FIND PAR ERRS.
2177 MOVEI I,[ASCIZ /, BAD DATA = /]
2180 PARTP2: PUSHJ P,SYSP
2185 JUMPE D,PARTP3 ;IF SCAN FOUND MORE THAT ONE PAR ERR,
2186 ;PRINT AND'S AND OR'S OF DATA AND ADDRS.
2187 IRP X,,[PARAAN,PARAOR,PARAND,PARIOR]Y,,[ADDR AND,ADDR IOR,DATA AND,DATA IOR]
2188 IFE .IRPCNT&1, MOVEI I,[ASCIZ /Y = /]
2189 .ELSE MOVEI I,[ASCIZ /, Y = /]
2193 IFN .IRPCNT&1, PUSHJ P,SYSCRF ;PRINT TWO ITEMS PER LINE.
2195 PARTP3: MOVEI I,[ASCIZ /PARITY ERRORS:
2198 SYSPR1: PUSHJ P,STYOT ;TYPE TAB
2207 MOVEI I,[ASCIZ/ .../]
2209 PUSHJ P,SYSSP ;NOT ALL PARITY ERRORS WERE PRINTED
2212 SUBTTL LOGIN & MISCELLANEOUS MESSAGES
2214 SYSLGI: SKIPE SUPPLG
2215 POPJ P, ;DON'T BOTHER PRINTING MESSAGE
2216 HLRZ I,SLGIV+1 ;Message (CHUNAME, LOGIN, etc)
2218 MOVEI TT,SLGIV ;.LOGIN
2227 SYSG23: PUSHJ P,SYSIXP
2229 HRRZ A,1(TT) ;PICK UP TTY NUM
2232 ;PRINT A MESSAGE WHEN SOMEONE WRITES ON SYS.
2233 SYSWRT: MOVE A,SWUNAM ;WRITE ON SYS DEVICE
2237 MOVE A,SWFN3 ;SNAME - SYS,SYS1, ...
2243 MOVE A,[SIXBIT /WRITE/] ;Assume luser was writing.
2244 MOVE B,SWMOD ;Check opcode.
2246 MOVE A,[SIXBIT /LINK/] ; Yup.
2247 CAIN B,4 ;Maybe DELE/WO, RENAM/WO?
2248 MOVE A,[SIXBIT /DELRNM/] ; Yah, hmmhmmm.
2249 SYSWR3: PUSHJ P,SYSSIX
2252 SUBTTL DETERMINE AND PRINT THE DATE AND TIME
2255 DATIME: JRST .+1 ;RH MODIFIED TO REFLECT PROGRESS
2256 BBLK ;ROUTINE CALLED BY PUSHJ,
2257 ;BIT SET EVERY SECOND FROM SUPCOP UNTIL
2259 MOVSI T,40000 ;"MFD IN" BIT IN QMDRO
2260 CONO PI,UTCOFF ;DISABLE INTERRUPTS
2261 TDNE T,QMDRO ;SEE IF DIRECTORY IN
2263 ;MFD IN, GET CRUD FROM IT
2264 MOVE A,QMDRO ;GET ORIGIN OF MFD
2265 SKIPE B,MDYEAR(A) ;YEAR
2267 SKIPE C,MPDOFF(A) ;PDTIME OFFSET
2273 DATIM0: PUSHJ P,GLPDTM ;NOW SEE IF IT'S ALL THERE
2274 JRST DATIM2 ;NOT ALL THERE, DOCUMENT WHAT'S MISSING
2275 JRST DATIM6 ;ALL THERE, TYPE OUT AND CLEAR SUPCOR BIT
2277 ;NOT ALL THERE, DOCUMENT (TYPE OUT) WHAT IS MISSING
2278 ;SHOULD NOT BE NECESSARY TO WARM UP TTY
2282 DATAI PDCLK,A ;SEE IF CLOCK ON
2283 JUMPN A,DATIM3 ;JUMP IF CLOCK WINNING
2284 MOVEI I,[ASCIZ /DECORIOLIS CLOCK HAS BEEN POWERED OFF, IF THE TIME
2285 CANNOT BE DETERMINED FROM THE NETWORK, YOU MAY HAVE TO :PDSET
2288 SOJG T,. ;WAIT AND BE SURE
2289 DATAI PDCLK,A ;GET DATAI AGAIN
2290 JUMPN A,DATIM3 ;JUMP IF OK NOW
2291 PUSHJ P,SYSSP ;COMPLAIN
2294 RDTIM A ; Clobbers B
2295 TLC A,1729. ; "A most interesting number"
2296 TLNN A,-1 ; If present, KS-10 clock still remembers the time.
2298 MOVEI I,[ASCIZ /THE KS-10 CLOCK HAS BEEN RESET, IF THE TIME CANNOT
2299 BE DETERMINED FROM THE NETWORK, YOU MAY HAVE TO :PDSET
2301 PUSHJ P,SYSSP ; Complain
2304 ; HRROI T,CCTSS ;NOW PREPARE TO LOAD CTSS CALLER FROM SYS:@ CCTSS
2305 ; PUSHJ P,NUJBST ;DO A PSEUDO-CONTROL Z
2307 DATIM3: MOVEI C,0 ;COUNTER OF THINGS MISSING FROM MFD
2308 MOVEI I,[ASCIZ /YEAR, /]
2309 SKIPG FYEAR ;CHECK YEAR
2310 PUSHJ P,[AOJA C,SYSSP] ;NOT IN, COMPLAIN
2312 MOVEI I,[ASCIZ /PDTIME OFFSET, /]
2314 PUSHJ P,[AOJA C,SYSSP] ;PDTIME OFFSET NOT IN
2316 JUMPE C,DATIM4 ;SKIP FOLLOWING IF EVERYTHING ON DISK
2317 MOVEI I,[ASCIZ /NOT ON DISK.
2318 PLEASE SETLOC APPROPRIATELY.
2321 DATIM4: SKIPA T,[DATIM5];UPDATE DATIME TO WAIT FOR EVERYTHING TO BE THERE
2322 DATIM7: MOVEI T,DATIM8 ;UPDATE DATIME TO WAIT FOR ABILITY TO DO
2323 ; PSEUDO-CONTROL Z FOR CTSS CALLER
2327 ;WAIT FOR EVERYTHING TO BE THERE
2328 ;THEN TYPE OUT "IT IS NOW...", ETC.
2330 DATIM5: PUSHJ P,GLPDTM ;CHECK IT
2331 POPJ P, ;NOT ALL THERE YET
2332 MOVEI T,DATIME+1 ;ALL THERE, RE-INITIALIZE DATIME
2334 DATIM6: MOVSI T,SCLDAT ;STOP CALLING DATIME EVERY SECOND
2335 ANDCAM T,SUPCOP ;NOW THAT THE WORK IS DONE.
2336 HRRZS TIMOFF ;START UP SLOW CLOCK REAL-TIME ROUTINE
2337 SETZM RSWTIM ;Initialize the resource-warning timestamp.
2338 PUSHJ P,WARMTT ;WARM UP TTY
2339 PUSHJ P,RYEAR1 ;GET DAY OF WEEK IN RELEVANT FIELD OF E
2340 SYSNWP: MOVEI I,[ASCIZ /IT IS NOW /]
2341 PUSHJ P,SYSSP ;TYPE IT OUT
2342 IDIVI A,SPD ;A HAS RESULT OF PUSHJ TO GLPDTM
2343 PUSH P,A ;SAVE DAY OF YEAR
2344 MOVE A,B ;GET # SECS SINCE MIDNIGHT IN A
2345 IDIVI A,SPD/2 ;GET AM/PM BIT IN A, 12 HOUR TIME (SECS) IN B
2346 PUSH P,[SIXBIT / AM PM/](A) ;REMEMBER WHAT HALF-DAY
2347 CAIGE B,3600. ;USE 12:01 RATHER THAN 0:01 IN 12-HR TIME.
2349 PUSHJ P,RTIME ;CONVERT TIME TO SIXBIT
2351 TLNN B,170000 ;IF LEADING DIGIT IS ZERO,
2352 TLZ B,770000 ;THEN TURN IT INTO A BLANK
2353 PUSHJ P,SYSTCD ;TYPE OUT TIME
2354 POP P,B ;RESTORE AM OR PM WORD
2355 PUSHJ P,SYS6 ;TYPE IT OUT
2356 MOVE B,[SIXBIT / EST,/]
2357 TLNE E,100000 ;DST BIT
2358 HRLI B,(SIXBIT / ED/) ;DAYLIGHT SAVINGS TIME, TYPE OUT EDT INSTEAD OF EST
2359 PUSHJ P,SYS6 ;TYPE IT OUT
2360 PUSHJ P,STYOS ;TYPE A SPACE
2361 LDB B,[320300,,E] ;GET DAY OF WEEK (0 => SUNDAY)
2362 MOVE B,DOWTBL(B) ;MON, TUES, WEDNES, ETC. (IN SIXBIT)
2363 PUSHJ P,SYS6 ;TYPE IT OUT
2364 MOVEI I,[ASCIZ /DAY, /] ;FINISH ON DAY OF WEEK
2365 PUSHJ P,SYSSP ;" " "
2366 POP P,A ;RESTORE DAY OF YEAR
2367 PUSHJ P,RDATE1 ;CALCULATE MONTH AND DAY
2368 MOVE B,NMNTBL-1(B) ;GET SIXBIT FOR MONTH
2369 PUSHJ P,SYS6 ;TYPE OUT MONTH
2370 PUSHJ P,STYOS ;TYPE A SPACE
2371 MOVE A,C ;GET DAY OF MONTH IN A
2372 PUSHJ P,SYSDPT ;TYPE OUT IN DECIMAL
2374 PUSHJ P,STYO ;TYPE A COMMA
2375 MOVEI A,(E) ;GET YEAR
2376 PUSHJ P,SYSDPT ;TYPE IT OUT
2377 JRST SYSCRF ;END WITH CRLF
2379 ;TABLE OF NAMES OF MONTHS (FIRST THREE LETTERS, IN SIXBIT)
2381 NMNTBL: MNIRP [SIXBIT /M/]
2383 ;TABLE OF SIXBIT NAMES FOR DAYS OF THE WEEK
2384 ;(THE "DAY" ON THE END LEFT OFF)
2386 DOWTBL: IRPS D,,[SUN MON TUES WEDNES THURS FRI SATUR]
2389 IFN .-DOWTBL-7,.ERR BARF AT DOWTBL
2391 SUBTTL NETWORK UP/DOWN
2396 MOVEI I,[ASCIZ /IMP CRASHED, STATUS=/]
2397 PUSHJ P,SYSSP ;Print string
2398 MOVE A,IMERCN ;Get IMP error code
2399 PUSHJ P,SYSFWP ;Print that
2400 PUSHJ P,SYSTCR ;Time, CRLF
2401 SETOM IMERCN ;Reset error status
2402 MOVE A,LNETIM ;Last time net was initted
2403 SUB A,TIME ;A will be positive if net was last
2404 ADDI A,30.*30. ; initted less than 30 sec ago.
2405 PUSH P,A ;Flag for SYSNT5. + means don't restart IMP
2406 MOVNI A,2 ;Say we are coming up, but no PI action yet,
2407 MOVEM A,IMPUP ; and prevent new net openers. IMPUP may
2408 PUSHJ P,SYSNT5 ; not already be -1 if got here via LOCK/NET
2409 JRST SCOR ;Reset net, then back to main loop
2411 ;Reset net, and potentially restart IMP
2412 ; Try restarting if IMP ready and -1(P) is negative.
2414 ;IMPUP is -1 so no new opens can happen.
2417 ;PCLSR those users running in OPEN.
2421 PUSHJ P,LSTSTP ;PCLSR all users in .OPEN
2424 SYSNT2: SKIPL A,IMSOC1(I)
2430 TLNE T,BULGO ;Tree is being deleted anyway.
2432 PUSHJ P,IFSTOP ;Stop network user
2434 PUSHJ P,SYSNT3 ;Hack IOCHNM words of net user
2435 SYSNT1: AOBJN I,SYSNT2
2438 ;Disconnect all STYs from the network
2440 MOVEI I,NFSTTY+NSTTYS-1
2448 ;Clean up connections which were closing
2452 SYSNT7: SKIPL H,IMSOC1(I)
2454 PUSHJ P,IMPBRT ;RETURN BUFFER
2455 TLNN H,200000 ;IN PROCESS OF CLOSING?
2456 JRST SYSNT4 ;NO, IGNORE
2457 SETZM IMSOC1(I) ;FLUSH SOCKET
2458 SOS IMNCS ;DECREASE COUNT OF CLOSES IN PROCESS
2459 SYSNT4: AOBJN I,SYSNT7 ;LOOP THRU ALL SOCKETS
2460 SKIPE IMNCS ;SKIP IF 0 MORE CLOSES
2461 BUG PAUSE,DEC,IMNCS,[NET CHANNELS NOT CLOSED YET]
2465 ;Maybe try to bring the IMP up again
2468 SKIPG -1(P) ;If last time down was < half minute ago,
2469 CALL IMPCKR ; or IMP ready line is not set,
2470 JRST LSWCLR ; then don't try to bring it up again
2472 IFN NCPP,PUSHJ P,LSWCLR ;Restart old network users
2474 MOVEI I,[ASCIZ /IMP up again./]
2475 JRST SYSSTD ;Print and return
2481 POPJ P, ;NOT A NETWORK CHANNEL
2482 HLRE C,(R) ;SOCKET MAP INDEX
2484 HRROS (R) ;SET LH OF IOCHNM TO -1
2491 IORM C,IFPIR(A) ;INTERRUPT USER
2496 ;Try to bring IMP up if desirable
2498 IFE IMPP,POPJ P, ;No IMP, no work
2500 SKIPGE IMPTCU ;Already trying to come up?
2501 POPJ P, ;Yes, no meddling needed
2502 CALL IMPCKR ;Check if IMP ready line is now
2503 JRST [ SETZM IMPTCU ;IMP not ready, we are down and not trying
2504 POPJ P, ] ; to come up. Give up now
2505 PUSH P,[-1] ;Force SYSNT5 to try and restart IMP if called
2506 SKIPGE IMPUP ;Do this only if imp is temporarily down.
2507 PUSHJ P,SYSNT5 ;Reset world, restart IMP
2508 JRST POP1J ;Clean up and exit
2512 ; LIST ;WHERE LIST/ <HEAD OF A LIST OF JOBS>
2513 ;STOPS ALL JOBS ON THE LIST, AND PUT THEM ON OUR LSWPR.
2514 ;LIST SHOULD BE LINKED THROUGH THE RH, AND EACH WORD IN THE LIST SHOULD BE
2515 ;IN THE USER VAR BLOCK OF SOME JOB. THAT JOB IS CONSIDERED TO BE ON THE LIST.
2516 ;0 IN THE RH MEANS NIL.
2517 LSTSTP: MOVE T,@(P) ;POINTER TO FIRST ELEMENT OF LIST
2521 SKIPN A,T ;ADDRESS OF LSWB BLOCK
2525 IMULI A,LUBLK ;USER INDEX
2527 PUSHJ P,IFSTOP ;STOP USER, ADDING HIS USTP TO OUR LSWPR
2530 \fSUBTTL SYSTEM JOB TYPE-OUT ROUTINES
2532 ;PRINT "<A>/ <@D> <C>" IN OCTAL.
2533 ;USED BY SYSSET. CLOBBERS A,B,T.
2539 MOVE A,(D) ;GET CURRENT VALUE
2542 MOVE A,C ;GET NEW VALUE
2545 ;STRING <- I, SPACE, TIME AND CRLF.
2546 ;CLOBBERS A THRU E AND T.
2547 SYSSTD: PUSHJ P,SYSSP
2549 ;SPACE, TIME AND CRLF.
2550 ;CLOBBERS A THRU E AND T.
2551 SYSTCR: PUSHJ P,SYSTPT
2553 ;TYPE A CRLF. CLOBBERS T.
2554 SYSCRF: SOS CTLCNT ;Countdown number of lines printed.
2560 SYSTPT: PUSHJ P,STYOS ;TYPE SPACE, TIME
2561 CONSZ PI,200 ;IF IN BUGDD0, MUSTN'T CALL GLPDTM
2563 POPJ P, ;TIME NOT KNOWN
2565 PUSHJ P,RTIME ;CONVERT TO SIXBIT.
2566 MOVE B,A ;DROP INTO SYSTCD
2568 SYSTCD: LDB A,[301400,,B]
2575 ;PREPARE FOR TYPING OUT A MESSAGE ON THE CONSOLE TTY. CALL HERE BEFORE
2576 ;STARTING TO TYPE A LINE, IF THERE IS A CHANCE THAT SYS JOB MIGHT JUST
2577 ;BE STARTING TO TYPE AFTER A PERIOD OF SILENCE.
2578 WARMTTY:PUSHJ P,SYSCOP ;GET SYSTEM TTY READY TO USE
2579 .IOT STYOC,[^P] ;ADVANCE TO FRESH LINE
2583 .ELSE [ MOVE T,SYSCN
2584 MOVE T,TTLTM(T) ;DON'T DO THIS IF THERE'S BEEN ACTIVITY IN 2 MINUTES.
2590 SKIPA T,[175] ;WARM UP TELETYPE (ONLY ON AI-KA FOR NOW)
2592 DINGTTY: SKIPA T,[^G] ;DING DING
2597 ;ROUTINE TO "OPEN" A CHANNEL TO THE SYSTEM CONSOLE
2598 ;IT'S DONE THIS WAY SO THAT THE CONSOLE CAN STILL BE
2599 ;USED AS A USER CONSOLE WHEN NECESSARY. SYSTEM JOB
2600 ;MESSAGES WILL JUST COME OUT FROM TIME TO TIME.
2602 SYSCOP: HRLZ T,SYSCN ;FAKE UP AN IOCHNM WORD
2603 ADD T,[%TJDIS+%TJMOR,,TYODN]
2605 MOVEI T,NLODN ;IF NO SYS TTY AVAIL, USE NUL DEVICE
2606 MOVEM T,IOCHNM+STYOC
2609 ;TYPE OUT THE SIXBIT WORD IN B, QUIT WHEN WHAT IS LEFT IS BLANK
2610 SYS6: JUMPE B,CPOPJ ;RETURN WHEN NOTHING LEFT
2611 MOVEI A,0 ;INITIALIZE FOR LSH
2612 LSHC A,6 ;SHIFT A CHARACTER IN
2613 MOVEI T,40(A) ;CONVERT TO SIXBIT AND GET IN T
2614 PUSHJ P,STYO ;TYPE OUT THE CHARACTER
2615 JRST SYS6 ;LOOP BACK FOR NEXT CHARACTER
2617 ;PRINT A MESSAGE ON ALL FREE CONSOLES. 40 SET IN LH(I) => IT IS ADDR OF ROUTINE;
2618 ;ELSE IT IS ADDR OF AN ASCIZ STRING TO BE TYPED FOLLOWED BY THE TIME AND A CRLF.
2620 HRLI I,440700 ;SYSTEM ALL CONSOLES PRINT
2622 SYALC1: PUSHJ P,SYSTSU
2626 MOVE Q,I ;SO NOT TO MUNG I UNTIL END
2628 JUMPE E,SYALC4 ;JUMP IF DONE
2629 .IOT STYOC,E ;COPY CHARACTER
2630 JRST SYALC2 ;GO GET NEXT CHARACTER
2637 SYALC6: MOVSI E,%TACFM
2638 IORM E,TTYSTA(A) ;DONT NEED CONSOLE FREE MSG ANY MORE
2639 AOS A ;INCREMENT CONSOLE NUMBER
2640 SYALC3: CAIGE A,NCT+IFN N11TYS,[1-N11TYS] ;IF MORE CONSOLES LEFT,
2641 JRST SYALC1 ;THEN PRINT OUT ON NEXT ONE
2642 JRST SYSCOP ;FINALLY RE-OPEN SYSTEM CONSOLE.
2644 SYALC4: PUSH P,[SYALC6] ;PUT TIME AT END OF MESSAGE
2645 PUSH P,A ;IF WE KNOW WHAT TIME IT IS
2651 .IOT STYOC,["A] ;PUT TIME IN UP/DOWN MESSAGES
2657 SYSTSU: CONO PI,TTYOFF
2660 JRST TTYONJ ;IN USE OR WILL GET CONSOLE FREE MSG => DON'T HACK IT
2663 AOS (P) ;TTY NEEDS HACKING, SO SKIP.
2665 ADD T,[%TJDIS+%TJMOR,,TYODN]
2666 MOVEM T,IOCHNM+STYOC ;"OPEN" THE CHANNEL.
2667 SYSTS1: MOVE T,TTYOPT(A)
2670 POPJ P, ;IMLAC OR PRINTING TTY, DON'T CLEAR.
2676 ;SYSTEM JOB RADIX PRINT-OUT ROUTINES
2677 ;FULL WORD (TWO HALFWORD) OCTAL:
2678 SYSFWP: TLNN A,-1 ;IF LH=0,
2679 JRST SYSOPT ;THEN PRINT ONLY RH
2684 MOVEI T,", ;",," BETWEEN HALFWORDS
2688 ;OCTAL PRINTOUT, NO LEADING ZEROS, HALFWORD MAXIMUM
2693 SYSRP2: HLRZ B,(P) ;ENTRY POINT FROM DECIMAL TYPEOUT ROUTINE
2694 SYSRP1: MOVEI T,"0(B) ;" " "
2697 ;DECIMAL PRINTOUT, COMMAS EVERY 3 DIGITS, FULLWORD MAXIMUM
2698 SYSDPC: MOVE 0,A ;ROUTINE EXPECTS ARGUMENT IN A, CLOBBERS 0, A(=0+1), B(=A+1)
2699 SYSDP5: IDIVI 0,1000. ;GET LEAST SIGNIFICANT 3 DIGITS IN A
2700 JUMPE 0,SYSDPT ;PRINT HIGH ORDER DIGITS WITHOUT LEADING ZEROES
2704 MOVEI T,", ;SINCE 3*N DIGITS LEFT TO BE TYPED, N>0,
2705 PUSHJ P,STYO ;PRINT OUT A COMMA
2706 MOVEI T,3 ;NUMBER OF DIGITS TO PRINT OUT
2707 ;ROUTINE TO PRINT OUT AS MANY DECIMAL DIGITS AS SPECIFIED IN T
2714 ;PRINT NUMBER IN A IN DECIMAL; CLOBBERS B, T.
2721 STYOQ: MOVEI T,"? ;TYPE OUT "?"
2724 STYOT: SKIPA T,[11] ;TAB
2725 STYOS: MOVEI T,40 ;TYPE OUT A SPACE
2726 STYO: CONSO PI,200 ;PI ON? (SYSTEM UP)
2731 ;TYPE OUT DIRECTLY WHILE SYSTEM IS NOT RUNNING
2752 ANDI T,177 ; ASCII for the 8080
2753 IORI T,400 ; Means a character is present
2757 CONO (T) ; punch 8080
2758 SKIPE 8CTYOT ; wait for completion
2760 HLRZ T,(P) ; God knows who might look at T...
2764 ;PRINT WORD IN I AS 12. OCTAL DIGITS. CLOBBERS J,T.
2765 SYSP: MOVE J,[440300,,I]
2774 SYSSP: HRLI I,440700 ;ENTRY TO TYPE C(I) AS A POINTER TO ASCIZ
2780 SYSTWR: LSH A,30-18.
2781 ADDI A,(SIXBIT / :/)
2784 SYSSIX: PUSHJ P,STYOS ;TYPE A SPACE AND FALL IN
2785 SYSIXP: MOVE I,[440600,,A] ;ENTRY TO TYPE OUT C(A) AS SIXBIT