ASM - Clase Numero 0 - Comprendiendo lo muy muy Basico
Aquí no se verán comandos, rutinas, ni nada demasiado técnico sobre ASM, es solo a modo de introducción, y para tener nociones básicas de los recursos con los cuales se trabaja en éste lenguaje
ASM... ¿Quien no ah querido saber aunque sea un poco de ASM? ¿Tú no? ¡Entonces es porque no sabes qué es ASM!
ASM: Assembly, lenguaje (Conocido como Assembly Languaje), es el código básico, (Entendible "sencillamente" por el hombre) por el cual se maneja, en nuestro caso, el procesador de la GBA (Existen otras cosas que usan el lenguaje ensamblador ).
El ASM, principalmente hace que trabajemos más cómodos que estar escribiendo en código binario.
Antes que sigamos, es necesario que sepas qué es un sistema binario, qué es Hexadecimal, y algunas nociones básicas que no explicaré muy a fondo pero que de igual manera no dejaré de explicar lo básico.
Sistema Binario : Es un sistema de numeración basado en 2 (bi) números (narios), o dos caracteres, que son 0 y 1.
Sistema Hexadecimal: Es un sistema de numeración basado en 15 caracteres, 0 a 9 y A a F
Muy bien, ahora, como deberán saber, cualquier procesador, cualquier PC, consola, microchip, etc, funciona con códigos binarios, con 1 y 0, que, practicamente son un pulso eléctrico para un 1 y nada para 0.
Bien, ¿Que tiene que ver ésto con ASM? ¡Mucho! ¡El sistema de ASM está construido directamente sobre binario!
Ahora, otra noción básica que deben saber:
Bit, Byte, HalfWord, Word. ¿:.
Bit: 1 o 0 de un numero binario...
Ejemplo de Bit:
El número 11100110 (230 en decimal) contiene 8 bits
Uso:
Si se está trabajando a la "altura" (minima, por cierto) de los bits, debemos ser muy cuidadosos, apenas un 1 que se nos confuna con un 0 y podemos cambiar cosas como el modo de video que se ejecuta en nuestra GBA, que arruinaría todo lo que vemos en pantalla.
Byte: Suenan iguales, se escriben de forma similar, pero es muy distinto. Un byte, equivale a 8 bits. De ésta unidad derivan los KiloBytes, MegaBytes, Gigabytes, etc. (Recuerden ver en su contrato de internet si son Megabytes o Megabits, que es 8 veces menos )
Ejemplo de byte:
El número 11100110 (230 en decimal) es 1 byte
El número 00000000 (0 en decimal) tambien puede ser un byte
Pero los que estamos en ésto del Rom Hacking, siempre trabajamos con bytes, y no nos damos cuenta... La forma mas común y sencilla de encontrar un byte es de las siguientes:
0xAF - 0x3A - 0x35 - 0x4F - 0xFF - 0x00 - 0x01 - 0x2E
*Nota: De aquí en adelante todo valor con un "0x" delante implicará que es Hexadecimal
Es decir: Cualquier valor Hexadecimal de 2 caracteres cualesquiera, es igual a 1 Byte (ésto deriva a que FF = 255 = 11111111 )
Uso: Es el número básico usado en ASM (Solo en casos muy especiales vamos a andar sumando de a bits en una rutina) y siempre se trata con ellos en edición hexadecimal, además, es una unidad muy usada en informática.
Word:
"Word", traducido: Palabra. Una word es = a 4 bytes, por lo tanto a 32 bits.
Si sabes de Scripting, te diré que es igual a un Offset, con dos carácteres más, es decir:
0x XX XX XX XX
Ejemplo de Word:
0x 04 00 00 00
Uso:
Las words principalmente se usan para apuntar a offsets en determinadas partes del juego...
¿Pero... mi rom solo tiene hasta 0x9FFFFF y si la expando llega a 0xFFFFFF, como es eso de un byte más?
Es sencillo, tu Rom, lo que editas hexadecimalmente, (Con o sin herramientas) es la data del juego, que va hasta esos valores dichos anteriormente.
Bueno, esa información, para ser leída, la consola o el emulador la desgolsan y la organizan en distintos lugares de la RAM, Random Access Memory, y para organizarlas mejor lo ponen de la siguiente manera:
Extraído de GBATEK . Memory Map y escrito de forma mas simple para mayor entendimiento
Memoria Interna General
00000000-00003FFF BIOS - System ROM (16 KBytes)
02000000- 03007FFF WRAM - On-board Work RAM (256 KBytes) 2 Wait
04000000-040003FE I/O Registers
Memoria Interna del Display
05000000-050003FF BG/OBJ Palette RAM (1 Kbyte)
06000000-06017FFF VRAM - Video RAM (96 KBytes)
07000000-070003FF OAM - OBJ Attributes (1 Kbyte)
Memoria Externa -"Game Pak"
08000000-09FFFFFF Game Pak ROM/FlashROM (max 32MB) - Wait State 0
Bueno, si buscan el original verán que lo simplifiqué bastante.
Como ven, lo que quería mostrarles, es que hay muchas secciones en la Ram, pero principalmente se diferencian por su primer byte:
0x 00 xx xx xx BIOS
0x 02 xx xx xx WRAM
0x 04 xx xx xx I/O
0x 05 xx xx xx Paletas
0x 06 xx xx xx VRAM (Ram del Video)
0x 07 xx xx xx OAM (Atributos de los OBJ... los OBJ no son necesariamente los "Minis" de nuestro juego, pero en general, para Pokémon lo son)
0x 08 xx xx xx ROM
Uff! Muchas direcciones no? Pero todo ésto es para que entiendan como las Word son de utilidad.
ahora, lo que nos faltaba, y que no expliqué antes:
¡Half Word!
Traducción: Media Word. :awesome: Consta de dos Bytes (en ves de 4)
Ejemplo: 0x9F45 0xFFFF 0x7F51 0x0010 0x3258
Uso: El mismo que los Bytes, generalmente para realizar operaciones arigmeticologicas, pero de a más números.
Bueno, éstos son los conceptos básicos que deben tener para que empieze a hablar de ASM...
ASM
Intentaré seguir con lo mismo que veníamos hasta ahora.
Ya os dije más arriba qué es ASM, pero ahora vamos a ¿Para qué ASM? Se los diré sencillo: ASM es como se escribe un juego desde 0, se modifica lo que quieras dentro de un rom, y puedes hacer muchas cosas...
Con apenas 2 o 3 lineas de asm puedes hacer lo que haces con 16 de Writebytetooffset, y sin refrescar pantalla (Cambiar una paleta por ejemplo), puedes detectar si un pokémon es o no es Shiny, y muchas cosas más.
Cuanto más sabes con lo que estás tratando, más sabrás qué hacer para lograr x o y cosa...
Si sabes como hace el juego para mostrarte pixel por pixel de cada mapa, de cada tile, sabes como hacer que lea los pixeles que tu quieras, o, incluso, que los lea de forma distintas (Imágenes de hasta 5 distinas )
Ejemplos:
Abre cualquier Rom de GBA: ¡Que grandes ejemplos! ¡Se nos carga en la pantalla un logo, de GameFreak por ejemplo, desaparece, y aprecen una cadena de imágenes una tras otra, creando animaciones! ¡Whoaaah! *-*
Un ejemplo no tan "Expectacular" podría ser, por ejemplo, detectar si el pokémon de la guardería es Shiny (Perdón pero es lo único que he hecho del todo bien hasta ahora)
Y bueno, la parte de como usar ASM vendrá más adelante, cuando la domine lo suficiente como para enseñarlo
Espero que ésto les halla gustado y hallan aprendido algo del tocho de texto que leyeron
Un saludín y mucha suerte a todos! :blush:
_______
Referencia a los otros temas:
Clase 0 - Comprendiendo lo muy muy básico
Clase 1 - Comprendiendo lo Básico
Clase 2 - Registros, conociendo al procesador.
Clase Número 3: Instrucciones Básicas
Última edición: