Registrarse

[ASM] Clase 0 : Comprendiendo lo muy básico

Cheve

MoonLover~
Miembro de honor
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! :D


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. o_O ¿:.

¡Cheve! ¡Deja de jugar con mi cabeza! A poco y suenan divertidas :3

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: Hey Cheve, que te faltó la Half Word! Cheve: Shhhhhhh!

"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... si haz leido hasta aquí es porque estás muy aburrido o realmente quieres aprender algo

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 :rolleyes: )

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:

H.B.P

Emperador Kaktiácero
Miembro de honor
Respuesta: ASM - Clase Numero 0 - Comprendiendo lo muy muy Basico

Ya estoy inscrito en la escuela de NaDrax, pero no mencionó respecto a la aplicación del ASM en la plataforma GBA, así que espero poder aprender mucho con tu tutorial en secciones cuando disponga de tiempo (y ganas, qué demonios...). Espero que puedas actualizar tu manual, eso sí, tómate tu tiempo, y gracias.

PD: ¿Sabes? En mis tiempos tuve un afán por enseñar aquello que recién aprendí... pero en mi caso fue a compilar scripts.
 

Kaktus

Miembro insignia
Miembro insignia
Respuesta: ASM - Clase Numero 0 - Comprendiendo lo muy muy Basico

¡Me viene la verdad muy bien! Justo lo que buscaba, ya deseo ver la parte del "ASM" completa :3
 
Arriba