stringtranslate.com

Motorola 68000

El Motorola 68000 (a veces abreviado como Motorola 68k o m68k y generalmente pronunciado "sesenta y ocho mil") [2] [3] es un microprocesador de computadora de conjunto de instrucciones complejas (CISC) de 16/32 bits , introducido en 1979 por Motorola Semiconductor Products Sector.

El diseño implementa un conjunto de instrucciones de 32 bits , con registros de 32 bits y un bus de datos interno de 16 bits . [4] El bus de direcciones es de 24 bits y no utiliza segmentación de memoria , lo que facilitó su programación. Internamente, utiliza una unidad lógica aritmética (ALU) de datos de 16 bits y dos ALU más de 16 bits utilizadas principalmente para direcciones, [4] y tiene un bus de datos externo de 16 bits . [5] Por esta razón, Motorola lo denominó procesador de 16/32 bits.

Como uno de los primeros procesadores ampliamente disponibles con un conjunto de instrucciones de 32 bits, un gran espacio de direcciones no segmentado y una velocidad relativamente alta para la época, el 68k fue un diseño popular durante la década de 1980. Se usó ampliamente en una nueva generación de computadoras personales con interfaces gráficas de usuario , incluidas Macintosh 128K , Amiga , Atari ST y X68000 . La consola Genesis/Mega Drive de 1988 funciona con un 68000.

Los procesadores posteriores de la serie Motorola 68000 , comenzando con el Motorola 68020 , utilizan ALU de 32 bits completos y tienen buses de datos y direcciones de 32 bits completos, acelerando las operaciones de 32 bits y permitiendo el direccionamiento de 32 bits, en lugar del direccionamiento de 24 bits del 68000 y 68010 o el direccionamiento de 31 bits del Motorola 68012. El 68k original es generalmente compatible con el software del resto de la línea a pesar de estar limitado a un bus externo de 16 bits de ancho. [4]

Chip XC68000 de prelanzamiento fabricado en 1979
Matriz de Motorola 68000

Después de 45 años de producción , la arquitectura 68000 todavía está en uso. [6] [7]

Desarrollo

Motorola MC68000 ( paquete de portador de chip sin cables (CLCC))
Motorola MC68000 ( paquete de portador de chip con conductores de plástico (PLCC))

6800

El primer microprocesador de Motorola producido ampliamente fue el 6800 , presentado a principios de 1974 y disponible en grandes cantidades a finales de ese año. [8] La empresa se fijó el objetivo de vender 25.000 unidades para septiembre de 1976, objetivo que cumplió. Aunque era un diseño capaz, fue eclipsado por diseños más potentes, como el Zilog Z80 , y diseños menos costosos, como el MOS Technology 6502. [ 9] A finales de 1976, el libro de ventas estaba estancado y la división solo se salvó gracias a un proyecto para General Motors que se convirtió en una enorme línea de productos para el control de motores y otras tareas. [10]

Pasando a 16 bits

Cuando se introdujo el 6800, ya había salido al mercado una pequeña cantidad de diseños de 16 bits. Por lo general, se basaban en plataformas de minicomputadoras como Data General Nova o PDP-8 . Basadas en los procesos de fabricación de semiconductores de la época, a menudo se trataba de soluciones de varios chips, como National Semiconductor IMP-16 o PACE , un chip único que tenía problemas de velocidad. [11]

A finales de 1976, con las perspectivas de venta del 6800 disminuyendo, pero aún con liquidez procedente de las ventas de control de motor, Colin Crook, director de operaciones, empezó a pensar en cómo conseguir ventas futuras con éxito. Sabían que Intel estaba trabajando en una extensión de 16 bits de su serie 8080 , que surgiría como el Intel 8086 , y habían oído rumores de un Zilog Z80 de 16 bits , que se convertiría en el Z8000 . Estos utilizarían nuevas técnicas de diseño que eliminarían los problemas observados en los sistemas de 16 bits anteriores. [12]

Motorola sabía que si lanzaba un producto similar al 8086, con un margen de error del 10% de sus capacidades, Intel los superaría en el mercado. Para poder competir, se pusieron como meta ser el doble de potentes al mismo coste, o la mitad del coste con el mismo rendimiento. Crook decidió que atacarían la gama alta del mercado con el procesador más potente del mercado. [12] Otro procesador de 16 bits no serviría, su diseño tendría que ser más grande, y eso significaba tener algunas características de 32 bits. [13] Crook se había decidido por este enfoque a finales de 1976. [12]

MACSS

Crook formó el proyecto Motorola Advanced Computer System on Silicon (MACSS) para desarrollar el diseño y contrató a Tom Gunter como su arquitecto principal. Gunter comenzó a formar su equipo en enero de 1977. [14] El objetivo de rendimiento se fijó en 1 millón de instrucciones por segundo (MIPS). Querían que el diseño no solo recuperara a los vendedores de microcomputadoras como Apple Computer y Tandy , sino también a las compañías de minicomputadoras como NCR y AT&T . [14]

El equipo decidió abandonar un intento de compatibilidad con el 6800, ya que sentían que los diseños de 8 bits eran demasiado limitados para ser la base de nuevos diseños. El nuevo sistema fue influenciado por el PDP-11 , el diseño de minicomputadora más popular de la época. [15] En ese momento, un concepto clave en las minicomputadoras era el concepto de un conjunto de instrucciones ortogonales , en el que se permitía que cada operación funcionara en cualquier tipo de datos. Para introducir los datos correctos en las unidades internas, MACSS hizo un uso extensivo del microcódigo , esencialmente pequeños programas en la memoria de solo lectura que reunían los datos necesarios, realizaban las operaciones y escribían los resultados. MACSS fue uno de los primeros en utilizar esta técnica en un microprocesador. [16] [17]

Había una gran cantidad de hardware de soporte para el 6800 que seguiría siendo útil, como por ejemplo los UART y sistemas de interfaz similares. Por este motivo, el nuevo diseño mantuvo un modo de compatibilidad de protocolo de bus para los dispositivos periféricos 6800 existentes. [18] [17]

