Registrarse

(Duda) Como puedo editar esta Rutina ASM

Estado
Cerrado para nuevas respuestas.

Juan Kio

Aprendiendo decomp...
Hola tengo una duda y es sobre una rutina ASM bueno el caso es que debo de editarla pero no se como


Código:
.align 2
.thumb

/*Well, this is the source code for the battle bg hack. Pretty simple stuff.
When the battle bg is loaded, the game stores the background number to be loaded in r0.
This hack branches the routine right after that to check the var and if there is something in it,
load that as the new background.

The branches to this routine (BPRE only) need to be done as follows:

0x0800F26C= change "ldr r5, #0x0824EE34" to "ldr r5, #0x08F00001" (or the location you choose to put this routine at.)
0x0800F26E= change "lsl r4,r0,#0x2" to "bx r5"
0x0800F270= change "add r4,r4,r0" to "pop {r5}"

0x0800F2B8= change "ldr r5, #0x0824EE34" to "ldr r5, 0x08F00041" (The location Main2 begins at, +1. It was 0x08F00031 in the patch)
0x0800F2BA= change "lsl r4,r0,#0x2" to "bx r5"
0x0800F2BC= change "add r4,r4,r0" to "pop {r5}"

Now, at 0x0800F320, 0x0800FD5C, and 0x0800FD88 change the pointer (which points to the original bg table [0x0824EE34])
to the new BG table location which is 0x08F10000 in here and the patch.

This source is based off what is in the patch. It is ment to modified so that hackers who have already used 0xF00000+ in their
hacks can have flexibility in the location of the routine.

I haven't tested this routine as it is, but it should work... "Should" being the key word...
The reason being, I was given the routine without the var_loader already in a German Rom and I branched it later
to include the var_loader, so this source code is the all in one.*/



.org 0xF00000
Main: ldr r5, new_bg_table
push {r5}
push {r1}
bl varloader

post_var_loader: cmp r1,#0x0
beq return
mov r0,r1

return: pop {r1}
ldr r5, return_offset
lsl r4,r0,#0x2
add r4,r4,r0
bx r5

varloader: push {r0, r2}
ldr r0, var_id
bl call_decrypt
ldrh r0, [r0]
mov r1, r0
pop {r0,r2}
bl post_var_loader

call_decrypt: ldr r2, vardecrypt
bx r2


.align 2



var_id: .word 0x000040F7
vardecrypt: .word 0x0806E455
new_bg_table: .word 0x08F10000
return_offset: .word 0x0800F271



.align 2

Main2: ldr r5, new_bg_table2
push {r5}
push {r1}
bl varloader2

post_var_loader2: cmp r1,#0x0
beq return2
mov r0,r1

return2: pop {r1}
ldr r5, return_offset2
lsl r4,r0,#0x2
add r4,r4,r0
bx r5

varloader2: push {r0, r2}
ldr r0, var_id2
bl call_decrypt2
ldrh r0, [r0]
mov r1, r0
pop {r0,r2}
bl post_var_loader2

call_decrypt2: ldr r2, vardecrypt2
bx r2

.align 2


var_id2: .word 0x000040F7
vardecrypt2: .word 0x0806E455
new_bg_table2: .word 0x08F10000
return_offset2: .word 0x0800F2BC

Como ven la rutina dice que debo de editarla pero no se como tengo ocupada la offset F10000 y no puedo insertar el parche
bueno eso es todo gracias al que puede aclararme
 

L!no

GBA Developer
Si nos explicadas exactamente que ave y donde la conseguiste podría ayudarte

[Css-div="background: #FBE3E4; border-color: #FEA0A4; padding: 6px 10px; border-radius: 5px"]Este mensaje ha sido sancionado por la siguiente razon: Porque si YOLO[/CSS]
 
Última edición:

Adke

weeeh
Simplemente haz los cambios que te dicen utilizando una dirección diferente si tienes F00000 ocupado.
 

CompuMax

