ASMB,R,B,L,C
      HED 2313B ALGOL/FTN-DRIVER I/F  V2313 -- 8/22/73
* 
* 
      NAM V2313 
      ENT I2313 
      EXT .ENTR,.IOC. 
      SPC 2 
*  THIS ROUTINE IS USED BY FORTRAN OR ALGOL TO CALL THE 2313B 
*  REDUCED VERSION BCS DRIVER (D.62V) WHICH IS USED BY THE
*  2313B VERIFICATION PROGRAM.  DAC, 2930A, AND SIMULTANEOUS
*  SAMPLE AND HOLD CALLS HAVE BEEN ELIMINATED.  V2313 IS LOADED 
*  WITH THE PROGRAM AS A SUBROUTINE (ALGOL CODE PROCEDURE). 
      SPC 2 
******************************************************************
*                                                                *
*  THE ALGOL CALLS ARE AS FOLLOWS: (UNIT = LOGICAL UNIT NUMBER)  *
*                                                                *
******************************************************************
      SPC 2 
*    A CODE PROCEDURE DECLARATION MUST BE INCLUDED IN THE ALGOL 
*    PROGRAM.  THERE ARE A NUMBER OF WAYS THIS COULD BE DONE. 
*    THE FOLLOWING IS AN EXAMPLE OF HOW IT MIGHT BE DONE: 
* 
*   PROCEDURE I2313(UNIT,TYPE,PACE,MODE,CBUFF,N,DBUFF,DISABLE); 
*     VALUE UNIT,TYPE,PACE,MODE,N,DISABLE;
*     INTEGER UNIT,TYPE,MODE,CBUFF,N,DBUFF; 
*     BOOLEAN PACE,DISABLE; 
*     CODE; 
* 
*  MAKE SURE ALL PARAMETERS USED IN THE CALL AGREE
*  IN TYPE WITH THOSE USED ON THE DECLARATION.
* 
* 
*    1)  CLEAR REQUEST (ISSUES SYSTEM NORMALIZE)
* 
*    I2313(UNIT,0,0,0,DUMMY,0,DUMMY,0); 
* 
*      DUMMY IS JUST A PLACE HOLDER FOR PARAMETERS CALLED BY NAME 
* 
* 
*    2)  STATUS REQUEST (DOES NOT ACCESS THE DRIVER)
* 
*    I2313(UNIT,1,STATUS,0,DUMMY,0,DUMMY,0);
* 
*    ON RETURN STATUS =  TRUE - 2313B BUSY
*                     = FALSE - 2313B AVAILABLE 
      SKP 
*    3)  READ REQUESTS
* 
*    I2313(UNIT,2,PACE,MODE,CHANNELBUF[1],N,INBUF[1],DIFFIN); 
* 
* 
*    WHERE: 
* 
*      PACE = FALSE (0)  UNPACED
*           = TRUE (-1)  PACED
* 
*      MODE = 0  SINGLE CHANNEL (1 OR MORE READINGS)
*           = 1  TWO CHANNEL
*           = 2  SEQUENTIAL SCAN
* 
*CHANNELBUF = BUFFER OF CHANNEL NUMBERS 
*               FOR TWO CHANNEL (INTEGER ARRAY CHANNELBUF[1:N] )
*           = THE CHANNEL FOR SINGLE CHANNEL
*           = THE STARTING CHANNEL FOR SEQUENTIAL 
* 
*         N = NUMBER OF READINGS TO TAKE
* 
*     INBUF = BUFFER TO STORE READINGS
*                   (INTEGER ARRAY INBUF[1:N];) 
* 
*    DIFFIN = FALSE (0) SINGLE ENDED CHANNELS \ SEQUENTIAL
*           = TRUE (-1) DIFFERENTIAL CHANNELS /   ONLY
* 
* 
*    4)  WRITE REQUESTS (PACER) 
* 
*    I2313(UNIT,6,WAIT,EXTERNAL,PERIOD,MULTIPLIER,DUMMY,0); 
* 
*    WHERE: 
* 
*      WAIT = FALSE (0)  CHANGE RATE IMMEDIATELY
*           = TRUE (-1)  CHANGE RATE AT NEXT PACE PULSE 
* 
*  EXTERNAL = FALSE (0)  DISABLE EXTERNAL START/STOP
*           = TRUE (-1)  ENABLE EXTERNAL START/STOP 
* 
*    PERIOD = 0-255 DECIMAL FOR BASIC PERIOD IN MICROSECONDS
* 
*MULTIPLIER = 0-7   POWER OF 10 MULTIPLIER
      SKP 
*    5)  WRITE REQUESTS (LAST ADDRESS DETECTOR,LAD) 
* 
*    I2313(UNIT,7,0,MODE,ADDRESS,LASTADRS,DUMMY,0); 
* 
*    WHERE: 
* 
*      MODE = 0  TURN OFF LAD 
*           = 1  TURN ON LAD & SET NEW LAST ADRS
* 
*   ADDRESS =  2313B CARD ADRS OF LAST ADRS DET 
* 
*  LASTADRS =  HLMPX LAST CHAN FOR SEQ SCAN 
* 
* 
* 
*    6)  SET GAIN CODE(LLMPX) 
*    I2313(UNIT,7,0,0,ADDRESS,GAINCODE,DUMMY,0);
* 
*    WHERE: 
* 
*   ADDRESS = 2313B CARD ADDRESS OF LLMPX 
* 
*      GAINCODE      AMPLIFICATION
*      --------      -------------
*          0             X1000
*          1             X500 
*          2             X250 
*          3             X125 
*          4             X100 
*          5             X50
*          6             X25
*          7             X12.5
      SKP 
