El W65C816S (también 65C816 o 65816 ) es un microprocesador (MPU) de 8/16 bits desarrollado y vendido por Western Design Center (WDC). Introducido en 1983, [1] el W65C816S es una versión mejorada de la MPU de 8 bits WDC 65C02 , en sí misma una mejora CMOS de la venerable MOS Technology 6502 NMOS MPU. El 65C816 era la CPU del Apple IIGS y, en forma modificada, el Super Nintendo Entertainment System .
Información general | |
---|---|
Lanzado | 1983 |
Fabricante (s) común (es) |
|
Actuación | |
Max. Frecuencia de reloj de la CPU | 1 MHz a 14 MHz |
Ancho de datos |
|
Ancho de la dirección | 24 |
Arquitectura y clasificación | |
Conjunto de instrucciones | 6502 |
Instrucciones | 92 |
Especificaciones físicas | |
Paquete (s) | |
Historia | |
Predecesor |
|
El 65 en la designación de la pieza proviene de su modo de compatibilidad 65C02, y el 816 significa que la MPU tiene tamaños de registro seleccionables de 8 y 16 bits . Además de la disponibilidad de registros de 16 bits, el W65C816S cuenta con direccionamiento de memoria extendido a 24 bits , que admite hasta 16 megabytes de memoria de acceso aleatorio , un conjunto de instrucciones mejorado y un puntero de pila de 16 bits , así como varios sistemas eléctricos nuevos. señales para mejorar la gestión del hardware del sistema.
Al reiniciar , el W65C816S se inicia en "modo de emulación", lo que significa que se comporta sustancialmente como un 65C02. A partir de entonces, el W65C816S puede cambiarse al "modo nativo" con una secuencia de dos instrucciones, lo que hace que habilite todas las funciones mejoradas, pero aún así mantenga un grado sustancial de compatibilidad con la mayoría del software 65C02. Sin embargo, a diferencia de la versión PDIP40 del 65C02, que es un reemplazo compatible con pines de su antecesor NMOS, el PDIP40 W65C816S no es compatible con pines con ninguna otra MPU de la familia 6502.
Relacionado con el W65C816S está el W65C802 , que tenía la misma estructura interna y soporte de 16 bits, pero usaba un diseño de 40 pines compatible con el 6502 original. Esto permitió que se usara como reemplazo directo en ciertos roles. Sin embargo, el 65C802 no pudo emitir una dirección completa de 24 bits, lo que lo limitó a 64 kB de memoria. El 65C802 y sus parientes ya no se producen.
Historia
En 1981, Bill Mensch , fundador y director ejecutivo de WDC, comenzó el desarrollo del 65C02 con sus socios de producción, principalmente Rockwell Semiconductor y Synertek . El objetivo principal del esfuerzo del 65C02 era pasar del proceso NMOS del 6502 original al CMOS del 65C02, lo que le permitiría funcionar a niveles de potencia mucho más bajos, en algún lugar entre 1 ⁄ 10 y 1 ⁄ 20 cuando se ejecuta a la misma velocidad de reloj. También se trabajaronvarios códigos de operación nuevosy correcciones de errores en el diseño. [2]
El desarrollo del W65C816S comenzó en 1982 después de que Mensch consultara con Apple Computer sobre una nueva versión de la serie de computadoras personales Apple II que, entre otras cosas, habría mejorado los gráficos y el sonido. Apple quería una MPU que fuera compatible con el software del 6502 que se usaba en el Apple II, pero con la capacidad de utilizar más memoria y de cargar y almacenar palabras de 16 bits. El resultado fue el 65C816, terminado en marzo de 1984, con muestras entregadas tanto a Apple como a Atari en la segunda mitad del año y el lanzamiento completo en 1985. [3] Mensch fue ayudado durante el proceso de diseño por su hermana Kathryn, quien fue la responsable. para parte del diseño del dispositivo.
El mismo proceso también llevó al 65C802, que era idéntico en el interior al 65C816. Ambos se produjeron en las mismas líneas de fabricación y divergieron solo durante las últimas etapas de metalización cuando el chip se estaba conectando a los pines externos. En el 65C802, esos pines tenían el mismo diseño que el 6502 original, lo que permitía que se usara como un reemplazo directo y al mismo tiempo permitía que se usara el procesamiento de 16 bits de la CPU. Sin embargo, como usaba el pinout original, solo tenía 16 pines de direccionamiento y, por lo tanto, solo podía acceder a 64 kB de memoria externa. [4] Normalmente, cuando los fabricantes de hardware diseñaron un proyecto desde cero, utilizaron el 65C816 en lugar del 65C802, lo que provocó que este último se retirara de la producción.
Posteriormente, Apple integró el 65C816 en la computadora Apple IIGS . El diseño básico del 65C816 fue adquirido por GTE , Sanyo y otros desde mediados y finales de la década de 1980 hasta principios de la de 1990.
En la década de 1990, tanto el 65C816 como el 65C02 se convirtieron en un núcleo completamente estático , lo que hizo posible detener completamente el reloj del procesador sin perder datos en ninguno de los registros. Esta característica, junto con el uso de RAM estática asíncrona , hizo posible producir diseños que usaban energía mínima cuando estaban en estado de espera.
A partir de 2019[actualizar], La W65C816S está disponible de WDC en un 40 pin PDIP o PLCC44 paquete, así como un núcleo para ASIC de integración (por ejemplo Winbond serie W55V9x 's de TV Edutainment ICs ). WDC, una empresa de semiconductores sin fábrica, trabaja con varias fundiciones para producir el W65C816S, así como otros productos compatibles. Los procesadores discretos están disponibles a través de varios distribuidores de productos electrónicos. Para los diseñadores que deseen incluir la funcionalidad W65C816S en un ASIC personalizado , WDC ofrece código RTL ( nivel de transferencia de registro ) en Verilog .
Características
Características del WDC 65816:
|
- El diseño CMOS completamente estático ofrece un bajo consumo de energía (300 µ A a 1 MHz ) y una mayor inmunidad al ruido.
- Amplio rango de voltaje operativo : 1.8V a 5.0V ± 5%.
- Amplio rango de frecuencia de funcionamiento , oficialmente 14 MHz máximo a 5 voltios, utilizando una fuente de reloj monofásica (los aficionados han operado con éxito el 65C816 a 20 MHz).
- El modo de emulación permite una compatibilidad sustancial de software con NMOS 6502 y CMOS 65C02, a excepción de los códigos de operación no documentados . Los 256 códigos de operación en el 65C816 son funcionales en ambos modos de operación.
- El direccionamiento de memoria de 24 bits proporciona acceso a 16 MB de espacio de memoria .
- ALU de 16 bits , acumulador (A), puntero de pila (SP) y registros de índice (X e Y).
- Registro de página directa de 16 bits (también conocido como página cero) (DP).
- Registros de banco de datos (DB) y banco de programa (PB) de 8 bits, que generan los bits 16-23 de código de 24 bits y direcciones de datos. Los registros separados de programas y bancos de datos permiten la segmentación del programa y el direccionamiento de datos lineales de 16 MB.
- Salidas de control de dirección de datos válida (VDA) y dirección de programa válida (VPA) para la calificación de memoria, caché dual e implementación de DMA de robo de ciclo .
- Salida de control de extracción vectorial (VPB) para indicar cuándo se está obteniendo un vector de interrupción .
- La entrada de aborto (ABORTB) y el vector asociado admiten reparaciones del procesador de condiciones de error de bus, como fallas de página y violaciones de acceso a la memoria.
- El direccionamiento relativo de pila y registro directo proporciona capacidad para programación reentrante , recursiva y reubicable .
- 24 modos de direccionamiento: 13 modos 6502 originales con 92 instrucciones que utilizan 256 códigos de operación , incluidos la mayoría de los códigos de operación nuevos implementados en el 65C02.
- Instrucciones de copia en bloque, que permiten la copia rápida de estructuras de datos de un área de RAM a otra con un código mínimo.
- Las instrucciones Wait-for-Interrupt (WAI) y Stop-the-Clock (STP) reducen aún más el consumo de energía , disminuyen la latencia de interrupción y permiten la sincronización con eventos externos.
- La instrucción de coprocesador (COP) con vector asociado admite configuraciones de coprocesador, por ejemplo, procesadores de punto flotante
- Instrucción de "escape" (WDM) reservada para futuros códigos de operación de dos bytes y un enlace a diseños futuros. (WDM son las iniciales del diseñador W65C816S William D. Mensch ).
Comparación con modelos anteriores
Dos modos
El 65C816 tiene dos modos de funcionamiento, "modo de emulación", en el que las operaciones de 16 bits son invisibles (los registros de índice están forzados a ocho bits) y el chip parece ser muy similar al 65C02, con los mismos tiempos de ciclo para los códigos de operación y el "modo nativo", que expone todas las características nuevas. La CPU regresa automáticamente al modo de emulación cuando se enciende o se reinicia, lo que le permite reemplazar un 65C02, asumiendo que uno hace los cambios de circuito requeridos para acomodar el diseño de pines diferente. [2]
Registros de 16 bits
El cambio más obvio del 65C816 cuando se ejecuta en modo nativo es la expansión de varios registros de tamaños de 8 bits a 16 bits. Esta mejora afecta al acumulador (A), los registros de índice X e Y y el puntero de pila (SP). No afecta al contador de programa (PC), que siempre ha sido de 16 bits. [5]
Cuando se ejecuta en modo nativo, dos bits en el registro de estado cambian su significado. En el 6502 original, los bits 4 y 5 no se utilizaron, aunque el bit 4 se denomina bandera B (reak). En modo nativo, el bit 4 se convierte en la bandera x y el bit 5 se convierte en la bandera m. Estos bits controlan si los registros de índice (x) y / o el acumulador / memoria (m) tienen un tamaño de 8 o 16 bits. Los ceros en estos bits establecen tamaños de 16 bits, los unos establecen tamaños de 8 bits. Estos bits se fijan en unos cuando el procesador se enciende o se reinicia, pero se pueden cambiar cuando el procesador se cambia al modo nativo. [5]
Puede que no sea inmediatamente obvio por qué uno querría usar los registros ahora de 16 bits en el modo de 8 bits. El cambio al modo de 8 bits utilizando las nuevas instrucciones SEP
(bit SEt en el estado del procesador) y REP
(REset) significa que todas las instrucciones posteriores que accedan a esos registros solo leerán o escribirán un solo byte en lugar de dos. Por ejemplo, si el bit m se establece en 1 cuando LDA $1234
se ejecuta una instrucción, solo se leerá un solo byte en la dirección $ 1234, reduciendo así el número de ciclos necesarios para ejecutar la instrucción. [6] Esto es particularmente útil cuando se trata de datos de caracteres de 8 bits, por ejemplo. [7]
Cuando los tamaños de registro se establecen en 16 bits, el acceso a la memoria accederá a dos bytes contiguos de memoria, al costo de un ciclo de reloj adicional. Además, una instrucción de lectura-modificación-escritura, como ROR
cuando se usa mientras el acumulador está configurado en 16 bits, afectará a dos bytes contiguos de memoria, no a uno. De manera similar, todas las operaciones aritméticas y lógicas serán operaciones de 16 bits. [8]
Direccionamiento de 24 bits
El otro cambio importante en el sistema mientras se ejecuta en modo nativo es que el modelo de memoria se expande a un formato de 24 bits desde el formato original de 16 bits del 6502. Esto se maneja usando dos registros de compensación de 8 bits, el banco de datos Register (DB) y Program Bank Register (PB). En la mayoría de los casos, las direcciones en código permanecen en el formato original de 16 bits, pero los valores en DB y PB se anteponen para formar una dirección de 24 bits en la memoria principal . Esto significa que las instrucciones pueden acceder a datos dentro de un banco de 64 KB , y si es necesario acceder a datos fuera de ese banco, la base de datos debe cambiar o se debe utilizar un direccionamiento "largo", es decir, la especificación de una dirección de 24 bits como operando para la instrucción.
PB determina de qué banco de 64 KB el procesador obtendrá las instrucciones; no hay ningún medio programático por el cual PB pueda cambiarse directamente. Las sucursales y los saltos de 16 bits o las llamadas a subrutinas de 16 bits generalmente se limitan al banco en PB ( JMP(
siempre obtiene la dirección de destino del banco $ 00). Es posible un salto "largo" de 24 bits o una llamada de subrutina, que supera el límite normal de tamaño del programa de 64 KB. [5]
Una adición adicional al conjunto de registros es el Registro de página directo (DP) de 16 bits, que establece la dirección base para lo que antes se llamaba página cero, pero ahora se conoce como página directa. El direccionamiento de página directo usa una dirección de 8 bits, lo que da como resultado un acceso más rápido que cuando se usa una dirección de 16 o 24 bits. Además, algunos modos de direccionamiento que ofrecen indirección solo son posibles en la página directa. En el 65 (C) 02, la página directa son siempre los primeros 256 bytes de memoria, por lo tanto, "página cero". En modo nativo, el 65C816 puede reubicar la página directa (cero) en cualquier lugar de los primeros 64 KB de memoria escribiendo la dirección de inicio en DP. Hay una penalización de acceso de un ciclo si DP no se establece en un límite de página uniforme. [9]
Cambiar entre modos
El modo de funcionamiento actual se almacena en el bit de emulación (E). Habiendo agregado ya los nuevos bits x y m al conjunto anterior de seis banderas en el registro de estado (SR), no quedaban suficientes bits para contener el nuevo bit de modo. En su lugar, se utilizó una solución única en la que el bit de modo se dejaba "invisible", sin poder acceder a él directamente. La nueva XCE
instrucción (eXchange Carry with Emulation) intercambia el valor del bit de emulación con el bit C (arry), bit 0 en el registro de estado. Por ejemplo, si uno quiere ingresar al modo nativo después de que el procesador se haya iniciado, se usaría CLC
CLear el bit Carry y luego XCE
escribirlo en el bit de emulación. [10] Volviendo al modo de emulación 65C02, se utiliza SEC
seguido de XCE
. [7]
Internamente, el 65C816 es un diseño completamente de 16 bits. Los bits myx en SR determinan cómo aparecen los registros de usuario (acumulador e índice) para el resto del sistema. Tras el reinicio, el 65C816 se inicia en el modo de emulación 65C02, en el que myx se establecen en 1 y no se pueden cambiar. Por tanto, los registros aparecen para el resto del sistema como 8 bits. El byte más significativo (MSB) del acumulador (el acumulador B) no es directamente accesible, pero se puede intercambiar con el byte menos significativo (LSB) del acumulador (el acumulador A) utilizando la XBA
instrucción. No existe una operación correspondiente para los registros de índice (.X y .Y).
Al cambiar al modo nativo, el MSB de .X y .Y será cero y el acumulador B no cambiará. Si se borra el bit m en SR, el acumulador B se "agrupará" al acumulador A para formar un registro de 16 bits. Una operación de carga / almacenamiento o aritmética / lógica que involucre el acumulador y / o la memoria será una operación de 16 bits; se requieren dos ciclos de bus para obtener / almacenar un valor de 16 bits.
Si se borra el bit x en SR, ambos registros de índice se establecerán en 16 bits. Si se usa para indexar una dirección, por ejemplo, LDA SOMEWHERE,X
el valor de 16 bits en el registro de índice se agregará a la dirección base para formar la dirección efectiva.
Si se establece el bit m en SR, el acumulador volverá a ser un registro de 8 bits y las operaciones subsiguientes en el acumulador, con algunas excepciones, serán operaciones de 8 bits. El acumulador B conservará el valor que tenía cuando el acumulador estaba funcionando en modo de 16 bits. Las excepciones son las instrucciones que transfieren el registro de página directo (DP) y el puntero de pila (SP) hacia / desde el acumulador. Estas operaciones son siempre de 16 bits de ancho en modo nativo, independientemente de la condición del bit m en el registro de estado.
Si se establece el bit x en SR, no solo los registros de índice volverán a ser de 8 bits, sino que lo que haya en el MSB mientras estaba en el modo de 16 bits se perderá, algo que un programador en lenguaje ensamblador no puede permitirse olvidar. [11]
Aplicaciones
Sistemas basados en variantes 65816:
- Comunicador Bellota
- Apple IIGS
- Super Nintendo Entertainment System : la consola 's Ricoh 5A22 CPU se basa en el 65C816
- Además, más de 30 juegos de Super NES incluyen Nintendo SA1 , un chip coprocesador basado en 65C816, en cada cartucho.
También se utiliza en las mejoras de C-One y SuperCPU para el Commodore 64 .
Ver también
- Interrupciones en procesadores 65xx
Referencias
Citas
- ^ Cronología de microprocesadores (1980-1989)
- ↑ a b Eyes y Lichty , 1986 , p. 42.
- ^ Ojos y Lichty 1986 , p. 44.
- ^ Ojos y Lichty 1986 , p. 45.
- ↑ a b c Eyes y Lichty , 1986 , p. 46.
- ^ Ojos y Lichty 1986 , p. 50.
- ↑ a b Eyes y Lichty , 1986 , p. sesenta y cinco.
- ^ Ojos y Lichty 1986 , p. 52.
- ^ Ojos y Lichty 1986 , p. 48.
- ^ Ojos y Lichty 1986 , p. 64.
- ^ Ojos y Lichty 1986 , p. 51.
Bibliografía
- Ojos, David; Lichty, Ron (1986). Programación del 65816, incluidos los 6502, 65C02, 65802 . Prentice Hall. ISBN 978-0893037895.
Otras lecturas
- 65C816 Hoja de datos ; Centro de Diseño Occidental; 55 páginas; 2018.
enlaces externos
- Página web 65C816 - Western Design Center
- 6502 / 65C02 / 65C816 Conjunto de instrucciones decodificado
- Documentos técnicos 65816 / 65C816 - zophar.net
- Una introducción del programador 6502 al 65816 - Un artículo de Commodore World de Brett Tabke; incluye el resumen del conjunto de instrucciones de CMD
- Investigación de interrupciones del 65C816 : una discusión extensa sobre el procesamiento de interrupciones en el 65C816
Este artículo se basa en material extraído del Diccionario gratuito de informática en línea antes del 1 de noviembre de 2008 e incorporado bajo los términos de "renovación de licencias" de la GFDL , versión 1.3 o posterior.