The CP1600 was a 10/16-bit microprocessor created in a partnership between General Instrument and Honeywell in the 1970s. The CP1600's design was based on the PDP-11, whose design also formed the basis of the Western Digital MCP-1600 and influenced others. Honeywell used the CP1600 in a number of process control computers and related systems, but its most widespread use was the CP1610 version in the Intellivision video game console.
The CP1600's instruction set closely followed the PDP-11's, but was not entirely compatible. The instruction opcode was only 10 bits, with the remaining 6 marked "Reserved for future expansion". It appears that the extra 6 bits were intended to be used with co-processors, asserting the PCIT line which stalled the CPU until released. Instructions might be one to three words long depending on the addressing format being used. Unlike similar CPUs, the CP1600 did not support memory-memory indirect addressing (offsets), and looping was implemented in a different way which allowed it to run much faster.
Like the PDP-11, the CP1600 used eight 16-bit "general purpose" processor registers, although they were not truly general purpose as in modern designs. Only R0 was truly general purpose and has been described as "the primary accumulator". R1 through R3 were data counters, generally used for register-based addressing ("implied addressing"). R4 and R5 auto-incremented after being accessed, which made them useful for looping over collections of data.
R6 was the stack pointer, R7 the program counter. Since both of these registers were visible to the programmer, they could be used to implement multiple stacks, or support more complex branching, among other things. There were no implicit stack instructions; when R6 was used in a "read" operation it decremented the address and then returned the data being pointed at, simulating a POP
, and when it was used in a "write" it would post-increment (like R4/R5) and write, like a PUSH
.