LISP 1.6

Guy Steele, who among his many accomplishments counts writing Common Lisp: The Language and chairing the ANSI committee standardizing Common Lisp, implemented LISP for the first time on an IBM 1130 while he attended Boston Latin School in the early 1970s. In mid 2008 Mark Waterbury got in touch with him and obtained photocopies of the LISP source code and documentation, along with Guy's release of it under a Creative Commons license.

We tried briefly to OCR the code but it seemed too difficult (at least for Omnipage Pro 15), and we put the PDFs up onto this web site. Fausto Saporito, in Italy, then hand keyed the entire source code listing and got to the point of compiling it without errors. It still had some errors while running, though, and it was unclear whether the problem was in the source code and/or in the 1130 simulator.

After Fausto did his hand-transcription, Ray Comas did another, independent transcription, starting with OCR and then hand-correcting the output.

The most recent news (Nov. 16, 2008) is from Ray Comas, who says "it's running! (mostly)." More details below, along with a LISP disk image you can download and use in your simulator.

Would you like to work further on this? Then download the files and the simulator and take your best shot. Write us if you'd like to be put in touch with Fausto, Mark, Ray, and Guy.

LISP 1.6 code and documentation from Guy Steele:

Guy Steele writes:

This implementation of IBM 1130 Lisp 1.6 and the 1130 Lisp 1.6 User's Guide are made available by the author, Guy L. Steele Jr., under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States license ([]).

Creative Commons License
IBM 1130 Lisp 1.6 by Guy L. Steele Jr. is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License.

The code was developed during the years 1971-1972 and was essentially complete by the end of February 1972. (The date "2/14/72" in the program listing was unfortunately not updated when a set of changes was made later in February 1972.)

Note that the IBM 1130 assembly code makes use of the macro facility.

At the end of the implementation proper, there is some sample Lisp code: a pretty-printer, a trace utility, and routines to convert algebraic expressions from infix to Cambridge Polish form and compute symbolic derivatives of such expressions.

Fausto Saporito's transcription of the code:

Ray Comas's transcription of the code, other working files, and running LISP 1.6 image:

Ray wrote (on 11/15/2008):

After merging Fausto's version of lisp16 with mine, and fixing the SYSIN routine---I think that the original card deck from Guy Steele's listing may have gotten screwed up, since the SYSIN routine in the original listing made no sense---I now have a (mostly) working LISP! The attached ZIP file contains the merged LISP16, KBCP0 and LMACS source, and a LISP.DSK image with lisp already loaded. There is a lisptest.job that executes a few simple statements.

From the command line, run:

ibm1130 job lisptest

To see this execute.

There a still a few issues:

  1. The issue with DUP/STORECI that I mentioned in my email yesterday. I suspect this is a bug in the simulator.

  2. The messages being read from LERRS seem to be printing spaces as CR's (see the sign-on/sign-off banners when lisptest.job is run)

And I'm sure there are other issues that will be uncovered as lisp gets put through its paces.

This second issue might be a problem in the error subroutine (ERR01 etc.) - maybe something got shuffled here, as with the SYSIN routine. Or it might be related to the bug that causes @ to print as a quote in the assembler listings. I'll see what I can find out this.

The DUP/STORECI issue he mentions is:

Possible emulator bug: you'll note that the last few DUP commands in lisp16.job are commented out. These are responsible for building a core image. This process never terminates (or takes way to long to complete, I wound up killing it after about an hour ...). I don't know if this is a problem with the emulator, or some weird bug in the core image builder in the version of DMS that you have. Running // XEQ LISP works just fine, so I'm inclined to believe that the core image builder is fine. I haven't had time to chase this down any further.

(Note from Brian: this appears to be a bug in our version of DUP, rather than the simulator. We'll try to follow up on this.)

A couple of days later, Ray wrote:

I found out what was going on with this. In the lisp error routine, a "cents" sign is supposed to indicate a CR. In the source listings, there is a back-slash "\" instead of a "cents" sign, probably because the 1132 doesn't have a "cent" sign character, and printed it as "\" instead.

However, the simulator card-reader code doesn't know what to do with a back-slash (it's not in the cardcode_029[] structure in ibm1130_cr.c), so it's converted to Hollerith code 0000, same as a space. So when the error routine checks for a "cents" sign, it's really checking for a space, and when it sees one, it dutifully issues a CR.

The Hollerith code mapped to the "cents" sign in cardcode_029[] is '\xA2', which is the ASCII character for the "cents" sign.

The fix is to modify LERRS and the lisp assembly sources, replacing back-slash "\" with the ASCII code '\xA2' and then rebuild the lisp image.


The attached ZIP file contains the fixed lisp & lerrs source (spaces no longer print as CR), an updated image with these fixes applied, as well as all the other files I've sent you to date. Feel free to do with this as you wish.

I'm pretty confident that lisp is fully functional, though there's still the problem with STORECI never completing. I'll try to chase that down next time I have a few days free ...

So, enjoy the fruit of these four men's labor, and download 1130 LISP!