Discord: CompuMax#0425
Miembro insignia
Yo intenté editar esa rutina y no logré hacerlo con éxito, pues como claramente dicen las notas (aunque en inglés) hay que hacer unos cambios en HEX de comandos ASM que obviamente desconozco sus equivalentes en HEX. Pero si estás utilizando el offset 0xF10000 para otra rutina como la de Paletas Dinámicas de Overworld puedes descargar el código fuente y ensamblarla en otro offset. Yo lo hice para el offset 0xA00000 así que si ese es tu caso y te sirve; avísame y te la paso.

:D
 

Juan Kio

Aprendiendo decomp...
Yo intenté editar esa rutina y no logré hacerlo con éxito, pues como claramente dicen las notas (aunque en inglés) hay que hacer unos cambios en HEX de comandos ASM que obviamente desconozco sus equivalentes en HEX. Pero si estás utilizando el offset 0xF10000 para otra rutina como la de Paletas Dinámicas de Overworld puedes descargar el código fuente y ensamblarla en otro offset. Yo lo hice para el offset 0xA00000 así que si ese es tu caso y te sirve; avísame y te la paso.
gracias compu pero ese no es mi problema ,tengo ocupado con otras cosas,entonces debe ser la rutina tendré que comenzar en otra base :)
 

Kaiser de Emperana

Called in hand
Yo intenté editar esa rutina y no logré hacerlo con éxito, pues como claramente dicen las notas (aunque en inglés) hay que hacer unos cambios en HEX de comandos ASM que obviamente desconozco sus equivalentes en HEX. Pero si estás utilizando el offset 0xF10000 para otra rutina como la de Paletas Dinámicas de Overworld puedes descargar el código fuente y ensamblarla en otro offset. Yo lo hice para el offset 0xA00000 así que si ese es tu caso y te sirve; avísame y te la paso.

:D
El ASM se ensambla literal, "mov r0, 0", se va a escribir igual siempre, este donde este.
Con hacer un documento de texto que diga:
Código:
.thumb
.align2
Main:
push {r5}
Y compilarlo, te va a dar una rutina de 2 bytes que son los que te hacen falta.

----

No entiendo que es lo que jo entendes juan xD. Busca los dos lugares que dicen f10000 y cambialos por el offset que quieras. ¿Es esa tu duda? xD
 

Juan Kio

Aprendiendo decomp...
No entiendo que es lo que jo entendes juan xD. Busca los dos lugares que dicen f10000 y cambialos por el offset que quieras. ¿Es esa tu duda? xD
esta es mi duda que debo hacer allí?


Código:
0x0800F26C= change "ldr r5, #0x0824EE34" to "ldr r5, #0x08F00001" (or the location you choose to put this routine at.)
0x0800F26E= change "lsl r4,r0,#0x2" to "bx r5"
0x0800F270= change "add r4,r4,r0" to "pop {r5}"

0x0800F2B8= change "ldr r5, #0x0824EE34" to "ldr r5, 0x08F00041" (The location Main2 begins at, +1. It was 0x08F00031 in the patch)
0x0800F2BA= change "lsl r4,r0,#0x2" to "bx r5"
0x0800F2BC= change "add r4,r4,r0" to "pop {r5}"
 
Última edición:

Kaiser de Emperana

Called in hand
Esas son modificaciones que tenes que hacer en tu rom. Tenes que ir a las direcciones que te dice y cambiar los bytes de las instrucciones originales (las primeras), por los bytes de las intrucciones que te diga (las segundas xD). Lee lo que le respondi a Compumax en mi mensaje anterior.
 

Juan Kio

Aprendiendo decomp...
Esas son modificaciones que tenes que hacer en tu rom. Tenes que ir a las direcciones que te dice y cambiar los bytes de las instrucciones originales (las primeras), por los bytes de las intrucciones que te diga (las segundas xD). Lee lo que le respondi a Compumax en mi mensaje anterior.
muchas gracias a todos
pueden cerrar el tema :)
 
Estado
Cerrado para nuevas respuestas.
Arriba