Si tuviéramos que escoger una CPU para representar la década de los 80, esta sería sin duda el Motorola 68000. Presentada en 1979 y desarrollada gracias al uso de la tecnología VLSI, fue sin duda el microprocesador de 16 bits más popular del mundo y se lo encontró en multitud de sistemas. Máquinas recreativas de diferentes marcas, ordenadores personales y consolas de videojuegos. Su nombre lo debe a la cantidad de transistores que componen el chip y su éxito generó la familia de microprocesadores 680×0 que le plantó cara a Intel y al PC durante más de diez años en el mercado.
Esta es una versión rehecha del artículo del 68000, el motivo de su existencia es que no estábamos satisfechos con la versión original.
Los orígenes del Motorola 68000
Corría el año 1979 y la segunda generación de ordenadores personales ya había salido a la venta en el aún incipiente mercado: Apple, Commodore y Tandy habían lanzado ese año sus versiones mejoradas, todas ellas con CPU de 8 bits (6502, 8080 y Z80 principalmente). Si bien aquellos procesadores habían disparado una revolución, su rendimiento quedaba muy por detrás del de los miniordenadores de la época, cuyas CPU estaban formadas por complejas placas repletas de chips TTL de pequeña y mediana escala. Esto no solo afectaba al tamaño de dichos sistemas, sino también a su coste, que los mantenía fuera del alcance de cualquier usuario individual.
Ese fue el año exacto en que Motorola anunció el MC68000, pero los primeros chips de producción no llegarían hasta finales de 1980. La integración a muy gran escala (VLSI) había llegado para cambiar las reglas del juego, haciendo posible fabricar chips que incluyeran decenas de miles de transistores en una sola carcasa. El MC68000 estaba hecho con un proceso HMOS de 3,5 µm y contenía exactamente 68.000 transistores, de ahí su nombre.
No se creó como un sucesor de 16 bits de las CPU de los primeros ordenadores personales, sino con la intención de igualar las capacidades de los procesadores de los miniordenadores e incluso superar su rendimiento. Internamente, era una arquitectura de 32 bits completa, con registros y ALU de 32 bits, pero presentaba a la externa un bus de datos de 16 bits y un bus de direcciones de 24 bits, lo cual permitía reducir el coste de los sistemas que lo incorporaran.
Estandarizó las estaciones de trabajo.
A partir de 1981 empezaron a aparecer las primeras estaciones de trabajo basadas en el 68000: se trataba en apariencia de ordenadores personales, pero con unas capacidades técnicas cercanas a las de los voluminosos miniordenadores, pero a una fracción de su coste y, obviamente, ocupando el espacio de un escritorio. Si bien el 68000 no inventó ese concepto, dado que ya lo anticipó Xerox en 1973 con su Alto, sí que lo hizo viable económicamente para un mercado mucho más amplio.
Y es que en 1981 aparecieron varias de estas estaciones de trabajo, todas ellas basadas en el 68000,
- El primer sistema en incorporar el MC68000 fue el WICAT System 100 en 1980, un ordenador multiusuario orientado a instituciones educativas.
- El Apollo DN100, considerado la primera estación de trabajo gráfica en red comercialmente disponible,
- Ese mismo año, Andy Bechtolsheim diseñó el prototipo que daría origen a Sun Microsystems, también basado en el 68000.
- Hewlett-Packard con su serie HP 9000,
- Dos años más tarde, en 1983, Silicon se unió a competir con las tres marcas anteriores, quienes también usaron el 68000 como microprocesador de sus primeras estaciones de trabajo.
Con el tiempo, y a medida que los costes de producción fueron cayendo, esas mismas capacidades acabarían llegando también a los ordenadores personales. Primero con el Apple Lisa en 1983, pero siendo también la CPU principal de sistemas como el Apple Macintosh(1984), el Commodore Amig(a1985) y el Atari ST(1985). Lo que le llevó a competir contra los microprocesadores de Intel.
¿Por qué no lo escogió IBM para su PC?
La elección del Intel 8088 para el IBM 5150 no responde a criterios de rendimiento puro, sino a una combinación de factores prácticos.
- El primero de ellos era que Intel no solo ofrecía el procesador, sino que también disponía de un ecosistema completo de chips periféricos ya listos para implementarse y usarse. Es decir, Intel ofrecía la capacidad de poder montar un ordenador en poco tiempo. Si bien a día de hoy dichas funcionalidades se encuentran ya integradas en la CPU, por aquel entonces no era así y Motorola no tenía disponible el conjunto de chips o chipset entero, por lo que IBM tenía que diseñarlos.
- Intel no solo le licenció a IBM y al resto su CPU, sino la circuitería entera; cosas como la unidad DMA, el controlador de periféricos, el controlador de memoria y demás se vendían en el mismo paquete que el 8086/8088.
- El segundo motivo es que Intel pedía no un único proveedor de chips, sino dos. Intel sí que aceptó, licenciando sus chips, incluyendo el 8088, que tuvo una versión fabricada por una tal AMD. La cual, gracias a ello, es la única empresa con licencia x86 aparte de la propia Intel. Y sí, sabemos que han existido otras como VIA y Cyrix.
La imposibilidad de conseguir la licencia del PC de IBM fue lo que llevó a Motorola a desarrollar el chipset alrededor del 68000, todo ello sin dejar que terceros pudieran inventar sus chips periféricos. Sin embargo, Motorola definió un modelo de negocio cuanto menos controvertido: vendería barata la CPU, pero exageradamente caros el resto de componentes del chipset. Esto hizo que, pese a la popularidad de la CPU entre diversos sistemas, ninguno de ellos sea compatible entre sí. Apple, Atari, Commodore, Sun Microsystems, Silicon Graphics y otras tuvieron que crear sus propios chips de apoyo, con tal de no pagar los altos precios que exigía Motorola, lo que retrasó varios años el lanzamiento de ordenadores personales de 16 bits
Impacto en el mundo arcade
Su entrada en el mundo de las recreativas llegó en 1983 con Food Fight de Atari, desarrollado por General Computer Corporation, los mismos que trabajarían en el diseño del hardware de la Atari 7800, consola que no se basaría en el procesador de Motorola. Sin embargo, la explosión en el mundo arcade vino a partir de 1985. Sega fue quien marcó el camino en dos frentes distintos: por un lado, el System 16, una placa estándar basada en un 68000 que daría lugar a títulos como Altered Beast, Golden Axe y Shinobi; por otro, la tecnología SuperScaler, presente en placas más potentes que empleaban dos 68000 para conseguir el escalado de sprites en tiempo real que hacía posibles juegos como Space Harrier (1985) y Out Run (1986), con gráficos imposibles de reproducir en los sistemas domésticos de la época.

