Friday, May 10, 2013

An introduction to the Imlac PDS-1

The Imlac PDS-1, c. 1970

The Basics:

The PDS-1 was introduced in 1970 and was, as the Technical Manual describes it, "either a Very Smart Terminal or a pretty fair computer with display."  For around $8300 you got a system with:
  • 4KW of core memory (in 16-bit words)
  • A 16-bit data processor operating in parallel with a display processor
  • 2 microsecond instruction time (500Khz)
  • A 14" vector display, refreshed at 40Hz, with 1024x1024 addressable points (technically 2048x2048 in 1/2 scale "increment" mode.)
The system could be expanded up to 32KW of memory, and could be attached to all manner of peripherals from Paper Tape Readers to light pens, mice and disk drives.  While it was most often used as a "very smart terminal," as a standalone computer it was actually fairly capable, especially given the (relatively) low cost.  All of this was enclosed in a handsome (ahem) desk, perfect for your local university or research lab.

If you look at it just right, the PDS-1 could be considered a very early graphical workstation.  It was also host to a number of interesting games thanks to its graphics capabilities.

The Data Processor:

I've often seen the PDS-1's main (or "data") processor described as "a 16-bit PDP-8" and that's really not far from the truth.  There's one 16-bit Accumulator register, and the instruction set is remarkably similar in scope and behavior to the PDP-8's.  It does have a couple of enhancements over the PDP-8 -- aside from the wider wordsize, it's also able to address a full 32KW of memory in a flat address space whereas the 8 had 8 4K "fields" that took extra steps to address.

The Display Processor:

The display processor runs in parallel with the Data Processor and its only job is to refresh the vector display.  It does so by processing a set of instructions (a "display list") created by the main Data Processor.  These instructions generally fall into two distinct modes (though there are others provided by different expansion options): Processor and Increment.

Processor mode instructions provide operations to control the flow of execution of the display list.  It should be noted that there are no conditional branches available -- only unconditional jumps and unconditional subroutine calls.  Further, these instructions cannot modify memory, only read from it.  In addition to flow control, Processor mode includes instructions for directly manipulating the X/Y positioning of the vector display.

Increment mode instructions are used to do the bulk of vector drawing, and it is generally intended for drawing text (though with a bit of ingenuity you can do just about anything).  In Increment mode, each 16-bit memory word is treated as two 8-bit instructions, each of which describes a short vector (+/- 3 points in both X and Y).  A scale of 1/2, 1, 2, or 3 may be applied to these vectors to facilitate drawing larger glyphs.
Vector Description of the Letter "d" (from the Programming Guide)

By having separate increment-mode subroutines for each character, the bulk of the display list can consist of nothing more than a set of subroutine calls, one per character.

When running, the Display Processor steals memory cycles from the Data Processor -- this means that a display with a lot of text (for example) will reduce the amount of CPU time available.

Whew, that's probably enough for now... I'll talk a bit more about the PDS-1 in my next post.  In the meantime, if you want to read up on the technical details, Bitsavers has the Programming Guide and Technical Reference manuals available -- see here.