Registrarse

[ASM] La guía de ASM

BLAx501!

A veces comento en temas :3
Miembro de honor
Usuario de Platino
Buenas, como sabéis, @.:Helix Boo♪:. anda un poco liado últimamente, y me ha pedido que publique este tema por él. Se lo ha currado mucho, así que esperamos de verdad que os sirva.

__________________________________________

Hace poco, no sé si por un momento de aburrimiento extremo, por mi gran cabezonería o por la clarividencia del alabado Hélix, me dio por leer varios tutoriales referentes al ASM, y por primera vez en la historia, he logrado entender los comandos y tener una base básica de datos referente a ellos. La cosa es que llevo la friolera de 5 años queriendo aprender ASM, así que ahora que puedo, me he propuesto hacer lo mismo que con el scripting: reventarlo.

¿Cuáles son los clásicos problemas a la hora de aprender ASM?


  • Ningún tutorial ofrece una explicación completa de todos los comandos o parámetros.
  • A veces, las explicaciones son complicadas o se enseña dando por sentado que el "alumno" sabe a qué se refiere el maestro.
  • Como no se sabe cómo funcionan todos los comandos y muchas veces ni siquiera se comprenden del todo, los ejemplos tampoco los entendemos.


¿Cuáles son los objetivos?

Recopilar TODOS LOS COMANDOS.
Proporcionar una explicación de cada comando de la forma más sencilla, masticada y entendible posible (tutorial para tontos).
Explicar todos los ejemplos de rutinas que pueda encontrar.
Conseguir que aprender ASM sea una tarea mucho más fácil.
Explicar cómo encontrar rutinas y/o offsets útiles dentro de la ROM para recopilarlos y tenerlos al alcance de un click.

¿Cómo pretendemos conseguirlo?

En principio, para comenzar a hacer del ASM un campo más digerible, pretendemos publicar una guía de comandos "para tontos" y actualizarla de vez en cuando, cada vez que se hagan correcciones y/o se añada nueva información. Todos los mensajes que encuentren en el tema, así como nuevos aportes y nuevas explicaciones, serán tenidos en cuenta y se añadirán a la guía tras haber considerado su grado de explicación y comprensión.

Con el paso del tiempo, trataremos de completar la guía con explicaciones sobre el proceso de inserción de rutinas y, si todo marcha bien, el objetivo final es elaborar una especie de Santo Grial del ASM del PokéRom Hacking, pudiendo incluir incluso textos acerca de investigaciones en el campo.

Consideraciones

Esta guía será actualizada de vez en cuando por uno de mis colaboradores, Blax, debido a una ausencia temporal.
La guía está en desarrollo, en principio no he encontrado errores graves, pero estáis avisados.
Tened en cuenta que no soy informático, que mis nociones de informática se quedaron en Perl y que acabo de estrenarme en el campo como aquel que dice no me acribilléis xD.
Esta es una guía "para tontos", es decir, si queréis colaborar en su construcción, ofreced explicaciones que se entiendan, no déis nada por sabido. Toda ayuda es bien recibida.
Referente a los términos byte, word, etc. he seguido la nomenclatura de Bulbapedia con el fin de evitar confusiones.


La guía de comandos (en construcción)

Guía de comandos - Revisión 1.0

Enlaces de interés

Esta entrada de Bulbapedia os ofrecerá información variada sobre la RAM-Map de los roms con los que trabajamos: >>Accede aquí<<
Este es otro enlace a un tutorial sobre ASM, podéis consultarlo para consultar la parte acerca de compilar la rutina, la parte del editor hexadecimal, etc.: >>Accede aquí<<
Enlace al tutorial de HackMew (no tuve tiempo de revisarlo en profundidad, más que nada de probar las rutinas, pero lo dejo para el que le pueda interesar): >>Accede aquí<<
Enlace al tutorial de Hexadecimal más reciente del foro, obra de @Flame-HSG-, necesario para comprender cómo colocar las rutinas en nuestro ROM. >>Accede aquí<<

Agradecimientos

