.TITLE TSFOVR .IDENT /V7.04/ ;****************************************************************** ; ; TSFOVR THIS OVERLAY PROCESSES A REQUEST FROM THE TSF ; COMMAND. ; THE BATCH SYSTEM ALSO REQUESTS PROCESSING VIA THIS ; OVERLAY. ; ; VERSION: V6 FEBRUARY 1980 ; VERSION: V7 JANUARY 1981 ; ; STEVE THOMPSON SCHOOL OF CHEMICAL ENGINEERING ; OLIN HALL ; CORNELL UNIVERSITY ; ITHACA NY 14853 ; ; REVISION HISTORY ; ---------------- ; ; SMT718 20-JUL-81 ADDED PAGE COUNT TO DATA TRANSMITTED ; ; SMT753 7-OCT-81 CHANGED NAMES OF CONDITIONAL ASSEMBLY ; PARAMETERS; SEE THE FILES MODIFY.TXT AND ; CONDEF.MAC FOR DETAILS. ; ; SMT768 12-OCT-81 SMALL CHANGES TO CODE TO REMOVE A FEW ; WORDS. ; ;****************************************************************** TCBADR: .WORD 0 ; REQUESTOR'S TCB ADDRESS $TSFEP:: .IF DF AA$TSF ! AA$BAT MOV B.TTCB(R5),TCBADR ; SAVE REQUESTOR'S TCB ADDRESS CLR B.TTCB(R5) ; SET NO TASKS FOUND CLR B.TCON(R5) ; SET ZERO CONNECT TIME CLR B.TCON+2(R5) ; CLR B.CSF(R5) ; THERE'S NO CPU TIME CLR B.CSF+2(R5) ; .IF DF AA$QIO & AA$TCQ CLR B.ISF(R5) ; OR I/O REQUESTS CLR B.ISF+2(R5) ; .ENDC ; DF AA$QIO & AA$TCQ MOV B.UCB(R5),R0 ; GET THE UCB ADDRESS CALL $LUAB ; LOOK IN BUFFERS FOR IT BCS 40$ ; IF CS WE HAVE NO INFORMATION BIT #AC.STP,B.TTYP(R5) ; DO WE WANT INFORMATION ON TASKS ; THAT HAVE ALREADY FINISHED? BEQ 10$ ; IF EQ NO MOV L$PAGE(R1),B.PSF(R5) ; SAVE PAGE COUNT MOV L$NTSK(R1),B.TTCB(R5) ; SAVE NUMBER OF TASKS RUN MOV L$CPU(R1),B.CSF(R5) ; STORE WHAT WE FIND MOV L$CPU+2(R1),B.CSF+2(R5) ; .IF DF AA$QIO & AA$TCQ MOV L$QIO(R1),B.ISF(R5) ; SAVE I/O REQUEST COUNT MOV L$QIO+2(R1),B.ISF+2(R5) ; .ENDC ; DF AA$QIO & AA$TCQ 10$: ; REF. LABEL CALL $SWSTK,50$ ; YES, SWITCH STACKS MOV $ACCHD,R2 ;; GET LOCATION OF LISTHEAD BEQ 40$ ;; IF EQ WE HAVEN'T GOT IT YET MTPS #PR7 ;; LOCK OUT INTERRUPTS MOV 6(R2),B.TCON(R5) ;;; SAVE CURRENT TIME MOV 10(R2),B.TCON+2(R5) ;;; MTPS #0 ;;; ALLOW INTERRUPTS SUB L$CONN+2(R1),B.TCON+2(R5) ;; CALCULATE CONNECT TIME SBC B.TCON(R5) ;; SUB L$CONN(R1),B.TCON(R5) ;; BIT #AC.RUN,B.TTYP(R5) ;; DO WE WANT RUNNING TASKS? BEQ 40$ ;; IF EQ NO, RESTART REQUESTOR NOW 20$: MOV (R2),R2 ;; GET ADDRESS OF NEXT ENTRY BEQ 40$ ;; IF EQ END OF LIST CMP B.UCB(R5),B.UCB(R2) ;; DOES THIS TASK HAVE THE RIGHT TI:? BNE 20$ ;; IF NE NO, LOOP MTPS #PR7 ;; YES, LOCK OUT INTERRUPTS ADD B.CPU+2(R2),B.CSF+2(R5) ;;; ADD IN ITS CPU TIME ADC B.CSF(R5) ;;; ADD B.CPU(R2),B.CSF(R5) ;;; MTPS #0 ;;; ALLOW INTERRUPTS AGAIN .IF DF AA$QIO & AA$TCQ ADD B.QIO+2(R2),B.ISF+2(R5) ;; ADD IN I/O REQUESTS ADC B.ISF(R5) ;; ADD B.QIO(R2),B.ISF(R5) ;; .ENDC ; DF AA$QIO & AA$TCQ INC B.TTCB(R5) ;; ONE MORE TASK FOUND BR 20$ ;; LOOP 40$: MOV TCBADR,R0 ;; GET TCB ADDRESS OF REQUESTOR CALLR $EXRQN ;; AND RESTART IT .ENDC ; DF AA$TSF ! AA$BAT 50$: RETURN ; RETURN TO CALLER .END