qna_rh
Thread Id: 25206
Thread Name: [Duda]¿Como insertar rutina ASM?[Solucionado]
#0
Megascep_9 Kuchiki 28187
Bueno pues tengo un problema y es que e estado insertando una rutina para poder cambiar el estado de los pokemon, el problema es que no se si la rutina es para ruby o para fire red, yo uso fire red...Miren aqui esta la rutina es de [MENTION=25004]Andrea[/MENTION] un gran genio por cierto:

.thumb
.align 2

push {r0-r3,lr}
ldr r2, .8002 /*variabile 8002*/
ldrh r2,[r2]
cmp r2, #0x0 /*control var 8002 if it's 0*/
beq parte2
b loop

parte2:
ldr r0, .8000 /*variabile 8000*/
ldrh r0,[r0]
ldr r1,.100 /*interval byte between pokemon team*/
mul r1,r0
ldr r0, .pokemon_data /*offset state*/
add r0, r0, r1
ldr r1, .8001 /*save state*/
strb r1,[r0]
b fine

loop:
ldr r2, .8002 /*variabile 8002*/
ldrh r2,[r2]
ldr r3,.100 /*interval byte between pokemon team*/
mul r3,r2
ldr r0, .pokemon_data /*offset state*/
add r0, r0, r3
ldr r1, .8001 /*save state*/
strb r1,[r0]
sub r2, r2, #0x80 /*tolgo 80*/
sub r2, r2, #0x80 /*tolgo 80*/
cmp r2, #0x0 /*controllo che la var 8002 non sia 0*/
beq fine
b loop

fine:
pop {r0-r3,pc}

.align 2
.pokemon_data:
.word 0x030043B0
.8000:
.word 0x0202e8c4
.8001:
.word 0x0202e8c6
.8002:
.word 0x0202e8c8
.100:
.word 0x00000100


Pues esa es mi duda ¿como la inserto y la pongo en en funcion...?
Porfa el que pueda que me diga porque esto me esta atrasando mucho.
#1
Cheve_X 15014
Copia lo que haz puesto en el Code, es decir, la rutina, y la pegas en un bloc de notas, a ese block de notas le pones el nombre que quieras, pero como extensión le pones .asm

Ahora, descarga este .rar

Thumb.rar

Extrae los archivos en una carpeta cualquiera, ahora arrastra con el puntero tu "rutina.asm" sobre el thumb.bat (Sería como abrir como) si la rutina está bien copiada/escrita, en la carpeta del thumb deberia aparecerte un archivo "rutina.bin" a ese archivo lo abres con tu editor hexadecimal preferido y copias todos los bytes que tiene.

Ahora abres tu Rom, y en un espacio vacio, lleno de FF's, y cuya dirrecion termine en 0, 4 , 8, o C (Por ejemplo, 980000 )pegas escribiendo lo que copiaste del "rutina.bin" luego en un scripts haces callasm a esa dirección + 1 (Si es en 980000 haces callasm 0x980001 )

Espero que se entienda
#2
Tito Sayer301 26309
No controlo casi nada por no decir nada de ASM, pero yo inserte una rutina hace no demasiado y aunque no se ejecutara igual te lo voy a intentar explicar a mi manera un poco, al menos para que te puedas hacer una idea hasta que venga un sabio y te lo explique como dios manda XD.

Bueno, lo primero es buscar un compilador de rutinas ASM, yo tenía uno pero no lo encuentro y como no me acuerdo como se llama, no me facilita la busqueda, pero seguro que google o algun samaritano te ayuda. El caso, compilas tu rutina en hexadecimal, la copias y abres tu ROM con algun editor hexadecimal, en mi caso usé HxD, lo puedes encontrar en la web.

Bien ya tenemos la rutina en Hex y la Rom abierta con un editor, pues nos vamos a una dirección libre, y al igual que con los scripts, buscala a partir del offset 800000.

Una vez hayas visto un hueco bueno como para insertar la rutina, la copias y la pegas.
ATENCIÓN: HAZLO EN MODO ESCRIBIR, ES MUY IMPORTANTE.

Bueno, ya tienes la rutina insertada (o al menos así debería ser).

Como la ejecutamos?
En un script cuando quieras que se ejecute esta rutina deberás hacer un:
callasm 0x(direccion de la rutina)

En principio yo creo que sería así, yo personalmente probaría en una copia de mi ROM si así funciona, que sí? Pues genial, asunto zanjado, ¿Que no? Seguro que algún erudito o el propio Andrea te ayudarán.

Un saludo!!

EDITO: Oh mierda, [MENTION=15014]Cheve_X[/MENTION] se me adelantó jajajja
#3
Megascep_9 Kuchiki 28187
Primero gracias por responder...
Cheve_x me diste lo que necesita y era el THUMB, pero
lo prove se me creo el archivo bin lo inserte en la rom pero cuando lo ejecuto y lo pongo en el script y no pasa nada, creo que el problema esta en esta dirección
.pokemon_data:
.word 0x030043B0

Andrea lo hizo para ruby y creo que esa direccion es para pokemon ruby, intentare encontrar esa direccion en algun lado, de todos modos gracias.
#4
Cheve_X 15014
Pues sí, esa rutina es para Pokémon Ruby... Creo que tengo que tener por aquí una que hace lo mismo en Fire Red hecha por JPAN, si la ecnuentro edito... Sino ya se que offset buscar ahora cuando pueda :3
#5
Andrea 25004
http://wahackforo.com/t-23551/insert-asm-routine i post this more time ago ;)
#6
Andrea 25004
offset for fire red:
pokemon_data:
.word 0x02024284

.8000:
.word 0x020370D0

.8001:
.word 0x020370D2

.8002:
.word 0x020370D4

change and compile it ;)
#7
Megascep_9 Kuchiki 28187
Iniciado por Andrea
offset for fire red:




change and compile it ;)

¡Oh dios, gracias andrea eres el mejor!
Ahora lo iré a probar, un millon de gracias y ya pueden cerrar el tema.:D
#8
Tito Sayer301 26309
Joder con Andrea, como se porta que jefe!

Pues dicho y hecho, cierro tema!