I am also a Fellow of St Johns College. My speaking voice sounds like this. Here is a fun Java applet: Damongo Sundial.
If you know what you want, just right click on one of the following: bcplman.pdf, bcpl4raspi.pdf, bcpl.tgz, bcpl64.tgz, mcpl.tgz, cintpos.tgz, bench.tgz, cobench.tgz, tcobench.tgz, vspl.tgz, gp2x.tgz, musprogs.tgz, edsac.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 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:
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. In particular, 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.
A 64-bit Cintcode version of BCPL is under development, click on BCPL64.html for more 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.
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.
Click demodiss.tar for a tar version of a collection of files that constitute as LaTeX version of a CST or Diploma project proposal and dissertation.
bcpl4raspi.pdf. Young Person's Guide to BCPL programming on the Raspberry Pi. This is still being written.
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.
Horn playing, Music, skiing, theatre, concerts, walking, travel.