Tecnología MOS 6502 - MOS Technology 6502

Tecnología MOS 6502
MOS 6502AD 4585 top.jpg
Un procesador MOS Technology 6502 en un paquete de plástico DIP-40 . El código de fecha de cuatro dígitos indica que se realizó en la semana 45 (noviembre) de 1985.
Información general
Lanzado 1975 ; Hace 46 años ( 1975 )
Fabricante (s) común (es)
Rendimiento
Max. Frecuencia de reloj de la CPU 1 MHz a 3 MHz
Ancho de datos 8
Ancho de la dirección dieciséis
Arquitectura y clasificación
Conjunto de instrucciones MOS 6502
Instrucciones 56
Especificaciones físicas
Transistores
Paquete (s)
Historia
Predecesor
Sucesor

El MOS Technology 6502 (generalmente pronunciado "sesenta y cinco-oh-dos" o "seis-cinco-oh-dos") es un microprocesador de 8 bits que fue diseñado por un pequeño equipo dirigido por Chuck Peddle para MOS Technology . El equipo de diseño había trabajado anteriormente en Motorola en el proyecto Motorola 6800 ; el 6502 es esencialmente una versión simplificada, menos costosa y más rápida de ese diseño.

Cuando se introdujo en 1975, el 6502 era el microprocesador menos costoso del mercado por un margen considerable. Inicialmente se vendió por menos de una sexta parte del costo de los diseños de la competencia de compañías más grandes, como el 6800 o Intel 8080 . Su introducción provocó una rápida disminución de los precios en todo el mercado de procesadores. Junto con el Zilog Z80 , desató una serie de proyectos que dieron como resultado la revolución de las computadoras domésticas de principios de la década de 1980.

Las consolas de videojuegos y computadoras populares , como la Atari 2600 , la familia Atari de 8 bits , Apple II , Nintendo Entertainment System , Commodore 64 , Atari Lynx , BBC Micro y otras, usan la 6502 o variaciones del diseño básico. Poco después de la introducción del 6502, Commodore International compró directamente MOS Technology y continuó vendiendo el microprocesador y las licencias a otros fabricantes. En los primeros días del 6502, fue la segunda proviene de Rockwell y Synertek , y más tarde licencia a otras compañías.

En su forma CMOS (el 65C02 , que fue desarrollado por el Western Design Center ), la familia 6502 continúa siendo ampliamente utilizada en sistemas integrados , con volúmenes de producción estimados en cientos de millones.

Historia y uso

Orígenes en Motorola

Placa de demostración Motorola 6800 construida por Chuck Peddle y John Buchanan en 1974

El 6502 fue diseñado por muchos de los mismos ingenieros que habían diseñado la familia de microprocesadores Motorola 6800 . Motorola inició el proyecto del microprocesador 6800 en 1971 con Tom Bennett como arquitecto principal. El diseño del chip comenzó a finales de 1972, los primeros 6800 chips se fabricaron en febrero de 1974 y la familia completa se lanzó oficialmente en noviembre de 1974. John Buchanan fue el diseñador del chip 6800 y Rod Orgill, que más tarde hizo el 6501, ayudó a Buchanan con análisis de circuitos y disposición de chips. Bill Mensch se incorporó a Motorola en junio de 1971 después de graduarse de la Universidad de Arizona (a los 26 años). Su primera tarea fue ayudar a definir los circuitos integrados de periféricos para la familia 6800 y más tarde fue el diseñador principal del Adaptador de interfaz de periféricos (PIA) 6820 . Los ingenieros de Motorola podían ejecutar simulaciones analógicas y digitales en una computadora central IBM 370-165 . Bennett contrató a Chuck Peddle en 1973 para realizar trabajos de soporte arquitectónico en los productos de la familia 6800 que ya estaban en proceso. Contribuyó en muchas áreas, incluido el diseño del 6850 ACIA (interfaz en serie).

Los clientes objetivo de Motorola eran empresas de electrónica establecidas como Hewlett-Packard , Tektronix , TRW y Chrysler . En mayo de 1972, los ingenieros de Motorola comenzaron a visitar clientes selectos y a compartir los detalles de su sistema de microprocesador de 8 bits propuesto con ROM, RAM, interfaces paralelas y seriales. A principios de 1974, proporcionaron muestras de ingeniería de los chips para que los clientes pudieran crear prototipos de sus diseños. La estrategia de "familia total de productos" de Motorola no se centró en el precio del microprocesador, sino en reducir el costo total de diseño del cliente. Ofrecieron software de desarrollo en una computadora de tiempo compartido, el sistema de depuración "EXORciser", capacitación en el sitio y soporte técnico de aplicaciones de campo. Tanto Intel como Motorola habían anunciado inicialmente un precio de 360 ​​dólares por un solo microprocesador. El precio real de las cantidades de producción fue mucho menor. Motorola ofreció un kit de diseño que contenía el 6800 con seis chips de soporte por $ 300.

Peddle, que acompañaba a los vendedores en las visitas de los clientes, descubrió que los clientes se sentían desanimados por el alto costo de los chips de microprocesador. Al mismo tiempo, estas visitas invariablemente dieron como resultado que los ingenieros que presentaba produjeran listas de instrucciones requeridas que eran mucho más pequeñas que "todas estas instrucciones sofisticadas" que se habían incluido en el 6800. Peddle y otros miembros del equipo comenzaron a esbozar el diseño de un característica mejorada, microprocesador de tamaño reducido. En ese momento, la nueva planta de fabricación de semiconductores de Motorola en Austin, Texas, tenía dificultades para producir chips MOS, y mediados de 1974 fue el comienzo de una recesión de un año en la industria de los semiconductores. Además, muchos de los empleados de Mesa, Arizona estaban descontentos con el próximo traslado a Austin, Texas .

La gerencia de la División de Productos Semiconductores de Motorola estaba abrumada por los problemas y no mostró interés en la propuesta de microprocesador de bajo costo de Peddle. Finalmente, Peddle recibió una carta oficial que le decía que dejara de trabajar en el sistema. Peddle respondió a la orden informando a Motorola que la carta representaba una declaración oficial de "abandono del proyecto" y, como tal, la propiedad intelectual que había desarrollado hasta ese momento era ahora suya. En una entrevista de noviembre de 1975, el presidente de Motorola, Robert Galvin, finalmente acordó que el concepto de Peddle era bueno y que la división perdió una oportunidad: "No elegimos a los líderes adecuados en la división de productos semiconductores". Se reorganizó la división y se reemplazó la dirección. El nuevo vicepresidente del grupo, John Welty, dijo: "La organización de ventas de semiconductores perdió su sensibilidad a las necesidades de los clientes y no pudo tomar decisiones rápidas".

Pasar a la tecnología MOS

Un anuncio de 1973 MOS Technology destacando sus capacidades de circuitos integrados personalizados
MOS Technology MCS6501, en paquete de cerámica blanca, fabricado a finales de agosto de 1975

Peddle comenzó a buscar fuera de Motorola una fuente de financiamiento para este nuevo proyecto. Inicialmente se acercó al director ejecutivo de Mostek , LJ Sevin , pero se negó. Más tarde, Sevin admitió que esto se debía a que temía que Motorola los demandara.

Mientras Peddle visitaba Ford Motor Company en uno de sus viajes de ventas, Bob Johnson, más tarde jefe de la división de automatización de motores de Ford, mencionó que su antiguo colega John Paivinen se había trasladado a General Instrument y aprendió por sí mismo el diseño de semiconductores. Desde entonces había seguido adelante y estaba haciendo un trabajo muy interesante en conjuntos de chips de calculadoras en una nueva empresa que formó en Valley Forge, Pensilvania .

