As part of this project I wanted to find out more about the development of the original RM Basic itself. Searching online, besides the executable, the only information I could find was the manual which is freely (and legally) available from the Centre for Computing History.
Back in the day I imagined RM Basic to have been written by a gang of middle-aged men sporting NHS glasses, Open University tweed jackets and unruly Das Boot beards. Now as an experienced Python developer I’m surprised by the sophistication of the language, particularly the way programs can be structured using functions and procedures, the ease of accessing graphics and sounds features (the fun stuff), and - for a language developed in 1984 - the sheer scale of it. Who wrote this, and why? The first clue was found by decompiling the original executable, BASIC.EXE. In there I found a string:
“RM Basic” “by Tim, Gerry, Goat & Co”
Thanks to the community of RM enthusiasts, and in particular Tim Pearson (former CEO of RM), I was able to track down the “Tim” in the string as Tim Nuttall and identify “Goat” as Nick Goodwin*. By talking with the two Tims (three including me) it’s become possible to write a few words about how RM Basic originated.
The origins can be found in RM’s earlier 8-bit computers developed in the late 1970s and early 1980s: the 380Z and LINK 480Z. Although 480Zs were obsolete by the time I went to school, they were still very common and easy to spot thanks to their armour-plated CUB monitors. If you touched the monitor casing with one hand, turned the monitor off, and touched a passer-by with your other hand you could deliver a substantial electric shock to yourself and the passer-by.
The 380Z and 480Z used CP/M as their operating system, so they did not “boot into BASIC” like most 8-bit home computers of the day. RM did develop their own BASIC interpreter though and this was the original RM Basic. It was followed by Extended Basic. Outside of RM there was a group of friends that had learned to code on the 380Z and 480Z, and this group would evolve into Software Production Associates, commonly known as SPA (practically every adult of a certain age who grew up in the UK will remember paintSPA and newSPAper!) One early achievement of this group was to decompile Extended Basic and enhance it with advanced support for procedures and functions to produce Structured Basic (SBAS). The RM User Group Community adopted SBAS in droves and so it’s from this language that RM Basic (for the Nimbus) would inherit its advanced handling of procedures and functions.
As the 1980s rolled on, RM planned the 480Z’s replacement: The Nimbus. Shifting to a 16-bit PC-esque platform was quite a risky move in 1983, and the decision to drop CP/M in favour of something strange and new called MS-DOS was controversial. RM also tricked-out the Nimbus with bespoke hardware for text, graphics, sound, mathematics, even peripherals such as joysticks and mice, giving the Nimbus unheard-of capabilities compared to other PCs of the time. Another requirement was that the Nimbus would ship with a BASIC interpreter that would allow students and teachers to write their own programs and access all the specialised Nimbus features easily.
Tim recalls that the work was roughly divided so that Nick worked on the lexer and parser (the guts of the interpreter that converts the written syntax into something the computer can evaluate), and Tim worked on implementing the dedicated Nimbus features. The development of software for the Nimbus began before even the Nimbus prototypes were ready, so RM had a fleet of Fujitsu PCs running a Nimbus emulator to build against. For RM Basic the development language chosen was Aztec C. Tim also had to decide which features to retain and which to cut, as time was short and there was pressure to cut features where possible. The Structured Basic features apparently found themselves in the cross-hairs but Tim fought to keep them in. This would also be Tim’s first program written in C so there was a learning curve to contend with as well. Given the sprawling features that made it into version 1, and the unusually readable and leisurely pace of the official RM Basic manual (written by the “Gerry” mentioned in the dedication), it’s difficult to imagine the pressures they were under to ship on time.
I believe RM Basic had a final release in 1989 with version 2.00C, which I remember as having a brilliant extension that could load paintSPA images, but by this time Windows 3.0, multimedia CD-ROMs and the World Wide Web were just around the corner. RM’s next generation of PCs would be fully IBM-compatible with VGA graphics and SoundBlaster soundcards, shipped with a software emulator called RUNPC186 to run the old Nimbus programs, but by this time the world had moved on and there was little use for the old software. The Nimbus and RM Basic were obsolete.
Over 30 years later with the emergence of RM BASICx64, I’m sure the language isn’t going to replace Python anytime soon (though it might have a chance against JAVA), but it is at least accessible again and no longer requires an emulator or specialised hardware to run. As it develops I hope it will become possible to run old code (did anyone keep their print-outs?!) and there is potential to extend the language to do things that were unimaginable in 1985. Can we implement http requests? Would a 16 colour Twitter app written in BASIC appeal to the hipsters?
Interestingly, for a while I wanted to get my hands on a Nimbus, or a good emulation, and try to build software on the Nimbus itself since I thought that would be a “more authentic experience”. But it turns out RM BASICx64 and RM Basic have something else in common: Neither was built on a Nimbus. In fact it seems likely most Nimbus software was built on standard PCs with software emulation. A final gotcha is that Tim Pearson wrote the first BASIC interpreter for the Nimbus, a very simple integer BASIC inspired by an article in BYTE, although it was only a fun internal side-project intended as a toy to experiment with in the early days of the Nimbus.
* Nick, if you’re out there please drop me a line!