The Lisp Implementafion for the PDP-1 Computer [pdf]
s3data.computerhistory.org
s3data.computerhistory.org
I like how the assembly source code is small enough to include at the end of the manual. A bit of slogging finds you the source code and a pdp-1 assembler, enough to run it on simh or MESS, but even though there's a online PDP-1 emulator running SpaceWar!, I wasn't able to find a way to run Lisp 1 online.
* http://www.softwarepreservation.org/projects/LISP/interlisp_...
(rplacd (quote sub) (quote (expr (lambda (a b) (plus a (minus b))))))
(rplacd (quote fib) (quote (expr (lambda (l) (cond ((greaterp l 1) (plus (fib (sub l 2)) (fib (sub l 1)))) (t l))))))
(fib 22)
5030
Why yes, it's all in octal fib(18) = 2584Kind of. 12-bit address field in the instruction. It was an accumulator machine; the CPU only had one main register (as we use the term today) and all operations were between that implicit register and the address specified in memory.
* in the PDP-6 it really is external memory, in the later models (aka PDP-10) it was moved into the CPU
From the table on page 17 it looks like all cells are two words, but strangely they all start on an odd address, rather than an even address.
Regular pointers seem to be tagged with a high bit of 0, while pointers to atoms (strings) have a high bit of 1. There may be other tags, couldn't find an explanation of the tagging. Probably there is at least one for integers? No support for floating point.
The atom/string is just a chain of conses, where the car is 3 characters packed into one 18 bit word, and the cdr is the next part of the chain. Since there's no space for a tag in the car that explains why bad stuff happens if you take the car of an atom.
There's a garbage collector in the program listing. It is described as non-compacting, which makes sense if all objects have the same size - no fragmentation possible, and allocation is just unlinking from the freelist. No description of how the GC works.
On page 12 there is also a routine for manually unlinking things to reuse their storage, so perhaps GC can be postponed with manual memory management.