A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk1_im6100 / rka / paroff / clock.ra
CommitLineData
81e70d48
PH
1 EXTERN #DISP /SYSTEM PAGE 0,NEEDED TO\r
2 /PUT CLOCK STATUS ON PG0\r
3 /(CSTAT) FOR USE BY GEN\r
4 /USER CLOCK SERVICE ROUTS\r
5 EXTERN #T812 /RTS CPTYP\r
6 EXTERN ONQI /INTERRUPT QUEUER\r
7 CLZE=6130 /CLOCK IOTS\r
8 CLSK=6131\r
9 CLLR=6132 /ALSO CLOE\r
10 CLAB=6133\r
11 CLEN=6134\r
12 CLSA=6135\r
13 CSTAT=157 /IDOCLK PUTS CLSA BITS\r
14 /IN HERE\r
15\f BASE FTMP0\r
16 INDEX FCNWD\r
17 FIELD1 SYNC\r
18 JSA SETUP /HERE TO READ A STRIG\r
19 /INITIALIZE ARGS\r
20 TRAP4 DOSYNC /FCNWD (XR) HOLDS STRIG\r
21 /TO READ\r
22 XTA FCNWD /=ANS=0,1\r
23 FSTA% FTMP1 /GIVE ANS TO CALLER\r
24 JA GOBAK\r
25FTMP0, F 0.0 /BASE PAGE\r
26FTMP1, F 0.0\r
27RPTR, 27;ADDR RTBL /PTR TO RATE TBL, ALSO\r
28 /USED TO FLT OVRCNT (NOTE\r
29 /THAT THE EXPONENT=27)\r
30MINRAT, F .02 /MIN ALLOWABLE RATE\r
31TOVR, F 0.0\r
32NAME, TEXT +CLOCK +\r
33 ORG 10*3+FTMP0\r
34 FNOP\r
35 JA NAME+3\r
36 0\r
37GOBAK, JA .\r
38RTBL, F 16.0 /CONSTANT USED TO CHK FOR\r
39 /EXT CLK BIT IN FCNWD\r
40 /THIS CONST MUST BE NE 0\r
41MAXRAT,\r
42F4096, F 4096.0 /USED TO GET OVRFLO COUNT\r
43 F 100000.0 /FASTEST RATE IN HERTZ\r
44 F 10000.0 /NEXT FASTEST RATE\r
45 F 1000.0\r
46 F 100.0 /SLOWEST RATE\r
47 F 1.0 /USED BY TIME FOR EXT CLK\r
48\f BASE 0\r
49 \r
50SETUP, 0;0 /HERE TO INIT ALL FPP SUBS\r
51 STARTD\r
52 FLDA 30 /PICK UP RTN TO CALLER\r
53 FSTA GOBAK\r
54 FLDA 0 /GET PTR TO CALLERS ARGS\r
55 SETX FCNWD /CLOCK XR AND BASE\r
56 SETB FTMP0\r
57 BASE FTMP0\r
58 FSTA FTMP1\r
59 FLDA% FTMP1,P1\r
60 FSTA FTMP0 /PTR TO 1ST ARG\r
61 FLDA% FTMP1,P2\r
62 FSTA FTMP1 /PTR TO 2ND ARG\r
63 FLDA #T812 /TELLS PDP8,PDP12\r
64 ATX CPTYP /0=8=DK8ES,1=12=KW12A\r
65 STARTF\r
66 FLDA% FTMP0 /=1ST ARG\r
67 ATX FCNWD /ALWAYS IN FCNWD\r
68 JA SETUP\r
69\f ENTRY CLOCK\r
70CLOCK, JSA SETUP /HERE FOR CLOCK START\r
71 FLDA% FTMP0\r
72 FSUB RTBL /FCNWD IS IN FAC,IF GE 16\r
73 JGE ITSEXT /(RTBL=16.0) THEN USER IS\r
74 /REQUESTING AN EXTERNAL\r
75 /CLOCK I.E. B8 OF FCNWD\r
76 /IS SET.\r
77 FLDA% FTMP1 /=REQUESTED RATE IN HERTZ\r
78 FSUB MINRAT /.LE. MINUMUM RATE\r
79 JLE GOTR-2 /MEANS STOP CLOCK.\r
80 FADD MINRAT\r
81 FSUB MAXRAT /CHK FOR TOO FAST\r
82 JGT GOTR-2\r
83 LDX -4,OVRFLO /THERE ARE 4 BASIC RATES\r
84 LDX 1,RATE /=INDEX INTO RTBL; UPON\r
85 /TRAP(CLOCK) RATE=(0,\r
86 /2,3,4,5,6) 0=STOP,\r
87 /6=EXTERNAL\r
88 /2-5=PROGRAMMABLE RATES\r
89LOP0, FLDA% RPTR,RATE+\r
90 /GET NEXT SLOWEST RATE\r
91 FDIV% FTMP1 /=REQUESTED RATE IN HZ.\r
92 /FAC=OVRFLO COUNT;\r
93 FSUB F4096 /MUST BE MODULO 12 BITS.\r
94 JLE GOTR /FOUND IT\r
95 JXN LOP0,OVRFLO+\r
96 LDX 0,RATE /RATE IS TOO SLOW, STOP\r
97 /CLOCK.\r
98GOTR, FADD F4096 /RESTORE\r
99 FSTA TOVR\r
100 ATX OVRFLO /OVER FLOW COUNT\r
101 TRAP4 SETCLK /GO START CLOCK\r
102 JA GOBAK /RTN TO CALLER\r
103ITSEXT, LDX 6,RATE /=RATE FOR EXT CLK\r
104 FLDA% FTMP1 /REQUESTED RATE IS\r
105 /INTERPRETED AS OVRFLO\r
106 JA GOTR+1 /WHEN RATE IS EXTERNAL\r
107\f/MAGIC TABLE USED BY SETCLK TO SET CLOCK ENABLE\r
108/BITS. EVEN NUMBERED ENTRIES ARE FOR THE DK8ES;\r
109/ODD NUMBERED ONES ARE FOR THE KW12A.\r
110 \r
111CLKTBL, 0675 /"STANDARD" DK BITS\r
112 300 /STND KW BITS\r
113 1 /DK STRIG1 BIT\r
114 60 /KW STRIG1 BITS\r
115 2 /DK S2\r
116 14 /KW S2\r
117 4 /S3\r
118P3, 3 /S3\r
119 40 /DK ADC ON OVR BIT\r
120 400 /KW ADC ON OVR BIT\r
121 \r
122 /IF NOT NEXT PAGE DO ORG\r
123 IFNEG .-200 < ORG .-SYNC&7600+200+SYNC >\r
124\fSETCLK, 0 /TRAP HERE TO START CLK\r
125 /THIS ROUT HANDLES BOTH\r
126 /DK8ES AND KW12A.\r
127 CLLR /STOP KW AND SET MODE 0;\r
128 /NOP FOR DK.\r
129 CLEN /CLR KW12 ENABLE OR\r
130 /READ DK ENABLE.\r
131 CLA\r
132 TAD P7540 /TOGGLE KW MODE 0 TO 1 TO\r
133 CLLR /CLR CLK COUNTER, OR SET\r
134 /DK ENABLE BITS, RATE FOR\r
135 CLA CMA /BOTH NOW=7=STOP.\r
136 CLZE /CLR ALL DK ENABLE BITS,\r
137 CLSA /CLR STATUS OF BOTH, ALL \r
138 CLA /IS NOW CLEAR.\r
139 TAD FCNTBL+1 /SET PTR TO CLKTBL FOR\r
140 /SETTING OF ENABLE REGS.\r
141 TAD CPTYP /=0 IF PDP8 =1 IF PDP12\r
142 DCA FCNPTR /TBL ENTRIES ALTERNATE\r
143 /FOR 8 AND 12. CPTYP SETS\r
144 /PTR TO 1ST 8 OR 1ST 12\r
145 /ENTRY\r
146 TAD IDOCLK /(AC=JMP AROUND). THE\r
147 /FOLLOWING IS ONCE ONLY\r
148 /CODE. THESE LOCS ARE\r
149 /SUBSEQUENTLY USED AS\r
150 /OPERANDS\r
151 DCA .-1\r
152 /THE TAG "ISVBIT" MUST BE\r
153 /IN FRONT OF THE STRIG\r
154 /FLAGS (STFLG) TO COVER\r
155 /THE ILLEGAL CASE OF\r
156 /STRIG 0 IN A FORT CALL\r
157 /TO SYNC.\r
158ISVBIT, TAD CPTYP /(AC=0,1) MAKE THE INST\r
159 /RAR CLL (FOR DK) OR THE\r
160 /INST RTR CLL FOR IDOCLK;\r
161STFLG, RAL CLL /BECAUSE STATUS BITS FOR\r
162 TAD RARCLL /STRIGS DIFFER ON DK,KW.\r
163 DCA LOP2+1 /SEE SUB IDOCLK.\r
164 /THE ABOVE 3 LOCS ARE\r
165 /SCHMITT TRIGGER FLAGS.\r
166 /THE ORDER IS S1,S2,S3\r
167 /FOR PDP8 AND S3,S2,S1\r
168 /FOR PDP12. THE MAIN\r
169 /REASON FOR REVERSING\r
170 /THE ORDER IS BECAUSE\r
171 /ENGINEERS NEVER CONSULT\r
172 /PROGRAMMERS WHEN THEY\r
173 /ARE BUILDING NEW \r
174 /HARDWARE (CHK THE STATUS\r
175 /BITS FOR DK AND KW).\r
176 JMS% KONQI+1 /PUT CLOCK ON THE\r
177ITMP0, CLSK /INTERRUPT QUE\r
178 /VIA ONQI.\r
179CLENAB, ADDR IDOCLK /THIS LOC WILL HOLD THE\r
180 /ENABLE BITS FOR DK,KW\r
181AROUND, TAD RATE /(AC=0,2,3,4,5,6) RATE IS\r
182 /SET BY FPP\r
183 RTR CLL /START TO POSITION RATE\r
184 RAR /BITS. B3-B5 FOR DK\r
185 /B0-B2 FOR KW\r
186 TAD CPTYP /(THIS IS TRICKY) NEED\r
187 RAR /CPTYP IN LNK BECAUSE\r
188 /POSITION OF RATE BITS\r
189 /DIFFER FOR DK KW.\r
190 TAD% FCNPTR /AC="STANDARD"\r
191 /ENABLE BITS FOR DK,KW.\r
192 SZL /IF ITS A KW THE RATE AND\r
193 /AND STND BITS ARE ALREADY\r
194 /POSITIONED AS FOLLOWS:\r
195 /RRR011000000\r
196 /B0-B3 AND B5 WILL GO TO\r
197 /KW CONTROL. B4,B5 WILL\r
198 /GO TO ENABLE. B3 IS ADC\r
199 /ON OVRFLO AND MAY BE SET\r
200 /BELOW. B5 ON CONTROL IS\r
201 /MODE 1. B4 AND B5 ON\r
202 /ENABLE ARE BUFF PRESET TO\r
203 /CLOCK COUNTER AND INTRUPT\r
204 /ON OVRFLO RESPECTIVELY.\r
205 JMP NOBIT-1 /ITS KW GO PUT IN CLENAB.\r
206 RTR /ITS DK; POSITION RATE TO\r
207 RAR /B3-B5. NOTE THAT THE LNK\r
208 /(CPTYP=0) IS BEING USED.\r
209 CMA /NOTE ALSO THAT THE RATE\r
210 /AND STND BITS ARE THE 1S\r
211 /COMP. OF WHAT THEY SHOULD\r
212 /BE, IE CPTYP=LNK=0\r
213 /BECOMES\r
214 /B2=1 OF ENABLE=BUFF\r
215 /PRESET TO CLK CNTR ON\r
216 /OVERFLO. LOOK AT THE RATE\r
217 /BITS IN THE HANDBOOK FOR\r
218 /BOTH DK,KW. R2,R5\r
219 /FOR DK IS 100HZ, 100KHZ\r
220 /RESPECTIVELY. R2,R5 FOR\r
221 /KW IS 100KHZ,100HZ.\r
222 /1S COMP.OF 2=5 ETC.\r
223 /SMARTEN UP STEVE!\r
224 /THE FINAL VALUE OF THE\r
225 /STND DK ENABLE BITS (1ST\r
226 /ENTRY IN CLKTBL) IS LEFT\r
227 /AS AN EXERCISE FOR THE\r
228 /PROGRAMMER.\r
229 JMP NOBIT-1 /GO PUT IN CLENAB\r
230LOP1, RAR CLL /ROT 1 FCN BIT INTO LNK.\r
231 /B7=EXT CLK AND IS\r
232 /IGNORED HERE. B8=ADC ON\r
233 /OVRFLO, B9-B11 ARE STRIG3\r
234 /-STRIG1 RESP. BX=1=ENABLE\r
235 /FCN. 0=DISABLE\r
236 DCA FCNWD /PUT IT BACK (FCNWD IS\r
237 /SET BY FPP)\r
238 SNL /ENABLE FCN ?\r
239 JMP NOBIT /NO\r
240 TAD% FCNPTR /GET BITS FROM THE MAGIC\r
241 TAD CLENAB /TABLE.\r
242 DCA CLENAB /UPDATE ENABLE WORD.\r
243NOBIT, ISZ FCNPTR /ADV TO NEXT\r
244 ISZ FCNPTR /TBL ENTRY.\r
245 TAD FCNWD /WHEN FCNWD GOES TO 0\r
246 AND P17 /WE ARE ALL DONE.\r
247 /THE "AND" IS DONE TO\r
248 /PROTECT AGAINST A BAD\r
249 /ARG FROM THE FORT CALL.\r
250 /IN A FRIENDLY ENIVORN,\r
251 /ITS NOT NECESSARY.\r
252 /NEVER TRUST A FORTRAN\r
253 /"PROGRAMMER".\r
254P7540, SMA SZA /SMA IS SUPERFLOUS TO\r
255 /THE ROUT; BUT IT\r
256 /CREATES A NICE CONST.\r
257 JMP LOP1 /MORE TO DO\r
258 DCA STFLG /CLR THE SCHMITT\r
259 DCA STFLG+1 /TRIGGER FLAGS.\r
260\f DCA STFLG+2\r
261 TAD OVRFLO /SET BUFF PRESET\r
262 CIA /(FPP SET THIS ARG)\r
263 CLAB\r
264 CLA\r
265 TAD CLENAB /THIS IS FOR KW ONLY.\r
266 AND P377 /AC=3XX. 3= OR BUFF PRE\r
267 /INTO CLK CNTR AND ENAB\r
268 /INT ON OVRFLO.\r
269 /XX ARE THE STRIGS.\r
270 CLEN /SET KW ENABLE OR\r
271 CLA /READ DK ENABLE.\r
272 DCA OVRCNT+1 /CLR NUM OF CLK OVRFLOS\r
273 DCA OVRCNT /SINCE TIME 0.\r
274 TAD CPTYP /NEED TYPE IN ORDER TO\r
275RARCLL, RAR CLL /ISOLATE CONTROL\r
276 TAD CLENAB /BITS FOR\r
277 SZL /KW ?\r
278 AND P7540 /YES, B0-B2 IS RATE,\r
279 /B3 IS ADC, B5 IS BUFF\r
280 /PRE TO CLK CNTR ON\r
281 /OVRFLO, B6 IS MOX NIX.\r
282 /IF DK ALL BITS MAY HAVE\r
283 /MEANING\r
284 CLLR /START THE CLOCK\r
285 CLA\r
286 CIF CDF\r
287 JMP% SETCLK /RTN TO RTS\r
288\fDOSYNC, 0 /HERE TO DISPOSITION A\r
289 /A SCHMITT TRIGGER.\r
290 TAD CPTYP /DK AND KW FLAGS ARE IN\r
291 RAR CLL /REVERSE ORDER. IF DK\r
292 /ARG IS OK; IF KW THEN\r
293 /MUST SET 1=3, 2=2, 3=1\r
294 /TO GET INDEX TO\r
295 /CORRECT FLAG.\r
296 TAD FCNWD /=REQUESTED STRIG=1,2,3\r
297 /(SET BY FPP)\r
298 SZL /DK ?\r
299 CIA /NO KW\r
300 AND P3 /IE 1 GOES TO -1 GOES\r
301 /TO 3 ETC. "AND" ALSO\r
302 /INSURES RANGE IS 0-3.\r
303 /IF ARG IS 0 RESULT IS\r
304 /ALWAYS 0.\r
305 TAD KSTFLG+1 /GET PTR TO FLAG\r
306 DCA SETCLK\r
307 TAD% SETCLK /FLAG=0 IF TRIG HAS NOT\r
308 /TRIPPED SINCE THE LAST\r
309 /CALL TO SYNC; =1\r
310 /OTHERWISE IE RTN 0=FALSE\r
311 DCA FCNWD /,1=TRUE (FPP WILL PICK\r
312 / UP FCNWD)\r
313 DCA% SETCLK /CLR FLAG ANYWAY\r
314 CIF CDF\r
315 JMP% DOSYNC /RTN TO RTS\r
316\fIDOCLK, JMP AROUND /HERE ON CLOCK INTERRUPT\r
317 /(JMP AROUND IS A ONCE\r
318 /ONLY CONSTANT).\r
319 TAD KSTFLG+1 /SET PTR TO STRIG FLAGS.\r
320 DCA ITMP0\r
321 CLSA /GET CLOCK BITS.\r
322 DCAZ CSTAT /SAVE THEM FOR SOME\r
323 TADZ CSTAT /BODY ELSE.\r
324 SPA /OVER FLOW ?\r
325 ISZ OVRCNT+1 /YES BUMP LO ORD CNTR\r
326 SKP\r
327 ISZ OVRCNT /BUMP HI ORD\r
328 JMP DOTRIG /(HI ORD ISZ SKP IS\r
329 /HARMLESS)\r
330LOP2, ISZ ITMP0 /ADV STRIG FLAG PTR.\r
331 RAR CLL /(OR RTR CLL IF KW)\r
332 /IE PUT STRIG BIT IN LNK.\r
333 /IF DK THE ORDER OF\r
334 /INTERROGATION IS S1,S2,S3\r
335 /IF KW THE ORDER IS S3,\r
336 /S2,S1. THE STATUS BITS\r
337 /FOR DK ARE ADJACENT IE\r
338 / B9(S3),B10(S2),B11(S1)\r
339 /FOR KW ITS EVERY OTHER,\r
340 /B6(S1),B8(S2),B10(S3).\r
341 DCA ISVBIT /SAVE WHATS LEFT.\r
342 RAL /COPY LNK INTO FLAG IF=1\r
343 SZA /IE DONT CLR FLAG WHEN\r
344 DCA% ITMP0 /ITS SET.\r
345 TAD ISVBIT\r
346DOTRIG, AND P377 /THE "AND" INSURES THAT\r
347 /THE HI ORD BITS ARE\r
348 /CLRED SO THAT ISVBIT\r
349 /GOES TO 0 WHEN ALL\r
350 /STRIGS HAVE BEEN\r
351 /DISPOSITIONED. IE\r
352 /CLR OVRFLO BIT FOR DK,KW\r
353 /AND CLR PRE-EVENT BIT\r
354 /ON KW IF IT IS SET\r
355 SZA /DONE ?\r
356 JMP LOP2 /NO\r
357 TAD #CLINT /CALL USER EXTENDED\r
358 SZA CLA /CLOCK ROUT ?\r
359 JMS% #CLINT+1 /YES\r
360 JMP% IDOCLK /RTN TO IHANDL\r
361\fFCNPTR,\r
362OVRCNT,\r
363KONQI, ADDR ONQI\r
364P17, 17\r
365P377, 377\r
366FCNWD, 0 /FPP XRS\r
367CPTYP, 0\r
368RATE, 0\r
369P1, 1\r
370P2, 2\r
371OVRFLO,\r
372FCNTBL, ADDR CLKTBL\r
373KSTFLG, ADDR STFLG-1\r
374 ENTRY #CLINT\r
375#CLINT, 0;0\r
376 ENTRY TIME /FIGURE WHAT TIME IT IS\r
377TIME, JSA SETUP\r
378 FLDA RPTR /=27;X;X IS USED TO FLOAT\r
379 STARTD\r
380 FLDA# OVRCNT /NUM OF CLK OVRFLOS SINCE\r
381 STARTF /TIME 0\r
382 FNORM\r
383 FMUL TOVR /=NUM OF BASIC TICKS PER\r
384 /CLOCK OVER FLOW.\r
385 /FAC=NUM OF TICKS SINCE\r
386 /TIME 0.\r
387 FDIV% RPTR,RATE /DIV BY BASIC RATE IN HZ\r
388 /OR 1 IF EXTERNAL CLK.\r
389 FSTA% FTMP0 /GIVE ANS TO CALLER, ALSO\r
390 /LEAVE ANS IN FAC IN\r
391 /CASE TIME WAS A FCN\r
392 /CALL. ANS=ELAPSED TIME IN\r
393 /SECONDS SINCE TIME 0 OR\r
394 /NUM OF EXTERNAL UNIT\r
395 JA GOBAK /TICKS\r
396\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\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\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