Gracias al user que escribió la guía sobre ASM de la web de WAH, me sirvió para completar algunas de las explicaciones: >>Accede aquí<<
Gracias a ShinyQuagsire, de Pokécommunity, por su guía sobre ASM: >>Accede aquí<<
Gracias a HackMew por su compilador.
Gracias a eing por resolver algunas de mis dudas (no pregunté mucho, pero se agradece).
Gracias a Blax y MarioFan por sus múltiples explicaciones (las de este segundo las recuerdo vagamente, pero lo que cuenta es que al fin llegué a algún lado xD).
Gracias a pabel por una serie de aportes (no son recursos referentes a la guía actual, pero quién sabe lo que añadiré en el futuro).
Y gracias a todos los que habéis estado al pie del cañón, ya sea manteniendo en sitio, como apoyando, no hubiese llegado hasta aquí sin vuestro granito de arena.

Y finalmente...

Esperamos que este aporte os pueda servir de ayuda a muchos de vosotros, agradeceríamos que aquellos que quisieran, ayudasen a buscar erratas en la guía y a ampliarla con más comandos, parámetros, explicaciones y ejemplos.

Eso es todo por ahora.
 

Invert

why so serious?
Respuesta: La guía del ASM - De todos para todos



Explicaré algunas cosas de esta herramienta que servira como base para el entendimiento del ASM.

¿Que es IDA Pro?

Es un multiprocesador interactivo desensamblador acoplado a un depurador remoto local y aumentado por un plugin completo.

¿Que puede ofrecernos IDA Pro?

Como un desemblador, IDA Pro explora programas binarios, para que el codigo fuente no siempre este disponible, para crear mapas de su ejecucion.
El verdadero interes de un desensamblador es que muestra instrucciones que son en realidad ejecutadas por el procesador en una representacion simbolica llamada lenguaje ensamblador.
El depurador en IDA Pro complementa las capacidades de analisis estaticas de el desensamblador. Al permitir un analisis solo pasando atravez del codigo que esta siendo investigado.

¿Como puedo utilizar IDA Pro?
Hace tiempo un usuario hizo un tutorial sobre esto muy bien explicado.
http://whackahack.com/foro/t-12514/gba-otros-disassembler-ida-pro-tutorial

Ahora, los que quieren aprender ASM necesitan tener alguna base de como son las rutinas que se ejecutan en el juego para poder hacer sus propias.
En el foro Pokeco 2 usuarios han hecho su database en la cual estan las rutinas que ejecuta la rom.
Una para Fire red (creditos a Knizz por su database)
https://www.dropbox.com/s/2nuue1duu1wf7pw/firered.idb?dl=0

Y otra para Emerald (creditos a Tocuhed por su Database)
https://www.dropbox.com/s/c8pswwq3h1lccly/BPEE.idb?dl=0

Con estas databases puedes buscar las rutinas y entenderlas.

¿Como busco una rutina con IDA Pro usando las databases?

Primero que todo deben saber en que offset esta su rutina.
Yo usaré este ejemplo.

La rutina del comando showpokepic en FR se encuentra en el offset "06BB9C"
Entonces abrimos nuestro Nuestra Database con IDA, si ya tienen instalado IDA Pro, solo den doble clic en la Database.

Cuando tengo mi Database abierta vayan a la opcion que se muestra arriba llamada Jump-Jump to address, o simplemente presionen la tecla "G"
Saldra una pequeña ventana, en ella debes colocar el offset de tu rutina.
Recuerda agregar un 08.
Entonces seria 0806BB9C y le damos Ok
Asi saltará a la posicion de tu rutina.

Y aqui el link del IDA Pro 6.5
https://www.dropbox.com/s/hvvmxxoo1dkmdzc/firered.idb

Enlaces de Interes

- [Tutorial] IDA Pro Tutorial - The PokéCommunity Forums
- https://www.hex-rays.com/products/ida/

Por ultimo decir que si tienen dudas dejenlas en este post para que no se repitan en el futuro.

 

BLAx501!

A veces comento en temas :3
Miembro de honor
Usuario de Platino
Respuesta: La guía del ASM - De todos para todos

Post reservado número 2 para añadir más información
 

BLAx501!

A veces comento en temas :3
Miembro de honor
Usuario de Platino
Respuesta: La guía del ASM - De todos para todos

Buenas gente. Perdonad por poner tantos posts de golpe, pero son necesarios, creedme xD.

Esto es el fruto de Boo aprendiendo ASM + lo que yo he aprendido en la universidad + lo que Pabel ha aprendido a saber dónde ¬¬

Esperamos que os sirva a todos ;)
 

Gold

Porrero a tiempo parcial
Miembro insignia
Respuesta: La guía del ASM - De todos para todos