Hacia el final de la década llegarían otras plataformas igualmente legendarias. Capcom lanzó en 1988 la CPS-1, también basada en el 68000, que acogería clásicos como Final Fight (1989) y Street Fighter II (1991). Y en 1990, SNK presentó la Neo Geo MVS, un sistema que llevó el concepto más lejos que ningún otro al permitir cambiar los juegos mediante cartuchos en el propio arcade, con un hardware basado igualmente en el 68000.
Arquitectura del Motorola 68000
Lo primero que llama la atención del 68000 es la combinación de su bus de datos de 16 bits con registros internos de 32 bits, algo único en su rango de precio cuando apareció en 1980. A ello se sumaba un espacio de direccionamiento de 24 bits, que le permitía acceder a hasta 16 MB de memoria sin necesidad de sistemas de bancos ni paginación de ningún tipo, una capacidad muy superior a la de sus contemporáneos. Todo ello obligó a adoptar un encapsulado DIP de 64 pines, bastante más caro y complejo que los DIP de 40 pines habituales en la época.

Pero ésta no era su única peculiaridad. Los sistemas de la época, por lo general, necesitaban que todos sus chips funcionaran a una velocidad de reloj sincronizada con la de la CPU: en las consolas, por ejemplo, era habitual usar un múltiplo de la frecuencia del subportador de color, 3,58 MHz en NTSC o 4,43 MHz en PAL, para simplificar el diseño del hardware de vídeo. También el 68000 podía funcionar en modo asíncrono, donde cada dispositivo conectado podía trabajar a su velocidad propia, indicándole a la CPU que había terminado mediante una señal específica llamada DTACK (Data Transfer Acknowledge). Esto daba una considerable versatilidad a la hora de diseñar sistemas, ya que los chips periféricos no necesitaban estar sincronizados con el procesador.
Set de instrucciones: ortogonalidad y modos de direccionamiento
Una de las características que distinguían a las CPU de los miniordenadores era la llamada ortogonalidad, y el 68000 fue una de las primeras CPU accesibles económicamente en adoptarla. Significa que el repertorio de instrucciones no impone restricciones arbitrarias sobre qué operación puede aplicarse a qué dato: cualquier instrucción puede operar con cualquier registro y con cualquier modo de direccionamiento. A esto se suma que la mayoría de instrucciones podían trabajar con operandos de 8, 16 y 32 bits indistintamente. Cada combinación de instrucción, modo de direccionamiento y tamaño de operando genera su propio opcode, de modo que lo que a primera vista parecen unos cincuenta grupos de instrucciones se convierte en la práctica en uno de los repertorios más amplios y expresivos de su época.

