diff options
Diffstat (limited to 'arm7/asm/OS_tick.s')
-rw-r--r-- | arm7/asm/OS_tick.s | 138 |
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 |