Un chip con 32 pines de datos y 32 pines de direccionamiento requeriría 64 pines, además de más para alimentación y otras funciones. En ese momento, los encapsulados en línea duales (DIP) de 64 pines eran sistemas "grandes, costosos" y "simplemente terribles", por lo que ese era el más grande que podían considerar. Para que encajara, Crook seleccionó un diseño híbrido, con una arquitectura de conjunto de instrucciones (ISA) de 32 bits pero componentes de 16 bits que la implementaban, como la unidad lógica aritmética (ALU). [14] La interfaz externa se redujo a 16 pines de datos y 24 para direcciones, lo que permitió que todo encajara en un encapsulado de 64 pines. Esto se conoció como la "cucaracha de Texas". [13] [a]

A mediados de la década de 1970, las técnicas de diseño MOS de Motorola se habían vuelto menos avanzadas que las de su competencia, y sus líneas de fabricación a veces luchaban con bajos rendimientos . A fines de la década de 1970, la empresa había entrado en un programa de intercambio de tecnología con Hitachi , mejorando drásticamente sus capacidades de producción. Como parte de esto, se construyó una nueva fábrica llamada MOS-8 utilizando los últimos tamaños de obleas de 5 pulgadas y el proceso HMOS de Intel con un tamaño de característica de 3,5  μm . [19] Esta fue una inversión destinada a alcanzar a la competencia: incluso las empresas de semiconductores advenedizas como Zilog y MOS Technology habían introducido CPU fabricadas en lógica NMOS de modo de agotamiento antes que Motorola. De hecho, Motorola puede haberse quedado muy por detrás de sus contemporáneos en la eliminación gradual del modo de mejora y la puerta de metal, y Gunter recuerda que el propio 68000 tuvo que tener éxito a pesar de adoptar inicialmente un diseño de puerta de metal. [20] Aunque el punto sobre la necesidad de ponerse al día es claro, este no podría haber sido un resumen completamente preciso porque las hojas de datos de Motorola de 1976, anteriores al inicio del proyecto MACCS, denotan que la mayoría de su familia 6800 está hecha con compuerta de silicio. [21] De hecho, el propio artículo de Gunter de 1979 que presentaba el 68000 lo destacaba como un diseño HMOS de modo de agotamiento de compuerta de silicio. [22] Cualquiera que fuera el grado de déficit de proceso y fabricación de Motorola en los primeros días, el equipo no se dejó intimidar y no haría concesiones en su búsqueda de un microprocesador con un rendimiento líder en la industria. [23]

Muestreo y producción

Introducido formalmente en septiembre de 1979, [24] las muestras iniciales fueron lanzadas en febrero de 1980, con chips de producción disponibles sin receta en noviembre. [25] Los grados de velocidad iniciales fueron 4, 6 y 8  MHz . Los chips de 10 MHz estuvieron disponibles durante 1981, [26] y los chips de 12,5 MHz en junio de 1982. [25] La versión "12F" de 16,67 MHz del MC68000, la versión más rápida del chip HMOS original, no fue producida hasta finales de los años 1980.

A principios de 1981, el 68k estaba ganando pedidos en el extremo superior, y Gunter comenzó a acercarse a Apple para ganar su negocio. En ese momento, el 68k se vendía por aproximadamente $ 125 en cantidad. En reuniones con Steve Jobs , Jobs habló sobre usar el 68k en el Apple Lisa , pero afirmó que "el futuro real está en este producto que estoy haciendo personalmente. Si quieres este negocio, tienes que comprometerte a venderlo por $ 15". [27] Motorola respondió ofreciendo venderlo a $ 55 al principio, luego bajar a $ 35, y así sucesivamente. Jobs estuvo de acuerdo, y el Macintosh pasó del 6809 al 68k. El precio promedio finalmente llegó a $ 14,76. [27]

Variantes

En 1982, el 68000 recibió una actualización menor de su arquitectura de conjunto de instrucciones (ISA) para soportar memoria virtual y cumplir con los requisitos de virtualización de Popek y Goldberg . El chip actualizado se llama 68010. [28] También agrega un nuevo "modo de bucle" que acelera los bucles pequeños y aumenta el rendimiento general en aproximadamente un 10% a las mismas velocidades de reloj. También se produjo una versión más extendida, que expone 31 bits del bus de direcciones, en pequeñas cantidades como el 68012 .

Para dar soporte a sistemas de menor costo y aplicaciones de control con tamaños de memoria más pequeños, Motorola presentó el MC68008 compatible con 8 bits , también en 1982. Se trata de un 68000 con un bus de datos de 8 bits y un bus de direcciones más pequeño (20 bits). Después de 1982, Motorola dedicó más atención a los proyectos 68020 y 88000 .

Segunda fuente

Hitachi HD68000
Thomson TS68000

Varias otras empresas fueron fabricantes de segunda fuente del HMOS 68000. Entre ellas se encontraban Hitachi (HD68000), que redujo el tamaño de las características a 2,7 μm para su versión de 12,5 MHz, [25] Mostek (MK68000), Rockwell (R68000), Signetics (SCN68000), Thomson / SGS-Thomson (originalmente EF68000 y posteriormente TS68000) y Toshiba (TMP68000). Toshiba también fue un fabricante de segunda fuente del CMOS 68HC000 (TMP68HC000).

Las variantes cifradas del 68000, siendo las Hitachi FD1089 y FD1094, almacenan claves de descifrado para códigos de operación y datos de códigos de operación en una memoria respaldada por batería y se usaron en ciertos sistemas arcade de Sega, incluido el Sistema 16, para evitar la piratería y los juegos piratas ilegales. [29]

Versiones de CMOS

Motorola MC68HC000LC8

El 68HC000, la primera versión CMOS del 68000, fue diseñado por Hitachi y presentado conjuntamente en 1985. [30] La versión de Motorola se llama MC68HC000, mientras que la de Hitachi es HD68HC000. El 68HC000 ofrece velocidades de 8 a 20 MHz. Excepto por el uso de circuitos CMOS, se comportó de manera idéntica al HMOS MC68000, pero el cambio a CMOS redujo en gran medida su consumo de energía. El HMOS MC68000 original consumía alrededor de 1,35  vatios a una temperatura ambiente de 25  °C , independientemente de la velocidad de reloj, mientras que el MC68HC000 consumía solo 0,13 vatios a 8 MHz y 0,38 vatios a 20 MHz. (A diferencia de los circuitos CMOS, el HMOS todavía consume energía cuando está inactivo, por lo que el consumo de energía varía poco con la frecuencia del reloj). Apple seleccionó el 68HC000 para su uso en el Macintosh Portable .

