Group Echo Final Report

Introduction

Throughout this documentation, as throughout the project, the 1949 EDSAC is viewed as being the "Initial Orders 1" version, while the 1951 EDSAC is the "Initial Orders 2" version. This is not strictly authentic, as the EDSAC changed on (what seems likely) a weekly basis, with the instruction set in a constant state of flux. Hence the design decision was taken to simulate two versions: the very first version of the EDSAC, here called the "1949 version", and the "1951 version", which used Initial Orders 2, and includes a dial for interactive user input.

Current status

The project is known to run in appletviewer on thor very well (appearance being dependant upon choice of window manager), as well as in appletviewer on Windows 98. It is known to not work very well in a browser, probably due to slightly different implementations of the JVM.

The simulator is complete; running nearly every program written for the EDSAC using both Initial Orders 1 and 2, prior to the addition of the B-register. We believe that the few (very minor) incompatibilities that still exist can be easily fixed.

The appearance of the program, especially the popup windows could be improved, but this is simply a matter of fidding with the AWT to achieve more pleasing results.

Documentation has proceeded well, and a user manual exists, as well as code documentation, in both this documentation, and on the website as generated by javadoc. The code is easy to understand, as it is fundamentally a fairly simple program, at least structurally.

Program Design

The program design was decided towards the beginning of the projects, and the outline design is present in both meeting minutes, and the abstract classes that were drawn up for the first review meeting. However, a brief recap here would probably be helpful.

The project class heirarchy (ie a list of all group-created classes) is as follows:

Obviously, the instantiation structure of the program will differ, and things like LongWords are instantiated in the Cpu and Memory, while being defined in the datatypes package. The instantiation heirarchy of the program, with respect only to those parts directly corresponding to the EDSAC is shown below:

Individual Contributions

Trevor Boyd

Trevor's initial role was that of research, with testing becoming his responsibility as the project progresses. Trevor found several good sources of information on the EDSAC, from both the Computer Laboratory Library, the Internet, as well as from Maurice Wilkes himself. This background allowed Trevor to become our group expert on the EDSAC, and he was often able to sort out areas of confusion we had about the operation of the EDSAC. In addition to this, Trevor coded the example programs for our project, his first one being the "Happy 50th" program, which used left shifts, and carefully chosen values, to scroll the message "Happy 50th" across the CRT display of the simulator. This program turned out to be a valuable one to run first on each new build of the simulator, as it provided obvious feedback if something was wrong.

Trevor was involved in the production of the prototype code, and wrote the test wrappers for the Kernel code: a collection of classes which put the core simulation code through a series of arithmetic tests to ensure that they operated correctly. The first major bug this detected was the fact that the Accumulator didn't do multiplication correctly! Trevor also coded the first version of the TapeReader, which was hacked into the Kernel in the middle of the project, before ending up (very changed) in the GUI.

Towards the end of term, Trevor was busy coding more example programs, as well as being closely involved with Crispin in implementing the 1951 instruction set, so that programs which required Initial Orders 2 could be simulated.

Crispin Flowerday

Crispin spent all of him time developing code for the simulator, and was responsible for the CPU and its interface with the rest of the Kernel. As can be imagined, the CPU really is the heart of the system, being the class which actually runs real EDSAC code. Although the internal structure of the CPU is fairly simple (being essentially a very large "case" statement), it interfaces with the Memory, and all of the registers, making it rather trickier to get right.

It proved a relatively simple task to implement the 1949 version of the processor. It proved slightly more difficult to get it to actually work! The 1951 version proved much more difficult, as specific specification material was difficult to come by, and because the initial orders were much more complex, supporting more advanced concepts such as relocatable code, and relative addressing. Crispin was also heavily involved in prototyping the Kernel, fixing bugs as far apart as in the GUI and the CPU, and completed the not inconsiderable task of sorting out how we used threads and managed garbage collection.

Matthew Bentham

Matthew volunteered for the job of documentation right at the beginning of the project, and went on to produce both the User Manual, and much of the (non-management) documentation present on the Group Echo homepage. He was also involved in the creation of the initial specification documentation, and looked after the shared filespace on thor for a time, before demonstrating the use of RCS to us.

Simon Freytag

Simon coded the GUI (with a little help from Simon Greenway). He oversaw the development of the GUI from the very first prototype, through until the addition of the 1951 input dial at the end of the project. The GUI has to talk to two things: the user, and the simulation engine (called the Kernel), so that the user can control the simulator. Simon Greenway designed the interface between the GUI and the Kernel, which Simon Freytag uses to control the Kernel, communcating the user's requests, as well as handling the EDSAC's simulated tape-reader and tele-printer. Simon went along with Trevor to see Maurice Wilkes, and was able to use what he learned there to better model the "loof & feel" of the EDSAC.

Simon Greenway

Simon specified and coded the interface between the GUI and the Kernel. He helped with prototyping, and is responsible for the speed control on the GUI, in addition to the back-end complexities of slowing down the program in the right places. Simon also coded the TelePrinter, and adapted Trevor's tape reader. Simon's code "glues" to two main parts of the simulator together, and enabled the programmers to stop worrying too much about concurrency.

Simon Frankau

Simon Frankau basically prototyped and coded the contents of the Kernel, with the exception of the CPU. He is responsible for the ShortWord, LongWord, Address, Memory, Accumulator and most of the Kernel itself. The first three classes are used extensively as parameters to functions, and are defined in the datatypes package, being wrappers for n-bit values.

The Memory is coded as an array of LongWords, with the registers each being an instance of one of the datatypes, with the exception of the Accumulator. The Accumulator class is probably the main piece of Simon's code. It handles the vast majority of the arithmetic that occurs in the EDSAC in its many (71-bit) arithmetic methods. This allowed Crispin to make his CPU simpler.

Simon was also heavily involved in code integration towards the end of the project; his knowledge of his many pieces of code helped immensly.

David Dunwoody

The group manager, David was responsible for everything that wasn't directly related to the code: organisation of meetings, taking and writing up of minutes, filespace management, backups, writing the website, and co-ordinating the efforts of the team members. He is responsible for the project documentation, writing documents such as this, and collated work for each review meeting. He will also be giving the end-of-term presentation.

Further information

Fuller code documentation can be found at http://thor.cam.ac.uk/group/CST1b/echo/javadoc/packages.html.

Further details of what happened during the term, including full minutes of all our meetings, can be found at http://thor.cam.ac.uk/group/CST1b/echo/, under the link titled "Project".

Return to index

Author: David Dunwoody