# General Instrument CP1600

Il CP1600 è un microprocessore a 16 bit creato negli anni settanta da General Instrument in collaborazione con Honeywell. Il progetto del CP1600 era basato sul PDP-11, che aveva ispirato anche altri processori, tra cui il Western Digital MCP-1600. Honeywell usò il CP1600 in diversi sistemi per il controllo industriale ma il suo più famoso impiego fu, nella sua versione depotenziata CP1610, come CPU della console giochi Intellivision prodotta da Mattel.

## Descrizione

Il set di istruzioni del CP1600 ricalcava molto quello del PDP-11 anche se non era del tutto compatibile con esso. Inoltre, nonostante fosse un processore a 16 bit, gli opcode delle istruzioni erano grandi solo 10 bit: i restanti 6 bit sarebbero dovuti servire per future espansioni del set, probabilmente per integrare nuove istruzioni da usarsi con dei coprocessori, considerando che l'ingresso PCIT bloccava il processore fino al rilascio della linea.
Le istruzioni occupavano da 1 a 3 parole a seconda del formato di indirizzamento utilizzato: a differenza di CPU simili, il CP1600 non supportava gli offset, ossia l'indirizzamento indiretto memoria-memoria, ed i cicli erano implementati in una maniera differente ma comunque molto veloce.
Come il PDP-11, il CP1600 utilizzava 8 registri a 16 bit di uso generale denominati "R..", anche se tale definizione non corrispondeva al significato moderno che si dà al termine: infatti solo il registro "R0" era veramente di uso generale ed era descritto come "accumulatore principale". I registri "R1-R3" erano contatori, usati generalmente per modalità di indirizzamento basate sui registri, i registri "R4" e "R5" si autoincrementavano dopo ogni accesso, un comportamento utile ad esempio durante l'iterazione attraverso una collezione di dati.
Il registro "R6" era il puntatore allo stack mentre il registro "R7" era il puntatore di programma. Dato che entrambi questi registri erano utilizzabili dal programmatore, essi potevano essere utilizzati per implementare stack multipli, o per supportare salti molto complessi.
Il CP1600 non aveva istruzioni di accesso diretto allo stack. Tale accesso era svolto mediante le semplici operazioni di lettura e scrittura che implicavano l'uso del registro: se l'"R6" era utilizzato in un'operazione di lettura, il suo indirizzo veniva decrementato e la CPU restituiva il valore puntato dal registro, simulando un'istruzione POP (usata su altre CPU per estrarre un valore dallo stack); se veniva usato in un'operazione di scrittura, il registro si autoincrementava (come i registri "R4" e "R5") e poi memorizzava il valore ricevuto all'indirizzo contenuto, come nel caso di un'istruzione PUSH (usata su altre CPU per inserire un valore nello stack).
Una delle principali caratteristiche del CP1600, comune anche al PDP-11, era l'utilizzo di dispositivi di I/O mappati in memoria, vale a dire che le periferiche erano controllate scrivendo in determinate locazioni della memoria. Rispetto al PDP-11, invece, il CP1600 non utilizzava linee distinte per il bus dati ed il bus indirizzi ma usava la tecnica della multiplazione per condividere un unico bus fra dati ed indirizzi per ridurre il numero di piedini del processore. Questa scelta implicava che per poter interfacciare la CPU al resto di un sistema doveva essere adottata una circuiteria logica addizionale composta da latch o buffer così da poter collegare di volta in volta il bus del processore al bus indirizzi oppure al bus dati del sistema. Questo modo di operare influiva negativamente sulle prestazioni delle operazioni di I/O: per porre rimedio a ciò General Instrument progettò il PIC1640, dove PIC stava per "Programmable Intelligent Computer",, un microcontrollore programmabile che affiancava il CP1600 e gestiva i canali di I/O. Dal PIC1640 è derivata poi l'attuale famiglia di microcontrollori PICmicro prodotta da Microchip Technology.
Il CP1600 fu realizzato in tecnologia NMOS e richiedeva 3 differenti tensioni di alimentazione: +12, +5 e -3 Volt. Il CP1600 aveva segnali di linea compatibili con quelli dei circuiti TTL. Il processore lavorava con un segnale di temporizzazione a 2 fasi lungo 600 ns, corrispondente ad un clock di 3,3 MHz, che fu poi ridotto a 400 ns, corrispondenti a 5 MHz: a questa velocità le istruzioni venivano eseguite con tempi variabili da 1,6 a 4,8 μs. General Instrument forniva anche un sistema di sviluppo per il CP1600 denominato "GIMINI".

## Derivati ed utilizzi

General Instrument realizzò una versione depotenziata del CP1600 denominata CP1610: questo processore fu utilizzato come CPU della console giochi Intellivision, prodotta da Mattel a partire dal 1980, il più famoso prodotto basato su tale chip.
Il CP1610 era essenzialmente una versione più lenta del CP1600: nell'Intellivision esso operava ad un clock di 0,894 MHz nelle console NTSC e 1 MHz in quelle PAL/SÉCAM. Il successo commerciale della console fece anche il successo del CP1610: a discapito del raro utilizzo del CP1600 nei computer dell'epoca, l'Intellivision fu venduta in 3 milioni di esemplari, ognuna con al suo interno un CP1610. La commercializzazione dell'Intellivision terminò nel 1984 quando Mattel, per le grosse perdite registrate a causa della crisi dei videogiochi del 1983, uscì dal mercato delle console.
L'uscita di scena del principale cliente del CP1600 unita alla comparsa sul mercato di nuovi processori a 32 bit, come il Motorola 68000, che facevano diminuire l'interesse verso quelli a 16 bit come il CP1600, portarono General Instrument a cessarne la produzione nel 1985. Successivamente l'azienda attuò anche un piano di riassetto societario, separando nel 1987 la sussidiaria "Microelectronics" che seguiva il settore della microelettronica per creare Microchip Technology.