Articulo de referencia

BELLMAC-8

El MAC-8 , más conocido hoy como BELLMAC-8 , es un microprocesador de 8 bits diseñado por Bell Labs . Su producción en formato CMOS comenzó en Western Electric en 1977 bajo el n...

El MAC-8 , más conocido hoy como BELLMAC-8 , es un microprocesador de 8 bits diseñado por Bell Labs . Su producción en formato CMOS comenzó en Western Electric en 1977 bajo el nombre de WE212 . El MAC-8 se utilizó exclusivamente en productos de AT&T, como el 4ESS . No se publicaron hojas de especificaciones comerciales , por lo que es poco conocido. Su uso más conocido, para el público general, es el programa de entrenamiento informático MAC-TUTOR , lanzado en 1979.

El MAC-8 fue diseñado para ejecutar lenguajes de programación de alto nivel , en particular, el lenguaje C de Bell . Una característica singular del sistema es que su lenguaje ensamblador fue escrito deliberadamente para asemejarse al código C, incluyendo soporte para variables y estructuras de alto nivel como los bucles for . En contraste, la mayoría de los ensambladores de la época se correspondían mucho más directamente con los códigos de operación de bajo nivel del procesador y carecían de características de alto nivel.

Al MAC-8 le siguió el BELLMAC-80 , un sistema de 32 bits muy diferente internamente al MAC-8, pero que mantuvo el concepto de haber sido diseñado para ejecutar C. A este le siguió el diseño experimental CRISP, y finalmente el AT&T Hobbit de 1992 , que tuvo un uso comercial limitado.

Descripción

Conceptos de diseño

El MAC-8 es el primer diseño producido por el proyecto C Machine de AT&T, que comenzó en 1975. Este proyecto tenía como objetivo producir diseños de procesadores que pudieran ejecutar directamente lenguajes de alto nivel , específicamente el lenguaje de programación C propio de Bell . [ 1 ] [ 2 ]

Una forma común de mejorar el rendimiento de los procesadores es mediante el uso de registros de procesador . Estos son pequeñas cantidades de memoria de alta velocidad incorporadas directamente en el chip para permitir un acceso muy rápido a un número reducido de valores. Eran comunes en los microprocesadores, ya que estos dispositivos normalmente estaban conectados a la memoria principal , que funcionaba más lentamente que el procesador; por lo tanto, al usar valores en los registros, se podía mejorar el rendimiento general. Sin embargo, los registros son muy costosos en términos de la cantidad de transistores que necesitan y sus conexiones con el resto del chip. Por esta razón, normalmente solo se dispone de unos pocos registros; en ese momento, estos solían ser de uno a ocho. Esto era demasiado poco para ser utilizado fácilmente con un lenguaje como C, donde las llamadas a funciones pasan múltiples valores de un lado a otro. Dados los objetivos de Bell y la tecnología de proceso disponible , la cantidad de registros que colocarían en el chip sería demasiado pequeña para sus necesidades. [ 3 ] [ 2 ]

En cambio, el concepto de máquina C coloca sus registros en la memoria principal. [ 2 ] Esto no era infrecuente en el campo de las minicomputadoras a finales de la década de 1960, donde la memoria del núcleo era relativamente rápida en comparación con la unidad central de procesamiento (CPU), lo que significaba que solo había un retraso de un ciclo al acceder a los datos. El valor de tener muchos registros compensaba cualquier desventaja en comparación con el acceso más lento. Aquellos microprocesadores que fueron diseñados para funcionar como las minicomputadoras antiguas, como el Texas Instruments TMS9900 , a menudo usaban este concepto. El MAC-8 también siguió este patrón, usando bloques de dieciséis ubicaciones de memoria para representar los registros y seleccionando el inicio del bloque en la memoria con el puntero de registro, o RP. Esto significaba que un compilador podía pasar datos a una función escribiendo los valores en la memoria, moviendo RP para que apuntara a ellos y luego saltando a la función. Cuando la función salía, el compilador cambiaba RP a su valor anterior para devolver la máquina a su estado anterior. [ 4 ] Este concepto se conoce como ventana de registro . En aquellos diseños con un número fijo de registros de hardware, como el MOS 6502 , este tipo de llamadas a funciones normalmente requerirían que los datos en los registros se escribieran en la memoria principal o en una pila de llamadas , ambas requieren múltiples ciclos de acceso a la memoria. [ 5 ]

