summaryrefslogtreecommitdiff
path: root/arm9/asm/CTRDG_task.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/asm/CTRDG_task.s')
-rw-r--r--arm9/asm/CTRDG_task.s187
1 files changed, 187 insertions, 0 deletions
diff --git a/arm9/asm/CTRDG_task.s b/arm9/asm/CTRDG_task.s
new file mode 100644
index 00000000..1d5e48b9
--- /dev/null
+++ b/arm9/asm/CTRDG_task.s
@@ -0,0 +1,187 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start CTRDGi_SetTask
+CTRDGi_SetTask: ; 0x020DD9FC
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r3, _020DDAA8 ; =0x021D6B50
+ mov r7, r0
+ mov r4, r1
+ mov r6, r2
+ ldr r5, [r3, #0x0]
+ bl CTRDGi_IsTaskAvailable
+_020DDA1C: ; 0x020DDA1C
+ cmp r0, #0x0
+ bne _020DDA28
+ bl OS_Terminate
+_020DDA28:
+ ldr r0, _020DDAAC ; =0x021D6B54
+ ldrb r0, [r0, #0x22]
+ cmp r0, #0x0
+ beq _020DDA3C
+ bl OS_Terminate
+_020DDA3C:
+ bl OS_DisableInterrupts
+ mov r1, #0x1
+ strb r1, [r7, #0x22]
+ str r4, [r7, #0x0]
+ add r1, r5, #0xc4
+ cmp r7, r1
+ mov r4, r0
+ ldreq r0, _020DDAA8 ; =0x021D6B50
+ str r6, [r7, #0x4]
+ moveq r1, #0x0
+ streq r1, [r0, #0x0]
+ ldr ip, _020DDAAC ; =0x021D6B54
+ ldmia r7!, {r0-r3}
+ mov r6, r12
+ stmia r12!, {r0-r3}
+ ldmia r7!, {r0-r3}
+ stmia r12!, {r0-r3}
+ ldr r1, [r7, #0x0]
+ mov r0, r5
+ str r1, [r12, #0x0]
+ str r6, [r5, #0xc0]
+ bl OS_WakeupThreadDirect
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020DDAA8: .word 0x021D6B50
+_020DDAAC: .word 0x021D6B54
+
+ arm_func_start CTRDGi_TaskThread
+CTRDGi_TaskThread: ; 0x020DDAB0
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x28
+ ldr r6, _020DDB94 ; =0x021D6B54
+ ldr r5, _020DDB98 ; =0x021D6B50
+ mov r4, r0
+ add r9, sp, #0x0
+ mov r8, #0x0
+ mov r7, #0x24
+_020DDAD0:
+ mov r0, r9
+ mov r1, r8
+ mov r2, r7
+ bl MI_CpuFill8
+ bl OS_DisableInterrupts
+ ldr r1, [r4, #0xc0]
+ mov r10, r0
+ cmp r1, #0x0
+ bne _020DDB08
+_020DDAF4:
+ mov r0, r8
+ bl OS_SleepThread
+ ldr r0, [r4, #0xc0]
+ cmp r0, #0x0
+ beq _020DDAF4
+_020DDB08:
+ ldr lr, [r4, #0xc0]
+ add r12, sp, #0x0
+ ldmia lr!, {r0-r3}
+ stmia r12!, {r0-r3}
+ ldmia lr!, {r0-r3}
+ stmia r12!, {r0-r3}
+ ldr r1, [lr, #0x0]
+ mov r0, r10
+ str r1, [r12, #0x0]
+ bl OS_RestoreInterrupts
+ ldr r1, [sp, #0x0]
+ cmp r1, #0x0
+ beq _020DDB48
+ mov r0, r9
+ blx r1
+ str r0, [sp, #0x8]
+_020DDB48:
+ bl OS_DisableInterrupts
+ ldr r1, [sp, #0x4]
+ mov r10, r0
+ strb r8, [r6, #0x22]
+ cmp r1, #0x0
+ beq _020DDB68
+ mov r0, r9
+ blx r1
+_020DDB68:
+ ldr r0, [r5, #0x0]
+ cmp r0, #0x0
+ beq _020DDB84
+ mov r0, r10
+ str r8, [r4, #0xc0]
+ bl OS_RestoreInterrupts
+ b _020DDAD0
+_020DDB84:
+ bl OS_ExitThread
+ add sp, sp, #0x28
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+ .balign 4
+_020DDB94: .word 0x021D6B54
+_020DDB98: .word 0x021D6B50
+
+ arm_func_start CTRDGi_InitTaskInfo
+CTRDGi_InitTaskInfo:
+ ldr ip, _020DDBAC ; =MI_CpuFill8
+ mov r1, #0x0
+ mov r2, #0x24
+ bx r12
+ .balign 4
+_020DDBAC: .word MI_CpuFill8
+
+ arm_func_start CTRDGi_IsTaskAvailable
+CTRDGi_IsTaskAvailable:
+ ldr r0, _020DDBC8 ; =0x021D6B50
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ bx lr
+ .balign 4
+_020DDBC8: .word 0x021D6B50
+
+ arm_func_start CTRDGi_InitTaskThread
+CTRDGi_InitTaskThread: ; 0x020DDBCC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ mov r5, r0
+ bl OS_DisableInterrupts
+ ldr r1, _020DDC4C ; =0x021D6B50
+ mov r4, r0
+ ldr r0, [r1, #0x0]
+ cmp r0, #0x0
+ bne _020DDC38
+ add r0, r5, #0xc4
+ str r5, [r1, #0x0]
+ bl CTRDGi_InitTaskInfo
+ ldr r0, _020DDC50 ; =0x021D6B54
+ bl CTRDGi_InitTaskInfo
+_020DDC04: ; 0x020DDC04
+ mov r0, #0x0
+ str r0, [r5, #0xc0]
+ mov r2, #0x400
+ ldr r1, _020DDC54 ; =CTRDGi_TaskThread
+ ldr r3, _020DDC58 ; =0x021D6F78
+ mov r0, r5
+ str r2, [sp, #0x0]
+ mov r2, #0x14
+ str r2, [sp, #0x4]
+ mov r2, r5
+ bl OS_CreateThread
+ mov r0, r5
+ bl OS_WakeupThreadDirect
+_020DDC38:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020DDC4C: .word 0x021D6B50
+_020DDC50: .word 0x021D6B54
+_020DDC54: .word CTRDGi_TaskThread
+_020DDC58: .word 0x021D6F78