"I wrote PDP-1 Lisp because I had a strong mathematical bent, I'd become
intrigued with the Lisp language as a result of having somehow picked up a
copy of the original Lisp 1.5 Programmer's Manual at MIT, and I wanted to
have an interactive Lisp implementation to play with rather than having to
submit card decks at the M.I.T. Computation Center. (Bear in mind that I was in
high school at the time -- 1960-1964.) I'd ingratiated myself with the
folks at the TX-0 (and later PDP-1) lab at M.I.T., so I had pretty free access
to the machine there." [L. Peter Deutsch, quoted in
lisp_doc.txt
accompanying Bob Supnik's Software Kit]

Source code

L. Peter Deutsch and Edmund C. Berkeley. The LISP Implementation for the
PDP-1 Computer. March 1964, pages 326-375 in Berkeley and Bobrow. PDF

Documentation

"A program has been written for the PDP-1 providing a subset of the features of the LISP interpreter for the IBM 709/7090. This program, which contains no known bugs, will run on any PDP-1 with automatic divide. On machines with more than 4K of memory, it must be run in memory field 0.

It is assumed that the reader is familiar with 709 LISP in general and with the LISP 1.5 Programmer's Manual in particular."

"The editor described here is implemented within the PDP-l and SDS 940
time-sharing LISP systems, but can be used with minor changes within any
LISP system which includes the capabilities of LISP 1.5. It was begun by the
author in 1965 and later extended by Bobrow and Teitelman at BBN."

Applications

James Markovitch's transcription of the paper tapes of the source code for Bernie Cosell's LISP implementation of ELIZA with the DOCTOR script, which in turn was based on Joseph Weizenbaum's 1966 CACMpaper.

"Bobrow and Murphy started with the LISP 1.5 definition and looked at Deutsch's code for the PDP-1b, but their implementation had a completely new code base for what they called BBN-LISP.[Bobrow et al. February 1966] Murphy says,