El sistema también incluía cuatro registros de hardware públicos. Estos eran el contador de programa (PC) de 16 bits , el puntero de pila (SP), el puntero de registro (RP) y el registro de condición (CR), este último más conocido como registro de estado en otras plataformas. También incluía dos registros internos de 8 bits utilizados únicamente durante el procesamiento de la instrucción actual: el registro de instrucción (IR), que almacenaba el código de operación de la última instrucción leída , y el registro D/S, que almacenaba los números de registro de destino y origen, del 0 al 15 en dos nibbles . Adicionalmente, un valor de dirección de 16 bits y sus datos de 8 bits se almacenaban durante el procesamiento. [ 4 ]

El sistema incluía una unidad matemática separada y simplificada dedicada a las traducciones de direcciones, la unidad aritmética de direcciones (AAU). Esta podía leer o escribir la dirección en el bus hacia o desde los registros internos, o realizar desplazamientos e indexación, independientemente de la unidad aritmético-lógica (ALU) principal. Una de las razones para descargar los registros a la memoria era liberar espacio para la AAU. Esto le permitía ofrecer una amplia variedad de modos de direccionamiento sin tener que usar la ALU y, por lo tanto, sin sufrir retrasos de ciclo para los modos más complejos. [ 6 ] Debido a que las direcciones eran de 16 bits y a menudo usaban registros para el almacenamiento, las instrucciones de direccionamiento siempre leían y escribían los registros en pares. Cuando se usaban de esta manera, se las denominaba registro "base" o "registros b", y las instrucciones que usaban solo un único valor de 8 bits se conocían como "registros a". Como los registros siempre eran de 16 bits en la memoria, los registros a solo usaban el byte bajo del par. [ 7 ] Resulta algo confuso que, al referirse a ellos en la documentación, los registros a se denotaran como R, mientras que los registros b se denotaran como B. [ 8 ]

Conjunto de instrucciones

La arquitectura del conjunto de instrucciones (ISA) MAC-8 se dividió en tres grandes grupos: aritméticas y lógicas, de transferencia de control (ramificación) y especiales. [ 6 ]

Las instrucciones aritméticas y lógicas tomaban uno o dos operandos , cada uno de los cuales apuntaba a un registro, una ubicación de memoria o contenía un valor inmediato (constante). La instrucción se almacenaba en un solo byte, con los cinco bits superiores conteniendo el código de operación y los tres inferiores el modo de direccionamiento, indicando dónde se almacenaban los operandos (si los había). Por ejemplo, la instrucción de suma podía indicar que quería sumar los valores en Rs (origen) a Rd (destino), estableciendo el modo en 0 (de registro a registro). Si los valores estaban en R1 y R2, entonces el byte D/S se establecería en 00010010. [ 9 ] Alternativamente, la misma suma podía usar el modo 6, que sumaría el valor en un registro b de origen al valor en una ubicación de memoria desplazada por el valor en otro registro (direccionamiento indirecto). En este caso, el registro D/S contiene el registro de origen de 16 bits, Bs, y el destino contiene el registro a de destino, Rd. [ 6 ] [ 8 ]