Paivinen había formado MOS Technology en 1969 con otros dos ejecutivos de General Instrument, Mort Jaffe y Don McLaughlin. Allen-Bradley , un proveedor de componentes electrónicos y controles industriales, adquirió una participación mayoritaria en 1970. La compañía diseñó y fabricó circuitos integrados personalizados para los clientes y había desarrollado una línea de chips para calculadoras.

Después de que los esfuerzos de Mostek fracasaron, Peddle se acercó a Paivinen, quien "lo entendió de inmediato". El 19 de agosto de 1974, Chuck Peddle, Bill Mensch, Rod Orgill, Harry Bawcom, Ray Hirt, Terry Holdt y Wil Mathys dejaron Motorola para unirse a MOS. Mike Janes se unió más tarde. De los diecisiete diseñadores de chips y personas de diseño del equipo 6800, ocho se fueron. El objetivo del equipo era diseñar y producir un microprocesador de bajo costo para aplicaciones integradas y apuntar a una base de clientes lo más amplia posible. Esto sería posible solo si el microprocesador fuera de bajo costo y el equipo estableciera el precio objetivo en $ 5 en volumen. Mensch declaró más tarde que el objetivo no era el precio del procesador en sí, sino crear un conjunto de chips que pudieran venderse a 20 dólares para competir con el Intel 4040 presentado recientemente que se vendía por 29 dólares en un conjunto de chips completo similar.

Los chips se producen imprimiendo múltiples copias del diseño del chip en la superficie de una "oblea" , un disco delgado de silicio de alta pureza. Se pueden imprimir chips más pequeños en mayor número en la misma oblea, disminuyendo su precio relativo. Además, las obleas siempre incluyen una serie de pequeños defectos físicos que se encuentran esparcidos por la superficie. Cualquier chip impreso en esa ubicación fallará y deberá desecharse. Los chips más pequeños significan que es menos probable que una sola copia se imprima en un defecto. Por ambas razones, el costo del producto final depende en gran medida del tamaño del diseño del chip.

Los chips 6800 originales estaban destinados a ser de 180 × 180 mils (4,6 × 4,6 mm) , pero el diseño se completó en 212 × 212 mils (5,4 × 5,4 mm) , o un área de 29,0 mm 2 . Para el nuevo diseño, el objetivo de costo exigía un tamaño objetivo de 153 × 168 mils (3,9 × 4,3 mm) , o un área de 16,6 mm 2 . Se necesitarían varias técnicas nuevas para alcanzar este objetivo.

Mudarse a NMOS

Hubo dos avances significativos que llegaron al mercado justo cuando se estaba diseñando el 6502 que proporcionaron importantes reducciones de costos. El primero fue el paso a NMOS con carga de agotamiento . El 6800 usó un proceso NMOS temprano que requería tres voltajes de suministro, pero una de las características del chip era un duplicador de voltaje incorporado que permitía usar un solo suministro de + 5V para +5, -5 y +12 internamente, a diferencia de otros chips de la era como la Intel 8080 que requería tres pines de suministro separados. Si bien esta característica redujo la complejidad de la fuente de alimentación y el diseño de los pines, aún requería rieles de alimentación separados para las diversas puertas del chip, aumentando la complejidad y el tamaño. Al pasar al nuevo diseño de carga de agotamiento, un solo suministro de +5 era todo lo que se necesitaba, eliminando toda esta complejidad.

Otra ventaja práctica era que la señal de reloj de las CPU anteriores tenía que ser lo suficientemente fuerte para sobrevivir a toda la disipación a medida que viajaba a través de los circuitos, lo que casi siempre requería un chip externo separado que pudiera suministrar una señal lo suficientemente fuerte. Con los requisitos de potencia reducidos de NMOS, el reloj podría trasladarse al chip, simplificando el diseño general de la computadora. Estos cambios redujeron en gran medida la complejidad y el costo de implementar un sistema completo.

Otro cambio que se estaba produciendo fue la introducción del enmascaramiento de proyección. Anteriormente, los chips se modelaban en la superficie de la oblea colocando una máscara en la superficie de la oblea y luego iluminando con una luz brillante. Las máscaras a menudo recogían pequeños trozos de suciedad o fotorresistente a medida que se despegaban del chip, lo que provocaba fallas en esas ubicaciones en cualquier enmascaramiento posterior. Con diseños complejos como CPU, se usarían 5 o 6 pasos de enmascaramiento, y la posibilidad de que al menos uno de estos pasos introdujera un defecto era muy alta. En la mayoría de los casos, el 90% de dichos diseños tenían fallas, lo que resultó en un rendimiento del 10%. El precio de los ejemplos de trabajo tenía que cubrir el coste de producción del 90% que se tiraba.

En 1973, Perkin-Elmer introdujo el sistema Micralign , que proyectaba una imagen de la máscara en la oblea en lugar de requerir contacto directo. Las máscaras ya no recogían suciedad de las obleas y duraban del orden de 100.000 usos en lugar de 10. Esto eliminó las fallas paso a paso y las altas tasas de fallas que antes se veían en diseños complejos. Los rendimientos de las CPU aumentaron inmediatamente del 10% al 60 o 70%. Esto significó que el precio de la CPU disminuyó aproximadamente en la misma cantidad y el microprocesador de repente se convirtió en un dispositivo básico.

Las líneas de fabricación existentes de MOS Technology se basaban en la tecnología PMOS más antigua, aún no habían comenzado a trabajar con NMOS cuando llegó el equipo. Paivinen prometió tener una línea NMOS en funcionamiento a tiempo para comenzar la producción de la nueva CPU. Cumplió la promesa, la nueva línea estaba lista en junio de 1975.

Notas de Diseño

Chuck Peddle, Rod Orgill y Wil Mathys diseñaron la arquitectura inicial de los nuevos procesadores. Un artículo de septiembre de 1975 en la revista EDN ofrece este resumen del diseño:

La familia MOS Technology 650X representa un intento consciente de ocho ex empleados de Motorola que trabajaron en el desarrollo del sistema 6800 para sacar una pieza que reemplazaría y superaría al 6800, pero que no se vendiera bien. Con el beneficio de la retrospectiva obtenida en el proyecto 6800, el equipo de MOS Technology encabezado por Chuck Peddle, realizó los siguientes cambios arquitectónicos en la CPU de Motorola ...

El principal cambio en términos de tamaño de chip fue la eliminación de los controladores de tres estados de las salidas del bus de direcciones. Esto se había incluido en el 6800 para permitirle trabajar con otros chips en el acceso directo a la memoria (DMA) y funciones de coprocesamiento, a costa de un importante espacio de troquel. En la práctica, el uso de un sistema de este tipo requería que los otros dispositivos fueran igualmente complejos y, en cambio, los diseñadores tendían a usar sistemas fuera de chip para coordinar dicho acceso. El 6502 simplemente eliminó esta característica, de acuerdo con su diseño como un controlador económico que se usa para tareas específicas y se comunica con dispositivos simples. Peddle sugirió que cualquiera que realmente requiriera este estilo de acceso podría implementarlo con un solo 74158 .

