18
  Características técnicas [editar] Consola y CPU: MOS Technology 6507 @ 1,19 MHz y Procesador de audio y video:  TIA. 160 x ~190 píxeles, 128 colores en pantalla  pero con un máximo de 4 colores por línea; sonido monoaural de dos vías. y Memoria de lectura y escritura (RAM): 128 octetos en la consola dentro del chip MOS Technology 6532 , si bien algunos juegos pueden añadir hasta 256 octetos integrados en el cartucho. y Memoria de sólo lectura (ROM): 4 KB por cartucho (o más de 32 KB si el cartucho usa paginaci ón d e memoria  ). y Entrada: controlada por el chip RIOT incluye: o Dos puertos DE-9 sin tornillos para conectar joysticks, paddles, trackballs,  pedaleras, volantes, teclados numéricos de 12 teclas (0 -9, # y *) y cualqu ier otro tipo de control con funciones adicionales desarrollado por terceras compañías. Este tipo de puerto se convirtió en un e standar de facto para la conexión de joysticks y gamepads, la llamada norma Atari que utilizaron una inmensa mayoría de equipos de 8 bits en los ochenta, e incluso algunos de 16 bits: Sinclair ZX Spectrum, Amstrad CPC, Commodore 64, MSX, Master System y Mega Drive, entre muchos otros. o Seis interruptores: Encendido (encendido/apagado), señal de TV (monocromo/color), Nivel de dificultad para cada jugador (A/B), Select y Reset. Exceptuando al interruptor de encendido, los juegos podían (y lo hicieron) asignar otros significados a los demás interruptores. En los modelos que siguieron al original, los interruptores de dificul tad fueron reducidos y trasladados a la part e trasera de la consola. y Salida: Señal de video y audio para TV a través de un conector RCA (con normas  NTSC, PAL o SECAM dependiendo de la región; los cartuchos de juegos pueden ser usados indistintamente entre máquinas NTSC y PAL/S ECAM, pero si la norma no coincide entonces suelen aparec en colores distorsionados o la imagen no  permanece estable). [editar] Periféricos de terceras compañías y Starpath Supercharger , un cartucho con un conector para reproductor de casettes. y Gameline Master Module, un módem que permite descargar juegos y disfrutarlos durante una limitada cantidad de tiempo. y CompuMate, un teclado de Spectravideo que la convierte en ordenador .

La Arquitectura 6502

Embed Size (px)

Citation preview

Page 1: La Arquitectura 6502

5/9/2018 La Arquitectura 6502 - slidepdf.com

http://slidepdf.com/reader/full/la-arquitectura-6502 1/17

 

 

Características técnicas

[editar] Consola

y  CPU: MOS Technology 6507 @ 1,19 MHz

y  Procesador de audio y video: TIA. 160 x ~190 píxeles, 128 colores en pantalla pero con un máximo de 4 colores por línea; sonido monoaural de dos vías.

y  Memoria de lectura y escritura (RAM): 128 octetos en la consola dentro del chipMOS Technology 6532, si bien algunos juegos pueden añadir hasta 256 octetos

integrados en el cartucho.y  Memoria de sólo lectura (ROM): 4 KB por cartucho (o más de 32KB si el

cartucho usa paginación de memoria

 

).y  Entrada: controlada por el chip RIOT incluye:

o  Dos puertos DE-9 sin tornillos para conectar joysticks, paddles, trackballs,

 pedaleras, volantes, teclados numéricos de 12 teclas (0-9, # y *) y cualquier otro tipo de control con funciones adicionales desarrollado por tercerascompañías. Este tipo de puerto se convirtió en un estandar de facto para la

conexión de joysticks y gamepads, la llamada norma Atari que utilizaronuna inmensa mayoría de equipos de 8 bits en los ochenta, e incluso algunos

de 16 bits: Sinclair ZX Spectrum, Amstrad CPC, Commodore 64, MSX,Master System y Mega Drive, entre muchos otros.

o  Seis interruptores: Encendido (encendido/apagado), señal de TV(monocromo/color), Nivel de dificultad para cada jugador (A/B), Select y

Reset. Exceptuando al interruptor de encendido, los juegos podían (y lohicieron) asignar otros significados a los demás interruptores. En los

modelos que siguieron al original, los interruptores de dificultad fueronreducidos y trasladados a la parte trasera de la consola.

y  Salida: Señal de video y audio para TV a través de un conector RCA (con normas NTSC, PAL o SECAM dependiendo de la región; los cartuchos de juegos pueden

ser usados indistintamente entre máquinas NTSC y PAL/SECAM, pero si la normano coincide entonces suelen aparecen colores distorsionados o la imagen no

 permanece estable).

[editar] Periféricos de terceras compañías

y  Starpath Supercharger , un cartucho con un conector para reproductor de casettes.y  Gameline Master Module, un módem que permite descargar juegos y disfrutarlos

durante una limitada cantidad de tiempo.y  CompuMate, un teclado de Spectravideo que la convierte en ordenador .

Page 2: La Arquitectura 6502

5/9/2018 La Arquitectura 6502 - slidepdf.com

http://slidepdf.com/reader/full/la-arquitectura-6502 2/17

 

** La arquitectura 6502

El 6502 es un microprocesador de 8 bits que sigue la filosofía de diseñoorientado a memoria del Motorola 6800. El 6502 apareció en 1975, ganandopopularidad por su bajo precio y convirtiéndose en el corazón de lasprimeras computadoras personales como Apple II, Comodore 64 y ATARI 400 y800.

** La simplicidad es la clave

El 6502 maneja la información a través de sus registros, los cualespueden contener 1 byte (8 bits) de datos. Hay tres registros de usogeneral y dos de uso especial:

Acumulador A: maneja toda la aritmética y la lógica. Es el verdaderocorazón del chip.

Registros X e Y: son registros de propósitos generales y conlimitadas

capacidades.

S: Stack Pointer, putero al Stack Memory (Porción dememoria que actúa como una pila de datos)

P: Processor Status. Mantiene el estado de las banderas ylas pruebas del microprocesador.

* Stack Pointer

Cuando el microprocesador ejecuta una instrucción JSR (ir a subrutina),necesita saber dónde retornar cuando ésta finalice. Esta información seencuentra en la porción baja de memoria desde $0100 hasta $01FF y elstack pointer se utiliza como un offset. El stack se va llenando desde$10FF hacia abajo y permite una acumulación de subrutinas de hasta 128niveles. En casi todos los casos no representa un problema.

* Processor Status

No es posible acceder directamente a este registro pero existen muchasinstrucciones que nos permiten comprobar el estado de sus banderas:

bit -> 7 0+---+---+---+---+---+---+---+---+| N | V | | B | D | I | Z | C | <-- banderas, 0/1 = reset/set

+---+---+---+---+---+---+---+---+

N = NEGATIVO. Se setea cuando el bit 7 del acumulador está en 1.

V = OVERFLOW. Se setea cuando la suma de dos números con signo o laresta de dos números sin signo producen un resultado mayor a +127 o menora ±128.

B = COMANDO BRK. Se setea en cuando hay una interrupción causada por elcomando BRK (corte) y se resetea si fue causada por una interrupción

Page 3: La Arquitectura 6502

5/9/2018 La Arquitectura 6502 - slidepdf.com

http://slidepdf.com/reader/full/la-arquitectura-6502 3/17

 

externa.

D = MODO DECIMAL. Se setea al activar el modo decimal.

I = DESACTIVACION DE IRQ. Se setea si las interrupciones enmascarables(maskables) están desactivadas.

Z = CERO. Se setea si el resultado de la última operación(load/inc/dec/add/sub) fue cero.

C = CARRY. Se setea si una suma produce acarreo, o si una restanecesita un bit de la izquierda. También mantiene bits luego de unaoperación shift (rol/ror/asl/lsr).

* Acumulador----------

Casi todas las operaciones del acumulador utilizan el registroacumulador. Todas las sumas y restas se hacen con este registro. También

maneja la mayor parte de las operaciones de comparación (es A > B ?) y dedesplazamiento lógico de bits.

* Registros X e Y---------------

Son registros índices generalmente usados como offsets a direcciones dememoria. También sirven para contener valores y su importancia radica enlos modos de direccionamiento que pueden emplear.

* Modos de Direccionamiento-------------------------

El 6502 tiene 13 modos de direccionamiento o vías de acceso a memoria.El 65C02 tiene dos modos más.

+---------------------+--------------------------+| modo | formato en assembler |+=====================+==========================+| Immediate | #aa || Absolute | aaaa || Zero Page | aa | Nota:| Implied | || Indirect Absolute | (aaaa) | aa = 2 dígitos

| Absolute Indexed,X | aaaa,X | hexa como $FF| Absolute Indexed,Y | aaaa,Y || Zero Page Indexed,X | aa,X | aaaa = 4 dígitos| Zero Page Indexed,Y | aa,Y | hexa como $FFFF| Indexed Indirect | (aa,X) || Indirect Indexed | (aa),Y || Relative | aaaa | también pueden ser| Accumulator | A | etiquetas como+---------------------+--------------------------+ var1, var2, etc.

Page 4: La Arquitectura 6502

5/9/2018 La Arquitectura 6502 - slidepdf.com

http://slidepdf.com/reader/full/la-arquitectura-6502 4/17

 

(Tabla 2-3. _6502 Software Design_, Scanlon, 1980)

Immediate (Inmediato)---------------------

El valor dado es el que usará inmediatamente la instrucción. Por ejemplo,LDA #$99 carga el valor $99 en el acumulador.

Absolute (Absoluto)-------------------

El valor dado es la direccion de memoria (de 16 bits) que contiene elvalor de 8 bits que debe usar la instrucción. Por ejemplo, STA $3E32almacena el valor que hay en el acumulador en la dirección $3E32.

Zero Page (Página cero)-----------------------

Las primeras 256 direcciones de memoria ($0000-00FF) se dice que están enla ³página cero´. Las siguientes 256 ($0100-01FF) están en página 1, etc.Las instrucciones que usan página cero ahorran memoria ya que no utilizanel $00 la parte superior (high) de la dirección. Por ejemplo,

LDA $0023 -- funciona pero utiliza un byte extraLDA $23 -- dirección en página cero

Implied (Implicado)------------------

Hay instrucciones que solo ocupan un byte y no hacen referencia amemoria. Se dice que estas instrucciones usan dirección implicadaotácita. Por ejemplo,

CLC -- resetea el carry del processor statusDEX -- decrementa el registro X en 1TYA -- transfiere el registro Y al acumulador

Indirect Absolute (Absoluto Indirecto)--------------------------------------

Sólo es usado por la instrucción JMP (JuMP - salto). Toma la direccióndada y la usa como un puntero a la parte inferior (low) de una dirección

en memoria, luego hace que el programa salte a esa dirección. Porejemplo,

JMP ($2345) ; salta a la dirección cuya parte inferior es elvalor en $2345 y cuya parte superior es el valor en $2346

O sea, si $2345 contiene $EA y $2346 contiene $12 entonces la próximainstrucción a ejecutar es la que se encentra en $12EA. El 6502 utilizalas direcciones en formato low/high (parte inferior/parte superior).

Page 5: La Arquitectura 6502

5/9/2018 La Arquitectura 6502 - slidepdf.com

http://slidepdf.com/reader/full/la-arquitectura-6502 5/17

 

 Absolute Indexed (Absoluto Indexado)------------------------------------

La dirección final se obtiene tomando la dirección dada como base ysumando el valor contenido en el registro X o Y como offset. O sea,

LDA $F453,X ; suponiendo que X contiene un 3

Carga el acumulador con el contenido de la dirección $F453 + 3 = $F456.

Zero Page Indexed (Página Cero Indexada)----------------------------------------

Es lo mismo que el anterior pero la dirección dada está en la páginacero, ahorrando un byte.

Indexed Indirect (Indexado Indirecto)

-------------------------------------

La dirección de 16 bits se encuentra comenzando por la dirección dada másel contenido del registro X. El valor es el contenido de esa dirección.Por ejemplo,

LDA ($B4,X) ; suponiendo que X contiene un 6

Dada la dirección $B4 + 6 = $BA. Si $BA y $BB contienen $12 y $EErespectivamente, entonces la dirección final es $EE12. El valor en $EE12es el que se carga en el acumulador.

Indirect Indexed (Indirecto Indexado)-------------------------------------

Se toma la dirección de 16 bits contenida en la dirección dada (y en lasiguiente). Se suma el contenido del registro Y. Se toma el valoralmacenado en esta nueva dirección. Por ejemplo,

LDA ($B4),Y ; suponiendo que Y contiene 6

Si $B4 contiene $EE y $B5 contiene $12 entonces el valor en la dirección$12EE + Y (6) = $12F4 es la que se almacena en el acumulador.

Relative (Relativo)

-------------------

El direccionamiento relativo es usado por las instrucciones de salto del6502. El byte dado se usa como un offset con signo a partir de ladirección actual y el resultado es la dirección de la próxima instruccióna ejecutar. Por ejemplo,

BNE $7F (saltar si la bandera ³zero´ está en reset)

añadirá 127 a la dirección en que se encuentra el PC (program counter) en

Page 6: La Arquitectura 6502

5/9/2018 La Arquitectura 6502 - slidepdf.com

http://slidepdf.com/reader/full/la-arquitectura-6502 6/17

 

ese momento (que es la dirección donde está la instrucción BNE $7F) ycomienza la ejecución de la instrucción contenida en esta nuevadirección. Similarmente,

BEQ $F9 (saltar si la bandera ³zero´ está en set)

añadirá -7 a la dirección en que se encuentra el PC en ese momento ycomienza la ejecución de la instrucción contenida en esta nuevadirección.

Recordemos que si tomamos el bit 7 (el más alto o high) de un byte comoel signo (0= positivo; 1= negativo) entonces es posible tener números enel rango -128 ($80) a +127 (7F). Si el bit 7 está seteado, o sea si elnúmero is > $7F, es un salto negativo (hacia atrás en el programa). Quétan lejos es el salto? Si el valor es < $80 (positivo), simplemente esesa cantidad de bytes. Si el valor es > $7F (negativo) entonces es elcomplemento de 2 del valor dado en la dirección negativa.

Complemento de 2

----------------

El complemento de 2 de un número se obtine intercambiando todos los bitsde 0 -> 1 y de 1 -> 0, y luego sumando 1. Entonces,

$FF = 1111 1111 <-- original0000 0000 <-- complemento de 1

+ 1---------0000 0001 <-- complemento de 2, por lo tanto $FF = -1

Notar que QForth usa esto para números mayores a 32768 así que 65535 = -1y 32768 = -32768.

En la práctica, el programador utiliza una etiqueta y el ensamblador sepreocupa por los cálculos. Notar que los saltos de programa solo puedenser a direcciones entre -128 y +127 bytes a partir de la direcciónactual. El 6502 no permite saltos a una dirección absoluta.

Accumulator (Acumulador)------------------------

Como el direccionamiento implicado, el objeto de la instrucción es elacumulador y no necesita ser especificado.

** Conjunto de instrucciones del 6502----------------------------------

Hay 56 instrucciones en el 6502, y más en el 65C02. Muchas instruccionesutilizan más de un modo de direccionamiento y cada combinación de modoinstrucción/direccionamiento tiene un opcode particular hexadecimal quelo especifica exactamente. Entonces,

A9 = LDA #$aa Carga el acumulador en modo inmediatoAD = LDA $aaaa Carga el acumulador en modo absoluto

Page 7: La Arquitectura 6502

5/9/2018 La Arquitectura 6502 - slidepdf.com

http://slidepdf.com/reader/full/la-arquitectura-6502 7/17

 

etc.

Algunas instrucciones utilizan lógica binaria. Estas son AND, OR y EOR(OR exclusivo). Las siguientes tablas muestran el efecto de estasinstrucciones:

AND 1 1 -> 1 "ambos"1 0 -> 00 1 -> 00 0 -> 0

OR 1 1 -> 1 "uno o ambos"1 0 -> 10 1 -> 10 0 -> 0

EOR 1 1 -> 0 "uno u otro pero no ambos"1 0 -> 10 1 -> 1

0 0 -> 0

Por lo tanto, $FF AND $0F = $0F ya que,

1111 1111and 0000 1111

---------0000 1111 = $0F

AND es útil para enmascarar bits. Por ejemplo, para enmascarar el primernibble (4bits) de un valor AND con $0F:

$36 AND $0F = $06

OR es útil para setear un bit en particular:

$80 OR $08 = $88

ya que 1000 0000 ($80)0000 1000 ($08)

or ---------1000 1000 ($88)

EOR es útil para invertir bits:

$AA EOR $FF = $55

ya que 1010 1010 ($AA)1111 1111 ($FF)

eor ---------0101 0101 ($55)

Otras instrucciones desplazan o rotan bits hacia la izquierda o hacia laderecha. Notar que desplazar una vez hacia la izquierda es lo mismo quemultiplicar el valor por 2, y desplazarlo hacia la derecha equivale adividirlo por 2.

Page 8: La Arquitectura 6502

5/9/2018 La Arquitectura 6502 - slidepdf.com

http://slidepdf.com/reader/full/la-arquitectura-6502 8/17

 

Podemos diferenciar 11 grupos de instrucciones del 6502 de acuerdo a sufunción:

Instrucciones de carga y acumulaciónInstruciones aritméticasInstruciones de incrementación y decrementaciónInstruciones lógicasInstruciones de salto, ramificación, comparación y test de bitsInstruciones de desplazamiento y rotaciónInstruciones de transferenciaInstruciones propias del stackInstruciones de subrutinaInstruciones de set/resetInstruciones NOP/BRK (ninguna operación/corte)

* Instrucciones de carga y acumulación------------------------------------

LDA - LoaD the Accumulator (cargar acumulador)

LDX - LoaD the X register (cargar registro X)LDY - LoaD the Y register (cargar registro Y)

STA - STore the Accumulator (almacenar en acumulador)STX - STore the X register (almacenar en registro X)STY - STore the Y register (almacenar en registro Y)

Los microprocesadores gastan mucho de su tiempo en mover informacióndentro de la memoria. Los datos se cargan desde una dirección a unregistro y luego se los almacena en una nueva dirección, generalmente conalgún proceso de suma o resta. El contenido de una dirección puede sercargado directamente en el acumulador, en el registro X, y en el registroY pero el acumulador es el que tiene disponibles más modos dedireccionamiento.

Si el bit 7 (bit high) de un byte es 1 cuando se lo carga, entonces labandera N del processor status se setea. Si el valor cargado es 0 sesetea la bandera Z.

* Instruciones aritméticas------------------------

ADC - ADd to accumulator with Carry(suma al acumulador con carry)

SBC - SuBtract from accumulator with Carry(resta del acumulador con carry)

Carry es un bit del processor status que utilizan las operaciones querequieren acarreo de bits (suma o resta) y por las de desplazamiento.

El 6502 tiene dos modos aritméticos, el binario y el decimal. Tanto lasuma como la resta implementan el carry para manejar acarreo y pedido debits para simplificar la aritmética multi-byte. Notar que en el caso dela resta es necesario setear el carry ya que debe usarse el opuesto delcarry cuando se resta (ver abajo).

Page 9: La Arquitectura 6502

5/9/2018 La Arquitectura 6502 - slidepdf.com

http://slidepdf.com/reader/full/la-arquitectura-6502 9/17

 

La suma debería ser así:

CLCADC .....ADC ......

Limpiar el carry, luego realizar las sumas. El acarreo entre adicionesserá manejado por el carry. Simbólicamente es:

A + M + C ? A es decir,Acumulador + Valor + Carry ? Acumulador

La resta debería ser así:

SEC

SBC .....SBC ......

en este caso se setea el carry primero y luego se realizn las restas.Simbólicamente es:

A - M - ~C --> A , donde ~C es l opuesto a C

Ej.1----

Una rutina de suma en 16 bit. $20,$21 + $22,$23 = $24,$25

CLC limpiar el carryLDA $20 tomar el byte bajo (low) del primer númeroADC $22 sumarle el byte low del segundoSTA $24 almacenar el byte low del resultadoLDA $21 tomar el byte alto (high) del primer númeroADC $23 sumarle el byte high del segundo, más el carrySTA $25 almacenar el byte high del resultado

... si el resultado no ³cabe´ en un número de 16 bit el carryquedará seteado.

Ej.2----

Una rutina de resta en 16 bit. $20,$21 - $22,$23 = $24,$25

SEC setear el carryLDA $20 tomar el byte low del primer númeroSBC $22 restarle el byte low del segundoSTA $24 almacenar el byte low del resultadoLDA $21 tomar el byte high del primer número

Page 10: La Arquitectura 6502

5/9/2018 La Arquitectura 6502 - slidepdf.com

http://slidepdf.com/reader/full/la-arquitectura-6502 10/17

 

SBC $23 restarle el byte high del segundo, con carrySTA $25 almacenar el byte high del resultado

... si el segundo número es mayor que el primero el carry quedaráseteado.

Las instrucciones aritméticas también afectan las banderas N, Z y V:

Z = 1 si el resultado fue $00, 0 si fue otro valorN = 1 si el bit 7 del resultado es 1, 0 si fue otro valorV = 1 si cambió el bit 7 del acumulador, un cambio de signo

* Instruciones de incremento y decremento---------------------------------------

INC - INCrementar valor en memoria en unoINX - INcrementar X en unoINY - INcrementar Y en uno

DEC - DECrementar valor en memoria en unoDEX - DEcrementar X en unoDEY - DEcrementar Y en uno

El 6502 tiene instrucciones para incrementar/decrementar los registrosíndices (X e Y) y valores en memoria. No hay instrucciones de este tipopara el acumulador. El 65C02 incluía las instrucciones INA y DEA. Lasinstrucciones para los registros índices son en modo impicado por razonesobvias, mientras que INC y DEC utilizan los modos de direccionamiento.

Todas las instrucciones de inc/dec alteran las banderas del processorstatus:

Z = 1 si el resultado fue $00, 0 si fue otro valorN = 1 si el bit 7 del resultado es 1, 0 si fue otro valor

* Instruciones lógicas--------------------

AND - AND entre valor en memoria y el acumuladorORA - OR entre valor en memoria y el acumuladorEOR - OR exclusivo entre valor en memoria y el acumulador

Estas instrucciones ya se describieron anteriormente. Setean la bandera Zsi el resultado es 0 y la N si el bit 7 del resultado es 1.

* Instrucciones Jump (salto), Branch (bifurcación), Compare (comparación)y Test Bits (pruebas de bits)----------------------------------------------------------

JMP - Saltar a otra dirección (GOTO)

BCC - bifurcar si el carry está en reset, C = 0BCS - bifurcar si el carry está en set, C = 1BEQ - bifurcar si el resultado es 0, Z = 1

Page 11: La Arquitectura 6502

5/9/2018 La Arquitectura 6502 - slidepdf.com

http://slidepdf.com/reader/full/la-arquitectura-6502 11/17

 

BNE - bifurcar si el resultado no es 0, Z = 0BMI - bifurcar si el resultado es negativo, N = 1BPL - bifurcar si el resultado es positivo, N = 0BVS - bifurcar si overflow está en set, V = 1BVC - bifurcar si overflow está en reset, V = 0

CMP - Comparar memoria con acumuladorCPX - Comparar memoria con XCPY - Comparar memoria con Y

BIT - Probar bits

Todas estas instrucciones alteran el flujo de un programa o realizancomparaciones de valores o bits.

JMP simplemente sitúa el contador de programa (PC) en una dirección dada.La próxima instrucción será la que se encuentre en esa nueva dirección.Las instrucciones de ramificación son saltos relativos (JMP relativo).Causan una ramificación o bifurcación a una nueva dirección que puede ser127 bytes más delante de la posición actual del PC o 128 hacia atrás. Un

bloque de código que sólo utilice instrucciones de ramificación puede serrelocalizado y ejecutado en cualquier lugar de la memoria porque utilizadirecciones relativas y no absolutas.

Las tres instrucciones de comparación se usan para setear bits delprocessor status. La relación entre los valores comparados y los bits destatus es,

+-------------------------+---------------------+| | N Z C |+-------------------------+---------------------+| A, X, or Y < Memoria | 1 0 0 || A, X, or Y = Memoria | 0 1 1 || A, X, or Y > Memoria | 0 0 1 |+-----------------------------------------------+

La instrucción BIT prueba los bits en memoria con el acumulador pero nocambia ninguno. El contenido de la dirección se multiplica logicamentecon el acumulador (AND), entonces se setean los bits de status según losiguiente,

* N recibe el valor inicial sin multiplicar del bit 7 de la memoria* V recibe el valor inicial sin multiplicar del bit 6 de la memoria* Z se setea si el resultado de la multiplicación (AND) es cero, seresetea con otro resultado.

Entonces, si la dirección $23 contenía $7F y el acumulador $80, unainstrucción BIT $23 setearía las banderas V y Z y resetearía la N ya queel bit 7 de $7F es 0, el bit 6 de $7F es 1, y $7F AND $80 = 0.

* Instrucciones de desplazamiento y rotación------------------------------------------

ASL - Desplazar hacia izquierda el acumulatorLSR - Desplazamiento lógico hacia derecha

Page 12: La Arquitectura 6502

5/9/2018 La Arquitectura 6502 - slidepdf.com

http://slidepdf.com/reader/full/la-arquitectura-6502 12/17

 

ROL - Rotar hacia izquierdaROR - Rotar hacia derecha

Estas instrucciones se usan para mover bits en el acumulador o enmemoria. El efecto es el siguiente (C es la bandera carry):

+-+-+-+-+-+-+-+-+C <- |7|6|5|4|3|2|1|0| <- 0 ASL

+-+-+-+-+-+-+-+-+

+-+-+-+-+-+-+-+-+0 -> |7|6|5|4|3|2|1|0| -> C LSR

+-+-+-+-+-+-+-+-+

+-+-+-+-+-+-+-+-+C <- |7|6|5|4|3|2|1|0| <- C ROL

+-+-+-+-+-+-+-+-+

+-+-+-+-+-+-+-+-+

C -> |7|6|5|4|3|2|1|0| -> C ROR+-+-+-+-+-+-+-+-+

Como antes, Z se setea si el resultado es cero y N si el bit 7 es 1. Nsiempre se resetea en una operación LSR. También hay que notar que ASL Aes lo mismo que multiplicar por dos y LSR es lo mismo que dividir pordos.

* Instrucciones de transferencia------------------------------

TAX - Transferir acumulator a XTAY - Transferir acumulator a YTXA - Transferir X al acumulatorTYA - Transferir Y al acumulator

Estas instrucciones mueven valores entre los registros del 6502. Tambiénson afectadas las banderas Z y N. Por ejemplo:

LDA #$80TAX

Provoca que N se setee ya que el bit 7 del valor movido es 1, mientrasque

LDX #$00

TXA

Provoca que Z se setee ya que el valor es cero.

* Instrucciones del Stack-----------------------

TSX - Transferir puntero stack a XTXS - Transferir X al puntero stack

Page 13: La Arquitectura 6502

5/9/2018 La Arquitectura 6502 - slidepdf.com

http://slidepdf.com/reader/full/la-arquitectura-6502 13/17

 

 PHA - Empujar el acumulador al stackPHP - Empujar el processor status al stackPLA - Extraer al acumulador desde el stackPLP - Extraer al processor status desde el stack

TSX y TXS hacen posible la manipulación del stack. Las instrucciones pushy pull (las cuatro restantes) son útiles para guardar valores de losregistros y banderas de estados. Su utilización es directa.

* Instrucciones de subrutinas---------------------------

JSR - Saltar a una subrutinaRTS - Regresar desde una subrutinaRTI - Regresar desde una interrupción

Tal como JMP, JSR causa que el programa continúe su ejecución desde lainstrucción almacenada en la dirección dada. A diferencia de JMP, JSR

utiliza el stack para almacenar la dirección a dónde retornar. Cuando seejecuta una instrucción RTS, la dirección previamente empujada al stackse extrae y el programa continúa a partir de esa dirección. Por ejemplo,

LDA #$C1 ; cargar caracter 'A'JSR print ; imprimir el carácter y su código en hexadecimalLDA #$C2 ; cargar 'B'JSR print ; e imprimirlo...

print JSR $FDED ; imprimir la letraJSR $FDDA ; y su código ASCIIRTS ; regresar a la llamada

RTI es como RTS y debe ser usada al final de una rutina de interrupción.

* Instrucciones de seteo y reseteo (limpiar)------------------------------------------

CLC - resetear (limpiar) bandera carryCLD - resetear modo decimalCLI - resetear deactivación de interrupciónCLV - resetear banera de overflow (desbordamiento)

SEC - setear carry

SED - setear modo decimalSEI - setear desactivación de interrupción

Estas son instrucciones de un solo byte y sirven para configurar lasbanderas del processor status.

CLC y SEC son muy usadas en la suma y la resta respectivamente. Antes decualquier suma (ADC) se usa CLC para limpiar el carry o el resultadopodría ser mayor en una unidad. Para la resta (SBC) se usa SEC paraasegurarse que el carry está seteado. En restas o sumas multi-byte solo

Page 14: La Arquitectura 6502

5/9/2018 La Arquitectura 6502 - slidepdf.com

http://slidepdf.com/reader/full/la-arquitectura-6502 14/17

 

se setea o resetea el carry una vez antes de la primera instrucción. Porejemplo, para sumar un uno a un número de 16 bits en $23 y $24 hay quehacer lo siguiente:

LDA $23 ; cargar el byte lowCLC ; resetear el carryADC #$02 ; sumar el número 2,

; el carry se setea si resultado > 255STA $23 ; guardar el byte lowLDA $24 ; cargar el byte highADC #$00 ; sumar cero y el resultado anterior del carrySTA $24 ; guardar el byte highRTS ; si el carry está en set el resultado fue > 65535

Lo mismo para la resta,

LDA $23 ; cargar el byte lowSEC ; setear el carrySBC #$02 ; restar 2STA $23 ; guardar el byte low

LDA $24 ; cargar el byte highSBC #$00 ; restar cero y el resultado del carry anteriorSTA $24 ; guardar el byte highRTS ; si el carry no está seteado el resultado fue < 0

* Otras Instrucciones-------------------

NOP - Ninguna OperaciónBRK - Corte de programa

NOP no realiza ninguna operación pero utiliza ciclos de procesador. Esútil para borrar viejas instrucciones, reservar espacio para futurasinstrucciones o para ciertos conteos de ciclos de máquina (cyclecounting) ya que utiliza 2 ciclos.

BRK causa un corte forzado y obliga al procesador a comenzar desde elcomienzo (esta dirección debe indicarse en la dirección $FFFE y $FFFF.

** Ejemplos simples de programación--------------------------------

Aquí se ilustrarán algunas de las técnicas más usadas en programación.Al final hay ejemplos de sumas y restas.

* Ciclo de conteo decreciente---------------------------

;; cuenta regresiva de un número de 8 bits;

start LDX #$FF ; cargar X con $FF = 255loop DEX ; X = X - 1

Page 15: La Arquitectura 6502

5/9/2018 La Arquitectura 6502 - slidepdf.com

http://slidepdf.com/reader/full/la-arquitectura-6502 15/17

 

BNE loop ; si X no es cero, volver a loopRTS ; regresar

(start y loop son etiquetas, podrían tener otro nombre)

La instrucción BNE no ³sabe´ si X llega a cero. Lo que hacees analizar la bandera Z del procesador, que estará seteadacuando X llegue a cero.

;; cuenta regresiva de un número de 16 bits;

start LDY #$FF ; cargar Y con $FFloop1 LDX #$FF ; cargar X con $FFloop2 DEX ; X = X - 1

BNE loop2 ; si X no es cero, volver a loop2DEY ; Y = Y - 1BNE loop1 ; si Y no es cero, volver a loop1

RTS ; regresar

Aquí tenemos dos ciclos, X se carga con 255 y cuenta hastacero cada vez que Y se decrementa. El resultado es una cuentaregresiva desde $FFFF = 65535 hasta $0000.

** Otros ejemplos--------------

Nota: los siguientes ejemplos pertenecen al libro "6502 Software Design"

; Ejemplo 4-2. Borrar un elemento de una lista desordenada;; Borrar el contenido de $2F de una lista que comienza; en la dirección $30 y $31. El primer byte de la lista; es su tamaño.;

deluel LDY #$00 ; índice para la siguiente operaciónLDA ($30),YTAX ; transferir el tamaño de la lista a XLDA $2F ; elemento a borrar

nextel INY ; índice al siguiente elementoCMP ($30),Y ; coincide el elemento con el de la

; lista?

BEQ delete ; si. Borrar elementoDEX ; no. Decrementar el contadorBNE nextel ; hay más elementos para comparar?RTS ; no. El elemento no está en la lista.

; Regresar

; borrar el elemento moviendo los siguientes a la posición; anterior

delete DEX ; decrementar contador

Page 16: La Arquitectura 6502

5/9/2018 La Arquitectura 6502 - slidepdf.com

http://slidepdf.com/reader/full/la-arquitectura-6502 16/17

 

BEQ deccnt ; fin de lista?INY ; no. Mover el siguiente elemento hacia

; atrásLDA ($30),YDEYSTA ($30),YINYJMP delete

deccnt LDA ($30,X) ; actualizar el tamaño de la listaSBC #$01STA ($30,X)RTS

; Ejemplo 5-6. Multiplicación de dos números de 16 bits sin; signo;; Multiplicar $22 (low) y $23 (high) por $20 (low) y; $21 (high) para producir un resultado de 32 bits en $24; (low) a $27 (high);

mlt16 LDA #$00 ; limpiar p2 y p3 del productoSTA $26STA $27LDX #$16 ; contador de bits a multiplicar = 16

nxtbt LSR $21 ; desplazar multiplicador de 2 bytes a la; derecha

ROR $20BCC align ; multiplicador = 1?LDA $26 ; si. cargar p2CLCADC $22 ; sumarle m0STA $26 ; almacenar el nuevo p2LDA $27 ; cargar p3ADC $23 ; sumarle m1

align ROR A ; rotar el producto de 4 bytes a la; derecha

STA $27 ; almacenar el nuevo p3ROR $26ROR $25ROR $24DEX ; decrementar el contador de bitsBNE nxtbt ; volver hasta que se hayan multiplicado

; los 16 bitsRTS

; Ejemplo 5-14. Raíz cuadrada de 16 bits.

;; Escribir la raíz cuadrada de 8 bits en $20 de un; número de 16 bits en $20 (low) y $21 (high). El; resto sigue en $21.

sqrt16 LDY #$01 ; byte menos significativo del primer; número impar =1

STY $22DEYSTY $23 ; byte más significativo del primer

Page 17: La Arquitectura 6502

5/9/2018 La Arquitectura 6502 - slidepdf.com

http://slidepdf.com/reader/full/la-arquitectura-6502 17/17

 

; número impar (raíz = 0)again SEC

LDA $20 ; guardar el resto en XTAX ; restar el impar del entero

; (la parte low)SBC $22STA $20LDA $21 ; restar el impar del entero

; (la parte high)SBC $23STA $21 ; resultado negativo?BCC nomore ; no. incrementar raíz cuadradaINYLDA $22 ; calcular próximo imparADC #$01STA $22BCC againINC $23JMP again

nomore STY $20 ; listo, guardar raíz cuadrada

STX $21 ; y el restoRTS

Esto se basa en la observación de que la raíz cuadrada de un entero esigual al número de veces que un número impar incrementándose puede serrestado del número original manteniendo resto positivo. Por ejemplo,

25- 1 1--24

- 3 2--21

- 5 3--16

- 7 4--9

- 9 5 = raíz cuadrada de 25--0

Si estás interesado en aprander más, busca un libro sobre lenguaje de

máquina para computadoras Apple.Nota del autor de este documento: Si la biblioteca de tu lugar es como lamía, habrá muchos libros de computación de los ¶80 en los estantes.Nota del traductor: Si la biblioteca de tu lugar es como la mía, noencontrarás nada :)

Traducción por Gonzalo R. FernándezEmail: [email protected]. Córdoba, Argentina.