Romhacking básico – Cómo buscar un carácter en NES

 

 

 

En esta ocasión AdrianBlz, un usuario de nuestro Discord, nos planteó un problema que tenía con su traducción: no podía cambiar las letras iniciales del menú de su juego.

 

 

Lo que hicimos en primer lugar fue seguir sus pasos. Creamos una tabla thingy y buscamos «peak» en la rom.

Para buscarlo hay que ejecutar la rom con el emulador, Mesen en nuestro caso, y abrir el visualizador de memoria, la opción Memory Tools (Control+M). Una vez allí, solo hay que añadir la tabla y buscar el hexadecimal del texto en cuestión. En este caso «4A3F3B45» equivale a «peak»

Como se puede apreciar en la imagen, faltan las letras iniciales de «Speak», «Search», «Doraemon», «Items» y «Equip».

 

Una vez aquí pasamos a investigar lo que nos pidió AdrianBlz. Empezamos por averiguar la dirección de una de las letras impresas. En nuestro caso vamos a por la «h» de «Search». Nada más sencillo, nos ponemos encima y lo anotamos.

 

Abrimos el depurador clicando en la pestaña «Debug» y yendo a la opción «Depurar» o pulsando Control+D y nos situamos en «Breakpoints».

 

 

Allí haremos clic derecho y le daremos a «Add».

 

 

Después señalaremos dónde es el breakpoint, en este caso en la rom, e indicaremos que lo haga cuando lea la dirección. Luego la especificaremos y aceptaremos.

 

 

 

Sin minimizar la ventana, abriremos el trazador con «Control+J» o yendo a la pestaña «Debug» y clicando en «Trace Logger». No tiene ningún misterio. Le damos a «Start» y escribimos el nombre del archivo.

 

Ahora volveremos a la ventana del juego, quitaremos la pausa con la tecla de escape y abriremos el menú del juego lo más rápido posible. Si lo hemos hecho bien, saltará el breakpoint, el juego se pausará de nuevo y la ventana del depurador se pondrá en primer plano.

El cambio que veremos es que el depurador ahora nos indica el hexadecimal al que apunta la dirección de la rom desde la cual carga la letra «h».

Volvemos al trazador, lo pararemos y luego abriremos el archivo dándole al botón o buscándolo en el ordenador. Tardará un poco de abrir, pero cuando lo haga, bajaremos hasta el final del archivo. La última línea escrita es la que ha hecho que el breakpoint salte, eso quiere decir que en ese instante el emulador ha leído la letra «h». Lo podemos comprobar viendo que sale la misma dirección que se ha añadido en el depurador.

Ahora toca aplicar la lógica. Si nos fijamos en el acumulador «A», veremos que tiene cargado el valor «3D». Si subimos, vemos como el acumulador tenía antes los valores «4C», «3B», «3F»… ¿Os suenan de algo estos valores? Si volvemos un segundo al visualizador de memoria, lo entenderemos enseguida.

El color azul nos indica que hace poco el juego ha accedido a esa parte de la memoria y si nos fijamos en los valores señalados, veremos una sucesión de números que nos es conocida. «3F», «3B», «4C», «3D»… Exacto, las letras que imprime el menú van pasando por el acumulador «A».

Sin embargo, si volvemos al log y subimos más, no veremos el valor de la letra que buscamos, la «S». Toca fijarnos en otra cosa. Primero, lo señalado en rojo, el LDA. Si miráis con atención, pasado ese punto, el actualizador carga el valor de la nueva letra y eso es porque LDA es un código de operación que indica que se cargue un valor en el acumulador. Así vemos en la imagen como el valor que hay en la dirección $8CE0, («3B», es decir, la letra a) se carga en el acumulador A. Si la letra se puede cargar en el acumulador, tiene que haber alguna manera de que dicho carácter pase a otro sitio y para eso está el código STA señalado en marrón. Este hace que el valor del acumulador A se copie en la memoria ram del juego.

 

Volvamos a usar la lógica. Cómo podréis comprobar, el valor de las letras se va guardando en la ram de manera sucesiva para poder escribir la palabra «Search».

Echad un vistazo a STA y veréis que las letras «E», «A» y «R» se graban en $0217, $0218 y $0219.  ¿Qué quiere decir eso? Que la letra que buscamos, la «S», estará guardada en $0216. Hacemos una sencilla búsqueda de ese valor en el log y pronto lo encontraremos. «STA $0216  A: 33».
¡El acumulador «A» tiene el valor de la «S»!

Ya queda poco, ahora solo nos falta saber de dónde ha sacado dicho valor.

 

Sigamos leyendo: si no nos fijamos bien, aquí podríamos caer en un descuido de última hora. Lo lógico es pensar que el LDA anterior te indicará la dirección desde donde saca el valor, y así es… Sin embargo, vuelve a sacarlo de la ram. Subamos un poco más. En marrón vemos como se guarda el valor de la S. Y si subimos un poquito más, por fin vemos la dirección de la rom desde la que saca el valor: $801F.

 

Ya solo nos queda aplicar una regla de tres: si la letra «h» de «Search» se encuentra en la dirección $8CE3, es decir, $2CCE3, La «S», situada en $801F tiene que encontrarse en $2C01F, puesto que la ubicación «2C» es igual a «8». Abrimos el visualizador para comprobarlo y… ahí lo tenemos. Hexadecimal marcado en azul indicándonos que se ha accedido a esa parte de la rom.

Como podremos comprobar, gracias a la tabla, allí están esperándonos la «d» de «Command», la «S» de «Speak», la «S» de «Search», la «D» de «Doraemon», la «I» de «Items» y la «E» de «Equip».

Ya solo es cuestión de cambiarlo al valor que queramos con un editor y sanseacabó.

Bueno, pues eso es todo por hoy.  Antes de terminar quiero dar gracias a Saispai por la ayuda.

¡Nos vemos!

 

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Proyectos relacionados

No hay proyectos en esta noticia.

Proyectos relacionados

¡Buenas de nuevo!

Inicia sesión en tu cuenta

¡Crear una cuenta nueva!

Rellena los siguientes apartados para registrarte

Recuperar tu contraseña

Introduce tu nombre de ususario o dirección de email para reiniciar tu contraseña.