This section describes the formats of the several kinds of components of a memory tree and gives as clear a hint as to the meaning of each part as possible. The complete view of the memory tree must come from section (p1,memtreeformal).
Keys of the Memory Tree
These keys designate nodes and at the same time indicate some information about the format of the node. We call such a node a segment node.
The segmode key provides the authority to cause some data to appear in an address space at an address chosen by the key holder.
The bits of the databyte of a segmode key are interpreted as follows:
Bit 1, called NO_CALL, prevents segment keeper keys below this key from being called implicitly or explicitly {(p1,segkeepslot)} via this key. See (p1,noclapl) for an application of the NO_CALL bit.
Bits 2 and 3 must be zero. See (tp) for a proposed change.
Bits 4 thru 7 hold lss {Log-base-16 of Slot Size}. If 3 <= lss <= 12 then its value is a code indicating how many addresses each slot of the designated node defines and the node is said to have “black” format. The special value 0 of lss indicates that the designated node is in the “red” format {and the slot size code, ssc, is found in the node}. {ssc = IF lss=0 THEN field from data key in slot 15 of {red} segment node ELSE lss FI}
Note: If a red segment node is being used exclusively as a front end to a domain (i.e. not as part of a memory tree), then bits 0, 2, and 3 may be used at the discretion of the programmer. (Bit 1 on will prevent invocation of the domain and the lss must be zero to define the segment as red.)
The term memory key refers to either a page key or a segmode key {(p1,segmodekey)}.
its value in binary is “… AAAA 0000 0000 WC11” and this window key refers to the background key {(p1,backkey)} in effect at this point.
Background Key: See (p1,backkey).
Each slot of a segment node defines a range of 16**ssc byte addresses where “ssc” stands for “slot size code”. Occasionally we refer to the ssc of a page and then we mean 2. Sometimes the ssc is determined by a field in a segmode key that designates the node and sometimes the ssc is found in the node. See (p1,lss).
{ni}b is 0 or 2. This feature is not currently implemented and b must be 0. If b is 2 then addresses that would select slots of this node beyond the initial slots refer to the same address in the background key in effect at this node {(p1,currentback)}. If b is 0 then those addresses are invalid. {This obviates the space bank in otherwise static segments merely to pay for “super addresses” that logically should be zero.}
If nonode (above) is 0 and L < 15 and L is not equal to K, then when the segment keeper is explicitly invoked, key parameter 2 is stored in slot L of the segment node. (i.e. KEEP(??;,,K2==>) stores K2 in slot L of the segment node.) In this case, if the segment keeper is not a start key, it is treated as DK(0).
Other difficulties arise from the requirement that, logically, the localslot is stored into before the keeper key is invoked.
The possible problem here is that it allows a distinction between start keys and primary keys.
See (p1,backuse), (p1,backkeyuse) and (p1,backkeyuse2) for use of background key. See (p1,backkeyidea) for a design note.
Gnosis provides the holder of a segment key a means to talk to the segment keeper. If the segment key is invoked explicitly then the segment keeper key is jumped to. See (p2,segjump).
S is the slot size code, ssc. 3<=ssc<=12 or else the segment node is malformed.
See (gka2) concerning four more bits to be possibly allocated in the format key.
All slots of a black segment node are initial slots but fewer slots of red segment nodes are initial slots {(p1,initialred)}.
The initial slots {(p1,segnode)} of a segment node define consecutive ranges of addresses of size 16**ssc. If S is a segmode key then the address range of slot 0 of S starts at the beginning of the range of S.
Memory keys, DK(0) and window keys are valid in initial slots.