map:
SELECT type: ObjectKind
FROM
Note: the null, ref, controlLink, oneRef, and simple variants must be 1 word long
null => [pad1: Card12 ¬ 0, pad2: Card16 ¬ 0],
ref => [pad1: Card12 ¬ 0, pad2: Card16 ¬ 0],
controlLink => [pad1: Card12 ¬ 0, pad2: Card16 ¬ 0],
oneRef => [pad1: Card12 ¬ 0, offset: Card16 ¬ 0],
simple => [
length: Card12 ¬ 0,
refs: PACKED ARRAY [0..simpleLength) OF BOOL ¬ ALL[FALSE]],
linked => [pad1: Card12 ¬ 0, pad2: Card16 ¬ 0,
first: INT, -- offset (in AUs) of first simple REF
rest: Index], -- map for the rest of the REFs (starts at offset + SIZE[REF])
nonVariant => [
pad: Card11 ¬ 0,
complete: BOOL ¬ FALSE,
components: SEQUENCE nComponents: Card16 OF RCField],
variant => [
NOTE the specified RCMap for each variant includes all common parts
complete: BOOL ¬ FALSE,
pad1: Card11 ¬ 0,
pad2: Card16 ¬ 0,
fdTag: FieldDescriptor ¬ [],
pad3: Card16 ¬ 0,
variants: SEQUENCE nVariants: Card16 OF Index -- indexed by tag value
],
array => [
pad1: Card12 ¬ 0, offset: Card16 ¬ 0,
unitsPerElement: INT ¬ 0,
nElements: INT ¬ 0,
rcmi: Index ¬ nullIndex
],
sequence => [
pad1: Card12 ¬ 0, offset: Card16 ¬ 0,
unitsPerElement: INT ¬ 0,
fdLength: FieldDescriptor ¬ [], -- actual number of elements is stored here
commonPart: Index ¬ nullIndex,
dataOffset: INT ¬ 0, -- actual data begins here
rcmi: Index ¬ nullIndex
],
ENDCASE];
ObjectKind:
TYPE =
MACHINE
DEPENDENT {
null (0), ref, controlLink, oneRef, simple, linked, nonVariant, variant, array, sequence
};