.TITLE CPT .IDENT /LEN1.0/ ; ; TASK TO RETREIVE TICKS USED FOR T/S TASKS ; THE REQUESTING TASK SENDS A MESSAGE TO ...CPT, WHEREUPON ...CPT ; FETCHES THE CPU TIME (IN TICKS I*4) AND SENDS THIS VALUE BACK TO THE ; REQUESTING TASK. ; ; SENDING AND RECEIVING IN THE REQUESTING TASK ARE DONE BY THE RSD1I.FTN ; PACKAGE (RECEIVE AST) AND GETCPU.MAC, WHICH POKES ...CPT. ; ; - CORRECTIONS - ; ; 10/31/79 LEN ; LDCLF MOVED ONLY 16 BITS - FIXED TO MOVE I*4 TICKS ONTO STACK ; AND THEN TO LDCLF TO LOAD ALL 32 BITS. ; ; .MCALL VRCT$S,VSDA$S,DRERR$ DRERR$ F0 = %0 ; PSW=177776 ; CPT: BR FIRST REC: TST (SP)+ FIRST: VRCT$S ,#TSKN,#1 ; RECEIVE OR STOP CMP @#$DSW,#IS.SET ; IF WE STOPPED, CHECK AGAIN FOR MESSAGE BEQ FIRST ; STOPPED ; ; MESSAGE RECEIVED - GO SCAN THE ATL AND MATCH THE TASK NAME IN THE STD ; GET CPU TICKS FROM THE ATL. ; ;;; MOV PSW,-(SP) ;PSW TO STACK ;;; BIS #140,PSW ;;INHIBIT TASK SWITCHING ; MOV #.ATLLH,R1 ;;ATL LISTHEAD IN R1 MOV .ATLLH+2,-(SP) ;;END OF ATL ON STACK ATL: CMP (R1),(SP) ;;END OF LIST? BEQ REC ;;YEP, DON'T SEND ANYTHING, GET NEXT MESSAGE MOV (R1),R1 ;;GET A NODE MOV A.TD(R1),R2 ;;STD ADR OF TASK IN R2 BEQ ATL ;;IGNORE IF ZERO (EXEC'S TIMESHARE NODES) ; ; CHECK TASK NAME AGAINST STD ENTRY ; CMP TSKN,S.TN(R2) ; FIRST HALF BNE ATL CMP TSKN+2,S.TN+2(R2) ; SECOND HALF BNE ATL ; ; TASK NAME MATCHES - GET TICKS ACCUMULATED ; HI/LO ORDER PARTS ARE FLIPPED, FLIP BACK FOR FORTRAN ; MOV A.TAC+2(R1),-(SP) MOV A.TAC(R1),-(SP) SETF SETL LDCLF (SP)+,F0 ; CONVERT TO FLOATING STF F0,TICS ; AND PUT IT BACK ; ; OK - SEND THE TICKS USED BACK TO THE CALLER ; VSDA$S #TSKN,#TICS,#2,,,#0 BR REC ; CHECK FOR MORE MESSAGES ; .EVEN TSKN: .BLKW 3 TICS: .BLKW 2 ; .END CPT