mirror of
https://github.com/PDP-10/its.git
synced 2026-01-25 03:37:00 +00:00
2802 lines
70 KiB
Plaintext
Executable File
2802 lines
70 KiB
Plaintext
Executable File
; -*-MIDAS-*-
|
||
;;; Copyright (c) 1999 Massachusetts Institute of Technology
|
||
;;; See the COPYING file at the top-level directory of this project.
|
||
|
||
SUBTTL DEMON JOB INTERFACE ROUTINES
|
||
;GIVE STUFF TO DEMON JOB RUNNING IN USER MODE, WHICH THEN OUTPUTS
|
||
;STUFF IN ITS OWN FORMAT TO THE DISK
|
||
;COMMUNICATION IS VIA DMNBUF (BUFFER) AND POINTERS,
|
||
;DEMON JOB FINDS IT BY LOOKING UP SYSTEM SYMS
|
||
|
||
;USAGE:
|
||
;ROUTINES MUST BE CALLED WITH CLK OFF OR IN PROGRESS
|
||
;FIRST CALL DMNP TO SET UP D AS "PDL POINTER" INTO DMNBF
|
||
;DMNPSH ADR ;PUSH ADR INTO DMNBF (ASSEMBLES INTO A PUSH)
|
||
;FIRST WORD PUSHED SHOULD HAVE ENTRY TYPE DESCRIPTOR IN HIGH SIX BITS
|
||
|
||
;ENTRY TYPE DESCRIPTORS:
|
||
DMNELI==10000 ;LOGIN (DMNPLI)
|
||
DMNELO==20000 ;LOGOUT (DMNPLO)
|
||
;^ ADD MORE AS NEEDED, NEED NOT BE SYMBOLIC BUT PLEASE COMMENT THEM HERE FOR XREF
|
||
|
||
;DMNRS ;NORMALLIZE POINTER (DUE TO STANDARD LENGTH ENTRY IN TABLE)
|
||
;ASSEMBLES INTO ONE STORAGE WORD
|
||
;THEN CALL (PUSHJ) DMNRT WHICH STORES BACK D
|
||
;ALL DMNPSH'S SHOULD BE ASSEMBLED BEFORE DMNRT;
|
||
;ALL ROUTINES SHOULD BE BETWEEN THIS PAGE AND DMNBUF
|
||
|
||
;DMNSZ (# ENTRIES IN DMNBF) DEFINED EARLY IN SYSTEM ENGLISH SO CAN BE CHANGED EASILY
|
||
|
||
DMNFMT==2 ;ASCENDING FORMAT NUMBER, SHOULD BE INCREMENTED EACH TIME
|
||
;A CHANGE IS MADE REQUIRING CHANGE IN CODING EITHER OF DEMON JOB
|
||
;OR OF PROGRAMS READING ITS OUTPUT
|
||
;DMNFNT 1 -> 2 9/71 SWAPIN RQ INCLUDED W/LOGOUT
|
||
|
||
DMNBAC==0 ;DMNPSH COUNTER, AFTER FIRST TIME GETS RE-INITIALIZED TO DMNBLM
|
||
|
||
DEFINE DMNPSH ADR
|
||
DMNBAC==DMNBAC+1
|
||
PUSH D,ADR
|
||
TERMIN
|
||
|
||
IF1,DMNBEL==0 ;BECOMES LENGTH PER ENTRY IN DMNBF
|
||
|
||
DEFINE DMNRS
|
||
ADDI D,DMNBEL-DMNBAC
|
||
IF1,IFG DMNBAC-DMNBEL,DMNBEL==DMNBAC
|
||
DMNBAC==DMNBLM
|
||
TERMIN
|
||
|
||
;PUSHJ P,DMNP ;SET UP D FOR DMNPSH'S INTO DMNBF
|
||
|
||
DMNP: MOVE D,DMNBFP ;GET POINTER
|
||
CAIL D,DMNBFE-1 ;AT END OF BUFFER?
|
||
MOVEI D,DMNBF-1 ;YES, RE-INITIALIZE
|
||
AOS DMNBC ;INDICATE ENTRY ABOUT TO BE FILLED, SO DEMON KNOWS IF IT LOST
|
||
DMNP0: ;DMNP0 MAY BE CALLED IN USER MODE FROM DEMON JOB
|
||
DMNPSH TIME ;FIRST WORD IN BUFFER ALWAYS TIME OF ENTRY
|
||
;^ MAYBE ADD MORE STANDARD PUSHES HERE
|
||
POPJ P,
|
||
|
||
DMNBLM==DMNBAC ;NUMBER OF INITIAL WORDS PUSHED
|
||
|
||
;PUSHJ P,DMNRT (BUT USUALLY JRST DMNRT FOR RETURN)
|
||
;DMNBF ENTRY COMPLETED, STORE BACK POINTERS
|
||
|
||
DMNRT: TLZ D,-1 ;CLEAR OUT LEFT HALF OF POINTER
|
||
CAIL D,DMNBFE ;AFTER END OF BUFFER?
|
||
JRST 4,.+1 ;DMNBF POINTER INCREMENTED INCORRECTLY SOMEWHERE ALONG THE LINE
|
||
;PROBABLY PROGRAMMER FORGOT TO DO DMNRS; CODING AFTER DMNBF MIGHT BE CLOBBERED
|
||
AOS DMNBD ;ENTRY COMPLETE, GIVE IT TO DEMON JOB
|
||
MOVEM D,DMNBFP
|
||
POPJ P,
|
||
|
||
;NOW FOR INDIVIDUAL ROUTINES
|
||
|
||
;LOGIN
|
||
|
||
DMNPLI: PUSHJ P,DMNP ;SET UP
|
||
HRLI U,DMNELI ;INDICATE LOGIN
|
||
;PUT FOLLOWING INTO DMNBF:
|
||
DMNPSH U ;INDEX OF USER BEING LOGGED IN
|
||
TLZ U,-1
|
||
DMNPSH UNAME(U) ;UNAME
|
||
DMNPSH JNAME(U) ;JNAME
|
||
DMNPSH TRMNAM(U) ;TERMINAL NAME
|
||
DMNPSH XUNAME(U)
|
||
DMNRS ;THAT'S ALL
|
||
JRST DMNRT
|
||
|
||
;LOGOUT
|
||
|
||
DMNPLO: PUSHJ P,DMNP ;SET UP D
|
||
PUSHJ P,LOGUSE ;GET TREE'S USAGE IN T AND TT
|
||
HRLI U,DMNELO ;INDICATE LOGOUT
|
||
;PUT FOLLOWING IN DMNBF FOR DEMON JOB TO DUMP OUT ON DISK:
|
||
DMNPSH U ;INDEX OF USER BEING LOGGED OUT
|
||
TLZ U,-1
|
||
DMNPSH UNAME(U) ;UNAME OF USER
|
||
DMNPSH JNAME(U) ;JNAME
|
||
DMNPSH TT ;TIME USED, IN 4.069 USEC UNITS
|
||
DMNPSH T ;# SWAPIN REQUESTS (THESE VALID SINCE LOGUSE ALREADY CALLED)
|
||
;^ ADD MORE HERE
|
||
ADDM TT,LOUTIM ;COUNT UP TOTAL TIME USED BY ALL LOSERS
|
||
DMNRS
|
||
JRST DMNRT
|
||
|
||
DMNPL0==CPOPJ ;DMNPL0 MAY BE CALLED FROM DEMON JOB IN USER MODE
|
||
;IT IS NO LONGER POSSIBLE TO MAKE THIS WORK RIGHT,
|
||
;SO WE JUST RETURN. PFTHMG DRAGON SHOULD BE FIXED.
|
||
|
||
EBLK
|
||
;DEMON VARIABLES, MUST FOLLOW CODING
|
||
;USE CARE IN REDEFINING SYMBOLS ON THIS PAGE; DEMON JOB RUNNING IN USER MODE
|
||
;LOOKS AT SOME OF THEM, EXCEPT AS INDICATED
|
||
|
||
DMNBF: BLOCK DMNBEL*DMNSZ ;BUFFER
|
||
DMNBFE::
|
||
|
||
DMNBC: 0 ;ENTRY COUNT, INCREMENTED JUST BEFORE ENTRY ADDED TO DMNBF (USED BY DEMON)
|
||
DMNBD: 0 ;ENTRY COUNT, INCREMENTED JUST AFTER " " "
|
||
DMNBFP: DMNBF-1 ;POINTER INTO BUFFER, HAS ADR OF LAST WORD WRITTEN (NOT USED BY DEMON)
|
||
VSCLAU: 0 .SEE VSCLA1 ;LAST JOB TREE ACCOUNTING UPDATE DONE FOR
|
||
;NO MORE CODING ALLOWED AFTER THIS POINT
|
||
|
||
DEFINE DMNPSH A
|
||
INFORM DMNPSH AT .,\.
|
||
TERMIN
|
||
|
||
DEFINE DMNRS
|
||
INFORM DMNRS AT .,\.
|
||
TERMIN
|
||
|
||
BBLK
|
||
|
||
SUBTTL "SYSTEM" JOBS
|
||
|
||
IFN TPLP,[
|
||
TPLI==11 ;PSEUDO LPT IN
|
||
PRTO==12 ;REAL LPT OUT
|
||
]
|
||
IFN DEMON,TPLI==11 ;FOR DEMON HACKER
|
||
IFN DEMON,TEMPC==16 ;FOR TESTING WHETHER DEMON FILE EXISTS.
|
||
STYOC==17 ;OUTPUT "
|
||
|
||
;CODE FROM ICLR TO SCOR EXECUTED ONLY ONCE (SEE BEG)
|
||
ICLR: MOVE A,[GO,,GO+1] ;PICK UP BLT POINTER (COPY EXCH WORD INTO NEXT)
|
||
SETZM GO ;CLEAR FIRST WORD
|
||
BLT A,IEND ;CLEAR OUT INITIALIZING CODE (IN AREA TO BE USER VAR BLOCKS)
|
||
SKIPL CORRQ ;SKIP IF CORE RQ FOR SYSTEM'S SPACE PROCESSED
|
||
PUSHJ P,UFLS ;WAIT AS NECESSARY
|
||
PUSHJ P,SYSCOP ;"OPEN" SYSTEM CONSOLE CHANNEL
|
||
IFN CCLKP,[
|
||
JRST .+3 ;JFCL FOR CHESS CLK MODE
|
||
PUSHJ P,CLQAD1
|
||
CCLKB
|
||
];CCLKP
|
||
IFN IMPP,[
|
||
MOVE A,TIME
|
||
MOVEM A,LNETIM
|
||
PUSHJ P,IMPINI
|
||
];IMPP
|
||
MOVEI A,IINTIC
|
||
MOVEM A,IINCNT
|
||
SCOR: MOVE P,SYSPDP
|
||
MOVE U,USER
|
||
CONO PI,CLKON
|
||
MOVE A,TIME
|
||
ADDI A,30.*60.*5 ;5 MINUTES BEFORE SHUTDOWN?
|
||
SKIPLE SHUTDN
|
||
CAMG A,SHUTDN
|
||
JRST .+3
|
||
SKIPN SUSRS
|
||
JRST SYSOUT ;JUMP IF SYS DYING & NO ONE LOGGED IN
|
||
MOVE T,[.HANG]
|
||
MOVEM T,FORTY ;TELL PEEK WHAT OUR UFLS REALLY IS.
|
||
MOVE T,TIME
|
||
MOVEM T,SYSITM
|
||
SKIPN SUPCOR ;SKIP IF ANY BITS ON IN SUPCOR
|
||
PUSHJ P,UFLS ;HANG TILL A BIT ON
|
||
;SYS JOB IS HUNG IF SYSITM IS 30 SEC OLD AND PC ISN'T SCOR1.
|
||
SCOR1: MOVSI A,(SETZ)
|
||
MOVEI B,0
|
||
SYSDP1: TDNE A,SUPCOR
|
||
JRST SYSDP2
|
||
SYSDP3: LSH A,-1
|
||
JUMPE A,SCOR
|
||
AOJA B,SYSDP1
|
||
|
||
SYSDP2: SKIPGE SYSDTB(B) ;SKIP UNLESS 4.9 BIT OF ENTRY ON
|
||
ANDCAM A,SUPCOR ;4.9 ON, CLEAR SUPCOR BIT
|
||
LDB C,[370200,,SYSDTB(B)]
|
||
TRNE C,2 ;IF ROUTINE IS GOING TO USE TTY,
|
||
PUSHJ P,WARMTTY ;THEN WARM IT UP FOR IT
|
||
TRNE C,1
|
||
PUSHJ P,DINGTTY
|
||
LDB T,[420100,,SYSDTB(B)] ;GET 4.8 BIT
|
||
JUMPE T,@SYSDTB(B) ;IF 4.8 BIT = 0, JUMP TO ROUTINE
|
||
PUSH P,A ;4.8 .NE. 0, SAVE A
|
||
PUSH P,B ;SAVE B
|
||
PUSHJ P,@SYSDTB(B) ;CALL ROUTINE
|
||
POP P,B ;RESTORE B
|
||
POP P,A ;RESTORE A
|
||
LDB T,[410100,,SYSDTB(B)] ;GET 4.7 BIT
|
||
JUMPE T,SYSDP3 ;IF ZERO RETURN TO LOOP
|
||
ANDCAM A,SUPCOR ;NON-ZERO, CLEAR SUPCOR BIT
|
||
JRST SYSDP3 ;LOOP
|
||
|
||
SUBTTL SUPCOR DISPATCH TABLE
|
||
|
||
;DISPATCH TABLE FOR BITS IN SUPCOR
|
||
;4.9 = 1 TO CLEAR SUPCOR BIT BEFORE DISPATCHING
|
||
;4.8 = 0, JRST TO ROUTINE ; = 1, PUSHJ
|
||
;4.7 = 1 TO CLEAR SUPCOR BIT AFTER (ONLY USEFUL IF PUSHJ)
|
||
;4.6 WARM UP TELETYPE BEFORE CALL
|
||
;4.5 DING BEFORE CALL
|
||
|
||
SCL==1,,525252 ;BIT TYPEOUT MASK FOR SUPCOR
|
||
SCR==525252 ; ..
|
||
|
||
SYSDTB:
|
||
SCLEX==400000 ? 300000,,SYSEX ;INCREASE USER-VAR BLOCK SPACE.
|
||
SCLSHD==200000 ? 340000,,SYSSHD ;HANDLE .SHUTDN - PRINT "GOING DOWN" MESSAGES.
|
||
SCLOUT==100000 ? 400000,,SYSOUT ;TIME FOR SYSTEM TO GO DOWN.
|
||
IFE KS10P,[ 660000,,SYSCK5 ;CHECK FOR DEVICES GIVING SPURIOUS INTERRUPTS.
|
||
SCLCK5==040000]
|
||
IFN KS10P, 400000,,SYSDP3
|
||
SCLDAT==020000 ? 600000,,DATIME ;CONTINUE TRYING TO DETERMINE DATE AND TIME.
|
||
SCLPAR==010000 ? 360000,,PARTYP ;PRINT "PARITY ERROR..."
|
||
SCLSET==004000 ? 340000,,SYSSET ;DEPOSIT IN SYSTEM (.SETLOC).
|
||
SCLIMP==002000 ? 600000,,SYSIMU ;PRINT "NETWORK UP ..."
|
||
SCLWRT==001000 ? 340000,,SYSWRT ;PRINT WRITING-ON-SYS: MESSAGE.
|
||
SCLLGI==000400 ? 340000,,SYSLGI ;PRINT LOGIN MESSAGE.
|
||
SCLDEC==000200 ? 300000,,SYSDEC ;DECREASE USER-VAR SPACE.
|
||
SCLVSK==000100 ? 600000,,VSCLK ;VERY SLOW (2 MINUTE) CLOCK.
|
||
SCLGUN==000040 ? 600000,,SYSGUN ;FLUSH TREES THAT ARE TRYING TO LOG OUT.
|
||
SCLNET==000020 ? 460000,,SYSNET ;BRING NCP DOWN AND UP.
|
||
IFN DEMON,[ 600000,,DEMCHK ;RUN ANY DEMONS WHICH NEED IT.
|
||
SCLDMN==000010]
|
||
IFE DEMON, 400000,,SYSDP3
|
||
SCLNXM==000004 ? 360000,,NXMTYP ;PRINT "NON-EX MEM ERROR ..."
|
||
IFE KA10P,[
|
||
SCLBPF==000002 ? 360000,,BPFTYP ;BAD PAGE FAIL
|
||
].ELSE 400000,,SYSDP3
|
||
SCLIDK==000001 ? 600000,,ISYS ;DISK IS INITIALIZED
|
||
SCRTPP==400000 ? 600000,,TPLPRT ;TRANSFER DATA TO LPT (FROM TPL)
|
||
SCRTPC==200000 ? 600000,,VSCL6 ;SEE IF ANY FILES HAVE BEEN SPOOLED.
|
||
400000,,SYSDP3
|
||
SCRHNG==040000 ? 600000,,SYSDIL ;DIALUP LINE CONNECT OR DISCONNECT
|
||
SCRDET==020000 ? 600000,,SYSDT ;DETACH TOP-LEVEL JOBS WITH INTERRUPTS.
|
||
SCRCFM==010000 ? 600000,,SYSCFM ;PRINT CONSOLE FREE MSGS
|
||
SCRMSG==004000 ? 640000,,SYSMPR ;PRINT RANDOM SYSTEM MESSAG
|
||
REPEAT 5,400000,,SYSDP3 ;CAN BE SET BY USER (.SUPSET)
|
||
IFN N11TYS,[ 600000,,VWHO ;UPDATE WHO LINES (40)
|
||
SCRWHO==000040]
|
||
.ELSE 400000,,SYSDP3
|
||
IFN N11TYS,[ 640000,,SYS11D ;TV 11 GONE DOWN (20)
|
||
SCR11D==000020]
|
||
.ELSE 400000,,SYSDP3
|
||
IFN N11TYS,[ 640000,,SYS11U ;TV 11 COME UP, INIT IT (10)
|
||
SCR11U==000010]
|
||
.ELSE 400000,,SYSDP3
|
||
IFE DEMON, 400000,,SYSDP3 ;(4)
|
||
IFN DEMON,[ 600000,,DMNOFF
|
||
SCRDMF==000004]
|
||
SCRTPF==000002 ? 300000,,TPLOFF ;BLOCK TPL.
|
||
SCRCKS==000001 ? 600000,,SYSCKS ;PERFORM CHECKSUMMING
|
||
|
||
IFN .-SYSDTB-36.,.ERR SYS JOB DISPATCH
|
||
|
||
SUBTTL DM DAEMON OVERSEER
|
||
|
||
IFN DEMON,[
|
||
DEMCHK: PUSHJ P,SYSDEX ;HANDLE REQUESTS TO KNOW WHETHER A FILE
|
||
;EXISTS TO BE SIGNALLED AS A DEMON.
|
||
PUSHJ P,LSWTL ;SYSTEM JOB SIEZES DEMON TABLE SWITCH WITH UTCOFF
|
||
400000,,DEMSW
|
||
MOVE B,DMLSEX
|
||
CAMN B,[-DMLNG,,0] ;IF AT BEGINNING OF TABLE SET FLAG
|
||
TDZA D,D
|
||
SETOM D
|
||
DMSCN9: SKIPE TT,DMTTBL(B)
|
||
SKIPE DMTTBL+1(B) ;ONLY PAY ATTENTION IF NOT DOWN
|
||
JRST DMSCN1 ;AND GUY THERE
|
||
MOVE T,DMTTBL+2(B)
|
||
HRRE C,T
|
||
TLNE T,-1
|
||
JRST DMSCN3
|
||
JUMPLE C,DMSC10
|
||
DMSCN0: SKIPG DMNFLG
|
||
JRST DMSC11 ;IF FLAG SET CAN'T LOAD EM
|
||
CAME TT,[SIXBIT /UNSPOO/]
|
||
JRST DMSCN4 ;DON'T BOTHER WITH TPL STUFF, IF NOT TPL
|
||
SKIPGE TPLFLG
|
||
JRST DMSC10 ;REMOVE FROM WORLD
|
||
JRST DMSCN4
|
||
|
||
DMSCN4: HLRM T,DMTTBL+3(B) ;SET UP IMPLICIT REQUEST
|
||
CONO PI,UTCON ;ATTEMPT LOAD HERE
|
||
MOVE T,DMTTBL(B)
|
||
MOVEM T,DMOBLK+2 ;CHECK TO SEE IF FILE EXITS
|
||
.IOPUSH TPLI,
|
||
.OPEN TPLI,DMOBLK ;DON'T WORRY CAN'T PCLSR
|
||
JRST DMSCN5 ;OPEN FAILURE
|
||
.IOPOP TPLI, ;GET BACK STUFF
|
||
HRROI T,DMTTBL(B)
|
||
PUSHJ P,NUJBST ;TRY TO LOAD
|
||
JRST DMSCN6 ;COME BACK LATER, NO ENTRY FOR THIS GUY.
|
||
DMSCN8: ADD B,[DMTLL,,DMTLL]
|
||
SKIPL B
|
||
MOVSI B,-DMLNG
|
||
MOVEM B,DMLSEX ;FIX UP TABLE
|
||
DMSCN7: MOVSI B,SCLDMN
|
||
IORM B,SUPCOP ;IF MORE REQUESTS, RUN AGAIN IN 1 SECOND.
|
||
SOSLE REQCNT ;NO MORE REQUESTS =>
|
||
JRST LSWPOP
|
||
SETZM REQCNT
|
||
ANDCAM B,SUPCOP ;DON'T RUN AGAIN.
|
||
ANDCAM B,SUPCOR ;THEN CLEAR OUT SUPCOR BIT
|
||
JRST LSWPOP
|
||
|
||
|
||
DMSCN5: .IOPOP TPLI, ;FILE DOESN'T EXIST
|
||
CONO PI,UTCOFF
|
||
DMSC10: PUSHJ P,DEMMRV ;REMOVE DEAMON
|
||
JRST DMSCN8 ;AND REQUEST
|
||
|
||
DMSCN3: JUMPG C,DMSCN0 ;LOAD
|
||
JRST DMSCN1
|
||
|
||
DMSCN2: CONO PI,UTCON ;CONTINUE AROUND LOOP
|
||
ADD B,[DMTLL,,DMTLL]
|
||
DMSCN6: MOVEM B,DMLSEX
|
||
JRST LSWPOP ;COME BACK LATTER WITHOUT FLUSHING REQ
|
||
|
||
DMSCN1: ADD B,[DMTLL,,DMTLL] ;ADD ON VAL
|
||
JUMPL B,DMSCN9 ;CONTINUE AROUND LOOP
|
||
MOVSI B,-DMLNG
|
||
MOVEM B,DMLSEX
|
||
JUMPE D,UTOLKJ
|
||
DMSC11: SETZM REQCNT ;IF RAN THROUGH WHOLE TABLE WITHOUT ANY PROCESS
|
||
CONO PI,UTCON
|
||
JRST DMSCN7 ;FLUSH ALL REQUESTS AND RETURN
|
||
|
||
DMNOFF: MOVNS TT,DMNFLG
|
||
JUMPLE TT,DMNOF1 ;DEAMONS OFF
|
||
PUSHJ P,LSWTL
|
||
DEMSW
|
||
DMNOF3: SKIPE DMTTBL(B)
|
||
SKIPE DMTTBL+1(B)
|
||
JRST DMNOF2
|
||
AOS REQCNT
|
||
DMNOF2: ADD B,[DMTLL,,DMTLL]
|
||
JUMPL B,DMNOF3
|
||
MOVSI B,SCLDMN
|
||
IORM B,SUPCOR
|
||
JRST LSWPOP
|
||
|
||
DMNOF1: MOVSI B,SCLDMN
|
||
ANDCAM B,SUPCOR
|
||
SETZM REQCNT ;ZERO COUNT
|
||
POPJ P,
|
||
|
||
;CALL HERE TO HANDLE ALL JOBS THAT ARE WAITING IN .DEMSIG TO
|
||
;BE TOLD WHETHER A PURPORTED DEMON REALLY EXISTS. GIVE THEM
|
||
;THEIR ANSWERS AND START THEM UP AGAIN.
|
||
SYSDEX: SETZ A,
|
||
MOVEI C,'SYS
|
||
MOVE D,['ATSIGN]
|
||
SYSDE1: CONO PI,CLKOFF
|
||
SKIPN SRN3(A) ;THIS JOB'S ALREADY BEEN SERVICED?^
|
||
SKIPN UNAME(A) ;OR DOESN'T REALLY EXIST?
|
||
JRST SYSDE3
|
||
MOVE B,UPC(A) ;IS IT WAITING FOR SERVICE FROM US?
|
||
XORI B,ADEMS1 ;MUST BE IN EXEC MODE AT THE RIGHT PLACE.
|
||
TDNE B,[%PCUSR,,-1]
|
||
JRST SYSDE3
|
||
MOVE E,AC0S+A(A) ;GET THE FN2 IT WANTS TO CHECK.
|
||
CONO PI,CLKON
|
||
SETZ T, ;T GETS 0 IFF FILE CAN BE OPENED.
|
||
.OPEN TEMPC,C
|
||
CAIA
|
||
JRST SYSDE2
|
||
LDB T,[220600,,IOCHST+TEMPC]
|
||
SKIPN T
|
||
MOVEI T,%ENSFL
|
||
SYSDE2: .CLOSE TEMPC,
|
||
CONO PI,CLKOFF
|
||
SKIPN UNAME(A) ;SEE IF JOB IS STILL WAITING FOR SERVICE
|
||
JRST SYSDE3 ;SO IT ISN'T CLOBBERED IF IT GOT AN
|
||
MOVE B,UPC(A) ;INTERRUPT AND IS DOING SOMETHING ELSE.
|
||
XORI B,ADEMS1
|
||
TDNN B,[%PCUSR,,-1]
|
||
CAME E,AC0S+A(A)
|
||
JRST SYSDE3
|
||
MOVEM T,AC0S+T(A) ;GIVE THE JOB ITS ANSWER IN T, AND
|
||
SETOM SRN3(A) ;TELL THE JOB IT HAS BEEN SERVED.
|
||
SYSDE3: CONO PI,CLKON
|
||
ADDI A,LUBLK
|
||
CAMGE A,USRHI
|
||
JRST SYSDE1
|
||
POPJ P,
|
||
];DEMON
|
||
|
||
SUBTTL VERY SLOW CLOCK
|
||
|
||
;SUBROUTINES CALLED BY THE VERY SLOW CLOCK.
|
||
|
||
;CHECK FOR DEMON REQUESTS WHOSE TIME HAS COME.
|
||
IFN DEMON,[
|
||
VSCLDM: PUSHJ P,LSWTL
|
||
DEMSW
|
||
MOVSI B,-DMLNG
|
||
VSCLD2: SKIPG DMTTBL+3(B) ;IF SPECIFIC ENTRY IS < = O, IGNORE
|
||
JRST VSCLD1
|
||
SOSE DMTTBL+3(B)
|
||
JRST VSCLD1
|
||
HLRZ T,DMTTBL+2(B) ;SIGNAL DEAMON
|
||
MOVEM T,DMTTBL+3(B)
|
||
MOVE A,DMTTBL(B)
|
||
PUSHJ P,DEMSIG ;SIGNAL REQUEST FOR THIS GUY
|
||
BUG ;ENTRY IN TABLE NOT FOUND EVEN THOUGH NON ZERO TIME
|
||
VSCLD1: ADD B,[DMTLL,,DMTLL]
|
||
JUMPL B,VSCLD2
|
||
JRST LSWPOP
|
||
]
|
||
|
||
;CHECK FOR CLOBBERED TEN-11 INTERFACE CONTROL PAGE WORDS,
|
||
;AND RESET THEM TO THEIR CORRECT SETTINGS.
|
||
IFN TEN11P,[
|
||
T11CK: SKIPE TEN11F
|
||
POPJ P,
|
||
MOVSI I,-256.
|
||
T11CKL: MOVE A,T11MP(I)
|
||
CAMN A,[-1]
|
||
MOVEI A,0 ;HARDWARE SHOULD BE 0 ON CONFLICT PAGE
|
||
TLZ A,174000 ;USAGE COUNT
|
||
MOVE B,400000+T11CP*2000(I)
|
||
CAME A,B
|
||
JRST T11ERR
|
||
T11CL1: AOBJN I,T11CKL
|
||
POPJ P,
|
||
|
||
T11ERR: AOS T11ERC
|
||
MOVEM A,400000+T11CP*2000(I)
|
||
MOVEM A,T11CCN
|
||
MOVEM B,T11WCN
|
||
MOVEM I,T11PG
|
||
JRST T11CL1
|
||
]
|
||
|
||
;VERY SLOW CLOCK (EVERY 2 MIN). SIGNALLED BY SCLVSK, SET BY A CLOCK-QUEUE ENTRY.
|
||
;CALLS THE ULTRA-SLOW CLOCK (EVERY 2 HOURS) WHEN IT'S TIME.
|
||
|
||
VSCLK:;JSP E,CHECK ;CHECK FOR CLOBBERED DEVICES (WOULD BE NICE, BUT BUGS...)
|
||
IFN DEMON,PUSHJ P,VSCLDM ;DEAMON SLOW CLOCK BREAK ROUTINE
|
||
IFN TEN11P,PUSHJ P,T11CK
|
||
MOVE U,VSCLAU ;ACCOUNTING UPDATE, FIND A JOB TREE
|
||
VSCLA1: ADDI U,LUBLK
|
||
CAML U,USRHI
|
||
MOVEI U,0
|
||
SKIPE UNAME(U)
|
||
SKIPL SUPPRO(U)
|
||
JRST VSCLA1
|
||
HRLO TT,UNAME(U)
|
||
AOJE TT,VSCLA1 ;DON'T IF NOT LOGGED IN YET
|
||
MOVEM U,VSCLAU
|
||
CONO PI,CLKOFF
|
||
PUSHJ P,LOGUPD
|
||
PUSHJ P,DMNPLI
|
||
CONO PI,CLKON
|
||
MOVE U,USER
|
||
SKIPLE CTLCNT ;Time to print date on console log?
|
||
JRST VSCLA2 ; No.
|
||
PUSHJ P,GLPDTM ;Yes - get localized pdtime.
|
||
JRST VSCLA2 ; Can't print time if we don't know it.
|
||
PUSHJ P,WARMTTY ;Warm up tty, newline.
|
||
PUSHJ P,DATIM6 ;Print what time it is now.
|
||
MOVEI TT,CTLMAX ;Restart countdown of lines printed.
|
||
MOVEM TT,CTLCNT
|
||
VSCLA2: PUSHJ P,VSCOLD ;CHECK FOR OLD DETACHED TREES TO BE KILLED
|
||
PUSHJ P,TTTMNT ;TURN OFF MOTORS OF IDLE TERMINETS.
|
||
VSCL7: SETOM UFDFLF ;CAUSE CORE JOB TO TRY TO FLUSH 2311 UFDS
|
||
AOS NCORRQ
|
||
MOVSI I,-NCLCH ;LOOK FOR UNOPEND CORE LINK BUFFERS THAT HAVE BEEN
|
||
PUSHJ P,SWTL ;AROUND FOR MORE THAN 2 MINUTES
|
||
CLOSW
|
||
VSCLCL: SKIPE CLSYN(I) ;SKIP IF VARS UNUSED
|
||
SKIPL A,CLUSR(I)
|
||
JRST VSCLC2
|
||
AOJN A,VSCLC2 ;JUMP IF OPEN
|
||
MOVE TT,CLRAC(I)
|
||
TLOE TT,200000
|
||
JRST VSCLCR ;BIT ALREADY ON, BUFFER OLD
|
||
MOVEM TT,CLRAC(I)
|
||
VSCLC2: AOBJN I,VSCLCL ;LOOP FOR ALL SETS OF VARIABLES
|
||
PUSHJ P,LSWPOP ;RELEASE SWITCH
|
||
|
||
MOVE A,UTTBF ;IF MANY 200-WORD BUFFERS ARE FREE,
|
||
CAIGE A,8
|
||
JRST .+3
|
||
SETOM UTBFLF ;HAVE THE CORE JOB FLUSH THEM
|
||
AOS NCORRQ
|
||
|
||
IFN IMPP,[
|
||
SKIPGE IMPUP ;SKIP IF IMP UP, OR PERMANENTLY DOWN
|
||
PUSHJ P,SYSIMU ;TRY TO BRING IT UP
|
||
];IMPP
|
||
IFN TPLP,PUSHJ P,VSCL6 ;MAYBE START PRINTING FROM .LPTR.
|
||
IFN NLPTP,[
|
||
SKIPL NLUSR ;IF LPT ISN'T IN USE,
|
||
JRST VSCNL1
|
||
AOS TT,NLFREE ;KEEP TRACK OF HOW LONG THAT'S BEEN SO.
|
||
SOJN TT,VSCNL1 ;IF TRUE FOR >=2 VSCLK INTREVALS (4 MIN)
|
||
CONO NLPT,1000 ;TURN LPT MOTOR OFF: 1ST PUT LPT IN IMAGE MODE
|
||
DATAO NLPT,[.BYTE 7 ? 24 ? 177 ? 177 ? 177 ? 177] ;THEN TURN OFF.
|
||
VSCNL1:]
|
||
SOSLE IINCNT
|
||
POPJ P,
|
||
|
||
;IT'S TIME FOR THE ULTRA-SLOW CLOCK
|
||
MOVEI A,IINTIC ;GET HERE EVERY TWO HOURS OR SO
|
||
MOVEM A,IINCNT
|
||
PUSHJ P,GLPDTM
|
||
POPJ P, ;TIME NOT KNOWN
|
||
PUSHJ P,WARMTTY
|
||
JRST DATIM6 ;TIME KNOWN, TELL SYSTEM CONSOLE
|
||
|
||
VSCLCR: HRRZ A,TT
|
||
PUSHJ P,BRTN ;RETURN BUFFER
|
||
SETZM CLSYN(I) ;FREE VARIABLES
|
||
JRST VSCLC2
|
||
|
||
;CHECK FOR TREES WITH BUMRTL SET THAT HAVE NOT RUN FOR
|
||
;A WHOLE HOUR, AND GUN THEM.
|
||
VSCOLD: SETZB U,J
|
||
CONO PI,CLKOFF
|
||
MOVSI B,BUMRTL
|
||
MOVSI C,BULGOS
|
||
MOVE A,TIME
|
||
SUBI A,60.*60.*30. ;1 HOUR AGO
|
||
VSCOL0: SKIPE UNAME(J)
|
||
TDNN B,APRC(J)
|
||
JRST VSCOL1 ;JOB NON EX OR DOSN'T HAVE BUMRTL
|
||
SKIPGE SUPPRO(J) ;NO GOOD IF NOT TOP LEVEL.
|
||
TDNE C,APRC(J) ;IGNORE JOBS THAT ARE ALREADY LOGGING OUT.
|
||
JRST VSCOL1
|
||
CAML A,LUBTM(J) ;NOT RUNNING AND HASN'T RUN FOR 1 HOUR => GUN.
|
||
JRST VSCOL2
|
||
VSCOL1: ADDI J,LUBLK ;KEEP LOOKING TILL FIND JOB THAT NEEDS GUNING.
|
||
CAMGE J,USRHI
|
||
JRST VSCOL0
|
||
JRST CLKONJ ;NO TREES NEED TO BE GUNNED.
|
||
|
||
VSCOL2: MOVEI I,[ASCIZ /KILLED HOUR-OLD DETACHED JOB, # /]
|
||
PUSHJ P,SYSJEX ;PRINT MESSAGE AFTER CALLING ALOGO6
|
||
PUSHJ P,ALOGO6
|
||
JRST VSCOLD ;LOOK FOR ANOTHER TREE TO GUN.
|
||
|
||
; MOVEI I,[ASCIZ/DID FOO TO JOB # /]
|
||
; PUSHJ P,SYSJEX
|
||
; PUSHJ P,FOO
|
||
;DOES FOO TO THE JOB WITH IDX IN J, AND PRINTS A SYSTEM MSG.
|
||
;FOO WILL FIND THE USR IDX IN A AND J. IT IS OK TO ENTER
|
||
;SYSJEX WITH CLOCK OFF BUT FOO MUST TURN IT ON.
|
||
SYSJEX: HRRZS A,J
|
||
PUSH P,JNAME(A)
|
||
PUSH P,UNAME(A)
|
||
PUSH P,A ;SAVE ALL THE INFO WE NEED FOR THE MESSAGE.
|
||
PUSH P,I
|
||
XCT @-4(P) ;DO "FOO"
|
||
JFCL ;LET FOO SKIP.
|
||
AOS -4(P) ;SKIP OVER THE PUSHJ TO FOO.
|
||
PUSHJ P,WARMTTY
|
||
HRRZ I,(P)
|
||
PUSHJ P,SYSSP ;PRINT THE STRING IN I
|
||
POP P,I
|
||
HLRZS I
|
||
SKIPE I
|
||
PUSHJ P,(I) ;IF LH(I) WAS NONZERO, CALL THAT PRINT ROUTINE
|
||
POP P,A
|
||
IDIVI A,LUBLK
|
||
PUSHJ P,SYSOPT ;PRINT THE JOB #
|
||
MOVEI I,[ASCIZ /, USR:/]
|
||
PUSHJ P,SYSSP
|
||
POP P,A
|
||
PUSHJ P,SYSIXP ;PRINT UNAME, AND SPACE
|
||
PUSHJ P,STYOS
|
||
POP P,A
|
||
PUSHJ P,SYSIXP ;PRINT JNAME
|
||
JRST SYSTCR ;SPACE, TIME AND CR.
|
||
|
||
SUBTTL TPL
|
||
|
||
VSCL6: ;CHECK TPL: SEE IF LPT FREE AND ANY FILE TO PRINT.
|
||
IFN UNSPLP,[
|
||
PUSHJ P,LSWTL
|
||
DEMSW
|
||
MOVE A,[SIXBIT /UNSPOO/]
|
||
PUSHJ P,DEMSIG
|
||
JRST LSWPOP ;REQUEST FAILED, TOO BAD
|
||
JRST LSWPOP
|
||
]
|
||
|
||
IFE TPLP,POPJ P,
|
||
IFN TPLP,[
|
||
MOVEI A,SCRTPP ;ALSO ENTER HERE FOR TPL CHECK
|
||
TDNE A,SUPCOR ;SKIP IF NOT ALREADY PRINTING FILE
|
||
POPJ P,
|
||
IFG LPTP-1,[
|
||
SKIPE TPLSWP
|
||
JRST VSCL6A
|
||
SKIPLE NLPTBR
|
||
SKIPL LPTUSR
|
||
POPJ P,
|
||
VSCL6B:
|
||
]
|
||
IFLE LPTP-1,[
|
||
SKIPL LPTUSR
|
||
POPJ P,
|
||
]
|
||
IFG OLPTP-NLPTP,[
|
||
MOVEI A,132.
|
||
CAMLE A,LPTCC
|
||
POPJ P,
|
||
]
|
||
IFG NLPTP-OLPTP,[
|
||
CONSO NLPT,207
|
||
SKIPG NLPTBR
|
||
POPJ P, ;.OPEN OF LPT WOULD HANG
|
||
]
|
||
MOVEI A,SCRTPF
|
||
TDNE A,SUPCOR ;BLOCKED
|
||
POPJ P,
|
||
.OPEN TPLI,[SIXBIT / TPL.FILE.(DIR)/] ;MAKE SURE FILE DIR IN CORE
|
||
JRST VSCLX1
|
||
MOVEI B,2
|
||
VSCL2: .IOT TPLI,A
|
||
CAIE A,^C
|
||
CAIN A,12
|
||
SOJG B,VSCL2
|
||
JUMPN B,VSCL2
|
||
SETOB I,C
|
||
SETZM TPLFN1
|
||
SETZM TPLFN2
|
||
MOVEI B,TPLFN1
|
||
HRLI B,440600
|
||
VSCL2A: .IOT TPLI,A
|
||
CAIN A,"*
|
||
JUMPL I,VSCL4
|
||
CAIE A,^C
|
||
CAIN A,14
|
||
JRST VSCLX1
|
||
CAIN A,40
|
||
JUMPL I,VSCL2A ;IGNORE SPACES BEFORE THE PACK NUMBER.
|
||
CAIN I,3 ;AFTER 4 CHARS STARTING WITH BEGINNING OF PACK NUMBER
|
||
JRST VSCL2E ;COMES THE START OF THE FN1.
|
||
CAIN A,"L
|
||
MOVEI C,0 ;INDICATE LINK
|
||
AOJA I,VSCL2A ;FIRST NON SPACE CRUFTY
|
||
|
||
IFG LPTP-1,[
|
||
VSCL6A: MOVEI A,132.
|
||
CAMG A,LPTCC
|
||
SKIPL OLPUSR
|
||
POPJ P,
|
||
JRST VSCL6B
|
||
]
|
||
|
||
VSCL2E: MOVEI TT,6
|
||
VSCL2B: SUBI A,40
|
||
IDPB A,B
|
||
.IOT TPLI,A
|
||
SOJG TT,VSCL2B
|
||
MOVE B,[440600,,TPLFN2]
|
||
VSCL2C: .IOT TPLI,A
|
||
SUBI A,40
|
||
IDPB A,B
|
||
TLNE B,770000
|
||
JRST VSCL2C
|
||
.IOPUSH TPLI,
|
||
.OPEN TPLI,TPLFN
|
||
JRST VSCLL1 ;TRY AGAIN
|
||
.IOPOP PRTO,
|
||
.CLOSE PRTO,
|
||
IFN NLPTP,[
|
||
IFN OLPTP,[
|
||
SKIPE TPLSWP
|
||
JRST VSCL3A
|
||
]
|
||
CONSZ NLPT,207
|
||
JRST VSCLX1
|
||
MOVEI T,LPTBSZ
|
||
CAMN T,NLPTBR ;SKIP ON OPEN WOULD HANG
|
||
.OPEN PRTO,[3,,(SIXBIT /LPT/)]
|
||
JRST VSCLX1
|
||
IFN OLPTP,[
|
||
JRST VSCL3B
|
||
VSCL3A:
|
||
]]
|
||
IFN OLPTP,[
|
||
MOVEI A,132.
|
||
CAMG A,LPTCC ;SKIP IF .OPEN WOULD HANG
|
||
IFN NLPTP,.OPEN PRTO,[3,,'OLP]
|
||
.ELSE .OPEN PRTO,[3,,(SIXBIT /LPT/)]
|
||
JRST VSCLX1
|
||
VSCL3B:
|
||
]
|
||
MOVEI A,SCRTPP
|
||
IORM A,SUPCOR ;PRINT THIS FILE
|
||
IORM A,SUPCOP ;PRINT MORE EVERY SECOND.
|
||
JRST TPLPRT
|
||
|
||
VSCLL1: .IOPOP TPLI,
|
||
JUMPL C,VSCLX1
|
||
MOVEI B,1 ;LINK THAT DIDN'T EXIST
|
||
JRST VSCL2
|
||
]
|
||
|
||
IFN TPLP,[
|
||
;COME HERE TO TRANSFER SOME CHARS FROM DSK TO LPT,
|
||
;ASSUMING BOTH CHNLS ALREADY OPEN.
|
||
TPLPRT:
|
||
IFN NLPTP,[
|
||
IFN OLPTP,[
|
||
SKIPE TPLSWP
|
||
JRST TPLPR3
|
||
]
|
||
MOVEI A,TPLBSZ
|
||
CAMLE A,NLPTBR
|
||
POPJ P,
|
||
IFN OLPTP,[
|
||
JRST TPLPR5
|
||
TPLPR3:
|
||
]]
|
||
IFN OLPTP,[
|
||
MOVEI A,10.*TPLBSZ ;LEAVE SPACE FOR CHARS THAT TAKE MORE THAN 1 CHAR
|
||
CAMLE A,LPTCC
|
||
POPJ P,
|
||
TPLPR5:
|
||
]
|
||
MOVE A,[-TPLBSZ,,TPLBUF] ;"UN-RELOCATE"
|
||
.IOT TPLI,A
|
||
MOVE B,A
|
||
MOVNI A,-TPLBUF(A)
|
||
HRLZS A
|
||
JUMPE A,TPLPR1 ;JUMP ON END OF FILE
|
||
HRRI A,TPLBUF
|
||
.IOT PRTO,A
|
||
JUMPL B,TPLPR1 ;LAST BUFFER-FULL PRINTED
|
||
JRST TPLPRT
|
||
|
||
TPLPR4: CLEARM TPLFN3
|
||
.FDELE TPLFN ;DELETE FILE JUST PRINTED
|
||
JFCL
|
||
MOVEI A,SCRTPP
|
||
ANDCAM A,SUPCOP ;DON'T NEED TO CALL TPLPRT EVERY SECOND.
|
||
ANDCAM A,SUPCOR
|
||
VSCLX1: .CLOSE PRTO,
|
||
.CLOSE TPLI,
|
||
POPJ P,
|
||
|
||
VSCL4: .IOT TPLI,A
|
||
CAIN A,14
|
||
JRST VSCLX1
|
||
CAIN A,12
|
||
JRST VSCL2A
|
||
JRST VSCL4
|
||
|
||
TPLPR1: PUSHJ P,TPLPR4
|
||
JRST VSCL6
|
||
]
|
||
.ELSE TPLPRT==CPOPJ
|
||
|
||
;HANDLE A USER'S REQUEST TO "BLOCK THE TPL"
|
||
IFN TPLP,[
|
||
;IF SYS JOB IS SPOOLING, JUST THROW AWAY CURRENT FILE.
|
||
TPLOFF: MOVEI A,SCRTPP
|
||
TDZN A,SUPCOP
|
||
POPJ P, ;NOTHING HAPPENING
|
||
PUSHJ P,WARMTTY
|
||
.RESET PRTO,
|
||
PUSHJ P,TPLPR4
|
||
MOVE A,[SIXBIT /TPLOFF/]
|
||
PUSHJ P,SYSIXP
|
||
JRST SYSTCR
|
||
]
|
||
|
||
IFE TPLP+UNSPLP,TPLOFF==CPOPJ
|
||
|
||
IFN UNSPLP,[
|
||
TPLOFF: MOVNS B,TPLFLG
|
||
JUMPG B,VSCL6 ;IF NOW RUNNING GIVE REQ
|
||
MOVSI B,-DMLNG
|
||
TPLOF1: SKIPE C,DMTTBL(B)
|
||
SKIPG D,DMTTBL+1(B) ;USER INDEX -0 IF NOT YET LOADED
|
||
JRST TPLOF2
|
||
CAME C,[SIXBIT /UNSPOO/]
|
||
JRST TPLOF2
|
||
PUSH P,U
|
||
MOVE U,D
|
||
PUSHJ P,ALOGOUT ;DOES ONE USTOP FOR YOU
|
||
POP P,U
|
||
JRST TPLOF3
|
||
|
||
TPLOF2: ADD B,[DMTLL,,DMTLL]
|
||
JUMPL B,TPLOF1
|
||
TPLOF3: PUSHJ P,WARMTTY
|
||
MOVE A,[SIXBIT /TPLOFF/ ]
|
||
PUSHJ P,SYSIXP
|
||
JRST SYSTCR
|
||
]
|
||
|
||
SUBTTL WHO LINES
|
||
|
||
IFN N11TYS,[
|
||
;PDP11 COMM AREA (SYSTEM WIDE)
|
||
;STARTS AT PDP11 ADDRESS 40
|
||
;PNTR TO TT11HD
|
||
;PNTR TO POINTA
|
||
;I/O VERSION #
|
||
;SORCE FILE VERSION #
|
||
;--PDP10 WD BOARDARY-- 0 , INITED
|
||
; 0 , GODOWN
|
||
|
||
;AT POINTA:
|
||
; ADDR OF SYSTEM WHO-LINE VARS
|
||
; ADDR OF 10-11 COMMAND BUFFER
|
||
; TENWHO , 0 ;PDP10 SETS TO TELL PDP11 TO UPDATE WHO-LINES
|
||
; MAXTV , 0 ;MAXTV = # TV'S 11 IS SET UP TO HANDLE
|
||
; NF11TY , 0 ;10 TELLS 11 WHAT TTY # OF 1ST BUFFER IS.
|
||
|
||
;PDP11 CONSOLE VARS
|
||
; EVEN PDP11 WORD ODD PDP11 WORD
|
||
;TT11HD - CHAIN OF ACTIVE INPUT BUFFERS 0
|
||
; PNTR TO OUTPUT BUFFER CHNL 0 VIDEO BUFFER,KBD # (377 IF NONE)
|
||
; " CHNL 1 "
|
||
;...
|
||
; OUTPUT BFR EMPTY NOTIFY RQ FLAG TO FREE CHNL
|
||
;...
|
||
; PNTR TO WHO LINE BLOCK FREE
|
||
|
||
;THE 11 HAS COME UP, SO INIT COMMUNICATION VARIABLES AND START USING IT
|
||
SYS11U: SKIPG TT11P
|
||
POPJ P,
|
||
LDB A,[$11AD0,,TT11HA] ;GET PDP10 ADDRESS OF INPUT-BFR-CHAIN PTR
|
||
CAIL A,NTTPG*2000
|
||
BUG HALT,[GARBAGE POINTER IN TV-11 MEMORY]
|
||
ADDI A,TT11LO
|
||
CONO PI,TTYOFF
|
||
MOVEM A,TT11HD ;SAVE IT FOR CLOCK LVL TO CHECK.
|
||
LDB C,[$11WD0,,TT11HA+1] ;GET PDP11 IO VERSION #.
|
||
MOVEI B,12. ;OLD TV PROGRAMS HANDLE 12. BUFFERS
|
||
LDB T,[$11AD1,,TT11HA] ;GET ADDR OF POINTA
|
||
CAIL C,3 ;VERSION 3 AND UP TV PGM HAS MAXTV - READ IT
|
||
LDB B,[$11WD0,,TT11LO+2(T)]
|
||
MOVEM B,TT1111 ;THAT'S HOW MANY TV'S THE 11 THINKS TERE ARE
|
||
CAIL B,N11TYS
|
||
MOVEI B,N11TYS ;MIN OF THAT AND # TEN THINKS THERE ARE
|
||
MOVEM B,TT11RL
|
||
MOVEI B,NF11TY
|
||
CAIL C,3 ;VERSION 3 TV PGM AND UP WANTS NF11TY
|
||
DPB B,[$11WD0,,TT11LO+3(T)]
|
||
HRLZ I,TT11RL ;GET AOBJN -> TV'S BOTH 10 AND 11 WILL HANDLE.
|
||
MOVNS I
|
||
VSCL7C: LDB B,[$11AD0,,1(A)] ;GET DPY BUFFER ADRESS FOR THIS TTY
|
||
ADDI B,TT11LO+2 ;CONVERT TO PDP10 ADDRESS.
|
||
HRLI B,040000+TT11BY_6 ;GET BP TO ILDB 1ST DATA WORD.
|
||
MOVEM B,NF11TY+TOBBP(I) ;PNTR TO BEG OF OUTPUT BUFFER
|
||
LDB C,[$11AD0,,(B)] ;GET # BYTES IN DATA AREA
|
||
ADDI B,(C) ;GET BP TO LAST WORD IN AREA
|
||
MOVEM B,NF11TY+TOBEP(I)
|
||
MOVEM B,NF11TY+TOIP(I)
|
||
ADDI A,1
|
||
AOBJN I,VSCL7C
|
||
MOVEM C,TT11OL ;REMEMBER LENGTH OF OUTPUT BUFFERS.
|
||
SETOM TT11P ;TV TTYS NOW UP.
|
||
CONO PI,TTYON
|
||
MOVE A,[-N11TYS,,NF11TY]
|
||
MOVSI B,%TACFM ;NOW SAY ALL PDP11 TTYS NEED
|
||
ANDCAM B,TTYSTA(A) ;CONSOLE FREE MESSAGES,
|
||
AOBJN A,.-1
|
||
MOVEI A,SCRCFM
|
||
IORM A,SUPCOR ;TELL SYS JOB TO PRINT THEM.
|
||
PUSHJ P,CLQAD1 ;ADD WHO LINE BLOCK TO CLOCK QUEUE IF NOT THERE
|
||
WHOCLB
|
||
MOVEI I,[ASCIZ /TV 11 IS UP -/]
|
||
JRST SYSSTD ;STRING,SPACE TIME AND DATE THEN CR
|
||
]
|
||
|
||
IFN N11TYS,[
|
||
|
||
$INSRT WHOVAR
|
||
|
||
;UPDATE WHO-LINE VARIABLES.
|
||
VWHO: SKIPL TT11P ;DON'T SCREW UP IF PDP11 ISN'T UP.
|
||
POPJ P,
|
||
MOVE A,TT11HD
|
||
HRLZ A,TT11RL
|
||
MOVNS A
|
||
HRR A,TT11HD ;-<# TV'S BEING USED>,,<HEADER ADDR>
|
||
ADD A,TT1111
|
||
ADD A,TT1111 ;NOW RH -> 2 11-WDS BEFORE PTR TO WHOLINE VARS OF 1ST TV
|
||
VWHO1: LDB B,[$11AD0,,1(A)] ;GET WHO LINE VAR PDP11-ADDR, SHIFTED 2.
|
||
ADDI B,TT11LO ;CONVERT TO PDP10 ADDRESS.
|
||
CONO PI,TTYOFF
|
||
MOVE TT,WHJOB(B) ;JOB # (SHIFTED 4+16.)
|
||
MOVE C,WHMODE(B) ;MODE (SHIFTED 4+16.)
|
||
JUMPG C,VWHO3
|
||
CONO PI,TTYON
|
||
JUMPL C,VWHO2 ;MODE < 0 => NO WHOLINE.
|
||
HLRE I,A ;GET -<# TIMES REMAINING THRU LOOP>
|
||
ADD I,TT11RL
|
||
HRRZ TT,TTYSTS+NF11TY(I) ;MODE 0, USE JOB WHICH HAS THE TTY.
|
||
MOVE Q,TT
|
||
IDIVI Q,LUBLK
|
||
LSH Q,4.+16.
|
||
MOVEM Q,WHJOB(B)
|
||
;FOR OTHER MODES, COME BACK HERE, WITH USER IDX IN TT.
|
||
VWHO3R: CONO PI,CLKOFF
|
||
MOVE C,UNAME(TT)
|
||
HLLZM C,WHUNAM(B)
|
||
HRLZM C,WHUNM2(B) ;STORE THE JOB'S UNAME
|
||
MOVE C,JNAME(TT)
|
||
HLLZM C,WHJNAM(B)
|
||
HRLZM C,WHJNM2(B) ;AND JNAME.
|
||
MOVE C,USYSNM(TT)
|
||
HLLZM C,WHSNAM(B)
|
||
HRLZM C,WHSNM2(B) ;AND SNAME.
|
||
MOVE C,[SIXBIT /STOP/]
|
||
SKIPE USTP(TT) ;AND "STATUS": IF NOT RUNNABLE, "STOP".
|
||
JRST VWHO4
|
||
MOVE C,[SIXBIT /RUN/] ;IF NOT WAITING, "RUN".
|
||
SKIPN FLSINS(TT)
|
||
JRST VWHO4A
|
||
MOVE C,[SIXBIT /PAGE/] ;DETECT WAITING FOR PAGE.
|
||
MOVE Q,USWST(TT)
|
||
TLNE Q,200000
|
||
JRST VWHO4
|
||
JRST VWHO4B
|
||
|
||
VWHO4A: MOVE E,UPC(TT) ;JOB RUNNING: USER MODE?
|
||
TLNE E,%PCUSR ;IF SO, STATUS IS "RUN" (C ALREADY SET UP)
|
||
JRST VWHO4
|
||
VWHO4B: MOVE E,SV40(TT) ;ELSE DECODE SYSTEM CALL TO GET STATUS.
|
||
HLRZ Q,E
|
||
CAIN Q,(.CALL)
|
||
JRST VWHO4D ;SYMBOLIC SYSTEM CALL.
|
||
TRZ Q,17_5
|
||
MOVE I,OPTION(TT)
|
||
TLNN I,%OPDEC
|
||
JRST VWHO4E
|
||
CAIE Q,40_9
|
||
CAIN Q,41_9
|
||
JRST VWHO4F
|
||
CAIN Q,47_9
|
||
JRST VWHO4F
|
||
VWHO4E: CAIN Q,(.IOT) ;.IOT => DECODE DEVICE IN USE.
|
||
JRST VWHOI1
|
||
CAIN Q,(.OPER)
|
||
JRST VWHOO1 ;.OPER => DECODE ADDRESS FIELD.
|
||
CAIN Q,(.CALL)
|
||
JRST VWHOC1 ;.CALL BUT NOT SYMBOLIC => DECODE AC FIELD.
|
||
LSH Q,-9
|
||
CAIL Q,40
|
||
CAIL Q,40+NUUOSX
|
||
VWHO4F: SKIPA C,[SIXBIT /UUO/] ;UNRECOGNIZED UUO.
|
||
MOVE C,UUOSXB-40(Q) ;ELSE GET SIXBIT NAME OF UUO.
|
||
JRST VWHO4C
|
||
|
||
;A SYMBOLIC SYSTEM CALL IS IN PROGRESS.
|
||
VWHO4D: MOVE C,LSCALL(TT) ;USE SYSTEM CALL NAME AS STATUS
|
||
CAME C,[SIXBIT /SIOT/]
|
||
CAMN C,[SIXBIT /IOT/]
|
||
JRST VWHOI2 ;BUT IF IT'S "IOT", DECODE DEVICE TYPE.
|
||
VWHO4C: SKIPE FLSINS(TT)
|
||
JRST VWHO4
|
||
LSH C,-6
|
||
TLO C,'+_12. ;STICK "+" ON FRONT IF RUNNING IN SYSTEM
|
||
;DROPS THROUGH ;(NOT IF IN USER MODE, OR IF HUNG).
|
||
;DROPS IN
|
||
;COME HERE WITH STATUS AS SIXBIT IN C.
|
||
VWHO4:
|
||
IFE SWPWSP, SKIPL USWSCD(TT) ;SKIP IF SWAP-BLOCKED
|
||
IFN SWPWSP,[ MOVE Q,USWST(TT)
|
||
TLNN Q,%SWSB
|
||
]
|
||
JRST .+3
|
||
LSH C,-6
|
||
TLO C,(SIXBIT/>/)
|
||
HLLZM C,WHSTAT(B)
|
||
HRLZM C,WHSTA2(B)
|
||
MOVEI C,WHJ%RT(B)
|
||
HRLI C,442000
|
||
MOVE Q,JTMU(TT) ;COMPUTE % RUN TIME FROM SCHEDULER PRIORITY.
|
||
MULI Q,100.
|
||
DIV Q,[2.^6]
|
||
IDPB Q,C
|
||
MOVE Q,UTRNTM(TT)
|
||
IDIVI Q,25000.
|
||
IDPB Q,C ;JOB RUNTIME IN .1 SEC UNITS.
|
||
MOVE Q,NMPGS(TT)
|
||
MOVE I,NSWPGS(TT)
|
||
SUBM Q,I
|
||
IDPB I,C ;JOB # REAL PAGES.
|
||
IDPB Q,C ;JOB # VIRTUAL PAGES.
|
||
;HANDLE THE USER-SPECIFIED FIELDS IN THE WHOLINE.
|
||
MOVE Q,UWHO1(TT)
|
||
ANDCMI Q,17
|
||
MOVEM Q,1(C) ;STORE JOB'S WHOLINE FLAGS.
|
||
MOVE Q,UWHO2(TT)
|
||
HLLZM Q,2(C) ;STORE FIRST USER WHO VAR
|
||
HRLZM Q,3(C)
|
||
MOVE Q,UWHO3(TT)
|
||
HLLZM Q,4(C) ;STORE SECOND USER WHO VAR
|
||
HRLZM Q,5(C)
|
||
VWHO2: CONO PI,CLKON
|
||
AOBJN A,VWHO1
|
||
JRST VWSYS
|
||
|
||
VWHOO1: HRRZ Q,E ;JOB EXECUTING .OPER.
|
||
CAIL Q,MXOPR
|
||
SKIPA C,[SIXBIT/UUO/]
|
||
MOVE C,OPRSXB(Q) ;GET .OPER NAME AS STATUS
|
||
JRST VWHO4C
|
||
|
||
VWHOI2: SKIPL Q,UUAC(TT) ;NEW SYS CALL IOT
|
||
JRST VWHO4C ;GETTING ARGUMENTS, UUAC NOT SET UP YET
|
||
MOVE I,C ;SAVE NAME IN I
|
||
JRST VWHOI4
|
||
|
||
VWHOI1: LDB Q,[270400,,E] ;.IOT
|
||
SETZ I,
|
||
VWHOI4: ADDI Q,IOCHNM(TT) ;Q HAS IOCHNM WORD ADDR FOR CHANNEL.
|
||
MOVE Q,(Q) ;GET IOCHNM WORD CONTENTS (RH INDEXES TABLES)
|
||
HLRZ C,Q
|
||
HLL Q,IOTTB(Q) ;LH GETS BITS SAYING DIRECTION, BLOCK VS UNIT.
|
||
HLL C,CLSTB(Q)
|
||
TLNE C,%CLSJ ;IF JOB DEVICE
|
||
JRST [ MOVE C,JBDEV(C) ;GET NAME OF SIMULATED DEVICE
|
||
JRST VWHOI6 ]
|
||
HLLZ C,DCHSTB(Q) ;C GETS DEVICE NAME (LEFT-JUST SIXBIT)
|
||
JUMPL C,VWHOI6 ;JUMP IF NORMAL 3-CHARACTER NAME
|
||
MOVSS C ;NO, IS ADDRESS OF 6-CHARACTER NAME
|
||
MOVE C,(C)
|
||
VWHOI6: SETZ D, ;EVENTUALLY MAKE STATUS BE 9 CHARS, NOT 6?
|
||
MOVE E,[360600,,C]
|
||
ILDB J,E ;FIND FIRST SPACE IN THAT DEVICE NAME
|
||
JUMPN J,.-1
|
||
JUMPGE Q,VWHOI3 .SEE %IOTBK ;IF BLOCK MODE, PUT A "B" THERE.
|
||
MOVEI J,'B
|
||
DPB J,E
|
||
IBP E
|
||
VWHOI3: CAME I,[SIXBIT /SIOT/]
|
||
JRST VWHOI5
|
||
MOVEI J,'S
|
||
DPB J,E
|
||
IBP E
|
||
VWHOI5: MOVEI J,'O ;FOLLOW WITH "O" OR "I" SAYING DIRECTION.
|
||
TLNN Q,%IOTOT
|
||
MOVEI J,'I
|
||
DPB J,E
|
||
JRST VWHO4C ;COMPLETED STATUS LOOKS LIKE "TTYBO".
|
||
|
||
VWHOC1: LDB Q,[270400,,E] ;.CALL: GET AC FIELD,
|
||
MOVE C,CALSXB(Q) ;GIVE SIXBIT NAME OF .CALL.
|
||
JRST VWHO4C
|
||
|
||
;MODE ISN'T 0: FIGURE OUT WHICH JOB TO DISPLAY WHO-LINE FOR,
|
||
;AND GO TO VWHO3R WITH JOB'S IDX IN TT. COME HERE WITH TTYCHN OFF.
|
||
VWHO3: LSH TT,-16.-4 ;WHAT JOB WAS LAST DISPLAY DONE FOR?
|
||
IMULI TT,LUBLK
|
||
CAMGE TT,USRHI
|
||
SKIPN D,UNAME(TT)
|
||
JRST VWHO3B ;JOB WE WERE LOOKING AT HAS VANISHED.
|
||
TLNE C,<-4>_<16.+4-18.>
|
||
JRST VWHO3B ;THIS TTY IS GETTING SYSTEM WHO-LINE.
|
||
TLNN C,2_<16.+4-18.>
|
||
JRST VWHO3E ;WANT SAME JOB AS LAST TIME.
|
||
|
||
;MODE 2 OR 3: COME HERE TO SEARCH FOR DESIRED JOB.
|
||
VWHO3A: MOVSI E,1_<16.+4-18.>
|
||
MOVEM E,WHMODE(B) ;SWITCH TO MODE 1.
|
||
MOVEI E,MAXJ+5 ;DON'T LOOP FOREVER
|
||
VWHO3D: ADDI TT,LUBLK ;ADVANCE TO NEXT JOB UP OR DOWN.
|
||
TLNE C,1_<16.+4-18.>
|
||
SUBI TT,2*LUBLK
|
||
SKIPGE TT ;WRAP AROUND IF NEC GOING DOWN.
|
||
ADD TT,USRHI
|
||
CAML TT,USRHI ;WRAP AROUND IF NEC. GOING UP.
|
||
MOVEI TT,0
|
||
CAMN D,UNAME(TT) ;BELONGS TO SOMEONE ELSE => KEEP GOING.
|
||
JRST VWHO3C ;BELONGS TO THIS USER => STOP.
|
||
SOJG E,VWHO3D ;KEEP LOOKING BUT DON'T LOOP IF NO JOB TO BE FOUND.
|
||
VWHO3B: SETZM WHSTAT(B) ;NO JOB TO BE FOUND.
|
||
CONO PI,TTYON
|
||
JRST VWHO2
|
||
|
||
VWHO3C: MOVE Q,TT ;DESIRED JOB FOUND: SET UP FOR MODE 1
|
||
IDIVI Q,LUBLK ;LOOKING AT THIS JOB.
|
||
LSH Q,16.+4
|
||
MOVEM Q,WHJOB(B)
|
||
VWHO3E: CONO PI,TTYON
|
||
JRST VWHO3R
|
||
|
||
|
||
;USER WHO LIES UPDATED; NOW UPDATE SYSTEM WHO LINE VARS.
|
||
VWSYS: LDB A,[$11AD1,,TT11HA]
|
||
LDB B,[$11AD0,,TT11LO(A)]
|
||
ADD B,[$11WD1,,TT11LO] ;FIRST WORD OF BLOCK SET BY 11
|
||
MOVEI C,SRI
|
||
IDPB C,B ;ITS VERSION#.
|
||
MOVEI C,2
|
||
MOVEI E,0
|
||
IFN SWPWSP, MOVSI TT,%SWSB
|
||
MOVEI Q,2*LUBLK
|
||
VWSYS2: CAML Q,USRHI ;COUNT # JOBS.
|
||
JRST VWSYS1
|
||
SKIPN UNAME(Q)
|
||
JRST VWSYS3
|
||
AOS C ;C GETS # JOBS,
|
||
SKIPE USTP(Q)
|
||
JRST VWSYS3
|
||
IFE SWPWSP, SKIPGE USWSCD(Q)
|
||
IFN SWPWSP, TDNE TT,USWST(Q)
|
||
AOS E ;E GETS NUMBER OF ACTIVE SWAPPED BLOCKED JOBS
|
||
VWSYS3: ADDI Q,LUBLK
|
||
JRST VWSYS2
|
||
|
||
VWSYS1: IDPB C,B ;TOTAL # JOBS
|
||
MOVE D,MMPCNT
|
||
IDPB D,B ;TOTAL MEM (= TOTAL # PAGES, COUNTING SHARED PAGES ONLY ONCE).
|
||
MOVE C,RNABLU
|
||
SUBI C,1
|
||
IDPB C,B ;RUNNABLE USERS
|
||
IDPB E,B ;# SWAP-BLOCKED JOBS
|
||
MOVE TT,NPGWTU
|
||
IDPB TT,B ;# WAITING FOR PAGE.
|
||
MOVE C,TRUMM ;TOTAL RUNNABLE USER MEMORY
|
||
IDPB C,B
|
||
MOVEI C,0
|
||
MOVE TT,USRHI ;COUNT PAGES AVAILABLE FOR USE OR ACTUALLY USED FOR USER MEM
|
||
ADDI TT,USRSTG+1777
|
||
LSH TT,-10.
|
||
VWSYS5: LDB D,[MUR,,MEMBLT(TT)]
|
||
CAIE D,MURUSR
|
||
CAIN D,MUFR
|
||
AOS C ;FREE OR USER MEM.
|
||
CAIGE TT,TSYSM-1
|
||
AOJA TT,VWSYS5
|
||
IDPB C,B ;TOTAL MEM AVAIL FOR USERS
|
||
HLRZ C,QDATE
|
||
LDB D,[110700,,C]
|
||
IDIVI D,100. ;YEAR MODULO 100
|
||
DPB E,[110700,,C]
|
||
IDPB C,B
|
||
MOVE C,SYSDBG
|
||
IDPB C,B
|
||
AOS B ;SKIP A WHOLE WORD FOR TIME OF DAY
|
||
MOVEI D,(B) ;SAVE ADDRESS FOR BELOW
|
||
MOVE C,SUSRS ;# LOGGED IN USERS.
|
||
IDPB C,B
|
||
MOVEI E,10000. ;FAIR SHARE IN %
|
||
IDIV E,SLOADU ;BASHES TT
|
||
IDPB E,B
|
||
MOVE C,TIMOFF ;TIME OF DAY IN .5 SEC UNITS.
|
||
LSH C,4
|
||
MOVEM C,(D) ;DEPOSITING TIME OF DAY TRIGGERS WHO-LINE UPDATE
|
||
POPJ P, ; BY THE PDP-11, SO DEPOSIT IT LAST
|
||
|
||
] ;END IFN N11TYS
|
||
|
||
SUBTTL EXPAND/CONTRACT USER VARIABLES AREA
|
||
|
||
SYSEX: PUSHJ P,SCOREX
|
||
POPJ P,
|
||
MOVE A,TIME
|
||
MOVEM A,SCITM
|
||
POPJ P,
|
||
|
||
SYSDEC: MOVE A,TIME ;TRY TO DECREASE CORE RESERVED FOR USER VARIABLES
|
||
SUB A,SCITM
|
||
CAIG A,50.
|
||
POPJ P, ;TOO SOON SINCE GOT MORE CORE
|
||
CONO PI,CLKOFF
|
||
MOVE A,USRHI
|
||
SUBI A,LUBLK
|
||
SKIPN UNAME(A)
|
||
JRST .-2
|
||
ADDI A,LUBLK
|
||
MOVEM A,USRHI ;USRHI=> HIGHEST USER+L
|
||
ADDI A,USRSTG
|
||
ADDI A,1777
|
||
SETOM SJCFF ;INHIBIT ALLOCATION WHILE HUSRAD IS CHANGING
|
||
CONO PI,CLKON
|
||
MOVEI U,0 ;FOR ACORE
|
||
LSHC A,-10.-36. ;MOVE INTO B AS WELL
|
||
PUSHJ P,ACORE
|
||
BUG ;LOST FLUSHING CORE?
|
||
CLEARM SJCFF
|
||
POPJ P,
|
||
|
||
SCOREX: LDB B,[121000,,HUSRAD] ;EXTEND CORE FOR USER VARIABLES AT TOP OF SYSTEM
|
||
ADDI B,1
|
||
CAILE B,LIOBLK
|
||
MOVEI B,LIOBLK ;TRYING TO GET TOO BIG, DON'T
|
||
MOVEI U,0
|
||
JRST ACORE
|
||
|
||
SUBTTL LOGGER OUT
|
||
|
||
;THIS ROUTINE AWAKENED BY .LOGOUT, .GUN, ETC.
|
||
;SEARCH FOR TREES THAT ARE LOGGING OUT AND READY TO BE FLUSHED
|
||
;(IE HAVE BULGO SET) AND FLUSH THEM, PRINTING LOGOUT MESSAGE IF APPRO.
|
||
SYSGUN: SETZ U,
|
||
SYSGU0: MOVE T,APRC(U)
|
||
TLNE T,BULGO ;IS THIS JOB READY TO BE FLUSHED?
|
||
SKIPN UNAME(U)
|
||
JRST SYSGU1
|
||
IFN NUNITS,[
|
||
SKIPGE TTYTBL(U) ;IF CONSOLE-CONTROLLED, FLUSH UTAPE ASSIGNMENTS
|
||
JRST SYSGU2
|
||
MOVSI I,-NUNITS
|
||
MOVE A,UNAME(U)
|
||
CAMN A,UTASS+1(I)
|
||
SETZM UTASS+1(I)
|
||
AOBJN I,.-2
|
||
SYSGU2: ]
|
||
HLRO B,UNAME(U)
|
||
AOJE B,SYSGU3 ;IF THIS TREE COUNTS AS A LOGGED-IN USER,
|
||
SKIPL TTYTBL(U)
|
||
SOS SUSRS ;DECREMENT COUNT OF SUCH.
|
||
SYSGU3: CONO PI,CLKOFF
|
||
PUSHJ P,DMNPLO ;UPDATE TREE'S USAGE AND INFORM DEMON JOB
|
||
MOVEM TT,TRUNTM(U) ;SAVE RUN TIME FOR LOGOUT MSG
|
||
CONO PI,CLKON
|
||
SKIPGE A,TTYTBL(U)
|
||
JRST SYSGU4 ;IF TREE HAS CONSOLE,
|
||
SKIPE TTNTO(A)
|
||
BUG
|
||
PUSHJ P,TTYLO1 ;FREE IT.
|
||
CAMN U,EPDL(U) ;UNLESS GUNNED DOWN,
|
||
SKIPN SUPPLG ;MAY NOT WANT TO BOTHER PRINTING MESSAGE ON SYS CONSOLE
|
||
SKIPGE DEDTIM
|
||
JRST SYSGU4 ;IF LOGGED OUT BECAUSE SYS DOWN, SPARE THE LOGOUT MSG
|
||
PUSHJ P,WARMTTY
|
||
MOVEI I,[ASCIZ / LOGOUT /]
|
||
PUSHJ P,SYSSP
|
||
MOVE A,UNAME(U)
|
||
PUSHJ P,SYSIXP ;UNAME.
|
||
PUSHJ P,STYOS ;SPACE.
|
||
HRRZ A,TTYTBL(U)
|
||
PUSHJ P,SYSOPT ;TTY #.
|
||
PUSHJ P,SYSTCR
|
||
;VALUE PRINTED IS WRONG, AND HARD TO FIX, SO FOLLOWING CODE HAS BEEN FLUSHED.
|
||
;THE REASON IT'S WRONG IS BECAUSE TIME ALREADY SENT TO THE DAEMON IS NOT INCLUDED.
|
||
;MOVEI I,[ASCIZ / TUSED= /]
|
||
;PUSHJ P,SYSSP
|
||
;MOVE A,TRUNTM(U)
|
||
;MULI A,4069.
|
||
;DIVI A,1000.
|
||
;PUSHJ P,SYSDPC
|
||
;MOVEI I,[ASCIZ / USECS/]
|
||
;PUSHJ P,SYSSTD
|
||
CAMN U,EPDL(U) ;WAS LOGGED OUT BY SELF?
|
||
JRST SYSGU4
|
||
MOVEI I,[ASCIZ / ^^ GUNNED DOWN BY /]
|
||
PUSHJ P,SYSSP
|
||
MOVE A,SRN4(U)
|
||
PUSHJ P,SYSIXP ;UNAME OF GUNNER.
|
||
MOVE A,SRN5(U)
|
||
PUSHJ P,SYSSIX ;SPACE, AND JNAME OF GUNNER.
|
||
PUSHJ P,SYSTCR ;CRLF.
|
||
;MESSAGES PRINTED IF NECESSARY.
|
||
SYSGU4: SETZ R,
|
||
PUSHJ P,ZUSER ;COMPLETELY ELIMINATE THE JOB.
|
||
CONO PI,CLKON
|
||
SYSGU1: ADDI U,LUBLK
|
||
CAMGE U,USRHI
|
||
JRST SYSGU0
|
||
SETZ U,
|
||
POPJ P,
|
||
|
||
;DETACH ANY TREES WHOSE TOP-LEVEL JOBS HAD FATAL INTS
|
||
|
||
SYSDT: SETZB U,J
|
||
PUSHJ P,SWTL
|
||
TREESW
|
||
CONO PI,CLKOFF
|
||
MOVSI B,BUSRC
|
||
MOVSI T,BULGOS+400000
|
||
SYSDT0: SKIPN UNAME(J)
|
||
JRST SYSDT1
|
||
SKIPGE SUPPRO(J) ;LOOK FOR TOP-LEVEL
|
||
TDNE T,APRC(J) ;IGNORE JOBS ALREADY DISOWNED, OR LOGGING OUT.
|
||
JRST SYSDT1
|
||
TDNE B,USTP(J) ;THAT HAS BEEN STOPPED AS BY SUPERIOR
|
||
JRST SYSDT2
|
||
SYSDT1: ADDI J,LUBLK
|
||
CAMGE J,USRHI
|
||
JRST SYSDT0
|
||
JRST CLKOPJ ;NO MORE SUCH JOBS, DONE; LSWPOP AND CLKON.
|
||
|
||
;FOUND A TOP LEVEL JOB NEEDING TO BE DETACHED.
|
||
SYSDT2: PUSH P,J
|
||
MOVE T,OPTION(J)
|
||
TLNE T,%OPLKF
|
||
JRST [ IDIVI J,LUBLK ;BASHES R
|
||
.CALL [SETZ ? 'UNLOCK ? SETZI %JSNUM(J)] ;UNLOCK THE LOCKS
|
||
BUG
|
||
MOVE J,(P)
|
||
JRST .+1 ]
|
||
CONO PI,CLKOFF ;IODCSS MIGHT HAVE TURNED IT ON
|
||
SKIPL E,JBI(J) ;NOTE CLKOFF IN EFFECT WHILE HACKING JOB DEVICE STUFF
|
||
SKIPGE JBCG(E)
|
||
JRST SYSDTA
|
||
MOVE A,JBCUI(E) ;JOB DEVICE, GIVE IOCER1 OR OPNL7
|
||
LDB T,[000400,,JBSTS(E)]
|
||
CAIE T,1
|
||
JRST [ MOVSI T,7_5 ;NON IOT, UNHANG CREATOR SO WILL SEE OPNL7
|
||
MOVEM T,JBSTS(E)
|
||
MOVE T,FLSINS(A)
|
||
CAMN T,JBFLS
|
||
SETZM FLSINS(A)
|
||
JRST SYSDTA ]
|
||
MOVEI B,1 ;IOT GIVE IOCER1
|
||
MOVS H,E
|
||
PUSHJ P,NSTIOC
|
||
JFCL
|
||
SYSDTA: POP P,J
|
||
SETZ U,
|
||
MOVE I,[SYSDT8,,[ASCIZ/TOP LEVEL INTERRUPT /]]
|
||
PUSHJ P,SYSJEX
|
||
PUSHJ P,SYSDT7
|
||
JRST SYSDT
|
||
|
||
SYSDT8: MOVE A,-1(P) ;USER INDEX
|
||
MOVE A,PIRQC(A) ;TOP LEVEL INTERRUPT BITS
|
||
PUSHJ P,SYSFWP
|
||
SYSDT9: MOVEI I,[ASCIZ/ DETACHED JOB # /]
|
||
JRST SYSSP
|
||
|
||
;JOB IN J SHOULD BE DETACHED, AND GUNNED AFTER AN HOUR,
|
||
; OR RIGHT AWAY IF NOT LOGGED IN
|
||
SYSDT4: HLRE B,UNAME(J)
|
||
AOJE B,SYSDT5 ;NOT LOGGED IN => KILL
|
||
HRLI I,SYSDT9
|
||
PUSHJ P,SYSJEX
|
||
PUSHJ P,SYSDT3
|
||
POPJ P,
|
||
|
||
SYSDT5: HRLI I,[MOVEI I,[ASCIZ / KILLED JOB # /]
|
||
JRST SYSSP]
|
||
PUSHJ P,SYSJEX
|
||
PUSHJ P,SYSDT6
|
||
POPJ P,
|
||
|
||
SYSDT6: PUSHJ P,SYSDT3 ;FIRST DETACH (LEAVES USER INDEX OF TOP LEVEL JOB IN A).
|
||
JRST ALOGO6 ;THEN LOG OUT. SINCE DETACHED, NO ADDITIONAL MSG FROM SYSGUN.
|
||
|
||
;CALL WITH CLOCK OFF TO DETACH THE JOB WITH IDX IN A AND J.
|
||
;ASSUME JOB'S BULGOS HAS BEEN CHECKED, AND TREESW LOCKED.
|
||
;TURNS CLOCK BACK ON AND DOES A LSWCLR
|
||
SYSDT7: TDZA B,B ;HERE TO LEAVE AROUND
|
||
SYSDT3: MOVEI B,10 ;HERE TO SET BUMRTL WHEN WE DETACH
|
||
PUSHJ P,SOSSET
|
||
DIELOK(A)
|
||
AOS DIELOK(A)
|
||
CONO PI,CLKON
|
||
MOVEM B,CTLBTS(U)
|
||
PUSHJ P,NDETA0
|
||
BUG
|
||
POPJ P,
|
||
|
||
IFN NDLTYS+NETYS,[
|
||
|
||
;HANDLE DIAL-UP LINE CONNECTS OR DISCONNECTS ON DL-10 AND DTE20.
|
||
|
||
SYSDIL:
|
||
IFN NDLTYS,[
|
||
SKIPN A,DL10CL
|
||
JRST SYSDL2 ;THERE'S NONE TO PROCESS?
|
||
SETZM DL10CL ;FREE THE VAR FOR THE PDP11
|
||
PUSHJ P,SYSDL0
|
||
SYSDL2: ];NDLTYS
|
||
IFN NETYS,[
|
||
SKIPGE A,DTEHNG
|
||
JRST SYSDL3
|
||
SETOM DTEHNG
|
||
PUSHJ P,SYSDL0
|
||
SYSDL3:
|
||
];NETYS
|
||
POPJ P,
|
||
|
||
SYSDL0: LDB I,[.BP 77,A] ;GET OUT THE TTY NUMBER
|
||
CAIL I,NCT
|
||
POPJ P,
|
||
TRNE A,-100
|
||
JRST SYSDL1 ;IT'S A CONNECT
|
||
PUSHJ P,SWTL ;IT'S A DISCONNECT
|
||
TREESW
|
||
MOVE J,TTYSTS(I) ;DETACH THE TREE ON THAT TTY.
|
||
JUMPL J,LSWPOP ;THERE'S NO TREE.
|
||
TLNN J,%TSCNS
|
||
JRST LSWPOP ;TTY IS OPEN AS A DEVICE.
|
||
MOVE I,APRC(J)
|
||
TLNE I,BULGOS ;GIVE UP IF TREE LOGGING OUT.
|
||
JRST LSWPOP
|
||
MOVE U,USER
|
||
MOVEI I,[ASCIZ /DIALUP LINE DISCONNECTED,/]
|
||
JRST SYSDT4
|
||
|
||
;ON A CONNECT, SNARF THE LINE SPEEDS DETERMINED BY THE PDP11.
|
||
SYSDL1: LDB B,[.BP 7000,A]
|
||
DPB B,[$TTISP,,TTYTYP(I)]
|
||
LDB B,[.BP 700,A]
|
||
DPB B,[$TTOSP,,TTYTYP(I)]
|
||
PUSHJ P,NCNSSP ;SET UP INITIAL TTY TYPE AS PRINTING, ACCORDING TO SPEED
|
||
MOVEI B,20 ;DON'T ASSUME TTY IS AT LEFT MARGIN
|
||
MOVEM B,TTYIHP(I)
|
||
MOVEM B,TPHP(TT)
|
||
MOVEM B,TPHP+TPLEN(TT)
|
||
POPJ P,
|
||
];NDLTYS+NETYS
|
||
.ELSE SYSDIL==CPOPJ
|
||
|
||
IFN N11TYS,[
|
||
SYS11D: MOVEI I,[ASCIZ /TV 11 WENT DOWN --/]
|
||
PUSHJ P,SYSSTD ;STRING, SPACE, TIME AND CR
|
||
SETZM TT11P ;IN CASE SCR11D WAS SET BY A USER, AND HE DIDN'T HACK THIS.
|
||
MOVEI A,TT11HD+1
|
||
MOVEM A,TT11HD ;PREVENT TT11IN FROM BEING CALLED ANY MORE.
|
||
SYS11G: PUSHJ P,SWTL ;PREPARE FOR DOING DETACHES
|
||
TREESW
|
||
MOVE I,[-N11TYS,,NF11TY]
|
||
SYS11F: SKIPGE J,TTYSTS(I) ;DETACH ALL 11TV TREES.
|
||
JRST SYS11E ;THIS 11TV NOT IN USE
|
||
TLNN J,%TSCNS
|
||
JRST SYS11P ;THIS 11TV IN USE AS A DEVICE, DON'T DETACH BUT DO PCLSR
|
||
MOVE T,APRC(J)
|
||
TLNE T,BULGOS
|
||
JRST SYS11E ;DON'T DETACH TREES THAT ARE LOGGING OUT.
|
||
MOVE U,USER
|
||
MOVEI I,[ASCIZ / .../]
|
||
PUSHJ P,SYSDT4 ;DETACH OR KILL JOB W/ # IN J, AND PRINT MESSAGE.
|
||
JRST SYS11G ;TREESW NOW UNLOCKED; MUST RE-LOCK.
|
||
|
||
SYS11P: HRRZ A,J ;PCLSR THE NAME DRAGON
|
||
PUSHJ P,NJRPCL
|
||
PUSHJ P,NJUPCL ;AND DROP INTO SYS11E
|
||
|
||
SYS11E: AOBJN I,SYS11F
|
||
PUSHJ P,LSWPOP ;TREESW NOT NEEDED IF NOTHING TO DETACH.
|
||
MOVSI T,-MXVBN ;FLUSH VIDEO BUFFER ASSIGNMENTS.
|
||
SETOM VBAST(T)
|
||
AOBJN T,.-1
|
||
MOVEI T,0
|
||
SYS11V: CAML T,USRHI
|
||
POPJ P,
|
||
SETZM NVDBA(T)
|
||
SETOM TVCREG(T) ;FLUSH TV BUFFER NUMBERS IN CREGS
|
||
ADDI T,LUBLK
|
||
JRST SYS11V
|
||
|
||
TVBNCL: PUSH P,T ;"DEASSIGN" TVVBN(U) AND CLEAR IT ON SCREEN IF NECC
|
||
SKIPN TEN11F
|
||
SKIPL TT11P
|
||
JRST TVBNC1
|
||
SKIPL T,TVVBN(U)
|
||
CAME U,USER
|
||
JRST TVBNC1
|
||
PUSH P,400000+TTR10*2000
|
||
MOVEM T,400000+TTR10*2000
|
||
MOVE T,TVBLAD
|
||
CLEARM 400000+TTR0*2000(T)
|
||
POP P,400000+TTR10*2000
|
||
TVBNC1: SETOM TVVBN(U)
|
||
JRST POPTJ
|
||
];N11TYS
|
||
|
||
;PRINT CONSOLE FREE MSGS ON ALL TTYS THAT NEED IT.
|
||
;NOTE THAT THERE ARE LOWER CASE MESSAGES ON THIS PAGE.
|
||
.SEE TTYLO1 ;THIS RTN SIGNALLED WHEN A TTY BECOMES FREE.
|
||
SYSCFM: CLEARM IOCHNM+STYOC ;REUSE SYSTEM CONSOLE CHANNEL
|
||
SYSCF0: MOVEI A,0
|
||
SYSCF1: CAIL A,NCT
|
||
JRST SYSCOP ;DONE, SWITCH SYSCON CHANNEL BACK TO SYSCON
|
||
SKIPGE B,TTYSTA(A) .SEE %TACFM
|
||
AOJA A,SYSCF1
|
||
TLNE B,%TANJS
|
||
TLZ B,%TACTZ ;%TANJS MEANS A FAILED ^Z - FORGET ABOUT THAT ^Z.
|
||
MOVEM B,TTYSTA(A)
|
||
SKIPGE TTYSTS(A) .SEE %TSFRE
|
||
TLNE B,%TACTZ
|
||
AOJA A,SYSCF1 ;IN PROCESS OF LOADING TREE FOR THIS CONSOLE
|
||
HRLZ T,A
|
||
ADD T,[%TJDIS+%TJMOR,,TYODN]
|
||
MOVEM T,IOCHNM+STYOC ;"OPEN" A CHANNEL TO THAT TTY.
|
||
SKIPGE SHUTDN
|
||
PUSHJ P,SYSTS1 ;IF SHUTDOWN AND A DISPLAY, CLEAR THE SCREEN
|
||
MOVEI I,[ASCIZ /
|
||
Top level interrupt, tree detached
|
||
/]
|
||
MOVSI B,%TCDET ;IF TTY FREE DUE TO DETACH FOR TOP LEVEL INT,
|
||
TDNE B,TTYCOM(A)
|
||
PUSHJ P,SYSSP .SEE NDETAC ;SAY SO.
|
||
ANDCAM B,TTYCOM(A)
|
||
MOVSI B,%TANJS
|
||
ANDCA B,TTYSTA(A)
|
||
EXCH B,TTYSTA(A) ;CLEAR BIT, SAVE OLD VALUE
|
||
PUSH P,A
|
||
XCT DWNMSG
|
||
SKIPGE SHUTDN
|
||
JRST SYSCF2 ;SYSTEM IS DOWN, SAY SO
|
||
XCT SCMESG
|
||
CAMN A,SYSCN
|
||
JRST SYSCF2 ;SYSTEM JOB USING THIS CONSOLE, SAY SO
|
||
SRITYP [ System fully loaded. Console ]
|
||
TLNN B,%TANJS
|
||
SRITYP [ Console ]
|
||
PUSHJ P,SYSSP
|
||
IFN N11TYS, CAIE A,NF11TY ;ON ALL FREE PDP11-TV CONSOLES
|
||
PUSHJ P,SYSOPT
|
||
MOVEI I,[ASCIZ / Free./]
|
||
PUSHJ P,SYSSTD
|
||
XCT DMESSG
|
||
SKIPE SYSDBG
|
||
SYSCF2: PUSHJ P,SYSSTD ;SAY "SYS BEING DEBUGGED" IF NEC.
|
||
SKIPLE SHUTDN
|
||
PUSHJ P,SYSSHM ;SAY "SYS GOING DOWN" IF NEC.
|
||
POP P,A
|
||
MOVSI B,%TACFM ;TTY NO LONGER NEEDS CONSOLE FREE MSG.
|
||
IORM B,TTYSTA(A)
|
||
IFN N11TYS,PUSHJ P,TTYLO2 ;TELL THE PDP11 THIS TTY IS FREE
|
||
SETZM IOCHNM+STYOC
|
||
JRST SYSCF0
|
||
|
||
SUBTTL SHUTDOWN
|
||
|
||
;HANDLE .SHUTDN - PRINT "GOING DOWN" MSGS, ETC.
|
||
SYSSHD: LDB D,[221700,,SHUTLK+1]
|
||
PUSHJ P,SWTL
|
||
SHUTLK
|
||
MOVEI I,SYSSHM
|
||
TLO I,40
|
||
PUSH P,D
|
||
PUSHJ P,SYALCP
|
||
POP P,D
|
||
IMULI D,LUBLK
|
||
SKIPE D ;SKIP IF LEFT FROM >5 MIN PRINT OUT
|
||
SKIPN A,UNAME(D)
|
||
JRST LSWPOP
|
||
MOVEI I,[ASCIZ /CULPRIT = /]
|
||
PUSHJ P,SYSSP
|
||
PUSHJ P,SYSSIX
|
||
MOVE A,JNAME(D)
|
||
PUSHJ P,SYSSIX
|
||
PUSHJ P,SYSTCR
|
||
JRST LSWPOP
|
||
|
||
;GOING DOWN, WHAT A SHAME
|
||
SYSSHM: SRITYP [GOING DOWN IN ]
|
||
SKIPG SHUTDN
|
||
SRITYP [REVIVED]
|
||
PUSHJ P,SYSSP
|
||
SKIPG B,SHUTDN
|
||
JRST SYSSHN
|
||
SUB B,TIME
|
||
IDIVI B,30. ;CONVERT TO SECONDS
|
||
PUSHJ P,RTIME ;CONVERT TO SIXBIT
|
||
MOVE B,A
|
||
PUSHJ P,SYSTCD
|
||
SYSSHN: MOVEI I,[.ASCII /. /]
|
||
JRST SYSSTD
|
||
|
||
;AND COME HERE WHEN TIME FOR SYS TO GO DOWN.
|
||
;MARK THE SYSTEM "DOWN", START FLAPPING TAPES AND DISKS,
|
||
;GUN ALL USERS, ETC. COMPLETION OF GOING DOWN IS DETECTED AT
|
||
;SLOW CLOCK LEVEL ("COFFIN").
|
||
SYSOUT: PUSHJ P,CLQDEL
|
||
DEDBLK
|
||
SETOM DEDTIM ;PREVENT ^Z'S
|
||
.FDELE [SIXBIT/ SYSDOWN MAIL/ ? 0 ? 0]
|
||
JFCL
|
||
MOVEI U,LUBLK*2
|
||
SYSCK3: SKIPGE SUPPRO(U) ;LOOK FOR ALL TOP-LEVEL JOBS.
|
||
SKIPN UNAME(U)
|
||
JRST SYSCK4
|
||
MOVE T,USTP(U)
|
||
TLNE T,BUSRC
|
||
JRST SYSCK1
|
||
MOVE T,OPTION(U) ;IS THIS JOB AN EXCEPTION?
|
||
TLNE T,%OPLIV
|
||
JRST SYSCK4 ;YES, LET IT LOG ITSELF OUT
|
||
SYSCK1: PUSHJ P,ALOGOUT ;LOG IT OUT (TELLS IT TO PREPARE ITSELF, SIGNAL SYSGUN)
|
||
SYSCK4: ADDI U,LUBLK
|
||
CAMGE U,USRHI
|
||
JRST SYSCK3
|
||
SETZ U,
|
||
DWNMSG: SRITYP [NOT IN OPERATION]
|
||
PUSHJ P,SYALCP ;TYPE OUT ON FREE CONSOLES
|
||
IFN TPLP, MOVEI A,SCRTPF ;TPLOFF
|
||
IFN TPLP, IORM A,SUPCOR
|
||
IFN UNSPLP,[ SKIPG TPLFLG
|
||
JRST SYSCK0
|
||
MOVEI A,SCRTPF
|
||
IORM A,SUPCOR
|
||
SYSCK0:
|
||
] MOVE I,QACTB
|
||
IORM I,QMDRO
|
||
MOVSI A,-NQS
|
||
SYSCK7: MOVE I,DCHBT(A)
|
||
SKIPN QACT(A)
|
||
IORM I,QTUTO(A)
|
||
AOBJN A,SYSCK7
|
||
IFN NUNITS,[
|
||
MOVEI A,1
|
||
SYSUDM: SKIPL UDIRO(A)
|
||
.UDISMT A, ;DISMOUNT TAPES
|
||
CAIGE A,NUNITS
|
||
AOJA A,SYSUDM
|
||
]
|
||
MOVE T,TIME
|
||
MOVEM T,DTHTIM
|
||
SETOM SHUTDN
|
||
PUSHJ P,TTTMNT ;TURN OFF ALL TERMINET MOTORS
|
||
JRST SCOR
|
||
|
||
SUBTTL SYSTEM CHECKS
|
||
;CHECK FOR DEVICES THAT LOSE THE PIA, DEVICES THAT INTERRUPT SPURIOUSLY,
|
||
;CLOBBERD LOCATIONS IN MEMORY.
|
||
|
||
IFE KS10P,[ ; KS has no devices to speak of...
|
||
|
||
SYSCK5: MOVSI A,-128.
|
||
SYSC51: SKIPL B,DCHNTC(A)
|
||
SYSC5A: AOBJN A,SYSC51
|
||
JUMPGE A,CPOPJ
|
||
TLNN B,300000
|
||
JRST SYSC5A
|
||
PUSH P,A
|
||
TLZE B,200000
|
||
JRST SYSC52
|
||
PUSHJ P,SYSC5S
|
||
JRST SYSC53
|
||
SYSC52: PUSHJ P,SYSC5C
|
||
SYSC53: POP P,A
|
||
MOVSI B,300000
|
||
ANDCAM B,DCHNTC(A)
|
||
JRST SYSC5A
|
||
|
||
SYSC5C: PUSHJ P,SYSC5B
|
||
MOVEI I,[ASCIZ / CLOBBERED/]
|
||
JRST SYSSTD
|
||
|
||
SYSC5S: PUSHJ P,SYSC5B
|
||
MOVEI I,[ASCIZ / SUSPECTED OF INTERRUPTING ON CHANNEL /]
|
||
PUSHJ P,SYSSP
|
||
LDB T,[360300,,DCHNTC(A)]
|
||
PUSHJ P,SYSSOP
|
||
JRST SYSTCR
|
||
|
||
SYSSOP: PUSH P,A
|
||
PUSH P,B
|
||
MOVE A,T
|
||
PUSHJ P,SYSOPT
|
||
JRST POPBAJ
|
||
|
||
SYSC5B: MOVEI I,[ASCIZ /DEVICE /]
|
||
PUSHJ P,SYSSP
|
||
HRRZ T,A
|
||
LSH T,2
|
||
PUSHJ P,SYSSOP
|
||
MOVEI I,[ASCIZ / (CONI= /]
|
||
PUSHJ P,SYSSP
|
||
HRRZ T,DCHNTC(A)
|
||
PUSHJ P,SYSSOP
|
||
MOVEI I,[ASCIZ /) /]
|
||
JRST SYSSP
|
||
|
||
] ;IFE KS10P
|
||
|
||
SYSCKS: HRRZ T,UPDBR1 ;CHECK FOR CLOBBERED DBRS
|
||
HRRZ TT,UPDBR2
|
||
CAIN T,UPGMP
|
||
CAIE TT,UPGMP+100
|
||
BUG HALT,[PAGER DATA CLOBBERED. MAY BE DEC-TTL LEVEL CONVERTERS LOSING.]
|
||
;DROPS THROUGH
|
||
;DROPS IN
|
||
MOVE A,SYSCKP
|
||
MOVE B,(A)
|
||
MOVEI C,(B)
|
||
EQV C,(B)
|
||
AOBJN B,.-1
|
||
CAME C,CKSUMS-TSTB(A)
|
||
JRST SYSKS2
|
||
AOBJN A,SYSKS1
|
||
SYSKS3: MOVE A,[-LTSTB,,TSTB]
|
||
SYSKS1: MOVEM A,SYSCKP
|
||
POPJ P,
|
||
|
||
SYSKS2: EXCH C,CKSUMS-TSTB(A)
|
||
XOR C,CKSUMS-TSTB(A) ;SAVE XOR
|
||
PUSHJ P,WARMTTY
|
||
PUSHJ P,DINGTTY
|
||
MOVEI I,[ASCIZ /SYSTEM CLOBBERED BETWEEN /]
|
||
PUSHJ P,SYSSP
|
||
HRRZ A,(A)
|
||
PUSHJ P,SYSOPT
|
||
MOVEI I,[ASCIZ / AND /]
|
||
PUSHJ P,SYSSP
|
||
MOVE B,SYSCKP
|
||
HLRE A,(B)
|
||
SETCMM A ;OFFSET BY ONE
|
||
ADD A,(B)
|
||
HRRZS A
|
||
PUSHJ P,SYSOPT
|
||
MOVEI I,[ASCIZ / XOR= /]
|
||
PUSHJ P,SYSSP
|
||
MOVE A,C
|
||
PUSHJ P,SYSFWP
|
||
MOVEI I,[ASCIZ / !/]
|
||
PUSHJ P,SYSSTD
|
||
CLEARM TCKXOR ;TRY TO DETERMINE EXACT ADR AND PREV CONTENTS
|
||
MOVE A,[TCKXOR,,TCKXOR+1]
|
||
BLT A,TCKXOR+35.
|
||
MOVE A,[-LTSTB,,TSTB]
|
||
SYSKS6: MOVE B,(A)
|
||
SYSKS5: MOVE C,(B)
|
||
REPEAT 36.,[IFL .RPCNT-18.,TLNE C,400000_<-.RPCNT>
|
||
IFGE .RPCNT-18.,TRNE C,400000_<18.-.RPCNT>
|
||
XORM B,TCKXOR+.RPCNT
|
||
]
|
||
AOBJN B,SYSKS5
|
||
AOBJN A,SYSKS6
|
||
MOVSI D,-36.
|
||
SYSKS7: MOVE A,TCKXOR(D) ;UPDATE CKXORS TBL AND FILL TCKXOR TBL WITH POSSIBLE ADRS
|
||
EXCH A,CKXORS(D)
|
||
XOR A,CKXORS(D)
|
||
HRRZM A,TCKXOR(D)
|
||
AOBJN D,SYSKS7
|
||
PUSHJ P,STYOT ;INDENT LINE
|
||
MOVSI D,-36.
|
||
MOVSI E,400000 ;CURRENT BIT
|
||
CLEARB I,J ;COUNT OF #'S PRINTED, CLOBBERED WD
|
||
SYSKS8: SKIPE A,TCKXOR(D)
|
||
AOJA J,SYSKS9 ;INCR COUNT OF ADRS PRINTED
|
||
SYSKT2: LSH E,-1
|
||
AOBJN D,SYSKS8
|
||
SOJN J,SYSKT1 ;MORE THAN 1 ADR CLOBBERD SO CANT PRINT PREV CONTENTS
|
||
MOVEI T,"=
|
||
PUSHJ P,STYO
|
||
MOVE A,I ;PRINT CONTENTS PRIOR TO CLOBBERAGE
|
||
XOR A,(R) ;XOR CURRENT CONTENTS
|
||
PUSHJ P,SYSFWP
|
||
MOVEI T,"-
|
||
PUSHJ P,STYO
|
||
MOVEI T,">
|
||
PUSHJ P,STYO
|
||
MOVE A,(R)
|
||
PUSHJ P,SYSFWP ;CURRENT CONTENTS
|
||
SYSKT1: PUSHJ P,SYSCRF
|
||
JRST SYSKS3
|
||
|
||
SCKX1: PUSH P,T ;UPDATE CKXORS TO REFLECT CHANGING WD IN T IN ADR IN Q
|
||
MOVSI C,-36.
|
||
SCKX2: SKIPGE T
|
||
XORM Q,CKXORS(C)
|
||
LSH T,1
|
||
AOBJN C,SCKX2
|
||
JRST POPTJ
|
||
|
||
SYSKS9: PUSHJ P,SYSOPT
|
||
PUSHJ P,STYOS
|
||
MOVE R,TCKXOR(D) ;CLEAR DUP ENTRIES
|
||
MOVE T,D
|
||
MOVE Q,E ;ALSO LEAVE LAST ADR IN R (IN CASE ITS ONLY ADR)
|
||
SYSKT3: CAME R,TCKXOR(T)
|
||
JRST SYSKT4
|
||
CLEARM TCKXOR(T)
|
||
XORM Q,I
|
||
SYSKT4: LSH Q,-1
|
||
AOBJN T,SYSKT3
|
||
JRST SYSKT2
|
||
|
||
SUBTTL SUPPORT ROUTINES FOR BUG MACRO
|
||
|
||
;NOTE: THESE REPLACE THE SYSMSG ROUTINE THAT USED TO BE HERE
|
||
|
||
;ENTRY POINTS
|
||
BUGCHK: PUSH P,TT
|
||
MOVE TT,SYSMPT ;HOW MANY MESSAGES BEHIND?
|
||
SUB TT,SYSMPU
|
||
CAIGE TT,<8_SYSMLNG>-8
|
||
SKIPE SYSDBG
|
||
JRST BUGPSE+1 ;TREAT AS BUGPSE IF BUFFER FULL OR SYSDBG
|
||
CAIA
|
||
BUGINF: PUSH P,TT
|
||
PUSHJ P,SYSMS0 ;HAND MESSAGE TO SYSTEM JOB TO BE PRINTED
|
||
JRST POPTTJ ;CONTINUE TRAPPED ROUTINE
|
||
|
||
BUGPSE: PUSH P,TT
|
||
PUSHJ P,SYSMS0 ;COPY MESSAGE INTO SYSTEM JOB BUFFER
|
||
JSP TT,BUGDD0 ;PRINT MESSAGE AND GO TO DDT
|
||
ASCIZ/PAUSE. FIND A WIZARD, CONSIDER TAKING A CRASH DUMP,
|
||
OR TYPE <ALTMODE>P TO ATTEMPT TO REVIVE THE SYSTEM./
|
||
|
||
BUGDDT: PUSH P,TT
|
||
PUSHJ P,SYSMS0 ;COPY MESSAGE INTO SYSTEM JOB BUFFER
|
||
JSP TT,BUGDD0 ;PRINT MESSAGE AND GO TO DDT
|
||
ASCIZ/DDT. TYPE <ALTMODE>P TO CONTINUE./
|
||
|
||
BUGNIL: PUSH P,TT
|
||
JRST BUGHL1 ;NO MESSAGE, JUST GO STRAIGHT TO DDT.
|
||
|
||
BUGAWF: 0 ;JSR HERE WHEN AWFUL THINGS HAVE HAPPENED
|
||
CONO PI,PIOFF ;BETTER DO THIS AS SOON AS POSSIBLE
|
||
MOVEM P,BUGACS+P ;SAVE P AND GET A PDL TO USE
|
||
MOVE P,BUGPDL
|
||
PUSH P,BUGAWF ;SIMULATE PUSHJ P,BUGHLT
|
||
BUGHLT: PUSH P,TT
|
||
PUSHJ P,SYSMS0 ;COPY MESSAGE INTO SYSTEM JOB BUFFER
|
||
BUGHL1: JSP TT,BUGDD0 ;PRINT MESSAGE AND GO TO DDT
|
||
ASCIZ/HALT. FIND A WIZARD OR CONSIDER TAKING A CRASH DUMP.
|
||
THE SYSTEM HAS CRASHED AND CANNOT BE REVIVED WITHOUT EXPERT ATTENTION.
|
||
IF YOU CAN'T FIND HELP, RELOAD THE SYSTEM./
|
||
|
||
;ROUTINE TO PICK UP THE DATA OUT OF THE BUG TABLE, EVALUATE THE
|
||
;ARGUMENTS, AND DUMP THE RESULTS INTO THE SYSMSG BUFFER TO BE
|
||
;PRINTED LATER. THE THIRD THING DOWN ON THE STACK IS THE PC+1
|
||
;AT WHICH THE BUG WAS DETECTED. TT IS THE ONLY SMASHABLE REGISTER.
|
||
SYSMS0: MOVEI TT,8 ;8 WORDS IN ENTRY
|
||
ADDB TT,SYSMPT ;UPDATE STORING POINTER
|
||
ANDI TT,8_SYSMLNG-1 ;MASK TO BUFFER INDEX
|
||
ADDI TT,SYSMBF
|
||
PUSH P,TT ;SAVE PTR
|
||
PUSH P,A ;NOW LOCATE BUG TABLE ENTRY
|
||
PUSH P,B
|
||
MOVE A,TIME ;STASH TIME IN EXTRA WORD OF ENTRY
|
||
MOVEM A,7(TT)
|
||
MOVEI B,BUGTAB
|
||
SYSMS1: HRRZ A,(B)
|
||
CAIN A,@-5(P)
|
||
JRST SYSMS2 ;PC MATCHES
|
||
HLRZ A,(B) ;ADVANCE TO NEXT ENTRY
|
||
ADD B,A
|
||
JUMPN A,SYSMS1
|
||
JRST 4,. ;NOT IN TABLE?? MACROS MUST BE SCHROD
|
||
|
||
SYSMS2: HLRZ A,(B)
|
||
ADDI TT,-2(A)
|
||
EXCH TT,-2(P) ;TT START OF ENTRY, -2(P) END
|
||
MOVE A,TT
|
||
HRLI A,1(B) ;COPY BITS,,STRING AND ARG POINTERS
|
||
BLT A,@-2(P)
|
||
POP P,B
|
||
POP P,A
|
||
SUBM TT,(P) ;(P) GETS -NARGS
|
||
SKIPE (P) ;IN CASE NO ARGS
|
||
SYSMS3: PUSH TT,@1(TT) ;EVALUATE ARGUMENT POINTERS
|
||
AOSGE (P)
|
||
JRST SYSMS3
|
||
MOVEI TT,SCRMSG ;BIT FOR MSG PRINT
|
||
IORM TT,SUPCOP ;TRY EVERY SECOND TO PRINT SOME MSGS
|
||
IORM TT,SUPCOR ;FIRST ATTEMPT RIGHT AWAY.
|
||
JRST POP1J ;RETURN TO BUGINF OR WHEREVER
|
||
|
||
;CALL HERE TO PRINT THE MESSAGES OUT OF THE BUFFER
|
||
;A HAS SCRMSG
|
||
SYSMPR: MOVE TT,SYSMPT ;LAST MESSAGE IN
|
||
CAMG TT,SYSMPU ;LAST MESSAGE OUT
|
||
JRST [ ANDCAM A,SUPCOP ;CAUGHT UP
|
||
POPJ P, ]
|
||
SUBI TT,8_SYSMLNG
|
||
CAMLE TT,SYSMPU
|
||
JRST [ MOVE A,TT ;BEHIND BY MORE THAN SIZE OF BUFFER
|
||
SUB A,SYSMPU
|
||
MOVEM TT,SYSMPU
|
||
LSH A,-3 ;NUMBER OF MESSAGES LOST
|
||
PUSHJ P,DINGTTY
|
||
PUSHJ P,SYSDPT
|
||
MOVEI I,[ASCIZ/ SYS MSGS LOST/]
|
||
PUSHJ P,SYSSTD
|
||
JRST .+1 ]
|
||
MOVEI TT,8
|
||
ADDB TT,SYSMPU
|
||
ANDI TT,8_SYSMLNG-1
|
||
ADDI TT,SYSMBF
|
||
PUSHJ P,DINGTTY
|
||
HLLZ D,(TT) ;GET MODE FLAGS
|
||
HRRZ I,(TT) ;GET ASCIZ MSG
|
||
HRLI I,440700
|
||
SYSMP0: ILDB T,I
|
||
JUMPE T,SYSMP1
|
||
CAIGE T,10
|
||
JRST SYSMP3
|
||
PUSHJ P,STYO
|
||
JRST SYSMP0
|
||
|
||
SYSMP1: PUSHJ P,STYOS ;SPACE AND OUTPUT REMAINING ARGS
|
||
PUSHJ P,SYSMP2
|
||
JRST SYSTCR ;END WITH TIME, POPJ
|
||
JRST SYSMP1
|
||
|
||
SYSMP3: PUSH P,T ;OUTPUT THIS MANY ARGS
|
||
SYSMP4: PUSHJ P,SYSMP2
|
||
JFCL
|
||
PUSHJ P,STYOS
|
||
SOSLE (P)
|
||
JRST SYSMP4
|
||
SUB P,[1,,1]
|
||
JRST SYSMP0
|
||
|
||
SYSMP2: MOVEI C,0
|
||
LSHC C,3 ;GET A BYTE
|
||
JUMPE C,CPOPJ ;NO MORE ARGS TO PRINT
|
||
PUSH P,I
|
||
MOVE A,1(TT)
|
||
PUSHJ P,@SYSMTB(C)
|
||
POP P,I
|
||
AOJA TT,POPJ1
|
||
|
||
;DISPATCH TABLE FOR SYSTEM MESSAGE PRINTER
|
||
|
||
SYSMTB: JRST 4,. ;0 CHECKED FOR END
|
||
SYSFWP ;1 FULL WORD OCTAL
|
||
SYSDPT ;2 FULL WD DECIMAL
|
||
SYSDPC ;3 " WITH COMMAS
|
||
SYSCRF ;4 DO CR
|
||
CPOPJ ;5 ?
|
||
SYSIXP ;6 SIXBIT
|
||
[MOVE I,A ;7 ASCIZ
|
||
JRST SYSSP]
|
||
|
||
;ROUTINE FOR BUGS THAT NEED TO HALT INTO DDT
|
||
BUGDD0: HRLI TT,440700
|
||
CONO PI,PIOFF ;PREVENT INTERFERENCE, AND HACK STYO
|
||
MOVEM TT,T00POS ;SAVE ADDRESS OF MESSAGE TEMPORARILY
|
||
POP P,TT ;RESTORE TT AT TIME OF BUG
|
||
POP P,BUGPC ;ADDRESS+1 OF BUG
|
||
SKIPE BUGAWF
|
||
MOVE P,BUGACS+P ;CORRECT P AT TIME OF BUG
|
||
SETZM BUGAWF ;CLEAR FLAG FOR NEXT BUG IN CASE REVIVED
|
||
CONI PI,BUGPI ; SAVE PI STATUS
|
||
CONI BUGAPR ; SAVE APR STATE
|
||
IFE KA10P,[
|
||
CONI PAG,BUGEBR ; SAVE EBR, UBR, ETC
|
||
DATAI PAG,BUGUBR
|
||
] ;IFE KA10P
|
||
SPM BUGPGM ; SAVE PAGER STATE
|
||
MOVEM 17,BUGACS+17 ;SAVE ACS
|
||
MOVEI 17,BUGACS
|
||
BLT 17,BUGACS+16
|
||
MOVE P,BUGPDL ;USE THIS PDL FOR TYPING OUT
|
||
PUSH P,T00POS ;RECOVER ASCIZ STRING FOR FLAVOR OF BUG
|
||
PUSHJ P,SYSCRF ;CARRIAGE RETURN
|
||
BUGDD1: MOVEI A,SCRMSG
|
||
PUSHJ P,SYSMPR ;DUMP SYSMSG BUFFER
|
||
IFN KA10P,[
|
||
CONSZ TTY,40 ;PUNT IF CHARACTER TYPED
|
||
JRST BUGDD2
|
||
] ;KA10P
|
||
IFN KL10P,[
|
||
SETZM DTEFLG
|
||
MOVEI A,%DTTYI
|
||
MOVEM A,DTECMD
|
||
CONO DTE,%DBL11
|
||
SKIPN DTEFLG
|
||
JRST .-1
|
||
SKIPE DTEF11 ;INPUT TYPED?
|
||
JRST BUGDD2 ;YES, PUNT
|
||
] ;KL10P
|
||
IFN KS10P,[
|
||
SKIPE 8CTYIN ; Any input available?
|
||
JRST BUGDD2 ; Yes: Punt.
|
||
] ;KS10P
|
||
MOVE TT,SYSMPT ;LAST MESSAGE IN
|
||
CAMLE TT,SYSMPU ;LAST MESSAGE OUT
|
||
JRST BUGDD1
|
||
BUGDD2: MOVE A-1,BUGPI ;CHECK FOR PI IN PROGRESS
|
||
ANDI A-1,77400
|
||
LSH A-1,20.
|
||
JFFO A-1,[ MOVEI I,[ASCIZ/PI LEVEL /]
|
||
PUSHJ P,SYSSP
|
||
PUSHJ P,SYSDPT
|
||
PUSHJ P,STYOS
|
||
JRST .+1 ]
|
||
MOVEI I,[ASCIZ/BUG/]
|
||
PUSHJ P,SYSSP
|
||
POP P,I ;PAUSE OR HALT MESSAGE
|
||
SKIPN SYSDBG ;PUNT LONG-WINDED MESSAGE IF DEBUGGING
|
||
PUSHJ P,SYSSP
|
||
MOVEI I,[ASCIZ/
|
||
YOU ARE NOW IN DDT./]
|
||
PUSHJ P,SYSSP
|
||
MOVEI TT,[ASCIZ|BUGPC/Q-2/|]
|
||
HRLI TT,440700
|
||
MOVEM TT,777777 ;TELL DDT TO EXAMINE BUGHLT ADDRESS
|
||
MOVE TT,BUGPC ;ARRANGE FOR <ALT>P TO JUMP THERE
|
||
MOVEM TT,@DDT-6 ;IN OLDER DDT WILL JUST CLOBBER AC0
|
||
MOVSI 17,BUGACS ;RESTORE ACS
|
||
BLT 17,17
|
||
CONO PI,PION
|
||
JRST DDT
|
||
|
||
EBLK
|
||
|
||
;DATA AREAS POINTERS AND BUFFER FOR SYS MSG PRINTER
|
||
|
||
CTLMAX==55. ;Number of lines after which we should print the date.
|
||
CTLCNT: 0 ;Keeps track of number of lines printed on console.
|
||
|
||
SYSMPT: 0 ;POINTER TO MESSAGE MOST RECENTLY INSERTED
|
||
SYSMPU: 0 ;POINTER TO MESSAGE MOST RECENTLY PRINTED
|
||
;(MUST TAKE MODULO LENGTH OF TABLE, AND ADD OFFSET OF BEGIN OF TABLE)
|
||
IFNDEF SYSMLNG,SYSMLNG==5 ;LOG(2) OF # ENTRIES (5=>32)
|
||
|
||
SYSMBF: BLOCK 8_SYSMLNG ;8 WDS PER ENTRY: BITS,,STRING, 6 ARGS, TIME
|
||
|
||
BUGPC: 0 ;RESTART PC FROM BUG
|
||
BUGPI: 0 ; CONI PI,BUGPI
|
||
BUGAPR: 0 ; CONI APR,BUGAPR
|
||
IFE KA10P,[
|
||
BUGEBR: 0 ; CONI PAG,BUGEBR
|
||
BUGUBR: 0 ; DATAI PAG,BUGUBR
|
||
];IFE KA10P
|
||
IFN 0,[ ;UPGML/UPGMLE not defined yet...
|
||
BUGPGM: BLOCK UPGMLE-UPGML ; SPM BUGPGM
|
||
]
|
||
BUGPGM: BLOCK 8 ;KLUDGE
|
||
BUGACS: BLOCK 20 ;AC SAVE AREA FOR BUGDD0
|
||
BUGPDL: -20,,.
|
||
BLOCK 20
|
||
T00POS: 0 ;TTY00 HORIZONTAL POSITION
|
||
|
||
BBLK
|
||
|
||
SUBTTL .SETLOC ROUTINE (DOCUMENT THEN DOES IT)
|
||
|
||
SYSSET: MOVE A,SETSLC ;LOCATION TO BE MODIFIED
|
||
TLNN A,-1 ;SKIP IF ALREADY DONE
|
||
SKIPA C,SETSLQ ;NEW VAL IN SETSLQ
|
||
SKIPA C,(A) ;NEW VAL IN LOC
|
||
SKIPA D,A ;OLD VAL IN @A
|
||
MOVEI D,SETSLQ ;OLD VAL IN SETSLQ
|
||
PUSHJ P,SYSSCT ;PRINT OUT DDT-TYPE SEQUENCE
|
||
MOVE A,SETSU ;GET USET NAME
|
||
PUSHJ P,STYOT ;TYPE OUT A TAB
|
||
MOVEI B,0
|
||
PUSHJ P,SYSIXP ;PRINT NAME OF GUILTY PARTY
|
||
PUSHJ P,SYSTCR ;STANDARD SYS CARRIAGE RETURN
|
||
SKIPGE SETSLC ;IF ALREADY MUNGED AT UUO LEVEL
|
||
POPJ P, ;THEN EXIT NOW
|
||
MOVE T,SETSLQ ;GET DESIRED VALUE
|
||
; SKIPL UMBTS
|
||
; JRST SYSSE8 ;DON'T HACK METABITS
|
||
; LMB Q,@SETSLC ;GET META BIT OF DESIRED LOCATION
|
||
; TRNE Q,1 ;IF 1 THEN HAVE TO MOMENTARILY CLEAR IT
|
||
; JRST SYSSE5
|
||
SYSSE8: EXCH T,@SETSLC ;META BIT=0, CHANGE LOCATION
|
||
SYSSE6: MOVE Q,SETSLC ;GET ADR OF MUNGED LOC
|
||
MOVE A,[-LTSTB,,TSTB]
|
||
SYSSE1: MOVE B,(A)
|
||
CAIGE Q,(B)
|
||
JRST SYSSE3
|
||
HLRE C,B
|
||
SETCMM C
|
||
ADD C,B
|
||
CAILE Q,(C)
|
||
JRST SYSSE3
|
||
PUSHJ P,SCKX1 ;UPDATE CKXORS TBL TOO
|
||
EQV T,@SETSLC
|
||
EQVM T,CKSUMS-TSTB(A)
|
||
MOVE T,@SETSLC
|
||
PUSHJ P,SCKX1 ;UPDATE TO REFLECT NEW CONTENTS
|
||
SYSSE2: MOVSI A,SCLSET
|
||
ANDCAM A,SUPCOR
|
||
CAIE Q,SYSDBG ;IF NOT DEBUG SWITCH
|
||
POPJ P, ;EXIT
|
||
PUSHJ P,DBGINT ;SYSDBG STATE CHANGE, TELL ALL USERS
|
||
SKIPE SYSDBG
|
||
JUMPN T,CPOPJ
|
||
;SYSDBG CLEARED, GIVE "IN OPERATION" MESSAGE BY DROPPING INTO ISYS
|
||
;HERE WHEN SYSTEM IS UP AND DISKS HAVE BEEN INITIALIZED
|
||
;RE-ENTER HERE WHEN SYSDBG STATE CHANGED
|
||
ISYS: PUSHJ P,DATIME ;MAY BE ABLE TO FIND TIME IMMEDIATELY (ONCE MFD IN)
|
||
PUSHJ P,TTTMN2 ;MAKE SURE WE THINK THAT ALL TERMINET
|
||
;MOTORS ARE OFF, SO WE'LL TRY TO TURN THEM ALL ON WHEN WE TYPE
|
||
;"ITS IN OPERATION" ON THEM.
|
||
PUSHJ P,TTRSAL ;SEND %TDORS TO ALL SOFTWARE TTYS
|
||
SRITYP [IN OPERATION]
|
||
SKIPE SYSDBG ;IF SYS IN DEBUG MODE
|
||
DMESSG: SRITYP [BEING DEBUGGED] ;SET TO APPROP MSG
|
||
PUSHJ P,SYALCP ;PRINT ON ALL CONSOLES
|
||
SCMESG: SRITYP [SYSTEM JOB USING THIS CONSOLE.]
|
||
PUSHJ P,SYSSP ;PRINT ON SYS JOB CONSOLE
|
||
SKIPGE DMLLDF ;START DRAGON (DAEMON) IF WANTED
|
||
SKIPL DMON+1 ;AND NOT DONE ALREADY
|
||
POPJ P,
|
||
HRROI T,DMON
|
||
CONO PI,UTCOFF
|
||
PUSHJ P,NUJBST
|
||
BUG ;SHOULD BE ROOM IN REQUEST BUFFER
|
||
JRST UTCONJ
|
||
|
||
SYSSE3: AOBJN A,SYSSE1
|
||
JRST SYSSE2
|
||
|
||
;SETLOC ROUTINE TO MODIFY LOCATION WITH META BIT = 1
|
||
|
||
;SYSSE5: MOVEI D,0
|
||
; SMB D,@SETSLC
|
||
; EXCH T,@SETSLC
|
||
; SMB Q,@SETSLC
|
||
; JRST SYSSE6
|
||
|
||
SUBTTL MEMORY ERROR MESSAGES
|
||
|
||
NXMTYP: MOVEI I,[ASCIZ /NON-EX MEM ERROR #/]
|
||
MOVEI TT,1
|
||
JRST MEMTYP
|
||
|
||
IFE KA10P,[
|
||
BPFTYP: MOVEI I,[ASCIZ /PAGE FAIL ERROR #/]
|
||
MOVEI TT,2
|
||
JRST MEMTYP
|
||
] ;IFE KA10P
|
||
|
||
PARTYP: MOVEI I,[ASCIZ /PARITY ERROR #/] ;PARITY ERROR
|
||
MOVEI TT,0
|
||
MEMTYP: PUSHJ P,SYSSP
|
||
MOVE A,PARERR(TT)
|
||
PUSHJ P,SYSOPT
|
||
MOVEI I,[ASCIZ /, PC = /]
|
||
PUSHJ P,SYSSP
|
||
MOVE A,PARPC(TT)
|
||
PUSHJ P,SYSFWP
|
||
MOVEI I,[ASCIZ /, JOB # /]
|
||
PUSHJ P,SYSSP
|
||
MOVE A,PARUSR(TT)
|
||
IDIVI A,LUBLK
|
||
PUSHJ P,SYSOPT
|
||
MOVEI I,[ASCIZ /, USR:/]
|
||
PUSHJ P,SYSSP
|
||
MOVE D,PARUSR(TT)
|
||
MOVE A,UNAME(D)
|
||
PUSHJ P,SYSSIX
|
||
PUSHJ P,STYOS
|
||
MOVE A,JNAME(D)
|
||
PUSHJ P,SYSSIX
|
||
JRST @.+1(TT) ;DISPATCH ON TYPE OF ERROR
|
||
PARTY2 ;PARITY
|
||
SYSTCR ;NXM
|
||
IFE KA10P,[
|
||
BPFTY2 ;BPF
|
||
|
||
BPFTY2: MOVEI I,[ASCIZ /, PFW = /]
|
||
PUSHJ P,SYSSP
|
||
MOVE A,BPFPFW
|
||
PUSHJ P,SYSFWP
|
||
JRST SYSTCR
|
||
] ;IFE KA10P
|
||
|
||
PARTY2: PUSHJ P,SYSTCR
|
||
IFN KS10P,[
|
||
MOVEI I,[ASCIZ /ERR ADDR = /]
|
||
PUSHJ P,SYSSP
|
||
MOVE T,PARERA ; Error address is all we collect on the KS.
|
||
PUSHJ P,SYSP
|
||
PUSHJ P,SYSCRF
|
||
] ;KS10P
|
||
IFN KL10P,[
|
||
SKIPN PARRSN
|
||
JRST PARTP1
|
||
MOVEI I,[ASCIZ /ERR ADDR = /]
|
||
PUSHJ P,SYSSP ;PAR ERR INT ALWAYS GIVES ERR ADDR
|
||
MOVE T,PARERA
|
||
JRST PARTP2
|
||
|
||
PARTP1: MOVEI I,[ASCIZ /PFW = /]
|
||
PUSHJ P,SYSSP ;PAR ERR TRAP GIVES PFW AND BAD DATA
|
||
MOVE T,PARPFW ;EVEN IF SCAN DOESN'T FIND PAR ERRS.
|
||
PUSHJ P,SYSP
|
||
MOVEI I,[ASCIZ /, BAD DATA = /]
|
||
PUSHJ P,SYSSP
|
||
MOVE T,PARWRD
|
||
PARTP2: PUSHJ P,SYSP
|
||
PUSHJ P,SYSCRF
|
||
] ;KL10P
|
||
SOSGE D,PARCNT
|
||
POPJ P,
|
||
JUMPE D,PARTP3 ;IF SCAN FOUND MORE THAT ONE PAR ERR,
|
||
;PRINT AND'S AND OR'S OF DATA AND ADDRS.
|
||
IRP X,,[PARAAN,PARAOR,PARAND,PARIOR]Y,,[ADDR AND,ADDR IOR,DATA AND,DATA IOR]
|
||
IFE .IRPCNT&1, MOVEI I,[ASCIZ /Y = /]
|
||
.ELSE MOVEI I,[ASCIZ /, Y = /]
|
||
PUSHJ P,SYSSP
|
||
MOVE T,X
|
||
PUSHJ P,SYSP
|
||
IFN .IRPCNT&1, PUSHJ P,SYSCRF ;PRINT TWO ITEMS PER LINE.
|
||
TERMIN
|
||
PARTP3: MOVEI I,[ASCIZ /PARITY ERRORS:
|
||
/]
|
||
PUSHJ P,SYSSP
|
||
SYSPR1: PUSHJ P,STYOT ;TYPE TAB
|
||
MOVE A,PARADR(D)
|
||
PUSHJ P,SYSFWP
|
||
PUSHJ P,STYOT
|
||
MOVE A,PARCON(D)
|
||
PUSHJ P,SYSFWP
|
||
PUSHJ P,SYSCRF
|
||
SOJGE D,SYSPR1
|
||
AOS D,PARCNT
|
||
MOVEI I,[ASCIZ/ .../]
|
||
CAIN D,MXPARS
|
||
PUSHJ P,SYSSP ;NOT ALL PARITY ERRORS WERE PRINTED
|
||
JRST SYSCRF
|
||
|
||
SUBTTL LOGIN & MISCELLANEOUS MESSAGES
|
||
|
||
SYSLGI: SKIPE SUPPLG
|
||
POPJ P, ;DON'T BOTHER PRINTING MESSAGE
|
||
HLRZ I,SLGIV+1 ;Message (CHUNAME, LOGIN, etc)
|
||
PUSHJ P,SYSSP
|
||
MOVEI TT,SLGIV ;.LOGIN
|
||
MOVE A,(TT)
|
||
CAMN A,[-1]
|
||
BUG
|
||
PUSHJ P,SYSG23
|
||
SKIPE A,SLGIV+2
|
||
PUSHJ P,SYSSIX
|
||
JRST SYSTCR
|
||
|
||
SYSG23: PUSHJ P,SYSIXP
|
||
PUSHJ P,STYOS
|
||
HRRZ A,1(TT) ;PICK UP TTY NUM
|
||
JRST SYSOPT
|
||
|
||
;PRINT A MESSAGE WHEN SOMEONE WRITES ON SYS.
|
||
SYSWRT: MOVE A,SWUNAM ;WRITE ON SYS DEVICE
|
||
PUSHJ P,SYSIXP
|
||
MOVE A,SWJNAM
|
||
PUSHJ P,SYSSIX
|
||
MOVE A,SWFN3 ;SNAME - SYS,SYS1, ...
|
||
PUSHJ P,SYSSIX
|
||
MOVE A,SWFN1
|
||
PUSHJ P,SYSSIX
|
||
MOVE A,SWFN2
|
||
PUSHJ P,SYSSIX
|
||
MOVE A,[SIXBIT /WRITE/] ;Assume luser was writing.
|
||
MOVE B,SWMOD ;Check opcode.
|
||
CAIN B,2 ;MLINK?
|
||
MOVE A,[SIXBIT /LINK/] ; Yup.
|
||
CAIN B,4 ;Maybe DELE/WO, RENAM/WO?
|
||
MOVE A,[SIXBIT /DELRNM/] ; Yah, hmmhmmm.
|
||
SYSWR3: PUSHJ P,SYSSIX
|
||
JRST SYSTCR
|
||
|
||
SUBTTL DETERMINE AND PRINT THE DATE AND TIME
|
||
|
||
EBLK
|
||
DATIME: JRST .+1 ;RH MODIFIED TO REFLECT PROGRESS
|
||
BBLK ;ROUTINE CALLED BY PUSHJ,
|
||
;BIT SET EVERY SECOND FROM SUPCOP UNTIL
|
||
;THE DATE IS KNOWN.
|
||
MOVSI T,40000 ;"MFD IN" BIT IN QMDRO
|
||
CONO PI,UTCOFF ;DISABLE INTERRUPTS
|
||
TDNE T,QMDRO ;SEE IF DIRECTORY IN
|
||
JRST UTCONJ ;NOT IN
|
||
;MFD IN, GET CRUD FROM IT
|
||
MOVE A,QMDRO ;GET ORIGIN OF MFD
|
||
SKIPE B,MDYEAR(A) ;YEAR
|
||
MOVEM B,FYEAR
|
||
SKIPE C,MPDOFF(A) ;PDTIME OFFSET
|
||
MOVEM C,PDTIME
|
||
MOVEI C,DATIM0
|
||
HRRM C,DATIME
|
||
JRST UTCONJ
|
||
|
||
DATIM0: PUSHJ P,GLPDTM ;NOW SEE IF IT'S ALL THERE
|
||
JRST DATIM2 ;NOT ALL THERE, DOCUMENT WHAT'S MISSING
|
||
JRST DATIM6 ;ALL THERE, TYPE OUT AND CLEAR SUPCOR BIT
|
||
|
||
;NOT ALL THERE, DOCUMENT (TYPE OUT) WHAT IS MISSING
|
||
;SHOULD NOT BE NECESSARY TO WARM UP TTY
|
||
|
||
DATIM2:
|
||
IFN PDCLKP,[
|
||
DATAI PDCLK,A ;SEE IF CLOCK ON
|
||
JUMPN A,DATIM3 ;JUMP IF CLOCK WINNING
|
||
MOVEI I,[ASCIZ /DECORIOLIS CLOCK HAS BEEN POWERED OFF, IF THE TIME
|
||
CANNOT BE DETERMINED FROM THE NETWORK, YOU MAY HAVE TO :PDSET
|
||
/]
|
||
MOVEI T,500.
|
||
SOJG T,. ;WAIT AND BE SURE
|
||
DATAI PDCLK,A ;GET DATAI AGAIN
|
||
JUMPN A,DATIM3 ;JUMP IF OK NOW
|
||
PUSHJ P,SYSSP ;COMPLAIN
|
||
] ;PDCLKP
|
||
IFN KS10P,[
|
||
RDTIM A ; Clobbers B
|
||
TLC A,1729. ; "A most interesting number"
|
||
TLNN A,-1 ; If present, KS-10 clock still remembers the time.
|
||
JRST DATIM3
|
||
MOVEI I,[ASCIZ /THE KS-10 CLOCK HAS BEEN RESET, IF THE TIME CANNOT
|
||
BE DETERMINED FROM THE NETWORK, YOU MAY HAVE TO :PDSET
|
||
/]
|
||
PUSHJ P,SYSSP ; Complain
|
||
] ;KS10P
|
||
DATIM8:
|
||
; HRROI T,CCTSS ;NOW PREPARE TO LOAD CTSS CALLER FROM SYS:@ CCTSS
|
||
; PUSHJ P,NUJBST ;DO A PSEUDO-CONTROL Z
|
||
; JRST DATIM7
|
||
DATIM3: MOVEI C,0 ;COUNTER OF THINGS MISSING FROM MFD
|
||
MOVEI I,[ASCIZ /YEAR, /]
|
||
SKIPG FYEAR ;CHECK YEAR
|
||
PUSHJ P,[AOJA C,SYSSP] ;NOT IN, COMPLAIN
|
||
IFN PDCLKP\KS10P,[
|
||
MOVEI I,[ASCIZ /PDTIME OFFSET, /]
|
||
SKIPN PDTIME
|
||
PUSHJ P,[AOJA C,SYSSP] ;PDTIME OFFSET NOT IN
|
||
] ;PDCLKP\KS10P
|
||
JUMPE C,DATIM4 ;SKIP FOLLOWING IF EVERYTHING ON DISK
|
||
MOVEI I,[ASCIZ /NOT ON DISK.
|
||
PLEASE SETLOC APPROPRIATELY.
|
||
/]
|
||
PUSHJ P,SYSSP
|
||
DATIM4: SKIPA T,[DATIM5];UPDATE DATIME TO WAIT FOR EVERYTHING TO BE THERE
|
||
DATIM7: MOVEI T,DATIM8 ;UPDATE DATIME TO WAIT FOR ABILITY TO DO
|
||
; PSEUDO-CONTROL Z FOR CTSS CALLER
|
||
HRRM T,DATIME
|
||
POPJ P,
|
||
|
||
;WAIT FOR EVERYTHING TO BE THERE
|
||
;THEN TYPE OUT "IT IS NOW...", ETC.
|
||
|
||
DATIM5: PUSHJ P,GLPDTM ;CHECK IT
|
||
POPJ P, ;NOT ALL THERE YET
|
||
MOVEI T,DATIME+1 ;ALL THERE, RE-INITIALIZE DATIME
|
||
HRRM T,DATIME
|
||
DATIM6: MOVSI T,SCLDAT ;STOP CALLING DATIME EVERY SECOND
|
||
ANDCAM T,SUPCOP ;NOW THAT THE WORK IS DONE.
|
||
HRRZS TIMOFF ;START UP SLOW CLOCK REAL-TIME ROUTINE
|
||
SETZM RSWTIM ;Initialize the resource-warning timestamp.
|
||
PUSHJ P,WARMTT ;WARM UP TTY
|
||
PUSHJ P,RYEAR1 ;GET DAY OF WEEK IN RELEVANT FIELD OF E
|
||
SYSNWP: MOVEI I,[ASCIZ /IT IS NOW /]
|
||
PUSHJ P,SYSSP ;TYPE IT OUT
|
||
IDIVI A,SPD ;A HAS RESULT OF PUSHJ TO GLPDTM
|
||
PUSH P,A ;SAVE DAY OF YEAR
|
||
MOVE A,B ;GET # SECS SINCE MIDNIGHT IN A
|
||
IDIVI A,SPD/2 ;GET AM/PM BIT IN A, 12 HOUR TIME (SECS) IN B
|
||
PUSH P,[SIXBIT / AM PM/](A) ;REMEMBER WHAT HALF-DAY
|
||
CAIGE B,3600. ;USE 12:01 RATHER THAN 0:01 IN 12-HR TIME.
|
||
ADDI B,12.*3600.
|
||
PUSHJ P,RTIME ;CONVERT TIME TO SIXBIT
|
||
MOVE B,A
|
||
TLNN B,170000 ;IF LEADING DIGIT IS ZERO,
|
||
TLZ B,770000 ;THEN TURN IT INTO A BLANK
|
||
PUSHJ P,SYSTCD ;TYPE OUT TIME
|
||
POP P,B ;RESTORE AM OR PM WORD
|
||
PUSHJ P,SYS6 ;TYPE IT OUT
|
||
MOVE B,[SIXBIT / EST,/]
|
||
TLNE E,100000 ;DST BIT
|
||
HRLI B,(SIXBIT / ED/) ;DAYLIGHT SAVINGS TIME, TYPE OUT EDT INSTEAD OF EST
|
||
PUSHJ P,SYS6 ;TYPE IT OUT
|
||
PUSHJ P,STYOS ;TYPE A SPACE
|
||
LDB B,[320300,,E] ;GET DAY OF WEEK (0 => SUNDAY)
|
||
MOVE B,DOWTBL(B) ;MON, TUES, WEDNES, ETC. (IN SIXBIT)
|
||
PUSHJ P,SYS6 ;TYPE IT OUT
|
||
MOVEI I,[ASCIZ /DAY, /] ;FINISH ON DAY OF WEEK
|
||
PUSHJ P,SYSSP ;" " "
|
||
POP P,A ;RESTORE DAY OF YEAR
|
||
PUSHJ P,RDATE1 ;CALCULATE MONTH AND DAY
|
||
MOVE B,NMNTBL-1(B) ;GET SIXBIT FOR MONTH
|
||
PUSHJ P,SYS6 ;TYPE OUT MONTH
|
||
PUSHJ P,STYOS ;TYPE A SPACE
|
||
MOVE A,C ;GET DAY OF MONTH IN A
|
||
PUSHJ P,SYSDPT ;TYPE OUT IN DECIMAL
|
||
MOVEI T,",
|
||
PUSHJ P,STYO ;TYPE A COMMA
|
||
MOVEI A,(E) ;GET YEAR
|
||
PUSHJ P,SYSDPT ;TYPE IT OUT
|
||
JRST SYSCRF ;END WITH CRLF
|
||
|
||
;TABLE OF NAMES OF MONTHS (FIRST THREE LETTERS, IN SIXBIT)
|
||
|
||
NMNTBL: MNIRP [SIXBIT /M/]
|
||
|
||
;TABLE OF SIXBIT NAMES FOR DAYS OF THE WEEK
|
||
;(THE "DAY" ON THE END LEFT OFF)
|
||
|
||
DOWTBL: IRPS D,,[SUN MON TUES WEDNES THURS FRI SATUR]
|
||
SIXBIT /D/
|
||
TERMIN
|
||
IFN .-DOWTBL-7,.ERR BARF AT DOWTBL
|
||
|
||
SUBTTL NETWORK UP/DOWN
|
||
|
||
SYSNET:
|
||
IFE IMPP,JRST SCOR
|
||
IFN IMPP,[
|
||
MOVE A,IMERCN ;Get error status
|
||
CAME A,[-1] ;--1 means IMP cycled by user
|
||
SKIPA I,[[ASCIZ /IMP CRASHED, STATUS=/]]
|
||
MOVEI I,[ASCIZ /IMP cycled by user at/]
|
||
PUSHJ P,SYSSP ;Print string
|
||
MOVE A,IMERCN ;Get IMP error code back
|
||
CAME A,[-1]
|
||
PUSHJ P,SYSFWP ;Print status if error
|
||
PUSHJ P,SYSTCR ;Time, CRLF
|
||
SETOM IMERCN ;Reset error status
|
||
MOVE A,LNETIM ;Last time net was initted
|
||
SUB A,TIME ;A will be positive if net was last
|
||
ADDI A,30.*30. ; initted less than 30 sec ago.
|
||
PUSH P,A ;Flag for SYSNT5. + means don't restart IMP
|
||
MOVNI A,2 ;Say we are coming up, but no PI action yet,
|
||
MOVEM A,IMPUP ; and prevent new net openers. IMPUP may
|
||
PUSHJ P,SYSNT5 ; not already be -1 if got here via LOCK/NET
|
||
JRST SCOR ;Reset net, then back to main loop
|
||
|
||
;Reset net, and potentially restart IMP
|
||
; Try restarting if IMP ready and -1(P) is negative.
|
||
;
|
||
;IMPUP is -1 so no new opens can happen.
|
||
|
||
SYSNT5:
|
||
;PCLSR those users running in OPEN.
|
||
;
|
||
MOVEI U,0
|
||
IFN NCPP,[
|
||
PUSHJ P,LSTSTP ;PCLSR all users in .OPEN
|
||
NETLST
|
||
MOVSI I,-IMPSTL
|
||
SYSNT2: SKIPL A,IMSOC1(I)
|
||
JRST SYSNT1
|
||
HRRZS A
|
||
SKIPN UNAME(A)
|
||
JRST SYSNT1
|
||
MOVE T,APRC(A)
|
||
TLNE T,BULGO ;Tree is being deleted anyway.
|
||
JRST SYSNT1
|
||
PUSHJ P,IFSTOP ;Stop network user
|
||
PUSHJ P,CHSCAA
|
||
PUSHJ P,SYSNT3 ;Hack IOCHNM words of net user
|
||
SYSNT1: AOBJN I,SYSNT2
|
||
];NCPP
|
||
|
||
;Disconnect all STYs from the network
|
||
;
|
||
MOVEI I,NFSTTY+NSTTYS-1
|
||
SYSNT6:
|
||
PUSHJ P,NSTYN0
|
||
JFCL
|
||
CAILE I,NFSTTY
|
||
SOJA I,SYSNT6
|
||
|
||
IFN NCPP,[
|
||
;Clean up connections which were closing
|
||
;
|
||
CONO PI,UTCOFF
|
||
MOVSI I,-IMPSTL
|
||
SYSNT7: SKIPL H,IMSOC1(I)
|
||
JRST SYSNT4
|
||
PUSHJ P,IMPBRT ;RETURN BUFFER
|
||
TLNN H,200000 ;IN PROCESS OF CLOSING?
|
||
JRST SYSNT4 ;NO, IGNORE
|
||
SETZM IMSOC1(I) ;FLUSH SOCKET
|
||
SOS IMNCS ;DECREASE COUNT OF CLOSES IN PROCESS
|
||
SYSNT4: AOBJN I,SYSNT7 ;LOOP THRU ALL SOCKETS
|
||
SKIPE IMNCS ;SKIP IF 0 MORE CLOSES
|
||
BUG PAUSE,DEC,IMNCS,[NET CHANNELS NOT CLOSED YET]
|
||
CONO PI,UTCON
|
||
];NCPP
|
||
|
||
;Maybe try to bring the IMP up again
|
||
;
|
||
MOVEI U,0
|
||
SKIPG -1(P) ;If last time down was < half minute ago,
|
||
CALL IMPCKR ; or IMP ready line is not set,
|
||
JRST LSWCLR ; then don't try to bring it up again
|
||
PUSHJ P,IMPINI
|
||
IFN NCPP,PUSHJ P,LSWCLR ;Restart old network users
|
||
PUSHJ P,WARMTTY
|
||
MOVEI I,[ASCIZ /IMP up again./]
|
||
JRST SYSSTD ;Print and return
|
||
|
||
IFN NCPP,[
|
||
SYSNT3: HRRZ C,(R)
|
||
CAIL C,NETDUI
|
||
CAILE C,NETDBO
|
||
POPJ P, ;NOT A NETWORK CHANNEL
|
||
HLRE C,(R) ;SOCKET MAP INDEX
|
||
JUMPL C,CPOPJ
|
||
HRROS (R) ;SET LH OF IOCHNM TO -1
|
||
HRRZ C,R
|
||
SUBI C,IOCHNM(A)
|
||
CAIL C,20
|
||
POPJ P, ;ON IOPDL
|
||
MOVE C,CHNBIT(C)
|
||
AND C,MSKST2(A)
|
||
IORM C,IFPIR(A) ;INTERRUPT USER
|
||
POPJ P,
|
||
];NCPP
|
||
];IMPP
|
||
|
||
;Try to bring IMP up if desirable
|
||
SYSIMU:
|
||
IFE IMPP,POPJ P, ;No IMP, no work
|
||
IFN IMPP,[
|
||
SKIPGE IMPTCU ;Already trying to come up?
|
||
POPJ P, ;Yes, no meddling needed
|
||
CALL IMPCKR ;Check if IMP ready line is now
|
||
JRST [ SETZM IMPTCU ;IMP not ready, we are down and not trying
|
||
POPJ P, ] ; to come up. Give up now
|
||
PUSH P,[-1] ;Force SYSNT5 to try and restart IMP if called
|
||
SKIPGE IMPUP ;Do this only if imp is temporarily down.
|
||
PUSHJ P,SYSNT5 ;Reset world, restart IMP
|
||
JRST POP1J ;Clean up and exit
|
||
];IMPP
|
||
|
||
; PUSHJ P,LSTSTP
|
||
; LIST ;WHERE LIST/ <HEAD OF A LIST OF JOBS>
|
||
;STOPS ALL JOBS ON THE LIST, AND PUT THEM ON OUR LSWPR.
|
||
;LIST SHOULD BE LINKED THROUGH THE RH, AND EACH WORD IN THE LIST SHOULD BE
|
||
;IN THE USER VAR BLOCK OF SOME JOB. THAT JOB IS CONSIDERED TO BE ON THE LIST.
|
||
;0 IN THE RH MEANS NIL.
|
||
LSTSTP: MOVE T,@(P) ;POINTER TO FIRST ELEMENT OF LIST
|
||
CONO PI,CLKOFF
|
||
MOVE T,(T)
|
||
LSTST1: HRRZS T
|
||
SKIPN A,T ;ADDRESS OF LSWB BLOCK
|
||
JRST CLKOJ1
|
||
MOVEI A,-USRSTG(A)
|
||
IDIVI A,LUBLK
|
||
IMULI A,LUBLK ;USER INDEX
|
||
PUSH P,(T)
|
||
PUSHJ P,IFSTOP ;STOP USER, ADDING HIS USTP TO OUR LSWPR
|
||
POP P,T
|
||
JRST LSTST1
|
||
SUBTTL SYSTEM JOB TYPE-OUT ROUTINES
|
||
|
||
;PRINT "<A>/ <@D> <C>" IN OCTAL.
|
||
;USED BY SYSSET. CLOBBERS A,B,T.
|
||
SYSSCT: HRRZS A
|
||
PUSHJ P,SYSOPT
|
||
MOVEI T,"/
|
||
PUSHJ P,STYO
|
||
PUSHJ P,STYOT ;TAB
|
||
MOVE A,(D) ;GET CURRENT VALUE
|
||
PUSHJ P,SYSFWP
|
||
PUSHJ P,STYOT
|
||
MOVE A,C ;GET NEW VALUE
|
||
JRST SYSFWP
|
||
|
||
;STRING <- I, SPACE, TIME AND CRLF.
|
||
;CLOBBERS A THRU E AND T.
|
||
SYSSTD: PUSHJ P,SYSSP
|
||
|
||
;SPACE, TIME AND CRLF.
|
||
;CLOBBERS A THRU E AND T.
|
||
SYSTCR: PUSHJ P,SYSTPT
|
||
|
||
;TYPE A CRLF. CLOBBERS T.
|
||
SYSCRF: SOS CTLCNT ;Countdown number of lines printed.
|
||
MOVEI T,15
|
||
PUSHJ P,STYO
|
||
MOVEI T,12
|
||
JRST STYO
|
||
|
||
SYSTPT: PUSHJ P,STYOS ;TYPE SPACE, TIME
|
||
CONSZ PI,200 ;IF IN BUGDD0, MUSTN'T CALL GLPDTM
|
||
PUSHJ P,GLPDTM
|
||
POPJ P, ;TIME NOT KNOWN
|
||
IDIVI A,SPD
|
||
PUSHJ P,RTIME ;CONVERT TO SIXBIT.
|
||
MOVE B,A ;DROP INTO SYSTCD
|
||
|
||
SYSTCD: LDB A,[301400,,B]
|
||
PUSHJ P,SYSTWR
|
||
LDB A,[141400,,B]
|
||
PUSHJ P,SYSTWR
|
||
MOVE I,[140600,,B]
|
||
JRST SYSIX2
|
||
|
||
;PREPARE FOR TYPING OUT A MESSAGE ON THE CONSOLE TTY. CALL HERE BEFORE
|
||
;STARTING TO TYPE A LINE, IF THERE IS A CHANCE THAT SYS JOB MIGHT JUST
|
||
;BE STARTING TO TYPE AFTER A PERIOD OF SILENCE.
|
||
WARMTTY:PUSHJ P,SYSCOP ;GET SYSTEM TTY READY TO USE
|
||
.IOT STYOC,[^P] ;ADVANCE TO FRESH LINE
|
||
.IOT STYOC,["A]
|
||
WARMT2:
|
||
IFN 1, POPJ P,
|
||
.ELSE [ MOVE T,SYSCN
|
||
MOVE T,TTLTM(T) ;DON'T DO THIS IF THERE'S BEEN ACTIVITY IN 2 MINUTES.
|
||
ADDI T,115.*30.
|
||
CAML T,TIME
|
||
POPJ P,
|
||
PUSH P,[[MOVEI T,^H
|
||
JRST WARMT1]]
|
||
SKIPA T,[175] ;WARM UP TELETYPE (ONLY ON AI-KA FOR NOW)
|
||
];END .ELSE
|
||
DINGTTY: SKIPA T,[^G] ;DING DING
|
||
WARMT1: PUSHJ P,.+1
|
||
PUSHJ P,.+1
|
||
JRST STYO
|
||
|
||
;ROUTINE TO "OPEN" A CHANNEL TO THE SYSTEM CONSOLE
|
||
;IT'S DONE THIS WAY SO THAT THE CONSOLE CAN STILL BE
|
||
;USED AS A USER CONSOLE WHEN NECESSARY. SYSTEM JOB
|
||
;MESSAGES WILL JUST COME OUT FROM TIME TO TIME.
|
||
|
||
SYSCOP: HRLZ T,SYSCN ;FAKE UP AN IOCHNM WORD
|
||
ADD T,[%TJDIS+%TJMOR,,TYODN]
|
||
SKIPGE SYSCN
|
||
MOVEI T,NLODN ;IF NO SYS TTY AVAIL, USE NUL DEVICE
|
||
MOVEM T,IOCHNM+STYOC
|
||
POPJ P,
|
||
|
||
;TYPE OUT THE SIXBIT WORD IN B, QUIT WHEN WHAT IS LEFT IS BLANK
|
||
SYS6: JUMPE B,CPOPJ ;RETURN WHEN NOTHING LEFT
|
||
MOVEI A,0 ;INITIALIZE FOR LSH
|
||
LSHC A,6 ;SHIFT A CHARACTER IN
|
||
MOVEI T,40(A) ;CONVERT TO SIXBIT AND GET IN T
|
||
PUSHJ P,STYO ;TYPE OUT THE CHARACTER
|
||
JRST SYS6 ;LOOP BACK FOR NEXT CHARACTER
|
||
|
||
;PRINT A MESSAGE ON ALL FREE CONSOLES. 40 SET IN LH(I) => IT IS ADDR OF ROUTINE;
|
||
;ELSE IT IS ADDR OF AN ASCIZ STRING TO BE TYPED FOLLOWED BY THE TIME AND A CRLF.
|
||
SYALCP: TLNN I,40
|
||
HRLI I,440700 ;SYSTEM ALL CONSOLES PRINT
|
||
MOVEI A,0
|
||
SYALC1: PUSHJ P,SYSTSU
|
||
AOJA A,SYALC3
|
||
TLNE I,40
|
||
JRST SYALC5
|
||
MOVE Q,I ;SO NOT TO MUNG I UNTIL END
|
||
SYALC2: ILDB E,Q
|
||
JUMPE E,SYALC4 ;JUMP IF DONE
|
||
.IOT STYOC,E ;COPY CHARACTER
|
||
JRST SYALC2 ;GO GET NEXT CHARACTER
|
||
|
||
SYALC5: PUSH P,I
|
||
PUSH P,A
|
||
PUSHJ P,(I)
|
||
POP P,A
|
||
POP P,I
|
||
SYALC6: MOVSI E,%TACFM
|
||
IORM E,TTYSTA(A) ;DONT NEED CONSOLE FREE MSG ANY MORE
|
||
AOS A ;INCREMENT CONSOLE NUMBER
|
||
SYALC3: CAIGE A,NCT+IFN N11TYS,[1-N11TYS] ;IF MORE CONSOLES LEFT,
|
||
JRST SYALC1 ;THEN PRINT OUT ON NEXT ONE
|
||
JRST SYSCOP ;FINALLY RE-OPEN SYSTEM CONSOLE.
|
||
|
||
SYALC4: PUSH P,[SYALC6] ;PUT TIME AT END OF MESSAGE
|
||
PUSH P,A ;IF WE KNOW WHAT TIME IT IS
|
||
PUSH P,B
|
||
PUSHJ P,GLPDTM
|
||
JRST POPBAJ
|
||
PUSH P,I
|
||
IRPC A,,[ AT]
|
||
.IOT STYOC,["A] ;PUT TIME IN UP/DOWN MESSAGES
|
||
TERMIN
|
||
PUSHJ P,SYSTPT
|
||
POP P,I
|
||
JRST POPBAJ
|
||
|
||
SYSTSU: CONO PI,TTYOFF
|
||
MOVE T,TTYSTA(A)
|
||
TLZN T,%TACFM
|
||
JRST TTYONJ ;IN USE OR WILL GET CONSOLE FREE MSG => DON'T HACK IT
|
||
MOVEM T,TTYSTA(A)
|
||
CONO PI,TTYON
|
||
AOS (P) ;TTY NEEDS HACKING, SO SKIP.
|
||
HRLZ T,A
|
||
ADD T,[%TJDIS+%TJMOR,,TYODN]
|
||
MOVEM T,IOCHNM+STYOC ;"OPEN" THE CHANNEL.
|
||
SYSTS1: MOVE T,TTYOPT(A)
|
||
TLNN T,%TOIML
|
||
TLNN T,%TOMVU
|
||
POPJ P, ;IMLAC OR PRINTING TTY, DON'T CLEAR.
|
||
MOVEI T,^P
|
||
PUSHJ P,STYO
|
||
MOVEI T,"C
|
||
JRST STYO
|
||
|
||
;SYSTEM JOB RADIX PRINT-OUT ROUTINES
|
||
;FULL WORD (TWO HALFWORD) OCTAL:
|
||
SYSFWP: TLNN A,-1 ;IF LH=0,
|
||
JRST SYSOPT ;THEN PRINT ONLY RH
|
||
LSHC A,-18.
|
||
HLLM B,(P)
|
||
PUSHJ P,SYSOPT
|
||
HLRZ A,(P)
|
||
MOVEI T,", ;",," BETWEEN HALFWORDS
|
||
PUSHJ P,STYO
|
||
PUSHJ P,STYO
|
||
|
||
;OCTAL PRINTOUT, NO LEADING ZEROS, HALFWORD MAXIMUM
|
||
SYSOPT: IDIVI A,10
|
||
JUMPE A,SYSRP1
|
||
HRLM B,(P)
|
||
PUSHJ P,SYSOPT
|
||
SYSRP2: HLRZ B,(P) ;ENTRY POINT FROM DECIMAL TYPEOUT ROUTINE
|
||
SYSRP1: MOVEI T,"0(B) ;" " "
|
||
JRST STYO
|
||
|
||
;DECIMAL PRINTOUT, COMMAS EVERY 3 DIGITS, FULLWORD MAXIMUM
|
||
SYSDPC: MOVE 0,A ;ROUTINE EXPECTS ARGUMENT IN A, CLOBBERS 0, A(=0+1), B(=A+1)
|
||
SYSDP5: IDIVI 0,1000. ;GET LEAST SIGNIFICANT 3 DIGITS IN A
|
||
JUMPE 0,SYSDPT ;PRINT HIGH ORDER DIGITS WITHOUT LEADING ZEROES
|
||
HRLM A,(P)
|
||
PUSHJ P,SYSDP5
|
||
HLRZ A,(P)
|
||
MOVEI T,", ;SINCE 3*N DIGITS LEFT TO BE TYPED, N>0,
|
||
PUSHJ P,STYO ;PRINT OUT A COMMA
|
||
MOVEI T,3 ;NUMBER OF DIGITS TO PRINT OUT
|
||
;ROUTINE TO PRINT OUT AS MANY DECIMAL DIGITS AS SPECIFIED IN T
|
||
SYSLZP: IDIVI A,10.
|
||
SOJLE T,SYSRP1
|
||
HRLM B,(P)
|
||
PUSHJ P,SYSLZP
|
||
JRST SYSRP2
|
||
|
||
;PRINT NUMBER IN A IN DECIMAL; CLOBBERS B, T.
|
||
SYSDPT: IDIVI A,10.
|
||
JUMPE A,SYSRP1
|
||
HRLM B,(P)
|
||
PUSHJ P,SYSDPT
|
||
JRST SYSRP2
|
||
|
||
STYOQ: MOVEI T,"? ;TYPE OUT "?"
|
||
JRST STYO
|
||
|
||
STYOT: SKIPA T,[11] ;TAB
|
||
STYOS: MOVEI T,40 ;TYPE OUT A SPACE
|
||
STYO: CONSO PI,200 ;PI ON? (SYSTEM UP)
|
||
JRST STYO1
|
||
.IOT STYOC,T
|
||
POPJ P,
|
||
|
||
;TYPE OUT DIRECTLY WHILE SYSTEM IS NOT RUNNING
|
||
STYO1: HRLM T,(P)
|
||
CAIN T,15
|
||
SETZM T00POS
|
||
AOS T,T00POS
|
||
CAIL T,75.
|
||
PUSHJ P,SYSCRF
|
||
HLRZ T,(P)
|
||
IFN KA10P,[
|
||
CONSZ TTY,20
|
||
JRST .-1
|
||
DATAO TTY,T
|
||
] ;KA10P
|
||
IFN KL10P,[
|
||
SETZM DTEFLG
|
||
MOVEM T,DTECMD
|
||
CONO DTE,%DBL11
|
||
SKIPN DTEFLG
|
||
JRST .-1
|
||
] ;KL10P
|
||
IFN KS10P,[
|
||
ANDI T,177 ; ASCII for the 8080
|
||
IORI T,400 ; Means a character is present
|
||
MOVEM T,8CTYOT
|
||
CONI T
|
||
IORI T,80INT
|
||
CONO (T) ; punch 8080
|
||
SKIPE 8CTYOT ; wait for completion
|
||
JRST .-1
|
||
HLRZ T,(P) ; God knows who might look at T...
|
||
] ;KS10P
|
||
POPJ P,
|
||
|
||
;PRINT WORD IN I AS 12. OCTAL DIGITS. CLOBBERS J,T.
|
||
SYSP: MOVE J,[440300,,I]
|
||
MOVE I,T
|
||
SYSP1: ILDB T,J
|
||
ADDI T,"0
|
||
PUSHJ P,STYO
|
||
TLNE J,770000
|
||
JRST SYSP1
|
||
POPJ P,
|
||
|
||
SYSSP: HRLI I,440700 ;ENTRY TO TYPE C(I) AS A POINTER TO ASCIZ
|
||
SYSSP2: ILDB T,I
|
||
JUMPE T,CPOPJ
|
||
PUSHJ P,STYO
|
||
JRST SYSSP2
|
||
|
||
SYSTWR: LSH A,30-18.
|
||
ADDI A,(SIXBIT / :/)
|
||
MOVE I,[220600,,A]
|
||
JRST SYSIX2
|
||
SYSSIX: PUSHJ P,STYOS ;TYPE A SPACE AND FALL IN
|
||
SYSIXP: MOVE I,[440600,,A] ;ENTRY TO TYPE OUT C(A) AS SIXBIT
|
||
SYSIX2: ILDB T,I
|
||
ADDI T,40
|
||
PUSHJ P,STYO
|
||
TLNN I,770000
|
||
POPJ P,
|
||
JRST SYSIX2
|