page_title: ICL 2900 Series
section_title: Addressing mechanisms
hierarchical_section_title: ICL 2900 Series / Architectural concepts / Addressing mechanisms
caption_attribution_description: An ICL2966 mainframe from 1982/83 at the national Museum of Computing. The system isn't completely up and running yet, but the volunteers are working on it.
context_page_description: The ICL 2900 Series was a range of mainframe computer systems announced by the UK manufacturer ICL on 9 October 1974. The company had started development, under the name "New Range" immediately on its formation in 1968. The range was not designed to be compatible with any previous machines produced by the company, nor with any competitor's machines: rather, it was conceived as a synthetic option combining the best ideas available from a variety of sources.
  In marketing terms, the 2900 Series was superseded by Series 39 in the mid-1980s; however, Series 39 was essentially a new set of machines implementing the 2900 Series architecture, as were subsequent ICL machines branded "Trimetra".
context_section_description: The 2900 architecture supports a hardware-based call stack, providing an efficient vehicle for executing high-level language programs, especially those allowing recursive function calls. This was a forward-looking decision at the time, since it was expected that the dominant programming languages would initially be COBOL and FORTRAN. The architecture provides built-in mechanisms for making procedure calls using the stack, and special purpose registers for addressing the top of the stack and the base of the current stack frame.
  Off-stack data is typically addressed via a descriptor. This is a 64-bit structure containing a 32-bit virtual address, plus 32 bits of control information. The control information identifies whether the area being addressed is code or data; in the case of data, the size of the items addressed (1, 8, 32, 64, or 128 bits); a flag to indicate whether hardware array-bound-checking is required; and various other refinements.
  The 32-bit virtual address comprises a 14-bit segment number and an 18-bit displacement within the segment.
  Technically the order code is not part of the 2900 architecture: this fact has been exploited to emulate other machines by microcoding their instruction sets. In practice, however, all machines in the 2900 series implement a common order code or instruction set, known as the PLI (Primitive Level Interface). This is designed primarily as a target for high-level language compilers.
  There are a number of registers, each designed for a special purpose. An accumulator register (ACC) is available for general-purpose use, and may be 32, 64, or 128 bits in size. The B register is used for indexing into arrays; the LNB (Local Name Base) register points to the base of the current stack frame, with the SF (Stack Front) register pointing to the movable 'top' of the stack; the DR register is used for holding descriptors for addressing into the heap, and so on. There are also two 32 bit pointers to off-stack data; XNB (eXtra Name Base) and LTB (Linkage Table Base).
  Data formats recognized by the PLI instructions include 32-bit unsigned integers; 32-bit and 64-bit twos-complement integers; 32-bit, 64-bit and 128-bit floating point; and 32-bit, 64-bit, and 128-bit packed decimal. Conventionally (and strangely to those tutored on C and UNIX) the boolean value true is represented as zero, false as minus one. Strings are held as arrays of 8-bit characters, conventionally encoded in EBCDIC (though ICL's EBCDIC has minor variations from IBM's version). It is possible to use ISO (essentially ASCII) instead of EBCDIC by setting a control bit in a privileged register; inter alia, this affects certain decimal conversion instructions.
  Because some of the PLI instructions, notably those for procedure calling (especially system calls) are very powerful, instruction rates on 2900 Series are not always directly comparable with those on competitors' hardware. ICL marketing literature tended to use the concept of "IBM equivalent MIPS", being the MIPS rating of an IBM mainframe that achieved the same throughput in application benchmarks. The efficiencies achieved by the 2900 architecture, notably the avoidance of system call overheads, compensated for relatively slow raw hardware performance.
caption: ICL 2966 disk drives
exif: {}