hernaldog@gmail.com
Visita mi Blog



 

 

 

ASM de la SNES ONLINE

Desafíos para ASM 65816
Ver aquí las Reglas del juego.

 

 

Alumnos y sus Estrellas

  Vicio
  Kaosoft
  Elyelma
  Ragnarock
  HexPluSoft
  Arkis

 

Desafíos
Nivel Fácil (1 estrella por Desafío)

Desafío 1.

Basado en Log de Clase 1.

Explicar: 

1. LDA $1234
2. LDA #$458
3. LDX $1
4. STY #$ 85

 

Con este tipo de respuesta:

Setear registro ____ (X/Y/A)??  a modo de ____ (8/16 bits) ??  para esto hay que _______ (reset/set)?? FLAG ___ (z,c,i,m,x) ?? de P.

(Ustedes deben llenar ____ )

Respuesta

Desafío 2.

Escribe las instrucciones respectivas:

1. Si quiero cargar en A el valor 35.

2. Si quiero almacenar en X el valor que esta dentro de la dirección $1234.

3. Si quiero almacenar en Y el valor que esta dentro de $FF48FC. (Aquí hay 2 formas posibles, una fácil de una sola instrucción y otra usando A, a ver si puedes hacer las 2 formas)
 

Respuesta

Desafío 3.

1. ¿Es posible hacer esto?

SEP #$20
LDA $1234

2. ¿y esto?

LDA #$05
STA $811234

Respuesta

Desafío 4.

1. Que sucede con A cuando esta en modo de 8 bits y en modo de 16 bits para estos 2 casos : LDA $1234 y LDA #$1234

2. ¿Cual es el Largo de un banco (en bytes) y de un Offset? ¿Cuantas direcciones en TOTAL en la memoria podemos tener?
 

Respuesta

Desafío 5.

Hacer un trozo de código que haga esto:

1. Quiero meter el valor 100 a la pila, luego meter 20 a $500 y luego sacar lo de la pila y dejarlo finalmente en A.

2. Que saque de la dirección $556C un valor y lo deje en X, que a ese valor le sume 4 y el resultado lo deje en $556D. (que los bancos no te importen)
 

Respuesta

Desafío 6.

Detectar los 2 errores que hay en este trozo de código:
Suponer que en $80AABB esta el valor 0x1234 y que este código empieza a ejecutarse a partir de la instrucción  $01552C.

SEP #$20       -> aquí estamos en $01552C
LDA #$02
LDY $80AABB
PHK
PHA
STX #$A1F234
PLX x=02
PLY y=01

Como quedan A, X, Y al final?
 

Respuesta

Desafío 7.

1. Al hacer REP #$30 lo que hago es:
____ (cargar/almacenar/setear/resetear) ____(X/Y/A) para que se pueda ____(almacenar/cargar/setear/resetear)
____ (datos/valores/direcciones/offsets) en modo de _____(8/16/24) bits.

2. ¿Se podría deducir alguna "regla" a partir de esta sentencia?
            SR[30axy-20a-10xy]
 

Respuesta

 
Medio (2 estrellas)

Desafío 1.

Hacer un trozo de código que permita: Meter en la Pila  (X + Y - A)*16 
pero debes considerar que la Pila esta LLENA.
 

Respuesta

Desafío 2.

Si tengo esto en la pila

    | 0C |
    | 0A |
    | 04 |
    --------

Hacer un solo trozo de código que permita dejar la Pila así:

    | 0A |
    | 04 |
    | 0C |
    --------

y luego que la deje así:

   | 04      |
   | 0C + X |  -> el resultado de C0 + lo que tiene el registro X
   | 0A      |
    ------------  

Respuesta

Desafío 3.

Escribir un trozo de código que haga esto:

 0xB  X   0xA = Resultado1
 0X05  X   0X04 = Resultado2

hacer luego la división Resultado1/Resultado2, luego al Resto sumarle 0x7 y dejarlo en X
y al Cuociente restarle 0x3 y dejarlo en Y.  

Respuesta

Desafío 4.

Escribir un trozo de código que haga esto:

A partir de la división 0x16A/0x5, meta en la pila el resultado de la operación aritmética
[Resto + Cuociente]*0x3 - 0x08  de esa división.  

Respuesta

Desafío 5.

Escribir un trozo de código que haga esto:

                                     (X + 1)^5
Direct Page = RESTO DE   ----------
                                         Y

Nota: X debe estar en modo de 8 bits.  

Respuesta

Desafío 6.

Usando ciclos e indexación:
Escribir un trozo de código que saque consecutivamente los 200 siguientes valores que se encuentren a partir de la dirección $3000 y los vaya metiendo a partir de esta otra dirección $5000.  

Respuesta

Desafío 7.

Hacer este algoritmo en asm 65816:

 mientras Y < 10
 {
    si Y = 5
      salta a subrutina hola
   sino
      salta a subrutina chao  
 } Y++

 subrutina hola
   meter actual valor de Y a partir de dirección $1000

 subrutina chao
   X = 2*Y
   meter en pila el valor de X  

Respuesta

 
Alto (3 estrellas)

Desafío 1.

Escribir un trozo de código que meta en la pila la MULTIPLICACIÓN de 50 valores hex (de 8 bits) consecutivos partiendo del que se encuentre en la dirección $4000. Es decir, que primero saca el valor que esta dentro de $4000 luego le multiplica el del $4001, luego al resultado se le multiplica el de $4002,..., así hasta multiplicarle el que se encuentra en de $4031. Finalmente si esa suma es Menor a 0x8000 se mete a la pila SINO dividir por 3 esa suma y probar de nuevo con el cuociente, si es menor o igual a 0x8000 se mete recién en la pila, si no, seguir dividiendo.

El algoritmo sería así:

  Obtener Multiplicación de 50 valores consecutivos que se sacan a partir de $4000(sacamos el hex número 0) hasta el de $4031 (hex número 49). El resultado es nuestro parámetro.

Ciclo (parámetro)
   SI parámetro > 8000
      Dividir/3
      ejecutar Ciclo (resultado División)
  SINO
      meter resultado en la pila
 

Desafío 2.

Hacer un trozo de código que permita meter en la dirección $1000 en adelante, TODOS los valores PARES o IMPARES de 1 byte (0x02,0x04,0x06,0x08,0x0A,0x0C,0x0E,0x10,0x12, etc...) que existan. Lo que determina si es par o impar es que la dirección $10 será nuestro Flag de Paridad (solo para el ejercicio), si en $10 hay un 0 entonces metemos PARES, si es 1, entonces metemos los IMPARES.
 

 

 

blog comments powered by Disqus

 

 

 

Bajar Clases en LOGs (.rtf):

LOG1

LOG2

LOG3

LOG4

LOG5

LOG6