diff options
-rw-r--r-- | arm7/arm7.lsf | 1 | ||||
-rw-r--r-- | arm7/asm/CTRDG.s | 248 | ||||
-rw-r--r-- | arm7/asm/wram2.s | 238 | ||||
-rw-r--r-- | arm7/asm/wram_bss.s | 4 | ||||
-rw-r--r-- | arm7/global.inc | 4 |
5 files changed, 253 insertions, 242 deletions
diff --git a/arm7/arm7.lsf b/arm7/arm7.lsf index 55e2a33a..038c37c5 100644 --- a/arm7/arm7.lsf +++ b/arm7/arm7.lsf @@ -67,6 +67,7 @@ Autoload WRAM Object SPI_tp.o Object SPI_pm.o Object SPI_mic.o + Object CTRDG.o Object wram2.o Object wram_data.o Object wram_bss.o 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 diff --git a/arm7/asm/wram2.s b/arm7/asm/wram2.s index 513bba1a..4e48222d 100644 --- a/arm7/asm/wram2.s +++ b/arm7/asm/wram2.s @@ -3,244 +3,6 @@ .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 - arm_func_start FUN_03803BD4 FUN_03803BD4: ;@ 0x03803BD4 stmdb sp!, {r4, r5, r6, r7, lr} diff --git a/arm7/asm/wram_bss.s b/arm7/asm/wram_bss.s index e4322f0a..5d53542a 100644 --- a/arm7/asm/wram_bss.s +++ b/arm7/asm/wram_bss.s @@ -2,10 +2,6 @@ .include "global.inc" .section .bss - .global CTRDGi_Work -CTRDGi_Work: ;0x03809FB8 - .space 0x03809FBC - 0x03809FB8 - .global _03809FBC _03809FBC: ;0x03809FBC .space 0x03809FC0 - 0x03809FBC diff --git a/arm7/global.inc b/arm7/global.inc index a90c17cb..1b3a3fc5 100644 --- a/arm7/global.inc +++ b/arm7/global.inc @@ -244,9 +244,13 @@ .extern TP_AnalyzeCommand
.extern TP_ExecuteProcess
.extern TP_Init
+.extern CTRDGi_InitCommon
+.extern CTRDGi_SendtoPxi
.extern CTRDG_CheckPullOut_Polling
.extern CTRDG_VibPulseEdgeUpdate
.extern CTRDG_Init
+.extern CTRDG_IsExisting
+.extern CTRDG_IsPulledOut
.extern NVRAM_AnalyzeCommand
.extern NVRAM_ExecuteProcess
.extern NVRAM_Init
|