El microprocesador 4004

Por Dario Alejandro Alpern

Historia del 4004

En 1969, Silicon Valley, en el estado de California (EEUU) era el centro de la industria de los semiconductores. Por ello, gente de la empresa Busicom, una joven empresa japonesa, fue a la compañía Intel (fundada el año anterior) para que hicieran un conjunto de doce chips para el corazón de su nueva calculadora de mesa de bajo costo.

Al principio se pensó que no se podía hacer, ya que Intel no estaba preparada para realizar circuitos "a medida". Pero Marcian Edward Ted Hoff, Jr., jefe del departamento de investigación de aplicaciones, pensó que habría una mejor forma de realizar el trabajo.

Durante el otoño (del hemisferio norte) de 1969 Hoff, ayudado por Stanley Mazor, definieron una arquitectura consistente en una CPU de 4 bits, una memoria ROM (de sólo lectura) para almacenar las instrucciones de los programas, una RAM (memoria de lectura y escritura) para almacenar los datos y algunos puertos de entrada/salida para la conexión con el teclado, la impresora, las llaves y las luces. Además definieron y verificaron el conjunto de instrucciones con la ayuda de ingenieros de Busicom (particularmente Masatoshi Shima).

En abril de 1970 Federico Faggin se sumó al staff de Intel. El trabajo de él era terminar el conjunto de chips de la calculadora. Se suponía que Hoff y Mazor habían completado el diseño lógico de los chips y solamente quedarían definir los últimos detalles para poder comenzar la producción. Esto no fue lo que Faggin encontró cuando comenzó a trabajar en Intel ni lo que Shima encontró cuando llegó desde Japón.

Shima esperaba revisar la lógica de diseño, confirmando que Busicom podría realizar su calculadora y regresar a Japón. Se puso furioso cuando vio que estaba todo igual que cuando había ido seis meses antes, con lo que dijo (en lo poco que sabía de inglés) "Vengo acá a revisar. No hay nada para revisar. Esto es sólo idea". No se cumplieron los plazos establecidos en el contrato entre Intel y Busicom.

De esta manera, Faggin tuvo que trabajar largos meses, de 12 a 16 horas por día.

Finalmente pudo realizar los cuatro chips arriba mencionados. El los llamó "familia 4000". Estaba compuesto por cuatro dispositivos de 16 pines: el 4001 era una ROM de dos kilobits con salida de cuatro bits de datos; el 4002 era una RAM de 320 bits con el port de entrada/salida (bus de datos) de cuatro bits; el 4003 era un registro de desplazamiento de 10 bits con entrada serie y salida paralelo; y el 4004 era la CPU de 4 bits.

El 4001 fue el primer chip diseñado y terminado. La primera fabricación ocurrió en octubre de 1970 y el circuito trabajó perfectamente. En noviembre salieron el 4002 con un pequeño error y el 4003 que funcionó correctamente. Finalmente el 4004 vino unos pocos días antes del final de 1970. Fue una lástima porque en la fabricación se habían olvidado de poner una de las máscaras. Tres semanas después vinieron los nuevos 4004, con lo que Faggin pudo realizar las verificaciones. Sólo encontró unos pequeños errores. En febrero de 1971 el 4004 funcionaba correctamente. En el mismo mes recibió de Busicom las instrucciones que debían ir en la ROM.

A mediados de marzo de 1971, envió los chips a Busicom, donde verificaron que la calculadora funcionaba perfectamente. Cada calculadora necesitaba un 4004, dos 4002, cuatro 4001 y tres 4003. Tomó un poco menos de un año desde la idea al producto funcionando correctamente.

Luego de que el primer microprocesador fuera una realidad, Faggin le pidió a la gerencia de Intel que utilizara este conjunto de chips para otras aplicaciones. Esto no fue aprobado, pensando que la familia 4000 sólo serviría para calculadoras. Además, como fue producido mediante un contrato exclusivo, sólo lo podrían poner en el mercado teniendo a Busicom como intermediario.

