/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 $