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

⟦9a6518502⟧ TextFile

    Length: 14592 (0x3900)
    Types: TextFile
    Names: »tdecomposef«

Derivation

└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
    └─⟦b2ec5d50f⟧ 
        └─⟦this⟧ »tdecomposef« 

TextFile


b. g1,e10
; <*** special version of decompose, solve where fielding is allowed ***>
s. a14,b70,c40,d10
k=10000
h.
a9:        a10 , a10   ; last abs-word
a0:          4 ,   0   ; take expression
a1:          6 ,   0   ; end reg.expression
a8:          8 ,   0   ; end addr.expression
a2:         13 ,   0   ; last used
a4:         30 ,   0   ; saved sref,w3
a5:     1<11+1 ,   0   ; segm.table address(next segm.)

a10=a5-a9              ; define rel. last abs-word


       0 ,       0     ; constants and working locations
       0 , c11:-2048   ; real 0
       0 ,       0     ;
       0 , c12:  0     ; max
    1<10 ,       0     ;
       0 , c15:  0     ; real 0.5
       0 ,       0     ;
       0 , c16:  0     ; work.loc.

w.
c18:   0               ; addr(addr-increment)
c19:   0               ; addr(entry inner-product)
c2:    0               ; n
c1:    0               ; addr(piv(1))
c4:    0               ; addr(ex(1))
c9:    0               ; addr(a(k+1,1))
c8:    0               ; k
c17:   0               ; dec:p,solve:4*n
c7:    0               ; dec: j,addr(a(k,k))

e3:    0               ; external list
       0
  310869
    1516

e1:  am             -6 ; entry decompose : w1:=-2
e2:  al   w1         4 ; entry solve: w1:=4
     rl.  w2     (a2.) ; w2:=last used
     ds.  w3     (a4.) ; save w2w3
     rl   w0   x2  +14 ;
     rx   w1   x2  +16 ; w0w1:=formal(mode); 2. formal:=entry
     so   w0        16 ; if expression
     jl.  w3     (a0.) ;  then take expression
     dl   w1   x1      ; w0w1:=mode
     rl   w3   x2  +14 ; w3:=first formal(mode)
     sz   w3         1 ; if real
     cf   w1         0 ;  then convert
     ds.  w3     (a4.) ; save w2w3

     rl.  w3     (a5.) ; w3:=segment table location
     al   w0         4 ;
     rs   w0   x3  +d1 ; first addr-incr.:=4; second segment in core
     se   w1         0 ;
     am             d2 ; mode=1 => rel.addr(inner-pr.):=d2+d3
     al   w0   x3  +d3 ; mode=0 => rel.addr(inner-pr.):=d3
     al   w3   x3  +d4 ; w3:=addr(addr-increment)
     ds.  w0      c19. ; store w3w0
     al   w3   x3  +d0 ;
     rs.  w3       c7. ; store addr(array-transformation)

     sl   w1         0 ; if mode<0
     sl   w1         2 ; or mode>1
     jl.          b33. ;  then fejl 3

     dl   w1   x2  +12 ; w0w1:=formal(piv)
     jl  w3   x3      ; transform(piv)
     as   w0         -1 ; w0:=length in words
     rs.  w0        c2. ; store n
     al   w3    x3     +1 ; w3:=addr(piv(1))
     wa   w0          6 ; w0:=addr(ex(1))
     ds.  w0        c4. ; store addr


     dl   w1   x2   +8 ; w0w1:=formal(a)
     jl.  w3      (c7.); transform a
     al   w3   x3   +4 ; w3:=addr(a(x,y)) (last byte)
                       ; <* fielding allowed *>
     ds.  w0       c8. ; c8:=length; c9:=addr(a(1,1))
     rl.  w0       c2. ; w0:=n
     as   w0         2 ; w0:=4*n
     rs.  w0    (c18.) ; second addr-increment:=4*n
     wm.  w0      c2.  ; w0:=4*n**2
     rs.  w0      c8.  ; c8:=4*n**2;

     dl.  w1    (c18.) ; w0w1:=4,4*n
     se   w0  (x2  +16) ; if entry<>4
     jl.           b0. ;  then go to decompose

     rs.  w0    (c18.) ; address-increment:=4,4          SOLVE
     rs.  w1       c17. ; store 4*n
     dl   w1   x2  +20 ; w0w1:=formal(b)
     jl.  w3      (c7.) ; transform b
     se.  w0     (c17.) ; if length<>4*n
     jl.          b34. ;  then fejl 4
     al   w2   x3   +4 ; w2:=addr(b(1))
     rl.  w3       c9. ; w3:=addr(a(1,1))
     ds.  w3      b29. ; store addr
     al   w0         0 ; k:=0

