stringtranslate.com

Código de artículo 65C02

El microprocesador 65C02 de Western Design Center (WDC) es una versión CMOS mejorada del popular 6502 de 8 bits basado en nMOS . Utiliza menos energía que el 6502 original, corrige varios problemas y agrega nuevas instrucciones. El consumo de energía es del orden de 10 a 20 veces menor que el 6502 original funcionando a la misma velocidad; [1] su consumo de energía reducido lo ha hecho útil en funciones de computadora portátil y sistemas de microcontroladores industriales . El 65C02 también se ha utilizado en algunas computadoras domésticas , así como en aplicaciones integradas , incluidos dispositivos implantados de grado médico.

El desarrollo del WDC 65C02 comenzó en 1981 [a] con muestras lanzadas a principios de 1983. [b] El 65C02 fue lanzado oficialmente poco tiempo después. [2] WDC licenció el diseño a Synertek , NCR , GTE Microcircuits y Rockwell Semiconductor . El interés principal de Rockwell estaba en el mercado integrado y solicitó que se agregaran varios comandos nuevos para ayudar en esta función. Estos se copiaron más tarde en la versión base, momento en el que WDC agregó dos nuevos comandos propios para crear el W65C02 . Más tarde, Sanyo también licenció el diseño y Seiko Epson produjo una versión modificada adicional como HuC6280 .

Las primeras versiones utilizaban un encapsulado DIP de 40 pines y estaban disponibles en versiones de 1, 2 y 4 MHz, que igualaban las velocidades de las versiones nMOS originales. Las versiones posteriores se produjeron en encapsulados PLCC y QFP , así como PDIP, y con índices de velocidad de reloj mucho más altos. La versión actual de WDC, la W65C02S-14, tiene un núcleo completamente estático y funciona oficialmente a velocidades de hasta 14 MHz cuando se alimenta a 5 voltios.

Introducción y características

El 65C02 es un microprocesador de 8 bits de bajo costo y propósito general ( registros de 8 bits y bus de datos ) con un contador de programa de 16 bits y un bus de direcciones . El conjunto de registros es pequeño, con un solo acumulador de 8 bits (A), dos registros de índice de 8 bits (X e Y), un registro de estado de 8 bits (P) y un contador de programa de 16 bits (PC). Además del único acumulador, los primeros 256 bytes de RAM, la "página cero" ( a ), permiten un acceso más rápido a través de modos de direccionamiento que utilizan una dirección de memoria de 8 bits en lugar de una dirección de 16 bits. La pila se encuentra en los siguientes 256 bytes, la página uno ($0100 a $01FF), y no se puede mover ni extender. La pila crece hacia atrás con el puntero de pila (S) comenzando en $01FF y decreciendo a medida que la pila crece. [3] Tiene un conjunto de instrucciones de longitud variable , que varía entre uno y tres bytes por instrucción. [1]$0000$00FF

La arquitectura básica del 65C02 es idéntica a la del 6502 original y puede considerarse una implementación de bajo consumo de ese diseño. A 1 MHz, la velocidad más popular para el 6502 original, el 65C02 requiere solo 20 mW, mientras que el original utiliza 450 mW, una reducción de más de veinte veces. [4] El núcleo optimizado manualmente y el bajo consumo de energía tienen como objetivo hacer que el 65C02 sea adecuado para diseños de sistema en chip (SoC) de bajo consumo. [1]

Hay disponible un modelo de descripción de hardware Verilog para diseñar el núcleo W65C02S en un circuito integrado específico de la aplicación (ASIC) o una matriz de puertas programables en campo (FPGA). [5] Como es común en la industria de semiconductores, WDC ofrece un sistema de desarrollo, que incluye una placa de desarrollo , un emulador en circuito (ICE) y un sistema de desarrollo de software. [6]

El W65C02S–14 es la versión de producción a partir de 2023 y está disponible en paquetes  PDIP , PLCC y QFP . La velocidad de reloj máxima oficialmente admitida de Ø2 (primaria) es de 14 MHz cuando se opera a 5 voltios, indicada por el sufijo de número de pieza -14 (los aficionados han desarrollado sistemas caseros 65C02 que funcionan más rápido que la clasificación oficial). La designación "S" indica que la pieza tiene un núcleo completamente estático , una característica que permite que Ø2 se ralentice o se detenga por completo en el estado alto o bajo sin pérdida de datos. [7] Los microprocesadores típicos no implementados en CMOS tienen núcleos dinámicos y perderán el contenido de sus registros internos (y, por lo tanto, se bloquearán) si no se sincronizan continuamente a una velocidad entre algunos valores mínimos y máximos especificados.

