ASMB,R,B,L HED ** RTE-B DEVICE SUBROUTINE (CTR27) ** * * ***************************************** * * RELOC. TAPE 09601-16010 * SOURCE TAPE 09601-18010 * ERS 09601-16010-1 * LISTING 09601-16010-2 * ***************************************** * * * A. WERNICK AUG. 1973 REV A * * * * * CTRSF MAY BE CALLED BY RTE BASIC OR FORTRAN PROGRAMS * TO REMOTE PROGRAM THE 5327B-H48 TIMER/COUNTER/DVM FOR FREQ/TIME * MEASUREMENTS USING RTE DRIVERS DVR54 AND DVR40 * * CALL STATEMENT (FORTRAN/BASIC): * * CALL CTRSF(F,T,A,B,G,H,C) * * F= FUNCTION CODE (INTEGER) * T= TIME BASE CODE (INTEGER) * A= INPUT A ATTENUATOR AND AC/DC CODE (INTEGER) * B= INPUT B ATTENUATOR & AC/DC CODE (INTEGER) * G= INPUT A TRIGGER LEVEL (INTEGER) * H= INPUT B TRIGGER LEVEL (INTEGER) * C= SEP/COM INPUT (INTEGER) * * NAM CTR27,7 09601-16010 REV A * ENT CTRSF EXT .ENTR,EXEC,.FAD,.FDV,IFIX,ERROR,#CTRA EXT .DST,.FMP,FLOAT,.RTOI,CONV,#CTRB EXT ERR0,.DLD EXT #ERRU * IFUNC NOP ITIME NOP INPTA NOP INPTB NOP TRIGA NOP TRIGB NOP ICOM NOP * CTRSF NOP ENTRY POINT JSB .ENTR GET PARAMETER ADDRESSES DEF IFUNC LDA CTRSF STORE EXIT ADDRESS STA EXITR LDA CDEF1 STORE ENTRY POINT STA ENDEF CLA STA DATA1 CLEAR STA DATA2 DATA STA DATA3 WORD STA DATA4 STORAGE STA DATA5 BUFFERS LDA SET1 STA PNTR1 PRESET LDA SET2 POINTERS STA PNTR2 LDA SET3 STA PNTR3 LDA IFUNC,I BRING IN FUNCTION STA FUNCT SAVE FOR CTRMF CALL ADA M10 SUBTRACT 10 SSA IS IT NEGITIVE ? JMP *+4 LDB .4 NO, ITS CHECK STB DATA1 RSS LDA IFUNC,I NORMAL PATH CLB CPA B COMPARE CODE JMP *+6 INB INCREMENT CODE KEY ISZ PNTR1 INCREMENT POINTER CPB .10 JMP ERR1 ILLEGAL CODE REJECT JMP *-6 LDA PNTR1,I SET UP IOR DATA1 WORD 1 STA DATA1 * *TIME * LDA ITIME,I BRING IN BASE CODE STA TIMER SAVE FOR CTRMF CALL CLB CPA B COMPARE CODE JMP *+6 INB INCREMENT CODE KEY ISZ PNTR2 INCREMENT POINTER CPB .9 JMP ERR1 ILLEGALdO- REJECT JMP *-6 LDA PNTR2,I SET UP STA DATA2 WORD 2 * LDA INPTA,I GET ATTN. A CODE JSB COMPR GO GET DATA WORD ALF,ALF STA DATA3 * LDA SET3 ADJUST STA PNTR3 POINTER LDA INPTB,I GET ATTN. B CODE JSB COMPR GO GET DATA WORD IOR DATA3 STA DATA3 STORE IN BUFFER * * LDA DATA3 GET A CHN MULT ALF,ALF POSITION AND .3 MASK STA HOLD SAVE JSB .DLD BRING IN LEVEL A DATA DEF TRIGA,I JSB TRIGR CONVERT STA DATA4 STORE IN BUFFER * LDA DATA3 GET B CHN MULT AND .3 MASK STA HOLD SAVE JSB .DLD BRING IN LEVEL B DATA DEF TRIGB,I JSB TRIGR CONVERT STA DATA5 STORE IN BUFFER * LDA ICOM,I SZA,RSS ZERO ? JMP ERR1 YES,ERROR ADA M3 TEST IF >M2 SSA,RSS JMP ERR1 YAES,ERROR ADA .3 RESTORE AND .1 MASK IOR DATA4 PUT IN DATA STA DATA4 WORD 4 CLA,INA PUT EXTERNAL PROG BIT IOR DATA5 IN WORD 5 STA DATA5 LDA FUNCT CPA .4 IS START (4) RSS JMP DONE ISNT CONTINUE LDA DATA1 IS,GET DATA1 STA TEMP1 AND SAVE LDA .2 GET RESET CODE STA DATA1 AND PUT IN BUFFER JSB WRITE OUTPUT RESET COMMAND LDA TEMP1 RESTORE DATA1 STA DATA1 DONE JSB WRITE JMP CTRSF,I RETURN TO USERS PROGRAM * DATA0 NOP DATA1 NOP DATA DATA2 NOP WORD DATA3 NOP STORAGE DATA4 NOP BUFFERS DATA5 NOP CDEF1 DEF CTRSF POINTER TO ENTRY PT * * PNTR1 DEF LIST1 FUNCTION LIST LIST1 OCT 5000 OCT 5000 OCT 5400 OCT 4400 OCT 7410 OCT 2400 OCT 7000 OCT 6000 OCT 6400 OCT 0001 * PNTR2 DEF LIST2 TIME BASE LIST LIST2 OCT 7400 OCT 7000 OCT 6400 OCT 6000 OCT 5400 OCT 5000 OCT 4400 OCT 4000 OCT 3400 * PNTR3 DEF LIST3 ATTENUATORS LIST LIST3 OCT 0 OCT 1 OCT 2 OCT 4 OCT 5 OCT 6 OCT 10 OCT 11 OCT 12 OCT 14 OCT 15 OCT 16 * * TRIGR NOP CONVERT TRIGGER LEVEL DATA STA SAVE SAVE A-REG LDA HOLD GET MULTIPLIER SZA,RSS X1? JMP PROC YES,PROCEED SLA,RSS X100? JMP X100 YES,SCALE LDA SAVE X10,RESTORE A-REG JSB .FDV DIVIDE BY 10.0 DEF FP10 STA SAVE JMP PROC PROCEED X100 LDA SAVE X100,RESTORE A-REG JSB .FDV DIVIDE BY 100.0 DEF FP100 STA SAVE PROC LDA SAVE JSB .FAD ADD 3.175 AND LEVEL DATA DEF RANG JSB .FDV DIVIDE RESULT BY 50MV DEF RESOV JSB IFIX CONVERT F.P. TO INTEGER NOP SSA NEGATIVE ? JMP ERR1 YES,ERROR ADA M128 TEST IF > 7 BITS SSA,RSS JMP ERR1 YES,ERROR ADA .128 NO,RESTORE CMA INVERT BITS STA HOLD AND .7 ADJUST RAL STA B BITS LDA HOLD FOR AND B170 OUTPUT ALF,RAL IOR B JMP TRIGR,I RANG DEC 3.175 RESOV DEC .05 HOLD NOP * COMPR NOP ATTENUATOR COMPARE CLB CPA B COMPARE CODE JMP *+6 INB INCREMENT CODE KEY ISZ PNTR3 INCREMENT POINTER CPB .12 JMP ERR1 ILLEGAL CODE- REJECT JMP *-6 LDA PNTR3,I GET DATA WORD JMP COMPR,I * SET1 DEF LIST1 SET2 DEF LIST2 SET3 DEF LIST3 CDEF2 DEF CTRMF POINTER TO ENTRY PT. CDEF3 DEF CTRMV " " " " * * * CTRMF MAY BE CALLED BY A FORTRAN OR ALGOL PROGRAM * TO SIMPLIFY READING FREQUENCY/TIME DATA FROM THE * HP 5327B-H48 TIMER/COUNTER/DUM USING THE RTE DRIVER * DVR40. * * CALL STATEMENT (FORTRAN OR BASIC): * * CALL CTRMF(V,D) * * V = MEASURED FREQUENCY OR TIME TO 6 SIGNIFICANT DIGITS * D = LAST 1 OR 2 DIGITS IF 7 OR 8 DIGITS DISPLAYED * * * * ENT CTRMF * * * VALUE NOP DIGTS NOP * CTRMF NOP ENTRY POINT JSB .ENTR DEF VALUE LDA CTRMF STORE ENTRY POINT AS EXIT ADDRS STA EXITR LDA CDEF2 STORE DEF TO ENTRY PT STA ENDEF LDA FUNCT GET FUNCTION CPA .4 START ? JMP ERR2 YES,ERROR-NO STOP CPA .5 IS IT STOP ? JMP STOP YES,DO A SPECIAL READ JSB READ READ DATA FROM DSI CARD P.1 CLA A=0 STA TEMP1 INITIALIZE STA TEMP1+1 DIGITS TO 0 LDB TIMER GET TIMEBASE LDA FUNCT GET FUNCTION PROGRAMMED ADA M10 TEST IF 10-19 SSA LDA FUNCT <10,RESTORE CPA .1 FREQUENCY ? JMP FREQ YES CPA .2 PERIOD ? JMP PERD YES CPA .3 FREQUENCY C? JMP FREQ YES CPA .5 STOP ? JMP CONT YES,DONT SCALE CPA .6 PERIOD AVG ? JMP PERAV YES CPA .7 TIME INTERVAL JMP PERD YES,PROCESS SAME AS PERIOD CPA .8 TIME INTERVAL AVG? JMP PERAV YES,PROCESS AS PERIOD AVG CPA .9 FREQ C / 10 ? JMP FREQX YES SZA,RSS CHECK ? JMP FREQ YES,TREAT AS FREQ JMP ERR1 * FREQ CMB,INB ADB .7 MAKE EXPONENT 7-T JMP CONT CONTINUE PERD ADB M7 MAKE EXPONENT T-7 JMP CONT FREQX CMB,INB ADB .8 MAKE EXPONENT T-8 JMP CONT PERAV CMB,INB MAKE EXPONENT ADB M7 -T-7 CONT STB EXPON SAVE EXPONENT * JSB CONVT CONVERT BCD TO BINARY JSB .DST OUTPUT DEF VALUE,I 6 SIG DIGITS JSB .DLD GET DEF TEMP1 LSD * JSB .DST SEND DEF DIGTS,I LSD TO CALLING PROG * JMP CTRMF,I RETURN * STOP JSB EXEC DEF *+5 DO A READ WITH OUT ENCODE DEF .1 DEF JUNIT DEF DATA DEF .3 JMP P.1 RETURN T0 PROCESS DATA * * CTRMV MAY BE CALLED BY A FORTRAN OR ALGOL PROGRAM * TO SIMPLIFY READING AN INPUT VOLTAGE OR TRIGGER * A AND B LEVELS WITH THE HP 5327B TIMER/COUNTER/DVM * USING RTE DRIVERS DVR54 AND DVR40. * * CALL STATEMENT (FORTRAN): * * CALL CTRMV(M,R,T,V) * * M = MODE OF OPERATION (INPUT/TRIGA/TRIGB) (INTEGER) * R = DVM VOLTAGE RANGE (INTEGER) * T = INTEGRATION TIME (REAL) * V = MEASURED VOLTAGE (REAL) * * * * ENT CTRMV * * * MODE NOP RANGE NOP TIME NOP VOLTS NOP * CTRMV NOP ENTRY POINT JSB .ENTR DEF MODE LDA CTRMV STORE EXIT ADDRS STA EXITR LDA CDEF3 STORE DEF TO ENTRY PT STA ENDEF LDA MODE,I SSA LESS THAN 0? JMP ERR1 YES,ERROR ADA M3 SSA,RSS GREATER THAN 2 ? JMP ERR1 YES,ERROR LDA MODE,I GET MODE SZA ZERO ? JMP VTRIG NO,1 OR 2,MEASURE TRIGGER VOLTS JSB .DLD DEF RANGE,I GET RANGE,I JSB IFIX INTEGER NOP CCB CPA .10 10 VOLT RANGE CLB CPA .100 100 VOLT RANGE CLB,INB CPA .1000 1000 VOLT RANGE LDB .2 SSB ERROR ? JMP ERR1 YES STB RGECD SAVE RANGE CODE JSB .DLD DEF TIME,I GET INTEG TIME JSB .FMP DEF F1000 MULT BY 1000 JSB .FAD DEF HALF ROUND OFF JSB IFIX NOP LDB M5 GET COUNTER STB TEMP1 SAVE LDB TABLA GET TABLE POINTER AGAIN CPA B,I IS IT 1,10,100,1000,OR 10000 ? JMP GOTIT YES INB NO ISZ TEMP1 TRY JMP AGAIN AGAIN JMP ERR1 NONE OF THE ABOVE,ERROR GOTIT LDB TEMP1 ADB .9 FORM INTEGRATION CODE JMP SVINT VTRIG CLA FORM RANGE CODE FOR MODE 1OR2 STA RGECD SAVE RANGE CODE LDB .5 FORM INTEG CODE FOR MODE 1OR 2 SVINT STB INTEG SAVE INTEG CODE LDA MODE,I GET MODEE CODE SZA,RSS JMP DVM0 MODE=0 CMA FORM CODES AND .3 FOR READ DVM0 ADA .6 LEVEL A ALF,ALF OR LEVEL B STA DATA1 STORE IN OUTPUT BUFFER CLA LDB MODE,I SZB MODE=1 OR 2 ? JMP .1OR2 YES LDA RGECD GET RANGE CODE LDB .4 FORM CPA .1 LDB .2 RANGE CPA .2 LDB .1 WORD IN B LDA INTEG GET INTEG CODE CMA FORM AND .15 INTEG ALF,ALF WORD IN A IOR B COMBINE TO FORM PROG WORD .1OR2 IOR .8 ADD HOLD BIT STA DATA2 PUT IN OUTPUT BUFFER LDA DATA5 IOR .1 SET EXTERNAL BIT STA DATA5 JSB WRITE OUTPUT PROGRAM WORD JSB READ READ RETURN DATA LDA INTEG GET INTEG CONST CMA,INA FORM ADA .3 EXPONENT ADA RGECD FOR CONVERSION STA EXPON AND SAVE JSB CONVT CONVERT TO FLOATING POINT JSB .DST RETURN DEF VOLTS,I VALUE TO CALLING PROG * JMP CTRMV,I RETURN TO CALLING PROGRAM * * THIS SUBROUTINE CONVERTS 6 OR 7 DIGITS OF BCD * DATA TO FLOATING PONT THE DATA TO BE CONVERTED * IS STORED IN DATA AND DATA+1.THE APPROPRIATE * EXPONENT MUST BE STORED IN EXPON, IF THE DATA IN * DATA+1 INDICATES OVERFLOW, THE VALUE .9.....E9 * WILL BE RETURNED . THE RETURNED DATA WILL BE IN * THE A AND B REGISTERS IN NORMAL FLOATING POINT FORM * IF 7 DIGITS EXIST,THE LSD WILL BE STORED IN TEMP1 AND TEMP2 * CONVT NOP LDA DATA+1 GET DATA WORD #2 ALF POSITION ANNUNCIATOR AND .15 AND MASK SZA,RSS OVERFLOW ? JMP OVERF YES LDB B400 + POLARITY,VOLT/FREQ/TIME CPA .7 TIME/FRQ/COUNT ? JMP *+3 YES,SKIP POLARITY SLA LDB B1000 - POLARITY,VOLTS STB SAVE SAVE FOR LATER * LDA DATA+1 GET DATA WORD #2 ALF,ALF POSITION DIGIT #7 AND .15 AND MASK CPA .15 BLANK ? JMP SIX YES,SIX DIGITS SZA,RSS ZERO ? JMP SIX YES * LDA DATA GET LEAST SIG WORD AND .15 AND KEEP DIGIT #1 JSB FLOAT FLOAT JSB .DST AND DEF TEMP1 SAVE * LDA DATA+1 GET DATA WORD #2 AND .15 AND SAVE DIGIT #5 STA B SAVE * LDA DATA+1 GET DATA WORD #2 ALF,ALF AND ALF POSITION AND B377 KEEP DIGITS 6&7 STA DATA+1 SAVE * LDA DATA GET DATA WORD #1 AND MASK MASK OFF DIGIT #1 ADA B ADD DIGIT #5 (4-3-2-5) ALF,ALF POSITION SO ORDER ALF IS (5-4-3-2) STA DATA * ISZ EXPON INCREMENT EXPONENT FOR 7 DIGITS NOP SHOULDN'T SKIP * SIX LDA DATA+1 GET DATA WORD #2 AND B377 KEEP LAST 2 DIGITS IOR SAVE ADD POLARITY STA DATA+1 STORE DATA WD JSB CONV DEF *+2 DEF DATA JSB .DST SAVE IN DEF TEMP2 TEMP2 FOR LATER JSB .RTOI MAKE MULTIPLIER DEF FP10 DEF EXPON JSB ERR0 HERE ONLY IF ERROR JSB .FMP SCALE DATA DEF TEMP2 * JMP CONVT,I RETURN * OVERF JSB .DLD GET 9.99999E9 DEF MAX TO INDICATE OVERFLOW * JMP CONVT,I RETURN * * * * * THIS SUBROUTINE READS DATA FROM THE 32 BIT * DSI CARD VIA DVR40.IT RETURNS 2 16 BIT DATA * WORDS TO STORAGE WORDS DATA AND DATA+1 . * * READ NOP JSB EXEC INPUT DEF *+5 VIA DEF .1 AN DEF JUNIT EXEC DEF DATA CALL DEF .2 TIO DVR40 * JMP READ,I RETURN * * * * THIS SUBROUTINE PROGRAMS THE 40 BIT GPO * CARD VIA DVR54.IT EXPECTS ALL 5 (ASCII * FORMAT) PROGRAM WORDS TO BE STORED IN * DATA1 THRU DATA5. * * * WRITE NOP JSB EXEC OUTPUT DEF *+5 VIA DEF .2 AN DEF IUNIT EXEC DEF DATA0 CALL DEF .6 TO DVR54 * JMP WRITE,I RETURN * * * * THIS SUBROUTINE EMITS AN ERROR MESSAGE VIA ERR0 * THERE ARE ENTRY POINTS OUTLINED BELOW * * ERR1- MESSAGE CTR 1 IS A PARAMETER ERROR * ERR2- MESSAGE CTR 2 IS A 'START' PROGRAMMED * WITHOUT 'STOP' * * THE RESULT OF EXITING THIS PROGRAM IS ABORTION OF THE * CALLING PROGRAM. * ERR1 LDA .1 STA ERRNO JMP OUT ERR2 LDA .2 STA ERRNO OUT JSB ERROR DEF *+5 DEF ERRNO DEF ERRMN DEF LUERR DSPLY UNIT FOR ERR MSG DEF ENDEF ENTRY POINT JMP EXITR,I ******EXIT****** ERRNO NOP ERRMN DEC 3 ASC 2,CTR * * CONSTANTS AND STORAGE * .1 DEC 1 .2 DEC 2 .3 DEC 3 .4 DEC 4 .5 DEC 5 .6 DEC 6 .7 DEC 7 .8 DEC 8 .9 DEC 9 .10 DEC 10 .12 DEC 12 .15 DEC 15 .100 DEC 100 .128 DEC 128 .1000 DEC 1000 M3 DEC -3 M7 DEC -7 M10 DEC -10 M128 DEC -128 M5 DEC -5 B377 OCT 377 B400 OCT 400 B1000 OCT 1000 B170 OCT 170 MASK OCT 177760 FP10 DEC 10.0 FP100 DEC 100.0 F1000 DEC 1000. MAX DEC 9.99999E9 B EQU 1 HALF DEC 0.5 TABLA DEF TABL TABL DEC 1,10,100,1000,10000 * * * LUERR EQU #ERRU DSPLY UNIT FOR ERR MSG EXITR NOP EXIT ADDRESS ENDEF NOP DEF TO ENTRY POINT DATA NOP DATA WORD STORAGE NOP DEC -1 IFUN =-1 FOR DVR 40 TIMER NOP TIME PROGRAMMED FUNCT NOP FUNCTION PROGRAMMED TEMP1 BSS 2 TEMPORARY STORAGE TEMP2 BSS 2 TEMPORARY STORAGE SAVE NOP STORAGE RGECD NOP RANGE CODE STORAGE INTEG NOP INTEGRATION CODE STORAGE EXPON NOP EXPONENT STORAGE IUNIT EQU #CTRA JUNIT EQU #CTRB END