summaryrefslogtreecommitdiff
path: root/arm7/asm/CTRDG.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm7/asm/CTRDG.s')
-rw-r--r--arm7/asm/CTRDG.s248
1 files changed, 248 insertions, 0 deletions
diff --git a/arm7/asm/CTRDG.s b/arm7/asm/CTRDG.s
new file mode 100644
index 00000000..633cbdd3
--- /dev/null
+++ b/arm7/asm/CTRDG.s
@@ -0,0 +1,248 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global CTRDGi_Work
+CTRDGi_Work: ;0x03809FB8
+ .space 0x03809FBC - 0x03809FB8
+
+ .section .text
+
+ arm_func_start CTRDGi_SendtoPxi
+CTRDGi_SendtoPxi: ;@ 0x038038C0
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r6, #1
+ mov r5, #13
+ mov r4, #0
+ b _038038E4
+_038038DC:
+ mov r0, r6
+ bl FUN_037F8CB4
+_038038E4:
+ mov r0, r5
+ mov r1, r7
+ mov r2, r4
+ bl PXI_SendWordByFifo
+ cmp r0, #0
+ bne _038038DC
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+
+ arm_func_start CTRDGi_UnlockByProcessor
+CTRDGi_UnlockByProcessor: ;@ 0x03803908
+ stmdb sp!, {r4, lr}
+ mov r4, r1
+ ldr r1, [r4]
+ cmp r1, #0
+ bne _03803920
+ bl OS_UnLockCartridge
+_03803920:
+ ldr r0, [r4, #4]
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start CTRDGi_LockByProcessor
+CTRDGi_LockByProcessor: ;@ 0x03803930
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ mov r4, r1
+ bl OS_DisableInterrupts
+ str r0, [r4, #4]
+ ldr r0, _0380398C ;@ =0x027FFFE8
+ bl OS_ReadOwnerOfLockWord
+ and r0, r0, #128 ;@ 0x80
+ str r0, [r4]
+ ldr r0, [r4]
+ cmp r0, #0
+ bne _03803974
+ mov r0, r5
+ bl OS_TryLockCartridge
+ cmp r0, #0
+ bne _0380397C
+_03803974:
+ mov r0, #1
+ b _03803980
+_0380397C:
+ mov r0, #0
+_03803980:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_0380398C: .word 0x027FFFE8
+
+ arm_func_start CTRDGi_RestoreAccessCycle
+CTRDGi_RestoreAccessCycle: ;@ 0x03803990
+ ldr r3, [r0]
+ ldr r2, _038039C0 ;@ =0x04000204
+ ldrh r1, [r2]
+ bic r1, r1, #12
+ orr r1, r1, r3, lsl #2
+ strh r1, [r2]
+ ldr r1, [r0, #4]
+ ldrh r0, [r2]
+ bic r0, r0, #16
+ orr r0, r0, r1, lsl #4
+ strh r0, [r2]
+ bx lr
+_038039C0: .word 0x04000204
+
+ arm_func_start CTRDGi_ChangeLatestAccessCycle
+CTRDGi_ChangeLatestAccessCycle: ;@ 0x038039C4
+ ldr r2, _03803A08 ;@ =0x04000204
+ ldrh r1, [r2]
+ and r1, r1, #12
+ mov r1, r1, asr #2
+ str r1, [r0]
+ ldrh r1, [r2]
+ and r1, r1, #16
+ mov r1, r1, asr #4
+ str r1, [r0, #4]
+ ldrh r0, [r2]
+ bic r0, r0, #12
+ orr r0, r0, #12
+ strh r0, [r2]
+ ldrh r0, [r2]
+ bic r0, r0, #16
+ strh r0, [r2]
+ bx lr
+_03803A08: .word 0x04000204
+
+ arm_func_start CTRDG_IsExisting
+CTRDG_IsExisting: ;@ 0x03803A0C
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #16
+ mov r4, #1
+ ldr r2, _03803B20 ;@ =0x027FFC30
+ ldrh r1, [r2]
+ ldr r0, _03803B24 ;@ =0x0000FFFF
+ cmp r1, r0
+ moveq r0, #0
+ beq _03803B14
+ ldrb r0, [r2, #5]
+ mov r0, r0, lsl #30
+ mov r0, r0, lsr #31
+ cmp r0, #1
+ moveq r0, #0
+ beq _03803B14
+ ldr r0, _03803B28 ;@ =CTRDGi_Work
+ ldrh r0, [r0, #2]
+ add r1, sp, #0
+ bl CTRDGi_LockByProcessor
+ cmp r0, #0
+ bne _03803A70
+ ldr r0, [sp, #4]
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ b _03803B14
+_03803A70:
+ add r0, sp, #8
+ bl CTRDGi_ChangeLatestAccessCycle
+ mov r2, #134217728 ;@ 0x8000000
+ ldrb r3, [r2, #178] ;@ 0xb2
+ cmp r3, #150 ;@ 0x96
+ bne _03803A9C
+ ldr r0, _03803B20 ;@ =0x027FFC30
+ ldrh r1, [r0]
+ ldrh r0, [r2, #190] ;@ 0xbe
+ cmp r1, r0
+ bne _03803AE4
+_03803A9C:
+ cmp r3, #150 ;@ 0x96
+ beq _03803ABC
+ ldr r0, _03803B20 ;@ =0x027FFC30
+ ldrh r1, [r0]
+ ldr r0, _03803B2C ;@ =0x0801FFFE
+ ldrh r0, [r0]
+ cmp r1, r0
+ bne _03803AE4
+_03803ABC:
+ ldr r2, _03803B20 ;@ =0x027FFC30
+ ldr r1, [r2, #8]
+ mov r0, #134217728 ;@ 0x8000000
+ ldr r0, [r0, #172] ;@ 0xac
+ cmp r1, r0
+ beq _03803AF8
+ ldrb r0, [r2, #5]
+ mov r0, r0, lsl #31
+ movs r0, r0, lsr #31
+ beq _03803AF8
+_03803AE4:
+ ldr r1, _03803B20 ;@ =0x027FFC30
+ ldrb r0, [r1, #5]
+ orr r0, r0, #2
+ strb r0, [r1, #5]
+ mov r4, #0
+_03803AF8:
+ add r0, sp, #8
+ bl CTRDGi_RestoreAccessCycle
+ ldr r0, _03803B28 ;@ =CTRDGi_Work
+ ldrh r0, [r0, #2]
+ add r1, sp, #0
+ bl CTRDGi_UnlockByProcessor
+ mov r0, r4
+_03803B14:
+ add sp, sp, #16
+ ldmia sp!, {r4, lr}
+ bx lr
+_03803B20: .word 0x027FFC30
+_03803B24: .word 0x0000FFFF
+_03803B28: .word CTRDGi_Work
+_03803B2C: .word 0x0801FFFE
+
+ arm_func_start CTRDG_IsPulledOut
+CTRDG_IsPulledOut: ;@ 0x03803B30
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r2, _03803B80 ;@ =0x027FFC30
+ ldrh r1, [r2]
+ ldr r0, _03803B84 ;@ =0x0000FFFF
+ cmp r1, r0
+ moveq r0, #0
+ beq _03803B74
+ ldrb r0, [r2, #5]
+ mov r0, r0, lsl #30
+ movs r0, r0, lsr #31
+ bne _03803B64
+ bl CTRDG_IsExisting
+_03803B64:
+ ldr r0, _03803B80 ;@ =0x027FFC30
+ ldrb r0, [r0, #5]
+ mov r0, r0, lsl #30
+ mov r0, r0, lsr #31
+_03803B74:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03803B80: .word 0x027FFC30
+_03803B84: .word 0x0000FFFF
+
+ arm_func_start CTRDGi_InitCommon
+CTRDGi_InitCommon: ;@ 0x03803B88
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r0, #0
+ str r0, [sp]
+ add r0, sp, #0
+ ldr r1, _03803BC0 ;@ =CTRDGi_Work
+ ldr r2, _03803BC4 ;@ =0x05000001
+ bl FUN_03803BC8
+ bl OS_GetLockID
+ ldr r1, _03803BC0 ;@ =CTRDGi_Work
+ strh r0, [r1, #2]
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03803BC0: .word CTRDGi_Work
+_03803BC4: .word 0x05000001
+
+ arm_func_start FUN_03803BC8
+FUN_03803BC8: ;@ 0x03803BC8
+ ldr ip, _03803BD0 ;@ =SVC_CpuSet
+ bx ip
+_03803BD0: .word SVC_CpuSet