Go to the Index
Inside Spacewar! (Supplement)
DEC PDP-1 Instruction List
The PDP-1 (Digital Equipment Corporation Programmed Data Processor – 1) uses the following instruction format:
1 1 1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 bits
┌──────┴───┬─┼─────┴─────┴─────┴─────┐
│ opcode │i│ address / operand │ instruction format
└──────────┴─┴───────────────────────┘
The standard memory of 4k 18-bit words is in the address space from 00000
to 77777
(octal). Additional memory is addressible either by an extended address mode or by bank switching. There are 6 program flags and 6 sense switches. The console test word is a normal 18-bit register. The PDP-1 uses 1's complement to represent negative numbers. There are two user addressible register, the accumulator (AC) and the I/O register (IO), which might be combined to a single 36 bit register for shifts and rotates. Further, there is an overflow flag (set in instructions add and sub), a program counter (PC), and an internal memory buffer (MB). Addresses and values are usually referred to in octal format (since memory words, addresses, and any parameters are multiples of 3 and a nibble of 3 bits is forming a single octal digit).
Any instructions involving a memory look up may be modified by setting the i-bit (defer bit). If the defer bit is set, the contents of the address part of the provided address will be used for another address look up and the address part of this memory register will be used for the instruction (recursively). A deferred look up adds 5 μsec to the operation time used by the instruction. With instructions of the skip group a set i-bit inverts the condition of the skip. With the I/O-group of instructions the presence of the i-bit will instruct the PDP-1 to wait for a completion pulse to be returned by the divice. The micro-programmed instructions of the skip and operate groups may be combined into a union to be performed in a single memory cycle (5 μsec).
In the table below Y refers to the address part of an instruction.
The contents of a register are indicated by C(x). Thus C(Y) means the contents of memory at address Y; C(AC) means the contents of the accumulator; C(IO) means the contents of the In-Out register.
BASIC INSTRUCTIONS
add Y | 40 | Add C(Y) to C(AC) | 10 |
and Y | 02 | Logical AN D C(Y) with C(AC) | 10 |
cal Y | 16 | Equals jda 100 | 10 |
dac Y | 24 | Deposit C(AC) in Y | 10 |
dap Y | 26 | Deposit contents of address part of AC in Y | 10 |
dio Y | 32 | Deposit C(IO) in Y | 10 |
dip Y | 30 | Deposit contents of instruction part of AC in Y | 10 |
dis Y | 56 | Divide step | 10 |
div Y | 56 | Divide* (Next instruction is skipped, if no overflow occurred.) | 40 max |
dzm Y | 34 | Deposit zero in Y | 10 |
idx Y | 44 | Index (add one) C(Y), leave in Y & AC | 10 |
ior Y | 04 | Inclusive OR C(Y) with C(AC) | 10 |
iot Y | 72 | In-out transfer, see below | |
isp Y | 46 | Index and skip if result is positive | 10 |
jda Y | 17 | Equals dac Y and jsp Y+ 1 | 10 |
jmpY | 60 | Take next instruction from Y | 5 |
jsp Y | 62 | Jump to Y and save program counter in AC | 5 |
lac Y | 20 | Load the AC with C(Y) | 10 |
law N | 70 | Load the AC with the number N | 5 |
law-N | 71 | (law i N) Load the AC with the number -N | 5 |
lio Y | 22 | Load 10 with C(Y) | 10 |
mus Y | 54 | Multiply step | 10 |
mul Y | 54 | Multiply* | 25 max |
opr | 76 | Operate, see below | 5 |
sad Y | 50 | Skip next instruction if C(AC) ≠ C(Y) | 10 |
sas Y | 52 | Skip next instruction if C(AC) = C(Y) | 10 |
sft | 66 | Shift, see below | 5 |
skp | 64 | Skip, see below | 5 |
sub Y | 42 | Subtract C(Y) from C(AC) | 10 |
xct Y | 10 | Execute instruction in Y** | 5+ |
xor Y | 06 | Exclusive OR C(Y) with C(AC) | 10 |
*) div and mul replace dis and mus when the automatic multiply/divide type 10 option is installed.
**) Any skips occurring while performing a xct instruction will be executed in place.
OPERATE GROUP
cla | 760200 | Clear AC | 5 |
clf | 76000f | Clear selected Program Flag (f = flag #) | 5 |
cli | 764000 | Clear IO | 5 |
cma | 761000 | Complement AC | 5 |
hlt | 760400 | Halt | 5 |
lap | 760100 | Load AC with Program Counter | 5 |
lat | 762200 | Load AC from Test Word switches | 5 |
nop | 760000 | No operation | 5 |
stf | 76001f | Set selected Program Flag | 5 |
Note: Execution of the following spare operation codes causes the computer to halt: 00, 12, 14, 36, and 74.
Instructions of the operate group may be combined by an inclusive OR to form a union that will be performed in a single memory cycle (5 μsec).
SKIP GROUP
sma | 640400 | Skip on minus AC | 5 |
spa | 640200 | Skip on plus AC | 5 |
spi | 642000 | Skip on plus IO | 5 |
sza | 640100 | Skip on ZERO (+0) AC | 5 |
szf | 64000f | Skip on ZERO flag | 5 |
szo | 641000 | Skip on ZERO overflow (and clear overflow) | 5 |
szs | 6400s0 | Skip on ZERO sense switch | 5 |
Instructions of the skip group may be combined by an inclusive OR to form a union that will be performed in a single memory cycle (5 μsec).
SHIFT/ROTATE GROUP
ral | 661 | Rotate AC left | 5 |
rar | 671 | Rotate AC right | 5 |
rcl | 663 | Rotate combined AC & IO left | 5 |
rcr | 673 | Rotate combined AC & IO right | 5 |
ril | 662 | Rotate IO left | 5 |
rir | 672 | Rotate IO right | 5 |
sal | 665 | Shift AC left | 5 |
sar | 675 | Shift AC right | 5 |
scl | 667 | Shift combined AC & IO left | 5 |
scr | 677 | Shift combined AC & IO right | 5 |
sil | 666 | Shift IO left | 5 |
sir | 676 | Shift IO right | 5 |
Shift and rotate instructions are peformed for the number of bits set to high in the lower half of the instruction (bits 9–17). See the Macro constants "1s" – "9s" below.
IN-OUT TRANSFER GROUP
Note: As opposed to the official list the Macro assembler has the instructions rpa, rpb, ppb, tyo, and dpy defined with the i-bit included. E.g., dpy is defined as 730007, use dpy-i for a plain dpy instruction.
I/O WAIT
ioh | 730000 | I/O Wait — wait for completion pulse ("iot i", defined in Macro assembler) |
PERFORATED TAPE READER
rpa | 720001 | Read Perforated Tape Alphanumeric |
rpb | 720002 | Read Perforated Tape Binary |
rrb | 720030 | Read Reader Buffer |
PERFORATED TAPE PUNCH
ppa | 720005 | Punch Perforated Tape Alphanumeric |
ppb | 720006 | Punch Perforated Tape Binary |
ALPHANUMERICAL ON-LINE TYPEWRITER
tyo | 720003 | Type Out |
tyi | 720004 | Type In |
SEQUENCE BREAK SYSTEM TYPE 120
esm | 720055 | Enter Sequence Break Mode |
lsm | 720054 | Leave Sequence Break Mode |
cbs | 720056 | Clear Sequence Break System |
dsc | 72kn50 | Deactivate Sequence Break Channel |
asc | 72kn51 | Activate Sequence Break Channel |
isb | 72kn52 | Initiate Sequence Break |
cac | 720053 | Clear All Channels |
HIGH SPEED DATA CONTROL TYPE 131
swc | 72x046 | Set Word Counter |
sia | 720346 | Set Location Counter |
sdf | 720146 | Stop Data Flow |
ric | 720366 | Read Location Counter |
shr | 720446 | Set High Speed Channel Request |
PRECISION CRT DISPLAY TYPE 30
dpy | 720007 | Display One Point The third lowest nibble (bits 9-11) encodes the intensity (brightness) in 1's complement, where 3 is the brightest, 0 the default intensity, and 7 (-0) barely visible. |
SYMBOL GENERATOR TYPE 33
gpl | 722027 | Generator Plot Left |
gpr | 720027 | Generator Plot Right |
glf | 722026 | Load Format |
gsp | 720026 | Space |
sdb | 722007 | Load Buffer, No Intensify |
ULTRA-PRECISION CRT DISPLAY TYPE 31
dpp | 720407 | Display One Point on Ultra Precision CRT |
CARD PUNCH CONTROL TYPE 40-1
lag | 720044 | Load a Group |
pac | 720043 | Punch a Card |
CARD READER TYPE 421
rac | 720041 | Read Card Alpha |
rbc | 720042 | Read Card Binary |
rcc | 720032 | Read Card Column |
PROGRAMMED MAGNETIC TAPE CONTROL TYPE 51
msm | 720073 | Select Mode |
mcs | 720034 | Check Status |
mcb | 720070 | Clear Buffer |
mwc | 720071 | Write a Character |
mrc | 720072 | Read Character |
AUTOMATIC MAGNETIC TAPE CONTROL TYPE 52
muf | 72ue76 | Tape Unit and Final |
mic | 72uc75 | Initial and Command |
mrf | 72u067 | Reset Final |
mri | 72ug66 | Reset Initial |
mes | 72u035 | Examine States |
mel | 72u036 | Examine Location |
inr | 72ur67 | Initiate a High Speed Channel Request |
ccr | 72s067 | Clear Command Register |
AUTOMATIC MAGNETIC TAPE CONTROL TYPE 510
sfc | 720072 | Skip if Tape Control Free |
rsr | 720172 | Read State Register |
crf | 720272 | Clear End-of-Record Flip-Flop |
cpm | 720472 | Clear Proceed Mode |
dur | 72xx70 | Load Density, Unit, Rewind |
mtf | 73xx71 | Load Tape Function Register |
cgo | 720073 | Clear Go |
MULTIPLEXED A-D CONVERTER TYPE 138/139
rcb | 720031 | Read Converter Buffer |
cad | 720040 | Convert a Voltage |
scv | 72mm47 | Select Multiplexer (1 of 64 Channels) |
icv | 720060 | Index Multiplexer |
AUTOMATIC LINE PRINTER TYPE 64
cirbuf | 722045 | Clear Buffer |
Ipb | 720045 | Load Printer Buffer |
pas | 721x45 | Print and Space |
DRUM TYPE 23
dia | 72XX61 | Drum initial address |
dwc | 72XX62 | Drum word count (to be preceded by dia) |
dcl | 72XX63 | Drum core location (to be preceded by dwv
c) |
dba | 722061 | Drum break address |
dra | 722062 | Drum request address |
DATA COMMUNICATION SYSTEM TYPE 630 (PDP-1D)
rch | 720022 | Receive a character |
rcr | 721022 | Receive a character and release the scanner (see also shift group: rcr – rotate right AC & IO) |
tcc | 725022 | Transmit a character from receiver counter |
tcb | 724022 | Transmit a character from send buffer |
rrc | 720122 | Read the receiver counter |
ssb | 724122 | Set the send buffer |
rsc | 721122 | Clear flag and release scanner |
OTHER / NON-STANDARD
iot 11 | 720011 | Read MIT Spacewar! controllers |
INSTRUCTIONS SPECIFIC TO THE PDP-1D
lch | 12 | Load accumulator with a character from memory |
dch | 14 | Deposit a character from accumulator in memory |
tad | 36 | 2's complement add |
sni | 644000 | Skip on non-zero IO |
szi | 654000 | Skip on zero IO |
lia | 760020 | Load IO register from AC |
lai | 760040 | Load accumulator from IO |
swp | 760060 | Exchange AC and IO |
cmi | 770000 | Complement IO |
RNG-MODE RELATED AND I/O INSTRUCTIONS (PDP-1D)
ifi | 742000 | Inclusive OR of the flags from IO |
idc | 741000 | Index character in AC |
ida | 740400 | Index accumulator |
scm | 740200 | Special Complement |
sci | 740100 | Special Clear IO |
scf | 740040 | Special Clear Flags |
szf | 740020 | Skip on zero Link |
cll | 740010 | Clear Link |
cml | 740004 | Complement Link |
erg | 720011 | Enter Ring Mode |
lrg | 720010 | Leave Ring Mode |
lrm | 720064 | Leave restrict mode |
erm | 720065 | Enter restrict mode |
rnm | 720066 | Rename memory |
rsm | 720067 | Reset memory banks |
rck | 72XX32 | Read clock |
ctb | 72XX35 | Clear trap buffer |
rro | 72XX17 | Rem-rand out |
rri | 72XX37 | Rem-rand in |
gcf | 720127 | Reset Symbol Generator Type 33 |
MACRO ASSEMBLER CONSTANTS
i | 10000 |
1s | 1 |
2s | 3 |
3s | 7 |
4s | 17 |
5s | 37 |
6s | 77 |
7s | 177 |
8s | 377 |
9s | 777 |
*****
Editorial Note: This list is based on the "Abbreviated Instruction List" in: PDP-1 Handbook (F-15D), DEC, Maynard 1963, Oct 1963 revision and has been updated with additional information regarding instructions specific to the PDP-1D based on information provided in PDP-1 Supplement (PDP-1D-45), DEC, Maynard 1964 and the mus and dis instructions of early PDP-1s.
*****
◀ Inside Spacewar! — Index.