# Motorola 68000

El Motorola 68000 (MC68000) es un microprocesador CISC 16/32 -bit diseñado y comercializado por Motorola (actualmente producido por Freescale). Introducido en 1979, con la tecnología HMOS, fue el primer miembro de la exitosa familia de microprocesadores m68k de 32 bits, por lo general el software creado para este procesador es compatible con las versiones futuras del resto de la línea a pesar de que esta primera versión está limitada a un ancho de bus externo de 16-bit. Después de más de cuatro décadas en producción, la arquitectura 68000 todavía está en uso.
Debe su nombre al número de transistores de los que se compone, este microprocesador ha sido utilizado, entre otros, en los Commodore Amiga, los Atari ST, los primeros Macintosh, en Sharp X68000 y las primeras PCB de videojuegos de recreativas de Capcom. El MC68000 fue lanzado al mercado en 1980 y es el primero de una familia de microprocesadores que está formada por el Motorola 68010, Motorola 68020, Motorola 68030, Motorola 68040 y el Motorola 68060. Esta familia de procesadores a menudo es designada por el término genérico 680x0, m68k, 68k o familia 68000. Motorola desarrolló también a un sucesor de los 680x0: el Coldfire.

## Historia

Los 68000 surgieron del proyecto MACSS (Motorola Advanced Computer System on Silicon, Sistemas de Computación Avanzadas en Silicio de Motorola), iniciado en 1976 para desarrollar una arquitectura totalmente nueva sin mantener la compatibilidad hacia los anteriores procesadores. Sería el hermano de mayor potencia que complementara la línea de productos de 8 bits 6800 en lugar de diseñar una línea compatible. Al final, el 68000 fue provisto de un protocolo de bus con modo de compatibilidad para los dispositivos periféricos de la línea 6800, y una versión con un bus de 8 bits de datos fue producida. Sin embargo, los diseñadores se centraron principalmente en el futuro, o la compatibilidad hacia delante, lo que dio la plataforma M68K una ventaja frente posteriores arquitecturas de 32 bits en el conjunto de instrucciones. Por ejemplo, los registros de la CPU eran de 32 bits de ancho, aunque son pocas las estructuras autónomas en el procesador en sí funcionan en 32 bits a la vez. El equipo MACSS estuvo muy fuertemente infuenciado por el diseño de procesadores para minicomputadoras, tales como el PDP-11 y los sistemas VAX, que tienen un microcódigo similar.

## Arquitectura

El 68000 está basado en dos bancos de 8 registros de 32 bits. Un banco es de datos (Dn) y el otro de punteros (An). Además contiene un contador de programa de 32 bits y un registro de estado de 16 bits, Siendo su parte alta el "System Byte" y la parte baja el "User Byte".
Los registros de datos (D0 a D7) se pueden usar como registros de 32 bits (.l), 16 bits (.w) y 8 bits (.b). Cualquiera de ellos puede usarse como acumulador, índice o puntero.
Realizado en tecnología HMOS y posee 64 pines sin multiplexación de señales.
Los registros de direcciones (punteros) son muy parecidos a los de datos, pero no pueden usarse como bytes y las operaciones con ellos no afectan al acarreo para poder efectuar cálculos con direcciones entre cálculos con datos. El registro A7 es el puntero de la pila (Stack Pointer) y está duplicado, habiendo un stack para el modo usuario y otro para el modo supervisor.
Contiene dos ALUs diferentes, para operar con datos y direcciones independiente y simultáneamente.

## Organización interna
### Modelo de memoria

Se organiza mediante el mapa de memoria física y el mapa de memoria funcional.

### Modelo de registros

