Picture (50k JPEG)
of the control console of the transistor-based version.
The telephone-type lever switches, and, at the
lower right of the main panel, the telephone dial,
are both illustrative of the machine's origins.
Note also the late-1950's "expresso bar" style chair,
as compared with today's choice of computer office furniture!!
(a large version, 1M JPEG,
of the picture is available if you want to study
every detail...).
As best I can recall it, the right hand part of the control console was the ordinary operating part of the panel, while the left hand part allowed hands-on debugging. One row of three-position lever switches here could be set to cause a conditional stop when a given pattern of bits (0, 1 or don't-care) came up. The dark window in the central part contained an array of tiny "magic eyes" (I forget their proper name, but they contained a filament and an area of phosphor, much like a miniature version of the "magic eyes" that were used in many a valve radio in earlier days), that indicated the contents of the interesting machine registers. L.E.D.s weren't in common use at that time (I was playing with this machine around 1964).
It would be great to get a copy of the Normal Code manual for this machine; I have several documents covering Simple Code (a semi-interpreted floating-point autocode which I was given to understand had been modelled on EDSAC Autocode, though I can't find any examples of the latter to verify that), but I've only got very limited documentation (mentioned below) on the "real" workings of the machine itself.
I still have an extremely
scruffy copy
of the "railway sidings" diagram (480kB, 2000px wide) which
served as a machine-code
programming manual, though unfortunately the diagram was too
big for the copier that we had back then, so I'm missing some parts
off the edges of
the diagram; as you can see, it falls into four main areas:
the Arithmetic Unit, the Control Unit, the Registers, and
the Main Store (which on both of STL's machines were magnetic
drums; some later models were fitted with core-store).
I can confirm from my old program listings, that registers 26-30 were one-bit(!) registers for the individual tracks of the 5-track paper tape (reading = tape reader, writing = tape punch), while register 31 controlled stepping the reader to the next character, or punching out the prepared character on the punch, respectively.
From the "railway sidings" diagram, one can see (at the upper right) the structure of a machine "word" when interpreted as an instruction:
A K Q L R I B C D E V V4 V2 V1 W regaddr storeaddr
Each of the single-letter codes denoted a bit which controlled the similarly labelled switch(es) on the "railway sidings", and thus routed the data and instructions to the appropriate places. The diagram shows these switches positioned as they would be for their respective bits being ZERO: if the respective bit of the instruction was ONE then the switch(es) would be operated to their other position. In other words, a form of "microprogramming" (a term which I only met much later). Some switches (e.g the LR switch) are activated only when both of the specified instruction bits are ONE.
Program tapes were prepared in a special coding, "ZEBRA code", which contained only the characters necessary for expressing the machine instructions (and a few associated directives such as labels). This code was not used for representing textual content; the output and input of textual material was normally done in the code known as Murray or more formally as "IA2" (also known as CCITT#2), a 5-bit code which used letter-shift and figure-shift to cover the necessary repertoire.
The machine possessed a double-length accumulator (A and B), which could also be referenced (read-only) as two single-length registers (2 and 3). Registers 0 and 1 delivered fixed constants (0 and 1). Registers 4 to 15 were normal one-word registers, although registers 4 and 15 could also play special roles in the programming as indicated in the diagram.
One of the strangest aspects of the machine was the fact that it had no inherent concept of executing instructions by sequential store addresses! Instructions were of two kinds: those in which the A-bit was not set were known as "X-type", and had the address of the next instruction in their storage address field (possibly modifed by other data). Thus, all X-type instructions were potentially "jump" instructions, even if they only jumped to the next instruction in sequence.
Instructions in which the A-bit were set, on the other hand, were called "A-type" instructions, and the address field (possibly modified) referred to the address of its operand. After the execution of an A-type instruction, the ZEBRA did not simply execute the following instruction in sequence (indeed, this location would often contain data used by the A-type instruction): instead, it re-executed the previous X-type instruction, with its address incremented by 2! This so-called "come-back" instruction can be seen being built at the right-hand end of the "C-Register" in the railway sidings diagram, where 2 is added to the previous instruction and the result is shunted off to the "D register" for possible use later.
Roughly speaking, the purpose of the various bits was as follows (as best I can recall).
Other common conventions found in Normal code program source code were as follows.
My tape code references for these 5-track tape codes have the three tracks positioned at the high-significant side of the sprocket holes, and the two tracks at the low-significant side. Looking at the corresponding character assignments, it's clear that at least some of the code designers thought in the same way, although later, when I became familiar with 7 and 8 track paper tapes too, it became conventional to always put the three tracks at the low-significant end, irrespective of the number of tracks on the other side of the spocket holes. Anyhow, here's a table, laid out in the original way and taken directly from a faded typescript. (For characters which might prove a challenge for some browsers, an equivalence has been added in parentheses.)
| value | MERCURY | IA#2 | ZEBRA | |||
|---|---|---|---|---|---|---|
| LS | FS | LS | FS | |||
| . . .o. . | 0 | FS | FS | Blank | 0 | |
| . . .o. O | 1 | A | 1 | E | 3 | 1 |
| . . .oO . | 2 | B | 2 | LF | LF | 2 |
| . . .oO O | 3 | C | * | A | - | 3 |
| . . Oo. . | 4 | D | 4 | Sp | Sp | 4 |
| . . Oo. O | 5 | E | ( | S | ' | 5 |
| . . OoO . | 6 | F | ) | I | 8 | 6 |
| . . OoO O | 7 | G | 7 | U | 7 | 7 |
| . O .o. . | 8 | H | 8 | CR | CR | 8 |
| . O .o. O | 9 | I | ≠ (/=) | D | Tab | 9 |
| . O .oO . | 10 | J | = | R | 4 | K |
| . O .oO O | 11 | K | - | J | Bell | Q |
| . O Oo. . | 12 | L | ν (nu) | N | , | . |
| . O Oo. O | 13 | M | LF | F | L | |
| . O OoO . | 14 | N | Sp | C | : | R |
| . O OoO O | 15 | O | , | K | ( | I |
| O . .o. . | 16 | P | 0 | T | 5 | B,H |
| O . .o. O | 17 | Q | > | Z | + | C,S |
| O . .oO . | 18 | R | ≥ (>=) | L | ) | D |
| O . .oO O | 19 | S | 3 | W | 2 | E |
| O . Oo. . | 20 | T | → (->) | H | T | |
| O . Oo. O | 21 | U | 5 | Y | 6 | U |
| O . OoO . | 22 | V | 6 | P | 0 | V |
| O . OoO O | 23 | W | / | Q | 1 | N |
| O O .o. . | 24 | X | × | O | 9 | A |
| O O .o. O | 25 | Y | 9 | B | ? | X |
| O O .oO . | 26 | Z | + | G | + | |
| O O .oO O | 27 | LS | LS | FS | FS | - |
| O O Oo. . | 28 | . | . | M | . | Y |
| O O Oo. O | 29 | ? | η (eta) | X | / | Z |
| O O OoO . | 30 | £ | CR | V | = | P |
| O O OoO O | 31 | # | # | LS | LS | # |
Notes
One bizarre technique was to write binary constants as if they were machine instructions: there were even special coding sheets for doing that (rather than writing constants in hexadecimal or octal, I mean). For example one of my programs from that time is for translating between two paper tape codes, and it contains the figure-shift and letter-shift translations packed together into words coded as an implausible sequence of machine instructions:
...
X0PIBDV7
A0PKQLRIDEU2
X0PIDEV4
...
A friendly email from Jose F de Almeida in Portugal called my attention to a picture, and description (in Portugese) of the valve-based version at Uminho: after a couple of site reorganisations it disappeared, but later I found it again.
![[Rag-Bag]](/saved/~flavell/ragbag.gif)
![[Me]](/saved/~flavell/ajfmicro.gif)
Original materials © Copyright 1994 - 2006 A.J.Flavell & Glasgow University
This file was last changed Sat Jun 11 13:42:44 2005 BST