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

⟦3aab6342b⟧ TextFile

    Length: 27648 (0x6c00)
    Types: TextFile
    Names: »retafrtst63 «

Derivation

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

TextFile

mode list.yes
algftnrtst7=edit algftnrtst6
; overflytning af extend area og parent message fra
;   power fnc segmentet til et nyt segment
;
; overflytning af label alarm (fortran) fra 
;   algolcheck segmentet til det samme nye segment
;
; extend area sender parent message hvis change entry gir
;   result 6 og (fp er ikke i processen eller fp mode.bswait er true)
;
; zone bufre og share descriptors i high end partition undtagen for
;   fortran, activity i ikke-disablet kode og zoner hvis length < 0
;
; fyns telefon : break 0 i pager fordi program release kaldes overflødigt
;   for et segment i high end partition altid
;
; i rc9000-10 giver underflow både overflow og underflow, så ix-index alarm
;   ved både overflow og underflow gælder kun for rc8000
;
; i magtape check gives op hvis position operation mislykkes mere end 5 gange
;   (position error), og det sikres, at blockcount aldrig kan blive negativ
;
; i magtape check sikres at setposition (z, -f, b), som jo bliver til en unload
;   operation, ikke fører til reposition til -f, b
;
; i wait answer for magtape opdateres positionen i zonen med pos. i svaret
;   hvis ikke tape mark sensed og hvis enten status eller halfs transferred
;   er positive

; i magtape check tilpasses til den opdaterede position i zonen
;

l./page ...1/, r/88.03.01/88.04.21/
l./page 125-136/, r/136/134/, r/, parent message//
l./page 137-142/, r/137/135/, r/142/141/, r/, extend area and parent message//
l2, i/

; page 142-147  extend area segment. extend area and parent message, label alarm
;               <:extend area:>
/, p-3
l./page 143-147/, r/143-147/148-151/

l./page ...2/, r/88.03.01/88.05.19/
l./s. c82/, r/c82/c99/

l./page ...3/, r/88.03.01/88.04.21/
l./; j15:/, l1, i/
; j17:  15 extend area      , j18= -1<22 + j17<1
/, p-1

l./page ...10/, r/87.07.03/88.10.07/
l./c5:/, l./so  w3     3/, d1, i/
f54=k+1; rc8000       ;
     se  w3  x3+0     ;   if rc8000                   and
     so  w0     3     ;      overflow and underflow  then
     jl.        a1.   ;   begin <*ix index alarm*>
/, p-4
l./f54=k+1/, l-1, d3, i/
     jl.        a2.   ;     goto trap alarm;
a1:                   ;   end <*ix index alarm*>;
/, p-1
l./a2:/, r/c9. /c83./

l./page ...18a/, d./a10 = k + 2/, i#
\f



; fgs    1988.05.18               algol/fortran runtime system               page ...18a...



d110: 0                ; curr partition index

      0                ;                     -2: last  of     program in core
d111: 0                ; low  partition index+0: first of     program in core
      0                ;                     +2: first of     segments
      0                ;                     +4: addr  top of program
      0                ;                     +6: max   last   used
      0                ;                     +8: limit last   used
      0                ;                    +10: temp  last   used
      0                ;                    +12:       last   used
      0                ;                    +14: temp  stack  bottom         

      0                ;                     -2: last  of     program in core 
d112: 0                ; high partition index+0: first of     program in core 
      0                ;                     +2: first of     segments        
      0                ;                     +4: addr  top of program         
      0                ;                     +6: max   last   used            
      0                ;                     +8: limit last   used            
      0                ;                    +10: temp  last   used            
      0                ;                    +12:       last   used            
      0                ;                    +14: temp  stack  bottom          



\f



; fgs    1988.05.18               algol/fortran runtime system               page ...18b...


; procedures :
;   switch to high  end
;   switch to low   end
;   switch to other end


;      call            return
;
; w0 : -               unchanged
; w1 : -               unchanged
; w2 : -               unchanged
; w3 : link            undefined

