Registrarse

Documentándome sobre ASM

Estado
Cerrado para nuevas respuestas.

pikachu240

Junior C# Developer
Hola,

Hace unos dias hice una app que implementa el ensamblador de Andrea.
Ahora quiero indagar un poco más sobre el tema y poder reflejarlo en una nueva versión mucho más completa.

1-Necesito saber ¿por que un código ASM no es compatible con todas las ediciones?(por ejemplo un código para Rojo Fuego ponerlo en Esmeralda)
2-Tambien necesito saber si el idioma y la compilación de la rom tienen algo de importancia.(Poner un código de Rojo Fuego a Fire Red 1.0)
3-Las ediciones homologas son iguales?(RojoFuego-VerdeHoja)
4-¿se podria convertir un código de una edición a otra de forma automática?
5-¿Existe alguna forma decompilar el código ensamblado a ASM?(sacar de los bytes de la gba código ASM)
6-¿Se puede detectar el inicio y el fin de un código ensamblado?(Aunque haya más de una forma)
 

Javi4315

Babyface
Miembro de honor
1. El código en sí funciona para cualquier edición, ya que las instrucciones son las mismas para cualquiera. El problema realmente viene porque la rutina trabaja con offsets que sí cambian de un rom a otro. Por ejemplo, la variable 0x8000 no se encuentra en la misma dirección en FR que en Ruby. Y lo mismo pasa con los demás offsets.

En principio, sería cuestión de arreglar los offsets que utiliza la rutina, aunque hay veces que cambia la forma en la que el juego estructura los datos. Por ejemplo, en Ruby, las direcciones de la ram son estáticas, mientras que en FR, parte de esas direcciones son dinámicas. Se pueden localizar con ASM, pero habría que añadirle algunas instrucciones para que funcione.

En definitiva, con alguna excepción, la rutina funciona igual para cualquier edición, pero hay que cambiarle los offsets y, en algunas ocasiones, modificarla en cierta medida.

2. Lo mismo que lo anterior.

3. No, también cambian los offsets.

4. No sé a qué te refieres exactamente con "de forma automática", pero si te refieres a que un programa te lo haga con un solo clic, entonces no. El programa no sabría que offsets corresponden a otra edición.

5. Claro. Hay varios programas que lo hacen. Puedes usar IDA Pro, PKSV o VBA-SDL-H, entre otros.

6. Claro, de otro modo, los programas que te he puesto en el punto anterior o el propio juego no podrían interpretarlas. Ahora, tienes que tener en cuenta que el juego constantemente está saltando de una rutina a otra. Por lo que el "inicio" realmente es la primera instrucción que el juego lee tras haber saltado a la rutina. No es que haya una instrucción que diga "aquí empieza", sino que el juego empieza a leer, digamos, desde donde se le manda.

En cuanto al final, la instrucción pop es la que suele cerrar la rutina haciendo que regrese al punto donde saltó a dicha rutina y continúe leyendo. También puedes considerar el final de la rutina un bx, que es un salto al que no hay retorno.
 
Estado
Cerrado para nuevas respuestas.
Arriba