Los modos de direccionamiento merecen especial atención, ya que son precisamente lo que da al programador la flexibilidad de indicar dónde se encuentra el dato que ha de procesarse: puede estar en un registro, en una dirección de memoria absoluta, en la dirección apuntada por un registro, con un desplazamiento respecto a ese puntero, o incluso calcularse en el momento mediante una combinación de registros e índices. Esta riqueza de modos, combinada con la ortogonalidad, es lo que hace que el 68000 sea tan cómodo de programar, tanto en ensamblador como mediante compiladores.
Al tratarse de una arquitectura CISC, el 68000 podía expresar en pocas instrucciones lo que otras arquitecturas necesitaban muchas más para lograr, lo que se traducía en código más compacto y en un menor consumo de memoria, algo especialmente valioso en una época en que la RAM era cara. Pero quizás más relevante aún fue que esa ortogonalidad facilitó enormemente la implementación de compiladores eficientes, en especial de C, el lenguaje que se estaba convirtiendo en el estándar para el desarrollo de sistemas operativos y software de base.
Registros
El 68000 dispone de 8 registros de datos de 32 bits (D0 a D7) y 8 registros de dirección del mismo tamaño (A0 a A7). El último de estos, A7, actúa como puntero de pila (Stack Pointer), con dos variantes según el modo de operación: una para el modo supervisor y otra para el modo usuario. Dicha separación no se hizo de forma arbitraria, ya que en arquitecturas que le fueron contemporáneas, como es el caso del 8086, muchos registros tenían usos implícitos y restringidos: AX para multiplicaciones, CX como contador de bucles, DX para operaciones de E/S.

En cuanto al contador de programa, las instrucciones del 68000 están siempre alineadas a 16 bits en memoria, por lo que el PC se incrementa como mínimo en 2 bytes, aunque algunas instrucciones ocupan hasta tres words (6 bytes) en total.
¿Doble ALU?
Pese a que sus registros son de 32 bits, al 68000 se le considera un microprocesador de 16 bits porque su ALU aritmética principal opera en 16 bits, realizando las operaciones de 32 bits en dos ciclos. Sin embargo, el 68000 no tiene una única ALU: dispone de una unidad aritmética que opera con los registros de datos (D0-D7) para cálculos aritméticos y lógicos, y de una unidad de direccionamiento separada que opera con los registros de dirección (A0-A7) para gestionar punteros y accesos a memoria.
Esta particularidad tiene relación con el hecho de que, al igual que en el 8086, si bien el 68000 no tiene un pipeline completo, sí realiza la captación de la siguiente instrucción mientras se encuentra decodificando y ejecutando la actual. De ahí a tener una segunda ALU que puede funcionar en paralelo para el cálculo de direcciones.
Interfaz a memoria y periféricos
Interfaz a memoria y periféricos
Como ya hemos comentado, una de las particularidades del 68000 respecto a otros microprocesadores es su capacidad para comunicarse con memoria y periféricos de forma asíncrona. Esto significa que los dispositivos conectados no necesitan operar a una frecuencia sincronizada con la de la CPU ni a un múltiplo de ella. En la mayoría de los sistemas de la época que se conectaban a un televisor NTSC, por ejemplo, todos los chips del sistema usaban frecuencias compatibles con la salva de color, de 3,58 MHz, para simplificar el diseño.