b. a0, b3              ;
w.                     ;

b0:  0                 ; saved w0
b1:  0                 ; saved w1

b3:  0                 ; saved w3


d115:
c77: rs. w3  b3.       ; switch to high end:
     al. w3  d111.     ;   index := low partition index;
     jl.     a0.       ;   goto common;

d114:
c78: rs. w3  b3.       ; switch to low end:
     al. w3  d112.     ;   index := high partition index;
     jl.     a0.       ;   goto common;

d113:
c79: rs. w3  b3.       ; switch to other end:
     rl. w3  d110.     ;   index := current index;
     jl.     a0.       ;   goto common;

\f



; fgs    1988.05.18               algol/fortran runtime system               page ...18c...


a0:  se. w3 (d110.)    ; common:
     jl.    (b3.)      ;   if index <> current index then
                       ;     return;
     ds. w1  b1.       ;   save (w0, w1);
     dl. w1  d15.      ;   index(.first of   segments
     ds  w1  x3        ;         .first of   program
     rl. w0  f24.      ;         .last  of   program
     rl. w1  d88.      ;         .addr  top  program
     ds  w1  x3+4      ;                         
     dl. w1  d82.      ;         .max   last used
     ds  w1  x3+8      ;         .limit last used
     rl. w0  d83.      ;         .temp  last used
     rl. w1  d13.      ;         .      last used
     ds  w1  x3+12     ;
     rl. w1  f14.      ;         .temp stack bottom) :=
     rs  w1  x3+14     ;   rts  (.-do-            )  ; 

     se. w3  d111.     ;   index :=
     am      d111-d112 ;     other
     al. w3       d112.;     index;

     rs. w3  d110.     ;   current index := index;

     dl  w1  x3        ;   rts  (.first of   segments
     ds. w1  d15.      ;         .first of   program
     dl  w1  x3+4      ;         .last  of   program
     rs. w0  f24.      ;         .addr  top  program
     rs. w1  d88.      ;   
     dl  w1  x3+8      ;         .max   last used
     ds. w1  d82.      ;         .limit last used
     dl  w1  x3+12     ;         .temp  last used
     rs. w0  d83.      ;         .      last used
     rs. w1  d13.      ;
     rl  w1  x3+14     ;         .temp stack bottom :=
     rs. w1  f14.      ;   index(.-do-            )  ; 

     dl. w1  b1.       ;   restore (w0, w1);
     jl.    (b3.)      ;   return;

     
i.                     ; id list
e.                     ; end switch procedures
  
 
a10 = k + 2 ;  end of trap routine;
#, p1

l./page ...20/, r/87.06.22/88.05.19/
l./c48:/, l./jl.     c9./, r/     /c83: /

l./page ...27/, r/87.02.28/88.05.19/
l./b. a7/, r/a7/a9/
l./wa. w1  d13./, r/     /a9:  /
l./jl.     c11./, l-1, r/+ 1022/+ 1022 then/
l./jl.     c11./, r/c11/a8 /, r/then goto/  goto low partition or/
l./; program release/, i#

a8:  rl. w3  d110.      ;   
     sn. w3  d111.      ;   if current partition index = lower index then
     jl.     c11.       ;     goto stack alarm;
     rl. w1  b0.        ;   restore appetite;
     jl. w3  d114.      ;   switch to low partition;
     jl.     a9.        ;   goto try again;


\f



; fgs    1988.05.19               algol/fortran runtime system               page ...27a...


#, p1

l./page ...31/, r/87.05.13/88.05.20/
l./a13:/, i/

a13: rl  w3  x1+h0+8   ;   w3 := zone.last shared +
     al  w3  x3+h6     ;     share descriptor length;
     sl. w3 (d112.+12) ;   if w3 >= high end partition.last used then
     rs. w3  d112.+12  ;     high end partition.last used := w3;
/, p-4
l./a13:/, r/a13:/    /

l./page ...38/, r/86.04.02/88.12.08/
l./f29:/, d

l./page ...39/, r/83.05.27/88.05.18/
l./b. b1/, r/b1/b4/
l./la. w3  f4./, r/f4/b4/
l./i.  ; id list/, i/

b4:  511               ; mask for extract 9
/, p1

l./page ...41/, r/87.02.05/88.05.16/
l./; release program segments/, i#

\f



; fgs    1988.05.18               algol/fortran runtime system               page ...41a...


#, p1
l./a0:/, l1, d2, i/
     al. w3  c0.       ;
     rl  w1  x3+f24-c0 ;   first of program :=
     rs  w1  x3+d15-c0 ;     first of segments;
     sh  w1 (x3+d14-c0);   if first of program <= last of program then
     jl. w3  c1.       ;     goto program release;
/, p1

l./page ...41a/, r/41a/41b/

l./page ...43a/, d./e. ; end block emulate ix instruction/, i#
\f



; fgs    1988.05.18               algol/fortran runtime system               page ...43a...


b. a10, b5            ; begin block emulate ix instruction
w.

c80: al. w3     c83.  ; ix emulation: w3 := interrupt address;
     al  w3  x3+c0-c83;
     rs. w3  b4.      ;   save interrupt address;
     rl  w2  x3+10    ; ix emulation:
     al  w2  x2+2     ;   continue address :=
     rs  w2  x3+10    ;     continue address + 2;
     el  w1  x2-4     ;   w1 := ix instr.w-field *
     la. w1  b0.      ;   2;
     ls  w1 -3        ;   w-register addr :=
     wa  w1  6        ;     dump area.w1;
     rs. w1  b2.      ;   
     rl  w3  x3+14    ;   dope addr :=
     ea  w3  x2-2     ;     dump area.sb + doperel;
     rl  w0  x1       ;   ix field := word (w register addr);
     el  w1  x2-1     ;   type     := hwd  (type);
     sh  w1 -1        ;   if type >= 0 then
     jl.     a1.      ;   begin <*index*>
     ls  w0  x1       ;     index value := index shift type;
     sh  w0 (x3-2)    ;     if index value >  upper index value
     sh  w0 (x3  )    ;     or index value <= lower index value - k then
     jl.     a8.      ;       goto index alarm;
     jl.     a2.      ;   end else
a1:  ac  w1  x1       ;   begin <*field*>
     al  w2  1        ;     lower field value :=
     ls  w2  x1       ;       lower field value +
     wa  w2  x3       ;       1 shift (-type)   - <*typelength*>
     al  w1  x2-1     ;       1;
     sh  w0 (x3-2)    ;     if field value >  upper field value 
     sh  w0  x1       ;        field value <= lower field value then
     jl.     a8.      ;       goto field alarm;
a2:                   ;   end <*field*>;
     rl. w3  b4.      ;   w3 := interrupt address;
     wa  w0 (x3+14)   ;   field address := w-register :=
     rs. w0 (b2.)     ;     field value + dump area.base word;
     
     rl  w1  x3+10    ;   return :=
     rs. w1  b4.      ;     dump area.ic;
     dl  w1  x3+2     ;   restore registers;
     dl  w3  x3+6     ; 
     jl.    (b4.)     ;   goto (return);

\f



; fgs    1988.05.18               algol/fortran runtime system               page ...43b...


a8:  rl. w1  b4.      ; w1 := interrupt address;
     rl  w0  x1+8     ; index alarm: field alarm:
     lo. w0  b3.      ;   dump area.exception reg :=
     rs  w0  x1+8     ;     dump area.exception reg or (under- and overflow);
     sz. w0 (b1.)     ;   if dump area.exception reg.floating excpt = active then
     jl      x1+c5-c0 ;     goto floating exception;
     rl  w0  x3-2     ;   field value := upper index;
     jl.     a2.      ;   goto exit;
     

b0:  3<4              ; w-register mask
b1:  1<18             ; floating point exception active bit
b2:  0                ; w-register address, w-register value
b3:  3                ; underflow, overflow mask
b4:  0                ; saved interrupt address, saved return

i.                    ; id list
e.                    ; end block emulate ix instruction


#, p1

l./page ...44/, r/87.07.03/88.05.18/
l./b4:/, d

l./page ...46/, r/87.06.02/88.06.15/
l./d94:/, r/d94:/    /, i/

d94=k+1               ; ****** just to avoid the rts address 4096 (pass9) ***
/, p1

l./page ...48/, r/83.05.27/88.05.18/
l./d98:/, r/d98:/b4:  <:non zero offset in virtual program file<0>:>

d98:/, p-1

l./page ...64/, r/85.09.13/88.05.19/
l./rl. w0     b8./, d, i/


     am         h53        ; initialize in and out:
     se  w3  x3-18         ;   if h53 <> 18 then
     rl. w0     b8.        ;     stderror entry := stderror entry - modif;
/, p1

l./page ...68/, r/87.07.05/88.10.05/
l./xs         1/, d3, i/
     xs         1        ;   rc8000 :=
     sz  w0     2.10     ;     if ex.22 = 1 <*overflow*> then
     am         1        ;       0 <*false*>
     al  w0    -1        ;     else
     hs  w0  x2+f54-c7   ;      -1 <*true*>;
/, p-5

l./page ...70/, r/87.07.04/88.10.05/
l./al  w1  x2+c62-c7/, d1, i/
     am               +2000;
     al  w1  x2+c62-c7-2000;
     am               +2000;
     rs  w1  x2+d62-c7-2000;
/, p1

l./al  w1  x2+d112-c7/, i#

\f



; fgs    1988.05.18               algol/fortran runtime system   page ...70a...


#, p1
l./rs  w0  x2+c76 -c7/, d2, i/
     rs  w0  x1+8       ;   high index.limit last used    :=
     rs  w0  x1+10      ;             .temp  last used    :=
     rs  w0  x1+12      ;             .      last used    :=
     rs  w0  x1+14      ;             .temp  stack bottom := top;
/, p1
l./jl  w3  x2+c78 -c7/, i/
     al  w3  x2+d13- c7 ;   rts       .addr  top program :=
     rs  w3  x2+d88- c7 ;    addr (rts.      last used);
/, p1

l./page ...76/, r/83.05.27/88.05.18/
l./a10:/, l2, r/current/temp/
l./la  w2  4/, r/4/6/

l./page ...90/, r/83.06.06/88.05.19/
l./b. a8/, r/b12, /b115,/
l./b11=/, i/
b77:  d84 -d0           ; current activity table entry
b78:  d85 -d0           ; no of activities
b85:  d92 -d0           ; current activity no
b106: d110-d0           ; curr partition index
b107: d111-d0           ; low  partition address
b110: d114-d0           ; switch to low  end partition
b111: d115-d0           ; switch to high end partition
/, p-1
l./shares in w0/, r/w0/h0/

l./page ...91/, r/83.05.27/88.12.12/
l./rl  w2  x2+h0+2+h5/, d1, i/
     rl  w2  x2+h0+2+h5 ;   save given buffer length;
     rs. w2     b2.     ;   buffer length := long
     ls  w2     1       ;     long (given buffer length extract 23 *
     ad  w3    -23      ;     4;
/, p1
l./a4:/, d./a5:/, i#
\f



; jz.fgs 1988.12.12               algol/fortran runtime system               page ...92...


a4:                     ;   begin <*algol*>
     se  w0     0       ;     w1 negative tested in reserve; if overflow then
a1:  al  w1    -2       ;     init alarm: total claim:= illegal;
     ac  w1  x1         ;     appetite:= -total claim;
     rl. w0     b2.     ;
     sh  w0     0       ;     if given buffer length > 0 then
     jl.        a0.     ;     begin
     rl. w0    (b78.)   ;     
     rl. w3    (b85.)   ; 
     sh  w0    -1       ;       if no_of_activities >= 0 <*not activity mode*>
     sh  w3     0       ;       or current act. no  <= 0 <*disabled*>     then
     jl. w3    (b111.)  ;         switch to high end partition;
a0:  rl. w3    (b7.  )  ;     end <*given buffer length > 0;
     rs. w3     b2.     ;     old top := rts.last used; <*high end partition*>
     dl. w0    (b8.)    ;       w3 := saved sref;
     rl  w0  x3         ;       w0 := call  sref;
     rs. w0     b12.    ;       save call sref;
     jl. w3    (b1.)    ;     reserve array; w1 := rts.last used;
     rl. w3    (b106.)  ;
     se. w3    (b107.)  ;     if current index = low end partition index then
     jl.        a6.     ;     begin <*move old stack top to new stack top*>
     dl. w0    (b8.)    ;       w3 := old top := 
     rs. w3     b2.     ;         saved sref; 
     al  w1  x1+6       ;       w1 := last used in block := 
     am     (x3)        ;         core (sref of return point - 2):=
     rs  w1     -2      ;         last used + 6;
     rl  w0  x3         ;
     rs  w0  x1-6       ;       move return point from old top to new top;
     dl  w0  x3+4       ;
     ds  w0  x1-2       ;     end <*move old stack top*>;    
a6:  jl. w3    (b110.)  ;     switch to lower end partition; 
a5:                     ;   end <*algol*>;
#, p1


l./page ...93/, r/87.08.17/88.05.19/
l./a7:/, l./;    rl. w0     b12./, d1, i/
     am         h53     ;
     sn  w3  x3-18      ;   if h53 = 18 then
     rl. w0     b12.    ;     core (last) :=
     rs  w0  x3         ;       call sref in zone;
/, p-4

l./page ...98/, r/83.08.16/88.12.08/
l./b13:/, d

l./page ...100/, r/83.05.27/88.12.08/
l./d52=/, l-1, d3

l./page ...101/, r/83.05.27/88.12.08/
l./b. a9,c3,f8/, r/f8/f9/

l./page ...102/, r/83.05.27/88.12.08/
l./f8:/, l1, i/
                     0      ; double constant, word 1 : 0
      f9:            0      ; -      -       , -    2 : 0
/, p-2
l./ld  w1  -65/, d, i/
          dl. w1      f9.   ;
/, p-1

l./page ...103/, r/83.05.27/88.12.08/
l./ld  w3  -65/, d, i/
          dl. w3      f9.   ;
/, p-1

l./page ...104/, r/83.05.27/88.12.08/
l./ld  w3  -65/, d, i/
          dl. w3      f9.   ;
/, p-1

l./page ...112/, r/88.03.01/89.01.31/
l./b14/, r/j16/j18/, r/power fnc/extend area/
l./b28:/, i/
b25: <:<25><25><25>:>   ; 3 em characters
b26: 1<7                ; word defect
b27: 1<8                ; stopped 
/, p-2

l./page ...117/, r/88.03.01/89.01.31/
l./al  w3  x3+1<8/, d, i/
     lo. w3     b27.    ;   then or stop bit;
/, p-1

l./page ...118/, r/83.05.27/89.01.31/
l./al  w3  x3+1<7/, d./a25:/, d./al  w1  0/, i/
     lo. w3     b26.    ;     or word defect;
                        ;   end;
a8:  sz. w3    (b24.)   ;   if status.tape mark sensed then
     jl.        a24.    ;     goto skip;
     am.       (b3.)    ;
     rl  w0     +2      ;
     wa  w0     6       ;   if hwds xferred > 0
     sn  w0     0       ;   or status       > 0 then
     jl.        a24.    ;   begin <*update position in zone*>
     am.       (b3.)    ;     zone.file, block :=
     dl  w1     +8      ;       answer.file, block;
     ds  w1  x2+h1+14   ;   end;
a24: al  w1     0       ;   w1 := mask index := 0;
/

l./page ...120/, r/88.03.01/89.01.31/
l./rl  w1  x2+h0+4/, d2
l./rl. w3 (b14.)      ;    goto power fnc segment,/, r/power fnc/extend area/
l./c42=/, r/b10 /b10/, r/power func/extend area/
l1, r/b5.) /b5.)/
l./z./, d
l , r/3 /3/
l1, r/a7. /a7./
l1, r/b3.) /b3.)/
l1, r/2 /2/
l1, r/w0     0 /w0     0/
l1, r/a17. /a17./
l1, r/b10 /b10/
l1, d, i/
     rl  w1  x2+h0+4    ;   w1 := used share;
     rl. w0     b25.    ;   zone.buffer area.first addr :=
     rs  w0 (x1+8)      ;     <:<25><25><25>:>;
     al  w0     2       ;
     wa  w0  x1+8       ;   zone.top xferred :=
     rs  w0  x1+22      ;     zone.first addr + 2;
     jl.        a17.    ;   goto normal return;