Todos son de 32 bits, y son los siguientes:
* 8 registros de datos (D0/D7).
* 8 registros de direcciones (A0/A7): el registro A7 (SP) está desdoblado en dos registros independientes (puntero de pila de supervisor o SSP y el puntero de pila de usuario o USP).
* 1 contador de programa o PC.
* 1 registro de estado o SR: está dividido en dos bytes: el byte de usuario (CCR) y el byte de supervisor (es un recurso privilegiado, pues solo se puede leer y escribir en modo supervisor; en modo usuario tan solo se puede leer. En caso de ser modificado en el último caso, el microprocesador salta a una ISR de violación de privilegio).
** El byte de supervisor lo constituyen 8 bits, de los cuales 3 son la máscara de interrupciones, el bit S o de supervisor (indica si está en modo supervisor o modo usuario) y el bit T o modo de traza.

### Modos de direccionamiento

Acepta los siguientes modos de direccionamiento:
* Implícito (o inherente).
* Inmediato.
** Inmediato rápido.
* Absoluto:
** Absoluto largo.
** Absoluto corto.
* Directo a registro.
** Directo a registro de datos.
** Directo a registro de direcciones.
* Indirecto.
** Indirecto con postincremento.
** Indirecto con predecremento.
** Indirecto con desplazamiento.
*** Indirecto con índice y desplazamiento.
* Relativo a PC con desplazamiento.
** Relativo a PC con índice y desplazamiento.

## Organización externa
### Pines del MC68000

