software: Added more and more
[pdp8.git] / sw / f4 / FRTSRC / realtm.ra
1 / A-D CLOCKED, BUFFERED SAMPLING ROUTINE
2 /
3 / VERSION 5A 4-27-77 PT
4 /
5 ADSK=6534
6 ADRB=6533
7 ADST=6532
8 ADLM=6531
9 ADLE=6536
10 ADCL=6530
11 CLZE=6130
12 ESF=4
13 LINC=6141
14 PDP=2
15 SAM=100
16 CLEN=6134
17 FIELD1 SAMPLE
18 0 /INTERRUPT TIME AD SAMPLER
19 IFNSW 8 <
20 JMS LNCSAM /INITIATE SAMPLE
21 NEXTCH, ISZ SAMINS /UPDATE SAM INST FOR NEXT CHAN
22 JMS LNCSAM /SAM AND INITIATE NEXT CHANNEL
23 >
24 TAD SAMPTR /SAVE THE OLD SAM BUFFER POINTER
25 DCA OLDPTR
26 TAD BUFFLD /AND THE FIELD
27 DCA OLDFLD
28 ISZ SAMPTR /BUMP BUFFER POINTER
29 JMP FLDOK /FIELD IS OK
30 TAD BUFFLD /BUMP FIELD
31 TAD L10
32 DCA BUFFLD
33 FLDOK, ISZ SAMCNT /BUMP BUFFER COUNT
34 JMP BUFFLD /NOT END OF BUFFER
35 TAD ARRAY+2 /RESET POINTER TO START OF BUFFER
36 DCA SAMPTR
37 TAD FLDBUF /RESET BUFFER FIELD
38 DCA BUFFLD
39 TAD BUFSIZ /RESET COUNT
40 DCA SAMCNT
41 BUFFLD, HLT /GET FIELD OF NEW ADB STOP CODE
42 TAD% SAMPTR /IS THIS THE SAM STOP CODE ?
43 TAD M3776 /(ILLEGAL AS A SAMPLE)
44 SZA CLA
45 JMP NOERR
46 ISZ TOOFAS /SET TOO FAST SWITCH
47 SAMPLD, CDF 10
48 DCA% XCLINT+1 /STOP SAMPLING
49 JMP% SAMPLE
50 NOERR, CLL CMA RAR /SET ADB STOP CODE
51 DCA% SAMPTR
52 OLDFLD, HLT /GET TO FIELD OF SAMPLE
53 IFSW 8 <
54 ADRB /READ SAMPLE
55 >
56 IFNSW 8 <
57 TAD SAMTMP /GET PREVIOUSLY READ SAMPLE
58 >
59 DCA% OLDPTR /INTO BUFFER
60 ISZ NPOINT+2 /ANY MORE SAMPLES
61 SKP /YES
62 ISZ NPOINT+1 /MORE THAN 7777 ?
63 SKP /YES
64 JMP SAMPLD /NO
65 ISZ NCHANL+1 /ANY MORE CHANNELS TO SAMPLE ?
66 JMP NEXTCH /YES GO START SAMPLING
67 TAD CSTART+2 /STARTING CHANNEL
68 IFSW 8 <
69 ADLM
70 >
71 IFNSW 8 <
72 DCA SAMINS
73 JMS LNCSAM /SET CHANNEL TO START
74 /IN CASE CLOCK INITIATED
75 >
76 TAD NCHANL+2 /NUMBER OF CHANNELS
77 DCA NCHANL+1 /INTO COUNTER
78 CDF 10
79 JMP% SAMPLE
80 IFSW 8 <
81 NEXTCH, ADST /SAMPLE NEXT CHANNEL
82 ADSK /WAIT FOR SAMPLE
83 JMP .-1
84 JMP SAMPLE+1
85 >
86 IFNSW 8 <
87 LNCSAM, 0 /LINC SAM SUBROUTINE
88 LINC
89 SAMINS, SAM 0 /SAMPLE AND SELECT NEXT CHANNEL
90 PDP
91 DCA SAMTMP /SAVE IT
92 JMP% LNCSAM
93 >
94 ADSETU, 0 /SET UP ROUTINE
95 DCA TOOFAS /CLEAR TOO FAST SWITCH
96 TAD ARRAY+1 /GET FIELD OF BUFFER
97 AND L7
98 CLL RTL
99 RAL
100 TAD CDF0
101 DCA FLDBUF
102 TAD FLDBUF
103 DCA BUFFLD /SAVE IN SAMPLER CODE
104 TAD ARRAY+2 /SET SAMPLER BUFFER POINTER
105 IAC
106 DCA SAMPTR
107 TAD LENGTH+2 /SIZE OF BUFFER
108 CLL RAL
109 TAD LENGTH+2 /TIMES THREE
110 DCA BUFSIZ /SAVE IT
111 TAD BUFSIZ /SET INITIAL COUNT
112 IAC
113 DCA SAMCNT
114 TAD NCHANL+2 /SET CHANNEL COUNT
115 DCA NCHANL+1
116 IFSW 8 <
117 CLA CMA /STOP THE CLOCK
118 CLZE
119 CLA
120 ADCL /CLEAR AD LOGIC JUST IN CASE
121 TAD L300 /SET AD ENABLE BITS
122 ADLE
123 TAD CSTART+2 /STARTING CHANNEL NUMBER
124 ADLM
125 >
126 IFNSW 8 <
127 CLEN /STOP THE CLOCK
128 TAD CSTART+2 /SET UP INITIAL SAM INSTRUCTION
129 TAD L100
130 DCA CSTART+2
131 TAD CSTART+2
132 DCA SAMST /STARTING SAM
133 TAD SAMST /ALSO INTERRUPT TIME SAM
134 DCA SAMINS
135 TAD L100 /SET FAST SAM BIT
136 IOF /TURN OFF INTERRUPTS IN LINC MODE
137 LINC /ENTER LINC MODE
138 ESF
139 SAMST, SAM 0 /SET INITIAL SAM CHANNEL
140 PDP
141 ION
142 CLA
143 >
144 CIF CDF
145 JMP% ADSETU
146 BASEX, FNOP
147 M3776, -3776
148 L10, 10
149 SAMPTR,
150 ARRAY, 0;0;0
151 LENGTH, 0;0
152 BUFSIZ, 0
153 SAMCNT,
154 CSTART, 0
155 OLDPTR, 0;0
156 SAMTMP,
157 NCHANL, 0;0;0
158 NPOINT, 0;0;0
159 FLDBUF,
160 XCLINT, ADDR #CLINT
161 IFSW 8 <
162 L300, 300
163 >
164 IFNSW 8 <
165 L100, 100
166 >
167 SAMXR, 0;0
168 TOOFAS, 0
169 ORG 10*3+BASEX
170 0
171 JA NAME+3
172 0
173 SAMRTN, JA .
174 CDF0, CDF
175 L7, 7
176 \f SECT REALTM
177 BASE 0
178 STARTD
179 FLDA 30 /GET RETURN ADDR
180 FSTA SAMRTN
181 FLDA 0 /GET ARG POINTER
182 BASE BASEX
183 SETB BASEX
184 SETX SAMXR
185 FSTA NPOINT /SAVE ARG POINTER
186 FCLA
187 EXTERN #CLINT
188 FSTA #CLINT /STOP ANY SAMPLING NOW!
189 LDX 1,1
190 FLDA% NPOINT,1 /GET BUFFER ADDRESS
191 FSTA ARRAY
192 FLDA% NPOINT,1+ /GET ADDR OF LENGTH
193 FSTA LENGTH
194 FLDA% NPOINT,1+ /ADDR OFHANNEL START
195 FSTA CSTART
196 FLDA% NPOINT,1+ /ADDR OF # CHANNELS
197 FSTA NCHANL
198 FLDA% NPOINT,1+ /ADDR OF NUMBER OF POINTS
199 FSTA NPOINT
200 FLDA ARRAY /CREATE SETX INS
201 FADD STXMJA
202 FSTA BUFSTX
203 FSTA ADBSTX /AND SAVE IT IN TWO PLACES
204 STARTF
205 FLDA% LENGTH /INTEGERIZE AND NEGATE SOME ARGS
206 FNEG
207 ALN 0
208 FSTA LENGTH
209 FNORM
210 ATX 1 /SET BUFFER COUNT
211 FLDA% CSTART /GET STARTING CHANNEL
212 ALN 0
213 FSTA CSTART
214 FLDA% NCHANL
215 FNEG
216 ALN 0
217 FSTA NCHANL
218 FLDA% NPOINT
219 FNEG
220 ALN 0
221 FSTA NPOINT
222 LDX -1,2 /SET UP FOR BUFFER CLEAR
223 FCLA
224 CLRBUF, FSTA% ARRAY,2+
225 JXN CLRBUF,1+
226 TRAP4 ADSETU /SET UP AD STUFF
227 FLDA LENGTH /RE-GET BUFFER SIZE
228 FNORM
229 ATX 1 /BUT NOW ITS TIMES THREE
230 FLDA STPCOD /STORE STOP CODES
231 FSTA% ARRAY /INTO FIRST 3 WORD
232 STARTD
233 FLDA SAMADR /SET UP SAMPLER INTERRUPT HANDLER
234 FSTA #CLINT
235 STARTF
236 JA SAMRTN /RETURN
237 NAME, TEXT +RTMADB+
238 SAMADR, ADDR SAMPLE
239 STPCOD, 3776;3777;0
240 STXMJA, 1100-1030;0
241 L2047, F 2047.
242 L511, F 511.
243 \f ENTRY ADB
244 ADB, BASE 0 /FETCH SAMPLE FROM BUFFER
245 STARTD
246 FLDA 30 /SAVE REUTRN
247 FSTA SAMRTN
248 SETB BASEX
249 SETX SAMXR
250 BASE BASEX
251 JXN SPEEDK,2 /CLOCK TOO FAST
252 FLDA ADBSTX /SAVE OLD SETX
253 FSTA OLDSTX
254 FADD L1 /ADD ONE TO IT
255 FSTA ADBSTX /AND SAVE IT BACK
256 JXN NORINQ,1+ /END OF BUFFER ?
257 FLDA BUFSTX /YES, RESTART
258 FSTA ADBSTX
259 FLDA LENGTH /RESET COUNT
260 ATX 1
261 NORINQ, STARTF
262 ADBSTX, SETX 0 /SET XR0 TO NEXT SAMPLE
263 WAIT, XTA 0 /GET THE NEXT SAMPLE
264 FSUB L2047 /IS IT THE STOP CODE
265 JEQ WAIT /YES
266 XTA 0 /NO, FETCH THE SAMPLE
267 LDX 3776,0 /SET SAMPLE STOP CODE
268 OLDSTX, SETX 0 /SET XR0 TO PREVIOUS STOP CODE
269 LDX 0,0 /NOW ZERO IT
270 JA SAMRTN /RETURN
271 SPEEDK, EXTERN #WRITO /USE FORTRAN I/O
272 TRAP3 #WRITO /TO WRITE A MESSAGE
273 JA TTYUNT /ON THE TTY
274 JA MESSAG
275 EXTERN #RENDO
276 TRAP3 #RENDO /CLOSE THE RECORD
277 LDX 0,2 /KILL TOO FAST SWITCH
278 JA SAMRTN /RETURN FROM ADB
279 TTYUNT, F 0.
280 MESSAG, TEXT '(" SAMPLING TOO FAST")'
281 BUFSTX, SETX 0
282 L1, 0;1
283 END
284 \f