/
l./a14:/, r/c40 /c40/
l1, r/c22 /c22/
l1, r/c23 /c23/

l./page ...124/, r/88.03.01/89.01.31/
l./pass 10/, r/, pass 10//

l./page ...125/, r/88.03.01/89.01.31/
l./b.a31/, r/a31/a50/
l./b18:/, r/j16/j18/, r/power fnc/extend area/
l./b2:/, r/b2:/b1 : 0                  ; spool count
b2 :/, r/  0/ 0 /, p-1
l./b15:/, d
l./b16:/, d

l./page ...128/, r/83.05.27/89.01.31/
l./page ...129/, i#

a40:                    ; update position:
     se  w3  10         ;   if operation = input
     sn  w3  3          ;   or operation = out mark then
     jl.     a41.       ;     goto test tapemark;
     sn  w3  8          ;   if operation = move then
     jl.     a41.       ;     goto check position;
     sz  w0  1<6        ; no update: if pos error then
     jl.     a12.       ;   goto complete positioning;
     jl.     a2.        ;   else return;

a41: am.    (b34.)      ; check position:
     dl  w1  +8         ;   
     se  w3  8          ;   if operation <> move then
     ds  w1  x2+h1+14   ;     zone.file, block := answer.file, block;
     sn  w0 (x2+h1+12)  ;   if answer.file count  <> zone.filecount
     se  w1 (x2+h1+14)  ;   or answer.block count <> zone.blockcount then
     jl.     a42.       ;     goto add position error bit;
     se  w3  3          ;   if operation <> input then
     jl.     a2.        ;     goto return else
     rl. w3    (b0.)    ;   goto physical eom
     jl      x3+c41     ;     on previous segment;

