icl2900.org.uk Order code

Overview

These are some odd comments about the 2900 primary order code (in theory, it could have several, and was indeed capable of emulating other pre-ICL systems). For a full reference document to the order code, see the Documents section.

Radical change?

The 2900 series had four basic operand forms: one direct, and three indirect (using the descriptor register). Each of these had eight variants, of which four were defined relative to a register:

  • LNB or Local Name Base (the base of the current stack frame).
  • XNB or Extra Name Base (usable for anything by the programmer).
  • CTB or Compiler Table Base (usable for anything again).
  • PC or Program Counter (mainly used for accessing inline constants).

I seem to recall that CTB was introduced some time in the mid-1970s, and prior to that, this particular operand form accessed items relative to the bottom of the stack. It was apparently discovered that it was awkward to use XNB alone for off-stack access (partly due to the necessity to access linkage tables), but I can remember little else.

If anyone has more information, I would be interested to hear it.

Architectural modification level

The 2900 series has the concept of an Architectural Modification Level (AML). On the P-series machines, only AML0 and AML1 seem to have been used. The AML can be accessed via image store location hex 10, bits 16-23; such access is unprivileged.

  • AML0 uses the original system definition.
  • AML1 adds the following:
    • An alternative format for the RRTC instruction.
    • An alternative form of the VAL instruction.
    • System call counting.
    • Parameter space checking for system calls.
    • Addition of an image store bit to control the clearing of slaves in the INCT and TDEC instructions.
    • (B+N) operand form.
    • Vector descriptor, type 0, size code 4 (16 bits).
    • Vector descriptor for signed items.
    • Null descriptors.

Ghostly instructions

There are three instructions which were allegedly present in AML1 only. They appeared in documentation around 1978, but then disappeared again. it is assumed that they were never widely implemented. They are:

  • TEST. This tests the value of a 32 bit location in memory, and sets condition codes accordingly.
  • CLR. This clears a 32 bit location in memory to zero, without using ACC or B.
  • SET. This sets a 32 bit location in memory to all ones, without using ACC or B.

Valid XHTML 1.0! Valid CSS!

This site is copyright © 2026 Bob Eager
Last updated: 11 Feb 2026