b20: rs.  w0       c8. ; store k              L*y=b
     wa.  w0       c1. ;
     bl   w1       (0) ; w1:=piv(k)
     sl.  w1     (c8.) ;
     sl.  w1     (c2.) ; if p<k or p>n-1
     jl.          b32. ;  then fejl 2
     as   w1         2 ; w1:=4*p
     wa.  w1      b28. ; w1:=addr(b(p))
     dl   w0   x2      ; w3w0:=b(k)
     rx   w0   x1      ;
     rx   w3   x1   -2 ; w3w0:=b(p); b(p):=b(k)
     ds   w0   x2      ; b(k):=b(p)
     jl.  w3    (c19.) ; w0w1:=b(k)-S(b(i)*a(k,i)) i:=1,2,..,k-1
b28: 0                 ; addr(b(1))
b29: 0                 ; addr(a(k,1))
     fd   w1   x3      ; w0w1:=w0w1/a(k,k)
     ds   w1   x2      ; b(k):=w0w1
     ds.  w3     b25. ;
     dl.  w1      c17. ; w0:=k; w1:=4*n
     wa.  w1      b29. ; adjust addr(a(k,1))
     rs.  w1      b29. ;
     ba.  w0         1 ; w0:=k+1
     al   w2   x2   +4 ;
     se.  w0     (c2.) ; if w2<n
     jl.          b20. ;  then continue

     ld   w1        48 ; w0w1:=0
     ss.  w1    (c18.) ; w1:=-5;w1:=-4
     ds.  w1    (c18.) ; store addr-increment

b23: al   w2   x2   -4 ;
     jl.  w3    (c19.) ; w0w1:=b(k)-S(b(i)*a(k,i)) i:=n,n-1,..,k+1
b24: 0                 ; addr(b(n))
b25: 0                 ; addr(a(k,n))
     ds   w1   x2      ; b(k):=w0w1
     sn.  w2    (b28.) ; if k=1
     jl.         (a8.) ;  then exit
     rl.  w1      b25. ;
     ws.  w1      c17. ;
     rs.  w1      b25. ; adjust addr(a(k,n))
     jl.          b23. ; continue