Características lógicas generales

Fotografía de un microcontrolador Sitronix ST2064B que muestra el núcleo W65C02S integrado en la esquina superior derecha.

Características lógicas

Características eléctricas

Funciones de cronometraje

El W65C02S puede funcionar con cualquier voltaje de suministro conveniente (V DD ) entre 1,8 y 5 voltios (±5%). La tabla de características de CA de la hoja de datos enumera las características operativas a 5 V a 14 MHz, 3,3 V o 3 V a 8 MHz, 2,5 V a 4 MHz y 1,8 V a 2 MHz. Esta información puede ser un artefacto de una hoja de datos anterior, ya que un gráfico indica que los dispositivos típicos son capaces de funcionar a velocidades más altas que las sugeridas por la tabla de características de CA, y que el funcionamiento confiable a 20 MHz debería lograrse fácilmente con V DD a 5 voltios, suponiendo que el hardware de soporte lo permita.

El soporte del W65C02S para frecuencias de reloj arbitrarias le permite usar un reloj que funcione a una frecuencia ideal para alguna otra parte del sistema, como 13,5 MHz (frecuencia de muestreo de luma digital SDTV), 14,31818 MHz (frecuencia portadora de color NTSC × 4), 14,75 MHz (píxeles cuadrados PAL), 14,7456 (cristal de velocidad en baudios), etc., siempre que V DD sea suficiente para soportar la frecuencia. El diseñador Bill Mensch ha señalado que F MAX se ve afectado por factores externos al chip, como la carga capacitiva en los pines del microprocesador. Minimizar la carga mediante el uso de pistas de señal cortas y la menor cantidad de dispositivos ayuda a aumentar F MAX . Los encapsulados PLCC y QFP tienen menos capacitancia pin a pin que el encapsulado PDIP y son más económicos en el uso del espacio de la placa de circuito impreso .

WDC ha informado que las realizaciones FPGA del W65C02S se han operado con éxito a 200 MHz. [ cita requerida ]

Comparación con el NMOS 6502

Arquitectura básica

Aunque el 65C02 puede considerarse en su mayor parte como un 6502 de bajo consumo, también corrige varios errores encontrados en el original y agrega nuevas instrucciones, modos de direccionamiento y características que pueden ayudar al programador a escribir programas más pequeños y de ejecución más rápida. Se estima que el programa promedio en lenguaje ensamblador 6502 puede hacerse entre un 10 y un 15 por ciento más pequeño en el 65C02 y ver una mejora similar en el rendimiento, en gran parte a través de accesos a memoria evitados mediante el uso de menos instrucciones para realizar una tarea determinada. [1]

Instrucciones no documentadas eliminadas

El 6502 original tiene 56 instrucciones que, cuando se combinan con diferentes modos de direccionamiento, producen un total de 151 códigos de operación de los 256 patrones de códigos de operación de 8 bits posibles. Los 105 códigos de operación restantes no utilizados no están definidos, y el conjunto de códigos con 4 bits de orden inferior con 3, 7, B o F queda totalmente sin usar, mientras que el código con 2 de orden inferior tiene solo un único código de operación. [8]

En el 6502, algunos de estos códigos sobrantes realmente realizan cálculos. Debido a la forma en que funciona el decodificador de instrucciones del 6502, simplemente al configurar ciertos bits en el código de operación se realizan partes del procesamiento de la instrucción. Algunos de estos códigos de operación bloquean inmediatamente el procesador, mientras que otros realizan funciones útiles e incluso algunos programadores les dieron mnemotécnicos de ensamblador no oficiales. [9]

El 65C02 agrega nuevos códigos de operación que utilizan algunas de estas ranuras de instrucciones no documentadas anteriormente. Por ejemplo, se utiliza $FF para la nueva BBSinstrucción. Las que permanecen realmente sin usar son equivalentes a NOPs. Los programas 6502 que utilizan esos códigos de operación no funcionarán en el 65C02. [1]

