ICL 1900 Series Computers

Program Layout

The standard program layout in core is:

Lower Data (and reserved locations) - addresses 0 thru 4095 (maximum)
Code - starts where Lower Data finishes
Upper Data - starts where Code finishes thru 32K (maximum 15AM) or 4M (maximum 22AM)

There are no gaps between code and data or separate segments (as on a PC), the Code followed on from the last word of Lower Data and Upper Data followed on from the last word of Code.

Lower Data could be directly addressed and was generally used for constants and frequently accessed data items and could be a maximum of 4K (less reserved areas) in length - 12-bit addressing. Upper Data was indirectly addressed. A small program could easily be less than 4K in length and have no Upper Data at all.

Accumulators X1 - X3 could be used as 'modifiers' to access Upper Data.

Reserved Locations

Words 0 - 7 These are accumulator register, generally referred to as X0 to X7. The accumulators X1, X2 and X3 are the modifier registers.

These words may be used by object programs as operands in both the X and N fields. In cases where the X field of an instruction refers to two adjacent X and X+1, if 7 is quoted as X then 0 is taken as X+1. In cases where the N field of an instruction is interpreted as a double length operand (as for example in floating-point orders), N(M) must not address location 7.
Word 8 This location is used by EXECutive and the central processor hardware for control purposes (Program Counter). It must never be used by the object program.
Word 9 This location is used by EXECutive to provide reply information to the object program after an ALLOT instruction; on certain processors it is also used by the hardware.
Words 10 and 11 These locations are used for communication between object programs and some software packages (e.g. Magnetic Tape Housekeeping). Object programs may use these words only in accordance with the relevant software specifications.
Words 12 and 13 These locations are used by EXECutive to store the floating point accumulator (A) and must not be directly used by object programs.
Words 14 and 15 These locations are used for communication between object programs and some software packages. Object programs may use these words only in accordance with the relevant software specifications.
Words 16 to 29 These locations are reserved for use by various compilation systems. Object programs may use these words only in the manner defined by the compiler specifications. For instance, words 20 to 29 are used as start points (Entry 0 thru Entry 9) when programs are set into an active state.
Word 30 This location contains the 24 switch bits. The switches are numbered from 0 to 23, switch 0 being represented by B0 of the word, and so on. The 'ON' state of a switch is represented by the appropriate bit being set to 1. Switches may be set or unset by operators, by means of the ON and OFF console directives. Object programs may examine or alter the state of any bit in word 30.
Word 31 This location is used by EXECutive to provide information to the object program as to why it has been re-activated. (SUSAR, SUSIN and certain RCTP instructions.)
Words 32 to 44 These locations are always reserved, and must not be used by object programs. For programs without subprograms or members, words 35 to 44 are used in connection with the General Purpose Loader. otherwise, these words are reserved for a different use.
Locations that are Reserved in Subprogramming

The following locations are reserved for use by EXECutive when a program consists of two or more subprograms or members. When these circumstances exist, the relevant words may not be used by object programs. Words 0 to 15 of each subprogram or member are stored in these locations.
Words 32 to 63 These locations are always reserved if the program consists of two or more subprograms or members.
Words 64 to 79 These locations are always reserved if the program consists of three or more subprograms or members.
Words 80 to 95 These locations are always reserved if the program consists of four or more subprograms or members.
NOTE: The references above to the number of subprograms and members assume that they are consecutively numbered, starting from 1. Should this not be so, the reserved area must be calculated on the basis of n subprograms or members, where n is the highest number used to refer to a subprogram or member.