Motorola reemplazó el MC68008 por el MC68HC001 en 1990. [31] Este chip se parece al 68HC000 en la mayoría de los aspectos, pero su bus de datos puede funcionar en modo de 16 bits o de 8 bits, dependiendo del valor de un pin de entrada al reiniciarse. Por lo tanto, al igual que el 68008, se puede utilizar en sistemas con memorias de 8 bits más económicas.

La evolución posterior del 68000 se centró en aplicaciones de control embebidas más modernas y periféricos en chip. El chip 68EC000 y el núcleo SCM68000 eliminan el bus periférico M6800 y excluyen la instrucción MOVE from SR de los programas en modo usuario, lo que hace que el 68EC000 y el 68SEC000 sean las únicas CPU 68000 que no son 100% compatibles en código objeto con las CPU 68000 anteriores cuando se ejecutan en modo usuario. Cuando se ejecutan en modo supervisor, no hay diferencia. [32] En 1996, Motorola actualizó el núcleo autónomo con circuitos completamente estáticos, que consumen solo 2  μW en modo de bajo consumo, y lo llamaron MC68SEC000. [33]

Motorola cesó la producción del HMOS MC68000, así como del MC68008, MC68010, MC68330 y MC68340 el 1 de junio de 1996, [34] [35] pero su empresa derivada Freescale Semiconductor todavía estaba produciendo el MC68HC000, MC68HC001, MC68EC000 y MC68SEC000, así como los microcontroladores MC68302 y MC68306 y versiones posteriores de la familia DragonBall . Los descendientes arquitectónicos del 68000, las familias 680x0 , CPU32 y Coldfire , también seguían en producción. Más recientemente, con el cierre de la fábrica de Sendai, se han descontinuado todas las piezas 68HC000, 68020, 68030 y 68882, dejando solo la 68SEC000 en producción. [36]

Como núcleo de microcontrolador

Desde que fue reemplazado por los microprocesadores de 32 bits "reales", el 68000 se utiliza como núcleo de muchos microcontroladores . En 1989, Motorola presentó el procesador de comunicaciones MC68302 . [37]

Aplicaciones

Dos CPU Hitachi 68HC000 en uso en una placa de circuito impreso de un juego arcade

IBM consideró el 68000 para el IBM PC pero eligió el Intel 8088 ; sin embargo, IBM Instruments vendió brevemente los sistemas informáticos de laboratorio IBM System 9000 basados ​​en el 68000. El conjunto de instrucciones 68k es particularmente adecuado para implementar Unix, [38] y el 68000 y sus sucesores se convirtieron en las CPU dominantes para las estaciones de trabajo basadas en Unix , incluidas las estaciones de trabajo Sun y las estaciones de trabajo Apollo/Domain .

En 1981, Motorola presentó la placa de computadora educativa Motorola 68000 , una computadora de placa única para fines educativos y de capacitación que, además del propio 68000, contenía memoria, dispositivos de E/S, temporizador programable y área de envoltura de cables para circuitos personalizados. La placa se siguió utilizando en las universidades estadounidenses como herramienta para aprender programación en ensamblador hasta principios de la década de 1990. [39]

En su introducción, el 68000 se utilizó por primera vez en sistemas de alto precio, incluyendo microcomputadoras multiusuario como la WICAT 150, [40] las primeras computadoras Alpha Microsystems , Sage II/IV , Tandy 6000/ TRS-80 Modelo 16 y Fortune 32:16 ; estaciones de trabajo de un solo usuario como los sistemas HP 9000 Serie 200 de Hewlett-Packard , los primeros sistemas Apollo/Domain , Sun-1 de Sun Microsystems y Corvus Concept ; y terminales gráficas como VAXstation 100 de Digital Equipment Corporation y IRIS 1000 y 1200 de Silicon Graphics . Los sistemas Unix rápidamente migraron a las generaciones posteriores más capaces de la línea 68k, que siguió siendo popular en ese mercado durante la década de 1980.

A mediados de la década de 1980, la caída del costo de producción hizo que el 68000 fuera viable para su uso en computadoras personales , comenzando con Apple Lisa y Macintosh , y seguidas por Amiga , Atari ST y X68000 .

El microordenador Sinclair QL , junto con sus derivados, como el terminal empresarial ICL One Per Desk , fue la utilización comercialmente más importante del 68008. Helix Systems (en Missouri, Estados Unidos) diseñó una extensión del bus SWTPC SS-50 , el SS-64, y produjo sistemas construidos alrededor del procesador 68008.

Si bien la adopción de RISC y x86 desplazó a la serie 68000 como CPU para estaciones de trabajo y de escritorio, el procesador encontró un uso sustancial en aplicaciones integradas . A principios de la década de 1990, se podían comprar cantidades de CPU 68000 por menos de 30  USD por pieza. [ cita requerida ]

El 68000 también tuvo un gran éxito como controlador integrado. Ya en 1981, las impresoras láser como la Imagen Imprint-10 se controlaban mediante placas externas equipadas con el 68000. La primera HP LaserJet , presentada en 1984, venía con un 68000 de 8 MHz integrado. Otros fabricantes de impresoras adoptaron el 68000, incluido Apple con su introducción de LaserWriter en 1985, la primera impresora láser PostScript . El 68000 continuó siendo ampliamente utilizado en impresoras durante el resto de la década de 1980, y persistió hasta bien entrada la década de 1990 en impresoras de gama baja.

