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.
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.
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.
The CCS GEORGE 3 pages
John Hughes Fun with George 3 pages
Leeds University GEORGE manual (1976)
ICL, and thus a large part of British computing, history at Fujitsu
The entertaining and informative ICL Anthology books (PDF)
ICL Wikipedia entry
Photographs of 1900 series installations © the Computer Conservation Society.
CommentsAdd a comment
Hi Andrew, fascinating read, takes me back. I was a Systems programmer supporting G3 and then worked at Dataskil enhancing it.
I think the Plan program needs to be formatted correctly, can't remember the columns but possibly 6,13 and 16..no, that doesn't seem right... Gin, the assembler for G3 wasn't fussy. Also, I think the instruction for displaying text was DISTY but, hey, it's a long time ago. Thanks again... Chris
@ChrisParsons Hi Chris, that must have been fun! I sometimes wish I'd be around in those early days of computing, it must have been very exciting. But then that's one of the nice things about technology — it never stands still and there's always something new to learn.
I used to work on ICL 1900 series with George 3 in the late 60s and 70s, and recently tried out the CCS emulator software on a Linux PC. I think it might have gotten a little easier since your write up, due to the software packaging and run-time macros being supplied, but it is still very tricky getting your head around the concepts.
Running jobs under :MANAGER is all very well, but that is a bit like running applications as "root" under Linux, or as "Administrator" under Windows. This is highly undesirable when you are not running proven applications, as you must since George 3 doesn't include any user applications. What you really need to start with is setting up a user account, and allocating it some money and some time resources from :MANAGER's budget. Then you can run jobs under the user's account.
So first you need to write your application code, using PLAN (a low level language, like Assembler) or COBOL (ICL 1900 COBOL, a high level language). Learning these museum languages is hardly worth the effort, but the reference manuals are all in the CCS library. Note that lower case symbols haven't been invented yet.
Here is the "Hello world" code in PLAN (untested), which displays the string to the user's console:
STRING 12HHELLO WORLD!
"Building" the app is a two-stage process called compiling and consolidating. For PLAN the compiler is called XPLT and the consolidator is XPCK. There are system macros that run these programs for you, but you have to supply the appropriate parameters. I'm ashamed to say I couldn't manage to do it, but then I should really be in a museum too.
It's way too much of a learning curve for anybody to achieve anything today, let alone on a R-Pi. But thanks for the trip down memory lane.