El 68000 eliminaba esa restricción con el uso de dos señales clave.
- La primera señal DTACK (Data Transfer Acknowledge) es activada por el dispositivo externo, el cual puede ser memoria o periférico, para indicar a la CPU que la transferencia ha completado y que el dato es válido.
- Mientras DTACK no llega, el 68000 inserta automáticamente ciclos de espera (wait states), lo que garantiza que la transferencia se complete correctamente independientemente de la velocidad del dispositivo.
- La segunda señal, BERR (Bus Error), no la genera el periférico, sino un circuito externo de vigilancia que la activa cuando detecta que ha transcurrido demasiado tiempo sin que DTACK llegue, evitando así que la CPU quede bloqueada esperando una respuesta que nunca llega.
El problema con este mecanismo es que la latencia variable hace que el diseño del sistema sea más complicado: alguien tiene que implementar ese watchdog y manejar la excepción de bus error que esto produce. Por eso, en los entornos sin sistema operativo, como las consolas y recreativas, muchos diseñadores preferían el modo síncrono. Para hacerlo más fácil, el 68000 incluía soporte explícito para ello en forma de los pines VPA (Valid Peripheral Address) y VMA (Valid Memory Address), un mecanismo diseñado específicamente para mantener compatibilidad con los chips periféricos de la familia 68X de Motorola, que operaban de forma síncrona.
El problema de la memoria virtual y la protección de procesos
El Motorola 68000, pese a todas sus capacidades, tenía una carencia fundamental para ejecutar un sistema operativo de la talla de Unix: carecía de unidad de gestión de memoria (MMU). Sin ella no existía traducción de direcciones físicas a virtuales, lo que significaba que cualquier proceso podía leer o escribir en cualquier posición de memoria, incluida la del propio sistema operativo. Tampoco era posible implementar memoria virtual paginada de forma fiable, ya que el 68000 no era capaz de reanudar una instrucción que hubiera sido interrumpida a mitad de ejecución por un fallo de página, algo imprescindible para que la paginación funcione de forma transparente al software.

Los primeros fabricantes que quisieron usar el 68000 para ejecutar Unix tuvieron que resolver el problema por su cuenta. Apollo Computer lo hizo de una forma ingeniosa en su DN100: usaba dos procesadores 68000 en tándem, donde el procesador principal ejecutaba el sistema operativo y las aplicaciones con normalidad, mientras el segundo actuaba como gestor de fallos de página. Cuando se producía uno, el procesador principal era detenido en medio de su ciclo de memoria, el segundo traía la página necesaria a memoria y luego liberaba al principal para que continuara, sin que este hubiera «notado» la interrupción. Sun Microsystems optó por un camino distinto en su Sun-1: diseñar su propia MMU externa, desarrollada internamente por su equipo de ingeniería para proporcionar la traducción de direcciones y la protección de memoria que el 68000 no ofrecía de serie. Ambas soluciones funcionaban, pero eran costosas, complejas y propietarias.
El Motorola 68010
En 1982, Motorola presentó el 68010 como respuesta directa a las limitaciones por la falta de una MMU, la idea era simple, poder vender el chipset entero para la creación de estaciones de trabajo capaces de ejecutar Unix, pero para ello se tuvieron que hacer cambios en el diseño del 68000, lo que llevó a la creación de una versión levemente mejorada, el 68010, el cual trajo una serie de pequeñas mejoras. Aunque a nivel de rendimiento era parejo al propio 68000.

