A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk1_im6100 / rka / paroff / clock.ra
diff --git a/sw/rescue/lab8e_goettingen/disk1_im6100/rka/paroff/clock.ra b/sw/rescue/lab8e_goettingen/disk1_im6100/rka/paroff/clock.ra
new file mode 100644 (file)
index 0000000..64bc864
--- /dev/null
@@ -0,0 +1,396 @@
+       EXTERN #DISP    /SYSTEM PAGE 0,NEEDED TO\r
+                       /PUT CLOCK STATUS ON PG0\r
+                       /(CSTAT) FOR USE BY GEN\r
+                       /USER CLOCK SERVICE ROUTS\r
+       EXTERN #T812    /RTS CPTYP\r
+       EXTERN ONQI     /INTERRUPT QUEUER\r
+       CLZE=6130       /CLOCK IOTS\r
+       CLSK=6131\r
+       CLLR=6132       /ALSO CLOE\r
+       CLAB=6133\r
+       CLEN=6134\r
+       CLSA=6135\r
+       CSTAT=157       /IDOCLK PUTS CLSA BITS\r
+                       /IN HERE\r
+\f      BASE FTMP0\r
+       INDEX FCNWD\r
+       FIELD1 SYNC\r
+       JSA SETUP       /HERE TO READ A STRIG\r
+                       /INITIALIZE ARGS\r
+       TRAP4 DOSYNC    /FCNWD (XR) HOLDS STRIG\r
+                       /TO READ\r
+       XTA FCNWD       /=ANS=0,1\r
+       FSTA% FTMP1     /GIVE ANS TO CALLER\r
+       JA GOBAK\r
+FTMP0, F 0.0           /BASE PAGE\r
+FTMP1, F 0.0\r
+RPTR,  27;ADDR RTBL    /PTR TO RATE TBL, ALSO\r
+                       /USED TO FLT OVRCNT (NOTE\r
+                       /THAT THE EXPONENT=27)\r
+MINRAT,        F .02           /MIN ALLOWABLE RATE\r
+TOVR,  F 0.0\r
+NAME,  TEXT    +CLOCK +\r
+       ORG     10*3+FTMP0\r
+       FNOP\r
+       JA      NAME+3\r
+       0\r
+GOBAK, JA      .\r
+RTBL,  F 16.0          /CONSTANT USED TO CHK FOR\r
+                       /EXT CLK BIT IN FCNWD\r
+                       /THIS CONST MUST BE NE 0\r
+MAXRAT,\r
+F4096, F 4096.0        /USED TO GET OVRFLO COUNT\r
+       F 100000.0      /FASTEST RATE IN HERTZ\r
+       F 10000.0       /NEXT FASTEST RATE\r
+       F 1000.0\r
+       F 100.0         /SLOWEST RATE\r
+       F 1.0           /USED BY TIME FOR EXT CLK\r
+\f      BASE 0\r
\r
+SETUP, 0;0             /HERE TO INIT ALL FPP SUBS\r
+       STARTD\r
+       FLDA 30         /PICK UP RTN TO CALLER\r
+       FSTA GOBAK\r
+       FLDA 0          /GET PTR TO CALLERS ARGS\r
+       SETX FCNWD      /CLOCK XR AND BASE\r
+       SETB FTMP0\r
+       BASE FTMP0\r
+       FSTA FTMP1\r
+       FLDA% FTMP1,P1\r
+       FSTA FTMP0      /PTR TO 1ST ARG\r
+       FLDA% FTMP1,P2\r
+       FSTA FTMP1      /PTR TO 2ND ARG\r
+       FLDA #T812      /TELLS PDP8,PDP12\r
+       ATX CPTYP       /0=8=DK8ES,1=12=KW12A\r
+       STARTF\r
+       FLDA% FTMP0     /=1ST ARG\r
+       ATX FCNWD       /ALWAYS IN FCNWD\r
+       JA SETUP\r
+\f      ENTRY CLOCK\r
+CLOCK, JSA SETUP       /HERE FOR CLOCK START\r
+       FLDA%   FTMP0\r
+       FSUB RTBL       /FCNWD IS IN FAC,IF GE 16\r
+       JGE ITSEXT      /(RTBL=16.0) THEN USER IS\r
+                       /REQUESTING AN EXTERNAL\r
+                       /CLOCK I.E. B8 OF FCNWD\r
+                       /IS SET.\r
+       FLDA% FTMP1     /=REQUESTED RATE IN HERTZ\r
+       FSUB MINRAT     /.LE. MINUMUM RATE\r
+       JLE GOTR-2      /MEANS STOP CLOCK.\r
+       FADD MINRAT\r
+       FSUB MAXRAT     /CHK FOR TOO FAST\r
+       JGT GOTR-2\r
+       LDX -4,OVRFLO   /THERE ARE 4 BASIC RATES\r
+       LDX 1,RATE      /=INDEX INTO RTBL; UPON\r
+                       /TRAP(CLOCK) RATE=(0,\r
+                       /2,3,4,5,6) 0=STOP,\r
+                       /6=EXTERNAL\r
+                       /2-5=PROGRAMMABLE RATES\r
+LOP0,  FLDA% RPTR,RATE+\r
+                       /GET NEXT SLOWEST RATE\r
+       FDIV% FTMP1     /=REQUESTED RATE IN HZ.\r
+                       /FAC=OVRFLO COUNT;\r
+       FSUB F4096      /MUST BE MODULO 12 BITS.\r
+       JLE GOTR        /FOUND IT\r
+       JXN LOP0,OVRFLO+\r
+       LDX 0,RATE      /RATE IS TOO SLOW, STOP\r
+                       /CLOCK.\r
+GOTR,  FADD F4096      /RESTORE\r
+       FSTA TOVR\r
+       ATX OVRFLO      /OVER FLOW COUNT\r
+       TRAP4 SETCLK    /GO START CLOCK\r
+       JA GOBAK                /RTN TO CALLER\r
+ITSEXT,        LDX 6,RATE      /=RATE FOR EXT CLK\r
+       FLDA% FTMP1     /REQUESTED RATE IS\r
+                       /INTERPRETED AS OVRFLO\r
+       JA GOTR+1       /WHEN RATE IS EXTERNAL\r
+\f/MAGIC TABLE USED BY SETCLK TO SET CLOCK ENABLE\r
+/BITS. EVEN NUMBERED ENTRIES ARE FOR THE DK8ES;\r
+/ODD NUMBERED ONES ARE FOR THE KW12A.\r
\r
+CLKTBL,        0675            /"STANDARD" DK BITS\r
+       300             /STND KW BITS\r
+       1               /DK STRIG1 BIT\r
+       60              /KW STRIG1 BITS\r
+       2               /DK S2\r
+       14              /KW S2\r
+       4               /S3\r
+P3,    3               /S3\r
+       40              /DK ADC ON OVR BIT\r
+       400             /KW ADC ON OVR BIT\r
\r
+                       /IF NOT NEXT PAGE DO ORG\r
+       IFNEG .-200 < ORG .-SYNC&7600+200+SYNC >\r
+\fSETCLK,       0               /TRAP HERE TO START CLK\r
+                       /THIS ROUT HANDLES BOTH\r
+                       /DK8ES AND KW12A.\r
+       CLLR            /STOP KW AND SET MODE 0;\r
+                       /NOP FOR DK.\r
+       CLEN            /CLR KW12 ENABLE OR\r
+                       /READ DK ENABLE.\r
+       CLA\r
+       TAD P7540       /TOGGLE KW MODE 0 TO 1 TO\r
+       CLLR            /CLR CLK COUNTER, OR SET\r
+                       /DK ENABLE BITS, RATE FOR\r
+       CLA CMA         /BOTH NOW=7=STOP.\r
+       CLZE            /CLR ALL DK ENABLE BITS,\r
+       CLSA            /CLR STATUS OF BOTH, ALL \r
+       CLA             /IS NOW CLEAR.\r
+       TAD FCNTBL+1    /SET PTR TO CLKTBL FOR\r
+                       /SETTING OF ENABLE REGS.\r
+       TAD CPTYP       /=0 IF PDP8 =1 IF PDP12\r
+       DCA FCNPTR      /TBL ENTRIES ALTERNATE\r
+                       /FOR 8 AND 12. CPTYP SETS\r
+                       /PTR TO 1ST 8 OR 1ST 12\r
+                       /ENTRY\r
+       TAD IDOCLK      /(AC=JMP AROUND). THE\r
+                       /FOLLOWING IS ONCE ONLY\r
+                       /CODE. THESE LOCS ARE\r
+                       /SUBSEQUENTLY USED AS\r
+                       /OPERANDS\r
+       DCA .-1\r
+                       /THE TAG "ISVBIT" MUST BE\r
+                       /IN FRONT OF THE STRIG\r
+                       /FLAGS (STFLG) TO COVER\r
+                       /THE ILLEGAL CASE OF\r
+                       /STRIG 0 IN A FORT CALL\r
+                       /TO SYNC.\r
+ISVBIT,        TAD CPTYP       /(AC=0,1) MAKE THE INST\r
+                       /RAR CLL (FOR DK) OR THE\r
+                       /INST RTR CLL FOR IDOCLK;\r
+STFLG, RAL CLL         /BECAUSE STATUS BITS FOR\r
+       TAD RARCLL      /STRIGS DIFFER ON DK,KW.\r
+       DCA LOP2+1      /SEE SUB IDOCLK.\r
+                       /THE ABOVE 3 LOCS ARE\r
+                       /SCHMITT TRIGGER FLAGS.\r
+                       /THE ORDER IS S1,S2,S3\r
+                       /FOR PDP8 AND S3,S2,S1\r
+                       /FOR PDP12. THE MAIN\r
+                       /REASON FOR REVERSING\r
+                       /THE ORDER IS BECAUSE\r
+                       /ENGINEERS NEVER CONSULT\r
+                       /PROGRAMMERS WHEN THEY\r
+                       /ARE BUILDING NEW \r
+                       /HARDWARE (CHK THE STATUS\r
+                       /BITS FOR DK AND KW).\r
+       JMS% KONQI+1    /PUT CLOCK ON THE\r
+ITMP0, CLSK            /INTERRUPT QUE\r
+                       /VIA ONQI.\r
+CLENAB,        ADDR IDOCLK     /THIS LOC WILL HOLD THE\r
+                       /ENABLE BITS FOR DK,KW\r
+AROUND,        TAD RATE        /(AC=0,2,3,4,5,6) RATE IS\r
+                       /SET BY FPP\r
+       RTR CLL         /START TO POSITION RATE\r
+       RAR             /BITS. B3-B5 FOR DK\r
+                       /B0-B2 FOR KW\r
+       TAD CPTYP       /(THIS IS TRICKY) NEED\r
+       RAR             /CPTYP IN LNK BECAUSE\r
+                       /POSITION OF RATE BITS\r
+                       /DIFFER FOR DK KW.\r
+       TAD% FCNPTR     /AC="STANDARD"\r
+                       /ENABLE BITS FOR DK,KW.\r
+       SZL             /IF ITS A KW THE RATE AND\r
+                       /AND STND BITS ARE ALREADY\r
+                       /POSITIONED AS FOLLOWS:\r
+                       /RRR011000000\r
+                       /B0-B3 AND B5 WILL GO TO\r
+                       /KW CONTROL. B4,B5 WILL\r
+                       /GO TO ENABLE. B3 IS ADC\r
+                       /ON OVRFLO AND MAY BE SET\r
+                       /BELOW. B5 ON CONTROL IS\r
+                       /MODE 1. B4 AND B5 ON\r
+                       /ENABLE ARE BUFF PRESET TO\r
+                       /CLOCK COUNTER AND INTRUPT\r
+                       /ON OVRFLO RESPECTIVELY.\r
+       JMP NOBIT-1     /ITS KW GO PUT IN CLENAB.\r
+       RTR             /ITS DK; POSITION RATE TO\r
+       RAR             /B3-B5. NOTE THAT THE LNK\r
+                       /(CPTYP=0) IS BEING USED.\r
+       CMA             /NOTE ALSO THAT THE RATE\r
+                       /AND STND BITS ARE THE 1S\r
+                       /COMP. OF WHAT THEY SHOULD\r
+                       /BE, IE CPTYP=LNK=0\r
+                       /BECOMES\r
+                       /B2=1 OF ENABLE=BUFF\r
+                       /PRESET TO CLK CNTR ON\r
+                       /OVERFLO. LOOK AT THE RATE\r
+                       /BITS IN THE HANDBOOK FOR\r
+                       /BOTH DK,KW. R2,R5\r
+                       /FOR DK IS 100HZ, 100KHZ\r
+                       /RESPECTIVELY. R2,R5 FOR\r
+                       /KW IS 100KHZ,100HZ.\r
+                       /1S COMP.OF 2=5 ETC.\r
+                       /SMARTEN UP STEVE!\r
+                       /THE FINAL VALUE OF THE\r
+                       /STND DK ENABLE BITS (1ST\r
+                       /ENTRY IN CLKTBL) IS LEFT\r
+                       /AS AN EXERCISE FOR THE\r
+                       /PROGRAMMER.\r
+       JMP NOBIT-1     /GO PUT IN CLENAB\r
+LOP1,  RAR CLL         /ROT 1 FCN BIT INTO LNK.\r
+                       /B7=EXT CLK AND IS\r
+                       /IGNORED HERE. B8=ADC ON\r
+                       /OVRFLO, B9-B11 ARE STRIG3\r
+                       /-STRIG1 RESP. BX=1=ENABLE\r
+                       /FCN. 0=DISABLE\r
+       DCA FCNWD       /PUT IT BACK (FCNWD IS\r
+                       /SET BY FPP)\r
+       SNL             /ENABLE FCN ?\r
+       JMP NOBIT       /NO\r
+       TAD% FCNPTR     /GET BITS FROM THE MAGIC\r
+       TAD CLENAB      /TABLE.\r
+       DCA CLENAB      /UPDATE ENABLE WORD.\r
+NOBIT, ISZ FCNPTR      /ADV TO NEXT\r
+       ISZ FCNPTR      /TBL ENTRY.\r
+       TAD FCNWD       /WHEN FCNWD GOES TO 0\r
+       AND P17         /WE ARE ALL DONE.\r
+                       /THE "AND" IS DONE TO\r
+                       /PROTECT AGAINST A BAD\r
+                       /ARG FROM THE FORT CALL.\r
+                       /IN A FRIENDLY ENIVORN,\r
+                       /ITS NOT NECESSARY.\r
+                       /NEVER TRUST A FORTRAN\r
+                       /"PROGRAMMER".\r
+P7540, SMA SZA         /SMA IS SUPERFLOUS TO\r
+                       /THE ROUT; BUT IT\r
+                       /CREATES A NICE CONST.\r
+       JMP LOP1        /MORE TO DO\r
+       DCA STFLG       /CLR THE SCHMITT\r
+       DCA STFLG+1     /TRIGGER FLAGS.\r
+\f      DCA STFLG+2\r
+       TAD OVRFLO      /SET BUFF PRESET\r
+       CIA             /(FPP SET THIS ARG)\r
+       CLAB\r
+       CLA\r
+       TAD CLENAB      /THIS IS FOR KW ONLY.\r
+       AND P377        /AC=3XX. 3= OR BUFF PRE\r
+                       /INTO CLK CNTR AND ENAB\r
+                       /INT ON OVRFLO.\r
+                       /XX ARE THE STRIGS.\r
+       CLEN            /SET KW ENABLE OR\r
+       CLA             /READ DK ENABLE.\r
+       DCA OVRCNT+1    /CLR NUM OF CLK OVRFLOS\r
+       DCA OVRCNT      /SINCE TIME 0.\r
+       TAD CPTYP       /NEED TYPE IN ORDER TO\r
+RARCLL,        RAR CLL         /ISOLATE CONTROL\r
+       TAD CLENAB      /BITS FOR\r
+       SZL             /KW ?\r
+       AND P7540       /YES, B0-B2 IS RATE,\r
+                       /B3 IS ADC, B5 IS BUFF\r
+                       /PRE TO CLK CNTR ON\r
+                       /OVRFLO, B6 IS MOX NIX.\r
+                       /IF DK ALL BITS MAY HAVE\r
+                       /MEANING\r
+       CLLR            /START THE CLOCK\r
+       CLA\r
+       CIF CDF\r
+       JMP% SETCLK     /RTN TO RTS\r
+\fDOSYNC,       0               /HERE TO DISPOSITION A\r
+                       /A SCHMITT TRIGGER.\r
+       TAD CPTYP       /DK AND KW FLAGS ARE IN\r
+       RAR CLL         /REVERSE ORDER. IF DK\r
+                       /ARG IS OK; IF KW THEN\r
+                       /MUST SET 1=3, 2=2, 3=1\r
+                       /TO GET INDEX TO\r
+                       /CORRECT FLAG.\r
+       TAD FCNWD       /=REQUESTED STRIG=1,2,3\r
+                       /(SET BY FPP)\r
+       SZL             /DK ?\r
+       CIA             /NO KW\r
+       AND P3          /IE 1 GOES TO -1 GOES\r
+                       /TO 3 ETC. "AND" ALSO\r
+                       /INSURES RANGE IS 0-3.\r
+                       /IF ARG IS 0 RESULT IS\r
+                       /ALWAYS 0.\r
+       TAD KSTFLG+1    /GET PTR TO FLAG\r
+       DCA SETCLK\r
+       TAD% SETCLK     /FLAG=0 IF TRIG HAS NOT\r
+                       /TRIPPED SINCE THE LAST\r
+                       /CALL TO SYNC; =1\r
+                       /OTHERWISE IE RTN 0=FALSE\r
+       DCA FCNWD       /,1=TRUE (FPP WILL PICK\r
+                       / UP FCNWD)\r
+       DCA% SETCLK     /CLR FLAG ANYWAY\r
+       CIF CDF\r
+       JMP% DOSYNC     /RTN TO RTS\r
+\fIDOCLK,       JMP AROUND      /HERE ON CLOCK INTERRUPT\r
+                       /(JMP AROUND IS A ONCE\r
+                       /ONLY CONSTANT).\r
+       TAD KSTFLG+1    /SET PTR TO STRIG FLAGS.\r
+       DCA ITMP0\r
+       CLSA            /GET CLOCK BITS.\r
+       DCAZ CSTAT      /SAVE THEM FOR SOME\r
+       TADZ CSTAT      /BODY ELSE.\r
+       SPA             /OVER FLOW ?\r
+       ISZ OVRCNT+1    /YES BUMP LO ORD CNTR\r
+       SKP\r
+       ISZ OVRCNT      /BUMP HI ORD\r
+       JMP DOTRIG      /(HI ORD ISZ SKP IS\r
+                       /HARMLESS)\r
+LOP2,  ISZ ITMP0       /ADV STRIG FLAG PTR.\r
+       RAR CLL         /(OR RTR CLL IF KW)\r
+                       /IE PUT STRIG BIT IN LNK.\r
+                       /IF DK THE ORDER OF\r
+                       /INTERROGATION IS S1,S2,S3\r
+                       /IF KW THE ORDER IS S3,\r
+                       /S2,S1. THE STATUS BITS\r
+                       /FOR DK ARE ADJACENT IE\r
+                       / B9(S3),B10(S2),B11(S1)\r
+                       /FOR KW ITS EVERY OTHER,\r
+                       /B6(S1),B8(S2),B10(S3).\r
+       DCA ISVBIT      /SAVE WHATS LEFT.\r
+       RAL             /COPY LNK INTO FLAG IF=1\r
+       SZA             /IE DONT CLR FLAG WHEN\r
+       DCA% ITMP0      /ITS SET.\r
+       TAD ISVBIT\r
+DOTRIG,        AND P377        /THE "AND" INSURES THAT\r
+                       /THE HI ORD BITS ARE\r
+                       /CLRED SO THAT ISVBIT\r
+                       /GOES TO 0 WHEN ALL\r
+                       /STRIGS HAVE BEEN\r
+                       /DISPOSITIONED. IE\r
+                       /CLR OVRFLO BIT FOR DK,KW\r
+                       /AND CLR PRE-EVENT BIT\r
+                       /ON KW  IF IT IS SET\r
+       SZA             /DONE ?\r
+       JMP LOP2        /NO\r
+       TAD #CLINT      /CALL USER EXTENDED\r
+       SZA CLA         /CLOCK ROUT ?\r
+       JMS% #CLINT+1   /YES\r
+       JMP% IDOCLK     /RTN TO IHANDL\r
+\fFCNPTR,\r
+OVRCNT,\r
+KONQI, ADDR ONQI\r
+P17,   17\r
+P377,  377\r
+FCNWD, 0               /FPP XRS\r
+CPTYP, 0\r
+RATE,  0\r
+P1,    1\r
+P2,    2\r
+OVRFLO,\r
+FCNTBL,        ADDR CLKTBL\r
+KSTFLG,        ADDR STFLG-1\r
+       ENTRY #CLINT\r
+#CLINT,        0;0\r
+       ENTRY TIME      /FIGURE WHAT TIME IT IS\r
+TIME,  JSA SETUP\r
+       FLDA RPTR       /=27;X;X IS USED TO FLOAT\r
+       STARTD\r
+       FLDA# OVRCNT    /NUM OF CLK OVRFLOS SINCE\r
+       STARTF          /TIME 0\r
+       FNORM\r
+       FMUL TOVR       /=NUM OF BASIC TICKS PER\r
+                       /CLOCK OVER FLOW.\r
+                       /FAC=NUM OF TICKS SINCE\r
+                       /TIME 0.\r
+       FDIV% RPTR,RATE /DIV BY BASIC RATE IN HZ\r
+                       /OR 1 IF EXTERNAL CLK.\r
+       FSTA% FTMP0     /GIVE ANS TO CALLER, ALSO\r
+                       /LEAVE ANS IN FAC IN\r
+                       /CASE TIME WAS A FCN\r
+                       /CALL. ANS=ELAPSED TIME IN\r
+                       /SECONDS SINCE TIME 0 OR\r
+                       /NUM OF EXTERNAL UNIT\r
+       JA GOBAK        /TICKS\r
+\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
\ No newline at end of file