|
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: 5376 (0x1500) Types: TextFile Names: »t«
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ. └─⟦4334b4c0b⟧ └─⟦this⟧ »t«
( 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◀