General Points
Retrieving the domain's keeper {(get-dom-keep)}, which is an OS simulator,
Asking the simulator for a synthetic domain key {(getsyndk)}.
DDT is a machine language debugger that runs in another domain and interprets the symbol tables produced by our modified H assembler. See <ddtdoc,> for syntax and semantics of DDT.
c = 1,2 - As from factory requestor's key
c = 3 - SWITCHER returned non-zero return code, rc. str is (4,rc).
c = 4 - DDTF did not follow extended jump protocol, return code rc was returned instead of kt+5. str is (4,rc).
c = 5 - DDTF returned non-zero return code, rc. str is (4,rc).
This operation creates a DDT and starts it operating on domain D. M is a meter. The DDT will use the terminal defined by SIK3, SOK3, and CCK3. (SIK4, SOK4, and CCK4 keys will also serve this purpose.)
D must be a domain key with C3 rights. The domain is initially considered active (i.e. DDT holds no resume key to it).
The key K19 will be installed as the initial value of key index 19. This key will be available for any purpose through the KEY command, so it represents the authority that the terminal user should have.
Slot 1: a prompt space bank
Slot 2: a space bank
Slot 3: a switcher
Possible return codes c are as follows. In the current implementation, if a nonzero code is returned the state of things is not necessarily put back the way it was before the attempt.
1 - PSB is not a prompt official space bank.
2 - not enough space in PSB.
3 - not enough space in SB.
5 - D is not a domain.
6 - SB is not an official space bank.
8 - the order code is nonzero.
{See (getsyndk) about getting an appropriate domain key for an os object.}
The DDT will use PEEK (see (p2,peek)) to reference "memory", rather than slot C3 of the domain. {Any other key that behaves as peek for order code 0 is valid in place of PEEK.}
This use extended jump protocol (p3,ejp).
This operation create a virtual domain keeper and returns it as VDK. When a domain with VDK as its keeper traps, a record is written in the RC record collection with the TOD as the name (in TOD format) and the DOMAIN key of the trapping domain as the key in the record.
VDK must be called as follows VDK(347;CLOCK ==>c) to supply a CLOCK key to time stamp the record in the record collection. VDK crashes if it doesn't have a clock key.
This operation creates a virtual domain keeper and returns it in VDK. VDK may be used as the domain keeper in one or more domains. When a domain with VDK as its keeper traps, a new branch of the switcher is created and a DDT {(ddt)} is created to debug that domain, using the new branch. (There is no relationship between the name of the branch and the domain.) C10 of the domain contains SYMSEG, a memory key defining up to a megabyte of symbol table. Note: the use of SYMSEG may change. See (p3,wombfacilresdomkeep) about a standard such VDK.
The key DDTFACIL will be available to the DDT as key index 19.
SB2 is a space bank. M is a meter. c=0 if successful, 1 if SB1 is not a prompt official space bank, 2 if not enough space in SB1. If some other error occurs, ...
VDKC(kt;==>X'A0D';).
VDK(kt;==>X'10A0D';).
This operation create a virtual domain keeper and returns it as VDK2RC.
VDK2RCF is in SYS. and the womb too {(p3,wvdkc)}.
When a domain with VDK2RC as its keeper traps, a record is written in the RC record collection with the TOD as the name (in TOD format) and the DOMAIN key of the trapping domain as the key in the record.
{arcane}{ni}DDT Desiderata
A record collection indexed on alleged key type that leads to a short description of the key along with an Augment label referring to the documentation.
A meter tester. It would (by running a test domain) determine if a key is either:
A meter key to an invalid meter,
A meter key to a valid meter with no juice, or
A good provident meter.
This is like the mythical domain server {(p1,domserv)}. While it doesn't execute the domain it gives an extensive excuse if the kernel would find some reason for not running the program.
Its natural caller would be DDT but other programs might find it useful.
Enumeration of tests
A meter key to a node that is not a meter. By this I mean that there is no chain leading to the primordial meter. This can be discerned by the fact that any process in a domain under that meter disappears. (This state may be indistinguishable from the next state!)
Meter valid but exhausted. (When other resource counts are implemented in the kernel this category must be expanded.)
Meter can produce headway.
This leads to the next point.
The domain's address segment and PSW is examined to determine whether an instruction could be fetched. This involves an attempt to access the domain's segment. We use a kamakazi domain for this.
The domain's segment is tested for accessibility of the operands.
Install a page key to a page with a SVC 0 at 0 as the domain's segment.
Install a PSW that designates the instruction at address 0.
Install a valid meter with CPU resources.
Install the Never key as the domain's keeper
Issue {unimplemented} domain key call to remove domain from stall queues if that is where it is at.
Observe whether PSW changes.
Install exhausted meter.
Put back original PSW, segment, keeper and then meter.