Buenas gente. Perdonad por poner tantos posts de golpe, pero son necesarios, creedme xD.

Esto es el fruto de Boo aprendiendo ASM + lo que yo he aprendido en la universidad + lo que Pabel ha aprendido a saber dónde ¬¬

Esperamos que os sirva a todos ;)
En foros como XDA Developers es totalmente permitido reservar posts para futuras actualizaciones, ¿porque no en Wah
-----------
Exelente recopilatorio, la verdad a mi solo me bastó el tuto de shinyquagsire para agarrarle el rollo al ASM, gracias por el tema, es requeteutil.

PD: @Invert ¿Desde cuando sos tan pro en ASM?
 

MrNightology

Usuario mítico
Respuesta: La guía del ASM - De todos para todos

Digo yo que habrá una manera de hacer subrutinas que no sea en ensamblador, que es horrible, sino en C o C++. Tengo un plugin para eclipse que es capaz de compilar para ARM7 y ver luego su desensamblado en ejecución. Si queréis que os pase ese eclipse para trastear con él, mandadme algún mensaje, que os lo subo a algún sitio para que lo tengáis e investigáis con él que os puede ser de gran ayuda. o:
 

BLAx501!

A veces comento en temas :3
Miembro de honor
Usuario de Platino
Respuesta: La guía del ASM - De todos para todos

Digo yo que habrá una manera de hacer subrutinas que no sea en ensamblador, que es horrible, sino en C o C++. Tengo un plugin para eclipse que es capaz de compilar para ARM7 y ver luego su desensamblado en ejecución. Si queréis que os pase ese eclipse para trastear con él, mandadme algún mensaje, que os lo subo a algún sitio para que lo tengáis e investigáis con él que os puede ser de gran ayuda. o:
Pues no estaría de más xD. No se exactamente cómo funciona la programación en C para GBA aunque he visto alguna que otra página ya, así como las plantillas de ShinyQuagsire en su GitHub.

Si quieres pasarlo está bienvenido, le buscaremos un hueco xD.

Gracias por tu colaboración :D
 

Elpollo

BizNieto de la *****!!
Respuesta: La guía del ASM - De todos para todos

No te molestes en recopilar las instrucciones, pues ya están todas en la documentación, con su respectiva información de uso:

ARM Information Center

Quizá una guía de cómo navegar por el sitio sería más útil, porque tiene tela la verdad...
Una guía que muestre la arquitectura de la game boy Advance sería de mayor ayuda, que no se si es porque yo soy un inútil en ese aspecto, o que simplemente no tengo comprensión lectora, el caso es que todo lo que he encontrado por la red a mi no me aclara nada.
 

RedMort

Aprendiendo Decomp
Respuesta: La guía del ASM - De todos para todos

Una vez intente lo del ASM, pero me quedé a las puertas.
Quiero creer que lo termine entendiendo, pero la falta de informacion para investigar rutinas, el escaseo de las explicaciones, y que no le veia una utilidad primaria hicieron que lo dejara.
Sinceramente no creo que lo vaya a usar nunca, porque no necesito nada extremadamente dificil, pero me gusta saber que si cambio de opinión tendré este post para comenzar.
Señores, muchísimas gracias por esto, no hay palabras, quién sabe si esta comunidad comienza a florecer más en el ámbito de los scripts gracias a vosotros.
Felicidades por haberlo traido, y por el futuro premio al mejor aporte del año en los premios Wah anuales.
 

H.B.P

Emperador Kaktiácero
Miembro de honor
Respuesta: La guía del ASM - De todos para todos

No te molestes en recopilar las instrucciones, pues ya están todas en la documentación, con su respectiva información de uso:

ARM Information Center

Quizá una guía de cómo navegar por el sitio sería más útil, porque tiene tela la verdad...
Una guía que muestre la arquitectura de la game boy Advance sería de mayor ayuda, que no se si es porque yo soy un inútil en ese aspecto, o que simplemente no tengo comprensión lectora, el caso es que todo lo que he encontrado por la red a mi no me aclara nada.
Te agradezco el aporte, pero en este tema estamos tratando de hacer algo así como una "guía para tontos", es decir, que al leer sea más evidente que asomarse por la ventana y saber que llueve o el Sol brilla más que un helado en pleno mes de Agosto. Estaríamos muy agradecidos si desmenuzaras los comandos al mínimo común múltiplo y aportaras ejemplos sobre su estructura.

