Martin Richards

I am now a RETIRED Senior University Lecturer but still have an office (and come in once or twice a week) in the

University of Cambridge Computer Laboratory ( Click here for maps and floor plan of the new building )
William Gates Building,
JJ Thomson Avenue,
Cambridge CB3 0FD, United Kingdom.

I am also a Fellow of St Johns College. My speaking voice sounds like this. Here is a fun Java applet: Damongo Sundial.


I regret to say that I suffered a major system failure in mid May this year meaning that I am currently unable to update the packages on my my home page or any of the .pdf files until I manage to re-establish a usable Linux system. The details of what happened is as follows.

For many years all my development work has been done using Linux and all my .pdf files have been created with the aid of Latex running on Linux. Originally I used dual booting allowing both Windows and Linux to be run on the same machine. When Windows XP became available I transferred to Ubuntu Wubi Linux saving the need to reorganise the hard disc partitions. When Windows XP ceased to be maintained by Microsoft I transferred to Windows 10 Pro. To run Linux I installed a Virtual Linux system under the Oracle VirtualBox system. This was usable but not as convenient as the previous Wubi version since I had probrems with file sharing with Window and had difficulty setting up USB connections to the various devices I wished to use Linux to control.

I have two laptop machines running Windows 10 my main one being a Dell laptop. Unfortunately the VirtualBox system suddenly refused to start my Linux abstract machine. I could find no way to solve the problem. I had not lost any files since I was well backed up and with the aid of 7zip I succeeded in recovering all the files in my Linux /home directory transferring them as a .tgz file to two separate USB hard discs for safe keeping. Although all my files are there, they have systematic errors with the file owner and group fields and the file protection. Luckily the file dates seem to be correct. Although I am losing confidence inthe VirtualBox system, I have recontructed a new Virtual Linux system and copied the entire saved /home directories into it. But it will take time to make it all work again properly. In particular, I have not yet been able to install a version of Latex capable of processing any of my Latex files.

Things are looking up a bit. When my Vbox Linux machine refuses to start I can create a new one using the same .dvi file and use that instead. I have also manage to get Latex working well enough to create all my .pdf files, in particular bcplman.pdf, bcpl4raspi.pdf and musman.pdf.

Shortcuts to the main packages

If you know what you want, just right click on one of the following: bcplman.pdf, bcpl4raspi.pdf, tcobench.pdf, bcpl.tgz, mcpl.tgz, cintpos.tgz, bench.tgz, cobench.tgz, tcobench.tgz, vspl.tgz, gp2x.tgz, musprogs.tgz, edsac.tgz, bcplctss.tgz, or archive.tgz. Otherwise, continue reading below. If the browser tries to change the extension from .tgz to .tgz.gz, change it back again.

A recent addition are some colourful fingering charts that may help french horn players learn their scales and arpeggios. Click fingering if your are interested. However beautiful these diagrams are, there is no substitute for the hundreds of hours of practice needed to perfect the playing of scales and arpeggios.

My Research Interests

My most recent work has been on a package to allow BCPL programs to generate native machine code dynamically at runtime in a machine independent way (currently only available for i386 machines). See bcplprogs/mc in the standard BCPL distribution. For the n-queens problem this give a 24-fold speed up. A second project I am working on is a program to provide an automatic musical accompaniment to a soloist. The score is represented in the MUS language specifically designed for this project. This language allows the user detailed control of tempo, volume, phasing and many other aspects of the performance. In due course the program will analyse in real time the sound picked up by a USB condenser microphone allowing the program to keep in time with the performer. The project is in the early stages of development, but parts are beginning to work. See the directory mus2mid in the Musprogs distribution. Some demonstration Midi files generated by this system are:

cantilena.mid The slow movement of Poulenc's sonata for flute and piano.
chords45.mid A chord recognition test for subdominant and dominant triads in root, first or second inversions.
chordsAll.mid A chord recognition test for any triads in root, first or second inversions.
chordseq.mid A sequence of all triads of C major and minor in root, first or second inversions.

Programming language design and implementation. Typeless programming languages. Analysis and optimisation of complete programs. Implementation of efficient interpreters. Compact interpretive codes and ultra compact codes suitable for just-in-time compilation. Tautology and Satisfiability checkers. Thread, Coroutines and Process Control. How to implement complex real time applications that need to run reliably for the next 30 or more years.

BCPL, an interpretive implementation of the BCPL language and system, including many demonstration programs. Click on BCPL.html to obtain a copy of the current version. This version can be installed easily on most machines running Linux, Windows and MAC OSX. This distribution provides both 32 and 64 bit Cintcode implementations of BCPL. It is easy to install this version on the Raspberry Pi machine. See the Young Person's Guide to BCPL Programming on the Raspberry Pi (bcpl4raspi.pdf) for details.

Cintpos, an interpretive implementation of the Tripos Portable Operating System. Click Cintpos.html to obtain a copy.

MCPL, a typeless language with features taken from BCPL, C, ML and Prolog. Click MCPL.html to obtain a copy.

Bench, a machine and language independent benchmark program. Click Bench.html to obtain a copy.