Después de hacer otros dispositivos utilizando la familia 4000, Faggin le demostró a Robert Noyce (entonces presidente de Intel) la viabilidad de estos integrados para uso general. Finalmente ambas empresas llegaron a un arreglo: Intel le devolvió los 60000 dólares que había costado el proyecto, sólo podría vender los integrados para aplicaciones que no fueran calculadoras y Busicom los obtendría más baratos (ya que se producirían en mayor cantidad).

El 15 de noviembre de 1971, la familia 4000, luego conocida como MCS-4 (Micro Computer System 4-bit) fue finalmente introducida en el mercado.

Descripción del 4004

Es un microprocesador de 4 bits de bus de datos, direcciona 32768 bits de ROM y 5120 bits de RAM. Además se pueden direccionar 16 ports de entrada (de 4 bits) y 16 ports de salida (de 4 bits). Contiene alrededor de 2300 transistores MOS de canal P de 10 micrones. El ciclo de instrucción es de 10,8 microsegundos.

Terminales del 4004

Este microprocesador estaba encapsulado en el formato DIP (Dual Inline Package) de 16 patas (ocho de cada lado). La distancia entre las patas es de 0,1 pulgadas (2,54 milímetros), mientras que la distancia entre patas enfrentadas es de 0,3 pulgadas (7,68 milímetros).

Nótese en el gráfico de la derecha el semicírculo que identifica la posición de la pata 1. Esto sirve para no insertar el chip al revés en el circuito impreso.

Las funciones de las 16 patas con las que se conecta el 4004 con el exterior son las siguientes:

PataNombreDescripción
1D0Todas las direcciones y datos de RAM y ROM pasan por estas líneas
2D1
3D2
4D3
5VSSReferencia de tierra. Es la tensión más positiva.
6Clock phase 1Son las dos fases de entrada de reloj (clock)
7Clock phase 2
8Sync outputSeñal de sincronismo generada por el procesador. Indica el comienzo de un ciclo de instrucción.
9ResetUn "1" lógico aplicado en esta pata borra todos los flags y registros de estado y fuerza el contador de programa (PC) a cero. Para que actúe correctamente, esta línea deberá activarse por 64 ciclos de reloj (8 ciclos de máquina).
10TestLa instrucción JCN verifica el estado de esta línea.
11CM-ROM (Control Memory Outputs)Esta señal está activa cuando el procesador necesita datos de la ROM
12VDDAlimentación del microprocesador. La tensión debe ser de -15V +/- 5%
13CM-RAM3Éstas son las señales de selección de banco para indicar a cuál RAM 4002 desea acceder el microprocesador
14CM-RAM2
15CM-RAM1
16CM-RAM0

Instrucciones del 4004

Hay instrucciones de uno o dos bytes. Los primeros tardan 8 períodos de reloj (un ciclo de instrucción). Los segundos tardan 16 períodos de reloj (dos ciclos de instrucción).

