--- /dev/null
+/OS8 BASIC USER FUNCTIONS, V5
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/COPYRIGHT (C) 1974 BY DIGITAL EQUIPMENT CORPORATION
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
+/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
+/CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
+/FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.
+/
+/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
+/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
+/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
+/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
+/
+/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
+/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
+/DIGITAL.
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+\f/JR 6-JUN-77 MODIFIED FOR V5
+
+ VERSON= 5 /VERSION OF BRTS
+ SUBVUF= 01 /SUBVERSION OF BASIC.UF
+ /FIRST WORD OF THIS OVERLAY CONTAINS
+ /BRTS VERSION IN LEFT HALF AND SUBVERSION IN RIGHT HALF
+
+ FPP= 4000
+ FADD= FPP+2000
+ FSUB= FPP+2117
+ FMPY= FPP+1600
+ FDIV= FPP+1722
+ FFNEG= FPP+2135
+ FFPUT= FPP+2256
+ FFGET= FPP+2241
+ FFNOR= FPP+2215
+ FACCLR= 0365
+ UNSFIX= 1615
+ PSWAP= 1230
+ ARGPRE= 307
+
+ /VC8E POINT PLOTTING DISPLAY CONTROL IOT'S
+
+ DISD= 6052 /SKIP ON DONE FLAG
+ DILX= 6053 /LOAD AC2-11 INTO X-REGISTER (DOESN'T CLEAR AC)
+ DILY= 6054 /LOAD AC2-11 INTO Y-REGISTER (DOESN'T CLEAR AC)
+ DIXY= 6055 /INTENSIFY
+
+ /DK8EP PROGRAMMABLE REAL TIME CLOCK IOT'S
+
+ CLZE= 6130 /CLEAR CLOCK ENABLE BITS PER AC
+ CLSK= 6131 /SKIP ON CLOCK FLAG
+ CLOE= 6132 /SET CLOCK ENABLE BITS PER AC
+ CLAB= 6133 /AC TO CLOCK BUFFER
+ CLSA= 6135 /READ CLOCK STATUS TO AC
+ /BIT 0 SET ON OVERFLOW
+ /BITS 9-11 SET ON RESPECTIVE SCHMITT TRIGGER FIRING
+
+ /CLOCK ENABLE REGISTER BITS
+ /BIT FUNCTION
+ /0 INTERRUPT ENABLE BIT
+ /1-2 MODE BITS:
+ / 00 RUN COUNTER, INTERRUPTING EACH 4096 TICKS
+ / 01 RUN COUNTER AND RESET WITH CLOCK BUFFER ON OVERFLOW
+ / 10 RUN COUNTER AND READ COUNTER WHEN EVENT OCCURS
+ / 11 RUN COUNTER AND READ AND CLEAR IT ON EVENT
+ /3-5 RATE SELECTION:
+ / 000 STOPPED
+ / 001 EXTERNAL TIME BASE
+ / 010 100 HZ
+ / 011 1 KHZ
+ / 100 10 KHZ
+ / 101 100 KHZ
+ / 110 1 MHZ
+ / 111 STOPPED
+ /6 OVERFLOW STARTS A-D
+ /7 SET TO INHIBIT CLOCK
+ /8 EVENT ON CHAN 1, 2, OR 3 CAUSE INTERRUPT AND OVERFLOW
+ /9-11 ENABLE EVENTS 1 THRU 3
+
+ /AD8EA A-D CONVERTER IOT'S
+
+ ADCL= 6530 /CLEAR A-D
+ ADLM= 6531 /LOAD MULTIPLEXOR FROM AC8-11 AND CLEAR AC
+ ADST= 6532 /START A-D CONVERTER
+ ADRB= 6533 /READ A-D BUFFER INTO AC0-11 AND CLEAR FLAG
+ ADSK= 6534 /SKIP ON A-D DONE FLAG (DOESN'T CLEAR FLAG)
+ ADLE= 6536 /SKIP ON TIMING ERROR
+ ADRS= 6537 /READ STATUS REGISTER
+
+ /STATUS REGISTER FORMAT:
+ /0 A-D DONE FLAG
+ /1 TIMING ERROR FLAG
+ /2 ENABLE INTERRUPT ON DONE FLAG
+ /3 ENABLE INTERRUPT ON TIMING ERROR
+ /4 ENABLE EXTERNAL START (EG CLOCK)
+ /5 AUTO INCREMENT MODE
+ /6-7 UNUSED
+ /8-11 4 BIT CHANNEL NUMBER
+
+ /DR8E-A DIGITAL BUFFERED I/O BASE IOT'S
+
+ DBDI= 6500 /DISABLE INTERRUPTS
+ DBEI= 6501 /ENABLE INTERRUPTS
+ DBSK= 6502 /SKIP IF THE IN FLAG IS SET
+ DBCI= 6503 /SET SELECTED BITS IN INPUT REGISTER
+ DBRI= 6504 /READ INPUT REGISTER TO AC
+ DBCO= 6505 /CLEAR SELECTED BITS IN OUTPUT REGISTER
+ DBSO= 6506 /SET SELECTED BITS IN OUTPUT REGISTER
+ DBRO= 6507 /READ OUTPUT REGISTER TO AC
+
+ ACX= 44
+ ACH= 45
+ ACL= 46
+
+ MAXPTS= XR0
+ REFRFL= XR1
+ BUFXR= XR2
+ DX= XR3 /XR3,XR4,XR5= TEMP FL PT LOC
+
+ SPF= 6040 /SET TTY PRINTER FLAG
+ CAF= 6007 /RESET PROCESSOR
+
+ IA= 1465 /ENTRY POINT FOR USER FUNCTION ERROR MESSAGE
+\f NOPUNCH /DUMMY SECTION FOR MISC PAGE 0 REFERENCES
+
+ *1
+ JMP I .+1
+ SERVC
+ *6
+USECON, 0 /ENTRY #OF USER BUF IN DIM TBL
+ *10
+XR0, 0
+XR1, 0
+XR2, 0
+XR3, 0
+XR4, 0
+XR5, 0
+ *20
+CDFIO, CDF 10 /FLD OF PSEUDO DIM TBL
+ 0
+ARSTRT, 0 /ADR-1 OF PSEUDO DIM TBL
+ *64
+INSAV, 0
+ *73
+K0010, 10
+K0017, 17
+ *77
+K0200, 200
+ *107
+M14, -14
+ *114
+FIXP, UNSFIX
+ *134
+FGETL, FFGET
+FPUTL, FFPUT
+FNORL, FFNOR
+FCLR, FACCLR
+FNEGL, FFNEG
+ *156
+P1SWAP, PSWAP
+
+ ENPUNCH
+\f *3400
+
+/INI(N)-INITIALIZE ROUTN;CALLED BY USER BEFORE 'PLY
+/ OR ADC';INITIALIZE CTRS,FLGS,ETC
+/ N IS A DUMMY ARG
+/
+INI, VERSON^100+SUBVUF /VERSION NUMBER OF USER FUNCTIONS
+ JMS BUFCDF
+ TAD BUFBAK /PICK UP ADDR OF DISPLAY BUFFER
+ DCA BUFXR /STORE IN BUFFER XR FOR PUTBUF ROUTINE
+ DCA TOTPTS /BUF IS NOW EMPTY
+ IAC
+ DCA I (STPT /ACCES BUF AT 1ST PT
+ IAC
+ DCA I (NTHY /ACCES EVERY PT
+ IAC
+ DCA I (XFLG /BUF MAYBE DISPLAYED
+ JMP I INI
+
+ /ROUTINE TO GET FIELD AND ADDRESS OF USER BUFFER
+ /FROM 'USECON' LOCATION
+
+BUFCDF, 0
+ TAD USECON /ENTRY PT OF BUF IN DIM TBL
+ CLL RTL /MULT BY 4
+ TAD ARSTRT /ADR-1 OF STRT F DIM TBL
+ DCA XR5 /ADR-1 OF ENTRY IN DIM TBL
+ TAD CDFIO /COPY CDF TO BRTS TABLES INLINE
+ DCA .+1
+ 0
+ CMA
+ TAD I XR5 /ADR-1 OF BUF
+ DCA BUFBAK /NEED FOR DISPLY ROUTN
+ TAD I XR5 /GET CDF OF BUF
+ DCA PUTCDF
+ TAD PUTCDF
+ DCA CDFBAK /NEED FOR DISPLY ROUTN
+ CDF /RESTORE DF
+ JMP I BUFCDF
+CDFBAK, 0
+BUFBAK, 0
+TOTPTS, 0
+
+/PUTBUF-ENTER WITH A 12BIT VALUE IN AC;PUT VAL IN
+/ USER BUFFER;CHK TO SEE IF NXT VAL WILL CROSS FLDS
+/
+PUTBUF, 0
+PUTCDF, 0
+ DCA I BUFXR
+ IAC
+ TAD BUFXR
+ SZA CLA /ABOUT TO CROSS FLDS?
+ JMP .+4 /NO
+ TAD K0010 /YES
+ TAD PUTCDF
+ DCA PUTCDF /DF=DF+1
+ CDF /RESTORE DF
+ JMP I PUTBUF
+\f
+/PLY(Y)-ENTER WITH YVAL IN FAC;CHK 0<=VAL<1.;
+/ PUT LEGIT VAL IN USER BUF
+/
+PLY, 0
+ TAD ACH
+ SPA CLA /YVAL>=0?
+ JMP I (IA /NO,ERR
+ TAD ACX
+ SMA SZA CLA /YVAL<1?
+ JMP I (IA /NO, ERR
+/CONV # IN FAC TO A 10BIT DISPLAYABLE VAL
+/ FAC=FAC*1776+1001
+/
+ JMS I (FMPY /YES
+ FL1022 /1776(8)
+ JMS I (FADD
+ FL513 /1001(8)
+ JMS I FIXP
+ JMS PUTBUF
+ ISZ TOTPTS /KEEP CNT OF PTS IN BUF
+ JMP I PLY
+\f/DLY(N)-N IS MAX # OF PTS TO BE EVENTUALLY DISPLAYED
+/ CHK IF 1<=N<=1024; SET 'REFRFL' =0 FOR
+/ A ONE SHOT DISPLAY.
+/
+DLY, 0
+ JMS I FIXP
+ SPA SNA /1<=N?
+ JMP I (IA /NO,ERR
+/CHK IF N IS SAME AS LAST TIME &
+/IF SO, NO NEED TO GO THE "SETDX" ROUT
+ DCA INI /YES,TEMPORARY SAVE
+ DCA XR1
+ TAD INI
+ CIA
+ TAD MAXPTS
+ SZA CLA /N IS STILL THE SAME?
+ JMP .+3 /NO
+ JMS I (DISPLY /YES, DISPLY ONCE &
+ JMP I DLY /RETURN
+ TAD INI /GET N BACK
+ DCA MAXPTS /ASSUME N IS VALID FOR MOMENT
+ TAD MAXPTS
+ CIA
+ TAD (2000
+ SPA CLA /N<=1024?
+ JMP I (IA /NO
+ DCA REFRFL /ONE SHOT DISPLY
+ JMS I (SETDX /SET DX FOR DISPLY
+ JMP I DLY
+\f/ADC(N)-SAMPLE ADC NTH CHANNEL; RETN FL PT VAL IN FAC
+/
+
+ADC, 0
+ JMS I FIXP /GET ARG N
+ CIA
+ TAD K0017
+ SPA /N<=17(8)?
+ JMP I (IA /NO,ERR
+ CIA /YES
+ TAD K0017
+ ADLM /LOAD MUX
+ ADST /START CONV
+ ADSK
+ JMP .-1
+ ADRB /GET VAL
+ DCA ACH
+ JMS I (FFLOT
+ JMP I ADC
+\f/CLW(N)-N IS A DUMMY ARG; WAIT UNTIL CLOCK O.F. OR
+/ UNTIL A SCHMITT TRIG FIRES(DEPENDING WHICH WAS
+/ SPECIFIED IN 'CLK') BEFORE RETURNING TO BASIC
+/
+CLW, 0
+ CLSK /STATUS REG IS ALREADY SET?
+ SKP /NO
+ JMP EARLY /YES
+ CLSK
+ JMP .-1
+ CLSA /READ STATUS
+CLW1, CLL RAL /CHK ON O.F.
+ SZL /O.F. BIT SET IN SATUS WD?
+ CIA /YES,NEG REST OF STATUS REG
+/RTN 0 IF O.F. ONLY; 1,2,...,7 IF SCHMITT ONLY;
+/-1,-2,...,-7 IF BOTH
+ RAR /NO
+ DCA ACH
+ JMS I (FFLOT
+ JMP I CLW
+/IF CLOCK INTERRUPTED TOO SOON TELL USER;
+/-8 IF O.F. ONLY; 9 THRU 15 IF SCHMITT ONLY;
+/-9 THRU -15 IF BOTH
+EARLY, CLSA
+ TAD K0010
+ JMP CLW1
+
+ PAGE
+\f/DIS(S,E,N,X)-DISPLY EVERY NTH PT BEGIN WITH S
+/ & NOT EXCEEDING N; X=1 DISPLY NOW,
+/ X=0 SETUP TO DISPLY FOR A SAM
+/
+DIS, 0
+ JMS I (BUFCDF /SETUP CDF & USER BUF
+ JMS I (ARG123
+ STPT-1
+/FLOAT N
+ TAD NTHY
+ DCA ACH
+ JMS I (FFLOT
+ JMS I FPUTL /IT BETTER NOT =0
+ DX /HOLD TEMPORARY
+/CHK 1<=S,0<=E-S
+ TAD STPT
+ SPA SNA
+ JMP I (IA /ERROR
+ CIA
+ TAD ENDPT
+ SPA
+ JMP I (IA /ERROR
+/FLOAT (E-S) & GET (E-S)/N
+ DCA ACH
+ JMS I (FFLOT
+ JMS I (FDIV
+ DX
+/CHK (E-S)/N+1<=1024; MAXPTS=(E-S)/N+1
+ JMS I FIXP
+ IAC
+ DCA MAXPTS /ASSUME OK FOR NOW
+ TAD MAXPTS
+ CIA
+ TAD (2000 /1024(10)
+ SPA CLA
+ JMP I (IA /ERROR
+/GET X ARG; DISPLY BUF(X=1); ONLY A SETUP FOR SAM (X=0)
+ CLL IAC RAL /4TH ARG DESIGNATED BY AC=2
+ JMS I (GETARG
+ JMS I FIXP
+ DCA XFLG
+ TAD XFLG
+ SZA CLA /USER WANTS TO DISPLY?
+ TAD MAXPTS /YES,TOTPTS=MAXPTS
+DPY1, DCA I (TOTPTS /NO,JUST SET UP,TOTPTS=0
+ IAC /REFRESH TILL ^N(NON INTERRUPT)
+ DCA REFRFL /OR TILL CLK INTERRPT(INT MODE)
+ JMS I (SETDX
+ JMP I DIS
+STPT, 0 /THESE 3 LOCATIONS
+ENDPT, 0 /GO TOGETHER & MUST
+NTHY, 0 /BE IN THIS ORDER
+XFLG, 0
+\f/DISPLY-SETUP CDF & PTR TO STARTING PT OF USER BUF;
+/ SETUP 'DISCTR' FOR # OF PTS TO DISPLY THIS TIME;
+/ INITIALIZE FL PT 'DXSUM'=-'DX'
+/
+DISPLY,0
+/IF TOTPTS<=MAXPTS,DISPLY TOTPTS;OTHERWSE MAXPTS
+D4, TAD I (TOTPTS
+ SNA /SIMPLE WAIT LOOP FOR THAT'1ST'
+ JMP .-1 /ADC TO BE SAMPLED
+ CIA
+ DCA DISCTR
+ TAD DISCTR
+ TAD MAXPTS
+ SMA CLA /TOTPTS<=MAXPTS?
+ JMP .+4 /YES
+ TAD MAXPTS /NO
+ CIA
+ DCA DISCTR
+/SETUP CDF & PTR TO START PT OF USER BUFFER
+ TAD I (CDFBAK /RE-INIT CDF FOR LAST TIME YOU DISPLY
+ DCA DISCDF /YOU MAY HAVE CROSSED FLDS
+ TAD I (BUFBAK /ADR-1 OF BUF
+ TAD STPT
+ DCA BUFPTR
+ TAD XCRD /INITIALIZE XCOORD
+ DCA XCOORD
+D3, TAD XCOORD
+ DILX
+ TAD DELTAX
+ DCA XCOORD /UPDATE XCOORD BY DELTAX
+DISCDF, 0
+ TAD I BUFPTR
+ CDF
+ DILY
+ CLA CLL
+ TAD NTHY /MOVE PTR TO NXT LOC TO BE
+ TAD BUFPTR /ACCESSED IN BUF
+ DCA BUFPTR
+ SNL /JUST CROSSED FLDS?
+ JMP .+4 /NO
+ TAD K0010 /YES
+ TAD DISCDF
+ DCA DISCDF
+ DISD
+ JMP .-1
+ DIXY /INTENSIFY
+/DISPLYED ALL PTS YET?
+ ISZ DISCTR
+ JMP D3 /NO
+ TAD REFRFL /YES,KEEP REFRESHING?
+ SNA CLA
+ JMP I DISPLY /NO
+/KEYBOARD IS CHK HERE FOR ^N WHEN DSPL & NOT SAMPLING
+/KEYBOARD INTERRUPTS TO THE INT ROUTN
+/
+ KSF /YES
+ JMP D4
+ KRB
+ TLS
+ TAD (-216
+ SNA CLA /USER HIT ^N?
+ JMP I DISPLY /YES
+ JMP D4 /NO, KEEP REFRESHING
+DISCTR, 0
+BUFPTR, 0
+XCRD, 0
+XCOORD, 0
+DELTAX, 0
+\f/FFLOT-FLOAT ANY INTEGER IN ACH(LOC 45) INTO FAC
+
+FFLOT, 0
+ DCA ACL /CLEAR LOW MANTISSA
+ TAD (13 /11(10) INTO EXPONENT
+ DCA ACX
+ JMS I FNORL /NORMALIZE
+ JMP I FFLOT /RETURN
+FL513, 12;2002;0
+FL1022, 12;3774;0
+
+ PAGE
+\f/SAM(C,N,P,T)-SETUP PARAMETERS FOR SUBSEQUENT SAMPLING
+/ OF ADC'S OR OR DOING DIGITAL IO
+/
+ CONST=CLK
+ TSAM=NCTR
+SAM, 0
+ JMS I (ARG123
+ CSAM-1
+ TAD PSAM
+ SPA SNA /P=0?
+ JMP I (IA /YES,ERR
+ CIA /NO
+ DCA PCTR /PCTR=-P(DONE CTR)
+ CLL IAC RAL /4TH ARG IS DESIGN BY AC=2
+ JMS GETARG /GET T
+ JMS I FIXP
+ DCA TSAM
+ TAD TSAM
+ SZA CLA /SET UP TO SAMPLE ADC'S?
+ JMP DIG /NO, DO DIGAL IO
+ IAC /YES
+ DCA SAMFLG /SET FLG=1 FOR 'CLK'
+ TAD K0017 /15(10)
+ JMP SAM1
+DIG, CMA
+ DCA SAMFLG /SET FLG=-1 FOR 'CLK'
+ CLA CLL IAC RAL /2
+SAM1, DCA CONST
+/CHK IF 0<=C, 1<=N, N+C-1<=2(DIG IO)OR <=17(8)(ADC'S)
+/
+ CMA
+ TAD NSAM
+ SPA /1<=N?
+ JMP I (IA /NO,ERR
+ TAD CSAM
+ CIA
+ TAD CONST
+ SPA CLA /N+C-1<=2 OR 17?
+ JMP I (IA /NO,ERR
+ TAD TSAM
+ SNA CLA
+ JMP SAM3
+/CLEAR ALL DIGIAL INPT REGS
+ JMS I (BUFCDF /SET UP USER BUF
+ TAD NSAM
+ CIA
+ DCA NCTR /-#OF BOARDS TO CLAR
+ TAD CSAM /START BOARD#(0,1,2)
+ CLL RTL
+ RAL /START BOARD# * 10(8)
+ TAD (DBCI
+A1, DCA .+2
+ CLA CMA
+ 0 /DBCI IS ISSUED
+ CLA
+ TAD .-2
+ TAD K0010
+ ISZ NCTR /MORE BOARDS TO CLEAR?
+ JMP A1 /YES
+ CLA
+ JMP I SAM
+/DO A CLEAR ALL; AD DONE FLG, ERR FLG, CLR MUX & EN REG.
+/SET NON-AUTO INCR MODE
+/
+SAM3, CAF /CL ALL FLGS-I MAY USE ION'S
+ ADCL
+ TAD K0200
+ ADLE /ENABLE EXT START OF ADC'S
+ JMP I SAM
+CSAM, 0 /THESE 3 LOCATIONS MUST
+NSAM, 0 /BE TOGETHER & IN THIS
+PSAM, 0 /ORDER
+PCTR, 0
+NCTR, 0
+\f/CLK(R,O,S)-A COMPLEX CLK ROUTN WHICH SETS UP CLOCK
+/ FOR ADC SAMPLING; DIGIAL IO SMPLING;
+/ & SETS UP A SIMPLE CLOCK-WAIT ROUTN
+/
+CLK, 0
+ JMS I (ARG123
+ R-1
+ CLSA /CLEAR CLK STATUS REG
+ CLA
+ TAD R
+ SPA SNA /R>0?
+ JMP IAA /NO,ERR
+ TAD (-6 /YES
+ SMA SZA CLA /R<=6?
+ JMP IAA /NO
+ TAD R /R GIVES CORRECT VAL FOR
+ CLL RTL /EXT START, .1,1,10,100,1000 KHZ RATE
+ RTL
+ RTL /RATE GOES INTO BITS 3-5 OF EN REG
+ TAD (5050 /BITS 0,2,6,8 OF EN REG ALWAYS SET
+ DCA SAM /SAVE TEMP
+ TAD O /OVERFLOW CNT
+ CIA
+ CLAB /SET BUF PRESET REG
+ CLA
+ TAD S
+ SZA CLA /ANY SCHMITT TRIGS ASKED FOR?
+ TAD (27 /YES,SET BITS 7,9-11 OF EN REG
+ TAD SAM /FINAL ENABLE VAL
+ CMA
+ CLZE /CLEAR BAD BITS FROM EN REG
+ CMA /ENABLE VAL IS BACK AGAIN
+ CLOE /START CLOCK
+ CLA
+ TAD SAMFLG
+ SNA /JUST SETTING UP FOR A SIMPLE TIMING DEV?
+ JMP DONE /YES,RTN TO BASIC
+ SPA CLA /SAMPLE ADC'S?
+ JMP I (DRESET /NO,DO DIGITAL IO
+ JMP I (SRESET /YES
+DONE, DCA SAMFLG /CLR FLG
+ SPF /RESET TTY FLG FOR BASIC
+ JMP I CLK /RTN TO BASIC
+IAA, SPF
+ JMP I (IA
+R, 0 /THESE 3 LOCATIONS
+O, 0 /MUST BE TOGETHER IN
+S, 0 /THIS ORDER
+SAMFLG, 0
+FL4096, 15;2000;0
+\f/GETARG-ENTER WITH SCALER(0=ARG2,1=ARG3,2=ARG4) IN AC;
+/ CALL 'ARGPRE' & ON RTN THE D.F. OF ARG IS SET
+/ & ADR OF ARG IS IN FAC
+/ PUT FL PT ARG IN FAC( 44-46)
+
+GETARG, 0
+ DCA INSAV /ARGPRE USES THIS SCALER LOC 64
+ JMS I KARG /GET ADR OF ARG
+ JMS I FGETL /PUT ARG IN FAC
+KARG, ARGPRE /USED TO ADVANTAGE
+ CDF /RESET D.F.
+ JMP I GETARG
+
+ PAGE
+\f/SETDX-SETUP DELTAX; CHK IF DISPL IS TO BE
+/ ACTIVATED; DX IS A FL PT NO
+/ SETUP DELTAX SUCH THAT IT =1,2,3,...,1023;
+/ & XCOORD SO THAT DISPLY IS CENTERED
+/
+SETDX, 0
+ CMA
+ TAD MAXPTS /MAXPTS-1
+ SNA /IF # OF MAXPTS=1 THEN DISPLY
+ IAC /IS POSITIONED AT X=0 COORD
+ DCA ACH
+ JMS I (FFLOT
+ JMS I FPUTL
+ DX /SAVE FL PT(MAXPTS-1) TEMP
+ TAD (1777 /1023
+ DCA ACH
+ JMS I (FFLOT
+ JMS I (FDIV
+ DX /FL PT (1023/MAXPTS-1) =DX
+ JMS I FIXP /FIXED 'DX'
+ DCA I (DELTAX
+ TAD I (DELTAX
+ DCA ACH
+ JMS I (FFLOT
+ JMS I (FMPY
+ DX /(MAXPTS-1)*(FIX'DX')=FLOT PROD
+ JMS I FIXP /FIX 'PROD'
+ CIA
+ TAD (1777
+ CLL RAR /(1023-FIX'PROD')/2
+ TAD (1001
+ DCA I (XCRD /XCOORD=[1001+(1023-FIX'DX')/2]
+/CHK SHOULD DISPLY NOW(XFLG=1)
+/OR RTN TO BASIC DUE TO SAM SETUP(XFLG=0
+
+ TAD I (XFLG
+ SZA CLA
+ JMS I (DISPLY
+ JMP I SETDX
+\f/ADSAM-A CLOCK INTERRUPT FOR SAMPLING ADC'S COMES HERE
+/
+ADSAM1, ADRS /RD STATUS(GET MUX)
+ IAC
+ ADLM /BMP MUX BY 1
+ JMP CLUGE
+ADSAM, CLSA /READ STATUS REG & CLEAR IT
+ SMA CLA /CLK O.F.?
+ JMP TION /NO, SCHMITT TRIG SYNC
+ ADSK /CONV IS DONE?
+ JMP .-1 /NO
+ ADRB /GET VAL FR CONV BUF
+ JMS I (PUTBUF /YES
+ ISZ I (NCTR /SAMPLED ALL CHANS FOR THIS INTERRUPT?
+ JMP ADSAM1 /NO
+ ISZ I (PCTR /YES,JOB IS ALL DONE?
+ JMP SRESET-1 /NO
+ JMP I (DONE /YES,'DONE' IS IN 'CLK' ROUTN
+
+/SRESET-USED TO RESET STCHAN & CTR FR ADC SAMPLING
+/ ROUTN SETS MUX TO SAMPLE 1ST OF A SERIES OF CHANS.
+/ A CTR IS SET TO -# OF CONSEC CHANS TO SAMPLE
+/
+
+ ISZ I (TOTPTS /#PTS /CHANNEL
+SRESET, TAD I (NSAM
+ CIA
+ DCA I (NCTR
+ TAD I (CSAM
+ ADLM /LOAD MUX WITH 1ST CHAN
+TION, ION
+ JMS I (DISPLY /DISPLY UNTIL CLK INTERRUPT
+\f/DRI(N) -SAMPLE DIGITAL IO BOARD N; & RTN RESULT
+/ AS FL PT IN FAC
+
+DRI, 0
+ JMS ARGN
+ JMS I (DIGIO /GET DIGITAL VAL
+ JMS NEGCHK
+ JMP I DRI
+
+/ARGN - GET N AND MAKE A 'DBSK' INSTRUCTION
+
+ARGN, 0
+ JMS I FIXP /BOARD #
+/CHK 0<=N<=2
+ DCA SETDX /SAV N TEMP
+ TAD SETDX
+ CIA
+ TAD (2
+ SPA CLA
+ JMP I (IA /ERR
+ TAD SETDX /GET N BAK
+ CLL RTL
+ RAL /BOARD # = BITS 6-8
+ TAD (DBCI
+ JMP I ARGN
+
+/DRO(M,N)- M=FL PT VAL TO OUTPUT, N=BOARD #
+/ IF M=0 CLR OUTPUT REG; OTHERWISE LEAVE
+/ THE BITS OF DBSO SET
+
+ MASK=DIGIO
+DRO, 0
+ JMS I FIXP
+ DCA I (MASK /DIGITAL OUTPUT VAL
+ JMS I (GETARG
+ JMS ARGN
+ TAD (2 /65N5='DBCI+2'
+ DCA KDBCO
+ IAC
+ TAD KDBCO
+ DCA KDBSO
+ TAD I (MASK /GET FL PT VAL
+ SZA /CLR OUTPUT REG/
+ JMP KDBSO /NO
+ CMA /YES,SET ALL BITS OF AC
+KDBCO, 0 /CLR OUTPUT REG
+ SKP
+KDBSO, 0 /OUTPUT DIG VAL
+ CLA
+ JMP I DRO
+\f FLGNEG=DRO
+/NEGCHK- THIS ROUTINE CHKS TO SEE IF A VALUE FROM
+/ 'DRI' OR 'GET' IS NEGATIVE. IF IT IS
+/ THE VALUE IS CHANGED TO 4096+NEG VAL.
+
+NEGCHK, 0
+ DCA FLGNEG /VAL IS EITHER + R -
+ TAD FLGNEG
+ DCA ACH
+ JMS I (FFLOT
+ TAD FLGNEG
+ SMA CLA /VAL WAS NEG?
+ JMP I NEGCHK /NO
+ JMS I (FADD /YES
+ FL4096
+ JMP I NEGCHK
+CLUGE, ADST /START CONV
+ JMP ADSAM+3
+
+ PAGE
+\f/GET(M,L)- M=0, GET VAL FROM USER BUF & NO MASKING
+/ M>0, GET VAL FROM USER BUF & MASK WHERE
+/ M IS THE MASKING VALUE.
+/ L IS THE LOCATION OF USER BUF TO ACCESS
+
+ LHOLD=ARG123
+GET, 0
+ IAC
+ DCA MSKCTR
+ JMS I FIXP /GET M
+ SNA /M=0
+ CMA /YES,SET M=7777
+ CLL RAR
+ SZL
+ JMP .+3
+ ISZ MSKCTR
+ JMP .-4
+ RAL
+ JMS COMMON /SAME CODE FOR 'GET' & 'PUT'
+ TAD MSKCTR
+ CIA
+ DCA MSKCTR
+ TAD I LHOLD
+ CDF /RESET D.F.
+ CLL RAR
+ ISZ MSKCTR
+ JMP .-2
+ RAL
+ AND MASK
+ JMS I (NEGCHK
+ JMP I GET
+MSKCTR, 0
+
+/PUT(M,L)- M IS THE FL PT VALU TO BE FIXED & PUT
+/ IN THE USER BUF; L IS THE LOC OF THE USER
+/ BUF WHERE TO STORE THE FIXED NUMBER.
+
+PUT, 0
+ JMS I FIXP /GET & FIX THE FL PT VAL
+ JMS COMMON
+ TAD MASK
+ DCA I LHOLD
+ CDF
+ JMP I PUT
+
+/COMMON- THIS ROUTINE IS USED BY BOTH 'GET' & 'PUT'
+
+COMMON, 0
+ DCA MASK /SAVE M TEMPORARILY
+ JMS I (GETARG
+ JMS I FIXP /GET L
+ CLL
+ TAD I (BUFBAK
+ DCA LHOLD
+ SZL /CROSSED FIELDS?
+ TAD K0010 /YES
+ TAD I (CDFBAK /NO
+ DCA .+1
+ 0
+ JMP I COMMON
+\f/WHEN INTERRUPT OCCURS COME HERE
+/
+
+SERVC, CLA
+ CLSK /CLOCK INTERRUPT?
+ SKP /NO
+ JMP I (ADSAM /YES
+ KSF /TTY INTERRUPT?
+ SKP /NO
+ JMP KKBRD /YES
+ TSF /DUE TO LAST ECHO?
+ HLT /SPURIOUS INTERRUPT
+ TCF /YES
+ JMP I (TION
+KKBRD, KRB
+ TLS /ECHO CHAR
+ TAD (-203
+ SZA CLA /^C TYPED?
+ JMP I (TION /NO,IGNORE CHAR
+ JMS I P1SWAP /YES
+ JMP I (7605 /RTN TO MONITOR
+\f/ARG123-THIS ROUTINE GETS 3 ARGUMENTS OF A FUNCTION
+/ AND STORES THEIR FL PT VALUES IN
+/ 'ARG1,ARG2,ARG3' & STORES THEIR FIXED VALUES
+/ AT 'ADR,ADR+1,ADR+2'
+/ CALL: JMS ARG123
+/ ADR-1
+
+ARG123, 0
+ TAD I ARG123 /GET(ADR-1)FOR THE THREE
+ DCA XR1 /1WD ARGS
+ ISZ ARG123
+ JMS I FIXP
+ DCA I XR1 /SINGLE PREC ARG1
+ JMS I (GETARG /ARG2 DESIGN BY AC=0
+ JMS I FIXP
+ DCA I XR1 /SINGLE PREC ARG2
+ IAC
+ JMS I (GETARG /ARG3 DESIGN BY AC-3
+ JMS I FIXP
+ DCA I XR1 /SINGLE PREC ARG3
+ JMP I ARG123
+\f/DRESET-USED TO RESET STARTING DIGITAL IO BOARD & CTR;
+/ WAIT FOR CLK TO O.F.; SAMPLE EACH BOARD ASKED FOR.
+/
+
+DRESET, TAD I (NSAM
+ CIA
+ DCA I (NCTR
+ TAD I (CSAM /STARTING BOARD #
+ CLL RTL
+ RAL /ST BOARD #*10(8)
+ TAD (DBCI-10
+ DCA KDBCI /[DBCI-10(8)] FOR 1ST BOARD
+/WAIT LOOP
+ CLSK
+ JMP .-1
+ CLSA /READ STATUS & CLR
+ CLA
+/SAMPLE ALL BOARDS ASKED FOR
+
+DIGSAM, TAD K0010
+ TAD KDBCI
+ JMS DIGIO /SAMPLE BOARD
+ JMS I (PUTBUF /PUT DIG VAL IN BUF
+ ISZ I (NCTR /MORE BOARDS?
+ JMP DIGSAM /YES
+ ISZ I (PCTR /NO, JOB IS ALL DONE?
+ JMP DRESET /NO
+ JMP I (DONE /YES,'DONE' IS IN 'CLK' ROUTN
+/DIGIO-ENTER WITH 'DBCI' SETUP FOR CORRECT BOARD; THIS RTN
+/ SETS UP THE 'DBRI & DBCI' AND SAMPLES CORRECT BOARD;
+/ EXIT WITH DIGITAL VAL IN AC
+/
+
+DIGIO, 0
+ DCA KDBCI
+ TAD KDBCI
+ IAC
+ DCA KDBRI
+KDBRI, 0
+KDBCI, 0
+ JMP I DIGIO
+$
+\f