a42: rl. w3  b34.       ; add position error bit:
     al  w0  1<6        ;
     lo  w0  x3         ;   status :=
     rs  w0  x3         ;   status or pos bit;
     jl.     a12.       ;   goto complete positioning;

#

l./page ...129/, r/87.02.05/89.01.31/
l./se  w3     0/, d2
l./jl.        a10./, r/a10./a40./, r/physical eom/update position/
l1, i/
     se  w3     0       ;   if operation = sense
     sl  w3     8       ;   or operation = move or setmode then
     jl.        a12.    ;     goto complete positioning;
/, p-3
l./am.       (b34.)/, d./a19:/, d, i/
                        ; stopped:
a19: sn  w3     3       ;   if input <*not (output or erase)*> then
     jl.        a2.     ;     goto return;
/

l./page ...130/, r/83.05.27/88.12.08/
l./a12:/, l2, i/
     al  w1     0       ;   spool count :=
     rs. w1     b1.     ;     0;
/, p-3

l./page ...132/, r/83.05.27/89.01.02/
l./sn  w3 (x1+6)/, i/
     sh  w3 -1          ;   if w3 <= -1 then
     dl  w0  x1+8       ;     w3w0 := file and block in answer;
/, p-2
l./a18:/, d, i/


a18:                    ; prepare spool:
     rl. w1     b1.     ;   spoolcount :=
     al  w1  x1+1       ;     spoolcount +
     rs. w1     b1.     ;     1;
     sl  w1     6       ;   if spoolcount >= 6 then
     jl.        a1.     ;     goto give up;
