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

⟦6cdd14721⟧ TextFile

    Length: 4608 (0x1200)
    Types: TextFile
    Names: »uti36«

Derivation

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

TextFile

; sj 780307           alloc_buf                   page...1...
;
b.
w.
d.
p.<:fpnames:>
l.

;procedure alloc_buf(z_orig,z_data,base,length);
;value                             base,length;
;integer                           base,length;
;zone                z_orig,z_data;
;
;the procedure allocates a databuffer for the zone
;z_orig in the zone z_data starting from base and
;with length bytes length
;
;demands:  base > 0
;          length > 0
;          base + length <= bufferlength
;*         zonestate(z_orig) = 4 (after declaration)
;
;the allocation is performed in the following way:
;
;  z_orig.base_buffer   :=
;  z_orig.record_base   := z_data.base_buffer + base
;  z_orig.last_of_buffer:=
;  z_orig.last_byte     := z_data.base_buffer + base + length
;  z_orig.rec_length    := length
;

b. g3, i2

s. a3, c2, j30, e2, f4

w. k=1000
h.
i0 :    e1,e2                    ;rel of abswords,  rel of points
j4 :     4, 0                    ;take expression
j8 :     8, 0                    ;end addres expression
j13:    13, 0                    ;last used
j21:    21, 0                    ;general alarm
j30:    30, 0                    ;saved stackref,  return point

e1 = k - 2 - i0
e2 = k - 2 - i0

w.
i1 :     0, 0                    ;no externals

s3                               ;date
s4                               ;clock

c1 :     0
c2 :     0
f1 : <:<10>length <0>:>
f2 : <:<10>base   <0>:>
f3 : <:<10>upper  <0>:>
\f


; sj 780307               alloc_buf                   page...2...
;
i2:   rl.  w2     (j13.)  ; get lastused
      ds.  w2     (j30.)  ; save stackref, return point

      dl   w1    x2+ 20   ; take length:
      so   w0        16   ; if expression then
      jl.  w3      (j4.)  ;   takeexpression
      ds.  w3     (j30.)  ;
      rl   w1    x1       ; take integer value

      sl   w1        0    ; if length < 0 then
      jl.           a1.   ; begin
      al.  w0       f1.   ;   general alarm(<:length:>)
      jl.  w3     (j21.)  ; end;

a1:   rs.  w1       c1.   ; save length
      
      dl   w1    x2+ 16   ; take base   
      so   w0        16   ; if expression then
      jl.  w3      (j4.)  ;   takeexpression
      ds.  w3     (j30.)  ;
      rl   w1    x1       ; take integer value

      sl   w1         0   ; if base < 0 then
      jl.            a2.  ; begin
      al.  w0        f2.  ;   general alarm(<:base:>)
      jl.  w3      (j21.) ; end

a2:   rs.  w1        c2.  ; save base
      wa.  w1        c1.  ; x1:= base + length

      rl   w3    x2+ 12   ; x3:= z_data
      rl   w0    x3+ h0+2 ;
      ws   w0    x3+ h0+0 ;
      sl   w0    x1       ; if base + length > buffer_length then
      jl.            a3.  ; begin
      rl.  w1        c1.
      wa.  w1        c2.
      al.  w0        f3.  ;   general alarm (<:upper:>)
      jl.  w3      (j21.) ; end

a3:   rl   w3    x3+ h0   ; x3:= z_data.base_buffer
      
      rl   w1    x2+  8   ; x1:= z_orig
      wa.  w3        c2.  ; z_data.base_buffer + base
      rs   w3     x1+h0+0 ;   -> z_orig.base_buffer
      rs   w3     x1+h3+0 ;   -> z_orig.record_base

      wa.  w3        c1.  ; z_data.base_buffer + base + length
      rs   w3     x1+h3+2 ;   -> z_orig.last_byte
      rs   w3     x1+h0+2 ;  -> z_orig.last_of_buffer

      dl.  w3      (j30.) ; set stackref, return point
      jl.          ( j8.) ; end address expression

\f


; sj 780307            alloc_buf              page...3...
;

m.rc  alloc_buf   780307

f0 = i0 + 504 - k
c.-f0-1, m.***alloc_buf segment overflow
z.
c.f0-1,jl-1,r.f0>1,z.         ; fill segment

<:alloc buf<0>:>              ; alarm address
e.

h.
g0:
g1:      0, 1                 ; 1 segment
         0, r.8               ; fill
      1<11, i2 - i0           ; 1<11 + segmno, rel addr of entry
      1<6 + 13                ; no type procedure
                              ; integer value length
     13<6 +  8                ; integer value base
                              ; zone z_data
      8< 6, 0                 ; zone z_orig

         4, i1 - i0           ; 4<12 + rel addr of external list
         1, 0                 ; segments, bytes of own core

d.
p.<:insertproc:>
l.
e.
▶EOF◀