Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
EDSAC
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
==Technical overview== ===Physical components=== [[File:EDSAC (5).jpg|thumb|9-inch tubes used for monitoring]] [[File:EDSAC (20).jpg|thumb|William Renwick with 5-hole tape reader and Creed teleprinter]] As soon as EDSAC was operational, it began serving the university's research needs. It used [[delay-line memory|mercury delay lines]] for memory and [[derating|derated]] [[vacuum tube]]s for logic. Power consumption was 11 [[Kilowatt|kW]] of electricity.<ref>{{cite web| url=https://www.youtube.com/watch?v=lXJ-tYqPARg | title=EDSAC Simulator | publisher=Computerphile | work=[[YouTube]] | date=21 February 2018 }}</ref><ref name="autogeneratedcl" /> Cycle time was 1.5 ms for all ordinary instructions, 6 ms for multiplication. Input was via five-hole [[punched tape]], and output was via a [[teleprinter]]. Initially, registers were limited to an [[Accumulator (computing)|accumulator]] and a multiplier register. In 1953, [[David Wheeler (computer scientist)|David Wheeler]], returning from a stay at the [[University of Illinois at Urbana–Champaign|University of Illinois]], designed an [[index register]] as an extension to the original EDSAC hardware. A magnetic-tape drive was added in 1952 but never worked sufficiently well to be of real use.<ref name="autogeneratedcl">{{cite web| url=http://www.cl.cam.ac.uk/events/EDSAC99/statistics.html | title=Some EDSAC statistics | publisher=[[University of Cambridge Computer Laboratory]] | location=UK }}</ref> Until 1952, the available main memory (instructions and data) was only 512 18-bit words, and there was no backing store.<ref>{{cite web| url=http://www.cl.cam.ac.uk/events/EDSAC99/reminiscences/#EDSAC%201%20applications | title=EDSAC 1 applications | work=EDSAC 1 and after – a compilation of personal reminiscences | publisher=[[University of Cambridge Computer Laboratory]] | location=UK }}</ref> The delay lines (or "tanks") were arranged in two batteries providing 512 words each. The second battery came into operation in 1952.<ref name="autogeneratedcl"/> The full 1024-word delay-line store was not available until 1955 or early 1956,<ref>{{cite web| url=http://www.cl.cam.ac.uk/events/EDSAC99/reminiscences/#EDSAC%201%20maintenance | title=EDSAC 1 maintenance | work=EDSAC 1 and after – a compilation of personal reminiscences | publisher=[[University of Cambridge Computer Laboratory]] | location=UK }}</ref> limiting programs to about 800 words until then. John Lindley (diploma student 1958–1959) mentioned "the incredible difficulty we had ever to produce a single correct piece of paper tape with the crude and unreliable home-made punching, printing and verifying gear available in the late 50s".<ref>{{cite web| url=http://www.cl.cam.ac.uk/events/EDSAC99/reminiscences/#EDSAC%202%20operating | title=EDSAC 1 operating | work=EDSAC 1 and after – a compilation of personal reminiscences | publisher=[[University of Cambridge Computer Laboratory]] | location=UK }}</ref> ===Memory and instructions=== [[File:EDSAC (9).jpg|thumb|upright|[[Maurice Wilkes]] inspecting the mercury [[delay-line memory|delay line]] of the EDSAC in construction]] [[File:EDSAC (12).jpg|thumb|Maurice Wilkes and Bill Renwick in front of the complete EDSAC]] The EDSAC's main memory consisted of 1024 locations, though only 512 locations were initially installed. Each contained 18 bits, but the topmost bit was always unavailable due to timing problems, so only 17 bits were used. An instruction consisted of a five-bit instruction code, one spare bit, a 10-bit operand (usually a memory address), and one length bit to control whether the instruction used a 17-bit or a 35-bit operand (two consecutive words, [[Endianness|little-endian]]). All instruction codes were by design represented by one mnemonic letter, so that the ''Add'' instruction, for example, used the EDSAC character code for the letter A. Internally, the EDSAC used [[two's complement]] [[Binary number|binary]] numbers. Numbers were either 17 bits (one word) or 35 bits (two words) long. Unusually, the [[Binary multiplier|multiplier]] was designed to treat numbers as [[fixed-point arithmetic|fixed-point]] fractions in the range −1 ≤ ''x'' < 1, i.e. the binary point was immediately to the right of the sign. The [[Accumulator (computing)|accumulator]] could hold 71 bits, including the sign, allowing two long (35-bit) numbers to be multiplied without losing any precision. The instructions available were: * Add * Subtract * Multiply-and-add * AND-and-add (called "Collate") * Shift left * Arithmetic shift right * Load multiplier register * Store (and optionally clear) accumulator * Conditional goto * Read input tape * Print character * Round accumulator * No-op * Stop There was no division instruction (but various division subroutines were supplied) and no way to directly load a number into the accumulator (a "Store and zero accumulator" instruction followed by an "Add" instruction were necessary for this). There was no unconditional jump instruction, nor was there a procedure call instruction – it had not yet been invented. [[Maurice Wilkes]] discussed relative addressing modes for the EDSAC in a paper published in 1953. He was making the proposals to facilitate the use of [[subroutine]]s.<ref>Proceedings of the Cambridge Philosophical Society, Vol. 49, Pt. 1, p. 84–89.</ref> ===System software=== The ''initial orders'' were hard-wired on a set of [[Stepping switch|uniselector switches]] and loaded into the low words of memory at startup. By May 1949, the initial orders provided a primitive relocating [[Assembly language assembler|assembler]] taking advantage of the mnemonic design described above, all in 31 words. This was the world's first assembler, and arguably the start of the global software industry. There is a simulation of EDSAC available, and a full description of the initial orders and first programs.<ref>{{Cite web| title=Edsac Simulator | url=https://www.dcs.warwick.ac.uk/~edsac/ | access-date=2023-05-24 | website=dcs.warwick.ac.uk | publisher=[[University of Warwick]] | location=UK }}</ref> The first calculation done by EDSAC was a program run on 6 May 1949 to compute [[square number]]s.<ref name=":0">{{Cite web |url=http://www.computinghistory.org.uk/det/5484/EDSAC-performed-its-first-calculations/ |title=EDSAC performed its first calculations |website=Computing History |access-date=2018-11-23 |archive-date=26 February 2021 |archive-url=https://web.archive.org/web/20210226185505/http://www.computinghistory.org.uk/det/5484/EDSAC-performed-its-first-calculations/ |url-status=dead }}</ref> The program was written by [[Beatrice Worsley]], who had travelled from Canada to study the machine.<ref>{{Cite web |url=https://www.thecanadianencyclopedia.ca/en/article/beatrice-worsley |title=Beatrice Worsley |last=Raymond |first=Katrine |date=25 October 2017 |website=The Canadian Encyclopedia |language=en |archive-url=https://web.archive.org/web/20180113171457/http://www.thecanadianencyclopedia.ca/en/article/beatrice-worsley/ |archive-date=13 January 2018 |access-date=2018-11-23}}</ref><ref name=":0" /> The machine was used by other members of the university to solve real problems, and many early techniques were developed that are now included in operating systems. Users prepared their programs by punching them (in assembler) onto a paper tape. They soon became good at being able to hold the paper tape up to the light and read back the codes. When a program was ready, it was hung on a length of line strung up near the paper-tape reader. The machine operators, who were present during the day, selected the next tape from the line and loaded it into EDSAC. This is of course well known today as job queues. If it printed something, then the tape and the printout were returned to the user, otherwise they were informed at which memory location it had stopped. Debuggers were some time away, but a [[cathode-ray tube]] screen could be set to display the contents of a particular piece of memory. This was used to see whether a number was converging, for example. A loudspeaker was connected to the accumulator's sign bit; experienced users knew healthy and unhealthy sounds of programs, particularly programs "hung" in a loop. After office hours certain "authorised users" were allowed to run the machine for themselves, which went on late into the night until a valve blew – which usually happened according to one such user.<ref>Professor David Barron, Emeritus Professor of the University of Southampton at a Cambridge Computer Lab seminar to mark the 60th anniversary 6 May 2009.</ref> This is alluded to by [[Fred Hoyle]] in his novel ''[[The Black Cloud]]'' ===Programming technique=== [[File:EDSAC (23).jpg|thumb|EDSAC monitoring desk<ref>Description of three displays (counter, memory and sequence control): {{cite news |title=Two new EDSAC videos: EDSAC's VDU screens |url=http://www.tnmoc.org/news/edsac/two-new-edsac-videos |work=The National Museum of Computing |date=11 December 2015 |language=en}}</ref>]] The early programmers had to make use of techniques frowned upon today—in particular, the use of [[self-modifying code]]. As there was no index register until much later, the only way of accessing an array was to alter which memory location a particular instruction was referencing. [[David Wheeler (computer scientist)|David Wheeler]], who earned the world's first Computer Science PhD working on the project, is credited with inventing the concept of a subroutine. Users wrote programs that called a routine by jumping to the start of the subroutine with the [[Return statement|return address]] (i.e. the location-plus-one of the jump itself) in the accumulator (a [[Wheeler Jump]]). By convention the subroutine expected this, and the first thing it did was to modify its concluding jump instruction to that return address. Multiple and nested subroutines could be called so long as the user knew the length of each one in order to calculate the location to jump to; [[Recursion (computer science)|recursive calls]] were forbidden. The user then copied the code for the subroutine from a master tape onto their own tape following the end of their own program. (However, [[Alan Turing]] discussed subroutines in a paper of 1945 on design proposals for the NPL [[Automatic Computing Engine|ACE]], going so far as to invent the concept of a return-address stack, which would have allowed recursion.{{sfn|Turing|1945|loc=reprinted in Copeland (2005), p. 383}}) The lack of an index register also posed a problem to the writer of a subroutine in that they could not know in advance where in memory the subroutine would be loaded, and therefore they could not know how to address any regions of the code that were used for storage of data (so-called "pseudo-orders"). This was solved by use of an initial input routine, which was responsible for loading subroutines from punched tape into memory. On loading a subroutine, it would note the start location and increment internal memory references as required. Thus, as Wilkes wrote, "the code used to represent orders outside the machine differs from that used inside, the differences being dictated by the different requirements of the programmer on the one hand, and of the control circuits of the machine on the other".<ref>{{cite book |last1=Wilkes |first1=M. V. |title=Automatic digital computers |date=1956 |publisher=Methuen |location=London |pages=93–95}}</ref> EDSAC's programmers used special techniques to make best use of the limited available memory. For example, at the point of loading a subroutine from punched tape into memory, it might happen that a particular constant would have to be calculated, a constant that would not subsequently need recalculation. In this situation, the constant would be calculated in an "interlude". The code required to calculate the constant would be supplied along with the full subroutine. After the initial input routine had loaded the calculation-code, it would transfer control to this code. Once the constant had been calculated and written into memory, control would return to the initial input routine, which would continue to write the remainder of the subroutine into memory, but first adjusting its starting point so as to overwrite the code that had calculated the constant. This allowed quite complicated adjustments to be made to a general-purpose subroutine without making its final footprint in memory any larger than had it been tailored to a specific circumstance.<ref>{{cite book |last1=Wilkes |first1=M. V. |title=Automatic digital computers |date=1956 |publisher=Methuen |location=London |pages=108–109}}</ref> ===Application software=== The subroutine concept led to the availability of a substantial subroutine library. By 1951, 87 subroutines in the following categories were available for general use: [[floating-point arithmetic]]; arithmetic operations on [[complex number]]s; checking; division; [[exponentiation]]; routines relating to functions; [[differential equation]]s; special functions; [[power series]]; [[logarithm]]s; miscellaneous; print and layout; [[Numerical integration|quadrature]]; read (input); ''n''th root; [[trigonometric functions]]; counting operations (simulating [[do while loop|repeat until loops]], [[while loop]]s and [[for loop]]s); [[probability vector|vectors]]; and [[matrix (mathematics)|matrices]]. The first [[assembly language]] appeared for the EDSAC, and inspired several other assembly languages: {| class="wikitable" |- ! Year ! Name ! Chief developer, company |- | 1951 | Regional Assembly Language | [[Maurice Wilkes]] |- | 1951 | [[Whirlwind (computer)|Whirlwind]] assembler | Charles Adams and Jack Gilmore at [[Massachusetts Institute of Technology|MIT]] |- | 1951 | Rochester assembler | [[Nathaniel Rochester (computer scientist)|Nat Rochester]] |}
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)