/, p-5
l./z.;end system 3;/, r/;/ ;/

l./page ...134/, r/87.02.05/89.02.01/
l./sl  w0     7/, r/7 /15/, r/= 7/= 15/
l./rs  w0  x2+h1+14/, i/
     sh  w0     0       ;   if blockcount <= 0 then
     al  w0     0       ;     blockcount := 0;
/, p-2

l./page ...135/, r/88.03.01/89.01.31/
l./c43=/, d./jl.     a2./
l./rl. w3    (b18.)   ;   goto power fnc segment,/, r/power fnc/extend area/

l./page ...137/, r/88.03.01/88.04.21/, r/137/136/
l./; calculation of power/, d./b15:/, i/

; calculation of power function: a**x 

j15 = (:k-c20:)    >9; define segment number
j16 =  -1<22  + j15<1; -      absword

b. a30, b30, g10  w. ; 
 
b10:  b11            ; rel of last absword
b0:   d12-d0         ; uv
b8:   d30-d0         ; saved (sref,w3)
b12:  d21-d0         ; general alarm
b13:  d37-d0         ; overflows

b11 = k - 2 - b10    ; define rel of last absword

g0:   0              ; working locations:  
g1:   0, 0           ; for power           
g2:   0, 0           ; functions           
g3:   0, 0           ;                     
g4:   0, 0           ;
g5:   0              ;                     
g6:   0              ;                     


