Tecnología MOS 6502
La tecnología MOS 6502 (generalmente se pronuncia "sesenta y cinco cero dos" o "seis cinco cinco cero dos") es un 8 microprocesador de 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 el 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, generó una serie de proyectos que resultaron en la revolución de las computadoras personales de principios de la década de 1980.
Consolas de videojuegos populares y computadoras domésticas de la década de 1980 y principios de la de 1990, como Atari 2600, la familia Atari de 8 bits, Apple II, Nintendo Entertainment System, Commodore 64, Atari Lynx, BBC Micro y otras, usan el 6502 o variaciones del diseño básico. Poco después de la introducción del 6502, Commodore International compró MOS Technology y continuó vendiendo el microprocesador y las licencias a otros fabricantes. En los primeros días del 6502, Rockwell y Synertek lo adquirieron en segundo lugar, y más tarde lo licenciaron a otras empresas.
En 1981, el Western Design Center comenzó a desarrollar una versión CMOS, la 65C02. Esto continúa siendo ampliamente utilizado en sistemas integrados, con volúmenes de producción estimados en cientos de millones.
Historia y uso
Orígenes en Motorola
El 6502 fue diseñado por muchos de los mismos ingenieros que diseñaron 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 fines de 1972, los primeros chips 6800 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, quien luego hizo el 6501, ayudó a Buchanan con análisis de circuitos y diseño de chips. Bill Mensch se unió a Motorola en junio de 1971 después de graduarse de la Universidad de Arizona (a los 26 años). Su primera asignación fue ayudar a definir los circuitos integrados periféricos para la familia 6800 y luego fue el diseñador principal del adaptador de interfaz periférica (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 serial).
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 'familia total de productos' de Motorola La estrategia 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 "EXORciser" sistema de depuración, capacitación en el sitio y soporte de ingenieros de aplicaciones de campo. Tanto Intel como Motorola habían anunciado inicialmente un precio de $360 por un solo microprocesador. El precio real de las cantidades de producción era 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 a los clientes, descubrió que los clientes se desanimaban por el alto costo de los chips de microprocesador. Al mismo tiempo, estas visitas invariablemente dieron como resultado que los ingenieros a los que presentaba produjeran listas de instrucciones requeridas que eran mucho más pequeñas que "todas estas instrucciones sofisticadas" que se había incluido en el 6800. Peddle y otros miembros del equipo comenzaron a esbozar el diseño de un microprocesador de características mejoradas y 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, a 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 disgustados con la próxima reubicación 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. Eventualmente, Peddle recibió una carta oficial diciéndole 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 ahora era suya. En una entrevista de noviembre de 1975, el presidente de Motorola, Robert Galvin, finalmente estuvo de acuerdo en que el concepto de Peddle era bueno y que la división perdió una oportunidad: "No elegimos a los líderes correctos en el División de Productos Semiconductores." La división fue reorganizada y la gerencia reemplazada. El nuevo vicepresidente del grupo, John Welty, dijo: "La organización de ventas de semiconductores perdió su sensibilidad hacia las necesidades de los clientes y no pudo tomar decisiones rápidas".
Tecnología MOS
Peddle comenzó a buscar fuera de Motorola una fuente de financiamiento para este nuevo proyecto. Inicialmente se acercó al director ejecutivo de Mostek, L. J. 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 director 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 había aprendido por su cuenta el diseño de semiconductores. Paivinen luego formó MOS Technology en Valley Forge, Pensilvania 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 empresa diseñó y fabricó circuitos integrados personalizados para los clientes y desarrolló una línea de chips para calculadoras.
Después de que los esfuerzos de Mostek fracasaran, Peddle se acercó a Paivinen, quien "inmediatamente entendió". 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 en el 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 para competir con el recientemente presentado Intel 4040 que vendido por $29 en un chipset completo similar.
Los chips se fabrican mediante la impresión de varias copias del diseño del chip en la superficie de una "oblea", un disco delgado de silicio de gran pureza. Los chips más pequeños se pueden imprimir en mayor número en la misma oblea, lo que reduce su precio relativo. Además, las obleas siempre incluyen una serie de pequeños defectos físicos que se encuentran dispersos 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 con un defecto. Por ambas razones, el costo del producto final depende en gran medida del tamaño del diseño del chip.
Los 6800 chips originales estaban destinados a ser 180 mils × 180 mils (4,6 mm × 4,6 mm), pero el diseño se completó en 212 mils × 212 mils (5,4 mm × 5,4 mm), o un área de 29,0 mm2. Para el nuevo diseño, el objetivo de costo exigía un objetivo de tamaño de 153 mils × 168 mils (3,9 mm × 4,3 mm), o un área de 16,6 mm2. Se necesitarían varias técnicas nuevas para alcanzar este objetivo.
Pasando a NMOS
Hubo dos avances significativos que llegaron al mercado justo cuando se estaba diseñando el 6502 que proporcionaron reducciones de costos significativas. El primero fue el cambio a NMOS de carga de agotamiento. El 6800 usaba un proceso NMOS temprano que requería tres voltajes de suministro, pero una de las características del chip era un duplicador de voltaje integrado que permitía usar un solo suministro de +5 V para +5, −5 y +12 V internamente, a diferencia de otros chips de la época como el Intel 8080 que requería tres pines de suministro separados. Si bien esta función redujo la complejidad de la fuente de alimentación y el diseño de los pines, todavía requería rieles de alimentación separados para las distintas puertas del chip, lo que aumentaba la complejidad y el tamaño. Al pasar al nuevo diseño de carga de agotamiento, todo lo que se necesitaba era un solo suministro de +5 V, lo que eliminaba 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 independiente que pudiera proporcionar una señal potente. Con los requisitos de energía reducidos de NMOS, el reloj podría moverse 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 estaba ocurriendo 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 encendiéndola con una luz brillante. Las máscaras a menudo recogían pequeños fragmentos de suciedad o fotorresistencia cuando se levantaban del chip, lo que provocaba fallas en esos lugares en cualquier enmascaramiento posterior. Con diseños complejos como las CPU, se usarían 5 o 6 de estos pasos de enmascaramiento, y la posibilidad de que al menos uno de estos pasos introdujera una falla 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 costo 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 la 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 observaban en diseños complejos. El rendimiento de las CPU saltó inmediatamente del 10 % al 60 ó 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 de 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 antiguos empleados de Motorola que trabajaron en el desarrollo del sistema 6800 para poner a cabo una parte que reemplazaría y superaría a los 6800, pero lo subvenciona. Con el beneficio de la retrospectiva ganada en el proyecto 6800, el equipo MOS Technology encabezado por Chuck Peddle, realizó los siguientes cambios arquitectónicos en la CPU de Motorola...
El cambio principal 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 funciones de acceso directo a memoria (DMA) y coprocesamiento, a costa de un espacio de matriz significativo. 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 del chip para coordinar dicho acceso. El 6502 simplemente eliminó esta función, 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 cualquier persona que realmente necesitara este estilo de acceso podría implementarlo con un solo 74158.
La siguiente gran diferencia fue la simplificación de los registros. Para empezar, se quitó uno de los dos acumuladores. Muchas partes del decodificador de instrucciones deben acceder a los registros de propósito general, como los acumuladores, y por lo tanto requieren cantidades significativas de cableado para mover los datos hacia y desde su almacenamiento. Dos acumuladores facilitan muchas tareas de codificación, pero le cuestan al diseño del chip una complejidad significativa. Se lograron más ahorros 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 largo, 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 se compensaba con un número de 8 bits proporcionado con la instrucción, los dos se sumaban para producir la dirección final. En el 6502 (y en la mayoría de los demás diseños), la dirección base de 16 bits se almacenaba en la instrucción y se le agregaba la X o la Y.
Finalmente, el conjunto de instrucciones se simplificó, 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 estaban las instrucciones que movían datos entre los dos acumuladores del 6800 y varias instrucciones de bifurcación inspiradas en el PDP-11, como la capacidad de comparar directamente dos valores numéricos. El 6502 usó un sistema más simple que manejaba las comparaciones al realizar operaciones matemáticas en el acumulador y luego examinar las banderas 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, todo el diseño del chip tenía que ser considerado constantemente. Mensch y Paivinen trabajaron en el decodificador de instrucciones mientras que Mensch, Peddle y Orgill trabajaron en la ALU y los registros. Otro avance, 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 mils demasiado ancho. Los primeros 6502 chips eran 168 × 183 mils (4,3 × 4,7 mm), o un área de 19,8 mm2 . 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 tamaño del 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
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 reorganizaría 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 del 6800 porque tenían un conjunto de instrucciones diferente, registros diferentes y, en su mayoría, modos de direccionamiento diferentes. Rod Orgill fue el 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 presentació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 normalmente se usa para pruebas internas y se comparte con clientes selectos como "muestras de ingeniería". Estos chips a menudo tienen uno o dos defectos de diseño menores que se corregirán antes de que comience la producción. El objetivo de Chuck Peddle era vender los chips 6501 y 6502 de la primera ejecución 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 se cubrieron ampliamente en la prensa comercial. Uno de los primeros fue un artículo 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 $126 en 2021).
Cuando MOS Technology llegó a Wescon, descubrió que a los expositores no se les permitía vender nada en el piso de exhibición. Alquilaron la MacArthur Suite en el St. Francis Hotel y dirigieron a los clientes allí para 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 disponibles. Los clientes no sabían que la mitad inferior de cada frasco contenía chips no funcionales. Las fichas eran $20 y $25 mientras que el paquete de documentación era un $10. Se animó a los usuarios a hacer fotocopias de los documentos, una forma económica para que MOS Technology distribuya información sobre el producto. Las hojas de datos preliminares enumeraban solo 55 instrucciones, excluyendo la instrucción Rotar a la derecha (ROR) que no funcionaba correctamente en estos primeros chips. Las revisiones en Byte y EDN notaron 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 compañías de semiconductores solo querían lidiar con problemas "serios" clientes. 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.
Pin | 6800 | 6501 | 6502 |
---|---|---|---|
2 | Halt | Listo | Listo |
3 | ∅1 (in) | ∅1 (in) | ∅1 (sin) |
5 | Dirección de memoria válida | Dirección de memoria válida | N.C. |
7 | Bus disponible | Bus disponible | SYNC |
36 | Autobús de datos | Autobús de datos | N.C. |
37 | ∅2 (in) | ∅2 (in) | ∅0 (in) |
38 | N.C. | N.C. | Juego de bandera de desbordamiento |
39 | Control de tres estados | N.C. | ∅2 (sin) |
Demanda de Motorola
La presentación impresa y en Wescon del 6501/6502 fue un gran éxito. La desventaja fue que la amplia 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 $300 se redujo a $150 y ahora viene 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 de microprocesador. 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 multimillonaria con un caso plausible y abogados caros. El 30 de octubre de 1974, Motorola había presentado numerosas solicitudes de patentes 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 del chip 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 participación 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 patentes. Durante el proceso de descubrimiento, Motorola descubrió que un ingeniero, Mike Janes, había ignorado las instrucciones de Peddle y llevó 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 abandonar el procesador 6501, pagar a Motorola $200,000 y devolver los documentos que Motorola afirmaba que eran confidenciales. Ambas compañías acordaron licencias cruzadas de patentes de microprocesadores. Ese mayo, Motorola bajó el precio de un solo microprocesador 6800 a $35. Para noviembre, Commodore había adquirido MOS Technology.
Ordenadores y juegos
Con los problemas legales detrás de ellos, MOS aún tenía 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 empresa diseñó el KIM-1, que se vendió semicompleto 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 sorpresa, el KIM-1 se vendió bien entre los aficionados, los manitas y los ingenieros a los que estaba destinado. El sistema relacionado de control, entrenamiento y 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 "públicos" Los usos para el diseño fueron la microcomputadora Apple I, presentada en 1976. La 6502 se usó luego en Commodore PET y Apple II, ambas lanzadas en 1977. Más tarde se usó en la familia Atari de 8 bits y las computadoras domésticas Acorn Atom. el BBC Micro, el VIC-20 y otros diseños tanto para ordenadores domésticos como empresariales, como Ohio Scientific 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. 6502 o variantes se usaron en todas las unidades de disquete de Commodore para todas sus computadoras de 8 bits, desde la línea PET (algunas de las cuales tenían dos CPU basadas en 6502) hasta Commodore 128D, incluido Commodore 64, y en todas las unidades de disco de Atari para toda su línea de computadoras de 8 bits, desde la 400/800 hasta la XEGS.
Otro uso importante de la familia 6500 fue en los videojuegos. El primero en hacer uso del diseño del procesador fue Atari VCS, más tarde rebautizado como Atari 2600. El VCS usaba una variante 6502 llamada 6507, que tenía menos pines, por lo que solo podía manejar 8 KB de memoria. Se venderían millones de las consolas Atari, cada una con un procesador MOS. Otro uso importante fue el de Nintendo Entertainment System y Famicom. El 6502 utilizado en la NES era una segunda versión de 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 generación de sonido, lectura de joypad y sprite. lista DMA. Llamado 2A03 en consolas NTSC y 2A07 en consolas PAL (la diferencia es la relación de división de memoria y una tabla de búsqueda de 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 microprocesador Junior Computer.
Descripción técnica
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | (Posición de bits) |
Registros principales | ||||||||||||||||
A | Acumulador | |||||||||||||||
Registros de índices | ||||||||||||||||
X | X índice | |||||||||||||||
Y | Y índice | |||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | SP | Stack Pointer | |||||||
Contrato de programas | ||||||||||||||||
PC | Program Counter | |||||||||||||||
Registro de registro | ||||||||||||||||
N | V | - | B | D | I | Z | C | Banderas procesadoras |
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 mm2.
La lógica interna se ejecuta a la misma velocidad que la frecuencia del reloj externo, pero a pesar de las bajas velocidades del reloj (generalmente en la vecindad de 1 a 2 MHz), el rendimiento del 6502 fue competitivo con otras CPU contemporáneas que utilizan 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 directamente el ciclo de la máquina. 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 dinámico NMOS 6502 no está secuenciado por una ROM de microcódigo, sino que usa 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 del 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 del chip). Esto fue fundamental en un momento en que la memoria asequible tenía tiempos de acceso en el rango 250–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 podrían acceder a la memoria durante esos momentos cuando el 6502 estaba fuera del bus. Esto a veces se conocía como "acceso oculto". Esta técnica fue muy 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 garantizó que la CPU y el hardware de video pudieran intercalar sus accesos, con un rendimiento total equivalente 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 BBC Micro, y aún usar las técnicas de bus compartido.
Registros
Al igual que 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 indicadores de estado del procesador (P; del bit 7 al bit 0 estos son los negativos (N), desbordamiento (V), reservado, ruptura (B), decimal (D), desactivación de interrupción (I), cero (Z) y bandera de acarreo (C)), un puntero de pila de 8 bits (S) y un contador de programa de 16 bits (PC). 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, lo que hacía un total de dieciséis registros de propósito general.
Para compensar un poco 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 el 64 KB de memoria. Esto proporciona acceso rápido a los primeros 256 bytes de RAM mediante el uso de instrucciones más cortas. Chuck Peddle ha dicho en entrevistas que la intención específica era permitir que estos primeros 256 bytes de RAM se utilizados como registros.
El espacio de direcciones de la pila está conectado 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ícitas, cuyas funciones son empujar o abrir (jalar) el acumulador o el registro de estado del procesador. La misma pila también se usa 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 los registros de índice y pila de manera efectiva con varios modos de direccionamiento, incluido un rápido "página directa" o "página cero" modo, similar al que se encuentra en el PDP-8, que accede a ubicaciones de memoria desde las direcciones 0 a 255 con una sola dirección de 8 bits (guardando el ciclo que normalmente se requiere para obtener el byte de orden superior de la dirección): código para el 6502 usa la página cero tanto como el código para 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); y inmediato (2). El modo absoluto es un modo de propósito 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 son 126 bytes hacia atrás y 129 bytes hacia adelante desde el comienzo de la instrucción de bifurcación). El modo de 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 ciclo 5/6 "(indirecto),y" modo, 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 encuentra 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 utiliza para contener un índice real (a diferencia del registro X en el 6800, donde se establecía una dirección base). almacenados directamente y a los que se podría añadir una compensación inmediata). Incrementar el registro de índice para recorrer la matriz en bytes requiere solo dos ciclos adicionales. Con el uso menos frecuente "(indirect,x)" modo, 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 instrucción SED
(establecer indicador D) da como resultado aritmética decimal, en la que $99 + $01
daría como resultado $00 y se establece la bandera de acarreo (C). En modo binario (CLD
, borrar bandera D), la misma operación daría como resultado $9A y la bandera de acarreo se borraría. Aparte de Atari BASIC, el modo BCD rara vez se usaba en aplicaciones de computadora doméstica.
¡Mira el Hola mundo! artículo para un ejemplo simple pero característico del lenguaje ensamblador 6502.
Instrucciones y códigos de operación
Los códigos de operación de instrucción 6502 (códigos de operación) tienen una longitud de 8 bits y tienen la forma general AAABBBCC, donde AAA y CC definen el código de operación y BBB define el modo de direccionamiento.
Por ejemplo, considere la instrucción ORA
, 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 varias excepciones. Sin embargo, cuando se aplica, permite deconstruir fácilmente los valores del código de operación para convertirlos en mnemotécnicos 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 CMOS de 16 bits descendiente 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 en las que los 4 bits de orden inferior (nibble) eran 3, 7, B o F no se usaban, lo que dejaba espacio para futuras expansiones. Asimismo, la columna $2x tenía una sola entrada, LDX #constant
. Se distribuyeron los 25 espacios vacíos restantes. Algunas de las ranuras vacías se utilizaron en el 65C02 para proporcionar nuevas instrucciones y variaciones de las existentes con nuevos modos de direccionamiento. Las instrucciones de $Fx inicialmente se dejaron libres para permitir que los proveedores de terceros agregaran sus propias instrucciones, pero las versiones posteriores del 65C02 estandarizaron un conjunto de instrucciones de manipulación de bits desarrolladas por Rockwell Semiconductor.
Lenguaje ensamblador
Una instrucción en lenguaje ensamblador 6502 consta de una instrucción mnemotécnica de tres caracteres, seguida de cualquier operando. Las instrucciones que no toman un operando separado sino que apuntan a un solo registro basado en el modo de direccionamiento combinan el registro de destino en la instrucción mnemotécnica, por lo que el ensamblador usa INX
en lugar de INC X
para incrementar el registro X.
Tabla de instrucciones
Matriz de código de opción para el conjunto de instrucciones 6502 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Modos de dirección: A – acumulador, # – inmediata, zpg – página cero, abdominales – absoluto, ind – indirecto, X – indexado por el registro X, Y – indexado por el registro Y, rel - relativo | ||||||||||||
Alto ruido | Baja piedra | |||||||||||
0 | 1 | 2 | 4 | 5 | 6 | 8 | 9 | A | C | D | E | |
0 | BRK | ORA (ORA)ind,X) | ORA zpg | ASL zpg | PHP | ORA | ASL A | ORA abdominales | ASL abdominales | |||
1 | BPL rel | ORA (ORA)indSí. | ORA zpg,X | ASL zpg,X | CLC | ORA abdominalesSí. | ORA abdominales,X | ASL abdominales,X | ||||
2 | JSR abdominales | Yind,X) | BIT zpg | Y zpg | ROL zpg | PLP | Y... | ROL A | BIT abdominales | Y abdominales | ROL abdominales | |
3 | BMI rel | YindSí. | Y zpg,X | ROL zpg,X | SEC | Y abdominalesSí. | Y abdominales,X | ROL abdominales,X | ||||
4 | RTI | EORind,X) | EOR zpg | LSR zpg | PHA | EOR | LSR A | JMP abdominales | EOR abdominales | LSR abdominales | ||
5 | BVC rel | EORindSí. | EOR zpg,X | LSR zpg,X | CLI | EOR abdominalesSí. | EOR abdominales,X | LSR abdominales,X | ||||
6 | RTS | ADC (ADC)ind,X) | ADC zpg | ROR zpg | PLA | ADC | ROR A | JMP ()ind) | ADC abdominales | ROR abdominales | ||
7 | BVS rel | ADC (ADC)indSí. | ADC zpg,X | ROR zpg,X | SEI | ADC abdominalesSí. | ADC abdominales,X | ROR abdominales,X | ||||
8 | STA (STA)ind,X) | STY zpg | STA zpg | STX zpg | DEY | TXA | STY abdominales | STA abdominales | STX abdominales | |||
9 | BCC rel | STA (STA)indSí. | STY zpg,X | STA zpg,X | STX zpgSí. | TYA | STA abdominalesSí. | TXS | STA abdominales,X | |||
A | LDY | LDA ()ind,X) | LDX | LDY zpg | LDA zpg | LDX zpg | TAY | LDA | TAX | LDY abdominales | LDA abdominales | LDX abdominales |
B | BCS rel | LDA ()indSí. | LDY zpg,X | LDA zpg,X | LDX zpgSí. | CLV | LDA abdominalesSí. | TSX | LDY abdominales,X | LDA abdominales,X | LDX abdominalesSí. | |
C | CPY | CP/RP ()ind,X) | CPY zpg | CP/RP zpg | DEC zpg | INY | CP/RP # | DEX | CPY abdominales | CP/RP abdominales | DEC abdominales | |
D | BNE rel | CP/RP ()indSí. | CP/RP zpg,X | DEC zpg,X | CLD | CP/RP abdominalesSí. | CP/RP abdominales,X | DEC abdominales,X | ||||
E | CPX | SBC (SBC)ind,X) | CPX zpg | SBC zpg | INC zpg | INX | SBC # | NOP | CPX abdominales | SBC abdominales | INC abdominales | |
F | BEQ rel | SBC (SBC)indSí. | SBC zpg,X | INC zpg,X | SED | SBC abdominalesSí. | SBC abdominales,X | INC abdominales,X | ||||
Blank opcodes (por ejemplo, F2) y todos los opcodes cuyos bajos nibbles son 3, 7, B y F son indefinidos en el conjunto de instrucciones 6502. |
Comportamiento detallado
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 un circuito de interrupción O cableado no se admite fácilmente. Sin embargo, esto también evita que ocurran interrupciones anidadas de NMI hasta que el hardware vuelve a inactivar la entrada de NMI, a menudo bajo el control del controlador de interrupciones de NMI.
La confirmación simultánea de las líneas de interrupción de hardware NMI e IRQ (enmascarables) hace que se ignore IRQ. Sin embargo, si la línea IRQ permanece activa después del servicio de NMI, el procesador responderá inmediatamente a IRQ, ya que IRQ es sensible al nivel. Por lo tanto, se estableció una especie de prioridad de interrupción incorporada en el diseño 6502.
El indicador B se establece mediante el muestreo periódico de la salida del detector de borde NMI y la entrada IRQ del 6502. Sin embargo, la señal de IRQ que se está reduciendo solo se reconoce si la bandera I permite las IRQ. Si de esta manera se detecta una solicitud NMI o IRQ (enmascarable), el indicador B se establece en cero y hace que el procesador ejecute la siguiente instrucción BRK en lugar de ejecutar la siguiente instrucción según el contador del programa.
La instrucción BRK luego empuja el estado del procesador a la pila, con el bit de bandera B establecido en 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 que no sea BRK coloca el indicador B en la pila como parte del estado del procesador, el indicador B siempre tiene el valor uno.
Una transición de alto a bajo en el pin de entrada SO establecerá el bit de estado de desbordamiento del procesador. Esto se puede utilizar para una respuesta rápida al 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 instrucción Branch-on-oVerflow-Clear (BVC
) que se ramifica a sí mismo hasta que un SO establece el desbordamiento. transición descendente. El Commodore 1541 y otras unidades de disquete Commodore utilizan esta técnica para detectar cuándo el serializador está listo para transferir otro byte de datos del disco. El diseño del hardware y el software del sistema debe garantizar que no se produzca un SO durante el procesamiento aritmético ni se interrumpan los cálculos.
Variaciones y derivados
Hay muchas variantes del NMOS 6502 original.
Company | Modelo | Descripción |
---|---|---|
6502 | A 1 chip MHz usado en KIM-1 y otros ordenadores de tablero único a mediados de los 70. | |
6502A | Un chip de 1,5 MHz usado en Asteroids Deluxe y a 2 MHz, en la BBC Micro | |
6502B | Versión del 6502 capaz de correr a una velocidad máxima de 3 MHz en lugar de 2 MHz. El B fue utilizado en la Apple III y, relojizado en 1.79 MHz, primeros ordenadores de 8 bits de Atari. | |
6502C | El “oficial” 6502C fue una versión del original 6502 capaz de correr hasta 4 MHz.
No confundirse con SALLY, una costumbre 6502 diseñada para Atari (y a veces referida por ellos como "6502C") ni con el mismo nombre 65C02. | |
SALLY, C014806, "6502C" | Versión personalizada 6502 diseñada para Atari, utilizada en computadoras de 8 bits de Atari y consolas Atari 5200 y Atari 7800.
Tiene 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 estándar 6502). Tirando HALT baja latches el reloj, pasando el procesador. Esto se utilizó para permitir el acceso directo a la memoria del circuito de vídeo (DMA). Aunque a veces se refiere como "6502C" en la documentación de Atari, esto no es lo mismo que el "oficial" 6502C y el chip en sí nunca se marca como tal. | |
MOS | 6503 | Capacidad de tratamiento de memoria reducida (4 KB) y sin entrada RDY, en un paquete DIP de 28 pines (con la fase 1 (OUT), SYNC, Vs redundante, y SO pins del 6502 también omitido). |
MOS | 6504 | Capacidad de tratamiento de memoria reducida (8 KB), sin NMI, y sin entrada RDY, en un paquete DIP de 28 pines (con la fase 1 (OUT), SYNC, Vs redundante, y SO pins del 6502 también omitido). |
MOS | 6505 | Capacidad de tratamiento de memoria reducida (4 KB) y no NMI, en un paquete DIP de 28 pines (con la fase 1 (OUT), SYNC, Vss redundante, y los pines SO de 6502 también omitieron). |
MOS | 6506 | Capacidad de tratamiento de memoria reducida (4 KB), sin NMI, y sin entrada RDY, pero los 3 pines de reloj de la 6502 (es decir, un reloj de salida de 2 fases), en un paquete DIP de 28 puntos (con el SYNC, Vs redundante, y SO pins de la 6502 también omitido). |
MOS | 6507 | Capacidad de tratamiento de la memoria reducida (8 KB) y no interrumpe, en un paquete DIP de 28 pines (con la fase 1 (OUT), SYNC, Vss redundante, y los pines SO de 6502 también omitieron). Este chip fue utilizado en el sistema de videojuegos Atari 2600. |
MOS | 6508 | Tiene un puerto de entrada / salida integrado de 8 bits y 256 bytes de RAM estática interna. |
MOS | 6509 | Puede dirigirse hasta 1 MB de RAM como 16 bancos de 64 KB y fue utilizado en la serie Commodore CBM-II. |
MOS | 6510 | Tiene un puerto de entrada / salida programable integrado de 6 bits y fue utilizado en el Commodore 64. El 8500 es efectivamente una versión HMOS del 6510, y la sustituyó en versiones posteriores del C64. |
MOS | 6512 6513 6514 6515 | La tecnología MOS 6512, 6513, 6514 y 6515 dependen de un reloj externo, en lugar de utilizar un generador de reloj interno como el 650x (por ejemplo, 6502). Esto se utilizó para aprovechar en algunos diseños donde los relojes podrían funcionar asimétricamente, aumentando el rendimiento total 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 a bordo. Los 6513, 6514 y 6515 son igualmente equivalentes (respectivamente) a 6503, 6504 y 6505 con la misma entrada de reloj de 2 fases. El 6512 fue utilizado en el BBC Micro B+64. |
Ricoh | 2A03 | 6502 variante que incluye una unidad de procesamiento de audio pero sin el modo BCD, utilizado en el sistema Nintendo Entertainment. |
MOS | 6591 6592 | Sistema en diseños de chips que utilizan un Atari 2600 completo en un paquete DIP de 48 pines. |
WDC | 65C02 | Versión CMOS del NMOS 6502 que fue diseñado por Bill Mensch del Centro de Diseño Occidental (WDC), con reducción del consumo de energía, soporte para velocidades de reloj mucho más altas, nuevas instrucciones, nuevos modos de respuesta para algunas instrucciones existentes, y corrección de la errata NMOS, como la JMP ($xxFF) bicho.
|
WDC | 65SC02 | WDC 65C02 variante sin operaciones individuales de manipulación de bits (RMB, SMB, BBR y BBS). Este núcleo, que funciona en 4 MHz, fue utilizado en el sistema principal de Atari Lynx IC. |
CSG, MOS | 65CE02 | CMOS variante desarrollada por el Commodore Semiconductor Group (CSG), anteriormente MOS Technology. |
Rockwell | R6511Q R6500/11, R6500/12, R6500/15 "Microcomputadoras de un niño" | Versiones mejoradas del procesador de 6502, incluyendo operaciones individuales de manipulación de bits (RMB, SMB, BBR y BBS), on-chip 192 byte RAM de cero página, UART, etc. |
Rockwell | R65F11 R65F12 | El Rockwell R65F11 (introducido en 1983) y el posterior R65F12 son versiones mejoradas del procesador basado en 6502, incluyendo también operaciones individuales de manipulación de bits (RMB, SMB, BBR y BBS), RAM de página cero en chip, núcleo en chip Forth ROM, un UART, etc. |
GTE | G65SC102 | Software compatible con el 65C02, pero tiene un circuito ligeramente diferente de pinout y oscilador. El BBC Master Turbo incluyó la versión 4 MHz de esta CPU en una tarjeta de coprocesador, que también podría comprarse por separado y añadirse al Master 128. |
Rockwell | R65C00 R65C21 R65C29 | El R65C00, R65C21 y R65C29 tienen dos CMOS 6502s mejorados en un solo chip, y el R65C00 y R65C21 también contenía 2 KB de ROM de máscara programable. |
CM630 | A 1 MHz Eastern clon Bloc del 6502 y fue utilizado en el Pravetz 8A y 8C, clones búlgaros de la serie Apple //. | |
MOS | 7501 8501 | 6510 (un aumento de 6502) variantes, introducidas en 1984. Extendieron el número de pins de puerto I/O de 6 a 7, pero omitieron pins para la interrupción y salida de reloj no visible. Se utiliza en los ordenadores C-16, C-116 y Plus/4 de Commodore. La principal diferencia entre 7501 y 8501 CPU es que el 7501 fue fabricado con el proceso HMOS-1 y el 8501 con HMOS-2. |
MOS | 8500 | Introducido en 1985 como 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. Sustituyó el 6510 en versiones posteriores del Commodore 64. |
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 fue capaz de funcionar a una velocidad de reloj doble de los 6510. La familia 8502 también incluye los MOS 7501, 8500 y 8501. |
Hudson Soft | HuC6280 | Compañía japonesa de videojuegos Hudson Soft mejoró la versión del WDC 65C02. Fabricado para ellos por Seiko Epson y NEC para el SuperGrafx. El producto más notable utilizando la consola de videojuegos HuC6280 es NEC TurboGrafx-16. |
Derivadas de 16 bits
(feminine)El Western Design Center diseñó y actualmente produce el procesador WDC 65C816S, un sucesor de núcleo estático de 16 bits del 65C02. El W65C816S es una variante más nueva del 65C816, que es el núcleo de la computadora Apple IIGS y es la base del procesador Ricoh 5A22 que alimenta el sistema de entretenimiento Super Nintendo. El W65C816S incorpora mejoras menores sobre el 65C816 que hacen que el chip más nuevo no sea un reemplazo exactamente compatible con el hardware del anterior. Entre estas mejoras estaba 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 productos electrónicos, a partir de marzo de 2020, el W65C816S está clasificado oficialmente para operar 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 en el encendido, operando en "modo de emulación". Al igual que con el 65C816, una secuencia de dos instrucciones cambiaría el 65C802 al "modo nativo" operación, exponiendo su acumulador de 16 bits y registros de índice, y otras características de 65C816. El 65C802 no se usó mucho y la producción terminó.
Código de ejemplo
El siguiente código fuente en lenguaje ensamblador 6502 es para una subrutina llamada TOLOWER
, que copia una cadena de caracteres terminada en nulo de una ubicación a otra, convirtiendo letras mayúsculas en minúsculas. La cadena que se copia es el "origen", y la cadena en la que se almacena el origen convertido es el "destino".
0080 0080 00 040082 00 05 0600 0600 A0 00 0602 B1 800604 F0 11 0606 C9 410608 90 06 060A C9 5B060C B0 02 060E 09 20 0610 91 820612 C8 0613 D0 ED 0615 38 0616 60 0617 91 820619 18 061A 60 061B | ; TOLOWER:;; Convertir una cadena de caracteres nula-terminada en todo caso inferior.; La longitud máxima de cadena es de 255 caracteres, más el término nulo-; inator.;; Parámetros:;; SRC – Dirección de cadenas de fuentes; DST – Dirección de cadena de destino; ORG $0080;SRC . WORD $0400 ; puntero de cadena de fuenteDST . WORD $0500 ; puntero de cadena de destinación; ORG $0600 ; dirección inicial de ejecución;TOLOWER LDY #$00 ; índice de arranque;LOOP LDA ()SRC),Y ;get from source string BEQ DONE ; fin de cadena; CP/RP #'A ' ; si es inferior al alfabeto UC... BCC SKIP ; copia sin cambios; CP/RP #'Z'+1 ; si es mayor que el alfabeto UC... BCS SKIP ; copia sin cambios; ORA #%00100000 ;convertir al caso inferior;SKIP STA ()DST),Y ; tienda a cadena de destino INY ; índice de la bomba BNE LOOP ; carácter siguiente;; NOTA: Si Y envuelve la cadena de destino se dejará en un; estado. Ponemos llevar para indicar esto a la función de llamada.; SEC ; reportar cadena demasiado largo error &... RTS ; volver a llamar;DONE STA ()DST),Y ;terminar la cadena de destino CLC ; la conversión de los informes completados &... RTS ; volver a llamar; . FIN |
Errores y peculiaridades
El 6502 tenía varios errores y peculiaridades que debían tenerse en cuenta al programarlo:
- Las primeras revisiones de la 6502, como las enviadas con algunas computadoras KIM-1, tuvieron un grave error en la instrucción ROR (recoger la memoria correcta o acumulador). El funcionamiento de ROR en estos chips es efectivamente una instrucción ASL (desplazamientoaritmético izquierdo) que no afecta el bit de carga en el registro de estado. MOS dejó la instrucción de la documentación de chips por completo debido al defecto, prometiendo que ROR aparecería en 6502 fichas a partir de 1976. La gran mayoría de 6502 chips existentes hoy no exhiben 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 un array de lógica dura (similar a un array lógico programable) que se define sólo para 151 de los 256 opcodes disponibles. Los 105 restantes desencadenan acciones extrañas y ocasionalmente difíciles de predecir, como estrellar el procesador, realizar dos instrucciones válidas consecutivamente, realizar mezclas extrañas de dos instrucciones, o simplemente no hacer nada en absoluto. Eastern House Software desarrolló los "Trap65", un dispositivo que se conectaba entre el procesador y su socket para convertir (trap) opcodes unimplementados en BRK (interrumpir software). Algunos programadores utilizaron esta función para ampliar la instrucción 6502 establecida proporcionando funcionalidad para los opcodes unimplemented con software especialmente escrito interceptado en el vector 0xFFFE de la instrucción BRK. Todos los opcodes no definidos han sido reemplazados por instrucciones NOP en el 65C02, una versión CMOS mejorada del 6502, aunque con diferentes tamaños de byte y tiempos de ejecución. En el 65C802/65C816, los 256 opcodes realizan operaciones definidas.
- La instrucción de salto indirecto de memoria de 6502,
JMP ()
, está parcialmente roto. Si Identificado Hex xxFF (es decir, cualquier palabra terminando en FF), el procesador no saltará a la dirección almacenada en xxFF yxxFF+1
como se esperaba, pero más bien el definido por xxFF y xx00 (por ejemplo,JMP ($10FF)
saltaría a la dirección almacenada en 10FF y 1000, en lugar del almacenado en 10FF y 1100). Este defecto continuó a través de toda la línea NMOS, pero fue corregido en los derivados CMOS. - El NMOS 6502 indexado abordando los límites de página hará una lectura extra de una dirección inválida. Esta característica puede causar problemas aleatorios al acceder al hardware que actúa en una lectura, como temporizador de limpieza o banderas IRQ, enviar un apretón de manos I/O, etc. Este defecto continuó a través de toda la línea NMOS, pero fue corregido en los derivados CMOS, en los que el procesador hace una lectura extra del último byte de instrucción.
- Las instrucciones de 6502 leer–modificar–escribir realizan una lectura y dos ciclos de escritura. Primero, los datos no modificados que se leen se escriben de nuevo, y luego se escriben los datos modificados. Esta característica puede causar problemas al acceder dos veces al hardware que actúa sobre una escritura. Esta anomalía continuó a través de la línea NMOS completa, pero se fijó en los derivados CMOS, en los que el procesador hace dos lecturas y un ciclo de escritura. La práctica de programación defensiva generalmente evitará este problema al no ejecutar instrucciones de lectura/modificar/escribir en registros de hardware.
- Las banderas de estado N (resultar negativo), V (resultar cero) y Z (resultar cero) generalmente no tienen sentido al realizar operaciones aritméticas mientras el procesador está en modo BCD, ya que estas banderas reflejan el resultado binario, no BCD. Esta limitación fue eliminada en los derivados CMOS. Por lo tanto, esta característica puede utilizarse para distinguir un procesador CMOS de una versión NMOS.
- Si el 6502 sucede estar en modo BCD cuando se produce una interrupción del hardware, no se revertirá al modo binario. Esta característica podría resultar en errores oscuros en la rutina de servicio de interrupción si no deja de limpiar el modo BCD antes de realizar cualquier operación aritmética. Por ejemplo, el KERNAL de Commodore 64 no maneja correctamente esta característica del procesador, requiriendo que los IRQ sean desactivados o revectorados durante las operaciones de matemáticas de BCD. Este tema fue abordado también en los derivados CMOS.
- El conjunto de instrucciones 6502 incluye BRK (opcode $00), que es técnicamente una interrupción de software (similar en espíritu a la mnemónica SWI de los procesadores Motorola 6800 y ARM). BRK se utiliza con más frecuencia para interrumpir la ejecución del programa y comenzar un monitor de lenguaje de máquina para probar y depurar durante el desarrollo del software. BRK también podría ser utilizado para la ejecución del programa utilizando una simple tabla de saltos (análogo a la manera en que la Intel 8086 y derivados manejan software interrumpe por número). Sin embargo, si una interrupción del hardware ocurre cuando el procesador está trayendo una instrucción BRK, la versión NMOS del procesador no ejecutará BRK y en cambio procederá como si sólo hubiera ocurrido una interrupción del hardware. Esta falla fue corregida en la implementación CMOS del procesador.
- Al ejecutar instrucciones JSR (jump to subroutine) y RTS (retorno de la subrutina), la dirección de retorno empujada a la pila por JSR es la del último byte del JSR operand (es decir, el byte más significativo de la dirección de la subrutina), en lugar de la dirección de la siguiente instrucción. Esto se debe a que la copia real (desde el contador del programa a la pila y luego al revés) tiene lugar antes del aumento automático del contador del programa que ocurre al final de cada instrucción. Esta característica no 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 idioma de programación de 6502 documentado en el ProDOS 8 Manual de referencia técnica). Sigue siendo una característica de 6502 derivados a este día.
- El acceso de lectura de la CPU se puede retrasar estableciendo el pin RDY a bajo temporalmente. Sin embargo, durante el acceso a la escritura, que puede tomar hasta tres ciclos de reloj para una instrucción BRK, la CPU sólo se detendrá en el próximo ciclo de lectura. Este quirk fue corregido en los derivados CMOS y también en los 6510 y sus variantes.
Contenido relacionado
PDP-11
Formato de texto enriquecido
Ventanas 95