So the 40-digit number :
10001 11011 10100 01001 10001 11001 01010 10110
could be written more concisely as: Z"SLZWRF.
The system was particularly useful for representing 20-bit instructions (with just 4 characters) and page and line addresses.
These symbols are essentially the teleprinter code for letter shift. As
5-hole tape only provided 32 different values, and around 60 are necessary to
provide for (upper case only) letters, digits 0 - 9 and a reasonable selection
of other symbols, there were two code sets, "letter shift" and "figure shift"
with two special codes (the same in each set) to indicate that subsequent
codes were to be interpreted as belonging to the letter shift set or figure
shift until the next special code was met. The 6 non-letter codes in letter
shift, 00000, 01000, 00100, 00010, 11011, 11111 had special (non-character)
effects in true teleprinter code, i.e.
No effect (blank tape), Line feed, Space, Carriage Return, Figure Shift, Letter shift,
These were given special characters so that they could be written down on paper, respectively /, @, :, ½, ", £. Of course, until software was provided to interpret the special characters a teleprinter print out of these codes would still carry out their original function!
It was unfortunate that the teleprinter codes for letters bore no obvious relation to their alphabetic order!
The development of radar in the UK was initiated by the Tizard Committee on Air Defence in 1935. In 1935 the first experimental radar transmitter was erected at Orfordness on the East Anglia coast, east of Ipswich. In 1936 the small research group moved to nearby Bawdsey Manor, and it became known as BRS (Bawdsey Research Station). This was the central research group for RAF applications of radar, expanding over the years, changing its name three times and changing its location three times. At the start of the war, in September 1939, it moved to Dundee on the east coast of Scotland. In May 1940 it moved to Worth Matravers near Swanage, Dorset, on the south coast. Around May 1942 it moved to Malvern, near Worcester in the West Midlands, where it took over Malvern College. On the move to Dundee its name was changed to AMRE (Air Ministry Research Establishment), then it became MAPRE (Ministry of Aircraft Production Research Establishment), and finally in November 1940 it became TRE (Telecommunications Research Establishment).
The Air Defence Research and Development Establishment, ADRDE, also moved to Malvern, and TRE and ADRDE (renamed Radar Research and Development Establishment in 1944) were amalgamated in 1953 to form the Radar Research Establishment, RRE, renamed the Royal Radar Establishment in 1957.
Further mergers, reorganisations and renamings took place from 1976, and it became part of DERA (1995), the Defence Evaluation and Research Agency. This has now (2001) split into QinetiQ and dstl, the Defence Science and Technology Laboratory.
Looking at the program and its
explanation, separate store
locations were used to store both
positive and negative current values of both a and b, and in fact
a-1 was held rather than a, i.e. the initial value of b
(the usage was: 23 -a, 24 a-1,
26 -b, 27 b). Both a-1 and -a
had to be keyed in before starting the program for a given number. This is not
as bad as it seems, as
-a + (a - 1) = -1
so one number was the ones complement of the other, and setting a second initial value in a store line by simply reversing each bit of the first is very little effort. Also remember that the program would need to be extended by three instructions, to set the second value from the first, so therefore if the whole program is being loaded in the machine rather than just rerunning the same program with a different number, then three instructions would have to be keyed in to save setting the second initial value for the run!
The original program used the store line initialised to a-1
to also hold the value of b as it counted down till a factor was found
(in the limit 1).
However given that the reliability of the Baby was not yet established, it
was safer to run the same program more than once to be confident of the
result. So two instructions were added, to copy a-1 to form the initial
value of the trial factor b, so that the program could be rerun for the
same number without reinitialising a-1.
The Reconstructed First program
Tom Kilburn and Geoff Tootill reconstructed the first program in 1996, using their memory and the evidence on a page in Tootill's Notebook written on June 21st 1948, partly by Tom, recording information about the early runs (in particular referring to specific store addresses).
As predicted (see note above), the reconstructed program does not copy the initial value of b, and in fact it also does not set the initial value of -b; so it saves 4 instructions at the front, and requires 3 values to be initialised if rerunning the program. However it adds 1 instruction because it starts with setting the Accumulator to 0, good practice at the start of routine (and with such a small store Tom was already thinking in terms of using the Baby to test subroutines). And it adds the second because Tom wanted to show a "fork" in a program (i.e. testing and jumping to one of two places in the program depending on the result), and so at the test finishing the outer loop he put a jump to the HALT instruction instead of the HALT instruction itself.
The reconstructed program also tested for terminating the outer loop after b had been reduced by 1 (and so the fork and HALT are the last lines in the program). This meant that when you checked the Display Tube to find the highest factor the appropriate line held the answer minus 1 -- another disadvantage of the original program in practice.
But remember that this was the first time anyone might have thought of counting actual instructions obeyed, and a major purpose of the Baby was to test the CRT's ability to read and write small bit strings at electronic speeds, and hold the value of bits between resettings over as long a period as was required. So the most natural figure to show how much the store had been exercised was the number of store accesses.
The program would test each number down from 262,143 (218 - 1) to 131,072 (217) which is the highest factor. Each number would take two cycles of the inner loop (a - b > 0, then a - 2b < 0) and one of the outer loop. Assuming these loops were similar to the amended program this gives 16 instructions per number, so the total number of instructions is 16 * 217, i.e. 221, + 4 for the initial sequence and - 5 saved on the final loop because the HALT is obeyed.
Each instruction requires two store accesses, one to fetch the instruction and one to read/write the operand, except for the test instruction (no operand). This gives 29 store accesses per number tested (two inner loops, one outer), which gives a figure of 3.80 million. The reconstructed original program had a similar inner loop (16 instructions, 29 store accesses) and the figure of 3.5 given in the Letter may have been due to a typographical error somewhere. (Given that the word length is given as 31 not 32, this is not inconceivable!)
Note that the running time of 52 minutes given for this run gives an average instruction time of 1.5 milliseconds per instruction, which is slower than the figure of 1.2 quoted on these pages. This is not very significant, as the instruction speed could vary quite significantly depending on the most recent "tweaking" of the circuitry.
If you are limited to one of the standard mathematical operators, you choose "-" rather than "+". You can always get one from the other by first negating one of the operands. But to negate a number, you need "-" (you can then subtract it from 0)! Note that the load instruction was a load negative rather than a straight load, which was presumably expected to be more useful in practice, given no "+".
E.g. to set the accumulator to x + y, using z as workspace, you would use the sequence:
A = - x
A = A - y
z = A
A = - z
In the end there was a spare code on the Baby (relative to using 3 bits for the instruction code), but the aim was to produce a minimal instruction set in terms of hardware required for a universal programming capability, and in this situation "+" is redundant. In fact the spare code (5) was also obeyed as A = A - S, the bottom bit not being decoded if the top two were as for 4 or 5.
Perhaps the spare code would usefully have been a positive load, which would not have required much extra hardware. But remember that only a handful of programs were written in this order code. Within two months the instruction set had been increased (now using 4 bits) and included A = S, A = A + S and A = A & S. (It is the people who entered the Baby Programming Competition who are the main sufferers!).
One of the indirect jump instructions is redundant, but the advantage of having both relative and absolute jumps was realised in the early thinking on programming. It is less clear why indirection was used, though it is clearly more flexible (see note below). And note that the relative jump required an adder, but it would only need to be a 5-bit adder. It is interesting that the use of 'literals' (fields of the instruction code used as direct operands) took a long time to come to Manchester.
The Mark 1 machines changed control using indirect addresses, i.e. the instruction contained the address of a word containing the address of the instruction to be jumped to rather than the address of the instruction itself. The invention of the B-line would have provided an easy solution to providing indirect jump address in the relatively infrequent occasions they were actually needed. So it is a pity that the chance was not taken in the design of the Manchester and Ferranti Mark 1 to make the address of the control instructions a (modifiable) direct address; this would have made the common jump instructions much easier to use! Whereas it would be fairly easy to position the required direct addresses with the local scalars and constants required for a routine, it was also a great temptation to save space by putting them in address fields of instructions like clearing the accumulator, hooting and stopping, which did not use theirs (see example).
The control mechanism was not tidied up until the Ferranti Mark 1*. Here all jumps were simply to an absolute address contained in the address field of the instruction. The instruction could then use address modification to achieve the less common case of an indirect or relative jump (e.g. ...).
Address modification with special registers was an important early expansion to the obvious order code of a computer. (Say) 3 bits of any instruction code which involves an operand address are used to specify one of (say) 8 special registers, "B-lines"; then the contents of the specified B-line is added to the address in the operand field before the instruction is obeyed.
This means that access to vectors is much easier, the contents of the specified B-line giving the current index position and the address the base address of the vector V (the address of V -- or where V would be if it existed). Alternatively a B-line can be used to locate a block of scalars at run time (e.g. the local data of a subroutine on a stack), the contents of the specified B-line giving the base of the block and the address the relative position of the required scalar within it.
B-line 0 would by convention be kept at 0, so it could be used where no modification was required (rather than e.g. duplicating instruction codes to give versions with and without modification).
Typically the B-lines would be shorter than full numbers (e.g. 20 bits on the Mark1s rather than 40 bits), and would be held in a special fast store with special fast arithmetic circuits, since B-modification added an extra store access and addition to the time to execute an instruction.
On the Mark 1s in fact the B-line was added to the whole instruction before obeying the instruction. This gave some (dangerous!) flexibility in permitting alteration of instruction codes. In later machines, where typically the size of the address field of an instruction would be insufficient to address all the RAM or virtual store space, it was realised that it was better to only add the B-line to the address, thereby allowing instructions to directly access store outside the address range.
The B-modification patent was the only one of the 34 patents deriving from the Williams-Kilburn CRT Store and Mark 1 era that has a name outside the Electrical Engineering department, Max Newman of the Mathematics department contributing to it.
And why were they called "B-lines"? At the time they were thought of the extended Baby already had three auxiliary tubes, the accumulator tube A, the control tube C to hold the address of the current instruction and the instruction itself, and the D tube to hold the multiplier and multiplicand for multiplication. So the fourth tube was called the B tube ...
The principle of the Mercury Acoustic Delay Line memory was that a string of (say) 1024 bits would be cycled through a (say) 5 foot tube filled with mercury. A bit would be converted from an electrical pulse to a sound pulse, then sent down the tube as a sound wave, then detected and reconstituted at the other end, and finally passed back to the beginning to repeat the process. The time it took for a bit to travel down the tube caused a sufficient delay to enable the rest of the bits to be transmitted in the same way before it was its turn again to be sent through (with the same value unless it was required to be changed). A bit could only be accessed by the electronic circuitry of the computer at the point of time it was being transferred from the end of the tube back to the beginning.
This of course meant that access to any particular string of bits constituting a "word" in a Delay Line store was not random. There could be a wait of anything from 0 to the full cycle time of a Delay Line before you could start to access the word. So if the capacity of a tank was say 32 words of 32 bits, the average access time would be around 16 times the basic handling time of a single word. A Mercury Acoustic Delay Line store would consist of a number of Delay Lines, and at least access to any given Delay Line (often called a "tank") would be random. The problem of non-random-access to a word within a tank was compounded by the fact that there is a tendency to access both instructions and data in sequence, in which case the average access time would tend towards 32 times the basic word-handling time. (And of course a typical instruction will require both an access to store to fetch the next instruction and one to fetch an operand.)
Combating this innate inefficiency could contribute significantly to the complexity of the architecture and programming techniques required. For example instruction sequences or store accesses that were by nature sequential had to be dispersed along the Line, with other useful information in between, so that when it was time for the next instruction to be obeyed there was not too long to wait before the relevant bits appeared in the 1024 bit string. So each instruction code had to contain the address of the next instruction. (The EDSAC however, always with an eye for speed of building, simplicity and user convenience even at the cost of performance, did without the extra address.)
In the end the random access problem was partially solved by shortening the Lines (relative to the length originally proposed) and increasing the number of Lines, and of course providing random access at least to each Line. In the end the ACE had 200 Lines when it was eventually completed in 1950. The EDSAC (completed in 1949) had 16 Lines each holding 16 35-bit words or 32 17-bit instructions. EDVAC (completed in 1951) had 128 Lines each holding 8 words of 44 bits.
As well as complicating the architecture and programming of a computer using Mercury Acoustic Delay Lines, the mercury filled tubes were non standard components that had to be handled very carefully; they were bulky and had to be kept under close temperature control. Some feel of the mechanics of using them can be gained from looking at the description of the building of EDVAC, about 40% down the page (a chapter from a monograph on the history of Electronic Computers within the Ordnance Corps, written in 1961). EDVAC was the official U.S. successor to the ENIAC, with the design finalised in 1947; but it didn't start to work usably till late 1951 -- "by early 1952 it was averaging 15-20 hours of useful time per week". Here you can see that EDVAC had a main memory of 128 "tanks" of delay lines, each holding 8 words of 44 bits (plus 4 blanks), i.e. 384 bits. This gives 1024 words of 44 bits, with random access to a block of 8 words. Bits were delivered at one per microsecond, so access to a random word was between 48 and 432 microseconds, which compares favourably with the random access time to a single word in the Manchester machines. The main store was also much bigger than the Ferranti Mark 1, which was 256 40-bit words, but of course the Ferranti Mark 1 had a fast drum backing store of 16,000 words.
The NPL machine Turing was designing, the ACE, was based on a proposed method of storage using Mercury Acoustic Delay Lines, as was the other major computer project in the U.K., the EDSAC at the University of Cambridge, and the main project in the U.S.A, EDVAC, on which the EDSAC was based.
The Williams-Kilburn CRT Store provided fast electronic random access to the bits being stored. So information in the typical basic units required (e.g. 32 bits for a number or instruction) could be read from store and a complete instruction executed at an acceptably fast speed (1.2 milliseconds on the Baby). With a Mercury Acoustic Delay Line the unit of random access was the full 1024 bits that the Line would hold. So to access a random basic bit string you had to wait till it "came round" in the 1024-bit string.
It was also clear that attempts to overcome the innate inefficiency of the Delay Line store, e.g. storing sequential data like instructions and lists with gaps between elements to optimise on the accessing, would cause considerable additional complexity to the machine architecture and programming. And Turing's original ACE specification was much further from the simple model of a stored-program computer (with a simple true random access store) than the other contemporary Delay Line machines.
It was only around the time that Turing had gone to Manchester (September 1948) that NPL, having completely reorganised the project, and having brought in Electronics personnel, started work in-house on the design and construction of a cut-down version of Turing's design, the Pilot ACE. This was completed in May 1950.
The Bombe was an electro-mechanical device, developed by Turing with help from another mathematician W. G. Welchman, inspired by the Polish 'Bomba'. It used a large amount of parallel operation. The Bombe would test all possible settings of the Enigma for consistency with with a "crib" presented to it; this was a short fragment of an encoded message for which the likely source text was known; when a consistent setting was found it would be passed on to a team with an Enigma "emulator" to see if under that setting the whole message consisted of recognisable German. If a successful setting was found for a particular message it would soon lead to the decoding of all the messages sent that day for the particular organisation that had sent the message. Given that there were millions of possible settings the secret of its successful use was the application of logic and statistics to minimise the set of consistent settings that had to be tried out on the emulators.
For more information see page on the Turing website.
On the Transistor Computer the main storage was on tracks of a drum. With each track holding of the order of 3000 bits the situation would be even worse than using a long mercury acoustic delay line. If you wanted to avoid waiting the order of a drum revolution before reading the next instruction or piece of data, information that you would normally access sequentially, like consecutive instructions or elements of a vector, would be interleaved with other such information. So by the time the current instruction had been obeyed you hoped that the next instruction/element was about to appear!
To permit such inevitable requirements to optimise programs, each instruction contained the address of the next instruction, suitably placed around the drum from it to appear as soon as the current instruction had been completed. Organising program and storage in this way was known as Optimum Programming.
There were four distinct computers in the progress from the Baby to the Ferranti Mark 1:- the Baby, the Intermediary Version of the Manchester Mark 1, the final Manchester Mark 1 and the Ferranti Mark 1. Any could be called a prototype for its successor. The Baby could legitimately be called the prototype for all Von Neumann computers. Insofar as it is the Mark 1 Prototype, which Mark 1 are we talking about, or is it a generic use of "Mark 1"?
There was a step function advance between the Baby and the three Mark 1 versions, whereas the three Mark 1 versions were closely related. The Intermediary Version was just that (with respect to the Manchester Mark 1), a coherent and usable computer with the peripheral facilities not yet fully operational.
The clearest case of using the word "prototype" is to call the Manchester Mark 1 the prototype for the Ferranti Mark 1. It was known from the time work was started on the former that it was expected to be the basis of the design of the latter, with only relatively small changes likely due to learning from the experience of building and running the Manchester Mark 1 (and also due to any improved techniques available, and different considerations required for a commercial machine, e.g. safer engineering). In practice the amount of change between the two machines was quite considerable, and improvements that might have been tried out on the Manchester Mark 1 were first put in on the Ferranti Mark 1.
The term "Williams Tube" was coined by the Americans and has been used universally since (up to 1998) to refer to the family of storage devices based on the Williams-Kilburn patents. It was never called the Williams Tube in the early papers by Williams and Kilburn.
Only the provisional patent of December 1946 was taken out in Freddie Williams' name alone; all the other patents had both names on. Tom Kilburn was able to work full time on the development that took place throughout 1947, whereas Freddie Williams, as head of a Department, had many other duties. Also it was Tom Kilburn who by March, having got the original experiment transported to Manchester and back into working order, observed that there were better methods than the "anticipation" method.
Tom Kilburn contributed most of the work and much of the new ideas in 1947, and produced the key document at the end of 1947 that was influential in other groups adopting the Williams-Kilburn CRT Store (most notably IBM).
So in retrospect a more considered coining (if less convenient) is arguably the "Williams-Kilburn Tube". Throughout these pages the preferred usage is "Williams-Kilburn CRT Store" to refer to the general mechanism and "Williams-Kilburn Tube" to refer to an individual Cathode Ray Tube (plus the additional pick-up plate and circuitry).
In a radar display on a Cathode Ray Tube, there is a standard problem of the static information cluttering the screen, in particular the echoes from the local land topography. It was hoped that if the images of the static objects were held on a second CRT, then at each refresh they could be subtracted from the current image, to reveal only those objects that were moving (provided they were not moving inside the static areas!)
In the article :
Kilburn, T., and L.S. Piggott, "Frederic Calland Williams, 1911-1977", Biographical Memoirs of Fellows of the Royal Society, Vol.24,1978, pp.583-604.
the story is told that E.H. Cooke-Yarborough in 1941 was talking at afternoon tea to Freddie Williams about an unexpected piece of behaviour of an automatic range gate he was working on. Williams guessed at the explanation and saw how it could be adapted to provide further capability for the circuit. He immediately set to work to make up a similar circuit, added a few components, and by the end of the afternoon had a new circuit working with the added functionality, and a memorable name! This circuit "became widely known" (but was this because of its name or its usefulness?!).
To be fair, I spotted two or three routine references to a "phantastron circuit" in Tom Kilburn's 1947 report to TRE; this was 6 years later!
(As Tommy Thomas recalls: ) Freddie Williams could work out the approximate size of the drum he needed from the desire to store 2 pages of bits on a track around the circumference (i.e the amount held by a double-density CRT) and have a reasonable number of parallel tracks. So he scoured appropriate departments of the University for such an object, and found a discarded component from a cloud chamber experiment, a brass cylinder about 12 inches diameter and 2 inches deep. Having constructed a motor around the drum that would synchronise with the CRT refresh cycle (with the help of J.C. West), he then had to decide on a suitable recording surface.
As soon as he decided the best magnetic coating for the drum would be nickel, he shot across the road to a motor cycle component electroplating shop he could see from his office, and within a week had a drum with a suitable magnetic surface, ready to develop the read and write mechanisms.
The drum was attached to the Mark 1 (Intermediary Version) for testing -- the original ancestor of today's disc. However in 1949 Ferranti provided an industrially engineered version of the drum and motor, which it must be admitted was gratefully received by the people developing the drum store for the Manchester Mark 1!
ENIAC was designed and built primarily to provide gunnery aiming tables as part of the U.S. war effort. It was expected that it would be running for weeks at a time on the same program, or closely related programs, and changing to a related program was much quicker than the painful process of changing to a completely different one.
A Mersenne Prime is a number of the form 2n - 1, where n is prime and the number itself is prime. By 1947 possible primes up to n = 258 had been investigated, giving a known list of
n = 2, 3, 5, 7, 13, 17, 19, 31, 61, 89, 107 and 127
Mersenne Primes was one of the research topics chosen early on by Professor Newman as suitable to demonstrate the use of computers in pure mathematics. Alan Turing devoted much time and enthusiasm to developing ever faster programs, and there is little doubt that the multilength requirements of the program had an appreciable effect on the detail of the Manchester Mark 1 order code.
In the end the next Mersenne prime was found in 1952, at 2521 - 1 (by Robinson) though obviously finding out that numbers above 2258 were not Mersenne primes (and checking those below) was perfectly valid research (if somewhat unrewarding!).
It is perhaps foolish to pursue the What-Ifs of history too far, but it is quite possible that if ENIAC had not existed (or like Colossus had been kept top-secret), then Freddie Williams' interest in an electronic store for computers could still have been triggered at much the same time:
The Mark 1 machines were always liable to transient errors.
If you were doing a long run, the common procedure was to split the program into sections of say 5 minutes of computing, store the intermediary results on the drum, and then rerun the section and only proceed if the two sets of intermediary results matched.
The instructions for reading/writing pages to/from CRT store from the magnetic drum had alternative versions that enabled you to check the transfer (at the cost of the time required to repeat the transfer).
Dai's M.Sc. thesis refers to a 9-hour run with only one error, and this is probably the same occasion, but the program once had to repeat a section because of a non-match! (Of course one should therefore translate a 9-hour error-free run to a "correct" run of say 4 hours useful computing. It is not clear how much time on the Intermediary Version would be spent doing the drum transfers manually. However in this particular case, almost certainly a run on Mersenne Primes, there was probably no need to use the drum, as the working space for the algorithm was small.)
The Liverpool and Manchester Railway, 31 miles (50 km.) long and opened in 1830, was the first railway to provide a regular scheduled passenger (and freight) service powered entirely by steam locomotion. The first railway line to use steam, the Stockton and Darlington, 10 miles (16 km.) long and opened in 1825, did not have reliable enough engines to maintain the passenger service, so it was usually powered by horses!
The Liverpool and Manchester Railway was first proposed in the early 1820's, at much the same time as the Stockton and Darlington, but it met powerful opposition from the canal lobby, for example the Earl of Bridgewater. This caused a delay of 2 or 3 years, and it took 4 years to build, but this did then mean that when it was opened it was steam powered from the start, using a set of engines based on Stephenson's Rocket. The terminus at the Manchester end is in the grounds of the Museum of Science and Industry in Manchester, and the warehouse next to it is now being developed by the Museum to increase its display space.
Pigot's set of maps of British Counties published in 1840 includes a description of each county (written in wonderful prose) with a section describing the county's railways. It has a particularly long entry for Lancashire, because of the special importance of the Liverpool and Manchester Railway. Here it marvels at the 7.00 p.m. train on June 14th 1838 being timed at an average speed of 45 miles an hour (72 km./hr.), and tells the story of a Manchester businessman who went to Liverpool one morning and found an excellent consignment of cotton at a good price. He brought back 150 tons to Manchester, which was immediately bought up, so he returned to Liverpool and bought back another 150 tons the same day. (Was the cotton stored in the 1830 Warehouse?) It also records that there was an average of 1,200 passengers a day in the first year of operation (mostly travelling the full distance), rising to 2,100 a day in the year July 1835/36. This compares with a daily average of 400 using the 30 coaches that plied the journey before the railway was opened. By 1840 it records that there was only one coach left. No wonder the canals felt threatened and horses realised they were now destined at best to be a unit of power for mechanical engines!
The second year of Computer Science undergraduates held a Reunion Dinner at the University of Manchester on Thursday June 18th 1998. This was the intake of 1966, graduating in 1969. The dinner took place in the Christie Bistro, and was attended by :
Chris Biscombe |
Chris Coatesworth |
Of the 11 that Anne and Lucy located but who couldn't come to the Dinner, 3 were from the U.S.A. They were unable to locate Mike Cohen, Brian Faries, Derek McTear, Tim Mott and Rob Richardson. If any of you are out there and connected, please let us know where you are (firstname.lastname@example.org). The final two of the class of 36 have sadly since died, Myrto Coudonari and Tom Sweeney.