ICL 1900 Series Preservation

Programming Languages

The ICL 1900 series computer was a general purpose machine and had a variety of programming languages available for both commercial and scientific types of work. The compilers produced an output format known as semi-compiled, which could then be consolidated (i.e. linked) with standard libraries and other semi-compiled modules (not necessarily in the same language) to form a complete binary program. This binary program would be stored on disc (or magnetic tape, punch cards or paper tape) and then loaded from that medium when it was required to be run. Mixed language programming between Algol, Cobol, Fortran and PLAN was possible.

Various manuals are available at Technical Publications.

Various compilers and the consolidator are available from ICL 1900 Software Tapes.

ALGOL   The standard Algol compiler provided was Algol 60, the first programming language that I was taught when at school and have never used since.

Current status: Various compilers are available in binary format, together with associated subroutine libraries. There appears to be a source file for one of the compilers.
#XALT, #XALE & #XALV are definitely working.

It has also been possible to run #XALH - the GEORGE 4 version under a very modified version of GEORGE 3.

ALGOL68   An implementation of the Algol 68 standard was also available later.

Current status: A working system is available, and some utilities thought to be lost have just been unearthed. This possibly includes source.

ASSEMBLER   The 1900 had a number of assemblers, whilst PLAN and GIN worked with instruction mnemonics they were not assemblers in ICL parlance. ICL's assemblers were only used internally and only rarely were customers given copies. Initially all executives were coded in one of the various assembly languages, although GIN was used for the later GEORGE3/GEORGE4 executives and the later emulation executives (EXG3).

We have a number of these assemblers:-

#APDB - seems to have been a Stevenage tool very similar to that used to create executives for the smaller machines (1901 .. 1903S). The name is an acronym - Assembler Program Double Buffered.

#NSBL - Documented in the West Gorton documents and includes facilities to emit bootstraps for all of the West Gorton systems (1904 through 1906S) and omits any mention of the Stevenage machines. It is known to have embedded copies of bootstraps required to boot all of the West Gorton CPUs, from the 1904 to the 1906S.

DASS - This is an assembler that ran on the 'bare metal' of the 1900. It was loaded from paper tape (maybe cards) and assembled the source from paper tape building the program image in core above the assembler itself. On completion it was possible to punch the program just assembled to paper tape or cards or for it to be relocated and entered directly for test runs.

We have two binary instances of DASS on some exec test images, and if started at the correct address, it will happily work as expected.

Other known, but not located assemblers

UNIDASS - Another West Gorton assembler, ran in exec mode on the bare machine and assembled source on paper tape, either leaving the program ready to run in store or punched on paper tape or cards. It is strongly suspected that UNIDASS was an enhanced variant of DASS (see above).

Executive Assemblers/Generators

