Clase 1
Al ser la primera clase no vamos a meternos de lleno en el mundo del ASM, ya que antes debemos entender ciertas cosas referente a este. Por lo tanto, la clase de hoy se centrará en los puntos siguientes.
• ROM y RAM (offsets...)
• Registros (registros bajos, sp, lr, pc…)
• Compilando una rutina
ROM
ROM es la abreviatura de Read Only Memory. Es el archivo que almacena todos los datos de nuestro juego (scripts, paletas de tiles, midis...). Si abrís una ROM mediante un editor hexadecimal veréis los datos ordenador por bytes en sus respectivos offsets.
Byte: Equivalente a 8 bits, es decir, es igual a ocho dígitos binarios. Si no sabéis que es el código binario buscadlo en Internet. Por lo que respecta al ASM en el Rom Hacking un byte es un conjunto de dos números en sistema hexadecimal. Es decir, un byte es aquel número hexadecimal entre 00 y FF, ambos incluidos.
Offset: Un offset es la dirección donde se almacena un byte. En el próximo ejemplo gráfico se entenderá mejor.
Offset: Un offset es la dirección donde se almacena un byte. En el próximo ejemplo gráfico se entenderá mejor.
En el ASM la ROM será nuestro libro de referencia. De ahí sacaremos muchos de los datos que necesitemos (los nombres de los ataques, el tipo de los movimientos...).
RAM
RAM es la abreviatura de Random Acces Memory. Es donde se almacenan todos los datos a la hora de jugar al juego. Por ejemplo, almacena los datos de nuestros Pokemon, los textos que aparecen en pantalla, nuestro dinero...
De hecho, la mayoría, si no son todos, los comandos del XSE se basan en modificar los datos de la RAM.
La RAM se ordena de la misma forma que la ROM, los datos se almacenan en offsets en forma de bytes.
La propia RAM será nuestra otra fuente de información en el ASM, además, es el objetivo a editar al final de la rutina. Es decir, todas las rutinas tratan de editar la RAM.
Registros
A partir de aquí nos adentramos en lo que viene siendo el ASM. Un registro es lo equivalente a una variable, pero en vez de almacenar una half word (dos bytes) es capaz de almacenar una word (cuatro bytes).
En el ASM usaremos los registros para almacenar en ellos los datos que nosotros queramos para usarlos a nuestro antojo.
Por lo tanto, un registro es capaz de almacenar un valor entre 0x00000000 y 0xFFFFFFFF, ambos incluidos.
¿Qué registros existen?
A partir de ahora veréis mucho la nomenclatura de llamar r a un registro. Por ejemplo, al primer registro se le llamará r0, al siguiente r1 (nótese que se empieza desde 0 y no desde 1).
Los registros bajos (low registers) son los que normalmente usaremos para gestionar nuestros datos. Es tos registros son desde el r0 hasta el r7. Traquilos, son de sobra para nosotros.
Los registros altos (high registers) son los registro entre r8 y r12. Son registros que solo algunas instrucciones pueden acceder, aunque a veces sean de uso general (nosotros usaremos solo los anteriores).
SP (stack pointer) o r13 es un registro que guarda el punto más alto de la pila (stack). Para explicar lo que es una pila citaré a @Cheve_X
Una pila es una cantidad de elementos puestos unos sobre otros, es una estructura de datos.
Podemos considerar a una pila vacía así:
Parece una estantería donde luego apilaremos Libros. La estantería sería nuestra memoria y los libros nuestros punteros.
Ésta estructura tiene una forma muy peculiar de tratamiento de informacion, lo que la hace especial, y se conoce como: LIFO
Last
In
First
Out
Es decir, "El último en entrar, es el primero en salir".
Una vez más, ilustremos:
Supongamos que queremos hacer una pila de libros de distintos colores, meteremos primero el libro de color amarillo.
Como nuestra pila está vacía, irá al fondo de la misma:
Ahora bien, si agregamos otro elemento a la pila, digamos un libro Azul, éste tambien irá por encima de todo:
Ahora, como son elementos apilados, no podemos sacar el de más abajo sin antes extraer el de arriba. Es decir, para sacar el amarillo, antes debemos sacar el Azul:
Podemos considerar a una pila vacía así:
Parece una estantería donde luego apilaremos Libros. La estantería sería nuestra memoria y los libros nuestros punteros.
Ésta estructura tiene una forma muy peculiar de tratamiento de informacion, lo que la hace especial, y se conoce como: LIFO
Last
In
First
Out
Es decir, "El último en entrar, es el primero en salir".
Una vez más, ilustremos:
Supongamos que queremos hacer una pila de libros de distintos colores, meteremos primero el libro de color amarillo.
Como nuestra pila está vacía, irá al fondo de la misma:
Ahora bien, si agregamos otro elemento a la pila, digamos un libro Azul, éste tambien irá por encima de todo:
Ahora, como son elementos apilados, no podemos sacar el de más abajo sin antes extraer el de arriba. Es decir, para sacar el amarillo, antes debemos sacar el Azul:
LR (link register) o r14 es el registro que almacena el offset de la siguiente rutina (comando) del último bl (branch with link) que se haya ejecutado. Paso a paso, un bl es un tipo de comando que hace saltar a un offset de la RAM automáticamente (con retorno). Pues precisamente para eso sirve el lr, para recordar “donde habíamos dejado la anterior rutina” dicho de una forma poco profesional.
PC (program counter) o r15 es un registro que almacena el offset de la siguiente rutina a ejecutar (es decir, el offset actual +2). En caso de haber un bl el valor de pc se guardará en el lr antes mencionado.
Si no habéis entendido el sp, lr y pc no os agobiéis. No hace falta entender como funcionan a la perfección pues no afecta demasiado a las rutinas que vayamos a hacer.
Compilar una rutina
Para todo aquel que tenga un Sistema Operativo de Windows es muy sencillo. Lo explicaré paso a paso.
1) Escribir la rutina en un editor de texto como Notepad (el más recomendado al venir ya instalado de fábrica).
2) Guardar el archivo en formato .asm en la misma carpeta que el compilador. Os pondré una demostración gráfica para entenderlo bien.
3) Arrastrar el archivo .asm al archivo llamado “thumb”. Si la rutina está
bien hecha y no tiene ningún fallo de sintaxis se os debería aparecer un archivo con el mismo nombre pero .bin.
4) Insertarla (el archivo .bin) en un espacio vacío de la ROM que termiene en 0, 4, 8 o C. Para llamar a la rutina desde un script simplemente hay que usar el comando callasm 0x(offset de la rutina .asm
----------------------------------------------------------------------------------
Esto es todo por hay, como ya había dicho esta semana no hay tarea, pero a la próxima si que abra. Recordad, a la mínima duda preguntad por aquí
@Gosuto @Jaizu @White, el portero @KaiZ @Navy_ @Laquin @L!no the Maelstrom @speedgio @Hacko @Derlo @skhorus @Hilf Mir @BagBoy @Chema @Ancer @Edsteam8000 @Monika @Caco5400 @MasterNet @InmortalKaktus @Sharck @CompuMax @LilBuho19 @axel jose guerra @MichaKing @mikdark @5taDisminuida @★Urufu★ @~Jon. @Raul Company
@Venussaur best starter @Mod @esteban garcia @lucian @Edd el Penas @ElToby @Kurama
@Venussaur best starter @Mod @esteban garcia @lucian @Edd el Penas @ElToby @Kurama