/, p-20

l./...138/, r/138/137/
l./...139/, r/139/138/
l./...140/, r/140/139/
l./...141/, r/141/140/
l./...142/, r/142/141/

l./page ...142a/, d./page ...142b/, d./jl.       (b15.+6) ;/

l./...143/, s 1, d./page ...142/, d./end **/

l0, i#
\f



; jz.fgs 1988.04.21               algol/fortran runtime system               page ...142...

; end of doc     from check       and
; parent message from check spec
; label alarm


j17 = (:k-c20:)    >9; define segment number
j18 =  -1<22  + j17<1; -      absword

b. a30, b102, g10  w.; 
 
b10:  b11            ; rel of last absword
b5:   j5             ; check spec segment
b6:   j6             ; check      segment
b8:   d30 -d0        ; saved (sref,w3)
b18:  f17 -d0        ; parent process address
b21:  d21 -d0        ; general alarm
b26:  d26 -d0        ; fp current in zone addr
b102: d102-d0        ; boolean procedure fp present

b11 = k - 2 - b10    ; define rel of last absword

                     ; working locations:
b1:  0               ; new size

b2:                  ; fnc area:
44<12 +2.0000011<5 +1; fnc<12+pattern<5+wait
     <:bs :>         ;   <:bs :>
     0, r.4          ;   docname of area process
     0               ;            segments
     0               ;   0        entries

