1
0
mirror of https://github.com/PDP-10/its.git synced 2026-03-24 17:36:15 +00:00
This commit is contained in:
Lars Brinkhoff
2017-03-01 12:54:38 +01:00
parent ca37fd4ee4
commit fa40d20403

345
src/sysen3/sst.11 Normal file
View File

@@ -0,0 +1,345 @@
;;; -*- Mode:MIDAS; Fonts: MEDFNB -*-
TITLE SST - System Status
;CStacy, July 1984
X=0 ;Super temporary register.
A=1 ;General registers.
B=2
C=3
D=4
E=5
BP=6 ;Byte pointer.
CHAR=7 ;Character.
T=10 ;Temporary registers.
TT=11
PDTIM=T ;Two ACs used to hack
RYEAR=TT ;the phase of the moon.
OC==12 ;OUT register.
U1==13 ;4 UUO Registers.
U2==14
U3==15
U4==16
P=17 ;Stack pointer.
;;; I/O Channels
DSKI=14 ;Disk input.
TTYO=15 ;TTY typeout.
$$OUT==0
$$OTIM==1
.INSRT DSK:KSC;MACROS
.INSRT DSK:KSC;OUT
.INSRT DSK:KSC;TIMRTS
.INSRT DSK:SYSENG;DATIME
DEFINE EVAL AC,SYM
MOVE AC,[SQUOZE 0,/SYM/]
.EVAL AC,
.LOSE %LSSYS
HRL AC,AC
HRRI AC,AC
.GETLOC AC,
TERMIN
POPJ1: AOS (P)
CPOPJ: POPJ P,
SYSLOS::
AUTPSY: 0
.VALUE [ASCIZ /:Lossage/]
JRST .-1
GO: MOVE P,[-PDLLEN,,PDL-1] ;Init the stack.
SYSCAL SSTATU,[ %CLOUT,,DIETIM ? %CLOUT,,SYSDBG
%CLOUT,,USERS ? %CLOUT,,MEMERR ? %CLOUT,,UPTIME
%CLOUT,,ITSNAM ? %CLOUT,,ITSVER
%CLOUT,,FREJOB ]
.LOSE %LSFIL
CALL TIMINI
NOP
MOVE A,[-8,,[ SIXBIT /UNAME/ ? MOVEM UNAME
SIXBIT /TTY/ ? MOVEM TTYNUM
SIXBIT /UIND/ ? MOVEM UIND
SIXBIT /OPTION/ ? MOVEM C ]]
SYSCAL USRVAR,[%CLIMM,,%JSELF ? A ]
.LOSE %LSFIL
TLNN C,%OPDDT
JRST [ MOVE X,[SIXBIT /????/]
MOVEM X,DDTVER
JRST GO1 ]
.VALUE [ASCIZ " :DDTSYM VERSUN/ DDTVER/1Q
P"]
GO1: SYSCAL OPEN,[%CLBIT,,.UAO\%TJDIS ? %CLIMM,,TTYO ? [SIXBIT /TTY/]]
.LOSE %LSFIL
OUT(TTYO,OPEN(UC$IOT))
OUT(,CH(TTYO)) ;Open typeout display as default device.
ID: OUT(,("A"),6F(ITSNAM),(" ITS "),6F(ITSVER))
OUT(,SP,LPAR,("DDT."),6F(DDTVER),RPAR)
OUT(,SP,("Uptime: "))
.RLPDT PDTIM,
CALL GUPTIM
CALL PTIME ;Print uptime.
OUT(,CRLF,("Lunar: "))
CALL PPOTM ;Print the phase of the moon.
SKIPE SYSDBG
OUTCAL(,("ASystem is being debugged "),LBRK,O(SYSDBG),RBRK,(". "))
MOVE A,DIETIM
CAMN A,[-1] ;System intending to go down?
JRST ID1 ; Nope.
CAMN A,[-2] ;Maybe already down?
JRST [ OUT(,("System is not in operation."))
JRST ID1 ]
OUT(,("ASystem going down in "))
MOVE D,A ;Get time in 30ths.
IDIVI D,30. ;Convert to seconds.
CALL TIMPT ;Print death sentance as hh:mm:ss.
OUT(,(".A"))
SYSCAL OPEN,[%CLBIT,,.UAI ? %CLIMM,,DSKI
[SIXBIT /DSK/]
[SIXBIT /DOWN/]
[SIXBIT /MAIL/]
[SIXBIT /SYS/]]
JRST ID1
MOVEI A,DSKI
CALL PRTFIL
.CLOSE DSKI,
ID1: MOVE A,USERS
CAIG A,1
JRST [ OUT(,("AYou're all alone, "))
JRST ID2 ]
OUT(,("A"),D(A),(" Lusers, "))
ID2: EVAL A,SLOADU
MOVEI B,10000.
IDIVM B,A
OUT(,("Fair Share = "),D(A),("%")) ;Print fairshare.
MOVE A,[SQUOZE 0,/MAXJ/]
.EVAL A, ;# possible jobs.
.LOSE %LSSYS
OUT(,(", "),D(FREJOB),(" free/"),D(A),(" jobs"))
SYSCAL OPEN,[ %CLBIT,,.UII ? %CLIMM,,DSKI ;Macsyma here?
[SIXBIT /SYS/]
[SIXBIT /TS/]
[SIXBIT /MACSYM/]]
JRST ID3
SYSCAL CORBLK,[ %CLIMM,,%CBNDR ;Share a page of Macsyma.
%CLIMM,,%JSELF ? %CLIMM,,MAXPAG
%CLIMM,,DSKI ? %CLIMM,,MAXSHR]
JRST ID3
SYSCAL CORTYP,[ %CLIMM,,MAXPAG ? REPEAT 3,%CLOUT,,X
%CLOUT,,A] ;Get number of sharers.
JRST ID3
SYSCAL CORBLK,[ %CLIMM,,0 ;Flush shared page now.
%CLIMM,,%JSELF ? %CLIMM,,MAXPAG]
.LOSE %LSSYS
.CLOSE DSKI,
MOVEI A,-1(A) ;# of Macsyma's
JUMPE A,[ OUT(,(", No MACSYMAs."),CRLF)
JRST ID3 ]
OUT(,(", "),D(A),(" MACSYMA"))
SOSE A
OUTCAL(,("s"))
OUT(,("."),CRLF)
ID3: HRRZ A,TTYNUM
OUT(,("AJob "),D(UIND),SP,6F(UNAME),(", TTY "),O(A),(" at "),TIM(F2),CRLF)
DEATH: .LOGOUT 1,
; Type out the phase of the moon (pretty close, anyway). Code by PDL@DMS.
DEFINE SECS D,H,M,S
<S+<60.*<M+<60.*<H+<24.*D>>>>>>
TERMIN
SPD==<SECS 1> ; 24.*60.*60.
PPOTM: CALL GNDS0 ; get number of days since 1/1/0000
MULI A,SPD ; convert to seconds in a and aa
JFCL 17,.+1 ; clear flags for following
ADD B,PDTIM ; # seconds since beginning of year
ADD B,SYNOFS ; moon doesn't believe in the gregorian calendar
JFCL 4,[AOJA A,.+1] ; cry1
ASHC A,2 ; convert to quarter seconds
DIV A,SYNP ; quarters since then
ASH B,-2 ; convert remainder to seconds
EXCH B,A
IMULI A,30. ; expressed in 1/30ths of a second
ANDI B,3 ; get quarter in B
CALL PTIME
PHASE: MOVE A,VPHASE(B)
OUT(,TZ$(A))
RET
; Get number of days since 1/1/0000 (as of 1/1/current year) in A
GNDS0: PUSH P,B
PUSH P,C
HRRZ C,RYEAR ; get year
MOVEI A,-1(C) ; also get year-1 in a
IMULI C,365. ; first approximation
IDIVI A,4
ADD C,A ; add number of years divisible by 4
IDIVI A,25.
SUB C,A ; subtract number of years divisible by 100
IDIVI A,4
ADD A,C ; add crud already calculated to number of years divisible
AOS A
POP P,C
POP P,B
RET
PTIME: PUSH P,A
PUSH P,B
PUSH P,C
CAIG A,15. ; If remarkably close to the exact quarter
JRST PEXACT ; Then jump
ADDI A,15.
SETZ C,
IDIV A,[30.*60.*60.*24.]
JUMPE A,PHOURS
OUT(,D(A),("D."))
PHOURS: MOVE A,B
IDIVI A,30.*60.*60. ; HOURS IN A
JUMPE A,PMINUT
OUT(,D(A),("H."))
PMINUT: MOVE A,B
IDIVI A,30.*60. ; MINS IN A+1
JUMPE A,PSECON
OUT(,D(A),("M."))
PSECON: MOVE A,B
IDIVI A,30. ; SEC IN A+2
JUMPE A,PTIMEX
OUT(,D(A),("S"))
MOVE C,A
JRST PTIMEX
PEXACT: OUT(,(" exactly!"))
PTIMEX: POP P,C
POP P,B
POP P,A
POPJ P,
POPJ P, ; by 400
GUPTIM: SYSCAL RQDATE,[%CLOUT,,QTIME ? %CLOUT,,QUPTIM]
.LOSE %LSSYS
SETZB C,B
LDB A,[UNMON QTIME]
SOJLE A,[LDB E,[UNMON QUPTIM] ; WIN WHEN YEAR CHANGES
SOJLE E,UPTIM1 ; LOSES IF UP > 1 YR., CHORTLE
MOVEI C,365.
JRST UPTIM1]
ADD C,MONLNG-1(A)
SOJG A,.-1
UPTIM1: LDB A,[UNDAY QTIME]
ADD C,A
IMULI C,SPD
HRRZ A,QTIME
LSH A,-1
ADD C,A
LDB E,[UNMON QUPTIM]
SOJLE E,UPTIM2
ADD B,MONLNG-1(E)
SOJG E,.-1
UPTIM2: LDB E,[UNDAY QUPTIM]
ADD B,E
IMULI B,SPD
HRRZ E,QUPTIM
LSH E,-1
ADD B,E
CAMGE C,B
ADD C,[SPD*365.]
SUB C,B
IMULI C,30.
MOVE A,C
RET
MONLNG: 31.
FEBRUA: 28.
31. ? 30. ? 31. ? 30. ? 31. ? 31. ? 30. ? 31. ? 30. ? 31.
PHASES: [ASCIZ "NM"]
[ASCIZ "FQ"]
[ASCIZ "FM"]
[ASCIZ "LQ"]
VPHASE: [ASCIZ " past new."]
[ASCIZ " into its first quarter."]
[ASCIZ " past full."]
[ASCIZ " into its last quarter."]
UNDATE==3
UNTIM==2200,, ;COMPACTED TIME OF CREATION
UNYMD==222000,, ;Y,M,D OF CREATION
UNMON==270400,, ;MONTH
UNDAY==220500,, ;DAY
UNYRB==330700,, ;YEAR
SYNP: SECS 29.,12.,44.,3
; lunar month expressed in seconds (29d 12h 44m 2.7s)
SYNOFS: SECS 7.,23.,54.,42.
; offset of lunar period in seconds (7d 23h 54m 42s)
; (Basically, phase of the moon is reckoned from something
; like 12/23 in 1 BC.)
; [Note: The above is certainly not true]
;;;; Print time in D (routine from DDT).
TIMPT: MOVEI C,0.
JUMPE D,CPOPJ
CAMGE D,TMT1(C)
AOJA C,.-1
TMP3: IDIV D,TMT1(C)
MOVEI T,60(D)
.IOT TTYO,T
MOVE D,E
TRNN C,1
AOJA C,TMP3
CAIL C,5
RET
.IOT TTYO,[":]
AOJA C,TMP3
TMT1: 36000.
3600.
600.
60.
10.
1
PRTFIL: .IOT DSKI,T
JUMPLE T,CPOPJ
CAIE T,^C
.IOT TTYO,T
JRST PRTFIL
PDLLEN==100
PDL: BLOCK PDLLEN
DIETIM: 0
SYSDBG: 0
USERS: 0
MEMERR: 0
UPTIME: 0
ITSNAM: 0
ITSVER: 0
FREJOB: 0
TIME: 0
UNAME: 0
TTYNUM: 0
UIND: 0
DDTVER: 0
QUPTIM: 0
QTIME: 0
CONSTANTS
VARIABLES
MAXSHR==61 ;Page # from SYS:TS MACSYM to share with.
LASTPG==<.+1777>/2000 ;Start mapping databases here.
MAXPAG==LASTPG
END GO