;*****************************************************************************; ; ; ; 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 ;universals SEARCH SYS SEARCH SYSSYM SEARCH MACLIB SEARCH TRM EXTERN $OTCPU,$OTCON ;ASCII characters ESC=33 ;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 DEFINE DEPACK ADDR,COL,COUNT LEA A1,ADDR LEA A2,BUFFER(IMP) UNPACK IF GT,ROW-1,UNPACK CLRB @A2 CRT #12. CRT ROW,COL TTYL BUFFER(IMP) ENDM ;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.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,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) ;clear job update sub-screen CLRSCR: CRT #3,#1 CRT #10. ;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 PAGE ;update date UPDDAT: GDATES TEMP(IMP) CMM TEMP(IMP),HD.DAT(IMP) REQ MOV TEMP(IMP),HD.DAT(IMP) CRT #12. CRT #1,#40. CLR D1 MOVB HD.DAT+1(IMP),D1 DCVT 2,OT$TRM TYPE - MOVB HD.DAT(IMP),D1 DECB D1 ADD D1,D1 ADD D1,D1 LEA A0,MONTHS ADD D1,A0 TTYL @A0 TYPE - MOVB HD.DAT+2(IMP),D1 DCVT 2,OT$TRM RTN ;update free queue block count UPDQUE: MOV QFREE,D0 CMM D0,HD.QUE(IMP) REQ MOV D0,HD.QUE(IMP) CRT #12. CRT #1,#30. MOV D0,D1 DCVT 0,OT$TRM TYPE < > ; reduced from 3 spaces to one space [112. CF] RTN ;update time UPDTIM: GTIMES TEMP(IMP) CMM TEMP(IMP),HD.TIM(IMP) REQ MOV TEMP(IMP),HD.TIM(IMP) CRT #12. CRT #1,#55. CLR D1 MOVB HD.TIM(IMP),D1 DCVT 2,OT$TRM TYPE : MOVB HD.TIM+1(IMP),D1 DCVT 2,OT$TRM TYPE : MOVB HD.TIM+2(IMP),D1 DCVT 2,OT$TRM CALL UPDUTM RTN ;update Uptime UPDUTM: CRT #1,#67. CLR D1 MOV D1,A2 MOV UPTIME,BUFFER(IMP) MOV BUFFER(IMP),D1 CALL $OTCON RTN PAGE ;update job name UPDNAM: MOV JOBNAM(JOBSYS),D0 CMM D0,JB.NAM(JOBLCL) REQ MOV D0,JB.NAM(JOBLCL) DEPACK JB.NAM(JOBLCL),#1,2 JMP ARROW ;update job terminal name UPDTRM: MOV JOBTRM(JOBSYS),D0 BEQ 10$ MOV D0,A0 MOV -4(A0),D0 10$: CMM D0,JB.TRM(JOBLCL) REQ MOV D0,JB.TRM(JOBLCL) DEPACK JB.TRM(JOBLCL),#8.,2 JMP ARROW ;update log account UPDACT: CLR D0 CLR D2 CLR D3 MOVW JOBDEV(JOBSYS),D0 MOVW JOBDRV(JOBSYS),D2 MOVW JOBUSR(JOBSYS),D3 BNE 10$ CLRW D0 MOVW #-1,D2 10$: CMPW D0,JB.DEV(JOBLCL) BNE 20$ CMPW D2,JB.DRV(JOBLCL) BNE 20$ CMPW D3,JB.PPN(JOBLCL) REQ 20$: MOVW D0,JB.DEV(JOBLCL) MOVW D2,JB.DRV(JOBLCL) MOVW D3,JB.PPN(JOBLCL) JEQ 50$ CRT #12. CRT ROW,#15. TSTW D0 BNE 30$ TYPE < > BR 40$ 30$: LEA A1,JB.DEV(JOBLCL) LEA A2,BUFFER(IMP) UNPACK CLRB @A2 TTYL BUFFER(IMP) MOVW D2,D1 DCVT 0,OT$TRM TYPE : CMPW D2,#9. BGT 40$ TYPESP 40$: MOV D3,D1 BEQ 50$ RORW D1,#8. AND #377,D1 OCVT 3,OT$TRM!OT$ZER TYPE <,> MOV D3,D1 AND #377,D1 OCVT 0,OT$TRM CMPW D1,#77 BGT 60$ TYPESP CMPW D1,#7 BGT 60$ TYPESP BR 60$ 50$: CRT #11. CRT ROW,#15. TYPE < > ; [110 CF] blank DEV & PPN 60$: JMP ARROW ;update job program UPDPRG: MOV JOBPRG(JOBSYS),D0 CMM D0,JB.PRG(JOBLCL) REQ MOV D0,JB.PRG(JOBLCL) DEPACK JB.PRG(JOBLCL),#29.,2 JMP ARROW ;update job status UPDSTS: CLR D0 CLR D2 MOVW JOBSTS(JOBSYS),D0 10$: LEA A0,STSTBL 20$: TSTW @A0 BEQ 30$ MOVW (A0)+,D2 ADD #4,A0 MOVW D0,D7 ANDW D2,D7 BEQ 20$ LEA A1,-4(A0) BR 40$ 30$: MOV #100000,D0 BR 10$ 40$: CMMW D2,JB.STS(JOBLCL) BNE 50$ CMMW D2,#J.IOW JEQ ARROW CMPW D2,#100000 RNE JMP ARROW 50$: MOVW D2,JB.STS(JOBLCL) CRT ROW,#36. CMPB @A1,#'a BGE 60$ CRT #12. BR 70$ 60$: CRT #11. 70$: TTYL @A1 JMP ARROW UPDMEM: MOV JOBSIZ(JOBSYS),D0 DIV D0,#1024. AND #177777,D0 CMMW D0,JB.MEM(JOBLCL) REQ MOVW D0,JB.MEM(JOBLCL) CRT #12. CRT ROW,#41. MOV D0,D1 BEQ 10$ DCVT 5,OT$TRM!OT$ZER TYPE K BR 20$ 10$: CRT #11. TYPE < none> 20$: JMP ARROW UPDRED: MOV JOBDSR(JOBSYS),D0 CMM D0,JB.RED(JOBLCL) REQ MOV D0,JB.RED(JOBLCL) CRT #12. CRT ROW,#48. MOV D0,D1 BEQ 10$ DCVT 8.,OT$TRM!OT$ZER BR 20$ 10$: CRT #11. TYPE < none> 20$: JMP ARROW UPDWRT: MOV JOBDSW(JOBSYS),D0 CMM D0,JB.WRT(JOBLCL) REQ MOV D0,JB.WRT(JOBLCL) CRT #12. CRT ROW,#56. MOV D0,D1 BEQ 10$ DCVT 8.,OT$TRM!OT$ZER BR 20$ 10$: CRT #11. TYPE < none> 20$: JMP ARROW UPDCPU: MOV JOBCPU(JOBSYS),D1 CMM D1,JB.CPU(JOBLCL) REQ MOV D1,JB.CPU(JOBLCL) LEA A2,CPUHOLD(IMP) CALL $OTCPU CLRB @A2 CRT #12. CRT ROW,#65. TTYL CPUHOLD(IMP) JMP ARROW 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 ;update job arrow ARROW: TSTB AROFLG(IMP) REQ CLR D1 CMMW ROW,ACTJOB(IMP) REQ CRT ROW,#75. CRT #12. TTYI ASCIZ " <--" EVEN ZAPARW: CRT ACTJOB(IMP),#75. TYPE < > MOVW ROW,ACTJOB(IMP) RTN ;check for command CMDCHK: TCKI ;char ready? RNE ; no KBD ; yes - put in D1 AND #177,D1 ;mask to 7-bit ASCII UCS ;fold to upper case LEA A0,CMDTBL ;index command table MOV #-2,D0 10$: TSTB @A0 REQ ADD #2,D0 CMMB (A0)+,D1 BNE 10$ ; MOVB D1,CHRSAV(IMP) ; save the last KBD TJMP D0 OFFSET QUIT ;^C - exit OFFSET BCKPAG ;^R - back display page OFFSET FWDPAG ;^T - forward display page OFFSET QUIT ;ESC - exit OFFSET HOLD ;SPC - hold till next character OFFSET HELP ;H - help (command summary) OFFSET RESET ;R - restart display OFFSET FAST ;F - fast refresh OFFSET MEDIUM ;S - med. refresh [107 CF] OFFSET SLOW ;S - slow refresh OFFSET S1 ; multi speed refresh OFFSET S2 OFFSET S3 OFFSET S4 OFFSET S5 OFFSET S6 OFFSET S7 OFFSET S8 OFFSET S9 OFFSET S0 OFFSET AROWON ; [111 CF] OFFSET AROWOF ; [111 CF] OFFSET QUIT ; [111 CF] OFFSET QUIT ; [111 CF] ;back display page BCKPAG: TSTW JOBOFF(IMP) BEQ CMDCHK REQ SUBW #22.,JOBOFF(IMP) JMP RESET ;forward display page FWDPAG: MOVW JOBOFF(IMP),D0 ADD #22.,D0 CMMW D0,JOBCNT(IMP) BLT 10$ JEQ CMDCHK RTN 10$: MOVW D0,JOBOFF(IMP) JMP RESET ;hold display HOLD: CRT #1,#67. CRT #21. TYPE < HOLD > CRT #22. KBD CRT #1,#67. TYPE < > JMP CMDCHK ;fast refresh FAST: MOVB D1,CHRSAV(IMP) ; [109 CF] CALL CHRUPD MOVL #1000,SPEED(IMP) ; [107 CF] JMP CMDCHK ; [106 CF] ;medium refresh MEDIUM: MOVB D1,CHRSAV(IMP) ; [109 CF] CALL CHRUPD MOVL #5000.,SPEED(IMP) ; [107 CF] JMP CMDCHK ; [107 CF] ;slow refresh SLOW: MOVB D1,CHRSAV(IMP) ; [109 CF] CALL CHRUPD MOVL #50000.,SPEED(IMP) ; [107 CF] JMP CMDCHK ; [106 CF] ;var. refresh S1: MOVB D1,CHRSAV(IMP) ; [109 CF] CALL CHRUPD MOVL #100000.,SPEED(IMP) ; [108 CF] JMP CMDCHK ; [108 CF] S2: MOVB D1,CHRSAV(IMP) ; [109 CF] CALL CHRUPD MOVL #80000.,SPEED(IMP) ; [108 CF] JMP CMDCHK ; [108 CF] S3: MOVB D1,CHRSAV(IMP) ; [109 CF] CALL CHRUPD MOVL #60000.,SPEED(IMP) ; [108 CF] JMP CMDCHK ; [108 CF] S4: MOVB D1,CHRSAV(IMP) ; [109 CF] CALL CHRUPD MOVL #40000.,SPEED(IMP) ; [108 CF] JMP CMDCHK ; [108 CF] S5: MOVB D1,CHRSAV(IMP) ; [109 CF] CALL CHRUPD MOVL #30000.,SPEED(IMP) ; [108 CF] JMP CMDCHK ; [108 CF] S6: MOVB D1,CHRSAV(IMP) ; [109 CF] CALL CHRUPD MOVL #20000.,SPEED(IMP) ; [108 CF] JMP CMDCHK ; [108 CF] S7: MOVB D1,CHRSAV(IMP) ; [109 CF] CALL CHRUPD MOVL #10000.,SPEED(IMP) ; [108 CF] JMP CMDCHK ; [108 CF] S8: MOVB D1,CHRSAV(IMP) ; [109 CF] CALL CHRUPD MOVL #5000.,SPEED(IMP) ; [108 CF] JMP CMDCHK ; [108 CF] S9: MOVB D1,CHRSAV(IMP) ; [109 CF] CALL CHRUPD ; [109 CF] MOVL #1000.,SPEED(IMP) ; [108 CF] JMP CMDCHK ; [108 CF] S0: MOVB D1,CHRSAV(IMP) ; [109 CF] CALL CHRUPD ; [109 MOVL #100.,SPEED(IMP) ; [108 CF] JMP CMDCHK ; [108 CF] AROWON: MOVB #-1,AROFLG(IMP) ; [111 CF] JMP CMDCHK ; [111 CF] AROWOF: MOVB #0,AROFLG(IMP) ; [111 CF] JMP CMDCHK ; [111 CF] CHRUPD: CRT #1,#77. MOVB CHRSAV(IMP),D1 TTY RTN ;help HELP: CRT #0 CRT #12. CRLF TYPECR CRLF CRLF CRT #12. TYPECR < display commands:> CRLF CRT #11. TYPECR < H - help (Display this screen)> TYPECR < R - reset display> TYPECR < F - fast update> ; [104, FCF] TYPECR < M - med. update> ; [107, FCF] TYPECR < S - slow update> ; [104, FCF] TYPECR < 1-0 - var. update> ; [108, FCF] TYPECR < A - arrow on> TYPECR < Z - zap the arrow> TYPECR < CTRL-R - back display page> TYPECR < CTRL-T - forward display page> TYPECR < [space] - suspend Super STAT> CRLF CRT #12. TYPECR < exit commands:> CRLF CRT #11. TYPECR < ctrl-C - exit to AMOS> TYPECR < [ESC] - exit to AMOS> CRT #23.,#1 TYPESP Depress any key to continue: KBD ;fall thru to RESET ;restart display RESET: POP JMP BCKGND ;clear screen, re-enable cursor, set high intensity, and exit QUIT: CRT #0 CRT #28. CRT #12. MOV JOBCUR,A0 ;index own JCB MOVW STATUS(IMP),JOBTYP(A0) ;restore user's job flags EXIT: CRLF EXIT PAGE CMDTBL: BYTE 'C-'@,'R-'@,'T-'@,ESC ASCIZ " HRFMS1234567890AZEQ" EVEN DEFINE MONTH NAME ASCIZ "'NAME" ENDM MONTHS: MONTH Jan MONTH Feb MONTH Mar MONTH Apr MONTH May MONTH Jun MONTH Jul MONTH Aug MONTH Sep MONTH Oct MONTH Nov MONTH Dec END .