La siguiente gran diferencia fue simplificar los registros. Para empezar, se retiró uno de los dos acumuladores . Muchas partes del decodificador de instrucciones tienen que acceder a registros de propósito general como los acumuladores y, por lo tanto, requieren una cantidad significativa de cableado para mover datos hacia y desde su almacenamiento. Dos acumuladores facilitan muchas tareas de codificación, pero cuestan al diseño del chip una complejidad significativa. Se lograron ahorros adicionales al reducir el registro de la pila de 16 a 8 bits, lo que significa que la pila solo podía tener 256 bytes de longitud, lo que era suficiente para su función prevista como microcontrolador.

El registro de índice IX de 16 bits se dividió en dos, convirtiéndose en X e Y. Más importante aún, el estilo de acceso cambió; en el 6800, IX tenía una dirección de 16 bits, que fue compensada por un número proporcionado con la instrucción, los dos se agregaron para producir la dirección final. En el 6502 (y en la mayoría de los otros diseños), la dirección base se almacenó en la instrucción y se le agregó la X o la Y.

Finalmente, se simplificó el conjunto de instrucciones, liberando espacio en el decodificador y la lógica de control. De las 72 instrucciones originales del 6800, quedaron 56. Entre las que se eliminaron se encontraba cualquier instrucción que moviera datos entre los dos acumuladores del 6800, así como una serie de instrucciones de bifurcación inspiradas en el PDP-11, como la capacidad de comparar directamente dos valores numéricos. El 6502 utilizó un sistema más simple que manejaba las comparaciones realizando operaciones matemáticas en el acumulador y luego examinando los indicadores de resultados.

El diseño de alto nivel del chip tuvo que convertirse en dibujos de transistores e interconexiones. En MOS Technology, el "diseño" fue un proceso muy manual realizado con lápices de colores y papel vitela. El diseño constaba de miles de formas poligonales en seis dibujos diferentes; uno para cada capa del proceso de fabricación. Dados los límites de tamaño, el diseño completo del chip debía considerarse constantemente. Mensch y Paivinen trabajaron en el decodificador de instrucciones, mientras que Mensch, Peddle y Orgill trabajaron en la ALU y los registros. Un avance adicional, desarrollado en una fiesta, fue una forma de compartir parte del cableado interno para permitir que la ALU se redujera en tamaño.

A pesar de sus mejores esfuerzos, el diseño final terminó siendo 5 milésimas de pulgada demasiado ancho. Los primeros 6502 chips tenían 168 × 183 mils (4,3 × 4,7 mm) , o un área de 19,8 mm 2 . La instrucción de rotación a la derecha (ROR) no funcionó en el primer silicio, por lo que la instrucción se omitió temporalmente de los documentos publicados, pero la siguiente iteración del diseño redujo el chip y corrigió la instrucción de rotación a la derecha, que luego se incluyó en la documentación revisada. .

Presentamos el 6501 y el 6502

Anuncio de presentación de los microprocesadores MOS Technology MCS6501 y MCS6502

MOS introduciría dos microprocesadores basados ​​en el mismo diseño subyacente: el 6501 se conectaría al mismo zócalo que el Motorola 6800, mientras que el 6502 reorganizó el pinout para admitir un oscilador de reloj en el chip. Ambos funcionarían con otros chips de soporte diseñados para el 6800. No ejecutarían el software 6800 porque tenían un conjunto de instrucciones diferente, registros diferentes y, en su mayoría, modos de direccionamiento diferentes. Rod Orgill fue responsable del diseño del 6501; había ayudado a John Buchanan en Motorola en el 6800. Bill Mensch hizo el 6502; fue el diseñador del Adaptador de Interfaz Periférica (PIA) 6820 en Motorola. Harry Bawcom, Mike Janes y Sydney-Anne Holt ayudaron con el diseño.

La introducción del microprocesador de MOS Technology fue diferente del lanzamiento tradicional del producto de meses de duración. La primera ejecución de un nuevo circuito integrado se utiliza normalmente para pruebas internas y se comparte con clientes selectos como "muestras de ingeniería". Estos chips a menudo tienen un defecto de diseño menor o dos que se corregirán antes de que comience la producción. El objetivo de Chuck Peddle era vender la primera tirada de chips 6501 y 6502 a los asistentes a la feria comercial Wescon en San Francisco a partir del 16 de septiembre de 1975. Peddle fue un portavoz muy eficaz y los microprocesadores de MOS Technology fueron ampliamente cubiertos en la prensa especializada. Uno de los primeros fue una historia de página completa sobre los microprocesadores MCS6501 y MCS6502 en la edición del 24 de julio de 1975 de la revista Electronics . Las historias también se publicaron en EE Times (24 de agosto de 1975), EDN (20 de septiembre de 1975), Electronic News (3 de noviembre de 1975), Byte (noviembre de 1975) y Microcomputer Digest (noviembre de 1975). Los anuncios del 6501 aparecieron en varias publicaciones la primera semana de agosto de 1975. El 6501 estaría a la venta en Wescon por $ 20 cada uno. En septiembre de 1975, los anuncios incluían los microprocesadores 6501 y 6502. El 6502 costaría solo $ 25 (equivalente a $ 120 en 2020).

Cuando MOS Technology llegó a Wescon, descubrieron que a los expositores no se les permitía vender nada en el piso de exhibición. Alquilaron la suite MacArthur en el hotel St. Francis y ordenaron a los clientes que compraran los procesadores. En la suite, los procesadores se almacenaron en frascos grandes para dar a entender que los chips estaban en producción y fácilmente disponibles. Los clientes no sabían que la mitad inferior de cada frasco contenía chips no funcionales. Los chips costaban $ 20 y $ 25, mientras que el paquete de documentación costaba $ 10 adicionales. Se alentó a los usuarios a hacer fotocopias de los documentos, una forma económica para que MOS Technology distribuya la información del producto. Las hojas de datos preliminares enumeraron solo 55 instrucciones, excluyendo la instrucción Girar a la derecha (ROR), que no funcionó correctamente en estos primeros chips. Las revisiones en Byte y EDN señalaron la falta de la instrucción ROR. La siguiente revisión del diseño solucionó este problema y la hoja de datos de mayo de 1976 enumeró 56 instrucciones. Peddle quería que todos los ingenieros y aficionados interesados ​​tuvieran acceso a los chips y la documentación; otras empresas de semiconductores solo querían tratar con clientes "serios". Por ejemplo, Signetics estaba introduciendo el microprocesador 2650 y sus anuncios pedían a los lectores que escribieran para obtener información en el membrete de su empresa.

MOS Technology MCS6502, en paquete de cerámica blanca, fabricado a finales de 1975
Diferencias de pinout
Alfiler 6800 6501 6502
2 Detener Listo Listo
3 ∅1 (pulg) ∅1 (pulg) ∅1 (fuera)
5 Dirección de memoria válida Dirección de memoria válida CAROLINA DEL NORTE
7 Bus disponible Bus disponible SINCRONIZAR
36 Habilitación del bus de datos Habilitación del bus de datos CAROLINA DEL NORTE
37 ∅2 (pulg) ∅2 (pulg) ∅0 (pulg)
38 CAROLINA DEL NORTE CAROLINA DEL NORTE Establecer bandera de desbordamiento
39 Control de tres estados CAROLINA DEL NORTE ∅2 (fuera)

Demanda de Motorola

La hoja de datos de mayo de 1976 omitió el microprocesador 6501 que estaba en la versión de agosto de 1975 .