El conjunto principal de ocho modos incluía registro/registro, registro a o desde la dirección base en memoria (indirecto), registro a o desde la dirección base más un desplazamiento (indexado) y autoincremento, que sumaba uno al valor del registro B seleccionado y luego accedía a los datos en esa ubicación. Este último modo era útil para implementar bucles sobre memoria, colocando la dirección base en memoria y luego llamando repetidamente al código de operación con el mismo número de registro, lo que hacía que se incrementara sin una instrucción explícita. Si alguno de los nibbles se establecía en el valor 15, el significado de los ocho modos cambiaba. En este caso, la fuente ya no era uno de los 16 registros, sino el contador de programa o el contador de pila, según el modo, mientras que el destino generalmente se refería a R15, pero las direcciones se tomaban del SP. Estos últimos modos se usaban principalmente con bifurcaciones condicionales, lo que permitía que la instrucción, por ejemplo, saltara n ubicaciones hacia adelante desde el PC actual según el valor en la fuente. [ 8 ] Las instrucciones separadas PUSH y POP y BUMP y DEBUMP incrementan y decrementan el puntero de pila o el puntero de registro, respectivamente. [ 6 ]

Las funciones de transferencia de control son similares a las instrucciones lógicas, pero carecen de los códigos de operación opcionales y solo necesitan un único valor de registro para realizar operaciones como desplazamientos, ya que la dirección base suele ser el contador de programa. Los saltos incondicionales, las llamadas a subrutinas y los retornos requieren solo un destino o ninguno. En el caso de las bifurcaciones condicionales, solo se necesita un registro, ya que no se escribe nada de vuelta, por lo que se utilizó el nibble inferior del byte D/S para indicar cuál de las 16 condiciones diferentes debía comprobarse, como si el valor en la ubicación indicada es cero. Las condiciones incluían las típicas condiciones negativas, cero, de acarreo y desbordamiento, pero también si el valor era todos unos (255), impar o par, si las interrupciones estaban habilitadas, entre otras. [ 10 ]

Programación

El MAC-8 fue diseñado para ser programado en C, y Bell ofreció soporte para compilación cruzada y el simulador M8SIM que se ejecutaba en Unix en el PDP-11 . [ 11 ] El sistema PLAID, que se ejecutaba en el PDP-11, proporcionaba soporte de depuración para los sistemas MAC-8 mediante una conexión por cable. Para aquellas aplicaciones que sí requerían programación directa en lenguaje ensamblador , el sistema utilizaba un lenguaje muy diferente que fue escrito deliberadamente para parecerse a C. [ 12 ] Un ejemplo de la introducción al sistema:

#define NBYTES 100matriz de caracteres [ NBYTES ];suma () { b0 = & array ; a1 = 0 ;for ( a2 = 0 ; a2 < NBYTES ; ++ a2 ) { a1 =+ b0 ; ++ b0 ; } }

Este código reserva 100 bytes de memoria y le asigna el nombre array. La sumrutina luego encuentra la dirección de arrayen memoria, borra un registro a1 para almacenar la suma resultante y luego itera sobre el array sumando las entradas en a1 mientras incrementa la dirección en b0. Cuando se compila, las "variables" b0, a1 y a2 se colocarán en registros y las diversas operaciones se traducirán a los códigos de operación ISA; por ejemplo, la asignación de a1 = 0;se convertirá en una MOVEinstrucción con el direccionamiento configurado de modo que el destino sea un registro R y la fuente sea el valor constante cero. forse implementará como una macro usando otros registros como fuente para la variable de índice a2. [ 12 ] El lenguaje incluye estructuras, definiciones de variables, funciones y la mayoría de las demás características de C. [ 13 ] [ 11 ]

Como el sistema era nuevo, y el concepto de microprocesadores era completamente nuevo para AT&T, la compañía también presentó el entrenador informático MAC-TUTOR , que podía utilizarse para pruebas y desarrollo. Las herramientas de Unix podían utilizarse para crear un programa, descargarlo al MAC-TUTOR, ejecutarlo y depurarlo, y enviar el estado de vuelta al lado de Unix. [ 14 ] El MAC-TUTOR básico incluía 2  kB de RAM , 2  kB de ROM con funciones básicas de control de hardware, tres zócalos para chips PROM  de 1 kB , un teclado tipo calculadora de 28 botones (4 x 7) y una pantalla compuesta por ocho LED de 7 segmentos . Las interfaces integradas incluían una unidad de casete , dos puertos RS-232 para terminales de computadora y un expansor de bus de 32 pines que podía utilizarse para añadir más memoria o dispositivos mapeados en memoria. [ 15 ]

