X-Git-Url: http://gitweb.hachti.de/?a=blobdiff_plain;f=sw%2Fos8%2Fv3d%2Fsources%2Fextensions%2Fdectapes%2Fdectape2%2Fuf.pa;fp=sw%2Fos8%2Fv3d%2Fsources%2Fextensions%2Fdectapes%2Fdectape2%2Fuf.pa;h=a56ed4703b2681c67f3b9c37768edfd49a4a1213;hb=81e70d488b71bf995c459ca3a02c025993460ffa;hp=0000000000000000000000000000000000000000;hpb=07ec0278333ed187ac242dedcff13c56cf1b0b91;p=pdp8.git diff --git a/sw/os8/v3d/sources/extensions/dectapes/dectape2/uf.pa b/sw/os8/v3d/sources/extensions/dectapes/dectape2/uf.pa new file mode 100644 index 0000000..a56ed47 --- /dev/null +++ b/sw/os8/v3d/sources/extensions/dectapes/dectape2/uf.pa @@ -0,0 +1,900 @@ +/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. +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ + /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 + 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 + *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 + +/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 + /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 + /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 + /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 + /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 + /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 + /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 + /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 + /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 + /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 + /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 + /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 + /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 + 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 + /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 + /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 + /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 + /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 +$ +