diff options
author | red031000 <rubenru09@aol.com> | 2020-06-02 19:47:13 +0100 |
---|---|---|
committer | red031000 <rubenru09@aol.com> | 2020-06-02 19:47:13 +0100 |
commit | fb33321cbe9e3cf659bf9009373d2fdb7569bcb5 (patch) | |
tree | de780ddaa796c097bce20713c0085f6a82d2bace | |
parent | a506ea6dd95857aa32581aaf04434495ee8bc446 (diff) |
split OS_alarm
-rw-r--r-- | arm7/arm7.lsf | 1 | ||||
-rw-r--r-- | arm7/asm/OS_alarm.s | 359 | ||||
-rw-r--r-- | arm7/asm/dtcm.s | 355 |
3 files changed, 360 insertions, 355 deletions
diff --git a/arm7/arm7.lsf b/arm7/arm7.lsf index e047081a..bec96da5 100644 --- a/arm7/arm7.lsf +++ b/arm7/arm7.lsf @@ -28,6 +28,7 @@ Autoload WRAM Object OS_alloc.o Object OS_timer.o Object OS_tick.o + Object OS_alarm.o Object dtcm.o Object libsyscall.o Object dtcm2.o diff --git a/arm7/asm/OS_alarm.s b/arm7/asm/OS_alarm.s new file mode 100644 index 00000000..8c97aa9f --- /dev/null +++ b/arm7/asm/OS_alarm.s @@ -0,0 +1,359 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start OSi_AlarmHandler +OSi_AlarmHandler: ; 0x037FA540 + stmdb sp!, {r0, lr} + bl OSi_ArrangeTimer + ldmia sp!, {r0, lr} + bx lr + + arm_func_start OSi_ArrangeTimer +OSi_ArrangeTimer: ; 0x037FA550 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r1, #0 + ldr r0, _037FA644 ; =0x04000106 + strh r1, [r0] + mov r0, #16 + bl OS_DisableIrqMask + ldr r1, _037FA648 ; =0x0380FFF8 + ldr r0, [r1] + orr r0, r0, #16 + str r0, [r1] + bl OS_GetTick + ldr r2, _037FA64C ; =_03807934 + ldr r4, [r2] + cmp r4, #0 + beq _037FA638 + ldr ip, [r4, #12] + ldr r3, [r4, #16] + cmp r1, r3 + cmpeq r0, ip + bcs _037FA5B0 + mov r0, r4 + bl OSi_SetTimer + b _037FA638 +_037FA5B0: + ldr r1, [r4, #24] + str r1, [r2] + cmp r1, #0 + moveq r0, #0 + streq r0, [r2, #4] + movne r0, #0 + strne r0, [r1, #20] + ldr r5, [r4] + ldr r2, [r4, #28] + ldr r1, [r4, #32] + mov r0, #0 + cmp r1, r0 + cmpeq r2, r0 + streq r0, [r4] + cmp r5, #0 + beq _037FA5FC + ldr r0, [r4, #4] + mov lr, pc + bx r5 +_037FA5FC: + ldr r2, [r4, #28] + ldr r0, [r4, #32] + mov r1, #0 + cmp r0, r1 + cmpeq r2, r1 + beq _037FA624 + str r5, [r4] + mov r0, r4 + mov r2, r1 + bl OSi_InsertAlarm +_037FA624: + ldr r0, _037FA64C ; =_03807934 + ldr r0, [r0] + cmp r0, #0 + beq _037FA638 + bl OSi_SetTimer +_037FA638: + add sp, sp, #4 + ldmia sp!, {r4, r5, lr} + bx lr +_037FA644: .word 0x04000106 +_037FA648: .word 0x0380FFF8 +_037FA64C: .word _03807934 + + arm_func_start OS_CancelAlarm +OS_CancelAlarm: ; 0x037FA650 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + bl OS_DisableInterrupts + mov r4, r0 + ldr r1, [r5] + cmp r1, #0 + bne _037FA678 + bl OS_RestoreInterrupts + b _037FA6D0 +_037FA678: + ldr r0, [r5, #24] + cmp r0, #0 + ldreq r2, [r5, #20] + ldreq r1, _037FA6DC ; =_03807934 + streq r2, [r1, #4] + ldrne r1, [r5, #20] + strne r1, [r0, #20] + ldr r1, [r5, #20] + cmp r1, #0 + strne r0, [r1, #24] + bne _037FA6B8 + ldr r1, _037FA6DC ; =_03807934 + str r0, [r1] + cmp r0, #0 + beq _037FA6B8 + bl OSi_SetTimer +_037FA6B8: + mov r0, #0 + str r0, [r5] + str r0, [r5, #28] + str r0, [r5, #32] + mov r0, r4 + bl OS_RestoreInterrupts +_037FA6D0: + add sp, sp, #4 + ldmia sp!, {r4, r5, lr} + bx lr +_037FA6DC: .word _03807934 + + arm_func_start OS_SetPeriodicAlarm +OS_SetPeriodicAlarm: ; 0x037FA6E0 + stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} + sub sp, sp, #4 + movs r4, r0 + mov r9, r1 + mov r8, r2 + mov r7, r3 + ldr r6, [sp, #32] + beq _037FA70C + ldr r0, [r4] + cmp r0, #0 + beq _037FA710 +_037FA70C: + bl FUN_037FB1F0 +_037FA710: + bl OS_DisableInterrupts + mov r5, r0 + str r7, [r4, #28] + str r6, [r4, #32] + str r9, [r4, #36] ; 0x24 + str r8, [r4, #40] ; 0x28 + ldr r0, [sp, #36] ; 0x24 + str r0, [r4] + ldr r0, [sp, #40] ; 0x28 + str r0, [r4, #4] + mov r0, r4 + mov r1, #0 + mov r2, r1 + bl OSi_InsertAlarm + mov r0, r5 + bl OS_RestoreInterrupts + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, r9, lr} + bx lr + + arm_func_start OS_SetAlarm +OS_SetAlarm: ; 0x037FA75C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + movs r7, r0 + mov r6, r1 + mov r5, r2 + mov r8, r3 + beq _037FA780 + ldr r0, [r7] + cmp r0, #0 + beq _037FA784 +_037FA780: + bl FUN_037FB1F0 +_037FA784: + bl OS_DisableInterrupts + mov r4, r0 + mov r0, #0 + str r0, [r7, #28] + str r0, [r7, #32] + str r8, [r7] + ldr r0, [sp, #24] + str r0, [r7, #4] + bl OS_GetTick + mov r2, r0 + mov r0, r7 + adds r3, r6, r2 + adc r2, r5, r1 + mov r1, r3 + bl OSi_InsertAlarm + mov r0, r4 + bl OS_RestoreInterrupts + ldmia sp!, {r4, r5, r6, r7, r8, lr} + bx lr + + arm_func_start OSi_InsertAlarm +OSi_InsertAlarm: ; 0x037FA7D0 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r8, r0 + mov r7, r1 + mov r6, r2 + ldr r2, [r8, #28] + ldr r1, [r8, #32] + mov r0, #0 + cmp r1, r0 + cmpeq r2, r0 + beq _037FA84C + bl OS_GetTick + ldr r7, [r8, #36] ; 0x24 + ldr r6, [r8, #40] ; 0x28 + cmp r6, r1 + cmpeq r7, r0 + bcs _037FA84C + ldr r5, [r8, #28] + ldr r4, [r8, #32] + subs r0, r0, r7 + sbc r1, r1, r6 + mov r2, r5 + mov r3, r4 + bl _ll_udiv + mov r2, #1 + adds r2, r0, r2 + adc r0, r1, #0 + umull r3, r1, r5, r2 + mla r1, r5, r0, r1 + mla r1, r4, r2, r1 + adds r7, r7, r3 + adc r6, r6, r1 +_037FA84C: + str r7, [r8, #12] + str r6, [r8, #16] + ldr r0, _037FA8FC ; =_03807934 + ldr r4, [r0] + mov r1, #0 + b _037FA8B8 +_037FA864: + ldr r2, [r4, #12] + ldr r0, [r4, #16] + subs r3, r7, r2 + sbc r2, r6, r0 + subs r0, r3, r1 + sbcs r0, r2, r1 + bge _037FA8B4 + ldr r0, [r4, #20] + str r0, [r8, #20] + str r8, [r4, #20] + str r4, [r8, #24] + ldr r0, [r8, #20] + cmp r0, #0 + strne r8, [r0, #24] + bne _037FA8F4 + ldr r0, _037FA8FC ; =_03807934 + str r8, [r0] + mov r0, r8 + bl OSi_SetTimer + b _037FA8F4 +_037FA8B4: + ldr r4, [r4, #24] +_037FA8B8: + cmp r4, #0 + bne _037FA864 + mov r0, #0 + str r0, [r8, #24] + ldr r0, _037FA8FC ; =_03807934 + ldr r1, [r0, #4] + str r8, [r0, #4] + str r1, [r8, #20] + cmp r1, #0 + strne r8, [r1, #24] + bne _037FA8F4 + str r8, [r0, #4] + str r8, [r0] + mov r0, r8 + bl OSi_SetTimer +_037FA8F4: + ldmia sp!, {r4, r5, r6, r7, r8, lr} + bx lr +_037FA8FC: .word _03807934 + + arm_func_start OS_CreateAlarm +OS_CreateAlarm: ; 0x037FA900 + mov r1, #0 + str r1, [r0] + str r1, [r0, #8] + bx lr + + arm_func_start OS_IsAlarmAvailable +OS_IsAlarmAvailable: ; 0x037FA910 + ldr r0, _037FA91C ; =_03807930 + ldrh r0, [r0] + bx lr +_037FA91C: .word _03807930 + + arm_func_start OS_InitAlarm +OS_InitAlarm: ; 0x037FA920 + stmfd sp!, {lr} + sub sp, sp, #4 + ldr r1, _037FA968 ; =_03807930 + ldrh r0, [r1] + cmp r0, #0 + bne _037FA95C + mov r0, #1 + strh r0, [r1] + bl OSi_SetTimerReserved + mov r1, #0 + ldr r0, _037FA96C ; =_03807934 + str r1, [r0] + str r1, [r0, #4] + mov r0, #16 + bl OS_DisableIrqMask +_037FA95C: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_037FA968: .word _03807930 +_037FA96C: .word _03807934 + + arm_func_start OSi_SetTimer +OSi_SetTimer: ; 0x037FA970 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, r0 + bl OS_GetTick + mov r2, #0 + ldr r3, _037FA9FC ; =0x04000106 + strh r2, [r3] + ldr ip, [r4, #12] + ldr r3, [r4, #16] + subs r5, ip, r0 + sbc r4, r3, r1 + mov r0, #1 + ldr r1, _037FAA00 ; =OSi_AlarmHandler + bl OSi_EnterTimerCallback + mov r1, #0 + subs r0, r5, r1 + sbcs r0, r4, r1 + ldrlt r1, _037FAA04 ; =0x0000FFFE + blt _037FA9D4 + mov r0, #65536 ; 0x10000 + subs r0, r5, r0 + sbcs r0, r4, r1 + mvnlt r0, r5 + movlt r0, r0, lsl #16 + movlt r1, r0, lsr #16 +_037FA9D4: + ldr r0, _037FAA08 ; =0x04000104 + strh r1, [r0] + mov r1, #193 ; 0xc1 + ldr r0, _037FA9FC ; =0x04000106 + strh r1, [r0] + mov r0, #16 + bl OS_EnableIrqMask + add sp, sp, #4 + ldmia sp!, {r4, r5, lr} + bx lr +_037FA9FC: .word 0x04000106 +_037FAA00: .word OSi_AlarmHandler +_037FAA04: .word 0x0000FFFE +_037FAA08: .word 0x04000104 diff --git a/arm7/asm/dtcm.s b/arm7/asm/dtcm.s index a403919a..a78cefc2 100644 --- a/arm7/asm/dtcm.s +++ b/arm7/asm/dtcm.s @@ -2,361 +2,6 @@ .include "global.inc" .section .text - arm_func_start FUN_037FA540 -FUN_037FA540: ; 0x037FA540 - stmdb sp!, {r0, lr} - bl FUN_037FA550 - ldmia sp!, {r0, lr} - bx lr - - arm_func_start FUN_037FA550 -FUN_037FA550: ; 0x037FA550 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #4 - mov r1, #0 - ldr r0, _037FA644 ; =0x04000106 - strh r1, [r0] - mov r0, #16 - bl OS_DisableIrqMask - ldr r1, _037FA648 ; =0x0380FFF8 - ldr r0, [r1] - orr r0, r0, #16 - str r0, [r1] - bl OS_GetTick - ldr r2, _037FA64C ; =_03807934 - ldr r4, [r2] - cmp r4, #0 - beq _037FA638 - ldr ip, [r4, #12] - ldr r3, [r4, #16] - cmp r1, r3 - cmpeq r0, ip - bcs _037FA5B0 - mov r0, r4 - bl FUN_037FA970 - b _037FA638 -_037FA5B0: - ldr r1, [r4, #24] - str r1, [r2] - cmp r1, #0 - moveq r0, #0 - streq r0, [r2, #4] - movne r0, #0 - strne r0, [r1, #20] - ldr r5, [r4] - ldr r2, [r4, #28] - ldr r1, [r4, #32] - mov r0, #0 - cmp r1, r0 - cmpeq r2, r0 - streq r0, [r4] - cmp r5, #0 - beq _037FA5FC - ldr r0, [r4, #4] - mov lr, pc - bx r5 -_037FA5FC: - ldr r2, [r4, #28] - ldr r0, [r4, #32] - mov r1, #0 - cmp r0, r1 - cmpeq r2, r1 - beq _037FA624 - str r5, [r4] - mov r0, r4 - mov r2, r1 - bl FUN_037FA7D0 -_037FA624: - ldr r0, _037FA64C ; =_03807934 - ldr r0, [r0] - cmp r0, #0 - beq _037FA638 - bl FUN_037FA970 -_037FA638: - add sp, sp, #4 - ldmia sp!, {r4, r5, lr} - bx lr -_037FA644: .word 0x04000106 -_037FA648: .word 0x0380FFF8 -_037FA64C: .word _03807934 - - arm_func_start OS_CancelAlarm -OS_CancelAlarm: ; 0x037FA650 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #4 - mov r5, r0 - bl OS_DisableInterrupts - mov r4, r0 - ldr r1, [r5] - cmp r1, #0 - bne _037FA678 - bl OS_RestoreInterrupts - b _037FA6D0 -_037FA678: - ldr r0, [r5, #24] - cmp r0, #0 - ldreq r2, [r5, #20] - ldreq r1, _037FA6DC ; =_03807934 - streq r2, [r1, #4] - ldrne r1, [r5, #20] - strne r1, [r0, #20] - ldr r1, [r5, #20] - cmp r1, #0 - strne r0, [r1, #24] - bne _037FA6B8 - ldr r1, _037FA6DC ; =_03807934 - str r0, [r1] - cmp r0, #0 - beq _037FA6B8 - bl FUN_037FA970 -_037FA6B8: - mov r0, #0 - str r0, [r5] - str r0, [r5, #28] - str r0, [r5, #32] - mov r0, r4 - bl OS_RestoreInterrupts -_037FA6D0: - add sp, sp, #4 - ldmia sp!, {r4, r5, lr} - bx lr -_037FA6DC: .word _03807934 - - arm_func_start OS_SetPeriodicAlarm -OS_SetPeriodicAlarm: ; 0x037FA6E0 - stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} - sub sp, sp, #4 - movs r4, r0 - mov r9, r1 - mov r8, r2 - mov r7, r3 - ldr r6, [sp, #32] - beq _037FA70C - ldr r0, [r4] - cmp r0, #0 - beq _037FA710 -_037FA70C: - bl FUN_037FB1F0 -_037FA710: - bl OS_DisableInterrupts - mov r5, r0 - str r7, [r4, #28] - str r6, [r4, #32] - str r9, [r4, #36] ; 0x24 - str r8, [r4, #40] ; 0x28 - ldr r0, [sp, #36] ; 0x24 - str r0, [r4] - ldr r0, [sp, #40] ; 0x28 - str r0, [r4, #4] - mov r0, r4 - mov r1, #0 - mov r2, r1 - bl FUN_037FA7D0 - mov r0, r5 - bl OS_RestoreInterrupts - add sp, sp, #4 - ldmia sp!, {r4, r5, r6, r7, r8, r9, lr} - bx lr - - arm_func_start OS_SetAlarm -OS_SetAlarm: ; 0x037FA75C - stmdb sp!, {r4, r5, r6, r7, r8, lr} - movs r7, r0 - mov r6, r1 - mov r5, r2 - mov r8, r3 - beq _037FA780 - ldr r0, [r7] - cmp r0, #0 - beq _037FA784 -_037FA780: - bl FUN_037FB1F0 -_037FA784: - bl OS_DisableInterrupts - mov r4, r0 - mov r0, #0 - str r0, [r7, #28] - str r0, [r7, #32] - str r8, [r7] - ldr r0, [sp, #24] - str r0, [r7, #4] - bl OS_GetTick - mov r2, r0 - mov r0, r7 - adds r3, r6, r2 - adc r2, r5, r1 - mov r1, r3 - bl FUN_037FA7D0 - mov r0, r4 - bl OS_RestoreInterrupts - ldmia sp!, {r4, r5, r6, r7, r8, lr} - bx lr - - arm_func_start FUN_037FA7D0 -FUN_037FA7D0: ; 0x037FA7D0 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r8, r0 - mov r7, r1 - mov r6, r2 - ldr r2, [r8, #28] - ldr r1, [r8, #32] - mov r0, #0 - cmp r1, r0 - cmpeq r2, r0 - beq _037FA84C - bl OS_GetTick - ldr r7, [r8, #36] ; 0x24 - ldr r6, [r8, #40] ; 0x28 - cmp r6, r1 - cmpeq r7, r0 - bcs _037FA84C - ldr r5, [r8, #28] - ldr r4, [r8, #32] - subs r0, r0, r7 - sbc r1, r1, r6 - mov r2, r5 - mov r3, r4 - bl _ll_udiv - mov r2, #1 - adds r2, r0, r2 - adc r0, r1, #0 - umull r3, r1, r5, r2 - mla r1, r5, r0, r1 - mla r1, r4, r2, r1 - adds r7, r7, r3 - adc r6, r6, r1 -_037FA84C: - str r7, [r8, #12] - str r6, [r8, #16] - ldr r0, _037FA8FC ; =_03807934 - ldr r4, [r0] - mov r1, #0 - b _037FA8B8 -_037FA864: - ldr r2, [r4, #12] - ldr r0, [r4, #16] - subs r3, r7, r2 - sbc r2, r6, r0 - subs r0, r3, r1 - sbcs r0, r2, r1 - bge _037FA8B4 - ldr r0, [r4, #20] - str r0, [r8, #20] - str r8, [r4, #20] - str r4, [r8, #24] - ldr r0, [r8, #20] - cmp r0, #0 - strne r8, [r0, #24] - bne _037FA8F4 - ldr r0, _037FA8FC ; =_03807934 - str r8, [r0] - mov r0, r8 - bl FUN_037FA970 - b _037FA8F4 -_037FA8B4: - ldr r4, [r4, #24] -_037FA8B8: - cmp r4, #0 - bne _037FA864 - mov r0, #0 - str r0, [r8, #24] - ldr r0, _037FA8FC ; =_03807934 - ldr r1, [r0, #4] - str r8, [r0, #4] - str r1, [r8, #20] - cmp r1, #0 - strne r8, [r1, #24] - bne _037FA8F4 - str r8, [r0, #4] - str r8, [r0] - mov r0, r8 - bl FUN_037FA970 -_037FA8F4: - ldmia sp!, {r4, r5, r6, r7, r8, lr} - bx lr -_037FA8FC: .word _03807934 - - arm_func_start OS_CreateAlarm -OS_CreateAlarm: ; 0x037FA900 - mov r1, #0 - str r1, [r0] - str r1, [r0, #8] - bx lr - - arm_func_start OS_IsAlarmAvailable -OS_IsAlarmAvailable: ; 0x037FA910 - ldr r0, _037FA91C ; =_03807930 - ldrh r0, [r0] - bx lr -_037FA91C: .word _03807930 - - arm_func_start OS_InitAlarm -OS_InitAlarm: ; 0x037FA920 - stmfd sp!, {lr} - sub sp, sp, #4 - ldr r1, _037FA968 ; =_03807930 - ldrh r0, [r1] - cmp r0, #0 - bne _037FA95C - mov r0, #1 - strh r0, [r1] - bl OSi_SetTimerReserved - mov r1, #0 - ldr r0, _037FA96C ; =_03807934 - str r1, [r0] - str r1, [r0, #4] - mov r0, #16 - bl OS_DisableIrqMask -_037FA95C: - add sp, sp, #4 - ldmia sp!, {lr} - bx lr -_037FA968: .word _03807930 -_037FA96C: .word _03807934 - - arm_func_start FUN_037FA970 -FUN_037FA970: ; 0x037FA970 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #4 - mov r4, r0 - bl OS_GetTick - mov r2, #0 - ldr r3, _037FA9FC ; =0x04000106 - strh r2, [r3] - ldr ip, [r4, #12] - ldr r3, [r4, #16] - subs r5, ip, r0 - sbc r4, r3, r1 - mov r0, #1 - ldr r1, _037FAA00 ; =FUN_037FA540 - bl OSi_EnterTimerCallback - mov r1, #0 - subs r0, r5, r1 - sbcs r0, r4, r1 - ldrlt r1, _037FAA04 ; =0x0000FFFE - blt _037FA9D4 - mov r0, #65536 ; 0x10000 - subs r0, r5, r0 - sbcs r0, r4, r1 - mvnlt r0, r5 - movlt r0, r0, lsl #16 - movlt r1, r0, lsr #16 -_037FA9D4: - ldr r0, _037FAA08 ; =0x04000104 - strh r1, [r0] - mov r1, #193 ; 0xc1 - ldr r0, _037FA9FC ; =0x04000106 - strh r1, [r0] - mov r0, #16 - bl OS_EnableIrqMask - add sp, sp, #4 - ldmia sp!, {r4, r5, lr} - bx lr -_037FA9FC: .word 0x04000106 -_037FAA00: .word FUN_037FA540 -_037FAA04: .word 0x0000FFFE -_037FAA08: .word 0x04000104 - arm_func_start FUN_037FAA0C FUN_037FAA0C: ; 0x037FAA0C stmdb sp!, {r4, lr} |