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

⟦bfb432115⟧ TextFile

    Length: 15360 (0x3c00)
    Types: TextFile
    Names: »tw3j«

Derivation

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

TextFile

(w3j=slang fpnames type.yes insertproc entry.no
w3j w3l)

;S.E.Harnung.
;
;real procedure w3j(j1,j2,j3,m1,m2,m3);
;parameters value,real
;
;real procedure w3l(l1,l2,l3,cs1,cs2,cs3);
;parameters value,integer
;
;
;b. h100 w.
;m. fpnames
;t.

b. c4,g1             ;block with names for tails and insertproc
k=0

s.                   ;start of slang segment
a2,b9,d4,e21,f8,g2,j41
h.
g0=0                 ;no externals
c0:
g1:  g2,g2           ;head word:
                     ;rel last point, rel last abs word

j0:  1<11 o. 1,0     ;segment table address of next segment
j4:  g0+4,0          ;RS: take expression
j6:  g0+6,0          ;RS: end register expression
j13: g0+13,0         ;RS: last used
j29: g0+29,0         ;RS: param alarm
j30: g0+30,0         ;RS: saved stack ref, saved w3
d0=k-c0
j40: 0,1             ;mode   ;sign of w3l
d1=k-c0
j41: 0,3             ;wrk loc
g2=k-2-g1            ;rel of last abs word;  no points

w.
c1:  g0,0            ;externals, own bytes to be initialized
18 11 76, 26 01 81   ;first date, date current version

a0:    3             ;mask
       0
a1:    2048          ;floating 0
a2:    0             ;wrk loc
       0
d2:    0             ;sum: addr of entry on next segment

c2:  al  w1  1       ;entry w3l: mode:=1
     jl.     e1.
c3:  al  w1  0       ;entry w3j: mode:=0
e1:  rs. w1 (j40.)   ;save mode
     rl. w2 (j13.)   ;get stack top
     ds. w3 (j30.)   ;saved stack ref, saved w3
     al  w3  8
     rs. w3 (j41.)   ;rel of formal2
e2:  sl  w3  29      ;for w3:=8 step 4 until 28 do
     jl.     e3.     ;get actual param
     am      x3
     dl  w1  x2      ;get formals
     so  w0  16      ;if expr
     jl. w3 (j4.)    ;then take expr
     ds. w3 (j30.)   ;save return
     rl  w1  x1      ;get value
     rs. w1  d2.     ;save value for test
     rl. w3 (j41.)
     al  w3  x3+4
     as  w3  -1      ;w3:=(w3+4)//2
     am      x3
     rs  w1  x2      ;store param in stack
     as  w3  1
     rs. w3 (j41.)
     jl.     e2.     ;end reading of param

e3:  al  w2  x2+6    ;w2 points to stackbyte(6)
     rl. w3 (j40.)
     sn  w3  0       ;if mode=0
     jl.     e9.     ;then w3j else w3l
     al  w3  0
     rs. w3 (j40.)   ;j40 points to exp of (-1)  ;exp:=0
e4:  rl  w0  x2+10
     sh  w0  -1
     ac  w0 (0)      ;w0:=abs cs3
     am      x3      ;if w3=0 then w1:=cs1
     rl  w1  x2+6    ;else if w3=2 then w1:=cs2
     sh  w1  -1
     ac  w1  x1      ;w1:=abs cs1 (abs cs2)
     sl  w0  x1      ;if abs cs3<abs cs1 (abs cs2)
     jl.     e5.     ;then permute
     rl  w0  x2+4    ;w0:=l3
     am      x3
     rl  w1  x2      ;w1:=l1 (l2)
     am      x3
     rs  w0  x2      ;l1 (l2) :=l3
     rs  w1  x2+4    ;l3:=l1 (l2)
     rl  w0  x2+10   ;w0:=cs3
     am      x3
     rl  w1  x2+6    ;w1:=cs1 (cs2)
     am      x3
     rs  w0  x2+6    ;cs1 (cs2) :=cs3
     rs  w1  x2+10   ;cs3:=cs1 (cs2)
     rl. w1 (j40.)
     al  w1  x1+1
     rs. w1 (j40.)   ;exp:=exp+1
e5:  se  w3  0
     jl.     e6.
     al  w3  2
     jl.     e4.     ;end permutation

