Presentado por primera vez en 1979, el Motorola 68000 fue sin duda la CPU de 16 bits más popular de todas y mucho más avanzada que sus contemporáneas, lo que le llevó con el tiempo a ser la CPU de multitud de sistemas. En recreativas tuvo el monopolio de las de 16 bits, reemplazando en el uso tanto al Zilog Z80 como al MOS 6502. En consolas fue la CPU principal de SEGA Mega Drive/Genesis y del MegaCD y la Neo Geo de SNK, aunque sin duda donde más prolifero fue en ordenadores, donde fue el microprocesador central del Commodore Amiga, el Atari ST, el Apple Macintosh y el Sharp X68000.
Los orígenes del Motorola 68000
Si bien en la segunda mitad de la década de los 70 aparecieron las primeras CPU integradas en un solo chip, el rendimiento de estas era mucho menor que las que se utilizaban en los llamados por aquel entonces miniordenadores. De ahí a que durante buena parte de los años 70, todavía se vieran muchos sistemas de ese tipo con circuiterías TTL compuestas por decenas de chips, lo cual no solo afectaba al tamaño, sino también al coste de los mismos.
La reducción continua del tamaño de los transistores dejaba claro que pronto esas complejas circuiterías se podrían implementar en un solo chip, y bajo esa premisa se creó el Motorola 68000, no como un sucesor de 16 bits de las CPU que hubo en los primeros ordenadores personales, sino con las mismas capacidades que los microprocesadores en los miniordenadores e ir más allá de estos en rendimiento. Todo ello posibilitó la aparición de las llamadas estaciones de trabajo durante los primeros años de vida del 68000, las cuales reemplazaron el uso de los miniordenadores al disponer de las mismas capacidades por una porción del precio y el espacio.
A partir de ahí, los diferentes sistemas fueron adoptando el microprocesador de Motorola, desde ordenadores personales a consolas de videojuegos, el 68000 se convirtió sin duda en campeón de la popularidad, pero terminó formando parte del pasado por una serie de malas decisiones estratégicas por parte de la propia Motorola.
Tardó años en usarse en ordenadores personales
Con el 68000 nació el concepto de estación de trabajo, un ordenador personal con la potencia de un miniordenador, pero con el tamaño y comodidad de uso de un ordenador personal. El primer sistema en usar el Motorola 68000 fue el Apollo DN100 que se lanzó en 1981 y se trata de una de las primeras workstation que aparecieron al mercado. Junto a Sun Microsystems y Silicon Graphics lo adoptaron como CPU principal durante una buena parte de la década de los 80.
Su entrada al mundo de las recreativas fue en 1982 con Food Fight de Atari, una creación de General Computer Corporation, los mismos que trabajarían en el desarrollo de la Atari 7800, consola que no se basaría en la CPU de Motorola. Sin embargo, en ese aspecto, la explosión vino a partir de 1985, cuando tanto el System 16 de SEGA como su SuperScaler como Out Run, Space Harrier y otros utilizaron la potencia de uno o varios 68000 para mostrar gráficos imposibles en los sistemas domésticos.
En ordenadores «domésticos» el primero en ser lanzado fue el Apple Lisa, con un precio de 10.000 dólares en enero de 1983. No obstante, el precio fue bajando y al año siguiente el Macintosh costaba 128 KB, eso sí, con 1/8 de la RAM. Por lo que fueron el Atari ST y el Commodore Amiga los que colocaron al 68000 en las manos de las masas. Todo ello sin olvidarnos de la Mega Drive/Genesis que usaba un clon licenciado por Hitachi a Motorola, siendo la primera consola en usar una CPU de 16 bits con permiso de la Intellivision.
¿Por qué no lo escogió IBM para su PC?
La elección del 8086/8088 para el IBM 5150 no responde a términos de rendimiento, sino más bien de economía de escala, y el hecho de que por aquellos tiempos cuando licenciabas una CPU necesitabas también los chips de apoyo como la unidad DMA; el controlador de periféricos, etcétera. La respuesta a la famosa pregunta es simple: Intel licenció el chipset entero a IBM, es por ello que todos los clones que salieron después utilizan todos los chips periféricos, ya que son piezas esenciales para montar un ordenador.
Motorola, en cambio, cobraba mucho más caros los chips complementarios del 68000, 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.
Es decir, 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, la MMU, la unidad de coma flotante y demás se vendían en el mismo paquete que el 8086/8088, mientras que Motorola vendía muy barata su CPU, pero a un precio mucho más alto. Si observamos cómo terminó la cosa, está claro que Motorola jugó mal sus cartas. En todo caso, es entendible que el 68000, al ser una CPU de éxito, no se vendiera barata, mientras que el 8086/8088 fue un fracaso en sus primeros años donde no existía el IBM PC.
Arquitectura del Motorola 68000
Lo primero que llama la atención del 68000 es que se trata de una de las primeras CPU con un bus de datos de 16 bits, sin embargo, su direccionamiento es de 24 bits, pudiendo soportar sin ningún sistema de apoyo como bancos de memoria hasta 16 MB en un mismo sistema. Claro está, que esto obligó a adoptar un encapsulado de 64 pines, mucho más caro y complejo que los clásicos de 40 pines.
No obstante, esta no era su única particularidad. Uno de los mayores quebraderos de cabeza de los primeros sistemas es que estos tenían que funcionar a una velocidad de reloj sincronizada con la de la CPU. Por ejemplo, en las consolas, dado que los 3.58 MHz eran la frecuencia de la salva de color, pues se utilizaba un múltiple de esta. Pues bien, el 68000 no solo permitía la comunicación de esta forma, sino también asíncrona, donde las velocidades de los chips de apoyo no tenían que coincidir. Para ello hacía falta un hardware de apoyo que le enviara una señal a la CPU una vez hubiese terminado, lo cual daba una mayor versatilidad a la hora de diseñar nuevos sistemas.
Sin embargo, la pieza más poderosa del 68000 fueron sus 16 registros de propósito general de 32 bits, 8 para direccionamiento y otros 8 para datos, lo cual permitía realizar un gran número de instrucciones desde los registros de la propia CPU, sin pasar por la RAM y, por lo tanto, con la menor latencia posible.
Ortogonalidad y modos de direccionamiento
Una de las características que tenían las CPU de los miniordenadores, era la llamada ortogonalidad, siendo el 68000 una de las primeras CPU para un sistema doméstico en adoptarlo. ¿Qué es y qué significa esta palabra tan rara? Para empezar, hemos de partir delo hecho que esta CPU tenía “solo” 56 instrucciones, las cuales parecen pocas, pero cada una de las instrucciones tenía diferentes modos de direccionamiento, los cuales son formas de indicarle donde se encuentra el dato que ha de procesar, cada direccionamiento es un opcode distinto.
A todo ello, hemos de sumarle que había instrucciones que podían ejecutarse con valores de 8, 16 y 32 bits, donde nuevo cada uno de ellos tenía su opcode. Todo ello hacía que su set de instrucciones no se limitase solo a 56 instrucciones, sino que terminase siendo uno de los más complejos y el mismo tiempo con una facilidad de programación enorme. Al ser una CPU CISC esto le permitía ahorrar mucho dinero en el código ensamblado y su ortogonalidad le permitió adoptar lenguajes de programación mucho más potentes que BASIC, en especial el todopoderoso C.
Su importancia fue clave para la caída del mercado de los miniordenadores, donde la mayoría de aplicaciones requerían de dicha ortogonalidad para usarse en ordenadores personales. No obstante, no fue el único motivo que hizo que el 68000 iniciara la era de las estaciones de trabajo, sino también por el hecho de incluir una serie de características para poder ejecutar los mismos sistemas operativos que los superordenadores de la época.
El modo supervisor
El 68000 fue la primera CPU para una computadora personal capaz de ejecutar un sistema operativo de verdad. Y es que tanto CP/M como MS-DOS no son más que cargadores de programas. Una vez estos se ejecutan, son ellos los que tienen el control del sistema. Ahora bien, utilizan las rutinas de la BIOS para tareas comunes, pero no existía una separación entre lo que es el espacio de memoria del sistema y el de las aplicaciones, más que nada por el hecho de que solo se ejecutaba una. Por lo que el modo supervisor era, junto al modo usuario, uno de los dos modos de funcionamiento del 68000.
El modo supervisor le permite al 6800 ejecutar instrucciones privilegiadas, como aquellas relacionadas con la gestión del hardware o del estado del procesador, aparte de darle acceso completo a todos los registros del procesador y un espacio reservado en el direccionamiento de la memoria RAM donde las aplicaciones no pueden acceder. Para ello, se añadió un bit adicional en los FLAGS que indican si la CPU se encuentra en modo usuario o supervisor. Por lo que dicho modo es esencial para manejar excepciones, interrupciones y errores del sistema. Además, asegura que los programas en modo usuario no puedan corromper las estructuras críticas del sistema operativo. A niveles prácticos permitió el uso de sistemas operativos multitarea, los cuales podían manejar más de una aplicación, como es el caso de Unix o el utilizado en el Commodore Amiga.
Ahora bien, para usarlo bien era necesario una MMU en el sistema, algo de lo cual carecía el 68000 original de serie. Es por ello que los sistemas operativos de los ordenadores basados en dicha CPU no usaron jamás un sistema operativo de la potencia de Unix. Eso se dejó más bien a las estaciones de trabajo, las cuales costaban 10 veces más que un ordenador personal.
Registros y ALU
El 68000 dispone de 8 registros de datos de 32 bits (D0 y D7), 8 de direccionamiento del mismo tamaño (A0 a A7), donde el último se utiliza como puntero a pila (stack pointer), pero con dos variantes de uso distintas, una para el modo supervisor y otra para el modo usuario. En cuanto al contador de programa, dado que el bus de la CPU es de 16 bits, este incrementa cada 2 bytes. En comparación con otros sets de instrucciones donde los registros de más tienen registros de uso específico, el 68000 es muy versátil en este aspecto. Ya que esto permite tener preparados los operandos de varias instrucciones al mismo tiempo.
No obstante, pese a que sus registros son de 32 bits en tamaño, al Motorola 68000 se le considera un microprocesador de 16 bits, debido a que su ALU principal es de 16 bits. Claro está que para realizar operaciones de acceso a memoria usa dos ALU exclusivas para ello, de ahí a que la CPU tenga dos conjuntos de registros de propósito general separados, uno para cálculos aritméticos y otros para operaciones con la RAM y los periféricos.
Interfaz a memoria y periféricos
Una de las particularidades del 68000 respecto a otros microprocesadores es el hecho de soportar señales asíncronas para memoria, chips de apoyo y periféricos. Para que el lector lo entienda mejor, esto significa que la comunicación con la CPU no se ha de hacer a una velocidad de reloj sincronizada, es decir, a un múltiple de la misma. Por ejemplo, en la mayoría de los sistemas que se conectaban a un televisor NTSC solían tener frecuencias compatibles con la salva de color, que era de 3.58 MHz para todos los chips del sistema.
Por lo que el modo asíncrono del Motorola 68000 se refiere a su capacidad para realizar transferencias de datos con la memoria y dispositivos periféricos sin que haya un ritmo fijo. Lo que permite que la CPU y el resto de componentes no tengan que operar bajo frecuencias múltiples y garantiza que las transferencias de información se hagan correctamente a través de señales de control. Para ello, el microprocesador utiliza dos pines marcados como DTACK (El periférico la activa cuando está listo para completar una transferencia de datos) y BERR (Se activa si ocurre un error, como la falta de respuesta de un dispositivo dentro de un tiempo razonable).
El problema de este mecanismo, es que le añade ciclos de reloj de más si hay demasiada latencia y obliga a los desarrolladores a gestionar el tiempo de espera de una transferencia de datos, obligando a crear en el sistema operativo un failsafe que haga que el 68000 no se quede colgado esperando una respuesta que nunca llega. Para evitar problemas de este tipo, la mayoría de los diseñadores sistemas preferían usar el modo síncrono. Especialmente en consolas y recreativas donde no existía un complejo SO por detrás.
Sucesores y ocaso del Motorola 68000
Si bien la primera versión del 68000, a diferentes frecuencias, fue utilizado en multitud de sistemas domésticos y máquinas recreativas, sus sucesivos sucesores no tuvieron tanta suerte en lo que a adopción se refiere por parte de la industria. El primero de ellos en aparecer fue el Motorola 68010, el cual mejoraba el tiempo de ejecución de algunas instrucciones entre un 5-10% y añadía soporte para memoria virtual. Podría haber sido el microprocesador más popular entre los ordenadores domésticos, debido a que se presentó en 1982.
El motivo por el cual la primera generación de los Apple Lisa y Macintosh, al igual que el Commodore Amiga 1000 y el Atari ST no utiliza el 68010 y si el 68000 es por el hecho que las primeras muestras funcionales de esta CPU no estuvieron disponibles hasta mediados de 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 el negocio de Motorola, estaba en vender a muy bajo precio la CPU, pero cobrar una mayor cantidad de dinero por los chips periféricos, esto hizo que muchas marcas desarrollaran sus propios “custom chips” o simplemente no adoptaran versiones más avanzadas de los sucesores del 68000, en todo caso, creemos que merecen un repaso.
Los 32 bits llegaron con el 68020
En 1984, Motorola presentó y lanzó su 68020, el verdadero sucesor del 68000 original, cuya principal novedad fue el hecho de adoptar un bus de datos y direcciones de 32 bits, así como una ALU del mismo tamaño. Todo ello junto a un revisado set de instrucciones que reducía el número de ciclos de muchas de ellas y añadía otras nuevas, además de un nuevo modo de direccionamiento. Sin embargo, la menor popularidad del 68020 en comparación con el 68000 original hicieron que pocos programas usaran las nuevas instrucciones.
Su mayor rendimiento se debía, además, a un pipeline en tres etapas, donde captación, decodificación y ejecución de tres instrucciones consecutivas se da al mismo tiempo. No obstante, la otra novedad es la implementación de una caché de instrucciones de 256 bytes. Ambos elementos ayudaban al rendimiento general del 68020. No obstante, fue aquí cuando Motorola empezó a perder fuelle contra Intel en lo que a rendimiento se refiere.
La decepción viene cuando, pese a las mejoras, alcanza 2 MIPS a 16 MHz, por lo que su ventaja es la de poder alcanzar frecuencias más altas, pero no mayor rendimiento por MHz. En todo caso, la menor velocidad de reloj del 80286 lo convertían en una mejor CPU. ¿Su mayor limitación? La falta de una unidad MMU, cosa que si que tenía el rival de Intel.
68030, Motorola empieza a perder fuelle en Workstations
En 1987, Motorola lanzó el 68030, su tercera generación de microprocesadores basados en el set de instrucciones del 68000. Entre sus mejoras se encontraba la implementación, al fin, de la MMU dentro del chip y el añadido de una caché de datos, también de 256 bytes.
No obstante, no son los únicos cambios que sufrió el 68030 para mejorar su rendimiento.
- El tiempo de acceso a la memoria caché de instrucciones se redujo a la mitad, de dos ciclos de reloj a uno solo.
- Nuevo modo de acceso a la memoria, “burst”, el cual puede transmitir a las cachés 16 bytes de datos por ciclo de reloj. La idea es llenar las cachés de datos e instrucciones lo más rápido posible.
- La MMU integrada puede realizar la traducción de direcciones sin que tenga que hacerlo la CPU.
Si se operaba utilizando la caché de datos e instrucciones, el 68030 podía alcanzar los 6 MIPS a una velocidad de 20 MHz. No obstante, si la información se encontraba fuera de la caché su rendimiento por MHz bajaba a un rendimiento casi idéntico al del 68020. En cuanto a su comparación con el 80386, el chip de Intel alcanza los 3.2 MIPS sin caché funcionando a 16 MHz y los 6 MIPS a dicha velocidad usando un chip de caché externo.
La polémica RISC vs. CISC
Se suele asociar mucho la polémica de un set de instrucciones CISC frente a uno RISC con los x86 de Intel; sin embargo, dicha polémica se dio con la familia del 68000, donde debido a la complejidad del set de instrucciones se hacía complicado crear un pipeline más largo que permitiese alcanzar mayores velocidades de reloj y con ello mayor en las estaciones de trabajo.
Si bien tuvieron razón en diagnosticar el problema, cada uno de los clientes de Motorola creó su propia CPU, totalmente incompatible con las demás y con la familia del 68000.
- Apollo desarrolló los microprocesadores PRISM.
- Sun Microsystems desarrolló la arquitectura SPARC.
- Silicon Graphics adoptó los MIPS.
- Apple, que fue la que más tardó, terminó desarrollando el PowerPC, llegando a convencer a la propia Motorola de sumarse al carro junto a IBM.
- 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
- Hitachi, fabricante japonés del chip, lo abandonaría a favor de su arquitectura SuperH.
¿La reacción de Motorola? Desarrollar el 88000, ya que el set de instrucciones del 68000 era tan complejo que vieron una tarea titánica: hacer una versión RISC sin enviar al traste la compatibilidad con los programas. No obstante, el 68000 daría dos campanadas finales antes de desaparecer.
El 68040
A finales de los 80 Motorola ya había perdido una buena parte de su clientela en estaciones de trabajo a favor de arquitecturas con registros de instrucciones RISC, quedándole solo como clientes Apple, Commodore y Atari, cuya cuota de mercado en comparación con el PC era nimia, es más, ninguno de ellos había conseguido superar las ventas del Commodore 64 con ninguno de sus modelos.
La decisión de Motorola fue desarrollar el 68040, el cual amplió su pipeline a 6 etapas y añadió en el chip la unidad de coma flotante dentro del chip. Sin embargo, no fue la única mejora, tanto las cachés de datos como de instrucciones aumentaron a los 4 KB cada una. Todo ello le permitió llegar a los 40 MHz de velocidad máxima. No obstante, dicha CPU no fue muy adoptada. El motivo de ello es que Motorola rompió la compatibilidad hacia atrás del modo supervisor al implementar cambios en la MMU y en la gestión de interrupciones y excepciones. Esto fue un tiro en el pie por parte de Motorola, para empezar, Atari decidió no utilizarlos debido a ello y el caso de Commodore solo se vio en los caros e inalcanzables Amiga 4000, Apple, en cambio, sí que apostó por ellos al usarlos en la serie Macintosh Quadra.
Es la CPU donde se desarrolló Doom
Se puede decir que de la gama 68000, el 68040 fue el salto más grande, pudiendo alcanzar a la velocidad de 25 MHz, un rendimiento de 21 MIPS. En comparación con el 80486, el cual llega a una potencia de 15 MIPS a la misma frecuencia. Aunque lo que más destaca es que el 68040 es la CPU donde John Carmack programó Doom, en concreto utilizando una estación de trabajo de NeXT con el microprocesador funcionando a 40 MHz. No obstante, para aumentar el rendimiento, el 68040 hacía trampa, ya que duplicaba la frecuencia en algunas partes de la CPU.
Lo triste es que pese a la existencia de los Amiga 4000, sus ventas fueron tan pobres que id Software nunca se planteó una versión para dichos sistemas de su clásico. Aunque en ese caso, Carmack le echó también la culpa al sistema de vídeo del Amiga, el cual se había quedado desfasado en comparación con el de otros sistemas. En todo caso, en un PC era necesario un 80486 a 100 MHz, para poder disfrutar al máximo de Doom, algo que solo estaba al alcance de unos pocos.
El 68060, el triste capítulo final de la arquitectura
La situación era cuando menos desoladora, la propia Motorola junto a Apple estaba promocionando los muy superiores PowerPC, Commodore ya no existía y la Atari de la familia Tramiel iba de camino. Por si fuera poco, el problema del corto pipeline, por la complejidad del set de instrucciones, hacía que el 68060 no pasara de los 50 MHz, por lo que no era competitiva frente a su rivales, que eran la primera generación del PowerPC y el Intel Pentium.
Por si fuera poco, la propia Motorola creo una versión RISC para sistemas embebidos del 68000 llamada Coldfire, pero eliminaron buena parte de los modos de direccionamiento y crearon las instrucciones con un código en los opcodes distinto, por lo que si bien heredaban la facilidad de programación del set de instrucciones, nunca fueron compatibles binariamente con los programas de la familia 68000.
Pero, ¿cuál era su rendimiento? En enteros podía ser el doble o triple de potente que el 68040 por la optimización de instrucciones y ser superescalar, pero en coma flotante no hubo cambios. Fue un triste final para la serie 68000, ya que hasta Motorola había perdido la fe en su arquitectura y sus clientes también. No obstante, su impacto en el mundo de la informática fue cuando menos innegable.
Y con esto llegamos al fin de este artículo sobre esta mítica CPU de 16 bits, esperamos que lo hayáis disfrutado y si tenéis alguna duda, corrección o sugerencia, no dudéis en dejarlo en los comentarios.