b0:  rl.  w0     c9. ;                                   Decompose
     al   w1    0     ; i:=0                         MAXEXP
     rl   w2    0     ; w2:=addr(aÆ1,1)
 b2: wa.  w0   (c18.)  ; w0:=addr(a(k+1,1))
     al   w3  -2048   ; maxexp:=-2048
 b1: bs   w3    x2    ; maxexp-akt
     sh   w3    -1
     al   w3    0     ; max<akt : nulstil
     ba   w3    x2    ; add akt
     al   w2   x2+4   ; øg addr(akt)
     se   w0    x2    ; række ikke slut
     jl.        b1.   ; => continue
     am.       (c4.)
     hs   w3    x1    ; ex(i):=maxexp
     al   w1   x1+1   ; i:=i+1
     se.  w1   (c2.)  ; i<n
     jl.        b2.    ; => continue

     al   w1      0   ; k:=0                         INIT. K-STEP
     rl.  w2     c9.  ; w2:=w3:=
     al   w3     x2   ; addr(aÆ1,1)

 b11:ds.  w3     b4.  ; store addr(a(1,k)), addr(a(k,1))
     rl   w0      4   ;
     ds.  w0     b8.  ;
     wa.  w0   (c18.) ;
     ds.  w1     c8.  ; store addr(a(k+1,1)),k
     al   w3   x1      ;
     as   w3          2 ;
     wa   w2          6 ;
     dl.  w0     c11. ;
     ds.  w0    c12.  ; max:=0

 b5: rs.  w1     c7.  ; store j (init k)            Lower 
     am.        (c4.) ;
     bl   w1      x1  ; w1:=ex(j)
     hs.  w1     c15. ; sæt exp
     jl.  w3   (c19.) ; w0w1:=a(j,k)-S(a(j,i)*a(i,k)) i:=1,2,...,k-1
     0                 ;
 b4: 0                 ;
     ds   w1   x2      ; store w0w1
     rx.  w3       c7. ; w3:=j; c7:=addr(a(k,k))
     sl   w0      0   ;
     jl.         b9.  ; w0w10 => hop
     dl.  w1    c11.  ;
     fs   w1     x2   ; w0w1:=abs(a(j,k))
 b9: fd.  w1    c15.  ; w0w1:=abs(a(j,k))/2**ex(j)-1)
     ds.  w1    c16.  ;
     fs.  w1    c12.  ; w0w1:=akt-max
     sh   w0     0    ;
     jl.         b3.  ; akt=<max => hop
     dl.  w1    c16.  ;
     ds.  w1    c12.  ; max:= akt
     rs.  w3    c17.  ; p:=j
 b3: wa.  w2   (c18.) ; 
     rl.  w1    b4.-2 ;
     wa.  w1   (c18.) ;
     rs.  w1    b4.-2 ;
     al   w1    x3+1  ; w1:=j+1
     se.  w1    (c2.) ;
     jl.         b5.  ; j<n => hop

     dl.  w2     c12. ; w1w2:=max
     se   w1        0 ; if max=0 then
     jl.b13. ; begin value:=false
     hs.  w2    (c1.) ; piv(1):=-2048;
     jl.        (a1.) ; exit end;
b13: dl.  w2     c17.  ; w1:=k; w2:=p
     am.        (c1.) ;
     hs   w2     x1   ; piv(k):=p
     sn   w2     x1   ;
     jl.        b6.   ; p=k => ikke ombyt

     am.        (c4.) ;                            OMBYT
     bl   w0    x1    ; w0:=EÆk
     am.        (c4.) ;
     hs   w0    x2    ; EÆp:=EÆk
     ws   w2      2   ; w2:=p-k
     wm.  w2   (c18.) ; w2:=4*n*(p-k)
     rl.  w1    b8.   ; w2:=dddr(aÆk,1)
     wa   w2      2   ; w2:=addr(aÆp,1)
 b7: dl   w0     x2   ;
     rx   w0     x1   ;
     rx   w3   x1-2   ;
     ds   w0    x2    ; ombyt
     al   w1    x1+4  ;
     al   w2    x2+4  ;
     se.  w1   (c9.)  ; addr(a(k,i))<>addr(a(k+1,1))
     jl.         b7.  ; => continue

 b6: dl.  w1   (c18.)  ;
     rx   w1        0  ;
     ds.  w1   (c18.)  ;
     rl.  w2    c7.   ; w2:=addr(a(k,k))

 b10:al   w2   x2+4   ; w2:=addr(aÆj,k) 
     am.       (b12.) ;
     al   w1     4    ;
     rs.  w1    b12.  ; w1:=addr(aÆ1,j)
     sn.  w2   (c9.)  ; w2=addr(aÆk+1,1)
     jl.        b14.  ; => end upper
     jl.  w3   (c19.)  ; w0w1:=a(k,j)-S(a(i,j)*a(k,i)); i:=1,2,...,k-1
 b12:0                ; addr(a(1,j))
 b8: 0                ; addr(a(k,1))
     fd   w1   x3     ; w0w1:=w0w1/a(k,k)
     ds   w1    x2    ; a(k,j):=w0w1
     jl.         b10. ;

 b14:dl.  w0   (c18.)  ;
     rx   w3        0  ;
     ds.  w0   (c18.)  ;
     wa.  w3      b4. ;
     rl.  w1     c8.  ;
     al   w1    x1+1  ; w1:=k+1
     se.  w1    (c2.) ;
     jl.         b11. ; k<n => forfra

     al   w1       -1 ; value:=true
     jl.         (a1.) ; exit
