tuts_gba
Thread Id: 30282
Thread Name: GBA | Otros | ASM - Clase Numero 1 - Comprendiendo lo Basico (HEX)
#0
Cheve_X 15014
Clase número 1 - Hexadecimal


(Para referencias sobre algunos terminos utilizados en éste tutorial/guia/teoría de aprendizaje, referirse al Link con la clase anterior: Clase numero 0)


Usuario:¿Pero de qué vas? ¿Hexa o ASM? ¡Decídete!
Cheve: Shhhh! :awesome:

Bueno, la clase uno hablaremos de hexadecimal. En la clase número 0 ya hablamos del sistema hexadecimal de números y de qué se trata.

Pero ahora os vengo a enseñar y demostrar un par de cosas que nos servirán para más adelante. (Aclaración: Para muchos que ya saben varias cosas de Hexa de la Rom, quizás esto les parezca "inútil" pero la idea es que hasta los más nuevos entiendan de qué va ASM).

Índice: ¿Que temas abrodaremos?

1. Read/Write

2. Funcionamiento básico de memoria y sus tipos.

3. ¿Qué es un puntero?

4. Ejemplo práctico

5. Relacion con ASM


Read / Write (Leer / Escribir)

Leer o escribir memoria:
En realidad no son conceptos tan dificiles, es más, ni siquiera los iba a poner a parte, pero como los conozco, pues nada xD
Ésto es la capacidad que tiene el procesador de Obtener datos (Leer) y de modificar datos guardados (Escribir) no tiene más vuelta... :)

Funcionamiento básico de memoria y sus tipos

¿Qué es la memoria? Es la capacidad de la mente para recordar ciertas cosas. (No te lo esperabas ¿Eh?)
Cuando tu vas a la escuela, cuando te aprendes un chiste, cada vez que lees un libro, (diría cuando estudiáis, pero no se muy bien de qué va eso xD), estás guardando en tu memoria datos, que luego usarás para algo.

En informática, solemos referirnos a las memorias con el mismo significado: "Lugar físico donde se almacenan los datos del Software".

Es importante que sepáis diferenciar dos tipos de memoria: ROM y RAM


ROM: Read Only Memory
(Memoria de Solo Lectura)

Lo que dice Wikipedia:
Es un medio de almacenamiento utilizado en ordenadores y dispositivos electrónicos, que permite sólo la lectura de la información y no su escritura, independientemente de la presencia o no de una fuente de energía.

Lo que os digo yo: ¡Wikipedia me la fuma!
La definición dada de ROM es correcta, pero, nosotros como buenos "ROM Hackers" que somos, sabemos que es tan editable como un block de notas ¿Verdad?

Pues a ver, os daré una definición nueva, totalmente radical, para que entiendan mejor porque se llama Rom, y la editamos como queremos.

La ROM, es una memoria que el procesador solo puede leer, ya sea para tomar datos, transformarlos, operar con ellos y obtener la información que necesitamos, o para sacar la Línea de Instrucciones que deberá seguir.
También se dice que es una memoria "No Volátil", ya que no importa cuantas veces abramos o cerremos el Rom/Ejecutemos el Juego (Emulador / Consola) sus datos no se borraran ni cambiarán.


RAM: Random Acces Memory
(Memoria de acceso Aleatorio)

Ésta es más sencilla de explicar: De entender se encargan ustedes... xD

Ésta memoria de acceso aleatorio, se llama así no porque sea "Tirar un dado para ver si justo caigo donde quiero. Sino que su nombre deriva de que se puede acceder a cualquier parte de ella en cualquier momento; ya sea para escribir o leer.

En GBA, tenemos varias "RAM", las cuales veremos más a fondo más adelante, pero ya las nombramos la clase anterior: WRAM (Working Ram), VRAM (Video RAM), PRAM (Palette RAM), SRAM (Static RAM).


Ahora, siguiendo con las Memorias en general, dijimos que guardan datos; la ROM de Gba puede hasta 32Mega Bytes de datos; aunque algunos de ellos son "intocables", la mayoría se pueden editar.


Punteros/Offsets
Cada dato de la memoria, tiene una dirección asociada, conocida como Offset o Puntero
Explicado en un gráfico:



