Skip to main content

Running GEORGE 3 on a Raspberry Pi

Thanks to the Computer Conservation Society it's now possible to use a Raspberry Pi to run a classic British mainframe computer operating system.

In previous posts I've described how a Raspberry Pi can be used to emulate a vintage IBM mainframe and DEC VAX minicomputers, in both cases booting operating systems that were used with the real hardware. This time the computer in question is an ICL 1900 series mainframe running the GEORGE 3 operating system.

The ICL 1900

The International Computers Limited (ICL) 1900 series were 24-bit machines introduced in 1964 and that were highly successful with thousands sold into Europe. This may sound like a tiny number today, but when you consider the size and cost of such machines and that they were introduced only 13 years after the world's first business computer, it's a significant figure.

As is typical with mainframe computers, the 1900 series supported batch processing where a computing task or “job” is submitted by a user and scheduled for execution according to priority, with the results being returned at some point in the future. In addition to which they also supported online time-sharing via the addition of a 7903 Communications Processor and use of the Multiple Online Processing (MOP) facility.

The GEORGE 3 operating system ran on top of a cut-down executive (kernel), and the emulation described here is at the level of the executive rather than bare 1900 hardware. However, this is sufficient for booting GEORGE 3 and it appears that a full hardware emulator is in development.

Setting up the emulator

Instructions for setting up the GEORGE 3 Executive Emulator and a basic GEORGE 3 system on a Raspberry Pi can be found at the CCS website. There is a separate emulator for the 7903 Communications Processor and this isn't configured until later on in the example that follows.

This will provide us with a GEORGE 3 system with basic software and an ALGOL68 compiler, however, a much larger GEORGE 3 system with additional software is also available.

Booting GEORGE 3

First we need to start the executive emulator, specifying the IP address of the network interface to which it should bind and the operator console command to start up GEORGE.

Using another terminal window we then telnet to port 1900 of the Raspberry Pi and this session will provide the operator console for our virtual mainframe computer.

At the console we will first be asked if we would like to restore, to which we answer 7. Next the system asks us (the operator) to mount tape 11000, and we do this by typing CTRL-B to access operator functions, followed by M25,11000.

We get an error for unit 57, the 7903 Communications Processor, but we don't need to worry about that just yet.

The emulator is configured with virtual punched card readers and we can engage card reader CR04 by typing CTRL-B followed by e4. This will result in us being asked to mount tape 11000 with write enabled, and to do this we need to enter CTRL-B again followed by M25,11000,W.

title

We're told the jobs on the card reader will fail due to GEORGE installation parameters being incorrectly set, so we now need to press TAB to simulate the 1900's “INPUT” button, followed by entering INSTPARS to run a macro that will remedy this.

If we now engage the card reader once again the jobs should run successfully.

The output from these jobs is directed to a virtual line printer — a text file named LP10 — an extract of which can be seen below.

When we're finished we can enter CTRL-B followed by post to shut the system down.

At this point the telnet session is dropped and g3exec-pi will terminate.

Multiple Online Processing

So far we've only had a single user interacting with the mainframe: the operator. In order to enable support for multiple concurrent users we need to configure the separate emulator for the 7903 Communications Processor. The CCS provide instructions for doing this under the section entitled MOP and it requires installing Java, adding an entry to the /etc/hosts file, and running the emulator as root (e.g. via sudo) since it defaults to using the telnet port, 23.

With the 7903 emulator running we need to once again start g3exec-pi, but this time replying n to the restore question since we've already done this, and when prompted replying y to request a configuration report from U57 (the 7903).

Next we need to start MOP on unit 57 and we do this by entering a TAB followed by MOP ON,57.These details were gleaned from John Hughes' website, which also provides other useful information, including how to bind the 7903 emulator to ports other than 23.

With MOP loaded we can now telnet to the 7903 from another terminal window.

The example on the CCS website starts up the emulator with support for 10 teletype lines, which means that up to 10 telnet sessions can be established to the 7903 at once.

Once connected to MOP we are able to logon as the MANAGER user with ln :manager,mop and do a directory listing by entering ld.

When we're finished we then logoff with lt.

title

Note how upon logging out we are told how much CPU time we have used, or to use the GEORGE parlance, “mill time” (the 1900's ALU was referred to as its mill!)

An important part of computing history

It can be great fun experimenting with operating systems such as GEORGE 3, that may seem so far removed from those that we use today. However, emulation such as that described here plays a much more important role than just providing a source of fun and allows us to preserve an important part of computing history. Enabling future generations to get hands on with landmark technologies, historians to research the past and data to be recovered from outmoded file formats.

Further reading

title

Andrew Back

Photographs of 1900 series installations © the Computer Conservation Society.

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.
DesignSpark Electrical Logolinkedin