anuncio
 
Calificación:
  • 2 Votos - 5 Media
  • 1
  • 2
  • 3
  • 4
  • 5

[THUMB MODE]Mini Tutorial: Cómo ejecutar scripts a través de ASM

Autor Mensaje
Sonicarvalho Ausente
ASM Hacker-Rom Researcher
*

Mensajes: 65
Ingreso: Jun 2011
Reputación: 14
Agradeció: 69
Le agradecieron 217 veces. en 57 post
Mensaje: #1
[THUMB MODE]Mini Tutorial: Cómo ejecutar scripts a través de ASM
Buenas!

Mientras no termino el BIG UPDATE al Safari, voy posteando aquí unas cosas.

Hoy será ejecutar scripts a través de ASM. Este método solo funciona en OverWorld, claro. No en Bag, no en batallas, solo en OverWorld.

Requisitos mínimos:
  • Conocimientos basicos para perceber una Rutina
  • Conocimientos de ASM de los comandos Ldr, Bl, push {LR}, pop {pc} y Branch&Exchange(Bx)
  • Saber o que són registros ayuda

Entonces, sigan el tutorial de ~Javs antes de empezaren este pues el de ~Javs vos da los basicos de ASM.
Pero mismo así, vos voy a explicar cada comando y hacer una analogía con el Scripting, para que perciban mejor.

El comando Ldr sirve para cargar números en los registros y acceder a la RAM. Pero aquí en este tutorial solo vamos a utilizar 'cargar numeros'. Este comando es una especie de loadpointer en el sentido literal. Carga un numero 32bit a la Memoria (en este caso, los registros)

El comando Bl es como en scripting el comando 'call', que llama una subrutina (en scripting, un subscript, como el 'CallStd'). Para que funcione correctamente, la Subrutina llamada tiene que terminar en Pop {pc} (puede dar Pop a mas registros, pero el Registro PC (R15) TIENE que estar presente!). Ese pop {pc} es como el comando 'Return' en scripting: Vuelta al función que le ha llamado.

El comando Bx rX tiene que ser usado con el ldr rX, pues ese comando pone el processador a ejecutar las instrucciones de código en el offset de el registro rX. Es como el comando 'Goto' en scripting. No tiene retorno. Por eso vamos a usar ese dentro de un Bl (buen truco, no? Wink)
---------------------------------------------

Después de los básicos, vos voy a presentar una rutina hecha para que puedan llamar scripts en rutinas.
ATENCION: YO NO USO GOLDROAD COMO COMPILADOR. ESTE CODIGO ES PARA DEVKITARM y EL ENSAMBLADOR QUE VIENE CON MID2AGB (as.exe y objcopy.exe)
Ejemplo FIRERED:
Código:
.thumb
.align 2
push {lr}
ldr r0, SCRIPT_ADRESS
bl SCRIPT_ROUTINE //subrutina que va a ejecutar los scripts
pop {pc}

SCRIPT_ROUTINE:
ldr r1, SCRIPT_EXECUTER
Bx r1

.align 2
SCRIPT_ADRESS: .word 0x081624F5 //Aquí definen vuestro script offset
SCRIPT_EXECUTER: .word 0x08069AE5 //Esta es la rutina que ejecuta los scripts. Offset +1

Ahora deben ter reparado en algo.
Porque no he push'ado los registros r0 y r1? Huh
La verdad es, cuando no damos push a registros y llamamos un Bl, significa que estamos pasando argumentos a la rutina que estamos llamando. Asi que en este caso especifico, NO DEBEMOS dar push {r0-r1, lr}, solo push {lr}.
Los argumentos son:
r0= Script offset (un script que quieran)
r1= Script executer (el offset de la rutina que hace con que los scripts sean ejecutados!)

Los offsets de el Script Ejecuter para las versiones Ruby, Firered y Emerald son(no vos olvidéis de poner el offset + 1!Es necesario para que funcione correctamente):
Ruby:080655B8
FireRed:08069AE4
Emerald:08098EF8

Por ahora es todo. Espero tener ayudado!
-------------------------------------
Tutorial made by Sonicarvalho AKA Dark Rayquaza

PD: Como en este forum todos usan GOLDROAD, entonces pido a alguien que adapte la rutina para GOLDROAD. Gracias.

[Imagen: 11336468.png][Imagen: sinttulo1rj.png]


Búsquedas actuales (EMERALD):
Búsquedas actuales (RUBY) UPDATE:
Búsquedas actuales (FIRERED):
(Este mensaje fue modificado por última vez: 11-12-2011 por 21:06 Sonicarvalho.)
04-08-2011 10:27
Web Buscar Cita
 Dio las gracias: Gershel , nadie , Hackun , Dacker-X , Cheve_X , Zaux , Ken , Gut_Bro , Mariofan , eing , Jaizu , KODER
Hackun Ausente
Doctor HEX
*

