|
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: 4608 (0x1200) Types: TextFile Names: »uti36«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ. └─⟦b2ec5d50f⟧ └─⟦f8e4b63af⟧ »trcfput« └─⟦this⟧
; 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◀