1 /OS8 BASIC USER FUNCTIONS, V5
11 /COPYRIGHT (C) 1974 BY DIGITAL EQUIPMENT CORPORATION
22 /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
23 /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
24 /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
25 /FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.
27 /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
28 /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
29 /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
30 /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
32 /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
33 /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
45 \f/JR 6-JUN-77 MODIFIED FOR V5
47 VERSON= 5 /VERSION OF BRTS
48 SUBVUF= 01 /SUBVERSION OF BASIC.UF
49 /FIRST WORD OF THIS OVERLAY CONTAINS
50 /BRTS VERSION IN LEFT HALF AND SUBVERSION IN RIGHT HALF
66 /VC8E POINT PLOTTING DISPLAY CONTROL IOT'S
68 DISD= 6052 /SKIP ON DONE FLAG
69 DILX= 6053 /LOAD AC2-11 INTO X-REGISTER (DOESN'T CLEAR AC)
70 DILY= 6054 /LOAD AC2-11 INTO Y-REGISTER (DOESN'T CLEAR AC)
73 /DK8EP PROGRAMMABLE REAL TIME CLOCK IOT'S
75 CLZE= 6130 /CLEAR CLOCK ENABLE BITS PER AC
76 CLSK= 6131 /SKIP ON CLOCK FLAG
77 CLOE= 6132 /SET CLOCK ENABLE BITS PER AC
78 CLAB= 6133 /AC TO CLOCK BUFFER
79 CLSA= 6135 /READ CLOCK STATUS TO AC
80 /BIT 0 SET ON OVERFLOW
81 /BITS 9-11 SET ON RESPECTIVE SCHMITT TRIGGER FIRING
83 /CLOCK ENABLE REGISTER BITS
85 /0 INTERRUPT ENABLE BIT
87 / 00 RUN COUNTER, INTERRUPTING EACH 4096 TICKS
88 / 01 RUN COUNTER AND RESET WITH CLOCK BUFFER ON OVERFLOW
89 / 10 RUN COUNTER AND READ COUNTER WHEN EVENT OCCURS
90 / 11 RUN COUNTER AND READ AND CLEAR IT ON EVENT
93 / 001 EXTERNAL TIME BASE
100 /6 OVERFLOW STARTS A-D
101 /7 SET TO INHIBIT CLOCK
102 /8 EVENT ON CHAN 1, 2, OR 3 CAUSE INTERRUPT AND OVERFLOW
103 /9-11 ENABLE EVENTS 1 THRU 3
105 /AD8EA A-D CONVERTER IOT'S
107 ADCL= 6530 /CLEAR A-D
108 ADLM= 6531 /LOAD MULTIPLEXOR FROM AC8-11 AND CLEAR AC
109 ADST= 6532 /START A-D CONVERTER
110 ADRB= 6533 /READ A-D BUFFER INTO AC0-11 AND CLEAR FLAG
111 ADSK= 6534 /SKIP ON A-D DONE FLAG (DOESN'T CLEAR FLAG)
112 ADLE= 6536 /SKIP ON TIMING ERROR
113 ADRS= 6537 /READ STATUS REGISTER
115 /STATUS REGISTER FORMAT:
118 /2 ENABLE INTERRUPT ON DONE FLAG
119 /3 ENABLE INTERRUPT ON TIMING ERROR
120 /4 ENABLE EXTERNAL START (EG CLOCK)
121 /5 AUTO INCREMENT MODE
123 /8-11 4 BIT CHANNEL NUMBER
125 /DR8E-A DIGITAL BUFFERED I/O BASE IOT'S
127 DBDI= 6500 /DISABLE INTERRUPTS
128 DBEI= 6501 /ENABLE INTERRUPTS
129 DBSK= 6502 /SKIP IF THE IN FLAG IS SET
130 DBCI= 6503 /SET SELECTED BITS IN INPUT REGISTER
131 DBRI= 6504 /READ INPUT REGISTER TO AC
132 DBCO= 6505 /CLEAR SELECTED BITS IN OUTPUT REGISTER
133 DBSO= 6506 /SET SELECTED BITS IN OUTPUT REGISTER
134 DBRO= 6507 /READ OUTPUT REGISTER TO AC
143 DX= XR3 /XR3,XR4,XR5= TEMP FL PT LOC
145 SPF= 6040 /SET TTY PRINTER FLAG
146 CAF= 6007 /RESET PROCESSOR
148 IA= 1465 /ENTRY POINT FOR USER FUNCTION ERROR MESSAGE
149 \f NOPUNCH /DUMMY SECTION FOR MISC PAGE 0 REFERENCES
155 USECON, 0 /ENTRY #OF USER BUF IN DIM TBL
164 CDFIO, CDF 10 /FLD OF PSEUDO DIM TBL
166 ARSTRT, 0 /ADR-1 OF PSEUDO DIM TBL
190 /INI(N)-INITIALIZE ROUTN;CALLED BY USER BEFORE 'PLY
191 / OR ADC';INITIALIZE CTRS,FLGS,ETC
194 INI, VERSON^100+SUBVUF /VERSION NUMBER OF USER FUNCTIONS
196 TAD BUFBAK /PICK UP ADDR OF DISPLAY BUFFER
197 DCA BUFXR /STORE IN BUFFER XR FOR PUTBUF ROUTINE
198 DCA TOTPTS /BUF IS NOW EMPTY
200 DCA I (STPT /ACCES BUF AT 1ST PT
202 DCA I (NTHY /ACCES EVERY PT
204 DCA I (XFLG /BUF MAYBE DISPLAYED
207 /ROUTINE TO GET FIELD AND ADDRESS OF USER BUFFER
208 /FROM 'USECON' LOCATION
211 TAD USECON /ENTRY PT OF BUF IN DIM TBL
213 TAD ARSTRT /ADR-1 OF STRT F DIM TBL
214 DCA XR5 /ADR-1 OF ENTRY IN DIM TBL
215 TAD CDFIO /COPY CDF TO BRTS TABLES INLINE
219 TAD I XR5 /ADR-1 OF BUF
220 DCA BUFBAK /NEED FOR DISPLY ROUTN
221 TAD I XR5 /GET CDF OF BUF
224 DCA CDFBAK /NEED FOR DISPLY ROUTN
231 /PUTBUF-ENTER WITH A 12BIT VALUE IN AC;PUT VAL IN
232 / USER BUFFER;CHK TO SEE IF NXT VAL WILL CROSS FLDS
239 SZA CLA /ABOUT TO CROSS FLDS?
247 /PLY(Y)-ENTER WITH YVAL IN FAC;CHK 0<=VAL<1.;
248 / PUT LEGIT VAL IN USER BUF
257 /CONV # IN FAC TO A 10BIT DISPLAYABLE VAL
266 ISZ TOTPTS /KEEP CNT OF PTS IN BUF
268 \f/DLY(N)-N IS MAX # OF PTS TO BE EVENTUALLY DISPLAYED
269 / CHK IF 1<=N<=1024; SET 'REFRFL' =0 FOR
270 / A ONE SHOT DISPLAY.
276 /CHK IF N IS SAME AS LAST TIME &
277 /IF SO, NO NEED TO GO THE "SETDX" ROUT
278 DCA INI /YES,TEMPORARY SAVE
283 SZA CLA /N IS STILL THE SAME?
285 JMS I (DISPLY /YES, DISPLY ONCE &
288 DCA MAXPTS /ASSUME N IS VALID FOR MOMENT
294 DCA REFRFL /ONE SHOT DISPLY
295 JMS I (SETDX /SET DX FOR DISPLY
297 \f/ADC(N)-SAMPLE ADC NTH CHANNEL; RETN FL PT VAL IN FAC
301 JMS I FIXP /GET ARG N
316 \f/CLW(N)-N IS A DUMMY ARG; WAIT UNTIL CLOCK O.F. OR
317 / UNTIL A SCHMITT TRIG FIRES(DEPENDING WHICH WAS
318 / SPECIFIED IN 'CLK') BEFORE RETURNING TO BASIC
321 CLSK /STATUS REG IS ALREADY SET?
327 CLW1, CLL RAL /CHK ON O.F.
328 SZL /O.F. BIT SET IN SATUS WD?
329 CIA /YES,NEG REST OF STATUS REG
330 /RTN 0 IF O.F. ONLY; 1,2,...,7 IF SCHMITT ONLY;
331 /-1,-2,...,-7 IF BOTH
336 /IF CLOCK INTERRUPTED TOO SOON TELL USER;
337 /-8 IF O.F. ONLY; 9 THRU 15 IF SCHMITT ONLY;
344 \f/DIS(S,E,N,X)-DISPLY EVERY NTH PT BEGIN WITH S
345 / & NOT EXCEEDING N; X=1 DISPLY NOW,
346 / X=0 SETUP TO DISPLY FOR A SAM
349 JMS I (BUFCDF /SETUP CDF & USER BUF
356 JMS I FPUTL /IT BETTER NOT =0
366 /FLOAT (E-S) & GET (E-S)/N
371 /CHK (E-S)/N+1<=1024; MAXPTS=(E-S)/N+1
374 DCA MAXPTS /ASSUME OK FOR NOW
380 /GET X ARG; DISPLY BUF(X=1); ONLY A SETUP FOR SAM (X=0)
381 CLL IAC RAL /4TH ARG DESIGNATED BY AC=2
386 SZA CLA /USER WANTS TO DISPLY?
387 TAD MAXPTS /YES,TOTPTS=MAXPTS
388 DPY1, DCA I (TOTPTS /NO,JUST SET UP,TOTPTS=0
389 IAC /REFRESH TILL ^N(NON INTERRUPT)
390 DCA REFRFL /OR TILL CLK INTERRPT(INT MODE)
393 STPT, 0 /THESE 3 LOCATIONS
394 ENDPT, 0 /GO TOGETHER & MUST
395 NTHY, 0 /BE IN THIS ORDER
397 \f/DISPLY-SETUP CDF & PTR TO STARTING PT OF USER BUF;
398 / SETUP 'DISCTR' FOR # OF PTS TO DISPLY THIS TIME;
399 / INITIALIZE FL PT 'DXSUM'=-'DX'
402 /IF TOTPTS<=MAXPTS,DISPLY TOTPTS;OTHERWSE MAXPTS
404 SNA /SIMPLE WAIT LOOP FOR THAT'1ST'
405 JMP .-1 /ADC TO BE SAMPLED
410 SMA CLA /TOTPTS<=MAXPTS?
415 /SETUP CDF & PTR TO START PT OF USER BUFFER
416 TAD I (CDFBAK /RE-INIT CDF FOR LAST TIME YOU DISPLY
417 DCA DISCDF /YOU MAY HAVE CROSSED FLDS
418 TAD I (BUFBAK /ADR-1 OF BUF
421 TAD XCRD /INITIALIZE XCOORD
426 DCA XCOORD /UPDATE XCOORD BY DELTAX
432 TAD NTHY /MOVE PTR TO NXT LOC TO BE
433 TAD BUFPTR /ACCESSED IN BUF
435 SNL /JUST CROSSED FLDS?
443 /DISPLYED ALL PTS YET?
446 TAD REFRFL /YES,KEEP REFRESHING?
449 /KEYBOARD IS CHK HERE FOR ^N WHEN DSPL & NOT SAMPLING
450 /KEYBOARD INTERRUPTS TO THE INT ROUTN
457 SNA CLA /USER HIT ^N?
459 JMP D4 /NO, KEEP REFRESHING
465 \f/FFLOT-FLOAT ANY INTEGER IN ACH(LOC 45) INTO FAC
468 DCA ACL /CLEAR LOW MANTISSA
469 TAD (13 /11(10) INTO EXPONENT
471 JMS I FNORL /NORMALIZE
477 \f/SAM(C,N,P,T)-SETUP PARAMETERS FOR SUBSEQUENT SAMPLING
478 / OF ADC'S OR OR DOING DIGITAL IO
489 DCA PCTR /PCTR=-P(DONE CTR)
490 CLL IAC RAL /4TH ARG IS DESIGN BY AC=2
495 SZA CLA /SET UP TO SAMPLE ADC'S?
496 JMP DIG /NO, DO DIGAL IO
498 DCA SAMFLG /SET FLG=1 FOR 'CLK'
502 DCA SAMFLG /SET FLG=-1 FOR 'CLK'
505 /CHK IF 0<=C, 1<=N, N+C-1<=2(DIG IO)OR <=17(8)(ADC'S)
514 SPA CLA /N+C-1<=2 OR 17?
519 /CLEAR ALL DIGIAL INPT REGS
520 JMS I (BUFCDF /SET UP USER BUF
523 DCA NCTR /-#OF BOARDS TO CLAR
524 TAD CSAM /START BOARD#(0,1,2)
526 RAL /START BOARD# * 10(8)
534 ISZ NCTR /MORE BOARDS TO CLEAR?
538 /DO A CLEAR ALL; AD DONE FLG, ERR FLG, CLR MUX & EN REG.
539 /SET NON-AUTO INCR MODE
541 SAM3, CAF /CL ALL FLGS-I MAY USE ION'S
544 ADLE /ENABLE EXT START OF ADC'S
546 CSAM, 0 /THESE 3 LOCATIONS MUST
547 NSAM, 0 /BE TOGETHER & IN THIS
551 \f/CLK(R,O,S)-A COMPLEX CLK ROUTN WHICH SETS UP CLOCK
552 / FOR ADC SAMPLING; DIGIAL IO SMPLING;
553 / & SETS UP A SIMPLE CLOCK-WAIT ROUTN
558 CLSA /CLEAR CLK STATUS REG
566 TAD R /R GIVES CORRECT VAL FOR
567 CLL RTL /EXT START, .1,1,10,100,1000 KHZ RATE
569 RTL /RATE GOES INTO BITS 3-5 OF EN REG
570 TAD (5050 /BITS 0,2,6,8 OF EN REG ALWAYS SET
574 CLAB /SET BUF PRESET REG
577 SZA CLA /ANY SCHMITT TRIGS ASKED FOR?
578 TAD (27 /YES,SET BITS 7,9-11 OF EN REG
579 TAD SAM /FINAL ENABLE VAL
581 CLZE /CLEAR BAD BITS FROM EN REG
582 CMA /ENABLE VAL IS BACK AGAIN
586 SNA /JUST SETTING UP FOR A SIMPLE TIMING DEV?
587 JMP DONE /YES,RTN TO BASIC
588 SPA CLA /SAMPLE ADC'S?
589 JMP I (DRESET /NO,DO DIGITAL IO
591 DONE, DCA SAMFLG /CLR FLG
592 SPF /RESET TTY FLG FOR BASIC
593 JMP I CLK /RTN TO BASIC
596 R, 0 /THESE 3 LOCATIONS
597 O, 0 /MUST BE TOGETHER IN
601 \f/GETARG-ENTER WITH SCALER(0=ARG2,1=ARG3,2=ARG4) IN AC;
602 / CALL 'ARGPRE' & ON RTN THE D.F. OF ARG IS SET
603 / & ADR OF ARG IS IN FAC
604 / PUT FL PT ARG IN FAC( 44-46)
607 DCA INSAV /ARGPRE USES THIS SCALER LOC 64
608 JMS I KARG /GET ADR OF ARG
609 JMS I FGETL /PUT ARG IN FAC
610 KARG, ARGPRE /USED TO ADVANTAGE
615 \f/SETDX-SETUP DELTAX; CHK IF DISPL IS TO BE
616 / ACTIVATED; DX IS A FL PT NO
617 / SETUP DELTAX SUCH THAT IT =1,2,3,...,1023;
618 / & XCOORD SO THAT DISPLY IS CENTERED
623 SNA /IF # OF MAXPTS=1 THEN DISPLY
624 IAC /IS POSITIONED AT X=0 COORD
628 DX /SAVE FL PT(MAXPTS-1) TEMP
633 DX /FL PT (1023/MAXPTS-1) =DX
634 JMS I FIXP /FIXED 'DX'
640 DX /(MAXPTS-1)*(FIX'DX')=FLOT PROD
641 JMS I FIXP /FIX 'PROD'
644 CLL RAR /(1023-FIX'PROD')/2
646 DCA I (XCRD /XCOORD=[1001+(1023-FIX'DX')/2]
647 /CHK SHOULD DISPLY NOW(XFLG=1)
648 /OR RTN TO BASIC DUE TO SAM SETUP(XFLG=0
654 \f/ADSAM-A CLOCK INTERRUPT FOR SAMPLING ADC'S COMES HERE
656 ADSAM1, ADRS /RD STATUS(GET MUX)
660 ADSAM, CLSA /READ STATUS REG & CLEAR IT
662 JMP TION /NO, SCHMITT TRIG SYNC
665 ADRB /GET VAL FR CONV BUF
667 ISZ I (NCTR /SAMPLED ALL CHANS FOR THIS INTERRUPT?
669 ISZ I (PCTR /YES,JOB IS ALL DONE?
671 JMP I (DONE /YES,'DONE' IS IN 'CLK' ROUTN
673 /SRESET-USED TO RESET STCHAN & CTR FR ADC SAMPLING
674 / ROUTN SETS MUX TO SAMPLE 1ST OF A SERIES OF CHANS.
675 / A CTR IS SET TO -# OF CONSEC CHANS TO SAMPLE
678 ISZ I (TOTPTS /#PTS /CHANNEL
683 ADLM /LOAD MUX WITH 1ST CHAN
685 JMS I (DISPLY /DISPLY UNTIL CLK INTERRUPT
686 \f/DRI(N) -SAMPLE DIGITAL IO BOARD N; & RTN RESULT
691 JMS I (DIGIO /GET DIGITAL VAL
695 /ARGN - GET N AND MAKE A 'DBSK' INSTRUCTION
700 DCA SETDX /SAV N TEMP
708 RAL /BOARD # = BITS 6-8
712 /DRO(M,N)- M=FL PT VAL TO OUTPUT, N=BOARD #
713 / IF M=0 CLR OUTPUT REG; OTHERWISE LEAVE
714 / THE BITS OF DBSO SET
719 DCA I (MASK /DIGITAL OUTPUT VAL
722 TAD (2 /65N5='DBCI+2'
727 TAD I (MASK /GET FL PT VAL
730 CMA /YES,SET ALL BITS OF AC
731 KDBCO, 0 /CLR OUTPUT REG
733 KDBSO, 0 /OUTPUT DIG VAL
737 /NEGCHK- THIS ROUTINE CHKS TO SEE IF A VALUE FROM
738 / 'DRI' OR 'GET' IS NEGATIVE. IF IT IS
739 / THE VALUE IS CHANGED TO 4096+NEG VAL.
742 DCA FLGNEG /VAL IS EITHER + R -
747 SMA CLA /VAL WAS NEG?
752 CLUGE, ADST /START CONV
756 \f/GET(M,L)- M=0, GET VAL FROM USER BUF & NO MASKING
757 / M>0, GET VAL FROM USER BUF & MASK WHERE
758 / M IS THE MASKING VALUE.
759 / L IS THE LOCATION OF USER BUF TO ACCESS
774 JMS COMMON /SAME CODE FOR 'GET' & 'PUT'
789 /PUT(M,L)- M IS THE FL PT VALU TO BE FIXED & PUT
790 / IN THE USER BUF; L IS THE LOC OF THE USER
791 / BUF WHERE TO STORE THE FIXED NUMBER.
794 JMS I FIXP /GET & FIX THE FL PT VAL
801 /COMMON- THIS ROUTINE IS USED BY BOTH 'GET' & 'PUT'
804 DCA MASK /SAVE M TEMPORARILY
816 \f/WHEN INTERRUPT OCCURS COME HERE
820 CLSK /CLOCK INTERRUPT?
826 TSF /DUE TO LAST ECHO?
827 HLT /SPURIOUS INTERRUPT
834 JMP I (TION /NO,IGNORE CHAR
836 JMP I (7605 /RTN TO MONITOR
837 \f/ARG123-THIS ROUTINE GETS 3 ARGUMENTS OF A FUNCTION
838 / AND STORES THEIR FL PT VALUES IN
839 / 'ARG1,ARG2,ARG3' & STORES THEIR FIXED VALUES
840 / AT 'ADR,ADR+1,ADR+2'
845 TAD I ARG123 /GET(ADR-1)FOR THE THREE
849 DCA I XR1 /SINGLE PREC ARG1
850 JMS I (GETARG /ARG2 DESIGN BY AC=0
852 DCA I XR1 /SINGLE PREC ARG2
854 JMS I (GETARG /ARG3 DESIGN BY AC-3
856 DCA I XR1 /SINGLE PREC ARG3
858 \f/DRESET-USED TO RESET STARTING DIGITAL IO BOARD & CTR;
859 / WAIT FOR CLK TO O.F.; SAMPLE EACH BOARD ASKED FOR.
865 TAD I (CSAM /STARTING BOARD #
867 RAL /ST BOARD #*10(8)
869 DCA KDBCI /[DBCI-10(8)] FOR 1ST BOARD
873 CLSA /READ STATUS & CLR
875 /SAMPLE ALL BOARDS ASKED FOR
879 JMS DIGIO /SAMPLE BOARD
880 JMS I (PUTBUF /PUT DIG VAL IN BUF
881 ISZ I (NCTR /MORE BOARDS?
883 ISZ I (PCTR /NO, JOB IS ALL DONE?
885 JMP I (DONE /YES,'DONE' IS IN 'CLK' ROUTN
886 /DIGIO-ENTER WITH 'DBCI' SETUP FOR CORRECT BOARD; THIS RTN
887 / SETS UP THE 'DBRI & DBCI' AND SAMPLES CORRECT BOARD;
888 / EXIT WITH DIGITAL VAL IN AC