Quiero agradeceros a todos este factuoso recibimiento, hablo en nombre de todos los componentes del grupo al decir que no existe mayor satisfacción que el redactar y ayudar a derrumbar tabúes, ya llegamos a lograrlo con el scripting y ahora queremos hacer lo mismo con ese campo que llamamos ASM. Sé que aún queda bastante para extenderlo y que debemos dedicarle mucho tiempo, pero al menos confío en que sea un proyecto que haya brotado desde nuestras manos y que, con vuestros granitos de arena, poco a poco se convierta en el Santo Grial Hispano del PokéASM.

Recuerden que todos pueden participar y formar parte de este gran proyecto conjunto.
 

Elpollo

BizNieto de la *****!!
Respuesta: La guía del ASM - De todos para todos

El problema de esto no es aprender como es el lenguaje, pues una vez tienes un poco de practica programando, sabes que tienes que ir a la documentación y a ejemplos que pilles en internet (en la misma documentación en este caso suelen estar los mejores), el verdadero problema es como utilizar el lenguaje para hacer lo que uno quiere, y es aquí donde de verdad no hay apenas ayuda de ningún tipo (ni para tontos ni para listos).
Con esto me refiero a:

- Un desglose de los tipos de memorias que tiene la game Boy, algo básico y que todo el que quiera trastear un poco con ella debería conocer; en qué dirección empiezan y en cual acaban, etc.

- Una guía de los offsets útiles, esta si he visto algo por aquí (además de bulbapedia), aunque quizás no estaría mal hacerla un poco más "visible" y entendible (reestructurarla).

-Una guía que explique el funcionamiento de un procesador ARM, que si no sabes esto, es muy probable que nunca seas capaz de aprender a usar el asm.

-Una alternativa: enseñar como programar en C para los que no quieran usar el ASM y quieran seguir haciendo cosas chulas, que vayan más allá de cambiar mapeado y scripts.

Ahora mismo no me acuerdo de con qué más problemas me topé cuando empecé con esto, pero muy pocos (por no decir ninguno), fueron relacionados con la sintaxis del lenguaje, además que hay un montón de tutoriales incluso en este foro.

Con lo que he dicho hasta ahora no pretendo ni desanimar ni nada por el estilo, sólo que quizás deberíais emplear el tiempo en otros aspectos que quizás sean más útiles y requieran ser tratados con mayor prioridad, pues el de la sintaxis del lenguaje, en este foro hay varios tutoriales como ya mencioné, creo que es un tema ya solventado.
 

Arkelao

Jinete pálido
Respuesta: La guía del ASM - De todos para todos

En youtube hay varios cursos enteros para aprender a programar en C. Y hay uno brutal en Khan Academy que empiezas desde cero y te lo enseña fenomenal.
 

H.B.P

Emperador Kaktiácero
Miembro de honor
Respuesta: La guía del ASM - De todos para todos

El problema de esto no es aprender como es el lenguaje, pues una vez tienes un poco de practica programando, sabes que tienes que ir a la documentación y a ejemplos que pilles en internet (en la misma documentación en este caso suelen estar los mejores), el verdadero problema es como utilizar el lenguaje para hacer lo que uno quiere, y es aquí donde de verdad no hay apenas ayuda de ningún tipo (ni para tontos ni para listos).
Con esto me refiero a:

- Un desglose de los tipos de memorias que tiene la game Boy, algo básico y que todo el que quiera trastear un poco con ella debería conocer; en qué dirección empiezan y en cual acaban, etc.

- Una guía de los offsets útiles, esta si he visto algo por aquí (además de bulbapedia), aunque quizás no estaría mal hacerla un poco más "visible" y entendible (reestructurarla).

-Una guía que explique el funcionamiento de un procesador ARM, que si no sabes esto, es muy probable que nunca seas capaz de aprender a usar el asm.

-Una alternativa: enseñar como programar en C para los que no quieran usar el ASM y quieran seguir haciendo cosas chulas, que vayan más allá de cambiar mapeado y scripts.

Ahora mismo no me acuerdo de con qué más problemas me topé cuando empecé con esto, pero muy pocos (por no decir ninguno), fueron relacionados con la sintaxis del lenguaje, además que hay un montón de tutoriales incluso en este foro.