Implementación

Fotografía del chip MAC-8.

El WE212 utilizaba más de 7000 transistores y se implementó en un proceso CMOS de 5 micras , lo que dio como resultado un chip que medía 220x230 mils. [ 16 ] Normalmente funcionaba a 12  V y 2  MHz, lo que resultaba en un  consumo de 200 milivatios, [ 16 ] significativamente menor que el de procesadores contemporáneos como el 6502 o el Zilog Z80  . También se necesitaba una segunda fuente de alimentación de 5 V para alimentar las partes de lógica transistor-transistor (TTL) que se conectaban con el resto del hardware de la computadora. [ 16 ]

Se eligió CMOS tanto por su menor consumo de energía en comparación con los diseños lógicos NMOS existentes , como por la posibilidad de integrar transistores NMOS y PMOS en el mismo chip, lo que, según los diseñadores, ofrecía mayor flexibilidad. [ 9 ] La ALU era demasiado compleja para implementarse en CMOS, ya que habría requerido el doble de área que la implementación NMOS utilizada. Dado que esto conllevaba una mayor disipación de potencia, el sistema desconectaba la alimentación de la ALU durante los periodos en que no se utilizaba, por ejemplo, durante el acceso a la memoria. Como la ALU solo estaba activa aproximadamente el 20 % del tiempo, esto representaba un ahorro de energía significativo. [ 16 ]

Se encapsulaba en un DIP de 40 pines con un bus de direcciones de 16 pines y un bus de datos de 8 pines, lo que significaba que ninguno de los pines principales estaba multiplexado y los datos podían leerse en un solo ciclo. La entrada/salida se mapeaba en memoria y no utilizaba pines separados, como en el Intel 8080. Dos pines proporcionaban acceso directo a memoria (DMA); un dispositivo que deseara DMA pondría DMAREQ en bajo, y cuando el procesador estuviera listo para liberar el bus, lo indicaría poniendo DMAACK en bajo. El dispositivo podía entonces acceder a la memoria durante el tiempo que necesitara e indicaba que había terminado liberando DMA REQ. Otros tres pines, S1 a S3, indicaban el estado interno de la CPU y cualquier condición de error. El resto de los pines eran una combinación típica de pines de alimentación, control de interrupciones y reloj. [ 17 ]

Se sabe que existen al menos tres versiones del WE212, de la A a la C. Las diferencias entre ellas, aparte del embalaje, no se describen en ninguna de las referencias disponibles.

Usos e influencia

Además del sistema MAC-TUTOR, el WE212 se menciona de pasada en varios productos de AT&T, incluidos, entre otros, el conmutador 4ESS [ 18 ] y el portador de bucle de abonado SLC-96 . [ 19 ]

Aunque el BELLMAC-8 tuvo una utilidad relativamente limitada, Bell exploró continuamente durante la década siguiente el concepto básico de diseñar un procesador específicamente para ejecutar C y lenguajes similares. El posterior BELLMAC-80 fue esencialmente una implementación de 32 bits de la máquina C. Se abandonó un intento de diseño de alto rendimiento en ECL y se produjo una implementación más sencilla, denominada CRISP, en 1986, que alcanzó aproximadamente 7,7 VAX MIPS . [ 20 ]