Mensajes: 283
Ingreso: Jun 2010
Reputación: 20
Agradeció: 128
Le agradecieron 324 veces. en 136 post
Mensaje: #2
RE: [THUMB MODE]Mini Tutorial: Cómo ejecutar scripts a través de ASM
Gracias nuevamente, tus tutoriales son algo especial ^^
Con esto la gente se familiarizará más con el lenguaje ensamblador más básico :B
Saludos.

04-08-2011 14:42
Buscar Cita
 Dio las gracias: Sonicarvalho , Flaer!
Gut_Bro Desconectado
Y blaaa... blaa... bla.
*

Mensajes: 439
Ingreso: Nov 2010
Reputación: 44
Agradeció: 233
Le agradecieron 723 veces. en 297 post
Mensaje: #3
RE: [THUMB MODE]Mini Tutorial: Cómo ejecutar scripts a través de ASM
Juuu! Siempre supe que con un script normal se puede llamar una rutina ASM (callasm). Pero siempre me pregunté cómo hacer para que desde una Rutina ASM se ejecutara un Script, y ahora... ¡ya lo se!

xD

Me voy a poner a practicar un rato con el devkit joo a ver que logro Tongue

Muchisisisimas gracias ^^

04-08-2011 20:28
Web Buscar Cita
 Dio las gracias: Sonicarvalho
Gershel Ausente
Wahero 4Ever, recordadlo...
*

Mensajes: 398
Ingreso: Apr 2010
Reputación: 35
Agradeció: 311
Le agradecieron 326 veces. en 153 post
Mensaje: #4
RE: [THUMB MODE]Mini Tutorial: Cómo ejecutar scripts a través de ASM
¡Gran aporte!
Al igual que Gut, muchas veces me preguntaba como llamar a msgbox, o cosas parecidas y bueno, ahora ya sé como hacerlo de una forma simple y sencilla Big Grin
Como siempre, un genial aporte, muy bien explicado, se entiende muy bien siempre y cuando se hayan leído tutoriales más básicos como el de Javs o Pey!.
Muchísimas gracias por colaborar tanto con Wah!
Saludos!

"Esta despedida quizás sea para siempre, pero los maravillosos
recuerdos que tengo de Whack a Hack, los conservaré para siempre..."

Seяaa◄, no te olvides de mi...

[Imagen: 6zm3mt7]

¡No lo Abras!
04-08-2011 21:57
Buscar Cita
 Dio las gracias: Sonicarvalho
Mariofan Desconectado
Programador de Tools
*

Mensajes: 153
Ingreso: May 2010
Reputación: 18
Agradeció: 81
Le agradecieron 250 veces. en 90 post
Mensaje: #5
RE: [THUMB MODE]Mini Tutorial: Cómo ejecutar scripts a través de ASM
¡Que buen tutorial!

Entonces la clave esta en el bx, espera, ¿El bx es el que ordena a la Gba que lea los comandos script?, hay me perdi, pero el punto es que entendi el tuto y me parece muy bien poder ejecutar scripts desde rutinas, pero hasta que no sepamos como modificar el menu o los objetos, no creo que sirva de mucho ya que para llamar el script desde una rutina, mejor continuo en el script en el que se ejecuto la rutina, ¿no?, ya que asi me ahorro espacio.

De todas formas es un gran aporte, ¡Sigamos asi!, ¡Wah se convertira en la web mas avanzada en rom hacking gracias a la investigacion!

¡Y pronto prometo yo tambien traer un tuto, INVESTIGACION EN ALTO!! Yush

[Imagen: sinttulo1rj.png]

Una prueba del potencial que poseemos los positron:

http://www.youtube.com/watch?v=Sron2tvRmJ4

Ya no mas esperas, mi Tool mas importante finalmente a sido liberada:

Positron Worldmap Master Version 1.0

Ah llegado la hora de revolucionar Wah con la investigacion!!

[Imagen: 16gifyc.gif]

Spoiler
07-08-2011 14:39
Buscar Cita
 Dio las gracias: Jaizu
Sonicarvalho Ausente
ASM Hacker-Rom Researcher
*

Mensajes: 65
Ingreso: Jun 2011
Reputación: 14
Agradeció: 69
Le agradecieron 217 veces. en 57 post
Mensaje: #6
RE: [THUMB MODE]Mini Tutorial: Cómo ejecutar scripts a través de ASM
Pues MarioFan, no te confundas bro. Yo nunca he dicho eso. Ni tampoco ASM tiene que ver con Scripts. Scripting fue una lenguaje creada por nintendo con base en ASM para poder contratar programadores por precios mas bajos que no saben ASM(?) XD.

O sea, nadie que ver con Scripts. Scripting tiene algunas relaciones con ASM porque los Core Engine Programmers hicieran esa lenguaje teniendo en cuenta sus conocimientos en ASM, pues scripting no es menos que pura Lógica sin la complejidad de ASM.

