;*****************************************************************************;
; ;
; Super STAT ;
; screen-oriented dynamic system status monitor ;
; ;
; author: David F. Pallmann ;
; Donated to AMUS on 04-Apr-84 ;
; Enhanced at MARCOM, Inc. By: Doug Azzarito ;
; Enhanced at NTSC By Cary Fitch 11/13/85 ;
; Enhanced at NTSC By Cary Fitch 01/30/86 ;
; Enhanced at NTSC By Cary Fitch 01/31/86 ;
;***************************************************************************;
OBJNAM SPSTAT.LIT
VMAJOR=2
;edit history
VEDIT=100. ;17-Dec-83 DFP creation.
VEDIT=101. ;05-Jan-84 DFP [P,PN]s were displayed in hex after a SET HEX
VEDIT=102. ;19-Jul-85 DAA Added CPU time, more Jobs/Page
VEDIT=103. ;11-Nov-85 DAA Added system up time.
VEDIT=104. ;13-Nov-85 FCF Added Slow & Fast Help instructions
VEDIT=105. ;13-Nov-85 FCF Corrected flow so Slow and Fast work
; when (Jobs in use) = (Jobs allocated)
VEDIT=106. ;05-Jan-86 FCF Check keyboard buffer until all pending
; inputs are processed to speed up mode changes
VEDIT=107. ;29-Jan-86 FCF Added variable speeds for update
; Slow = low system overhead "S"
; Med. = med.overhead "M"
; Fast = ...all together now..."high overhead" "F"
VEDIT=108. ;30-Jan-86 FCF Added 10 Speeds for update "1 - 0"
VEDIT=109. ;30-JAN-86 FCF Added speed report in upper right hand corner
VEDIT=110. ;31-JAN-86 FCF Fixed problem in clearing DEV & PPN display
; on LOGOFF
VEDIT=111. ;31-jan-86 FCF Added "Arrow Control" "A & Z"
VEDIT=112. ;16-feb-86 FCF reduced space blanking to 1 after queue display
VEDIT=113. ;26-feb-86 DKM fixed display of AMOS ver. was NDOS/L to AMOS/L
;registers
JOBLCL=A3 ;index to job data in local memory
JOBSYS=A4 ;index to job data in system memory
IMP=A5 ;impure index
ROW=D5 ;cursor row
;job data entry
OFINI
OFDEF JB.NAM,4 ;job name RAD50
OFDEF JB.TRM,4 ;job terminal name RAD50
OFDEF JB.DEV,2 ;job log-device
OFDEF JB.DRV,2 ;job log-drive
OFDEF JB.PPN,2 ;job log-PPN
OFDEF JB.PRG,4 ;job program name
OFDEF JB.STS,2 ;job status
OFDEF JB.MEM,2 ;job memory (K bytes)
OFDEF JB.RED,4 ;disk reads
OFDEF JB.WRT,4 ;disk writes
OFDEF JB.CPU,4 ; CPU time
OFSIZ JB.SIZ
;impure area
OFINI
OFDEF STATUS,2 ;saved JCB JOBTYP word
OFDEF JOBDAT,JB.SIZ*22. ;job data area
OFDEF JOBOFF,2 ;job offset count
OFDEF JOBCNT,2 ;number of jobs
OFDEF BUFFER,10 ;PACK-UNPACK buffer
OFDEF ACTJOB,2 ;last job active
OFDEF HD.DAT,4 ;header - date
OFDEF HD.QUE,4 ;header - free queue blocks
OFDEF HD.TIM,4 ;header - time
OFDEF TEMP,4 ;temporary work area
OFDEF CPUHOLD,14 ; CPU time hold area
OFDEF SPEED,4 ; screen speed flag [108. CF]
OFDEF CHRSAV,1 ; last character from KBD
OFDEF AROFLG,1 ; flag for arrow display
OFSIZ IMPSIZ
;standard initialization code
START: PHDR -1,0,PH$REE!PH$REU ;program header
GETIMP IMPSIZ,IMP ;allocate impure area
; CLRW JOBOFF(IMP)
MOVL #10000.,SPEED(IMP) ; set med. speed [107 CF]
MOVB #'M,CHRSAV(IMP)
MOVB #-1,AROFLG(IMP)
;set user terminal to data mode, no-echo, cursor off
SETTRM: MOV JOBCUR,A6
MOV JOBTRM(A6),A6
ORW #<T$DAT!T$ECS>,T.STS(A6)
CRT #29.
;count number of jobs
CNTJOB: CLR D2
MOV JOBTBL,A0
10$: MOV (A0)+,D0
BEQ 10$
BMI 20$
INC D2
BR 10$
20$: MOVW D2,JOBCNT(IMP)
;save job type and temporarily force a SET OCTAL
RADIX8: MOV JOBCUR,A0
MOVW JOBTYP(A0),STATUS(IMP)
ANDW #^C<J.HEX>,JOBTYP(A0)
;set up screen background
BCKGND: CRT #0
CRT #12.
TTYI
ASCIZ "AMOS/L Ver. "
EVEN
VCVT 2,OT$TRM
CRT #11.
CRT #1,#24.
TYPE Queue:
CRT #1,#35.
TYPE Date:
CRT #1,#50.
TYPE Time:
CRT #1,#64.
TYPE Up:
CRT #2,#79.
CRT #31.
CRT #1,#80.
CRT #30.
CRT #2,#1
TYPE Job Name Log-In Prog State Memory Reads Writes CPU time CPU
; CRT #31.
;initialize header data
INIHDR: MOV #-1,HD.DAT(IMP)
MOV #-1,HD.QUE(IMP)
MOV #-1,HD.TIM(IMP)
;initialize job data area to insure full screen display
INIJOB: LEA JOBLCL,JOBDAT(IMP)
MOV #22.,D0
10$: CLR JB.NAM(JOBLCL)
CLR JB.TRM(JOBLCL)
CLRW JB.DEV(JOBLCL)
MOVW #-2,JB.DRV(JOBLCL)
MOVW #<<1_8.>+0>,JB.PPN(JOBLCL)
CLR JB.PRG(JOBLCL)
CLRW JB.STS(JOBLCL)
MOVW #-1,JB.MEM(JOBLCL)
MOV #-1,JB.RED(JOBLCL)
MOV #-1,JB.WRT(JOBLCL)
MOV #-1,JB.CPU(JOBLCL)
ADD #JB.SIZ,JOBLCL
SOB D0,10$
;reset active job arrow count
SETACT: MOVW #3,ACTJOB(IMP)
;update header
HEADER: CALL CMDCHK ;process any pending commands
CALL UPDQUE ;update queue
CALL UPDDAT ;update date
CALL UPDTIM ;update time
CALL CHRUPD ;update "speed" char [109 CF]
;begin job scan
;locate initial job by adding JOBOFF(IMP)*4 to JOBTBL
JOBSCN: MOV JOBTBL,A2
MOVW JOBOFF(IMP),D0
ROL D0,#2
ADD D0,A2
MOV #22.,D2
MOV #3.,ROW
LEA JOBLCL,JOBDAT(IMP)
;update a single job
UPDJOB: MOV (A2)+,D0
BEQ NXTJOB
BMI NOD ; was HEADER [105, FCF]
MOV D0,JOBSYS
SAVE A0-A5,D0-D5
CALL UPDNAM ;update job name
CALL UPDTRM ;update job terminal name
CALL UPDACT ;update job log account
CALL UPDPRG ;update program name
CALL UPDSTS ;update job status
CALL UPDMEM ;update job memory
CALL UPDRED ;update disk reads
CALL UPDWRT ;update disk writes
CALL UPDCPU ;update job priority
REST A0-A5,D0-D5
NXTJOB: INCW ROW
ADD #JB.SIZ,JOBLCL
SOB D2,UPDJOB
;sleep so other jobs can run
; NOD is new label [105, FCF]
NOD: TSTB AROFLG(IMP)
BEQ NOZAP
CALL ZAPARW ; Erase the arrow while sleeping
NOZAP: MOVL SPEED(IMP),D6 ; fast med. or slow? [107, CF]
SLEEP
JMP HEADER
DEFINE STATUS BIT,NAME
WORD BIT
ASCIZ "'NAME"
ENDM
STSTBL: STATUS J.IOW,IOW
STATUS 100000,RUN
STATUS J.MON,mon
STATUS J.TIW,tiw
STATUS J.TOW,tow
STATUS J.EXW,exw
STATUS J.SMW,smw
STATUS J.SLP,slp
STATUS J.FIL,lok
STATUS J.CCC,<^C >
0