diff --git a/src/sysen3/sst.11 b/src/sysen3/sst.11 new file mode 100644 index 00000000..7fd028b7 --- /dev/null +++ b/src/sysen3/sst.11 @@ -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 + >>>>> +TERMIN + +SPD== ; 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