MnemónicoDescripciónOPROPA
D3D2D1D0 D3D2D1D0
NOPNo hace nada 00000000
JCNSalta a la dirección especificada por A2 A2 A2 A2 A1 A1 A1 A1 dentro de la misma ROM que contiene esta instrucción JCN, si se cumple la condición C1 C2 C3 C4, en caso contrario continúa ejecutando la próxima instrucción.
C1=1: Invertir la condición de salto.
C2=1: Saltar si el acumulador es cero.
C3=1: Saltar si el acarreo vale uno.
C4=1: Saltar si la pata TEST está a cero.
0001 C1C2C3C4
A2A2A2A2 A1A1A1A1
FIMCargar el dato D2, D1 (ocho bits) en el par de registros RRR 0010 RRR0
D2D2D2D2 D1D1D1D1
SRCEnviar la dirección (contenido del par de registros RRR) a la ROM y a la RAM en los tiempos X2 y X3 del ciclo de instrucción 0010 RRR1
FINCargar en el par de registros RRR el dato de ROM apuntado por el par de registros cero 0011 RRR0
JINSalto indirecto según el par de registros RRR 0011 RRR1
JUNSalto incondicional a la dirección de ROM A3, A2, A1 0100 A3A3A3A3
A2A2A2A2 A1A1A1A1
JMSSalvar el viejo valor del contador de programa y saltar a la dirección de ROM A3, A2, A1 0101 A3A3A3A3
A2A2A2A2 A1A1A1A1
INCIncrementar el contenido del registro RRRR 0110 RRRR
ISZIncrementar el registro RRRR. Si el resultado no es cero, saltar a la dirección A2 A2 A2 A2 A1 A1 A1 A1 dentro de la misma ROM que contiene esta instrucción ISZ 0111 RRRR
A2A2A2A2 A1A1A1A1
ADDSumar el registro RRRR al acumulador con acarreo 1000 RRRR
SUBRestar el registro RRRR del acumulador con préstamo 1001 RRRR
LDCargar el acumulador con el contenido del registro RRRR 1010 RRRR
XCHIntercambiar los contenidos del acumulador y el registro RRRR 1011 RRRR
BBLRetornar de subrutina y cargar el dato D D D D en el acumulador 1100 DDDD
LDMCargar el dato D D D D en el acumulador 1101 DDDD

Las siguientes instrucciones operan sobre las direcciones de RAM y ROM especificadas en la última instrucción SRC:

Cada chip de RAM tiene cuatro registros, cada uno con veinte caracteres de 4 bits subdivididos en 16 caracteres de memoria principal y 4 de estado. El número de chip, registro de RAM y carácter de memoria principal se selecciona mediante la instrucción SRC, mientras que los caracteres de estado (dentro de un registro) se seleccionan mediante el código de instrucción (OPA)

MnemónicoDescripciónOPROPA
WRMEscribir el acumulador en RAM 11100000
WMPEscribir el acumulador en port de salida de RAM 11100001
WRREscribir el acumulador en port de salida de ROM 11100010
WPMEscribir el acumulador en el medio byte especificado de RAM (se usa en los microprocesadores 4008 y 4009 solamente) 11100011
WR0Escribir el acumulador en el carácter de estado de RAM 0, 1, 2, 3 11100100
WR111100101
WR211100110
WR311100111
SBMRestar el contenido de la posición previamente especificada de RAM del acumulador con préstamo 11101000
RDMCargar en el acumulador el contenido de la posición de RAM 11101001
RDRCargar en el acumulador el contenido del port de entrada de ROM 11101010
ADMSumar el contenido de la posición previamente especificada de RAM al acumulador con acarreo 11101011
RD0Almacenar en el acumulador el carácter de estado de RAM 0, 1, 2, 3 11101100
RD111101101
RD211101110
RD311101111

La siguiente tabla muestra el grupo de instrucciones del acumulador.

MnemónicoDescripciónOPROPA
CLBLimpiar el acumulador y el acarreo 11110000
CLCLimpiar el indicador de acarreo 11110001
IACIncrementar el acumulador 11110010
CLCComplementar el acarreo 11110011
CMAComplementar el acumulador 11110100
RALRotar acumulador y acarreo hacia la izquierda 11110101
RARRotar acumulador y acarreo hacia la derecha 11110110
TCCSumar acarreo al acumulador y limpiar el acarreo 11110111
DACDecrementar el acumulador 11111000
TCSRestar acarreo del acumulador y limpiar el acarreo 11111001
STCPoner el acarreo a uno 11111010
DAAAjuste decimal del acumulador 11111011
KBPConvierte un código 1 de 4 a binario en el acumulador 11111100
DCLDesignar línea de comando 11111101

Nedstat Counter