A Value Array occupies 1 Stack Cell for the Untouched_DD MOM Descriptor. It is a Read Only Array which is stored in the Segment Dictionary.
Value Array A(1048(0)); Dump of Segment Dictionary (Stack 0ACC) ..... 000B (01,0004) 5 180041 840009 A (Real array) Untouched, Length=1048, Segmented, Readonly (Codefile address=9) ..... 000B (01,0004) E A80000 001D4B X (Real array) Present-mom, ASD=00EA5D, Length=1048, Segmented, Readonly
A Value Array may be segmented.
It may be a Hex or EBCDIC Character Array, or a Single or Double Precision Word Array, as specified in the Element Size Field of the Untouched MOM Descriptor.
000B (01,0004) 5 1A0312 040009 X (Hex array) Untouched, Hex, Length=12576, Segmented, Readonly (Codefile address=9) 000B (01,0004) 5 1C0189 040009 X (EBCDIC array) Untouched, EBCDIC, Length=6288, Segmented, Readonly (Codefile address=9) 000B (01,0004) 5 190041 840009 X (Double array) Untouched, Length=1048, Segmented, Double, Readonly (Codefile address=9)
A Compiler creates an Untouched MOM Data Descriptor in the skeleton Segment Dictionary of the program.
The Descriptor is marked as being in the CodeFile, and the Address field contains the Sector Address of the start of the Data, relative to the start of the CodeFile.
Tag 5 - UnTouched DataDesc | ||
---|---|---|
Field | Name | Description |
[47:1] | PresentF | 0 |
[46:1] | CopyF | 0 |
[44:1] | SegmentedF | |
[43:1] | ReadOnlyF | ReadOnly Flag. |
[42:3] | SizeF | The size of the elements of the Array: SINGLE = 0 DOUBLE = 1 HEX = 2 EBCDIC = 4 |
[39:20] | LengthF | |
[18:1] | CodeFileF | 1 = CodeFile Initialized |
[17:18] | AddressF | Sector Address |
A Segmented Value Array has the SegmentedF bit set in the Untouched DD MOM Descriptor.
The compiler breaks the Value Array into 256 Word Segments.
Each 256 Word Segment is stored within a 9 Sector Block (270 Words) in the CodeFile. The Blocks of the Value Array are stored adjacent to one another.
The Algol Compiler aligns the first Block to a 9 Sector Boundary in the CodeFile. Since the CodeFile AreaSize is 504 Sectors (or a multiple of 504), a Block can never be split across a Row Boundary.
The MCP Function FETCH_CODE_OR_DATA at 4834610 loads a Segmented Value Array.
In the Algol Manual it states that the maximum size of an unpaged (LONG) Value Array is 4095 words, while the maximum size of a paged Value Array is 32,767 words. In DMAlgol, a paged Value Array may be up to 65535 words.
An unpaged Value Array probably has to be contained within a single Area of a CodeFile. However, the AreaSize of a CodeFile may be any multiple of 504 Sectors. An AreaSize of 5 * 504 (2520 Sectors, 75600 Words) would be required to enclose a 65535 Word Value Array.