mirror of
https://github.com/PDP-10/its.git
synced 2026-03-24 17:36:15 +00:00
Fix SST.
This commit is contained in:
345
src/sysen3/sst.11
Normal file
345
src/sysen3/sst.11
Normal 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
|
||||
Reference in New Issue
Block a user