Related closely to the assemblers and sharing a fairly common syntax were a set of programs used in West Gorton (Stevenage used #APDB) to build the executives for the large 1900 machines. A magtape held a set of subfiles, known as 'packages' which were selectively used to create executives tailored for each customer site. The specifications for the machine was help on another magtape, or on paper tape or cards. These programs (#GRT4, #GRT5, #GRTM and #GRT7) could then compile executives for either a single machine or any number of machines, writing the executive images to magnetic tapes. Known collectively a GERT, the versions had the following purposes:-

#GRT4 - EXECUTIVE GENERATOR (E4BM & E4G3)
#GRT5 - EXECUTIVE GENERATOR (E6RM on 1904/5)
#GRT7 - EXECUTIVE GENERATOR (E6RM on suffixed)
#GRTM - EXECUTIVE GENERATOR (E6BM & E6G3)


We have versions of #APDB (2), #NSBL(1), GRT5(1), #GRT7(1)

BASIC   An implementation of Dartmouth BASIC by ICL-CES was available, as an educational language for schools for teaching programming.

Current status: The interpreter which runs under GEORGE 3 and Maximop is available in binary format. The BASIC this is available is the ICL basic and not the Southampton #SOBN.

BCPL   Basic CPL, designed by Martin Richards in 1967, was originally developed as a compiler writing tool and is closely related to CPL (Combined Programming Language, jointly developed at London and Cambridge Universities). It was ported to several different machines, including the 1900. A modified version led to another programming language B, on which the C programming language was based.

Current status: A binary version has now been recovered, and an initial, partial compiler source has been worked up to a full installation, including compiler source, runtime library source and a set of build macros to rebuild and test the compiler. (Thanks to John Hughes for his sterling efforts here).

CESIL   CESIL was provided as an educational language for schools by ICL-CES for teaching basic programming.

Current status: The original batch interpreter has been recovered/restored and a new compiler has been written, they are available from the software library. Additional information is available.

COBOL   COBOL was provided as the main commercial programming language, along with PLAN, and many thousands of lines of code were written.

Current status: Some compilers are available in binary format, together with associated subroutine libraries.
#XEKB is definitely working.

CORAL 66   An implementation of Coral 66 was available, although I never came across it working on systems and commercial applications. See manual CORAL 66.

Current status: A source listing has been unearthed, and might (with some effort) be rekeyed. Unfortunately, the compiler is written in Coral 66.

(Update: Nov 2025)
Some sources for a CORAL 66 compiler have been located, but contrary to previous information they are in BCPL, however there are a number of missing files, the BCPL 'header files' that describe the various imports to each source segment being absent. I could be possible to recreate the headers, I imaging that attempting to compile the currently available sources will provide a list of the missing filenames. Dummy files could be created and then populated to provide the requisite function and procedure declarations. - However sorting out commons could be fun. Also there does not appear to be a Code Generator module.

EMA   EMA (Extended Mercury Autocode) was provided as an early scientific programming language.

Current status: This appears to be lost.

FORTRAN IV   FORTRAN 1900 was provided as the main scientific programming language.

Current status: Various compilers are available in binary format, together with associated subroutine libraries.
#XFAT, #XFEV & #XFIV are definitely working.

Similar to #XALH, it has also been possible to run the GEORGE 4 #XFIH optimising FORTRAN IV compiler under a modified GEORGE 3.

FORTRAN II   (Update: Nov 2025)
It is now apparent that the early 1900s, had a number of FORTRAN II compilers, some or all of which derived from the FP6000.

Current status: None of these are available.
FORTRAN 77   An implementation of Fortran 77 was available later, possibly written by a university.

Current status: Uncertain, parts of the system still exist. More investigation required.

GIN   GIN - George INput was a powerful macro assembler language used for writing the Operating Systems and Executives (GINX). Syntactically it was similar to PLAN, but had many more features. Unlike PLAN, it was not a compiler but an assembler that was complete in itself and could not be mixed with other languages.
Current status: Various copies of 'used' compilers (502, 512, 522X & 524) are available, but so far no 'clean' version has been found (required to compile a new program). A version of GIN524 has been partially reverse engineered and cleaned, enabling us to compile new programs.

(Update: Nov 2025)
GIN 524 was successfully 'cleaned' by a joint effort between Brian and myself quite a while back, allowing us to run a full GEORGE 3 compilation including all of fixed core some time ago.
GIN 524 was also found in a clean condition on a magtape presented to us maybe a decade ago.

JEAN   JEAN is a conversational language, a dialect of JOSS, designed for small numerical applications. This is an interpreter rather than a compiler.

Current status: The George 3 (English and French) interpreters are available in binary format. The free-standing versions appear to be lost.

Sample JEAN Program - Lunar Lander

NICOL   NICOL - NIneteen-hundred COmmercial Language was and designed to assist existing punched card accounting (Tabulator) users to convert rapidly to computer operation on small 1900 configurations.
(There is also an American language called NICOL which is a small subset of PL/I, whether there is any relationship beyond the name, I have not been able to find out.)

Current status: Some compilers and utilities are available in binary format, but the associated subroutine library is missing. It might be possible to recreate the subroutine library with some compiling/reverse engineering.
#XGCR is definitely working.

Pascal   An implementation of PASCAL (#PASQ) was available, written by Queens University, Belfast.

The QUB 1900 Pascal compilers had three versions:

- Version 1A, the initial port from the CDC machine at ETH Zürich
- Version 1B, a full implementation of Pascal still using a Zürich based source
- Version 2A, a completely rewritten compiler, along with runtime diagnostics and trace packages.

Current status: A working binary of version 2B has been recreated from the source.

Pascal Plus   This enhanced superset of 1900 PASCAL (initially written in Pascal 2A) called Pascal Plus (#PASP) was created by Dave Bustard at Q.U.B.

Later version of Pascal Plus were available on VAX/VMS and the ICL 2900 series.

Current status: No known copies of this are available in either binary or source format.
PLAN   PLAN - Programming LAnguage Nineteen-hundred was the normal assembler language, which was used for a variety of programming purposes. Subroutines, written in PLAN, could be incorporated into ALGOL 60, COBOL, PLASYD and FORTRAN IV programs.

Current status: A large proportion of the PLAN compilers and utilities are available in binary format, together with the subroutine libraries.
#XPLF and #XPLT are definitely working.

Sample PLAN Programs:-
Transfer Cards to Magnetic Tape (from PLAN Manual)
GEORGE 3 Directory & Tree Listing

PLASYD   PLASYD - Programming LAnguage for SYstem Development was a development tool (Mildly similar to Niklaus Wirth's PL/360 for the IBM 360 series) used internally by ICT/ICL for several software development projects (mostly by the languages group). (In essence PL/1900, but that name was not allowed.) It has a good number of the attributes of a high-level language, similar to Algol 60, but the programmer also has direct access to the machine structure.

Current status: A later version of the compiler is available in binary format and has been run under both GEORGE 3 and MAXIMOP. The subroutine library is missing, but has been partly reconstructed using S-RS.

A number of excellent documents are available on the language, using the compiler and on the compiler itself.

RATFOR   A pre-processor that translated programs written in Kernihan & Plauger's Rationalised Fortran (RATFOR) to ICL FORTRAN IV that can then be compiled by the standard FORTRAN IV compilers.

This is another task completed by John Hughes. He has created a set of source tapes to allow this important software tool to be used on the 1900 range. - See Ratfor
RPG2   RPG2 - was a commercial language, favoured on IBM small systems. ICL also had a compiler (introduced with the 2903?).

Current status: Some binary and source of the system has been recovered, needs further work to see what is available.