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

⟦df8d312fe⟧ TextFile

    Length: 6912 (0x1b00)
    Types: TextFile
    Names: »base4tx     «

Derivation

└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
    └─⟦75ff9bef3⟧ 
        └─⟦this⟧ »base4tx     « 

TextFile

; fgs 1982.12.17          base                  page ...1...


b. c2,g3             ; block for insertproc
w.
d.
p.<:fpnames:>
l.
s. b24               ; block for base
w.


k=h55                 ;

; procedure write_pair;
;
;   the procedure writes the pair addressed by w1 on current output
;
;        call :   return :
;   
;   w0 : -        destroyed
;   w1 : addr     destroyed
;   w2 : -        unchanged
;   w3 : link     destroyed
;

b. a0, b1
w.

b24: rs. w3  a0.    ; save link;

     dl  w1  x1     ; entry write_pair:
     ds. w1  b1.    ;   get pair;
     
     rl. w0  b0.    ;   write lower;
     jl. w3  h32.-2 ;
     1<23+32<12+10       ;
     rl. w0  b1.    ;   write upper;
     jl. w3  h32.-2 ;
     1<23+32<12+10       ;

     jl.    (a0.)   ; return;

a0:  0              ; saved link
b0:  0              ; lower of pair:
b1:  0              ; upper of pair:

e.  ; end write pair;


\f


; fgs 1985.03.14          base                  page ...2...

;
;   the procedure writes the bases of the process on current output
;
;         call:   return:
;
;    w0 : unused  unchanged
;    w1 : link    -
;    w2 : unused  -
;    w3 : -       -
;

b. a4, c3
w.

b23: ds. w1  c1.    ; entry write bases:
     ds. w3  c3.    ;   save registers;

     rl. w2  h16.   ;   w2 := current process;

     al. w0  a0.    ; catalog base:
     jl. w3  h31.-2 ;    write (<:catbase:>);
     al  w1  x2+70  ;    addr of cat base;
     jl. w3  b24.   ;    write pair;

     al. w0  a1.    ; standard base:
     jl. w3  h31.-2 ;   write (<:std base:>);
     al  w1  x2+78  ;   addr of std base;
     jl. w3  b24.   ;   write pair;

     al. w0  a2.    ; user base:
     jl. w3  h31.-2 ;   write (<:user base:>);
     al. w1  h58.   ;   get user base;
     jl. w3  b24.   ;   write pair;

     al. w0  a3.    ; max base:
     jl. w3  h31.-2 ;   write (<:max base:>);
     al  w1  x2+74  ;   get max base;
     jl. w3  b24.   ;   write pair;

     al. w0  a4.    ; 
     jl. w3  h31.-2 ;   write (<:<10><10>:>);

     dl. w1  c1.    ;   restore
     dl. w3  c3.    ;   registers;
     jl      x1     ; return;

a0:  <:<10>cat  base          : :>
a1:  <:<10>std  base (login  ): :>
a2:  <:<10>user base          : :>
a3:  <:<10>max  base (project): :>
a4:  <:<10><10>:>

c0:   0             ; saved registers;
c1:   0             ;
c2:   0             ;
c3:   0             ;

e.  ; end write bases;

\f



;fgs 1985.03.14           base                  page ...3...

c0=k-h55              ; entry base:

b. a9, e1             ;block for base
w.

        al w2 0       ;intaddr:=addr(cat base)-70
a9:     ba w3 x3+1    ;if first param<>text then goto test integer
        rl w1 x3      ;
        se.w1(b4.)    ;
        jl.   a0.     ;

        dl.w1 b22.    ;text:=<:what:>;
        sn w0(x3+2)   ;if text <>
        se w1(x3+4)   ;   param then
        jl.   a1.     ;goto next text
        jl.w1 b23.    ;write bases;
        jl.   a9.     ;goto first again


