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 ([http://creativecommons.org/licenses/by-nc-sa/3.0/]).
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:
-
The issue with DUP/STORECI that I mentioned in my email
yesterday. I suspect this is a bug in the simulator.
-
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!
|