Corrección de errores

El 6502 original tenía varias erratas cuando se lanzó inicialmente.

Las primeras versiones del procesador de 1975 no tenían RORinstrucción (rotar a la derecha), aunque sí tenían ROLinstrucción (rotar a la izquierda). Esta fue una elección de diseño deliberada por parte de MOS Technology, ya que se consideró que la implementación RORera demasiado costosa en el área de chips para los beneficios que proporcionaba. [10] Sin embargo, los clientes se quejaron de la falta de instrucción RORy se implementó en partes fabricadas a partir de junio de 1976. La ausencia de instrucción RORafectó especialmente el rendimiento de la normalización de mantisa en rutinas matemáticas de punto flotante. [11] La gran mayoría de las máquinas que utilizan el procesador admiten esta instrucción. [12]

Un error que está presente en todas las variantes NMOS del 6502 involucra la instrucción de salto cuando se utiliza direccionamiento indirecto . En este modo de direccionamiento, la dirección de destino de la JMPinstrucción se obtiene de la memoria, el vector de salto, en lugar de ser un operando de la JMPinstrucción. Por ejemplo, JMP ($1234)obtendría el valor en las ubicaciones de memoria $1234 (byte menos significativo) y $1235 (byte más significativo) y cargaría esos valores en el contador de programa , lo que luego haría que el procesador continuara la ejecución en la dirección almacenada en el vector.

El error aparece cuando la dirección del vector termina en $FF , que es el límite de una página de memoria . En este caso, obtendrá el byte más significativo de la dirección de destino de $00 de la página original en lugar de $00 de la nueva página. Por lo tanto, obtendría el byte menos significativo de la dirección de destino en $12FF y el byte más significativo de la dirección de destino de $1200 en lugar de $1300 . El 65C02 corrigió este problema. [1]JMPJMP ($12FF)

Más que un error, se trata de un descuido: el estado del indicador (D)ecimal en el registro de estado del NMOS 6502 no está definido después de un reinicio o una interrupción . Esto significa que los programadores tienen que establecer el indicador en un valor conocido para evitar errores relacionados con operaciones aritméticas. Como resultado, se encuentra una CLDinstrucción (CLear Decimal) en casi todos los controladores de interrupciones del 6502 , así como al principio del código de reinicio. El 65C02 borra automáticamente este indicador después de colocar el registro de estado en la pila en respuesta a cualquier interrupción o en respuesta a un reinicio de hardware, lo que coloca al procesador nuevamente en modo aritmético binario. [13]

Durante la aritmética en modo decimal , el NMOS 6502 actualizará los indicadores (N)egative, o(V)erflow y (Z)ero para reflejar el resultado de la aritmética binaria subyacente, es decir, los indicadores reflejan un resultado calculado antes de que el procesador realice la corrección decimal. Por el contrario, el 65C02 establece estos indicadores de acuerdo con el resultado de la aritmética decimal, al costo de un ciclo de reloj adicional por instrucción aritmética. [13]

Al ejecutar una instrucción de lectura-modificación-escritura (RMW), como , todas las variantes de NMOS realizarán una doble escritura en addr , primero reescribiendo el valor actual encontrado en addr y luego escribiendo el valor modificado. Este comportamiento puede generar errores difíciles de resolver si addr es un registro de hardware. Esto puede ocurrir si el hardware está observando los cambios en el valor en el registro y luego realiza una acción; en este caso, realizará dos acciones, una con el valor original y luego otra vez con el nuevo valor. El 65C02, en cambio, realiza una doble lectura de addr , seguida de una sola escritura.INC addr

Al realizar el direccionamiento indexado, si la indexación cruza un límite de página, todas las variantes de NMOS leerán desde una dirección no válida antes de acceder a la dirección correcta. Al igual que con una instrucción RMW, este comportamiento puede causar problemas al acceder a los registros de hardware a través de la indexación. El 65C02 solucionó este problema al realizar una lectura ficticia del código de operación de la instrucción cuando la indexación cruza un límite de página. Sin embargo, esta corrección introdujo un nuevo error [ cita requerida ] que ocurre cuando la dirección base está en un límite de página par (lo que significa que la indexación nunca cruzará a la siguiente página). Con el nuevo error, se realiza una lectura ficticia en la dirección base antes de la indexación, de modo que LDA $1200,Xse realizará una lectura ficticia en $1200 antes de que el valor de X se agregue a $1200 . Nuevamente, si se indexa en direcciones de registro de hardware, este error puede resultar en un comportamiento indefinido.

