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