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