b34: am           1 ; fejl 4
b33: am           1 ; fejl 3
b32: am           1 ; fejl 2
b31: al   w1      1 ; fejl 1
     dl.  w3  (a4.) ;
     am.      (c18.) ;
     jl        d5 ;

     0,r. 253+a9>1-k>1 ; fill with zeroes

     <:lin. eq. 1:>



; second segment

h.
b41:   a11 ,  a11       ; rel addr last abs word
a12:   21  ,  0         ; general alarm
a13:   22  ,  0         ; overflow

a11=a13-b41             ; define last abs-word

w.                      ; constants and working locations
       0               ; save w2
b43:   0               ; save w3
       0               ;
b40:   0               ; addr.-increment
       0               ;
b36:   0               ; sum
b49:   -1<12
b47:   0               ; exponent
       0
       0
b58:   1<10
b59:   2048
f.
b37:   0               ; real 0
b45:   0               ; save actual addresses
b46:   0
b48:  -1
b65:  '600
      '-600

w.


b44: rs.  w3     b36.
     rl   w3   x1
     ba   w1      0
     rl   w0   x1   -2
     ws   w0   x1
;    wa   w3   x1
; <* in this comal version fielding is allowed *>
     jl.          (b36.)

b30: am     (x2+16)
     al.  w0     b64. ;
     jl.  w3  (a12.) ;


b42: ds.  w3       b43. ; inner-produre(mode=0) : save 2w3
     dl   w3   x3   +2  ; w2w3:=start-addr
     dl.  w1       b37. ; w0w1:=0

b38: ds.  w1       b36. ;
     dl   w1   x2       ; w0w1:=l
     sn.  w2   (b43.-2) ; if addr(l)=slutaddr(l)
     jl.           b39. ;  then go to slut
     fm   w1   x3       ; w0w1:=l*m
     fa.  w1       b36. ; w0w1:=sum+l*m
     aa.  w3       b40. ; add addr-increments
     jl.           b38. ; continue

b39: fs.  w1       b36. ; slut: w0w1:=l
     am.         (b43.) ;
     jl               4 ; return

d0=b44-b40, d1=b40-b41-2, d2=k-b42, d3=b42-b41, d4=b40-b41 , d5=b30-b40

     ds.  w3      b43. ; inner-product(mode=1) : save w2w3
     dl   w3   x3   +2 ; w2w3:=start-addr.
     ld   w1        48 ; w0w1:= long 0
     ds.  w1      b36. ; sum:=0