* Buses:
** Bus de direcciones (A1/A23): característica de ponerse en alta impedancia. Solo señales de salida. El bit A0 no sale al exterior, sino que se desdobla en dos señales: UDS y LDS, ambas activas en baja, para la selección de una palabra y de un byte par o impar.
** Bus de datos (D0/D15): también tiene la característica de alta impedancia, y es bidireccional (tanto entrada como salida).
* De control:
** Control de bus asíncrono (AS', R/W', UDS', LDS' y DTACK').
** Control de periféricos (E, VPA' y VMA'): $E=CLK/10$.
** Control del arbitraje de bus (BR', BG' y BGACK').
** Control de interrupciones (IPL0', IPL1', IPL2' e IPL3').
** Control de espacio de direcciones (FC0, FC1 y FC2).
** Control del sistema (RESET, HALT y BERR).
* Otros:
** Reloj (CLK): con un ciclo de trabajo del 50 %.
** Alimentación y masa (VCC y GND): $VCC-GND=5V$. Durante la operación normal se debe prever un requerimiento instantáneo de corriente de hasta 1,5A.

## Excepciones en el MC68000

Este microprocesador tiene tres estados: estado normal, estado de parada y estado de excepción. Saltará al último de ellos al recibir tanto señales externas como internas. Sigue un modelo de excepciones vectorizada, mediante la cual a cada excepción se le asocia un número de vector de 1 byte, fijo para cada excepción, excepto para las interrupciones externas. Este número se multiplica por 4 y se obtiene la dirección del vector de excepción en memoria, que ocupan 32 bits y están en memoria de datos del supervisor, excepto para el reset, que ocupa el doble (64 bits) y está en memoria de programa de supervisor. Todas se agrupan en una tabla (llamada Tabla de Vectores de Interrupción), y se sitúa en los primeros 256 bytes de memoria.

### Señales externas

* Debida a una señal de RESET, que inicializa el microprocesador.
* Señal de BERR, que indica un error en el bus y salta a la ISR de gestión de errores en el bus.
* Interrupciones: petición de una interrupción, a través de los pines IPL0', IPL1', IPL2' e IPL3'. El periférico para pedir una interrupción, si es vectorizado, deposita el vector durante el ciclo de reconocimiento de interrupción.

### Señales internas

* Error de dirección: indica un direccionamiento inválido, como uno impar de palabras (Word).
* Una instrucción ilegal o no válido.
* Una división por cero (en el nemónico de división DIVU o DIVS).
* Durante la comprobación de rangos (CHK).
* Detectando un desbordamiento.
* En la ejecución de una instrucción privilegiada en modo usuario.
* Durante la ejecución paso a paso.
* Excepción incondicional.

## Periféricos del MC68000

MOTOROLA presentó junto con el microprocesador una gama de periféricos orientados a crear un sistema completo:
* 68881: coprocesador matemático.
* 68452: controlador de buses.
* 68454: controlador de disco.
* 68681: comunicación en serie.
* 68451: MMU.
* 68450: DMA.
La compatibilidad con los periféricos de su antecesor, el MC6800, fue mantenida, como por ejemplo con la VIA6522 (comunicación en paralelo mediante puertos) y, además, realizó esfuerzos para mantener la compatibilidad con dispositivos de otros fabricantes y colaboró en el protocolo VME de IEEE.

## Utilización del procesador 68000
### Por Apple

Apple utilizó los procesadores 68000 en el Lisa y después en los primeros Macintosh (Macintosh 128, Mac 512, Mac Plus, Mac SE y Classic).
Los Macintosh siguientes (serie LC) utilizaron procesadores 68020, posteriormente los Macintosh IIcx, IIci, IIfx, LCIII y SE/30 utilizaron los 68030.
Por último, el Quadra y último LC (LC475, LC630) tuvieron procesadores 68040 (estos últimos LC utilizaban una versión sin unidad de coma flotante denominada 68LC040).
Con la llegada de la nueva generación de Macintosh, conocidos bajo el nombre de Power Macintosh, Apple dotó a sus máquinas de procesadores PowerPC, fabricados por Motorola e IBM.

### Por Atari

Atari en su gama Atari ST. Los siguientes modelos Atari TT030 y Atari Falcon incorporaban un 68030.

### Por Commodore

Commodore utilizó los procesadores 68000 en el primer modelo de Amiga, el Amiga 1000, y más tarde en sus sucesores Amiga 500, Amiga 2000 y Amiga 600. También fue utilizado en el CDTV, la incursión de Commodore en el vídeo digital interactivo doméstico.
Posteriores modelos como el Amiga 3000, Amiga 1200, Amiga 4000 y CD32 utilizaron distintos procesadores de la familia, como el 68020, 68030 y 68040.

### Por Sharp

Sharp en sus computadores X68000 usaba los núcleos 68000 y 68030 aunque este último es de la Gama X68030.

### Por Sinclair

Sinclair en el Sinclair QL utiliza la variante 68008, con un bus de 8 bits.

### Por Sega

Sega en sus videoconsolas Mega Drive y Mega CD, como procesador principal, y en la Sega Saturn como procesador de sonido, además de en toda una gama de placas arcade (Sega System 16, etc)

### Por Silicon Graphics

Silicon Graphics en sus estaciones de trabajo, antes de pasarse a los microprocesadores MIPS.

### Por SNK

SNK para la videoconsola Neo Geo.

### Por Sun Microsystems

Sun Microsystems para sus estaciones de trabajo, antes de pasarse a los microprocesadores SPARC.

### Por Texas Instruments

Para sus calculadoras TI-89, TI-89 Titanium, TI-92, TI-92+ y Voyage 200.

### Por NeXT

Las máquinas NeXT utilizaban procesadores 68030 y 68040.

### Por Palm

El procesador Dragonball de la primera generación de PDAs de Palm (y de otros dispositivos bajo PalmOS producidos por Handspring, IBM, Sony, TRGPro, Qualcomm, Symbol...) se deriva del 68000. Los PDAs de Palm más recientes utilizan procesadores ARM.
* Producido únicamente en el año 1989.

### Segundas fuentes

Motorola ofreció acuerdos de segunda fuente muy asequibles, poniendo como única condición que la otra parte desarrollase algún dispositivo nuevo para la familia, normalmente periféricos. Muchas compañías cumplían este requisito renombrando dispositivos de sus propias familias. Esto contribuyó enormemente a la amplia difusión del 68000, llegando a ser un estándar de la industria.
Las siguientes son algunas compañías que fabricaron el 68000:
* Hitachi
* Mostek (Aburrido por las exigencias de Intel para la licencia del 8086)
* SGS-Thomsom
* Philips
* Datos: Q667808
* Multimedia: Motorola 68000 / Q667808