¿En qué consistían esas mejoras? Pues en implementar una serie de funcionalidades que no se encontraban en el 68000.
- De todos ellos, el más importante fue la capacidad de reanudar instrucciones interrumpidas a mitad de ejecución, lo que hacía posible implementar memoria virtual paginada sin los trucos de hardware que habían tenido que inventar Apollo y Sun.
- Para ello, el 68010 guardaba en la pila, al atender una excepción, información detallada sobre el estado interno de la instrucción interrumpida, suficiente para retomarla desde el punto exacto donde se había detenido una vez resuelta la causa de la excepción.
A esto se sumaron otras mejoras relevantes:
- El registro VBR (Vector Base Register), que permitía reubicar la tabla de vectores de excepción en cualquier posición de memoria en lugar de tenerla fija en la dirección cero, algo esencial para sistemas con múltiples entornos o memoria virtual.
- La formalización completa de los dos modos de operación que el 68000 esbozaba, pero no terminaba de implementar de forma útil.
- En modo supervisor, con el bit S del Status Register activo, el procesador tenía acceso a todos los recursos y podía ejecutar instrucciones privilegiadas.
- En modo usuario, ese acceso estaba restringido, y cualquier intento de ejecutar una instrucción privilegiada generaba automáticamente una excepción que el sistema operativo podía gestionar.
La ruptura de la compatibilidad
Sin embargo, estas mejoras tuvieron un precio: la compatibilidad binaria con el 68000 se rompió. Mientras que Intel con sus CPU procuró mantener el 100% de la compatibilidad, Motorola veía cómo no existía un ecosistema de software común con su CPU, lo que les llevó a no respetar el funcionamiento del set de instrucciones a la hora de diseñar el 68010.
- Por ejemplo, la instrucción MOVE from SR, que en el 68000 cualquier código podía ejecutar libremente desde modo usuario para leer el estado del procesador, se convirtió en una instrucción privilegiada en el 68010, generando una excepción de violación de privilegio si se intentaba desde modo usuario. Todo el software existente que utilizara dicho patrón, cosa habitual en los sistemas escritos para el 68000, dejaba de funcionar sin ser modificado.
- Otro cambio fue en el formato de la pila de excepción; también cambió de forma incompatible: donde el 68000 guardaba 8 bytes fijos, el 68010 podía guardar hasta 29 bytes de estado interno, lo que rompía cualquier manejador de excepciones escrito para el procesador anterior.
Consecuencias en el mundo de los ordenadores personales
Si sistemas como el Apple Macintosh, el Commodore Amiga o el Atari ST hubieran tenido el 68010 como microprocesador en vez del 68000, entonces la historia hubiera sido muy diferente, ya que esto les habría permitido usar Unix o desarrollar una variante doméstica del mismo. ¿Por qué no lo utilizaron? La verdad es que si bien Motorola lo presento en 1982, no estuvo disponible a gran escala hasta 1983, por lo que dichos sistemas no se diseñaron para utilizar la memoria virtual, es más, para usarla correctamente era necesario comprar un chip MMU aparte, el 68451, el cual costaba mucho más dinero que el propio microprocesador y rompía por completo la estructura de costes.
Y es que Motorola sabía que la escala económica del 68010, orientado a estaciones de trabajo con Unix, era muy diferente a la del 68000, ya que les permitía venderlo mucho más caro que el 68000 original, el cual terminó convertido en un microprocesador para sistemas domésticos de 16 bits y para las máquinas recreativas.
Los 32 bits llegaron con el 68020.
En 1984, Motorola presentó el 68020, sucesor directo del 68010 y heredero de todos sus cambios arquitectónicos: el software escrito correctamente para el 68010 funcionaba sin modificaciones, pero el código que dependía de comportamientos específicos del 68000 original seguía siendo incompatible.

