DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦a5ae98acd⟧ TextFile

    Length: 7680 (0x1e00)
    Types: TextFile
    Names: »tfftipow«

Derivation

└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
    └─⟦b2ec5d50f⟧ 
        └─⟦09b4e9619⟧ »thcømat« 
            └─⟦this⟧ 

TextFile

message fftipow

(fftipow=slang fpnames type.yes insertproc entry.no
fftipow)

; 8-10-74 ojh/rm
; powerspectrum of integer data

b. g1,e3 w.

k=10000

s. g6,j40,a30,b10
h.
g0=0
e2:
g1:  g3,g2
j13: g0+13,0                 ; last used
j30: g0+30,0                 ; saved sr,w3
j8:  g0+8,0                  ; end address expr
j4:  g0+4,0                  ; take expr
j18: g0+18,0                 ; zone alarm (index)
g2=k-2-g1, g3=g2             ; end of abs words,points
w.
a13: e0:     g0
a14:         0
a11:   5 10 74
a12:  16 00 00
e1:  rl. w2 (j13.)
     ds. w3 (j30.)
     dl  w1  x2+8            ; take m
     so  w0  16
     jl. w3 (j4.)
     ds. w3 (j30.)
     dl  w1  x1
     rl  w3  x2+6
     sz  w3   1
     cf  w1   0              ; w1=m
     sh  w1  13              ; if m>13 or
     sh  w1   0              ; m<=0 then
     jl. w3 (j18.)           ; alarm index <m>
     ac  w3  x1-24
     al  w0  -1
     ls  w0  x3
     rs. w0  a3.             ; a3: m ones, 24-m zeroes
     al  w3   1
     as  w3  x1
     al  w1  x3+1            ; w1:=2**m+1
     rl  w3  x2+12           ; take array
     rl  w0  x3
     ba  w3  x2+10
     wa  w0  x3
     wa. w0  a25.
     rs. w0  a0.             ; a0:=address R(0)
     ba. w0  a26.
     rs. w0  a1.             ; a1:=address R(1)
     rl  w0  x3-2            ; index check
     ws  w0  x3
     as  w0  -1
     sh  w0  x1              ;if not 2**m+1 elements
     jl. w3 (j18.)           ; alarm index <2**m+1>
     al  w1  x1-2            ; w1:=2**m-1
     rs. w1  a4.             ; a4:=2**m-1
     wa  w1   3              ; w1:=2*(2**m-1)
     wa. w1  a0.
     rs. w1  a2.             ; a2:=addr R(2**m-1)
     al  w1   1
b7:  rs. w1  a5.             ; a5:=l:=1
     rl. w3  a3.
b0:  ld  w2  -1
     al  w0  x2
     ld  w0   1
     sh  w3  -1
     jl.     b0.
     rl. w2  a5.             ; w3:=bitreverse(l); w2:=l
     sl  w2  x3              ; if l>=bitreverse(l) then
     jl.     b1.             ; no exchange
     ld  w3   1
     wa. w2  a0.
     wa. w3  a0.
     rl  w0  x3
     rx  w0  x2
     rs  w0  x3
b1:  rl. w1  a5.
     al  w1  x1+1
     sh. w1 (a4.)
     jl.     b7.
     al. w2  a22.
     al. w1  a23.
     ds. w2  a20.            ; init s2v addr, c2v addr
     al  w1   1
     al  w2   2
a26=k-1
     ds. w2  a5.             ; init p,q (1,1/2)
     al  w2   4
     al  w3   4              ; init pp (2)
b6:  ds. w3  a3.             ; store pp
     dl. w3  a0.             ; w2:=addr R(p),w3:=addr R(0)
b5:  rl  w1  x3              ; w1:=R(i)
     al  w0  x1              ; w0:=R(i)
     wa  w0  x2              ; w0:=R(i)+R(i+p)
     ws  w1  x2              ; w1:=R(i)-R(i+p)
     rs  w0  x3              ; R(i):=w0
     rs  w1  x2              ; R(i+p):=w1
     aa. w3  a3.             ; "i":="i"+pp, "i+p":="i+p"+pp
     sh. w2 (a2.)            ; if addr R(i+p)<addr R(2**m-1)
     jl.     b5.             ; then next step
     dl. w1 (a21.)
     ds. w1  a18.            ; a17 a18:=c2v
     dl. w1 (a20.)
     ds. w1  a16.            ; a15 a16:=s2v
     al  w2   2              ; n:=1
b3:  sl. w2 (a19.)           ; if n=q then
     jl.     b4.             ; then goto next l-step
     rs. w2  a4.             ; store n
     ac  w1  x2              ; w1:=-n
     aa. w2  a0.             ; a7:=addr R(p+n)
     ds. w2  a7.             ; a8:=addr R(p-n)
     wa. w1  a5.             ; a9:=addr R(p+n)
     wa. w2  a5.             ; a10:=addr R(p+p-n)
