; ; AUTHOR: ; R. STODOLA ; THE INSTITUTE FOR CANCER RESEARCH ; 7701 BURHOLME AVE. ; PHILADELPHIA, PA. 19111 ; ; ******************************************************* ; * * ; * THIS SOFTWARE WAS DEVELOPED WITH SUPPORT * ; * FROM THE NATIONAL INSTITUTES OF HEALTH: * ; * NIH CA06927 * ; * NIH CA22780 * ; * * ; * DIRECT INQUIRIES TO: * ; * COMPUTER CENTER * ; * THE INSTITUTE FOR CANCER RESEARCH * ; * 7701 BURHOLME AVENUE * ; * PHILADELPHIA, PENNSYLVANIA 19111 * ; * * ; * NO WARRANTY OR REPRESENTATION, EXPRESS OR * ; * IMPLIED, IS MADE WITH RESPECT TO THE * ; * CORRECTNESS, COMPLETENESS, OR USEFULNESS * ; * OF THIS SOFTWARE, NOR THAT USE OF THIS * ; * SOFTWARE MIGHT NOT INFRINGE PRIVATELY * ; * OWNED RIGHTS. * ; * * ; * NO LIABILITY IS ASSUMED WITH RESPECT TO * ; * THE USE OF, OR FOR DAMAGES RESULTING FROM * ; * THE USE OF THIS SOFTWARE * ; * * ; ******************************************************* ; * * ; * THIS SOFTWARE WAS DESIGNED FOR USE ON A * ; * PDP-11/70 OPERATING UNDER IAS V2.0 USING * ; * THE IAS PDP-11 MACRO ASSEMBLER. * ; * * ; ******************************************************* .TITLE ..UMON -- APG MONITOR PROGRAM .IDENT /ICR001/ .MCALL QIOW$S,MRKT$S,WTSE$S,EXIT$S,ALUN$S,VRCX$S .MCALL .INH0,.ENB0 ; ; **** NOTE **** ; THIS TASK MUST OPERATE AT A HIGHER PRIORITY THAN THE TASK ; IT IS MONITORING. ; ; ..UMON COLLECTS THE DATA WHICH MAY BE USED BY APG TO CREATE THE ; ACTIVITY HISTOGRAM. IT MAY BE CALLED INTO ACTION IN ONE OF TWO ; WAYS: ; 1) TO MONITOR THE CALLING PROGRAM. ; SEND A DATA MESSAGE VIA RESUME OR REQUEST RECEIVER ; SYSTEM CALL TO TASK ..UMON CONTAINING: ; NTICK,0,0,0,0 ; NTICK IS THE TIME BETWEEN SAMPLING EXPRESSED IN TICKS (1/60TH ; SECOND FOR 60HZ LINE CLOCKS, 1/50TH FOR 50HZ LINE CLOCKS, ; AND OTHER (USUALLY 1/100TH SECOND) FOR PROGRAMMABLE CLOCKS). ; IF ZERO, THE DEFAULT (1) IS USED. ; 2) TO MONITOR ANOTHER PROGRAM. ; SEND A DATA MESSAGE VIA RESUME OR REQUEST RECEIVER ; TO SYSTEM TASK ..UMON CONTAINING: ; NTICK,TASK1,TASK2,TTDEV,TTUNIT ; NTICK IS SAME AS ABOVE. TASK1 AND TASK2 CONTAIN THE ; SIX RADIX-50 CHARACTERS OF THE TASK NAME, TTDEV IS ; THE NAME OF THE TI DEVICE OF THE JOB, AND TTUNIT IS ; THE UNIT NUMBER. ALL FOUR WORDS MUST BE SUPPLIED. ; WHEN CALLED INTO ACTION, ..UMON WILL TYPE TO THE TI: ; APG MONITOR ON ; WHEN FINISHED (EITHER BY THE TASK EXITTING, ABORTING, OR BY ; ONE 32 WORD CELL INCREMENTING TO 65535), THE PROGRAM WILL ; TYPE: ; APG MONITOR OFF ; THIS MAY ALSO OCCUR IF THE MONITORED TASK IS RAISED TO A HIGHER ; PRIORITY LEVEL THAN ..UMON. ; .PSECT UCOM RW,D MW=. .=.+4000 .PSECT ; MES1: .BYTE 15,12 .ASCII /APG MONITOR ON/ .BYTE 15,12 MES1L=.-MES1 .EVEN MES2: .BYTE 15,12 .ASCII /APG MONITOR OFF/ .BYTE 15,12 MES2L=.-MES2 .EVEN ; BUF: .WORD 0,0,0,0,0,0,0 ;RECEIVER BUFFER. TASK=BUF NTK=BUF+4 ALTSK=BUF+6 ALTRD=BUF+12 ALTRU=BUF+14 TI: .WORD 0,0 ;TI OF MONITORED PROGRAM ; START: VRCX$S ,#BUF,#5,#TI ;RECEIVE REQUEST OR EXIT. TSTB @#$DSW ;EXIT IF BAD. BGE GO EXIT: EXIT$S ; GO: TST ALTSK ;HAS A NEW TASK BEEN SUPPLIED? BEQ GETTI ;NO, SO MONITOR CALLING TASK. MOV ALTSK,TASK ;YES, SO SET NEW INFORMATION MOV ALTSK+2,TASK+2 MOV ALTRD,TI MOV ALTRU,TI+2 BR GOTTI GETTI: MOV TI,R0 ;XLATE PUD INTO DEV, UNIT. MOV U.DN(R0),TI MOVB U.UN(R0),TI+2 GOTTI: ALUN$S #1,TI,TI+2 ;ASSIGN LU=1 TO TI. TSTB @#$DSW ;VANISH IF ERROR. BLT EXIT MOV #MW,R1 MOV #2000,R0 LOOPC: CLR (R1)+ DEC R0 BGT LOOPC QIOW$S #IO.WBT,#1,#1,,,,<#MES1,#MES1L,#0> TST NTK ;MAKE SURE VALID # OF TICKS. BGT LOOP MOV #1,NTK ;DEFAULT TO ONE TICK. ; ; THIS IS THE TICKING LOOP. ; LOOP: MRKT$S #1,NTK,#1 ;WAIT FOR NTK TICKS. WTSE$S #1 .INH0 ;INHIBIT TASK SWITCHING. CLR R4 ;CLEAR INACTIVE FLAG. MOV @#.CRTSK,R1 ;BEGIN SEARCH AFTER THIS TASK ATL NODE. LOOP1: MOV (R1),R1 ;GET NEXT ATL ENTRY CMP R1,#.ATLLH ;IF END OF LIST, CEASE MONITORING. BEQ EOLX MOV A.TD(R1),R2 ;NO. GET STD ENTRY. CMP S.TN(R2),TASK ;IS IT MONITORED TASK? BNE EOLP1 ;NO. CMP S.TN+2(R2),TASK+2 BNE EOLP1 ;NO TST R4 ;IF INACTIVE FLAG SET, IGNORE. BNE INACT CMPB A.TS(R1),#10 ;YES. IS RUNNING? BNE INACT ;NO, SO IGNORE THIS COUNT. ACTIV: MOV #2002,-(SP) ;TASK IS ACTIVE, SO READ PC. MOV A.HA(R1),-(SP) CALL @#..SPD3 ;SWAP APR3 FOR TASK HEADER. MOV @#60000+H.TPC,R0;GET PC. CALL ..SPD3 ;RETRIEVE OLD APR3 CMP (SP)+,(SP)+ ASH #-6,R0 ;DIVIDE BY 64 TO GET CELL. BIC #176000,R0 ASL R0 ;INCREMENT CELL COUNT. INC MW(R0) CMP MW(R0),#-1 ;IF 2**16-1, QUIT. BEQ EOLX INACT: .ENB0 BR LOOP EOLP1: CMP #10,A.TS(R1) ;IF THIS TASK WAS ACTIVE, SPLIT. BNE LOOP1 INC R4 BR LOOP1 ; EOLX: .ENB0 ;RESTORE INTERRUPTS QIOW$S #IO.WBT,#1,#2,,,,<#MES2,#MES2L,#0> EXIT$S ;EXIT. ; .END START