El rendimiento general, el diseño del bus y la unidad lógica aritmética (ALU) eran idénticos a los del 4004. La mejora principal fue utilizar un encapsulado dual inline más grande de 24 pines , lo que le dio 8 pines más que el 4004 de 16 pines. Dos de estos se usaron para implementar interrupciones , que faltaban en el 4004 y se consideraban un descuido importante. Dos más implementaron un sistema de detención/parada, que ponía al procesador en un modo de bajo consumo y también permitía la operación de un solo paso que hacía que la depuración fuera mucho más fácil. Otro pin se usó para seleccionar un segundo banco de memoria de solo lectura (ROM), duplicando la cantidad de ROM que el procesador podía direccionar en comparación con el 4004.
El 4004 fue diseñado para ser utilizado en una calculadora electrónica y muchas de sus notas de diseño están relacionadas con esta función. Por ejemplo, el código del programa solo se puede leer desde un área dedicada a la memoria de solo lectura , no RAM. Aunque se podía implementar el "espacio ROM" utilizando chips RAM, no había instrucciones capaces de escribir en esa área de memoria, ni instrucciones capaces de leer código de programa desde el espacio RAM. La idea era que los sistemas suministraran el programa del sistema en ROM, y pequeñas cantidades de RAM se utilizarían solo para datos, si es que se utilizaban. En el uso típico, los "registros de índice" internos se utilizarían para el almacenamiento durante los cálculos, con los 16 registros de 4 bits capaces de almacenar un único valor decimal codificado en binario de 8 dígitos , el formato de datos utilizado por las calculadoras. También tenía cuatro registros de 12 bits para almacenar direcciones, el superior era el contador de programa y los siguientes tres funcionaban como una pila de empuje hacia abajo para llamadas a subrutinas .
Para reducir el número de pines a solo 16, el 4004 original tenía solo cuatro pines de datos, multiplexados tanto para datos como para direcciones. Los pines adicionales indicaban si la dirección estaba en la ROM o en uno de los varios "bancos" de RAM. Como las direcciones tenían una longitud de 12 bits, expresar una dirección requería tres ciclos junto con la lectura o escritura posterior, y los circuitos externos tenían que bloquear cada parte de 4 bits de la dirección entre ciclos. Las instrucciones eran de 8 bits, por lo que cargar la siguiente instrucción requería muchos ciclos, lo que conducía a un rendimiento lento a pesar de lo que era un tiempo de ciclo relativamente rápido para la época.
4040
El 4040 fue esencialmente una expansión del 4004, con pines adicionales, más registros y nuevas instrucciones para aprovechar ambos.
El 4004 tenía un solo pin de ROM, mientras que el 4040 agregó otro pin de ROM para permitir dos bancos de ROM. Esto aumentó efectivamente la dirección de ROM de 12 a 13 bits, u 8 kB. A diferencia de los diseños posteriores en los que las dos líneas podían codificarse en binario y, por lo tanto, admitir cuatro bancos, los chips de ROM utilizados con el 4004 y el 4040 usaban estas líneas como pines de selección de chip y, por lo tanto, las dos líneas solo podían admitir dos bancos.
El 4004 carecía de interrupciones , una limitación grave. El 4040 agregó un nuevo pin de entrada para llamar una interrupción, así como un pin de salida para indicar que se había detectado la señal de interrupción y se estaba actuando en consecuencia. Como las interrupciones también necesitan guardar una dirección de retorno, el archivo de registro de pila se amplió a siete entradas, en lugar de tres. [Nota 1]
El código del controlador de interrupciones normalmente comienza guardando valores en los registros para permitir que el código de interrupción los use y luego, al final, copia los valores de la memoria para que el procesador vuelva a su estado original previo a la interrupción. Con el acceso a la memoria de múltiples ciclos del diseño, esto habría sido extremadamente lento. Para solucionar esto, se agregaron ocho registros adicionales en un nuevo "banco 1", y los dieciséis registros originales se convirtieron retroactivamente en el "banco 0". La idea era que los programadores intentaran colocar sus datos críticos en los primeros ocho registros del banco 0. Cuando se recibía una interrupción, el código del controlador invocaba una instrucción para intercambiar bancos, lo que hacía que los registros del banco 1 anularan los registros 0 a 7 del banco 0. El código del controlador luego usaba estos ocho registros para cualquier dato local, dejando intactos los valores originales. Cuando el controlador terminaba, simplemente intercambiaba el banco 0 nuevamente. Esto reducía el tiempo de conmutación a una sola instrucción, lo que mejoraba enormemente los tiempos de respuesta a las interrupciones.
Otra adición fue el pin de parada de entrada y el reconocimiento de parada de salida asociado. Estos podían usarse para detener el procesador mientras el sistema realizaba tareas de entrada/salida u otras tareas no relacionadas con la CPU, pero se usaban más ampliamente para depuración al permitir que el procesador funcionara en un solo paso. Cuando el procesador estaba en modo detenido, la mayor parte del hardware del chip se ponía en una condición de bajo consumo y alta impedancia, lo que reducía el uso de energía. Los relojes de ciclo de la máquina se mantenían en funcionamiento para el beneficio de los dispositivos externos, incluidos los controladores de interrupción necesarios para reactivar el chip, que dependían de que estos controladores se mantuvieran sincronizados.
Para aprovechar estas nuevas características, el conjunto de instrucciones agregó 14 nuevas instrucciones, lo que eleva el total a 60.
Bus de direcciones: 12 bits para ROM (multiplexado en bus de datos; las direcciones tomaban tres ciclos de bus para transmitirse, igual que en el 4004), efectivamente 13 bits con uso de comandos de cambio de banco; efectivamente 10 bits u 8 bits para RAM (dirección directa de 8 bits más una de cuatro, es decir, equivalente a 2 bits, selección de banco; las 256 ubicaciones de memoria de "estado" adicionales requerían el uso de comandos de E/S para leer o escribir, desde un espacio de direcciones general de 8 bits)
Voltaje: −15 V CC
Frecuencia de funcionamiento: reloj principal de 500 a 740 kHz (2 fases, superpuestas); 62500 a 92500 ciclos de máquina de 8 relojes por segundo, cada instrucción requiere uno o dos ciclos de máquina para leerse y ejecutarse, lo que significa un promedio aproximado de 62 kIPS a 740 kHz con una mezcla igual. [Nota 2]
Rendimiento: Se afirma que el tiempo de ejecución es de aproximadamente 850 μs para sumar dos números de 32 bits (BCD de 8 dígitos), o alrededor de 1175 operaciones de este tipo por segundo y aproximadamente 10 ciclos de máquina por par de dígitos. [Nota 3]
Diseñadores
Federico Faggin propuso el proyecto, formuló la arquitectura y dirigió el diseño. El diseño detallado estuvo a cargo de Tom Innes .
Nuevos chips de soporte
Controladores de bus paralelo de 4 bits 3216 y 3226 [Nota 4]
4201 – Generador de reloj, de 500 a 740 kHz, que utiliza cristales de 4.000 a 5.185 MHz
4207 – Puerto de salida de 8 bits de propósito general
4209 – Puerto de entrada de 8 bits de propósito general
4211 – Puerto de E/S de 8 bits de propósito general
4265 - Entrada/Salida programable de propósito general. Contiene cuatro puertos de entrada/salida de 4 bits. Tiene 14 modos seleccionables por software que se pueden programar para interactuar con estos puertos. No solo puede interactuar con este procesador y también con el procesador 8080A. Estaba disponible en cantidades de muestra en stock en marzo (1976). [3] [4]
4269 - Teclado/pantalla programable. Tiene configuración de software de sistema en este chipset a través de instrucciones que controlan cómo se pueden manejar estos puertos. Estuvo disponible en cantidades de muestra en marzo (1976). [3] [5]
Características del teclado: genera una interrupción cuando se presiona la tecla. Almacena hasta 8 caracteres en el búfer FIFO antes de dar servicio a la CPU. Se puede interconectar con sensores, interruptores de panel y teclados que admitan el tamaño completo de un teletipo. Esto puede incluir codificación de entrada de teclas, sondeo, almacenamiento en el búfer de entrada de caracteres y recuperación de entrada de teclado.
Características de la pantalla: opera y actualiza pantallas o conjuntos de indicadores de hasta 128 elementos o luces. También admite pantallas de descarga de gas, como la pantalla Burroughs Self-Scan, que puede manejar hasta 20 caracteres.
4289 – Interfaz de memoria estándar (reemplaza 4008/4009) [Nota 6]
4308 – 1K x 8 bits ROM más 4 puertos IO de 4 bits [Nota 7]
4316 – ROM de 2K x 8 bits [Nota 8]
4702 – 256 x EPROM de 8 bits [Nota 9]
Uso en ordenadores
El 4040 se utilizó por primera vez en una microcomputadora en el sistema de desarrollo Intellec 4 Mod 40 de Intel , lanzado a principios de 1975. [6] Según la revista Byte , la primera microcomputadora de terceros diseñada en torno al Intel 4040 fue la Micro 440 , lanzada por Comp-Sultants de Huntsville, Alabama, a fines de 1975. [7]
^ de manera predeterminada, solo se admitía un nivel de interrupción, ya que el servicio posterior se deshabilitaba una vez que se reconocía una interrupción inicial y solo se podía volver a habilitar en RTI, lo que esencialmente permitía tres niveles de apilamiento de subrutinas dentro de una interrupción que a su vez ocurría dentro de una subrutina de tres niveles, pero la detección se podía volver a activar con un comando específico.
^ Esto puede no ser completamente exacto y se basa en las características 4004; algunas de las instrucciones agregadas pueden requerir ciclos adicionales para ejecutarse, especialmente cualquier apilamiento de registros externos requerido para el manejo de interrupciones, pero no está claro en la documentación si este es el caso; halt/step son casos especiales que naturalmente toman potencialmente muchos millones de ciclos para "ejecutarse", pero como estos ocurren esencialmente "fuera" del flujo habitual del programa, no cuentan para el cálculo de velocidad.
^ Asimismo, en base al rendimiento declarado del 4004, "850 μs" es una cifra algo redondeada que se afirma en un folleto temprano de Intel y puede no ser particularmente precisa, pero el tiempo total de ejecución resulta ser de aproximadamente 79 u 80 ciclos de máquina, lo que encaja perfectamente con 10 ciclos por par de dígitos, 9 ciclos por par más 7 para configuración y cualquier posprocesamiento necesario, u 8 por par más 15 adicionales (...etc.). La combinación real de instrucciones no se especificó, por lo que sin el código fuente y una lista de tiempos de ejecución de instrucciones es imposible estar seguro. Una rutina de adición más eficiente podría haber sido posible en el 4040 en comparación con el 4004, pero las instrucciones adicionales no sugieren ningún método obvio para lograrlo y parecen estar enfocadas en abordar las deficiencias más obvias del chip anterior, por ejemplo, la falta de interrupciones y capacidad de detención.
^ Proporciona capacidad de manejo de corriente "alta" (~25 mA) para dispositivos de E/S externos. Supuestamente está destinado únicamente para usarse con el 4289, pero el diseño parece bastante genérico y puede adaptarse a un 4004/4040 simple.
^ Es decir, combina el almacenamiento principal de cuatro 4002 en un único chip seleccionable individualmente, pero sin el puerto de E/S de 4 bits ni 64 palabras adicionales de memoria de "estado" a la que se accede mediante comandos de E/S. Como tiene un bus de direcciones dedicado de 8 bits y dos buses de entrada y salida de datos de 4 bits independientes, el 4101 está pensado únicamente para usarse como periférico secundario del 4289. Esto se enfatiza aún más con la afirmación de la SRAM de que se "utilizará para la memoria de programa escribible", algo que no se puede lograr con un 4004 o un 4040 simples.
^ Permite la conexión de memoria "estándar" (datos paralelos de 8 bits y/o direccionamiento paralelo de hasta 12 bits, este último en forma de dirección de 8 bits más selección de chip binario de 4 bits) y dispositivos al 4004 o 4040, así como el uso de RAM como memoria de programa (el 4289 se puede instalar de manera que parezca una ROM 4001 normal para el procesador independientemente de lo que esté conectado en el otro lado; fomentando la ilusión, también proporciona las mismas cuatro líneas de E/S que ofrecería un 4001). Un 4040 que haga uso de dos 4289 podría ofrecer varias combinaciones de ROM y RAM en segmentos de 2 KB hasta un total de 8 KB con un esquema de direccionamiento segregado relativamente simplista y una pequeña cantidad de 4101 y 4308, por ejemplo, 3x 4308 y 8x 4101 para 6 KB de ROM y 1 KB de RAM.
^ Reemplaza directamente cuatro 4001 separados con un solo chip, y está disponible en cuatro variantes "metálicas" que responden a las direcciones de chip lógicas 0-3, 4-7, 8-11 y 12-15, simulando las dieciséis versiones originales del 4001
^ Diseñado para usarse después de un 4289, ya que presenta un bus de entrada de dirección paralela de 11 bits y un bus de salida de datos paralelo de 8 bits separado, así como tres líneas de selección de chip codificadas en binario (lo que permite la provisión de hasta 16 KB de ROM con un esquema de direccionamiento incompatible con el 4004/4040 en varios niveles diferentes, aunque solo dos 4316, es decir, 4 KB de ROM, o un 4316 más RAM, pueden ser direccionados directamente por un 4289 sin hardware adicional y/o técnicas de programación especiales)
^ es decir, se borra mediante rayos UV en lugar de hacerlo electrónicamente, y nuevamente está pensado para usarse con el 4289, ya que tiene buses de entrada de dirección y salida de datos paralelos de 8 bits separados.
Referencias
^ "El ciclo de vida de una CPU". The CPUShack . 2005.
^ desde "cpu-collection.de >> Intel >> 4040". www.cpu-collection.de .
^ ab Intel Corporation, "Componentes de E/S programables 4269 y 4265 presentados para sistemas Intel MCS-40 de 4 bits", Intel Microcomputer News, volumen 3, n.º 1, enero de 1976, página 3
^ Intel Corporation, "Dispositivo de E/S de propósito general programable 4265", Catálogo de datos Intel 1976, febrero de 1976, página 7-22
^ Intel Corporation, "Dispositivo de pantalla de teclado programable 4269", Catálogo de datos Intel 1976, febrero de 1976, página 7-39
^ Redactor (marzo de 1975). "Intel presenta el 4/Mod 40". Microcomputer Digest . 1 (9). Microcomputer Associates: 1, 3–4 – vía Internet Archive.
^ Helmers, Carl T. Jr., ed. (diciembre de 1975). "Micro-440". Byte (4). Byte Publications: 89 – vía Internet Archive.
Lectura adicional
Fichas técnicas de ChipDB: i4040 (PDF)
Bitsavers: Manual de usuario del MCS-40, noviembre de 1974 (PDF)