e6:  rl. w3 (j40.)   ;w3l phase:  exp>=0
     rl  w1  x2
     wa  w1  x2+2
     wa  w1  x2+4    ;w1:=2*(l1+l2+l3)
     so  w1  2       ;if  l1+l2+l3 even
     al  w3  0       ;then exp:=0
     rl  w0  x2+4
     ws  w0  x2+10
     as  w0  -1
     wa  w3  0       ;exp:=exp+l3-cs3
     as  w1  -1
     ws  w1  x2+4    ;w1:=l1+l2-l3+
     rl  w0  x2+6
     sh  w0  -1
     am      1
     al  w1  x1      ;+(if cs1<0 then 1 else 0)
     rl  w0  x2+8
     sh  w0  -1
     am      1
     al  w1  x1      ;+(if cs2<0 then 1 else 0)
     rl  w0  x2+10
     sh  w0  -1
     am      -1
     al  w1  x1      ;-(if cs3<0 then 1 else 0)
     sh  w1  -1
     ac  w1  x1      ;w1:=abs w1
     la. w1  a0.     ;w1:=w1 mod 4  (clearbit 0-21)
     sz  w1  1       ;if w1=1 or w1=3
     jl.     e7.     ;then endproc
     sn  w1  2       ;if w1=2
     al  w3  x3+1    ;then exp:=exp+1
     al  w1  -1
     sz  w3  1       ;if exp odd
     rs. w1 (j40.)   ;then sign:=-1
     al  w1  1
     so  w3  1       ;else
     rs. w1 (j40.)   ;sign:=+1
     rl  w3  x2+6
     sh  w3  -1
     ac  w3  x3
     rs  w3  x2+6    ;m1:=+abs cs1
     rl  w3  x2+8
     sh  w3  -1
     ac  w3  x3
     rs  w3  x2+8    ;m2:=+abs cs2
     rl  w3  x2+10
     sl  w3  1
     ac  w3  x3
     rs  w3  x2+10   ;m3:=-abs cs3
     jl.     e9.     ;end phase of w3l

e7:  dl. w1  a1.     ;w3j:=w3l:=0
d4=k-c0
e8:  jl.    (j6.)    ;end reg expr

e9:  al  w3  0       ;test of j and m in w3j
e10: sl  w3  5       ;for w3:=0,2,4 do
     jl.     e11.    ;if j<abs m or j<0 then param alarm
     am      x3
     rl  w0  x2      ;w0:=2*j
     sh  w0  -1      ;if 2*j<0
     jl. w3 (j29.)   ;then paramalarm
     am      x3
     rl  w1  x2+6    ;w1:=2*m
     sh  w1  -1
     ac  w1  x1      ;w1:=abs 2*m
     ws  w0  2       ;w0:=2*j-abs 2*m
     sl  w0  0       ;if 2*j<abs 2*m
     sz  w0  1       ;or 2*j-abs 2*m odd
     jl. w3 (j29.)   ;then paramalarm
     al  w3  x3+2
     jl.     e10.    ;end test