La introducción de 6501/6502 impresa y en Wescon fue un gran éxito. La desventaja fue que la extensa cobertura de prensa llamó la atención de Motorola. En octubre de 1975, Motorola redujo el precio de un solo microprocesador 6800 de $ 175 a $ 69. El kit de diseño del sistema de $ 300 se redujo a $ 150 y ahora venía con una placa de circuito impreso. El 3 de noviembre de 1975, Motorola solicitó una orden judicial en el Tribunal Federal para impedir que MOS Technology fabricara y vendiera productos con microprocesadores. También presentaron una demanda alegando infracción de patente y apropiación indebida de secretos comerciales. Motorola afirmó que siete ex empleados se unieron a MOS Technology para crear los productos de microprocesador de esa empresa.

Motorola era una empresa de miles de millones de dólares con un caso plausible y abogados. El 30 de octubre de 1974, Motorola había presentado numerosas solicitudes de patente sobre la familia de microprocesadores y se le concedieron veinticinco patentes. El primero fue en junio de 1976 y el segundo fue para Bill Mensch el 6 de julio de 1976, para el diseño de chips 6820 PIA. Estas patentes cubrían el bus 6800 y cómo los chips periféricos interactuaban con el microprocesador. Motorola comenzó a fabricar transistores en 1950 y tenía una cartera de patentes de semiconductores. Allen-Bradley decidió no pelear este caso y vendió su interés en MOS Technology a los fundadores. Cuatro de los ex ingenieros de Motorola fueron nombrados en la demanda: Chuck Peddle, Will Mathys, Bill Mensch y Rod Orgill. Todos fueron nombrados inventores en las 6800 solicitudes de patente. Durante el proceso de descubrimiento, Motorola descubrió que un ingeniero, Mike Janes, había ignorado las instrucciones de Peddle y había llevado sus documentos de diseño 6800 a MOS Technology. En marzo de 1976, la ahora independiente MOS Technology se estaba quedando sin dinero y tuvo que resolver el caso. Acordaron dejar el procesador 6501, pagar a Motorola $ 200,000 y devolver los documentos que Motorola alegaba eran confidenciales. Ambas empresas acordaron licenciar patentes de microprocesadores. Ese mes de mayo, Motorola redujo el precio de un solo microprocesador 6800 a 35 dólares. En noviembre, Commodore había adquirido MOS Technology.

Computadoras y juegos

Con problemas legales detrás de ellos, MOS todavía se quedó con el problema de hacer que los desarrolladores probaran su procesador, lo que llevó a Chuck Peddle a diseñar la computadora de placa única MDT-650 ("terminal de desarrollo de microcomputadoras") . Otro grupo dentro de la compañía diseñó el KIM-1 , que se vendió semi-completo y podría convertirse en un sistema utilizable con la adición de una terminal de computadora de terceros y una unidad de casete compacta . Para su asombro, el KIM-1 se vendió bien a los aficionados y aficionados, así como a los ingenieros a los que se había dirigido. El sistema relacionado de control / entrenamiento / desarrollo Rockwell AIM 65 también funcionó bien. El software del AIM 65 se basó en el del MDT. Otro producto más o menos similar fue el Synertek SYM-1 .

Uno de los primeros usos "públicos" para el diseño fue el microordenador Apple I , introducido en 1976. El 6502 se utilizó a continuación en el Commodore PET y el Apple II , ambos lanzados en 1977. Más tarde se utilizó en el Atari de 8 bits. familia y Acorn Atom ordenadores domésticos, el micrófono de la BBC , Commodore VIC-20 y otros diseños tanto para ordenadores personales y de negocios, como Ohio Científico y Oric . El 6510 , un sucesor directo del 6502 con un puerto de E / S digital y un bus de direcciones de tres estados , fue la CPU utilizada en la computadora doméstica Commodore 64 más vendida . 6520 y / o 6502-variantes CPU se utilizaron en todos los de Commodore de disco duros para todos sus ordenadores de 8 bits, desde la línea de PET (algunos de los cuales tenía dos CPUs basadas en 6502) a través de la Commodore 128, incluyendo el Commodore 64 y en todas las unidades de disco de Atari para toda su línea de computadoras de 8 bits, desde 400/800 hasta XEGS.

Otro uso importante de la familia 6500 fue en videojuegos. El primero en hacer uso del diseño del procesador fue el Atari VCS, más tarde rebautizado como Atari 2600 . El VCS usó una variante del 6502 llamada 6507 , que tenía menos pines y, como resultado, solo podía direccionar 8  KB de memoria. Se venderían millones de consolas Atari, cada una con un procesador MOS. Otro uso significativo fue el de Nintendo Entertainment System y Famicom . El 6502 utilizado en la NES era una versión de segunda fuente de Ricoh , un sistema parcial en un chip , que carecía del modo decimal codificado en binario , pero agregaba 22 registros mapeados en memoria y hardware integrado para la generación de sonido, lectura del joypad. y lista de sprites DMA . Llamado 2A03 en consolas NTSC y 2A07 en consolas PAL (la diferencia es la relación del divisor de memoria y una tabla de búsqueda para frecuencias de muestreo de audio), este procesador fue producido exclusivamente para Nintendo . El Atari Lynx usó una versión de 4 MHz del chip, el 65SC02 .

En la década de 1980, una popular revista de electrónica Elektor / Elektuur usó el procesador en su placa de desarrollo de microprocesadores Junior Computer .

Descripción técnica

6502 dado de procesador. La sección regular en la parte superior es la ROM de decodificación de instrucciones, la sección aparentemente aleatoria en el centro es la lógica de control, y en la parte inferior están los registros (derecha) y la ALU (izquierda). Las conexiones del bus de datos se encuentran en la parte inferior derecha y el bus de direcciones en la parte inferior e inferior izquierda.
Configuración de 6502 pines ( DIP de 40 pines )
MOS 6502 registros
1 5 1 4 1 3 1 2 1 1 1 0 9 8 7 6 5 4 3 2 1 0 (posición de bit)
Registros principales
  A Un acumulador
Registros de índice
  X Índice X
  Y Índice Y
0 0 0 0 0 0 0 1 S S Pointer tachuela
Contador de programa
ordenador personal P ROGRAMA C ounter
Registro de estado
  norte V - B D I Z C P rocessor F GAL

El 6502 es un procesador little-endian de 8 bits con un bus de direcciones de 16 bits . Las versiones originales se fabricaron utilizando un chip de tecnología de proceso de 8 µm con un tamaño de matriz de 3,9 mm × 4,3 mm (anunciado como 153 mils × 168 mils ), para un área total de 16,6 mm 2 .

La lógica interna funciona a la misma velocidad que la frecuencia de reloj externa, pero a pesar de las bajas velocidades de reloj (generalmente en el vecindario de 1 a 2  MHz ), el rendimiento del 6502 era competitivo con otras CPU contemporáneas que usaban relojes significativamente más rápidos. Esto se debe en parte a una máquina de estado simple implementada por lógica combinacional (sin reloj) en mayor medida que en muchos otros diseños; el reloj de dos fases (que proporciona dos sincronizaciones por ciclo) podría controlar así el ciclo de la máquina directamente. Las instrucciones típicas pueden tardar la mitad de ciclos en completarse en el 6502 que en los diseños contemporáneos. Como la mayoría de las CPU simples de la época, el chip NMOS 6502 dinámico no está secuenciado por una ROM de microcódigo, sino que utiliza un PLA (que ocupaba aproximadamente el 15% del área del chip) para la decodificación y secuenciación de instrucciones. Como en la mayoría de los microprocesadores de 8 bits, el chip realiza una superposición limitada de búsqueda y ejecución.

