Home

PDP-6/10 Instruction set

The PDP-6/10 instruction set may seem daunting at first, but it is actually very regular and easy to understand. You can even completely memorize it without too much effort if you understand how it works.

You can find a description of the PDP-6/10 instruction here for the PDP-6 (src), KA10 (src).

You can find tables of all PDP-6/10 instructions (and monitor UUOs) here for the PDP-6 (src), KA10 (src), KI10 (src), KL10 (src).

See this table for a description of the single bits of the PDP-6 instructions:

	UUO
000 XXX XXX

FSC	132

	bytes
001 011 XXX
  XXX: 011 - IBP  (CAO)
       100 - ILDB (LDCI)
       101 - LDB  (LDC)
       110 - IDPB (DPCI)
       111 - DPB  (DPC)

	floating point
  (FAD|FSB|FMP|FDV)R?[LMB]?
001 1XX YZZ
  XX: 00 - FAD
      01 - FSB
      10 - FMP
      11 - FDV
   Y: round
  ZZ: 00
      01 - (L) two ACs
      10 - (M) memory
      11 - (B) both

	full word
  MOV[ESNM][IMS]?
010 00X XYY
  XX: 00 - MOVE
      01 - MOVS
      10 - MOVN
      11 - MOVM
  YY: 00
      01 - (I) immediate
      10 - (M) memory
      11 - (S) self

	multiply/divide
  I?(MUL|DIV)[IMB]?
010 01X YZZ
   X:  0 - MUL
       1 - DIV
   Y:  0 - (I-) one AC
       1 - two ACs
  ZZ: 00
      01 - (I) immediate
      10 - (M) memory
      11 - (B) both

	shifts
  (ASH|ROT|LSH)C?
010 100 XYY
   X: (C) combine two ACs
  YY: 00 - ASH
      01 - ROT
      10 - LSH
      11 - unassigned

	misc
010 101 XXX
  XXX: 000 - EXCH
       001 - BLT
       010 - AOBJP
       011 - AOBJN
       100 - JRST
       101 - JFCL
       110 - XCT
       111 - unassigned

	jump/push down
010 110 XXX
  XXX: 000 - PUSHJ
       001 - PUSH
       010 - POP
       011 - POPJ
       100 - JSR
       101 - JSP
       110 - JSA
       111 - JRA

	add/subtract
  (ADD|SUB)[IMB]?
010 111 XYY
   X:  0 - ADD
       1 - SUB
  YY: 00
      01 - (I) immediate
      10 - (M) memory
      11 - (B) both

	jump/skip
  (CA[IM]|JUMP|SKIP|AO[JS]|SO[JS])(L|E|LE|A|GE|N|G)?
011 VVW XYZ
  VV: 00 - CAI/CAM (ACCP)
      01 - JUMP/SKIP (MEMAC TST)
      10 - AOJ/AOS (MEMAC + 1)
      11 - SOJ/SOS (MEMAC - 1)
   W:  0 - (I) immediate / (J) AC-JUMP
       1 - (M) memory    / (S) MEM-SKIP
   X: negate condition YZ
   Y: skip/jump on =
   Z: skip/jump on <

	boolean
  (SETZ|AND|ANDCA|SETM|ANDCM|SETA|XOR|IOR|
   ANDCB|EQV|SETCA|ORCA|SETCM|ORCM|ORCB|SETO)[IMB]?
100 ABC DXX
  ABCD: truth table for AC and MEM
            M
         | 0 1
       --+----
        0| A C
      A  |
        1| B D

       0001 - AND   / ORCB  - 1110
       0010 - ANDCA / ORCM  - 1101
       0100 - ANDCM / ORCA  - 1011
       0000 - SETZ  / SETO  - 1111
       0011 - SETM  / SETCM - 1100
       0101 - SETA  / SETCA - 1010
       0110 - XOR   / EQV   - 1001
       0111 - IOR   / ANDCB - 1000
   XX: 00
       01 - (I) immediate
       10 - (M) memory
       11 - (B) both

	half word
  H[LR][LR][ZOE]?[IMS]?
101 WXX YZZ
   W: 0 - dest L
      1 - dest R
  XX: 00 
      01 - (Z) zero other half
      10 - (O) set other half to ones
      11 - (E) sign extend other half
   Y: swap source halves
  ZZ: 00
      01 - (I) immediate
      10 - (M) memory
      11 - (S) self

	logical test and modify
  T[RLDS][NZCO][EAN]?
110 UVW XYZ
  U: complement masked bits after V
  V: 0 - (N) do nothing with masked bits / (C)
     1 - (Z) zero masked bits            / (O)
  W: 0 - (R/L) immediate
     1 - (D/S) memory
  X: negate condition Y
  Y: 0 - skip never       / (A)
     1 - (E) skip if zero / (N)
  Z: swap mask halves

	IO
111 XXX XXX XYY Y
  XXX XXX X: device code
  YYY: 000 - BLKI
       001 - DATAI
       010 - BLKO
       011 - DATAO
       100 - CONO
       101 - CONI
       110 - CONSZ
       111 - CONSO