ASMB,R,L,C
      HED RETRV: RJE TRACE SUPPORT ROUTINE * (C) HEWLETT-PACKARD CO.1978 *
      NAM RETRV,7 91780-16016 REV.1840 780725 
      ENT RETRV 
      EXT .ENTR,IFBRK,EXEC
      EXT #TBUF,#OVRN,#RDPT,#WRPT,#BFEN 
* 
*     DATE:         780725
*     NAME:         RETRV 
*     SOURCE:       91780-18018 
*     RELOC:        91780-16016 (PART OF) 
*     PGMR:         D. BOLIERE
* 
*  **************************************************************** 
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978.  ALL RIGHTS      * 
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,       * 
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * 
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.        * 
*  **************************************************************** 
* 
*  THIS SUBROUTINE IS USED BY THE TRACE CAPABILITY OF RJE/1000 TO 
*  RETRIEVE DATA FROM A CIRCULAR SPEED BUFFER LOCATED IN THE
*  RJE/1000 MODULE CALLED #COMN.  THIS DATA IS IN THE FORMAT OF TWO 
*  WORDS PER ENTRY.  RETRV COLLECTS THIS DATA AND BLOCKS IT INTO THE
*  USERS BUFFER.  WHEN EITHER THE USERS BUFFER IS FULL, OR WHEN A 
*  OPERATOR BREAK OF THE TRACE PROGRAM IS DETECTED, THE BLOCK OF
*  DATA IS RETURNED TO THE CALLER.
* 
*  FORMAT OF SPEED BUFFER IN #COMN: 
* 
*            #TFLG NOP      0=TRACE OFF,1=TRACE ON
*            #TBUF DEF BUF  FWA OF SPEED BUFFER 
*            #OVRN NOP      NON-ZERO INDICATES THE NUMBER OF OVERRUNS 
*                           CAUSED BY THIS RETRV NOT EMPTYING THE SPEED 
*                           BUFFER AS FAST AS RJE/1000 FILLS IT.
*            #RDPT DEF BUF  POINTER INTO SPEED BUFFER OF NEXT ENTRY TO
*                           RETRIEVE
*            #WRPT DEF BUF  POINTER INTO SPEED BUFFER OF NEXT ENTRY TO
*                           BE WRITTEN BY RJE/1000. 
*            #BFEN DEF BFEN LAST WORD ADDRESS OF CIRCULAR SPEED BUFFER
*            BUF   BSS 200  TRACE BUFFER LOCATED IN SSGA
*            BFEN  DEF *    NEXT WORD PAST BUFFER 
* 
* 
*  CALLING SEQUENCE:
* 
*            CALL RETRV (BUF,BUFCT,OVRN)
* 
*            WHERE:  BUF=USERS BUFFER (AT LEAST 128 WORDS)
*                    BUFCT=LENGTH OF BLOCK OF DATA RETURNED TO CALLER 
*                    OVRN= UPON ENTRY: + INDICATES THAT RETRV SHOULD
*                                        INITIALIZE ITSELF AND THE
*                                        SPEED BUFFER POINTERS
*                                      - INDICATES THAT RETRV SHOULD
*                                        JUST REFILL THE USERS BUFFER 
*                          UPON EXIT:  - INDICATES TO CALLER THAT MORE
*                                        DATA IS AVAILABLE AFTER THIS 
*                                        CALL 
*                                      + INDICATES TO CALLER THE NUMBER 
*                                        OF OVERRUNS DETECTED AND THAT
*                                        A BREAK OF TRACE HAS BEEN
*                                        ENTERED BY THE USER. 
* 
BUF   NOP 
BUFCT NOP 
OVRN  NOP 
* 
RETRV NOP 
      JSB .ENTR     PASS PARAMETER ADDRESSES
      DEF BUF 
* 
      LDA BUFLN     INITIALIZE COUNT TO REPORT TO CALLER
      STA BUFCT,I 
      ARS           DIVIDE BY 2 
      CMA,INA        COMPLEMENT 
      STA CNTR        AND INITIALIZE INTERNAL COUNTER 
      LDA BUF 
      STA PTR       SETUP INTERNAL BUF POINTER
      LDB OVRN,I
      SSB           CALL SAYS TO RE-START?
      JMP START      NO, JUST RE-FILL THE BUFFER
* 
      ADA D5         YES, SETUP YEAR POINTER
      STA PTR6
      JSB EXEC      SAVE SIX WORD TIME STAMP
      DEF *+4        IN FIRST SIX BUFFER LOCATIONS
      DEF D11 
PTR   NOP           FWA OF BUFFER 
PTR6  NOP           ADDRESS OF WORD SIX 
* 
      LDA PTR6
      INA 
      STA PTR       RESET BUF PTR TO 7TH WORD 
      LDA CNTR
      ADA D3
      STA CNTR      BUMP INTERNAL COUNTER 
* 
      LDA #TBUF 
      STA #RDPT 
      STA #WRPT 
      CLA 
      STA #OVRN 
      STA OVCNT 
* 
START CCA           TELL CALLER THAT LAST RECORD NOT
      STA OVRN,I     YET FOUND
* 
LOOP  JSB IFBRK     CHECK BREAK STATUS
      DEF *+1 
      SSA           BREAK?
      JMP EXIT       YEP, GO TELL USER
* 
      LDA #RDPT 
      CPA #WRPT     POINTERS THE SAME?
      RSS 
      JMP FETCH      NO, MUST BE NEW DATA TO GET! 
* 
      LDA #OVRN     BUFFER OVERRUN? 
      SZA,RSS 
      JMP LOOP       NO, REPEAT CHECKS
* 
OVER  CLA           OVERRUN!!!
      STA #OVRN     CLEAR FLAG
      ISZ OVCNT     BUMP OVERRUN COUNT
      LDA #WRPT 
      STA #RDPT     RESET READ PTR
      DLD OVCNT     CREATE AN OVERRUN ENTRY 
      DST PTR,I     SAVE ENTRY
SAVE  ISZ PTR 
      ISZ PTR 
      ISZ CNTR      BUMP COUNTER
      RSS 
      JMP RETRV,I   IF BUFFER FULL, RTN TO CALLER 
      JMP LOOP      RETURN FOR CHECKS 
* 
FETCH DLD #RDPT,I   GET POSSIBLE DATA 
      DST PTR,I     SAVE IN TEMP BUFFER 
      LDA #OVRN     FETCH OVERRUN FLAG
      SZA           OVERRUN?
      JMP OVER       YEP, FORGET DATA!
* 
      ISZ #RDPT      NO, BUMP TEMP PTR
      ISZ #RDPT 
      LDA #RDPT 
      CPA #BFEN     AT END OF SPEED BUFFER? 
      LDA #TBUF      YES, WRAP-AROUND 
      STA #RDPT 
      JMP SAVE      FINISH BOOKKEEPING
* 
EXIT  LDA BUF       COMPUTE AMOUNT OF DATA IN 
      CMA,INA        TEMP BUFFER
      ADA PTR 
      STA BUFCT,I   REPORT PROPER COUNT TO CALLER 
      LDA OVCNT 
      STA OVRN,I    REPORT LAST RECORD TO CALLER
      JMP RETRV,I 
* 
* 
D3    DEC 3 
D5    DEC 5 
D11   DEC 11
BUFLN DEC 128 
CNTR  NOP 
* 
OVCNT NOP 
      OCT 020000
* 
*STRBF DEF #BUF 
      END 
                                                                                                                                                