mirror of
https://github.com/PDP-10/its.git
synced 2026-03-06 11:23:32 +00:00
415 lines
7.1 KiB
Plaintext
Executable File
415 lines
7.1 KiB
Plaintext
Executable File
TITLE RDDMST TAA 11/16/77
|
||
|
||
O=0
|
||
A=1
|
||
B=2
|
||
C=3
|
||
D=4
|
||
E=5 ; MUNGED BY SOUT
|
||
F=6
|
||
G=7
|
||
H=8
|
||
P=17
|
||
|
||
TTYO==1
|
||
USRI==2
|
||
|
||
; CONSTANT STRING OUTPUT
|
||
DEFINE SOUT CHAN,TXT
|
||
MOVE E,[440700,,[ASCII /TXT/]]
|
||
MOVEI F,.LENGTH /TXT/
|
||
.CALL [SETZ
|
||
SIXBIT /SIOT/
|
||
MOVSI %TJDIS
|
||
MOVEI CHAN
|
||
E
|
||
SETZ F]
|
||
.LOSE 1000
|
||
TERMIN
|
||
|
||
DEFINE OHPOS NUM
|
||
.IOT TTYO,[^P]
|
||
.IOT TTYO,["H]
|
||
.IOT TTYO,[NUM+8.]
|
||
TERMIN
|
||
|
||
SYSVER: 0 ; SYSTEM VERSION
|
||
JCLBUF: BLOCK 3
|
||
EVTBL:
|
||
SQUOZE 0,L
|
||
L: 0
|
||
SQUOZE 0,DMNFLG ; DEMONS ALLOWED?
|
||
DMNFLG: 0
|
||
SQUOZE 0,DMTTBL
|
||
DMTTBL: 0
|
||
SQUOZE 0,DMLNG
|
||
DMLNG: 0
|
||
SQUOZE 0,DMTLL
|
||
DMTLL: 0 ; DMTLL,,DMTLL AFTER INIT
|
||
SQUOZE 0,FLSINS
|
||
FLSINS: 0
|
||
SQUOZE 0,LSUUO
|
||
LSUUO: 0
|
||
SQUOZE 0,USTP
|
||
USTP: 0
|
||
SQUOZE 0,APRC
|
||
APRC: 0
|
||
SQUOZE 0,UPC
|
||
UPC: 0
|
||
SQUOZE 0,SUUOH
|
||
SUUOH: 0
|
||
EVPTR: EVTBL-.,,EVTBL
|
||
DEMTAB: 0 ; AOBJN POINTER TO DMTTBL
|
||
TIME: 0 ; CURRENT TIME, DISK FORMAT
|
||
DAYPTR: 220500,,TIME ; POINTER TO DATE FIELD
|
||
MONPTR: 270400,,TIME ; POINTER TO MONTH FIELD
|
||
PDLLEN==20
|
||
PDL: BLOCK PDLLEN
|
||
|
||
|
||
START: MOVE P,[-PDLLEN,,PDL]
|
||
.RSYSI A,
|
||
CAME A,SYSVER
|
||
JRST INIT
|
||
.CALL [SETZ
|
||
SIXBIT /OPEN/
|
||
[.UAO+%TJDIS,,TTYO]
|
||
[SIXBIT /TTY/]
|
||
[SIXBIT /TTY/]
|
||
SETZ [SIXBIT /TTY/]]
|
||
.LOSE 1000
|
||
SOUT TTYO,[It is now ]
|
||
.CALL [SETZ
|
||
SIXBIT /RQDATE/
|
||
SETZM TIME]
|
||
.LOSE 1000
|
||
HRRZ B,TIME
|
||
IDIVI B,120. ; MINUTES SINCE MIDNIGHT
|
||
IDIVI B,60. ; HOURS IN B, MINUTES IN C.
|
||
CAIGE B,10.
|
||
.IOT TTYO,["0]
|
||
MOVE A,B
|
||
PUSHJ P,DECPRT
|
||
.IOT TTYO,[":]
|
||
CAIGE C,10.
|
||
.IOT TTYO,["0]
|
||
MOVE A,C
|
||
PUSHJ P,DECPRT
|
||
SOUT TTYO,[, ]
|
||
LDB A,MONPTR
|
||
PUSHJ P,DECPRT
|
||
.IOT TTYO,["/]
|
||
LDB A,DAYPTR
|
||
PUSHJ P,DECPRT
|
||
.IOT TTYO,[".]
|
||
SKIPG @DMNFLG ; SKIP IF DEMONS ARE LEGAL
|
||
JRST [SOUT TTYO,[ Loading of demons is disabled.]
|
||
JRST .+1]
|
||
.SUSET [.ROPTIO,,A]
|
||
TLNN A,OPTCMD ; JCL?
|
||
JRST RDALL
|
||
.BREAK 12,[..RJCL,,JCLBUF] ; YES
|
||
MOVE B,[440700,,JCLBUF]
|
||
MOVE C,[440600,,A]
|
||
MOVEI A,0
|
||
JCLLOP: TLNN C,770000
|
||
JRST JCLDON
|
||
ILDB D,B
|
||
CAIE D,^M
|
||
CAIN D,^C
|
||
JRST JCLDON
|
||
JUMPE D,JCLDON
|
||
SUBI D,40
|
||
CAIL D,100
|
||
SUBI D,40
|
||
IDPB D,C
|
||
JRST JCLLOP
|
||
JCLDON: MOVE B,DEMTAB
|
||
SCLOOP: CAMN A,(B)
|
||
JRST DOPRT
|
||
ADD B,DMTLL
|
||
JUMPL B,SCLOOP
|
||
SOUT TTYO,[
|
||
No such demon?]
|
||
.BREAK 16,160000
|
||
|
||
DOPRT: PUSHJ P,DMPRT ; WANTS DEMON NAME IN A, ENTRY IN B
|
||
.BREAK 16,160000
|
||
|
||
RDALL: SOUT TTYO,[
|
||
Name Index Next signal Interval]
|
||
MOVE B,DEMTAB
|
||
RDALOP: SKIPE A,(B)
|
||
PUSHJ P,DMPTAB
|
||
ADD B,DMTLL
|
||
JUMPL B,RDALOP
|
||
.BREAK 16,160000
|
||
|
||
; COME HERE TO PRINT STATUS FOR TABLE. NAME IS IN A, TABLE IN B.
|
||
DMPTAB: SOUT TTYO,[
|
||
]
|
||
PUSHJ P,SIXPRT ; NAME
|
||
OHPOS 8. ; NEXT COLUMN
|
||
SKIPE C,1(B)
|
||
JRST DMPST1
|
||
SOUT TTYO,[ Down]
|
||
JRST DMPNXT
|
||
DMPST1: JUMPL C,[SOUT TTYO,[ Load]
|
||
JRST DMPNXT]
|
||
SOUT TTYO,[ ]
|
||
IDIV C,L
|
||
CAIGE C,10
|
||
.IOT TTYO,[" ]
|
||
MOVE A,C
|
||
PUSHJ P,OCTPRT
|
||
MOVE C,1(B)
|
||
MOVE A,@USTP ; JOB STOPPED?
|
||
TLNN A,100000
|
||
JRST RUNNIN
|
||
SKIPL @APRC ; DISOWNED?
|
||
JRST MANSTP
|
||
SOUT TTYO,[==] ; DEAD, NEEDS CLEANING UP
|
||
POPJ P,
|
||
MANSTP: .IOT TTYO,["=] ; MANUALLY STOPPED
|
||
POPJ P,
|
||
RUNNIN: SKIPN @FLSINS
|
||
POPJ P,
|
||
MOVE A,@LSUUO
|
||
TLZ A,777
|
||
CAME A,[.SLEEP] ; SLEEPING?
|
||
JRST [CAME A,[.HANG]
|
||
POPJ P, ; NO
|
||
MOVEI E,"+
|
||
JRST NRMSLP]
|
||
MOVEI E,"*
|
||
MOVE A,@UPC
|
||
TLNE A,%PCUSR ; IN EXEC MODE?
|
||
JRST NRMSLP ; THINGS SURE HAPPEN FAST HERE
|
||
HRRZ A,@SUUOH
|
||
SUBI A,1
|
||
IDIV C,L ; USER INDEX
|
||
TRO C,400000
|
||
.CALL [SETZ
|
||
SIXBIT /OPEN/
|
||
[<10\.UII>,,USRI]
|
||
[SIXBIT /USR/]
|
||
C
|
||
SETZI 0]
|
||
POPJ P, ; OH, WELL
|
||
.ACCESS USRI,A ; LOOK AT CURRENT INSTRUCTION
|
||
.IOT USRI,A
|
||
.CLOSE USRI,
|
||
CAME A,[XCT 35(2)] ; IF .SLEEP IS THIS, THEN IT'S A DEAD MUDDLE
|
||
JRST NRMSLP
|
||
SOUT TTYO,[**]
|
||
POPJ P,
|
||
NRMSLP: .IOT TTYO,E
|
||
POPJ P,
|
||
DMPNXT: OHPOS 18.
|
||
HLRZ A,2(B)
|
||
JUMPE A,[SOUT TTYO,[Never]
|
||
POPJ P,]
|
||
MOVE A,3(B)
|
||
JUMPE A,[SOUT TTYO,[Never]
|
||
POPJ P,]
|
||
PUSHJ P,NXTPRT ; TIME OF NEXT SIGNAL
|
||
OHPOS 36.
|
||
HLRZ A,2(B)
|
||
ASH A,1
|
||
CAIL A,10000.
|
||
JRST DOPR
|
||
.IOT A,[" ]
|
||
CAIL A,1000.
|
||
JRST DOPR
|
||
.IOT A,[" ]
|
||
CAIL A,100.
|
||
JRST DOPR
|
||
.IOT A,[" ]
|
||
CAIL A,10.
|
||
JRST DOPR
|
||
.IOT A,[" ]
|
||
DOPR: PUSHJ P,DECPRT
|
||
POPJ P,
|
||
|
||
; COME HERE TO PRINT A DEMON'S STATUS, NOT FOR TABLE.
|
||
; NAME OF DEMON IS IN A, ENTRY IN TABLE IS IN B.
|
||
|
||
DMPRT: SOUT TTYO,[
|
||
Demon ]
|
||
PUSHJ P,SIXPRT ; SIXBIT NAME OF DEMON
|
||
SKIPE C,1(B) ; IDX, 0, OR -1
|
||
JRST ST1
|
||
HLRZ A,2(B)
|
||
JUMPE A,[SOUT TTYO,[ is never automatically signalled.
|
||
]
|
||
JRST DPNDRQ]
|
||
MOVE A,3(B)
|
||
JUMPE A,[SOUT TTYO,[ will never be automatically signalled.
|
||
]
|
||
JRST DPNDRQ]
|
||
SOUT TTYO,[ will be signalled at ]
|
||
PUSHJ P,NXTPRT
|
||
.IOT TTYO,[".]
|
||
JRST STRAND
|
||
ST1: JUMPL C,[SOUT TTYO,[ is coming up.]
|
||
JRST STRAND]
|
||
SOUT TTYO,[ is up; job index is ]
|
||
IDIV C,L
|
||
MOVE A,C
|
||
PUSHJ P,OCTPRT
|
||
.IOT TTYO,[".]
|
||
POPJ P,
|
||
STRAND: HLRZ A,2(B)
|
||
JUMPE A,DONTSG
|
||
ASH A,1
|
||
SOUT TTYO,[
|
||
After next signal, will be signalled every ]
|
||
PUSHJ P,DECPRT
|
||
SOUT TTYO,[ minutes; ]
|
||
JRST DPNDRQ
|
||
DONTSG: SOUT TTYO,[
|
||
Demon is not periodic; ]
|
||
DPNDRQ: HRRZ A,2(B)
|
||
PUSHJ P,DECPRT
|
||
SOUT TTYO,[ pending requests.]
|
||
POPJ P,
|
||
|
||
; OUTPUT OCTAL # ON TTYO. # IS IN A.
|
||
OCTPRT: PUSH P,B
|
||
PUSH P,C
|
||
MOVE C,OCTLEN
|
||
JRST DECOTL
|
||
|
||
; OUTPUT DECIMAL # ON TTYO. # IS IN A.
|
||
DECPRT: PUSH P,B
|
||
PUSH P,C
|
||
MOVE C,DECLEN
|
||
DECOTL: IDIV A,(C)
|
||
JUMPN A,DECOT1
|
||
MOVE A,B
|
||
AOBJN C,DECOTL
|
||
.IOT TTYO,["0]
|
||
JRST DECDON
|
||
DECOT0: IDIV A,(C)
|
||
DECOT1: ADDI A,"0
|
||
.IOT TTYO,A
|
||
MOVE A,B
|
||
AOBJN C,DECOT0
|
||
DECDON: POP P,C
|
||
POP P,B
|
||
POPJ P,
|
||
DECTAB: 1000000. ? 100000. ? 10000. ? 1000. ? 100. ? 10. ? 1.
|
||
DECLEN: DECTAB-.,,DECTAB
|
||
OCTTAB: 1000000 ? 100000? 10000 ? 1000? 100 ? 10 ? 1
|
||
OCTLEN: OCTTAB-.,,OCTTAB
|
||
|
||
; OUTPUT SIXBIT. WORD IS IN A.
|
||
SIXPRT: PUSH P,B
|
||
PUSH P,C
|
||
MOVE B,[440600,,A]
|
||
SIXLOP: ILDB C,B
|
||
JUMPE C,SIXDON
|
||
ADDI C,40
|
||
.IOT TTYO,C
|
||
TLNE B,770000
|
||
JRST SIXLOP
|
||
SIXDON: POP P,C
|
||
POP P,B
|
||
POPJ P,
|
||
|
||
; PRINT TIME OF NEXT SIGNAL. TIME TO NEXT SIGNAL IS IN A.
|
||
NXTPRT: PUSH P,C
|
||
PUSH P,D
|
||
PUSH P,E
|
||
PUSH P,F
|
||
PUSH P,G
|
||
HRRZ D,TIME
|
||
IDIVI D,120. ; MINUTES SINCE MIDNIGHT
|
||
ASH A,1
|
||
ADD D,A ; MINUTES BETWEEN MIDNIGHT AND SIGNAL
|
||
IDIVI D,60.*24. ; DAYS IN D, MINUTES IN E
|
||
IDIVI E,60. ; HOURS IN E, MINUTES IN F
|
||
MOVE A,E
|
||
CAIGE A,10.
|
||
.IOT TTYO,["0]
|
||
PUSHJ P,DECPRT
|
||
.IOT TTYO,[":]
|
||
MOVE A,F
|
||
CAIGE A,10.
|
||
.IOT TTYO,["0]
|
||
PUSHJ P,DECPRT
|
||
JUMPE D,NXTOUT
|
||
SOUT TTYO,[, ]
|
||
LDB E,MONPTR ; GET MONTH
|
||
LDB F,DAYPTR ; GET DAY
|
||
ADD F,D
|
||
IDIV F,MONLEN(E) ; TURN INTO MONTHS PLUS DAYS
|
||
JUMPE G,[MOVE G,MONLEN(E)
|
||
JRST NXTPR1]
|
||
ADD E,F
|
||
NXTPR1: MOVEI A,(E)
|
||
PUSHJ P,DECPRT
|
||
.IOT TTYO,["/]
|
||
MOVEI A,(G)
|
||
PUSHJ P,DECPRT
|
||
NXTOUT: POP P,G
|
||
POP P,F
|
||
POP P,E
|
||
POP P,D
|
||
POP P,C
|
||
POPJ P,
|
||
|
||
; INITIALIZE: EVAL SYMBOLS, MAP IN SYSTEM, DO PDUMP.
|
||
; SYSTEM VERSION IS IN A.
|
||
INIT: MOVEM A,SYSVER
|
||
MOVE A,EVPTR
|
||
EVLOP: MOVE B,(A)
|
||
.EVAL B,
|
||
.VALUE
|
||
MOVEM B,1(A)
|
||
ADD A,[2,,2]
|
||
JUMPL A,EVLOP
|
||
MOVE A,DMTLL
|
||
HRLI A,(A)
|
||
MOVEM A,DMTLL ; DMTLL,,DMTLL FOR SEARCH LOOP
|
||
MOVN A,DMLNG
|
||
HRLI A,(A)
|
||
HRR A,DMTTBL
|
||
MOVEM A,DEMTAB ; AOBJN POINTER TO DEMON TABLE
|
||
MOVE A,FLSINS ; TO DECIDE IF CROCK IS SLEEPING
|
||
HRLI A,C
|
||
MOVEM A,FLSINS
|
||
MOVE A,LSUUO
|
||
HRLI A,C
|
||
MOVEM A,LSUUO
|
||
MOVE A,APRC
|
||
HRLI A,C
|
||
MOVEM A,APRC
|
||
MOVE A,USTP
|
||
HRLI A,C
|
||
MOVEM A,USTP
|
||
MOVE A,UPC
|
||
HRLI A,C
|
||
MOVEM A,UPC
|
||
MOVE A,SUUOH
|
||
HRLI A,C
|
||
MOVEM A,SUUOH
|
||
MOVE B,[-377,,1]
|
||
MOVEI A,1
|
||
.CALL [SETZ
|
||
SIXBIT /CORBLK/
|
||
MOVEI %CBRED
|
||
MOVEI %JSELF
|
||
B
|
||
MOVEI %JSABS
|
||
SETZ A]
|
||
.LOSE 1000
|
||
.VALUE [ASCIZ /
|
||
:PDUMP SYS2;TS DEMST
|
||
:CONTIN
|
||
/]
|
||
JRST START
|
||
|
||
MONLEN: 0 ? 31. ? 28. ? 31. ? 30. ? 31. ? 30. ? 31. ? 31. ? 30. ? 31. ? 30. ? 31.
|
||
|
||
END START |