La baja frecuencia de reloj moderó el requisito de velocidad de la memoria y los periféricos conectados a la CPU, ya que solo alrededor del 50% del ciclo del reloj estaba disponible para el acceso a la memoria (debido al diseño asíncrono, esta fracción variaba mucho entre las versiones de chip). Esto era fundamental en un momento en que la memoria asequible tenía tiempos de acceso en el rango de 250 a 450 ns .

Debido a que el chip solo accedió a la memoria durante ciertas partes del ciclo del reloj, y esos ciclos fueron indicados por el pin de salida de reloj bajo PHI2, otros chips en un sistema podían acceder a la memoria durante esos momentos en los que el 6502 estaba fuera del bus. Esto a veces se conocía como "acceso oculto". Esta técnica fue ampliamente utilizada por los sistemas informáticos; usarían memoria capaz de acceder a 2 MHz y luego ejecutarían la CPU a 1 MHz. Esto garantizaba que la CPU y el hardware de video pudieran intercalar sus accesos, con un rendimiento total que igualaba al del dispositivo de memoria. Cuando las memorias más rápidas estuvieron disponibles en la década de 1980, las máquinas más nuevas podían funcionar a velocidades de reloj más altas, como la CPU de 2 MHz en el BBC Micro , y aún usar las técnicas de intercambio de bus.

Registros

Como su precursor, el 6800, el 6502 tiene muy pocos registros . Los registros del 6502 incluyen un registro acumulador de 8 bits (A), dos registros de índice de 8 bits (X e Y), 7 bits de indicador de estado del procesador de 1 bit (P), específicamente del bit 7 al bit 0 en P, estos son los negativo (N), desbordamiento (V), reservado , ruptura (B), decimal (D), desactivación de interrupciones (I), cero (Z) y bandera de acarreo (C) -, un puntero de pila de 8 bits (S), y un contador de programas (PC) de 16 bits . Esto se compara con un diseño típico de la misma época, el Z80 , que tiene ocho registros de 8 bits de uso general, que se pueden combinar en cuatro de 16 bits. El Z80 también tenía un conjunto completo de registros alternativos que sumaban un total de dieciséis registros de propósito general.

Para compensar en parte la falta de registros, el 6502 incluyó un modo de direccionamiento de página cero que usa un byte de dirección en la instrucción en lugar de los dos necesarios para direccionar los 64 KB completos de memoria. Esto proporciona un acceso rápido a los primeros 256 bytes de RAM mediante instrucciones más breves. Chuck Peddle ha dicho en entrevistas que la intención específica era permitir que estos primeros 256 bytes de RAM se utilizaran como registros.

El espacio de direcciones de la pila está cableado a la página de memoria $ 01 , es decir, el rango de direcciones $ 0100 - $ 01FF ( 256 - 511 ). El acceso del software a la pila se realiza a través de cuatro instrucciones de modo de direccionamiento implícito, cuyas funciones son empujar o hacer saltar (tirar) el acumulador o el registro de estado del procesador. La misma pila también se utiliza para llamadas a subrutinas a través de las instrucciones JSR (salto a subrutina) y RTS (retorno de subrutina) y para el manejo de interrupciones .

Direccionamiento

El chip utiliza el índice y los registros de pila de manera efectiva con varios modos de direccionamiento , incluido un modo rápido de "página directa" o "página cero", similar al que se encuentra en el PDP-8 , que accede a las ubicaciones de memoria desde las direcciones 0 a 255 con un solo Dirección de 8 bits (guardando el ciclo que normalmente se requiere para obtener el byte de orden superior de la dirección): el código del 6502 usa la página cero de la misma manera que el código de otros procesadores usaría registros. En algunas microcomputadoras basadas en 6502 con un sistema operativo, el sistema operativo usa la mayor parte de la página cero, dejando solo un puñado de ubicaciones para el usuario.

Los modos de direccionamiento también incluyen implícito (instrucciones de 1 byte); absoluto (3 bytes); absoluto indexado (3 bytes); página cero indexada (2 bytes); relativo (2 bytes); acumulador (1); indirecto, x e indirecto, y (2); e inmediato (2). El modo absoluto es un modo de uso general. Las instrucciones de bifurcación utilizan un desplazamiento de 8 bits con signo relativo a la instrucción después de la bifurcación; el rango numérico −128..127 por lo tanto se traduce en 128 bytes hacia atrás y 127 bytes hacia adelante desde la instrucción que sigue a la bifurcación (que es 126 bytes hacia atrás y 129 bytes hacia adelante desde el inicio de la instrucción de bifurcación). El modo acumulador utiliza el acumulador como una dirección efectiva y no necesita ningún dato de operando . El modo inmediato utiliza un operando literal de 8 bits .

Direccionamiento indirecto

Los modos indirectos son útiles para el procesamiento de matrices y otros bucles. Con el modo de ciclo 5/6 "(indirecto), y", el registro Y de 8 bits se agrega a una dirección base de 16 bits leída desde la página cero, que se ubica en un solo byte después del código de operación. Por lo tanto, el registro Y es un registro de índice en el sentido de que se usa para contener un índice real (a diferencia del registro X en el 6800, donde se almacenó directamente una dirección base y al que se podría agregar un desplazamiento inmediato). Incrementar el registro de índice para recorrer la matriz por bytes solo requiere dos ciclos adicionales. Con el modo "(indirecto, x)" usado con menos frecuencia, la dirección efectiva para la operación se encuentra en la dirección de página cero formada al agregar el segundo byte de la instrucción al contenido del registro X. Usando los modos indexados, la página cero actúa efectivamente como un conjunto de hasta 128 registros de direcciones adicionales (aunque muy lentos).

El 6502 es capaz de realizar sumas y restas en binario o decimal codificado en binario . Colocar la CPU en modo BCD con la SEDinstrucción (establecer el indicador D) da como resultado una aritmética decimal, lo que $99 + $01daría como resultado que se establezca $ 00 y el indicador de acarreo (C). En el modo binario ( CLD, borrar la bandera D), la misma operación daría como resultado que $ 9A y la bandera de acarreo se borren. Aparte de Atari BASIC , el modo BCD rara vez se usaba en aplicaciones de computadora doméstica.

¡Vea el Hola mundo! artículo para un ejemplo simple pero característico del lenguaje ensamblador 6502 .

Instrucciones y códigos de operación

6502 instrucción códigos de operación ( opcodes ) son ocho bits de longitud y tienen la forma AAABBBCC general, cuando AAA y CC definen el código de operación, y la acreditación define el modo de direccionamiento.

Por ejemplo, considere la ORAinstrucción, que realiza un OR bit a bit en los bits del acumulador con otro valor. El código de operación de la instrucción tiene el formato 000bbb01, donde bbb puede ser 010 para un valor de modo inmediato (constante), 001 para una dirección fija de página cero, 011 para una dirección absoluta, etc.

Este patrón no es absoluto y hay una serie de excepciones. Sin embargo, donde se aplica, permite deconstruir fácilmente los valores del código de operación de nuevo a los mnemónicos de ensamblaje para la mayoría de las instrucciones, manejando los casos extremos con código de propósito especial.

De los 256 códigos de operación posibles disponibles usando un patrón de 8 bits, el 6502 original usa 151 de ellos, organizados en 56 instrucciones con (posiblemente) múltiples modos de direccionamiento . Según la instrucción y el modo de direccionamiento, el código de operación puede requerir cero, uno o dos bytes adicionales para los operandos. Por lo tanto, las instrucciones de la máquina 6502 varían en longitud de uno a tres bytes. El operando se almacena en el formato little-endian habitual del 6502 .

