Main Page | See live article | Alphabetical index

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.1MIPS.

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 oring 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
\$
```