ASMB,A,L ORG 13142B SPC 3 * *********************************************** * * * * * HP-3450A DATA SOURCE INTERFACE DRIVER * * * * * * -- BY -- * * * * * * STEVEN A. STARK * * * HEWLETT-PACKARD * * * PARAMUS, N.J. * * * * * *********************************************** SPC 3 * I. IDENTIFICATION - SAS 0026 REV. 2 9/5/71 * ----------------- * * II. LANGUAGE - ASSEMBLY LANGUAGE, ABSOLUTE * ------------ * * III. TYPE - BASIC CALLABLE SUBROUTINE * --------- * * IV. LENGTH - 177 (DECIMAL) WORDS * ---------- * * V. SPECIAL HARDWARE REQUIRED - * ---------------------------- * * A. HP-3450A MULTI-FUNCTION METER * B. HP-12604B DATA SOURCE INTERFACE KIT * * VI. DESCRIPTION - * --------------- * * WHEN CALLED, THE DRIVER WILL FIRST SEND AN ENCODE COMMAND * TO THE DVM TO BEGIN A MEASUREMENT. IT WILL THEN WAIT IN A * PROGRAM LOOP UNTIL THE MEASUREMENT IS COMPLETED, AT WHICH * TIME IT WILL INPUT THE BCD DATA FROM THE DVM. THE DRIVER * THEN PROCESSES THE DATA, CONVERTING THE VOLTMETER READING * AND THE FUNCTION CODE INTO FLOATING POINT NUMBERS, WHICH * ARE THEN RETURNED TO THE CALLING PROGRAM. IF AN OVERLOAD * OCCURS OR A MEASUREMENT IS NOT COMPLETED WITHIN A PERIOD * OF TEN SECONDS, THE DRIVER RETURNS TO THE CALLING PROGRAM * WITH THE APPROPRIATE ERROR INDICATION. * * VII. ENTRY POINTS - IDVM * ----------------- * * VIII. EXTERNAL SUBROUTINES - FLOAT, FMP, FAD * -------------------------- * HED HP-3450A DATA SOURCE INTERFACE DRIVER - SAS 0026 * * * * IX. CALLING INFORMATION - * ----------------------- * * THE DRIVER IS CALLED FROM BASIC AS: * * CALL (1, D, F) * * WHERE D - A VARIABLE SET TO THE VALUE OF * THE DVM READING UPON RETURN TO * THE CALLING PROGRAM. * * F - A VARIABLE SET TO THE VALUE OF * THE FUNCTION CODE OF THE DVM, * AS SHOWN BELOW, UPON RETURN TO * THE CALLING PROGRAM. * * NO. FUNCTION * ----- ------------- * * -1 NO RESPONSE * 0 DC VOLTS * 1 AC VOLTS * 2 OHMS * 4 DC RATIO * 5 AC RATIO * 6 OHMS RATIO * 7 OVERLOAD * * * SKP * * * X. PROGRAMMING NOTES - * -------------------- * * 1. THIS PROGRAM SHOULD BE USED ONLY IN CONJUNCTION * WITH THE HP-24000A BASIC COMPILER. USE WITH ANY * OTHER VERSION OF THE BASIC COMPILER WILL RESULT * IN UNSUCCESSFUL PROGRAM EXECUTION. * * 2. TO OVERLAY THE MATRIX OPERATIONS OF THE COMPILER * WITH THIS PROGRAM, THE N OPTION MUST BE INCLUDED * IN THE CONTROL STATEMENT DURING ASSEMBLY. * * 3. TO CONFIGURE THIS PROGRAM FOR USE WITH DIFFERENT * I/O CHANNELS, FOLLOW THE PROCEDURE BELOW- * * A. LOAD THE BASIC COMPILER, USING THE BBL. * * B. LOAD THE HP-3450A DATA SOURCE INTERFACE * DRIVER, USING THE BBL. * * C. LOAD ADDRESS TO 77B. * * D. LOAD THE A-REGISTER WITH THE SELECT CODE OF * THE DATA SOURCE INTERFACE CARD. * * E. PRESS PRESET. * * F. PRESS RUN. * * THE COMPUTER WILL NOW HALT WITH A 102077 IN THE * T-REGISTER AND THE DRIVER IS READY FOR USE. * * SKP * * * XI. PROGRAM LISTING - * ------------------- * IFN ORG 11456B PROGRAM BEGINS AT THIS ADDRESS FOR XIF OVERLAY OF MATRIX OPERATIONS * DVM EQU 23B ASSIGN I/O CHANNEL NUMBER * * * IDVM ENTRY POINT * * IDVM NOP RETURN ADDRESS JSB .ENTR GET PARAMETER ADDRESSES * LDA INSTR PUT CLC IN TRAP CELL IN1 STA DVM * * BEGIN DVM READING AND WAIT UNTIL COMPLETED * IN2 STC DVM,C SEND ENCODE COMMAND TO DVM CLA SET .1 SEC. COUNTER = 0 CLB SET 10 USEC. COUNTER = 0 WAIT INB INDEX 10 USEC. COUNTER CPB D10K IS IT = 10000? (.1 SEC.?) JMP *+4 YES, GO ON & INDEX .1 SEC. CNTR. IN3 SFS DVM HAS DVM FINNISHED READING? JMP WAIT NO, RETURN & LOOP AGAIN JMP INDAT YES, GO ON & LOAD BCD DATA IN * INA INDEX .1 SEC. COUNTER CPA D100 IS IT = 100? (10 SECONDS?) JMP FAIL YES, GO TO FAIL ROUTINE JMP WAIT-1 RETURN & LOOP AGAIN * INDAT LIB DVM LOAD BCD DATA INTO A & B REGS LIA DVM SKP * * PROCESS RANGE AND FUNCTION DIGITS * STA SAVA SAVE BCD DIGITS FOR LATER USE STB SAVB ALF SHIFT RANGE BITS TO BITS 0-3 AND M7 ISOLATE RANGE DIGIT STA RANGE SAVE IT * LDA SAVA RELOAD A WITH ORIGINAL CONTENTS AND BIT15 ISOLATE OVERLOAD BIT SZA IS THERE AN OVERLOAD? JMP OVER YES, GO TO OVERLOAD ROUTINE * LDA SAVA RELOAD A WITH ORIGINAL CONTENTS ALF,ALF SHIFT FUNCTION BITS TO BITS 0-3 RAR AND M7 ISOLATE FUNCTION DIGIT JSB FLOAT,I CONVERT FUNCTION TO FLOATING PT. STA PARA2,I STORE IN MAIN PROGRAM STB PARA2+1,I * SKP * * PROCESS DATA DIGITS * LDA SAVB LOAD A WITH 4 LS BCD DIGITS & JSB BCDTB CONVERT THEM TO FLOATING POINT STA TEMP1 STORE THEM TEMPORARILY STB TEMP1+1 LDA SAVA LOAD A WITH 2 MS BCD DIGITS & AND M377 ELIMINATE RANGE & FUNCTION BITS JSB BCDTB CONVERT 2 MS DIGITS TO FLOAT. PT. JSB FMP,I MULTIPLY BY DEC 10000 AND DEF .D10K JSB FAD,I ADD IN LS RESULT TO GET TOTAL DEF TEMP1 STA TEMP1 STORE TOTAL VALUE TEMPORARILY STB TEMP1+1 * LDA ADDR2 GET NEG. POWER OF 10 TABLE ADA RANGE STARTING ADDRESS AND ADD ADA RANGE RANGE X 2 TO FORM POINTER STA PNTR SAVE IT FOR INDIRECT ADDRESS LDA PNTR,I GET CORRESPONDING NEGATIVE ISZ PNTR POWER OF 10 FROM TABLE LDB PNTR,I JSB FMP,I MULTIPLY IT BY TOTAL VALUE TO GET DEF TEMP1 TRUE DECIMAL VALUE STA TEMP1 SAVE IT STB TEMP1+1 * LDA SAVA RELOAD A WITH ORIGINAL CONTENTS AND BIT8 ISOLATE POLARITY BIT SZA,RSS IS POLARITY NEGATIVE? JMP END NO, SKIP THIS PART * LDA TEMP1 YES, RELOAD DATA VALUE & CHANGE LDB TEMP1+1 JSB FMP,I SIGN TO NEGATIVE DEF .DM1 JMP *+3 * END LDA TEMP1 RELOAD DATA VALUE LDB TEMP1+1 STA PARA1,I STORE DATA VALUE IN MAIN PROGRAM STB PARA1+1,I JMP IDVM,I RETURN TO MAIN PROGRAM SKP * * FAIL AND OVERLOAD ROUTINES * FAIL JSB CLEAR SET DATA LOCATIONS TO 0 CCA SET A-REG TO -1 (NO RESPONSE) JSB FLOAT,I CONVERT IT TO FLOATING POINT STA PARA2,I STORE IT IN MAIN PROGRAM STB PARA2+1,I JMP IDVM,I RETURN TO CALLING PROGRAM * OVER LDA M7 GET OVERLOAD CODE JSB FLOAT,I CONVERT IT TO FLOATING POINT STA PARA2,I STORE IT IN MAIN PROGRAM STB PARA2+1,I JSB CLEAR SET DATA LOCATIONS TO 0 JMP IDVM,I RETURN TO CALLING PROGRAM * CLEAR NOP CLA SET A AND B REGS = 0 CLB STA PARA1,I STORE 0'S IN DATA LOCATIONS STB PARA1+1,I JMP CLEAR,I RETURN TO MAIN PROGRAM * * BCD TO BINARY CONVERSION * BCDTB NOP RETURN ADDRESS LDB DM16 INITIALIZE BIT COUNTER TO -16 STB CNTR LDB ADDR1 GET TABLE STARTING ADDRESS STB PNTR SAVE IT FOR INDIRECT ADDRESS CLB LOOP1 SLA IS LSB = 0? ADB PNTR,I YES, ADD EQUIV. OCTAL VALUE TO B ISZ PNTR NO, INCREMENT CONVERSION POINTER RAR SHIFT NEXT BIT TO LSB ISZ CNTR INCREMENT BIT COUNTER, IS IT = 0? JMP LOOP1 NO, RETURN & CONVERT NEXT BIT LDA 1 YES, LOAD OCTAL EQUIV. INTO A JSB FLOAT,I AND CONVERT IT TO FLOATING POINT JMP BCDTB,I RETURN TO MAIN PROGRAM * * PARAMETER ADDRESS ROUTINE * .ENTR NOP RETURN ADDRESS LDB 0,I LOAD 1ST ADDRESS INTO B STB PARA1 STORE IT INB STB PARA1+1 * ADA DM1 MOVE POINTER TO NEXT ADDRESS LDB 0,I LOAD 2ND ADDRESS INTO B STB PARA2 STORE IT INB STB PARA2+1 JMP .ENTR,I RETURN TO MAIN PROGRAM * SKP * * POINTERS * FAD EQU 236B FMP EQU 240B FLOAT DEF 11432B * * CONSTANTS * SAVA BSS 1 SAVB BSS 1 RANGE BSS 1 TEMP1 BSS 2 PNTR BSS 1 CNTR BSS 1 PARA1 BSS 2 PARA2 BSS 2 * M7 OCT 7 M377 OCT 377 BIT8 OCT 400 BIT15 OCT 100000 D100 DEC 100 D10K DEC 10000 DM1 DEC -1 DM16 DEC -16 .D10K DEC 10000. .DM1 DEC -1. * INSTR CLC DVM * SUP * * TABLES * * A. BCD-TO-BINARY CONVERSION TABLE * ADDR1 DEF *+1 DEC 1,2,4,8,10,20,40,80 DEC 100,200,400,800,1000,2000,4000,8000 * * B. RANGE CONVERSION TABLE * ADDR2 DEF *+1 DEC 1.,1.E-01,1.E-02,1.E-03 DEC 1.E-04,1.E-05,1.E-06,1.E-07 * * C. SUBROUTINE PARAMETER TABLE * SBTBL OCT 1001 DEF IDVM ENDTB EQU * SKP * * SPECIAL CONSTANTS * ORG 121B DEFINE SUBROUTINE TABLE DEF SBTBL DEF ENDTB * ORG 110B DEFINE FWAM DEF ENDTB * IFN ORG 4107B THESE CONSTANTS ARE USED WHEN OCT 32003 OVERLAYING MATRIX OPERATIONS ASC 2,LET XIF * SKP * * CONFIGURATION ROUTINE * ORG 76B PROGRAM LINK TO ROUTINE LINK DEF CONFG JMP LINK,I * ORG ENDTB CONFG AND M77 ISOLATE SELECT CODE STA 1 SAVE IT * LDA IN1 GET 1ST INSTRUCTION AND XM77 MASK OUT OLD SELECT CODE IOR 1 MERGE IN NEW CODE STA IN1 STORE IT BACK IN PROGRAM * LDA IN2 GET 2ND INSTRUCTION AND XM77 MASK OUT OLD SELECT CODE IOR 1 MERGE IN NEW CODE STA IN2 STORE IT BACK IN PROGRAM * LDA IN3 GET 3RD INSTRUCTION AND XM77 MASK OUT OLD SELECT CODE IOR 1 MERGE IN NEW CODE STA IN3 STORE IT BACK IN PROGRAM * LDA INDAT GET 4TH INSTRUCTION AND XM77 MASK OUT OLD SELECT CODE IOR 1 MERGE IN NEW CODE STA INDAT STORE IT BACK IN PROGRAM * LDA INDAT+1 GET 5TH INSTRUCTION AND XM77 MASK OUT OLD SELECT CODE IOR 1 MERGE IN NEW CODE STA INDAT+1 STORE IT IN PROGRAM * LDA INSTR GET 6TH INSTRUCTION AND XM77 MASK OUT OLD SELECT CODE IOR 1 MERGE IN NEW CODE STA INSTR STORE IT BACK IN PROGRAM * HLT 77B STOP...END OF ROUTINE JMP *-1 * M77 OCT 77 XM77 OCT 177700 * END