See also:
Pass 1
Unnumbered 1976 very early version. People familiar with Edinburgh code could easily mistake this as the work of Hamish Dewar, Peter Schofield or David Rees.
V8.4. By this point Peter Robertson has clearly developed his own style and the code is unmistakably Robertson code!
Pass 2
PDP11 1981. The final version of this compiler (sadly produced slightly later than the copy here) is the subject of:
Pass 3
I-Code, much like Java bytecode, contains enough information to do a fair job at reconstituting the source from an I-Code file. However as we have absolutely no I-Code files preserved, writing such a decoder would be a pointless exercise. However I have made an effort at writing an I-Code to C translator as a substitute for an Imp77-to-C translator. Peter Stephens has also written an Imp80 to C translator which has proven very useful to this project, and a third attempt at a full Imp77 (and other dialects) to C is currently underway.
I-Code was improved several times over its lifetime in order to accomodate the addition of new languages as Peter's compiler business expanded :-) It was designed to support Imp and Simula; I know that it supported C and Pascal; I think there may have support for other languages too, including FORTRAN. It's interesting to look at Micro$oft's ".net" compiler system and see how similar it is, 20 years later, to Peter's final I-Code design.
I-code was to some extent an attempt at an UNCOL, but I think with hindsight it has turned out that the low-level language "C" has turned into what UNCOL was meant to be, because almost every language has a converter to C nowadays.