e11: rl  w3  x2+6    ;symmetry conditions
     wa  w3  x2+8
     wa  w3  x2+10
     se  w3  0       ;if 2*(m1+m2+m3)<>0
     jl.     e7.     ;then endproc
     rl  w3  x2
     wa  w3  x2+2
     wa  w3  x2+4
     sz  w3  1       ;if 2*(j1+j2+j3) odd
     jl.     e7.     ;then endproc
     as  w3  -1
     sl  w3  52      ;if (j1+j2+j3+1)>50
     jl. w3 (j29.)   ;then paramalarm
     ws  w3  x2+4
     rs. w3  a2.
     rs  w3  x2+22   ;up:=(a2):=j1+j2-j3
     sh  w3  -1      ;if (j1+j2-j3)<0
     jl.     e7.     ;then endproc
     rl  w3  x2+2
     wa  w3  x2+4
     ws  w3  x2
     sh  w3  -1      ;if 2*(j2+j3-j1)<0
     jl.     e7.     ;then endproc
     rl  w3  x2+4
     wa  w3  x2
     ws  w3  x2+2
     sh  w3  -1      ;if 2*(j3+j1-j2)<0
     jl.     e7.     ;then endproc  ;end symmetry

     al  w3  0       ;determination of limits of the sum
     rs  w3  x2+20   ;low:=0
     rl  w3  x2+2
     ws  w3  x2+4
     ws  w3  x2+6
     as  w3  -1
     rs  w3  x2+12   ;store -j3+j2-m1
     sl  w3  1       ;if w3>0
     rs  w3  x2+20   ;then low:=-j3+j2-m1
     rl  w3  x2
     wa  w3  x2+8
     ws  w3  x2+4
     as  w3  -1
     rs  w3  x2+14   ;store -j3+j1+m2
     sl  w3 (x2+20)  ;if w3>low
     rs  w3  x2+20   ;then low:=-j3+j1+m2
     rl  w3  x2
     ws  w3  x2+6
     as  w3  -1
     rs  w3  x2+16   ;store j1-m1
     sh  w3 (x2+22)  ;if w3<up
     rs  w3  x2+22   ;then up:=j1-m1
     rl  w3  x2+2
     wa  w3  x2+8
     as  w3  -1
     rs  w3  x2+18   ;store j2+m2
     sh  w3 (x2+22)  ;if w3<up
     rs  w3  x2+22   ;then up:=j2+m2
     rl  w3  x2+22
     ws  w3  x2+20
     sh  w3  -1      ;if (up-low)<0
     jl.     e7.     ;then endproc  ;end limits

     rl. w3 (j0.)    ;w3:=segment table addr(next segment)
     al. w1  g1.     ;w1:=segment table addr(this segment)
     rs  w1  x3+f0   ;save it on next segment
     rs  w2  x3+f1   ;save w2 on next segment
     al  w1  x3+f3   ;calculation of the sum:  entry
     rs. w1  d2.     ;save it on this segment
     rl. w1  a2.
     rs  w1  x3+f2   ;save j1+j2-j3 on next segment

                     ;calculation of the sum
     dl. w1  a1.     ;w0w1:=0
     ds  w1  x3+f8   ;sum:=0
     rl  w3  x2+20   ;w3:=r:=low
d3=k-c0
     rl  w2  x2+22   ;w2:=up
     sl  w2  x3      ;for r:=low step 1 until up do
     jl.    (d2.)    ;goto f3
     sn  w0  0       ;if sum=0
     jl.     e8.     ;then endproc
     rl. w2 (j0.)
     rl  w2  x2+f1
     rl  w3  x2      ;else calculate phase
     ws  w3  x2+2
     ws  w3  x2+10   ;w2:=2*(j1-j2-m3)
     so  w3  2       ;if phase=+1
     al  w2  1       ;then 1*
     sz  w3  2       ;else
     al  w2  -1      ;(-1)*
     al  w3  x2
     rl. w2 (j0.)
     jl      x2+f4   ;goto f4

m.end segment 1
h.   0,r.(:504-k:)       ;fill
w.   <:w3j  segm 1<0>:>   ;alarmtxt


                     ;segment 2:
c4:  0               ;head word: no abs words, no points
f0=k-c4, b0: 0       ;segment table addr(previous segment)
f1=k-c4, b1: 0       ;abs addr of stackbyte(6)
f2=k-c4, b2: 0       ;wrk loc

