The PDP-2 processor
Digital originally published plans to market PDP processors with word
lengths of 18, 24, 30 and 36 bits(1). The PDP-2 designation was
saved for a 24 bit processor that was never built. As far as is known no
in depth design work was ever done for the PDP-2.
Now enter an alternate reality were the PDP-2 exists.
We will likely never know what the 1960 PDP-2 would have looked like, but I imagine it might have taken the form of a 'stretch' PDP-1. With the experience of bringing the PDP-1 to market and Gordon Bell having not yet fully conceived the idea of auto-incrementing memory registers, the PDP-2 order code may have added or dropped a few instructions based on experience gained from programming the PDP-1, and optimized the logic design by encoding the order codes in ways that would simplify the implementation, but, otherwise followed the proven PDP-1 design rather closely. Another possible design direction might have been to augment the new design by the addition of one or more index registers, however the high cost of logic at that time could have made this addition prohibitively expensive. The result might likely have been a processor with a five or six bit order code, an indirect bit, possibly one or two index select bits and a large (15 to 17 bit) address space, eliminating the need for memory bank switching. The much larger word size would also made the addition of an 'immediate data' addressing mode a low cost way to reduce instruction counts (program size) and improve performance.
A 1962 Digital publication(2) reported: Two new products, the PDP-2 and PDP-3, were proposed while the PDP-1 was in production. The PDP-2 never progressed beyond the initial stages. The PDP-3, a 36-bit computer based on PDP-1 concepts was designed but not built by the company.
PDP-2 CPU description
The register state for the PDP-2 is: IR<0:23> instruction register CPU state machine AC<0:23> accumulator MQ<0:23> MQ register OV overflow flag PC<0:15> program counter PF<1:6> program flags SW<0:23> switch register MAB MDB | |------------------------| | |---->| Memory Address Reg | | | | | | | | Memory Data Reg | | | | & Data Sign Extend |<--->| | |------------------------| | | | | | | |------------------------| | |<----| Program Counter |---->| | |------------------------| | | ^ | | | | | |------------------------| | |<----| Instruction Register |<----| | |------------------------| | | | | | | |------------------------| | | | Accumulator |<--->| | |------------------------| | | | | | | |------------------------| | | | Input/Output Register |<--->| | |------------------------| | | | | | | |------------------------| | |<----| Switch Register |---->| | |------------------------| | | | | | | |------------------------| | |---->| Bus Display |<----| |------------------------| | | | |------------------------| | | I/O Devices |<--->| |------------------------| The target major cycle time will be 500ns. The PDP-2 has five instruction formats: memory reference, shifts, skips, I/O transfer, and operate.Memory reference instructions can access an address space of 64K words, or provide a sign extended 16 bit immediate data word (+/- 65536). When sign extending the Indirect Bit (ib) provides the sign. Indirection is limited to one level.
The memory reference format is: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | op |id|ib| address | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | | +------- Indirect bit +---------- Immediate data <7:23> are sign extended op mnemonic action major cycles <0:5> 06 AND AC = AC & ARG[] 1* ALU logical AND 05 IOR AC = AC | ARG[] 1* ALU logical OR 04 XOR AC = AC ^ ARG[] 1* ALU logical XOR 03 ADD AC = AC + ARG[] 1* ALU arithmetic 02 SUB AC = AC - ARG[] 1* ALU arithmetic 01 SUR AC = ARG[] - AC 1* ALU arithmetic 10 LAC AC = ARG[] 1* ALU logical 11 LMQ MQ = ARG[] 1* 12 MIA AC = MQ 1 13 MAI MQ = AC 1 14 INC AC = M[MA] = M[MA]+1 3** 15 DEC AC = M[MA] = M[MA]-1 3** 16 CMP AC - ARG[] Set CC only 1* ALU / arithmetic 34 JMP PC = [MA] 1** 36 MUS Multiply Step ARG[] 2* ALU arithmetic / Shift 37 DIS Divide Step ARG[] 2* ALU arithmetic / Shift 20 DAC M[MA] = AC 2** M-SRC=AC, M-DES=MDR 21 DAP M[MA]<8:23> = AC<8:23> 2** M-SRC=AC, M-DES=MDR.A 22 DIP M[MA]<0:7> = AC<0:7> 2** M-SRC=AC, M-DES=MDR.I 23 DMQ M[MA] = MQ 2** M-SRC=MQ, M-DES=MDR 24 DZM M[MA] = 0 2** M-SRC=idle, M-DES=MDR 25 JSP M[MA] = PC, PC = MA+1 3?? M-SRC=PC, M-DES=MDR xx XEQ M[MA] is executed as an instruction * Timing for Immediate argument, add one cycle for direct, two for indirect. ** Timing for direct address, add one cycle for indirect. # JMP provides three addressing modes: ARG[] = either M[MA] or bits <7:23> of the instruction sign extended MA = memory address (after indirection, if any)Shift Group - sft (Operation Code 70) instructions will rotate or shift the Accumulator and/or the In-Out Register. When the two registers operate combined, the In-Out Register is considered to be a 24-bit magnitude extension of the right end of the Accumulator. Rotate is a non-arithmetic cyclic shift. That is the two ends of the register are logically tied together and information is rotated as though the reigster were a ring. Shift is an arithmetic operation and is, in effect, multiplication of the number in the register by 2N, where N is the number of shifts; plus is left and minus is right. As bits are shifted out from one end of a register they are replaced at the other end by ones if the number negative and zeroes if the number is positive. The sign bit is not shifted. The number of shift or rotate steps to be performed (N:1-15) is indicated by the one's complement shift count in instructions bits 20..23
The shift group format is: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | 1 1 subopcode | | shift cnt | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | | | | | | +-- 1 AC | | +----- 1 IO | +-------- 0 rotate, 1 shift +----------- 0 left, 1 right Rotate Acumulator Right rar N Operation Code 71, SubOpCode 11 Rotates the bits of the Accumulator right N positions. Rotate Acumulator Left ral N Operation Code 61, SubOpCode 01 Rotates the bits of the Accumulator left N positions. Shift Acumulator Right sar N Operation Code 75, SubOpCode 15 Shifts the contents of the Accumulator Right N positions. Shift Acumulator Left sal N Operation Code 65, SubOpCode 05 Shifts the contents of the Accumulator left N positions. Rotate In-Out Register Right rir N Operation Code 72, SubOpCode 12 Rotates the bits of the In-Out Register right N positions. Rotate In-Out Register Left ril N Operation Code 62, SubOpCode 02 Rotates the bits of the In-Out Register left N positions. Shift In-Out Register Right sir N Operation Code 76, SubOpCode 16 Shifts the contents of the In-Out Register right N positions Shift In-Out Register Left sil N Operation Code 66, SubOpCode 06 Shifts the contents of the In-Out Register left N positions. Rotate AC and IO Right rcr N Operation Code 73, SubOpCode 13 Rotates the bits of the combined registers right in a single ring N positions Rotate AC and IO Left rcl N Operation Code 63, SubOpCode 03 Rotates the bits of the combined registers left in a single ring N positions Shift AC and IO Right scr N Operation Code 77, SubOpCode 17 Shifts the contents of the combined registers right N positions Shift AC and IO Left scl N Operation Code 67, SubOpCode 07 Shifts the contents of the combined registers left N positions The skip format is: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | 1 1 0 1 0 X | 0 1 2 3 4 5 6 7| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | | | | | | | \______________________/ | | | | | | | | | | | | | | | | | sense sw | | | | | | | +-------- AC == 0 | | | | | | +----------- AC >= 0 | | | | | +-------------- AC < 0 | | | | +----------------- OV == 0 | | | +-------------------- IO >= 0 | | +----------------------------------- invert skip A-BUS A-ADR = <0:15> A-SRC = <idle,PC,IR> selecting PC or IR implies dest. of MAR M-BUS M-DAT = <0:23> M-SRC = <idle,MDR,MDR-EXT,PC,AC,MQ,SW> M-DES = <idle,MDR,IR,PC,AC,MQ>