The PDP-8 reference article from the English Wikipedia on 24-Jul-2004
(provided by Fixed Reference: snapshots of Wikipedia from wikipedia.org)

PDP-8

Have you considered sponsoring a child
The PDP-8 was the first successful commercial minicomputer, produced by Digital Equipment Corporation (DEC) in the 1960s. It was the first widely-sold computer in the DEC PDP series of computers (the PDP-5 was not originally intended to be a general-purpose computer).

Table of contents
1 Description
2 Example
3 External links

Description

The PDP-8 was a 12-bit computer with 4096 words of memory. It had only eight instructions, one full register, the accumulator (AC), and a single-bit register, the link (L) bit. The machine operated at a clock rate of 1 MHz, and took 10 clocks for each instruction, so that it ran at 0.1 MIPS.

The PDP-8 was a historically important computer because of the advances in technology, I/O, software development, and operating system design that occurred during its reign.

The earliest PDP-8 models used discrete transistor technology and were approximately the size of a refrigerator. The last revision of PDP-8 models used a single custom CMOS microprocessor. There was never a historical "system on a chip". However, in recent years enthusiasts have created entire PDP-8 systems using single FPGA devices.

The I/O systems underwent huge changes in the PDP-8 era. Early PDP-8 models used a front-panel interface, a paper-tape reader and a teletype printer with optional paper-tape punch. Over time I/O systems such as magnetic tape, RS-232 and current loop dumb terminalss, punched card readers, and magnetic drum "disks" were added. Toward the end of the PDP-8 era, floppy disks and hard disk drives were popular I/O devices. Modern enthusiasts have created standard PC style IDE hard disk adapters for real and simulated PDP-8 computers.

Software development systems for the PDP-8 series began with the most basic front panel entry of raw binary machine code. In the middle era, source code was often stored on paper tape, read into memory, and saved to paper tape, and later assembled from paper tape into memory. Toward the end of the PDP-8 era, operating systems such as OS8 allowed a traditional line-mode editor and command-line compiler development system using languages such as FORTRAN and BASIC in addition to assembly.

Early PDP-8 systems did not have an operating system, just a front panel and run and halt switches. Various papertape "operating systems" were developed, as were single user disk operating systems. Toward the end of the PDP-8 era, fairly modern and advanced RTOS and preemptive multitasking multi-user systems were available.

The instruction set:

000 - AND - and operand with AC.
001 - TAD - add operand to (a 13 bit value).
010 - ISZ - increment operand and skip if result is zero.
011 - DCA - deposit AC in memory and clear AC.
100 - JMS - jump to subroutine.
101 - JMP - jump.
110 - IOT - input/output transfer.
111 - OPR - microcoded operations.

A wide variety of operations are available through the OPR microcoded instructions. In general, the operations within each Group can be combined by or'ing the bit patterns for the desired operations into a single instruction. If none of the bits are set, the result is the NOP instruction.

Group 1 operations:

CLA - clear AC
CLL - clear the L bit
CMA - ones complement AC
CML - complement L bit
IAC - increment
RAR - rotate right
RAL - rotate left
RTR - rotate right twice
RTL - rotate left twice

Group 2 operations:
SMA - skip on AC < 0 (or group)
SZA - skip on AC = 0 (or group)
SNL - skip on L /= 0 (or group)
SKP - skip unconditionally
SPA - skip on AC >= 0 (and group)
SNA - skip on AC /= 0 (and group)
SZL - skip on L = 0 (and group)
CLA - clear AC
OSR - or switches with AC
HLT - halt

Example

Here is an example of a complete PDP-8 assembly language program – Hello, world – written for the PAL-III assembler.

/ adapted from example in Digital PDP-8 Handbook Series, Introduction to Programming, p5-12
   *200                / set assembly origin (load address)
   hello,  cla cll
           tls         / tls to set printer flag.
           tad charac  / set up index register
           dca ir1     / for getting characters.
           tad m6      / set up counter for
           dca count   / typing characters.
   next,   tad i ir1   / get a character.
           jms type    / type it.
           isz count   / done yet?
           jmp next    / no: type another.
           hlt
   type,   0           / type subroutine
           tsf
           jmp .-1
           tls
           cla
           jmp i type
   charac, .           / used as initial value of ir1
           310 / H
           305 / E
           314 / L
           314 / L
           317 / O
           254 / ,
           240 /
           327 / W
           317 / O
           322 / R
           314 / L
           304 / D
           241 / !
   m6,     -15
   count,  0
   ir1 = 10
   $

External links