El 68000 tuvo éxito en el campo de los sistemas de control industrial. Entre los sistemas que se beneficiaron de tener un 68000 o un derivado como microprocesador se encontraban las familias de controladores lógicos programables (PLC) fabricados por Allen-Bradley , Texas Instruments y posteriormente, tras la adquisición de esa división de TI, por Siemens . Los usuarios de dichos sistemas no aceptan la obsolescencia de los productos al mismo ritmo que los usuarios domésticos, y es totalmente probable que, a pesar de haber sido instalados hace más de 20 años, muchos controladores basados ​​en el 68000 sigan prestando un servicio fiable hasta bien entrado el siglo XXI.

En varios osciloscopios digitales de los años 80, [41] el 68000 se ha utilizado como procesador de visualización de formas de onda; algunos modelos, incluido el LeCroy 9400/9400A [42], también utilizan el 68000 como procesador matemático de formas de onda (incluida la suma, resta, multiplicación y división de dos formas de onda/referencias/memorias de formas de onda), y algunos osciloscopios digitales que utilizan el 68000 (incluido el 9400/9400A) también pueden realizar funciones de transformada rápida de Fourier en una forma de onda.

Los microcontroladores 683XX , basados ​​en la arquitectura 68000, se utilizan en equipos de redes y telecomunicaciones, decodificadores de televisión, instrumentos médicos y de laboratorio e incluso calculadoras portátiles. El MC68302 y sus derivados se han utilizado en muchos productos de telecomunicaciones de Cisco, 3com, Ascend, Marconi, Cyclades y otros. Los modelos anteriores de las PDA Palm y el Handspring Visor utilizaban el DragonBall , un derivado del 68000. AlphaSmart utilizó la familia DragonBall en versiones posteriores de sus procesadores de texto portátiles. Texas Instruments utilizó el 68000 en sus calculadoras gráficas de gama alta, las series TI-89 y TI-92 y Voyage 200 .

Una versión modificada del 68000 formó la base del emulador de hardware IBM XT/370 del procesador System 370.

Juegos de vídeo

Los fabricantes de videojuegos utilizaron el 68000 como la columna vertebral de muchos juegos arcade y consolas de juegos domésticos : Food Fight de Atari , de 1982, fue uno de los primeros juegos arcade basados ​​en 68000. Otros incluyeron System 16 de Sega , CP System y CPS-2 de Capcom , y Neo Geo de SNK . A fines de la década de 1980, el 68000 era lo suficientemente económico como para alimentar consolas de juegos domésticas, como la consola Genesis de Sega y también el accesorio Sega CD para ella (un sistema Sega CD tiene tres CPU, dos de ellas 68000). La consola multiprocesador Atari Jaguar de 1993 usó un 68000 como chip de soporte, aunque algunos desarrolladores lo usaron como procesador principal debido a la familiaridad. La consola Sega Saturn de 1994 usó el 68000 como coprocesador de sonido. En octubre de 1995, el 68000 llegó a una consola de juegos portátil , Genesis Nomad de Sega , como su CPU. [43]

Algunos juegos arcade (como Steel Gunner y otros basados ​​en Namco System 2 ) utilizan una configuración de CPU dual 68000, [44] y también existen sistemas con una configuración de CPU triple 68000 (como Galaxy Force y otros basados ​​en la Sega Y Board), [45] junto con una configuración de CPU cuádruple 68000, que ha sido utilizada por Jaleco (un 68000 para sonido tiene una frecuencia de reloj más baja en comparación con las otras CPU 68000) [46] para juegos como Big Run y ​​Cisco Heat ; otro quinto 68000 (a una frecuencia de reloj diferente a las otras CPU 68000) se utilizó en el juego arcade de Jaleco Wild Pilot para el procesamiento de entrada/salida (E/S). [47]

Arquitectura

Dirección de bus

El 68000 tiene un bus de direcciones externo de 24 bits y dos señales de selección de bytes que "reemplazaron" a A0. Por lo tanto, estas 24 líneas pueden direccionar 16 MB de memoria física con resolución de bytes. El almacenamiento y el cálculo de direcciones utilizan 32 bits internamente; sin embargo, los 8 bits de dirección de orden superior se ignoran debido a la falta física de pines del dispositivo. Esto le permite ejecutar software escrito para un espacio de direcciones de 32 bits lógicamente plano , mientras que solo accede a un espacio de direcciones físicas de 24 bits. La intención de Motorola con el espacio de direcciones interno de 32 bits era la compatibilidad con versiones posteriores, lo que hacía posible escribir software 68000 que aprovechara al máximo las implementaciones posteriores de 32 bits del conjunto de instrucciones 68000. [4]

Sin embargo, esto no impidió que los programadores escribieran software incompatible con versiones anteriores. El software de "24 bits" que descartaba el byte de dirección superior, o lo usaba para fines distintos al direccionamiento, podía fallar en implementaciones de 32 bits 68000. Por ejemplo, las primeras versiones (previas a la 7.0) del sistema operativo Mac de Apple usaban el byte alto de los punteros maestros de bloques de memoria para guardar indicadores como bloqueado y purgable . Las versiones posteriores del sistema operativo trasladaron los indicadores a una ubicación cercana, y Apple comenzó a enviar computadoras que tenían ROM " limpias de 32 bits " a partir del lanzamiento del Mac IIci de 1989.

La familia 68000 almacena números enteros multibyte en la memoria en orden big-endian .

Registros internos

