Registrarse

[ASM] Tutorial Thumb mode

~Javs

Admon. retirado.
Miembro de honor
[align=center]----------------------------------------------------------------------------------------------------------------------------
¡Elaboración de rutinas con ASM Thumb Mode!
----------------------------------------------------------------------------------------------------------------------------[/align]

Antes de comenzar; ¡Con éste tutorial no esperen terminar programando como Mastermind_X, TheTheTheThe ó ShinyQuagsire!

Finalidad ó propósito: Hecho para propiciar el interés sobre el campo de la investigación y el desarrollo en la población hispana dedicada al RomHacking. La superación, más que entre foros, debe ser personal, así que no se lo tomen de modo competitivo.

Sobre el tutorial: Mucha gente se reusa a leer el manual de Pey! antes de proseguir con éste, así que tendré que empezar todo desde el principio hasta que entiendan lo básico para poder seguir con los demás temas. Bien, ¡Disfrútenlo y aprendan bastante!

[align=center]----------------------------------------------------------------------------------------------------------------------------
¿Qué aprenderemos en éste manual?
----------------------------------------------------------------------------------------------------------------------------[/align]

-Comandos e instrucciones básicas y avanzadas.

-Aprender la lógica y ejecución detrás de una rutina.

-Realizar una rutina propia con base a los temas anteriores.

-Modificar cualquier sector del ROM por una rutina.

-Diseñar un sistema nuevo para integrar en un ROM.

-Luego de todo ésto, te graduarás (?)

¿Ya quieren empezar? ¡Pues empecemos!

[align=center]----------------------------------------------------------------------------------------------------------------------------
Comandos e intrucciones básicas y avanzadas
----------------------------------------------------------------------------------------------------------------------------[/align]

Explicaré nuevamente los comandos sencillos de una rutina, pero de una manera más fácil o un poco mejor redactada:

Registro; El registro es una especie de "Buffer" que te permite almacenar diferentes tipos de información como Offsets, Bytes, e incluso los valores de otros Registros.

Existen 15 registros en la RAM de la ROM:

-Del registro 1 al 14 (r1-r14): Son de uso complétamente libre.

-Registro 15 (r15): No se usa a menos que tu rutina sea para indicar al sistema interno de la ROM que tiene que decodificar de una manera diferente los datos ingresados o egresados que se procesen. (Ésto será explicado en una lección un poco lejana)

Pero, ¿Cómo sé qué registros está usando el ROM?

Eso es sencillo y muy útil, sobretodo por que si usas un registro que ya estaba en uso para una instrucción clave, hecharás a perder todo ese sector.

Se hace de la siguiente manera; El VBA tiene una fabulosa aplicación, llamada Disassemble. Para acceder a ella, basta con:
Tools > Disassemble.

La pantalla luce así;



Y a continuación explicaré qué significa cada cosa:

1.- Con éste, seleccionamos qué tipo de codificación queremos visualizar los datos de los registros y direcciones. (Por éstas ocaciones, recomiendo selecciónar el "Thumb Mode")

2.- Para ir a la dirección que quieras en cuanto a la RAM, para saber qué proceso está ejecutando y de qué manera.

3.- Para saber qué registros están siendo utilizados y en qué Offset se puede encontrar su valor o en qué línea de instrucción se está ejecutando.

4.- Actualiza automáticamente los registros y las líneas de comando de éstos cada frame que va pasando en tu emulador. Funcionaría como un monitor o algo parecido.

5.- Si no tienes activado el Automatic update, sirve para actualizar los registros y líneas de instrucciones hasta el frame donde se encuentra actualmente tu ROM.

Más adelante, los mostraré cómo combinar ésta fantástica herramienta con otra igual o mejor, el Search for Cheat. Pero por ahora, me parece más primordial empezar con los comandos:

LDR; Carga el valor de un Offset en un registro, ejemplo:

LDR r0, =0x02020000 'Carga el valor que se encuentre en el Offset 0x02020000 en el Registro 0 (r0).

LDR r0, [r1] 'El Registro 0 (r0) carga el valor que tenga asignado el r1.

LDR r0, [r0, r1] 'Si el r0 ya tenía un valor, sobreescribir ese valor con el que tenía más el valor que tenía el r1.