A la izquierda tenemos las direcciones (Offsets, punteros) de nuestra memoria y a la derecha los datos de cada dirección. (Éstas direcciones son manejadas internamente por el procesador, pero éste tema ya no nos interesa).
Por ejemplo aquí, en el Offset 0200 encontramos el byte A1

Es importante remarcar que cada Offset apunta a un único Byte.
En nuestro ROM, constantemente editamos Bytes en Offsets, ya que toda la data se guarda allí. Si nos equivocamos en un solo valor, ya la cagamos xD
En el ejemplo práctico, nuestro Rom tenia solo 8KBytes de memoria (ya que podía llegar hasta FFFF como mucho).
Pero la realidad es otra, un Rom de pokémon llega hasta los 0xFFFFFF de memoria ROM, e incluso, con una "F" más: 0xF FF FF FF (Éstos son los Roms extendidos).

Offsets Permutados: Ésto es corto, pero se los subrayo porque es IMPORTANTE. El procesador siempre utilizará los Offsets y punteros "Permutados" (O transpuestos), esto es así:

El offset será: 0x0812AB34
Para permutarlo se hace lo siguiente:
-Se los separa de dos en dos: 0x 08 12 AB 34
-Se pone el ultimo par primero, el tercero segundo y asi: 34 AB 12 08

*Recordar que siempre que hagamos referencia a la ROM, se empieza con un 08, como dimos a lo ultimo de la Clase 0

Ejemplo práctico

Herramientas necesarias:

Editor Hexadecimal Yo usaré HxD

Rom de Fire Red (USA)

Ésto será como una receta de cocina :rolleyes:

Abrid vuestro Rom en HxD: (File > Open)





Aquí se puede ver como están los datos del ROM y los Offsets que los direccionan.
Pero bueno, la idea es ver de qué nos sirve ¿verdad?

1- Id a al offset 0x54A00 presionando Ctrl + G o llendo a "Search > Goto"
Dejad presionado "Hex" y "Begin" y escribir la direccion en la casilla sin el 0x, llegaran a una linea asi:



2-Cambiad ese 0x06 por un 0x04 (Les aparecerá en rojo, es decir, cambio sin guardar)

Ahora repetir ambos pasos pero con los siguientes offsets y datos:
0x54A04 - 0x06
0x54A06 - 0x05
0x54A08 - 0x07

Probad vuestro rom... :cool:

¿Pero qué hicimos?

¡Les queda de tarea! En unos dias editaré para quien desee saber la respuesta...

Nota: Tiene algo que ver con lo que estuvimos escribiendo hoy :awesome:

_______

Referencia a los otros temas:

Clase 0 - Comprendiendo lo muy muy básico

Clase 1 - Comprendiendo lo Básico
#1
Horus Pen. 24335
Muy bueno Lucas. Ya sabía muchas de estas cosas, pero con el tiempo uno se va olvidando.
Siempre me gustaron tus tutoriales, son simples y dinámicos.

Espero ver la parte 2 ;)

Saludos.
#2
Silver.Exe 28626
Yo kiero ssver, yo iero sver!

Okno.

Muy buena guía para los principiantes (como yo) que recién entran en el romhack (como yo), aunque yo personalmente uso rpg maker.

Buena suerte y que no se caiga!
#3
Megascep_9 Kuchiki 28187
¿Pero qué hicimos?

¡Les queda de tarea! En unos dias editaré para quien desee saber la respuesta...

Nota: Tiene algo que ver con lo que estuvimos escribiendo hoy


ARG, dinos ya!!!!!, soy muy vago para hacer por mi mismo -.-

Muy buena guía por más que me expliquen esto...no termino de entender como funciona, mejor sigo estudiando medicina espero que no pares de hacer los demás tutos.
#4
Tito Dafting301_4315♪ Kuchiki 24341
Pues yo no noté nada raro ._. ¿Será que lo apliqué en mi hack y no en una ROM limpia?
#5
Neodanix 28902
Mmm acabo de hacer los cambios del offset de tarea en una rom limpia y... ¿El cambio es que empiezas en otra ciudad? Osea que ¿con esos punteros manejas el Warp principal?