El 65C816 , el descendiente CMOS de 16 bits del 6502, también admite direccionamiento de 24 bits, lo que da como resultado que las instrucciones se ensamblen con operandos de tres bytes, también organizados en formato little-endian.

Los 105 códigos de operación restantes no están definidos. En el diseño original, las instrucciones donde los 4 bits de bajo orden ( nibble ) eran 3, 7, B o F no se usaban, lo que dejaba espacio para futuras expansiones. Del mismo modo, la columna de $ 2x sólo tenía una sola entrada, . Se distribuyeron las 25 ranuras vacías restantes. Algunas de las ranuras vacías se utilizaron en el 65C02 para proporcionar tanto nuevas instrucciones como variaciones de las existentes con nuevos modos de direccionamiento. Las instrucciones de $ Fx se dejaron inicialmente libres para permitir que los proveedores externos agregaran sus propias instrucciones, pero las versiones posteriores del 65C02 estandarizaron un conjunto de instrucciones de manipulación de bits desarrolladas por Rockwell Semiconductor . LDX #constant

Lenguaje ensamblador

Una instrucción en lenguaje ensamblador 6502 consta de un mnemónico de instrucción de tres caracteres , seguido de cualquier operando . Las instrucciones que no toman un operando separado sino que tienen como objetivo un solo registro según el modo de direccionamiento combinan el registro de destino en el mnemónico de instrucción, por lo que el ensamblador usa INXen lugar INC Xde incrementar el registro X.

Tabla de instrucciones

Comportamiento detallado

El procesador 6502 muere con transistores NMOS dibujados y etiquetas que insinúan la funcionalidad de los componentes del 6502.

La entrada de interrupción no enmascarable (NMI) del procesador es sensible al borde , lo que significa que la interrupción se activa por el borde descendente de la señal en lugar de su nivel. La implicación de esta función es que no se admite fácilmente un circuito de interrupción OR cableado . Sin embargo, esto también evita que se produzcan interrupciones NMI anidadas hasta que el hardware vuelva a desactivar la entrada NMI, a menudo bajo el control del controlador de interrupciones NMI .

La afirmación simultánea de las líneas de interrupción de hardware NMI e IRQ (enmascarable) hace que se ignore la IRQ. Sin embargo, si la línea IRQ permanece activa después del servicio del NMI, el procesador responderá inmediatamente a la IRQ, ya que la IRQ es sensible al nivel . Por lo tanto, se estableció una especie de prioridad de interrupción incorporada en el diseño 6502.

La bandera B se establece mediante el muestreo periódico del 6502 de la salida de su detector de borde NMI y su entrada IRQ. Sin embargo, la señal de IRQ que se está bajando solo se reconoce si la bandera I permite las IRQ. Si de esta manera se detecta una solicitud NMI o IRQ (enmascarable), la bandera B se pone a cero y hace que el procesador ejecute la siguiente instrucción BRK en lugar de ejecutar la siguiente instrucción basada en el contador del programa.

La instrucción BRK luego empuja el estado del procesador a la pila, con el bit indicador B puesto a cero. Al final de su ejecución, la instrucción BRK restablece el valor de la bandera B a uno. Esta es la única forma en que se puede modificar la bandera B. Si una instrucción diferente a la instrucción BRK empuja el indicador B a la pila como parte del estado del procesador, el indicador B siempre tiene el valor uno.

Un borde de bajo a alto en el pin de entrada SO establecerá el bit de estado de desbordamiento del procesador. Esto se puede utilizar para una respuesta rápida a hardware externo. Por ejemplo, un controlador de dispositivo de sondeo de alta velocidad puede sondear el hardware una vez en solo tres ciclos usando una BVCinstrucción Branch-on-oVerflow-Clear ( ) que se bifurca a sí mismo hasta que el desbordamiento se establece mediante un flanco ascendente SO. El Commodore 1541 y otras unidades de disquete Commodore utilizan esta técnica para detectar cuando el serializador está listo para transferir otro byte de datos del disco. El diseño de hardware y software del sistema debe garantizar que no se produzca un SO durante el procesamiento aritmético y los cálculos de interrupción.

Variaciones y derivadas

Hubo numerosas variantes del NMOS 6502 original.

Subtítulo
Empresa Modelo Descripción
6502A Un chip de 1,5 MHz incluido en Asteroids Deluxe .
6502B Versión del 6502 capaz de funcionar a una velocidad máxima de 2 MHz en lugar de 1. La B se utilizó en Apple III , BBC Micro y, con frecuencia de reloj de 1,79 MHz, en las primeras computadoras Atari de 8 bits .
6502C El 6502C “oficial” era una versión del 6502 original capaz de funcionar hasta a 4 MHz.

No debe confundirse con SALLY, un 6502 personalizado diseñado para Atari (y a veces denominado por ellos como "6502C") ni con el 65C02 de nombre similar .

SALLY / C014806 / "6502C" Variante 6502 personalizada diseñada para Atari, utilizada en computadoras Atari de 8 bits posteriores , así como en las consolas Atari 5200 y Atari 7800 .

Cuenta con una señal HALT en el pin 35 y la señal R / W en el pin 36 (estos pines no están conectados (N / C) en un 6502 estándar). Al tirar de HALT bajo, se cierra el reloj y se detiene el procesador. Esto se utilizó para permitir el acceso directo a la memoria (DMA) de los circuitos de video.

Aunque a veces se lo denomina "6502C" en la documentación de Atari, no es lo mismo que el 6502C "oficial" y el chip en sí nunca está marcado como tal.

Tecnología MOS 6503 Capacidad de direccionamiento de memoria reducida (4 KB) y sin entrada RDY, en un paquete DIP de 28 pines (con los pines de fase 1 (OUT), SYNC, Vss redundante y SO del 6502 también omitidos).
Tecnología MOS 6504 Capacidad de direccionamiento de memoria reducida (8 KB), sin NMI y sin entrada RDY, en un paquete DIP de 28 pines (con los pines de fase 1 (OUT), SYNC, Vss redundante y SO del 6502 también omitidos).
Tecnología MOS 6505 Capacidad de direccionamiento de memoria reducida (4 KB) y sin NMI, en un paquete DIP de 28 pines (con los pines de fase 1 (OUT), SYNC, Vss redundante y SO del 6502 también omitidos).
Tecnología MOS 6506 Capacidad de direccionamiento de memoria reducida (4 KB), sin NMI y sin entrada RDY, pero los 3 pines de reloj del 6502 (es decir, un reloj de salida de 2 fases), en un paquete DIP de 28 pines (con SYNC, Vss redundante, y los pines SO del 6502 también se omiten).
Tecnología MOS 6507 Capacidad de direccionamiento de memoria reducida (8 KB) y sin interrupciones, en un paquete DIP de 28 pines (con los pines de fase 1 (OUT), SYNC, Vss redundante y SO del 6502 también omitidos). Este chip se utilizó en el sistema de videojuegos Atari 2600 .
Tecnología MOS 6508 Tiene un puerto de entrada / salida integrado de 8 bits y 256 bytes de RAM estática interna.
Tecnología MOS 6509 Puede direccionar hasta 1 MB de RAM como 16 bancos de 64 KB y se utilizó en la serie Commodore CBM-II .
Tecnología MOS 6510 Tiene un puerto de entrada / salida programable de 6 bits incorporado y se usó en el Commodore 64 . El 8500 es efectivamente una versión HMOS del 6510 y lo reemplazó en versiones posteriores del C64.
Tecnología MOS 6512
6513
6514
6515
Las tecnologías MOS 6512, 6513, 6514 y 6515 dependen cada una de un reloj externo, en lugar de utilizar un generador de reloj interno como el 650x (por ejemplo, 6502). Esto se utilizó con ventaja en algunos diseños en los que los relojes se podían ejecutar de forma asimétrica, lo que aumentaba el rendimiento general de la CPU.