;calculation of sqrt(r), where
;r=s*2**t,   0.5<=s<1,   -2048<=t<=2047:
;s1:=2.5764869 - 5.0350099/(s + 2.1938165)
;s2:=(s1 + s/s1)/2
;s3:=(s2 + s/s2)/2
;sqrt(r):=s3*2**(t//2)*(if t odd then sqrt(2) else 1)
                     ;fixed binary fractions:
b3:  8.2143 1676     ;  c/4   =  2.1938165/4
b4:  8.6573 4114     ;  b/16  = -5.0350099/16
b5:  8.1116 2452     ;a/2 - 1 =  2.5764869/2 - 1
     8.2650 1171
b6:  8.4640 0001     ;floating sqrt(2)
b7:  8.3777 7777     ;2**23-1 = 8388607
             0
f8=k-c4, b8: 0       ;w3j: sum
             0
b9:          0       ;w3j: term

f3=k-c4
     dl. w1  e21.    ;1
     al  w2  x3      ;current r is kept in w3
     as  w2  2       ;addr of r! rel to 0!
     fd. w1  x2+e21. ;/r!
     rl. w2  b2.
     ws  w2  6
     as  w2  2
     fd. w1  x2+e21. ;/(j1+j2-j3-r)!
     am.    (b1.)
     rl  w2  16
     ws  w2  6
     as  w2  2
     fd. w1  x2+e21. ;/(j1-m1-r)!
     am.    (b1.)
     rl  w2  18
     ws  w2  6
     as  w2  2
     fd. w1  x2+e21. ;/(j2+m2-r)!
     al  w2  x3
     am.    (b1.)
     ws  w2  12
     as  w2  2
     fd. w1  x2+e21. ;/(j3-j2+m1+r)!
     al  w2  x3
     am.    (b1.)
     ws  w2  14
     as  w2  2
     fd. w1  x2+e21. ;/(j3-j1-m2+r)!
     rl. w2  b1.
     ds. w1  b9.     ;(b9):=term
     dl. w1  b8.     ;w0w1:=sum
     so  w3  1       ;if r even
     fa. w1  b9.     ;then add
     sz  w3  1       ;else
     fs. w1  b9.     ;subtract
     ds. w1  b8.     ;(b8):=sum:=sum+(signed term)
     al  w3  x3+1    ;r:=r+1
     am.    (b0.)
     jl      d3      ;goto d3

f4=k-c4
     ci  w3  0
     fm  w1  6
     ds. w1  b8.     ;(b8):=final sum, w3j
     am.    (b0.)
     rl  w3 (d0)
     sn  w3  0       ;if -,w3l
     jl.     e19.    ;then continue
     ci  w3  0       ;else adjust phase
     fm  w1  6
     ds. w1  b8.     ;(b8):=final sum, w3l

e19: rl. w3  b1.     ;calculation of arg of sqrt
     rl. w2  b2.
     as  w2  2
     dl. w1  x2+e21. ;(j1+j2-j3)!
     rl. w2  b2.
     wa  w2  x3+4
     rs. w2  b2.     ;(b2):=j1+j2+j3
     ws  w2  x3
     as  w2  2
     fm. w1  x2+e21. ;*(-j1+j2+j3)!
     rl. w2  b2.
     ws  w2  x3+2
     as  w2  2
     fm. w1  x2+e21. ;*(j1-j2+j3)!
     rl. w2  b2.
     al  w2  x2+1
     as  w2  2
     fd. w1  x2+e21. ;/(j1+j2+j3+1)!
     rl  w2  x3+16
     wa  w2  x3+6
     as  w2  2
     fm. w1  x2+e21. ;*(j1+m1)!
     rl  w2  x3+16
     as  w2  2
     fm. w1  x2+e21. ;*(j1-m1)!
     rl  w2  x3+18
     as  w2  2
     fm. w1  x2+e21. ;*(j2+m2)!
     rl  w2  x3+18
     ws  w2  x3+8
     as  w2  2
     fm. w1  x2+e21. ;*(j2-m2)!
     rl  w2  x3+4
     wa  w2  x3+10
     as  w2  1
     fm. w1  x2+e21. ;*(j3+m3)!
     rl  w2  x3+4
     ws  w2  x3+10
     as  w2  1
     fm. w1  x2+e21. ;*(j3-m3)!  ;w0w1:=arg of sqrt

                     ;sqrt(w0w1):
     rl  w3  0       ;1. iteration:  w3:=two bytes of s
     as  w3  -2      ;s:=s/4
     rs. w3  b2.     ;(b2):=s/4
     wa. w3  b3.     ;w3:=s/4 + c/4
     rl. w2  b4.     ;w2:=b/16
     wd  w3  6       ;w3:=b/2/(s+c)
     la. w3  b7.     ;remove signbit of w3
     wa. w3  b5.     ;s1/2:=w3:=a+b/(s+c)
     rl. w2  b2.     ;2. iteration:  w2:=s/4
     rs. w3  b2.     ;(b2):=s1/2
     wd  w3  6       ;w3:=s/s1
     as  w3  -1      ;w3:=s/s1/2
     wa. w3  b2.     ;s2:=w3:=(s1+s/s1)/2
     al  w2  x3      ;3. iteration:  w2:=s2
     bl  w3  3       ;w3:=t
     as  w3  -1      ;w3:=t//2
     sz  w1  1       ;if t odd
     fm. w3  b6.     ;then w2w3:=w2w3*sqrt(2)
     fd  w1  6       ;w0w1:=s/s2
     fa  w1  6       ;w0w1:=s/s2+s2
     bl  w2  3       ;w2:=two-exp of w0w1
     al  w2  x2-1    ;w2:=two-exp - 1
     hl  w1  5       ;w0w1:=w0w1/2:=sqrt(r)

     rl. w2  b1.
     am.    (b0.)
     rl  w3 (d0)
     sn  w3  0       ;if -,w3l then
     jl.     e20.    ;endproc
     rl  w3  x2+6
     sn  w3  0       ;if cs1<>0
     jl.     e20.
     rl  w3  x2+8    ;and cs2<>0
     sn  w3  0       ;then
     jl.     e20.
     fd. w1  b6.     ;w3l:=w3l/sqrt(2)

e20: fm. w1  b8.
     am.    (b0.)
     jl      d4      ;endproc

     1024<12         ;table of factorials:
e21: 1               ;0!
     8.2000 0000
     8.0000 0001     ;1!
     8.2000 0000
     8.0000 0002     ;2!
     8.3000 0000
     8.0000 0003     ;3!
     8.3000 0000
     8.0000 0005     ;4!
     8.3600 0000
     8.0000 0007     ;5!
     8.2640 0000
     8.0000 0012     ;6!
     8.2354 0000
     8.0000 0015     ;7!
     8.2354 0000
     8.0000 0020     ;8!
     8.2611 4000
     8.0000 0023     ;9!
     8.3353 7000
     8.0000 0026     ;10!
     8.2302 1240
     8.0000 0032     ;11!
     8.3443 1760
     8.0000 0035     ;12!
     8.2714 5063
     8.0000 0041     ;13!
     8.2423 0354
     8.5000 0045     ;14!
     8.2301 6735
     8.6540 0051     ;15!
     8.2301 6735
     8.6540 0055     ;16!
     8.2415 7673
     8.5466 0061     ;17!
     8.2657 5663
     8.1235 0065     ;18!
     8.3300 5344
     8.6032 0071     ;19!
     8.2070 3316
     8.7620 0076     ;20!
     8.2612 0357
     8.5155 0102     ;21!
     8.3635 6511
     8.4126 0106     ;22!
     8.2571 3414
     8.6576 0113     ;23!
     8.2033 0511
     8.5037 0120     ;24!
     8.3152 2403
     8.0320 0124     ;25!
     8.2466 3022
     8.3651 0131     ;26!
     8.2145 7037
     8.4567 0136     ;27!
     8.3662 2267
     8.2220 0142     ;28!
     8.3371 4506
     8.0643 0147     ;29!
     8.3211 7661
     8.5611 0154     ;30!
     8.3125 5264
     8.1255 0161     ;31!
     8.3125 5264
     8.1255 0166     ;32!
     8.3210 2611
     8.6302 0173     ;33!
     8.3360 6742
     8.3216 0200     ;34!
     8.3627 3457
     8.5053 0205     ;35!
     8.2105 1412
     8.6270 0213     ;36!
     8.2360 0004
     8.3665 0220     ;37!
     8.2735 0005
     8.2447 0225     ;38!
     8.3445 2606
     8.3710 0232     ;39!
     8.2167 2564
     8.0335 0240     ;40!
     8.2670 7174
     8.5433 0245     ;41!
     8.3602 5403
     8.5223 0252     ;42!
     8.2413 6346
     8.3533 0260     ;43!
     8.3360 1674
     8.7035 0265     ;44!
     8.2340 7240
     8.6354 0273     ;45!
     8.3403 2407
     8.1223 0300     ;46!
     8.2446 3361
     8.2044 0306     ;47!
     8.3671 5151
     8.7066 0313     ;48!
     8.2752 1071
     8.0441 0321     ;49!
     8.2236 7274
     8.4542 0327     ;50!

m.end segment 2
h.  0,r.(:1016-k:)
w.  <:w3j  segm 2<0>:>
e.                     ;end slang segment

w.g0:                  ;tail w3j
    2                  ;size of area
    0,0,0,0
    1<23+c3-c0         ;entry point on the first segment
    4<18+13<12+13<6+13 ;real proc, value m3,m2,m1
    13<18+13<12+13<6   ;value j3,j2,j1; integer j1,j2,j3,m1,m2,m3
    4<12+c1-c0         ;code proc, start of external list
    2<12+4             ;two code segments, 4 own bytes

g1:                    ;tail w3l
    1<23+4             ;mode=bs
    0,0,0,0
    1<23+c2-c0         ;entry point
    4<18+13<12+13<6+13 ;real proc, value cs3,cs2,cs1
    13<18+13<12+13<6   ;value l3,l2,l1; integer l1,l2,l3,cs1,cs2,cs3
    4<12+c1-c0         ;code proc, start of externallist
    2<12+4             ;two code segments, 4 own bytes

n.                     ;load insertproc
;e.e.                  ;end block, end fpnames\f


▶EOF◀