Si un NMOS 6502 está obteniendo un código de operación BRK (interrupción de software) al mismo tiempo que se produce una interrupción de hardware, se ignorará la BRK mientras el procesador reacciona a la interrupción de hardware. El 65C02 maneja correctamente esta situación al atender la interrupción y luego ejecutar la BRK.

Nuevos modos de direccionamiento

El 6502 tiene dos modos de direccionamiento indirecto que desreferencian a través de direcciones de 16 bits almacenadas en la página cero:

Una desventaja de este modelo es que si no se necesita indexación pero la dirección está en la página cero, uno de los registros de índice debe establecerse en cero y usarse en una de estas instrucciones. El 65C02 agregó un modo de direccionamiento indirecto no indexado LDA ($10)a todas las instrucciones que usaban modos indirectos indexados e indirectos indexados, liberando los registros de índice. [14]

JMPLa instrucción del 6502 tenía un modo de direccionamiento único (entre las instrucciones del 6502) conocido como "absolutamente indirecto" que leía un valor de 16 bits de una dirección de memoria dada y luego saltaba a la dirección en ese valor de 16 bits. Por ejemplo, si la ubicación de memoria $A000 contiene $34 y $A001 contiene $12, leería esos dos bytes, construiría el valor $1234 y luego saltaría a esa ubicación.JMP ($A000)

Un uso común del direccionamiento indirecto es construir tablas de ramificación , una lista de puntos de entrada para subrutinas a las que se puede acceder usando un índice. Por ejemplo, un controlador de dispositivo podría enumerar los puntos de entrada para OPEN, CLOSE, READ, etc. en una tabla en $A000 . es la tercera entrada, indexada a cero, y cada dirección requiere 16 bits, por lo que para llamar a uno se usaría algo similar a . Si el controlador se actualiza y el código de subrutina se mueve en la memoria, cualquier código existente seguirá funcionando siempre que la tabla de punteros permanezca en $A000 .READREADJMP ($A004)

El 65C02 agregó el nuevo modo "indexado absoluto indirecto" que facilitó el uso de tablas de ramificación. Este modo agregó el valor del registro X a la dirección absoluta y tomó la dirección de 16 bits de la ubicación resultante. Por ejemplo, para acceder a la READfunción de la tabla anterior, se almacenaría 4 en X, luego JMP ($A000,X). Este estilo de acceso simplifica el acceso a las tablas de ramificación ya que se utiliza una única dirección base junto con un desplazamiento de 8 bits. [14] Lo mismo se podía lograr en la versión NMOS utilizando el modo indirecto indexado, pero solo si la tabla estaba en la página cero, un recurso limitado. Permitir que se construyeran fuera de la página cero no solo redujo la demanda de este recurso, sino que también permitió que las tablas se construyeran en ROM.

Instrucciones nuevas y modificadas

Además de los nuevos modos de direccionamiento, el "modelo base" 65C02 también agregó un conjunto de nuevas instrucciones. [15]

Instrucciones de manipulación de bits

Tanto WDC como Rockwell aportaron mejoras a las funciones de prueba y manipulación de bits en el 65C02. WDC agregó nuevos modos de direccionamiento a la instrucción BIT que estaba presente en el 6502, así como dos nuevas instrucciones para la manipulación conveniente de campos de bits, una actividad común en los controladores de dispositivos.

BITEn el 65C02 se añade el modo inmediato, la página cero indexada por X y el direccionamiento absoluto indexado por X. [15] El direccionamiento en modo inmediato es particularmente conveniente porque es completamente no destructivo. Por ejemplo:

LDA $1234
BIT #%00010000

puede usarse en lugar de:

LDA $1234
AND #%00010000

La ANDoperación cambia el valor del acumulador, por lo que se pierde el valor original cargado desde $1234. El uso BITdeja el valor del acumulador sin cambios, por lo que el código posterior puede realizar pruebas adicionales contra el valor original, evitando tener que volver a cargar el valor desde la memoria.