El 6512 es un 6502 con una entrada de reloj de 2 fases para un oscilador de reloj externo, en lugar de un oscilador de reloj integrado. El 6513, 6514 y 6515 son igualmente equivalentes a (respectivamente) un 6503, 6504 y 6505 con la misma entrada de reloj de 2 fases.

El 6512 se utilizó en el BBC Micro B + 64 .

Ricoh 2A03 Variante 6502 que incluye una unidad de procesamiento de audio y que carece del modo BCD, utilizada en el Nintendo Entertainment System .
Tecnología MOS 6591
6592
Diseños de sistema en un chip que utilizan un Atari 2600 completo en un paquete DIP de 48 pines.
WDC 65C02 Versión CMOS de NMOS 6502 que fue diseñada por Bill Mensch del Western Design Center (WDC), que presenta un consumo de energía reducido, soporte para velocidades de reloj mucho más altas, nuevas instrucciones, nuevos modos de direccionamiento para algunas instrucciones existentes y corrección de erratas de NMOS. como el JMP ($xxFF)error.
WDC 65SC02 Variante del WDC 65C02 sin operaciones de manipulación de bits individuales (RMB, SMB, BBR y BBS). Este núcleo, que funciona a 4 MHz, se utilizó en el IC del sistema principal de Atari Lynx .
CSG (tecnología MOS) 65CE02 Derivado de CMOS desarrollado por Commodore Semiconductor Group (CSG), anteriormente MOS Technology.
Rockwell R6511Q

R6500 / 11, R6500 / 12, R6500 / 15 " Microcomputadoras de un chip "
Versiones mejoradas del procesador basado en 6502, que también incluyen operaciones de manipulación de bits individuales (RMB, SMB, BBR y BBS), RAM de página cero de 192 bytes en el chip, UART , etc.
Rockwell R65F11
R65F12
El Rockwell R65F11 (introducido en 1983) y el posterior R65F12 son versiones mejoradas del procesador basado en 6502, que también incluyen operaciones de manipulación de bits individuales (RMB, SMB, BBR y BBS), RAM de página cero en el chip, en el chip Forth kernel ROM, un UART, etc.
GTE G65SC102 Software compatible con el 65C02, pero tiene una distribución de pines y un circuito de oscilador ligeramente diferentes. El BBC Master Turbo incluía la versión de 4 MHz de esta CPU en una tarjeta de coprocesador, que también se podía comprar por separado y agregar al Master 128.
Rockwell R65C00
R65C21
R65C29
El R65C00, R65C21 y R65C29 presentaban dos CMOS 6502 mejorados en un solo chip, y el R65C00 y R65C21 contenían además 2 kB de ROM programable por máscara.
CM630 Un clon de bloque del este de 1 MHz del 6502 y se usó en Pravetz 8A y 8C, clones búlgaros de la serie Apple // .
Tecnología MOS 7501
8501
Variantes del 6510 (en sí mismo un 6502 mejorado), introducido en 1984. Extendieron el número de pines del puerto de E / S de 6 a 7, pero omitieron los pines para interrupción no enmascarable y salida de reloj. Se utiliza en las computadoras C-16 , C-116 y Plus / 4 de Commodore . La principal diferencia entre las CPU 7501 y 8501 es que la 7501 se fabricó con el proceso HMOS-1 y la 8501 con HMOS-2.
Tecnología MOS 8500 Introducido en 1985 como una versión HMOS del 6510 (que a su vez se basa en el 6502). Aparte de la modificación del proceso, el 8500 es prácticamente idéntico a la versión NMOS del 6510. Reemplazó al 6510 en versiones posteriores del Commodore 64 .
Tecnología MOS 8502 Diseñado por MOS Technology y utilizado en el Commodore 128 . Basado en el MOS 6510 utilizado en el Commodore 64, el 8502 pudo funcionar al doble de frecuencia que el 6510. La familia 8502 también incluye el MOS 7501, 8500 y 8501.
Hudson suave HuC6280 La versión mejorada de la empresa japonesa de videojuegos Hudson Soft del WDC 65C02. Fabricado para ellos por Seiko Epson y NEC para SuperGrafx . El producto más notable que utiliza la HuC6280 es la consola de videojuegos TurboGrafx-16 de NEC.

Derivados de 16 bits

El Western Design Center diseñó y produce actualmente el procesador W65C816S , un sucesor de núcleo estático de 16 bits del 65C02 , con características muy mejoradas. El W65C816S es una variante más nueva del 65C816, que es el núcleo de la computadora Apple II GS y es la base del procesador Ricoh 5A22 que alimenta el Super Nintendo Entertainment System . El W65C816S incorpora mejoras menores sobre el 65C816 que hacen que el chip más nuevo no sea un reemplazo exacto compatible con el hardware del anterior. Entre estas mejoras se encuentra la conversión a un núcleo estático, que permite detener el reloj en cualquier fase sin que los registros pierdan datos. Disponible a través de distribuidores de electrónica, a partir de marzo de 2020, el W65C816S está clasificado oficialmente para funcionamiento a 14 MHz.

El Western Design Center también diseñó y produjo el 65C802 , que era un núcleo 65C816 con un espacio de direcciones de 64 kilobytes en un paquete compatible con pines 65 (C) 02. El 65C802 podría adaptarse a una placa 6502 y funcionaría como un 65C02 al encenderse, operando en "modo de emulación". Al igual que con el 65C816, una secuencia de dos instrucciones cambiaría el 65C802 al funcionamiento en "modo nativo", exponiendo sus registros de índice y acumulador de 16 bits , así como otras características mejoradas del 65C816. El 65C802 no se utilizó mucho; los nuevos diseños casi siempre se construyeron alrededor del 65C816, lo que resultó en la interrupción de la producción del 65C802.

Código de ejemplo

El siguiente código fuente del lenguaje ensamblador 6502 es para una subrutina nombrada , que copia una cadena de caracteres terminada en nulo de una ubicación a otra, convirtiendo las letras mayúsculas en minúsculas. La cadena que se copia es la "fuente" y la cadena en la que se almacena la fuente convertida es el "destino". TOLOWER

 
 
 
 
 
 
 
 
 
 
 
0080
 
0080  00 04
0082  00 05
 
0600
 
0600  A0 00
 
0602  B1 80
0604  F0 11
 
0606  C9 41
0608  90 06
 
060A  C9 5B
060C  B0 02
 
060E  09 20
 
0610  91 82
0612  C8   
0613  D0 ED
 
 
 
 
0615  38   
0616  60
 
0617  91 82
0619  18   
061A  60
 
061B
; TOLOWER:
;
;   Convert a null-terminated character string to all lower case.
;   Maximum string length is 255 characters, plus the null term-
;   inator.
;
; Parameters:
;
;   SRC - Source string address
;   DST - Destination string address
;
        ORG $0080
;
SRC     .WORD $0400     ;source string pointer
DST     .WORD $0500     ;destination string pointer
;
        ORG $0600       ;execution start address
