![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
VSS![]() |
![]() |
1![]() |
![]() |
40 | ![]() |
![]() |
![]() |
![]() |
RDY![]() |
![]() |
2![]() |
![]() |
39 | ![]() |
![]() |
![]() |
![]() |
Phase1 (Out)![]() |
![]() |
3![]() |
![]() |
38 | ![]() |
![]() |
![]() |
![]() |
IRQ![]() |
![]() |
4![]() |
![]() |
37 | ![]() |
![]() |
![]() |
![]() |
Not connected![]() |
![]() |
5![]() |
![]() |
36 | ![]() |
![]() |
![]() |
![]() |
NMI![]() |
![]() |
6![]() |
![]() |
35 | ![]() |
![]() |
![]() |
![]() |
Sync![]() |
![]() |
7![]() |
![]() |
34 | ![]() |
![]() |
![]() |
![]() |
VCC![]() |
![]() |
8![]() |
![]() |
33 | ![]() |
![]() |
![]() |
![]() |
AB0![]() |
![]() |
9![]() |
![]() |
32 | ![]() |
![]() |
![]() |
![]() |
AB1![]() |
![]() |
10![]() |
![]() |
31 | ![]() |
![]() |
![]() |
![]() |
AB2![]() |
![]() |
11![]() |
![]() |
30 | ![]() |
![]() |
![]() |
![]() |
AB3![]() |
![]() |
12![]() |
![]() |
29 | ![]() |
![]() |
![]() |
![]() |
AB4![]() |
![]() |
13![]() |
![]() |
28 | ![]() |
![]() |
![]() |
![]() |
AB5![]() |
![]() |
14![]() |
![]() |
27 | ![]() |
![]() |
![]() |
![]() |
AB6![]() |
![]() |
15![]() |
![]() |
26 | ![]() |
![]() |
![]() |
![]() |
AB7![]() |
![]() |
16![]() |
![]() |
25 | ![]() |
![]() |
![]() |
![]() |
AB8![]() |
![]() |
17![]() |
![]() |
24 | ![]() |
![]() |
![]() |
![]() |
AB9![]() |
![]() |
18![]() |
![]() |
23 | ![]() |
![]() |
![]() |
![]() |
AB10![]() |
![]() |
19![]() |
![]() |
22 | ![]() |
![]() |
![]() |
![]() |
AB11![]() |
![]() |
20![]() |
![]() |
21 | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Pin | Nombre | Dir | Descripción | Pin | Nombre | Dir | Descripción | |
---|---|---|---|---|---|---|---|---|
1 | VSS | ![]() |
Masa | 40 | /RES | ![]() |
Reset | |
2 | RDY | Memory ready signal | 39 | 02 | ![]() |
Sync / Clock out | ||
3 | 01 | ![]() |
Clock out (02 invertido) | 38 | SO | Set Overflow flag | ||
4 | /IRQ | ![]() |
Interrupt request signal | 37 | 00 | ![]() |
Clock in | |
5 | NC | No conectado | 36 | NC | No conectado | |||
6 | /NMI | ![]() |
Interrupcion no enmascarable | 35 | NC | No conectado | ||
7 | SYNC | 34 | R//W | |||||
8 | Vdd | ![]() |
Alimentación | 33 | D0 | ![]() |
Data Bus 0 | |
9 | A0 | ![]() |
Adress Bus 0 | 32 | D1 | ![]() |
Data Bus 1 | |
10 | A1 | ![]() |
Adress Bus 1 | 31 | D2 | ![]() |
Data Bus 2 | |
11 | A2 | ![]() |
Adress Bus 2 | 30 | D3 | ![]() |
Data Bus 3 | |
12 | A3 | ![]() |
Adress Bus 3 | 29 | D4 | ![]() |
Data Bus 4 | |
13 | A4 | ![]() |
Adress Bus 4 | 28 | D5 | ![]() |
Data Bus 5 | |
14 | A5 | ![]() |
Adress Bus 5 | 27 | D6 | ![]() |
Data Bus 6 | |
15 | A6 | ![]() |
Adress Bus 6 | 26 | D7 | ![]() |
Data Bus 7 | |
16 | A7 | ![]() |
Adress Bus 7 | 25 | A15 | ![]() |
Adress Bus 15 | |
17 | A8 | ![]() |
Adress Bus 8 | 24 | A14 | ![]() |
Adress Bus 14 | |
18 | A9 | ![]() |
Adress Bus 9 | 23 | A13 | ![]() |
Adress Bus 13 | |
19 | A10 | ![]() |
Adress Bus 10 | 22 | A12 | ![]() |
Adress Bus 12 | |
20 | A11 | ![]() |
Adress Bus 11 | 21 | VSS | ![]() |
Masa |
El MOS Technology 6502 es un microprocesador de 8 bits diseñado por MOS Technology en 1975. Cuando se introduce en el mercado es la CPU completa más barata de lejos, a 1/6 o menos del precio de sus competidoras los gigantes Intel y Motorola. Es además mucho más rápida, y con el Zilog Z80, serán el motor de numerosos desarrollos informáticos que devendrán en la revolución del ordenador doméstico de los 80. El diseño del 6502 es vendido a Rockwell y Synertek (MOS sigue fabricándolo) y licenciado más adelante a numerosas compañías. Todavía se usa en diseños embebidos
Historia y uso
El 6502 es diseñado por el mismo equipo que creó el Motorola 6800. Tras abandonar Motorola en masa, diseñaron rápidamente el 6501, un nuevo diseño pero pin-compatible con el 6800. Motorola les demandado inmediatamente, y aunque el caso se habría solucionado por acuerdo, el daño a MOS es tan grave para que acuerden parar la producción del 6501.
El resultado es el "legalmente-compatible" 6502, que se diferencia sólo por un cambio del pinout que lo hace inutilizable en una placa base 6800; Motorola no parece más interesado. Sin embargo esto deja a MOS con el problema de conseguir nuevos desarrollos para el sistema, por lo que el ingeniero Chuck Peddle diseña el KIM-1, un ordenador monotarjeta. Para su sorpresa, el Kim-1 tiene ventas muy numerosas a los aficionados, así como al mercado previsto de ingenieros. El Rockwell AIM 65, un sistema de control/entrenamiento/desarrollo se vende también bien. Otr diseño similar es el Synertek Sym-1 .
El 6502 se lanza al mercado en Septiembre de 1975 a $25, mientras que los 6800 e Intel 8008 se vendían a $179. Al principio mucha gente pensaba que era algún tipo de engaño pero antes de que se monte una demostración, Motorola e Intel reducen sus precios a $79. En vez del ahorro, el 6502 estaba ahora legitimado y comenzaron a vender por centenares.
El 6502 tiene una característica que lo hace ideal para los sistemas de ordenadores domésticos, un pequeño retraso en el que se garantiza que no tiene acceso al bus. El hardware de video puede utilizar ese período para leer una línea de la pantalla sin tener que pausar el 6502 mientras esto ocurre. En términos generales esto acelera el funcionamiento de un sistema 6502 en un 25%.
Una de los primeros usos es la consola de videojuegos Atari 2600. La 2600 utilizan un vástago del 6502 llamado 6507 , que tiene menos pines y por ello sólo puede direccionar 8 Kb de RAM. Se venderán millones. El siguiente uso del 6502 es la familia Apple II , y tras ello aparecen rápidamente varios ordenadores de Commodore, Atari, el BBC micro (y toda la serie atómica de Acorn), y un número enorme de otro diseños ahora perdidos en la historia.
Otro uso importante del 6502 es la Nintendo Famicom , una consola de videojuegos japonesa. Su equivalente norteamericano y europeo es la NES ( Nintendo Entertainment System ) El 6502 usado en la NES es una versión modificada que fue producida solamente para Nintendo , llamada 2A03. El 2A03 carece del modo decimal 6502 pero agrega 23 registros mapeados en memoria para generar sonido, dibujo de objetos, y la lectura del joypad.
El eficiente diseño de los 6502 también inspira a los diseñadores del procesador del RISC ARM, y así la herencia de los 6502 se puede de decir para superar al procesador original (familia) puesto que su espíritu vive en el diseño del ARM, usado en varias computadoras de escritorio así como en numerosos PDAs, ordenadores de mano, teléfonos móviles y sistemas embebidos, y se vende como un bloque IP que se usa en sistemas todo-en-un-chip.
Descripción
El 6502 es un procesador 8-bit con un bus de direcciones de 16-bits . La lógica interna funciona a la misma velocidad que la frecuencia del reloj externo, pero las velocidades de reloj aparentemente lentas, típicamente 1 Mhz , eran realmente competitivas con otras CPUs que funcionaban cuatro veces más rápidas porque es un procesador pipelined estáticamente, y los otros de su tiempo fueron microcodificados y tenían velocidades internas comparables con los 6502 (el reloj interno del Z80, por ejemplo, está dividido por cuatro). Aunque esto puede sonar como un truco, tenía el efecto secundario de reducir la velocidad requerida para los periférico unidos a la CPU, reduciendo así el coste total del sistema; un factor importante para producir diseños ganadores para el muy sensible mercado de las consolas y ordenadores domésticos.
A diferencia del Intel 8080 y microprocesadores similares, el 6502 tiene muy pocos registros. Cuando la RAM es más rápida que la CPU, tiene sentido optimizar el acceso a RAM más que aumentan el número de registros en un chip. Dentro hay un registro acumulador de 8 bits (A), dos registros de índice de 8 bits (X e Y), un registro de estado de 8 bits (SR), un puntero de pila de 8 bits (SP), y un contador de programa de 16 bits (PC). La subrutina call/scratchpad de la pila de direcciones está direccionada por hard a la página $01 , es decir el rango $0100 - $01FF ( 256 - 511 ) de la memoria. El acceso del software a la pila se hace mediante cuatro instrucciones de direccionamiento cuya función es poner o quitar el acumulador o el registro del estado del procesador.
El chip utiliza el índice y los registros de pila con eficacia con varios modos de direccionamiento, incluyendo un rápido "página directa" o modo "página cero" que accede a las posiciones de memoria las posiciones de memoria de la dirección 0 a 255 con una sola dirección de 8 bits (no necesita traer un segundo octeto para la dirección) El código para el 6502 utiliza la página cero mucho pues el código para otros procesadores hubiera utilizado los registros. Por razones obvias, en la mayoría de los microordenadores basados en 6502 con un sistema operativo el OS en sí mismo casi utiliza la página cero entera, dejando apenas un puñado de las direcciones para el usuario.
Modos de dirección también incluyen implicados (instrucciones de 1 octeto); absoluto (3 octetos); relativo (2 octetos); acumulador (1); indirecto, x e indirecto, y (2); e inmediato (2). El modo absoluto era un modo de uso general. Relativo es usado para los saltos de rama condicionales, que pueden mover el contador de programa hasta 128 octetos adelante o atrás. El modo del acumulador utiliza el acumulador como direccionamiento efectivo, y no necesita ningun dato de operando. El modo inmediato utiliza un operando literal 8-bit.
Los modos indirectos son útiles para procesar arrays y otros bucles. Con el modo indirecto, y el registro de 8 bits Y es añadido a una base de 16 bits situada en la pagina cero de la memoria (un byte en el opcode denota la localización de la página cero). Los registros de 8 bits X e Y son utilizados más como calificadores de desplazamiento que su uso ' normal ' de registros de índice. Incrementando X o Y para recorrer el array es una operación de dos ciclos de 8 bits, incluso si el array está situado en cualquier lugar de las direcciones de 16 bits (dado que la base 16-bits se lee en la página cero). Aquí es donde los 6502 se diferencian más del Motorola 6800. Un vistazo superficial a las especificaciones del 6502 que dicen que hay solamente registros de índice de 8 bits indice a error.
Un ejemplo simple pero característico del lenguaje ensamblador 6502 sería :
MSG: .ASCIIZ "Hello, world!" LDX #0 LDA MSG,X ; load initial char @LP: JSR $FFD2 ; chrout INX LDA MSG,X BNE @LP RTS
Características dudosas
El 6502 es notorio por tener una variedad de instrucciones indocumentadas, que varían de un diseño al siguiente. El decodificado de instrucciones en los 6502 es implementada en un array de lógica hardware (similar a un Programmable Logic Array ) que se define solamente para los opcodes válidos. Los 32 opcodes indocumentados accionan varias instrucciones válidas a la vez, dando resultados inesperados.
La instrucción de salto indirecto en el 6502, JMP (xxxx) , está quebrada. Si la dirección hexadecimal fuera xxFF , el procesador no tendrá acceso a la dirección almacenada en xxFF y xxFF+1 , sino a xxFF y a xx00. Los 6510 no fijaron este bug, ni es fijado en cualquiera de las otras versiones NMOS de los 6502 como los 8502 y el 2A03. Bill Mensch, del Western Design Center es el primero en fijarlo, en la versión 65C02 CMOS; entonces se decidió diseñar el procesador 65C816 , un sucesor 16-bit del 65C02.
Anecdotario 6502