b2:  ds. w2  a9.             ; store addr R(i+p) R(j+p)
     rl  w1  x1
     ci  w1                  ; float R(i+p)
     ds. w1  a14.
     rl  w3  x2
     ci  w3                  ; float R(j+p)
     ds. w3  a12.
     fm. w3  a18.            ; w2w3:=R(i+p)*c
     fm. w1  a16.            ; w0w1:=R(j+p)*s
     fs  w3   3              ; w2w3:=re:=R(i+p)*c-R(j+p)*s
     cf  w3
     dl. w1  a14.
     rs. w3  a14.            ; a14:=re
     fm. w1  a18.            ; w0w1:=R(j+p)*c
     dl. w3  a12.
     fm. w3  a16.            ; w2w3:=R(i+p)*s
     fa  w3   3              ; w2w3:=im:=R(i+p)*s+R(j+p)*c
     cf  w3
     al  w0  x3
     ws. w0 (a8.)
     wa. w3 (a8.)
     rs. w0 (a9.)            ; R(i+p):=-R(j)+im
     rs. w3 (a10.)           ; R(j+p):=R(j)+im
     rl. w1  a14.
     ac  w0  x1
     wa. w0 (a7.)
     wa. w1 (a7.)
     rs. w0 (a8.)            ; R(j):=R(i)-re
     rs. w1 (a7.)            ; R(i):=R(i)+re
     dl. w2  a7.
     aa. w2  a3.
     ds. w2  a7.             ; "i":="i"+pp; "j":="j"+pp
     dl. w2  a9.
     aa. w2  a3.             ; "i+p":="i+p"+pp; "j+p":="j+p"+pp
     sh. w1 (a2.)            ; if addr R(j+p)<=addr R(2**m-1) then
     jl.     b2.             ; goto next step
     dl. w1  a16.
     fm. w1 (a20.)           ; w0w1:=s*s2v
     dl. w3  a18.
     fm. w3 (a21.)           ; w2w3:=c*c2v
     fs  w3   3
     rx. w3  a18.
     rx. w2  a17.             ; c:=c*c2v-s*s2v
     fm. w3 (a20.)            ; w2w3:=c*s2v
     dl. w1  a16.
     fm. w1 (a21.)           ; w0w1:=s*c2v
     fa  w3   3
     ds. w3  a16.            ; s:=c*s2v+s*c2v
     rl. w2  a4.
     al  w2  x2+2
     jl.     b3.
b4:  dl. w3  a20.
     aa. w3  a25.
     ds. w3  a20.            ; new addr s2v c2v
     rl. w1  a5.
     dl. w3  a3.
     ds. w2  a5.             ; new p,q
     ad  w3   1              ; new pp
     wa. w1  a1.
     rs. w1  a1.             ; new addr R(p)
     sh. w1 (a2.)            ; if addr R(p)<=addr R(2**m-1)
     jl.     b6.             ; then next step
     al  w0   0
     rl. w2  a0.
     wa. w2  a19.
     al  w2  x2-2             ; w2:=addr R(2**(m-1)-1)
     al  w3  x2+6             ; w3:=addr R(2**(m-1)+2)
b9:  rx  w0  x2
     rx  w0  x3
     aa. w3  a25.
     sl. w2 (a0.)             ; if w2>addr R(0) then
     jl.     b9.              ; next interchange
     al  w0   0
     rs  w0  x2               ; R(-1):=0
     rl. w3  a0.
b8:  dl  w2  x3
     ci  w1
     fm  w1   3
     ds. w1  a12.
     ci  w2
     fm  w2   5
     fa. w2  a12.
     ds  w2  x3
     al  w3  x3+4
     sh. w3 (a1.)             ; if w3<=addr R(2**m) then
     jl.     b8.              ; next convert
     jl.    (j8.)             ; exit

a1:     0   ; addr R(p)
a0:     0   ; addr R(0)
a2:     0   ; addr R(2**m-1)
a6:     0   ; pp
a3:     0   ; pp
a4:     0   ; n
a19:    0   ; q
a5:     0   ; p
a8:     0   ; addr R(j)
a7:     0   ; addr R(i)
a10:    0   ; addr R(j+p)
a9:     0   ; addr R(i+p)
a15:    0
a16:    0   ; s
a17:    0
a18:    0   ; c
a21:    0   ; addr c2v
a20:    0   ; addr s2v
a24:   -4
a25:    4
f.
      0.999999705792
      0.999998823456
      0.999995293760
      0.999981175328
      0.999924701856
      0.999698818720
      0.998795456192
      0.995184726720
a22:  0.980785280416
      0.923879532576
      0.707106781152
      0.382683432368
a23:  0.195090322008
      0.980171403296'-1
      0.490676743248'-1
      0.245412285224'-1
      0.122715382856'-1
      0.613588464896'-2
      0.306795676288'-2
      0.153398018624'-2
      0.766990318720'-3
w.
     0
     0
<:fftipow    <0>:>
e.


g0:
g1:    1
       0,0,0,0
       1<23+e1-e2
       1<18+26<12+13<6+0 ; procedure fftipow(m,R);
       0                 ; value m; integer m; array R;
       4<12+e0-e2
       1<12+0
n.
▶EOF◀