La CPU tiene ocho registros de datos de propósito general de 32 bits (D0-D7) y ocho registros de dirección (A0-A7). El último registro de dirección es el puntero de pila , y los ensambladores aceptan la etiqueta SP como equivalente a A7. Esta era una buena cantidad de registros en ese momento en muchos sentidos. Era lo suficientemente pequeña para permitir que el 68000 respondiera rápidamente a las interrupciones (incluso en el peor de los casos, cuando era necesario guardar los 8 registros de datos D0-D7 y los 7 registros de dirección A0-A6, 15 registros en total), y lo suficientemente grande para hacer que la mayoría de los cálculos fueran rápidos, porque se podían hacer completamente dentro del procesador sin mantener ningún resultado parcial en la memoria. (Tenga en cuenta que una rutina de excepción en modo supervisor también puede guardar el puntero de pila de usuario A7, lo que totalizaría 8 registros de dirección. Sin embargo, el diseño de puntero de pila dual (A7 y modo supervisor A7') del 68000 hace que esto normalmente sea innecesario, excepto cuando se realiza un cambio de tarea en un sistema multitarea).

La existencia de dos tipos de registros permite realizar un cálculo de dirección de 32 bits y un cálculo de datos de 16 bits al mismo tiempo, lo que reduce el tiempo de ejecución de las instrucciones, ya que las direcciones y los datos se pueden procesar en paralelo. [4]

Registro de estado

El 68000 tiene un registro de estado de 16 bits. Los 8 bits superiores son el byte del sistema y su modificación es privilegiada. Los 8 bits inferiores son el byte del usuario, también conocido como registro de código de condición (CCR), y su modificación no es privilegiada. Las operaciones de comparación, aritméticas y lógicas del 68000 modifican los códigos de condición para registrar sus resultados para su uso en saltos condicionales posteriores. Los bits del código de condición son "carry" (C), "overflow" (V), "zero" (Z), "negative" (N) y "extend" (X). El indicador "extend" (X) merece una mención especial, porque está separado del indicador de acarreo . Esto permite que el bit adicional de las operaciones aritméticas, lógicas y de desplazamiento se separe de la aritmética de precisión múltiple de acarreo . [48]

Conjunto de instrucciones

Los diseñadores intentaron que el lenguaje ensamblador fuera ortogonal . Es decir, las instrucciones se dividen en operaciones y modos de direccionamiento , y casi todos los modos de direccionamiento están disponibles para casi todas las instrucciones. Hay 56 instrucciones y un tamaño mínimo de instrucción de 16 bits. Muchas instrucciones y modos de direccionamiento son más largos para incluir más bits de dirección o modo.

Niveles de privilegio

La CPU, y más tarde toda la familia, implementa dos niveles de privilegio. El modo de usuario otorga acceso a todo, excepto a las instrucciones privilegiadas, como los controles de nivel de interrupción. [49] El privilegio de supervisor otorga acceso a todo. Una interrupción siempre se convierte en supervisora. El bit de supervisor se almacena en el registro de estado y es visible para los programas de usuario. [49]

Una ventaja de este sistema es que el nivel de supervisor tiene un puntero de pila independiente. Esto permite que un sistema multitarea utilice pilas muy pequeñas para las tareas, ya que los diseñadores no tienen que asignar la memoria necesaria para albergar los marcos de pila de una acumulación máxima de interrupciones.

Interrupciones

La CPU reconoce siete niveles de interrupción . Los niveles 1 a 5 tienen una prioridad estricta. Es decir, una interrupción con un número más alto siempre puede interrumpir una interrupción con un número más bajo. En el registro de estado, una instrucción privilegiada permite establecer el nivel de interrupción mínimo actual, bloqueando interrupciones de prioridad menor o igual. Por ejemplo, si el nivel de interrupción en el registro de estado se establece en 3, los niveles superiores del 4 al 7 pueden provocar una excepción. El nivel 7 es una interrupción no enmascarable (NMI) activada por nivel. El nivel 1 puede ser interrumpido por cualquier nivel superior. El nivel 0 significa que no hay interrupción. El nivel se almacena en el registro de estado y es visible para los programas de nivel de usuario.

Las interrupciones de hardware se envían a la CPU mediante tres entradas que codifican la prioridad de interrupción pendiente más alta. Normalmente se necesita un codificador independiente para codificar las interrupciones, aunque para los sistemas que no requieren más de tres interrupciones de hardware es posible conectar las señales de interrupción directamente a las entradas codificadas a costa de una mayor complejidad de software. El controlador de interrupciones puede ser tan simple como un codificador de prioridad 74LS148 , o puede ser parte de un chip periférico de integración a muy gran escala (VLSI) como el periférico multifunción MC68901 (utilizado en la gama de ordenadores Atari ST y X68000 ), que también proporciona un UART , un temporizador y E/S paralelas.

La "tabla de excepciones" ( direcciones de vectores de interrupción de la tabla de vectores de interrupción) está fija en las direcciones 0 a 1023, lo que permite 256 vectores de 32 bits. El primer vector (RESET) consta de dos vectores, a saber, la dirección de pila inicial y la dirección de código inicial. Los vectores 3 a 15 se utilizan para informar varios errores: error de bus , error de dirección, instrucción ilegal , división por cero , vector CHK y CHK2, violación de privilegios (para bloquear la escalada de privilegios ) y algunos vectores reservados que se convirtieron en emulador de línea 1010, emulador de línea 1111 y punto de interrupción de hardware . El vector 24 inicia las interrupciones reales : interrupción espuria (sin reconocimiento de hardware) y vectores automáticos de nivel 1 a nivel 7, luego los vectores TRAP 16, luego algunos vectores reservados más, luego los vectores definidos por el usuario.

Dado que el vector de dirección del código de inicio siempre debe ser válido al reiniciarse, los sistemas comúnmente incluían alguna memoria no volátil (por ejemplo, ROM ) que comenzaba en la dirección cero para contener los vectores y el código de arranque . Sin embargo, para un sistema de propósito general es deseable que el sistema operativo pueda cambiar los vectores en tiempo de ejecución. Esto se lograba a menudo apuntando los vectores en ROM a una tabla de salto en RAM o mediante el uso de conmutación de bancos para permitir que la ROM fuera reemplazada por RAM en tiempo de ejecución.

El 68000 no cumple con los requisitos de virtualización de Popek y Goldberg para la virtualización completa del procesador porque tiene una única instrucción sin privilegios, "MOVE from SR", que permite al software en modo usuario el acceso de solo lectura a una pequeña cantidad de estado privilegiado. Los 68EC000 y 68SEC000, que son derivados posteriores del 68000, sí cumplen con los requisitos ya que la instrucción "MOVE from SR" es privilegiada. El mismo cambio se introdujo en las CPU 68010 y posteriores.

El 68000 tampoco puede soportar fácilmente la memoria virtual , lo que requiere la capacidad de atrapar y recuperarse de un acceso fallido a la memoria. El 68000 proporciona una excepción de error de bus que se puede usar para atrapar, pero no guarda suficiente estado del procesador para reanudar la instrucción fallida una vez que el sistema operativo ha manejado la excepción. Varias compañías lograron fabricar estaciones de trabajo Unix basadas en 68000 con memoria virtual que funcionaban utilizando dos chips 68000 que se ejecutaban en paralelo en relojes con diferentes fases. Cuando el 68000 "principal" encontraba un acceso incorrecto a la memoria, un hardware adicional interrumpía al 68000 "principal" para evitar que también encontrara el acceso incorrecto a la memoria. Esta rutina de interrupción manejaba las funciones de memoria virtual y reiniciaba el 68000 "principal" en el estado correcto para continuar con la operación sincronizada correctamente cuando el 68000 "principal" regresaba de la interrupción.

Estos problemas se solucionaron en la siguiente revisión importante de la arquitectura de 68k con el lanzamiento del MC68010. Las excepciones de error de bus y error de dirección envían una gran cantidad de estado interno a la pila del supervisor para facilitar la recuperación, y la instrucción "MOVE from SR" se convirtió en privilegiada. Se proporciona una nueva instrucción "MOVE from CCR" sin privilegios para que la utilice el software de modo de usuario en su lugar; un sistema operativo puede atrapar y emular las instrucciones "MOVE from SR" de modo de usuario si así se desea.

Detalles del conjunto de instrucciones

Los modos de direccionamiento estándar son:

Más: acceso al registro de estado y, en modelos posteriores, a otros registros especiales.

La mayoría de las instrucciones tienen variantes que operan en bytes de 8 bits, palabras de 16 bits y longs de 32 bits; los lenguajes ensambladores usan sufijos de punto y letra ".b", ".w" y ".l" después del mnemónico de instrucción para indicar la variante.

Al igual que muchas CPU de su época, el tiempo de ciclo de algunas instrucciones variaba según el operando o los operandos de origen. Por ejemplo, la instrucción de multiplicación sin signo tarda (38+2n) ciclos de reloj en completarse, donde 'n' es igual a la cantidad de bits establecidos en el operando. [50] Para crear una función que tomara un conteo de ciclo fijo, se requería la adición de código adicional después de la instrucción de multiplicación. Esto normalmente consumiría ciclos adicionales por cada bit que no estuviera establecido en el operando de multiplicación original.

La mayoría de las instrucciones son diádicas , es decir, la operación tiene un origen y un destino, y el destino se modifica. Las instrucciones más destacadas son:

68EC000

Controlador Motorola 68EC000

El 68EC000 es una versión de bajo costo del 68000 con una distribución de pines ligeramente diferente, diseñada para aplicaciones de controlador integrado. El 68EC000 puede tener un bus de datos de 8 bits o de 16 bits , conmutable al reiniciarse. [51]

Los procesadores están disponibles en una variedad de velocidades, incluidas configuraciones  de 8 y 16  MHz , que producen 2100 y 4376 Dhrystones cada uno. Estos procesadores no tienen unidad de punto flotante y es difícil implementar un coprocesador FPU ( MC68881/2 ) con una porque la serie EC carece de las instrucciones de coprocesador necesarias.

El 68EC000 se utilizó como controlador en muchas aplicaciones de audio, incluidos los instrumentos musicales y tarjetas de sonido Ensoniq , donde formaba parte del sintetizador MIDI . [52] En las placas de sonido Ensoniq, el controlador proporcionó varias ventajas en comparación con los competidores sin una CPU a bordo. El procesador permitió que la placa se configurara para realizar varias tareas de audio, como la síntesis MIDI MPU-401 o la emulación MT-32 , sin el uso de un programa residente de terminación y permanencia . Esto mejoró la compatibilidad del software, redujo el uso de la CPU y eliminó el uso de la memoria del sistema host.

El núcleo Motorola 68EC000 se utilizó posteriormente en los procesadores DragonBall basados ​​en m68k de Motorola/ Freescale .

También se utilizó como controlador de sonido en la consola de juegos Sega Saturn y como controlador para las placas controladoras Ethernet HP JetDirect para las impresoras HP LaserJet de mediados de la década de 1990 .

Código de ejemplo

El código ensamblador 68000 a continuación es para una subrutina llamada strtolower, que copia una cadena de caracteres de 8 bits terminada en nulo a una cadena de destino, convirtiendo todos los caracteres alfabéticos a minúsculas.

La subrutina establece un marco de llamada utilizando el registro A6 como puntero de marco. Este tipo de convención de llamada admite código reentrante y recursivo y se utiliza normalmente en lenguajes como C y C++ . A continuación, la subrutina recupera los parámetros que se le pasan ( srcy dst) de la pila. A continuación, realiza un bucle, leyendo un carácter ASCII (un byte) de la srccadena, comprobando si es un carácter alfabético en mayúsculas y, en caso afirmativo, convirtiéndolo en un carácter en minúsculas; de lo contrario, lo deja como está y luego escribe el carácter en la dstcadena. Por último, comprueba si el carácter era un carácter nulo ; si no, repite el bucle; de ​​lo contrario, restaura el marco de pila anterior (y el registro A6) y retorna. Tenga en cuenta que los punteros de cadena (registros A0 y A1) se incrementan automáticamente en cada iteración del bucle.

En cambio, el código que se muestra a continuación es para una función autónoma, incluso en la versión más restrictiva de AMS para la serie de calculadoras TI-89 , que es independiente del núcleo, sin búsqueda de valores en tablas, archivos o bibliotecas durante la ejecución, sin llamadas al sistema, sin procesamiento de excepciones, con un mínimo de registros a utilizar y sin necesidad de guardar ninguno. Es válido para fechas julianas históricas a partir del 1 de marzo del año 1 d. C. o para fechas gregorianas . En menos de dos docenas de operaciones calcula un número de día compatible con ISO 8601 cuando se le llama con tres entradas almacenadas en sus UBICACIONES correspondientes:

;; WDN, una dirección - para almacenar el resultado d0; BANDERA, 0 o 2 - para elegir entre juliano o gregoriano, respectivamente; FECHA, año0mda - sello de fecha como palabra binaria, byte y byte en formato ISO básico;(AÑO, año ~ AÑO=FECHA debido al big- endianness ); move.l DATE,d0 move.l d0,d1;; Aplicar el paso 1: congruencia de Lachman andi.l #$f00,d0 divu #100,d0 addi.w #193,d0 andi.l #$ff,d0 divu #100,d0 ; d0 has the month index i in the upper word (mod 100);; Aplicar el paso 2: Encontrar spqr como el año del día bisiesto juliano anterior a FECHA swap d0 andi.l #$ffff,d0 add.b d1,d0 add.w YEAR,d0 subi.l #$300,d1 lsr #2,d1 swap d1 add.w d1,d0 ; spqr/4 + year + i + da;; (Aplicar paso 0 – Ajuste gregoriano) mulu FLAG,d1 divu #50,d1 mulu #25,d1 lsr #2,d1 add.w d1,d0 add.w FLAG,d0 ; (sp32div16) + spqr/4 + year + i + da; divu #7,d0 swap d0 ; d0.w becomes the day number; move.w d0,WDN ; returns the day number to address WDN rts;;Los días de la semana corresponden a los números de día de la semana como:; Dom=0 Lun=1 Mar=2 Mié=3 Jue=4 Vie=5 Sáb=6;

Notas

  1. ^ Los diseños híbridos de este tipo ya eran comunes en el campo de las minicomputadoras. El Data General Nova era un diseño de 16 bits implementado utilizando unidades de lógica de procesamiento (ALU) de 4 bits.

Véase también

Referencias

  1. ^ Heath, Steve (1995). Arquitecturas y sistemas de microprocesadores: RISC, CISC y DSP (segunda edición). Elsevier. pág. 13. ISBN 0-7506-2303-9Archivado del original el 16 de abril de 2021 . Consultado el 12 de octubre de 2019 .
  2. ^ Granlund, Torbjörn (14 de noviembre de 2020). The GNU Multiple Precision Arithmetic Library (PDF) (Ed. 6.2.1 ed.). Proyecto GNU . p. 13. Archivado (PDF) del original el 28 de julio de 2022. Consultado el 29 de julio de 2022 .
  3. ^ Heid, Jim; Norton, Peter (1989). Dentro del Apple Macintosh. Simon & Schuster . pág. 530. ISBN. 0-13-467622-XArchivado del original el 29 de julio de 2022 . Consultado el 29 de julio de 2022 .
  4. ^ abcde Starnes, Thomas W. (abril de 1983). «La filosofía de diseño detrás del MC68000 de Motorola». Byte . Vol. 8, núm. 4. Archivado desde el original el 24 de julio de 2018 . Consultado el 19 de junio de 2018 .
  5. ^ Manual de referencia del programador de la familia Motorola M68000 (PDF) . Phoenix, Arizona: Motorola . 1992. p. 1-1. ISBN 0-13-723289-6. Archivado (PDF) del original el 24 de septiembre de 2015 . Consultado el 12 de agosto de 2005 .
  6. ^ «MC68000: microprocesador de 32 bits de bajo coste (incluidos HC000, HC001, EC000 y SEC000)». NXP Semiconductor . Archivado desde el original el 14 de abril de 2021. Consultado el 24 de marzo de 2021 .
  7. ^ Turley, Jim (10 de agosto de 2020). "Revolcándose en la nostalgia de 68K ¿Quiere construir una computadora nueva de 40 años?". Revista de ingeniería electrónica . Archivado desde el original el 11 de abril de 2021. Consultado el 24 de marzo de 2021 .
  8. ^ "Motorola se suma a la carrera de los microprocesadores con la entrada de 8 bits". Electrónica . 47 (5). Nueva York: McGraw-Hill: 29–30. 7 de marzo de 1974.
  9. ^ Tooley, Michael (1988). Mantenimiento de ordenadores personales (segunda edición). Heinemann . p. 8. ISBN 0-434-91975-6Archivado del original el 29 de julio de 2022 . Consultado el 29 de julio de 2022 .
  10. ^ Oral 2007, pág. 4.
  11. ^ Kent, Allen ; Williams, James G. (1991). Enciclopedia de microcomputadoras: evolución de la gestión de mantenimiento computarizada a la generación de números aleatorios. Vol. 7. Marcel Dekker . p. 336. ISBN 0-8247-2706-1Archivado del original el 29 de julio de 2022 . Consultado el 29 de julio de 2022 .
  12. ^ abc Oral 2007, pág. 5.
  13. ^ ab Oral 2007, pág. 9.
  14. ^ abc Oral 2007, pág. 6.
  15. ^ Oral 2007, pág. 8.
  16. ^ Oral 2007, pág. 7.
  17. ^ ab Andersson, Sven (24 de marzo de 2014). "La (r)evolución del microprocesador". EE Times . p. 2. Archivado desde el original el 29 de julio de 2022 . Consultado el 29 de julio de 2022 .
  18. ^ Tooley, Michael (1992). Mantenimiento de ordenadores personales (tercera edición). Newnes . págs. 264-265. ISBN 0-7506-0374-7Archivado del original el 29 de julio de 2022 . Consultado el 29 de julio de 2022 .
  19. ^ Oral 2007, pág. 10.
  20. ^ Oral 2007, págs. 9–11.
  21. ^ "Datos de diseño del sistema de microcomputadoras M6800" (PDF) . Motorola . 1976. p. 21. Archivado (PDF) del original el 18 de abril de 2023 . Consultado el 17 de abril de 2023 .
  22. ^ Stritter y Gunter (1979). "Microsistemas: una arquitectura de microprocesador para un mundo cambiante: el Motorola 68000". Computer . 12 (2): 43–52. doi :10.1109/MC.1979.1658617. S2CID  15893310 . Consultado el 17 de abril de 2023 .
  23. ^ Oral 2007, pág. 11.
  24. ^ Ken Polsson. «Cronología de los microprocesadores». Processortimeline.info. Archivado desde el original el 19 de agosto de 2012. Consultado el 27 de septiembre de 2013 .
  25. ^ abc DTACK GROUNDED, The Journal of Simple 68000/16081 Systems, marzo de 1984, pág. 9, archivado desde el original el 10 de marzo de 2016 , consultado el 31 de octubre de 2011.
  26. ^ "Motorola era el rival a batir, y su 68000 su mayor éxito". tekdeeps . Archivado desde el original el 13 de septiembre de 2022 . Consultado el 13 de septiembre de 2022 .{{cite web}}: CS1 maint: URL no apta ( enlace )
  27. ^ ab Oral 2007, pág. 12.
  28. ^ Faynberg, Igor; Lu, Hui-Lan; Skuler, Dor (2016). Computación en la nube: tendencias y tecnologías empresariales. Wiley . p. 53. ISBN 978-1-118-50121-4Archivado del original el 29 de julio de 2022 . Consultado el 29 de julio de 2022 .
  29. ^ "FD1094 – Sega Retro". segaretro.org . 19 de octubre de 2017. Archivado desde el original el 28 de septiembre de 2013 . Consultado el 27 de octubre de 2015 .
  30. ^ "Company Briefs" Archivado el 14 de noviembre de 2007 en Wayback Machine , The New York Times, 21 de septiembre de 1985, disponible en TimesSelect (suscripción).
  31. ^ "68HC001 obsoleto 68008". Informe del microprocesador . 20 de junio de 1990.
  32. ^ "Motorola simplifica la familia 68000; versiones "EC" de los modelos 68000, '020, '030 y '040, además del chip 68300 de gama baja"". Informe sobre microprocesadores . 17 de abril de 1991.
  33. ^ "Motorola presenta el procesador MC68SEC000 para aplicaciones integradas de bajo consumo" (Nota de prensa). Motorola. 18 de noviembre de 1996. Archivado desde el original el 28 de marzo de 1997.
  34. ^ "HIPPO Q495" (PDF) . Descripción general de la cartera interna de productos de alto rendimiento (10). Motorola . Cuarto trimestre de 1995. Archivado desde el original el 14 de septiembre de 2022 . Consultado el 29 de julio de 2022 .
  35. ^ comp.sys.m68k Publicación de Usenet Archivado el 14 de noviembre de 2007 en Wayback Machine , 16 de mayo de 1995; consulte también otras publicaciones en el hilo. El anuncio de fin de vida útil se realizó a fines de 1994; según la práctica estándar de fin de vida útil de Motorola, los pedidos finales se habrían realizado en 1995 y los envíos finales en 1996.
  36. ^ "Freescale 150mm Sendai Fab Closure-General Product Discontinance". 24 de noviembre de 2010. Archivado desde el original el 9 de marzo de 2014 . Consultado el 9 de marzo de 2014 .
  37. ^ "El procesador multiprotocolo combina 68000 y RISC". ESD: The Electronic System Design Magazine . 1 de noviembre de 1989 – vía AccessMyLibrary.
  38. ^ Rood, Andrew L.; Cline, Robert C.; Brewster, Jon A. (septiembre de 1986). "UNIX y el MC68000". Byte . pág. 179.
  39. ^ El microcontrolador AVR de Atmel: MEGA y XMEGA en ensamblaje y C. Han-Way Huang. 14 de enero de 2013. ISBN 978-1285500089Archivado del original el 10 de abril de 2022 . Consultado el 18 de noviembre de 2021 .
  40. ^ "museo ~ WICAT 150". Old-computers.com. Archivado desde el original el 12 de octubre de 2012. Consultado el 27 de septiembre de 2013 .
  41. ^ Manual de servicio del osciloscopio de almacenamiento digital de doble canal Philips PM3320 de 250 MS/s, sección 8.6, código de pedido 4822 872 05315.
  42. ^ Manual de servicio del osciloscopio digital LeCroy 9400/9400A, Sección 1.1.1.3 Microprocesador, agosto de 1990.
  43. ^ Hunt, Stuart (6 de octubre de 2009). «Retroinspección: Sega Nomad». Retro Gamer . N.º 69. pág. 47.
  44. ^ "Archivo de código de Google: almacenamiento a largo plazo para el alojamiento de proyectos de código de Google". code.google.com . Archivado desde el original el 14 de septiembre de 2022 . Consultado el 15 de enero de 2016 .
  45. ^ "openlase-mame/segaybd.c at master - jv4779/openlase-mame". GitHub . Archivado desde el original el 9 de diciembre de 2021 . Consultado el 15 de enero de 2016 .
  46. ^ "Archivo de código de Google: almacenamiento a largo plazo para el alojamiento de proyectos de código de Google". code.google.com . Archivado desde el original el 14 de septiembre de 2022 . Consultado el 15 de enero de 2016 .
  47. ^ "historic-mess/cischeat.c at master - mamedev/historic-mess". GitHub . Archivado desde el original el 25 de enero de 2022 . Consultado el 15 de enero de 2016 .
  48. ^ Ford, William; Topp, William R. (1997). Lenguaje ensamblador y programación de sistemas para la familia M68000 (segunda edición). Jones and Bartlett Publishers . págs. 149–151. ISBN. 0-7637-0357-5Archivado del original el 29 de julio de 2022 . Consultado el 29 de julio de 2022 .
  49. ^ ab M68000 Manual del usuario de los microprocesadores de 8/16/32 bits Novena edición (PDF) . Motorola. 1993. pág. 6-2. Archivado (PDF) del original el 14 de abril de 2022 . Consultado el 28 de febrero de 2022 .
  50. ^ "Tiempos de ejecución de instrucciones estándar". oldwww.nvg.ntnu.no . Archivado desde el original el 9 de septiembre de 2016 . Consultado el 4 de agosto de 2017 .
  51. ^ Boys, Robert (6 de enero de 1996). «Preguntas frecuentes (FAQ) sobre M68k, comp.sys.m68k». Archivado desde el original el 16 de julio de 2012. Consultado el 3 de mayo de 2010 .
  52. ^ Especificaciones de Soundscape Elite. de Hoja de fax archivada el 30 de enero de 2010 en Wayback Machine , Grupos de Google, 25 de abril de 1995.

Bibliografía

Lectura adicional

Hojas de datos y manuales
Libros
Imágenes

Enlaces externos