diff options
Diffstat (limited to 'arm7/asm/CTRDG_sp.s')
-rw-r--r-- | arm7/asm/CTRDG_sp.s | 542 |
1 files changed, 542 insertions, 0 deletions
diff --git a/arm7/asm/CTRDG_sp.s b/arm7/asm/CTRDG_sp.s new file mode 100644 index 00000000..72c502c3 --- /dev/null +++ b/arm7/asm/CTRDG_sp.s @@ -0,0 +1,542 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .data + + .global _03807704 +_03807704: + .word 0x00000001 + + .global _03807708 +_03807708: + .word 0xFFFFFFFF + + .section .bss + + .global _03809FBC +_03809FBC: ;0x03809FBC + .space 0x03809FC0 - 0x03809FBC + + .global current_vib +current_vib: ;0x03809FC0 + .space 0x03809FC4 - 0x03809FC0 + + .global _03809FC4 +_03809FC4: ;0x03809FC4 + .space 0x03809FC8 - 0x03809FC4 + + .global _03809FC8 +_03809FC8: ;0x03809FC8 + .space 0x03809FCC - 0x03809FC8 + + .global _03809FCC +_03809FCC: ;0x03809FCC + .space 0x03809FD0 - 0x03809FCC + + .global _03809FD0 +_03809FD0: ;0x03809FD0 + .space 0x03809FD4 - 0x03809FD0 + + .global _03809FD4 +_03809FD4: ;0x03809FD4 + .space 0x03809FEC - 0x03809FD4 + + .global _03809FEC +_03809FEC: ;0x03809FEC + .space 0x0380A018 - 0x03809FEC + + .section .text + + arm_func_start FUN_03803BD4 +FUN_03803BD4: ;@ 0x03803BD4 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + and r0, r1, #63 ;@ 0x3f + cmp r0, #3 + bne _03803C40 + ldr r0, _03803C50 ;@ =0x01FFFFC0 + and r0, r1, r0 + mov r2, r0, lsr #6 + ldr r1, _03803C54 ;@ =0x04000204 + ldrh r0, [r1] + bic r0, r0, #96 ;@ 0x60 + orr r0, r0, r2, lsl #5 + strh r0, [r1] + mov r7, #1 + mov r6, #17 + mov r5, #18 + mov r4, #0 + b _03803C24 +_03803C1C: + mov r0, r7 + bl FUN_037F8CB4 +_03803C24: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl PXI_SendWordByFifo + cmp r0, #0 + bne _03803C1C + b _03803C44 +_03803C40: + bl OS_Terminate +_03803C44: + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr +_03803C50: .word 0x01FFFFC0 +_03803C54: .word 0x04000204 + + arm_func_start CTRDGi_TerminateARM7 +CTRDGi_TerminateARM7: ;@ 0x03803C58 + stmfd sp!, {lr} + sub sp, sp, #4 + mov r0, #0 + bl CTRDG_VibPulseEdgeUpdate + bl SND_BeginSleep + bl WVR_Shutdown + bl OS_Terminate + add sp, sp, #4 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDG_CheckPullOut_Polling +CTRDG_CheckPullOut_Polling: ;@ 0x03803C80 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + ldr r1, _03803D80 ;@ =_03807708 + ldr r3, [r1] + mvn r0, #0 + cmp r3, r0 + ldreq r0, _03803D84 ;@ =0x027FFC3C + ldreq r0, [r0] + addeq r0, r0, #10 + streq r0, [r1] + beq _03803D74 + ldr r0, _03803D88 ;@ =_03809FCC + ldr r0, [r0] + cmp r0, #0 + bne _03803D74 + ldr r0, _03803D8C ;@ =_03809FC8 + ldr r0, [r0] + cmp r0, #0 + bne _03803D74 + ldr r2, _03803D84 ;@ =0x027FFC3C + ldr r0, [r2] + cmp r0, r3 + bcc _03803D74 + ldr r0, [r2] + add r0, r0, #10 + str r0, [r1] + bl CTRDG_IsPulledOut + ldr r1, _03803D8C ;@ =_03809FC8 + str r0, [r1] + bl CTRDG_IsExisting + cmp r0, #0 + bne _03803D28 + ldr r0, _03803D90 ;@ =_03807704 + ldr r0, [r0] + cmp r0, #0 + movne r1, #1 + ldrne r0, _03803D88 ;@ =_03809FCC + strne r1, [r0] + bne _03803D74 + mov r1, #1 + ldr r0, _03803D8C ;@ =_03809FC8 + str r1, [r0] +_03803D28: + mov r7, #0 + ldr r0, _03803D90 ;@ =_03807704 + str r7, [r0] + ldr r0, _03803D8C ;@ =_03809FC8 + ldr r0, [r0] + cmp r0, #0 + beq _03803D74 + mov r6, #100 ;@ 0x64 + mov r5, #13 + mov r4, #17 + b _03803D5C +_03803D54: + mov r0, r6 + bl OS_Sleep +_03803D5C: + mov r0, r5 + mov r1, r4 + mov r2, r7 + bl PXI_SendWordByFifo + cmp r0, #0 + bne _03803D54 +_03803D74: + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr +_03803D80: .word _03807708 +_03803D84: .word 0x027FFC3C +_03803D88: .word _03809FCC +_03803D8C: .word _03809FC8 +_03803D90: .word _03807704 + + arm_func_start CTRDGi_IsNinLogoOfAgb +CTRDGi_IsNinLogoOfAgb: ;@ 0x03803D94 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r7, r0 + mov r0, #134217728 ;@ 0x8000000 + add r6, r0, #4 + mov r4, #1 + bl OS_GetLockID + mov r0, r0, lsl #16 + mov r5, r0, lsr #16 + mov r0, r5 + bl OS_LockCartridge + mov r1, #0 + ldr r0, _03803E3C ;@ =0x0000FFFF + eor r2, r0, #3 + mov r2, r2, lsl #16 + mov lr, r2, lsr #16 + eor r2, r0, #132 ;@ 0x84 + mov r2, r2, lsl #16 + mov r8, r2, lsr #16 + b _03803E18 +_03803DE0: + mov ip, r0 + cmp r1, #76 ;@ 0x4c + moveq ip, r8 + beq _03803DF8 + cmp r1, #77 ;@ 0x4d + moveq ip, lr +_03803DF8: + mov r3, r1, lsl #1 + ldrh r2, [r7, r3] + and ip, ip, r2 + ldrh r2, [r6, r3] + cmp ip, r2 + movne r4, #0 + bne _03803E20 + add r1, r1, #1 +_03803E18: + cmp r1, #78 ;@ 0x4e + blt _03803DE0 +_03803E20: + mov r0, r5 + bl OS_UnLockCartridge + mov r0, r5 + bl OS_ReleaseLockID + mov r0, r4 + ldmia sp!, {r4, r5, r6, r7, r8, lr} + bx lr +_03803E3C: .word 0x0000FFFF + + arm_func_start FUN_03803E40 +FUN_03803E40: ;@ 0x03803E40 + ldr r1, _03803E54 ;@ =current_vib + str r0, [r1] + ldr r1, _03803E58 ;@ =0x08001000 + strh r0, [r1] + bx lr +_03803E54: .word current_vib +_03803E58: .word 0x08001000 + + arm_func_start CTRDG_VibPulseEdgeUpdate +CTRDG_VibPulseEdgeUpdate: ;@ 0x03803E5C + stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + sub sp, sp, #4 + movs r5, r0 + beq _03803E9C + ldr r0, [r5] + cmp r0, #0 + bne _03803E9C + ldr r0, [r5, #68] ;@ 0x44 + add r0, r0, #1 + str r0, [r5, #68] ;@ 0x44 + ldr r1, [r5, #64] ;@ 0x40 + cmp r1, #0 + beq _03803E9C + ldr r0, [r5, #68] ;@ 0x44 + cmp r0, r1 + movhi r5, #0 +_03803E9C: + cmp r5, #0 + beq _03803EB0 + ldr r0, [r5, #60] ;@ 0x3c + cmp r0, #0 + bne _03803F48 +_03803EB0: + bl OS_DisableInterrupts + mov r9, r0 + ldr r0, _03804068 ;@ =current_vib + ldr r0, [r0] + cmp r0, #2 + bne _03803F34 + mov r8, #0 + ldr r7, _0380406C ;@ =0x027FFFE8 + ldr r4, _03804070 ;@ =_03809FBC + ldr fp, _03804074 ;@ =0x000080E8 + mov r6, r8 + mov r5, #1 + b _03803F2C +_03803EE4: + mov r0, r7 + bl OS_ReadOwnerOfLockWord + ands sl, r0, #128 ;@ 0x80 + bne _03803F04 + ldrh r0, [r4] + bl OS_TryLockCartridge + cmp r0, #0 + bne _03803F24 +_03803F04: + mov r0, r6 + bl FUN_03803E40 + mov r8, r5 + cmp sl, #0 + bne _03803F2C + ldrh r0, [r4] + bl OS_UnlockCartridge + b _03803F2C +_03803F24: + mov r0, fp + bl OS_SpinWait +_03803F2C: + cmp r8, #0 + beq _03803EE4 +_03803F34: + ldr r0, _03804078 ;@ =_03809FEC + bl OS_CancelAlarm + mov r0, r9 + bl OS_RestoreInterrupts + b _0380405C +_03803F48: + cmp r5, #0 + beq _0380405C + ldr r0, _0380406C ;@ =0x027FFFE8 + bl OS_ReadOwnerOfLockWord + ands r4, r0, #128 ;@ 0x80 + bne _03803F74 + ldr r0, _03804070 ;@ =_03809FBC + ldrh r0, [r0] + bl OS_TryLockCartridge + cmp r0, #0 + bne _03804044 +_03803F74: + ldr r1, [r5] + ldr r0, [r5, #4] + cmp r1, r0 + bne _03803FB0 + mov r0, #0 + bl FUN_03803E40 + str r5, [sp] + ldr r0, _03804078 ;@ =_03809FEC + ldr r1, [r5, #8] + mov r2, #0 + ldr r3, _0380407C ;@ =CTRDG_VibPulseEdgeUpdate + bl OS_SetAlarm + mov r0, #0 + str r0, [r5] + b _0380402C +_03803FB0: + ands r0, r1, #1 + beq _03803FF4 + mov r0, #0 + bl FUN_03803E40 + str r5, [sp] + ldr r0, _03804078 ;@ =_03809FEC + ldr r1, [r5] + mov r1, r1, lsr #1 + add r1, r5, r1, lsl #2 + ldr r1, [r1, #36] ;@ 0x24 + mov r2, #0 + ldr r3, _0380407C ;@ =CTRDG_VibPulseEdgeUpdate + bl OS_SetAlarm + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _0380402C +_03803FF4: + mov r0, #2 + bl FUN_03803E40 + str r5, [sp] + ldr r0, _03804078 ;@ =_03809FEC + ldr r1, [r5] + mov r1, r1, lsr #1 + add r1, r5, r1, lsl #2 + ldr r1, [r1, #12] + mov r2, #0 + ldr r3, _0380407C ;@ =CTRDG_VibPulseEdgeUpdate + bl OS_SetAlarm + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] +_0380402C: + cmp r4, #0 + bne _0380405C + ldr r0, _03804070 ;@ =_03809FBC + ldrh r0, [r0] + bl OS_UnlockCartridge + b _0380405C +_03804044: + str r5, [sp] + ldr r0, _03804078 ;@ =_03809FEC + ldr r1, _03804080 ;@ =0x0000020B + mov r2, #0 + ldr r3, _0380407C ;@ =CTRDG_VibPulseEdgeUpdate + bl OS_SetAlarm +_0380405C: + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + bx lr +_03804068: .word current_vib +_0380406C: .word 0x027FFFE8 +_03804070: .word _03809FBC +_03804074: .word 0x000080E8 +_03804078: .word _03809FEC +_0380407C: .word CTRDG_VibPulseEdgeUpdate +_03804080: .word 0x0000020B +_03804084: + mov r0, r1 + ldr ip, _03804090 ;@ =CTRDG_VibPulseEdgeUpdate + bx ip +_03804090: .word CTRDG_VibPulseEdgeUpdate + + arm_func_start CTRDGi_CallbackForPulledOut +CTRDGi_CallbackForPulledOut: ;@ 0x03804094 + stmfd sp!, {lr} + sub sp, sp, #4 + and r0, r1, #63 ;@ 0x3ff + cmp r0, #2 + bne _038040B0 + bl CTRDGi_TerminateARM7 + b _038040B4 +_038040B0: + bl OS_Terminate +_038040B4: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_CallbackForInitModuleInfo +CTRDGi_CallbackForInitModuleInfo: ;@ 0x038040C0 + stmfd sp!, {lr} + sub sp, sp, #4 + and r0, r1, #63 ;@ 0x3f + cmp r0, #1 + ldreq r0, _038040F4 ;@ =_03809FD4 + streq r1, [r0] + moveq r1, #1 + streq r1, [r0, #16] + beq _038040E8 + bl OS_Terminate +_038040E8: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_038040F4: .word _03809FD4 + + arm_func_start CTRDGi_InitModuleInfo +CTRDGi_InitModuleInfo: ;@ 0x038040F8 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + ldr r0, _038041C8 ;@ =_03809FC4 + ldr r1, [r0] + cmp r1, #0 + bne _038041BC + mov r1, #1 + str r1, [r0] + ldr r0, _038041CC ;@ =0x04000300 + ldrh r0, [r0] + ands r0, r0, #1 + beq _038041BC + mov r0, #262144 ;@ 0x40000 + bl OS_SetIrqMask + mov r5, r0 + ldr r1, _038041D0 ;@ =0x04000208 + ldrh r4, [r1] + mov r0, #1 + strh r0, [r1] + mov r7, #256 ;@ 0x100 + ldr r6, _038041D4 ;@ =_03809FD4 + b _03804158 +_03804150: + mov r0, r7 + bl FUN_037F8CB4 +_03804158: + ldr r0, [r6, #16] + cmp r0, #1 + bne _03804150 + ldr r1, [r6] + ldr r0, _038041D8 ;@ =0x01FFFFC0 + and r0, r1, r0 + mov r0, r0, lsr #6 + mov r0, r0, lsl #5 + add r0, r0, #33554432 ;@ 0x2000000 + add r0, r0, #4 + bl CTRDGi_IsNinLogoOfAgb + ldr r2, _038041DC ;@ =0x027FFC30 + ldrb r1, [r2, #5] + bic r1, r1, #1 + and r0, r0, #255 ;@ 0xff + and r0, r0, #1 + orr r0, r1, r0 + strb r0, [r2, #5] + mov r0, #1 + bl CTRDGi_SendtoPxi + ldr r1, _038041D0 ;@ =0x04000208 + ldrh r0, [r1] + strh r4, [r1] + mov r0, r5 + bl OS_SetIrqMask +_038041BC: + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr +_038041C8: .word _03809FC4 +_038041CC: .word 0x04000300 +_038041D0: .word 0x04000208 +_038041D4: .word _03809FD4 +_038041D8: .word 0x01FFFFC0 +_038041DC: .word 0x027FFC30 + + arm_func_start CTRDG_Init +CTRDG_Init: ;@ 0x038041E0 + stmfd sp!, {lr} + sub sp, sp, #4 + bl OS_InitTick + bl OS_InitAlarm + ldr r0, _03804270 ;@ =_03809FEC + bl OS_CreateAlarm + ldr r0, _03804274 ;@ =_03809FD0 + ldr r1, [r0] + cmp r1, #0 + bne _03804264 + mov r1, #1 + str r1, [r0] + bl CTRDGi_InitCommon + bl OS_GetLockID + mvn r1, #2 + cmp r0, r1 + beq _03804264 + ldr r1, _03804278 ;@ =_03809FBC + strh r0, [r1] + bl PXI_Init + mov r0, #13 + ldr r1, _0380427C ;@ =CTRDGi_CallbackForInitModuleInfo + bl PXI_SetFifoRecvCallback + bl CTRDGi_InitModuleInfo + mov r0, #13 + ldr r1, _03804280 ;@ =CTRDGi_CallbackForPulledOut + bl PXI_SetFifoRecvCallback + mov r0, #16 + ldr r1, _03804284 ;@ =_03804084 + bl PXI_SetFifoRecvCallback + mov r0, #17 + ldr r1, _03804288 ;@ =FUN_03803BD4 + bl PXI_SetFifoRecvCallback +_03804264: + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_03804270: .word _03809FEC +_03804274: .word _03809FD0 +_03804278: .word _03809FBC +_0380427C: .word CTRDGi_CallbackForInitModuleInfo +_03804280: .word CTRDGi_CallbackForPulledOut +_03804284: .word _03804084 +_03804288: .word FUN_03803BD4 |