.TITLE HISTEN - HISTOGRAM ENTRY ROUTINE .IDENT /17MAY7/ ;13:35:00 LV ; .ENTRY HISTEN - HISTOGRAM ENTRY ROUTINE ;+ ; H I S T E N ; ; PURPOSE: ENTERS AN EVENT IN A HISTOGRAM ; ; INTERFACE: CALLING SEQUENCE: (FORTRAN-CALLABLE SUBROUTINE) ; CALL HISTEN(N,DATA) ; ; INPUT: N (INTEGER) = HISTOGRAM NUMBER ; DATA (INTEGER ARRAY) = EVENT DATA BLOCK ; ; ; METHOD: THIS ROUTINE ENTERS AN EVENT IN A HISTOGRAM BY ; INCREMENTING THE APPROPRIATE HISTOGRAM CHANNEL. THE ; HISTOGRAM IS REFERRED TO BY NUMBER, AND THE EVENT IS ; DESCRIBED BY A BLOCK OF DATA. THE INFORMATION NEEDED ; FOR HISTOGRAMMING IS EXTRACTED FROM FIELDS IN ; THE DATA BLOCK SPECIFIED IN THE HDA WHEN THE ; HISTOGRAM WAS SET UP. ; ; EVENT FLAG 22. IS USED BY THIS SUBROUTINE. ; ; LANGUAGE: MACRO-11 ; ; REFERENCES: "HISTOGRAMMING AND HISTOGRAM PLOTTING" ;- ; ; REVISIONS: ; 05-JUN-75 MK WRITTEN ; 06-JUL-75 MK MESSAGE AND AST CODE CHANGED TO INTERFACE ; WITH HSTMGE VERSION D757A1. ; 01-OCT-75 MK CORE UPDATE ACKNOWLEDGE CHANGED FROM ; AST TO EVENT FLAG TO AVOID AST LOCKOUT ; PROBLEM IN ANALYZER. ; 02-FEB-77 NS CHANGE GLOBAL NAMES IN HCOM1 TO AVOID NAME ; CONFLICTS. CQ=H.CORQ, CQEND=H.CQND, CQLGTH=H.CQL, ; CQPTR=H.CQPT, CUPDRQ=H.CUPQ, ENABL=H.ENBL, ; HDBPTR=H.DBPT, LOCK=H.LOCK, MAXHST=H.MXHT, ; UFLG=H.UFLG ; 04-FEB-77 NS CHANGE REFERENCES FROM H.CQWD TO H.CQND. ; 17-MAY-77 LV UPDATED TO CONFORM TO STANDARDS. ; .MCALL SDAT$C,ASTX$S,CLEF$S,WTSE$S,PUSH,POP ; ; CORE UPDATE MESSAGE ; CUPMSG: .BYTE 1,4 ;TYPE, COUNT .WORD H.UFLG ;ACKNOWWLEDGE EVENT FLAG .WORD H.CORQ ;QUEUE START .WORD H.CQLG ;QUEUE LENGTH ; ; FIND HDB AND DETERMINE WHETHER ENTRY IS ALLOWED ; HISTEN:: TST H.ENBL ;PACKAGE ENABLED? BEQ 3$ ;NO MOV @2(R5),R0 ;GET NUMBER BLE 3$ ;BAD NUMBER CMP R0,#H.MXHT ;CHECK RANGE BGT 3$ ;BAD NUMBER ASL R0 MOV H.DBPT-2(R0),R0 ;POINT TO HDB BEQ 3$ ;BAD NUMBER MOVB HDB.FL(R0),R1 ;PICK UP FLAG BYTE BMI 2$ ;INHIBIT SET ASLB R1 ;CHECK FOR DISK BMI 1$ ;YES TSTB H.LOCK ;CORE LOCK ON? BEQ HE1 ;NO BR 2$ ;REJECT EVENT 1$: TSTB H.LOCK+1 ;DISK LOCK ON? BEQ HE1 ;NO 2$: INC HDB.RJ(R0) ;REJECT EVENT BNE 3$ INCB HDB.RJ+2(R0) 3$: RETURN ; ; EVALUATE CHANNEL NUMBER ; HE1: MOV R0,R4 ADD #HDB.I1,R4 ;POINT TO PARAM 1 BLOCK IN HDB CALL EVAL ;EVALUATE PARAM 1 BITB #4,R1 ;2 PARAMS? BEQ HE2 ;NO PUSH ;SAVE B1 AND N1 CALL EVAL ;EVALUATE PARAM 2 MUL (SP)+,R2 ;B = B2*N1+B1 ADD (SP)+,R3 MOV R3,R2 ; ; MAKE ENTRY IN APPROPRIATE QUEUE (CORE OR DISK) ; HE2: TSTB R1 ;CORE OR DISK BMI HE4 ;DISK ; ; MAKE ENTRY IN CORE QUEUE ; ADD HDB.ST(R0),R2 ;COMPUTE CORE CHANNEL MOV H.CQPT,R1 ;PICK UP QUEUE PTR MOV R2,(R1)+ ;MAKE ENTRY MOV R1,H.CQPT ;UPDATE QUEUE PTR CMP R1,#H.CQND ;CHECK FOR END BHIS HE3 ;YES RETURN ;NO - WE'RE DONE ; ; THE CORE QUEUE IS FULL. LOCK OUT CORE HISTS, AND SEND THE QUEUE ; TO HSTMGE FOR CORE UPDATING. ; HE3: INCB H.LOCK ;SET LOCK INC H.CUPQ ;BUMP REQUEST COUNT CLEF$S #H.UFLG SDAT$C HSTMGE,CUPMSG ;REQUEST UPDATE WTSE$S #H.UFLG MOV #H.CORQ,H.CQPT ;RESET QUEUE POINTER DEC H.CUPQ ;RESET REQUEST COUNT DECB H.LOCK ;RESET LOCK RETURN ; ; MAKE ENTRY IN DISK QUEUE ; (NOT SUPPORTED YET; CODE WILL BE ADDED HERE LATER.) ; HE4: RETURN ; ; EVAL CHANNEL EVALUATOR SUBROUTINE ; ; THIS ROUTINE EVALUATES A CHANNEL (BIN) NUMBER CORRESPONDING TO ; A GIVEN SET OF DATA AND HDB PARAMETERS. THE HDB PARAMETERS ; USED ARE: ; I: DATA INDEX (BYTE OFFSET IN DATA BLOCK() ; M: MASK (COMPLEMENTED) ; L: LOWER LIMIT ; S: BIN SIZE ; N: NUMBER OF BINS ; ; THE FORMULA USED IS: ; B = MIN(N-1,MAX((DATA(I)&M)-L,0)/S) ; ; ENTRY CONDITIONS: ; ; R4 = ADDRESS OF PARAMETER BLOCK IN HDB ; R5 = ADDRESS OF ARGUMENT LIST ; 4(R5) = ADDRESS OF DATA BLOCK ; ; CALL EVAL ; ; EXIT CONDITIONS: ; ; R2 = CHANNEL NUMBER ; R4 = ADDRESS OF NUMBER OF BINS ENTRY IN PARAMETER BLOCK ; ; UNCHANGED REGISTERS: R0,R1,R5 ; CHANGED REGISTERS: R2,R3,R4 ; ; EVAL: MOV 4(R5),R2 ;GET DATA BLOCK ADDR ADD (R4)+,R2 ;ADD OFFSET (I) MOV (R2),R3 ;PICK UP DATA BIC (R4)+,R3 ;MASK CLR R2 SUB (R4)+,R3 ;SUBTRACT LOWER LIM (L) BLOS 3$ ;UNDERFLOW DIV (R4)+,R2 ;DIVIDE BY BIN SIZE (S) BVC 1$ ;CHECK FOR (>77777)/1 MOV R3,R2 ;FIX QUOTIENT 1$: CMP R2,(R4) ;CHECK AGAINST NO OF BINS (N) BLO 2$ ;OK MOV (R4),R2 ;OVERFLOW DEC R2 ;B = N-1 2$: RETURN 3$: TST (R4)+ ;UNDERFLOW - IGNORE S RETURN ;R2 IS STILL ZERO .END