LDR r0, [r1], #0x02 'Hace que el valor del Registro 1 (r1) se sume con el valor #0x02 (2), entonces el Registro 0 (r0) obtiene el valor del total. (OJO: El valor del #0x?? debe ser en HEX)

STR/MOV; Guarda información en un registro, ejemplo:

STR r0, #0x2 'Guardamos el valor 0x2 (2) en el registro 0 (r0).

STR r1, [r0] 'Guardamos el valor del registro 1 (r1) en el registro 0 (r0).

MOV r0, #0x2 'Guardamos el valor 0x2 (2) en el registro 0 (r0).

MOV r0, r1 'Guardamos el valor del registro 1 (r1) en el registro 0 (r0).

ADD; Permite sumar los valores de los registros, ejemplo:

ADD r2, r0, r1 'Suma los valores de los registros 0 y 1 (r0 y r1) y el valor total, se escribe en el registro 2 (r2).

ADD r0, r0, r1 'Suma el valor del registro 0 (r0) con el registro 1 (r1) y el total se sobreescribe en el registro 0 (r0).

ADD r0, r0, #0x2 'Suma el valor del registro 0 (r0) con el valor #0x2 (2), y el total se sobreescibe en el registro 0 (r0).

[align=center]----------------------------------------------------------------------------------------------------------------------------
La lógica y la ejecución detrás de una rutina
----------------------------------------------------------------------------------------------------------------------------[/align]

La lógica y la ejecución de una rutina se concentra en los principios del álgebra en su forma más básica. ¡Claro que sí! Así que si eres un asco para las Matemáticas (Álgebra), te recomiendo de que le des una hojeada a tu librito de Baldor y regreses después.

Continuaremos con una rutina de compra básica, como la que puso Pey! en su tutorial, pero un poco más personalizada;
(Iré poniendo cada paso con negritas con su respectiva explicación en la parte inferior del quote)

Pey! dijo:
@Define Lápices = 0x1
@Define Cuadernos = 0x2
@Define Dinero = 0x3


@Thumb
Push {r0, r1, r2, r3, LR}
Str r0, Lápices
Str r1, Cuadernos
Str r2, Dinero
Add r0, r0, r1
Cmp r0, r2
bGE Comprar

Comprar:
Mov r3, r0
Pop {r0, r1, r2, r3, PC}
 
Última edición por un moderador:

TrevorTS

Miembro de honor
Miembro de honor
RE: [ARM7-THUMB MODE] ¡Lecciones!

we este tuto es el primero te mereces un gracias, buen aporte carnal, y nos vemos en el hack xd, que noob yay, bueno bro me gusto el tuto haber si aprendo algo :) que bueno.:D aver si no llega otro aprovechon y me quita mi compañero. :awesome:xd bueno broder gracias.
 

errero

Usuario Habitual
RE: [ARM7-THUMB MODE] ¡Lecciones!

muy bueno... la verdad que poco a poco le voy cogiendo el gusto a esto... solo que para mi qda q des una informacion basik... como se insertaria esto en un rom y com qedaria insrtado... y que aplicacion podriamos darle
aun asi el tuto es muy bueno y esta biene explicado gracias
 
RE: [ARM7-THUMB MODE] ¡Lecciones!

Si al final va a ser cierto que los manuales de WAH no son para tontos xD.
Muchísimas gracias Javs, esto es lo que estaba buscando, un manual de ASM, en Español y para tontos xD

Ah si, te mereces un bonito gracias =D
 

~Javs

Admon. retirado.
Miembro de honor
RE: [ARM7-THUMB MODE] ¡Lecciones!

we este tuto es el primero te mereces un gracias, buen aporte carnal, y nos vemos en el hack xd, que noob yay, bueno bro me gusto el tuto haber si aprendo algo Smile que bueno.Big Grin aver si no llega otro aprovechon y me quita mi compañero. :awesome:xd bueno broder gracias.
Haha, denada, para éso estoy.. Sólo soy otro más que quiere seguir la era dorada del PokéHacking =D

