A large commit.
[pdp8.git] / sw / os8 / v3d / sources / extensions / dectapes / dectape2 / uf.pa
CommitLineData
81e70d48
PH
1/OS8 BASIC USER FUNCTIONS, V5
2/
3/
4/
5/
6/
7/
8/
9/
10/
11/COPYRIGHT (C) 1974 BY DIGITAL EQUIPMENT CORPORATION
12/
13/
14/
15/
16/
17/
18/
19/
20/
21/
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.
26/
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.
31/
32/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
33/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
34/DIGITAL.
35/
36/
37/
38/
39/
40/
41/
42/
43/
44/
45\f/JR 6-JUN-77 MODIFIED FOR V5
46
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
51
52 FPP= 4000
53 FADD= FPP+2000
54 FSUB= FPP+2117
55 FMPY= FPP+1600
56 FDIV= FPP+1722
57 FFNEG= FPP+2135
58 FFPUT= FPP+2256
59 FFGET= FPP+2241
60 FFNOR= FPP+2215
61 FACCLR= 0365
62 UNSFIX= 1615
63 PSWAP= 1230
64 ARGPRE= 307
65
66 /VC8E POINT PLOTTING DISPLAY CONTROL IOT'S
67
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)
71 DIXY= 6055 /INTENSIFY
72
73 /DK8EP PROGRAMMABLE REAL TIME CLOCK IOT'S
74
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
82
83 /CLOCK ENABLE REGISTER BITS
84 /BIT FUNCTION
85 /0 INTERRUPT ENABLE BIT
86 /1-2 MODE BITS:
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
91 /3-5 RATE SELECTION:
92 / 000 STOPPED
93 / 001 EXTERNAL TIME BASE
94 / 010 100 HZ
95 / 011 1 KHZ
96 / 100 10 KHZ
97 / 101 100 KHZ
98 / 110 1 MHZ
99 / 111 STOPPED
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
104
105 /AD8EA A-D CONVERTER IOT'S
106
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
114
115 /STATUS REGISTER FORMAT:
116 /0 A-D DONE FLAG
117 /1 TIMING ERROR FLAG
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
122 /6-7 UNUSED
123 /8-11 4 BIT CHANNEL NUMBER
124
125 /DR8E-A DIGITAL BUFFERED I/O BASE IOT'S
126
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
135
136 ACX= 44
137 ACH= 45
138 ACL= 46
139
140 MAXPTS= XR0
141 REFRFL= XR1
142 BUFXR= XR2
143 DX= XR3 /XR3,XR4,XR5= TEMP FL PT LOC
144
145 SPF= 6040 /SET TTY PRINTER FLAG
146 CAF= 6007 /RESET PROCESSOR
147
148 IA= 1465 /ENTRY POINT FOR USER FUNCTION ERROR MESSAGE
149\f NOPUNCH /DUMMY SECTION FOR MISC PAGE 0 REFERENCES
150
151 *1
152 JMP I .+1
153 SERVC
154 *6
155USECON, 0 /ENTRY #OF USER BUF IN DIM TBL
156 *10
157XR0, 0
158XR1, 0
159XR2, 0
160XR3, 0
161XR4, 0
162XR5, 0
163 *20
164CDFIO, CDF 10 /FLD OF PSEUDO DIM TBL
165 0
166ARSTRT, 0 /ADR-1 OF PSEUDO DIM TBL
167 *64
168INSAV, 0
169 *73
170K0010, 10
171K0017, 17
172 *77
173K0200, 200
174 *107
175M14, -14
176 *114
177FIXP, UNSFIX
178 *134
179FGETL, FFGET
180FPUTL, FFPUT
181FNORL, FFNOR
182FCLR, FACCLR
183FNEGL, FFNEG
184 *156
185P1SWAP, PSWAP
186
187 ENPUNCH
188\f *3400
189
190/INI(N)-INITIALIZE ROUTN;CALLED BY USER BEFORE 'PLY
191/ OR ADC';INITIALIZE CTRS,FLGS,ETC
192/ N IS A DUMMY ARG
193/
194INI, VERSON^100+SUBVUF /VERSION NUMBER OF USER FUNCTIONS
195 JMS BUFCDF
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
199 IAC
200 DCA I (STPT /ACCES BUF AT 1ST PT
201 IAC
202 DCA I (NTHY /ACCES EVERY PT
203 IAC
204 DCA I (XFLG /BUF MAYBE DISPLAYED
205 JMP I INI
206
207 /ROUTINE TO GET FIELD AND ADDRESS OF USER BUFFER
208 /FROM 'USECON' LOCATION
209
210BUFCDF, 0
211 TAD USECON /ENTRY PT OF BUF IN DIM TBL
212 CLL RTL /MULT BY 4
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
216 DCA .+1
217 0
218 CMA
219 TAD I XR5 /ADR-1 OF BUF
220 DCA BUFBAK /NEED FOR DISPLY ROUTN
221 TAD I XR5 /GET CDF OF BUF
222 DCA PUTCDF
223 TAD PUTCDF
224 DCA CDFBAK /NEED FOR DISPLY ROUTN
225 CDF /RESTORE DF
226 JMP I BUFCDF
227CDFBAK, 0
228BUFBAK, 0
229TOTPTS, 0
230
231/PUTBUF-ENTER WITH A 12BIT VALUE IN AC;PUT VAL IN
232/ USER BUFFER;CHK TO SEE IF NXT VAL WILL CROSS FLDS
233/
234PUTBUF, 0
235PUTCDF, 0
236 DCA I BUFXR
237 IAC
238 TAD BUFXR
239 SZA CLA /ABOUT TO CROSS FLDS?
240 JMP .+4 /NO
241 TAD K0010 /YES
242 TAD PUTCDF
243 DCA PUTCDF /DF=DF+1
244 CDF /RESTORE DF
245 JMP I PUTBUF
246\f
247/PLY(Y)-ENTER WITH YVAL IN FAC;CHK 0<=VAL<1.;
248/ PUT LEGIT VAL IN USER BUF
249/
250PLY, 0
251 TAD ACH
252 SPA CLA /YVAL>=0?
253 JMP I (IA /NO,ERR
254 TAD ACX
255 SMA SZA CLA /YVAL<1?
256 JMP I (IA /NO, ERR
257/CONV # IN FAC TO A 10BIT DISPLAYABLE VAL
258/ FAC=FAC*1776+1001
259/
260 JMS I (FMPY /YES
261 FL1022 /1776(8)
262 JMS I (FADD
263 FL513 /1001(8)
264 JMS I FIXP
265 JMS PUTBUF
266 ISZ TOTPTS /KEEP CNT OF PTS IN BUF
267 JMP I PLY
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.
271/
272DLY, 0
273 JMS I FIXP
274 SPA SNA /1<=N?
275 JMP I (IA /NO,ERR
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
279 DCA XR1
280 TAD INI
281 CIA
282 TAD MAXPTS
283 SZA CLA /N IS STILL THE SAME?
284 JMP .+3 /NO
285 JMS I (DISPLY /YES, DISPLY ONCE &
286 JMP I DLY /RETURN
287 TAD INI /GET N BACK
288 DCA MAXPTS /ASSUME N IS VALID FOR MOMENT
289 TAD MAXPTS
290 CIA
291 TAD (2000
292 SPA CLA /N<=1024?
293 JMP I (IA /NO
294 DCA REFRFL /ONE SHOT DISPLY
295 JMS I (SETDX /SET DX FOR DISPLY
296 JMP I DLY
297\f/ADC(N)-SAMPLE ADC NTH CHANNEL; RETN FL PT VAL IN FAC
298/
299
300ADC, 0
301 JMS I FIXP /GET ARG N
302 CIA
303 TAD K0017
304 SPA /N<=17(8)?
305 JMP I (IA /NO,ERR
306 CIA /YES
307 TAD K0017
308 ADLM /LOAD MUX
309 ADST /START CONV
310 ADSK
311 JMP .-1
312 ADRB /GET VAL
313 DCA ACH
314 JMS I (FFLOT
315 JMP I ADC
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
319/
320CLW, 0
321 CLSK /STATUS REG IS ALREADY SET?
322 SKP /NO
323 JMP EARLY /YES
324 CLSK
325 JMP .-1
326 CLSA /READ STATUS
327CLW1, 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
332 RAR /NO
333 DCA ACH
334 JMS I (FFLOT
335 JMP I CLW
336/IF CLOCK INTERRUPTED TOO SOON TELL USER;
337/-8 IF O.F. ONLY; 9 THRU 15 IF SCHMITT ONLY;
338/-9 THRU -15 IF BOTH
339EARLY, CLSA
340 TAD K0010
341 JMP CLW1
342
343 PAGE
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
347/
348DIS, 0
349 JMS I (BUFCDF /SETUP CDF & USER BUF
350 JMS I (ARG123
351 STPT-1
352/FLOAT N
353 TAD NTHY
354 DCA ACH
355 JMS I (FFLOT
356 JMS I FPUTL /IT BETTER NOT =0
357 DX /HOLD TEMPORARY
358/CHK 1<=S,0<=E-S
359 TAD STPT
360 SPA SNA
361 JMP I (IA /ERROR
362 CIA
363 TAD ENDPT
364 SPA
365 JMP I (IA /ERROR
366/FLOAT (E-S) & GET (E-S)/N
367 DCA ACH
368 JMS I (FFLOT
369 JMS I (FDIV
370 DX
371/CHK (E-S)/N+1<=1024; MAXPTS=(E-S)/N+1
372 JMS I FIXP
373 IAC
374 DCA MAXPTS /ASSUME OK FOR NOW
375 TAD MAXPTS
376 CIA
377 TAD (2000 /1024(10)
378 SPA CLA
379 JMP I (IA /ERROR
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
382 JMS I (GETARG
383 JMS I FIXP
384 DCA XFLG
385 TAD XFLG
386 SZA CLA /USER WANTS TO DISPLY?
387 TAD MAXPTS /YES,TOTPTS=MAXPTS
388DPY1, 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)
391 JMS I (SETDX
392 JMP I DIS
393STPT, 0 /THESE 3 LOCATIONS
394ENDPT, 0 /GO TOGETHER & MUST
395NTHY, 0 /BE IN THIS ORDER
396XFLG, 0
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'
400/
401DISPLY,0
402/IF TOTPTS<=MAXPTS,DISPLY TOTPTS;OTHERWSE MAXPTS
403D4, TAD I (TOTPTS
404 SNA /SIMPLE WAIT LOOP FOR THAT'1ST'
405 JMP .-1 /ADC TO BE SAMPLED
406 CIA
407 DCA DISCTR
408 TAD DISCTR
409 TAD MAXPTS
410 SMA CLA /TOTPTS<=MAXPTS?
411 JMP .+4 /YES
412 TAD MAXPTS /NO
413 CIA
414 DCA DISCTR
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
419 TAD STPT
420 DCA BUFPTR
421 TAD XCRD /INITIALIZE XCOORD
422 DCA XCOORD
423D3, TAD XCOORD
424 DILX
425 TAD DELTAX
426 DCA XCOORD /UPDATE XCOORD BY DELTAX
427DISCDF, 0
428 TAD I BUFPTR
429 CDF
430 DILY
431 CLA CLL
432 TAD NTHY /MOVE PTR TO NXT LOC TO BE
433 TAD BUFPTR /ACCESSED IN BUF
434 DCA BUFPTR
435 SNL /JUST CROSSED FLDS?
436 JMP .+4 /NO
437 TAD K0010 /YES
438 TAD DISCDF
439 DCA DISCDF
440 DISD
441 JMP .-1
442 DIXY /INTENSIFY
443/DISPLYED ALL PTS YET?
444 ISZ DISCTR
445 JMP D3 /NO
446 TAD REFRFL /YES,KEEP REFRESHING?
447 SNA CLA
448 JMP I DISPLY /NO
449/KEYBOARD IS CHK HERE FOR ^N WHEN DSPL & NOT SAMPLING
450/KEYBOARD INTERRUPTS TO THE INT ROUTN
451/
452 KSF /YES
453 JMP D4
454 KRB
455 TLS
456 TAD (-216
457 SNA CLA /USER HIT ^N?
458 JMP I DISPLY /YES
459 JMP D4 /NO, KEEP REFRESHING
460DISCTR, 0
461BUFPTR, 0
462XCRD, 0
463XCOORD, 0
464DELTAX, 0
465\f/FFLOT-FLOAT ANY INTEGER IN ACH(LOC 45) INTO FAC
466
467FFLOT, 0
468 DCA ACL /CLEAR LOW MANTISSA
469 TAD (13 /11(10) INTO EXPONENT
470 DCA ACX
471 JMS I FNORL /NORMALIZE
472 JMP I FFLOT /RETURN
473FL513, 12;2002;0
474FL1022, 12;3774;0
475
476 PAGE
477\f/SAM(C,N,P,T)-SETUP PARAMETERS FOR SUBSEQUENT SAMPLING
478/ OF ADC'S OR OR DOING DIGITAL IO
479/
480 CONST=CLK
481 TSAM=NCTR
482SAM, 0
483 JMS I (ARG123
484 CSAM-1
485 TAD PSAM
486 SPA SNA /P=0?
487 JMP I (IA /YES,ERR
488 CIA /NO
489 DCA PCTR /PCTR=-P(DONE CTR)
490 CLL IAC RAL /4TH ARG IS DESIGN BY AC=2
491 JMS GETARG /GET T
492 JMS I FIXP
493 DCA TSAM
494 TAD TSAM
495 SZA CLA /SET UP TO SAMPLE ADC'S?
496 JMP DIG /NO, DO DIGAL IO
497 IAC /YES
498 DCA SAMFLG /SET FLG=1 FOR 'CLK'
499 TAD K0017 /15(10)
500 JMP SAM1
501DIG, CMA
502 DCA SAMFLG /SET FLG=-1 FOR 'CLK'
503 CLA CLL IAC RAL /2
504SAM1, DCA CONST
505/CHK IF 0<=C, 1<=N, N+C-1<=2(DIG IO)OR <=17(8)(ADC'S)
506/
507 CMA
508 TAD NSAM
509 SPA /1<=N?
510 JMP I (IA /NO,ERR
511 TAD CSAM
512 CIA
513 TAD CONST
514 SPA CLA /N+C-1<=2 OR 17?
515 JMP I (IA /NO,ERR
516 TAD TSAM
517 SNA CLA
518 JMP SAM3
519/CLEAR ALL DIGIAL INPT REGS
520 JMS I (BUFCDF /SET UP USER BUF
521 TAD NSAM
522 CIA
523 DCA NCTR /-#OF BOARDS TO CLAR
524 TAD CSAM /START BOARD#(0,1,2)
525 CLL RTL
526 RAL /START BOARD# * 10(8)
527 TAD (DBCI
528A1, DCA .+2
529 CLA CMA
530 0 /DBCI IS ISSUED
531 CLA
532 TAD .-2
533 TAD K0010
534 ISZ NCTR /MORE BOARDS TO CLEAR?
535 JMP A1 /YES
536 CLA
537 JMP I SAM
538/DO A CLEAR ALL; AD DONE FLG, ERR FLG, CLR MUX & EN REG.
539/SET NON-AUTO INCR MODE
540/
541SAM3, CAF /CL ALL FLGS-I MAY USE ION'S
542 ADCL
543 TAD K0200
544 ADLE /ENABLE EXT START OF ADC'S
545 JMP I SAM
546CSAM, 0 /THESE 3 LOCATIONS MUST
547NSAM, 0 /BE TOGETHER & IN THIS
548PSAM, 0 /ORDER
549PCTR, 0
550NCTR, 0
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
554/
555CLK, 0
556 JMS I (ARG123
557 R-1
558 CLSA /CLEAR CLK STATUS REG
559 CLA
560 TAD R
561 SPA SNA /R>0?
562 JMP IAA /NO,ERR
563 TAD (-6 /YES
564 SMA SZA CLA /R<=6?
565 JMP IAA /NO
566 TAD R /R GIVES CORRECT VAL FOR
567 CLL RTL /EXT START, .1,1,10,100,1000 KHZ RATE
568 RTL
569 RTL /RATE GOES INTO BITS 3-5 OF EN REG
570 TAD (5050 /BITS 0,2,6,8 OF EN REG ALWAYS SET
571 DCA SAM /SAVE TEMP
572 TAD O /OVERFLOW CNT
573 CIA
574 CLAB /SET BUF PRESET REG
575 CLA
576 TAD S
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
580 CMA
581 CLZE /CLEAR BAD BITS FROM EN REG
582 CMA /ENABLE VAL IS BACK AGAIN
583 CLOE /START CLOCK
584 CLA
585 TAD SAMFLG
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
590 JMP I (SRESET /YES
591DONE, DCA SAMFLG /CLR FLG
592 SPF /RESET TTY FLG FOR BASIC
593 JMP I CLK /RTN TO BASIC
594IAA, SPF
595 JMP I (IA
596R, 0 /THESE 3 LOCATIONS
597O, 0 /MUST BE TOGETHER IN
598S, 0 /THIS ORDER
599SAMFLG, 0
600FL4096, 15;2000;0
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)
605
606GETARG, 0
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
610KARG, ARGPRE /USED TO ADVANTAGE
611 CDF /RESET D.F.
612 JMP I GETARG
613
614 PAGE
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
619/
620SETDX, 0
621 CMA
622 TAD MAXPTS /MAXPTS-1
623 SNA /IF # OF MAXPTS=1 THEN DISPLY
624 IAC /IS POSITIONED AT X=0 COORD
625 DCA ACH
626 JMS I (FFLOT
627 JMS I FPUTL
628 DX /SAVE FL PT(MAXPTS-1) TEMP
629 TAD (1777 /1023
630 DCA ACH
631 JMS I (FFLOT
632 JMS I (FDIV
633 DX /FL PT (1023/MAXPTS-1) =DX
634 JMS I FIXP /FIXED 'DX'
635 DCA I (DELTAX
636 TAD I (DELTAX
637 DCA ACH
638 JMS I (FFLOT
639 JMS I (FMPY
640 DX /(MAXPTS-1)*(FIX'DX')=FLOT PROD
641 JMS I FIXP /FIX 'PROD'
642 CIA
643 TAD (1777
644 CLL RAR /(1023-FIX'PROD')/2
645 TAD (1001
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
649
650 TAD I (XFLG
651 SZA CLA
652 JMS I (DISPLY
653 JMP I SETDX
654\f/ADSAM-A CLOCK INTERRUPT FOR SAMPLING ADC'S COMES HERE
655/
656ADSAM1, ADRS /RD STATUS(GET MUX)
657 IAC
658 ADLM /BMP MUX BY 1
659 JMP CLUGE
660ADSAM, CLSA /READ STATUS REG & CLEAR IT
661 SMA CLA /CLK O.F.?
662 JMP TION /NO, SCHMITT TRIG SYNC
663 ADSK /CONV IS DONE?
664 JMP .-1 /NO
665 ADRB /GET VAL FR CONV BUF
666 JMS I (PUTBUF /YES
667 ISZ I (NCTR /SAMPLED ALL CHANS FOR THIS INTERRUPT?
668 JMP ADSAM1 /NO
669 ISZ I (PCTR /YES,JOB IS ALL DONE?
670 JMP SRESET-1 /NO
671 JMP I (DONE /YES,'DONE' IS IN 'CLK' ROUTN
672
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
676/
677
678 ISZ I (TOTPTS /#PTS /CHANNEL
679SRESET, TAD I (NSAM
680 CIA
681 DCA I (NCTR
682 TAD I (CSAM
683 ADLM /LOAD MUX WITH 1ST CHAN
684TION, ION
685 JMS I (DISPLY /DISPLY UNTIL CLK INTERRUPT
686\f/DRI(N) -SAMPLE DIGITAL IO BOARD N; & RTN RESULT
687/ AS FL PT IN FAC
688
689DRI, 0
690 JMS ARGN
691 JMS I (DIGIO /GET DIGITAL VAL
692 JMS NEGCHK
693 JMP I DRI
694
695/ARGN - GET N AND MAKE A 'DBSK' INSTRUCTION
696
697ARGN, 0
698 JMS I FIXP /BOARD #
699/CHK 0<=N<=2
700 DCA SETDX /SAV N TEMP
701 TAD SETDX
702 CIA
703 TAD (2
704 SPA CLA
705 JMP I (IA /ERR
706 TAD SETDX /GET N BAK
707 CLL RTL
708 RAL /BOARD # = BITS 6-8
709 TAD (DBCI
710 JMP I ARGN
711
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
715
716 MASK=DIGIO
717DRO, 0
718 JMS I FIXP
719 DCA I (MASK /DIGITAL OUTPUT VAL
720 JMS I (GETARG
721 JMS ARGN
722 TAD (2 /65N5='DBCI+2'
723 DCA KDBCO
724 IAC
725 TAD KDBCO
726 DCA KDBSO
727 TAD I (MASK /GET FL PT VAL
728 SZA /CLR OUTPUT REG/
729 JMP KDBSO /NO
730 CMA /YES,SET ALL BITS OF AC
731KDBCO, 0 /CLR OUTPUT REG
732 SKP
733KDBSO, 0 /OUTPUT DIG VAL
734 CLA
735 JMP I DRO
736\f FLGNEG=DRO
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.
740
741NEGCHK, 0
742 DCA FLGNEG /VAL IS EITHER + R -
743 TAD FLGNEG
744 DCA ACH
745 JMS I (FFLOT
746 TAD FLGNEG
747 SMA CLA /VAL WAS NEG?
748 JMP I NEGCHK /NO
749 JMS I (FADD /YES
750 FL4096
751 JMP I NEGCHK
752CLUGE, ADST /START CONV
753 JMP ADSAM+3
754
755 PAGE
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
760
761 LHOLD=ARG123
762GET, 0
763 IAC
764 DCA MSKCTR
765 JMS I FIXP /GET M
766 SNA /M=0
767 CMA /YES,SET M=7777
768 CLL RAR
769 SZL
770 JMP .+3
771 ISZ MSKCTR
772 JMP .-4
773 RAL
774 JMS COMMON /SAME CODE FOR 'GET' & 'PUT'
775 TAD MSKCTR
776 CIA
777 DCA MSKCTR
778 TAD I LHOLD
779 CDF /RESET D.F.
780 CLL RAR
781 ISZ MSKCTR
782 JMP .-2
783 RAL
784 AND MASK
785 JMS I (NEGCHK
786 JMP I GET
787MSKCTR, 0
788
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.
792
793PUT, 0
794 JMS I FIXP /GET & FIX THE FL PT VAL
795 JMS COMMON
796 TAD MASK
797 DCA I LHOLD
798 CDF
799 JMP I PUT
800
801/COMMON- THIS ROUTINE IS USED BY BOTH 'GET' & 'PUT'
802
803COMMON, 0
804 DCA MASK /SAVE M TEMPORARILY
805 JMS I (GETARG
806 JMS I FIXP /GET L
807 CLL
808 TAD I (BUFBAK
809 DCA LHOLD
810 SZL /CROSSED FIELDS?
811 TAD K0010 /YES
812 TAD I (CDFBAK /NO
813 DCA .+1
814 0
815 JMP I COMMON
816\f/WHEN INTERRUPT OCCURS COME HERE
817/
818
819SERVC, CLA
820 CLSK /CLOCK INTERRUPT?
821 SKP /NO
822 JMP I (ADSAM /YES
823 KSF /TTY INTERRUPT?
824 SKP /NO
825 JMP KKBRD /YES
826 TSF /DUE TO LAST ECHO?
827 HLT /SPURIOUS INTERRUPT
828 TCF /YES
829 JMP I (TION
830KKBRD, KRB
831 TLS /ECHO CHAR
832 TAD (-203
833 SZA CLA /^C TYPED?
834 JMP I (TION /NO,IGNORE CHAR
835 JMS I P1SWAP /YES
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'
841/ CALL: JMS ARG123
842/ ADR-1
843
844ARG123, 0
845 TAD I ARG123 /GET(ADR-1)FOR THE THREE
846 DCA XR1 /1WD ARGS
847 ISZ ARG123
848 JMS I FIXP
849 DCA I XR1 /SINGLE PREC ARG1
850 JMS I (GETARG /ARG2 DESIGN BY AC=0
851 JMS I FIXP
852 DCA I XR1 /SINGLE PREC ARG2
853 IAC
854 JMS I (GETARG /ARG3 DESIGN BY AC-3
855 JMS I FIXP
856 DCA I XR1 /SINGLE PREC ARG3
857 JMP I ARG123
858\f/DRESET-USED TO RESET STARTING DIGITAL IO BOARD & CTR;
859/ WAIT FOR CLK TO O.F.; SAMPLE EACH BOARD ASKED FOR.
860/
861
862DRESET, TAD I (NSAM
863 CIA
864 DCA I (NCTR
865 TAD I (CSAM /STARTING BOARD #
866 CLL RTL
867 RAL /ST BOARD #*10(8)
868 TAD (DBCI-10
869 DCA KDBCI /[DBCI-10(8)] FOR 1ST BOARD
870/WAIT LOOP
871 CLSK
872 JMP .-1
873 CLSA /READ STATUS & CLR
874 CLA
875/SAMPLE ALL BOARDS ASKED FOR
876
877DIGSAM, TAD K0010
878 TAD KDBCI
879 JMS DIGIO /SAMPLE BOARD
880 JMS I (PUTBUF /PUT DIG VAL IN BUF
881 ISZ I (NCTR /MORE BOARDS?
882 JMP DIGSAM /YES
883 ISZ I (PCTR /NO, JOB IS ALL DONE?
884 JMP DRESET /NO
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
889/
890
891DIGIO, 0
892 DCA KDBCI
893 TAD KDBCI
894 IAC
895 DCA KDBRI
896KDBRI, 0
897KDBCI, 0
898 JMP I DIGIO
899$
900\f