Además de las mejoras de la BITinstrucción, WDC agregó dos instrucciones diseñadas para manipular convenientemente los campos de bits:

Una máscara en el acumulador ( .A) se combina lógicamente con la memoria en addr , cuya ubicación puede ser la página cero o absoluta. El indicador Z en el registro de estado se condiciona de acuerdo con el resultado del AND lógico; no se ven afectados otros indicadores del registro de estado. Además, los bits en addr se activan (TSB) o se borran (TRB) de acuerdo con la máscara en .A. TSB realiza una operación lógica ORdespués de la operación lógica ANDy almacena el resultado de la operación lógica ORen addr , mientras que TRB almacena los resultados de la operación lógica ANDen addr . En ambos casos, el indicador Z en el registro de estado indica el resultado de antes de que se cambie el contenido de addr . TRB y TSB reemplazan así una secuencia de instrucciones, combinando esencialmente la instrucción con pasos adicionales para guardar los cambios computacionales, pero de una manera que informa el estado del valor afectado antes de que se cambie. [1].A AND addrBIT

Los cambios de Rockwell añadieron más instrucciones de manipulación de bits para configurar y probar directamente cualquier bit, y combinar la prueba, el borrado y la bifurcación en un único código de operación. Las nuevas instrucciones estaban disponibles desde el principio en la familia R65C00 de Rockwell, [19] pero no formaban parte de la especificación 65C02 original y no se encontraban en las versiones realizadas por WDC o sus otros licenciatarios. Estas se copiaron posteriormente en el diseño de referencia y estuvieron disponibles en versiones posteriores de WDC.

Las instrucciones específicas de Rockwell son:

RMB y SMB se utilizan para borrar (RMB) o establecer (SMB) bits individuales en un campo de bits, cada uno reemplazando una secuencia de tres instrucciones. Como RMB y SMB son solo direcciones de página cero, estas instrucciones tienen una utilidad limitada y son principalmente valiosas en sistemas en los que los registros de dispositivo están presentes en la página cero. [ cita requerida ] El componente bit# de la instrucción a menudo se escribe como parte de la mnemotecnia, como que SMB1 $12establece el bit 1 en la dirección de página cero $12. Algunos ensambladores tratan el bit# como parte del operando de la instrucción, por ejemplo, , que tiene la ventaja de permitir que se lo reemplace por un nombre de variable o un número calculado. [16]SMB 1,$12
Se aplican las mismas limitaciones y direcciones de página cero que en RMB y SMB, pero se pasa a addr si el bit seleccionado del byte de página cero zp está limpio (BBR) o activado (BBS). Al igual que con RMB y SMB, el componente bit# de la instrucción se escribe a menudo como parte de la mnemotecnia, como which se pasa a la etiqueta de dirección addr si el bit 1 del byte en la dirección de página cero $12 está activado. Algunos ensambladores tratan al bit# como parte del operando de la instrucción, por ejemplo, , lo que tiene la ventaja de permitir que se lo reemplace por un nombre de variable o un número calculado. Al igual que en el caso de RMB y SMB, BBR y BBS reemplazan una secuencia de tres instrucciones. [16]BBS1 $12,addrBBS 1,$12,addr

Modos de bajo consumo

Además de los nuevos comandos anteriores, WDC también agregó las instrucciones STPy WAIpara admitir modos de bajo consumo.

STP, Detener el procesador, detenía todo el procesamiento hasta que se emitía un reinicio de hardware. Esto se podía utilizar para poner un sistema en "suspensión" y luego reactivarlo rápidamente con un reinicio. Normalmente, esto requeriría algún sistema externo para mantener la memoria principal y no se usaba mucho.

WAITuvo un efecto similar, entrando en modo de bajo consumo, pero esta instrucción despertó al procesador nuevamente al recibir una interrupción. Anteriormente, manejar una interrupción generalmente implicaba ejecutar un bucle para verificar si se había recibido una interrupción, a veces conocido como " girar ", verificar el tipo cuando se recibe una y luego saltar al código de procesamiento. Esto significaba que el procesador estaba funcionando durante todo el proceso, incluso cuando no se producían interrupciones.