;
TOLOWER LDY #$00        ;starting index
;
LOOP    LDA (SRC),Y     ;get from source string
        BEQ DONE        ;end of string
;
        CMP #'A'        ;if lower than UC alphabet...
        BCC SKIP        ;copy unchanged
;
        CMP #'Z'+1      ;if greater than UC alphabet...
        BCS SKIP        ;copy unchanged
;
        ORA #%00100000  ;convert to lower case
;
SKIP    STA (DST),Y     ;store to destination string
        INY             ;bump index
        BNE LOOP        ;next character
;
; NOTE: If Y wraps the destination string will be left in an undefined
;  state.  We set carry to indicate this to the calling function.
;
        SEC             ;report string too long error &...
        RTS             ;return to caller
;
DONE    STA (DST),Y     ;terminate destination string
        CLC             ;report conversion completed &...
        RTS             ;return to caller
;
        .END

Errores y peculiaridades

El 6502 tenía varios errores y peculiaridades, que debían tenerse en cuenta al programarlo:

  • Las primeras revisiones del 6502, como las enviadas con algunas computadoras KIM-1 , tenían un error severo en la instrucción ROR (rotar memoria derecha o acumulador). La operación de ROR en estos chips es efectivamente una instrucción ASL (desplazamiento aritmético a la izquierda) que no afecta el bit de acarreo en el registro de estado. MOS dejó la instrucción fuera de la documentación del chip por completo debido al defecto, prometiendo que ROR aparecería en 6502 chips a partir de 1976. La gran mayoría de los 6502 chips que existen hoy en día no presentan este error.
  • La familia NMOS 6502 tiene una variedad de instrucciones indocumentadas , que varían de un fabricante de chips a otro. La decodificación de instrucciones 6502 se implementa en una matriz lógica cableada (similar a una matriz lógica programable ) que solo se define para 151 de los 256 códigos de operación disponibles . Los 105 restantes desencadenan acciones extrañas y en ocasiones difíciles de predecir, como bloquear el procesador, ejecutar dos instrucciones válidas consecutivamente, realizar mezclas extrañas de dos instrucciones o simplemente no hacer nada en absoluto. Eastern House Software desarrolló el "Trap65", un dispositivo que se conectaba entre el procesador y su zócalo para convertir (capturar) códigos de operación no implementados en instrucciones BRK (interrupción de software). Algunos programadores utilizaron esta función para ampliar el conjunto de instrucciones 6502 proporcionando funcionalidad para los códigos de operación no implementados con software especialmente escrito interceptado en el vector 0xFFFE de la instrucción BRK. Todos los códigos de operación indefinidos han sido reemplazados por instrucciones NOP en el 65C02 , una versión CMOS mejorada del 6502, aunque con tamaños de bytes y tiempos de ejecución variables. En el 65C802 / 65C816 , los 256 códigos de operación realizan operaciones definidas.
  • La instrucción de salto indirecto de memoria del 6502 JMP (<address>), está parcialmente rota. Si <dirección> es xxFF hexadecimal (es decir, cualquier palabra que termine en FF ), el procesador no saltará a la dirección almacenada en xxFF y como se esperaba, sino a la definida por xxFF y xx00 (por ejemplo, saltará a la dirección almacenado en 10FF y 1000, en lugar del almacenado en 10FF y 1100). Este defecto continuó a lo largo de toda la línea NMOS, pero se corrigió en los derivados CMOS.xxFF+1JMP ($10FF)
  • El direccionamiento indexado NMOS 6502 a través de los límites de la página hará una lectura adicional de una dirección no válida. Esta característica puede causar problemas aleatorios al acceder al hardware que actúa en una lectura, como borrar el temporizador o los indicadores de IRQ, enviar un protocolo de enlace de E / S, etc. Este defecto continuó a lo largo de toda la línea NMOS, pero se corrigió en las derivadas de CMOS, en que el procesador hace una lectura adicional del último byte de instrucción.
  • Las instrucciones de lectura-modificación-escritura del 6502 realizan un ciclo de lectura y dos de escritura. Primero, se vuelven a escribir los datos no modificados que se leyeron y, a continuación, se escriben los datos modificados. Esta característica puede causar problemas al acceder dos veces al hardware que actúa en una escritura. Esta anomalía continuó a lo largo de toda la línea NMOS, pero se corrigió en las derivadas CMOS, en las que el procesador hará dos lecturas y un ciclo de escritura. La práctica de programación defensiva generalmente evitará este problema al no ejecutar instrucciones de lectura / modificación / escritura en los registros de hardware.
  • Los indicadores de estado N (resultado negativo), V (desbordamiento de bit de signo) y Z (resultado cero) generalmente no tienen sentido cuando se realizan operaciones aritméticas mientras el procesador está en modo BCD , ya que estos indicadores reflejan el resultado binario, no BCD. Esta limitación se eliminó en los derivados de CMOS. Por lo tanto, esta función se puede utilizar para distinguir un procesador CMOS de una versión NMOS.
  • Si el 6502 está en modo BCD cuando ocurre una interrupción de hardware, no volverá al modo binario. Esta característica podría resultar en errores oscuros en la rutina del servicio de interrupción si no logra borrar el modo BCD antes de realizar cualquier operación aritmética. Por ejemplo, el Commodore 64 's meollo no manejar correctamente esta característica procesador, que exige que las IRQ ser re-vectorialmente a personas con discapacidad o durante las operaciones matemáticas BCD. Este problema también se abordó en los derivados de CMOS.
  • El conjunto de instrucciones 6502 incluye BRK (código de operación $ 00), que técnicamente es una interrupción de software (similar en espíritu al mnemónico SWI de los procesadores Motorola 6800 y ARM ). BRK se usa con mayor frecuencia para interrumpir la ejecución del programa e iniciar un monitor de lenguaje de máquina para probar y depurar durante el desarrollo de software. BRK también podría usarse para enrutar la ejecución del programa usando una tabla de salto simple (análoga a la forma en que Intel 8086 y sus derivados manejan las interrupciones de software por número). Sin embargo, si se produce una interrupción de hardware cuando el procesador está obteniendo una instrucción BRK, la versión NMOS del procesador no podrá ejecutar BRK y, en su lugar, procederá como si solo hubiera ocurrido una interrupción de hardware. Esta falla se corrigió en la implementación CMOS del procesador.
  • Al ejecutar instrucciones JSR (salto a subrutina) y RTS (retorno de subrutina), la dirección de retorno empujada a la pila por JSR es la del último byte del operando JSR (es decir, el byte más significativo de la dirección de subrutina), en lugar de la dirección de la siguiente instrucción. Esto se debe a que la copia real (del contador del programa a la pila y luego a la inversa) tiene lugar antes del incremento automático del contador del programa que se produce al final de cada instrucción. Esta característica pasaría desapercibida a menos que el código examinara la dirección de retorno para recuperar parámetros en el flujo de código (un lenguaje de programación 6502 documentado en el Manual de referencia técnica de ProDOS 8 ). Sigue siendo una característica de 6502 derivados hasta el día de hoy.

Ver también

Notas

Referencias

Citas

Bibliografía

Otras lecturas

Hojas de datos y manuales
Libros
Tarjetas de referencia
  • 6502 Tarjeta de referencia instantánea del microprocesador ; James Lewis; Micro Logic; 2 páginas; 1980. (archivo)

enlaces externos

Simuladores / Emuladores
Tableros
FPGA