`. . . one of the things we did was build a timesharing LISP system on the PDP-1 — that is, a multi-user system for which the primary (and only) interface language was LISP. It was both the command language and the programming language, a la JOSS and such systems of that day.'

In their PDP-1b implementation of LISP, Bobrow and Murphy grappled with issues of supporting a large LISP memory on a machine with a small physical memory.[Bobrow and Murphy 1967]

Source code

Dan Murphy had an extensive archive of old sources for BBN LISP (and many
other things including TENEX, TELCOMP, and TECO), but the disk pack containing
them fell victim to an overzealous sysadmin in 1987. He still has a set of files
in LISP and PDP-10 assembly language. [Personal communication to Paul McJones, 10 March 2005.]

Section 4 of [Bobrow et al.
1966] below gives the source code for all the standard functions implemented in
LISP.

This report describes the LISP system for a PDP-1 with 8392 18-bit words
of 5 microsecond core memory and 92,312 words on a drum with an average
access time of 16.5 milliseconds. It describes the internal structure
including paging and binding techniques. Section III defines all the
standard functions; Section IV gives the source code of all the standard
functions implemented in LISP.

"This report describes the LISP system implemented at BBN on the
SDS 940 Computer. This LISP is an upward compatible extension of
LISP 1.5 for the IBM 7090, with a number of new features which
make it work well as an on-line language. These new features
include tracing, and conditional breakpoints in functions for
debugging and a sophisticated LISP oriented editor. The BBN 940
LISP SYSTEM has a large memory store (approximately 50,000 free
words) utilizing special paging techniques for a drum to provide
reasonable computation times. The system includes both an
interpreter, a fully compatible compiler, and an assembly language
facility for inserting machine code subroutines."

Papers

"Abstract: In an ideal list-processing system there would be enough
core memory to contain all the data and programs. Described in this
paper are a number of techniques that have been used to build a LISP
system utilizing a drum for its principal storage medium, with a
surprisingly low time penalty for use of this slow storage device. The
techniques include careful segmentation of system programs, allocation
of virtual memory to allow address arithmetic for type determination,
and a special algorithm for building reasonably linearized lists. A
scheme for binding variables is described which is good in this
environment and allows for complete compatibility between compiled and
interpreted programs with no special declarations."

Daniel G. Bobrow and Daniel L. Murphy. A note on the efficiency of a
LISP computation in a paged machine. Communications of the ACM,
Volume 11 , Issue 8, August 1968, pages 558, 560.
ACM DL

"Abstract: The problem of the use of two levels of storage for
programs is explored in the context of a LISP system which uses core
memory as a buffer for a large virtual memory stored on a drum. Details
of timing are given for one particular problem."

Discusses BBN LISP on the SDS 940, which had 16K of 24-bit core
memory and 1M words of drum memory (17 milliseconds average access
time).

Source code

Thomas C. Rindfleisch, archivist. System dumps, SUMEX-AIM.

Rindfleish notes: "This version of Interlisp should be both TENEX and TOPS20 compatible. It came at a time when lots of work was going on to port Interlisp to other environments, including the VAX and the new personal Lisp machines (Dolphins, etc.). This means little was changing in the TENEX/TOPS20 version." Rindfleisch also has tape images containing various .sav files created from these files.

Partial contents of <lisp> directory from a system dump, January 31, 1982. .zip

Contents of <lisp> directory from final full dump, February 25, 1983. Also contains lisp.mac.829 from the <lisp> directory from the January 31, 1982 dump. .zip

Contents of <lispusers> directory from final full dump, February 25, 1983. .zip

Contents of <helpsys> directory from final full dump, February 25, 1983. .zip

Masinter notes: "The TWENEX files seem to have come from Sumex, or at least, there are a lot of sumex-specific files there. The file dates are 1984, the latest seems to be 7-Dec-84. I used 'type a' FTP for the source files and 'type I' retrieval for the binary files, since the PDP-10 is a 9-bit-byte / 36-bit-word machine."

Documentation

"Acknowledgements and Background: INTERLISP (formerly BBN LISP) has
evolved from a succession of LISP systems that began with a LISP designed
and implemented for the DEC PDP-1 by D.G. Bobrow and D.L. Murphy at Bolt,
Beranek and Newman in 1966, and documented by D.G. Bobrow. An upwards
compatible version of this LISP was implemented for the SDS 940 in 1967, by
Bobrow and Murphy. This system contained the seeds for many of the
capabilities and features of the current system: a compatible compiler and
interpreter, uniform error handling, an on-line LISP oriented editor,
sophisticated debugging facilities, etc. 940 LISP was also the first LISP
system to demonstrate the feasibility of using software paging techniques
and a large virtual memory in conjunction with a list-processing system.
DWIM, the Do-What-I-Mean error correction facility, was introduced into the
system in 1968 by W. Teitelman, who was also responsible for documentation
for the 940 LISP system. ..."

"In order to implement the INTERLISP System (as described in The
INTERLISP Reference Manual by W. Teitelman, et al.) on some physical
machine, it is only necessary to implement the INTERLISP Virtual Machine,
since Virtual Machine compatible source code for the rest of the INTERLISP
System can be obtained from publicly available files."

"This report describes briefly a set of display primitives that we have developed at PARC to extend the capabilities of InterLisp[l]. These primitives are designed to operate a raster-scanned display and concentrate on facilities for placing text carefully on the display and for moving chunks of an already-created display.

...

Our implementation of these primitives involves two computers: InterLisp is executed on MAXC, and communicates with a program called Chat which maintains the frame buffer that drives a 808 by 606 point raster display."

Papers

"Interlisp (and BBN-Lisp before it) introduced many radical ideas
into Lisp programming style and methodology. The most visible of these
ideas are embodied in programming tools, such as the spelling corrector,
the file package, DWIM, CLISP, the structure editor, and MASTERSCOPE.

The origins of these ideas can be found in Warren Teitelman's PhD
dissertation on man-computer symbiosis. In particular, it contains the
roots of structure editing (as opposed to "text" or "tape" editing,
breakpointing, advice, and CLISP." [Steele and Gabriel 1993]

"One of the most innovative of the language extensions introduced by
Interlisp was the spaghetti stack. The problem of retention (by
closures) of the dynamic function-definition environment in the presence
of special variables was never completely solved until spaghetti stacks
were invented." [Steele and Gabriel 1993]

In the mid 1970s at Uppsala University, an implementation of BBN-Lisp/INTERLISP was created for the IBM 360/370; it also ran on compatible computers such as Siemens and some Japanese ones. The main implementor was Jaak Urmi, after consultation with Warren Teitelman. Jim Goodwin moved from BB&N to the research group at Uppsala.

"I think the right thing to do, when thinking about the history of
Interlisp, is to distinguish between INTERLISP, a
teletype/interactive terminal timesharing system application and Interlisp-D,
a single user, window/mouse/keyboard, personal workstation system based on a
single virtual machine.

INTERLISP ran on Tenex, Tops-20, VAX. There was a 'Jericho' port at BBN.
There were discussions of ports to IBM System/360, but I don't think they
were real.

INTERLISP programs could generally be ported to Interlisp-D with no
changes to source code. Interlisp-D programs were binary compatible; it was
possible to suspend and save the state of one of the virtual machines on one
workstation (make a 'sysout') and restart it on another. In fact, the
software build process consisted of us running a kernel Lisp loader that
fired up an initial image, that then used Lisp code to load the rest of the
system.

'Alto Lisp' was an interim step in the evolution between INTERLISP and
Interlisp-D.

Interlisp-D ran on Dorado (Xerox 1132), Dolphin (Xerox 1100), Dandelion
(Xerox 1108), Daybreak (?), all microcoded machines. The Dandelion and
Daybreak used the same microcode, but the other machines were independent.
The Dorado and Dolphin implementations had an Alto/BCPL operating system
"boot loader", and some kernel OS functions like disk access were
implemented in BCPL. The Dandelion and Daybreak machines had microcoded boot
loaders.

There was a port of the byte-code interpreter to C started by Fuji Xerox
and finished at PARC. The result was a version of Interlisp-D that ran on
Suns and Unix. This implementation was later ported to Linux.

At some point during the evolution of Interlisp-D, a full implementation
of Common Lisp was included; Interlisp and Common Lisp code shared the same
runtime."
[Larry Masinter. Personal communication to Paul McJones, June 9, 2005]