Recent from talks
Nothing was collected or created yet.
General Instrument CP1600
View on Wikipedia
The CP1600 is a 16-bit microprocessor created in a partnership between General Instrument and Honeywell, introduced in February 1975.[1][2] It is one of the first single-chip 16-bit processors. The overall design bears a strong resemblance to the PDP-11.
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 1610 was essentially a slower version of the 1600, running at a maximum speed around 2 MHz instead of the 3 to 5 MHz of the 1600.
The system saw little other use due to General Instrument's marketing philosophy of seeking out customers only with very large orders and ignoring smaller customers. They also did not pursue a second source arrangement, which in the early days of microprocessor designs was a requirement for most potential customers.[3]
Description
[edit]Physical implementation
[edit]
The CP1600 was implemented in enhancement mode nMOS and required +12, +5, and −3 V power supplies; I/O connections except for the clocks were TTL (5 V) compatible.[a] Each microstate or processor cycle uses four internal time slots generated by two non-overlapping clocks. A 3.3 MHz two-phase clock produces a 600 nanosecond microcycle. A 5 MHz two-phase clock produces a 400 nanosecond microcycle. Due to the voltage requirements of the clock signals, these had to be generated with external circuitry, as was common in this era of microprocessor design.[3]
In order to fit a 16-bit processor into a 40-pin dual in-line package (DIP) chip design, the CP1600 multiplexed its data and address pins. This allowed a set of 16 pins to be used for both address selection and reading and writing data, but to do so required two bus cycles. It also complicated the overall machine layout as buffers were required on the memory bus to latch the address while the processor switched the pins to data mode. The interface to the system was likewise complex, requiring three pins, BDIR, BC1 and BC2, which had to be decoded to understand what state the memory bus was in.[4]
A relatively uncommon feature of the CP1600 was its "external branch" concept. The BEXT instruction opcode left the lower four bits of the code free, leaving it to the programmer to place a number in those four bits. When the opcode was called, any of those four bits set to high (1) would be expressed as high voltages on the external pins EBCA0 through EBCA3. This was normally used to select one of up to 16 external devices. The selected device would then respond by setting the EBCI to high if it wanted to communicate. If EBCI was high, the branch address provided with the BEXT would then be taken, if EBCI was low, the branch would be skipped.[4] This could be used, for instance, to test whether an external device had input data that needed to be processed; the processor could express the value "2" on the EBCA to sample device 2, call the BEXT, and that device would then respond by setting EBCI to true if there was data, causing the processor to jump into the device driver code to read the data from that device.
This contrasts with the typical solution for handling external devices; most systems have the devices raise an interrupt which causes the processor to call special code, the interrupt handler, which then reads additional data to determine which device called the interrupt. This additional data may be presented using dedicated pins on the CPU, but is more commonly presented as a value on the data bus. Based on that value, the interrupt handler code then decides which device driver to call to process the data. The CP1600 can implement this in fewer instructions; the interrupt handler is simply a series of BEXT instructions pointing at the associated drivers which it runs through one at a time until the device in question sets the EBCI and automatically cause the code to branch.[5]
In total, implementing a system using the CP1600 often required additional support chips and logic. This included a system to multiplex sixteen signals into a single pin if the external branching was being used, and a three-bit-to-eight-line converter to avoid having to decode the bus status signals in external parts.[3]
Instruction set and registers
[edit]
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
The smallest unit of addressable and writable memory is the 16-bit word; byte addressing is not supported. The CP1600 can address 64K words, or in modern terms, 128 kbytes. Of the 16-bits available in an instruction opcode, the CP1600 used only 10. The remaining 6 bits were marked "Future Use."[6] The 10-bit instructions meant that code stored in a typical byte-oriented ROM would waste six bits per instruction. In the era of expensive memory, this was a significant issue. To address this, General Instrument also produced special 10-bit ROMs that efficiently stored the instructions. As data and addresses would still require 16-bit values, the 1600 included a special SDBD instruction that pieced together a 16-bit argument from two 10-bit ROM reads.
The unused 6 bits were intended to be used with co-processors, asserting the PCIT line which stalled the CPU until released. Early documentation shows two planned chips in the series, the 1616 which added the "Extended Instruction Set", and the 1618 "Priority Expander".[7]
The system included 87 basic instructions. Instructions might be one to three words long depending on the addressing format and whether 10-bit or 16-bit program memory was being used.[4] The CP1600 did not support memory-memory indirect addressing (offsets), and indexing was implemented using a dedicated adder that performed single-cycle changes to addresses in registers. The arithmetic logic unit (ALU) was 8 bits wide and could add two 16-bit internal registers in 2.4 microseconds, and memory to register adds of 16-bit numbers in 3.2 microseconds.[8]
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 had no pre-defined purpose and has been described as "the primary accumulator".[9] R1 through R3 could be used data pointers, generally used for register-based addressing ("implied addressing"). R4 and R5 autoincremented 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 explicit stack PUSH or POP instructions. When R6 was used in a "read" operation it decremented the address and then returned the data being pointed at, the equivalent of a POP; when it was used in a "write" it would write then post-increment (like with the autoincrementing registers R4/R5), simulating a PUSH.
Example code
[edit]The following assembler source code is for a subroutine CPYMEM that copies words from one location to another. Note that R4 and R5 autoincrement after being accessed. This makes it easy to loop through an array of words. Curiously, the CP1600 has a 16-bit word width but only a 10-bit instruction width. The following assumes 10-bit ROMs are being used.[10]
1000
1000 284
1001 245
1002 013
1003 22C 004
1005 097
1006
|
; Copy memory words addressed by R4 to location addressed
; by R5 for a length of R3 words. Return address in R2.
; @@loop is a local label
ROMW 10 ;Assume 10-bit program memory
CPYMEM PROC
@@loop: MVI@ R4,R0 ;Get word to copy: MOV (R4)+,R0
MVO@ R0,R5 ;Save word: MOV R0,(R5)+
DECR R3 ;Bump word counter
BNEQ @@loop ;Continue for all words
JR R2 ;Return to caller: MOVR R2,PC
ENDP
|
I/O
[edit]As was common for the era, the CP1600 used memory-mapped I/O, as opposed to separate I/O pins as seen on the Intel systems. The use of a multiplexed bus and multi-state bus status made implementing I/O more difficult than would normally be the case on memory-mapped systems. This meant that implementations had to use latches or buffers to be able to interface with the CPU as it changed the bus from indicating an address to data.[9] This both negatively affected I/O performance and increased the complexity of the I/O devices.
To address this problem, GI supplied a series of 164x dedicated I/O chips that implemented the required bus logic. These included, for instance, the 1641 keyboard controller, the 1643 cassette tape controller, and the 1647 display control.[7] Most famous among these is the 1640 "Programmable Interface Controller", or PIC, which was designed to work in concert with the CP1600 and act as a channel controller for the CPU. As with the other 1640 series chips, the PIC internally decoded the bus logic, but also added a very simple processor that could run its own programs to perform I/O and direct memory access. For instance, one might send an instruction to a PIC on a floppy disk card to read data from a given sector on the disk. The PIC would then read the data into its own internal buffer, watch the bus for unused time when the bus status pins were all zero, and then send data to main memory.[7]
General Instrument provided cross-assemblers and simulators/debuggers compatible with 16-bit or larger minicomputers.[10] GI also provided a standalone CP1600 based microcomputer system in the GIC1600.[11]
Uses
[edit]The CP1610, used in game consoles such as the Champion 2711[12] and most notably the Intellivision, is a compatible member of the 1600 microprocessor family. It uses a 2 MHz two-phase clock producing a 1 microsecond processor cycle. The CP1610 in the NTSC Intellivisions uses a 1.7897725 MHz two-phase clock. Although users of the CP1600 in the traditional computer role were relatively rare, over 3 million Intellivisions were produced from 1980 until the video game crash of 1983 led to the closing of the Intellivision production lines in 1984.[13]
Production of the CP1600 ended in 1985 when General Instrument spun off its microelectronics division to create Microchip Technology. By this point a number of 32-bit designs like the MC68000 were available that limited interest in a 16-bit design like the CP1600, and their main existing customer, the Intellivision, was no longer in production. Many other products were also end-of-lifed at the same time, and their primary product was the PIC.
Notes
[edit]- ^ In contrast to the National Semiconductor PACE, for instance, which output 12V signals and required extensive interfacing to use with TTL components.
References
[edit]Citations
[edit]- ^ "General Instrument's microprocessor aimed at minicomputer market". January 2000.
- ^ Belzer, Jack; Holzman, Albert G.; Kent, Allen (1978). Encyclopedia of Computer Science and Technology: Volume 10 - Linear and Matrix Algebra to Microorganisms: Computer-Assisted Identification. CRC Press. p. 402. ISBN 9780824722609.
- ^ a b c Osborne 1981, p. 2.1.
- ^ a b c Series1600 1975, 2.1.
- ^ Osborne 1981, p. 2.3.
- ^ CP-1600 Microprocessor Users Manual (PDF) (S16DOC-CP 1600 -04 ed.). General Instruments. May 1975. Retrieved 5 July 2022.
- ^ a b c Series1600 1975, p. i.
- ^ Series1600 1975.
- ^ a b Lowell Turner, "General Instruments CP1600", 10 July 2001
- ^ a b CP-1600 Cross Assembler Simulator Users Manual (PDF). General Instrument. November 1974.
- ^ GIC1600 Microcomputer Users Manual (PDF). General Instrument. September 1975.
- ^ "Champion 2711 |Pre-83". pre83.com. Retrieved 2022-05-23.
- ^ "Mattel Intellivision - 1980-1984". ClassicGaming. IGN. Archived from the original on 2008-06-23. Retrieved 2008-05-16.
Bibliography
[edit]- Osborne (1981). Osborne 16-Bit Microprocessor Handbook. Osborne/McGraw-Hill. ISBN 0-931988-43-8.
- Series 1600 Microprocessor System (PDF). General Instrument. 1975.
External links
[edit]- "CP1610" at the Intellivision Wiki
General Instrument CP1600
View on GrokipediaHistory
Development
The development of the General Instrument CP1600 originated from a joint partnership between General Instrument Microelectronics and Honeywell in the early 1970s, aimed at creating a 16-bit microprocessor tailored for industrial process-control and embedded applications.[1][4][5] This collaboration leveraged General Instrument's expertise in MOS LSI fabrication and Honeywell's needs for reliable control systems, resulting in a design focused on integrating minicomputer capabilities into a compact form factor.[3] The effort was driven by engineers including Jeff Stein at General Instrument, who initiated work around 1973 to address demands for programmable controllers in industrial settings.[6] The CP1600's architecture drew loose inspiration from minicomputer designs like the PDP-11, adapting its register-based processing and addressing modes for single-chip implementation.[1] This influence emphasized efficient 16-bit operations while incorporating third-generation minicomputer features, such as multiple general-purpose registers, to support versatile computing tasks.[3] The chip was fabricated using N-channel MOS ion-implant technology, specifically General Instrument's GIANT II process, which enabled high-speed performance through enhanced transistor density and reliability in a 40-pin DIP package.[3][2] This technological choice facilitated the transition from multi-chip minicomputer systems to a standalone microprocessor suitable for space-constrained environments. Key engineering objectives centered on delivering robust 16-bit processing power with low power consumption and minimal physical footprint, enabling standalone microcomputer systems for real-time data processing and control.[1][3] The design prioritized simplicity in hardware-software integration, supporting up to 64K words of addressable memory and multi-level interrupts to handle complex embedded tasks without excessive external components.[5] Development milestones included initial prototyping in 1973, with iterative refinements leading to production readiness by 1975, as documented in General Instrument's user manuals and data catalogs.[6][3]Introduction and production
The General Instrument CP1600 was introduced in February 1975 as the first commercially available single-chip 16-bit microprocessor, developed in partnership with Honeywell.[7] It debuted as the core component of the Series 1600 microcomputer family, which encompassed a range of compatible semiconductor devices designed for high-speed data processing and real-time applications. Full commercial availability of the Series 1600 lineup, including the CP1600 and supporting modules, occurred by fall 1975.[8] The CP1600 was fabricated using NMOS ion implant large-scale integration (LSI) technology and housed in a 40-pin dual in-line ceramic package to enable compact system designs.[3] Initial production focused on achieving viable yields for the complex 16-bit architecture, which required three power supplies (+12V, +5V, and -3V) and multiplexed address/data buses to fit within the pin constraints. As production scaled, General Instrument expanded the Series 1600 ecosystem to include compatible static RAMs (such as the 1630 256x4 device), mask-programmable ROMs, and peripheral support chips like the CP1680 input/output controller, facilitating complete microcomputer systems without extensive external logic.[8][3] Key variants of the CP1600 included the base CP1600 CPU itself and the CP1610, an enhanced iteration optimized for consumer electronics with improved I/O compatibility and processing efficiency for applications like video games.[9] Later production introduced ROM-integrated versions tailored for dedicated tasks, such as custom firmware in embedded systems, to reduce external memory requirements. In marketing materials, General Instrument positioned the CP1600 as "the world's most powerful 16-bit microprocessor," emphasizing its minicomputer-like capabilities.[5] Prototype units were priced around $150, while volume production in 1975 brought costs down to under $100 per unit in quantities of 500 or more.[10]Architecture
Physical implementation
The General Instrument CP1600 is implemented as a single-chip MOS-LSI microprocessor using N-channel ion-implanted enhancement-mode technology based on the GIANT II process.[3] This construction enables high-density integration on a monolithic silicon die, housed in a 40-pin dual in-line package (DIP) made of ceramic for reliability in industrial and embedded applications.[3] Electrically, the CP1600 operates with a two-phase non-overlapping clock input at a maximum frequency of 5 MHz, corresponding to a 400 ns instruction cycle time, with clock pulse widths of at least 70 ns and rise/fall times between 5 ns and 15 ns.[3] It requires three power supplies: +12 V (VDD, 11.4–12.6 V, typical 70 mA draw), +5 V (VCC, 4.75–5.25 V, typical 12 mA draw), and –3 V (VBB, –3.3 to –2.7 V, typical 1 mA draw), resulting in a typical power dissipation of approximately 900 mW.[3] Input/output levels are TTL-compatible, with high-level inputs at 2.4 V minimum (up to VCC), low-level inputs at 0.65 V maximum, high-level outputs at 2.4 V (100 µA source), and low-level outputs at 0.5 V (1.6–2.0 mA sink).[3] The pinout supports a multiplexed 16-bit bidirectional data/address bus (D0–D15) along with control signals for interfacing.[3] Key pins include:| Pin | Name | Function |
|---|---|---|
| 6–15, 16–21 | D0–D15 | 16-bit bidirectional data bus; multiplexed for address output during bus available read (BAR) state.[3] |
| 3 | BC1* | Bus control output (active low).[3] |
| 4 | BC2* | Bus control output (active low).[3] |
| 5 | BDIR | Bus direction output (high for CPU output).[3] |
| 27 | INTRM* | Maskable interrupt request input (active low).[3] |
| 28 | INTR* | Non-maskable interrupt request input (active low).[3] |
| 37 | φ2 | Two-phase clock input 2.[3] |
| 38 | φ1 | Two-phase clock input 1.[3] |
| 36 | VDD | +12 V power supply.[3] |
| 34 | VCC | +5 V power supply.[3] |
| 35 | VBB | –3 V power supply.[3] |
| 39 | GND | Ground.[3] |