Sistema de cuentapasos con ejecución de script integrada
Aprovechando que ayer posteé mi rutina de cuentapasos en respuesta a una duda, he decidido crear su propio tema así no se pierde. Tengan en cuenta que éste es, además, el hilo de soporte, por lo que es aquí donde deben consultarme sus dudas, problemas o sugerencias.
Explicación:El Sistema de Cuentapasos con Ejecución de Script Integrada (SiCESI) es una rutina ASM que, tal y como indica su nombre, al ser activada almacena la cantidad de pasos que hayas caminado. Al alcanzar una cantidad determinada, se ejecuta el script que hayas asignado.
Nota: Es obligatorio asignar un script. Si no quieres que se ejecute absolutamente nada, simplemente compila un nop.
Compatibilidad: Fire Red (U) v1.0. Probablemente durante la semana sea adaptada para FR v1.1, Rojo Fuego, Emerald (U) y Esmeralda.
¿Recibe Parámetros?: Sí.
¿Devuelve Parámetros?: Sí.
Link por Mediafire. Contiene la rutina en formato .asm y .bin (ensamblada) junto a un archivo de texto con las instrucciones de instalación.
Versión 1.0 (Antigua) (Mediafire). Contiene la rutina en formato .asm y .bin (ensamblada) junto a un archivo de texto con las instrucciones de instalación.
Información Técnica
Explicación:El Sistema de Cuentapasos con Ejecución de Script Integrada (SiCESI) es una rutina ASM que, tal y como indica su nombre, al ser activada almacena la cantidad de pasos que hayas caminado. Al alcanzar una cantidad determinada, se ejecuta el script que hayas asignado.
Nota: Es obligatorio asignar un script. Si no quieres que se ejecute absolutamente nada, simplemente compila un nop.
Compatibilidad: Fire Red (U) v1.0. Probablemente durante la semana sea adaptada para FR v1.1, Rojo Fuego, Emerald (U) y Esmeralda.
¿Recibe Parámetros?: Sí.
- Variable 0x40FD: Es la cantidad de pasos tras la cual se ejecuta el script asignado. Aprovechándonos de ella, podemos usar el cuentapasos en diferentes oportunidades e, incluso, con distintos niveles de dificultad.
A la vez, funciona de interruptor, si el valor es igual a 0, está apagado.
- Variable 0x40FF: Es el orden que tiene el script a llamar dentro de la tabla, empezando a numerarlos desde el 0.
¿Devuelve Parámetros?: Sí.
- Variable 0x40FE: En ella se almacena la cantidad de pasos que has dado desde que encendiste el cuentapasos.
Nota: No se reinicia si apagas y vuelves a encender el cuentapasos, para eso usa un setvar 0x40FE 0.
¿Recibe Parámetros?: Sí.
¿Devuelve Parámetros?: Sí.
- Variable 0x40FF: No es exactamente un parámetro, pero si tiene un valor que no sea $FFFF (65535) el cuentapasos estará apagado. Al darle dicho valor, se enciende.
- Variable 0x40FD: Es la cantidad de pasos tras la cual se ejecuta el script asignado. Aprovechándonos de ella, podemos usar el cuentapasos en diferentes oportunidades e, incluso, con distintos niveles de dificultad.
¿Devuelve Parámetros?: Sí.
- Variable 0x40FE: En ella se almacena la cantidad de pasos que has dado desde que encendiste el cuentapasos.
Nota: No se reinicia si apagas y vuelves a encender el cuentapasos, para eso usa un setvar 0x40FE 0.
Instrucciones de Instalación
- Compilar el/los script/s que deseen ejecutar.
- Con el offset que nos dio nuestro editor de scripts, tenemos dos maneras de proceder:
- Editando el archivo .asm: Nos vamos a la línea en que dice "script_table" y editamos el "0x08A00000" con "0x08(offset de la tabla)", debiendo ser éste un lugar con espacio libre para rellenar con punteros a todos los scripts que quieran llamar.
- Editando la versión compilada (archivo .bin): Nos vamos a la posición $60 (ctrl+G) y editamos "00 00 A0 08" por un pointer al offset que quieras para la tabla. Es decir, tomamos la dirección de un lugar con mucho espacio libre, lo volteamos de a 2 y lo escribimos seguido de un 08. Ejemplo: Quiero poner mi tabla en el offset 0x881823, en el lugar indicado escribiremos "23 18 88 08".
- Ahora debemos insertar la rutina en un espacio vacío de la ROM con un editor hexadecimal. Si seguiste la primera opción, primero debes ensamblarla.
- Abrimos un editor hexadecimal y vamos al offset 0x06D622, es decir, damos ctrl+G, marcamos la casilla hexadecimal, escribimos 6D622 y le damos aceptar.
- En dicha posición debes escribir los siguientes bytes: "01 4A 10 47 00 00 XX XX XX 08", donde XX XX XX es el offset en que insertaste la rutina permutado. Es decir, hacemos lo mismo que con el script. No olvidemos sumarle 1, de lo contrario no funcionará.
- Recuerda, sólo comenzará a contar los pasos si haces primero un setvar 0x40FD 0x(cantidad_de_pasos).
- Construyendo la tabla:
- Buscamos un offset con mucho espacio vacío desde un editor hexadecimal.
- Compilamos los scripts que vayamos a usar.
- Permutamos los offsets que nuestro editor de scripts nos ha asignado.
- Desde el editor hexadecimal vamos a la posición que asignamos en script_table (por defecto $A00000).
- Insertamos uno a uno los punteros a los scripts, sin dejar lugar entre ellos.
- NOTA: El número que debemos asignar a la variable 0x40FF del script a llamar empieza desde el 0; es decir, el primer lugar de la tabla equivale al índice 0, el segundo al 1 y así suecivamente.
- Compilar el script que deseen ejecutar.
- Con el offset que nos dio nuestro editor de scripts, tenemos dos maneras de proceder:
- Editando el archivo .asm: Nos vamos a la línea en que dice "script_adress" y editamos el "0x08784F90" con "0x08(offset del script)".
- Editando la versión compilada (archivo .bin): Nos vamos a la posición $54 (ctrl+G) y editamos "90 4F 78 08" por un pointer a tu script. Es decir, tomamos el número que nos dio el XSE, lo volteamos de a 2 y lo escribimos seguido de un 08. Ejemplo: XSE puso mi script en el offset 0x881823, en el lugar indicado escribiremos "23 18 88 08".
- Ahora debemos insertar la rutina en un espacio vacío de la ROM con un editor hexadecimal. Si seguiste la primera opción, primero debes ensamblarla.
- Abrimos un editor hexadecimal y vamos al offset 0x06D622, es decir, damos ctrl+G, marcamos la casilla hexadecimal, escribimos 6D622 y le damos aceptar.
- En dicha posición debes escribir los siguientes bytes: "01 4A 10 47 00 00 XX XX XX 08", donde XX XX XX es el offset en que insertaste la rutina permutado. Es decir, hacemos lo mismo que con el script. No olvidemos sumarle 1, de lo contrario no funcionará.
- Recuerda, sólo comenzará a contar los pasos si haces primero un setvar 0x40FF 0xFFFF.
- Nota: El archivo de texto que viene incluido tiene un pequeño error, en lugar de $FFFF dice $FF; lo correcto son 4 F (equivale a 65535 en decimal).
Descarga
Link por Mediafire. Contiene la rutina en formato .asm y .bin (ensamblada) junto a un archivo de texto con las instrucciones de instalación.
Versión 1.0 (Antigua) (Mediafire). Contiene la rutina en formato .asm y .bin (ensamblada) junto a un archivo de texto con las instrucciones de instalación.
Para los que no quieran descargarla por cualquier motivo que sea.
Código:
main:
push {r4-r7}
ldrh r0, =0x40FD
ldr r1, var_decrypter
bl call_r1
mov r4, r0
ldrh r0, [r0]
mov r1, #0
cmp r0, r1
beq end
ldrh r0, =0x40FE
ldr r1, var_decrypter
bl call_r1
mov r5, r0
ldrh r3, [r0]
ldrh r0, [r4]
add r3, #1
cmp r0, r3
bne otropaso
mov r0, #0
strh r0, [r4]
ldrh r0, =0x40FF
ldr r1, var_decrypter
bl call_r1
ldrh r1, [r0]
mov r2, #4
mul r1, r2
ldr r0, script_table
add r0, r1
ldr r0, [r0]
ldr r1, script_executer
bl call_r1
end:
pop {r0-r7}
lsl r0, r0, #0x18
lsr r0, r0, #0x18
cmp r0, #1
beq brancher
ldr r0, =0x02037078
ldr r2, =(0x806D62C +1)
bx r2
otropaso:
strh r5, [r4]
b end
brancher:
ldr r2, =(0x806D650 +1)
bx r2
call_r1:
bx r1
.align 2
script_table: .word 0x08A00000
script_executer: .word 0x08069AE5
var_decrypter: .word 0x0806E455
Código:
F0 B4 1A 48 18 49 00 F0 2A F8 04 1C 00 88 00 21 88 42 18 D0 16 48 14 49 00 F0 21 F8 05 1C 03 88 20 88 01 33 98 42 16 D1 00 20 20 80 11 48 0E 49 00 F0 15 F8 01 88 04 22 51 43 09 48 40 18 00 68 08 49 00 F0 0C F8 FF BC 00 06 00 0E 01 28 04 D0 09 48 0A 4A 10 47 25 80 F5 E7 09 4A 10 47 08 47 00 00 A0 08 E5 9A 06 08 55 E4 06 08 FD 40 00 00 FE 40 00 00 FF 40 00 00 78 70 03 02 2D D6 06 08 51 D6 06 08
Para los que no quieran descargarla por cualquier motivo que sea.
Código:
main:
push {r0-r7}
ldrh r0, =0x40FF
ldr r1, var_decrypter
bl call_r1
ldrh r0, [r0]
ldrh r1, =0xFFFF
cmp r0, r1
bne end
ldrh r0, =0x40FE
ldr r1, var_decrypter
bl call_r1
mov r4, r0
ldrh r5, [r0]
ldrh r0, =0x40FD
ldr r1, var_decrypter
bl call_r1
ldrh r0, [r0]
add r5, #1
cmp r0, r5
bne otropaso
mov r0, #0
strh r0, [r4]
ldr r0, script_adress
ldr r1, script_executer
bl call_r1
end:
pop {r0-r7}
lsl r0, r0, #0x18
lsr r0, r0, #0x18
cmp r0, #1
beq brancher
ldr r0, =0x02037078
ldr r2, =(0x806D62C +1)
bx r2
otropaso:
strh r5, [r4]
b end
brancher:
ldr r2, =(0x806D650 +1)
bx r2
call_r1:
bx r1
.align 2
script_adress: .word 0x08784F90
script_executer: .word 0x08069AE5
var_decrypter: .word 0x0806E455
Código:
FF B4 17 48 15 49 00 F0 24 F8 00 88 15 49 88 42 13 D1 15 48 11 49 00 F0 1C F8 04 1C 05 88 13 48 0E 49 00 F0 16 F8 00 88 01 35 A8 42 0D D1 00 20 20 80 08 48 08 49 00 F0 0C F8 FF BC 00 06 00 0E 01 28 04 D0 0A 48 0B 4A 10 47 25 80 F5 E7 0A 4A 10 47 08 47 90 4F 78 08 E5 9A 06 08 55 E4 06 08 FF 40 00 00 FF FF 00 00 FE 40 00 00 FD 40 00 00 78 70 03 02 2D D6 06 08 51 D6 06 08
Última edición: