summaryrefslogtreecommitdiff
path: root/arm7/asm/OS_tick.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm7/asm/OS_tick.s')
-rw-r--r--arm7/asm/OS_tick.s138
1 files changed, 138 insertions, 0 deletions
diff --git a/arm7/asm/OS_tick.s b/arm7/asm/OS_tick.s
new file mode 100644
index 00000000..40589867
--- /dev/null
+++ b/arm7/asm/OS_tick.s
@@ -0,0 +1,138 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start OS_GetTick
+OS_GetTick: ; 0x037FA364
+ stmfd sp!, {lr}
+ sub sp, sp, #12
+ bl OS_DisableInterrupts
+ ldr r1, _037FA404 ; =0x04000100
+ ldrh r1, [r1]
+ strh r1, [sp]
+ ldr r1, _037FA408 ; =OSi_TickCounter
+ ldr ip, [r1]
+ ldr r3, [r1, #4]
+ ldr r2, _037FA40C ; =0x0000FFFF
+ mvn r1, #0
+ and r2, r3, r2
+ and r1, ip, r1
+ str r1, [sp, #4]
+ str r2, [sp, #8]
+ ldr r1, _037FA410 ; =0x04000214
+ ldr r1, [r1]
+ ands r1, r1, #8
+ beq _037FA3D8
+ ldrh r1, [sp]
+ ands r1, r1, #32768 ; 0x8000
+ bne _037FA3D8
+ ldr r3, [sp, #4]
+ ldr r2, [sp, #8]
+ mov r1, #1
+ adds r3, r3, r1
+ adc r1, r2, #0
+ str r3, [sp, #4]
+ str r1, [sp, #8]
+_037FA3D8:
+ bl OS_RestoreInterrupts
+ ldr r2, [sp, #4]
+ ldr r0, [sp, #8]
+ mov r1, r0, lsl #16
+ orr r1, r1, r2, lsr #16
+ ldrh r0, [sp]
+ orr r1, r1, r0, asr #31
+ orr r0, r0, r2, lsl #16
+ add sp, sp, #12
+ ldmia sp!, {lr}
+ bx lr
+_037FA404: .word 0x04000100
+_037FA408: .word OSi_TickCounter
+_037FA40C: .word 0x0000FFFF
+_037FA410: .word 0x04000214
+
+ arm_func_start OSi_CountUpTick
+OSi_CountUpTick: ; 0x037FA414
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, _037FA488 ; =OSi_TickCounter
+ ldr ip, [r1]
+ ldr r2, [r1, #4]
+ mov r3, #0
+ mov r0, #1
+ adds ip, ip, r0
+ adc r0, r2, #0
+ str ip, [r1]
+ str r0, [r1, #4]
+ ldr r0, _037FA48C ; =OSi_NeedResetTimer
+ ldr r1, [r0]
+ cmp r1, #0
+ beq _037FA46C
+ ldr r2, _037FA490 ; =0x04000102
+ strh r3, [r2]
+ ldr r1, _037FA494 ; =0x04000100
+ strh r3, [r1]
+ mov r1, #193 ; 0xc1
+ strh r1, [r2]
+ str r3, [r0]
+_037FA46C:
+ mov r0, #0
+ ldr r1, _037FA498 ; =OSi_CountUpTick
+ mov r2, r0
+ bl OSi_EnterTimerCallback
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FA488: .word OSi_TickCounter
+_037FA48C: .word OSi_NeedResetTimer
+_037FA490: .word 0x04000102
+_037FA494: .word 0x04000100
+_037FA498: .word OSi_CountUpTick
+
+ arm_func_start OS_IsTickAvailable
+OS_IsTickAvailable: ; 0x037FA49C
+ ldr r0, _037FA4A8 ; =_03807920
+ ldrh r0, [r0]
+ bx lr
+_037FA4A8: .word _03807920
+
+ arm_func_start OS_InitTick
+OS_InitTick: ; 0x037FA4AC
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _037FA528 ; =_03807920
+ ldrh r1, [r0]
+ cmp r1, #0
+ bne _037FA51C
+ mov r1, #1
+ strh r1, [r0]
+ mov r0, #0
+ bl OSi_SetTimerReserved
+ mov r2, #0
+ ldr r0, _037FA52C ; =OSi_TickCounter
+ str r2, [r0]
+ str r2, [r0, #4]
+ ldr r1, _037FA530 ; =0x04000102
+ strh r2, [r1]
+ ldr r0, _037FA534 ; =0x04000100
+ strh r2, [r0]
+ mov r0, #193 ; 0xc1
+ strh r0, [r1]
+ mov r0, #8
+ ldr r1, _037FA538 ; =OSi_CountUpTick
+ bl OS_SetIrqFunction
+ mov r0, #8
+ bl OS_EnableIrqMask
+ mov r1, #0
+ ldr r0, _037FA53C ; =OSi_NeedResetTimer
+ str r1, [r0]
+_037FA51C:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FA528: .word _03807920
+_037FA52C: .word OSi_TickCounter
+_037FA530: .word 0x04000102
+_037FA534: .word 0x04000100
+_037FA538: .word OSi_CountUpTick
+_037FA53C: .word OSi_NeedResetTimer