Retrogames.cl
Página principal Sección Atari Articulos para leer

Proyectos y modificaciones de hardware

Clases elementales RG, su gente y actividades

El foro más antiguo de Chile

Un lugar para recordar

 

CURSO DE ASSEMBLER

Por Willy Soft

 

8. Indexación Indirecta.

Continuamos con este “emocionante” curso de Assembler de 8-bits. Vimos hasta ahora que se pueden hacer animaciones con el computador, modificando el set de caracteres en una secuencia de tiempo. Esto permite mostrar diferentes cuadros mostrados en intervalos de tiempo regulares, lo que es la base de la animación. Ahora veremos que el procesador 6502 tiene una herramienta tremendamente útil: la indexación indirecta.

 

Hasta ahora vimos que podemos acceder a tablas fijas que tengamos insertadas en nuestro código. Pero, ¿qué pasa si requerimos tener una tabla con tablas de direcciones?. Es decir, utilizar una tabla con punteros que nos dirijan a otras tablas como, por ejemplo, datos de pantalla, animaciones más complejas, redireccionamiento de otras pantallas, etc. Para ello, se diseñó en el 6502 un conjunto de instrucciones que permitan trabajar con dicha necesidad. El formato más utilizado es el siguiente

 

    lda (puntero),y

    sta (puntero),y

 

Este modo se llama indirecto indexado.

 

Hay que tener en cuenta lo siguiente

1. El puntero es una posición de memoria entre 0 y 255. NO SE PUEDE UTILIZAR POSICIONES SUPERIORES.

2. En este caso, SÓLO SE INDEXA CON EL ÍNDICE Y. Es decir, NO EXISTE LA INSTRUCCIÓN “lda (puntero),x”. Va a generar error

 

¿Qué hace esta instrucción? Veamos con ejemplos.

 

Ejemplo 1:

Dirección

 Valor

puntero

 $00

puntero+1

 $20

 

 

 

    ldy #$00

    lda (puntero),y

 

Esta última instrucción equivale a un “lda $2000”

 

Ejemplo 2:

    

Dirección

 Valor

puntero

 $85

puntero+1

 $45

 

 

 

    ldy #$00

    lda (puntero),y

 

Esta última instrucción equivale a un “lda $4585”

 

Ejemplo 3:

    

Dirección

 Valor

puntero

 $00

puntero+1

 $40

 

 

 

    ldy #$05

    lda (puntero),y

 

Esta última instrucción equivale a un “lda $4005”. Notar que aquí el índice Y está en 5, por lo tanto se indexa según los valores dados en “puntero” y “puntero+1”

 

Si se fijan, todos los ejemplos los expresé en hexadecimal. Esto es así porque es más fácil interpretar a qué dirección representa. Les recomiendo encarecidamente utilizar este formato. Si fuese en decimal, sería así:

Dirección

Valor

Valor en decimal

puntero

$85

133

puntero+1

$45

69

Y la instrucción “lda (puntero),y” sería equivalente a “lda 133*256+69,y”, según lo visto en el capítulo 2 del mismo curso.

 

Existe otro modo: el indexado indirecto. Se lee parecido, pero no es lo mismo. Su formato es:

 

    lda (puntero,x)

    sta (puntero,x)

 

Notar que aquí se utiliza el puntero x, pero adentro del paréntesis. Aquí lo que hace es indexar primero, y después se dirige a la posición guardada en puntero+x y puntero+x+1. Pero esta forma no es muy utilizada, se usa más la primera.

 

Como ejemplo de uso práctico, les adjunto un programa más complejo, que anima 40 objetos en pantalla (nada de movimiento fino, sólo caracteres), de modo de utilizar el direccionamiento indirecto indexado. Si lo estudian bien, verán el uso práctico.

Click para bajar texto

PREGUNTA TUS DUDAS O DANOS TUS SUGERENCIAS EN EL FORO

 

IR a capítulo 1  2  3  4  5  6  7  8  9