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.

1 comment:

  1. I'm building a vector generator to interface to a Wells Gardner X-Y B/W display. It uses an AVR micro, Vectrex like opamp integrators to the WG, and interfaces to a host through the USB. It works somewhat with atari asteroids and vertex simulators.

    I'm currently working to interface with Lars Brinkhoff's simh Imlac simulator.

    I have a question about how the DPS-1 Display Processor works.

    I don't see any mention in the DPS-1 Tech or Programming manuals about how the display processor actually makes the beam move. All the other x-y systems I have looked at mention slew rate, integrators or pulses to describe the beam movement. Have I missed something?

    I'm not very adept at reading schematics and I don't see anything related to how the beam movement is timed.

    Is it possible that the DAC output voltage(current) value locates the beam and its input is incremented by a clock to jump from point to point?

    What happens when you load the x or y accumulator with a new value? The beam can't instantly move over there. The DPC can't just execute the next instruction until the beam settles.

    Can you shine any light on this for me? I will surely appreciate you help.



    Ken
    kdrhoo@yahoo.com

    ReplyDelete