|
|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 7680 (0x1e00)
Types: TextFile
Names: »tfftir«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
└─⟦b2ec5d50f⟧
└─⟦09b4e9619⟧ »thcømat«
└─⟦this⟧
message fftir
(fftir=slang fpnames type.yes insertproc entry.no
fftir)
; 8-10-74 19-2-79 ojh/rm
; fouriertransform 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)
j29: g0+29,0 ; param alarm
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 1 ; m<=1 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
bz w3 x2+11 ; check array
sh w3 19 ; integer or real
sh w3 17
jl. w3 (j29.)
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
am. (a0.)
rs w0 -2 ; R(2**(m-1)):=0
rl. w2 a0.
al w3 x2-2 ; w3:=addr R(-1)
wa. w2 a19. ; w2:=2**(m-2)
b9: rx w0 x2 ; R(w2):=R(w2+2)
al w2 x2-2
sl w2 x3 ; if addr R(w2)<-1 then
jl. b9. ; goto next
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
h.
0,r.(:10504-k:)
w.
<:fftir <0>:>
e.
g0:
g1: 1
0,0,0,0
1<23+e1-e2
1<18+41<12+13<6+0 ; procedure fftir(m,R);
0 ; value m; integer m;
4<12+e0-e2 ; integer or real array
1<12+0
n.
▶EOF◀