software: Added more and more
[pdp8.git] / sw / f4 / FRTSRC / rsw.ra
diff --git a/sw/f4/FRTSRC/rsw.ra b/sw/f4/FRTSRC/rsw.ra
new file mode 100644 (file)
index 0000000..d824a4f
--- /dev/null
@@ -0,0 +1,141 @@
+/
+/ VERSION 5A 4-26-77 MH
+/
+/THE FOLLOWING IS A SET OF 8 MODE (RALF TYPE)
+/ROUTINES THAT ENABLE PDP 12(8) HARDWARE OPTIONS
+/THESE ROUTINES ARE CALLABLE AT THE FORTRAN LEVEL
+/THE FOLLOWING OPTIONS ARE SUPPORTED:
+/
+/      1 READ A BIT IN THE RIGHT SWITCHES
+/      2 READ A BIT IN THE LEFT SWITCHES
+/      3 READ A SENSE SWITCH
+/      4 READ AN EXTERNAL LEVEL
+/      5 OPEN OR CLOSE A RELAY
+/
+/IF THE REQUESTED BIT OR SWITCH IS SET THE
+/SUBROUTINE RETURNS WITH THE CALLERS ARG SET TO
+/A 1,OTHERWISE IT IS SET TO A 0
+/
+/
+\f      SECT8 RSW
+       INDEX P17
+       BASE 0
+       JSA SETUP       /CHECK ONE RSW BIT
+       TRAP4 DORITE    /CALL 8 MODE ROUT USER
+                       /ARG IS IN FPP XR3
+CONT,  STARTD          /ANSWER IS IN XR3
+       FLDA% 0,XR2     /GET PTR TO CALLER ANS
+       FSTA 3
+       STARTF
+       XTA XR3
+       FSTA% 3         /GIVE ANS TO CALLER
+GOBAK, FLDA 30         /RTN TO CALLER
+       JAC
+       ENTRY LSW
+LSW,   JSA SETUP       /READ 1 LSW BIT
+       TRAP4 DOLEFT    /CALL 8MODE ROUT
+       JA CONT
+       ENTRY SSW
+SSW,   STARTD          /READ A SENSE SWITCH
+       FLDA ANSNSI
+       JA ESSW
+       ENTRY ROPEN
+ROPEN, STARTD          /OPEN A RELAY
+       FLDA ABCLI
+ERCLOS,        FSTA MASK       /PLANT A BCLI OR BSEI IN
+                       /8 MODE ROUTINE
+       JSA SETUP
+       TRAP4 RELAY
+       FLDA 30
+       JAC
+       ENTRY EXTLVL
+EXTLVL,        STARTD          /READ AN EXTERNAL LEVEL
+       FLDA ANSXL
+ESSW,  FSTA LSKP       /PLANT SXLI OR SNS IN
+       JSA SETUP       /8 MODE ROUTINE
+       TRAP4 DOSXL
+       JA CONT
+       ENTRY RCLOSE
+RCLOSE,        STARTD          /CLOSE A RELAY
+       FLDA ABSEI
+       JA ERCLOS
+SETUP, 0;0             /GET ARGS AND SETUP RTN
+       STARTD
+       SETX P17
+       FLDA% 0,XR1     /GET PTR TO 1ST USER ARG
+       FSTA 3
+       STARTF
+       FLDA% 3         /USER ARG TO FAC
+       ATX XR3         /PUT IN XR FOR 8 MODE
+       JA SETUP
+\fDORITE,       0               /READ RIGHT SWITCHES
+       LAS
+       DCA MASK
+       JMS SETBIT      /GET REQUESTED BIT
+       AND MASK        /MASK RSW
+       SZA CLA         /IF BIT IS SET,SET XR3=1
+       ISZ XR3
+       CIF CDF         /RTN TO RTS
+       JMP% DORITE
+DOLEFT,        0               /READ LEFT SWITCHES
+       TAD DOLEFT
+       DCA DORITE
+       IOF
+       6141            /LINC
+       517             /LSW
+       2               /PDP
+       ION
+       JMP DORITE+2
+DOSXL, 0               /READ SENSE SWITCH
+                       /OR EXTERNAL LEVEL
+       TAD XR3         /=SSW OR LVL TO DO
+       AND P17
+       TAD LSKP
+       DCA LSKP
+       CLL CML         /SET LNK=COND MET
+       IOF
+       6141
+LSKP,  0               /=SNS I N OR SXL N
+       261             /IF SKP FAILS THEN COND
+                       /IS MET SO ROTATE LNK
+                       /INTO AC(11) (261=ROL I 1)
+       2               /PDP
+       ION
+       DCA XR3         /SAVE ANSWER
+       CIF CDF
+       JMP% DOSXL      /RTN TO RTS
+RELAY, 0               /OPEN A RELAY
+       TAD CONT        /=6
+       JMS SETBIT      /GO SET RELAY BIT
+       DCA MASK+1
+       IOF
+       6141
+       15              /GET RELAYS
+MASK,  0               /BCL I OR BSE I
+       0               /SET OR CLR 1 RELAY BIT
+       14              /ATR PUT RELAYS BACK
+       2
+       ION
+       CLA
+       CIF CDF
+       JMP% RELAY
+SETBIT,        0               /COME HERE TO POSITION
+       TAD XR3         /BIT IN AC ACCORDING TO
+                       /C(AC)+XR3
+       CMA CLL CML     /ROTATE BIT INTO POSITION
+       DCA XR3         /XR3 MUST=0 UPON EXIT
+       RAR             /ROTATE LINK UNTIL
+       ISZ XR3         /XR3=0
+       JMP .-2
+       JMP% SETBIT     /RTN WITH AC SET
+ABCLI, 1560            /BCL I
+ABSEI, 1620            /BSE I
+P17,   17              /FPP XR0
+XR1,   1
+XR2,   2
+XR3,   0
+ANSXL, 400             /SXL
+       261             /ROL I 1
+ANSNSI,        460             /SNS I
+       261
+\f