Al respecto de Bx, no digas tal cosa. Especialmente siendo tu, un de los mejores ASMers de Wah, si no el mejor!
Bx rX simplemente pon el procesador a leer la rutina localizada en el offset presente en el rX.

Si yo quiero ejecutar una rutina en 08064580 entonces pongo por ejemplo
ldr r0, =0x0864581
bx r0


Las rutinas que están en el Primer post simplemente son las rutinas que el juego tiene para ejecutar scripts.

'See? Not that hard!' Wink

Si, sigamos con las investigaciones!!! La verdad es que yo tiengo mas de 400mb en Bases de dados con investigaciones Ruby/Firered/Emerald, pero cuasi todo es complejo, entonces no sé como explicar a la comunidad de una forma simples. Pero me arreglare una manera de lo hacer Wink

Saludos

[Imagen: 11336468.png][Imagen: sinttulo1rj.png]


Búsquedas actuales (EMERALD):
Búsquedas actuales (RUBY) UPDATE:
Búsquedas actuales (FIRERED):
(Este mensaje fue modificado por última vez: 07-08-2011 por 22:52 Sonicarvalho.)
07-08-2011 20:53
Web Buscar Cita
 Dio las gracias: Gut_Bro , eing , Cheve_X , Jaizu
eing Desconectado
Maybe i'm a lion
*

Mensajes: 350
Ingreso: May 2010
Reputación: 31
Agradeció: 91
Le agradecieron 261 veces. en 127 post
Mensaje: #7
RE: [THUMB MODE]Mini Tutorial: Cómo ejecutar scripts a través de ASM
Hum.. grandisimo aporte darkrayquaza.
Con esto, podríamos llamar un script -codigo rubikon- desde una rutina asm.

Segun yo, he entendido esto.
Cargariamos en r0 la direccion donde esté ubicado nuestro script -codigo rubikon-, luego iremos al ejecutor de scripts (r1) y ahí se ejecutará nuestro script, y luego volverá a la rutina asm, para dar por finalizado. ¿no?

Entonces con esto, si la intro es con ASM, podriamos ir al principio de dicha rutina, y colocarle esa rutina, y ¿ejecutariamos un script en vez de la intro?

Saludos y eres grande men!
08-08-2011 20:42
Web Buscar Cita
 Dio las gracias: Gut_Bro , Sonicarvalho
Sonicarvalho Ausente
ASM Hacker-Rom Researcher
*

Mensajes: 65
Ingreso: Jun 2011
Reputación: 14
Agradeció: 69
Le agradecieron 217 veces. en 57 post
Mensaje: #8
RE: [THUMB MODE]Mini Tutorial: Cómo ejecutar scripts a través de ASM
(08-08-2011 20:42)eing Escribió:  Hum.. grandisimo aporte darkrayquaza.
Con esto, podríamos llamar un script -codigo rubikon- desde una rutina asm.

Segun yo, he entendido esto.
Cargariamos en r0 la direccion donde esté ubicado nuestro script -codigo rubikon-, luego iremos al ejecutor de scripts (r1) y ahí se ejecutará nuestro script, y luego volverá a la rutina asm, para dar por finalizado. ¿no?

Entonces con esto, si la intro es con ASM, podriamos ir al principio de dicha rutina, y colocarle esa rutina, y ¿ejecutariamos un script en vez de la intro?

Saludos y eres grande men!

Has percibido cuasi todo, pero esa parte de irmos a la rutina nos es asi que se hace.

PERO, yo conozco el Offset de la rutina de la opción New Game en FR y E, y percibo mas o menos como aquello funciona.

Hay una rutina para que que hace el Warp para el mapa inicial del juego (en FR, tu casa, en Emerald, el TrucK). Y luego despues de esa rutina esta una otra que es el "Script_Executer2", que sirve para llamar Map Scripts 03(scripts de gatillo 03). Pero esas dos rutinas solo son llamadas después de la intro. Asi que removeríamos las rutinas de la intro y hariamos un script que SETVAR 0xVAR 0x1 para que cuando llegues al primer mapa se active un script gatillo 02 por esa VAR con tu "supuesta intro 'coded in rubikon' script".

Pero para que trabajase bien, tenias que separar las rutinas de Naming de [PLAYER] y de [rival].

Es posible, pero es necesario mas búsqueda en esas rutinas.

Saludos,
~Sonicarvalho
Aka D.ray

[Imagen: 11336468.png][Imagen: sinttulo1rj.png]


Búsquedas actuales (EMERALD):
Búsquedas actuales (RUBY) UPDATE:
Búsquedas actuales (FIRERED):
08-08-2011 20:59
Web Buscar Cita
 Dio las gracias: Cheve_X , Jaizu


Posibles Temas Similares...
Tema: Autor Respuestas: Vistas: Último Mensaje
  [THUMB MODE] ¡Tutoriales! ~Javs 25 5 358 06-12-2011 23:08
Último Mensaje: Sonicarvalho

Salto de foro: