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

⟦2ed697518⟧ TextFile

    Length: 5376 (0x1500)
    Types: TextFile
    Names: »t«

Derivation

└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
    └─⟦4334b4c0b⟧ 
        └─⟦this⟧ »t« 

TextFile

(
fpproc=set 1 disc1
fpproc=slang list.no entry.no
fpproc
if ok.yes
scope user fpproc
lookup fpproc
)
\f


;rc 31.01.73                         fpproc     page 1



;b. h99                 ;  dummy block for fpnames
b. g1, e5               ;  block for insertproc
p.<:fpnames:>
w.
\f



; procedure fpproc(action, w0, w1, w2);
; integer address  action;
; undefined                w0, w1, w2;
; comment
; the procedure calls the fp-procedure
; determined by the h-name with the number
; action.
; the main idea is to execute
;       jl w3 fpbase+hname(action)
; in a sensible way from within an
; algol program. the allowed actions
; are listed below with the meaning
; of the w-parameters.

; action                  w0          w1          w2
; 7 (end prog)            irr         irr         integer
; 7 (end prog             irr         zone**)     integer
; 14 (finis mess)         irr         irr         irr
; 22 (inblock)*)          irr         zone        irr
; 23 (outblock)*)         irr         zone        irr
; 24 (wait ready)*)       irr         zone        integer
; 25 (inchar)*)           irr         zone        integer+)
; 26 (outchar)*)          irr         zone        integer
; 27 (connect in)         integer+)   zone        array
; 27 (connect in)         integer+)   0           array
; 28 (connect out)        integer+)   zone        array
; 28 (connect out)        integer+)   0           array
; 29 (stack zone)*)       irr         zone        array
; 29 (stack current in)*) irr         in          0
; 30 (unstack zone)*)     irr         zone        array
; 30 (unstac current in)*)irr         in          0
; 31 (outtext)*)          array       zone        irr
; 32 (outinteger)*)       integer     zone        integer (layout)
; 33 (outend)*)           irr         zone        integer
; 34 (close up)*)         irr         zone        integer
; 35 (parent mess)        irr         array       zone**)
; 48 (wait free)*)        irr         zone        integer
; 67 (break mess)         irr         irr         irr
; 79 (terminate zone)*)   irr         zone        irr

; *) may call the give-up action
; **) a document name is taken from the zone
; +) return parameter All other parameters are
;    call parameters.

\f


;rc 31.01.73                         fpproc     page 2




; The length of an array is never checked.
; Violation of the above rules will terminate
; the program with a param alarm.
;   Certain of the procedures may call the
; give up action of the zone. If this happens,
; the block procedure of the zone will be
; called.
; When the block procedure is called, z and
; s have their conventional meaning. The
; b-parameter however is an address
; pointing at a place where the four working
; registers are saved. The b-parameter may
; be used in a call of system(5) move_core:(b, ia)
; The answer may then be fetched by means of
; a call of system(5)movecore:(ia(1),ia).
; If the block procedure terminates by going
; through its final end, a jump to h36
; is performed.

;             Implementation details
; The evaluation of the w parameters uses the
; stack in this way:
;     x2+6 : pointer to next param to be evaluated
;     x2+8 : value of action
;     x2+10:
;       .
;       .  : the w parameters
;       .
;     x2+20:
; After evaluation, the w-parameters are stored
; according to these rules:
;                integer     irr     array          zone
;   first word   value       0       addr 1. elem   zone addr
;  second word   addr(>0)    0       -1             -1
;
; When the entries h22-h26, h29-h34, h48 and
; h79 are called, a call of the user's
; blockprocedure is prepared. The main
; task of this preparation is to save
; the giveup action (z+h2+2) and to
; insert a new give up action. As the
; segment allocation may change during
; the call of the user's blockprocedure,
; the return address points into the stack.
; this enables the code calling the user's
; blpr to update the return point, if the
; segment allocation has changed. It also
; enables the give up action to return to
; h36.

\f


;rc 31.01.73                         fpproc     page 3



; The stack during execution of the i/o
; procedures has the following layout:
;   last used + 0: 6 < 12+23
;    -    -   + 2: z addr
;    -    -   + 4:        26
;    -    -   + 6: status addr = sref-10
;    -    -   + 8:        26
;    -    -   +10: ref to saved reg = srf - 18
;   sref      -18: addr of saved reg = sref - 16
;    -        -16: saved w0   ans addr
;    -        -14: saved w1   z descr
;    -        -12: saved w2   sh descr
;    -        -10: saved w3   status
;    -        - 8: layout during outinteger
;    -        - 6: jl.    (2)
;    -        - 4: abs return addr
;    -        - 2: saved giveup action

;
; The give up action reestablishes the cell
; z+h2+2 and stores the contents of
; its registers in sref-16 to sref -10. Then
; the block procedure is called. If it
; returns, z+h2+2 and the abs return address
; is updated (blpr may be called more
; than once), and now a jump to fp base
; h36 is performed.
▶EOF◀