Entre los cambios que introdujo, destacamos los siguientes:
- Su novedad más visible fue la adopción de un bus de datos y un bus de direcciones de 32 bits completos, junto con una ALU del mismo tamaño, lo que eliminaba la necesidad de operar en dos ciclos para las operaciones de 32 bits que el 68010 heredaba del 68000.
- El espacio de direccionamiento teórico alcanzaba los 4 GB (2^32), aunque en la práctica pocos sistemas de la época podían aprovechar más allá de los 16 MB del 68000 original.
- A esto se sumó un set de instrucciones revisado que reducía el número de ciclos de muchas operaciones existentes y añadía nuevas instrucciones y modos de direccionamiento, aunque su menor penetración en el mercado doméstico respecto al 68000 hizo que pocos programas llegaran a usarlas.
La mejora de rendimiento no vino solo del bus más ancho. El 68020 implementó un pipeline de tres etapas completamente separadas —captación, decodificación y ejecución— que operaban en paralelo, a diferencia del 68000 y el 68010, que solo podían solapar parcialmente la captación de instrucciones con el resto del procesamiento. Conviene aclarar que no se trata de un pipeline clásico de un ciclo por etapa como el que popularizaría el MIPS R2000, sino de un solapamiento de fases cuya duración varía según la instrucción. A ello se añadió una pequeña caché de instrucciones interna de 256 bytes, suficiente para acelerar significativamente los bucles cortos más habituales, y velocidades de reloj que en sus versiones más rápidas duplicaban las del 68000 original.
Rendimiento del 68020
El resultado en términos de rendimiento fue notable. En el benchmark Dhrystone, uno de los estándares de referencia para medir el rendimiento en cálculo de enteros de la época, un 68000 a 8 MHz obtenía alrededor de 2.100 puntos, mientras que un 68020 a 16 MHz alcanzaba aproximadamente 7.500, una mejora de más de tres veces y media en términos absolutos. Normalizado por frecuencia de reloj, Motorola documentó internamente una mejora de IPC de aproximadamente 1,6 veces respecto al 68000, lo que significa que a igual velocidad de reloj el 68020 ejecutaba cada instrucción sensiblemente más rápido, siendo el doble de frecuencia disponible lo que multiplicaba el resultado final.
El 68030
En 1987, Motorola lanzó el 68030, sucesor directo del 68020. Su mejora más esperada era la integración de la MMU dentro del propio chip: el 68020 podía conectarse a la MMU externa 68851 de Motorola de forma muy estrecha, casi como una extensión del procesador, pero el 68030 incorporó una versión de esa misma unidad directamente en el silicio, eliminando la necesidad de un chip externo y reduciendo la latencia de traducción de direcciones. A esto se añadió una caché de datos de 256 bytes, complementando la caché de instrucciones de igual tamaño que ya tenía el 68020.

Las mejoras de rendimiento respecto a su predecesor fueron varias. El tiempo de acceso a ambas cachés se redujo a un único ciclo de reloj. Se incorporó un modo de transferencia en ráfaga (burst) que permite llenar una línea de caché completa con cuatro transferencias consecutivas de 32 bits de forma más eficiente que mediante accesos independientes, aprovechando que la dirección base ya ha sido calculada. Y la MMU integrada dispone de su propio bus interno, lo que le permite realizar la traducción de direcciones virtuales a físicas en paralelo con la ejecución de instrucciones, sin penalización en los casos habituales de acierto en la TLB.
En términos de rendimiento, la mejora del 68030 sobre el 68020 a igual frecuencia de reloj fue más discreta de lo que su lista de novedades podría sugerir: los datos de Motorola y los análisis independientes de la época coinciden en situar la ganancia en torno a un 18-20% sobre el 68020 a la misma velocidad. En Dhrystone, un 68020 a 16,67 MHz obtenía alrededor de 3.200 puntos, mientras que un 68030 a la misma frecuencia alcanzaba aproximadamente 3.800. Lo que compensaba esa diferencia relativamente contenida era la posibilidad de fabricar el 68030 a frecuencias más altas.
La fuga masiva hacia RISC
La serie 680×0 sufrió un mazazo enorme cuando una gran cantidad de sus clientes optaron por usar microprocesadores RISC en sus estaciones de trabajo, abandonando los microprocesadores de Motorola. Todo ello se produjo por el hecho de que, como ya hemos comentado, la serie 680×0 no disponía de un ecosistema unificado, lo que facilitó que cada cliente se fuera por su lado.
Las dos únicas empresas fieles al final a la familia 680×0 fueron Commodore y Atari, las cuales terminaron en bancarrota en la primera mitad de los 90
El 68040
La progresiva pérdida de clientes en el mercado de las workstations a favor de las arquitecturas RISC presionó a Motorola a dar un salto arquitectónico significativo con el 68040. La respuesta fue implementar un pipeline de seis etapas completamente separadas, mucho más profundo y sistemático que el de sus predecesores, siguiendo una tendencia que a finales de los 80 se había extendido por toda la industria: desde las arquitecturas RISC como el MIPS hasta el propio Intel, que introdujo un pipeline similar en el 486, lanzado ese mismo año de 1989.

