ASMB,R,L,C,F,B HED BASIC DEVICE SUBROUTINES FOR HP2313B * * A2313 - BASIC DEVICE SUBROUTINES FOR HP2313B * * SOURCE TAPE 29102-80016 REV. B * RELOC. TAPE 29102-60016 REV. B * * AUTHOR - T.A. SAPONAS REV A * STEVE SCOVILL REV B * * VERSION JANUARY 1974 * * MODULE A2313 IS PART OF THE RTE-B LIBRARY TAPE (29102-60001). IT * CONSISTS OF TWO SEPARATE ASSEMBLY LANGUAGE PROGRAMS (A2313 & AOV). * A2313 CONTAINS THE FOLLOWING BASIC CALLABLE SUBROUTINES: * AIRDV - ANALOG INPUT IN RANDOM ORDER * AISQV - ANALOG INPUT IN SEQUENTIAL ORDER * NORM - SYSTEM NORMALIZE * PACER - SETS UP SYSTEM PACER * RGAIN - READS GAIN ON A CHANNEL * SGAIN - SETS GAIN ON A CHANNEL * * AOV CONTAINS ONLY THE SUBROUTINE AOV FOR ANALOG OUTPUT. * * * NAM A2313,7 29102-80016B 05JUN75 EXT ..ADC,EXEC,$LIBR,$LIBX,..FCM,.ENTR ENT NORM,AIRDV,AISQV,SGAIN,RGAIN,PACER EXT .DST,ERROR SUP SPC 3 * "RGAIN" READS THE GAIN OF A GIVEN CHANNEL OR GROUP OF CHANNELS * CALLING SEQUENCE: * CALL RGAIN(CHN1,GN1) * * WHERE: CHN1 - DESIRED CHANNEL NUMBER * GN1 - FLOATING POINT GAIN OF CHANNEL "CHN1" * CHN1 NOP GN1 NOP RGAIN NOP JSB .ENTR FETCH PARAMETER DEF CHN1 ADDRESSES LDA RGAIN SAVE RETURN STA ENTRY ADDRESS LDA CHN1,I FIND CHANNEL ENTRY JSB FCHN IN CONFIGURATION TABLE BLS COMPUTE ADDRESS OF GAIN ADB DFCTR CONVERSION FACTOR STB GAIN AND SAVE DLD FACTR GAIN = FDV GAIN,I .005 / CONVERSION FACTOR DST GN1,I STORE GAIN JMP ENTRY,I AND RETURN SKP * "SGAIN" READS THE GAIN OF A GIVEN CHANNEL OR GROUP OF CHANNELS * CALLING SEQUENCE: * CALL SGAIN(CHN2,GN2) * * WHERE: CHN2 - DESIRED CHANNEL NUMBER * GN2 - FLOATING POINT GAIN OF CHANNEL "CHN2" * CHN2 NOP GN2 NOP SGAIN NOP JSB .ENTR FETCH PARAMETER DEF CHN2 ADDRESSES LDA SGAIN SAVE RETURN STA ENTRY ADDRESS LDA CHN2,I FIND CHANNEL ENTRY JSB FCHN IN CONFIGURATION TABLE LDA .3 IF NOT LOW LEVEL SSB THEN GIVE JMP ERRC ERROR # 3 DLD FACTR COMPUTE TEMP = ADA M1 (ADJUSTMENT FOR ROUND OFF ERROR) FDV GN2,I .005 / GN2 SSA IF GAIN WAS NEGATIVE JSB ..FCM MAKE POSITIVE DST TEMP AND SAVE LDB M7 INITIALIZE STB CNTR LOOP COUNTER LDA DFCTR INITIALIZE GAIN STA AFCTR TABLE POINTER SPC 1 SGN1 DLD TEMP IF DESIRED GAIN FSB AFCTR,I IS > OR = TABLE SSA VALUE, THEN JMP SGN2 SET UP GAIN ISZ AFCTR INCREMENT GAIN ISZ AFCTR TABLE POINTER ISZ CNTR LAST ENTRY? JMP SGN1 NO, CONTINUE LOOKING SPC 1 SGN2 LDA ADRS,I FETCH GAIN ENTRY AND ASL 3 SHIFT GAIN BITS INTO "B" LDB CNTR PUT NEW ADB .7 GAIN IN "B" ASR 3 SHIFT GAIN BITS BACK INTO "A" SPC 2 JSB $LIBR TURN OFF INTERRUPT SYSTEM NOP AND UPDATE STA ADRS,I CONFIGURATION TABLE ENTRY JSB $LIBX TURN INTERRUPT SYSTEM BACK DEF ENTRY ON AND RETURN SKP * "NORM" PERFORMS A SYSTEM NORMALIZE ON THE SPECIFIED UNIT * IF NO UNIT NUMBER IS SPECIFIED OR ZERO THE FIRST SUBSYSTEM * IN THE CONFIGURATION TABLE IS ASSUMED * UNIT NOP NORM NOP JSB .ENTR FETCH PARAMETER DEF UNIT ADDRESS LDA NORM SAVE RETURN STA ENTRY ADDRESS LDB UNIT FIND SUBSYSTEM JSB FNDLU LOGICAL UNIT NUMBER SPC 1 JSB EXEC ************************************* DEF *+5 SYSTEM DEF .2 NORMALIZE DEF LU REQUEST DEF .1 DEF .1 ************************************** * AND =B200 SZA,RSS SZB,RSS IF TRANSMISSION LOG JMP ERR1 EQUALS ZERO GIVE ERROR 1 JMP ENTRY,I ELSE, RETURN SPC 3 * "FNDLU" FINDS THE LOGICAL UNIT NUMBER CORRESPONDING TO THE * SUBSYSTEM NUMBER SPECIFIED IN THE CALL. IF THE NUMBER IS ZERO * OR NEGATIVE AN ERROR IS GIVEN, OR IF THE UNIT NUMBER IS NOT DEFINED * AN ERROR IS ALSO GIVEN * FNDLU NOP CLA,INA ASSUME UNIT 1 SZB IF UNIT SPECIFIED LDA B,I FETCH IT SSA,RSS COMPLEMENT AND CMA,INA,SZA,RSS JMP ERR2 IF <=0 THEN GIVE ERROR 2 STA CNTR SAVE COMP. FOR LOOP COUNTER LDB ..ADC FETCH ADDRESS OF CONFIG. TABLE ADA B,I LEGITIMATE UNIT SSA ADDRESS? JMP ERR2 NO - GIVE ERROR # 2 INB,RSS BUMP TBL PNTR TO 1ST SUBSYS. ENTRY SPC 1 NXTSS ADB B,I FETCH NEXT SUBSYSTEM ENTRY ISZ CNTR UNIT FOUND? JMP NXTSS NO, CONTINUE SEARCH SPC 1 INB FETCH SUBSYSTEM LDB B,I LOGICAL UNIT NUMBER STB LU AND SAVE JMP FNDLU,I RETURN SKP * "AIRDV" PEFORMS ANALOG INPUT FROM THE CHANNELS SPECIFIED IN * A REAL ARRAY. THE RESULTS ARE CONVERTED TO FLOATING POINT VOLTS * AND RETURNED IN ANOTHER REAL ARRAY. * * CALLING SEQUENCE: * CALL AIRDV(NUM1,RCHN,VOLT,ERR) * WHERE: NUM1 - NUMBER OF CHANNELS TO BE READ ( IF N<0 THEN * PERFORM PACED CONVERSION) * RCHN - REAL ARRAY CONTAINING CHANNEL NUMBERS * VOLT - REAL ARRAY FOR CONVERTED DATA * ERR - ERROR RETURN PARAMETER * BIT 0 = OVERFLOW ON AT LEAST ONE READING * BIT 1 = PACE ERROR ON AT LEAST ONE READING * NUM1 NOP RCHN NOP VOLT NOP ERR NOP AIRDV NOP JSB .ENTR FETCH PARAMETER DEF NUM1 ADDRESSES LDA AIRDV SAVE RETURN STA ENTRY ADDRESS LDA NUM1,I FETCH NUMBER OF CHANNELS JSB SETUP GO TO PARAMETER CHECK SPC 2 AIRD1 DLD RCHN,I LOAD NEXT CHANNEL NUMBER FIX CHANGE TO INTEGER JSB FCHN FIND HARDWARE ADDRESS IOR =B100000 SET TO RANDOM MODE IOR PACED OR IN PACE BIT STA CHANL AND SAVE SSB IF GAIN IS NEGATIVE JMP RDHL GO TO HIGH LEVEL READ XOR =B140000 SET UP GAIN STA GCHN CHANNEL ENTRY SPC 1 JSB EXEC ***************************** DEF *+5 LOW DEF .2 LEVEL DEF LU RANDOM DEF RBUF1 READ DEF .2 ***************************** JMP AIRD2 GO TO VOLTAGE CONVERSION SPC 2 RDHL JSB EXEC ************************* DEF *+5 HIGH DEF .2 LEVEL DEF LU RANDOM DEF RBUF2 READ DEF .1 ***************************** SPC 1 AIRD2 SZB,RSS IF TRANSMISSION LOG EQUALS JMP ERR1 ZERO, GIVE ERROR 1 SPC 1 LDB RDNG FETCH READING JSB CONV PERFORM CONVERSION ISZ RCHN BUMP CHANNEL ISZ RCHN ADDRESS ISZ CNTR LAST CHANNEL JMP AIRD1 NO, CONTINUE JMP ENTRY,I YES, RETURN SPC 4 SETUP NOP CLB INITIALIZE ERROR STB ERR,I TO ZERO SSA IF NEGATIVE LDB =B10000 SET STB PACED PACE BIT SSA IF NEGATIVE CMA,INA MAKE POSITIVE STA NUM AND SAVE CMA,INA,SZA,RSS COMPLEMENT # OF CHANNELS JMP ERR2 IF ZERO GIVE ERROR STA CNTR SAVE FOR LOOP COUNTER CMA COMPUTE ADDRESS OF ALS LAST ELEMENT IN ADA VOLT ARRAY VOLT STA TEMP AND SAVE JSB .DST USE BASIC'S DOUBLE STORE DEF TEMP,I TO CHECK ARRAY BOUNDS JMP SETUP,I SKP * "FCHN" IS A SUBROUTINE WHICH FINDS THE ENTRY IN THE 2313 * CONFIGURATION TABLE WHICH CORRESPONDS TO A GIVEN CHANNEL NUMBER * * CALLING SEQUENCE : * "A" CONTAINS THE SOFTWARE ANALOG CHANNEL NUMBER * RETURNED : * "A" CONTAINS THE HARDWARE ADDRESS OF THE DESIRED MPX CHANNEL * "LU" _ LOGICAL UNIT NUMBER OF THE SUBSYSTEM CONTAINING "A" * "ADRS" _ ADDRESS OF THE CONF. TABLE ENTRY FOR "A" * "GAIN" _ GAIN FOR THE CHANNEL (-1 IF HIGH LEVEL) * "REMCH" _ # OF CHANNELS REMAINING IN ENTRY * * IF THE CHANNEL IS OUTSIDE THE BOUNDS OF THE TABLE "FCHN" * BRANCHES TO "ERR2" * FCHN NOP CMA,SSA,INA,SZA COMPLEMENT CHANNEL NUM. RSS IF LESS THAN OR JMP ERR2 EQUAL TO ZERO GIVE ERROR #2 STA MCHN SAVE -(CHANNEL NUM.) STA NMCHN CCA ASSUME STA GAIN HIGH LEVEL LDA ..ADC FETCH ADDRESS OF FIRST STA .ADC INA SUBSYSTEM ENTRY IN CONF. TABLE CLB "B"_ CURRENT SUBSYSTEM # JMP STFCH SEARCH FOR SUBSYS. CONTAINING CHAN. SPC 1 NXSUB STA NMCHN SAVE # OF CHNLS PAST LAST SUBSYS. INB INCREMENT NUMBER OF SUBSYSTEMS CPB .ADC,I LAST SUBSYSTEM? JMP ERR2 YES - GO TO CHANNEL NOT FOUND LDA ADRS FETCH ADDRESS OF ADA ADRS,I NEXT SUBSYSTEM STFCH STA ADRS AND SAVE ADA .2 IS LAST CHANNEL IN LDA A,I CURRENT SUBSYSTEM BEYOND ADA MCHN THE DESIRED SSA CHANNEL? JMP NXSUB NO - GO TO NEXT SUBSYSTEM SPC 1 * SUBSYSTEM CONTAINING CHANNEL FOUND. THE FOLLOWING CODE * SEARCHES THE SUBSYSTEM ENTRY FOR ACTUAL CHANNEL ENTRY * LDA ADRS FETCH THE INA LOGICAL UNIT NUMBER LDB A,I OF THE SUBSYSTEM STB LU AND SAVE ADB =B100 SET UP DMA LU STB DMALU AND SAVE ADA .2 COMPUTE ADDRESS OF HIGH LEVEL STA ADRS1 SINGLE ENDED CHANNEL COUNT STA ADRS AND SAVE LDB NMCHN FETCH -(CHANNEL IN THIS SUBSYSTEM) RSS NXTEN ISZ ADRS BUMP ENTRY ADDRESS LDA ADRS,I FETCH AND MASK AND =B3777 NEXT ENTRY ADB A CHANNEL IN SSB THIS ENTRY? JMP NXTEN NO, CONTINUE SEARCH SPC 1 INB ENTRY FOUND, STB REMCH SAVE CHANNELS REMAINING ISZ NMCHN COMPUTE -(CHNLS-1) NOP CLA LDB ADRS1 FETCH HL-SE ADDRESS CPB ADRS IF ENTRY IS HIGH LEVEL - SE JMP HLSE1 GO TO COMPUTE LOCATION INB IF ENTRY IS CPB ADRS HIGH LEVEL DIF. JMP HLDIF GO TO COMPUTE DIF. LOCATION * CHANNEL MUST BE LOW LEVEL THEN, SO COMPUTE GAIN LDB ADRS,I FETCH RRL 3 GAIN STA GAIN AND SAVE SPC 2 * TO CONVERT CHANNEL NUMBER TO 2313 HARDWARE ADDRESS THE * FOLLOWING ALGORITHM IS APPLIED: * * BOX = (N-1)/384 (384= 12 SLOTS * 32 CHANNELS/SLOT) * * SLOT.CHANNEL = REMAINDER FROM THE ABOVE QUOTIENT * * WHERE "N" IS THE SUBSYSTEM RELATIVE CHANNEL ADDRESS. SINCE * MULTIPLEXERS CANNOT OCCUPY SLOTS 0-2 IN BOX 0, * 96 MUST BE ADDED TO CHANNEL NUMBERS. * ALSO DIFFERENTIAL INPUT CHANNELS MUST BE COUNTED TWICE. * HLDIF LDA ADRS1,I COMPUTE ADA NMCHN NUMBER HLSE1 ADA NMCHN OF CMA,INA CHANNELS ADA .96 START SLOT =3 CLB COMPUTE DIV .384 HP 2313 ALF,ALF BOX, SLOT ALS AND CHANNEL IOR B ADDRESS LDB GAIN RETURN WITH ADDRESS IN JMP FCHN,I "A" AND GAIN IN "B" SPC 1 .32 DEC 32 .96 DEC 96 .384 DEC 384 SKP * "CONV" IS A SUBROUTINE WHICH CONVERTS 2313 READINGS TO * FLOATING POINT VOLTS. * * CALLING SEQUENCE: * "B" - 2313 READING * * RETURNED: * THE COMPUTED VOLTAGE IS PUT IN THE ADDRESS SPECIFIED BY * "VOLT" AND THEN "VOLT" IS INCREMENTED TO POINT AT THE NEXT * FLOATING POINT LOCATION. * * ERR HAS BIT 0 SET IF OVERFLOW AND BIT 1 SET IF PACE ERROR. * ALSO ON OVERFLOW, + OR - 1E37 IS RETURNED FOR VOLTAGE. * CONV NOP LDA ERR,I LOAD CURRENT ERROR VALUE BRS,SLB,BRS SHIFT READING AND TEST FOR PACE ERROR IOR .2 SET PACE ERROR BIT STA ERR,I SAVE CURRENT VALUE OF ERR BRS,CLE,BRS TOTAL SHIFT 4 PLACES CPB =B3777 IF POS. OVERFLOW, E_1 CCE,RSS AND GO TO OVERFLOW CPB =B174000 IF NEG. OVERFLOW, E_0 JMP OVRFL AND GO TO OVERFLOW LDA B MOVE READING TO A REG. LDB GAIN COMPUTE BLS ADDRESS OF ADB DFCTR CONVERSION FACTOR STB TEMP AND SAVE FLT FLOAT THE 2313 READING FMP TEMP,I MULTIPLY BY CONVERSION FACTOR STVLT DST VOLT,I STORE VOLTAGE IN ARRAY ISZ VOLT COMPUTE NEXT ISZ VOLT FLOATING POINT ADDRESS JMP CONV,I RETURN SPC 1 OVRFL SZA,RSS SET OVERFLOW BIT IOR .1 STA ERR,I IN "ERR" DLD =F1E37 RETURN POSITIVE SEZ,RSS OR NEGATIVE JSB ..FCM INFINITY FOR JMP STVLT READING SKP SKP *************************** DFCTR DEF FACTR+2 FACTR DEC .005,5E-6,1E-5,2E-5,4E-5 DEC 5E-5,1E-4,2E-4,4E-4 RBUF1 OCT 3 ---------------------------------- OCT 2 Q BUFFER DEF GCHN FOR LOW LEVEL RBUF2 OCT 5 --------- OCT 1 Q BUFFER DEF CHANL FOR HIGH LEVEL DEF RDNG ---------------------------------- RDNG NOP SPC 1 M7 DEC -7 .7 OCT 7 SPC 1 GCHN NOP GAIN GAIN NOP BUFFER SPC 1 SKP * "AISQV" PERFORMS ANALOG INPUT IN SEQUENTIAL ORDER. THE RESULTS * ARE CONVERTED TO FLOATING POINT VOLTS AND RETURNED IN A REAL ARRAY. * * CALLING SEQUENCE: * CALL AISQV(NUM2,SCHAN,VOLT2,ERR1) * WHERE: NUM2 - NUMBER OF CHANNELS TO BE READ ( IF N<0 THEN * PERFORM PACED CONVERSION) * SCHAN - STARTING CHANNEL OF SCAN (IF SCHAN<0 THEN * PERFORMS NUM2 READINGS FROM CHANNEL -SCHAN) * VOLT2 - REAL ARRAY FOR CONVERTED DATA * ERR - ERROR RETURN PARAMETER * BIT 0 = OVERFLOW ON AT LEAST ONE READING * BIT 1 = PACE ERROR ON AT LEAST ONE READING * NUM2 NOP SCHAN NOP VOLT2 NOP ERRA NOP AISQV NOP JSB .ENTR FETCH PARAMETER DEF NUM2 ADDRESSES LDA VOLT2 MOVE VOLT ARRAY ADDRESS LDB ERRA ERROR ADDRESS TO STA VOLT LOCATIONS USED BY UTILITIES STB ERR SHARED BY AIRDV AND AISQV LDA NUM2,I FETCH NUMBER OF CHANNELS JSB SETUP GO TO PARAMETER CHECK LDA VOLT2 SET UP INPUT BUFFER ADA NUM ADDRESS TO LAST HALF OF STA VOLT1 FLOATING PNT. ARRAY "VOLT2" SPC 2 LDA SCHAN,I SAVE START CHANNEL AS NXTSC STA SINGL SINGLE CHAN. FLAG SSA IF NEGATIVE CMA,INA MAKE POSITIVE JSB FCHN FETCH CHANNEL HARDWARE ADDRESS IOR DIGTZ FORM DIGITIZE COMMAND STA CHANL WORD AND SAVE IOR PACED OR IN PACE BIT SSB,RSS IF LOW LEVEL JMP LLSQ GO PROCESS LDB SINGL IF SINGLE CHANNEL SSB SCAN GO TO JMP HLSQR HIGH LEVEL EXEC CALL IOR =B160000 GENERATE SEQUENTIAL LDB ADRS COMMAND, SETTING CPB ADRS1 BIT 0 IF IOR .1 SINGLE ENDED SCAN SPC 1 LDB REMCH LENGTH OF SCAN ADB CNTR IS THE SMALLER CMB,SSB,INB,RSS OF -CNTR CLB OR THE REMAINDER ADB REMCH OF THE CHANNELS STB NUM IN THIS ENTRY SPC 1 HLSQR STA SEQ SAVE MODE SPC 1 JSB EXEC **************************** DEF *+5 PERFORM DEF .2 HIGH DEF DMALU LEVEL DEF SBUF2 SCAN DEF .3 *********************** AND =B200 SZA,RSS SPC 1 SQCON SZB,RSS IF TRANSMISSION LOG EQUALS JMP ERR1 ZERO, GIVE ERROR 1 * THE FOLLOWING INSTRUCTIONS CONVERT THE DATA JUST READ IN * TO FLOATING POINT AND UPDATE POINTERS "VOLT", AND "VOLT1" * TO POINT AT REMAINING STORAGE. LDA NUM COMPLEMENT CMA,INA NUMBER OF CHANNELS STA LOOPC READ FOR LOOP COUNTER SPC 1 SQC1 LDB VOLT1,I FETCH NEXT READING JSB CONV CONVERT TO FLOATING POINT ISZ VOLT1 BUMP DATA ADDRESS ISZ LOOPC LAST CHANNEL " JMP SQC1 NO - CONTINUE SPC 1 LDB NUM UPDATE -(NUMBER OF CHNLS) ADB CNTR REMAINING SSB,RSS IF CNTR=0 , END OF JMP ENTRY,I SCAN SO RETURN STB CNTR OTHERWISE SAVE LDA NUM COMPUTE NEW ADA SINGL START CHANNEL CMB,INB SAVE POSITIVE NUMBER OF STB NUM CHANNELS REMAINING JMP NXTSC GO TO NEXT SCAN SPC 4 LLSQ XOR =B160000 SET UP STA GCHN GAIN ENTRY XOR =B160000 RESTORE "A" TO DIGITIZE LDB SINGL IF NOT SINGLE SSB,RSS CHANNEL SCAN, IOR =B160000 CHANGE TO SEQUENTIAL STA SEQ AND SAVE SSB IF SINGLE CHANNEL SCAN JMP LLSQR GO PERFORM SCAN AND =B37 COMPUTE THE NUMBER CMA,INA OF CHANNELS REMAINING ADA .32 ON THE ADDRESSED ARS LOW LEVEL CARD ADA CNTR SCAN LENGTH CMA,SSA,INA IS EQUAL CLA TO THE SMALLEST OF ADA CNTR THE FOLLOWING: ADA REMCH 1. # CHNLS LEFT ON CARD CMA,SSA,INA,RSS CLA 2. # CHNLS LEFT IN SCAN ADA REMCH STA NUM 3. # CHNLS LEFT IN TABLE ENTRY SPC 1 LLSQR JSB EXEC *********************** DEF *+5 PERFORM DEF .2 LOW DEF DMALU LEVEL DEF SBUF1 SCAN DEF .5 ************************ SPC 1 JMP SQCON CONVERT DATA TO FLOATING VOLTS SPC 4 SBUF1 OCT 3 ----------------------------- OCT 2 DEF GCHN SBUF2 OCT 3 OCT 1 DEF CHANL OCT 3 OCT 0 DEF SEQ OCT 4 NUM NOP NUMBER OF READINGS VOLT1 NOP DATA STORAGE OCT 3 CLEAN OCT 1 UP OPERATION DEF DIGTZ TO RELEASE LL MPX SPC 4 DIGTZ OCT 120000 M1 DEC -1 SKP * "PACER" SETS UP THE SYSTEM PACER, OR IF THE PACE RATE IS ZERO * TURNS OFF THE SYSTEM PACER. * * CALLING SEQUENCE: * * CALL PACER(RATE,MULT,MODE [,UNIT]) * WHERE: * RATE - BASIC PACER RATE (0 <= RATE <= 256) * MULT - DECADE MULTIPLIER TIMES THE BASIC 1 MICROSECOND * RATE ( 0 <= MULT <= 7 ) * MODE - EXTERNAL/START STOP MODE (BITS 11 AND 12 OF PACER * COMMAND WORD - SEE 12755A MANUAL) * UNIT - SUBSYSTEM NUMBER (OPTIONAL - ASSUMED 1) * RATE NOP MULT NOP MODE NOP UNIT1 NOP PACER NOP JSB .ENTR FETCH PARAMETER DEF RATE ADDRESSES LDA PACER SAVE RETURN STA ENTRY ADDRESS LDB UNIT1 FETCH LOGICAL JSB FNDLU UNIT NUMBER SPC 1 CLB CHECK ALL LDA RATE,I PARAMETERS ASR 5 FOR THE FOLLOWING IOR MULT,I LIMITS: ARS RATE 0 - 255 IOR MODE,I MODE 0 - 3 ARS,ARS MULT 0 - 7 SZA IF ANY PARAMETER OUT OF JMP ERR2 RANGE GIVE ERROR 2 SPC 1 CLA,INA ASSUME ONE STA ENTNM WORD ENTRY LDB DCMD2 FETCH OUTPUT BUFFER ADDRESS LDA MODE,I IF MODE = 0 SZA,RSS AND RATE IS NOT 0 CPA RATE THEN GO TO GENERATE JMP NZMOD PACER COMMAND WORD ADB M1 ELSE, GENERATE A 10 MS DELAY INA BEFORE PROGRAMMED ISZ ENTNM RATE STARTS SPC 1 NZMOD STB DEFBF STORE QUEUE BUFFER ADDRESS LSL 3 GENERATE IOR MULT,I PACER LSL 8 COMMAND IOR RATE,I WORD IOR =B60000 AND STA CMD2 SAVE SPC 1 JSB EXEC ************************ DEF *+5 SET DEF .2 UP DEF LU PACER DEF QBUF DEF .1 ******************************* * AND =B200 SZA JMP ERR1 SPC 1 SZB IF ZERO TRANS. LOG GIVE ERROR 1 JMP ENTRY,I SPC 4 * ERROR ROUTINES FOR 2313 INTERFACE * ERR1 - ERROR NUMBER 1 * ERR2 - ERROR NUMBER 2 * ERRC - ERROR NUMBER (A REGISTER) * ERR1 CLA,INA,RSS SET ERROR TO 1 ERR2 LDA .2 SET ERROR TO 2 ERRC STA ERRNM SAVE ERROR NUMBER JSB ERROR CALL DEF *+3 BASIC DEF ERRNM ERROR DEF ERRMS ROUTINE SPC 1 JMP ENTRY,I RETURN SKP ERRMS DEC 3 ERROR MESSAGE IN ASCII ASC 2,ADC STRING NOTATION SPC 1 QBUF OCT 3 ENTNM NOP DEFBF NOP DCMD2 DEF CMD2 OCT 61412 10 MS START IMMEDIATE CMD2 NOP SKP A EQU 0 B EQU 1 NMCHN EQU NUM1 CNTR EQU NUM2 ERRNM EQU FCHN LU EQU ERRA SINGL EQU AIRDV SEQ EQU GN1 CHANL EQU CHN2 REMCH EQU SGAIN .ADC EQU RATE ADRS EQU NORM ADRS1 EQU SETUP MCHN EQU SCHAN TEMP EQU GCHN AFCTR EQU RGAIN ENTRY EQU AISQV .1 EQU RBUF2+1 .2 EQU RBUF1+1 .3 EQU RBUF1 .5 EQU RBUF2 PACED EQU CHN1 LOOPC EQU FCHN DMALU EQU PACER END ASMB,R,L,C,F,B HED BASIC DEVICE SUBROUTINES FOR HP2313B NAM AOV,7 ENT AOV EXT .ENTR,EXEC,ERROR,..DAC SUP A EQU 0 B EQU 1 * * AOV PERFORMS ANALOG OUTPUT TO THE HP2313B DUAL DAC CARD USING * RTE DRIVER DVR62. * * CALLING SEQUENCE: * CALL AOV(NUM,CHAN,VOLT,ERR) * WHERE: * NUM - ABS(NUM) = NUMBER OF OUTPUT VALUES * NUM < 0 PACED OUTPUT * NUM > 0 UNPACED OUTPUT * CHAN - FLOATING POINT ARRAY OF ANALOG OUTPUT CHANNEL NUMBERS * VOLT - FLOATING POINT ARRAY OF OUTPUT VOLTAGES * ERR - NUMBER OF OUTPUT VALUES EXCEEDING MAXIMUM * * IF AN OUTPUT VALUE EXCEEDS THE MAXIMUM, THE MAXIMUM VALUE OF THE * CORRESPONDING SIGN IS OUTPUT AND THE ERROR NOTED IN IERR. * NUM NOP CHAN NOP VOLT NOP ERR NOP AOV NOP JSB .ENTR FETCH PARAMETER DEF NUM ADDRESSES CLB INITIALIZE ERROR STB ERR,I FLAG TO ZERO LDA NUM,I FETCH NUMBER OF CHNLS SZA,RSS IF ZERO JMP ERR2 RETURN SSA IF NEGATIVE LDB =B10000 SET PACE BIT STB PACED AND SAVE SSA,RSS IF POSITIVE CMA,INA COMPLEMENT AND STA NUM SAVE FOR LOOP COUNTER SKP * ANALOG OUTPUT LOOP STARTS HERE AOV1 DLD VOLT,I FETCH OUTPUT FMP =F3200. VOLTAGE AND CONVERT FIX TO INTEGER SOS IF OVERFLOW IS CLEAR JMP STVLT STORE VOLTAGE LDB VOLT,I ELSE, SET DAC TO SSB MAXIMUM POSITIVE CMA OR NEGATIVE VOLTAGE ISZ ERR,I BUMP ERROR COUNTER SPC 1 STVLT AND =B177760 MASK UPPER 12 BITS STA OUTV AND SAVE IN OUTPUT BUFR SPC 1 DLD CHAN,I FETCH CHANNEL NUMBER FIX CONVERT TO INTEGER CMA,SSA,INA,SZA AND COMPLEMENT RSS IF < = 0 THEN JMP ERR2 GIVE ERROR #2 STA CNTR SAVE -( CHANNEL NUM. ) LDB ..DAC FETCH DAC TABLE ADDRESS ADA B,I IF ADDRESSED SSA CHANNEL IS NOT DEFINED JMP ERR2 GIVE ERROR SPC 1 RSS FDAC STA CNTR SAVE -(#CHANNELS REMAINING) INB BUMP DAC TABLE ADDRESS LDA B,I FETCH NEXT TABLE ENTRY AND =B7 AND MASK OF #CHNLS-1 ADA CNTR ADDRESSED CHANNEL SSA,INA,SZA IN THIS ENTRY? JMP FDAC NO, CONTINUE SEARCH SPC 1 LDA B,I FETCH CHANNEL ENTRY CLB EXTRACT LU ASL 6 FROM ENTRY STB LU AND SAVE ASR 4 SHIFT AND AND =B7740 MASK BOX AND SLOT NUMBER LDB CNTR FETCH CHANNEL CMB NUMBER AND BLF "OR" INTO IOR B COMMAND WORD IOR PACED OR IN PACE BIT IOR =B40001 OR IN COMMAND CODE STA CMND SAVE COMMAND WORD SPC 1 JSB EXEC ************************* DEF *+5 DEF .2 PERFORM DEF LU ANALOG DEF QBUF OUTPUT DEF .1 ************************** * AND =B200 SZA,RSS SPC 1 SZB,RSS IF TRANSMISSION LOG EQUALS JMP ERR1 ZERO, GO TO ERROR 1 SPC 1 ISZ VOLT UPDATE ISZ VOLT VOLTAGE ISZ CHAN AND ISZ CHAN CHANNEL ARRAY POINTERS ISZ NUM LAST CHANNEL? JMP AOV1 NO, CONTINUE JMP AOV,I YES, RETURN SPC 2 ERR1 CLA,INA,RSS ERROR #1 HERE ERR2 LDA .2 ERROR #2 HERE STA ERRNM SAVE ERROR NUMBER JSB ERROR CALL DEF *+3 BASIC'S DEF ERRNM ERROR DEF ERRMS ROUTINE JMP AOV,I AND RETURN SPC 2 ERRMS OCT 3 ASC 2,AOV QBUF OCT 3 .2 OCT 2 DEF CMND SPC 1 CMND NOP OUTV NOP PACED NOP ERRNM EQU PACED CNTR NOP LU NOP .1 OCT 1 END