*                   ** CALLING PARAMETER LIST **
      SPC 1 
UNIT  NOP 
TYPE  NOP 
PACE  NOP 
MODE  NOP 
CNBUF NOP           \ 
NUMBR NOP            \ALSO FOR
DBUFF NOP            /  CALL TO .IOC. 
MODEX NOP           / 
      SPC 2 
*                   ** START OF ROUTINE **
      SPC 1 
I2313 NOP 
      JSB .ENTR     GET PARAMETER 
      DEF UNIT        ADDRESSES INTO LIST ABOVE 
      SPC 1 
      LDA UNIT,I    GET UNIT REFERENCE NUMBER 
      LDB TYPE,I    GET TYPE OF REQUEST 
      SZB           CLEAR REQUEST?
      JMP MORE        NO
      SPC 2 
*                   ** CALL FOR CLEAR REQUEST **
      SPC 1 
      STA *+2       STORE UNIT REF IN CALL
      JSB .IOC.     CALL FOR
      NOP             CLEAR REQUEST 
      JMP I2313,I   DONE
      SPC 2 
MORE  RBR,RBR 
      CPB BIT14     STATUS REQUEST? 
      RSS             YES 
      JMP AGAIN       NO
      SKP 
*                   ** CALL FOR STATUS REQUEST ** 
      SPC 1 
      IOR BIT14     SET STATUS REQ ONTO UNIT REF
      STA *+2       STORE REQ CODE IN CALL
      JSB .IOC.     CALL FOR
      NOP             STATUS
      AND MASK      FORM STATUS INFORMATION 
      STA PACE,I        AND RETURN IT 
      JMP I2313,I   DONE
      SPC 1 
AGAIN SLB           MPX REQUEST?
      JMP WRITE       NO
      SPC 2 
*                   ** CALL FOR MPX REQUESTS ** 
      SPC 1 
      IOR READ      SET READ REQ ONTO UNIT REF
      SPC 2 
*                   ** CALLS FOR MPX'S AND DAC ** 
      SPC 1 
      LDB PACE,I    IS THE PACER
      SSB             TO BE USED? 
LAD   IOR BIT10         YES - ADD PACE MODE BIT 
      STA B 
      LDA MODE,I    GET MODE AND
      AND THREE       ISOLATE IT
      ALF,RAL       THEN POSITION INTO
      RAL             BITS 6 & 7
      IOR B         PLACE MODE ON REQ CODE
      SPC 2 
*                   ** ALL READ/WRITE CALLS **
      SPC 1 
PACER LDB MODEX,I   IS THIS FOR DIFFERENTIAL
      SSB             CHANNELS (OR GAIN ONLY)?
      IOR BIT8          YES - SET XTRA MODE BIT (8) 
      SPC 1 
      LDB NUMBR,I   PUT # OF READINGS (OR PACE
      STB NUMBR       RANGE) IN NUMBR DIRECT
      STA *+2       STORE REQ CODE IN CALL
      SPC 1 
      JSB .IOC.     CALL
REQ   NOP             THE 
      JMP *-2           DRIVER
      DEF CNBUF           FOR 
      OCT 4                 READ OR WRITE 
      SPC 2 
      JMP I2313,I   DONE ** 
      SKP 
*                   ** CALL FOR WRITE REQUESTS ** 
      SPC 1 
WRITE IOR RITE      SET WRITE REQ ONTO UNIT REF 
      SPC 2 
*                   ** CALL FOR PACER OR LAD REQUESTS **
      SPC 1 
      IOR BIT11     SET PACER BIT ON REQ CODE 
      STA REQ 
      LDA CNBUF,I   REMOVE INDIRECT FROM PACE PERIOD
      STA CNBUF       OR LAD ADDRESS
      LDA REQ 
      RBL 
      SSB           LAD CALL? 
      JMP LAD         YES 
      SPC 1 
      LDB PACE,I    GET "CHANGE" PARAMETER
      SSB           CHANGE AT NEXT PACE PULSE?
      IOR BIT6        YES - PUT "CHANGE" BIT ON REQ 
      LDB MODE,I    GET "EXT S/S" PARAMETER 
      SSB           EXT START/STOP? 
      IOR BIT7        YES - PUT XS/S BIT ON REQ 
      JMP PACER 
      SPC 5 
*                   ** CONSTANTS ** 
      SPC 1 
B     EQU 1 
      SPC 1 
      ORB 
BIT6  OCT 100 
BIT7  OCT 200 
BIT8  OCT 400 
BIT10 OCT 2000
BIT11 OCT 4000
BIT14 OCT 40000 
MASK  OCT 100003
READ  OCT 11000 
RITE  OCT 21000 
THREE OCT 3 
      SPC 2 
*                   ** END OF INTERFACE ROUTINE **
      SPC 2 
      END 
                                          