a2:     sn w0(x3+2)   ;test text:  if text<>param then goto next text
        se w1(x3+4)   ;
        jl.   a1.     ;
        dl w1 x3+8    ;
        sn w0 0       ;
        se w1 0       ;
        jl.   a1.     ;

        ba w3 x3+1    ;w3:=addr of next param
        sn w2 16      ;if text=<:abs:> then
        al.w2 b14.    ;intaddr:=addr(absint)-70
        sn w2 12      ;if text=<:user:> then
        al.w2 b13.    ;intaddr:=addr(user base)-70
        sh w2 8       ;if text=<:max:> or <:std:> then
a0:     am.  (h16.)   ;test integer: modif w2 by proc descr addr
        dl w1 x2+70   ;w01:=interval
        al.w2 b16.    ;index:=0
        ds w1 x2      ;b16:=interval
        rs w0 x2+2    ;b17:=intervalstart
        jl.   4       ;

a5:     ba w3 x3+1    ;next param:
        rl w1 x3      ;
        se.w1(b10.)   ;if param<>integer then
        jl.   a7.     ;goto test what

        dl w1 x3+4    ;w0:=param
        se.w1(b15.)   ;if next param= .integer then
        jl.   a4.     ;begin
        al w3 x3+4    ;   next param
        hs w0 0       ;   w0:=w0<12+param
        hl w0 x3+3    ;end
a4:     wa.w0 b17.    ;b16(index):=intervalstart+w0
        rs w0 x2      ;
        rs w0 x2-2    ;
        al w2 x2+2    ;index:=index+1
        sh.w2 b17.    ;if index<2 then goto next param
        jl.   a5.     ;
        ba w3 x3+1    ;next param
        rl w1 x3      ;

\f



; rc 1981.08.31           base                  page ...4...

a7:     se.w1(b4.)    ;test what: 
        jl.   a3.     ;if not text then goto test end

        dl.w1 b22.    ;text:=<:what:>
        sn w0(x3+2)   ;if text <>
        se w1(x3+4)   ;  param then
        jl.   e0.     ;goto param error
        al w2 0       ;param=what:=true
        ba w3 x3+1    ;w3:=addr of next param
        rl w1 x3      ;w1:=next param

a3:     sl.w1(b10.)   ;test end:  if param<>end then
        jl.   e0.     ;goto parameter error

        dl.w1 b16.    ;set base
        al.w3 b11.    ;
        jd    1<11+72 ;

        se w0 0       ;if base not set then
        jl.   e1.     ;goto interval error

        sn w2 0       ;if last param = <:what:> then
        jl.w1 b23.    ;write bases
        jl.   a6.     ;goto return to fp

e1:     am    b18     ;interval error
e0:     al.w0 b19.    ;parameter error
        jl.w3 h31.-2  ;
        am    1       ;
a6:     al w2 0       ;
        jl.w3 h7.     ;return to fp

a1:     al w2 x2+4    ;next text:
        sl w2 20      ;if not found then
        jl.   e0.     ;goto param error

        dl.w1 x2+b12. ;get next text
        jl.   a2.     ;goto test text

i.
e.                    ; end block for base

\f



; rc 1981.08.31           base                  page ...5...


b10:    4<12+4        ;intparam
b15:    8<12+4        ;.intparam
b4 :    4<12+10       ;textparam

b21:      <:<10>:>
b19:      <:<10>***base param<10><0>:>
b18=k-b19,<:<10>***base interval<10><0>:>

                      ;variables for base
b11:    0,-1          ;absint               ;nul
b14=b11-68            ;addr (absint)-68
b13=h58-70            ;addr (user base)-70
        0             ;interval             ;max
b16:b0: 0             ;
b17:b3: 0             ;intervalstart        ;work in use

b12=k-2
       <:max:>, 0     ;b12+4
       <:std:>, 0     ;b12+8
       <:user<0><0>:> ;b12+12
       <:abs:>, 0     ;b12+16

b22=k+2
       <:what<0><0>:> ;b22

e.  ;end segment base

c2=k-h55              ;length of program


\f


; rc 1981.08.31           base                  page ...6...

 
; base
g0:
g1:  (:c2+511:)>9   ; segm
     0, r.4
     s2             ; date
     0,0            ; file, block
     2<12+c0        ; contents, entry
     c2             ; length

m. rc base 1985.03.14
d.
p.<:insertproc:>
l.
e.
▶EOF◀