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 :
    
      - 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:SIU½DRJNFCKTZLWHYPQOBG"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).
-  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!
      
-  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. 
 
- 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.
- 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.) 
 
- 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.
 
- 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.)
      
- 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.)
 
- 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 :
      
- 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.