b3:  0, r.8          ; parent message  area and
                     ; answer          area and
                     ; tail for extend area
     0, r.4          ; parent process name  and
     0               ; name table address

b4:  0               ; addr area process
b15: 0, r.4          ; saved registers in parent message

#, p-3


l./...142a/, r/142a/143/, r/88.03.01/88.04.21/
l./c47/, l1, d, i/

     ds. w3    (b8.)    ;   save sref, w3;
     rl  w1  x2+h0+4    ;   w1 :=
     zl  w1  x1+6       ;     zone.share.operation;
/, p-3
l./rs. w0     b1. ; save proc descr addr in b1;/, d, i/
     rs. w0     b4.     ;   save area proc addr in b4.;
/
l./; the area/, r/the/    the/
l./am.     (b1.)/, d, i/
     am.       (b4.)     ; 
/, p-1
l./al  w3  x2+h1+2/, i#

\f



; jz.fgs 1988.04.21               algol/fortran runtime system               page ...144...




#
l./al  w3  x2+h1+2/, r/     al/a14: al/
l./al. w1     b3./, r/w1 :=/  w1 :=/

l./se  w0     0/, d./a27:/, d, i/
     se  w0     6        ;     if claims exceeded then
     jl.        a13.     ;     begin <*extend area*>
     rl. w0     b2.+12   ;       
     se  w0     0        ;       if fnc area.segm <> 0 then
     jl.        a27.     ;         goto give up;
     jl. w3    (b102.)   ; 
     se  w0     0        ;       if fp present then
     jl.        a12.     ;       begin
     rl. w1     b26.     ; 
     rl  w1  x1-h20+h51  ;         w1 := fp mode bits;
     sz  w1     1<10     ;         if mode.bswait = false then
     jl.        a12.     ;         begin
     rl. w0     b2.      ;           fnc area.fnc :=
     ls  w0    -1        ;             fnc area.fnc - wait bit;
     ls  w0     1        ;         end;
     rs. w0     b2.      ;       end;
