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.
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:
Pata | Nombre | Descripción |
---|---|---|
1 | D0 | Todas las direcciones y datos de RAM y ROM pasan por estas líneas |
2 | D1 | |
3 | D2 | |
4 | D3 | |
5 | VSS | Referencia de tierra. Es la tensión más positiva. |
6 | Clock phase 1 | Son las dos fases de entrada de reloj (clock) |
7 | Clock phase 2 | |
8 | Sync output | Señal de sincronismo generada por el procesador. Indica el comienzo de un ciclo de instrucción. |
9 | Reset | Un "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). |
10 | Test | La instrucción JCN verifica el estado de esta línea. |
11 | CM-ROM (Control Memory Outputs) | Esta señal está activa cuando el procesador necesita datos de la ROM |
12 | VDD | Alimentación del microprocesador. La tensión debe ser de -15V +/- 5% |
13 | CM-RAM3 | Éstas son las señales de selección de banco para indicar a cuál RAM 4002 desea acceder el microprocesador |
14 | CM-RAM2 | |
15 | CM-RAM1 | |
16 | CM-RAM0 |
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ónico | Descripción | OPR | OPA |
---|---|---|---|
WRM | Escribir el acumulador en RAM | 1110 | 0000 |
WMP | Escribir el acumulador en port de salida de RAM | 1110 | 0001 |
WRR | Escribir el acumulador en port de salida de ROM | 1110 | 0010 |
WPM | Escribir el acumulador en el medio byte especificado de RAM (se usa en los microprocesadores 4008 y 4009 solamente) | 1110 | 0011 |
WR0 | Escribir el acumulador en el carácter de estado de RAM 0, 1, 2, 3 | 1110 | 0100 |
WR1 | 1110 | 0101 | |
WR2 | 1110 | 0110 | |
WR3 | 1110 | 0111 | |
SBM | Restar el contenido de la posición previamente especificada de RAM del acumulador con préstamo | 1110 | 1000 |
RDM | Cargar en el acumulador el contenido de la posición de RAM | 1110 | 1001 |
RDR | Cargar en el acumulador el contenido del port de entrada de ROM | 1110 | 1010 |
ADM | Sumar el contenido de la posición previamente especificada de RAM al acumulador con acarreo | 1110 | 1011 |
RD0 | Almacenar en el acumulador el carácter de estado de RAM 0, 1, 2, 3 | 1110 | 1100 |
RD1 | 1110 | 1101 | |
RD2 | 1110 | 1110 | |
RD3 | 1110 | 1111 |
La siguiente tabla muestra el grupo de instrucciones del acumulador.
Mnemónico | Descripción | OPR | OPA |
---|---|---|---|
CLB | Limpiar el acumulador y el acarreo | 1111 | 0000 |
CLC | Limpiar el indicador de acarreo | 1111 | 0001 |
IAC | Incrementar el acumulador | 1111 | 0010 |
CLC | Complementar el acarreo | 1111 | 0011 |
CMA | Complementar el acumulador | 1111 | 0100 |
RAL | Rotar acumulador y acarreo hacia la izquierda | 1111 | 0101 |
RAR | Rotar acumulador y acarreo hacia la derecha | 1111 | 0110 |
TCC | Sumar acarreo al acumulador y limpiar el acarreo | 1111 | 0111 |
DAC | Decrementar el acumulador | 1111 | 1000 |
TCS | Restar acarreo del acumulador y limpiar el acarreo | 1111 | 1001 |
STC | Poner el acarreo a uno | 1111 | 1010 |
DAA | Ajuste decimal del acumulador | 1111 | 1011 |
KBP | Convierte un código 1 de 4 a binario en el acumulador | 1111 | 1100 |
DCL | Designar línea de comando | 1111 | 1101 |