b50: ds.  w3      b45. ; save addr
     sn.  w2  (b43.-2) ;
     al.  w3    b48.+1 ; if w2=slut-addr then w3:=addr(-1)
     dl   w1   x2      ; w0w1:=l
     la.  w1      b49. ; exponent:=0
     ad   w1        -1 ;
     ls   w1        -1 ;
     dl   w3   x3      ;
     hs.  w3    b47.+2 ; store exponent(m)
     la.  w3      b49. ; exponent:=0
     ad   w3        -1 ;
     ls   w3        -1 ;
     ds.  w2      b46. ; save l2,m1
     wm   w2         0 ; w1w2:=l1*m1
     sn   w1         0 ; if l*m=0 
     jl.          b52. ;  then goto next
     wm   w0         6 ; w0w3:=l1*m2
     rx.  w1    b46.-2 ;
     rx.  w2      b46. ;
     wm   w2         2 ; w1w2:=l2*m1
     aa   w2         0 ; w1w2:=l1*m2+l2*m1
     ad   w2       -23 ;
     aa.  w2      b46. ; w1w2:=l1*m1+(l1*m2+l2*m1)*2**(-23)

     bl.  w3  (b45.-2) ;
     ba.  w3    b47.+2 ; w3:=exponent(l)+exponent(m)
     rl.  w0    b36.-2 ;
     sn   w0         0 ; if sum=0
     jl.          b51. ;  then   goto store
     sl.  w3    (b47.) ; if w3>4exponent
     jl.          b55. ;  then goto big_exp
b57: ws.  w3      b47. ; w3:=w3-exponent
     sh   w3       -48 ; if expdiff<= -48
     jl.         b52. ; then goto store
     ad   w2   x3      ; shift product
     rl.  w3      b47. ; w3:=exponent
b56: aa.  w2      b36. ; add sum

b51: nd   w2         1 ; store:
     ad   w2        -1 ; w1w2:=sum normalized shift(-1)
     ba   w3         1 ;
     al   w3   x3   +1 ; exponent:=exponent+norm_exp+1
     ds.  w2      b36. ; store sum
     rs.  w3      b47. ; store exponent

b52: dl.  w3      b45. ; next: w2w3:=addr
     sn.  w2    (b43.-2) ;if w2=slutaddr(l)
     jl.          b53. ;  then goto prepare exit
     aa.  w3      b40. ; add addr-incr
     jl.          b50. ; continue

b55: sn.  w3    (b47.) ; big_exp: if w3=exponent
     jl.          b56. ;  then goto no_shift
     rx.  w1    b36.-2 ;
     rx.  w2      b36. ; exchange(w1w2,sum)
     rx.  w3      b47. ; exchange(w3,exponent)
     jl.          b57. ;

b53: ld   w1        48 ; prepare exit:
     ss.  w1      b36. ; w0w1:=-sum
     nd   w1         7 ; sum:=sum normalized
     sn   w0         0 ; if sum=0
     jl.          b54. ;  then exit
     ad   w1        -1 ; sum:=sum shift (-1)
     aa.  w1      b58. ; round
     nd.  w1      b36. ; normalize
     bl   w3         7 ;
     ba.  w3      b36. ;
     wa.  w3      b47. ;
     al   w3   x3   +4 ; exponent:=exponent+norm_exp1+norm_exp2+4
     sl   w3     -2048 ;
     sl.  w3    (b59.) ;
     jl.          b60. ; if exponent<-2048 or exponent>2047 then goto error

b54: hs   w3         3 ;
b62: rl.  w3      b45. ; w3:=slutaddr(m)
     am.        (b43.) ;
     jl              4 ; exit

b60:  sh   w3      0 ;
     am          4 ;
      dl.  w1    b65. ;
     fm   w1      2 ;
     jl.        b62. ;

b64=k+2
     <:<10>decomp  :>
     <:<10>solve   :>



     0,r. 253+b41>1-k>1 ; fill with zeroes

     <:lin. eq. 2:>


e1=e1-a9, e2=e2-a9, e3=e3-a9


e.                ; end segment

w.
g0:  2                   ; tailpart decompose: size of area
     0,0,0,0             ;
     1<23+e1             ; entry
     2<18+13<12+25<6+26  ; spec.
     0                   ; spec.
     4<12+e3             ; ext. list
     2<12                ; number of segments

g1:  1<23+4              ; tailpart solve: shared entry
     0,0,0,0             ;
     1<23+e2             ; entry
     1<18+26<12+13<6+25  ; spec.
     26<18               ; spec.
     4<12+e3             ; ext. list
     2<12                ; number of segments
\f

▶EOF◀