El pipeline de seis etapas del 68040 funcionaba de forma que, en estado estacionario, había siempre seis instrucciones en vuelo simultáneamente, cada una en una fase distinta de ejecución. La primera etapa, PF (Prefetch), se encargaba de la captación anticipada de instrucciones desde la caché. La segunda, IC (Instruction Continue), completaba esa captación en los casos en que la instrucción ocupaba más de una word. La tercera, DC (Decode), decodificaba la instrucción e identificaba los operandos necesarios. La cuarta, OC (Operand Calculate), calculaba las direcciones efectivas de esos operandos. La quinta, EA (Effective Address), realizaba el acceso a memoria o recuperaba los operandos de los registros. Y la sexta, EX (Execute), ejecutaba la operación en la ALU y escribía el resultado.
A partir del momento en que el pipeline está lleno, el procesador completa teóricamente una instrucción por ciclo de reloj. En la práctica ese flujo se interrumpe por saltos condicionales, fallos de caché o dependencias entre instrucciones consecutivas que obligan a detener alguna etapa, pero incluso con esas penalizaciones, la ganancia respecto al 68030 era considerable. La mayor profundidad del pipeline fue también lo que permitió al 68040 alcanzar frecuencias de hasta 40 MHz con mayor consistencia que sus predecesores.
FPU integrada y problemas de compatibilidad
Sin embargo, el 68040 llegó con un problema que lastraría su adopción: la FPU integrada no implementaba el conjunto completo de instrucciones de coma flotante del coprocesador externo 68882, que era el estándar en los sistemas basados en 68020 y 68030. Había instrucciones que el hardware no ejecutaba de forma nativa y que el software existente utilizaba, forzando a emularlas por software con una penalización de rendimiento considerable. Una FPU incompleta que en ciertos escenarios rendía peor que el coprocesador externo al que pretendía sustituir fue el verdadero tiro en el pie.

Las consecuencias fueron dispares. Atari, en declive financiero, optó por no adoptarlo y lanzó el Falcon030 en 1992 con el más económico 68030. Commodore lo reservó para el Amiga 4000 en su configuración de gama alta, fuera del alcance del usuario medio. NeXT, en cambio, apostó decididamente por él en el NeXTcube y el NeXTstation, donde el entorno de desarrollo avanzado de NeXTSTEP sacaba partido de sus capacidades. Y Apple lo usó en la serie Macintosh Quadra, convirtiéndose junto a NeXT en el principal valedor del 68040 durante sus últimos años antes de la transición al PowerPC.
El final de la historia del 68000, el 68060
En 1994, justo al mismo tiempo en que se lanzaba el PowerPC 601, Motorola también lanzó el último microprocesador de la serie 680×0, y al igual que el Intel Pentium respecto al 486, se trataba de la evolución a superescalar del 68040, permitiéndole resolver dos instrucciones simultáneas por ciclo. Por desgracia, sufrió de los mismos problemas que su predecesor en cuanto a velocidad de reloj se refiere, pudiendo llegar a los 50 MHz. Comparativamente y a dicha velocidad de reloj, era capaz de alcanzar en el benchmark Dhrystone un 68060 a 50 MHz alcanzaba en torno a 80.000 puntos, aproximadamente cuatro veces más que un 68040 a 25 MHz y comparable a una SPARCstation 10 de Sun. El techo de 50 MHz no era consecuencia de su arquitectura, sino de las limitaciones del proceso de fabricación de la época, las mismas que afectaban a los primeros Pentium y PowerPC 601.

No fue el único cambio, el tamaño de la caché de primer nivel creció de los 4 KB a los 8 KB, tanto para instrucciones como para datos, y la FPU integrada corrigió por fin el problema que había lastrado al 68040: implementaba el conjunto completo de instrucciones de coma flotante del 68882, eliminando la necesidad de emulación por software que había penalizado a su predecesor en tantos sistemas. Si bien en enteros por ciclo de reloj supero al Pentium de Intel, más que nada por tener dos pipelines completos, no como el Pentium, en coma flotante no hubo mejora respecto al 68040, ya que implementaba el 68882 tal cual, sin mejoras de ningún tipo en el rendimiento.
Pocos sistemas lo usaron, por aquel entonces, Commodore habia pasado a mejor vida, Atari quien estaba en las últimas no llego a usar nunca el 68040 siquiera y Apple ya habia abandonado los 680×0 a favor del PowerPC.