a12: rl. w1     b4.      ;       claim :=     
     rl. w0     b1.      ;         new size - 
     ws  w0  x1+18       ;         old size ; 
     rs. w0     b2.+12   ;       fnc area.segm := claim;
     dl  w0  x1+22       ;       move
     ds. w0     b2.+6    ;         area process.docname
     dl  w0  x1+26       ;       to
     ds. w0     b2.+10   ;         fnc area.docname;
     al. w1     b2.      ;       w1 := addr fnc area;
     jl. w3     a28.     ;       parent message special (w1=fnc area);
     jl.        a14.     ;       goto change entry;
                         ;     end else
a13: se  w0     0        ;     if result <> 0 then
     jl.        a27.     ;       goto give up
                         ;     else
a26: al  w0     0        ;     begin
     rs. w0     b2.+12   ;       fnc area.segm := 0;
     rl. w3    (b5.)     ;       goto repeat transfer, error segm;
     jl     x3+c35       ;     end;

a27: al  w0     0        ;   give up:
     rs. w0     b2.+12   ;     fnc area.segm := 0;
     rl. w3    (b6.)     ;     goto check segment,
     jl     x3+c24       ;       give up;

                         ;   parent message special:
a28: ds. w1     b15.+2   ;     w1  = addr fnc            area;
     ds. w3     b15.+6   ;     save registers;
     al. w2     b3.      ;     w2 := addr parent message area;
a24: dl  w0  x1+2        ;     repeat
     ds  w0  x2+2        ;       move double word
     al  w1  x1+4        ;         from x1+2 to x2+2;
     al  w2  x2+4        ;       increment w1 and w2 by 4 each;
     sh. w1     b2.+14   ;     until w1 exceeds last word of fnc area;
     jl.        a24.     ;
     jl.        a30.     ;     goto finish parent message;
/, p-16

l./page ...142b/, r/88.03.01/88.11.21/, r/142b/145/

;l./a29:/, d, i/
;
;a29: ds. w3    (b8.)    ;   save sref, w3;
;     ds. w1     b15.+2  ;   save registers;
;/, p-2

l./rl. w2    (b18.) ; w2:=addr of parent process/, d, i/

a30:                    ; finish parent message:
     rl. w2    (b18.)   ;   w2 := addr parent process;
/
l./r. 252/, i#

\f



; jz.fgs 1988.04.21               algol/fortran runtime system               page ...146...


; label alarm

d52 = (:k-c20:)>9<12 + k-b10; define point

     al. w0     b13.    ;   w0 := addr alarm text;
     jl. w3    (b21.)   ;   goto general alarm;

b13: <:<10>label<0>:>   ; 

#
l./power func.<3>/, r/power func.<3>/extend area<3>/

l./...143/, r/143/147/
l./...144/, r/144/148/
l./...145/, r/145/149/
l./...146/, r/146/150/
l./...147/, r/147/151/, r/88.03.01/88.04.21/


l./m.jz/, r/88.04.15/89.02.01/

f 

end
▶EOF◀