El COP400 o COP II es una familia de microcontroladores de 4 bits introducida en 1977 por National Semiconductor como un producto de continuación de su microcontrolador PMOS COP original. [1] Los miembros de la familia COP400 son microcomputadoras completas que contienen temporización interna, lógica, ROM, RAM y E/S necesarias para implementar controladores dedicados. [2] Algunos dispositivos COP400 fueron adquiridos por Western Digital como la familia WD4200. [3] [4] En la Unión Soviética, varios microcontroladores COP400 se fabricaron como la serie 1820 (por ejemplo, el COP402 con la designación КР1820ВЕ1 ). [5]
El COP400 se implementa en tecnología CMOS o MOS de compuerta de silicio de canal N. Por lo general, se presenta en encapsulados DIP de 24 o 28 pines . El tiempo de ciclo de instrucción de los miembros más rápidos de la familia es de 4 microsegundos. La familia COP400 ofrece varias configuraciones de memoria y distribución de pines.
Entre los productos notables que utilizan chips de la familia COP400 se incluyen Apple Lisa , los juegos electrónicos Milton Bradley y Mattel , Coleco Head to Head Basketball, Grundy Newbrain y otros.
El COP400 utiliza espacios de memoria separados para ROM y RAM . Las direcciones de ROM tienen un máximo de 11 bits, mientras que las direcciones de datos tienen un máximo de 7 bits.
La memoria de programa consta de una ROM de 512, 1024 o 2048 × 8 bits. Los bytes de la ROM pueden ser instrucciones de programa, datos de programa o punteros de dirección de salto. Debido a las características especiales asociadas con las instrucciones JP y JSRP, la ROM a menudo debe concebirse como organizada en páginas de 64 bytes cada una. Además, debido a las operaciones únicas realizadas por las instrucciones LQID y JID, las páginas de la ROM a veces deben considerarse organizadas en bloques de 256 bytes.
La memoria de datos consta de una RAM de 32, 64 o 128 × 4 bits, organizada como varios registros de datos de 16 dígitos de 4 bits. El direccionamiento de la RAM se implementa mediante el registro B de 6 o 7 bits utilizado como puntero. Los 2 o 3 bits superiores del registro B (Br) seleccionan uno de los 4 u 8 registros de datos y los 4 bits inferiores (Bd) seleccionan uno de los 16 dígitos de 4 bits en el registro de datos seleccionado. El contenido de 4 bits del dígito de la RAM al que apunta el registro B generalmente se carga, se intercambia con o se opera en el registro A.
La configuración de registros que se muestra en el diagrama corresponde a los miembros de la familia COP400 con una cantidad máxima de ROM (2048 × 8 bits) y RAM (128 × 4 bits). Los miembros de la familia con solo 512 o 1024 bytes de ROM tendrán solo un PC de 9 o 10 bits. Aquellos con 64 o 32 ubicaciones de RAM tendrán solo un registro Br de 2 bits. Algunos miembros de la familia de gama baja omiten el registro de pila SC. [6]
El registro A de 4 bits (acumulador) es el registro de origen y destino de la mayoría de las operaciones aritméticas, lógicas y de acceso a la memoria de datos. También se puede utilizar para cargar las porciones Br y Bd del registro B, para cargar e ingresar 4 bits de los datos de enclavamiento Q de 8 bits, para ingresar 4 bits del puerto L de 8 bits y para realizar intercambios de datos con el registro SIO.
Una ALU de 4 bits realiza las funciones aritméticas y lógicas, almacenando los resultados en A. Las operaciones ASC y CASC generan un acarreo en el registro C de 1 bit, que se emplea con mayor frecuencia para indicar un desbordamiento aritmético.
Todo el direccionamiento de la ROM se realiza a través del registro PC de 9, 10 u 11 bits. Su valor binario selecciona uno de los bytes contenidos en la ROM, normalmente la siguiente instrucción del programa. El valor de PC se incrementa automáticamente en 1 antes de la ejecución de la instrucción actual para señalar la siguiente ubicación secuencial de la ROM, a menos que la instrucción actual sea una instrucción de transferencia de control. En este último caso, PC se carga con el valor no secuencial apropiado para implementar la operación de transferencia de control. El PC se desplaza automáticamente para señalar la siguiente página de 64 bytes o bloque de 256 bytes de la memoria del programa. Los 1, 2 o 3 bits superiores de PC también se utilizan en las instrucciones JID y LQID.
Los registros de guardado de subrutinas, SA, SB y SC, implementan tres niveles de subrutinas, lo que proporciona una pila de subrutinas de hardware LIFO (último en entrar, primero en salir). Algunas implementaciones no tienen SC.
No hay números de puerto ni direcciones de memoria asociados con los dispositivos de E/S del COP400. Todos los registros y puertos de E/S físicos están referenciados por el lenguaje ensamblador del COP400 directamente por su nombre.
Casi todos los dispositivos de la familia COP400 implementan lo siguiente: [6]
Hay algunos miembros de gama alta de la familia COP400, como el COP440 y el COP2440, que tienen 40 pines. Estos tienen registros y puertos adicionales: [7]
La familia COP400 está diseñada para tener un código muy compacto. Las instrucciones más utilizadas son de un byte. En algunos casos, existen formas especiales de un byte de instrucciones de dos bytes. Algunas características que se pueden utilizar para hacer que el código objeto sea más compacto son:
Tipos admitidos: el tipo 1 es de gama muy baja, como el COP410. El tipo 2, como el COP420, es el más común. El tipo 3 suele tener recursos para admitir 40 pines, incluso si el paquete no tiene 40 pines. El tipo 4 no se muestra porque no hay evidencia de que se haya producido.
Este código de ejemplo demuestra varias de las funciones de ahorro de espacio en el conjunto de instrucciones:
Los primeros dispositivos COP400 que tienen 28 pines o más admiten una sola interrupción . La línea IN 1 se utiliza como entrada de interrupción. La interrupción se habilita estableciendo el bit 1 del registro EN en 1 con una instrucción LEI. En respuesta a un pulso de baja frecuencia de al menos dos ciclos de instrucción de duración en IN 1, se completan todas las transferencias de instrucciones de control, como JP, y se ejecutan todas las instrucciones LBI secuenciales. Luego, el PC se inserta en la pila de subrutinas y el control se transfiere al controlador de interrupciones en la dirección 0xFF. No se pueden llamar subrutinas en la rutina de servicio de interrupción en dispositivos con una pila de hardware. [6] Curiosamente, los dispositivos posteriores, como el COP440, admiten cuatro fuentes de interrupción y dos rutinas de servicio, pero solo se puede seleccionar una fuente de interrupción a la vez. Las subrutinas se admiten dentro de las rutinas de servicio de interrupción en dispositivos con un puntero de pila.
Aunque la mayoría de los dispositivos COP400 estaban destinados a aplicaciones de gama baja, se crearon varias extensiones de la arquitectura para abordar aplicaciones más exigentes. En 1985, se añadieron a algunos dispositivos CPU duales, una pila más profunda en RAM y espacios de direcciones más grandes. [7]
Las versiones de "CPU dual" del COP400 fueron anunciadas por National Semiconductor en 1981. Estos procesadores de barril de un solo chip contienen dos CPU aparentemente independientes que comparten instrucciones, memoria y la mayoría de los dispositivos de E/S. En realidad, las CPU no son completamente independientes y comparten recursos de hardware de manera similar a los procesadores Intel con tecnología Hyper-Threading (HTT). Al igual que HTT, la versión de CPU dual funciona duplicando ciertas secciones del procesador (las que almacenan el estado arquitectónico) , pero no duplicando los principales recursos de ejecución, como ALU , buses y memoria. Se establecen estados arquitectónicos separados para cada uno de los dos procesadores virtuales con A (acumuladores), B (registros de puntero), C (indicadores de acarreo), N (punteros de pila) y PC (contadores de programa) duplicados. [6]
Cuando se anula el reinicio, ambos procesadores comienzan en la ubicación 0, que contiene una instrucción CLRA; luego, un procesador salta a la ubicación 401 (hexadecimal) seguido un ciclo de instrucción más tarde por el segundo procesador que ejecuta la ubicación 1. Luego, los procesadores ejecutarán alternativamente un byte de código cada uno.
A la frecuencia máxima de reloj, el tiempo de ejecución de instrucciones (instrucción de un solo byte) para cada procesador es de 4 microsegundos, por lo tanto, el tiempo del ciclo de instrucción para cada procesador es el doble de esa cantidad, 8 microsegundos.
Algunas versiones de CPU dual incluyen el COP2440N de 40 pines, el COP2441N de 28 pines y el COP2442N de 24 pines.
Los dispositivos COP400 anteriores incluían una pila de retorno de hardware dedicada de dos o tres niveles. Los dispositivos posteriores, como el COP440, cuentan con una pila de retorno de 4 niveles implementada con un puntero de pila de 2 bits y RAM. Las versiones de CPU dual tienen dos pilas de retorno de 4 niveles independientes implementadas con dos punteros de pila de 2 bits y dos áreas de RAM diferentes.
El conjunto básico de instrucciones COP400 admite direcciones ROM de hasta 11 bits (2048 bytes), mientras que las direcciones de datos tienen un máximo de 7 bits (128 ubicaciones). Los dispositivos denominados del grupo 4 ampliaron el límite de memoria añadiendo instrucciones JMP, JSR y LBI de tres bytes con más bits de dirección. Estos admiten direcciones ROM de 15 bits como máximo (32 768 bytes), mientras que las direcciones de datos tienen un máximo de 9 bits (512 ubicaciones). Los dispositivos que admiten estas instrucciones incluyen COP408, COP484, COP485 y C0P409. No está claro si se fabricó alguno de estos dispositivos del grupo 4.
El microcontrolador T400 es una implementación de código abierto del microcontrolador COP400 escrito en VHDL . Se admiten los dispositivos COP420/421 y COP410L/411L. El T400 está pensado para reemplazar al chip original en los SOC que recrean sistemas heredados. El T400 se ha implementado en varias familias de FPGA . El T400 está disponible bajo la Licencia Pública General GNU . [13]
Existe un emulador MAME de código abierto para la familia COP400 y varios juegos portátiles y calculadoras especiales. [14] [15]