Registrarse

Ayuda con esta rutina ASM

Estado
Cerrado para nuevas respuestas.

MegaSceptile9

Usuario mítico
Hola compañeros, aquí tengo una duda, mejor dicho, necesito ayuda con esta rutina.

La rutina es de como insertar mugshot via ASM, creo que muchos han visto esta rutina, esta rondando por pokeco.

El problema es que a la hora de crear la tabla y cambiar todos los campos de la rutina, al momento de compilarla en el Thum me da error y no aparece el archivo .bin de la rutina.

Alguien me podría decir que hago mal :(

Aquí esta la rutina sin compilar y sin cambiar los campos:

.align 2
.thumb

@/* VAR 0x4500 = SPRITE NUMBER IN TABLE */@
@/* VAR 0x4501 = LEFT OR RIGHT SIDE? */@
@/* VAR 0x4502 = SPRITE SLOT IN SCRIPT */@
@/* TABLE: [IMAGE][PALETTE][PAL#][00 00 00] */@

.equ TABLE, 0x08

.equ DEST, 0x06014000
.equ BUFFER, 0x020377F8
.equ CREATEOAM, 0x08006F8D
.equ OAMNUM, 0x0203C000
.equ VAR, 0x4500
.equ VARDEC, 0x0806E455
.equ OAMBUFFER, 0x0202063C

READING:
push {r0-r7, lr}
ldrh r0, =VAR
ldr r4, =VARDEC
bl EXECUTE
ldrb r5, [r0]
mov r2, #0xC
mul r5, r2
ldr r1, =TABLE
add r5, r5, r1
ldr r6, [r5] @/*R5=TABLE
ldrh r0, =VAR @/*IMAGE
add r0, r0, #0x2
bl EXECUTE
ldrb r0, [r0]
mov r7, r0 @/*SLOT#
mov r2, #0x80
lsl r2, r2, #0x4
mul r0, r0, r2
ldr r3, =DEST
add r3, r3, r0
mov r0, r6
mov r1, r3
swi 0x12
add r5, r5, #0x4 @/*PALETTE
ldr r0, [r5]
add r5, r5, #0x4
ldrb r1, [r5]
ldr r5, =OAMNUM @/*PAL# IN R7
add r5, r5, #0x4F
strb r1, [r5]
mov r2, #0x20
mul r1, r2
ldr r3, =BUFFER
add r1, r1, r3
lsr r2, r2, #0x2
swi 0xC

LOADOBJ:
ldrh r0, =VAR
add r0, r0, #0x1
bl EXECUTE
ldrb r5, [r0] @*/LEFTORRIGHT
mov r3, #0x88
mul r5, r5, r3
mov r6, #0x30
add r1, r5, r6
cmp r7, #0x0
bne OTHER
ldr r0, DATA
b FURTHER

OTHER:
ldr r0, DATA2

FURTHER:
mov r2, #0x53
mov r3, #0x0
ldr r4, =CREATEOAM
bl EXECUTE
ldr r1, =OAMNUM
add r1, r1, r7
strb r0, [r1]
ldr r2, =OAMBUFFER
mov r1, #0x44
mul r0, r0, r1
add r0, r0, r2
add r0, r0, #0x5
ldr r3, =OAMNUM
add r3, r3, #0x4F
ldrb r1, [r3]
lsl r1, r1, #0x4
strb r1, [r0]
pop {r0-r7}
pop {pc}

EXECUTE:
bx r4

.align 2
DATA: .word BUFFERDATA + 0x08[OFFSET_OF_THIS_CODE]
BUFFERDATA:
.hword 0x2
.hword 0x1
.word OAMDATA + 0x08[OFFSET_OF_THIS_CODE]
.word ANIMATION + 0x08[OFFSET_OF_THIS_CODE]
.word 0x0
.word 0x08231CFC
.word 0x080EE4DD
.byte 0xFF

.align 2
ANIMATION: .word OAMANIM + 0x08[OFFSET_OF_THIS_CODE]
OAMANIM:
.hword 0x201
.hword 0xA
.hword 0xFFFE
.hword 0x0

.align 2
OAMDATA:
.byte 0x0
.byte 0x0
.byte 0x0
.byte 0xC0
.hword 0x1
.hword 0x0

.align 2
DATA2: .word BUFFERDATA2 + 0x08[OFFSET_OF_THIS_CODE]
BUFFERDATA2:
.hword 0x2
.hword 0x1
.word OAMDATA2 + 0x08[OFFSET_OF_THIS_CODE]
.word ANIMATION2 + 0x08[OFFSET_OF_THIS_CODE]
.word 0x0
.word 0x08231CFC
.word 0x080EE4DD
.byte 0xFF

.align 2
ANIMATION2: .word OAMANIM2 + 0x08[OFFSET_OF_THIS_CODE]
OAMANIM2:
.hword 0x241
.hword 0xA
.hword 0xFFFE
.hword 0x0

.align 2
OAMDATA2:
.byte 0x0
.byte 0x0
.byte 0x0
.byte 0xC0
.hword 0x1
.hword 0x0


Y aquí esta la rutina con todos los campos cambiados, o sea donde dice [tabla] y donde dice [offset_of_this_code]

.align 2
.thumb

@/* VAR 0x4500 = SPRITE NUMBER IN TABLE */@
@/* VAR 0x4501 = LEFT OR RIGHT SIDE? */@
@/* VAR 0x4502 = SPRITE SLOT IN SCRIPT */@
@/* TABLE: [IMAGE][PALETTE][PAL#][00 00 00] */@

.equ TABLE, 0x08B0E88008C0EC83080E000000
.equ DEST, 0x06014000
.equ BUFFER, 0x020377F8
.equ CREATEOAM, 0x08006F8D
.equ OAMNUM, 0x0203C000
.equ VAR, 0x4500
.equ VARDEC, 0x0806E455
.equ OAMBUFFER, 0x0202063C

READING:
push {r0-r7, lr}
ldrh r0, =VAR
ldr r4, =VARDEC
bl EXECUTE
ldrb r5, [r0]
mov r2, #0xC
mul r5, r2
ldr r1, =TABLE
add r5, r5, r1
ldr r6, [r5] @/*R5=TABLE
ldrh r0, =VAR @/*IMAGE
add r0, r0, #0x2
bl EXECUTE
ldrb r0, [r0]
mov r7, r0 @/*SLOT#
mov r2, #0x80
lsl r2, r2, #0x4
mul r0, r0, r2
ldr r3, =DEST
add r3, r3, r0
mov r0, r6
mov r1, r3
swi 0x12
add r5, r5, #0x4 @/*PALETTE
ldr r0, [r5]
add r5, r5, #0x4
ldrb r1, [r5]
ldr r5, =OAMNUM @/*PAL# IN R7
add r5, r5, #0x4F
strb r1, [r5]
mov r2, #0x20
mul r1, r2
ldr r3, =BUFFER
add r1, r1, r3
lsr r2, r2, #0x2
swi 0xC

LOADOBJ:
ldrh r0, =VAR
add r0, r0, #0x1
bl EXECUTE
ldrb r5, [r0] @*/LEFTORRIGHT
mov r3, #0x88
mul r5, r5, r3
mov r6, #0x30
add r1, r5, r6
cmp r7, #0x0
bne OTHER
ldr r0, DATA
b FURTHER

OTHER:
ldr r0, DATA2

FURTHER:
mov r2, #0x53
mov r3, #0x0
ldr r4, =CREATEOAM
bl EXECUTE
ldr r1, =OAMNUM
add r1, r1, r7
strb r0, [r1]
ldr r2, =OAMBUFFER
mov r1, #0x44
mul r0, r0, r1
add r0, r0, r2
add r0, r0, #0x5
ldr r3, =OAMNUM
add r3, r3, #0x4F
ldrb r1, [r3]
lsl r1, r1, #0x4
strb r1, [r0]
pop {r0-r7}
pop {pc}

EXECUTE:
bx r4

.align 2
DATA: .word BUFFERDATA + 0x08831900
BUFFERDATA:
.hword 0x2
.hword 0x1
.word OAMDATA + 0x08831900
.word ANIMATION + 0x08831900
.word 0x0
.word 0x08231CFC
.word 0x080EE4DD
.byte 0xFF

.align 2
ANIMATION: .word OAMANIM + 0x08831900
OAMANIM:
.hword 0x201
.hword 0xA
.hword 0xFFFE
.hword 0x0

.align 2
OAMDATA:
.byte 0x0
.byte 0x0
.byte 0x0
.byte 0xC0
.hword 0x1
.hword 0x0

.align 2
DATA2: .word BUFFERDATA2 + 0x08831900
BUFFERDATA2:
.hword 0x2
.hword 0x1
.word OAMDATA2 + 0x08831900
.word ANIMATION2 + 0x08831900
.word 0x0
.word 0x08231CFC
.word 0x080EE4DD
.byte 0xFF

.align 2
ANIMATION2: .word OAMANIM2 + 0x08831900
OAMANIM2:
.hword 0x241
.hword 0xA
.hword 0xFFFE
.hword 0x0

.align 2
OAMDATA2:
.byte 0x0
.byte 0x0
.byte 0x0
.byte 0xC0
.hword 0x1
.hword 0x0

Saludos:D
 

cosarara97

Dejad de cambiar de nick
Miembro de honor
.equ TABLE, 0x08B0E88008C0EC83080E000000
Wat.
EDIT: Ok, vamos a decirlo un poco mejor:
Eso es completamente incorrecto (el número es obviamente demasiado grande).
¿De dónde has sacado la rutina, dices?
 

Invert

why so serious?
Tio donde dice equ Table debes poner el offset donde empieza la tabla en el editor hecho no la tabla en si.
 

MegaSceptile9

Usuario mítico
Wat.
EDIT: Ok, vamos a decirlo un poco mejor:
Eso es completamente incorrecto (el número es obviamente demasiado grande).
¿De dónde has sacado la rutina, dices?
Esa es la tabla, mira aquí un fracmento de del tutorial:

''Digamos que tengo una imagen en 0xABCDEF y una paleta en 0x123456
Dividí las compensaciones hasta en 3 partes: [AB] [CD] [EF] / / [12] [34] [56]
Entonces cambio el primer y último bloque: [EF] [CD] [AB] / / [56] [34] [12]
Finalmente añadimos 08 detrás de él: EF CD AB 08 / / 56 34 12 08

Por ejemplo, mi tabla podría tener este aspecto:
Código:
EFCDAB08 56341208 0E 000000
[Imagen] [Paleta] [pal #] [relleno]
Ahora repite que por tanto los mugshots como desee.
Recuerde: La primera entrada de la tabla es 0x0 INDEX.
La segunda entrada es 0x1 INDEX y así sucesivamente.


Esta vez se pone fácil:
Código:
. TABLA equ, 0x08 (MESA)
Reemplazar (MESA) con su tabla de correctores en la ROM.

Y la última cosa que usted debe hacer está cambiando todo [OFFSET_OF_THIS_CODE]
al desplazamiento que se va a insertar el código ASM.
Si usted quiere que la inserta a 0x800000 por ejemplo,
reemplazar todos [OFFSET_OF_THIS_CODE] con 800.000.''
 

cosarara97

Dejad de cambiar de nick
Miembro de honor
Esa es la tabla, mira aquí un fracmento de del tutorial:

''Digamos que tengo una imagen en 0xABCDEF y una paleta en 0x123456
Dividí las compensaciones hasta en 3 partes: [AB] [CD] [EF] / / [12] [34] [56]
Entonces cambio el primer y último bloque: [EF] [CD] [AB] / / [56] [34] [12]
Finalmente añadimos 08 detrás de él: EF CD AB 08 / / 56 34 12 08

Por ejemplo, mi tabla podría tener este aspecto:
Código:
EFCDAB08 56341208 0E 000000
[Imagen] [Paleta] [pal #] [relleno]
Ahora repite que por tanto los mugshots como desee.
Recuerde: La primera entrada de la tabla es 0x0 INDEX.
La segunda entrada es 0x1 INDEX y así sucesivamente.


Esta vez se pone fácil:
Código:
. TABLA equ, 0x08 (MESA)
Reemplazar (MESA) con su tabla de correctores en la ROM.

Y la última cosa que usted debe hacer está cambiando todo [OFFSET_OF_THIS_CODE]
al desplazamiento que se va a insertar el código ASM.
Si usted quiere que la inserta a 0x800000 por ejemplo,
reemplazar todos [OFFSET_OF_THIS_CODE] con 800.000.''
Yay, traducción automática! Otra vez danos un link please.
Ya sé lo que has hecho, lo que pasa es que en el código no tenías que poner los datos de la tabla en forma de número, si no que tenías que poner la dirección del sitio en el que has puesto dicha tabla.
De todos modos no acabo de ver muy bien cómo funcionaría esto, por que si no tengo mal entendido no puedes usar ldr con una dirección que esté lejos del código.
 

MegaSceptile9

Usuario mítico
Yay, traducción automática! Otra vez danos un link please.
Ya sé lo que has hecho, lo que pasa es que en el código no tenías que poner los datos de la tabla en forma de número, si no que tenías que poner la dirección del sitio en el que has puesto dicha tabla.
De todos modos no acabo de ver muy bien cómo funcionaría esto, por que si no tengo mal entendido no puedes usar ldr con una dirección que esté lejos del código.
Entonces dices que debo de insertar la tabla con el HxD, y en la dirección que la ponga, esa es la dirección que tengo que poner en la tabla...

A decir verdad, tiene mucho sentido, lo probaré.

Gracias por responder:D
 

Jo7a

Kiero mi nick amarillo D:
Entonces dices que debo de insertar la tabla con el HxD, y en la dirección que la ponga, esa es la dirección que tengo que poner en la tabla...

A decir verdad, tiene mucho sentido, lo probaré.

Gracias por responder:D
Tu mismo lo has dicho. Lo que tienes que poner en
es el offset donde está la tabla. Para crear la tabla ve a un offset vacio en el HxD, que tengas bastantes FF (cuantos más tenga, más mugshots puedes meter). Y en ese offset, dentro del HxD, tienes que poner cada mugshots con la estructuraque indica en el tutorial.

Código:
EFCDAB08 56341208 0E 000000 
  [Imagen] [Paleta] [pal #] [relleno]
Y justo donde acaban esos bytes, metes el siguiente mugshot de la misma manera, y luego el siguiente y así.
 

MegaSceptile9

Usuario mítico
Yay, traducción automática! Otra vez danos un link please.
Ya sé lo que has hecho, lo que pasa es que en el código no tenías que poner los datos de la tabla en forma de número, si no que tenías que poner la dirección del sitio en el que has puesto dicha tabla.
De todos modos no acabo de ver muy bien cómo funcionaría esto, por que si no tengo mal entendido no puedes usar ldr con una dirección que esté lejos del código.
Tu mismo lo has dicho. Lo que tienes que poner en
es el offset donde está la tabla. Para crear la tabla ve a un offset vacio en el HxD, que tengas bastantes FF (cuantos más tenga, más mugshots puedes meter). Y en ese offset, dentro del HxD, tienes que poner cada mugshots con la estructuraque indica en el tutorial.

Código:
EFCDAB08 56341208 0E 000000 
  [Imagen] [Paleta] [pal #] [relleno]
Y justo donde acaban esos bytes, metes el siguiente mugshot de la misma manera, y luego el siguiente y así.
Tio donde dice equ Table debes poner el offset donde empieza la tabla en el editor hecho no la tabla en si.
No lo puede creer, me funcionó a la perfección:



Un millón de gracias :D, son los mejores.

Saludos:D
 

Jo7a

Kiero mi nick amarillo D:
Me alegro que lo hayas conseguido.
Midis, mugshots, scripts chulos... Joder, desde luego te está quedando un hack genial.

Bueno, como esto está ya resuelto, cierro el tema
 
Estado
Cerrado para nuevas respuestas.
Arriba