muy bueno... la verdad que poco a poco le voy cogiendo el gusto a esto... solo que para mi qda q des una informacion basik... como se insertaria esto en un rom y com qedaria insrtado... y que aplicacion podriamos darle
aun asi el tuto es muy bueno y esta biene explicado gracias
Tranquilo amigo, hay que saber caminar para poder correr ;D
Ésa rutina en sí no se puede insertar como tal, era sólo un ejemplo de Pey! para dar a entender sus comandos, pero yo lo pongo más detallado y para otro fin, en todo caso, el procedimiento y lógica que se usa, es igual para las PokéRutinas..

Si al final va a ser cierto que los manuales de WAH no son para tontos xD.
Muchísimas gracias Javs, esto es lo que estaba buscando, un manual de ASM, en Español y para tontos xD

Ah si, te mereces un bonito gracias =D
LOL No es para tontos man, es para principiantes, ¡Saludos y Gracias!

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

Muchas personas me han preguntado, "¿Por qué lo posteas?, ¡luego ASM será cosa fácil!"
La verdad, es que ésto es lo mismo que pasó hace tiempo, si no hubieran personas como Areku, Koder, R!cci, Juan (PokéCo), entre otros, que en especial fueron los que más me ayudaron.. que se hubieran guardado los conocimientos para uso personal, nos hubieramos estancado en Scripts y de allí nadie pasaba..
Así que espero que ésto enrrealidad le sirva a alguien, síganme inspirando con sus comentarios xD
Saludos!
 

errero

Usuario Habitual
RE: [ARM7-THUMB MODE] ¡Lecciones!

ok javs pues si es asi entonces el tuto esta bueno y estoy deseando que sigas posteando lecciones para aprender el asm... ese gran desconocio XD
la verdad es que me habia ley el tuto de pey varias veces pero siempre me habia quedado esa duda
asias x todo y sigue trabajando que x fin alguien se dedica a enseñarnos
 

Jaizu

Usuario mítico
RE: [ARM7-THUMB MODE] ¡Lecciones!

Bien te quedó genial xD,bueno, solo hago ecuaciones de una incognita, eprop me lo descargo y en casa leo, te mereces un GRACIAS
 

R!cci

Usuario Habitual
RE: [ARM7-THUMB MODE] ¡Lecciones!

Como me encantan las variables y las matemáticas, por suerte para muchos esto no es tan complicado, sólo hay que organizar bien la cabeza...
Pues Javs, te felicito viejo, es hasta ahora el mejor tuto enfocado a la explicación del ASM de forma amena y sencilla... Espero que esto no se quede aquí y la comunidad continúe, ya sea tú u otros, con manuales a cerca de este tema...
 
RE: [ARM7-THUMB MODE] ¡Lecciones!

Esto me suena mas a lenguage C++...
Por eso de las variables y definir... Tu sabes, ¿No? xD
Pues.. no hay mucho que decir mas que.. eres un maldito genio en las matemáticas xD
Porque en eso se basa todo, matemáticas.. crei que sería un poco mas.. complejo pero a como lo explicas tu va siendo mas.. entendible (?)
Muy buen tutorial Javs y me gusta que te guste compartir (?)
Espero la siguiente clase xD
 
RE: [ARM7-THUMB MODE] ¡Lecciones!

Sabia que si alguien me explicaba ese manual lo entenderia :D gracias Javs sigue asi, ojala que lleges a hacer que sea mas comun encontrar una rutina asm en un hack hispano.. por cierto en el manual Pey! menciona un Advance Gold Road 2.1 si lo tienes podrias subirlo y postearlo aqui si no es mucha molestia...
 

~Criisss

Usuario mítico
RE: [ARM7-THUMB MODE] ¡Lecciones!

Mena dijo:
Esto me suena mas a lenguage C++...
Por eso de las variables y definir... Tu sabes, ¿No? xD
Pues.. no hay mucho que decir mas que.. eres un maldito genio en las matemáticas xD
Porque en eso se basa todo, matemáticas.. crei que sería un poco mas.. complejo pero a como lo explicas tu va siendo mas.. entendible (?)
Muy buen tutorial Javs y me gusta que te guste compartir (?)
Espero la siguiente clase xD
En realidad en XSE tambien puedes usar tranquilamente los define, es asi como se usa la variable LASTRESULT que en realidad es la 0x800d (creo)

