ASMB,R,B,L
      NAM .GRAF      09601-16020   REV. A 
* 
* 
      ENT GRAPH 
* 
*********************************** 
* 
*         ERS:      A-09601-16020-1 
*         LISTING:  A-09601-16020-2 
*         SOURCE:     09601-18020 
*         RELOC:      09601-16020 
* 
*********************************** 
* 
*       M. SCHOENDORF SEPTEMBER 12,1974    REV. A 
* 
*         *** UTILITY ROUTINES
* 
      EXT #GRFU,.DLD,.ENTR,ERRCD,ERROR,#ERRU
      EXT EXEC,.FAD,.IENT 
* 
* 
*   GRAPH(N,X(I),Y(I))
* 
*      N = 0 CLEAR (X(I) AND Y(I) IGNORED)
*      ELSE 
*      N = NUMBER OF POINTS IN X-Y BUFFER (1-32)
* 
*   X(I) = ARRAY WHOSE ELEMENTS ARE THE X-COORDINATES 
*          OF THE ANALOG VOLTAGE
* 
*   Y(I) = ARRAY WHOSE ELEMENTS ARE THE Y-COORDINATES 
*          OF THE ANALOG VOLTAGE
* 
*          WHERE EACH ELEMENT OF THE X AND Y ARRAY CAN
*          VARY FROM 0 TO 255 AND THE CORRESPONDING 
*          VOLTAGE IS CALCULATED BY THE FOLLOWING 
*          FORMULA: 
* 
*            V = (X(I) OR Y(I) / 255)*10
* 
* 
      SKP 
* 
* 
NDATA BSS 1 
XARAY BSS 1 
YARAY BSS 1 
GRAPH NOP 
      JSB .ENTR 
      DEF NDATA 
      CLA           CLEAR GLOBAL ERROR CODE 
      STA ERRCD 
      LDA NDATA,I   GET NUMBER OF ELEMENTS IN ARRAY 
      SSA           <0? 
      JMP ERR1      YES, ERROR EXIT 
      SZA,RSS       =0? 
      JMP CLEAR     YES 
      CMA,INA 
      ADA .32       >32?
      SSA 
      JMP ERR1      YES, ERROR EXIT 
      LDA YARAY     GET ADD. OF Y ELEMENTS OF ARRAY 
      LDB BUFAD 
      JSB INIT      SUBROUTINE TO INITIALIZE VALUES 
      JSB PACK      SUBROUTINE TO PACK INTEGERS 
      LDA XARAY     GET ADDRESS OF X AND Y ELEMENTS 
      LDB BUFAD     OF ARRAY
      JSB INIT      SUBROUTINE TO INITIALIZE VALUES 
      JSB PACK      SUBROUTINE TO PACK INTEGERS 
      JSB EXEC      EXEC WRITE CALL 
      DEF *+5       RETURN ADDRESS
      DEF .2        WRITE REQUEST 
      DEF #GRFU     LOGICAL UNIT NUMBER 
      DEF BUFAD,I   BUFFER LOCATION 
      DEF NDATA,I   BUFFER LENGTH 
      JMP GRAPH,I   RETURN TO CALLING PROGRAM 
* 
CLEAR JSB EXEC
      DEF *+3 
      DEF .3
      DEF #GRFU 
      JMP GRAPH,I 
* 
.2    DEC 2 
.3    DEC 3 
.32   DEC 32
BUFAD DEF *+1 
      BSS 32
      SKP 
* 
*  ERROR PROCESSING 
* 
ERR1  ISZ ERRCD     TYPE 1 ERROR
      JSB ERROR     CALL ERROR SUBROUTINE 
      DEF *+5       RETURN ADDRESS
      DEF ERRCD     TYPE OF ERROR 
      DEF ERMSG     ERROR MESSAGE 
      DEF #ERRU 
      DEF GRAPH     ENTRY POINT 
      JMP GRAPH,I   RETURN TO CALLING PROGRAM 
ERMSG DEC 3 
      ASC 2,GRAPH 
* 
*  SUBROUTINE TO INITIALIZE COUNTERS AND ARRAYS 
* 
INIT  NOP 
      STA ARRAY     ADDRESS OF DATA ORIGIN
      STB BUFF      ADDRESS OF DATA DESTINATION 
      LDA NDATA,I   NUMBER OF DATA POINTS 
      CMA,INA 
      STA INCR      STORE FOR INCREMENTING
      JMP INIT,I
* 
*  SUBROUTINE TO PACK VALUES FROM TWO FLOATING POINT
*  ARRAYS TO ONE INTEGER ARRAY
* 
PACK  NOP 
GNUDT JSB .DLD      GET FLOATING POINT VALUE
      DEF ARRAY,I 
      JSB .FAD      ADD 1/2 FOR ROUND OFF 
      DEF HALF
      JSB .IENT     CONVERT TO INTEGER
      JMP ERR1      WON'T CONVERT, ERROR EXIT 
      LDB 0 
      SSB           >0? 
      JMP ERR1      NO, ERROR EXIT
      LDA BUFF,I    GET CONTENTS OF INTEGER ARRAY 
      AND B377      MASK OFF LOWER 8 BITS 
      ALF,ALF       SHIFT 8 BITS TO LEFT
      IOR 1         MERGE WITH NEXT INTEGER 
      STA BUFF,I    STORE IN INTEGER ARRAY
      CMB,INB 
      ADB B377
      SSB           INTEGER > 255?
      JMP ERR1      YES, ERROR EXIT 
      ISZ ARRAY     INCREMENT ADD. OF SOURCE ARRAY
      ISZ ARRAY     INCREMENT ADD. OF SOURCE ARRAY
      ISZ BUFF      INCREMENT ADD. OF DESTINATION ARRAY 
      ISZ INCR      INCR. NO. OF VALUES LEFT TO CONVERT 
      JMP GNUDT     GET NEXT FLT. PT. NO. FOR CONV. 
      JMP PACK,I
* 
B377  OCT 377 
ARRAY BSS 1 
BUFF  BSS 1 
INCR  BSS 1 
HALF  DEC 0.5 
      END 
                                    