Commit | Line | Data |
---|---|---|
81e70d48 PH |
1 | / OS/8 TSAR/TSARINA\r |
2 | /\r | |
3 | / ADBUFF.RA\r | |
4 | /\r | |
5 | / DEC-S8-STSAA-A-LA25\r | |
6 | /\r | |
7 | / K. ELLSON AND L. PEARSON\r | |
8 | /\r | |
9 | / /8 AD CONVERSION CLOCKED WITH CLOCK ROUTINE\r | |
10 | / /8 /1 AD CONVERSION CLOCKED WITH CLOCK1 ROUTINE\r | |
11 | / /8/4/1 AD CONVERSION CLOCKED WITH CLOCK1 AND SCHMITT TRIGGER INPUT TIMED WITH CLOCK ROUTINE\r | |
12 | /\r | |
13 | /\r | |
14 | / TSAR SUBROUTINE - BUFFERED A/D\r | |
15 | / COPYRIGHT 1973\r | |
16 | / DIGITAL EQUIPMENT CORPORATION\r | |
17 | / MAYNARD, MASSACHUSETTS 01754\r | |
18 | /\r | |
19 | / THIS PACKAGE PROVIDES A FUNCTIONAL REPLACEMENT FOR\r | |
20 | / THE FOLLOWING FORTRAN IV LIBRARY SUBROUTINES: REALTM\r | |
21 | / AND ADB. REALTM AND ADB ARE REPLACED BY THE SUBROUTINE\r | |
22 | / THRUPT. A THRUPT CALL IS ILLUSTRATED BY THE FOLLOWING\r | |
23 | / FORTRAN PROGRAM.\r | |
24 | /\r | |
25 | /*************************************************************\r | |
26 | /\r | |
27 | / EXTERNAL STAT1,STAT2\r | |
28 | / INTEGER BUFF1(85),BUFF2(85),IPARMS(3),HASH(# OF CHANNELS)\r | |
29 | / CALL THRUPT(BUFF1,BUFF2,IPARMS,HASH,NTRIG)\r | |
30 | / CALL CLOCK(8,IRATE) @ IF NO /1 SWITCH AT ASSEMBLY TIME \r | |
31 | / @ FOR A/D CONVERSION TIMED WITH FIRST DK8-EP\r | |
32 | / CALL CLOCK1(8,IRATE) @ IF /1 SWITCH SET AT ASSEMBLY TIME\r | |
33 | / @ THIS IS FOR A/D CONVERSION TIMED WITH 2ND DK8-EP\r | |
34 | / IF YOU USE BOTH CLOCKS ON ONE SYSTEM, THEN YOU\r | |
35 | / MAY SWITCH ON ONLY ONE CLOCK-TIMED A/D CONVERSION.\r | |
36 | / THIS MEANS: ONLY ONE CLOCK MAY BE STARTED WITH FUNCTION=8 (BIT 9 SET)\r | |
37 | / ...\r | |
38 | / 100 IF (STAT1-0.5) 100, 110, 999\r | |
39 | / 110 WRITE (5) BUFF1\r | |
40 | / CALL RELEAS (1)\r | |
41 | / ...\r | |
42 | / 999 WRITE (4,1000)\r | |
43 | / 1000 FORMAT (' SAMPLING TOO FAST')\r | |
44 | / CALL CLOCK (0,0)\r | |
45 | / ...\r | |
46 | /\r | |
47 | /************************************************************\r | |
48 | /\r | |
49 | / BUFF1 - ONE OF 2 BUFFERS FOR THE ANALOG DATA, 255 12 BIT\r | |
50 | / WORDS ARE STORED IN EACH BUFFER\r | |
51 | /\r | |
52 | / STAT1 - DYNAMIC STATUS WORD OF BUFF1. THE VALUES 0.25,\r | |
53 | / 0.5, AND +1. INDICATE THAT THE BUFFER IS NOT FILLED,\r | |
54 | / BUFFER IS FILLED, AND BUFFER OVERFLOW.\r | |
55 | /\r | |
56 | / BUFF2 - THE SECOND BUFFER.\r | |
57 | /\r | |
58 | / STAT2 - THE DYNAMIC STATUS WORD OF BUFF2, VALUES ARE THE\r | |
59 | / SAME AS FOR STAT1.\r | |
60 | \f/\r | |
61 | / IPARMS - THE PARAMETER VECTOR WHICH CONTAINS IN ORDER THE\r | |
62 | / STARTING CHANNEL, THE NUMBER OF CHANNELS, AND THE NUMBER\r | |
63 | / OF SAMPLES. \r | |
64 | / HASH - OPTIONAL: A TABLE CONTAINING THE READ VALID INFORMATION FOR A/D CHANNELS AND STRIGG INPUTS\r | |
65 | / NTRIG - OPTIONAL BUT HASH MUST BE SPECIFIED:\r | |
66 | / THE NUMBER OF SCHMITT TRIGGER CHANNELS TO SAMPLE\r | |
67 | / CONFIGURATION REQUIRED FOR A/D AND STRIGG SAMPLING:\r | |
68 | / FIRST DK8-EP: FREE RUNNING TIMER (10 KHZ OR 100 KHZ) FOR TRIGGER INPUT.\r | |
69 | / CALL CLOCK4 (1 TO 7,3) FOR 10 KHZ\r | |
70 | / CALL CLOCK4 (1 TO 7,30) FOR 100 KHZ \r | |
71 | / SECOND DK8-EP STARTS THE A/D VIA EXTERNAL EVENT: CALL CLOCK1(8,RATE)\r | |
72 | / TIME WORD: THE INTERVALL BETWEEN TWO A/D CYCLES IS DIVIDED INTO\r | |
73 | / 12 SLICES CALLED S0 TO S11.\r | |
74 | / AN EXTERNAL EVENT BETWEEN 0 AND S0 (SAMRAT/12) SETS THE LEFTMOST BIT 0.\r | |
75 | / ' '' '' '' S11 AND SAMRAT SETS THE RIGHTMOST BIT 11.\r | |
76 | /\r | |
77 | / UPDATES:\r | |
78 | /\r | |
79 | / WGET: THE THIRD PARAMETER (RESULT) IS OPTIONAL\r | |
80 | / VALID CALLS:\r | |
81 | / I=WGET(BUFF,PNTR,RESULT)\r | |
82 | / I=WGET(BUFF,PNTR)\r | |
83 | / CALL WGET (BUFF,PNTR,RESULT)\r | |
84 | /\r | |
85 | / 11-SEP-80 HA\r | |
86 | /\r | |
87 | / INTERRUPT SERVICE ROUTINE FSMPLE:\r | |
88 | / BEFORE THE READ ADRB WAIT FOR ADSE TO AVOID A NON VALID READ\r | |
89 | / IF CLOCK DID'NT START THE AD CONVERTER.\r | |
90 | / THEREFORE IN ANY CASE (ONE OR MORE CHANNELS) THE \r | |
91 | / CLOCK MUST BE STARTED WITH CALL CLOCK(8,FREQU).\r | |
92 | / FIRST PARAMETER OF CLOCK MUST BE 8 !\r | |
93 | / 29-SEP-80 HA\r | |
94 | / 1-OCT-82 HA REV 2.0 PACKS THE SAMPLE\r | |
95 | / 15-JUL-83 HA REV 2.1 REARANGES CODE FOR PDP12 LINC OPTION\r | |
96 | / 18-MAR-85 HA REV 3.0 ALLOWS TWO DK8-EP MODULES\r | |
97 | / FOR A/D TRIGGED WITH DEV. CODE 13 CLOCK: /8 SWITCH\r | |
98 | / FOR A/D TRIGG'D WITH DEV. CODE 17 CLOCK: /1 /8 SWITCH\r | |
99 | / FOR A/D ON PDP-12 : NO SWITCH\r | |
100 | /\r | |
101 | / 26-JUN-85 HA REV 3.1 ALLOWS SCMITT TRIGGER INPUT WITH DK8-EP DEV 13 AND CLOCKED A/D WITH DK8-EP DEV 17\r | |
102 | / 12-JUL-85 HA REV 4.0 EVERYTHING CONFUSED\r | |
103 | / 20-AUG-85 HA REV 4.1 REMOVES BUG IN TRIGG. TIME PICKUP ROUTINE\r | |
104 | /\r | |
105 | \f/\r | |
106 | CL1DEV=13*10 / FIRST DK8-EP\r | |
107 | CL2DEV=17*10 / SECOND DK8-EP\r | |
108 | /\r | |
109 | MQL=7421\r | |
110 | MQA=7501 / WE USE EAE MODE B\r | |
111 | ACL=7701\r | |
112 | SWP=7521\r | |
113 | CAM=7621\r | |
114 | SWAB=7431\r | |
115 | DAD=7443\r | |
116 | DST=7445\r | |
117 | DLD=DAD!CAM\r | |
118 | DDZ=DST!CAM\r | |
119 | DVI=7407\r | |
120 | DPIC=7573\r | |
121 | DPSZ=7451\r | |
122 | IFNSW 1 <\r | |
123 | EXTERN #CLINT\r | |
124 | CLINT= #CLINT\r | |
125 | IFSW 4 < BAD SWITCH /1/4 >\r | |
126 | >\r | |
127 | IFSW 1 <\r | |
128 | EXTERN #CLIN1\r | |
129 | CLINT= #CLIN1\r | |
130 | EXTERN #CLINT\r | |
131 | >\r | |
132 | CSTAT=157 /CLOCK ROUTINE PUTS CLSA BITS IN HERE\r | |
133 | ENTRY STAT1 /ALLOW FORTRAN ACCESS TO THES\r | |
134 | ENTRY STAT2 /LOCATIONS\r | |
135 | COMMZ #PAGE0\r | |
136 | ORG 2\r | |
137 | PBUFF, 0 /PNTR TO CURRENT BUFFER\r | |
138 | CURSTT, 0 /PNTR TO CURRENT STATUS WORD\r | |
139 | NXTSTT, 0 /PNTR TO NEXT STATUS WORD\r | |
140 | CURBUF, 0;0 /START OF CURRENT BUFFER PNTR\r | |
141 | NXTBUF, 0;0 /START OF NEXT BUFFER PNTR\r | |
142 | /STATUS WORDS, VALUES\r | |
143 | STAT1, F 0.25 /0.25, 0.5, & 1.0 INDICATE\r | |
144 | STAT2, F 0.25 /STATUS WORD IS NOT FILLED,\r | |
145 | /FILLED, AND OVERFLOWED\r | |
146 | /STATUS WORD: F 0.25 = 7777;2000;0000 NOT FILLED\r | |
147 | / F 0.5 = 0000;2000;0000 FILLED\r | |
148 | / F 1.0 = 0001;2000;0000 OVERFLOWED\r | |
149 | /\r | |
150 | IFSW 8 <\r | |
151 | ADSK=6534\r | |
152 | ADRB=6533\r | |
153 | ADST=6532\r | |
154 | ADLM=6531\r | |
155 | ADLE=6536\r | |
156 | ADCL=6530\r | |
157 | ADRS=6537\r | |
158 | ADSE=6535\r | |
159 | CLED=6134\r | |
160 | CLAB=6003\r | |
161 | CLBA=6006 / DO NOT FORGET TO INSERT THE DEVICE CODE\r | |
162 | CLZE=6000\r | |
163 | >\r | |
164 | IFNSW 8 <\r | |
165 | ESF=4\r | |
166 | LINC=6141\r | |
167 | PDP=2\r | |
168 | SAM=100\r | |
169 | CLEN=6134\r | |
170 | >\r | |
171 | \r | |
172 | \r | |
173 | \f FIELD1 FSMPLE\r | |
174 | 0 /INTERRUPT TIME A/D SAMPLER\r | |
175 | ADDR MQAC /SAVE AC AND MQ --> MQAC\r | |
176 | ORG .-2; DST; ORG .+1\r | |
177 | ADDR CLKOVR / CLEAR OVERFLOW COUNTER FOR THE SCHMITT TRIGGER SERVICE ROUTINE\r | |
178 | ORG .-2; DDZ; ORG .+1\r | |
179 | IFSW 4 < / IF TRIGGER INPUT THEN WE CLEAR THE CLOCK COUNTER\r | |
180 | CLAB CL1DEV\r | |
181 | >\r | |
182 | IFNSW 4 < NOP > / HERE TO INSERT A WORD TO GET THE SAME WORD COUNT FOR BOTH PROGRAM VERSIONS\r | |
183 | TAD NCHANL+2 /NUMBER OF CHANNELS\r | |
184 | DCA NCHANL+1 /INTO COUNTER\r | |
185 | JMS% ITSTVL+1 /TEST VALID FOR THE FIRST SAMPLE\r | |
186 | JMS INVALID /AND DECLARE NOT VALID\r | |
187 | WAITSP,\r | |
188 | IFNSW 8<\r | |
189 | JMS LNCSAM /INITIATE SAMPLE\r | |
190 | NEXTCH, ISZ SAMINS /UPDATE SAM INST FOR NXT CHAN\r | |
191 | JMS LNCSAM\r | |
192 | TAD SAMTMP\r | |
193 | >\r | |
194 | IFSW 8 <\r | |
195 | ADSK / WAIT FOR COMPLETION OF CONVERSION\r | |
196 | JMP .-1\r | |
197 | ADRB /READ SAMPLE\r | |
198 | JMS PUTSAM / INSERT INTO THE OUTPUT BUFFER AND TEST IF WORK DONE\r | |
199 | JMP MORESM / SKIP TO MORESM\r | |
200 | /\r | |
201 | /\r | |
202 | SKIPSM,/ SKIP ONE A/D SAMPLE\r | |
203 | JMS UPDCNT / INCREMENT THE TOTAL SAMPLE COUNTER (ALL CHNLS+STRIGS)*SAMRAT\r | |
204 | ADRS / LOAD MUX REGISTER --> AC\r | |
205 | IAC / AND INCREMENT- WE SKIPP THIS CHANNELS\r | |
206 | ADLM / BUMP BACK INTO THE A/D MUX REGISTER\r | |
207 | /\r | |
208 | MORESM,/\r | |
209 | ISZ NCHANL+1 / ANY MORE CHANNELS TO SAMPLE?\r | |
210 | SKP / START THE NEXT CONVERSION IF THERE IS ANY REMAINING\r | |
211 | JMP NOTMOR / NOTHING MORE TO A/D SAMPLE\r | |
212 | JMS% ITSTVL+1 /HERE ONLY IF SOME MORE A/D TO SAMPLE!\r | |
213 | JMP SKIPSM / SKIP THE NEXT SAMPLE, RETURNS TO MORESM !!\r | |
214 | ADST / AND START THE NEXT CONVERSION - AUTO INCREMENT MODE!\r | |
215 | >\r | |
216 | JMS INCPTR / INCREMENT BUFFER POINTER\r | |
217 | JMP WAITSP / AND TAKE THE NEXT SAMPLE\r | |
218 | NOTMOR,/\r | |
219 | TAD CSTART+2 /STARTING CHANNEL\r | |
220 | IFSW 8 <\r | |
221 | ADLM / ELSE RESET MUX REGISTER\r | |
222 | >\r | |
223 | IFNSW 8 <\r | |
224 | DCA SAMINS\r | |
225 | JMS LNCSAM /SET CHANNEL TO START IN CASE\r | |
226 | /CLOCK INITIATED\r | |
227 | >\r | |
228 | /\r | |
229 | / HERE WE INSERT THE STRIGG TIME WORDS\r | |
230 | /\r | |
231 | CLA\r | |
232 | TAD IWSTRI+1 /HOLDS ADDR \r | |
233 | DCA IWSTRI / HOLDS POINTER TO THE TIME WORD\r | |
234 | TAD WSTRC / -(NUMBER OF TRIGG INPUTS+1) --> AC\r | |
235 | DCA IWSTRC / HOLDS THE COUNTER\r | |
236 | IWLOP1,\r | |
237 | JMS INCPTR / INCREMENT BUFFER POINTER\r | |
238 | ISZ IWSTRC / IF ANY MORE TRIGG INPUTS\r | |
239 | SKP / THEN SKIP\r | |
240 | JMP IWLOP2 / ELSE RESET AC AND MQ AT IWLOP2\r | |
241 | JMS% ITSTVL+1 /TEST FOR VALID SAMPLE (INVALID MEANS CRAZY PROGRAMMER!)\r | |
242 | JMS INVALID / SET THE INVALID FLAG\r | |
243 | TAD% IWSTRI / TRIGG TIME WORD --> AC\r | |
244 | JMS PUTSAM /INSERT TIME WORD INTO THE OUTPUT BUFFER, CLEARS AC\r | |
245 | DCA% IWSTRI / CLEAR THE TIME WORDS\r | |
246 | ISZ IWSTRI / INCREMENT POINTER TO THE TIME WORDS\r | |
247 | JMP IWLOP1 / AND LOOK FOR THE NEXT TRIGG WORDS TO PROCESS\r | |
248 | IWLOP2,\r | |
249 | ADDR MQAC /RESTORE AC AND MQ\r | |
250 | ORG .-2; DLD; ORG .+1\r | |
251 | JMP% FSMPLE /DONE FOR THIS TIC\r | |
252 | \f/\r | |
253 | / SAMPLING FINISHED\r | |
254 | /\r | |
255 | SAMDON,/\r | |
256 | JMS INCPTR / INCREMENT BUFFER POINTER\r | |
257 | CLA / CLEAR THE STATUS WORD\r | |
258 | DCAZ% CURSTT /SET STATUS OF CURRENT FULL\r | |
259 | SAMXIT,/ STOP THE SAMPLING, DISABLE CLOCK INTERRUPT\r | |
260 | ADDR CLINT\r | |
261 | ORG .-2; DDZ; ORG .+1\r | |
262 | IFSW 4 <\r | |
263 | ADDR #CLINT\r | |
264 | ORG .-2; DDZ; ORG .+1 > / DISABLE CLOCK EXTENSION ROUTINE\r | |
265 | ADDR MQAC /RESTORE AC AND MQ\r | |
266 | ORG .-2; DLD; ORG .+1\r | |
267 | JMP% FSMPLE\r | |
268 | /\r | |
269 | /\r | |
270 | / HERE WE COUNT THE WHOLE NUMBER OF SAMPLES TOKEN\r | |
271 | /\r | |
272 | UPDCNT, 0\r | |
273 | ADDR NPOINT+1 / NPOINT IS A 3 WORD FPP BASE PAGE VARIABLE, TAKE CARE\r | |
274 | ORG .-2; DLD; ORG .+1\r | |
275 | DPIC / INCREMENT DOUBLE PREC. COUNTER TO TEST FOR MORE SAMPLES\r | |
276 | ADDR NPOINT+1 / BUMP INTO COUNTER\r | |
277 | ORG .-2; DST; ORG .+1\r | |
278 | DPSZ / SKIP IF WORK DONE\r | |
279 | JMP% UPDCNT\r | |
280 | JMP SAMDON / SET STATUS OF CURRENT BUFFER FULL: SAMPLE DONE\r | |
281 | /\r | |
282 | /\r | |
283 | PUTSAM, 0 / INSERTS AC INTO OUTPUT BUFFER, ON RETURNS CLEARS AC!\r | |
284 | ISZ AVALID / VALID INPUT?\r | |
285 | SKP / AVALID IS SET TO -1 FOR INVALID SAMPLE, SO SKIP\r | |
286 | JMP PUTSA1 / NON VALID, RETURN WITHOUT ACTION\r | |
287 | BUFCDF, HLT /REPLACED BY CDF TO BUFFER\r | |
288 | DCAZ% PBUFF\r | |
289 | CDF 10 / USED FOR POINTER PVALID!\r | |
290 | CLA CMA / -1 --> AC\r | |
291 | DCA PUTFLG / DON'T FORGET TO INCREMENT THE BUFFER POINTER -1 --> PUTFLG\r | |
292 | DCA AVALID / CLEAR VALID FLAG FOR NEXT CALL\r | |
293 | PUTSA1,/\r | |
294 | JMS UPDCNT / UPDATE THE TOTAL SAMPLE COUNT\r | |
295 | CLA / CLEAR AC FOR RETURN\r | |
296 | JMP% PUTSAM\r | |
297 | /\r | |
298 | /\r | |
299 | INVALID,0 / SET THE ACTUAL SAMPLE INVALID\r | |
300 | CLA CMA / -1 --> AC\r | |
301 | DCA AVALID\r | |
302 | JMP% INVALID / ON RETURN AC=0\r | |
303 | PUTFLG, 0 / SET TO -1 IF WE HAVE TO INCREMENT THE BUFFER POINTER\r | |
304 | \r | |
305 | AVALID, / / ACTUAL VALID FLAG\r | |
306 | ITSTVL, ADDR TSTVLD / TEST FOR VALID READ \r | |
307 | IWSTRC, 0 / NEGATIVE NUMBER OF STRIGS EVENT CHANNELS -1 (FOR COUNTER)\r | |
308 | WSTRC, 0 / -(NUMBER OF STRIG INPUTS+1) PLACED HERE BY THRUPT\r | |
309 | IWSTRI, ADDR TIMWRD / POINTER TO THESE TIME WORDS\r | |
310 | NCHANL, 0;0;0\r | |
311 | SAMCNT,\r | |
312 | CSTART, 0;0;0\r | |
313 | \f/\r | |
314 | L10, 10\r | |
315 | /\r | |
316 | INCPTR, 0\r | |
317 | CLA / CLEAR AC\r | |
318 | ISZ PUTFLG / IF WE HAVE TO INCREMENT THE BUFFER POINTER,\r | |
319 | JMP% INCPTR / THEN SKIP ELSE RETURN\r | |
320 | ISZZ PBUFF /ELSE INCR PNTR & SKIP IF WE\r | |
321 | JMP FLDOK /CROSSED A FIELD BOUNDARY\r | |
322 | TAD BUFCDF /UPDATE FIELD\r | |
323 | TAD L10\r | |
324 | DCA BUFCDF\r | |
325 | FLDOK,\r | |
326 | ISZ SAMCNT /INCR BUFFER CNTR & SKIP IF\r | |
327 | JMP% INCPTR /FILLED. BUFFER OK\r | |
328 | DCAZ% CURSTT /SET STATUS WORD TO 0.5\r | |
329 | /FOR BUFFER FILLED\r | |
330 | TADZ NXTSTT /SWAP STATUS WORD PNTRS\r | |
331 | DCA TMP / NXTSTT<=> CURSTT\r | |
332 | TADZ CURSTT\r | |
333 | DCAZ NXTSTT\r | |
334 | TAD TMP\r | |
335 | DCAZ CURSTT\r | |
336 | TADZ% CURSTT /HAS USER RELEASED THIS BUFFER\r | |
337 | SMA CLA\r | |
338 | JMP% ITOOFST+1 /NO, SAMPLING TOO FAST!\r | |
339 | JMS% ISWPBFR+1 / SWAP BUFFER\r | |
340 | JMP% INCPTR / BUFFER POINTER UPDATED\r | |
341 | ISWPBF, ADDR SWPBFR\r | |
342 | /\r | |
343 | /\r | |
344 | TMP,\r | |
345 | ITOOFS, ADDR TOOFST\r | |
346 | /\r | |
347 | \f ORG FSMPLE+200\r | |
348 | /\r | |
349 | / HERE WE SWAP THE INPUT BUFFERS POINTERS\r | |
350 | /\r | |
351 | SWPBFR, 0\r | |
352 | /\r | |
353 | / SWAP BUFFER POINTERS\r | |
354 | /\r | |
355 | TADZ NXTBUF / NXTBUF <=> CURBUF\r | |
356 | DCA% IBUFCDF / BUFCDF, PBUFF = NXTBUF\r | |
357 | TADZ NXTBUF+1\r | |
358 | DCAZ PBUFF\r | |
359 | TADZ CURBUF\r | |
360 | DCAZ NXTBUF\r | |
361 | TADZ CURBUF+1\r | |
362 | DCAZ NXTBUF+1\r | |
363 | TAD% IBUFCDF\r | |
364 | DCAZ CURBUF\r | |
365 | TADZ PBUFF\r | |
366 | DCAZ CURBUF+1\r | |
367 | TAD% IBUFSIZ /RESET BUFFER COUNTER\r | |
368 | DCA% ISAMCNT\r | |
369 | JMP% SWPBFR\r | |
370 | IBUFCDF=.+1\r | |
371 | ADDR BUFCDF\r | |
372 | IBUFSIZ=.+1\r | |
373 | ADDR BUFSIZ\r | |
374 | ISAMCNT=.+1\r | |
375 | ADDR SAMCNT\r | |
376 | /\r | |
377 | / SAMPLING RATE TOO FAST\r | |
378 | /\r | |
379 | TOOFST,/\r | |
380 | CLA IAC /SET STATUS WORD TO 1.0\r | |
381 | DCAZ% CURSTT\r | |
382 | IAC\r | |
383 | DCAZ% NXTSTT\r | |
384 | JMP% ISAMXIT+1 / DISABLES CLOCK INTERRUPTS\r | |
385 | ISAMXIT,/\r | |
386 | ADDR SAMXIT\r | |
387 | IFNSW 8 <\r | |
388 | LNCSAM, 0 /LINC SAM SUBROUTINE\r | |
389 | LINC\r | |
390 | SAMINS, SAM 0 /SAMPLE AND SELECT NEXT CHANNEL\r | |
391 | PDP\r | |
392 | DCA SAMTMP /SAVE IT\r | |
393 | JMP% LNCSAM\r | |
394 | >\r | |
395 | \f/\r | |
396 | / INTERRUPT TIME SCHMITT TRIGGER INPUT HANDLER\r | |
397 | /\r | |
398 | FIREED, 0 / ON ENTRY AC IS CLEARED BY CLOCK RTN\r | |
399 | CLA CLL CMA RTL / -3 --> AC\r | |
400 | ADDR MQSAVE / SECOND: STRIG COUNTER, FIRST: SAVES MQ\r | |
401 | ORG .-2; DST; ORG .+1\r | |
402 | CLA\r | |
403 | TADZ CSTAT / LOOK AHEAD FOR CLOCK OVERFLOW\r | |
404 | RAL CLL / LINKS GOES ON HERE IF CLOCK OVERFLOWED\r | |
405 | SNA CLA / AND IF THERE IS NO STRIGG THEN JUMP TO CLOCK OVERFLOW HANDLING\r | |
406 | JMP CLKINT\r | |
407 | /\r | |
408 | CAM / MQ HOLDS # OF STRIGG FIRED, FIRST IS #0\r | |
409 | TADZ CSTAT / CLSA BITS OF FIRST CLOCK --> AC\r | |
410 | TRILOP, RAR / STRIG BITS --> LINK\r | |
411 | SWP / NOW AC HOLDS # OF STRIGG \r | |
412 | SZL / SKIP IF STRIGG DID NOT FIRE\r | |
413 | JMS TRIGGD / ELSE SET THE TRIGGER TIME WORD\r | |
414 | IAC / INCREMENT FOR NEXT STRIGG\r | |
415 | SWP / # OF STRIGG --> MQ, CLSA BIT MASK --> AC\r | |
416 | ISZ MQSAVE+1 / SOME MORE STRIGS?\r | |
417 | JMP TRILOP / YES, FETCH THE NEXT EVENT\r | |
418 | CAM / STRIGS DONE, TEST FOR CLOCK OVERFLOW\r | |
419 | TADZ CSTAT / CLSA BITS --> AC\r | |
420 | RAL / LINK GOES ON IF CLOCK OVERFLOWED\r | |
421 | SZL / IF NO CLOCK OVERFLOW THEN RETURN\r | |
422 | CLKINT, ISZ CLKOVR+1 / ELSE INCREMENT THE CLOCK OVERFLOW COUNTER (EAE HIGH ORDER WORD)\r | |
423 | NOP / PROTECT ISZ\r | |
424 | ADDR MQSAVE / RESTORE MQ, CLEAR AC! TRICKSY!\r | |
425 | ORG .-2; DLD; ORG .+1\r | |
426 | CLA\r | |
427 | JMP% FIREED / RETURN TO CLOCK ROUTINE\r | |
428 | /\r | |
429 | MQSAVE, 0;0 / SECOND WORD IS USED FOR STRIGG COUNTER, FIRST SAVES MQ ON ENTRY\r | |
430 | CLKOVR, 0;0 / HERE IS THE CLOCK OVERFLOW COUNTER, (SINGLE PRECISION, SECOND WORD HOLDS CLOCK COUNTER)\r | |
431 | / CLKOVR IS CLEARED AT EACH A/D INTERRUPT. WE ALSO CLEAR THE CLOCK COUNT REGISTER.\r | |
432 | / SINCE A/D CLOCK AS HIGHER INTERRUPT FREQUENCY THAN TRIGG CLOCK\r | |
433 | / THE TRIGGER CLOCK OVERFLOW SHOULD BE ZERO ALL THE TIME!\r | |
434 | / BUT WHAT'S SHURE IN A COMPUTER'S WORLD NOWADAYS????\r | |
435 | /\r | |
436 | MQAC, 0;0 / HERE FSMPLE AND TRIGGED ROUTINE SAVE MQ&AC ON ENTRY\r | |
437 | ITIMWR, ADDR TIMWRD / POINTER TO STRIGG TIME WORDS\r | |
438 | TIMWRD, 0;0;0 / TIME WORDS FOR 3 SCHMITT TRIGGER CHANNELS\r | |
439 | TIMBIT, 0;0 / THRUPT INSERTS CLOCKRATE/SAMRAT/12\r | |
440 | M15, -15 / DEC 13: USED TO TEST TIME SLICE OVERFLOW\r | |
441 | IBITWR, TAD BITWRD / POINTER TO LOAD THE CORRECT BIT MASK FOR EACH TIME SLICE\r | |
442 | 7777 / TOO MUCH EVENTS\r | |
443 | BITWRD, 4000\r | |
444 | 2000\r | |
445 | 1000\r | |
446 | 0400\r | |
447 | 0200\r | |
448 | 0100\r | |
449 | 0040\r | |
450 | 0020\r | |
451 | 0010\r | |
452 | 0004\r | |
453 | 0002\r | |
454 | 0001\r | |
455 | 0001 / HERE FOR SOME VERY LATE EVENTS\r | |
456 | /\r | |
457 | / HERE WE COMPUTE THE STRIGG TIME WORD\r | |
458 | /\r | |
459 | TRIGGD, 0 / ON ENTRY AC HOLDS NUMBER OF SCHMITT TRIGGER FIRED\r | |
460 | ADDR MQAC / SAVE AC AND MQ\r | |
461 | ORG .-2; DST; ORG .+1\r | |
462 | TAD ITIMWR+1 / COMPUTE CORRECT ADDRESS OF TIME WORD\r | |
463 | DCA ITIMWR\r | |
464 | CLBA!CL1DEV / LOAD CLOCK BUFFER --> AC\r | |
465 | MQL / AND INTO MQ, CLEAR AC\r | |
466 | ADDR CLKOVR /AND ADD THE CLOCK OVERFLOW COUNTER REQUIRES MODE BITS OF CLOCK SET TO 10\r | |
467 | ORG .-2; DAD; ORG .+1\r | |
468 | ADDR TIMBIT / TIMBIT= RATE*12/SAMRAT HERE WE COMPUTE THE TIME SLICES\r | |
469 | ORG .-2 ; DVI ; ORG .+1\r | |
470 | ACL / MQ HOLDS QUOTIENT SO: TIME SLICE -> MQ -> AC\r | |
471 | TAD M15 / IF THERE ARE ALLREADY 13 SLICES PASSED \r | |
472 | SMA SZA CLA / THEN STOP, ELSE GOON\r | |
473 | JMS OVRTRI / STRIGG INPUT OVERFLOWED\r | |
474 | ACL / TIME SLICE --> AC\r | |
475 | TAD IBITWR / HERE WE DO SOME COMPUTATIONS \r | |
476 | DCA .+3 / IN ORDER TO FETCH THE \r | |
477 | TAD% ITIMWR / CORRECT BIT AND TIMEWORD.\r | |
478 | MQL / PREP FOR .OR. TIMEWORD AND SLICE BIT\r | |
479 | TAD BITWRD / IS REPLACED BY CORRECT TAD BITWRD+SLICE\r | |
480 | MQA / OR THE TIMEWORD AND THE BIT\r | |
481 | DCA% ITIMWR / AND PUSH BACK\r | |
482 | ADDR MQAC / RESET AC AND MQ\r | |
483 | ORG .-2; DLD; ORG .+1\r | |
484 | JMP% TRIGGD / AND RETURN!\r | |
485 | /\r | |
486 | OVRTRI, 0 / HANDLES STRIGG OVERFLOWES\r | |
487 | HLT\r | |
488 | / CLA CMA / -1 --> AC\r | |
489 | MQL / -1 --> MQ\r | |
490 | JMP% OVRTRI /\r | |
491 | \f ORG FSMPLE+400\r | |
492 | ADSETU, 0 /SET UP ROUTINE\r | |
493 | SWAB / SWITCH EAE TO MODE B (USED FOR HARD FPP12)\r | |
494 | TADZ CURBUF /GET FIELD OF BUFFER\r | |
495 | JMS MAKCDF /MAKE 3 BITS FLD INTO CDF\r | |
496 | DCAZ CURBUF\r | |
497 | TADZ CURBUF\r | |
498 | DCA% ABUFCDF+1 /SAVE IN SAMPLER CODE\r | |
499 | TADZ CURBUF+1 /SET SAMPLER BUFFER POINTER\r | |
500 | DCAZ PBUFF\r | |
501 | TADZ NXTBUF /GET FIELD OF ALTERNATE BUFFER\r | |
502 | JMS MAKCDF\r | |
503 | DCAZ NXTBUF\r | |
504 | TAD BUFSIZ /SET INITIAL COUNT\r | |
505 | DCA% ASAMCNT+1\r | |
506 | TAD ISTAT1+1\r | |
507 | DCAZ CURSTT / INSERT ADR. OF ACTUAL STATUS WORD\r | |
508 | TAD ISTAT2+1\r | |
509 | DCAZ NXTSTT / AND THE ADR. OF NEXT STATUS WORD\r | |
510 | ADDR NPOINT+1 / SINCE FPP AND EAE HAVE DIFFERENT HIGH ORDER AND LOW ORDER\r | |
511 | ORG .-2; DLD; ORG .+1 / WORD ORDER IN MEMORY\r | |
512 | SWP\r | |
513 | ADDR NPOINT+1 / WE HAVE TO CHANGE IT\r | |
514 | ORG .-2; DST; ORG .+1\r | |
515 | ADDR TIMWRD\r | |
516 | ORG .-2; DDZ; ORG .+1 / CLEAR THE STRIGG TIME WORDS\r | |
517 | ADDR TIMWRD+1\r | |
518 | ORG .-2; DDZ; ORG .+1\r | |
519 | ADDR CLKOVR / CLEAR CLOCK OVERFLOW COUNTER\r | |
520 | ORG .-2; DDZ; ORG .+1\r | |
521 | IFSW 8 <\r | |
522 | CLA CMA /STOP THE CLOCK\r | |
523 | IFSW 1 <\r | |
524 | CLZE CL2DEV\r | |
525 | IFSW 4 <\r | |
526 | CLZE CL1DEV > >\r | |
527 | IFNSW 1 <\r | |
528 | CLZE!CL1DEV >\r | |
529 | CLA\r | |
530 | ADCL /CLEAR AD LOGIC JUST IN CASE\r | |
531 | TAD L300 /SET AD ENABLE BITS, EXT START, AUTO INCREMENT\r | |
532 | ADLE\r | |
533 | TAD% JCSTART+1 /STARTING CHANNEL NUMBER\r | |
534 | ADLM\r | |
535 | >\r | |
536 | IFNSW 8 <\r | |
537 | CLEN /STOP THE CLOCK\r | |
538 | TAD% JCSTART+1 /SET UP INITIAL SAM INSTRUCTION\r | |
539 | TAD L100\r | |
540 | DCA% JCSTART+1\r | |
541 | TAD% JCSTART+1\r | |
542 | DCA SAMINS\r | |
543 | TAD L100 /SET FAST SAM BIT\r | |
544 | IOF /TURN OFF INTERRUPTS IN LINC MODE\r | |
545 | LINC /ENTER LINC MODE\r | |
546 | ESF\r | |
547 | PDP\r | |
548 | JMS LNCSAM\r | |
549 | ION\r | |
550 | ADDR MQAC / SAVE MQ\r | |
551 | ORG .-2; DST; ORG .+1\r | |
552 | ADDR TIMWRD\r | |
553 | ORG .-2; DDZ; ORG .+1\r | |
554 | DCA TIMWRD+1 / CLEAR STRIGG TIME WORDS\r | |
555 | ADDR CLKOVR / AND CLEAR CLOCK OVERFLOW COUNTER\r | |
556 | ORG .-2; DDZ; ORG .+1\r | |
557 | >\r | |
558 | CIF CDF\r | |
559 | JMP% ADSETU\r | |
560 | /\r | |
561 | ISTAT1, ADDR STAT1\r | |
562 | ISTAT2, ADDR STAT2\r | |
563 | JCSTAR, ADDR CSTART+2\r | |
564 | ASAMCN, ADDR SAMCNT\r | |
565 | ABUFCD, ADDR BUFCDF\r | |
566 | \f/\r | |
567 | / MAKE THREE BITS OF AC9-11 INTO CDF\r | |
568 | /\r | |
569 | / COMPUTE THE NUMBER OF BITS SET IN THE TRIGGER TIME WORD\r | |
570 | /\r | |
571 | CMPBIT, 0 / ON ENTRY BITSCN HOLDS THE WORD TO SCAN\r | |
572 | CLA\r | |
573 | TAD M14 / 12 BITS TO SCAN, PREP THE COUNTER\r | |
574 | DCA BITLCN\r | |
575 | DCA BITCNT / CLEAR BIT COUNTER\r | |
576 | TAD BITSCN / TRIG TIME WORD --> AC\r | |
577 | BITLOP, RAL / SHIFT BIT INTO THE LINK\r | |
578 | SZL\r | |
579 | ISZ BITCNT\r | |
580 | ISZ BITLCN\r | |
581 | JMP BITLOP\r | |
582 | CDF CIF 0 / HOME TO FPP \r | |
583 | JMP% CMPBIT / FROM TRAP4\r | |
584 | /\r | |
585 | BITSCN, 0 / ON ENTRY: HOLDS THE WORD TO SCAN\r | |
586 | BITCNT, 0 / ON RETURN: HOLDS NUMBER OF BUTS SET\r | |
587 | BITLCN, 0 / LOOP COUNTER, ABOVE TWO LOCATIONS ARE ALSO USED AS INDEX REGS 0 AND 1\r | |
588 | M14, -14 / DEC -12\r | |
589 | /\r | |
590 | /\r | |
591 | MAKCDF, 0\r | |
592 | AND L7\r | |
593 | CLL RTL\r | |
594 | BASEX, RAL\r | |
595 | TAD CDF0\r | |
596 | JMP% MAKCDF\r | |
597 | /\r | |
598 | NPOINT, 0;0;0\r | |
599 | CDF0, CDF\r | |
600 | 0;0\r | |
601 | L7, 7\r | |
602 | BUFSIZ, -377\r | |
603 | IFSW 8 <\r | |
604 | L300, 300\r | |
605 | >\r | |
606 | IFNSW 8 <\r | |
607 | L100, 100\r | |
608 | >\r | |
609 | /\r | |
610 | TEMP, 0;0;0\r | |
611 | ORG 10*3+BASEX\r | |
612 | 0\r | |
613 | JA NAME+3\r | |
614 | 0\r | |
615 | SAMRTN, JA .\r | |
616 | FP25, F 0.25\r | |
617 | XVALID, F 114. / LENGTH OF READ VALID VECTOR (MUST BE MULTIPLE OF 3)\r | |
618 | VALID, ORG .+162 / AND HERE IS THE BUFFER SPACE\r | |
619 | /\r | |
620 | / ROUTINE TO TEST FOR VALID SAMPLE ( PACKED DATA)\r | |
621 | /\r | |
622 | PVALID, ORG .+2 /POINTER TO ACTUAL POSITION INSIDE VALID VECTOR\r | |
623 | MVALID, ORG .+2 /VALID VECTOR: LAST ADDRESS USED\r | |
624 | NVALID, ADDR VALID-1 /HOLDS ADR. OF FIRST WORD OF VALID VECTOR -1\r | |
625 | /\r | |
626 | TSTVLD, ORG .+1 / JMS TSTVLD\r | |
627 | / SAMPLE NON VALID RETURN\r | |
628 | / SAMPLE VALID RETURN\r | |
629 | / ON RETURN AC=0\r | |
630 | ISZ PVALID+1 / GET THE NEXT LOC. OF VALID VECTOR\r | |
631 | CLA\r | |
632 | TAD PVALID+1\r | |
633 | TAD MVALID+1 / IF WE REACHED THE END OF THE VECTOR THEN\r | |
634 | SPA CLA / WE RESET TO THE START ELSE\r | |
635 | JMP L1 / CONTINUE AT L1\r | |
636 | TAD NVALID+1\r | |
637 | IAC\r | |
638 | DCA PVALID+1\r | |
639 | L1, TAD% PVALID+1 / READ VALID FLAG --> AC\r | |
640 | SNA CLA / IF THIS READ WAS VALID THEN WE INCREMENT THE BUFFER POINTER ELSE\r | |
641 | JMP% TSTVLD / WE TAKE THE NEXT SAMPLE INTO THIS LOCATION\r | |
642 | ISZ TSTVLD / TAKE THE NORMAL RETURN FOR VALID SAMPLE \r | |
643 | JMP% TSTVLD\r | |
644 | \f EXTERN #ARGER\r | |
645 | SECT THRUPT\r | |
646 | BASE 0\r | |
647 | STARTD\r | |
648 | FLDA 30 /GET RETURN ADDR\r | |
649 | FSTA SAMRTN\r | |
650 | STARTF\r | |
651 | FLDA 0\r | |
652 | FSTA# TRETU\r | |
653 | STARTD\r | |
654 | FLDA% 0 / COMPUTE THE NUMBER OF PARAMETERS\r | |
655 | FSUB 0\r | |
656 | FSUB# TWO\r | |
657 | SETX XR0\r | |
658 | LDX 1,X1\r | |
659 | ALN X1 / DIVIDE BY TWO\r | |
660 | FNEG\r | |
661 | ATX X2 / NEGATIVE NUMBER OF ARGUMENTS --> X2\r | |
662 | FLDA 0 /GET ARG POINTER\r | |
663 | BASE BASEX\r | |
664 | SETB BASEX\r | |
665 | FSTA TEMP /SAVE ARG POINTER\r | |
666 | LDX 4700,0\r | |
667 | FCLA\r | |
668 | FSTA CLINT /STOP ANY SAMPLING NOW!\r | |
669 | LDX 4701,0\r | |
670 | IFSW 4 <\r | |
671 | FSTA #CLINT > / DISABLE STRIGG EVENTS\r | |
672 | LDX 4702,0\r | |
673 | FLDA% TEMP,1 /GET BUFF1 ADDRESS\r | |
674 | FSTA CURBUF\r | |
675 | LDX 1,X0\r | |
676 | JXN TH0,X2+\r | |
677 | TRAP4 #ARGER\r | |
678 | TH0,\r | |
679 | FLDA% TEMP,1+ /GET BUFF2 ADDR\r | |
680 | FSTA NXTBUF\r | |
681 | LDX 2,X0\r | |
682 | LDX 4703,0\r | |
683 | JXN TH1,X2+ / IF THERE ARE ONLY TWO PARAMETERS THEN\r | |
684 | TRAP4 #ARGER / ARGUMENT ERROR # 2\r | |
685 | TH1,\r | |
686 | FLDA% TEMP,1+ /ADDR OF PARAMETERS\r | |
687 | FSTA PARAM / SAVE ADDR. OF PARAMETERS\r | |
688 | STARTF\r | |
689 | FCLA\r | |
690 | FSTA PACK / CLEAR PACK & NTRIGG IF THERE ARE ONLY 3 PARAMS\r | |
691 | FSTA NTRIG / DISABLE TRIGG EVENTS\r | |
692 | FSTA TIMRAT\r | |
693 | STARTD\r | |
694 | JXN TH2,X2+ / IF THERE ARE 4 OR MORE PARAMETERS THEN FETCH THE LAST BUT ONE\r | |
695 | JA TH3 / ELSE THERE ARE 3 ARGUMENTS \r | |
696 | TH2, FLDA% TEMP,X1+ / ADDR OF FOURTH ARGUMENT --> PACK\r | |
697 | FSTA PACK\r | |
698 | JXN TH6,X2+ / IF THERE ARE 5 PARAMETERS GOTO TH5\r | |
699 | JA TH3 / ONLY FOUR PARAMETERS\r | |
700 | TH6, FLDA% TEMP,X1+\r | |
701 | FSTA NTRIG / ADDR OF STRIG COUNT --> WSTRC\r | |
702 | JXN TH10,X2+ / IF THERE ARE 5 PARAMETERS THEN THERE MUST BE A SIXTH ONE\r | |
703 | LDX 4,X0 / FIVE PARAMETERS ARE INVALID, ARGUMENT ERR 5\r | |
704 | TRAP4 #ARGER\r | |
705 | TH10, FLDA% TEMP,X1+\r | |
706 | FSTA TIMRAT / INSERT RATE/SAMRAT/12 --> TIMBIT\r | |
707 | TH3,/\r | |
708 | FLDA PARAM / RESTORE ADR. OF THIRD ARGUMENT\r | |
709 | FSTA TEMP\r | |
710 | STARTF\r | |
711 | LDX 0,1\r | |
712 | FLDA% TEMP,1 /STARTING CHANNEL\r | |
713 | ALN 0\r | |
714 | FSTA CSTART\r | |
715 | FLDA% TEMP,1+ /# CHANNELS\r | |
716 | FSTA CHNLS\r | |
717 | FNEG\r | |
718 | ALN 0\r | |
719 | FSTA NCHANL\r | |
720 | FLDA% TEMP,1+ /NUMBER OF POINTS\r | |
721 | FNEG\r | |
722 | ALN 0\r | |
723 | FSTA NPOINT\r | |
724 | FLDA PACK\r | |
725 | JEQ TH4 / ONLY THREE PARAMETERS, CLEAR PCKSIG\r | |
726 | FLDA% TEMP,1+\r | |
727 | FNEG\r | |
728 | FSUB FL1\r | |
729 | ALN 0\r | |
730 | TH4, FSTA PCKSIG\r | |
731 | ATX X2\r | |
732 | /\r | |
733 | TBIN0, SETX VALID / PREPARE THE VALID VECTOR\r | |
734 | LDX 1,X0\r | |
735 | SETX XR0\r | |
736 | STARTD\r | |
737 | FLDA# NVALID / TAKE CARE, THESE LOCATION ARE IN BASE PAGE!\r | |
738 | FSTA# PVALID\r | |
739 | FNEG\r | |
740 | FADD PCKSIG+1\r | |
741 | FSTA# MVALID\r | |
742 | /\r | |
743 | FLDA PACK\r | |
744 | JEQ TH5\r | |
745 | FSTA TEMP\r | |
746 | LDX -1,X1 / X2 HOLDS PCKSIG !\r | |
747 | \r | |
748 | FLDA TBIN0\r | |
749 | FSTA TBIN1\r | |
750 | STARTF\r | |
751 | THL0, FLDA% TEMP,1+\r | |
752 | TBIN1, SETX VALID / XR POINTER ONTO VALID VECTOR\r | |
753 | ATX X0 / INSERT V. VALUE INTO THE VECTOR (WORD BY WORD)\r | |
754 | SETX TBIN1 / NOW WE INCREMENT THE POINTER ABOVE\r | |
755 | JXN .+2,X1+ / WITH THE X INCREMENT CMD AND\r | |
756 | SETX XR0 / RESET TO THE INDEX REGISTER SET\r | |
757 | JXN THL0,X2+ / AND NOW WE TEST IF THE WORK IS DONE\r | |
758 | \fTH5, STARTF / CLEAR ALL 36 BITS OF FAC SINCE\r | |
759 | FCLA / IF NTRIG.EQ.0 THEN WE DO NOT LOAD INTO THE EXPONENT\r | |
760 | STARTD\r | |
761 | FLDA NTRIG / PREPARE THE STRIGG EVENT INPUT \r | |
762 | JEQ TH7 / NOTHING DESIRED, SKIP TO TH7\r | |
763 | LDX 10,X0 / ERROR #10\r | |
764 | IFNSW 4 < / IF THERE IS NO HANDLER THEN\r | |
765 | JA TH9 > / WE ERROR OFF\r | |
766 | FSTA TEMP / PUT ADDR OF TRIGG COUNT --> TEMP\r | |
767 | STARTF\r | |
768 | FLDA% TEMP / # OF TRIGGER INPUTS --> FAC\r | |
769 | LDX 11,X0 / ERROR #11\r | |
770 | JAL TH9 / IF NO FIXING POSSIBLE THE ERROR OFF!\r | |
771 | JLT TH9 / IF TRIGGER NUMBER OUTSIDE RANGE 0 TO 3 THEN ERROR OFF\r | |
772 | FSUB FL3 / TEST FOR UPPER LIMIT\r | |
773 | LDX 12,X0 / ERROR #12\r | |
774 | JGT TH9\r | |
775 | FADD FL3\r | |
776 | TH7, STARTF / IF THERE ARE NO STRIGGS INPUT THEN WE COME HERE WITH FAC CLEARED! \r | |
777 | FADD FL1 / ADD 1 FOR THE COUNTER OF THE IR SERVICE ROUTINE\r | |
778 | FNEG / AND HERE WE COMPUTE THE COUNTER\r | |
779 | SETX WSTRC / AND BUMP INTO PDP/8 CODE\r | |
780 | ATX 0\r | |
781 | SETX XR0 / RESET INDEX REGIS POINTER\r | |
782 | STARTD / ADDR OF TIME RATIO --> TEMP\r | |
783 | FLDA TIMRAT / FETCH THE TIME RATIO\r | |
784 | JEQ TH12 / NO STRIG EVENTS DISIRED, SKIP\r | |
785 | FSTA TEMP\r | |
786 | STARTF\r | |
787 | FLDA% TEMP / TIMERATIO --> FAC\r | |
788 | FSTA TIMRAT / AND SAVE FOR SOMEBODY ELSE\r | |
789 | LDX 13,X0 / ERROR #13\r | |
790 | JLT TH9 / NEGATIVE PARAMETER IS NOT NICE\r | |
791 | LDX 14,X0 / ERROR #14\r | |
792 | JAL TH9 / WE HAVE TO FIX THE NUMBER\r | |
793 | JA TH11\r | |
794 | TH9,/ X0 HOLDS ERROR NUMBER (10 TO 13)\r | |
795 | TRAP4 #ARGERR / WE ERROR OFF\r | |
796 | /\r | |
797 | TH11, SETX TIMBIT / FIX THE NUMBER INTO 12 BITS\r | |
798 | ATX 0 / FOR EAE DVI INSTRUCTION\r | |
799 | SETX XR0\r | |
800 | /\r | |
801 | / INDEX REGISTERS (PBUFF) 1&2 ARE STATUS WORD PNTRS!\r | |
802 | /\r | |
803 | TH12, SETX PBUFF\r | |
804 | LDX 11,1 /INITIALIZE STATUS WORD PNTRS\r | |
805 | LDX 14,2\r | |
806 | FLDA FP25 /INITIALIZE STATUS WORDS\r | |
807 | FSTA STAT1 /TO INDICATE BUFFERS\r | |
808 | FSTA STAT2 /NOT FILLED\r | |
809 | TRAP4 ADSETU /SET UP AD STUFF\r | |
810 | FLDA NTRIG / HERE WE SET UP THE STRIGGE EVENT INPUT\r | |
811 | STARTD\r | |
812 | JEQ TH8 / IF NO TRIGG INPUTS THEN SKIP ELSE\r | |
813 | FLDA TRGADR /\r | |
814 | FSTA #CLINT / QUEUE THE STRIGG INTERRUPT SERVICE ROUTINE INTO THE CLOCK TERMINATION ROUTINE\r | |
815 | TH8,/\r | |
816 | FLDA SAMADR /SET UP SAMPLER INTRPT HNDLR\r | |
817 | FSTA CLINT\r | |
818 | STARTF\r | |
819 | JA SAMRTN /RETURN\r | |
820 | NAME, TEXT +THRUPT+\r | |
821 | SETX XR0\r | |
822 | SETB BASEX\r | |
823 | TRETU, F 0.\r | |
824 | SAMADR, ADDR FSMPLE\r | |
825 | TRGADR, ADDR FIREED / ADDR OF SCHMITT TRIGGER EVENT INTERRUPT SERVICE\r | |
826 | /\r | |
827 | XR0, 0\r | |
828 | XR1, 0 / HOLDS NUMBER OF ARGUMENTS\r | |
829 | XR2, 0\r | |
830 | XR3, 0\r | |
831 | X0= 0\r | |
832 | X1= X0+1\r | |
833 | X2= X1+1\r | |
834 | X3= X2+1\r | |
835 | ONE, 0;1;0\r | |
836 | TWO, 0;2;0\r | |
837 | FL1, F 1.\r | |
838 | FL3, F 3.\r | |
839 | PARAM,\r | |
840 | CHNLS, F 0.\r | |
841 | PCKSIG, F 0.\r | |
842 | PACK, F 0. / HOLDS ADR. OF FOURTH ARGUMENT\r | |
843 | NTRIG, F 0. / HOLDS ADDR. OF FIFTH ARGUMENT\r | |
844 | TIMRAT, F 0. /HOLDS CLOCK/SAMRAT/12, CLOCK IS RATIO OF SCHMITT TRIGGER TIMER\r | |
845 | \f/**** WORD SUBROUTINES ****\r | |
846 | /\r | |
847 | WPCNT, 0;0\r | |
848 | WC1, 0;6\r | |
849 | BASE WDBASE\r | |
850 | WDBASE, F 0. /PNTR TO ARGS\r | |
851 | WDINDX, F 0. /INDEX TO WORD IN ARRAY\r | |
852 | WDOPER, F 0. /TARGET OR SOURCE ADDR\r | |
853 | F1, F 1.\r | |
854 | STXMJA, 0;1100-1030;0 /STX - JA\r | |
855 | WORDOP, TEXT +WORDOP+\r | |
856 | 0\r | |
857 | WDRTN, JA .\r | |
858 | WINDEX, F 0. /INDEX REGS 0-2\r | |
859 | /\r | |
860 | ORG 10*3+WDBASE\r | |
861 | 0\r | |
862 | JA WORDOP+3\r | |
863 | /\r | |
864 | /**** WGET - WORD GET ****\r | |
865 | /\r | |
866 | / CALL WGET(BUFF1,NWORD,Y)\r | |
867 | /\r | |
868 | ENTRY WGET\r | |
869 | WGET, JSA WDSET /INIT REGISTERS\r | |
870 | FLDA WPCNT / LOOK IF CALLED WITH TWO PARAMETERS\r | |
871 | JEQ W2PAR / TWO PARAMETERS ONLY, OUPUT VIA FAC\r | |
872 | XTA 0 /GET WORD FROM BUFF1\r | |
873 | FSTA% WDOPER /STICK IT IN X\r | |
874 | JA WDRTN\r | |
875 | W2PAR, XTA 0\r | |
876 | JA WDRTN\r | |
877 | /\r | |
878 | /**** WPUT - WORD PUT ****\r | |
879 | /\r | |
880 | / CALL WPUT(BUFF1,NWORD,Y)\r | |
881 | /\r | |
882 | ENTRY WPUT\r | |
883 | WPUT, JSA WDSET /INIT REGISTERS\r | |
884 | FLDA% WDOPER /GET Y\r | |
885 | ATX 0 /FIX AND STORE IN BUFF1\r | |
886 | JA WDRTN\r | |
887 | /\r | |
888 | / WGET & WPUT INITIALISATION\r | |
889 | /\r | |
890 | BASE 0\r | |
891 | WDSET, 0;0\r | |
892 | STARTD\r | |
893 | FLDA 30 /GET RTN ADDR\r | |
894 | FSTA WDRTN\r | |
895 | FLDA 0 /PNTR TO ARGS\r | |
896 | SETB WDBASE\r | |
897 | BASE WDBASE\r | |
898 | SETX WINDEX\r | |
899 | FSTA WDBASE\r | |
900 | LDX 0,1 / COMPUTE NUMBER OF PARAMETERS\r | |
901 | FLDA% WDBASE,1 / ADR. FOLLOWING THE PARAMETER LIST --> FAC\r | |
902 | FSUB WDBASE / SUBTRACT THE START ADR. OF PARAMETER LIST\r | |
903 | FSUB WC1 / FAC-5 --> FAC\r | |
904 | FSTA WPCNT / WPCNT=0 <==> TWO PARAMETERS, =2 <==> THREE PARAMETERS\r | |
905 | FLDA% WDBASE,1+ /BUFFER ADDR\r | |
906 | FADD STXMJA /MAKE SETX INST\r | |
907 | FSTA WDSETX\r | |
908 | FLDA% WDBASE,1+ /WORD INDEX ADDR\r | |
909 | FSTA WDINDX\r | |
910 | FLDA WPCNT / TEST IF THERE ARE MORE THAN 2 PARAMETERS\r | |
911 | JEQ WCONT / \r | |
912 | FLDA% WDBASE,1+ /RESULT OR VALUE ADDR\r | |
913 | FSTA WDOPER\r | |
914 | WCONT,\r | |
915 | STARTF\r | |
916 | FLDA% WDINDX /WORD INDEX\r | |
917 | FSUB F1 /COMPUT ADDR OF WORD\r | |
918 | ALN 0\r | |
919 | STARTD\r | |
920 | FADDM WDSETX\r | |
921 | WDSETX, SETX 0 /MODIFIED DURING EXEC\r | |
922 | STARTF\r | |
923 | JA WDSET\r | |
924 | / SUBROUTINE TO RELEASE A BUFFER BY RESETTING\r | |
925 | / THE STATUS REGISTER\r | |
926 | /\r | |
927 | / CALL RELEAS(N)\r | |
928 | /\r | |
929 | / N DESIGNATES THE STATUS REGISTER, N SHOULD BE 1\r | |
930 | / OR 2. IF N .NE. 1, 2 IS ASSUMED.\r | |
931 | /\r | |
932 | ENTRY RELEAS\r | |
933 | BASE 0\r | |
934 | RELEAS, STARTD\r | |
935 | FLDA 30 /GET RTN ADDR\r | |
936 | FSTA WDRTN\r | |
937 | FLDA 0 /GET ARG PNTR\r | |
938 | BASE WDBASE\r | |
939 | SETB WDBASE\r | |
940 | SETX WINDEX\r | |
941 | FSTA WDBASE\r | |
942 | LDX 1,1\r | |
943 | FLDA% WDBASE,1 /N ADDR\r | |
944 | FSTA WDBASE\r | |
945 | SETX STAT1 /MODIFY STATUS VIA INDEX\r | |
946 | STARTF\r | |
947 | FLDA% WDBASE /N\r | |
948 | FSUB F1 /TEST FOR NOT 1\r | |
949 | JNE CLR2 /ASSUME STAT2\r | |
950 | LDX -1,0 /CHANGE EXPONENT\r | |
951 | /TO -7 TO MAKE 0.25\r | |
952 | JA WDRTN\r | |
953 | CLR2, LDX -1,3 /STAT2 EXP TO -1\r | |
954 | JA WDRTN\r | |
955 | \f/ COMPUTE THE NUMBER OF BITS SET IN THE TRIGGER WORD\r | |
956 | / INTEGER FUNCTION TRGWRD\r | |
957 | / BITCNT=TRGWRD(TIMEWORD)\r | |
958 | /\r | |
959 | ENTRY TRGWRD\r | |
960 | BASE 0\r | |
961 | TRGWRD, STARTD / STAY ON CALLER S BASE\r | |
962 | FLDA 3*10\r | |
963 | FSTA RETS / SAVE RETURN ADR.\r | |
964 | SETX BITSCN / SET UP X REGISTER TO 8-MODE CODE\r | |
965 | LDX 1,1 / INDEX TO FIRST ARGUMENT\r | |
966 | FLDA% 0,1\r | |
967 | FSTA 3\r | |
968 | STARTF\r | |
969 | FLDA% 3 / FIRST ARGUMENT --> FAC\r | |
970 | ATX 0 / AND INTO 8-MODE CODE\r | |
971 | TRAP4 CMPBIT / THE WORK IS DONE BY PDP8\r | |
972 | XTA 1 / GET THE RESULT\r | |
973 | RETS, JA .-. / AND HOME \r | |
974 | END\r | |
975 | \f\1a\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 |