Con lo que he dicho hasta ahora no pretendo ni desanimar ni nada por el estilo, sólo que quizás deberíais emplear el tiempo en otros aspectos que quizás sean más útiles y requieran ser tratados con mayor prioridad, pues el de la sintaxis del lenguaje, en este foro hay varios tutoriales como ya mencioné, creo que es un tema ya solventado.

Todo esto que dices es importante y algunas opciones se pueden ir agregando con el tiempo. Sin embargo, sigue siendo cierto que las explicaciones sobre los comandos están incompletas o son poco entendibles (vamos, hablo desde mi experiencia personal). Si queremos hacer una guía de lo más completa, hay que abarcar todos los campos y uno de ellos es saber qué hace cada instrucción. De todas formas, te tomo la palabra, a ver si agregamos esas explicaciones referente a los registros, rangos en la RAM y ese tipo de cosas.

La parte de programación en C lo veo un poco fatiguilla y este tema en todo caso trata sobre ASM, pero a ver, gracias por todos estos puntos.
 

Katherine

Omnipresente
Miembro de honor
Respuesta: La guía del ASM - De todos para todos

Este tutorial me ha servido de mucho en algunos momentos que no he terminado de entender algunas cosas para complementarlo y terminar de pillarlo (ya que mi nivel de inglés no es nada del otro mundo). Es una pena que @.:Helix Boo♪:. se haya retirado del RH. ¿Podemos esperar alguna actualización algún día o seguimos soñando?

En fin, muchas gracias por este aportazo que a muchos le han sido útil, aunque esté un poco olvidado parece con los pocos comentarios que tiene. ¡Dadle un poco de amor y cariño!

Au revoir~.
 

H.B.P

Emperador Kaktiácero
Miembro de honor
Respuesta: La guía del ASM - De todos para todos

oye para cuándo novedades esto prometía u.u
Aarón ツ;376258 dijo:
Este tutorial me ha servido de mucho en algunos momentos que no he terminado de entender algunas cosas para complementarlo y terminar de pillarlo (ya que mi nivel de inglés no es nada del otro mundo). Es una pena que @.:Helix Boo♪:. se haya retirado del RH. ¿Podemos esperar alguna actualización algún día o seguimos soñando?

En fin, muchas gracias por este aportazo que a muchos le han sido útil, aunque esté un poco olvidado parece con los pocos comentarios que tiene. ¡Dadle un poco de amor y cariño!

Au revoir~.
Desgraciadamente, no tengo pensado realizar ninguna actualización más a la guía a día de hoy. Sin embargo, me alegro de que esto sirva a muchos, quién sabe si el día de mañana alguien se decide a poner otro granito de arena y a aportar nueva información. Eso sí, siempre que sea lo más entendible posible. ¡Muchas gracias por vuestro apoyo!
 

Noctul~

Usuario de Platino
Respuesta: La guía del ASM - De todos para todos

Muchas gracias por traernos este grandisimo aporte el cual abre muchas puertas hacia el ASM, intentare probar lo que pone aqui cuando termine los examenes
 

LeixerSnow

Desarrollador de Pokemon Shadow Rupture
Respuesta: La guía del ASM - De todos para todos

Que buen aporte, no se mucho de ASM pero gracias a esto podré mejorar.
 

pikachu240

Junior C# Developer
Respuesta: La guía del ASM - De todos para todos

Hola :)
Sinceramente creo que es complejo de entender porque le faltan casos practicos donde se usen, creo que eso ayudaria, me refiero a cada paso con un ejemplo diferente para poder asimilar ese lenguaje, luego me ha surgido una necesidad de que haya un lenguaje de alto nivel que se traduzca a este enorme porque este lenguaje esta muy pegado a la compresión de la maquina y eso quiere decir que para las personas no es un codigo simple, dicho esto y sin animos de fomentar la creación del lenguaje (porque supone mucho esfuerzo y ganas) propongo dar primeros pasos para poder llegar a eso dado que un lenguaje nos daria a los programadores una facilidad para hacer y entender aun nivel mucho mas alto...Sé que debe de ser algo dificil pero si entre todos podemos ir haciendo pasos, es posible que en un tiempo, podamos disfrutarlo :)

Yo no se como se hace para hacer un lenguaje que se traduzca a ASM y luego se compile a bytes pero debe de ser una faena tremenda, de sintesis.
 
Arriba