The Ferranti Mark 1*

Note that the following information is based on a Handbook produced for the Armament Research Establishment at Fort Halstead, Kent by K.N. Dodd, and on the two documents from The National Archive for the History of Computing :
     C12 "A Radix 32 Input and Organisation Scheme for Ferranti MK.I* Digital Computers", typescript, 1954.
     C13a "Instructions in the Radix 32 Code", typescript, pp.20, 1954. The information is not consistent, and I have not (yet) established how definitive the information I have given here is.

The Ferranti Mark 1 order code was completely overhauled after the first two machines sold in public (to the Universities of Manchester and Toronto). The revised machine was called the Ferranti Mark 1*. A much smallerorder code was provided, and other relatively minor changes made, to produce an instruction set and programming conventions that eliminated most of the idiosyncracies and irritations of the Mark 1.

The changes to the order code and basic programming conventions can be summarised as follows :

  1. Number conventions    The Base-32 symbol codes, on which the notation for writing machine code was based, were changed to a more easily remembered set, i.e. from
    /E@A:SIUDRJNFCKTZLWHYPQOBG"MXV to
    ø½0@:$ABCDEFGHIJKLMNPQRSTUVWXYZ
    (though e.g. 0123456789ABCDEFGHJKLMNPQRSTUVWX might have been even better?). Note that the letter O was left out, presumably because number 0 was included. The new set matched the codes for the teleprinters used for the Mark 1*s (or more likely, the teleprinters for use with the Mark 1*s were expected to match this code set).
  2. Binary numbers and base-32 numbers were now written with least significant digit to the right, to fall into line with the rest of the world!
  3. With a reduced instruction code, it was now possible to represent an instruction by a single base-32 code. This was held in the most significant 5 bits of the 20-bit instruction. The second m.s. 5 bits now only held the B-register (with the 3rd and 4th holding the 10-bit address). This eliminated the irritation in the Mark 1 of the 2nd m.s. 5 bits containing one bit of the instruction code as well as the B-register.
  4. Arithmetic    The standard 40-bit number for arithmetic work still occupied two consecutive addressable 20-bit lines in store (which could start on an odd address as well as an even). But the order code no longer provided formal facilities for interpreting a 40-bit number in each of the four modes : signed/unsigned and integer/fraction-of-1.
        Arithmetic assumed that all numbers were between 1 and minus 1 (with the sign bit at the most significant end, and the implied decimal point after the 2nd m.s. bit).
        The set of arithmetic operations provided was dramatically reduced, in particular removing a number of instructions provided originally on the Manchester Mark 1 to facilitate multi-length arithmetic.
        With the downgrading of the multi-length influence, the only case where it matters how the hardware is interpreting a 40-bit operation is in the detail of the multiply operation. Otherwise the hardware will give the correct answer for any pair of numbers with consistent position of the decimal point.
  5. The obvious deficiency in shift operations was addressed by adding a (arithmetic) shift up or down on the accumulator. But the logical operations were reduced by removing the OR, presumably as part of the process of reducing the order code to < 32 instructions. (Of course OR can be synthesized from AND and NOTEQUIV.)
  6. B-lines    The usefulness of the B-lines was increased by adding a B=B+S as well as the B=B-S. Also the sign bit of the last B-line referred to in a B-operation was remembered as a hardware bit Q; this could then be tested. (This of course was particularly useful e.g. where a B-line was being used in a loop both as an index and to count down the elements of a vector.)
         The subtle distinction between ordinary and "B-exceptional" instructions was removed; the four B instructions were always unmodified.
  7. Control    The control jump instructions were much simplified by providing (only) jumps to direct addresses, contained in the instruction code itself. And the address required was that of the instruction you were jumping to, not the one before. This eliminated a lot of the obscure programming that could be found on the Mark 1! The direct jump introduced the concept of a "literal" for the first time in the Manchester machines (used also in the shift). Of course, with the introduction of the B-line and instruction modification, the less common indirect jump could be easily achieved using modification, by loading the address in a B-line first. (Replacing the relative jump instructions would be less straightforward, but maybe they were deemed a luxury given the well-established programming convention of using page 0 and page 1 of store to load routines from the drum. Also see 8 below.)
  8. An additional control jump was provided to jump on the sign of the last B-operation.
         An instruction was added to set the address of the current instruction in a store line. Dodd describes this as "of little use", but it was clearly designed for use in a subroutine cue, and possibly to facilitate relative jumps. (A neat solution to achieve relocatability for a routine would be to start the routine by storing the address of the start of the routine in a B-line, and using it to modify each local jump.)
  9. Input/Output    The input/output machinery was removed from the special "magnetic" instruction, where on the Mark 1 the set of peripheral operations, i.e. input/output and drum transfers, were placed in a single instruction in the main order code; this gave the address of a store word containing the detailed coding. The operation of reading the next character from paper tape, and writing the next character, were separate instructions in the main order code. In addition :
  10. An extra page was added to the store which was write-only, and dedicated to use with a high-speed printer (this is described only by Dodd). It could be filled with character codes (appropriate to the printer), one character per 20-bit line, and then a special instruction would print the 64 codes in the page as the next line on the high-speed printer.