software: Added more and more
[pdp8.git] / sw / f4 / FRTSRC / realtm.ra
diff --git a/sw/f4/FRTSRC/realtm.ra b/sw/f4/FRTSRC/realtm.ra
new file mode 100644 (file)
index 0000000..b721892
--- /dev/null
@@ -0,0 +1,284 @@
+/ A-D CLOCKED, BUFFERED SAMPLING ROUTINE
+/
+/ VERSION 5A 4-27-77  PT
+/
+       ADSK=6534
+       ADRB=6533
+       ADST=6532
+       ADLM=6531
+       ADLE=6536
+       ADCL=6530
+       CLZE=6130
+       ESF=4
+       LINC=6141
+       PDP=2
+       SAM=100
+       CLEN=6134
+       FIELD1  SAMPLE
+       0                       /INTERRUPT TIME AD SAMPLER
+       IFNSW   8 <
+       JMS     LNCSAM          /INITIATE SAMPLE
+NEXTCH,        ISZ     SAMINS          /UPDATE SAM INST FOR NEXT CHAN
+       JMS     LNCSAM          /SAM AND INITIATE NEXT CHANNEL
+       >
+       TAD     SAMPTR          /SAVE THE OLD SAM BUFFER POINTER
+       DCA     OLDPTR
+       TAD     BUFFLD          /AND THE FIELD
+       DCA     OLDFLD
+       ISZ     SAMPTR          /BUMP BUFFER POINTER
+       JMP     FLDOK           /FIELD IS OK
+       TAD     BUFFLD          /BUMP FIELD
+       TAD     L10
+       DCA     BUFFLD
+FLDOK, ISZ     SAMCNT          /BUMP BUFFER COUNT
+       JMP     BUFFLD          /NOT END OF BUFFER
+       TAD     ARRAY+2         /RESET POINTER TO START OF BUFFER
+       DCA     SAMPTR
+       TAD     FLDBUF          /RESET BUFFER FIELD
+       DCA     BUFFLD
+       TAD     BUFSIZ          /RESET COUNT
+       DCA     SAMCNT
+BUFFLD,        HLT                     /GET FIELD OF NEW ADB STOP CODE
+       TAD%    SAMPTR          /IS THIS THE SAM STOP CODE ?
+       TAD     M3776           /(ILLEGAL AS A SAMPLE)
+       SZA CLA
+       JMP     NOERR
+       ISZ     TOOFAS          /SET TOO FAST SWITCH
+SAMPLD,        CDF     10
+       DCA%    XCLINT+1        /STOP SAMPLING
+       JMP%    SAMPLE
+NOERR, CLL CMA RAR             /SET ADB STOP CODE
+       DCA%    SAMPTR
+OLDFLD,        HLT                     /GET TO FIELD OF SAMPLE
+       IFSW    8 <
+       ADRB                    /READ SAMPLE
+       >
+       IFNSW   8 <
+       TAD     SAMTMP          /GET PREVIOUSLY READ SAMPLE
+       >
+       DCA%    OLDPTR          /INTO BUFFER
+       ISZ     NPOINT+2        /ANY MORE SAMPLES
+       SKP                     /YES
+       ISZ     NPOINT+1        /MORE THAN 7777 ?
+       SKP                     /YES
+       JMP     SAMPLD          /NO
+       ISZ     NCHANL+1        /ANY MORE CHANNELS TO SAMPLE ?
+       JMP     NEXTCH          /YES GO START SAMPLING
+       TAD     CSTART+2        /STARTING CHANNEL
+       IFSW    8 <
+       ADLM
+       >
+       IFNSW   8 <
+       DCA     SAMINS
+       JMS     LNCSAM          /SET CHANNEL TO START
+                               /IN CASE CLOCK INITIATED
+       >
+       TAD     NCHANL+2        /NUMBER OF CHANNELS
+       DCA     NCHANL+1        /INTO COUNTER
+       CDF     10
+       JMP%    SAMPLE
+       IFSW    8 <
+NEXTCH,        ADST                    /SAMPLE NEXT CHANNEL
+       ADSK                    /WAIT FOR SAMPLE
+       JMP     .-1
+       JMP     SAMPLE+1
+       >
+       IFNSW   8 <
+LNCSAM,        0                       /LINC SAM SUBROUTINE
+       LINC
+SAMINS,        SAM     0               /SAMPLE AND SELECT NEXT CHANNEL
+       PDP
+       DCA     SAMTMP          /SAVE IT
+       JMP%    LNCSAM
+       >
+ADSETU,        0                       /SET UP ROUTINE
+       DCA     TOOFAS          /CLEAR TOO FAST SWITCH
+       TAD     ARRAY+1         /GET FIELD OF BUFFER
+       AND     L7
+       CLL RTL
+       RAL
+       TAD     CDF0
+       DCA     FLDBUF
+       TAD     FLDBUF
+       DCA     BUFFLD          /SAVE IN SAMPLER CODE
+       TAD     ARRAY+2         /SET SAMPLER BUFFER POINTER
+       IAC
+       DCA     SAMPTR
+       TAD     LENGTH+2        /SIZE OF BUFFER
+       CLL RAL
+       TAD     LENGTH+2        /TIMES THREE
+       DCA     BUFSIZ          /SAVE IT
+       TAD     BUFSIZ          /SET INITIAL COUNT
+       IAC
+       DCA     SAMCNT
+       TAD     NCHANL+2        /SET CHANNEL COUNT
+       DCA     NCHANL+1
+       IFSW    8 <
+       CLA CMA                 /STOP THE CLOCK
+       CLZE
+       CLA
+       ADCL                    /CLEAR AD LOGIC JUST IN CASE
+       TAD     L300            /SET AD ENABLE BITS
+       ADLE
+       TAD     CSTART+2        /STARTING CHANNEL NUMBER
+       ADLM
+       >
+       IFNSW   8 <
+       CLEN                    /STOP THE CLOCK
+       TAD     CSTART+2        /SET UP INITIAL SAM INSTRUCTION
+       TAD     L100
+       DCA     CSTART+2
+       TAD     CSTART+2
+       DCA     SAMST           /STARTING SAM
+       TAD     SAMST           /ALSO INTERRUPT TIME SAM
+       DCA     SAMINS
+       TAD     L100            /SET FAST SAM BIT
+       IOF                     /TURN OFF INTERRUPTS IN LINC MODE
+       LINC                    /ENTER LINC MODE
+       ESF
+SAMST, SAM     0               /SET INITIAL SAM CHANNEL
+       PDP
+       ION
+       CLA
+       >
+       CIF CDF
+       JMP%    ADSETU
+BASEX, FNOP
+M3776, -3776
+L10,   10
+SAMPTR,
+ARRAY, 0;0;0
+LENGTH,        0;0
+BUFSIZ,        0
+SAMCNT,
+CSTART,        0
+OLDPTR,        0;0
+SAMTMP,
+NCHANL,        0;0;0
+NPOINT,        0;0;0
+FLDBUF,
+XCLINT,        ADDR    #CLINT
+       IFSW    8 <
+L300,  300
+       >
+       IFNSW   8 <
+L100,  100
+       >
+SAMXR, 0;0
+TOOFAS,        0
+       ORG     10*3+BASEX
+       0
+       JA      NAME+3
+       0
+SAMRTN,        JA      .
+CDF0,  CDF
+L7,    7
+\f      SECT    REALTM
+       BASE    0
+       STARTD
+       FLDA    30              /GET RETURN ADDR
+       FSTA    SAMRTN
+       FLDA    0               /GET ARG POINTER
+       BASE    BASEX
+       SETB    BASEX
+       SETX    SAMXR
+       FSTA    NPOINT          /SAVE ARG POINTER
+       FCLA
+       EXTERN  #CLINT
+       FSTA    #CLINT          /STOP ANY SAMPLING NOW!
+       LDX     1,1
+       FLDA%   NPOINT,1        /GET BUFFER ADDRESS
+       FSTA    ARRAY
+       FLDA%   NPOINT,1+       /GET ADDR OF LENGTH
+       FSTA    LENGTH
+       FLDA%   NPOINT,1+       /ADDR OFHANNEL START
+       FSTA    CSTART
+       FLDA%   NPOINT,1+       /ADDR OF # CHANNELS
+       FSTA    NCHANL
+       FLDA%   NPOINT,1+       /ADDR OF NUMBER OF POINTS
+       FSTA    NPOINT
+       FLDA    ARRAY           /CREATE SETX INS
+       FADD    STXMJA
+       FSTA    BUFSTX
+       FSTA    ADBSTX          /AND SAVE IT IN TWO PLACES
+       STARTF
+       FLDA%   LENGTH          /INTEGERIZE AND NEGATE SOME ARGS
+       FNEG
+       ALN     0
+       FSTA    LENGTH
+       FNORM
+       ATX     1               /SET BUFFER COUNT
+       FLDA%   CSTART          /GET STARTING CHANNEL
+       ALN     0
+       FSTA    CSTART
+       FLDA%   NCHANL
+       FNEG
+       ALN     0
+       FSTA    NCHANL
+       FLDA%   NPOINT
+       FNEG
+       ALN     0
+       FSTA    NPOINT
+       LDX     -1,2            /SET UP FOR BUFFER CLEAR
+       FCLA
+CLRBUF,        FSTA%   ARRAY,2+
+       JXN     CLRBUF,1+
+       TRAP4   ADSETU          /SET UP AD STUFF
+       FLDA    LENGTH          /RE-GET BUFFER SIZE
+       FNORM
+       ATX     1               /BUT NOW ITS TIMES THREE
+       FLDA    STPCOD          /STORE STOP CODES
+       FSTA%   ARRAY           /INTO FIRST 3 WORD
+       STARTD
+       FLDA    SAMADR          /SET UP SAMPLER INTERRUPT HANDLER
+       FSTA    #CLINT
+       STARTF
+       JA      SAMRTN          /RETURN
+NAME,  TEXT    +RTMADB+
+SAMADR,        ADDR    SAMPLE
+STPCOD,        3776;3777;0
+STXMJA,        1100-1030;0
+L2047, F       2047.
+L511,  F       511.
+\f      ENTRY   ADB
+ADB,   BASE    0               /FETCH SAMPLE FROM BUFFER
+       STARTD
+       FLDA    30              /SAVE REUTRN
+       FSTA    SAMRTN
+       SETB    BASEX
+       SETX    SAMXR
+       BASE    BASEX
+       JXN     SPEEDK,2        /CLOCK TOO FAST
+       FLDA    ADBSTX          /SAVE OLD SETX
+       FSTA    OLDSTX
+       FADD    L1              /ADD ONE TO IT
+       FSTA    ADBSTX          /AND SAVE IT BACK
+       JXN     NORINQ,1+       /END OF BUFFER ?
+       FLDA    BUFSTX          /YES, RESTART
+       FSTA    ADBSTX
+       FLDA    LENGTH          /RESET COUNT
+       ATX     1
+NORINQ,        STARTF
+ADBSTX,        SETX    0               /SET XR0 TO NEXT SAMPLE
+WAIT,  XTA     0               /GET THE NEXT SAMPLE
+       FSUB    L2047           /IS IT THE STOP CODE
+       JEQ     WAIT            /YES
+       XTA     0               /NO, FETCH THE SAMPLE
+       LDX     3776,0          /SET SAMPLE STOP CODE
+OLDSTX,        SETX    0               /SET XR0 TO PREVIOUS STOP CODE
+       LDX     0,0             /NOW ZERO IT
+       JA      SAMRTN          /RETURN
+SPEEDK,        EXTERN  #WRITO          /USE FORTRAN I/O
+       TRAP3   #WRITO          /TO WRITE A MESSAGE
+       JA      TTYUNT          /ON THE TTY
+       JA      MESSAG
+       EXTERN  #RENDO
+       TRAP3   #RENDO          /CLOSE THE RECORD
+       LDX     0,2             /KILL TOO FAST SWITCH
+       JA      SAMRTN          /RETURN FROM ADB
+TTYUNT,        F       0.
+MESSAG,        TEXT    '(" SAMPLING TOO FAST")'
+BUFSTX,        SETX    0
+L1,    0;1
+       END
+\f