The GP2X is a handheld Linux based gaming machine containing two ARM processors and flash memory of up to 2 Gbytes. It has a 320x240 16-bit colour display and several gaming type buttons including an 8 way joystick. I have implemented both BCPL Cintcode and Cintpos for this machine. So that it can be used standalone without a keyboard, I have implemented a terminal emulator, called Joyterm, for it allowing the user to send ASCII characters to a bash shell using just the joystick and the buttons. For more information click GP2X.html.

Musprogs holds various BCPL programs concerned with sampled and MIDI sound and ultimately a program to act as an automatic friendly accompanist to (typically) a solo player. This is currently under development and will not be ready for some time (years!). My initial plan is to use a USB ribbon microphone for input, a USB connection to a Roland SonicCell with the SRX-6 (Complete Orchestra) extension board and run the program under Windows XP using Cintpos and the MC package (for the time critical signal processing). I will use my own ASCII representation of the score (somewhat influenced by that used in Lilypond). For several reasons, I am not expecting to use FFT for the realtime analysis of the sound input. For more information click Musprogs.html.

Edsac contains an interactive simulator of Edsac the first general purpose stored program computer to run in Cambridge. It was designed and built by a team under the leadership of Maurice Wilkes and ran its first program on 6 May 1949. It was the first machine in the world to provide a computing service. Click Edsac.html to obtain a copy.

BCPLCTSS contains the version of the BCPL compiler as it was in June 1968 running on CTSS at MIT's Project MAC. It also contains a modification of this compiler that runs under the current 64-bit Cintcode BCPL System. Click BCPLCTSS.html to obtain a copy.

Tcobench contains various implementations of a language independent benchmark program to test how well different languages can implement an application which is well suited to using coroutines running in a multi-threading environment. Currently only a BCPL version is available, the other implementations are under development. Click Tcobench.html to obtain a copy.

Cobench, a machine and language independent benchmark program for BCPL style coroutines. Click Cobench.html to obtain a copy.

An archive of old BCPL and Tripos code is available. Click Archive.html to obtain a copy.

An archive of documents relating to the PAL language that was developed at MIT between 1967 and 1969. It will contain a reconstruction of the PAL compiler and interpreter together with the reference manual and some example programs. Click PAL.html to obtain a copy.

VSPL, a very simple programming language designed to be a case study for comparing different ways of implementing a compiler. It currently has implementations in BCPL, C and Lex/Yacc. Implementations in other languages such as C++, Java, ML and Prolog are planned. Click VSPL.html to obtain a copy.

Some Publications

If you have DIFFICULTY READING a .pdf file under Internet Explorer, try copying it to a temporary directory by right-clicking the link and using the "Save Target As ..." menu item. It can then read it using acroread (or equivalent) by double clicking the saved file.

bcplman.pdf. The BCPL Cintcode and Cintpos Users Guide (still being modified).

bcpl4raspi.pdf. Young Person's Guide to BCPL programming on the Raspberry Pi. This is still being written.

strachey100.pdf. This was a paper given st the Strachey 100 Celebration in Oxford on 19 November 2016.

cpl2bcpl.pdf. This paper outlines how BCPL was derived from CPL.

oldbcplman.pdf. Archive of the old BCPL Cintcode System Users Guide, December 2003.

musman.pdf. The MUS Users Guide (still under development).

cintposman.pdf. Archive of the old Cintpos Portable Operating System (now obsolete), October 2002.

mcplman.pdf. The MCPL Programming Manual and User Guide, TR 431, July 1997.

lengtarj.pdf. Slides for the talk "The Lengauer Tarjan Algorithm for Computing the immediate Dominators Tree of a Flowgraph", A informal talk given at Cambridge, 17 May 2001.

checker.pdf. Rough draft of "Experiments with a Tautology Checker Algorithm" (1998).

chkslds.pdf. Slides for the talk "A Tautology Checker loosely related to Stalmarck's Algorithm", A Seminar given at Cambridge, 13 March 1998.

qbf2slds.pdf. Slides for the talk "A Presentation of the Paper: A Linear-time Algorithm for Testing the Truth of Certain Quantified Boolean Formulas" A talk given at Cambridge, 5 February 1998.

mcplslds.pdf. Slides for the talk "Pattern Matching in a Typeless Language", POP Seminar given at CMU, 10 December 1997.

ptcslds.pdf. Slides for the talk "Portable Target Codes for Compilers", SCS Seminar given at CMU, 6 October 1997.

backtrk.pdf. Backtracking Algorithms in MCPL using Bit Patterns and Recursion, TR 433, July 1997.

model.pdf. Demonstration Programs for CTL and Mu-Calculus Symbolic Model Checking, TR 434, August 1997.

edsacposter.pdf. A PDF version on two A4 pages of the poster explaining the two EDSAC paper tapes etched onto the glass panels surrounding the first floor coffee lounge area in Cambridge University Computer Laboratory, September 2005.

myphdthesis.pdf. This is going to be a reconstruction of my PhD thesis.

Other Interests

Horn playing, Music, skiing, theatre, concerts, walking, travel.

Frequently accessed URLs

A Bibliographic Database
Another Bibliographic Database