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.)
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.
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.
ReplyDeleteI'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