A large commit.
[pdp8.git] / sw / os8 / v3d / sources / fortran / all / clk8a.ra
diff --git a/sw/os8/v3d/sources/fortran/all/clk8a.ra b/sw/os8/v3d/sources/fortran/all/clk8a.ra
new file mode 100644 (file)
index 0000000..ccf875e
--- /dev/null
@@ -0,0 +1,450 @@
+/PDP-8A OPTION 1 (100 HZ) CLOCK ROUTINE................CLK8A
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/COPYRIGHT (C) 1975
+/DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
+/
+/
+/
+/THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A
+/SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU-
+/SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE,OR ANY OTHER
+/COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE
+/TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH A SYSTEM AND TO ONE WHO
+/AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE
+/SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC.
+/
+/
+/THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT
+/NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL
+/EQUIPMENT CORPORATION.
+/
+/
+/DEC ASSUMES NO RESPONSIBILITY FOR THE USEOR RELIABILITY OF ITS
+/SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+
+
+
+
+/
+/E.P.  11/6/75
+/ VERSION 5A 4/26/77 MH
+/
+/
+
+\f
+
+
+
+
+
+       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
+       JSA SETUP       /HERE TO READ A STRIG
+                       /INITIALIZE ARGS
+       TRAP4 DOSYNC    /FCNWD (XR) HOLDS STRIG
+                       /TO READ
+       XTA FCNWD       /=ANS=0,1
+       FSTA% FTMP1     /GIVE ANS TO CALLER
+       JA GOBAK
+FTMP0, F 0.0           /BASE PAGE
+FTMP1, F 0.0
+RPTR,  27;ADDR RTBL    /PTR TO RATE TBL, ALSO
+                       /USED TO FLT OVRCNT (NOTE
+                       /THAT THE EXPONENT=27)
+MINRAT,        F .02           /MIN ALLOWABLE RATE
+TOVR,  F 0.0
+NAME,  TEXT    +CLOCK +
+       ORG     10*3+FTMP0
+       FNOP
+       JA      NAME+3
+       0
+GOBAK, JA      .
+RTBL,  F 16.0          /CONSTANT USED TO CHK FOR
+                       /EXT CLK BIT IN FCNWD
+                       /THIS CONST MUST BE NE 0
+MAXRAT,
+F4096, F 4096.0        /USED TO GET OVRFLO COUNT
+       F 100000.0      /FASTEST RATE IN HERTZ
+       F 10000.0       /NEXT FASTEST RATE
+       F 1000.0
+       F 100.0         /SLOWEST RATE
+       F 1.0           /USED BY TIME FOR EXT CLK
+\f      BASE 0
+SETUP, 0;0             /HERE TO INIT ALL FPP SUBS
+       STARTD
+       FLDA 30         /PICK UP RTN TO CALLER
+       FSTA GOBAK
+       FLDA 0          /GET PTR TO CALLERS ARGS
+       SETX FCNWD      /CLOCK XR AND BASE
+       SETB FTMP0
+       BASE FTMP0
+       FSTA FTMP1
+       FLDA% FTMP1,P1
+       FSTA FTMP0      /PTR TO 1ST ARG
+       FLDA% FTMP1,P2
+       FSTA FTMP1      /PTR TO 2ND ARG
+       FLDA #T812      /TELLS PDP8,PDP12
+       ATX CPTYP       /0=8=DK8ES,1=12=KW12A
+       STARTF
+       FLDA% FTMP0     /=1ST ARG
+       ATX FCNWD       /ALWAYS IN FCNWD
+       JA SETUP
+\f      ENTRY CLOCK
+CLOCK, JSA SETUP       /HERE FOR CLOCK START
+       FLDA%   FTMP0
+       FSUB RTBL       /FCNWD IS IN FAC,IF GE 16
+       JGE ITSEXT      /(RTBL=16.0) THEN USER IS
+                       /REQUESTING AN EXTERNAL
+                       /CLOCK I.E. B8 OF FCNWD
+                       /IS SET.
+       FLDA% FTMP1     /=REQUESTED RATE IN HERTZ
+       FSUB MINRAT     /.LE. MINUMUM RATE
+       JLE GOTR-2      /MEANS STOP CLOCK.
+       FADD MINRAT
+       FSUB MAXRAT     /CHK FOR TOO FAST
+       JGT GOTR-2
+       LDX -4,OVRFLO   /THERE ARE 4 BASIC RATES
+       LDX 1,RATE      /=INDEX INTO RTBL; UPON
+                       /TRAP(CLOCK) RATE=(0,
+                       /2,3,4,5,6) 0=STOP,
+                       /6=EXTERNAL
+                       /2-5=PROGRAMMABLE RATES
+LOP0,  FLDA% RPTR,RATE+
+                       /GET NEXT SLOWEST RATE
+       FDIV% FTMP1     /=REQUESTED RATE IN HZ.
+                       /FAC=OVRFLO COUNT;
+       FSUB F4096      /MUST BE MODULO 12 BITS.
+       JLE GOTR        /FOUND IT
+       JXN LOP0,OVRFLO+
+       LDX 0,RATE      /RATE IS TOO SLOW, STOP
+                       /CLOCK.
+GOTR,  FADD F4096      /RESTORE
+       FSTA TOVR
+       ATX OVRFLO      /OVER FLOW COUNT
+       TRAP4 SETCLK    /GO START CLOCK
+       JA GOBAK                /RTN TO CALLER
+ITSEXT,        LDX 6,RATE      /=RATE FOR EXT CLK
+       FLDA% FTMP1     /REQUESTED RATE IS
+                       /INTERPRETED AS OVRFLO
+       JA GOTR+1       /WHEN RATE IS EXTERNAL
+\f/MAGIC TABLE USED BY SETCLK TO SET CLOCK ENABLE
+/BITS. EVEN NUMBERED ENTRIES ARE FOR THE DK8ES;
+/ODD NUMBERED ONES ARE FOR THE KW12A.
+CLKTBL,        0675            /"STANDARD" DK BITS
+       300             /STND KW BITS
+       1               /DK STRIG1 BIT
+       60              /KW STRIG1 BITS
+       2               /DK S2
+       14              /KW S2
+       4               /S3
+P3,    3               /S3
+       40              /DK ADC ON OVR BIT
+       400             /KW ADC ON OVR BIT
+                       /IF NOT NEXT PAGE DO ORG
+       IFNEG .-200 < ORG .-SYNC&7600+200+SYNC >
+\fSETCLK,       0               /TRAP HERE TO START CLK
+                       /THIS ROUT HANDLES BOTH
+                       /DK8ES AND KW12A.
+       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 
+       CLA             /IS NOW CLEAR.
+       TAD FCNTBL+1    /SET PTR TO CLKTBL FOR
+                       /SETTING OF ENABLE REGS.
+       TAD CPTYP       /=0 IF PDP8 =1 IF PDP12
+       DCA FCNPTR      /TBL ENTRIES ALTERNATE
+                       /FOR 8 AND 12. CPTYP SETS
+                       /PTR TO 1ST 8 OR 1ST 12
+                       /ENTRY
+       TAD IDOCLK      /(AC=JMP AROUND). THE
+                       /FOLLOWING IS ONCE ONLY
+                       /CODE. THESE LOCS ARE
+                       /SUBSEQUENTLY USED AS
+                       /OPERANDS
+       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.
+ISVBIT,        TAD CPTYP       /(AC=0,1) MAKE THE INST
+                       /RAR CLL (FOR DK) OR THE
+                       /INST RTR CLL FOR IDOCLK;
+STFLG, RAL CLL         /BECAUSE STATUS BITS FOR
+       TAD RARCLL      /STRIGS DIFFER ON DK,KW.
+       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).
+       JMS% KONQI+1    /PUT CLOCK ON THE
+ITMP0, CLSK            /INTERRUPT QUE
+                       /VIA ONQI.
+CLENAB,        ADDR IDOCLK     /THIS LOC WILL HOLD THE
+                       /ENABLE BITS FOR DK,KW
+AROUND,        TAD RATE        /(AC=0,2,3,4,5,6) RATE IS
+                       /SET BY FPP
+       RTR CLL         /START TO POSITION RATE
+       RAR             /BITS. B3-B5 FOR DK
+                       /B0-B2 FOR KW
+       TAD CPTYP       /(THIS IS TRICKY) NEED
+       RAR             /CPTYP IN LNK BECAUSE
+                       /POSITION OF RATE BITS
+                       /DIFFER FOR DK KW.
+       TAD% FCNPTR     /AC="STANDARD"
+                       /ENABLE BITS FOR DK,KW.
+       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.
+       JMP NOBIT-1     /ITS KW GO PUT IN CLENAB.
+       RTR             /ITS DK; POSITION RATE TO
+       RAR             /B3-B5. NOTE THAT THE LNK
+                       /(CPTYP=0) IS BEING USED.
+       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.
+       JMP NOBIT-1     /GO PUT IN CLENAB
+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
+       DCA FCNWD       /PUT IT BACK (FCNWD IS
+                       /SET BY FPP)
+       SNL             /ENABLE FCN ?
+       JMP NOBIT       /NO
+       TAD% FCNPTR     /GET BITS FROM THE MAGIC
+       TAD CLENAB      /TABLE.
+       DCA CLENAB      /UPDATE ENABLE WORD.
+NOBIT, ISZ FCNPTR      /ADV TO NEXT
+       ISZ FCNPTR      /TBL ENTRY.
+       TAD FCNWD       /WHEN FCNWD GOES TO 0
+       AND P17         /WE ARE ALL DONE.
+                       /THE "AND" IS DONE TO
+                       /PROTECT AGAINST A BAD
+                       /ARG FROM THE FORT CALL.
+P7540, SMA SZA         /SMA IS SUPERFLOUS TO
+                       /THE ROUT; BUT IT
+                       /CREATES A NICE CONST.
+       JMP LOP1        /MORE TO DO
+       DCA STFLG       /CLR THE SCHMITT
+\f      DCA STFLG+1     /TRIGGER FLAGS.
+\f      DCA STFLG+2
+       TAD OVRFLO      /SET BUFF PRESET
+       CIA             /(FPP SET THIS ARG)
+/      CLAB
+       CLA
+       TAD CLENAB      /THIS IS FOR KW ONLY.
+       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
+       CLA             /READ DK ENABLE.
+       DCA OVRCNT+1    /CLR NUM OF CLK OVRFLOS
+       DCA OVRCNT      /SINCE TIME 0.
+       TAD CPTYP       /NEED TYPE IN ORDER TO
+RARCLL,        RAR CLL         /ISOLATE CONTROL
+       TAD CLENAB      /BITS FOR
+       SZL             /KW ?
+       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
+       CLA IAC         /SET BIT 11
+       CLLE            /ENABLE THE CLOCK INTERRUPTS
+/      CLLR            /START THE CLOCK
+       CLA
+       CIF CDF
+       JMP% SETCLK     /RTN TO RTS
+\fDOSYNC,       0               /HERE TO DISPOSITION A
+                       /A SCHMITT TRIGGER.
+       TAD CPTYP       /DK AND KW FLAGS ARE IN
+       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.
+       TAD FCNWD       /=REQUESTED STRIG=1,2,3
+                       /(SET BY FPP)
+       SZL             /DK ?
+       CIA             /NO KW
+       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.
+       TAD KSTFLG+1    /GET PTR TO FLAG
+       DCA SETCLK
+       TAD% SETCLK     /FLAG=0 IF TRIG HAS NOT
+                       /TRIPPED SINCE THE LAST
+                       /CALL TO SYNC; =1
+                       /OTHERWISE IE RTN 0=FALSE
+       DCA FCNWD       /,1=TRUE (FPP WILL PICK
+                       / UP FCNWD)
+       DCA% SETCLK     /CLR FLAG ANYWAY
+       CIF CDF
+       JMP% DOSYNC     /RTN TO RTS
+\fIDOCLK,       JMP AROUND      /HERE ON CLOCK INTERRUPT
+                       /(JMP AROUND IS A ONCE
+                       /ONLY CONSTANT).
+       CLCL            /JUST TO MAKE SURE!
+       TAD KSTFLG+1    /SET PTR TO STRIG FLAGS.
+       DCA ITMP0
+/      CLSA            /GET CLOCK BITS.
+       CLA CLL CML RAR /SIMULATE TICK
+       DCAZ CSTAT      /SAVE THEM FOR SOME
+       TADZ CSTAT      /BODY ELSE.
+       SPA             /OVER FLOW ?
+       ISZ OVRCNT+1    /YES BUMP LO ORD CNTR
+       SKP
+       ISZ OVRCNT      /BUMP HI ORD
+       JMP DOTRIG      /(HI ORD ISZ SKP IS
+                       /HARMLESS)
+LOP2,  ISZ ITMP0       /ADV STRIG FLAG PTR.
+       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).
+       DCA ISVBIT      /SAVE WHATS LEFT.
+       RAL             /COPY LNK INTO FLAG IF=1
+       SZA             /IE DONT CLR FLAG WHEN
+       DCA% ITMP0      /ITS SET.
+       TAD ISVBIT
+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
+       SZA             /DONE ?
+       JMP LOP2        /NO
+       TAD #CLINT      /CALL USER EXTENDED
+       SZA CLA         /CLOCK ROUT ?
+       JMS% #CLINT+1   /YES
+       JMP% IDOCLK     /RTN TO IHANDL
+\fFCNPTR,
+OVRCNT,
+KONQI, ADDR ONQI
+P17,   17
+P377,  377
+FCNWD, 0               /FPP XRS
+CPTYP, 0
+RATE,  0
+P1,    1
+P2,    2
+OVRFLO,
+FCNTBL,        ADDR CLKTBL
+KSTFLG,        ADDR STFLG-1
+       ENTRY #CLINT
+#CLINT,        0;0
+       ENTRY TIME      /FIGURE WHAT TIME IT IS
+TIME,  JSA SETUP
+       FLDA RPTR       /=27;X;X IS USED TO FLOAT
+       STARTD
+       FLDA# OVRCNT    /NUM OF CLK OVRFLOS SINCE
+       STARTF          /TIME 0
+       FNORM
+       FMUL TOVR       /=NUM OF BASIC TICKS PER
+                       /CLOCK OVER FLOW.
+                       /FAC=NUM OF TICKS SINCE
+                       /TIME 0.
+       FDIV% RPTR,RATE /DIV BY BASIC RATE IN HZ
+                       /OR 1 IF EXTERNAL CLK.
+       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
+       JA GOBAK        /TICKS
+\f