AT&T decidió cambiar el objetivo de sus esfuerzos en C Machine, reorientándolos hacia aplicaciones de bajo consumo para la informática móvil. Esto dio lugar al diseño del AT&T Hobbit , cuya primera versión, el AT&T 92010, se lanzó en 1992. [ 21 ] La falta de éxito en el mercado llevó a AT&T a retirar el Hobbit del mercado en 1993, [ 22 ] y con ello finalizaron los desarrollos de C Machine.

Referencias

Citas

  1. Winfield 1978 , pág. 494.
  2. ^ Ditzel y McLellan 1982 , pág .48. 
  3. Winfield 1978 , pág. 495.
  4. 1 2 Winfield 1978 , pág. 496.
  5. Osborne y Kane 1981 , pág. 10.1, 10.21.
  6. 1 2 3 4 Winfield 1978 , pág. 499.
  7. TUTOR 1979 , pág. 3.1.
  8. 1 2 3 TUTOR 1979 , pág. 3.3.
  9. 1 2 Winfield 1978 , pág. 500.
  10. TUTOR 1979 , pág. 3.4.
  11. 1 2 Winfield 1978 , pág. 502.
  12. 1 2 Rovegno 1978 , pág. 2255.
  13. Rovegno 1978 , pág. 2256.
  14. Winfield 1978 , pág. 503.
  15. TUTOR 1979 , pág. 1.1.
  16. 1 2 3 4 Winfield 1978 , pág. 501.
  17. Winfield 1978 , pág. 498.
  18. ^ Hoppner y col. 1981 , pág. 1134.
  19. Canniff 1981 , pág. 124.
  20. ^ Ditzel y col. 1987 , pág. 309.
  21. Ryan, Bob (febrero de 1993). "La comunicación se vuelve personal" . Byte . págs. 169–170 , 172, 174, 176. Recuperado el 27 de marzo de 2023 . 
  22. Gassée, Jean-Louis (31 de enero de 2019). "50 años en tecnología, parte 15. Ser: del concepto a la casi muerte" . Medium . Consultado el 31 de agosto de 2020 .

Bibliografía

  • Winfield, Herbert (julio de 1978). "MAC-8: Un microprocesador para aplicaciones de telecomunicaciones" . The Western Electric Engineer . 21 .
  • Ditzel, David; McLellan, Hubert (abril de 1982). "Asignación de registros gratuita: la caché de pila de la máquina C" . ACM SIGPLAN Notices . 17 (4): 48– 56. doi : 10.1145/960120.801825 .
  • Ditzel, David; McLellan, Hubert; Berenbaum, Alan D. (1987). «La arquitectura de hardware del microprocesador CRISP» . Actas del 14.º simposio internacional anual sobre arquitectura de computadoras - ISCA '87 . pp. 309–319 . doi : 10.1145/30350.30385 . ISBN  0818607769. S2CID 14954824 . Consultado el 28 de marzo de 2023 . 
  • Rovegno, HD (julio-agosto de 1978). "Sistema de tiempo compartido Unix: un entorno de soporte para sistemas MAC-8" . Bell System Technical Journal . 57 (6): 2251–2263 . doi : 10.1002/j.1538-7305.1978.tb02152.x . S2CID 33739380 . 
  • Hoppner, KM; Mann, H.; Panyko, SF; Van Zweden, J. (julio-agosto de 1981). "4ESS: Interfaz digital" (PDF) . Bell System Technical Journal . 60 (6): 1131– 1166. doi : 10.1002/j.1538-7305.1981.tb03401.x . S2CID 34441812 . 
  • Canniff, RJ (febrero de 1981). "Un concentrador digital para el sistema SCL-96" . Bell System Technical Journal . 60 (2): 123– 158. doi : 10.1002/j.1538-7305.1981.tb00235.x .
  • Manual de referencia de MAC-TUTOR (PDF) . AT&T. Julio de 1979.
  • Osborne, Adam; Kane, Gerry (1981). Manual de microprocesadores de 4 y 8 bits de Osborne . Osborne/McGraw-Hill. ISBN 0-931988-42-X.