Invert
why so serious?
Cronometro
Explicación
El cronometro es una rutina hecha para medir el valor del tiempo real y almacenarla en variables.
¿Recibe Parámetros?: Sí.
- var 8001: Resetea los segundos.
- var 8002: Resetea los minutos.
¿Devuelve Parámetros?: Sí.
- var 8001: Guarda los segundos.
- var 8002: Guarda los minutos.
Instalación
Instalar los 3 siguientes codigos en distintos offsets:
CRONOMETRO
Código:.thumb .global stop_watch .thumb_func PUSH {R4-R6,LR} add1: lsl r0, #0x18 lsr r0, #0x18 ldr r2, =0x03005090 @task lsl r1, r0, #2 add r1, r0 lsl r1, #3 add r2, r1 ldrh r0, [r2, #8] @args add r0, #1 cmp r0, #0x3c BEQ add_var b return add_var: ldr r3, =0x020370bA @var 8001 @Seg mov r4, r3 ldrh r3, [r3] cmp r3, #0x3c @Compara 60 seg. BEQ add_var2 @Si paso un un minuto salta a la funcion @add_var2 add r3, #1 @Añade 1 segundo a la var 8001 strh r3, [r4] @Se guardan los segundos en la var 8001 mov r0, #0 b return add_var2: ldr r3, =0x020370bC @var 8002 @Min mov r4, r3 ldrh r3, [r3] add r3, #1 @Añade 1 minuto a la var 8002 strh r3, [r4] @Se guardan los minutos en la var 8002 mov r0, #0 return: strh r0, [r2, #8] POP {r4-r6,PC}
START_CRONOMETRO
Código:.thumb .global stop_watch .thumb_func PUSH {R4-R6,LR} ldr r0, =0x08xxxxxx @rutina_task mov r1, #1 ldr r2, =0x0807741D @task_add bl bx_r2 POP {r4-r6,PC} .ltorg bx_r2: bx r2
Nota:En los espacios (xxxxxx) irá el offset permutada de la rutina llamada "CRONOMETRO".STOP_CRONOMETRO
Código:.thumb .global stop_watch .thumb_func PUSH {R4-R6,LR} ldr r0, =0x08xxxxxx @rutina_task ldr r2, =0x08077689 @task_find bl bx_r2 ldr r2, =0x8077509 @task_find bl bx_r2 POP {r4-r6,PC} .ltorg bx_r2: bx r2
Instruciones de uso
EJEMPLO DE INICIO
Código:#dynamic 0x800000 //--------------- #org @inicio setvar 0x8001 0x0 @Setea los segundos del cronometro en 0 setvar 0x8002 0x0 @Setea los minutos del cronometro en 0 callasm 0x900000 @Aqui va el offset de la rutina llamada "Start_watch" end
Nota:EJEMPLO DE DETENCION
Código:#dynamic 0x800000 //--------------- #org @inicio callasm 0x900000 @Aqui va el offset de la rutina llamada "Stop_Watch" setvar 0x8001 0x0 @Setea los segundos del cronometro en 0 setvar 0x8002 0x0 @Setea los minutos del cronometro en 0 end
Cuando inicies el valor de la variable 0x8001 se irá incrementando de 1 en 1 por cada segundo que pase hasta llegar a 60 segundos, en ese punto el valor de la variable 8002 pasa a ser 1 lo que significa que va transcurrido 1 minuto.
Nota 2:
La rutina no esta para nada completada y tiene un montón de cosas por mejorar, aún así no está demás sus comentarios e ideas para poder añadirlas.