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