El manual esta muy bueno, es muy facil de entender, espero ver pronto la proxima leccion, yo nunca lo podría explicar asi xD
 
RE: [ARM7-THUMB MODE] ¡Lecciones!

~Criisss dijo:
En realidad en XSE tambien puedes usar tranquilamente los define, es asi como se usa la variable LASTRESULT que en realidad es la 0x800d (creo)

El manual esta muy bueno, es muy facil de entender, espero ver pronto la proxima leccion, yo nunca lo podría explicar asi xD
Lo se, solamente mencionaba que me sono a C++ xD
Al igual que los scripts (y al parecer ASM) todo es de lógica matemática, y saber exactamente que es lo que quieres y como quieres aplicarlo xD

Igual, creo que todo lenguaje de programacion tiene una base, no se cual sea... pero deben tenerla no? xD
 

~Javs

Admon. retirado.
Miembro de honor
RE: [ARM7-THUMB MODE] ¡Lecciones #2!

¡Lección #2 puesta!
Esperen la lección #3 mañana..
No pregunten, lean bien el post..
Ya saben.. Vida social (?)
 

KODER

Un Romhacker mas...
RE: [ARM7-THUMB MODE] ¡Lecciones #2!

Gran aporte men, realmente es un gran manual
sobre este tema realmente el mas entendible que
he visto, y con esto ayudas mucho a la comunidad

sale bro muy buena explicacion.

====>.:::KODER:::.<====
 
RE: [ARM7-THUMB MODE] ¡Lecciones #2!

Tengo una duda :S
Concretamente en esta parte:
3- Abrimos ése ROM que se creó con un editor HEX, lo que verán, es la rutina ya compilada.. así que copiamos éso y lo pegamos en nuestro Hack en el Offset que querramos..
He abierto el ROM que se creó con el HexWorkShop, y me da todos los numeros que tu dices, pero, como pego los datos en el offset de nuestro hack?

Saludos :awesome:
 

~Javs

Admon. retirado.
Miembro de honor
RE: [ARM7-THUMB MODE] ¡Lecciones #2!

~Sylenn dijo:
Tengo una duda :S
Concretamente en esta parte:
3- Abrimos ése ROM que se creó con un editor HEX, lo que verán, es la rutina ya compilada.. así que copiamos éso y lo pegamos en nuestro Hack en el Offset que querramos..
He abierto el ROM que se creó con el HexWorkShop, y me da todos los numeros que tu dices, pero, como pego los datos en el offset de nuestro hack?

Saludos :awesome:
Nunca he usado el HexWorkShop, yo recomendaría el HXD..
Pero ha de ser como en otros editores HEX, CTRL + C y en tu ROM; CTRL + V xD
Abres tu Hack, buscas espacio libre (FF), pegas.. y es todo.. haha..
Saludos! ^^
 

Pyro

The concept of love
RE: [ARM7-THUMB MODE] ¡Lecciones #2!

Muy bien hecho Javs, esta muy bueno, a ver si con este y con el de hackmew me digno a hacer cosas mas grandes. :D
 

Mariofan

Usuario mítico
RE: [ARM7-THUMB MODE] ¡Lecciones #2!

Muy buen tuto Javs, aunque ya eso lo sabia, pero bueno xD. Espero y sigas poniendo mas lecciones, y a ver cuando nos enseñas a surfear por la ram(Porque si no sabes hacerlo no puedes obtener los offsets basicos a usar en una rutina) xD.

En fin, solo eso, Buen aporte!!
 

Gut_Bro

Mega desarrollador
RE: [ARM7-THUMB MODE] ¡Lecciones #2!

¡Wow!
Muy bueno, lo entndí todo al 100%, la lógica es muy sencilla hasta ahora y espero que puedas actualizar esto más porque esta re-bueno, quisiera saber como rayos podría yo hacer aparecer una imágen en la pantallita o comprobar que hora es para que mis minis digan diferentes cosas como "Oye chiquillo... es muy tarde para andar por ahi en las calles..." xD.

¡Vamos! ¡Ánimo, somos muchos los que queremos aprender del maestro!
:D
 
Arriba