En cambio, en el 65C02, el código de interrupción podía escribirse con un WAIseguido inmediatamente por un JSRo JMPen el controlador. Cuando WAIse encontraba el, el procesamiento se detenía y el procesador pasaba al modo de bajo consumo. Cuando se recibía la interrupción, procesaba inmediatamente el JSRy manejaba la solicitud.

Esto tenía la ventaja adicional de mejorar ligeramente el rendimiento. En el caso del giro, la interrupción podría llegar en medio de una de las instrucciones del bucle y, para permitir que se reinicie después de regresar del controlador, el procesador pasa un ciclo para guardar su ubicación. Con WAI, el procesador ingresa al estado de bajo consumo en una ubicación conocida donde se garantiza que todas las instrucciones se completarán, por lo que cuando llega la interrupción, no es posible que interrumpa una instrucción y el procesador puede continuar de manera segura sin pasar un ciclo guardando el estado.

65SC02

El 65 SC 02 es una variante del WDC 65C02 sin instrucciones de bits. [20] [21]

Usos notables del 65C02

Computadoras domésticas

Consolas de videojuegos

Otros productos

Véase también

Notas

  1. ^ Algunas fuentes, incluidas versiones anteriores de este artículo, afirman que 1978 fue la fecha en la que Bill Mensch, el diseñador principal, fundó WDC. En un artículo de 1984, Mensch afirma específicamente que 1981 fue la fecha de inicio.
  2. ^ El artículo de Wagner de junio de 1983 menciona que estuvo disponible durante "varios meses". Teniendo en cuenta los retrasos habituales en las publicaciones en esa época, esto podría datarlo a fines de 1982. Otra fuente apunta a 1980, véase la página de discusión.

Referencias

Citas

  1. ^ abcdefg Wagner 1983, pág. 204.
  2. ^ "Softalk". Softalk Publishing . Vol. 3, núm. 10. Junio ​​de 1983. pág. 199. Consultado el 24 de mayo de 2022 .
  3. ^ Koehn, Philipp (2 de marzo de 2018). "Pila 6502" (PDF) .
  4. ^ Taylor y Watford 1984, pág. 174.
  5. ^ "Proyectos de CPU 6502 en HDL (para FPGA)".
  6. ^ "Placa de desarrollo W65C02DB".
  7. ^ “W65C02S-14”.
  8. ^ Parker, Neil. "El conjunto de instrucciones 6502/65C02/65C816 descifrado". Página de Neil Parker sobre Apple II .
  9. ^ Vardy, Adam (22 de agosto de 1995). "Instrucciones adicionales de la CPU de la serie 65XX".
  10. ^ El mito de la rotación a la derecha del 6502
  11. ^ "ROR" en Microsoft BASIC para 6502
  12. ^ Archivo:MCS650x Conjunto de instrucciones.jpg
  13. ^ ab "Diferencias entre NMOS 6502 y CMOS 65c02" . Consultado el 27 de febrero de 2018 . Los indicadores N, V ​​y Z eran incorrectos después de la operación decimal (pero C estaba bien).
  14. ^ ab Clark, Bruce. "Códigos de operación 65C02".
  15. ^ abc Wagner 1983, pág. 200.
  16. ^ abcd Wagner 1983, pág. 203.
  17. ^ Wagner 1983, págs. 200-201.
  18. ^ "Hoja de datos del W65C02S" (PDF) .
  19. ^ Wagner 1983, pág. 199.
  20. ^ GTE Microcircuits Date Book. GTE Microcircuits. 1984. pág. 1-3 . Consultado el 2 de mayo de 2024 .
  21. ^ Zaks, Rodnay (1983). Programando el 6502. Sybex. pag. 348.ISBN 0895881357.
  22. ^ "8-El Apple IIc". Historia del Apple II . 2010-06-23 . Consultado el 2023-10-31 .
  23. ^ "BBC Master Acorn Computer". www.old-computers.com . Consultado el 31 de octubre de 2023 .
  24. ^ "Tecnología de video LASER 128 / 128EX / 128EX2" www.old-computers.com . Consultado el 31 de octubre de 2023 .
  25. ^ "HuC6280 - Píxeles arcaicos".

Bibliografía

Lectura adicional

Enlaces externos