File: CLK8A.LS of Disk: V50/Source/Source-Listing-RALF-1
(Source file text)
RALF V50A 8-APR-92 PAGE 1 /PDP-8A OPTION 1 (100 HZ) CLOCK ROUTINE / / / VERSION 50A 29-MAY-80 WVDM / / EXTERN #DISP /SYSTEM PAGE 0,NEEDED TO /PUT CLOCK STATUS ON PG0 /(CSTAT) FOR USE BY GEN /USER CLOCK SERVICE ROUTS EXTERN #T812 /RTS CPTYP EXTERN ONQI /INTERRUPT QUEUER CLLE= 6135 /AC11=1 INTRRUPTS ON. CLCL= 6136 /CLEAR CLOCK FLAG CLSK= 6137 /SKIP ON CLOCK FLAG. CSTAT=157 /IDOCLK PUTS CLSA BITS /IN HERE / BASE FTMP0 INDEX FCNWD FIELD1 SYNC 00000 1120 JSA SETUP /HERE TO READ A STRIG 00001 0073 /INITIALIZE ARGS 00002 4000 TRAP4 DOSYNC /FCNWD (XR) HOLDS STRIG 00003 0302 /TO READ 00004 0030 XTA FCNWD /=ANS=0,1 00005 6601 FSTA% FTMP1 /GIVE ANS TO CALLER 00006 1030 JA GOBAK 00007 0044 / 00010 0000 FTMP0, F 0.0 /BASE PAGE 00011 0000 00012 0000 00013 0000 FTMP1, F 0.0 00014 0000 00015 0000 00016 0027 RPTR, 27;ADDR RTBL /PTR TO RATE TBL, ALSO 00017 0000 00020 0046 /USED TO FLT OVRCNT (NOTE /THAT THE EXPONENT=27) 00021 7773 MINRAT, F .02 /MIN ALLOWABLE RATE 00022 2436 00023 5605 00024 0000 TOVR, F 0.0 00025 0000 00026 0000 00027 0314 NAME, TEXT +CLOCK + 00030 1703 00031 1340 / ORG 10*3+FTMP0 00040 0040 FNOP 00041 1030 JA NAME+3 RALF V50A 8-APR-92 PAGE 1-1 00042 0032 00043 0000 0 00044 1030 GOBAK, JA . 00045 0044 / 00046 0005 RTBL, F 16.0 /CONSTANT USED TO CHK FOR 00047 2000 00050 0000 /EXT CLK BIT IN FCNWD /THIS CONST MUST BE NE 0 MAXRAT, 00051 0015 F4096, F 4096.0 /USED TO GET OVRFLO COUNT 00052 2000 00053 0000 00054 0021 F 100000.0 /FASTEST RATE IN HERTZ 00055 3032 00056 4000 00057 0016 F 10000.0 /NEXT FASTEST RATE 00060 2342 00061 0000 00062 0012 F 1000.0 00063 3720 00064 0000 00065 0007 F 100.0 /SLOWEST RATE 00066 3100 00067 0000 00070 0001 F 1.0 /USED BY TIME FOR EXT CLK 00071 2000 00072 0000 RALF V50A 8-APR-92 PAGE 2 BASE 0 00073 0000 SETUP, 0;0 /HERE TO INIT ALL FPP SUBS 00074 0000 00075 0006 STARTD 00076 0210 FLDA 30 /PICK UP RTN TO CALLER 00077 6400 FSTA GOBAK 00100 0044 00101 0200 FLDA 0 /GET PTR TO CALLERS ARGS 00102 1100 SETX FCNWD /CLOCK XR AND BASE 00103 0356 00104 1110 SETB FTMP0 00105 0010 BASE FTMP0 00106 6201 FSTA FTMP1 00107 0631 FLDA% FTMP1,P1 00110 6200 FSTA FTMP0 /PTR TO 1ST ARG 00111 0641 FLDA% FTMP1,P2 00112 6201 FSTA FTMP1 /PTR TO 2ND ARG 00113 0400 FLDA #T812 /TELLS PDP8,PDP12 00114 0000 00115 0021 ATX CPTYP /0=8=DK8ES,1=12=KW12A 00116 0005 STARTF 00117 0600 FLDA% FTMP0 /=1ST ARG 00120 0020 ATX FCNWD /ALWAYS IN FCNWD 00121 1030 JA SETUP 00122 0073 RALF V50A 8-APR-92 PAGE 3 ENTRY CLOCK 00123 1120 CLOCK, JSA SETUP /HERE FOR CLOCK START 00124 0073 00125 0600 FLDA% FTMP0 00126 2212 FSUB RTBL /FCNWD IS IN FAC,IF GE 16 00127 1010 JGE ITSEXT /(RTBL=16.0) THEN USER IS 00130 0165 /REQUESTING AN EXTERNAL /CLOCK I.E. B8 OF FCNWD /IS SET. 00131 0601 FLDA% FTMP1 /=REQUESTED RATE IN HERTZ 00132 2203 FSUB MINRAT /.LE. MINUMUM RATE 00133 1020 JLE GOTR-2 /MEANS STOP CLOCK. 00134 0154 00135 1203 FADD MINRAT 00136 2213 FSUB MAXRAT /CHK FOR TOO FAST 00137 1060 JGT GOTR-2 00140 0154 00141 0105 LDX -4,OVRFLO /THERE ARE 4 BASIC RATES 00142 7774 00143 0102 LDX 1,RATE /=INDEX INTO RTBL; UPON 00144 0001 /TRAP(CLOCK) RATE=(0, /2,3,4,5,6) 0=STOP, /6=EXTERNAL /2-5=PROGRAMMABLE RATES 00145 0722 LOP0, FLDA% RPTR,RATE+ /GET NEXT SLOWEST RATE 00146 3601 FDIV% FTMP1 /=REQUESTED RATE IN HZ. /FAC=OVRFLO COUNT; 00147 2213 FSUB F4096 /MUST BE MODULO 12 BITS. 00150 1020 JLE GOTR /FOUND IT 00151 0156 00152 2150 JXN LOP0,OVRFLO+ 00153 0145 00154 0102 LDX 0,RATE /RATE IS TOO SLOW, STOP 00155 0000 /CLOCK. 00156 1213 GOTR, FADD F4096 /RESTORE 00157 6204 FSTA TOVR 00160 0025 ATX OVRFLO /OVER FLOW COUNT 00161 4000 TRAP4 SETCLK /GO START CLOCK 00162 0204 00163 1030 JA GOBAK /RTN TO CALLER 00164 0044 / 00165 0102 ITSEXT, LDX 6,RATE /=RATE FOR EXT CLK 00166 0006 00167 0601 FLDA% FTMP1 /REQUESTED RATE IS /INTERPRETED AS OVRFLO 00170 1030 JA GOTR+1 /WHEN RATE IS EXTERNAL 00171 0157 RALF V50A 8-APR-92 PAGE 4 /MAGIC TABLE USED BY SETCLK TO SET CLOCK ENABLE /BITS. EVEN NUMBERED ENTRIES ARE FOR THE DK8ES; /ODD NUMBERED ONES ARE FOR THE KW12A. 00172 0675 CLKTBL, 0675 /"STANDARD" DK BITS 00173 0300 300 /STND KW BITS 00174 0001 1 /DK STRIG1 BIT 00175 0060 60 /KW STRIG1 BITS 00176 0002 2 /DK S2 00177 0014 14 /KW S2 00200 0004 4 /S3 00201 0003 P3, 3 /S3 00202 0040 40 /DK ADC ON OVR BIT 00203 0400 400 /KW ADC ON OVR BIT /IF NOT NEXT PAGE DO ORG IFNEG .-200 < ORG .-SYNC&7600+200+SYNC > RALF V50A 8-APR-92 PAGE 5 00204 0000 SETCLK, 0 /TRAP HERE TO START CLK /THIS ROUT HANDLES BOTH /DK8ES AND KW12A. 00205 6136 CLCL /TRY AND CLEAR IT HERE???? / CLLR /STOP KW AND SET MODE 0; /NOP FOR DK. / CLEN /CLR KW12 ENABLE OR /READ DK ENABLE. / CLA / TAD P7540 /TOGGLE KW MODE 0 TO 1 TO / CLLR /CLR CLK COUNTER, OR SET /DK ENABLE BITS, RATE FOR / CLA CMA /BOTH NOW=7=STOP. / CLZE /CLR ALL DK ENABLE BITS, / CLSA /CLR STATUS OF BOTH, ALL 00206 7200 CLA /IS NOW CLEAR. 00207 1364 TAD FCNTBL+1 /SET PTR TO CLKTBL FOR /SETTING OF ENABLE REGS. 00210 1357 TAD CPTYP /=0 IF PDP8 =1 IF PDP12 00211 3352 DCA FCNPTR /TBL ENTRIES ALTERNATE /FOR 8 AND 12. CPTYP SETS /PTR TO 1ST 8 OR 1ST 12 /ENTRY 00212 1320 TAD IDOCLK /(AC=JMP AROUND). THE /FOLLOWING IS ONCE ONLY /CODE. THESE LOCS ARE /SUBSEQUENTLY USED AS /OPERANDS 00213 3212 DCA .-1 /THE TAG "ISVBIT" MUST BE /IN FRONT OF THE STRIG /FLAGS (STFLG) TO COVER /THE ILLEGAL CASE OF /STRIG 0 IN A FORT CALL /TO SYNC. 00214 1357 ISVBIT, TAD CPTYP /(AC=0,1) MAKE THE INST /RAR CLL (FOR DK) OR THE /INST RTR CLL FOR IDOCLK; 00215 7104 STFLG, RAL CLL /BECAUSE STATUS BITS FOR 00216 1271 TAD RARCLL /STRIGS DIFFER ON DK,KW. 00217 3335 DCA LOP2+1 /SEE SUB IDOCLK. /THE ABOVE 3 LOCS ARE /SCHMITT TRIGGER FLAGS. /THE ORDER IS S1,S2,S3 /FOR PDP8 AND S3,S2,S1 /FOR PDP12. (CHK THE STATUS /BITS FOR DK AND KW). 00220 4753 JMS% KONQI+1 /PUT CLOCK ON THE 00221 6137 ITMP0, CLSK /INTERRUPT QUE /VIA ONQI. 00222 0000 CLENAB, ADDR IDOCLK /THIS LOC WILL HOLD THE 00223 0320 /ENABLE BITS FOR DK,KW 00224 1360 AROUND, TAD RATE /(AC=0,2,3,4,5,6) RATE IS /SET BY FPP RALF V50A 8-APR-92 PAGE 5-1 00225 7112 RTR CLL /START TO POSITION RATE 00226 7010 RAR /BITS. B3-B5 FOR DK /B0-B2 FOR KW 00227 1357 TAD CPTYP /(THIS IS TRICKY) NEED 00230 7010 RAR /CPTYP IN LNK BECAUSE /POSITION OF RATE BITS /DIFFER FOR DK KW. 00231 1752 TAD% FCNPTR /AC="STANDARD" /ENABLE BITS FOR DK,KW. 00232 7430 SZL /IF ITS A KW THE RATE AND /AND STND BITS ARE ALREADY /POSITIONED AS FOLLOWS: /RRR011000000 /B0-B3 AND B5 WILL GO TO /KW CONTROL. B4,B5 WILL /GO TO ENABLE. B3 IS ADC /ON OVRFLO AND MAY BE SET /BELOW. B5 ON CONTROL IS /MODE 1. B4 AND B5 ON /ENABLE ARE BUFF PRESET TO /CLOCK COUNTER AND INTRUPT /ON OVRFLO RESPECTIVELY. 00233 5246 JMP NOBIT-1 /ITS KW GO PUT IN CLENAB. 00234 7012 RTR /ITS DK; POSITION RATE TO 00235 7010 RAR /B3-B5. NOTE THAT THE LNK /(CPTYP=0) IS BEING USED. 00236 7040 CMA /NOTE ALSO THAT THE RATE /AND STND BITS ARE THE 1S /COMP. OF WHAT THEY SHOULD /BE, IE CPTYP=LNK=0 /BECOMES /B2=1 OF ENABLE=BUFF /PRESET TO CLK CNTR ON /OVERFLO. LOOK AT THE RATE /BITS IN THE HANDBOOK FOR /BOTH DK,KW. R2,R5 /FOR DK IS 100HZ, 100KHZ /RESPECTIVELY. R2,R5 FOR /KW IS 100KHZ,100HZ. /1S COMP.OF 2=5 ETC. /SMARTEN UP STEVE! /THE FINAL VALUE OF THE /STND DK ENABLE BITS (1ST /ENTRY IN CLKTBL) IS LEFT /AS AN EXERCISE FOR THE /PROGRAMMER. 00237 5246 JMP NOBIT-1 /GO PUT IN CLENAB 00240 7110 LOP1, RAR CLL /ROT 1 FCN BIT INTO LNK. /B7=EXT CLK AND IS /IGNORED HERE. B8=ADC ON /OVRFLO, B9-B11 ARE STRIG3 /-STRIG1 RESP. BX=1=ENABLE /FCN. 0=DISABLE 00241 3356 DCA FCNWD /PUT IT BACK (FCNWD IS /SET BY FPP) 00242 7420 SNL /ENABLE FCN ? RALF V50A 8-APR-92 PAGE 5-2 00243 5247 JMP NOBIT /NO 00244 1752 TAD% FCNPTR /GET BITS FROM THE MAGIC 00245 1222 TAD CLENAB /TABLE. 00246 3222 DCA CLENAB /UPDATE ENABLE WORD. 00247 2352 NOBIT, ISZ FCNPTR /ADV TO NEXT 00250 2352 ISZ FCNPTR /TBL ENTRY. 00251 1356 TAD FCNWD /WHEN FCNWD GOES TO 0 00252 0354 AND P17 /WE ARE ALL DONE. /THE "AND" IS DONE TO /PROTECT AGAINST A BAD /ARG FROM THE FORT CALL. 00253 7540 P7540, SMA SZA /SMA IS SUPERFLOUS TO /THE ROUT; BUT IT /CREATES A NICE CONST. 00254 5240 JMP LOP1 /MORE TO DO 00255 3215 DCA STFLG /CLR THE SCHMITT RALF V50A 8-APR-92 PAGE 6 00256 3216 DCA STFLG+1 /TRIGGER FLAGS. RALF V50A 8-APR-92 PAGE 7 00257 3217 DCA STFLG+2 00260 1363 TAD OVRFLO /SET BUFF PRESET 00261 7041 CIA /(FPP SET THIS ARG) / CLAB 00262 7200 CLA 00263 1222 TAD CLENAB /THIS IS FOR KW ONLY. 00264 0355 AND P377 /AC=3XX. 3= OR BUFF PRE /INTO CLK CNTR AND ENAB /INT ON OVRFLO. /XX ARE THE STRIGS. / CLEN /SET KW ENABLE OR 00265 7200 CLA /READ DK ENABLE. 00266 3353 DCA OVRCNT+1 /CLR NUM OF CLK OVRFLOS 00267 3352 DCA OVRCNT /SINCE TIME 0. 00270 1357 TAD CPTYP /NEED TYPE IN ORDER TO 00271 7110 RARCLL, RAR CLL /ISOLATE CONTROL 00272 1222 TAD CLENAB /BITS FOR 00273 7430 SZL /KW ? 00274 0253 AND P7540 /YES, B0-B2 IS RATE, /B3 IS ADC, B5 IS BUFF /PRE TO CLK CNTR ON /OVRFLO, B6 IS MOX NIX. /IF DK ALL BITS MAY HAVE /MEANING 00275 7201 CLA IAC /SET BIT 11 00276 6135 CLLE /ENABLE THE CLOCK INTERRUPTS / CLLR /START THE CLOCK 00277 7200 CLA 00300 6203 CIF CDF 00301 5604 JMP% SETCLK /RTN TO RTS RALF V50A 8-APR-92 PAGE 8 00302 0000 DOSYNC, 0 /HERE TO DISPOSITION A /A SCHMITT TRIGGER. 00303 1357 TAD CPTYP /DK AND KW FLAGS ARE IN 00304 7110 RAR CLL /REVERSE ORDER. IF DK /ARG IS OK; IF KW THEN /MUST SET 1=3, 2=2, 3=1 /TO GET INDEX TO /CORRECT FLAG. 00305 1356 TAD FCNWD /=REQUESTED STRIG=1,2,3 /(SET BY FPP) 00306 7430 SZL /DK ? 00307 7041 CIA /NO KW 00310 0201 AND P3 /IE 1 GOES TO -1 GOES /TO 3 ETC. "AND" ALSO /INSURES RANGE IS 0-3. /IF ARG IS 0 RESULT IS /ALWAYS 0. 00311 1366 TAD KSTFLG+1 /GET PTR TO FLAG 00312 3204 DCA SETCLK 00313 1604 TAD% SETCLK /FLAG=0 IF TRIG HAS NOT /TRIPPED SINCE THE LAST /CALL TO SYNC; =1 /OTHERWISE IE RTN 0=FALSE 00314 3356 DCA FCNWD /,1=TRUE (FPP WILL PICK / UP FCNWD) 00315 3604 DCA% SETCLK /CLR FLAG ANYWAY 00316 6203 CIF CDF 00317 5702 JMP% DOSYNC /RTN TO RTS RALF V50A 8-APR-92 PAGE 9 00320 5224 IDOCLK, JMP AROUND /HERE ON CLOCK INTERRUPT /(JMP AROUND IS A ONCE /ONLY CONSTANT). 00321 6136 CLCL /JUST TO MAKE SURE! 00322 1366 TAD KSTFLG+1 /SET PTR TO STRIG FLAGS. 00323 3221 DCA ITMP0 / CLSA /GET CLOCK BITS. 00324 7330 CLA CLL CML RAR /SIMULATE TICK 00325 3157 DCAZ CSTAT /SAVE THEM FOR SOME 00326 1157 TADZ CSTAT /BODY ELSE. 00327 7510 SPA /OVER FLOW ? 00330 2353 ISZ OVRCNT+1 /YES BUMP LO ORD CNTR 00331 7410 SKP 00332 2352 ISZ OVRCNT /BUMP HI ORD 00333 5343 JMP DOTRIG /(HI ORD ISZ SKP IS /HARMLESS) 00334 2221 LOP2, ISZ ITMP0 /ADV STRIG FLAG PTR. 00335 7110 RAR CLL /(OR RTR CLL IF KW) /IE PUT STRIG BIT IN LNK. /IF DK THE ORDER OF /INTERROGATION IS S1,S2,S3 /IF KW THE ORDER IS S3, /S2,S1. THE STATUS BITS /FOR DK ARE ADJACENT IE / B9(S3),B10(S2),B11(S1) /FOR KW ITS EVERY OTHER, /B6(S1),B8(S2),B10(S3). 00336 3214 DCA ISVBIT /SAVE WHATS LEFT. 00337 7004 RAL /COPY LNK INTO FLAG IF=1 00340 7440 SZA /IE DONT CLR FLAG WHEN 00341 3621 DCA% ITMP0 /ITS SET. 00342 1214 TAD ISVBIT 00343 0355 DOTRIG, AND P377 /THE "AND" INSURES THAT /THE HI ORD BITS ARE /CLRED SO THAT ISVBIT /GOES TO 0 WHEN ALL /STRIGS HAVE BEEN /DISPOSITIONED. IE /CLR OVRFLO BIT FOR DK,KW /AND CLR PRE-EVENT BIT /ON KW IF IT IS SET 00344 7440 SZA /DONE ? 00345 5334 JMP LOP2 /NO 00346 1367 TAD #CLINT /CALL USER EXTENDED 00347 7640 SZA CLA /CLOCK ROUT ? 00350 4770 JMS% #CLINT+1 /YES 00351 5720 JMP% IDOCLK /RTN TO IHANDL RALF V50A 8-APR-92 PAGE 10 FCNPTR, OVRCNT, 00352 0000 KONQI, ADDR ONQI 00353 0000 00354 0017 P17, 17 00355 0377 P377, 377 00356 0000 FCNWD, 0 /FPP XRS 00357 0000 CPTYP, 0 00360 0000 RATE, 0 00361 0001 P1, 1 00362 0002 P2, 2 OVRFLO, 00363 0000 FCNTBL, ADDR CLKTBL 00364 0172 00365 0000 KSTFLG, ADDR STFLG-1 00366 0214 / ENTRY #CLINT 00367 0000 #CLINT, 0;0 00370 0000 / ENTRY TIME /FIGURE WHAT TIME IT IS 00371 1120 TIME, JSA SETUP 00372 0073 00373 0202 FLDA RPTR /=27;X;X IS USED TO FLOAT 00374 0006 STARTD 00375 0400 FLDA# OVRCNT /NUM OF CLK OVRFLOS SINCE 00376 0352 00377 0005 STARTF /TIME 0 00400 0004 FNORM 00401 4204 FMUL TOVR /=NUM OF BASIC TICKS PER /CLOCK OVER FLOW. /FAC=NUM OF TICKS SINCE /TIME 0. 00402 3622 FDIV% RPTR,RATE /DIV BY BASIC RATE IN HZ /OR 1 IF EXTERNAL CLK. 00403 6600 FSTA% FTMP0 /GIVE ANS TO CALLER, ALSO /LEAVE ANS IN FAC IN /CASE TIME WAS A FCN /CALL. ANS=ELAPSED TIME IN /SECONDS SINCE TIME 0 OR /NUM OF EXTERNAL UNIT 00404 1030 JA GOBAK /TICKS 00405 0044 RALF V50A 8-APR-92 PAGE 11 RALF V50A 8-APR-92 PAGE 11-1 NO ERRORS 54 SYMBOLS, NO ABS REFS # C 00000 #CLINT 00367 #DISP X 00000 #MAIN S 00000 #T812 X 00000 AROUND 00224 CLCL 06136 CLENAB 00222 CLKTBL 00172 CLLE 06135 CLOCK 00123 CLSK 06137 CPTYP 00357 CSTAT 00157 DOSYNC 00302 DOTRIG 00343 FCNPTR 00352 FCNTBL 00363 FCNWD 00356 FTMP0 00010 FTMP1 00013 F4096 00051 GOBAK 00044 GOTR 00156 IDOCLK 00320 ISVBIT 00214 ITMP0 00221 ITSEXT 00165 KONQI 00352 KSTFLG 00365 LOP0 00145 LOP1 00240 LOP2 00334 MAXRAT 00051 MINRAT 00021 NAME 00027 NOBIT 00247 ONQI X 00000 OVRCNT 00352 OVRFLO 00363 P1 00361 P17 00354 P2 00362 P3 00201 P377 00355 P7540 00253 RARCLL 00271 RATE 00360 RPTR 00016 RTBL 00046 SETCLK 00204 SETUP 00073 STFLG 00215 SYNC F 00406 TIME 00371 TOVR 00024