From 3f833281144c32ab7452639c060fd4fb01c8d63f Mon Sep 17 00:00:00 2001 From: Made Date: Wed, 6 May 2020 02:02:35 +0200 Subject: Decompile GX_asm and GX_g3 --- arm9/asm/GX_asm.s | 16 ------------ arm9/asm/GX_g3.s | 72 --------------------------------------------------- arm9/lib/include/gx.h | 24 +++++++++++++++++ arm9/lib/src/GX_asm.c | 16 ++++++++++++ arm9/lib/src/GX_g3.c | 36 ++++++++++++++++++++++++++ 5 files changed, 76 insertions(+), 88 deletions(-) delete mode 100644 arm9/asm/GX_asm.s delete mode 100644 arm9/asm/GX_g3.s create mode 100644 arm9/lib/include/gx.h create mode 100644 arm9/lib/src/GX_asm.c create mode 100644 arm9/lib/src/GX_g3.c diff --git a/arm9/asm/GX_asm.s b/arm9/asm/GX_asm.s deleted file mode 100644 index ae9b81e3..00000000 --- a/arm9/asm/GX_asm.s +++ /dev/null @@ -1,16 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start GX_SendFifo48B -GX_SendFifo48B: ; 0x020C9BE8 - ldmia r0!, {r2-r3,r12} - stmia r1, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1, {r2-r3,r12} - ldmia r0!, {r2-r3,r12} - stmia r1, {r2-r3,r12} - bx lr diff --git a/arm9/asm/GX_g3.s b/arm9/asm/GX_g3.s deleted file mode 100644 index 078ddf22..00000000 --- a/arm9/asm/GX_g3.s +++ /dev/null @@ -1,72 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start G3_EndMakeDL -G3_EndMakeDL: ; 0x020C9B18 - ldr r3, [r0, #0x0] - ldr r2, [r0, #0x8] - cmp r2, r3 - moveq r0, #0x0 - bxeq lr - and r1, r3, #0x3 - cmp r1, #0x3 - addls pc, pc, r1, lsl #0x2 - b _020C9B8C -_020C9B3C: - b _020C9B4C -_020C9B40: - b _020C9B54 -_020C9B44: - b _020C9B64 -_020C9B48: - b _020C9B78 -_020C9B4C: - sub r0, r3, r2 - bx lr -_020C9B54: - add r1, r3, #0x1 - str r1, [r0, #0x0] - mov r1, #0x0 - strb r1, [r3, #0x0] -_020C9B64: - ldr r3, [r0, #0x0] - mov r1, #0x0 - add r2, r3, #0x1 - str r2, [r0, #0x0] - strb r1, [r3, #0x0] -_020C9B78: - ldr r3, [r0, #0x0] - mov r1, #0x0 - add r2, r3, #0x1 - str r2, [r0, #0x0] - strb r1, [r3, #0x0] -_020C9B8C: - ldr r1, [r0, #0x10] - cmp r1, #0x0 - beq _020C9BB0 - ldr r3, [r0, #0x4] - mov r1, #0x0 - add r2, r3, #0x4 - str r2, [r0, #0x4] - str r1, [r3, #0x0] - str r1, [r0, #0x10] -_020C9BB0: - ldr r1, [r0, #0x4] - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - ldr r0, [r0, #0x8] - sub r0, r1, r0 - bx lr - - arm_func_start G3_BeginMakeDL -G3_BeginMakeDL: ; 0x020C9BC8 - str r2, [r0, #0xc] - str r1, [r0, #0x8] - str r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - mov r1, #0x0 - str r1, [r0, #0x10] - bx lr diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h new file mode 100644 index 00000000..ad3f1a6e --- /dev/null +++ b/arm9/lib/include/gx.h @@ -0,0 +1,24 @@ +#ifndef GUARD_GX_H +#define GUARD_GX_H + +struct DL +{ + u8 *var00; //end pointer + u32 *var04; //aligned end pointer + u8 *var08; //start pointer + u32 var0C; + u32 var10; //pad end with zero bool +}; + +//GX_g3 +void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2); +s32 G3_EndMakeDL(struct DL *displaylist); + + +//GX_asm +void GX_SendFifo48B(void *src, void *dst); + + +//GXi_NopClearFifo128_ probably asm + +#endif //GUARD_GX_H diff --git a/arm9/lib/src/GX_asm.c b/arm9/lib/src/GX_asm.c new file mode 100644 index 00000000..1eb0a011 --- /dev/null +++ b/arm9/lib/src/GX_asm.c @@ -0,0 +1,16 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +//looks like asm and says asm on the tin... +ARM_FUNC asm void GX_SendFifo48B(void *src, void *dst){ + ldmia r0!, {r2-r3,r12} + stmia r1, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + stmia r1, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + stmia r1, {r2-r3,r12} + ldmia r0!, {r2-r3,r12} + stmia r1, {r2-r3,r12} + bx lr +} diff --git a/arm9/lib/src/GX_g3.c b/arm9/lib/src/GX_g3.c new file mode 100644 index 00000000..66e34dc7 --- /dev/null +++ b/arm9/lib/src/GX_g3.c @@ -0,0 +1,36 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + + +void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2){ + displaylist->var0C = r2; + displaylist->var08 = r1; + displaylist->var00 = r1; + displaylist->var04 = (u32 *)r1 + 1; + displaylist->var10 = 0x0; +} + +s32 G3_EndMakeDL(struct DL *displaylist){ + if (displaylist->var08 == displaylist->var00) + return 0; + //pads the buffer with 0 to 4byte alignment if needed + switch((u32)displaylist->var00 & 0x3) + { + case 0: + return displaylist->var00 - displaylist->var08; + case 1: + *displaylist->var00++ = 0x0; + case 2: + *displaylist->var00++ = 0x0; + case 3: + *displaylist->var00++ = 0x0; + } + if (displaylist->var10) + { + *displaylist->var04++ = 0x0; + displaylist->var10 = 0x0; + } + displaylist->var00 = (u8 *)displaylist->var04; + return displaylist->var00 - displaylist->var08; +} -- cgit v1.2.3 From 6d3d11491cf6e8289822d2c5ba9cd7e309a5ce11 Mon Sep 17 00:00:00 2001 From: Made Date: Wed, 6 May 2020 23:41:54 +0200 Subject: Decompile GX_g3b.s and GX_g3x.s --- arm9/asm/GX_g3b.s | 269 -------------------------- arm9/asm/GX_g3x.s | 503 ------------------------------------------------ arm9/lib/include/gx.h | 70 ++++++- arm9/lib/src/GX_g3b.c | 122 ++++++++++++ arm9/lib/src/GX_g3x.c | 242 +++++++++++++++++++++++ arm9/undefined_syms.txt | 1 + 6 files changed, 434 insertions(+), 773 deletions(-) delete mode 100644 arm9/asm/GX_g3b.s delete mode 100644 arm9/asm/GX_g3x.s create mode 100644 arm9/lib/src/GX_g3b.c create mode 100644 arm9/lib/src/GX_g3x.c diff --git a/arm9/asm/GX_g3b.s b/arm9/asm/GX_g3b.s deleted file mode 100644 index 5bb7ac21..00000000 --- a/arm9/asm/GX_g3b.s +++ /dev/null @@ -1,269 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start G3B_End -G3B_End: ; 0x020C75AC - ldr r1, [r0, #0x0] - mov r2, #0x41 - str r2, [r1, #0x0] - ldr r1, [r0, #0x4] - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - bx lr - - arm_func_start G3B_Begin -G3B_Begin: ; 0x020C75D0 - ldr r2, [r0, #0x0] - mov r3, #0x40 - str r3, [r2, #0x0] - ldr r2, [r0, #0x4] - str r1, [r2, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - bx lr - - arm_func_start G3B_LightColor -G3B_LightColor: ; 0x020C7600 - ldr r3, [r0, #0x0] - mov r12, #0x33 - str r12, [r3, #0x0] - ldr r3, [r0, #0x4] - orr r1, r2, r1, lsl #0x1e - str r1, [r3, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - bx lr - - arm_func_start G3B_LightVector -G3B_LightVector: ; 0x020C7634 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr ip, _020C7694 ; =0x000003FF - ldrsh r4, [sp, #0x10] - ldr lr, [r0, #0x0] - mov r5, #0x32 - str r5, [lr, #0x0] - and lr, r12, r2, asr #0x3 - and r2, r12, r3, asr #0x3 - and r3, r12, r4, asr #0x3 - orr r2, lr, r2, lsl #0xa - orr r3, r2, r3, lsl #0x14 - ldr r2, [r0, #0x4] - orr r1, r3, r1, lsl #0x1e - str r1, [r2, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020C7694: .word 0x000003FF - - arm_func_start G3B_MaterialColorSpecEmi -G3B_MaterialColorSpecEmi: ; 0x020C7698 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r12, [r0, #0x0] - mov lr, #0x31 - cmp r3, #0x0 - movne r3, #0x1 - str lr, [r12, #0x0] - orr r2, r1, r2, lsl #0x10 - moveq r3, #0x0 - ldr r1, [r0, #0x4] - orr r2, r2, r3, lsl #0xf - str r2, [r1, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start G3B_MaterialColorDiffAmb -G3B_MaterialColorDiffAmb: ; 0x020C76EC - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r12, [r0, #0x0] - mov lr, #0x30 - cmp r3, #0x0 - movne r3, #0x1 - str lr, [r12, #0x0] - orr r2, r1, r2, lsl #0x10 - moveq r3, #0x0 - ldr r1, [r0, #0x4] - orr r2, r2, r3, lsl #0xf - str r2, [r1, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start G3B_PolygonAttr -G3B_PolygonAttr: ; 0x020C7740 - orr r1, r1, r2, lsl #0x4 - ldr r2, [r0, #0x0] - mov r12, #0x29 - str r12, [r2, #0x0] - ldr r2, [sp, #0x8] - orr r1, r1, r3, lsl #0x6 - ldr r3, [sp, #0x0] - orr r1, r2, r1 - ldr r12, [sp, #0x4] - orr r2, r1, r3, lsl #0x18 - ldr r1, [r0, #0x4] - orr r2, r2, r12, lsl #0x10 - str r2, [r1, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - bx lr - - arm_func_start G3B_Vtx -G3B_Vtx: ; 0x020C7790 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r12, [r0, #0x0] - mov lr, #0x23 - str lr, [r12, #0x0] - mov r1, r1, lsl #0x10 - mov r2, r2, lsl #0x10 - mov lr, r1, lsr #0x10 - mov r12, r2, lsr #0x10 - mov r1, r3, lsl #0x10 - ldr r2, [r0, #0x4] - orr r3, lr, r12, lsl #0x10 - str r3, [r2, #0x0] - ldr r2, [r0, #0x4] - mov r1, r1, lsr #0x10 - str r1, [r2, #0x4] - ldr r1, [r0, #0x4] - add r1, r1, #0x8 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start G3B_Normal -G3B_Normal: ; 0x020C77F4 - stmdb sp!, {r4,lr} - ldr ip, _020C7844 ; =0x000003FF - ldr lr, [r0, #0x0] - mov r4, #0x21 - str r4, [lr, #0x0] - and lr, r12, r1, asr #0x3 - and r1, r12, r2, asr #0x3 - and r3, r12, r3, asr #0x3 - orr r2, lr, r1, lsl #0xa - ldr r1, [r0, #0x4] - orr r2, r2, r3, lsl #0x14 - str r2, [r1, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C7844: .word 0x000003FF - - arm_func_start G3B_Color -G3B_Color: ; 0x020C7848 - ldr r2, [r0, #0x0] - mov r3, #0x20 - str r3, [r2, #0x0] - ldr r2, [r0, #0x4] - str r1, [r2, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - bx lr - - arm_func_start G3B_LoadMtx44 -G3B_LoadMtx44: ; 0x020C7878 - stmdb sp!, {r4,lr} - mov r4, r0 - bl G3BS_LoadMtx44 - ldr r0, [r4, #0x4] - add r0, r0, #0x40 - str r0, [r4, #0x0] - ldr r0, [r4, #0x0] - add r0, r0, #0x4 - str r0, [r4, #0x4] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start G3B_PopMtx -G3B_PopMtx: ; 0x020C78A4 - ldr r2, [r0, #0x0] - mov r3, #0x12 - str r3, [r2, #0x0] - ldr r2, [r0, #0x4] - str r1, [r2, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, #0x4 - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - bx lr - - arm_func_start G3B_PushMtx -G3B_PushMtx: ; 0x020C78D4 - ldr r1, [r0, #0x0] - mov r2, #0x11 - str r2, [r1, #0x0] - ldr r1, [r0, #0x4] - str r1, [r0, #0x0] - ldr r1, [r0, #0x0] - add r1, r1, #0x4 - str r1, [r0, #0x4] - bx lr - - arm_func_start G3BS_LoadMtx44 -G3BS_LoadMtx44: ; 0x020C78F8 - mov r3, r0 - ldr r0, [r3, #0x0] - mov r2, #0x16 - str r2, [r0, #0x0] - mov r0, r1 - ldr ip, _020C7918 ; =MI_Copy64B - ldr r1, [r3, #0x4] - bx r12 - .balign 4 -_020C7918: .word MI_Copy64B diff --git a/arm9/asm/GX_g3x.s b/arm9/asm/GX_g3x.s deleted file mode 100644 index a8513372..00000000 --- a/arm9/asm/GX_g3x.s +++ /dev/null @@ -1,503 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start GXi_NopClearFifo128_ -GXi_NopClearFifo128_: ; 0x020C7970 - mov r1, #0x0 - mov r2, #0x0 - mov r3, #0x0 - mov r12, #0x0 - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - stmia r0, {r1-r3,r12} - bx lr - - arm_func_start G3X_SetHOffset -G3X_SetHOffset: ; 0x020C7A04 - ldr r1, _020C7A10 ; =0x04000010 - str r0, [r1, #0x0] - bx lr - .balign 4 -_020C7A10: .word 0x04000010 - - arm_func_start G3X_GetBoxTestResult -G3X_GetBoxTestResult: ; 0x020C7A14 - ldr r2, _020C7A38 ; =0x04000600 - ldr r1, [r2, #0x0] - ands r1, r1, #0x1 - ldreq r1, [r2, #0x0] - mvnne r0, #0x0 - andeq r1, r1, #0x2 - streq r1, [r0, #0x0] - moveq r0, #0x0 - bx lr - .balign 4 -_020C7A38: .word 0x04000600 - - arm_func_start G3X_GetMtxStackLevelPJ -G3X_GetMtxStackLevelPJ: - ldr r2, _020C7A64 ; =0x04000600 - ldr r1, [r2, #0x0] - ands r1, r1, #0x4000 - ldreq r1, [r2, #0x0] - mvnne r0, #0x0 - andeq r1, r1, #0x2000 - moveq r1, r1, lsr #0xd - streq r1, [r0, #0x0] - moveq r0, #0x0 - bx lr - .balign 4 -_020C7A64: .word 0x04000600 - - arm_func_start G3X_GetMtxStackLevelPV -G3X_GetMtxStackLevelPV: - ldr r2, _020C7A90 ; =0x04000600 - ldr r1, [r2, #0x0] - ands r1, r1, #0x4000 - ldreq r1, [r2, #0x0] - mvnne r0, #0x0 - andeq r1, r1, #0x1f00 - moveq r1, r1, lsr #0x8 - streq r1, [r0, #0x0] - moveq r0, #0x0 - bx lr - .balign 4 -_020C7A90: .word 0x04000600 - - arm_func_start G3X_InitTable -G3X_InitTable: ; 0x020C7A94 - stmdb sp!, {lr} - sub sp, sp, #0xc - ldr r0, _020C7B2C ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C7AE4 - mov r2, #0x0 - str r2, [sp, #0x0] - ldr r1, _020C7B30 ; =0x04000330 - mov r3, #0x10 - str r2, [sp, #0x4] - bl MI_DmaFill32Async - ldr r0, _020C7B2C ; =0x02106814 - ldr r1, _020C7B34 ; =0x04000360 - ldr r0, [r0, #0x0] - mov r2, #0x0 - mov r3, #0x60 - bl MI_DmaFill32 - b _020C7B04 -_020C7AE4: - ldr r1, _020C7B30 ; =0x04000330 - mov r0, #0x0 - mov r2, #0x10 - bl MIi_CpuClear32 - ldr r1, _020C7B34 ; =0x04000360 - mov r0, #0x0 - mov r2, #0x60 - bl MIi_CpuClear32 -_020C7B04: - mov r2, #0x0 - ldr r0, _020C7B38 ; =0x040004D0 - mov r1, r2 -_020C7B10: - add r2, r2, #0x1 - str r1, [r0, #0x0] - cmp r2, #0x20 - blt _020C7B10 - add sp, sp, #0xc - ldmia sp!, {lr} - bx lr - .balign 4 -_020C7B2C: .word 0x02106814 -_020C7B30: .word 0x04000330 -_020C7B34: .word 0x04000360 -_020C7B38: .word 0x040004D0 - - arm_func_start G3X_SetClearColor -G3X_SetClearColor: ; 0x020C7B3C - orr r0, r0, r1, lsl #0x10 - ldr r12, [sp, #0x0] - orr r3, r0, r3, lsl #0x18 - cmp r12, #0x0 - ldr r1, _020C7B64 ; =0x04000350 - orrne r3, r3, #0x8000 - ldr r0, _020C7B68 ; =0x04000354 - str r3, [r1, #0x0] - strh r2, [r0, #0x0] - bx lr - .balign 4 -_020C7B64: .word 0x04000350 -_020C7B68: .word 0x04000354 - - arm_func_start G3X_SetFogTable -G3X_SetFogTable: ; 0x020C7B6C - ldr ip, _020C7B78 ; =0x020CE2C4 - ldr r1, _020C7B7C ; =0x04000360 - bx r12 - .balign 4 -_020C7B78: .word 0x020CE2C4 -_020C7B7C: .word 0x04000360 - - arm_func_start G3X_SetEdgeColorTable -G3X_SetEdgeColorTable: ; 0x020C7B80 - ldr ip, _020C7B90 ; =MIi_CpuCopy16 - ldr r1, _020C7B94 ; =0x04000330 - mov r2, #0x10 - bx r12 - .balign 4 -_020C7B90: .word MIi_CpuCopy16 -_020C7B94: .word 0x04000330 - - arm_func_start G3X_GetVectorMtx -G3X_GetVectorMtx: - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020C7BD8 ; =0x04000600 - mov r1, r0 - ldr r0, [r2, #0x0] - ands r0, r0, #0x8000000 - addne sp, sp, #0x4 - mvnne r0, #0x0 - ldmneia sp!, {lr} - bxne lr - ldr r0, _020C7BDC ; =0x04000680 - bl MI_Copy36B -_020C7BC8: ; 0x020C7BC8 - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C7BD8: .word 0x04000600 -_020C7BDC: .word 0x04000680 - - arm_func_start G3X_GetClipMtx -G3X_GetClipMtx: - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020C7C20 ; =0x04000600 - mov r1, r0 - ldr r0, [r2, #0x0] - ands r0, r0, #0x8000000 - addne sp, sp, #0x4 - mvnne r0, #0x0 - ldmneia sp!, {lr} - bxne lr - ldr r0, _020C7C24 ; =0x04000640 - bl MI_Copy64B -_020C7C10: ; 0x020C7C10 - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C7C20: .word 0x04000600 -_020C7C24: .word 0x04000640 - - arm_func_start G3X_SetFog -G3X_SetFog: ; 0x020C7C28 - cmp r0, #0x0 - ldreq r2, _020C7C70 ; =0x04000060 - ldreq r0, _020C7C74 ; =0x0000CF7F - ldreqh r1, [r2, #0x0] - andeq r0, r1, r0 - streqh r0, [r2, #0x0] - bxeq lr - ldr r0, _020C7C78 ; =0x0400035C - ldr ip, _020C7C70 ; =0x04000060 - strh r3, [r0, #0x0] - mov r0, r2, lsl #0x8 - orr r0, r0, r1, lsl #0x6 - ldrh r3, [r12, #0x0] - orr r0, r0, #0x80 - bic r1, r3, #0x3f40 - orr r0, r1, r0 - strh r0, [r12, #0x0] - bx lr - .balign 4 -_020C7C70: .word 0x04000060 -_020C7C74: .word 0x0000CF7F -_020C7C78: .word 0x0400035C - - arm_func_start G3X_ResetMtxStack_2 -G3X_ResetMtxStack_2: ; 0x020C7C7C - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - ldr r1, _020C7D18 ; =0x04000600 - ldr r0, [r1, #0x0] - orr r0, r0, #0x8000 - str r0, [r1, #0x0] - add r4, sp, #0x0 -_020C7C98: - mov r0, r4 - bl G3X_GetMtxStackLevelPV -_020C7CA0: ; 0x020C7CA0 - cmp r0, #0x0 - bne _020C7C98 - add r4, sp, #0x4 -_020C7CAC: - mov r0, r4 - bl G3X_GetMtxStackLevelPJ -_020C7CB4: ; 0x020C7CB4 - cmp r0, #0x0 - bne _020C7CAC - ldr r2, _020C7D1C ; =0x04000440 - mov r1, #0x3 - str r1, [r2, #0x0] - ldr r0, _020C7D20 ; =0x04000454 - mov r1, #0x0 - str r1, [r0, #0x0] - str r1, [r2, #0x0] - ldr r1, [sp, #0x4] - cmp r1, #0x0 - ldrne r0, _020C7D24 ; =0x04000448 - strne r1, [r0, #0x0] - ldr r0, _020C7D1C ; =0x04000440 - mov r1, #0x2 - str r1, [r0, #0x0] - ldr r2, [sp, #0x0] - ldr r1, _020C7D24 ; =0x04000448 - ldr r0, _020C7D20 ; =0x04000454 - str r2, [r1, #0x0] - mov r1, #0x0 - str r1, [r0, #0x0] - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C7D18: .word 0x04000600 -_020C7D1C: .word 0x04000440 -_020C7D20: .word 0x04000454 -_020C7D24: .word 0x04000448 - - arm_func_start G3X_InitMtxStack -G3X_InitMtxStack: ; 0x020C7D28 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - ldr r1, _020C7DC8 ; =0x04000600 - ldr r0, [r1, #0x0] - orr r0, r0, #0x8000 - str r0, [r1, #0x0] - add r4, sp, #0x0 -_020C7D44: - mov r0, r4 - bl G3X_GetMtxStackLevelPV -_020C7D4C: ; 0x020C7D4C - cmp r0, #0x0 - bne _020C7D44 - add r4, sp, #0x4 -_020C7D58: - mov r0, r4 - bl G3X_GetMtxStackLevelPJ -_020C7D60: ; 0x020C7D60 - cmp r0, #0x0 - bne _020C7D58 - ldr r2, _020C7DCC ; =0x04000440 - mov r1, #0x3 - str r1, [r2, #0x0] - ldr r0, _020C7DD0 ; =0x04000454 - mov r1, #0x0 - str r1, [r0, #0x0] - str r1, [r2, #0x0] - ldr r1, [sp, #0x4] - ldr r2, _020C7DD0 ; =0x04000454 - cmp r1, #0x0 - ldrne r0, _020C7DD4 ; =0x04000448 - mov r3, #0x0 - strne r1, [r0, #0x0] - ldr r0, _020C7DCC ; =0x04000440 - str r3, [r2, #0x0] - mov r1, #0x2 - str r1, [r0, #0x0] - ldr r1, [sp, #0x0] - ldr r0, _020C7DD4 ; =0x04000448 - str r1, [r0, #0x0] - str r3, [r2, #0x0] - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C7DC8: .word 0x04000600 -_020C7DCC: .word 0x04000440 -_020C7DD0: .word 0x04000454 -_020C7DD4: .word 0x04000448 - - arm_func_start G3X_ClearFifo -G3X_ClearFifo: ; 0x020C7DD8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C7E04 ; =0x04000400 - bl GXi_NopClearFifo128_ - ldr r1, _020C7E08 ; =0x04000600 -_020C7DEC: - ldr r0, [r1, #0x0] - ands r0, r0, #0x8000000 - bne _020C7DEC - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C7E04: .word 0x04000400 -_020C7E08: .word 0x04000600 - - arm_func_start G3X_ResetMtxStack -G3X_ResetMtxStack: ; 0x020C7E0C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020C7E7C ; =0x04000600 -_020C7E18: - ldr r0, [r2, #0x0] - ands r0, r0, #0x8000000 - bne _020C7E18 - ldr r0, [r2, #0x0] - ldr r1, _020C7E80 ; =0x04000060 - orr r0, r0, #0x8000 - str r0, [r2, #0x0] - ldrh r0, [r1, #0x0] - orr r0, r0, #0x2000 - strh r0, [r1, #0x0] - ldrh r0, [r1, #0x0] - orr r0, r0, #0x1000 - strh r0, [r1, #0x0] - bl G3X_ResetMtxStack_2 - ldr r2, _020C7E84 ; =0x001F0080 - ldr r0, _020C7E88 ; =0x040004A4 - ldr r1, _020C7E8C ; =0x040004A8 - str r2, [r0, #0x0] - mov r2, #0x0 - ldr r0, _020C7E90 ; =0x040004AC - str r2, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C7E7C: .word 0x04000600 -_020C7E80: .word 0x04000060 -_020C7E84: .word 0x001F0080 -_020C7E88: .word 0x040004A4 -_020C7E8C: .word 0x040004A8 -_020C7E90: .word 0x040004AC - - arm_func_start G3X_Init -G3X_Init: ; 0x020C7E94 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl G3X_ClearFifo - ldr r0, _020C7FAC ; =0x04000504 - mov r1, #0x0 - str r1, [r0, #0x0] - ldr r1, _020C7FB0 ; =0x04000600 -_020C7EB0: - ldr r0, [r1, #0x0] - ands r0, r0, #0x8000000 - bne _020C7EB0 - ldr r0, _020C7FB4 ; =0x04000060 - mov r3, #0x0 - strh r3, [r0, #0x0] - ldr r2, _020C7FB8 ; =0x04000010 - str r3, [r1, #0x0] - str r3, [r2, #0x0] - ldrh r12, [r0, #0x0] - ldr r2, _020C7FBC ; =0xFFFFCFFD - ldr r3, _020C7FC0 ; =0x0000CFFB - orr r12, r12, #0x2000 - strh r12, [r0, #0x0] - ldrh r12, [r0, #0x0] - orr r12, r12, #0x1000 - strh r12, [r0, #0x0] - ldrh r12, [r0, #0x0] - and r2, r12, r2 - strh r2, [r0, #0x0] - ldrh r2, [r0, #0x0] - bic r2, r2, #0x3000 - orr r2, r2, #0x10 - strh r2, [r0, #0x0] - ldrh r2, [r0, #0x0] - and r2, r2, r3 - strh r2, [r0, #0x0] - ldr r0, [r1, #0x0] - orr r0, r0, #0x8000 - str r0, [r1, #0x0] - ldr r0, [r1, #0x0] - bic r0, r0, #0xc0000000 - orr r0, r0, #0x80000000 - str r0, [r1, #0x0] - bl G3X_InitMtxStack - ldr r0, _020C7FC4 ; =0x04000350 - mov r3, #0x0 - ldr r2, _020C7FC8 ; =0x00007FFF - ldr r1, _020C7FCC ; =0x04000354 - str r3, [r0, #0x0] - ldr r0, _020C7FD0 ; =0x04000356 - strh r2, [r1, #0x0] - ldr r1, _020C7FD4 ; =0x04000358 - strh r3, [r0, #0x0] - ldr r0, _020C7FD8 ; =0x0400035C - str r3, [r1, #0x0] - ldr r1, _020C7FDC ; =0x04000008 - strh r3, [r0, #0x0] - ldrh r0, [r1, #0x0] - bic r0, r0, #0x3 - strh r0, [r1, #0x0] - bl G3X_InitTable - ldr r2, _020C7FE0 ; =0x001F0080 - ldr r0, _020C7FE4 ; =0x040004A4 - ldr r1, _020C7FE8 ; =0x040004A8 - str r2, [r0, #0x0] - mov r2, #0x0 - ldr r0, _020C7FEC ; =0x040004AC - str r2, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C7FAC: .word 0x04000504 -_020C7FB0: .word 0x04000600 -_020C7FB4: .word 0x04000060 -_020C7FB8: .word 0x04000010 -_020C7FBC: .word 0xFFFFCFFD -_020C7FC0: .word 0x0000CFFB -_020C7FC4: .word 0x04000350 -_020C7FC8: .word 0x00007FFF -_020C7FCC: .word 0x04000354 -_020C7FD0: .word 0x04000356 -_020C7FD4: .word 0x04000358 -_020C7FD8: .word 0x0400035C -_020C7FDC: .word 0x04000008 -_020C7FE0: .word 0x001F0080 -_020C7FE4: .word 0x040004A4 -_020C7FE8: .word 0x040004A8 -_020C7FEC: .word 0x040004AC diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index ad3f1a6e..dd266759 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -1,10 +1,43 @@ #ifndef GUARD_GX_H #define GUARD_GX_H +#include "fx.h" + +//Todos before PR +//TODO: Add defines for GX commands, add structs/unions for HW registers +//TODO: Add ARM_FUNC attributes + +#define HW_REG_END_VTXS 0x04000504 +#define HW_REG_GXSTAT 0x04000600 +#define HW_REG_DISP3DCNT 0x04000060 +#define HW_REG_BG0HOFS 0x04000010 +#define HW_REG_CLEAR_COLOR 0x04000350 +#define HW_REG_CLEAR_DEPTH 0x04000354 +#define HW_REG_CLRIMAGE_OFFSET 0x04000356 +#define HW_REG_FOG_COLOR 0x04000358 +#define HW_REG_FOG_OFFSET 0x0400035C +#define HW_REG_BG0CNT 0x04000008 +#define HW_REG_POLYGON_ATTR 0x040004A4 +#define HW_REG_TEXIMAGE_PARAM 0x040004A8 +#define HW_REG_PLTT_BASE 0x040004AC + +#define HW_REG_GXFIFO 0x04000400 +#define HW_REG_MTX_IDENTITY 0x04000454 +#define HW_REG_MTX_POP 0x04000448 +#define HW_REG_MTX_MODE 0x04000440 + +#define HW_REG_CLIPMTX_RESULT 0x04000640 +#define HW_REG_VECMTX_RESULT 0x04000680 + +#define HW_REG_EDGE_COLOR 0x04000330 +#define HW_REG_FOG_TABLE 0x04000360 + +#define HW_REG_SHININESS 0x040004D0 + struct DL { u8 *var00; //end pointer - u32 *var04; //aligned end pointer + u32 *var04; //aligned end pointer, used to write data u8 *var08; //start pointer u32 var0C; u32 var10; //pad end with zero bool @@ -14,6 +47,41 @@ struct DL void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2); s32 G3_EndMakeDL(struct DL *displaylist); +//GX_g3x +asm void GXi_NopClearFifo128_(void *reg); +void G3X_Init(); +void G3X_ResetMtxStack(); +void G3X_ClearFifo(); +void G3X_InitMtxStack(); +void G3X_ResetMtxStack_2(); +void G3X_SetFog(u32 enable, u32 alphamode, u32 depth, s32 offset); +u32 G3X_GetClipMtx(struct Mtx44 *dst); +u32 G3X_GetVectorMtx(struct Mtx33 *dst); +void G3X_SetEdgeColorTable(void *tbl_ptr); +void G3X_SetFogTable(void *tbl_ptr); +void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable_fog); +void G3X_InitTable(); +u32 G3X_GetMtxStackLevelPV(u32 *level); +u32 G3X_GetMtxStackLevelPJ(u32 *level); +u32 G3X_GetBoxTestResult(u32 *result); +void G3X_SetHOffset(u32 offset); + + +//GX_g3b +void G3BS_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx); +void G3B_PushMtx(struct DL *displaylist); +void G3B_PopMtx(struct DL *displaylist, void *mtx); +void G3B_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx); +void G3B_Color(struct DL * displaylist, u32 vtx_col); +void G3B_Normal(struct DL * displaylist, fx16 x, fx16 y, fx16 z); +void G3B_Vtx(struct DL * displaylist, fx32 x, fx32 y, fx32 z); +void G3B_PolygonAttr(struct DL *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6); +void G3B_MaterialColorDiffAmb(struct DL *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace); +void G3B_MaterialColorSpecEmi(struct DL *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table); +void G3B_LightVector(struct DL * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z); +void G3B_LightColor(struct DL * displaylist, u32 light_num, u32 col); +void G3B_Begin(struct DL * displaylist, u32 type); +void G3B_End(struct DL * displaylist); //GX_asm void GX_SendFifo48B(void *src, void *dst); diff --git a/arm9/lib/src/GX_g3b.c b/arm9/lib/src/GX_g3b.c new file mode 100644 index 00000000..1e25adb5 --- /dev/null +++ b/arm9/lib/src/GX_g3b.c @@ -0,0 +1,122 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + + +void MI_Copy64B(void *src, void *dst); + +void G3BS_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx){ + *(u32 *)displaylist->var00 = 0x16; + MI_Copy64B(mtx, displaylist->var04); +} + +void G3B_PushMtx(struct DL *displaylist){ + *(u32 *)displaylist->var00 = 0x11; + displaylist->var00 = (u8 *)displaylist->var04; + displaylist->var04 = (u32 *)displaylist->var00 + 1; +} + +void G3B_PopMtx(struct DL *displaylist, void *mtx){ + *(u32 *)displaylist->var00 = 0x12; + *displaylist->var04 = (u32)mtx; + displaylist->var00 = (u8 *)displaylist->var04 + 0x4; + displaylist->var04 = (u32 *)displaylist->var00 + 1; +} + +void G3B_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx){ + G3BS_LoadMtx44(displaylist, mtx); + displaylist->var00 = (u8 *)displaylist->var04 + sizeof(struct Mtx44); + displaylist->var04 = (u32 *)displaylist->var00 + 1; +} + +//color format is RGB555, stored in the lower bits +void G3B_Color(struct DL * displaylist, u32 vtx_col){ + *(u32 *)displaylist->var00 = 0x20; + *displaylist->var04 = vtx_col; + displaylist->var00 = (u8 *)displaylist->var04 + 0x4; + displaylist->var04 = (u32 *)displaylist->var00 + 1; +} + +/* +Only feed normalized Vectors +only the fractional part and the sign, which is in the first nonfraction bit +since the vector is assumed to be normalized, are used +*/ +void G3B_Normal(struct DL * displaylist, fx16 x, fx16 y, fx16 z){ + *(u32 *)displaylist->var00 = 0x21; + *displaylist->var04 = ((x >> 3) & 0x3FF) | (((y >> 3) & 0x3FF) << 0xA) | (((z >> 3) & 0x3FF) << 0x14) ; + displaylist->var00 = (u8 *)displaylist->var04 + 0x4; + displaylist->var04 = (u32 *)displaylist->var00 + 1; +} + +void G3B_Vtx(struct DL * displaylist, fx32 x, fx32 y, fx32 z){ + *(u32 *)displaylist->var00 = 0x23; + displaylist->var04[0] = (u32)(u16)x | (u32)(u16)y << 0x10; + displaylist->var04[1] = (u32)(u16)z; + displaylist->var00 = (u8 *)displaylist->var04 + 0x8; + displaylist->var04 = (u32 *)displaylist->var00 + 1; +} + +//TODO: name arguments +void G3B_PolygonAttr(struct DL *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6){ + *(u32 *)displaylist->var00 = 0x29; + *displaylist->var04 = r1 | r2 << 0x4 | r3 << 0x6 | r6 | r4 << 0x18 | r5 << 0x10; + displaylist->var00 = (u8 *)displaylist->var04 + 0x4; + displaylist->var04 = (u32 *)displaylist->var00 + 1; +} + +void G3B_MaterialColorDiffAmb(struct DL *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace){ + *(u32 *)displaylist->var00 = 0x30; + u32 replace_vtx_color_with_diffuse; + if (replace) + replace_vtx_color_with_diffuse = TRUE; + else + replace_vtx_color_with_diffuse = FALSE; + *displaylist->var04 = diffuse_col | ambient_col << 0x10 | replace_vtx_color_with_diffuse << 0xF; + displaylist->var00 = (u8 *)displaylist->var04 + 0x4; + displaylist->var04 = (u32 *)displaylist->var00 + 1; +} + +void G3B_MaterialColorSpecEmi(struct DL *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table){ + *(u32 *)displaylist->var00 = 0x31; + u32 enable_shininess_table; + if (shiny_table) + enable_shininess_table = TRUE; + else + enable_shininess_table = FALSE; + *displaylist->var04 = specular_col | emission_col << 0x10 | enable_shininess_table << 0xF; + displaylist->var00 = (u8 *)displaylist->var04 + 0x4; + displaylist->var04 = (u32 *)displaylist->var00 + 1; +} + +/* +Only feed normalized Vectors +only the fractional part and the sign, which is in the first nonfraction bit +since the vector is assumed to be normalized, are used +*/ +void G3B_LightVector(struct DL * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z){ + *(u32 *)displaylist->var00 = 0x32; + *displaylist->var04 = ((x >> 3) & 0x3FF) | (((y >> 3) & 0x3FF) << 0xA) | (((z >> 3) & 0x3FF) << 0x14) | light_num << 0x1E; + displaylist->var00 = (u8 *)displaylist->var04 + 0x4; + displaylist->var04 = (u32 *)displaylist->var00 + 1; +} + +void G3B_LightColor(struct DL * displaylist, u32 light_num, u32 col){ + *(u32 *)displaylist->var00 = 0x33; + *displaylist->var04 = col | light_num << 0x1E; + displaylist->var00 = (u8 *)displaylist->var04 + 0x4; + displaylist->var04 = (u32 *)displaylist->var00 + 1; +} + +void G3B_Begin(struct DL * displaylist, u32 type){ + *(u32 *)displaylist->var00 = 0x40; + *displaylist->var04 = type; + displaylist->var00 = (u8 *)displaylist->var04 + 0x4; + displaylist->var04 = (u32 *)displaylist->var00 + 1; +} + +void G3B_End(struct DL * displaylist){ + *(u32 *)displaylist->var00 = 0x41; + displaylist->var00 = (u8 *)displaylist->var04; + displaylist->var04 = (u32 *)displaylist->var00 + 1; +} diff --git a/arm9/lib/src/GX_g3x.c b/arm9/lib/src/GX_g3x.c new file mode 100644 index 00000000..f9c2adb7 --- /dev/null +++ b/arm9/lib/src/GX_g3x.c @@ -0,0 +1,242 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +extern u32 gUnk02106814; +void MI_Copy64B(void *, void *); +void MIi_CpuCopy16(void *, void *, u32); +void GXi_NopClearFifo128_(void *); +void MI_Copy16B(void *, void *); +void MI_DmaFill32Async(u32, void *, u32, u32, u32, u32); +void MI_DmaFill32(u32, void *, u32, u32); +void MIi_CpuClear32(u32, void *, u32); + +asm void GXi_NopClearFifo128_(void *reg){ + mov r1, #0x0 + mov r2, #0x0 + mov r3, #0x0 + mov r12, #0x0 + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + stmia r0, {r1-r3,r12} + bx lr +} + +void G3X_Init(){ + G3X_ClearFifo(); + SETREG32(HW_REG_END_VTXS, 0x0); + while (READREG32(HW_REG_GXSTAT) & 0x8000000); //wait for geometry engine to not be busy + SETREG16(HW_REG_DISP3DCNT, 0x0); + SETREG32(HW_REG_GXSTAT, 0x0); + SETREG32(HW_REG_BG0HOFS, 0x0); + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x2000); + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x1000); + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & ~0x3002); + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & ~0x3000 | 0x10); + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & (u16)~0x3004); + SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000); + SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) & ~0xC0000000 | 0x80000000); + G3X_InitMtxStack(); + SETREG32(HW_REG_CLEAR_COLOR, 0x0); + SETREG16(HW_REG_CLEAR_DEPTH, 0x7FFF); + SETREG16(HW_REG_CLRIMAGE_OFFSET, 0x0); + SETREG32(HW_REG_FOG_COLOR, 0x0); + SETREG16(HW_REG_FOG_OFFSET, 0x0); + SETREG16(HW_REG_BG0CNT, READREG16(HW_REG_BG0CNT) & ~0x3); + G3X_InitTable(); + SETREG32(HW_REG_POLYGON_ATTR, 0x1F0080); + SETREG32(HW_REG_TEXIMAGE_PARAM, 0x0); + SETREG32(HW_REG_PLTT_BASE, 0x0); +} + +void G3X_ResetMtxStack(){ + while (READREG32(HW_REG_GXSTAT) & 0x8000000); + SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000); + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x2000); + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x1000); + G3X_ResetMtxStack_2(); + SETREG32(HW_REG_POLYGON_ATTR, 0x1F0080); + SETREG32(HW_REG_TEXIMAGE_PARAM, 0x0); + SETREG32(HW_REG_PLTT_BASE, 0x0); +} + +void G3X_ClearFifo(){ + GXi_NopClearFifo128_((void *)HW_REG_GXFIFO); + while (READREG32(HW_REG_GXSTAT) & 0x8000000); +} + +void G3X_InitMtxStack(){ + u32 PV_level, PJ_level; + SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000); + while (G3X_GetMtxStackLevelPV(&PV_level)); + while (G3X_GetMtxStackLevelPJ(&PJ_level)); + SETREG32(HW_REG_MTX_MODE, 0x3); + SETREG32(HW_REG_MTX_IDENTITY, 0x0); + SETREG32(HW_REG_MTX_MODE, 0x0); + if (PJ_level) + { + SETREG32(HW_REG_MTX_POP, PJ_level); + } + SETREG32(HW_REG_MTX_IDENTITY, 0x0); + SETREG32(HW_REG_MTX_MODE, 0x2); + SETREG32(HW_REG_MTX_POP, PV_level); + SETREG32(HW_REG_MTX_IDENTITY, 0x0); +} + +void G3X_ResetMtxStack_2(){ + u32 PV_level, PJ_level; + SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000); + while (G3X_GetMtxStackLevelPV(&PV_level)); + while (G3X_GetMtxStackLevelPJ(&PJ_level)); + SETREG32(HW_REG_MTX_MODE, 0x3); + SETREG32(HW_REG_MTX_IDENTITY, 0x0); + SETREG32(HW_REG_MTX_MODE, 0x0); + if (PJ_level) + { + SETREG32(HW_REG_MTX_POP, PJ_level); + } + + SETREG32(HW_REG_MTX_MODE, 0x2); + SETREG32(HW_REG_MTX_POP, PV_level); + SETREG32(HW_REG_MTX_IDENTITY, 0x0); + +} + +void G3X_SetFog(u32 enable, u32 alphamode, u32 depth, s32 offset){ + if (enable) + { + SETREG16(HW_REG_FOG_OFFSET, offset); + SETREG16(HW_REG_DISP3DCNT, (READREG16(HW_REG_DISP3DCNT) &~0x3f40) | (((depth << 0x8)| (alphamode << 0x6)|0x80 ))); + + } + else + { + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & (u16)~0x3080); + } +} + +u32 G3X_GetClipMtx(struct Mtx44 *dst){ + if (READREG32(HW_REG_GXSTAT) & 0x8000000) + { + return -1; + } + else + { + MI_Copy64B((void *)HW_REG_CLIPMTX_RESULT, dst); + return 0; + } +} + +u32 G3X_GetVectorMtx(struct Mtx33 *dst){ + if (READREG32(HW_REG_GXSTAT) & 0x8000000) + { + return -1; + } + else + { + MI_Copy36B((void *)HW_REG_VECMTX_RESULT, dst); + return 0; + } +} + +void G3X_SetEdgeColorTable(void *tbl_ptr){ + MIi_CpuCopy16(tbl_ptr, (void *)HW_REG_EDGE_COLOR, 0x10); +} + +void G3X_SetFogTable(void *tbl_ptr){ + MI_Copy16B(tbl_ptr, (void *)HW_REG_FOG_TABLE); +} + +void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable_fog){ + u32 temp = col | (alpha << 0x10) | (polygon_id << 0x18); + if (enable_fog) + temp |= 0x8000; + SETREG32(HW_REG_CLEAR_COLOR, temp); + SETREG16(HW_REG_CLEAR_DEPTH, depth); +} + +void G3X_InitTable(){ + if (gUnk02106814 != -1) + { + MI_DmaFill32Async(gUnk02106814, (void *)HW_REG_EDGE_COLOR, 0x0, 0x10, 0x0, 0x0); + MI_DmaFill32(gUnk02106814, (void *)HW_REG_FOG_TABLE, 0x0, 0x60); + } + else + { + MIi_CpuClear32(0x0, (void *)HW_REG_EDGE_COLOR, 0x10); + MIi_CpuClear32(0x0, (void *)HW_REG_FOG_TABLE, 0x60); + } + for (int i = 0; i < 0x20; i++) + { + SETREG32(HW_REG_SHININESS, 0x0); + } +} + +u32 G3X_GetMtxStackLevelPV(u32 *level){ + if (READREG32(HW_REG_GXSTAT) & 0x4000) + { + return -1; + } + else + { + *level = (READREG32(HW_REG_GXSTAT) & 0x1F00) >> 0x8; + return 0; + } +} + +u32 G3X_GetMtxStackLevelPJ(u32 *level){ + if (READREG32(HW_REG_GXSTAT) & 0x4000) + { + return -1; + } + else + { + *level = (READREG32(HW_REG_GXSTAT) & 0x2000) >> 0xD; + return 0; + } +} + +u32 G3X_GetBoxTestResult(u32 *result){ + if (READREG32(HW_REG_GXSTAT) & 0x1) + { + return -1; + } + else + { + *result = (READREG32(HW_REG_GXSTAT) & 0x2); + return 0; + } +} + +void G3X_SetHOffset(u32 offset){ + SETREG32(HW_REG_BG0HOFS, offset); +} diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt index 9b6d2115..2ab88c4e 100644 --- a/arm9/undefined_syms.txt +++ b/arm9/undefined_syms.txt @@ -7,6 +7,7 @@ SDK_IRQ_STACKSIZE = 0x00000400; // FX FX_AtanTable_ = 0x02103A38; // OS +gUnk02106814 = 0x02106814; OSi_IrqCallbackInfoIndex = 0x02106818; // DGT Unk_0210683C = 0x0210683C; -- cgit v1.2.3 From 4ca37a40d9fbe67888777e65aea5a6bf1f4c5829 Mon Sep 17 00:00:00 2001 From: Made Date: Sat, 9 May 2020 19:10:59 +0200 Subject: temporarily add register macros till actual definitions are added --- arm9/lib/include/gx.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index dd266759..03e26610 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -34,6 +34,16 @@ #define HW_REG_SHININESS 0x040004D0 +//TODO: wait for register commit and replace these +#define SETREG16(x, y) ((*(vu16 *)x) = y) +#define SETREG32(x, y) ((*(vu32 *)x) = y) +#define SETREG64(x, y) ((*(vu64 *)x) = y) + +#define READREG16(x) (*(vu16 *)x) +#define READREG32(x) (*(vu32 *)x) +#define READREG64(x) (*(vu64 *)x) + + struct DL { u8 *var00; //end pointer -- cgit v1.2.3 From 4abf7d45568d93040fdb86993e915ffdfc4c4a9e Mon Sep 17 00:00:00 2001 From: Made Date: Sat, 9 May 2020 19:44:46 +0200 Subject: start decompiling GX_vramcnt.s --- arm9/arm9.lcf | 1 + arm9/asm/GX_vramcnt.s | 98 ++++++++++++++++++++++----------------------- arm9/lib/include/gx.h | 14 +++++++ arm9/lib/src/GX_vramcnt_c.c | 24 +++++++++++ 4 files changed, 88 insertions(+), 49 deletions(-) create mode 100644 arm9/lib/src/GX_vramcnt_c.c diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index eeb735db..d5ebf272 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -143,6 +143,7 @@ SECTIONS { GX.o (.text) GX_state.o (.text) GX_vramcnt.o (.text) + GX_vramcnt_c.o (.text) GX_bgcnt.o (.text) GX_g2.o (.text) GX_g3b.o (.text) diff --git a/arm9/asm/GX_vramcnt.s b/arm9/asm/GX_vramcnt.s index 0dc8890b..bf11bd92 100644 --- a/arm9/asm/GX_vramcnt.s +++ b/arm9/asm/GX_vramcnt.s @@ -1489,52 +1489,52 @@ _020C6E9C: .word 0x04000246 _020C6EA0: .word 0x04000245 _020C6EA4: .word 0x04000244 - arm_func_start GX_VRAMCNT_SetLCDC_ -GX_VRAMCNT_SetLCDC_: ; 0x020C6EA8 - ands r1, r0, #0x1 - ldrne r1, _020C6F3C ; =0x04000240 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r1, r0, #0x2 - ldrne r1, _020C6F40 ; =0x04000241 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r1, r0, #0x4 - ldrne r1, _020C6F44 ; =0x04000242 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r1, r0, #0x8 - ldrne r1, _020C6F48 ; =0x04000243 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r1, r0, #0x10 - ldrne r1, _020C6F4C ; =0x04000244 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r1, r0, #0x20 - ldrne r1, _020C6F50 ; =0x04000245 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r1, r0, #0x40 - ldrne r1, _020C6F54 ; =0x04000246 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r1, r0, #0x80 - ldrne r1, _020C6F58 ; =0x04000248 - movne r2, #0x80 - strneb r2, [r1, #0x0] - ands r0, r0, #0x100 - ldrne r0, _020C6F5C ; =0x04000249 - movne r1, #0x80 - strneb r1, [r0, #0x0] - bx lr - .balign 4 -_020C6F3C: .word 0x04000240 -_020C6F40: .word 0x04000241 -_020C6F44: .word 0x04000242 -_020C6F48: .word 0x04000243 -_020C6F4C: .word 0x04000244 -_020C6F50: .word 0x04000245 -_020C6F54: .word 0x04000246 -_020C6F58: .word 0x04000248 -_020C6F5C: .word 0x04000249 +.extern GX_VRAMCNT_SetLCDC_ +;GX_VRAMCNT_SetLCDC_: ; 0x020C6EA8 +; ands r1, r0, #0x1 +; ldrne r1, _020C6F3C ; =0x04000240 +; movne r2, #0x80 +; strneb r2, [r1, #0x0] +; ands r1, r0, #0x2 +; ldrne r1, _020C6F40 ; =0x04000241 +; movne r2, #0x80 +; strneb r2, [r1, #0x0] +; ands r1, r0, #0x4 +; ldrne r1, _020C6F44 ; =0x04000242 +; movne r2, #0x80 +; strneb r2, [r1, #0x0] +; ands r1, r0, #0x8 +; ldrne r1, _020C6F48 ; =0x04000243 +; movne r2, #0x80 +; strneb r2, [r1, #0x0] +; ands r1, r0, #0x10 +; ldrne r1, _020C6F4C ; =0x04000244 +; movne r2, #0x80 +; strneb r2, [r1, #0x0] +; ands r1, r0, #0x20 +; ldrne r1, _020C6F50 ; =0x04000245 +; movne r2, #0x80 +; strneb r2, [r1, #0x0] +; ands r1, r0, #0x40 +; ldrne r1, _020C6F54 ; =0x04000246 +; movne r2, #0x80 +; strneb r2, [r1, #0x0] +; ands r1, r0, #0x80 +; ldrne r1, _020C6F58 ; =0x04000248 +; movne r2, #0x80 +; strneb r2, [r1, #0x0] +; ands r0, r0, #0x100 +; ldrne r0, _020C6F5C ; =0x04000249 +; movne r1, #0x80 +; strneb r1, [r0, #0x0] +; bx lr +; .balign 4 +;_020C6F3C: .word 0x04000240 +;_020C6F40: .word 0x04000241 +;_020C6F44: .word 0x04000242 +;_020C6F48: .word 0x04000243 +;_020C6F4C: .word 0x04000244 +;_020C6F50: .word 0x04000245 +;_020C6F54: .word 0x04000246 +;_020C6F58: .word 0x04000248 +;_020C6F5C: .word 0x04000249 diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 03e26610..81138da3 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -34,11 +34,25 @@ #define HW_REG_SHININESS 0x040004D0 + +#define HW_REG_VRAMCNT_A 0x04000240 +#define HW_REG_VRAMCNT_B 0x04000241 +#define HW_REG_VRAMCNT_C 0x04000242 +#define HW_REG_VRAMCNT_D 0x04000243 +#define HW_REG_VRAMCNT_E 0x04000244 +#define HW_REG_VRAMCNT_F 0x04000245 +#define HW_REG_VRAMCNT_G 0x04000246 +#define HW_REG_WRAMCNT 0x04000247 +#define HW_REG_VRAMCNT_H 0x04000248 +#define HW_REG_VRAMCNT_I 0x04000249 + //TODO: wait for register commit and replace these +#define SETREG8(x, y) ((*(vu8 *)x) = y) #define SETREG16(x, y) ((*(vu16 *)x) = y) #define SETREG32(x, y) ((*(vu32 *)x) = y) #define SETREG64(x, y) ((*(vu64 *)x) = y) +#define READREG8(x) (*(vu8 *)x) #define READREG16(x) (*(vu16 *)x) #define READREG32(x) (*(vu32 *)x) #define READREG64(x) (*(vu64 *)x) diff --git a/arm9/lib/src/GX_vramcnt_c.c b/arm9/lib/src/GX_vramcnt_c.c new file mode 100644 index 00000000..50107888 --- /dev/null +++ b/arm9/lib/src/GX_vramcnt_c.c @@ -0,0 +1,24 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +void GX_VRAMCNT_SetLCDC_(u32 r0){ + if (r0 & (0x1 << 0)) + SETREG8(HW_REG_VRAMCNT_A, 0x80); + if (r0 & (0x1 << 1)) + SETREG8(HW_REG_VRAMCNT_B, 0x80); + if (r0 & (0x1 << 2)) + SETREG8(HW_REG_VRAMCNT_C, 0x80); + if (r0 & (0x1 << 3)) + SETREG8(HW_REG_VRAMCNT_D, 0x80); + if (r0 & (0x1 << 4)) + SETREG8(HW_REG_VRAMCNT_E, 0x80); + if (r0 & (0x1 << 5)) + SETREG8(HW_REG_VRAMCNT_F, 0x80); + if (r0 & (0x1 << 6)) + SETREG8(HW_REG_VRAMCNT_G, 0x80); + if (r0 & (0x1 << 7)) + SETREG8(HW_REG_VRAMCNT_H, 0x80); + if (r0 & (0x1 << 8)) + SETREG8(HW_REG_VRAMCNT_I, 0x80); +} -- cgit v1.2.3 From 435f3ce09ee75bc612ac5e827e62a341249c3c67 Mon Sep 17 00:00:00 2001 From: Made Date: Sun, 10 May 2020 04:14:47 +0200 Subject: Finish edcompiling GX_vramcnt.s --- arm9/arm9.lcf | 1 - arm9/asm/GX_vramcnt.s | 1540 ------------------------------------------- arm9/lib/include/gx.h | 78 +++ arm9/lib/src/GX_vramcnt.c | 581 ++++++++++++++++ arm9/lib/src/GX_vramcnt_c.c | 24 - arm9/undefined_syms.txt | 3 + 6 files changed, 662 insertions(+), 1565 deletions(-) delete mode 100644 arm9/asm/GX_vramcnt.s create mode 100644 arm9/lib/src/GX_vramcnt.c delete mode 100644 arm9/lib/src/GX_vramcnt_c.c diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index 91b80e07..68347ea4 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -148,7 +148,6 @@ SECTIONS { GX.o (.text) GX_state.o (.text) GX_vramcnt.o (.text) - GX_vramcnt_c.o (.text) GX_bgcnt.o (.text) GX_g2.o (.text) GX_g3b.o (.text) diff --git a/arm9/asm/GX_vramcnt.s b/arm9/asm/GX_vramcnt.s deleted file mode 100644 index bf11bd92..00000000 --- a/arm9/asm/GX_vramcnt.s +++ /dev/null @@ -1,1540 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start GX_GetBankForSubOBJExtPltt -GX_GetBankForSubOBJExtPltt: ; 0x020C5D2C - ldr r0, _020C5D38 ; =0x021D33C4 - ldrh r0, [r0, #0x18] - bx lr - .balign 4 -_020C5D38: .word 0x021D33C4 - - arm_func_start GX_GetBankForSubBGExtPltt -GX_GetBankForSubBGExtPltt: ; 0x020C5D3C - ldr r0, _020C5D48 ; =0x021D33C4 - ldrh r0, [r0, #0x16] - bx lr - .balign 4 -_020C5D48: .word 0x021D33C4 - - arm_func_start GX_GetBankForSubOBJ -GX_GetBankForSubOBJ: ; 0x020C5D4C - ldr r0, _020C5D58 ; =0x021D33C4 - ldrh r0, [r0, #0x14] - bx lr - .balign 4 -_020C5D58: .word 0x021D33C4 - - arm_func_start GX_GetBankForSubBGExtPltt_2 -GX_GetBankForSubBGExtPltt_2: ; 0x020C5D5C - ldr r0, _020C5D68 ; =0x021D33C4 - ldrh r0, [r0, #0x12] - bx lr - .balign 4 -_020C5D68: .word 0x021D33C4 - - arm_func_start GX_GetBankForLCDC -GX_GetBankForLCDC: ; 0x020C5D6C - ldr r0, _020C5D78 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bx lr - .balign 4 -_020C5D78: .word 0x021D33C4 - - arm_func_start GX_GetBankForTexPltt -GX_GetBankForTexPltt: ; 0x020C5D7C - ldr r0, _020C5D88 ; =0x021D33C4 - - arm_func_start FUN_020C5D80 -FUN_020C5D80: ; 0x020C5D80 - ldrh r0, [r0, #0xa] - bx lr - .balign 4 -_020C5D88: .word 0x021D33C4 - - arm_func_start FUN_020C5D8C -FUN_020C5D8C: ; 0x020C5D8C - ldr r0, _020C5D98 ; =0x021D33C4 - ldrh r0, [r0, #0x8] - bx lr - .balign 4 -_020C5D98: .word 0x021D33C4 - - arm_func_start GX_GetBankForOBJExtPltt -GX_GetBankForOBJExtPltt: ; 0x020C5D9C - ldr r0, _020C5DA8 ; =0x021D33C4 - ldrh r0, [r0, #0x10] - bx lr - .balign 4 -_020C5DA8: .word 0x021D33C4 - - arm_func_start GX_GetBankForBGExtPltt -GX_GetBankForBGExtPltt: ; 0x020C5DAC - ldr r0, _020C5DB8 ; =0x021D33C4 - ldrh r0, [r0, #0xe] - bx lr - .balign 4 -_020C5DB8: .word 0x021D33C4 - - arm_func_start GX_GetBankForOBJ -GX_GetBankForOBJ: ; 0x020C5DBC - ldr r0, _020C5DC8 ; =0x021D33C4 - ldrh r0, [r0, #0x4] - bx lr - .balign 4 -_020C5DC8: .word 0x021D33C4 - - arm_func_start GX_GetBankForBGExtPltt_2 -GX_GetBankForBGExtPltt_2: ; 0x020C5DCC - ldr r0, _020C5DD8 ; =0x021D33C4 - ldrh r0, [r0, #0x2] - bx lr - .balign 4 -_020C5DD8: .word 0x021D33C4 - - arm_func_start GX_DisableBankForSubOBJExtPltt -GX_DisableBankForSubOBJExtPltt: ; 0x020C5DDC - ldr r2, _020C5DF8 ; =0x04001000 - ldr ip, _020C5DFC ; =FUN_020C5F28 - ldr r1, [r2, #0x0] - ldr r0, _020C5E00 ; =0x021D33DC - bic r1, r1, #0x80000000 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C5DF8: .word 0x04001000 -_020C5DFC: .word FUN_020C5F28 -_020C5E00: .word 0x021D33DC - - arm_func_start FUN_020C5E04 -FUN_020C5E04: ; 0x020C5E04 - ldr r2, _020C5E20 ; =0x04001000 - ldr ip, _020C5E24 ; =FUN_020C5F28 - ldr r1, [r2, #0x0] - ldr r0, _020C5E28 ; =0x021D33DA - bic r1, r1, #0x40000000 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C5E20: .word 0x04001000 -_020C5E24: .word FUN_020C5F28 -_020C5E28: .word 0x021D33DA - - arm_func_start GX_DisableBankForSubOBJExtPltt_2 -GX_DisableBankForSubOBJExtPltt_2: ; 0x020C5E2C - ldr ip, _020C5E38 ; =FUN_020C5F28 - ldr r0, _020C5E3C ; =0x021D33D8 - bx r12 - .balign 4 -_020C5E38: .word FUN_020C5F28 -_020C5E3C: .word 0x021D33D8 - - arm_func_start GX_DisableBankForSubBGExtPltt -GX_DisableBankForSubBGExtPltt: ; 0x020C5E40 - ldr ip, _020C5E4C ; =FUN_020C5F28 - ldr r0, _020C5E50 ; =0x021D33D6 - bx r12 - .balign 4 -_020C5E4C: .word FUN_020C5F28 -_020C5E50: .word 0x021D33D6 - - arm_func_start GX_DisableBankForLCDC -GX_DisableBankForLCDC: ; 0x020C5E54 - ldr ip, _020C5E60 ; =FUN_020C5F28 - ldr r0, _020C5E64 ; =0x021D33C4 - bx r12 - .balign 4 -_020C5E60: .word FUN_020C5F28 -_020C5E64: .word 0x021D33C4 - - arm_func_start GX_DisableBankForARM7 -GX_DisableBankForARM7: ; 0x020C5E68 - ldr ip, _020C5E74 ; =FUN_020C5F28 - ldr r0, _020C5E78 ; =0x021D33CA - bx r12 - .balign 4 -_020C5E74: .word FUN_020C5F28 -_020C5E78: .word 0x021D33CA - - arm_func_start GX_DisableBankForClearImage -GX_DisableBankForClearImage: ; 0x020C5E7C - ldr ip, _020C5E88 ; =FUN_020C5F28 - ldr r0, _020C5E8C ; =0x021D33D0 - bx r12 - .balign 4 -_020C5E88: .word FUN_020C5F28 -_020C5E8C: .word 0x021D33D0 - - arm_func_start GX_DisableBankForTexPltt -GX_DisableBankForTexPltt: ; 0x020C5E90 - ldr ip, _020C5E9C ; =FUN_020C5F28 - ldr r0, _020C5EA0 ; =0x021D33CE - bx r12 - .balign 4 -_020C5E9C: .word FUN_020C5F28 -_020C5EA0: .word 0x021D33CE - - arm_func_start GX_DisableBankForTexPltt_2 -GX_DisableBankForTexPltt_2: ; 0x020C5EA4 - ldr ip, _020C5EB0 ; =FUN_020C5F28 - ldr r0, _020C5EB4 ; =0x021D33CC - bx r12 - .balign 4 -_020C5EB0: .word FUN_020C5F28 -_020C5EB4: .word 0x021D33CC - - arm_func_start GX_DisableBankForOBJExtPltt -GX_DisableBankForOBJExtPltt: ; 0x020C5EB8 - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr ip, _020C5ED4 ; =FUN_020C5F28 - bic r1, r1, #0x80000000 - ldr r0, _020C5ED8 ; =0x021D33D4 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C5ED4: .word FUN_020C5F28 -_020C5ED8: .word 0x021D33D4 - - arm_func_start GX_DisableBankForBGExtPltt -GX_DisableBankForBGExtPltt: ; 0x020C5EDC - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr ip, _020C5EF8 ; =FUN_020C5F28 - bic r1, r1, #0x40000000 - ldr r0, _020C5EFC ; =0x021D33D2 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C5EF8: .word FUN_020C5F28 -_020C5EFC: .word 0x021D33D2 - - arm_func_start GX_DisableBankForOBJExtPltt_2 -GX_DisableBankForOBJExtPltt_2: ; 0x020C5F00 - ldr ip, _020C5F0C ; =FUN_020C5F28 - ldr r0, _020C5F10 ; =0x021D33C8 - bx r12 - .balign 4 -_020C5F0C: .word FUN_020C5F28 -_020C5F10: .word 0x021D33C8 - - arm_func_start disableBankForX_ -disableBankForX_: ; 0x020C5F14 - ldr ip, _020C5F20 ; =FUN_020C5F28 - ldr r0, _020C5F24 ; =0x021D33C6 - bx r12 - .balign 4 -_020C5F20: .word FUN_020C5F28 -_020C5F24: .word 0x021D33C6 - - arm_func_start FUN_020C5F28 -FUN_020C5F28: ; 0x020C5F28 - stmdb sp!, {r4,lr} - ldrh r4, [r0, #0x0] - mov r1, #0x0 - strh r1, [r0, #0x0] - ands r0, r4, #0x1 - ldrne r0, _020C5FE4 ; =0x04000240 - strneb r1, [r0, #0x0] - ands r0, r4, #0x2 - ldrne r0, _020C5FE8 ; =0x04000241 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ands r0, r4, #0x4 - ldrne r0, _020C5FEC ; =0x04000242 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ands r0, r4, #0x8 - ldrne r0, _020C5FF0 ; =0x04000243 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ands r0, r4, #0x10 - ldrne r0, _020C5FF4 ; =0x04000244 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ands r0, r4, #0x20 - ldrne r0, _020C5FF8 ; =0x04000245 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ands r0, r4, #0x40 - ldrne r0, _020C5FFC ; =0x04000246 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ands r0, r4, #0x80 - ldrne r0, _020C6000 ; =0x04000248 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ands r0, r4, #0x100 - ldrne r0, _020C6004 ; =0x04000249 - movne r1, #0x0 - strneb r1, [r0, #0x0] - ldr r1, _020C6008 ; =0x021D33BC - mov r0, r4, lsl #0x10 - ldrh r1, [r1, #0x0] - mov r0, r0, lsr #0x10 - bl OSi_UnlockVram - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C5FE4: .word 0x04000240 -_020C5FE8: .word 0x04000241 -_020C5FEC: .word 0x04000242 -_020C5FF0: .word 0x04000243 -_020C5FF4: .word 0x04000244 -_020C5FF8: .word 0x04000245 -_020C5FFC: .word 0x04000246 -_020C6000: .word 0x04000248 -_020C6004: .word 0x04000249 -_020C6008: .word 0x021D33BC - - arm_func_start GX_ResetBankForSubOBJ -GX_ResetBankForSubOBJ: ; 0x020C600C - ldr r2, _020C6028 ; =0x04001000 - ldr ip, _020C602C ; =FUN_020C6130 - ldr r1, [r2, #0x0] - ldr r0, _020C6030 ; =0x021D33DC - bic r1, r1, #0x80000000 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C6028: .word 0x04001000 -_020C602C: .word FUN_020C6130 -_020C6030: .word 0x021D33DC - - arm_func_start FUN_020C6034 -FUN_020C6034: ; 0x020C6034 - ldr r2, _020C6050 ; =0x04001000 - ldr ip, _020C6054 ; =FUN_020C6130 - ldr r1, [r2, #0x0] - ldr r0, _020C6058 ; =0x021D33DA - bic r1, r1, #0x40000000 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C6050: .word 0x04001000 -_020C6054: .word FUN_020C6130 -_020C6058: .word 0x021D33DA - - arm_func_start FUN_020C605C -FUN_020C605C: ; 0x020C605C - ldr ip, _020C6068 ; =FUN_020C6130 - ldr r0, _020C606C ; =0x021D33D8 - bx r12 - .balign 4 -_020C6068: .word FUN_020C6130 -_020C606C: .word 0x021D33D8 - - arm_func_start GX_ResetBankForSubBG -GX_ResetBankForSubBG: ; 0x020C6070 - ldr ip, _020C607C ; =FUN_020C6130 - ldr r0, _020C6080 ; =0x021D33D6 - bx r12 - .balign 4 -_020C607C: .word FUN_020C6130 -_020C6080: .word 0x021D33D6 - - arm_func_start GX_ResetBankForClearImage -GX_ResetBankForClearImage: ; 0x020C6084 - ldr ip, _020C6090 ; =FUN_020C6130 - ldr r0, _020C6094 ; =0x021D33D0 - bx r12 - .balign 4 -_020C6090: .word FUN_020C6130 -_020C6094: .word 0x021D33D0 - - arm_func_start GX_ResetBankForTexPltt -GX_ResetBankForTexPltt: ; 0x020C6098 - ldr ip, _020C60A4 ; =FUN_020C6130 - ldr r0, _020C60A8 ; =0x021D33CE - bx r12 - .balign 4 -_020C60A4: .word FUN_020C6130 -_020C60A8: .word 0x021D33CE - - arm_func_start GX_ResetBankForTex -GX_ResetBankForTex: ; 0x020C60AC - ldr ip, _020C60B8 ; =FUN_020C6130 - ldr r0, _020C60BC ; =0x021D33CC - bx r12 - .balign 4 -_020C60B8: .word FUN_020C6130 -_020C60BC: .word 0x021D33CC - - arm_func_start GX_ResetBankForOBJExtPltt -GX_ResetBankForOBJExtPltt: ; 0x020C60C0 - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr ip, _020C60DC ; =FUN_020C6130 - bic r1, r1, #0x80000000 - ldr r0, _020C60E0 ; =0x021D33D4 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C60DC: .word FUN_020C6130 -_020C60E0: .word 0x021D33D4 - - arm_func_start GX_ResetBankForBGExtPltt -GX_ResetBankForBGExtPltt: ; 0x020C60E4 - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr ip, _020C6100 ; =FUN_020C6130 - bic r1, r1, #0x40000000 - ldr r0, _020C6104 ; =0x021D33D2 - str r1, [r2, #0x0] - bx r12 - .balign 4 -_020C6100: .word FUN_020C6130 -_020C6104: .word 0x021D33D2 - - arm_func_start GX_ResetBankForOBJ -GX_ResetBankForOBJ: ; 0x020C6108 - ldr ip, _020C6114 ; =FUN_020C6130 - ldr r0, _020C6118 ; =0x021D33C8 - bx r12 - .balign 4 -_020C6114: .word FUN_020C6130 -_020C6118: .word 0x021D33C8 - - arm_func_start GX_ResetBankForBG -GX_ResetBankForBG: ; 0x020C611C - ldr ip, _020C6128 ; =FUN_020C6130 - ldr r0, _020C612C ; =0x021D33C6 - bx r12 - .balign 4 -_020C6128: .word FUN_020C6130 -_020C612C: .word 0x021D33C6 - - arm_func_start FUN_020C6130 -FUN_020C6130: ; 0x020C6130 - stmdb sp!, {r4,lr} - ldrh r4, [r0, #0x0] - mov r2, #0x0 - ldr r1, _020C6164 ; =0x021D33C4 - strh r2, [r0, #0x0] - ldrh r2, [r1, #0x0] - mov r0, r4 - orr r2, r2, r4 - strh r2, [r1, #0x0] - bl GX_VRAMCNT_SetLCDC_ - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C6164: .word 0x021D33C4 - - arm_func_start GX_SetBankForSubOBJExtPltt -GX_SetBankForSubOBJExtPltt: ; 0x020C6168 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C61E8 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x18] - ldrh r3, [r1, #0x0] - cmp r0, #0x0 - strh r0, [r1, #0x18] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - beq _020C61C0 - cmp r0, #0x100 - bne _020C61D0 - ldr r3, _020C61EC ; =0x04001000 - ldr r0, _020C61F0 ; =0x04000249 - ldr r2, [r3, #0x0] - mov r1, #0x83 - orr r2, r2, #0x80000000 - str r2, [r3, #0x0] - strb r1, [r0, #0x0] - b _020C61D0 -_020C61C0: - ldr r1, _020C61EC ; =0x04001000 - ldr r0, [r1, #0x0] - bic r0, r0, #0x80000000 - str r0, [r1, #0x0] -_020C61D0: - ldr r0, _020C61E8 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C61E8: .word 0x021D33C4 -_020C61EC: .word 0x04001000 -_020C61F0: .word 0x04000249 - - arm_func_start GX_SetBankForSubBGExtPltt -GX_SetBankForSubBGExtPltt: ; 0x020C61F4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C6274 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x16] - ldrh r3, [r1, #0x0] - cmp r0, #0x0 - strh r0, [r1, #0x16] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - beq _020C624C - cmp r0, #0x80 - bne _020C625C - ldr r3, _020C6278 ; =0x04001000 - ldr r0, _020C627C ; =0x04000248 - ldr r2, [r3, #0x0] - mov r1, #0x82 - orr r2, r2, #0x40000000 - str r2, [r3, #0x0] - strb r1, [r0, #0x0] - b _020C625C -_020C624C: - ldr r1, _020C6278 ; =0x04001000 - ldr r0, [r1, #0x0] - bic r0, r0, #0x40000000 - str r0, [r1, #0x0] -_020C625C: - ldr r0, _020C6274 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C6274: .word 0x021D33C4 -_020C6278: .word 0x04001000 -_020C627C: .word 0x04000248 - - arm_func_start GX_SetBankForSubOBJ -GX_SetBankForSubOBJ: ; 0x020C6280 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C62F0 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x14] - ldrh r3, [r1, #0x0] - cmp r0, #0x0 - strh r0, [r1, #0x14] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - beq _020C62D8 - cmp r0, #0x8 - beq _020C62CC - cmp r0, #0x100 - ldreq r0, _020C62F4 ; =0x04000249 - moveq r1, #0x82 - streqb r1, [r0, #0x0] - b _020C62D8 -_020C62CC: - ldr r0, _020C62F8 ; =0x04000243 - mov r1, #0x84 - strb r1, [r0, #0x0] -_020C62D8: - ldr r0, _020C62F0 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C62F0: .word 0x021D33C4 -_020C62F4: .word 0x04000249 -_020C62F8: .word 0x04000243 - - arm_func_start GX_SetBankForSubBG -GX_SetBankForSubBG: ; 0x020C62FC - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C6398 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x12] - ldrh r3, [r1, #0x0] - cmp r0, #0x80 - strh r0, [r1, #0x12] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - bgt _020C6360 - cmp r0, #0x80 - bge _020C6374 - cmp r0, #0x4 - bgt _020C6380 - cmp r0, #0x0 - blt _020C6380 - cmp r0, #0x0 - beq _020C6380 - cmp r0, #0x4 - ldreq r0, _020C639C ; =0x04000242 - moveq r1, #0x84 - streqb r1, [r0, #0x0] - b _020C6380 -_020C6360: - cmp r0, #0x180 - bne _020C6380 - ldr r0, _020C63A0 ; =0x04000249 - mov r1, #0x81 - strb r1, [r0, #0x0] -_020C6374: - ldr r0, _020C63A4 ; =0x04000248 - mov r1, #0x81 - strb r1, [r0, #0x0] -_020C6380: - ldr r0, _020C6398 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C6398: .word 0x021D33C4 -_020C639C: .word 0x04000242 -_020C63A0: .word 0x04000249 -_020C63A4: .word 0x04000248 - - arm_func_start GX_SetBankForLCDC -GX_SetBankForLCDC: ; 0x020C63A8 - ldr r1, _020C63C0 ; =0x021D33C4 - ldr ip, _020C63C4 ; =GX_VRAMCNT_SetLCDC_ - ldrh r2, [r1, #0x0] - orr r2, r2, r0 - strh r2, [r1, #0x0] - bx r12 - .balign 4 -_020C63C0: .word 0x021D33C4 -_020C63C4: .word GX_VRAMCNT_SetLCDC_ - - arm_func_start GX_SetBankForARM7 -GX_SetBankForARM7: ; 0x020C63C8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C6474 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x6] - ldrh r3, [r1, #0x0] - cmp r0, #0x8 - strh r0, [r1, #0x6] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - bgt _020C642C - cmp r0, #0x8 - bge _020C6450 - cmp r0, #0x4 - bgt _020C645C - cmp r0, #0x0 - blt _020C645C - cmp r0, #0x0 - beq _020C645C - cmp r0, #0x4 - ldreq r0, _020C6478 ; =0x04000242 - moveq r1, #0x82 - streqb r1, [r0, #0x0] - b _020C645C -_020C642C: - cmp r0, #0xc - bne _020C645C - ldr r1, _020C647C ; =0x04000243 - mov r2, #0x8a - strb r2, [r1, #0x0] - ldr r0, _020C6478 ; =0x04000242 - mov r1, #0x82 - strb r1, [r0, #0x0] - b _020C645C -_020C6450: - ldr r0, _020C647C ; =0x04000243 - mov r1, #0x82 - strb r1, [r0, #0x0] -_020C645C: - ldr r0, _020C6474 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C6474: .word 0x021D33C4 -_020C6478: .word 0x04000242 -_020C647C: .word 0x04000243 - - arm_func_start GX_SetBankForClearImage -GX_SetBankForClearImage: ; 0x020C6480 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C65A8 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0xc] - ldrh r3, [r1, #0x0] - cmp r0, #0xc - strh r0, [r1, #0xc] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - addls pc, pc, r0, lsl #0x2 - b _020C6590 -_020C64B4: ; 0x020C64B4 - b _020C6540 -_020C64B8: ; 0x020C64B8 - b _020C6554 -_020C64BC: ; 0x020C64BC - b _020C64F4 -_020C64C0: ; 0x020C64C0 - b _020C64E8 -_020C64C4: ; 0x020C64C4 - b _020C6574 -_020C64C8: ; 0x020C64C8 - b _020C6590 -_020C64CC: ; 0x020C64CC - b _020C6590 -_020C64D0: ; 0x020C64D0 - b _020C6590 -_020C64D4: ; 0x020C64D4 - b _020C6520 -_020C64D8: ; 0x020C64D8 - b _020C6590 -_020C64DC: ; 0x020C64DC - b _020C6590 -_020C64E0: ; 0x020C64E0 - b _020C6590 -_020C64E4: ; 0x020C64E4 - b _020C6514 -_020C64E8: - ldr r0, _020C65AC ; =0x04000240 - mov r1, #0x93 - strb r1, [r0, #0x0] -_020C64F4: - ldr r0, _020C65B0 ; =0x04000241 - mov r2, #0x9b - ldr r1, _020C65B4 ; =0x04000060 - strb r2, [r0, #0x0] - ldrh r0, [r1, #0x0] - orr r0, r0, #0x4000 - strh r0, [r1, #0x0] - b _020C6590 -_020C6514: - ldr r0, _020C65B8 ; =0x04000242 - mov r1, #0x93 - strb r1, [r0, #0x0] -_020C6520: - ldr r0, _020C65BC ; =0x04000243 - mov r2, #0x9b - ldr r1, _020C65B4 ; =0x04000060 - strb r2, [r0, #0x0] - ldrh r0, [r1, #0x0] - orr r0, r0, #0x4000 - strh r0, [r1, #0x0] - b _020C6590 -_020C6540: - ldr r1, _020C65B4 ; =0x04000060 - ldrh r0, [r1, #0x0] - bic r0, r0, #0x4000 - strh r0, [r1, #0x0] - b _020C6590 -_020C6554: - ldr r0, _020C65AC ; =0x04000240 - mov r2, #0x9b - ldr r1, _020C65B4 ; =0x04000060 - strb r2, [r0, #0x0] - ldrh r0, [r1, #0x0] - orr r0, r0, #0x4000 - strh r0, [r1, #0x0] - b _020C6590 -_020C6574: - ldr r0, _020C65B8 ; =0x04000242 - mov r2, #0x9b - ldr r1, _020C65B4 ; =0x04000060 - strb r2, [r0, #0x0] - ldrh r0, [r1, #0x0] - orr r0, r0, #0x4000 - strh r0, [r1, #0x0] -_020C6590: - ldr r0, _020C65A8 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C65A8: .word 0x021D33C4 -_020C65AC: .word 0x04000240 -_020C65B0: .word 0x04000241 -_020C65B4: .word 0x04000060 -_020C65B8: .word 0x04000242 -_020C65BC: .word 0x04000243 - - arm_func_start GX_SetBankForTexPltt -GX_SetBankForTexPltt: ; 0x020C65C0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C66A4 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0xa] - ldrh r3, [r1, #0x0] - cmp r0, #0x30 - strh r0, [r1, #0xa] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - bgt _020C661C - cmp r0, #0x30 - bge _020C6674 - cmp r0, #0x10 - bgt _020C6610 - cmp r0, #0x10 - bge _020C6680 - cmp r0, #0x0 - b _020C668C -_020C6610: - cmp r0, #0x20 - beq _020C6658 - b _020C668C -_020C661C: - cmp r0, #0x60 - bgt _020C6640 - cmp r0, #0x60 - bge _020C664C - cmp r0, #0x40 - ldreq r0, _020C66A8 ; =0x04000246 - moveq r1, #0x83 - streqb r1, [r0, #0x0] - b _020C668C -_020C6640: - cmp r0, #0x70 - beq _020C6668 - b _020C668C -_020C664C: - ldr r0, _020C66A8 ; =0x04000246 - mov r1, #0x8b - strb r1, [r0, #0x0] -_020C6658: - ldr r0, _020C66AC ; =0x04000245 - mov r1, #0x83 - strb r1, [r0, #0x0] - b _020C668C -_020C6668: - ldr r0, _020C66A8 ; =0x04000246 - mov r1, #0x9b - strb r1, [r0, #0x0] -_020C6674: - ldr r0, _020C66AC ; =0x04000245 - mov r1, #0x93 - strb r1, [r0, #0x0] -_020C6680: - ldr r0, _020C66B0 ; =0x04000244 - mov r1, #0x83 - strb r1, [r0, #0x0] -_020C668C: - ldr r0, _020C66A4 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C66A4: .word 0x021D33C4 -_020C66A8: .word 0x04000246 -_020C66AC: .word 0x04000245 -_020C66B0: .word 0x04000244 - - arm_func_start GX_SetBankForTex -GX_SetBankForTex: ; 0x020C66B4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C689C ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x8] - ldrh r3, [r1, #0x0] - cmp r0, #0x0 - strh r0, [r1, #0x8] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - bne _020C66FC - ldr r2, _020C68A0 ; =0x04000060 - ldr r0, _020C68A4 ; =0x0000CFFE - ldrh r1, [r2, #0x0] - and r0, r1, r0 - strh r0, [r2, #0x0] - b _020C6884 -_020C66FC: - ldr r2, _020C68A0 ; =0x04000060 - cmp r0, #0xf - ldrh r1, [r2, #0x0] - bic r1, r1, #0x3000 - orr r1, r1, #0x1 - strh r1, [r2, #0x0] - addls pc, pc, r0, lsl #0x2 - b _020C6884 -_020C671C: ; 0x020C671C - b _020C6884 -_020C6720: ; 0x020C6720 - b _020C6878 -_020C6724: ; 0x020C6724 - b _020C6844 -_020C6728: ; 0x020C6728 - b _020C686C -_020C672C: ; 0x020C672C - b _020C681C -_020C6730: ; 0x020C6730 - b _020C675C -_020C6734: ; 0x020C6734 - b _020C6838 -_020C6738: ; 0x020C6738 - b _020C6860 -_020C673C: ; 0x020C673C - b _020C6800 -_020C6740: ; 0x020C6740 - b _020C6778 -_020C6744: ; 0x020C6744 - b _020C6794 -_020C6748: ; 0x020C6748 - b _020C67B0 -_020C674C: ; 0x020C674C - b _020C6810 -_020C6750: ; 0x020C6750 - b _020C67D8 -_020C6754: ; 0x020C6754 - b _020C682C -_020C6758: ; 0x020C6758 - b _020C6854 -_020C675C: - ldr r1, _020C68A8 ; =0x04000240 - mov r2, #0x83 - ldr r0, _020C68AC ; =0x04000242 - strb r2, [r1, #0x0] - mov r1, #0x8b - strb r1, [r0, #0x0] - b _020C6884 -_020C6778: - ldr r1, _020C68A8 ; =0x04000240 - mov r2, #0x83 - ldr r0, _020C68B0 ; =0x04000243 - strb r2, [r1, #0x0] - mov r1, #0x8b - strb r1, [r0, #0x0] - b _020C6884 -_020C6794: - ldr r1, _020C68B4 ; =0x04000241 - mov r2, #0x83 - ldr r0, _020C68B0 ; =0x04000243 - strb r2, [r1, #0x0] - mov r1, #0x8b - strb r1, [r0, #0x0] - b _020C6884 -_020C67B0: - ldr r0, _020C68A8 ; =0x04000240 - mov r2, #0x83 - ldr r1, _020C68B4 ; =0x04000241 - strb r2, [r0, #0x0] - mov r2, #0x8b - ldr r0, _020C68B0 ; =0x04000243 - strb r2, [r1, #0x0] - mov r1, #0x93 - strb r1, [r0, #0x0] - b _020C6884 -_020C67D8: - ldr r0, _020C68A8 ; =0x04000240 - mov r2, #0x83 - ldr r1, _020C68AC ; =0x04000242 - strb r2, [r0, #0x0] - mov r2, #0x8b - ldr r0, _020C68B0 ; =0x04000243 - strb r2, [r1, #0x0] - mov r1, #0x93 - strb r1, [r0, #0x0] - b _020C6884 -_020C6800: - ldr r0, _020C68B0 ; =0x04000243 - mov r1, #0x83 - strb r1, [r0, #0x0] - b _020C6884 -_020C6810: - ldr r0, _020C68B0 ; =0x04000243 - mov r1, #0x8b - strb r1, [r0, #0x0] -_020C681C: - ldr r0, _020C68AC ; =0x04000242 - mov r1, #0x83 - strb r1, [r0, #0x0] - b _020C6884 -_020C682C: - ldr r0, _020C68B0 ; =0x04000243 - mov r1, #0x93 - strb r1, [r0, #0x0] -_020C6838: - ldr r0, _020C68AC ; =0x04000242 - mov r1, #0x8b - strb r1, [r0, #0x0] -_020C6844: - ldr r0, _020C68B4 ; =0x04000241 - mov r1, #0x83 - strb r1, [r0, #0x0] - b _020C6884 -_020C6854: - ldr r0, _020C68B0 ; =0x04000243 - mov r1, #0x9b - strb r1, [r0, #0x0] -_020C6860: - ldr r0, _020C68AC ; =0x04000242 - mov r1, #0x93 - strb r1, [r0, #0x0] -_020C686C: - ldr r0, _020C68B4 ; =0x04000241 - mov r1, #0x8b - strb r1, [r0, #0x0] -_020C6878: - ldr r0, _020C68A8 ; =0x04000240 - mov r1, #0x83 - strb r1, [r0, #0x0] -_020C6884: - ldr r0, _020C689C ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C689C: .word 0x021D33C4 -_020C68A0: .word 0x04000060 -_020C68A4: .word 0x0000CFFE -_020C68A8: .word 0x04000240 -_020C68AC: .word 0x04000242 -_020C68B0: .word 0x04000243 -_020C68B4: .word 0x04000241 - - arm_func_start GX_SetBankForOBJExtPltt -GX_SetBankForOBJExtPltt: ; 0x020C68B8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C6964 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x10] - ldrh r3, [r1, #0x0] - cmp r0, #0x0 - strh r0, [r1, #0x10] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - beq _020C693C - cmp r0, #0x20 - beq _020C68FC - cmp r0, #0x40 - beq _020C691C - b _020C694C -_020C68FC: - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr r0, _020C6968 ; =0x04000245 - orr r1, r1, #0x80000000 - str r1, [r2, #0x0] - mov r1, #0x85 - strb r1, [r0, #0x0] - b _020C694C -_020C691C: - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr r0, _020C696C ; =0x04000246 - orr r1, r1, #0x80000000 - str r1, [r2, #0x0] - mov r1, #0x85 - strb r1, [r0, #0x0] - b _020C694C -_020C693C: - mov r1, #0x4000000 - ldr r0, [r1, #0x0] - bic r0, r0, #0x80000000 - str r0, [r1, #0x0] -_020C694C: - ldr r0, _020C6964 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C6964: .word 0x021D33C4 -_020C6968: .word 0x04000245 -_020C696C: .word 0x04000246 - - arm_func_start GX_SetBankForBGExtPltt -GX_SetBankForBGExtPltt: ; 0x020C6970 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C6A74 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0xe] - ldrh r3, [r1, #0x0] - cmp r0, #0x20 - strh r0, [r1, #0xe] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - bgt _020C69D4 - cmp r0, #0x20 - bge _020C6A40 - cmp r0, #0x0 - bgt _020C69C8 - cmp r0, #0x0 - moveq r1, #0x4000000 - ldreq r0, [r1, #0x0] - biceq r0, r0, #0x40000000 - streq r0, [r1, #0x0] - b _020C6A5C -_020C69C8: - cmp r0, #0x10 - beq _020C69F4 - b _020C6A5C -_020C69D4: - cmp r0, #0x40 - bgt _020C69E8 - cmp r0, #0x40 - beq _020C6A14 - b _020C6A5C -_020C69E8: - cmp r0, #0x60 - beq _020C6A34 - b _020C6A5C -_020C69F4: - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr r0, _020C6A78 ; =0x04000244 - orr r1, r1, #0x40000000 - str r1, [r2, #0x0] - mov r1, #0x84 - strb r1, [r0, #0x0] - b _020C6A5C -_020C6A14: - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldr r0, _020C6A7C ; =0x04000246 - orr r1, r1, #0x40000000 - str r1, [r2, #0x0] - mov r1, #0x8c - strb r1, [r0, #0x0] - b _020C6A5C -_020C6A34: - ldr r0, _020C6A7C ; =0x04000246 - mov r1, #0x8c - strb r1, [r0, #0x0] -_020C6A40: - ldr r0, _020C6A80 ; =0x04000245 - mov r1, #0x84 - strb r1, [r0, #0x0] - mov r1, #0x4000000 - ldr r0, [r1, #0x0] - orr r0, r0, #0x40000000 - str r0, [r1, #0x0] -_020C6A5C: - ldr r0, _020C6A74 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C6A74: .word 0x021D33C4 -_020C6A78: .word 0x04000244 -_020C6A7C: .word 0x04000246 -_020C6A80: .word 0x04000245 - - arm_func_start GX_SetBankForOBJ -GX_SetBankForOBJ: ; 0x020C6A84 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C6BD8 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x4] - ldrh r3, [r1, #0x0] - cmp r0, #0x30 - strh r0, [r1, #0x4] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - bgt _020C6AF4 - cmp r0, #0x30 - bge _020C6B70 - cmp r0, #0x10 - bgt _020C6AE8 - cmp r0, #0x10 - bge _020C6B7C - cmp r0, #0x3 - addls pc, pc, r0, lsl #0x2 - b _020C6BC0 -_020C6AD8: ; 0x020C6AD8 - b _020C6BC0 -_020C6ADC: ; 0x020C6ADC - b _020C6B44 -_020C6AE0: ; 0x020C6AE0 - b _020C6B54 -_020C6AE4: ; 0x020C6AE4 - b _020C6B38 -_020C6AE8: - cmp r0, #0x20 - beq _020C6BB4 - b _020C6BC0 -_020C6AF4: - cmp r0, #0x50 - bgt _020C6B18 - cmp r0, #0x50 - bge _020C6B8C - cmp r0, #0x40 - ldreq r0, _020C6BDC ; =0x04000246 - moveq r1, #0x82 - streqb r1, [r0, #0x0] - b _020C6BC0 -_020C6B18: - cmp r0, #0x60 - bgt _020C6B2C - cmp r0, #0x60 - beq _020C6BA8 - b _020C6BC0 -_020C6B2C: - cmp r0, #0x70 - beq _020C6B64 - b _020C6BC0 -_020C6B38: - ldr r0, _020C6BE0 ; =0x04000241 - mov r1, #0x8a - strb r1, [r0, #0x0] -_020C6B44: - ldr r0, _020C6BE4 ; =0x04000240 - mov r1, #0x82 - strb r1, [r0, #0x0] - b _020C6BC0 -_020C6B54: - ldr r0, _020C6BE0 ; =0x04000241 - mov r1, #0x82 - strb r1, [r0, #0x0] - b _020C6BC0 -_020C6B64: - ldr r0, _020C6BDC ; =0x04000246 - mov r1, #0x9a - strb r1, [r0, #0x0] -_020C6B70: - ldr r0, _020C6BE8 ; =0x04000245 - mov r1, #0x92 - strb r1, [r0, #0x0] -_020C6B7C: - ldr r0, _020C6BEC ; =0x04000244 - mov r1, #0x82 - strb r1, [r0, #0x0] - b _020C6BC0 -_020C6B8C: - ldr r1, _020C6BDC ; =0x04000246 - mov r2, #0x92 - ldr r0, _020C6BEC ; =0x04000244 - strb r2, [r1, #0x0] - mov r1, #0x82 - strb r1, [r0, #0x0] - b _020C6BC0 -_020C6BA8: - ldr r0, _020C6BDC ; =0x04000246 - mov r1, #0x8a - strb r1, [r0, #0x0] -_020C6BB4: - ldr r0, _020C6BE8 ; =0x04000245 - mov r1, #0x82 - strb r1, [r0, #0x0] -_020C6BC0: - ldr r0, _020C6BD8 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C6BD8: .word 0x021D33C4 -_020C6BDC: .word 0x04000246 -_020C6BE0: .word 0x04000241 -_020C6BE4: .word 0x04000240 -_020C6BE8: .word 0x04000245 -_020C6BEC: .word 0x04000244 - - arm_func_start GX_SetBankForBG -GX_SetBankForBG: ; 0x020C6BF0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020C6E88 ; =0x021D33C4 - mvn r12, r0 - ldrh r2, [r1, #0x2] - ldrh r3, [r1, #0x0] - cmp r0, #0x40 - strh r0, [r1, #0x2] - orr r2, r3, r2 - and r2, r12, r2 - strh r2, [r1, #0x0] - bgt _020C6CCC - cmp r0, #0x40 - bge _020C6E64 - cmp r0, #0x20 - bgt _020C6CC0 - cmp r0, #0x0 - addge pc, pc, r0, lsl #0x2 - b _020C6E70 -_020C6C3C: ; 0x020C6C3C - b _020C6E70 -_020C6C40: ; 0x020C6C40 - b _020C6D6C -_020C6C44: ; 0x020C6C44 - b _020C6D38 -_020C6C48: ; 0x020C6C48 - b _020C6D60 -_020C6C4C: ; 0x020C6C4C - b _020C6D10 -_020C6C50: ; 0x020C6C50 - b _020C6DB0 -_020C6C54: ; 0x020C6C54 - b _020C6D2C -_020C6C58: ; 0x020C6C58 - b _020C6D54 -_020C6C5C: ; 0x020C6C5C - b _020C6CF4 -_020C6C60: ; 0x020C6C60 - b _020C6DCC -_020C6C64: ; 0x020C6C64 - b _020C6DE8 -_020C6C68: ; 0x020C6C68 - b _020C6D7C -_020C6C6C: ; 0x020C6C6C - b _020C6D04 -_020C6C70: ; 0x020C6C70 - b _020C6DA4 -_020C6C74: ; 0x020C6C74 - b _020C6D20 -_020C6C78: ; 0x020C6C78 - b _020C6D48 -_020C6C7C: ; 0x020C6C7C - b _020C6E1C -_020C6C80: ; 0x020C6C80 - b _020C6E70 -_020C6C84: ; 0x020C6C84 - b _020C6E70 -_020C6C88: ; 0x020C6C88 - b _020C6E70 -_020C6C8C: ; 0x020C6C8C - b _020C6E70 -_020C6C90: ; 0x020C6C90 - b _020C6E70 -_020C6C94: ; 0x020C6C94 - b _020C6E70 -_020C6C98: ; 0x020C6C98 - b _020C6E70 -_020C6C9C: ; 0x020C6C9C - b _020C6E70 -_020C6CA0: ; 0x020C6CA0 - b _020C6E70 -_020C6CA4: ; 0x020C6CA4 - b _020C6E70 -_020C6CA8: ; 0x020C6CA8 - b _020C6E70 -_020C6CAC: ; 0x020C6CAC - b _020C6E70 -_020C6CB0: ; 0x020C6CB0 - b _020C6E70 -_020C6CB4: ; 0x020C6CB4 - b _020C6E70 -_020C6CB8: ; 0x020C6CB8 - b _020C6E70 -_020C6CBC: ; 0x020C6CBC - b _020C6E54 -_020C6CC0: - cmp r0, #0x30 - beq _020C6E10 - b _020C6E70 -_020C6CCC: - cmp r0, #0x60 - bgt _020C6CE8 - cmp r0, #0x60 - bge _020C6E48 - cmp r0, #0x50 - beq _020C6E2C - b _020C6E70 -_020C6CE8: - cmp r0, #0x70 - beq _020C6E04 - b _020C6E70 -_020C6CF4: - ldr r0, _020C6E8C ; =0x04000243 - mov r1, #0x81 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6D04: - ldr r0, _020C6E8C ; =0x04000243 - mov r1, #0x89 - strb r1, [r0, #0x0] -_020C6D10: - ldr r0, _020C6E90 ; =0x04000242 - mov r1, #0x81 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6D20: - ldr r0, _020C6E8C ; =0x04000243 - mov r1, #0x91 - strb r1, [r0, #0x0] -_020C6D2C: - ldr r0, _020C6E90 ; =0x04000242 - mov r1, #0x89 - strb r1, [r0, #0x0] -_020C6D38: - ldr r0, _020C6E94 ; =0x04000241 - mov r1, #0x81 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6D48: - ldr r0, _020C6E8C ; =0x04000243 - mov r1, #0x99 - strb r1, [r0, #0x0] -_020C6D54: - ldr r0, _020C6E90 ; =0x04000242 - mov r1, #0x91 - strb r1, [r0, #0x0] -_020C6D60: - ldr r0, _020C6E94 ; =0x04000241 - mov r1, #0x89 - strb r1, [r0, #0x0] -_020C6D6C: - ldr r0, _020C6E98 ; =0x04000240 - mov r1, #0x81 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6D7C: - ldr r0, _020C6E98 ; =0x04000240 - mov r2, #0x81 - ldr r1, _020C6E94 ; =0x04000241 - strb r2, [r0, #0x0] - mov r2, #0x89 - ldr r0, _020C6E8C ; =0x04000243 - strb r2, [r1, #0x0] - mov r1, #0x91 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6DA4: - ldr r0, _020C6E8C ; =0x04000243 - mov r1, #0x91 - strb r1, [r0, #0x0] -_020C6DB0: - ldr r1, _020C6E98 ; =0x04000240 - mov r2, #0x81 - ldr r0, _020C6E90 ; =0x04000242 - strb r2, [r1, #0x0] - mov r1, #0x89 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6DCC: - ldr r1, _020C6E98 ; =0x04000240 - mov r2, #0x81 - ldr r0, _020C6E8C ; =0x04000243 - strb r2, [r1, #0x0] - mov r1, #0x89 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6DE8: - ldr r1, _020C6E94 ; =0x04000241 - mov r2, #0x81 - ldr r0, _020C6E8C ; =0x04000243 - strb r2, [r1, #0x0] - mov r1, #0x89 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6E04: - ldr r0, _020C6E9C ; =0x04000246 - mov r1, #0x99 - strb r1, [r0, #0x0] -_020C6E10: - ldr r0, _020C6EA0 ; =0x04000245 - mov r1, #0x91 - strb r1, [r0, #0x0] -_020C6E1C: - ldr r0, _020C6EA4 ; =0x04000244 - mov r1, #0x81 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6E2C: - ldr r1, _020C6E9C ; =0x04000246 - mov r2, #0x91 - ldr r0, _020C6EA4 ; =0x04000244 - strb r2, [r1, #0x0] - mov r1, #0x81 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6E48: - ldr r0, _020C6E9C ; =0x04000246 - mov r1, #0x89 - strb r1, [r0, #0x0] -_020C6E54: - ldr r0, _020C6EA0 ; =0x04000245 - mov r1, #0x81 - strb r1, [r0, #0x0] - b _020C6E70 -_020C6E64: - ldr r0, _020C6E9C ; =0x04000246 - mov r1, #0x81 - strb r1, [r0, #0x0] -_020C6E70: - ldr r0, _020C6E88 ; =0x021D33C4 - ldrh r0, [r0, #0x0] - bl GX_VRAMCNT_SetLCDC_ - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C6E88: .word 0x021D33C4 -_020C6E8C: .word 0x04000243 -_020C6E90: .word 0x04000242 -_020C6E94: .word 0x04000241 -_020C6E98: .word 0x04000240 -_020C6E9C: .word 0x04000246 -_020C6EA0: .word 0x04000245 -_020C6EA4: .word 0x04000244 - -.extern GX_VRAMCNT_SetLCDC_ -;GX_VRAMCNT_SetLCDC_: ; 0x020C6EA8 -; ands r1, r0, #0x1 -; ldrne r1, _020C6F3C ; =0x04000240 -; movne r2, #0x80 -; strneb r2, [r1, #0x0] -; ands r1, r0, #0x2 -; ldrne r1, _020C6F40 ; =0x04000241 -; movne r2, #0x80 -; strneb r2, [r1, #0x0] -; ands r1, r0, #0x4 -; ldrne r1, _020C6F44 ; =0x04000242 -; movne r2, #0x80 -; strneb r2, [r1, #0x0] -; ands r1, r0, #0x8 -; ldrne r1, _020C6F48 ; =0x04000243 -; movne r2, #0x80 -; strneb r2, [r1, #0x0] -; ands r1, r0, #0x10 -; ldrne r1, _020C6F4C ; =0x04000244 -; movne r2, #0x80 -; strneb r2, [r1, #0x0] -; ands r1, r0, #0x20 -; ldrne r1, _020C6F50 ; =0x04000245 -; movne r2, #0x80 -; strneb r2, [r1, #0x0] -; ands r1, r0, #0x40 -; ldrne r1, _020C6F54 ; =0x04000246 -; movne r2, #0x80 -; strneb r2, [r1, #0x0] -; ands r1, r0, #0x80 -; ldrne r1, _020C6F58 ; =0x04000248 -; movne r2, #0x80 -; strneb r2, [r1, #0x0] -; ands r0, r0, #0x100 -; ldrne r0, _020C6F5C ; =0x04000249 -; movne r1, #0x80 -; strneb r1, [r0, #0x0] -; bx lr -; .balign 4 -;_020C6F3C: .word 0x04000240 -;_020C6F40: .word 0x04000241 -;_020C6F44: .word 0x04000242 -;_020C6F48: .word 0x04000243 -;_020C6F4C: .word 0x04000244 -;_020C6F50: .word 0x04000245 -;_020C6F54: .word 0x04000246 -;_020C6F58: .word 0x04000248 -;_020C6F5C: .word 0x04000249 diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 81138da3..a9cb07b1 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -46,6 +46,11 @@ #define HW_REG_VRAMCNT_H 0x04000248 #define HW_REG_VRAMCNT_I 0x04000249 +#define HW_REG_DISPCNT 0x04000000 +#define HW_REG_DISPCNT_2D 0x04001000 + +#define HW_REG_DISP3DCNT 0x04000060 + //TODO: wait for register commit and replace these #define SETREG8(x, y) ((*(vu8 *)x) = y) #define SETREG16(x, y) ((*(vu16 *)x) = y) @@ -57,6 +62,9 @@ #define READREG32(x) (*(vu32 *)x) #define READREG64(x) (*(vu64 *)x) +//TODO: add SDK signatures and symbols +//TODO: add arm function attributes + struct DL { @@ -67,6 +75,23 @@ struct DL u32 var10; //pad end with zero bool }; +struct VRAM_banks +{ + u16 var00; //lcdc + u16 var02; //bg + u16 var04; //obj + u16 var06; //arm7 + u16 var08; //tex + u16 var0A; //texpltt + u16 var0C; //clearimage + u16 var0E; //bgextpltt + u16 var10; //objextpltt + u16 var12; //subbg + u16 var14; //subobj + u16 var16; //subbgextpltt + u16 var18; //subobjextpltt +}; + //GX_g3 void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2); s32 G3_EndMakeDL(struct DL *displaylist); @@ -110,6 +135,59 @@ void G3B_End(struct DL * displaylist); //GX_asm void GX_SendFifo48B(void *src, void *dst); +//GX_vramcnt +//some of the symbols don't match what the function does +void GX_VRAMCNT_SetLCDC_(u32 mask); +void GX_SetBankForBG(u16 bg); +void GX_SetBankForOBJ(u16 obj); +void GX_SetBankForBGExtPltt(u16 bgextpltt); +void GX_SetBankForOBJExtPltt(u16 objextpltt); +void GX_SetBankForTex(u16 tex); +void GX_SetBankForTexPltt(u16 texpltt); +void GX_SetBankForClearImage(u16 clearimage); +void GX_SetBankForARM7(u16 arm7); +void GX_SetBankForLCDC(u16 lcdc); +void GX_SetBankForSubBG(u16 subbg); +void GX_SetBankForSubOBJ(u16 subobj); +void GX_SetBankForSubBGExtPltt(u16 subbgextpltt); +void GX_SetBankForSubOBJExtPltt(u16 subobjextpltt); +u32 FUN_020C6130(u16 *ptr); +u32 GX_ResetBankForBG(); +u32 GX_ResetBankForOBJ(); +u32 GX_ResetBankForBGExtPltt(); +u32 GX_ResetBankForOBJExtPltt(); +u32 GX_ResetBankForTex(); +u32 GX_ResetBankForTexPltt(); +u32 GX_ResetBankForClearImage(); +u32 GX_ResetBankForSubBG(); +u32 FUN_020C605C(); +u32 FUN_020C6034(); +u32 GX_ResetBankForSubOBJ(); +u32 FUN_020C5F28(u16 *ptr); +u32 disableBankForX_(); +u32 GX_DisableBankForOBJExtPltt_2(); +u32 GX_DisableBankForBGExtPltt(); +u32 GX_DisableBankForOBJExtPltt(); +u32 GX_DisableBankForTexPltt_2(); +u32 GX_DisableBankForTexPltt(); +u32 GX_DisableBankForClearImage(); +u32 GX_DisableBankForARM7(); +u32 GX_DisableBankForLCDC(); +u32 GX_DisableBankForSubBGExtPltt(); +u32 GX_DisableBankForSubOBJExtPltt_2(); +u32 FUN_020C5E04(); +u32 GX_DisableBankForSubOBJExtPltt(); +u32 GX_GetBankForBGExtPltt_2(); +u32 GX_GetBankForOBJ(); +u32 GX_GetBankForBGExtPltt(); +u32 GX_GetBankForOBJExtPltt(); +u32 FUN_020C5D8C(); +u32 GX_GetBankForTexPltt(); +u32 GX_GetBankForLCDC(); +u32 GX_GetBankForSubBGExtPltt_2(); +u32 GX_GetBankForSubOBJ(); +u32 GX_GetBankForSubBGExtPltt(); +u32 GX_GetBankForSubOBJExtPltt(); //GXi_NopClearFifo128_ probably asm diff --git a/arm9/lib/src/GX_vramcnt.c b/arm9/lib/src/GX_vramcnt.c new file mode 100644 index 00000000..aa3d9cc9 --- /dev/null +++ b/arm9/lib/src/GX_vramcnt.c @@ -0,0 +1,581 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +extern u16 gUnk021D33BC; +extern struct VRAM_banks gUnk021D33C4; + +void OSi_UnlockVram(u16, u16); + +void GX_VRAMCNT_SetLCDC_(u32 mask){ + if (mask & (0x1 << 0)) + SETREG8(HW_REG_VRAMCNT_A, 0x80); + if (mask & (0x1 << 1)) + SETREG8(HW_REG_VRAMCNT_B, 0x80); + if (mask & (0x1 << 2)) + SETREG8(HW_REG_VRAMCNT_C, 0x80); + if (mask & (0x1 << 3)) + SETREG8(HW_REG_VRAMCNT_D, 0x80); + if (mask & (0x1 << 4)) + SETREG8(HW_REG_VRAMCNT_E, 0x80); + if (mask & (0x1 << 5)) + SETREG8(HW_REG_VRAMCNT_F, 0x80); + if (mask & (0x1 << 6)) + SETREG8(HW_REG_VRAMCNT_G, 0x80); + if (mask & (0x1 << 7)) + SETREG8(HW_REG_VRAMCNT_H, 0x80); + if (mask & (0x1 << 8)) + SETREG8(HW_REG_VRAMCNT_I, 0x80); +} + +void GX_SetBankForBG(u16 bg){ + gUnk021D33C4.var00 = ~bg & (gUnk021D33C4.var00 | gUnk021D33C4.var02); + gUnk021D33C4.var02 = bg; + switch (bg) + { + case 8: + SETREG8(HW_REG_VRAMCNT_D, 0x81); + break; + case 12: + SETREG8(HW_REG_VRAMCNT_D, 0x89); + case 4: + SETREG8(HW_REG_VRAMCNT_C, 0x81); + break; + case 14: + SETREG8(HW_REG_VRAMCNT_D, 0x91); + case 6: + SETREG8(HW_REG_VRAMCNT_C, 0x89); + case 2: + SETREG8(HW_REG_VRAMCNT_B, 0x81); + break; + case 15: + SETREG8(HW_REG_VRAMCNT_D, 0x99); + case 7: + SETREG8(HW_REG_VRAMCNT_C, 0x91); + case 3: + SETREG8(HW_REG_VRAMCNT_B, 0x89); + case 1: + SETREG8(HW_REG_VRAMCNT_A, 0x81); + break; + case 11: + SETREG8(HW_REG_VRAMCNT_A, 0x81); + SETREG8(HW_REG_VRAMCNT_B, 0x89); + SETREG8(HW_REG_VRAMCNT_D, 0x91); + break; + case 13: + SETREG8(HW_REG_VRAMCNT_D, 0x91); + case 5: + SETREG8(HW_REG_VRAMCNT_A, 0x81); + SETREG8(HW_REG_VRAMCNT_C, 0x89); + break; + case 9: + SETREG8(HW_REG_VRAMCNT_A, 0x81); + SETREG8(HW_REG_VRAMCNT_D, 0x89); + break; + case 10: + SETREG8(HW_REG_VRAMCNT_B, 0x81); + SETREG8(HW_REG_VRAMCNT_D, 0x89); + break; + case 112: + SETREG8(HW_REG_VRAMCNT_G, 0x99); + case 48: + SETREG8(HW_REG_VRAMCNT_F, 0x91); + case 16: + SETREG8(HW_REG_VRAMCNT_E, 0x81); + break; + case 80: + SETREG8(HW_REG_VRAMCNT_G, 0x91); + SETREG8(HW_REG_VRAMCNT_E, 0x81); + break; + case 96: + SETREG8(HW_REG_VRAMCNT_G, 0x89); + case 32: + SETREG8(HW_REG_VRAMCNT_F, 0x81); + break; + case 64: + SETREG8(HW_REG_VRAMCNT_G, 0x81); + break; + default: + break; + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + +void GX_SetBankForOBJ(u16 obj){ + gUnk021D33C4.var00 = ~obj & (gUnk021D33C4.var00 | gUnk021D33C4.var04); + gUnk021D33C4.var04 = obj; + switch (obj) + { + case 3: + SETREG8(HW_REG_VRAMCNT_B, 0x8A); + case 1: + SETREG8(HW_REG_VRAMCNT_A, 0x82); + case 0: //needed to match + break; + case 2: + SETREG8(HW_REG_VRAMCNT_B, 0x82); + break; + case 112: + SETREG8(HW_REG_VRAMCNT_G, 0x9A); + case 48: + SETREG8(HW_REG_VRAMCNT_F, 0x92); + case 16: + SETREG8(HW_REG_VRAMCNT_E, 0x82); + break; + case 80: + SETREG8(HW_REG_VRAMCNT_G, 0x92); + SETREG8(HW_REG_VRAMCNT_E, 0x82); + break; + case 96: + SETREG8(HW_REG_VRAMCNT_G, 0x8A); + case 32: + SETREG8(HW_REG_VRAMCNT_F, 0x82); + break; + case 64: + SETREG8(HW_REG_VRAMCNT_G, 0x82); + break; + default: + break; + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + +void GX_SetBankForBGExtPltt(u16 bgextpltt){ + gUnk021D33C4.var00 = ~bgextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var0E); + gUnk021D33C4.var0E = bgextpltt; + switch (bgextpltt) + { + case 0x10: + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x40000000); + SETREG8(HW_REG_VRAMCNT_E, 0x84); + break; + case 0x40: + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x40000000); + SETREG8(HW_REG_VRAMCNT_G, 0x8C); + break; + case 0x60: + SETREG8(HW_REG_VRAMCNT_G, 0x8C); + case 0x20: + SETREG8(HW_REG_VRAMCNT_F, 0x84); + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x40000000); + break; + case 0: + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000); + break; + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + +void GX_SetBankForOBJExtPltt(u16 objextpltt){ + gUnk021D33C4.var00 = ~objextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var10); + gUnk021D33C4.var10 = objextpltt; + switch (objextpltt) + { + case 32: + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x80000000); + SETREG8(HW_REG_VRAMCNT_F, 0x85); + break; + case 64: + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x80000000); + SETREG8(HW_REG_VRAMCNT_G, 0x85); + break; + case 0: + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000); + break; + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + +void GX_SetBankForTex(u16 tex){ + gUnk021D33C4.var00 = ~tex & (gUnk021D33C4.var00 | gUnk021D33C4.var08); + gUnk021D33C4.var08 = tex; + if (tex == 0) + { + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & 0x0000CFFE); + } + else + { + SETREG16(HW_REG_DISP3DCNT, (READREG16(HW_REG_DISP3DCNT) & ~0x3000) | 0x1); + switch (tex) + { + case 5: + SETREG8(HW_REG_VRAMCNT_A, 0x83); + SETREG8(HW_REG_VRAMCNT_C, 0x8B); + break; + case 9: + SETREG8(HW_REG_VRAMCNT_A, 0x83); + SETREG8(HW_REG_VRAMCNT_D, 0x8B); + break; + case 10: + SETREG8(HW_REG_VRAMCNT_B, 0x83); + SETREG8(HW_REG_VRAMCNT_D, 0x8B); + break; + case 11: + SETREG8(HW_REG_VRAMCNT_A, 0x83); + SETREG8(HW_REG_VRAMCNT_B, 0x8B); + SETREG8(HW_REG_VRAMCNT_D, 0x93); + break; + case 13: + SETREG8(HW_REG_VRAMCNT_A, 0x83); + SETREG8(HW_REG_VRAMCNT_C, 0x8B); + SETREG8(HW_REG_VRAMCNT_D, 0x93); + break; + case 8: + SETREG8(HW_REG_VRAMCNT_D, 0x83); + break; + case 12: + SETREG8(HW_REG_VRAMCNT_D, 0x8B); + case 4: + SETREG8(HW_REG_VRAMCNT_C, 0x83); + break; + case 14: + SETREG8(HW_REG_VRAMCNT_D, 0x93); + case 6: + SETREG8(HW_REG_VRAMCNT_C, 0x8B); + case 2: + SETREG8(HW_REG_VRAMCNT_B, 0x83); + break; + case 15: + SETREG8(HW_REG_VRAMCNT_D, 0x9B); + case 7: + SETREG8(HW_REG_VRAMCNT_C, 0x93); + case 3: + SETREG8(HW_REG_VRAMCNT_B, 0x8B); + case 1: + SETREG8(HW_REG_VRAMCNT_A, 0x83); + break; + } + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + +void GX_SetBankForTexPltt(u16 texpltt){ + gUnk021D33C4.var00 = ~texpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var0A); + gUnk021D33C4.var0A = texpltt; + switch (texpltt) + { + case 0: //needed to match + break; + case 96: + SETREG8(HW_REG_VRAMCNT_G, 0x8B); + case 32: + SETREG8(HW_REG_VRAMCNT_F, 0x83); + break; + case 112: + SETREG8(HW_REG_VRAMCNT_G, 0x9B); + case 48: + SETREG8(HW_REG_VRAMCNT_F, 0x93); + case 16: + SETREG8(HW_REG_VRAMCNT_E, 0x83); + break; + case 64: + SETREG8(HW_REG_VRAMCNT_G, 0x83); + break; + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + +void GX_SetBankForClearImage(u16 clearimage){ + gUnk021D33C4.var00 = ~clearimage & (gUnk021D33C4.var00 | gUnk021D33C4.var0C); + gUnk021D33C4.var0C = clearimage; + switch (clearimage) + { + case 3: + SETREG8(HW_REG_VRAMCNT_A, 0x93); + case 2: + SETREG8(HW_REG_VRAMCNT_B, 0x9B); + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x4000); + break; + case 12: + SETREG8(HW_REG_VRAMCNT_C, 0x93); + case 8: + SETREG8(HW_REG_VRAMCNT_D, 0x9B); + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x4000); + break; + case 0: + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & ~0x4000); + break; + case 1: + SETREG8(HW_REG_VRAMCNT_A, 0x9B); + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x4000); + break; + case 4: + SETREG8(HW_REG_VRAMCNT_C, 0x9B); + SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x4000); + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + +void GX_SetBankForARM7(u16 arm7){ + gUnk021D33C4.var00 = ~arm7 & (gUnk021D33C4.var00 | gUnk021D33C4.var06); + gUnk021D33C4.var06 = arm7; + switch (arm7) + { + case 0: //needed to match + break; + case 12: + SETREG8(HW_REG_VRAMCNT_D, 0x8A); + SETREG8(HW_REG_VRAMCNT_C, 0x82); + break; + case 4: + SETREG8(HW_REG_VRAMCNT_C, 0x82); + break; + case 8: + SETREG8(HW_REG_VRAMCNT_D, 0x82); + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + +void GX_SetBankForLCDC(u16 lcdc){ + gUnk021D33C4.var00 |= lcdc; + GX_VRAMCNT_SetLCDC_(lcdc); +} + +void GX_SetBankForSubBG(u16 subbg){ + gUnk021D33C4.var00 = ~subbg & (gUnk021D33C4.var00 | gUnk021D33C4.var12); + gUnk021D33C4.var12 = subbg; + switch (subbg) + { + case 0: //needed to match + break; + case 4: + SETREG8(HW_REG_VRAMCNT_C, 0x84); + break; + case 384: + SETREG8(HW_REG_VRAMCNT_I, 0x81); + case 128: + SETREG8(HW_REG_VRAMCNT_H, 0x81); + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + + +void GX_SetBankForSubOBJ(u16 subobj){ + gUnk021D33C4.var00 = ~subobj & (gUnk021D33C4.var00 | gUnk021D33C4.var14); + gUnk021D33C4.var14 = subobj; + switch (subobj) + { + case 8: + SETREG8(HW_REG_VRAMCNT_D, 0x84); + break; + case 256: + SETREG8(HW_REG_VRAMCNT_I, 0x82); + break; + case 0: //needed to match + break; + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + +void GX_SetBankForSubBGExtPltt(u16 subbgextpltt){ + gUnk021D33C4.var00 = ~subbgextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var16); + gUnk021D33C4.var16 = subbgextpltt; + switch (subbgextpltt) + { + case 128: + SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) | 0x40000000); + SETREG8(HW_REG_VRAMCNT_H, 0x82); + break; + case 0: + SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000); + break; + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + +void GX_SetBankForSubOBJExtPltt(u16 subobjextpltt){ + gUnk021D33C4.var00 = ~subobjextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var18); + gUnk021D33C4.var18 = subobjextpltt; + switch (subobjextpltt) + { + case 256: + SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) | 0x80000000); + SETREG8(HW_REG_VRAMCNT_I, 0x83); + break; + case 0: + SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000); + break; + } + GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); +} + +u32 FUN_020C6130(u16 *ptr){ + u16 temp = *ptr; + *ptr = 0; + gUnk021D33C4.var00 |= temp; + GX_VRAMCNT_SetLCDC_(temp); + return temp; +} + +u32 GX_ResetBankForBG(){ + return FUN_020C6130(&gUnk021D33C4.var02); +} + +u32 GX_ResetBankForOBJ(){ + return FUN_020C6130(&gUnk021D33C4.var04); +} + +u32 GX_ResetBankForBGExtPltt(){ + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000); + return FUN_020C6130(&gUnk021D33C4.var0E); +} + +u32 GX_ResetBankForOBJExtPltt(){ + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000); + return FUN_020C6130(&gUnk021D33C4.var10); +} + +u32 GX_ResetBankForTex(){ + return FUN_020C6130(&gUnk021D33C4.var08); +} + +u32 GX_ResetBankForTexPltt(){ + return FUN_020C6130(&gUnk021D33C4.var0A); +} + +u32 GX_ResetBankForClearImage(){ + return FUN_020C6130(&gUnk021D33C4.var0C); +} + +u32 GX_ResetBankForSubBG(){ + return FUN_020C6130(&gUnk021D33C4.var12); +} + +u32 FUN_020C605C(){ + return FUN_020C6130(&gUnk021D33C4.var14); +} + +u32 FUN_020C6034(){ + SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000); + return FUN_020C6130(&gUnk021D33C4.var16); +} + +u32 GX_ResetBankForSubOBJ(){ + SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000); + return FUN_020C6130(&gUnk021D33C4.var18); +} + +u32 FUN_020C5F28(u16 *ptr){ + u32 temp = *ptr; + *ptr = 0; + if (temp & (0x1 << 0)) + SETREG8(HW_REG_VRAMCNT_A, 0x0); + if (temp & (0x1 << 1)) + SETREG8(HW_REG_VRAMCNT_B, 0x0); + if (temp & (0x1 << 2)) + SETREG8(HW_REG_VRAMCNT_C, 0x0); + if (temp & (0x1 << 3)) + SETREG8(HW_REG_VRAMCNT_D, 0x0); + if (temp & (0x1 << 4)) + SETREG8(HW_REG_VRAMCNT_E, 0x0); + if (temp & (0x1 << 5)) + SETREG8(HW_REG_VRAMCNT_F, 0x0); + if (temp & (0x1 << 6)) + SETREG8(HW_REG_VRAMCNT_G, 0x0); + if (temp & (0x1 << 7)) + SETREG8(HW_REG_VRAMCNT_H, 0x0); + if (temp & (0x1 << 8)) + SETREG8(HW_REG_VRAMCNT_I, 0x0); + OSi_UnlockVram((u16)temp, gUnk021D33BC); + return temp; +} + +u32 disableBankForX_(){ + return FUN_020C5F28(&gUnk021D33C4.var02); +} + +u32 GX_DisableBankForOBJExtPltt_2(){ + return FUN_020C5F28(&gUnk021D33C4.var04); +} + +u32 GX_DisableBankForBGExtPltt(){ + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000); + return FUN_020C5F28(&gUnk021D33C4.var0E); +} + +u32 GX_DisableBankForOBJExtPltt(){ + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000); + return FUN_020C5F28(&gUnk021D33C4.var10); +} + +u32 GX_DisableBankForTexPltt_2(){ + return FUN_020C5F28(&gUnk021D33C4.var08); +} + +u32 GX_DisableBankForTexPltt(){ + return FUN_020C5F28(&gUnk021D33C4.var0A); +} + +u32 GX_DisableBankForClearImage(){ + return FUN_020C5F28(&gUnk021D33C4.var0C); +} + +u32 GX_DisableBankForARM7(){ + return FUN_020C5F28(&gUnk021D33C4.var06); +} + +u32 GX_DisableBankForLCDC(){ + return FUN_020C5F28(&gUnk021D33C4.var00); +} + +u32 GX_DisableBankForSubBGExtPltt(){ + return FUN_020C5F28(&gUnk021D33C4.var12); +} + +u32 GX_DisableBankForSubOBJExtPltt_2(){ + return FUN_020C5F28(&gUnk021D33C4.var14); +} + +u32 FUN_020C5E04(){ + SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000); + return FUN_020C5F28(&gUnk021D33C4.var16); +} + +u32 GX_DisableBankForSubOBJExtPltt(){ + SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000); + return FUN_020C5F28(&gUnk021D33C4.var18); +} + +u32 GX_GetBankForBGExtPltt_2(){ + return gUnk021D33C4.var02; +} + +u32 GX_GetBankForOBJ(){ + return gUnk021D33C4.var04; +} + +u32 GX_GetBankForBGExtPltt(){ + return gUnk021D33C4.var0E; +} + +u32 GX_GetBankForOBJExtPltt(){ + return gUnk021D33C4.var10; +} + +u32 FUN_020C5D8C(){ + return gUnk021D33C4.var08; +} + +u32 GX_GetBankForTexPltt(){ + return gUnk021D33C4.var0A; +} + +u32 GX_GetBankForLCDC(){ + return gUnk021D33C4.var00; +} + +u32 GX_GetBankForSubBGExtPltt_2(){ + return gUnk021D33C4.var12; +} + +u32 GX_GetBankForSubOBJ(){ + return gUnk021D33C4.var14; +} + +u32 GX_GetBankForSubBGExtPltt(){ + return gUnk021D33C4.var16; +} + +u32 GX_GetBankForSubOBJExtPltt(){ + return gUnk021D33C4.var18; +} diff --git a/arm9/lib/src/GX_vramcnt_c.c b/arm9/lib/src/GX_vramcnt_c.c deleted file mode 100644 index 50107888..00000000 --- a/arm9/lib/src/GX_vramcnt_c.c +++ /dev/null @@ -1,24 +0,0 @@ -#include "global.h" -#include "main.h" -#include "gx.h" - -void GX_VRAMCNT_SetLCDC_(u32 r0){ - if (r0 & (0x1 << 0)) - SETREG8(HW_REG_VRAMCNT_A, 0x80); - if (r0 & (0x1 << 1)) - SETREG8(HW_REG_VRAMCNT_B, 0x80); - if (r0 & (0x1 << 2)) - SETREG8(HW_REG_VRAMCNT_C, 0x80); - if (r0 & (0x1 << 3)) - SETREG8(HW_REG_VRAMCNT_D, 0x80); - if (r0 & (0x1 << 4)) - SETREG8(HW_REG_VRAMCNT_E, 0x80); - if (r0 & (0x1 << 5)) - SETREG8(HW_REG_VRAMCNT_F, 0x80); - if (r0 & (0x1 << 6)) - SETREG8(HW_REG_VRAMCNT_G, 0x80); - if (r0 & (0x1 << 7)) - SETREG8(HW_REG_VRAMCNT_H, 0x80); - if (r0 & (0x1 << 8)) - SETREG8(HW_REG_VRAMCNT_I, 0x80); -} diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt index b5d30064..973e6b51 100644 --- a/arm9/undefined_syms.txt +++ b/arm9/undefined_syms.txt @@ -19,6 +19,9 @@ Unk_02106A04 = 0x02106A04; // FS SDK_OVERLAY_DIGEST = 0x02106F84; SDK_OVERLAY_DIGEST_END = 0x02106F84; +//GX +gUnk021D33BC = 0x021D33BC; +gUnk021D33C4 = 0x021D33C4; // Overlay FUN_021D76AC = 0x021D76AC; -- cgit v1.2.3 From 95a1f4a566dcdfc1c50bf2a41bce2d76fae127ca Mon Sep 17 00:00:00 2001 From: Made Date: Mon, 11 May 2020 03:02:15 +0200 Subject: add some macros to fx.h --- arm9/lib/include/fx.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/arm9/lib/include/fx.h b/arm9/lib/include/fx.h index b1c3aa88..e0ba52f3 100644 --- a/arm9/lib/include/fx.h +++ b/arm9/lib/include/fx.h @@ -46,10 +46,14 @@ typedef s64 fx64c; #define FX64C_INT_ABS(x) FX_INT_ABS(FX64C, x) #define FX64C_FRAC(x) FX_FRAC(FX64C, x) -#define FX32_MUL(a, b) ((fx32)(((fx64)a * b) >> FX32_INT_SHIFT)) -#define FX32_MUL_ADD_MUL(a, b, c, d) ((fx32)(((fx64)a * b + (fx64)c * d) >> FX32_INT_SHIFT)) +//TODO: clean up these macros +#define FX32_MUL_NO_ROUND(a, b) ((fx32)(((fx64)(a) * (b)) >> FX32_INT_SHIFT)) +#define FX32_MUL(a, b) ((fx32)((((fx64)(a) * (b) + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT))) +#define FX32_MUL_ADD_MUL(a, b, c, d) ((fx32)(((fx64)(a) * (b) + (fx64)c * d) >> FX32_INT_SHIFT)) //the extra term here is for rounding -#define FX32_MUL_SUB_MUL(a, b, c, d) ((fx32)(((fx64)a * b - (fx64)c * d + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT)) +#define FX32_MUL_SUB_MUL(a, b, c, d) ((fx32)(((fx64)(a) * (b) - (fx64)c * d + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT)) + +#define FX_MUL_FX32_FX64C(a, b) ((fx32)((((a) * (b) + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT))) struct Vecx32 { -- cgit v1.2.3 From fd64cccafa5d4d8031ba3b19dc907c672f8b7041 Mon Sep 17 00:00:00 2001 From: Made Date: Mon, 11 May 2020 03:08:38 +0200 Subject: Decompile GX_g3_util.h --- arm9/asm/GX_g3_util.s | 503 ---------------------------------------------- arm9/lib/include/gx.h | 8 + arm9/lib/src/GX_g3_util.c | 267 ++++++++++++++++++++++++ 3 files changed, 275 insertions(+), 503 deletions(-) delete mode 100644 arm9/asm/GX_g3_util.s create mode 100644 arm9/lib/src/GX_g3_util.c diff --git a/arm9/asm/GX_g3_util.s b/arm9/asm/GX_g3_util.s deleted file mode 100644 index ba78fdfc..00000000 --- a/arm9/asm/GX_g3_util.s +++ /dev/null @@ -1,503 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start G3_RotZ -G3_RotZ: ; 0x020C7FF0 - ldr r3, _020C8028 ; =0x04000468 - mov r2, #0x0 - str r1, [r3, #0x0] - str r0, [r3, #0x0] - str r2, [r3, #0x0] - rsb r0, r0, #0x0 - str r0, [r3, #0x0] - str r1, [r3, #0x0] - str r2, [r3, #0x0] - str r2, [r3, #0x0] - str r2, [r3, #0x0] - mov r0, #0x1000 - str r0, [r3, #0x0] - bx lr - .balign 4 -_020C8028: .word 0x04000468 - - arm_func_start G3_RotY -G3_RotY: ; 0x020C802C - ldr ip, _020C8064 ; =0x04000468 - mov r3, #0x0 - str r1, [r12, #0x0] - str r3, [r12, #0x0] - rsb r2, r0, #0x0 - str r2, [r12, #0x0] - str r3, [r12, #0x0] - mov r2, #0x1000 - str r2, [r12, #0x0] - str r3, [r12, #0x0] - str r0, [r12, #0x0] - str r3, [r12, #0x0] - str r1, [r12, #0x0] - bx lr - .balign 4 -_020C8064: .word 0x04000468 - - arm_func_start G3_RotX -G3_RotX: ; 0x020C8068 - ldr r3, _020C80A0 ; =0x04000468 - mov r2, #0x1000 - str r2, [r3, #0x0] - mov r2, #0x0 - str r2, [r3, #0x0] - str r2, [r3, #0x0] - str r2, [r3, #0x0] - str r1, [r3, #0x0] - str r0, [r3, #0x0] - str r2, [r3, #0x0] - rsb r0, r0, #0x0 - str r0, [r3, #0x0] - str r1, [r3, #0x0] - bx lr - .balign 4 -_020C80A0: .word 0x04000468 - - arm_func_start G3i_LookAt_ -G3i_LookAt_: ; 0x020C80A4 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x24 - mov r9, r0 - ldr r6, [r9, #0x0] - ldr r5, [r2, #0x0] - add r0, sp, #0x0 - sub r5, r6, r5 - str r5, [sp, #0x0] - ldr r7, [r9, #0x4] - ldr r6, [r2, #0x4] - mov r5, r1 - sub r1, r7, r6 - str r1, [sp, #0x4] - ldr r6, [r9, #0x8] - ldr r2, [r2, #0x8] - mov r1, r0 - sub r2, r6, r2 - mov r8, r3 - str r2, [sp, #0x8] - ldr r7, [sp, #0x40] - bl VEC_Normalize - add r1, sp, #0x0 - add r2, sp, #0xc - mov r0, r5 - bl VEC_CrossProduct - add r0, sp, #0xc - mov r1, r0 - bl VEC_Normalize -_020C8114: ; 0x020C8114 - add r0, sp, #0x0 - add r1, sp, #0xc - add r2, sp, #0x18 - bl VEC_CrossProduct -_020C8124: ; 0x020C8124 - cmp r8, #0x0 - beq _020C8184 - ldr r0, _020C8234 ; =0x04000440 - mov r1, #0x2 - str r1, [r0, #0x0] - ldr r0, [sp, #0xc] - ldr r4, _020C8238 ; =0x0400045C - str r0, [r4, #0x0] - ldr r0, [sp, #0x18] - str r0, [r4, #0x0] - ldr r0, [sp, #0x0] - str r0, [r4, #0x0] - ldr r0, [sp, #0x10] - str r0, [r4, #0x0] - ldr r0, [sp, #0x1c] - str r0, [r4, #0x0] - ldr r0, [sp, #0x4] - str r0, [r4, #0x0] - ldr r0, [sp, #0x14] - str r0, [r4, #0x0] - ldr r0, [sp, #0x20] - str r0, [r4, #0x0] - ldr r0, [sp, #0x8] - str r0, [r4, #0x0] -_020C8184: - add r1, sp, #0xc - mov r0, r9 - bl VEC_DotProduct - rsb r6, r0, #0x0 - add r1, sp, #0x18 - mov r0, r9 - bl VEC_DotProduct - rsb r5, r0, #0x0 - add r1, sp, #0x0 - mov r0, r9 - bl VEC_DotProduct -_020C81B0: ; 0x020C81B0 - cmp r8, #0x0 - strne r6, [r4, #0x0] - rsb r0, r0, #0x0 - strne r5, [r4, #0x0] - strne r0, [r4, #0x0] - cmp r7, #0x0 - addeq sp, sp, #0x24 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - ldr r1, [sp, #0xc] - str r1, [r7, #0x0] - ldr r1, [sp, #0x18] - str r1, [r7, #0x4] - ldr r1, [sp, #0x0] - str r1, [r7, #0x8] - ldr r1, [sp, #0x10] - str r1, [r7, #0xc] - ldr r1, [sp, #0x1c] - str r1, [r7, #0x10] - ldr r1, [sp, #0x4] - str r1, [r7, #0x14] - ldr r1, [sp, #0x14] - str r1, [r7, #0x18] - ldr r1, [sp, #0x20] - str r1, [r7, #0x1c] - ldr r1, [sp, #0x8] - str r1, [r7, #0x20] - str r6, [r7, #0x24] - str r5, [r7, #0x28] - str r0, [r7, #0x2c] - add sp, sp, #0x24 - ldmia sp!, {r4-r9,lr} - bx lr - .balign 4 -_020C8234: .word 0x04000440 -_020C8238: .word 0x0400045C - - arm_func_start G3i_OrthoW_ -G3i_OrthoW_: ; 0x020C823C - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x34 - str r2, [sp, #0x8] - str r0, [sp, #0x0] - ldr r0, [sp, #0x8] - mov r2, r3 - ldr r7, [sp, #0x64] - sub r0, r2, r0 - str r3, [sp, #0xc] - str r1, [sp, #0x4] - ldr r8, [sp, #0x60] - ldr r6, [sp, #0x68] - bl FX_InvAsync -_020C8270: ; 0x020C8270 - cmp r7, #0x0 - ldrne r0, _020C8528 ; =0x04000440 - movne r1, #0x0 - ldrne r4, _020C852C ; =0x04000458 - strne r1, [r0, #0x0] - cmp r6, #0x0 - beq _020C82B8 - mov r0, #0x0 - str r0, [r6, #0x4] - str r0, [r6, #0x8] - str r0, [r6, #0xc] - str r0, [r6, #0x10] - str r0, [r6, #0x18] - str r0, [r6, #0x1c] - str r0, [r6, #0x20] - str r0, [r6, #0x24] - str r0, [r6, #0x2c] - str r8, [r6, #0x3c] -_020C82B8: - bl FX_GetDivResultFx64c - mov r5, r0 - str r1, [sp, #0x14] - ldr sb, _020C8530 ; =0x04000290 - mov r3, #0x0 - ldr r1, [sp, #0x0] - ldr r0, [sp, #0x4] - str r3, [r9, #0x0] - mov r2, #0x1000 - sub r1, r1, r0 - ldr r0, _020C8534 ; =0x04000298 - str r2, [r9, #0x4] - str r1, [r0, #0x0] - cmp r8, #0x1000 - str r3, [r0, #0x4] - beq _020C8318 - mov r9, r8, asr #0x1f - umull r0, r1, r5, r8 - mla r1, r5, r9, r1 - ldr r5, [sp, #0x14] - mla r1, r5, r8, r1 - bl _ll_sdiv - mov r5, r0 - str r1, [sp, #0x14] -_020C8318: - ldr r0, [sp, #0x14] - mov r2, r5, lsl #0xd - mov r1, r0, lsl #0xd - mov r0, #0x80000000 - adds r0, r2, r0 - orr r1, r1, r5, lsr #0x13 - adc r1, r1, #0x0 - cmp r7, #0x0 - mov r0, #0x0 - strne r1, [r4, #0x0] - strne r0, [r4, #0x0] - strne r0, [r4, #0x0] - strne r0, [r4, #0x0] - strne r0, [r4, #0x0] - cmp r6, #0x0 - strne r1, [r6, #0x0] - bl FX_GetDivResultFx64c - mov r11, r0 - str r1, [sp, #0x2c] - ldr r0, _020C8530 ; =0x04000290 - mov r3, #0x0 - mov r2, #0x1000 - str r3, [r0, #0x0] - str r2, [r0, #0x4] - ldr r9, [sp, #0x58] - ldr r1, [sp, #0x5c] - ldr r0, _020C8534 ; =0x04000298 - sub r1, r9, r1 - str r1, [r0, #0x0] - cmp r8, #0x1000 - str r3, [r0, #0x4] - beq _020C83B8 - mov r9, r8, asr #0x1f - umull r0, r1, r11, r8 - mla r1, r11, r9, r1 - ldr r9, [sp, #0x2c] - mla r1, r9, r8, r1 - bl _ll_sdiv - mov r11, r0 - str r1, [sp, #0x2c] -_020C83B8: - ldr r0, [sp, #0x2c] - mov r3, r11, lsl #0xd - mov r2, r0, lsl #0xd - mov r0, #0x80000000 - orr r2, r2, r11, lsr #0x13 - adds r0, r3, r0 - adc r0, r2, #0x0 - cmp r7, #0x0 - mov r1, #0x0 - strne r0, [r4, #0x0] - strne r1, [r4, #0x0] - strne r1, [r4, #0x0] - strne r1, [r4, #0x0] - strne r1, [r4, #0x0] - cmp r6, #0x0 - strne r0, [r6, #0x14] - bl FX_GetDivResultFx64c - cmp r8, #0x1000 - beq _020C8428 - mov r9, r8, asr #0x1f - mov r2, #0x1000 - mov r3, #0x0 - umull r12, r10, r0, r8 - mla r10, r0, r9, r10 - mov r0, r12 - mla r10, r1, r8, r10 - mov r1, r10 - bl _ll_sdiv -_020C8428: - mov r9, r1, lsl #0xd - mov r10, r0, lsl #0xd - mov r2, #0x80000000 - orr r9, r9, r0, lsr #0x13 - adds r2, r10, r2 - adc r2, r9, #0x0 - cmp r7, #0x0 - mov r3, #0x0 - strne r2, [r4, #0x0] - strne r3, [r4, #0x0] - cmp r6, #0x0 - strne r2, [r6, #0x28] - ldr r3, [sp, #0xc] - ldr r2, [sp, #0x8] - add r9, r3, r2 - rsb lr, r9, #0x0 - ldr r3, [sp, #0x0] - ldr r2, [sp, #0x4] - ldr r9, [sp, #0x5c] - add r2, r3, r2 - ldr r3, [sp, #0x58] - rsb r12, r2, #0x0 - add r3, r9, r3 - mov r9, r12, asr #0x1f - str r9, [sp, #0x20] - mov r9, r3, asr #0x1f - str r9, [sp, #0x24] - umull r10, r9, r5, lr - mov r2, lr, asr #0x1f - str r2, [sp, #0x1c] - str r10, [sp, #0x18] - ldr r10, [sp, #0x1c] - mov r2, #0x80000000 - mla r9, r5, r10, r9 - ldr r5, [sp, #0x14] - mla r9, r5, lr, r9 - ldr r5, [sp, #0x18] - adds r5, r5, r2 - adc r10, r9, #0x0 - ldr r5, [sp, #0x20] - umull lr, r9, r11, r12 - mla r9, r11, r5, r9 - ldr r5, [sp, #0x2c] - mla r9, r5, r12, r9 - adds r5, lr, r2 - adc r5, r9, #0x0 - umull r11, r9, r0, r3 - adds r2, r11, r2 - ldr r2, [sp, #0x24] - mla r9, r0, r2, r9 - mla r9, r1, r3, r9 - adc r0, r9, #0x0 - cmp r7, #0x0 - strne r10, [r4, #0x0] - strne r5, [r4, #0x0] - strne r0, [r4, #0x0] - strne r8, [r4, #0x0] - cmp r6, #0x0 - strne r10, [r6, #0x30] - strne r5, [r6, #0x34] - strne r0, [r6, #0x38] - add sp, sp, #0x34 - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020C8528: .word 0x04000440 -_020C852C: .word 0x04000458 -_020C8530: .word 0x04000290 -_020C8534: .word 0x04000298 - - arm_func_start G3i_PerspectiveW_ -G3i_PerspectiveW_: ; 0x020C8538 - stmdb sp!, {r4-r10,lr} - mov r5, r0 - mov r0, r1 - mov r1, r5 - ldr r6, [sp, #0x24] - mov r9, r2 - mov r8, r3 - ldr r5, [sp, #0x2c] - bl FX_Div - mov r7, r0 - cmp r6, #0x1000 - mulne r1, r7, r6 - movne r0, r1, asr #0xb - addne r0, r1, r0, lsr #0x14 - movne r7, r0, asr #0xc - ldr r0, [sp, #0x28] - ldr r2, _020C8718 ; =0x04000290 - cmp r0, #0x0 - mov r3, #0x0 - str r3, [r2, #0x0] - ldr r1, _020C871C ; =0x04000298 - str r7, [r2, #0x4] - str r9, [r1, #0x0] - ldrne r0, _020C8720 ; =0x04000440 - str r3, [r1, #0x4] - ldrne r4, _020C8724 ; =0x04000458 - strne r3, [r0, #0x0] - cmp r5, #0x0 - beq _020C85E4 - mov r1, #0x0 - str r1, [r5, #0x4] - str r1, [r5, #0x8] - str r1, [r5, #0xc] - str r1, [r5, #0x10] - str r1, [r5, #0x18] - str r1, [r5, #0x1c] - str r1, [r5, #0x20] - str r1, [r5, #0x24] - rsb r0, r6, #0x0 - str r0, [r5, #0x2c] - str r1, [r5, #0x30] - str r1, [r5, #0x34] - str r1, [r5, #0x3c] -_020C85E4: - bl FX_GetDivResult - ldr r3, [sp, #0x20] - ldr r1, [sp, #0x28] - ldr sb, _020C8718 ; =0x04000290 - mov r12, #0x0 - str r12, [r9, #0x0] - mov r10, #0x1000 - ldr r2, _020C871C ; =0x04000298 - str r10, [r9, #0x4] - sub r3, r8, r3 - str r3, [r2, #0x0] - str r12, [r2, #0x4] - cmp r1, #0x0 - beq _020C8644 - str r0, [r4, #0x0] - str r12, [r4, #0x0] - str r12, [r4, #0x0] - str r12, [r4, #0x0] - str r12, [r4, #0x0] - str r7, [r4, #0x0] - str r12, [r4, #0x0] - str r12, [r4, #0x0] - str r12, [r4, #0x0] - str r12, [r4, #0x0] -_020C8644: - cmp r5, #0x0 - strne r0, [r5, #0x0] - strne r7, [r5, #0x14] - bl FX_GetDivResultFx64c - cmp r6, #0x1000 - beq _020C8680 - mov r2, r6, asr #0x1f - umull r7, r3, r0, r6 - mla r3, r0, r2, r3 - mla r3, r1, r6, r3 - mov r0, r7 - mov r1, r3 - mov r2, #0x1000 - mov r3, #0x0 - bl _ll_sdiv -_020C8680: - ldr r3, [sp, #0x20] - mov r10, r8, lsl #0x1 - add r12, r3, r8 - mov r2, r12, asr #0x1f - umull r7, lr, r0, r12 - mla lr, r0, r2, lr - mov r9, #0x80000000 - smull r3, r2, r10, r3 - mla lr, r1, r12, lr - adds r7, r7, r9 - mov r8, #0x800 - adc r7, lr, #0x0 - adds r3, r3, r8 - adc r2, r2, #0x0 - mov r3, r3, lsr #0xc - orr r3, r3, r2, lsl #0x14 - umull r10, r8, r0, r3 - mov r2, r3, asr #0x1f - adds r9, r10, r9 - mla r8, r0, r2, r8 - mla r8, r1, r3, r8 - ldr r0, [sp, #0x28] - adc r2, r8, #0x0 - cmp r0, #0x0 - mov r0, #0x0 - beq _020C8704 - str r7, [r4, #0x0] - rsb r1, r6, #0x0 - str r1, [r4, #0x0] - str r0, [r4, #0x0] - str r0, [r4, #0x0] - str r2, [r4, #0x0] - str r0, [r4, #0x0] -_020C8704: - cmp r5, #0x0 - strne r7, [r5, #0x28] - strne r2, [r5, #0x38] - ldmia sp!, {r4-r10,lr} - bx lr - .balign 4 -_020C8718: .word 0x04000290 -_020C871C: .word 0x04000298 -_020C8720: .word 0x04000440 -_020C8724: .word 0x04000458 diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index a9cb07b1..6919cbfd 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -96,6 +96,14 @@ struct VRAM_banks void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2); s32 G3_EndMakeDL(struct DL *displaylist); +//GX_g3_util +void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx); +void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx); +void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, u32 load, struct Mtx44 *mtx); +void G3_RotX(fx32 sinphi, fx32 cosphi); +void G3_RotY(fx32 sinphi, fx32 cosphi); +void G3_RotZ(fx32 sinphi, fx32 cosphi); + //GX_g3x asm void GXi_NopClearFifo128_(void *reg); void G3X_Init(); diff --git a/arm9/lib/src/GX_g3_util.c b/arm9/lib/src/GX_g3_util.c new file mode 100644 index 00000000..049b9366 --- /dev/null +++ b/arm9/lib/src/GX_g3_util.c @@ -0,0 +1,267 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +#define HW_REG_DIV_NUMER 0x04000290 +#define HW_REG_DIV_DENOM 0x04000298 + +#define HW_REG_MTX_MODE 0x04000440 +#define HW_REG_MTX_LOAD_4x4 0x04000458 +#define HW_REG_MTX_LOAD_4x3 0x0400045C +#define HW_REG_MTX_MULT_3x3 0x04000468 + +void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx){ + fx32 fovcot, temp1, temp2; + fx64c temp0; + vu32 *reg_ptr; + + fovcot = FX_Div(fovcos, fovsin); + if (scale != 0x1000) //!= 1.0 + fovcot = (fovcot * scale) / 0x1000; + SETREG64(HW_REG_DIV_NUMER, (s64)fovcot << 0x20); + SETREG64(HW_REG_DIV_DENOM, (u32)ratio); + if (load) + { + SETREG32(HW_REG_MTX_MODE, 0x0); + reg_ptr = (vu32 *)HW_REG_MTX_LOAD_4x4; + } + if (mtx) + { + mtx->_[1] = 0x0; + mtx->_[2] = 0x0; + mtx->_[3] = 0x0; + mtx->_[4] = 0x0; + mtx->_[6] = 0x0; + mtx->_[7] = 0x0; + mtx->_[8] = 0x0; + mtx->_[9] = 0x0; + mtx->_[11] = -scale; + mtx->_[12] = 0x0; + mtx->_[13] = 0x0; + mtx->_[15] = 0x0; + } + temp1 = FX_GetDivResult(); + SETREG64(HW_REG_DIV_NUMER, (s64)0x1000 << 0x20); + SETREG64(HW_REG_DIV_DENOM, (u32)(near - far)); + if (load) + { + *reg_ptr = temp1; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = fovcot; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + } + if (mtx) + { + mtx->_[0] = temp1; + mtx->_[5] = fovcot; + } + temp0 = FX_GetDivResultFx64c(); + if (scale != 0x1000) + temp0 = (temp0 * scale) / 0x1000; + temp1 = ((far + near) * temp0 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT; + temp2 = (((fx32)(((fx64)(near << 1) * far + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT)) * temp0 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT; + if (load) + { + *reg_ptr = temp1; + *reg_ptr = -scale; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = temp2; + *reg_ptr = 0x0; + } + if (mtx) + { + mtx->_[10] = temp1; + mtx->_[14] = temp2; + } +} + +void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx){ + fx64c temp1, temp2, temp3; + fx32 temp0, temp4, temp5; + vu32 *reg_ptr; + + FX_InvAsync(right - left); + if (load) + { + SETREG32(HW_REG_MTX_MODE, 0x0); + reg_ptr = (vu32 *)HW_REG_MTX_LOAD_4x4; + } + if (mtx) + { + mtx->_[1] = 0x0; + mtx->_[2] = 0x0; + mtx->_[3] = 0x0; + mtx->_[4] = 0x0; + mtx->_[6] = 0x0; + mtx->_[7] = 0x0; + mtx->_[8] = 0x0; + mtx->_[9] = 0x0; + mtx->_[11] = 0x0; + mtx->_[15] = scale; + } + temp1 = FX_GetDivResultFx64c(); + SETREG64(HW_REG_DIV_NUMER, (s64)0x1000 << 0x20); + SETREG64(HW_REG_DIV_DENOM, (u32)(top - bottom)); + if (scale != 0x1000) + temp1 = (temp1 * scale) / 0x1000; + temp0 = (0x2000 * temp1 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT; + if (load) + { + *reg_ptr = temp0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + } + if (mtx) + { + mtx->_[0] = temp0; + } + temp2 = FX_GetDivResultFx64c(); + SETREG64(HW_REG_DIV_NUMER, (s64)0x1000 << 0x20); + SETREG64(HW_REG_DIV_DENOM, (u32)(near - far)); + if (scale != 0x1000) + temp2 = (temp2 * scale) / 0x1000; + temp0 = (0x2000 * temp2 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT; + if (load) + { + *reg_ptr = temp0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + } + if (mtx) + { + mtx->_[5] = temp0; + } + temp3 = FX_GetDivResultFx64c(); + if (scale != 0x1000) + temp3 = (temp3 * scale) / 0x1000; + temp0 = (0x2000 * temp3 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT; + if (load) + { + *reg_ptr = temp0; + *reg_ptr = 0x0; + } + if (mtx) + { + mtx->_[10] = temp0; + } + temp0 = ((-(right + left)) * temp1 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT; + temp4 = ((-(top + bottom)) * temp2 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT; + temp5 = ((far + near) * temp3 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT; + if (load) + { + *reg_ptr = temp0; + *reg_ptr = temp4; + *reg_ptr = temp5; + *reg_ptr = scale; + } + if (mtx) + { + mtx->_[12] = temp0; + mtx->_[13] = temp4; + mtx->_[14] = temp5; + } +} + +void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, u32 load, struct Mtx44 *mtx){ + struct Vecx32 temp, temp1, temp2; + fx32 c1, c2, c3; + vu32 *reg_ptr; + temp.x = a->x - c->x; + temp.y = a->y - c->y; + temp.z = a->z - c->z; + VEC_Normalize(&temp, &temp); + VEC_CrossProduct(b, &temp, &temp1); + VEC_Normalize(&temp1, &temp1); + VEC_CrossProduct(&temp, &temp1, &temp2); + if (load) + { + SETREG32(HW_REG_MTX_MODE, 0x2); + reg_ptr = (vu32 *)HW_REG_MTX_LOAD_4x3; + *reg_ptr = temp1.x; + *reg_ptr = temp2.x; + *reg_ptr = temp.x; + *reg_ptr = temp1.y; + *reg_ptr = temp2.y; + *reg_ptr = temp.y; + *reg_ptr = temp1.z; + *reg_ptr = temp2.z; + *reg_ptr = temp.z; + } + c1 = -VEC_DotProduct(a, &temp1); + c2 = -VEC_DotProduct(a, &temp2); + c3 = -VEC_DotProduct(a, &temp); + if (load) + { + *reg_ptr = c1; + *reg_ptr = c2; + *reg_ptr = c3; + } + if (mtx) + { + mtx->_[0] = temp1.x; + mtx->_[1] = temp2.x; + mtx->_[2] = temp.x; + mtx->_[3] = temp1.y; + mtx->_[4] = temp2.y; + mtx->_[5] = temp.y; + mtx->_[6] = temp1.z; + mtx->_[7] = temp2.z; + mtx->_[8] = temp.z; + mtx->_[9] = c1; + mtx->_[10] = c2; + mtx->_[11] = c3; + } +} + +void G3_RotX(fx32 sinphi, fx32 cosphi){ + vu32 *reg_ptr; + reg_ptr = (vu32 *)HW_REG_MTX_MULT_3x3; + *reg_ptr = 0x1000; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = cosphi; + *reg_ptr = sinphi; + *reg_ptr = 0x0; + *reg_ptr = -sinphi; + *reg_ptr = cosphi; +} + +void G3_RotY(fx32 sinphi, fx32 cosphi){ + vu32 *reg_ptr; + reg_ptr = (vu32 *)HW_REG_MTX_MULT_3x3; + *reg_ptr = cosphi; + *reg_ptr = 0x0; + *reg_ptr = -sinphi; + *reg_ptr = 0x0; + *reg_ptr = 0x1000; + *reg_ptr = 0x0; + *reg_ptr = sinphi; + *reg_ptr = 0x0; + *reg_ptr = cosphi; +} + +void G3_RotZ(fx32 sinphi, fx32 cosphi){ + vu32 *reg_ptr; + reg_ptr = (vu32 *)HW_REG_MTX_MULT_3x3; + *reg_ptr = cosphi; + *reg_ptr = sinphi; + *reg_ptr = 0x0; + *reg_ptr = -sinphi; + *reg_ptr = cosphi; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x0; + *reg_ptr = 0x1000; +} -- cgit v1.2.3 From 2d3d64c1c94ba8b94147bfbc29bb15bd42772ed3 Mon Sep 17 00:00:00 2001 From: Made Date: Tue, 12 May 2020 01:27:44 +0200 Subject: Decompile GX_bgcnt.s --- arm9/asm/GX_bgcnt.s | 422 ------------------------------------------------ arm9/lib/include/gx.h | 34 +++- arm9/lib/src/GX_bgcnt.c | 195 ++++++++++++++++++++++ 3 files changed, 228 insertions(+), 423 deletions(-) delete mode 100644 arm9/asm/GX_bgcnt.s create mode 100644 arm9/lib/src/GX_bgcnt.c diff --git a/arm9/asm/GX_bgcnt.s b/arm9/asm/GX_bgcnt.s deleted file mode 100644 index 136c9d1d..00000000 --- a/arm9/asm/GX_bgcnt.s +++ /dev/null @@ -1,422 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start G2S_GetBG3CharPtr -G2S_GetBG3CharPtr: ; 0x020C6F60 - ldr r1, _020C6FA8 ; =0x04001000 - ldr r0, _020C6FAC ; =0x0400100E - ldr r1, [r1, #0x0] - ldrh r2, [r0, #0x0] - and r0, r1, #0x7 - cmp r0, #0x3 - blt _020C6F8C - cmp r0, #0x6 - bge _020C6FA0 - ands r0, r2, #0x80 - bne _020C6FA0 -_020C6F8C: - and r0, r2, #0x3c - mov r0, r0, lsr #0x2 - mov r0, r0, lsl #0xe - add r0, r0, #0x6200000 - bx lr -_020C6FA0: - mov r0, #0x0 - bx lr - .balign 4 -_020C6FA8: .word 0x04001000 -_020C6FAC: .word 0x0400100E - - arm_func_start G2_GetBG3CharPtr -G2_GetBG3CharPtr: ; 0x020C6FB0 - mov r0, #0x4000000 - ldr r1, [r0, #0x0] - ldr r0, _020C700C ; =0x0400000E - and r1, r1, #0x7 - cmp r1, #0x3 - ldrh r2, [r0, #0x0] - blt _020C6FDC - cmp r1, #0x6 - bge _020C7004 - ands r0, r2, #0x80 - bne _020C7004 -_020C6FDC: - mov r0, #0x4000000 - ldr r1, [r0, #0x0] - and r0, r2, #0x3c - and r1, r1, #0x7000000 - mov r1, r1, lsr #0x18 - mov r1, r1, lsl #0x10 - add r1, r1, #0x6000000 - mov r0, r0, lsr #0x2 - add r0, r1, r0, lsl #0xe - bx lr -_020C7004: - mov r0, #0x0 - bx lr - .balign 4 -_020C700C: .word 0x0400000E - - arm_func_start G2S_GetBG2CharPtr -G2S_GetBG2CharPtr: ; 0x020C7010 - ldr r1, _020C7050 ; =0x04001000 - ldr r0, _020C7054 ; =0x0400100C - ldr r1, [r1, #0x0] - ldrh r2, [r0, #0x0] - and r0, r1, #0x7 - cmp r0, #0x5 - blt _020C7034 - ands r0, r2, #0x80 - bne _020C7048 -_020C7034: - and r0, r2, #0x3c - mov r0, r0, lsr #0x2 - mov r0, r0, lsl #0xe - add r0, r0, #0x6200000 - bx lr -_020C7048: - mov r0, #0x0 - bx lr - .balign 4 -_020C7050: .word 0x04001000 -_020C7054: .word 0x0400100C - - arm_func_start G2_GetBG2CharPtr -G2_GetBG2CharPtr: ; 0x020C7058 - mov r0, #0x4000000 - ldr r1, [r0, #0x0] - ldr r0, _020C70AC ; =0x0400000C - and r1, r1, #0x7 - cmp r1, #0x5 - ldrh r2, [r0, #0x0] - blt _020C707C - ands r0, r2, #0x80 - bne _020C70A4 -_020C707C: - mov r0, #0x4000000 - ldr r1, [r0, #0x0] - and r0, r2, #0x3c - and r1, r1, #0x7000000 - mov r1, r1, lsr #0x18 - mov r1, r1, lsl #0x10 - add r1, r1, #0x6000000 - mov r0, r0, lsr #0x2 - add r0, r1, r0, lsl #0xe - bx lr -_020C70A4: - mov r0, #0x0 - bx lr - .balign 4 -_020C70AC: .word 0x0400000C - - arm_func_start G2S_GetBG1CharPtr -G2S_GetBG1CharPtr: ; 0x020C70B0 - ldr r0, _020C70CC ; =0x0400100A - ldrh r0, [r0, #0x0] - and r0, r0, #0x3c - mov r0, r0, asr #0x2 - mov r0, r0, lsl #0xe - add r0, r0, #0x6200000 - bx lr - .balign 4 -_020C70CC: .word 0x0400100A - - arm_func_start G2_GetBG1CharPtr -G2_GetBG1CharPtr: ; 0x020C70D0 - ldr r1, _020C7100 ; =0x0400000A - mov r0, #0x4000000 - ldrh r1, [r1, #0x0] - ldr r0, [r0, #0x0] - and r0, r0, #0x7000000 - mov r0, r0, lsr #0x18 - and r1, r1, #0x3c - mov r0, r0, lsl #0x10 - mov r1, r1, asr #0x2 - add r0, r0, #0x6000000 - add r0, r0, r1, lsl #0xe - bx lr - .balign 4 -_020C7100: .word 0x0400000A - - arm_func_start G2S_GetBG0CharPtr -G2S_GetBG0CharPtr: ; 0x020C7104 - ldr r0, _020C7120 ; =0x04001008 - ldrh r0, [r0, #0x0] - and r0, r0, #0x3c - mov r0, r0, asr #0x2 - mov r0, r0, lsl #0xe - add r0, r0, #0x6200000 - bx lr - .balign 4 -_020C7120: .word 0x04001008 - - arm_func_start G2_GetBG0CharPtr -G2_GetBG0CharPtr: ; 0x020C7124 - ldr r1, _020C7154 ; =0x04000008 - mov r0, #0x4000000 - ldrh r1, [r1, #0x0] - ldr r0, [r0, #0x0] - and r0, r0, #0x7000000 - mov r0, r0, lsr #0x18 - and r1, r1, #0x3c - mov r0, r0, lsl #0x10 - mov r1, r1, asr #0x2 - add r0, r0, #0x6000000 - add r0, r0, r1, lsl #0xe - bx lr - .balign 4 -_020C7154: .word 0x04000008 - - arm_func_start G2S_GetBG3ScrPtr -G2S_GetBG3ScrPtr: ; 0x020C7158 - ldr r1, _020C71D0 ; =0x04001000 - ldr r0, _020C71D4 ; =0x0400100E - ldr r1, [r1, #0x0] - ldrh r2, [r0, #0x0] - and r3, r1, #0x7 - cmp r3, #0x6 - and r0, r2, #0x1f00 - mov r1, r0, lsr #0x8 - addls pc, pc, r3, lsl #0x2 - b _020C71C8 -_020C7180: ; 0x020C7180 - b _020C719C -_020C7184: ; 0x020C7184 - b _020C719C -_020C7188: ; 0x020C7188 - b _020C719C -_020C718C: ; 0x020C718C - b _020C71A8 -_020C7190: ; 0x020C7190 - b _020C71A8 -_020C7194: ; 0x020C7194 - b _020C71A8 -_020C7198: ; 0x020C7198 - b _020C71C0 -_020C719C: - mov r0, r1, lsl #0xb - add r0, r0, #0x6200000 - bx lr -_020C71A8: - ands r0, r2, #0x80 - movne r0, r1, lsl #0xe - addne r0, r0, #0x6200000 - moveq r0, r1, lsl #0xb - addeq r0, r0, #0x6200000 - bx lr -_020C71C0: - mov r0, #0x0 - bx lr -_020C71C8: - mov r0, #0x0 - bx lr - .balign 4 -_020C71D0: .word 0x04001000 -_020C71D4: .word 0x0400100E - - arm_func_start G2_GetBG3ScrPtr -G2_GetBG3ScrPtr: ; 0x020C71D8 - ldr r0, _020C7260 ; =0x0400000E - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldrh r3, [r0, #0x0] - ldr r0, [r2, #0x0] - and r12, r1, #0x7 - and r0, r0, #0x38000000 - mov r1, r0, lsr #0x1b - and r0, r3, #0x1f00 - mov r2, r1, lsl #0x10 - cmp r12, #0x6 - mov r1, r0, lsr #0x8 - addls pc, pc, r12, lsl #0x2 - b _020C7258 -_020C7210: - b _020C722C -_020C7214: - b _020C722C -_020C7218: - b _020C722C -_020C721C: - b _020C7238 -_020C7220: - b _020C7238 -_020C7224: - b _020C7238 -_020C7228: - b _020C7250 -_020C722C: - add r0, r2, #0x6000000 - add r0, r0, r1, lsl #0xb - bx lr -_020C7238: - ands r0, r3, #0x80 - movne r0, r1, lsl #0xe - addne r0, r0, #0x6000000 - addeq r0, r2, #0x6000000 - addeq r0, r0, r1, lsl #0xb - bx lr -_020C7250: - mov r0, #0x0 - bx lr -_020C7258: - mov r0, #0x0 - bx lr - .balign 4 -_020C7260: .word 0x0400000E - - arm_func_start G2S_GetBG2ScrPtr -G2S_GetBG2ScrPtr: ; 0x020C7264 - ldr r1, _020C72DC ; =0x04001000 - ldr r0, _020C72E0 ; =0x0400100C - ldr r1, [r1, #0x0] - ldrh r2, [r0, #0x0] - and r3, r1, #0x7 - cmp r3, #0x6 - and r0, r2, #0x1f00 - mov r1, r0, lsr #0x8 - addls pc, pc, r3, lsl #0x2 - b _020C72D4 -_020C728C: ; 0x020C728C - b _020C72A8 -_020C7290: ; 0x020C7290 - b _020C72A8 -_020C7294: ; 0x020C7294 - b _020C72A8 -_020C7298: ; 0x020C7298 - b _020C72A8 -_020C729C: ; 0x020C729C - b _020C72A8 -_020C72A0: ; 0x020C72A0 - b _020C72B4 -_020C72A4: ; 0x020C72A4 - b _020C72CC -_020C72A8: - mov r0, r1, lsl #0xb - add r0, r0, #0x6200000 - bx lr -_020C72B4: - ands r0, r2, #0x80 - movne r0, r1, lsl #0xe - addne r0, r0, #0x6200000 - moveq r0, r1, lsl #0xb - addeq r0, r0, #0x6200000 - bx lr -_020C72CC: - mov r0, #0x0 - bx lr -_020C72D4: - mov r0, #0x0 - bx lr - .balign 4 -_020C72DC: .word 0x04001000 -_020C72E0: .word 0x0400100C - - arm_func_start G2_GetBG2ScrPtr -G2_GetBG2ScrPtr: ; 0x020C72E4 - ldr r0, _020C736C ; =0x0400000C - mov r2, #0x4000000 - ldr r1, [r2, #0x0] - ldrh r3, [r0, #0x0] - ldr r0, [r2, #0x0] - and r12, r1, #0x7 - and r0, r0, #0x38000000 - mov r1, r0, lsr #0x1b - and r0, r3, #0x1f00 - mov r2, r1, lsl #0x10 - cmp r12, #0x6 - mov r1, r0, lsr #0x8 - addls pc, pc, r12, lsl #0x2 - b _020C7364 -_020C731C: - b _020C7338 -_020C7320: - b _020C7338 -_020C7324: - b _020C7338 -_020C7328: - b _020C7338 -_020C732C: - b _020C7338 -_020C7330: - b _020C7344 -_020C7334: - b _020C735C -_020C7338: - add r0, r2, #0x6000000 - add r0, r0, r1, lsl #0xb - bx lr -_020C7344: - ands r0, r3, #0x80 - movne r0, r1, lsl #0xe - addne r0, r0, #0x6000000 - addeq r0, r2, #0x6000000 - addeq r0, r0, r1, lsl #0xb - bx lr -_020C735C: - mov r0, #0x6000000 - bx lr -_020C7364: - mov r0, #0x0 - bx lr - .balign 4 -_020C736C: .word 0x0400000C - - arm_func_start G2S_GetBG1ScrPtr -G2S_GetBG1ScrPtr: ; 0x020C7370 - ldr r0, _020C738C ; =0x0400100A - ldrh r0, [r0, #0x0] - and r0, r0, #0x1f00 - mov r0, r0, asr #0x8 - mov r0, r0, lsl #0xb - add r0, r0, #0x6200000 - bx lr - .balign 4 -_020C738C: .word 0x0400100A - - arm_func_start G2_GetBG1ScrPtr -G2_GetBG1ScrPtr: ; 0x020C7390 - ldr r1, _020C73C0 ; =0x0400000A - mov r0, #0x4000000 - ldrh r1, [r1, #0x0] - ldr r0, [r0, #0x0] - and r0, r0, #0x38000000 - mov r0, r0, lsr #0x1b - and r1, r1, #0x1f00 - mov r0, r0, lsl #0x10 - mov r1, r1, asr #0x8 - add r0, r0, #0x6000000 - add r0, r0, r1, lsl #0xb - bx lr - .balign 4 -_020C73C0: .word 0x0400000A - - arm_func_start G2S_GetBG0ScrPtr -G2S_GetBG0ScrPtr: ; 0x020C73C4 - ldr r0, _020C73E0 ; =0x04001008 - ldrh r0, [r0, #0x0] - and r0, r0, #0x1f00 - mov r0, r0, asr #0x8 - mov r0, r0, lsl #0xb - add r0, r0, #0x6200000 - bx lr - .balign 4 -_020C73E0: .word 0x04001008 - - arm_func_start G2_GetBG0ScrPtr -G2_GetBG0ScrPtr: ; 0x020C73E4 - ldr r1, _020C7414 ; =0x04000008 - mov r0, #0x4000000 - ldrh r1, [r1, #0x0] - ldr r0, [r0, #0x0] - and r0, r0, #0x38000000 - mov r0, r0, lsr #0x1b - and r1, r1, #0x1f00 - mov r0, r0, lsl #0x10 - mov r1, r1, asr #0x8 - add r0, r0, #0x6000000 - add r0, r0, r1, lsl #0xb - bx lr - .balign 4 -_020C7414: .word 0x04000008 diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 6919cbfd..3f218df9 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -51,6 +51,19 @@ #define HW_REG_DISP3DCNT 0x04000060 +#define HW_REG_BG0CNT_A 0x04000008 +#define HW_REG_BG1CNT_A 0x0400000A +#define HW_REG_BG2CNT_A 0x0400000C +#define HW_REG_BG3CNT_A 0x0400000E + +#define HW_REG_BG0CNT_B 0x04001008 +#define HW_REG_BG1CNT_B 0x0400100A +#define HW_REG_BG2CNT_B 0x0400100C +#define HW_REG_BG3CNT_B 0x0400100E + +#define HW_REG_DISPCNT_A 0x04000000 +#define HW_REG_DISPCNT_B 0x04001000 + //TODO: wait for register commit and replace these #define SETREG8(x, y) ((*(vu8 *)x) = y) #define SETREG16(x, y) ((*(vu16 *)x) = y) @@ -105,7 +118,7 @@ void G3_RotY(fx32 sinphi, fx32 cosphi); void G3_RotZ(fx32 sinphi, fx32 cosphi); //GX_g3x -asm void GXi_NopClearFifo128_(void *reg); +void GXi_NopClearFifo128_(void *reg); void G3X_Init(); void G3X_ResetMtxStack(); void G3X_ClearFifo(); @@ -197,6 +210,25 @@ u32 GX_GetBankForSubOBJ(); u32 GX_GetBankForSubBGExtPltt(); u32 GX_GetBankForSubOBJExtPltt(); +//GX_bgcnt +void *G2_GetBG0ScrPtr(); +void *G2S_GetBG0ScrPtr(); +void *G2_GetBG1ScrPtr(); +void *G2S_GetBG1ScrPtr(); +void *G2_GetBG2ScrPtr(); +void *G2S_GetBG2ScrPtr(); +void *G2_GetBG3ScrPtr(); +void *G2S_GetBG3ScrPtr(); +void *G2_GetBG0CharPtr(); +void *G2S_GetBG0CharPtr(); +void *G2_GetBG1CharPtr(); +void *G2S_GetBG1CharPtr(); +void *G2_GetBG2CharPtr(); +void *G2S_GetBG2CharPtr(); +void *G2_GetBG3CharPtr(); +void *G2S_GetBG3CharPtr(); + + //GXi_NopClearFifo128_ probably asm #endif //GUARD_GX_H diff --git a/arm9/lib/src/GX_bgcnt.c b/arm9/lib/src/GX_bgcnt.c new file mode 100644 index 00000000..918f4d32 --- /dev/null +++ b/arm9/lib/src/GX_bgcnt.c @@ -0,0 +1,195 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +void *G2_GetBG0ScrPtr(){ + u32 temp = (((READREG16(HW_REG_BG0CNT_A) & 0x1F00) >> 0x8) << 0xB); + return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10) + temp); +} + +void *G2S_GetBG0ScrPtr(){ + return (void *)(0x6200000 + (((READREG16(HW_REG_BG0CNT_B) & 0x1F00) >> 0x8) << 0xB)); +} + +void *G2_GetBG1ScrPtr(){ + u32 temp = (((READREG16(HW_REG_BG1CNT_A) & 0x1F00) >> 0x8) << 0xB); + return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10) + temp); +} + +void *G2S_GetBG1ScrPtr(){ + return (void *)(0x6200000 + (((READREG16(HW_REG_BG1CNT_B) & 0x1F00) >> 0x8) << 0xB)); +} + +void *G2_GetBG2ScrPtr(){ + u32 temp12 = (READREG32(HW_REG_DISPCNT_A) & 0x7); + u32 temp3 = READREG16(HW_REG_BG2CNT_A); + u32 temp2 = (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10); + u32 temp1 = ((temp3 & 0x1F00) >> 0x8); + switch (temp12) + { + case 0: + case 1: + case 2: + case 3: + case 4: + return (void *)(0x6000000 + temp2 + (temp1 << 0xB)); + case 5: + if (temp3 & 0x80) + return (void *)(0x6000000 + (temp1 << 0xE)); + else + return (void *)(0x6000000 + temp2 + (temp1 << 0xB)); + case 6: + return (void *)0x6000000; + default: + return NULL; + } +} + +void *G2S_GetBG2ScrPtr(){ + u32 temp12 = (READREG32(HW_REG_DISPCNT_B) & 0x7); + u32 temp3 = READREG16(HW_REG_BG2CNT_B); + u32 temp1 = ((temp3 & 0x1F00) >> 0x8); + switch (temp12) + { + case 0: + case 1: + case 2: + case 3: + case 4: + return (void *)(0x6200000 + (temp1 << 0xB)); + case 5: + if (temp3 & 0x80) + return (void *)(0x6200000 + (temp1 << 0xE)); + else + return (void *)(0x6200000 + (temp1 << 0xB)); + case 6: + return NULL; + default: + return NULL; + } +} + +void *G2_GetBG3ScrPtr(){ + u32 temp12 = (READREG32(HW_REG_DISPCNT_A) & 0x7); + u32 temp3 = READREG16(HW_REG_BG3CNT_A); + u32 temp2 = (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10); + u32 temp1 = ((temp3 & 0x1F00) >> 0x8); + switch (temp12) + { + case 0: + case 1: + case 2: + return (void *)(0x6000000 + temp2 + (temp1 << 0xB)); + case 3: + case 4: + case 5: + if (temp3 & 0x80) + return (void *)(0x6000000 + (temp1 << 0xE)); + else + return (void *)(0x6000000 + temp2 + (temp1 << 0xB)); + case 6: + return NULL; + default: + return NULL; + } +} + +void *G2S_GetBG3ScrPtr(){ + u32 temp12 = (READREG32(HW_REG_DISPCNT_B) & 0x7); + u32 temp3 = READREG16(HW_REG_BG3CNT_B); + u32 temp1 = ((temp3 & 0x1F00) >> 0x8); + switch (temp12) + { + case 0: + case 1: + case 2: + return (void *)(0x6200000 + (temp1 << 0xB)); + case 3: + case 4: + case 5: + if (temp3 & 0x80) + return (void *)(0x6200000 + (temp1 << 0xE)); + else + return (void *)(0x6200000 + (temp1 << 0xB)); + case 6: + return NULL; + default: + return NULL; + } +} + +void *G2_GetBG0CharPtr(){ + u32 temp = (((READREG16(HW_REG_BG0CNT_A) & 0x3C) >> 0x2) << 0xE); + return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10) + temp); +} + +void *G2S_GetBG0CharPtr(){ + return (void *)(0x6200000 + (((READREG16(HW_REG_BG0CNT_B) & 0x3C) >> 0x2) << 0xE)); +} + +void *G2_GetBG1CharPtr(){ + u32 temp = (((READREG16(HW_REG_BG1CNT_A) & 0x3C) >> 0x2) << 0xE); + return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10) + temp); +} + +void *G2S_GetBG1CharPtr(){ + return (void *)(0x6200000 + (((READREG16(HW_REG_BG1CNT_B) & 0x3C) >> 0x2) << 0xE)); +} + +void *G2_GetBG2CharPtr(){ + s32 temp1 = (READREG32(HW_REG_DISPCNT_A) & 0x7); + u32 temp = READREG16(HW_REG_BG2CNT_A); + if (temp1 < 5 || !(temp & 0x80)) + { + u32 temp1 = (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10); + u32 temp2 = (temp & 0x3C) >> 2; + return (void *)(0x6000000 + temp1 + (temp2 << 0xE)); + } + else + { + return NULL; + } +} + +void *G2S_GetBG2CharPtr(){ + s32 temp1 = (READREG32(HW_REG_DISPCNT_B) & 0x7); + u32 temp = READREG16(HW_REG_BG2CNT_B); + if (temp1 < 5 || !(temp & 0x80)) + { + u32 temp2 = ((temp & 0x3C) >> 2) << 0xE; + return (void *)(0x6200000 + temp2); + } + else + { + return NULL; + } +} + +void *G2_GetBG3CharPtr(){ + s32 temp1 = (READREG32(HW_REG_DISPCNT_A) & 0x7); + u32 temp = READREG16(HW_REG_BG3CNT_A); + if (temp1 < 3 || (temp1 < 6 && !(temp & 0x80))) + { + u32 temp1 = (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10); + u32 temp2 = (temp & 0x3C) >> 2; + return (void *)(0x6000000 + temp1 + (temp2 << 0xE)); + } + else + { + return NULL; + } +} + +void *G2S_GetBG3CharPtr(){ + s32 temp1 = (READREG32(HW_REG_DISPCNT_B) & 0x7); + u32 temp = READREG16(HW_REG_BG3CNT_B); + if (temp1 < 3 || (temp1 < 6 && !(temp & 0x80))) + { + u32 temp2 = ((temp & 0x3C) >> 2) << 0xE; + return (void *)(0x6200000 + temp2); + } + else + { + return NULL; + } +} -- cgit v1.2.3 From 0516c30ad7aa1941882b4e31e6b7bc4ec4ae02a4 Mon Sep 17 00:00:00 2001 From: Made Date: Wed, 13 May 2020 19:27:00 +0200 Subject: Fix Function signatures in GX_vramcnt --- arm9/lib/include/gx.h | 26 ++++++++++++------------ arm9/lib/src/GX_vramcnt.c | 50 +++++++++++++++++++++++------------------------ 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 3f218df9..c8229d3a 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -159,19 +159,19 @@ void GX_SendFifo48B(void *src, void *dst); //GX_vramcnt //some of the symbols don't match what the function does void GX_VRAMCNT_SetLCDC_(u32 mask); -void GX_SetBankForBG(u16 bg); -void GX_SetBankForOBJ(u16 obj); -void GX_SetBankForBGExtPltt(u16 bgextpltt); -void GX_SetBankForOBJExtPltt(u16 objextpltt); -void GX_SetBankForTex(u16 tex); -void GX_SetBankForTexPltt(u16 texpltt); -void GX_SetBankForClearImage(u16 clearimage); -void GX_SetBankForARM7(u16 arm7); -void GX_SetBankForLCDC(u16 lcdc); -void GX_SetBankForSubBG(u16 subbg); -void GX_SetBankForSubOBJ(u16 subobj); -void GX_SetBankForSubBGExtPltt(u16 subbgextpltt); -void GX_SetBankForSubOBJExtPltt(u16 subobjextpltt); +void GX_SetBankForBG(s32 bg); +void GX_SetBankForOBJ(s32 obj); +void GX_SetBankForBGExtPltt(s32 bgextpltt); +void GX_SetBankForOBJExtPltt(s32 objextpltt); +void GX_SetBankForTex(s32 tex); +void GX_SetBankForTexPltt(s32 texpltt); +void GX_SetBankForClearImage(s32 clearimage); +void GX_SetBankForARM7(s32 arm7); +void GX_SetBankForLCDC(s32 lcdc); +void GX_SetBankForSubBG(s32 subbg); +void GX_SetBankForSubOBJ(s32 subobj); +void GX_SetBankForSubBGExtPltt(s32 subbgextpltt); +void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt); u32 FUN_020C6130(u16 *ptr); u32 GX_ResetBankForBG(); u32 GX_ResetBankForOBJ(); diff --git a/arm9/lib/src/GX_vramcnt.c b/arm9/lib/src/GX_vramcnt.c index aa3d9cc9..52be412c 100644 --- a/arm9/lib/src/GX_vramcnt.c +++ b/arm9/lib/src/GX_vramcnt.c @@ -28,8 +28,8 @@ void GX_VRAMCNT_SetLCDC_(u32 mask){ SETREG8(HW_REG_VRAMCNT_I, 0x80); } -void GX_SetBankForBG(u16 bg){ - gUnk021D33C4.var00 = ~bg & (gUnk021D33C4.var00 | gUnk021D33C4.var02); +void GX_SetBankForBG(s32 bg){ + gUnk021D33C4.var00 = (u16)(~bg & (gUnk021D33C4.var00 | gUnk021D33C4.var02)); gUnk021D33C4.var02 = bg; switch (bg) { @@ -101,8 +101,8 @@ void GX_SetBankForBG(u16 bg){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForOBJ(u16 obj){ - gUnk021D33C4.var00 = ~obj & (gUnk021D33C4.var00 | gUnk021D33C4.var04); +void GX_SetBankForOBJ(s32 obj){ + gUnk021D33C4.var00 = (u16)(~obj & (gUnk021D33C4.var00 | gUnk021D33C4.var04)); gUnk021D33C4.var04 = obj; switch (obj) { @@ -140,8 +140,8 @@ void GX_SetBankForOBJ(u16 obj){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForBGExtPltt(u16 bgextpltt){ - gUnk021D33C4.var00 = ~bgextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var0E); +void GX_SetBankForBGExtPltt(s32 bgextpltt){ + gUnk021D33C4.var00 = (u16)(~bgextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var0E)); gUnk021D33C4.var0E = bgextpltt; switch (bgextpltt) { @@ -166,8 +166,8 @@ void GX_SetBankForBGExtPltt(u16 bgextpltt){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForOBJExtPltt(u16 objextpltt){ - gUnk021D33C4.var00 = ~objextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var10); +void GX_SetBankForOBJExtPltt(s32 objextpltt){ + gUnk021D33C4.var00 = (u16)(~objextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var10)); gUnk021D33C4.var10 = objextpltt; switch (objextpltt) { @@ -186,8 +186,8 @@ void GX_SetBankForOBJExtPltt(u16 objextpltt){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForTex(u16 tex){ - gUnk021D33C4.var00 = ~tex & (gUnk021D33C4.var00 | gUnk021D33C4.var08); +void GX_SetBankForTex(s32 tex){ + gUnk021D33C4.var00 = (u16)(~tex & (gUnk021D33C4.var00 | gUnk021D33C4.var08)); gUnk021D33C4.var08 = tex; if (tex == 0) { @@ -249,8 +249,8 @@ void GX_SetBankForTex(u16 tex){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForTexPltt(u16 texpltt){ - gUnk021D33C4.var00 = ~texpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var0A); +void GX_SetBankForTexPltt(s32 texpltt){ + gUnk021D33C4.var00 = (u16)(~texpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var0A)); gUnk021D33C4.var0A = texpltt; switch (texpltt) { @@ -275,8 +275,8 @@ void GX_SetBankForTexPltt(u16 texpltt){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForClearImage(u16 clearimage){ - gUnk021D33C4.var00 = ~clearimage & (gUnk021D33C4.var00 | gUnk021D33C4.var0C); +void GX_SetBankForClearImage(s32 clearimage){ + gUnk021D33C4.var00 = (u16)(~clearimage & (gUnk021D33C4.var00 | gUnk021D33C4.var0C)); gUnk021D33C4.var0C = clearimage; switch (clearimage) { @@ -306,8 +306,8 @@ void GX_SetBankForClearImage(u16 clearimage){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForARM7(u16 arm7){ - gUnk021D33C4.var00 = ~arm7 & (gUnk021D33C4.var00 | gUnk021D33C4.var06); +void GX_SetBankForARM7(s32 arm7){ + gUnk021D33C4.var00 = (u16)(~arm7 & (gUnk021D33C4.var00 | gUnk021D33C4.var06)); gUnk021D33C4.var06 = arm7; switch (arm7) { @@ -326,13 +326,13 @@ void GX_SetBankForARM7(u16 arm7){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForLCDC(u16 lcdc){ +void GX_SetBankForLCDC(s32 lcdc){ gUnk021D33C4.var00 |= lcdc; GX_VRAMCNT_SetLCDC_(lcdc); } -void GX_SetBankForSubBG(u16 subbg){ - gUnk021D33C4.var00 = ~subbg & (gUnk021D33C4.var00 | gUnk021D33C4.var12); +void GX_SetBankForSubBG(s32 subbg){ + gUnk021D33C4.var00 = (u16)(~subbg & (gUnk021D33C4.var00 | gUnk021D33C4.var12)); gUnk021D33C4.var12 = subbg; switch (subbg) { @@ -350,8 +350,8 @@ void GX_SetBankForSubBG(u16 subbg){ } -void GX_SetBankForSubOBJ(u16 subobj){ - gUnk021D33C4.var00 = ~subobj & (gUnk021D33C4.var00 | gUnk021D33C4.var14); +void GX_SetBankForSubOBJ(s32 subobj){ + gUnk021D33C4.var00 = (u16)(~subobj & (gUnk021D33C4.var00 | gUnk021D33C4.var14)); gUnk021D33C4.var14 = subobj; switch (subobj) { @@ -367,8 +367,8 @@ void GX_SetBankForSubOBJ(u16 subobj){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForSubBGExtPltt(u16 subbgextpltt){ - gUnk021D33C4.var00 = ~subbgextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var16); +void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){ + gUnk021D33C4.var00 = (u16)(~subbgextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var16)); gUnk021D33C4.var16 = subbgextpltt; switch (subbgextpltt) { @@ -383,8 +383,8 @@ void GX_SetBankForSubBGExtPltt(u16 subbgextpltt){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForSubOBJExtPltt(u16 subobjextpltt){ - gUnk021D33C4.var00 = ~subobjextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var18); +void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){ + gUnk021D33C4.var00 = (u16)(~subobjextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var18)); gUnk021D33C4.var18 = subobjextpltt; switch (subobjextpltt) { -- cgit v1.2.3 From 5223256ef928245620bb1a223084df6931999795 Mon Sep 17 00:00:00 2001 From: Made Date: Wed, 13 May 2020 20:55:45 +0200 Subject: Decompile GX_load2d.h --- arm9/asm/GX_load2d.s | 1116 ---------------------------------------------- arm9/lib/include/gx.h | 37 ++ arm9/lib/src/GX_load2d.c | 267 +++++++++++ arm9/undefined_syms.txt | 8 + 4 files changed, 312 insertions(+), 1116 deletions(-) delete mode 100644 arm9/asm/GX_load2d.s create mode 100644 arm9/lib/src/GX_load2d.c diff --git a/arm9/asm/GX_load2d.s b/arm9/asm/GX_load2d.s deleted file mode 100644 index 3d48c5d2..00000000 --- a/arm9/asm/GX_load2d.s +++ /dev/null @@ -1,1116 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start GXS_EndLoadOBJExtPltt -GXS_EndLoadOBJExtPltt: ; 0x020C8728 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C876C ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C8748 - bl MI_WaitDma -_020C8748: - ldr r0, _020C8770 ; =0x021D33F8 - ldr r0, [r0, #0x0] - bl GX_SetBankForSubOBJExtPltt - ldr r0, _020C8770 ; =0x021D33F8 - mov r1, #0x0 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C876C: .word 0x02106814 -_020C8770: .word 0x021D33F8 - - arm_func_start GXS_LoadOBJExtPltt -GXS_LoadOBJExtPltt: ; 0x020C8774 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - ldr r3, _020C87E0 ; =0x02106814 - mvn r12, #0x0 - ldr lr, [r3, #0x0] - mov r5, r0 - mov r4, r1 - mov r3, r2 - cmp lr, r12 - beq _020C87C8 - ldr r2, _020C87E4 ; =0x068A0000 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r0, lr - mov r1, r5 - add r2, r4, r2 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr -_020C87C8: - ldr r1, _020C87E4 ; =0x068A0000 - add r1, r4, r1 - bl MIi_CpuCopy32 - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020C87E0: .word 0x02106814 -_020C87E4: .word 0x068A0000 - - arm_func_start GXS_BeginLoadOBJExtPltt -GXS_BeginLoadOBJExtPltt: ; 0x020C87E8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl GX_ResetBankForSubOBJ - ldr r1, _020C8808 ; =0x021D33F8 - str r0, [r1, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C8808: .word 0x021D33F8 - - arm_func_start GXS_EndLoadBGExtPltt -GXS_EndLoadBGExtPltt: ; 0x020C880C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C8850 ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C882C - bl MI_WaitDma -_020C882C: - ldr r0, _020C8854 ; =0x021D33E0 - ldr r0, [r0, #0x0] - bl GX_SetBankForSubBGExtPltt - ldr r0, _020C8854 ; =0x021D33E0 - mov r1, #0x0 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C8850: .word 0x02106814 -_020C8854: .word 0x021D33E0 - - arm_func_start GXS_LoadBGExtPltt -GXS_LoadBGExtPltt: ; 0x020C8858 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - ldr r3, _020C88C4 ; =0x02106814 - mvn r12, #0x0 - ldr lr, [r3, #0x0] - mov r5, r0 - mov r4, r1 - mov r3, r2 - cmp lr, r12 - beq _020C88AC - ldr r2, _020C88C8 ; =0x06898000 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r0, lr - mov r1, r5 - add r2, r4, r2 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr -_020C88AC: - ldr r1, _020C88C8 ; =0x06898000 - add r1, r4, r1 - bl MIi_CpuCopy32 - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020C88C4: .word 0x02106814 -_020C88C8: .word 0x06898000 - - arm_func_start GXS_BeginLoadBGExtPltt -GXS_BeginLoadBGExtPltt: ; 0x020C88CC - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl FUN_020C6034 - ldr r1, _020C88EC ; =0x021D33E0 - str r0, [r1, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C88EC: .word 0x021D33E0 - - arm_func_start GX_EndLoadOBJExtPltt -GX_EndLoadOBJExtPltt: ; 0x020C88F0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C893C ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C8910 - bl MI_WaitDma -_020C8910: - ldr r0, _020C8940 ; =0x021D33E8 - ldr r0, [r0, #0x0] - bl GX_SetBankForOBJExtPltt - ldr r1, _020C8940 ; =0x021D33E8 - mov r2, #0x0 - ldr r0, _020C8944 ; =0x021D33E4 - str r2, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C893C: .word 0x02106814 -_020C8940: .word 0x021D33E8 -_020C8944: .word 0x021D33E4 - - arm_func_start GX_LoadOBJExtPltt -GX_LoadOBJExtPltt: ; 0x020C8948 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - ldr ip, _020C89B4 ; =0x021D33E4 - ldr r3, _020C89B8 ; =0x02106814 - ldr r4, [r12, #0x0] - ldr lr, [r3, #0x0] - mvn r12, #0x0 - mov r5, r0 - mov r3, r2 - cmp lr, r12 - add r4, r4, r1 - beq _020C89A0 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r0, lr - mov r1, r5 - mov r2, r4 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr -_020C89A0: - mov r1, r4 - bl MIi_CpuCopy32 - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020C89B4: .word 0x021D33E4 -_020C89B8: .word 0x02106814 - - arm_func_start GX_BeginLoadOBJExtPltt -GX_BeginLoadOBJExtPltt: ; 0x020C89BC - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl GX_ResetBankForOBJExtPltt - ldr r1, _020C8A1C ; =0x021D33E8 - cmp r0, #0x0 - str r0, [r1, #0x0] - addeq sp, sp, #0x4 - ldmeqia sp!, {lr} - bxeq lr - cmp r0, #0x20 - beq _020C8A04 - cmp r0, #0x40 - ldreq r1, _020C8A20 ; =0x06894000 - ldreq r0, _020C8A24 ; =0x021D33E4 - add sp, sp, #0x4 - streq r1, [r0, #0x0] - ldmia sp!, {lr} - bx lr -_020C8A04: - ldr r1, _020C8A28 ; =0x06890000 - ldr r0, _020C8A24 ; =0x021D33E4 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C8A1C: .word 0x021D33E8 -_020C8A20: .word 0x06894000 -_020C8A24: .word 0x021D33E4 -_020C8A28: .word 0x06890000 - - arm_func_start GX_EndLoadBGExtPltt -GX_EndLoadBGExtPltt: ; 0x020C8A2C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C8A80 ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C8A4C - bl MI_WaitDma -_020C8A4C: - ldr r0, _020C8A84 ; =0x021D33F4 - ldr r0, [r0, #0x0] - bl GX_SetBankForBGExtPltt - ldr r2, _020C8A84 ; =0x021D33F4 - mov r3, #0x0 - ldr r1, _020C8A88 ; =0x021D33F0 - ldr r0, _020C8A8C ; =0x021D33EC - str r3, [r2, #0x0] - str r3, [r1, #0x0] - str r3, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C8A80: .word 0x02106814 -_020C8A84: .word 0x021D33F4 -_020C8A88: .word 0x021D33F0 -_020C8A8C: .word 0x021D33EC - - arm_func_start GX_LoadBGExtPltt -GX_LoadBGExtPltt: ; 0x020C8A90 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - ldr lr, _020C8B04 ; =0x021D33F0 - ldr ip, _020C8B08 ; =0x021D33EC - ldr r3, _020C8B0C ; =0x02106814 - ldr lr, [lr, #0x0] - ldr r4, [r12, #0x0] - add r5, lr, r1 - ldr lr, [r3, #0x0] - mvn r12, #0x0 - mov r1, r0 - mov r3, r2 - cmp lr, r12 - sub r4, r5, r4 - beq _020C8AF0 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r0, lr - mov r2, r4 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr -_020C8AF0: - mov r1, r4 - bl MIi_CpuCopy32 - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020C8B04: .word 0x021D33F0 -_020C8B08: .word 0x021D33EC -_020C8B0C: .word 0x02106814 - - arm_func_start GX_BeginLoadBGExtPltt -GX_BeginLoadBGExtPltt: ; 0x020C8B10 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl GX_ResetBankForBGExtPltt - ldr r1, _020C8BFC ; =0x021D33F4 - cmp r0, #0x20 - str r0, [r1, #0x0] - bgt _020C8B60 - cmp r0, #0x20 - bge _020C8BD8 - cmp r0, #0x0 - bgt _020C8B4C - add sp, sp, #0x4 - cmp r0, #0x0 - ldmia sp!, {lr} - bx lr -_020C8B4C: - cmp r0, #0x10 - beq _020C8B90 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020C8B60: - cmp r0, #0x40 - bgt _020C8B7C - cmp r0, #0x40 - beq _020C8BB4 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020C8B7C: - cmp r0, #0x60 - beq _020C8BD8 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020C8B90: - ldr r3, _020C8C00 ; =0x06880000 - ldr r1, _020C8C04 ; =0x021D33F0 - ldr r0, _020C8C08 ; =0x021D33EC - mov r2, #0x0 - str r3, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020C8BB4: - ldr r3, _020C8C0C ; =0x06894000 - ldr r1, _020C8C04 ; =0x021D33F0 - ldr r0, _020C8C08 ; =0x021D33EC - mov r2, #0x4000 - str r3, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020C8BD8: - ldr r3, _020C8C10 ; =0x06890000 - ldr r1, _020C8C04 ; =0x021D33F0 - ldr r0, _020C8C08 ; =0x021D33EC - mov r2, #0x0 - str r3, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C8BFC: .word 0x021D33F4 -_020C8C00: .word 0x06880000 -_020C8C04: .word 0x021D33F0 -_020C8C08: .word 0x021D33EC -_020C8C0C: .word 0x06894000 -_020C8C10: .word 0x06890000 - - arm_func_start GXS_LoadBG3Char -GXS_LoadBG3Char: ; 0x020C8C14 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG3CharPtr - ldr r1, _020C8C78 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8C60 - cmp r4, #0x30 - bls _020C8C60 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8C60: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8C78: .word 0x02106814 - - arm_func_start GX_LoadBG3Char -GX_LoadBG3Char: ; 0x020C8C7C - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG3CharPtr - ldr r1, _020C8CE0 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8CC8 - cmp r4, #0x30 - bls _020C8CC8 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8CC8: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8CE0: .word 0x02106814 - - arm_func_start GXS_LoadBG2Char -GXS_LoadBG2Char: ; 0x020C8CE4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG2CharPtr - ldr r1, _020C8D48 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8D30 - cmp r4, #0x30 - bls _020C8D30 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8D30: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8D48: .word 0x02106814 - - arm_func_start GX_LoadBG2Char -GX_LoadBG2Char: ; 0x020C8D4C - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG2CharPtr - ldr r1, _020C8DB0 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8D98 - cmp r4, #0x30 - bls _020C8D98 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8D98: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8DB0: .word 0x02106814 - - arm_func_start GXS_LoadBG1Char -GXS_LoadBG1Char: ; 0x020C8DB4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG1CharPtr - ldr r1, _020C8E18 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8E00 - cmp r4, #0x30 - bls _020C8E00 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8E00: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8E18: .word 0x02106814 - - arm_func_start GX_LoadBG1Char -GX_LoadBG1Char: ; 0x020C8E1C - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG1CharPtr - ldr r1, _020C8E80 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8E68 - cmp r4, #0x30 - bls _020C8E68 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8E68: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8E80: .word 0x02106814 - - arm_func_start GXS_LoadBG0Char -GXS_LoadBG0Char: ; 0x020C8E84 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG0CharPtr - ldr r1, _020C8EE8 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8ED0 - cmp r4, #0x30 - bls _020C8ED0 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8ED0: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8EE8: .word 0x02106814 - - arm_func_start GX_LoadBG0Char -GX_LoadBG0Char: ; 0x020C8EEC - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG0CharPtr - ldr r1, _020C8F50 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8F38 - cmp r4, #0x30 - bls _020C8F38 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy32 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8F38: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8F50: .word 0x02106814 - - arm_func_start GXS_LoadBG3Scr -GXS_LoadBG3Scr: ; 0x020C8F54 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG3ScrPtr - ldr r1, _020C8FB8 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C8FA0 - cmp r4, #0x1c - bls _020C8FA0 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C8FA0: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C8FB8: .word 0x02106814 - - arm_func_start GX_LoadBG3Scr -GX_LoadBG3Scr: ; 0x020C8FBC - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG3ScrPtr - ldr r1, _020C9020 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C9008 - cmp r4, #0x1c - bls _020C9008 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C9008: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C9020: .word 0x02106814 - - arm_func_start GXS_LoadBG2Scr -GXS_LoadBG2Scr: ; 0x020C9024 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG2ScrPtr - ldr r1, _020C9088 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C9070 - cmp r4, #0x1c - bls _020C9070 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C9070: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C9088: .word 0x02106814 - - arm_func_start GX_LoadBG2Scr -GX_LoadBG2Scr: ; 0x020C908C - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG2ScrPtr - ldr r1, _020C90F0 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C90D8 - cmp r4, #0x1c - bls _020C90D8 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C90D8: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C90F0: .word 0x02106814 - - arm_func_start GXS_LoadBG1Scr -GXS_LoadBG1Scr: ; 0x020C90F4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG1ScrPtr - ldr r1, _020C9158 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C9140 - cmp r4, #0x1c - bls _020C9140 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C9140: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C9158: .word 0x02106814 - - arm_func_start GX_LoadBG1Scr -GX_LoadBG1Scr: ; 0x020C915C - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG1ScrPtr - ldr r1, _020C91C0 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C91A8 - cmp r4, #0x1c - bls _020C91A8 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C91A8: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C91C0: .word 0x02106814 - - arm_func_start GXS_LoadBG0Scr -GXS_LoadBG0Scr: ; 0x020C91C4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2S_GetBG0ScrPtr - ldr r1, _020C9228 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C9210 - cmp r4, #0x1c - bls _020C9210 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C9210: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C9228: .word 0x02106814 - - arm_func_start GX_LoadBG0Scr -GX_LoadBG0Scr: ; 0x020C922C - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl G2_GetBG0ScrPtr - ldr r1, _020C9290 ; =0x02106814 - mov r12, r0 - ldr r0, [r1, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C9278 - cmp r4, #0x1c - bls _020C9278 - mov r1, r6 - mov r3, r4 - add r2, r12, r5 - bl MI_DmaCopy16 - ldmia sp!, {r4-r6,lr} - bx lr -_020C9278: - mov r0, r6 - mov r2, r4 - add r1, r12, r5 - bl MIi_CpuCopy16 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C9290: .word 0x02106814 - - arm_func_start GXS_LoadOBJ -GXS_LoadOBJ: ; 0x020C9294 - stmdb sp!, {r4,lr} - ldr r3, _020C92F0 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - mov r12, #0x6600000 - beq _020C92D8 - cmp r3, #0x30 - bls _020C92D8 - mov r1, r4 - add r2, r12, lr - bl MI_DmaCopy32 - ldmia sp!, {r4,lr} - bx lr -_020C92D8: - mov r0, r4 - mov r2, r3 - add r1, r12, lr - bl MIi_CpuCopy32 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C92F0: .word 0x02106814 - - arm_func_start GX_LoadOBJ -GX_LoadOBJ: ; 0x020C92F4 - stmdb sp!, {r4,lr} - ldr r3, _020C9350 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - mov r12, #0x6400000 - beq _020C9338 - cmp r3, #0x30 - bls _020C9338 - mov r1, r4 - add r2, r12, lr - bl MI_DmaCopy32 - ldmia sp!, {r4,lr} - bx lr -_020C9338: - mov r0, r4 - mov r2, r3 - add r1, r12, lr - bl MIi_CpuCopy32 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C9350: .word 0x02106814 - - arm_func_start GXS_LoadOAM -GXS_LoadOAM: ; 0x020C9354 - stmdb sp!, {r4,lr} - ldr r3, _020C93B4 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - beq _020C9398 - cmp r3, #0x30 - bls _020C9398 - ldr r2, _020C93B8 ; =0x07000400 - mov r1, r4 - add r2, lr, r2 - bl MI_DmaCopy32 - ldmia sp!, {r4,lr} - bx lr -_020C9398: - ldr r1, _020C93B8 ; =0x07000400 - mov r0, r4 - mov r2, r3 - add r1, lr, r1 - bl MIi_CpuCopy32 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C93B4: .word 0x02106814 -_020C93B8: .word 0x07000400 - - arm_func_start GX_LoadOAM -GX_LoadOAM: ; 0x020C93BC - stmdb sp!, {r4,lr} - ldr r3, _020C9414 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - beq _020C93FC - cmp r3, #0x30 - bls _020C93FC - mov r1, r4 - add r2, lr, #0x7000000 - bl MI_DmaCopy32 - ldmia sp!, {r4,lr} - bx lr -_020C93FC: - mov r0, r4 - mov r2, r3 - add r1, lr, #0x7000000 - bl MIi_CpuCopy32 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C9414: .word 0x02106814 - - arm_func_start GXS_LoadOBJPltt -GXS_LoadOBJPltt: ; 0x020C9418 - stmdb sp!, {r4,lr} - ldr r3, _020C9478 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - beq _020C945C - cmp r3, #0x1c - bls _020C945C - ldr r2, _020C947C ; =0x05000600 - mov r1, r4 - add r2, lr, r2 - bl MI_DmaCopy16 - ldmia sp!, {r4,lr} - bx lr -_020C945C: - ldr r1, _020C947C ; =0x05000600 - mov r0, r4 - mov r2, r3 - add r1, lr, r1 - bl MIi_CpuCopy16 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C9478: .word 0x02106814 -_020C947C: .word 0x05000600 - - arm_func_start GX_LoadOBJPltt -GX_LoadOBJPltt: ; 0x020C9480 - stmdb sp!, {r4,lr} - ldr r3, _020C94E0 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - beq _020C94C4 - cmp r3, #0x1c - bls _020C94C4 - ldr r2, _020C94E4 ; =0x05000200 - mov r1, r4 - add r2, lr, r2 - bl MI_DmaCopy16 - ldmia sp!, {r4,lr} - bx lr -_020C94C4: - ldr r1, _020C94E4 ; =0x05000200 - mov r0, r4 - mov r2, r3 - add r1, lr, r1 - bl MIi_CpuCopy16 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C94E0: .word 0x02106814 -_020C94E4: .word 0x05000200 - - arm_func_start GXS_LoadBGPltt -GXS_LoadBGPltt: ; 0x020C94E8 - stmdb sp!, {r4,lr} - ldr r3, _020C9548 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - beq _020C952C - cmp r3, #0x1c - bls _020C952C - ldr r2, _020C954C ; =0x05000400 - mov r1, r4 - add r2, lr, r2 - bl MI_DmaCopy16 - ldmia sp!, {r4,lr} - bx lr -_020C952C: - ldr r1, _020C954C ; =0x05000400 - mov r0, r4 - mov r2, r3 - add r1, lr, r1 - bl MIi_CpuCopy16 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C9548: .word 0x02106814 -_020C954C: .word 0x05000400 - - arm_func_start GX_LoadBGPltt -GX_LoadBGPltt: ; 0x020C9550 - stmdb sp!, {r4,lr} - ldr r3, _020C95A8 ; =0x02106814 - mov r4, r0 - ldr r0, [r3, #0x0] - mvn r12, #0x0 - mov lr, r1 - mov r3, r2 - cmp r0, r12 - beq _020C9590 - cmp r3, #0x1c - bls _020C9590 - mov r1, r4 - add r2, lr, #0x5000000 - bl MI_DmaCopy16 - ldmia sp!, {r4,lr} - bx lr -_020C9590: - mov r0, r4 - mov r2, r3 - add r1, lr, #0x5000000 - bl MIi_CpuCopy16 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C95A8: .word 0x02106814 diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index c8229d3a..5891753e 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -228,6 +228,43 @@ void *G2S_GetBG2CharPtr(); void *G2_GetBG3CharPtr(); void *G2S_GetBG3CharPtr(); +//GX_load2d +void GX_LoadBGPltt(void *src, u32 offset, u32 size); +void GXS_LoadBGPltt(void *src, u32 offset, u32 size); +void GX_LoadOBJPltt(void *src, u32 offset, u32 size); +void GXS_LoadOBJPltt(void *src, u32 offset, u32 size); +void GX_LoadOAM(void *src, u32 offset, u32 size); +void GXS_LoadOAM(void *src, u32 offset, u32 size); +void GX_LoadOBJ(void *src, u32 offset, u32 size); +void GXS_LoadOBJ(void *src, u32 offset, u32 size); +void GX_LoadBG0Scr(void *src, u32 offset, u32 size); +void GXS_LoadBG0Scr(void *src, u32 offset, u32 size); +void GX_LoadBG1Scr(void *src, u32 offset, u32 size); +void GXS_LoadBG1Scr(void *src, u32 offset, u32 size); +void GX_LoadBG2Scr(void *src, u32 offset, u32 size); +void GXS_LoadBG2Scr(void *src, u32 offset, u32 size); +void GX_LoadBG3Scr(void *src, u32 offset, u32 size); +void GXS_LoadBG3Scr(void *src, u32 offset, u32 size); +void GX_LoadBG0Char(void *src, u32 offset, u32 size); +void GXS_LoadBG0Char(void *src, u32 offset, u32 size); +void GX_LoadBG1Char(void *src, u32 offset, u32 size); +void GXS_LoadBG1Char(void *src, u32 offset, u32 size); +void GX_LoadBG2Char(void *src, u32 offset, u32 size); +void GXS_LoadBG2Char(void *src, u32 offset, u32 size); +void GX_LoadBG3Char(void *src, u32 offset, u32 size); +void GXS_LoadBG3Char(void *src, u32 offset, u32 size); +void GX_BeginLoadBGExtPltt(); +void GX_LoadBGExtPltt(void *src, u32 offset, u32 size); +void GX_EndLoadBGExtPltt(); +void GX_BeginLoadOBJExtPltt(); +void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size); +void GX_EndLoadOBJExtPltt(); +void GXS_BeginLoadBGExtPltt(); +void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size); +void GXS_EndLoadBGExtPltt(); +void GXS_BeginLoadOBJExtPltt(); +void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size); +void GXS_EndLoadOBJExtPltt(); //GXi_NopClearFifo128_ probably asm diff --git a/arm9/lib/src/GX_load2d.c b/arm9/lib/src/GX_load2d.c new file mode 100644 index 00000000..b0af0e8c --- /dev/null +++ b/arm9/lib/src/GX_load2d.c @@ -0,0 +1,267 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +extern u32 gUnk02106814; + +extern s32 gUnk021D33F8; +extern s32 gUnk021D33F4; +extern u32 gUnk021D33F0; +extern u32 gUnk021D33EC; +extern s32 gUnk021D33E8; +extern u32 gUnk021D33E4; +extern s32 gUnk021D33E0; + +void MI_WaitDma(u32); +void MI_DmaCopy32Async(u32, void *, void *, u32, void *, void *); +void MI_DmaCopy16(u32 unk, void *src, void *dst, u32 size); +void MIi_CpuCopy16(void *src, void *dst, u32 size); +void MI_DmaCopy32(u32 unk, void *src, void *dst, u32 size); +void MIi_CpuCopy32(void *src, void *dst, u32 size); + + +static inline void _GX_Load_16(void *src, u32 offset, u32 size, u32 base){ + if (gUnk02106814 != -1 && size > 0x1C) + { + MI_DmaCopy16(gUnk02106814, src, (void *)(base + offset), size); + } + else + { + MIi_CpuCopy16(src, (void *)(base + offset), size); + } +} + +static inline void _GX_Load_32(void *src, u32 offset, u32 size, u32 base){ + if (gUnk02106814 != -1 && size > 0x30) + { + MI_DmaCopy32(gUnk02106814, src, (void *)(base + offset), size); + } + else + { + MIi_CpuCopy32(src, (void *)(base + offset), size); + } +} + +static inline void _GX_Load_32_Async(void *src, void *dst, u32 size, void *func, void *ptr){ + if (gUnk02106814 != -1) + { + MI_DmaCopy32Async(gUnk02106814, src, dst, size, func, ptr); + } + else + { + MIi_CpuCopy32(src, dst, size); + } +} + +static inline void *_GX_OBJ_PTR(){ + return (void *)0x6400000; +} +static inline void *_GXS_OBJ_PTR(){ + return (void *)0x6600000; +} + +void GX_LoadBGPltt(void *src, u32 offset, u32 size){ + _GX_Load_16(src, offset, size, 0x5000000); +} + +void GXS_LoadBGPltt(void *src, u32 offset, u32 size){ + _GX_Load_16(src, offset, size, 0x5000400); +} + +void GX_LoadOBJPltt(void *src, u32 offset, u32 size){ + _GX_Load_16(src, offset, size, 0x5000200); +} + +void GXS_LoadOBJPltt(void *src, u32 offset, u32 size){ + _GX_Load_16(src, offset, size, 0x5000600); +} + +void GX_LoadOAM(void *src, u32 offset, u32 size){ + _GX_Load_32(src, offset, size, 0x7000000); +} + +void GXS_LoadOAM(void *src, u32 offset, u32 size){ + _GX_Load_32(src, offset, size, 0x7000400); +} + +void GX_LoadOBJ(void *src, u32 offset, u32 size){ + u32 base = (u32)_GX_OBJ_PTR(); + _GX_Load_32(src, offset, size, base); +} + +void GXS_LoadOBJ(void *src, u32 offset, u32 size){ + u32 base = (u32)_GXS_OBJ_PTR(); + _GX_Load_32(src, offset, size, base); +} + +void GX_LoadBG0Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG0ScrPtr(); + _GX_Load_16(src, offset, size, base); +} + +void GXS_LoadBG0Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG0ScrPtr(); + _GX_Load_16(src, offset, size, base); +} + +void GX_LoadBG1Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG1ScrPtr(); + _GX_Load_16(src, offset, size, base); +} + +void GXS_LoadBG1Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG1ScrPtr(); + _GX_Load_16(src, offset, size, base); +} + +void GX_LoadBG2Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG2ScrPtr(); + _GX_Load_16(src, offset, size, base); +} + +void GXS_LoadBG2Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG2ScrPtr(); + _GX_Load_16(src, offset, size, base); +} + +void GX_LoadBG3Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG3ScrPtr(); + _GX_Load_16(src, offset, size, base); +} + +void GXS_LoadBG3Scr(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG3ScrPtr(); + _GX_Load_16(src, offset, size, base); +} + +void GX_LoadBG0Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG0CharPtr(); + _GX_Load_32(src, offset, size, base); +} + +void GXS_LoadBG0Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG0CharPtr(); + _GX_Load_32(src, offset, size, base); +} + +void GX_LoadBG1Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG1CharPtr(); + _GX_Load_32(src, offset, size, base); +} + +void GXS_LoadBG1Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG1CharPtr(); + _GX_Load_32(src, offset, size, base); +} + +void GX_LoadBG2Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG2CharPtr(); + _GX_Load_32(src, offset, size, base); +} + +void GXS_LoadBG2Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG2CharPtr(); + _GX_Load_32(src, offset, size, base); +} + +void GX_LoadBG3Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2_GetBG3CharPtr(); + _GX_Load_32(src, offset, size, base); +} + +void GXS_LoadBG3Char(void *src, u32 offset, u32 size){ + u32 base = (u32)G2S_GetBG3CharPtr(); + _GX_Load_32(src, offset, size, base); +} + +void GX_BeginLoadBGExtPltt(){ + gUnk021D33F4 = GX_ResetBankForBGExtPltt(); + switch (gUnk021D33F4) + { + case 0: //needed to match + break; + case 0x10: + gUnk021D33F0 = 0x06880000; + gUnk021D33EC = 0x0; + break; + case 0x40: + gUnk021D33F0 = 0x06894000; + gUnk021D33EC = 0x4000; + break; + case 0x20: + case 0x60: + gUnk021D33F0 = 0x06890000; + gUnk021D33EC = 0x0; + break; + } +} + +void GX_LoadBGExtPltt(void *src, u32 offset, u32 size){ + _GX_Load_32_Async(src, (void *)(gUnk021D33F0 + offset - gUnk021D33EC), size, NULL, NULL); +} + +void GX_EndLoadBGExtPltt(){ + if (gUnk02106814 != -1) + MI_WaitDma(gUnk02106814); + GX_SetBankForBGExtPltt(gUnk021D33F4); + gUnk021D33F4 = 0x0; + gUnk021D33F0 = 0x0; + gUnk021D33EC = 0x0; +} + +void GX_BeginLoadOBJExtPltt(){ + gUnk021D33E8 = GX_ResetBankForOBJExtPltt(); + switch (gUnk021D33E8) + { + case 0: //needed to match + break; + case 0x40: + gUnk021D33E4 = 0x06894000; + break; + case 0x20: + gUnk021D33E4 = 0x06890000; + break; + } +} + +void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size){ + _GX_Load_32_Async(src, (void *)(gUnk021D33E4 + offset), size, NULL, NULL); +} + +void GX_EndLoadOBJExtPltt(){ + if (gUnk02106814 != -1) + MI_WaitDma(gUnk02106814); + GX_SetBankForOBJExtPltt(gUnk021D33E8); + gUnk021D33E8 = 0x0; + gUnk021D33E4 = 0x0; +} + +void GXS_BeginLoadBGExtPltt(){ + gUnk021D33E0 = FUN_020C6034(); +} + +void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size){ + _GX_Load_32_Async(src, (void *)(0x06898000 + offset), size, NULL, NULL); +} + +void GXS_EndLoadBGExtPltt(){ + if (gUnk02106814 != -1) + MI_WaitDma(gUnk02106814); + GX_SetBankForSubBGExtPltt(gUnk021D33E0); + gUnk021D33E0 = 0x0; +} + +void GXS_BeginLoadOBJExtPltt(){ + gUnk021D33F8 = GX_ResetBankForSubOBJ(); +} + +void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size){ + _GX_Load_32_Async(src, (void *)(0x068A0000 + offset), size, NULL, NULL); +} + +void GXS_EndLoadOBJExtPltt(){ + if (gUnk02106814 != -1) + MI_WaitDma(gUnk02106814); + GX_SetBankForSubOBJExtPltt(gUnk021D33F8); + gUnk021D33F8 = 0x0; +} diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt index 973e6b51..72bd6f94 100644 --- a/arm9/undefined_syms.txt +++ b/arm9/undefined_syms.txt @@ -23,6 +23,14 @@ SDK_OVERLAY_DIGEST_END = 0x02106F84; gUnk021D33BC = 0x021D33BC; gUnk021D33C4 = 0x021D33C4; +gUnk021D33E0 = 0x021D33E0; +gUnk021D33E4 = 0x021D33E4; +gUnk021D33E8 = 0x021D33E8; +gUnk021D33EC = 0x021D33EC; +gUnk021D33F0 = 0x021D33F0; +gUnk021D33F4 = 0x021D33F4; +gUnk021D33F8 = 0x021D33F8; + // Overlay FUN_021D76AC = 0x021D76AC; gUnk021D76C8 = 0x021D76C8; -- cgit v1.2.3 From 0b3c15a399b456bffcd65aa5d100371ce69fa8eb Mon Sep 17 00:00:00 2001 From: Made Date: Fri, 15 May 2020 00:22:52 +0200 Subject: Decompile GX_load3d.s --- arm9/asm/GX_load3d.s | 420 ----------------------------------------------- arm9/lib/include/gx.h | 12 ++ arm9/lib/src/GX_load3d.c | 157 ++++++++++++++++++ arm9/undefined_syms.txt | 14 ++ 4 files changed, 183 insertions(+), 420 deletions(-) delete mode 100644 arm9/asm/GX_load3d.s create mode 100644 arm9/lib/src/GX_load3d.c diff --git a/arm9/asm/GX_load3d.s b/arm9/asm/GX_load3d.s deleted file mode 100644 index 0c32f530..00000000 --- a/arm9/asm/GX_load3d.s +++ /dev/null @@ -1,420 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start GX_EndLoadClearImage -GX_EndLoadClearImage: ; 0x020C95AC - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C95F8 ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C95CC - bl MI_WaitDma -_020C95CC: - ldr r0, _020C95FC ; =0x021D33FC - ldr r0, [r0, #0x0] - bl GX_SetBankForClearImage - ldr r1, _020C95FC ; =0x021D33FC - mov r2, #0x0 - ldr r0, _020C9600 ; =0x021D340C - str r2, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C95F8: .word 0x02106814 -_020C95FC: .word 0x021D33FC -_020C9600: .word 0x021D340C - - arm_func_start GX_LoadClearImageDepth -GX_LoadClearImageDepth: ; 0x020C9604 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - ldr r3, _020C9670 ; =0x021D340C - ldr r2, _020C9674 ; =0x02106814 - ldr r12, [r3, #0x0] - ldr lr, [r2, #0x0] - mvn r2, #0x0 - mov r4, r0 - mov r3, r1 - cmp lr, r2 - add r2, r12, #0x20000 - beq _020C9658 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r0, lr - mov r1, r4 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr -_020C9658: - mov r1, r2 - mov r2, r3 - bl MIi_CpuCopy32 - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C9670: .word 0x021D340C -_020C9674: .word 0x02106814 - - arm_func_start GX_LoadClearImageColor -GX_LoadClearImageColor: ; 0x020C9678 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - ldr r2, _020C96E0 ; =0x02106814 - ldr ip, _020C96E4 ; =0x021D340C - ldr lr, [r2, #0x0] - mvn r2, #0x0 - mov r4, r0 - mov r3, r1 - cmp lr, r2 - ldr r2, [r12, #0x0] - beq _020C96C8 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r0, lr - mov r1, r4 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr -_020C96C8: - mov r1, r2 - mov r2, r3 - bl MIi_CpuCopy32 - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020C96E0: .word 0x02106814 -_020C96E4: .word 0x021D340C - - arm_func_start GX_BeginLoadClearImage -GX_BeginLoadClearImage: ; 0x020C96E8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl GX_ResetBankForClearImage - ldr r1, _020C979C ; =0x021D33FC - cmp r0, #0xc - str r0, [r1, #0x0] - addls pc, pc, r0, lsl #0x2 - b _020C9790 -_020C9708: - b _020C9790 -_020C970C: - b _020C976C -_020C9710: - b _020C973C -_020C9714: - b _020C973C -_020C9718: - b _020C9784 -_020C971C: - b _020C9790 -_020C9720: - b _020C9790 -_020C9724: - b _020C9790 -_020C9728: - b _020C9754 -_020C972C: - b _020C9790 -_020C9730: - b _020C9790 -_020C9734: - b _020C9790 -_020C9738: - b _020C9754 -_020C973C: - ldr r0, _020C97A0 ; =0x021D340C - mov r1, #0x6800000 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020C9754: - ldr r1, _020C97A4 ; =0x06840000 - ldr r0, _020C97A0 ; =0x021D340C - add sp, sp, #0x4 - str r1, [r0, #0x0] - ldmia sp!, {lr} - bx lr -_020C976C: - ldr r1, _020C97A8 ; =0x067E0000 - ldr r0, _020C97A0 ; =0x021D340C - add sp, sp, #0x4 - str r1, [r0, #0x0] - ldmia sp!, {lr} - bx lr -_020C9784: - ldr r1, _020C97AC ; =0x06820000 - ldr r0, _020C97A0 ; =0x021D340C - str r1, [r0, #0x0] -_020C9790: - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C979C: .word 0x021D33FC -_020C97A0: .word 0x021D340C -_020C97A4: .word 0x06840000 -_020C97A8: .word 0x067E0000 -_020C97AC: .word 0x06820000 - - arm_func_start GX_EndLoadTexPltt -GX_EndLoadTexPltt: ; 0x020C97B0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C97FC ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C97D0 - bl MI_WaitDma -_020C97D0: - ldr r0, _020C9800 ; =0x021D3408 - ldr r0, [r0, #0x0] - bl GX_SetBankForTexPltt - ldr r1, _020C9800 ; =0x021D3408 - mov r2, #0x0 - ldr r0, _020C9804 ; =0x021D3404 - str r2, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C97FC: .word 0x02106814 -_020C9800: .word 0x021D3408 -_020C9804: .word 0x021D3404 - - arm_func_start GX_LoadTexPltt -GX_LoadTexPltt: ; 0x020C9808 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - ldr ip, _020C9874 ; =0x021D3404 - ldr r3, _020C9878 ; =0x02106814 - ldr r4, [r12, #0x0] - ldr lr, [r3, #0x0] - mvn r12, #0x0 - mov r5, r0 - mov r3, r2 - cmp lr, r12 - add r4, r4, r1 - beq _020C9860 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r0, lr - mov r1, r5 - mov r2, r4 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr -_020C9860: - mov r1, r4 - bl MIi_CpuCopy32 - add sp, sp, #0xc - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020C9874: .word 0x021D3404 -_020C9878: .word 0x02106814 - - arm_func_start GX_BeginLoadTexPltt -GX_BeginLoadTexPltt: ; 0x020C987C - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl GX_ResetBankForTexPltt - mov r3, r0, asr #0x4 - ldr r2, _020C98B8 ; =0x021D3408 - ldr r1, _020C98BC ; =0x02103B3C - mov r3, r3, lsl #0x1 - ldrh r3, [r1, r3] - ldr r1, _020C98C0 ; =0x021D3404 - str r0, [r2, #0x0] - mov r0, r3, lsl #0xc - str r0, [r1, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C98B8: .word 0x021D3408 -_020C98BC: .word 0x02103B3C -_020C98C0: .word 0x021D3404 - - arm_func_start GX_EndLoadTex -GX_EndLoadTex: ; 0x020C98C4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C9920 ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C98E4 - bl MI_WaitDma -_020C98E4: - ldr r0, _020C9924 ; =0x021D3410 - ldr r0, [r0, #0x0] - bl GX_SetBankForTex - ldr r3, _020C9928 ; =0x021D3418 - mov r12, #0x0 - ldr r2, _020C992C ; =0x021D3414 - ldr r1, _020C9930 ; =0x021D3400 - ldr r0, _020C9924 ; =0x021D3410 - str r12, [r3, #0x0] - str r12, [r2, #0x0] - str r12, [r1, #0x0] - str r12, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C9920: .word 0x02106814 -_020C9924: .word 0x021D3410 -_020C9928: .word 0x021D3418 -_020C992C: .word 0x021D3414 -_020C9930: .word 0x021D3400 - - arm_func_start GX_LoadTex -GX_LoadTex: ; 0x020C9934 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0xc - ldr r3, _020C9A88 ; =0x021D3414 - mov r7, r0 - ldr r5, [r3, #0x0] - mov r6, r2 - cmp r5, #0x0 - ldreq r0, _020C9A8C ; =0x021D3400 - ldreq r0, [r0, #0x0] - addeq r2, r0, r1 - beq _020C9A34 - ldr r0, _020C9A90 ; =0x021D3418 - add r2, r1, r6 - ldr r4, [r0, #0x0] - cmp r2, r4 - ldrlo r0, _020C9A8C ; =0x021D3400 - ldrcc r0, [r0, #0x0] - addcc r2, r0, r1 - blo _020C9A34 - cmp r1, r4 - addcs r0, r5, r1 - subcs r2, r0, r4 - bhs _020C9A34 - ldr r2, _020C9A8C ; =0x021D3400 - ldr r0, _020C9A94 ; =0x02106814 - ldr r3, [r2, #0x0] - ldr r0, [r0, #0x0] - mvn r2, #0x0 - cmp r0, r2 - sub r4, r4, r1 - add r2, r3, r1 - beq _020C99CC - cmp r4, #0x30 - bls _020C99CC - mov r1, r7 - mov r3, r4 - bl MI_DmaCopy32 - b _020C99DC -_020C99CC: - mov r1, r2 - mov r0, r7 - mov r2, r4 - bl MIi_CpuCopy32 -_020C99DC: - ldr r0, _020C9A94 ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C9A18 - mov r12, #0x0 - str r12, [sp, #0x0] - mov r2, r5 - add r1, r7, r4 - sub r3, r6, r4 - str r12, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0xc - ldmia sp!, {r4-r7,lr} - bx lr -_020C9A18: - mov r1, r5 - add r0, r7, r4 - sub r2, r6, r4 - bl MIi_CpuCopy32 - add sp, sp, #0xc - ldmia sp!, {r4-r7,lr} - bx lr -_020C9A34: - ldr r0, _020C9A94 ; =0x02106814 - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020C9A6C - mov r4, #0x0 - str r4, [sp, #0x0] - mov r1, r7 - mov r3, r6 - str r4, [sp, #0x4] - bl MI_DmaCopy32Async - add sp, sp, #0xc - ldmia sp!, {r4-r7,lr} - bx lr -_020C9A6C: - mov r1, r2 - mov r0, r7 - mov r2, r6 - bl MIi_CpuCopy32 - add sp, sp, #0xc - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020C9A88: .word 0x021D3414 -_020C9A8C: .word 0x021D3400 -_020C9A90: .word 0x021D3418 -_020C9A94: .word 0x02106814 - - arm_func_start GX_BeginLoadTex -GX_BeginLoadTex: ; 0x020C9A98 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - bl GX_ResetBankForTex - mov r1, #0x6 - mul r12, r0, r1 - ldr r3, _020C9AFC ; =0x02103B4C - ldr r2, _020C9B00 ; =0x02103B4E - ldr r1, _020C9B04 ; =0x02103B50 - ldrh r5, [r3, r12] - ldrh r4, [r2, r12] - ldrh lr, [r1, r12] - ldr ip, _020C9B08 ; =0x021D3410 - ldr r3, _020C9B0C ; =0x021D3400 - mov r5, r5, lsl #0xc - ldr r2, _020C9B10 ; =0x021D3414 - mov r4, r4, lsl #0xc - ldr r1, _020C9B14 ; =0x021D3418 - mov lr, lr, lsl #0xc - str r0, [r12, #0x0] - str r5, [r3, #0x0] - str r4, [r2, #0x0] - str lr, [r1, #0x0] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020C9AFC: .word 0x02103B4C -_020C9B00: .word 0x02103B4E -_020C9B04: .word 0x02103B50 -_020C9B08: .word 0x021D3410 -_020C9B0C: .word 0x021D3400 -_020C9B10: .word 0x021D3414 -_020C9B14: .word 0x021D3418 diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 5891753e..edb6f122 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -266,6 +266,18 @@ void GXS_BeginLoadOBJExtPltt(); void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size); void GXS_EndLoadOBJExtPltt(); +//GX_load3d +void GX_BeginLoadTex(); +void GX_LoadTex(void *src, u32 offset, u32 size); +void GX_EndLoadTex(); +void GX_BeginLoadTexPltt(); +void GX_LoadTexPltt(void *src, u32 offset, u32 size); +void GX_EndLoadTexPltt(); +void GX_BeginLoadClearImage(); +void GX_LoadClearImageColor(void *src, u32 size); +void GX_LoadClearImageDepth(void *src, u32 size); +void GX_EndLoadClearImage(); + //GXi_NopClearFifo128_ probably asm #endif //GUARD_GX_H diff --git a/arm9/lib/src/GX_load3d.c b/arm9/lib/src/GX_load3d.c new file mode 100644 index 00000000..9ae7427a --- /dev/null +++ b/arm9/lib/src/GX_load3d.c @@ -0,0 +1,157 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +extern u32 gUnk02106814; + +extern u32 gUnk021D3410; +extern u32 gUnk021D3400; +extern u32 gUnk021D3414; +extern u32 gUnk021D3418; + +//probably structs of length 0x6 +extern u16 gUnk02103B4C[]; +extern u16 gUnk02103B4E[]; +extern u16 gUnk02103B50[]; + +extern u32 gUnk021D3408; +extern u32 gUnk021D3404; +extern u16 gUnk02103B3C[]; + +extern s32 gUnk021D33FC; +extern u32 gUnk021D340C; + +static inline void _GX_Load_16(void *src, void *dst, u32 size){ + if (gUnk02106814 != -1 && size > 0x1C) + { + MI_DmaCopy16(gUnk02106814, src, dst, size); + } + else + { + MIi_CpuCopy16(src, dst, size); + } +} + +static inline void _GX_Load_32(void *src, void *dst, u32 size){ + if (gUnk02106814 != -1 && size > 0x30) + { + MI_DmaCopy32(gUnk02106814, src, dst, size); + } + else + { + MIi_CpuCopy32(src, dst, size); + } +} + +static inline void _GX_Load_32_Async(void *src, void *dst, u32 size, void *func, void *ptr){ + if (gUnk02106814 != -1) + { + MI_DmaCopy32Async(gUnk02106814, src, dst, size, func, ptr); + } + else + { + MIi_CpuCopy32(src, dst, size); + } +} + +void GX_BeginLoadTex(){ + u32 temp = GX_ResetBankForTex(); + gUnk021D3410 = temp; + gUnk021D3400 = gUnk02103B4C[temp * 3] << 0xC; + gUnk021D3414 = gUnk02103B4E[temp * 3] << 0xC; + gUnk021D3418 = gUnk02103B50[temp * 3] << 0xC; +} + +void GX_LoadTex(void *src, u32 offset, u32 size){ + void *temp; + if (!gUnk021D3414) + { + temp = (void *)(gUnk021D3400 + offset); + } + else + { + if ((offset + size) < gUnk021D3418) + { + temp = (void *)(gUnk021D3400 + offset); + } + else if (offset >= gUnk021D3418) + { + temp = (void *)(gUnk021D3414 + offset - gUnk021D3418); + } + else + { + void *temp2 = (void *)gUnk021D3414; + u32 temp1 = gUnk021D3418 - offset; + temp = (void *)(gUnk021D3400 + offset); + _GX_Load_32(src, temp, temp1); + _GX_Load_32_Async((void *)((u8 *)src + temp1), temp2, (size - temp1), NULL, NULL); + return; + } + } + _GX_Load_32_Async(src, temp, size, NULL, NULL); +} + +void GX_EndLoadTex(){ + if (gUnk02106814 != -1) + MI_WaitDma(gUnk02106814); + GX_SetBankForTex(gUnk021D3410); + gUnk021D3418 = 0x0; + gUnk021D3414 = 0x0; + gUnk021D3400 = 0x0; + gUnk021D3410 = 0x0; +} + +void GX_BeginLoadTexPltt(){ + s32 temp = GX_ResetBankForTexPltt(); + gUnk021D3408 = temp; + gUnk021D3404 = gUnk02103B3C[temp >> 4] << 0xC; +} + +void GX_LoadTexPltt(void *src, u32 offset, u32 size){ + _GX_Load_32_Async(src, (void *)(gUnk021D3404 + offset), size, NULL, NULL); +} + +void GX_EndLoadTexPltt(){ + if (gUnk02106814 != -1) + MI_WaitDma(gUnk02106814); + GX_SetBankForTexPltt(gUnk021D3408); + gUnk021D3408 = 0x0; + gUnk021D3404 = 0x0; +} + +void GX_BeginLoadClearImage(){ + s32 temp = GX_ResetBankForClearImage(); + gUnk021D33FC = temp; + switch (temp) + { + case 2: + case 3: + gUnk021D340C = 0x6800000; + return; + case 8: + case 12: + gUnk021D340C = 0x6840000; + return; + case 1: + gUnk021D340C = 0x67E0000; + return; + case 4: + gUnk021D340C = 0x6820000; + } +} + +void GX_LoadClearImageColor(void *src, u32 size){ + _GX_Load_32_Async(src, (void *)(gUnk021D340C), size, NULL, NULL); +} + +void GX_LoadClearImageDepth(void *src, u32 size){ + _GX_Load_32_Async(src, (void *)(gUnk021D340C + 0x20000), size, NULL, NULL); +} + +void GX_EndLoadClearImage(){ + if (gUnk02106814 != -1) + MI_WaitDma(gUnk02106814); + GX_SetBankForClearImage(gUnk021D33FC); + gUnk021D33FC = 0x0; + gUnk021D340C = 0x0; +} diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt index 72bd6f94..1705fd25 100644 --- a/arm9/undefined_syms.txt +++ b/arm9/undefined_syms.txt @@ -30,6 +30,20 @@ gUnk021D33EC = 0x021D33EC; gUnk021D33F0 = 0x021D33F0; gUnk021D33F4 = 0x021D33F4; gUnk021D33F8 = 0x021D33F8; +gUnk021D33FC = 0x021D33FC; +gUnk021D3400 = 0x021D3400; +gUnk021D3404 = 0x021D3404; +gUnk021D3408 = 0x021D3408; +gUnk021D340C = 0x021D340C; +gUnk021D3410 = 0x021D3410; +gUnk021D3414 = 0x021D3414; +gUnk021D3418 = 0x021D3418; + +gUnk02103B3C = 0x02103B3C; + +gUnk02103B4C = 0x02103B4C; +gUnk02103B4E = 0x02103B4E; +gUnk02103B50 = 0x02103B50; // Overlay FUN_021D76AC = 0x021D76AC; -- cgit v1.2.3 From 42adea6c97323f7e5738dc05c062af0d6fddd66d Mon Sep 17 00:00:00 2001 From: Made Date: Fri, 15 May 2020 02:40:41 +0200 Subject: Decompile GX.s --- arm9/asm/GX.s | 245 ------------------------------------------------ arm9/lib/include/gx.h | 24 ++++- arm9/lib/src/GX.c | 127 +++++++++++++++++++++++++ arm9/undefined_syms.txt | 2 + 4 files changed, 152 insertions(+), 246 deletions(-) delete mode 100644 arm9/asm/GX.s create mode 100644 arm9/lib/src/GX.c diff --git a/arm9/asm/GX.s b/arm9/asm/GX.s deleted file mode 100644 index 1e6bdc88..00000000 --- a/arm9/asm/GX.s +++ /dev/null @@ -1,245 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start GXx_SetMasterBrightness_ -GXx_SetMasterBrightness_: ; 0x020C5978 - cmp r1, #0x0 - moveq r1, #0x0 - streqh r1, [r0, #0x0] - bxeq lr - cmp r1, #0x0 - orrgt r1, r1, #0x4000 - strgth r1, [r0, #0x0] - rsble r1, r1, #0x0 - orrle r1, r1, #0x8000 - strleh r1, [r0, #0x0] - bx lr - - arm_func_start GXS_SetGraphicsMode -GXS_SetGraphicsMode: ; 0x020C59A4 - ldr r2, _020C59BC ; =0x04001000 - ldr r1, [r2, #0x0] - bic r1, r1, #0x7 - orr r0, r1, r0 - str r0, [r2, #0x0] - bx lr - .balign 4 -_020C59BC: .word 0x04001000 - - arm_func_start GX_SetGraphicsMode -GX_SetGraphicsMode: ; 0x020C59C0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r3, _020C5A28 ; =0x02106810 - mov lr, #0x4000000 - ldrh r12, [r3, #0x0] - ldr lr, [lr, #0x0] - ldr r3, _020C5A2C ; =0x021D33C0 - cmp r12, #0x0 - strh r0, [r3, #0x0] - ldr r3, _020C5A30 ; =0xFFF0FFF0 - moveq r0, #0x0 - and r3, lr, r3 - orr r0, r3, r0, lsl #0x10 - orr r0, r1, r0 - orr r1, r0, r2, lsl #0x3 - mov r12, #0x4000000 - ldr r0, _020C5A2C ; =0x021D33C0 - str r1, [r12, #0x0] - ldrh r0, [r0, #0x0] - cmp r0, #0x0 - ldreq r0, _020C5A28 ; =0x02106810 - moveq r1, #0x0 - streqh r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C5A28: .word 0x02106810 -_020C5A2C: .word 0x021D33C0 -_020C5A30: .word 0xFFF0FFF0 - - arm_func_start GX_DispOn -GX_DispOn: ; 0x020C5A34 - ldr r0, _020C5A78 ; =0x021D33C0 - ldr r1, _020C5A7C ; =0x02106810 - ldrh r2, [r0, #0x0] - mov r0, #0x1 - strh r0, [r1, #0x0] - cmp r2, #0x0 - moveq r1, #0x4000000 - ldreq r0, [r1, #0x0] - orreq r0, r0, #0x10000 - streq r0, [r1, #0x0] - bxeq lr - mov r1, #0x4000000 - ldr r0, [r1, #0x0] - bic r0, r0, #0x30000 - orr r0, r0, r2, lsl #0x10 - str r0, [r1, #0x0] - bx lr - .balign 4 -_020C5A78: .word 0x021D33C0 -_020C5A7C: .word 0x02106810 - - arm_func_start GX_DispOff -GX_DispOff: ; 0x020C5A80 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, #0x4000000 - ldr r12, [lr, #0x0] - ldr r1, _020C5AC0 ; =0x02106810 - and r2, r12, #0x30000 - mov r3, #0x0 - ldr r0, _020C5AC4 ; =0x021D33C0 - mov r2, r2, lsr #0x10 - strh r3, [r1, #0x0] - strh r2, [r0, #0x0] - bic r0, r12, #0x30000 - str r0, [lr, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C5AC0: .word 0x02106810 -_020C5AC4: .word 0x021D33C0 - - arm_func_start GX_VBlankIntr -GX_VBlankIntr: ; 0x020C5AC8 - ldr r2, _020C5AF4 ; =0x04000004 - cmp r0, #0x0 - ldrh r0, [r2, #0x0] - ldrneh r1, [r2, #0x0] - and r0, r0, #0x8 - orrne r1, r1, #0x8 - strneh r1, [r2, #0x0] - ldreqh r1, [r2, #0x0] - biceq r1, r1, #0x8 - streqh r1, [r2, #0x0] - bx lr - .balign 4 -_020C5AF4: .word 0x04000004 - - arm_func_start GX_HBlankIntr -GX_HBlankIntr: ; 0x020C5AF8 - ldr r2, _020C5B24 ; =0x04000004 - cmp r0, #0x0 - ldrh r0, [r2, #0x0] - ldrneh r1, [r2, #0x0] - and r0, r0, #0x10 - orrne r1, r1, #0x10 - strneh r1, [r2, #0x0] - ldreqh r1, [r2, #0x0] - biceq r1, r1, #0x10 - streqh r1, [r2, #0x0] - bx lr - .balign 4 -_020C5B24: .word 0x04000004 - - arm_func_start GX_Init -GX_Init: ; 0x020C5B28 - stmdb sp!, {r4-r6,lr} - ldr r3, _020C5C68 ; =0x04000304 - ldr r0, _020C5C6C ; =0xFFFFFDF1 - ldrh r2, [r3, #0x0] - ldr r1, _020C5C70 ; =0x0000020E - orr r2, r2, #0x8000 - strh r2, [r3, #0x0] - ldrh r2, [r3, #0x0] - and r0, r2, r0 - orr r0, r0, r1 - strh r0, [r3, #0x0] - ldrh r0, [r3, #0x0] - orr r0, r0, #0x1 - strh r0, [r3, #0x0] - bl GX_InitGXState - ldr r5, _020C5C74 ; =0x021D33BC - ldrh r0, [r5, #0x0] - cmp r0, #0x0 - bne _020C5B9C - mvn r4, #0x2 -_020C5B78: - bl OS_GetLockID - mov r6, r0 - cmp r6, r4 - bne _020C5B8C - bl OS_Terminate -_020C5B8C: - strh r6, [r5, #0x0] - ldrh r0, [r5, #0x0] - cmp r0, #0x0 - beq _020C5B78 -_020C5B9C: - ldr r0, _020C5C78 ; =0x04000004 - mov r2, #0x0 - strh r2, [r0, #0x0] - mov r1, #0x4000000 - ldr r0, _020C5C7C ; =0x02106814 - str r2, [r1, #0x0] - ldr r0, [r0, #0x0] - mvn r1, #0x0 - cmp r0, r1 - beq _020C5BF4 - ldr r1, _020C5C80 ; =0x04000008 - mov r3, #0x60 - bl MI_DmaFill32 - ldr r1, _020C5C84 ; =0x0400006C - mov r2, #0x0 - ldr r0, _020C5C7C ; =0x02106814 - strh r2, [r1, #0x0] - ldr r0, [r0, #0x0] - ldr r1, _020C5C88 ; =0x04001000 - mov r3, #0x70 - bl MI_DmaFill32 - b _020C5C1C -_020C5BF4: - ldr r1, _020C5C80 ; =0x04000008 - mov r0, r2 - mov r2, #0x60 - bl MIi_CpuClear32 - ldr r3, _020C5C84 ; =0x0400006C - mov r0, #0x0 - ldr r1, _020C5C88 ; =0x04001000 - mov r2, #0x70 - strh r0, [r3, #0x0] - bl MIi_CpuClear32 -_020C5C1C: - ldr r1, _020C5C8C ; =0x04000020 - mov r2, #0x100 - ldr r0, _020C5C90 ; =0x04000026 - strh r2, [r1, #0x0] - ldr r1, _020C5C94 ; =0x04000030 - strh r2, [r0, #0x0] - ldr r0, _020C5C98 ; =0x04000036 - strh r2, [r1, #0x0] - ldr r1, _020C5C9C ; =0x04001020 - strh r2, [r0, #0x0] - ldr r0, _020C5CA0 ; =0x04001026 - strh r2, [r1, #0x0] - ldr r1, _020C5CA4 ; =0x04001030 - strh r2, [r0, #0x0] - ldr r0, _020C5CA8 ; =0x04001036 - strh r2, [r1, #0x0] - strh r2, [r0, #0x0] - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020C5C68: .word 0x04000304 -_020C5C6C: .word 0xFFFFFDF1 -_020C5C70: .word 0x0000020E -_020C5C74: .word 0x021D33BC -_020C5C78: .word 0x04000004 -_020C5C7C: .word 0x02106814 -_020C5C80: .word 0x04000008 -_020C5C84: .word 0x0400006C -_020C5C88: .word 0x04001000 -_020C5C8C: .word 0x04000020 -_020C5C90: .word 0x04000026 -_020C5C94: .word 0x04000030 -_020C5C98: .word 0x04000036 -_020C5C9C: .word 0x04001020 -_020C5CA0: .word 0x04001026 -_020C5CA4: .word 0x04001030 -_020C5CA8: .word 0x04001036 diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index edb6f122..f3016f44 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -21,6 +21,8 @@ #define HW_REG_TEXIMAGE_PARAM 0x040004A8 #define HW_REG_PLTT_BASE 0x040004AC +#define HW_REG_POWCNT1 0x04000304 + #define HW_REG_GXFIFO 0x04000400 #define HW_REG_MTX_IDENTITY 0x04000454 #define HW_REG_MTX_POP 0x04000448 @@ -34,6 +36,7 @@ #define HW_REG_SHININESS 0x040004D0 +#define HW_REG_MASTER_BRIGHT 0x0400006C #define HW_REG_VRAMCNT_A 0x04000240 #define HW_REG_VRAMCNT_B 0x04000241 @@ -47,10 +50,20 @@ #define HW_REG_VRAMCNT_I 0x04000249 #define HW_REG_DISPCNT 0x04000000 +#define HW_REG_DISPSTAT 0x04000004 #define HW_REG_DISPCNT_2D 0x04001000 #define HW_REG_DISP3DCNT 0x04000060 +#define HW_REG_BG2PA_A 0x04000020 +#define HW_REG_BG2PD_A 0x04000026 +#define HW_REG_BG3PA_A 0x04000030 +#define HW_REG_BG3PD_A 0x04000036 +#define HW_REG_BG2PA_B 0x04001020 +#define HW_REG_BG2PD_B 0x04001026 +#define HW_REG_BG3PA_B 0x04001030 +#define HW_REG_BG3PD_B 0x04001036 + #define HW_REG_BG0CNT_A 0x04000008 #define HW_REG_BG1CNT_A 0x0400000A #define HW_REG_BG2CNT_A 0x0400000C @@ -136,7 +149,6 @@ u32 G3X_GetMtxStackLevelPJ(u32 *level); u32 G3X_GetBoxTestResult(u32 *result); void G3X_SetHOffset(u32 offset); - //GX_g3b void G3BS_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx); void G3B_PushMtx(struct DL *displaylist); @@ -278,6 +290,16 @@ void GX_LoadClearImageColor(void *src, u32 size); void GX_LoadClearImageDepth(void *src, u32 size); void GX_EndLoadClearImage(); +//GX +void GX_Init(); +u32 GX_HBlankIntr(u32 enable); +u32 GX_VBlankIntr(u32 enable); +void GX_DispOff(); +void GX_DispOn(); +void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3); +void GXS_SetGraphicsMode(u32 mode); +void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness); + //GXi_NopClearFifo128_ probably asm #endif //GUARD_GX_H diff --git a/arm9/lib/src/GX.c b/arm9/lib/src/GX.c new file mode 100644 index 00000000..6d979139 --- /dev/null +++ b/arm9/lib/src/GX.c @@ -0,0 +1,127 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +extern u16 gUnk021D33BC; +extern u16 gUnk021D33C0; +extern u32 gUnk02106814; +extern u16 gUnk02106810; + +void GX_InitGXState(); + +void MI_DmaFill32(u32, void *, u32, u32); +void MIi_CpuClear32(u32, void *, u32); + +void GX_Init(){ + SETREG16(HW_REG_POWCNT1, READREG16(HW_REG_POWCNT1) | 0x8000); + SETREG16(HW_REG_POWCNT1, (READREG16(HW_REG_POWCNT1) & ~0x20E) | 0x20E); + SETREG16(HW_REG_POWCNT1, READREG16(HW_REG_POWCNT1) | 0x1); + GX_InitGXState(); + u32 temp; + while (gUnk021D33BC == 0) + { + temp = OS_GetLockID(); + if (temp == -3) + { + OS_Terminate(); + } + gUnk021D33BC = temp; + } + SETREG16(HW_REG_DISPSTAT, 0x0); + SETREG32(HW_REG_DISPCNT, 0x0); + if (gUnk02106814 != -1) + { + MI_DmaFill32(gUnk02106814, (void *)HW_REG_BG0CNT_A, 0x0, 0x60); + SETREG16(HW_REG_MASTER_BRIGHT, 0x0); + MI_DmaFill32(gUnk02106814, (void *)HW_REG_DISPCNT_2D, 0x0, 0x70); + } + else + { + MIi_CpuClear32(0x0, (void *)HW_REG_BG0CNT_A, 0x60); + SETREG16(HW_REG_MASTER_BRIGHT, 0x0); + MIi_CpuClear32(0x0, (void *)HW_REG_DISPCNT_2D, 0x70); + } + SETREG16(HW_REG_BG2PA_A, 0x100); + SETREG16(HW_REG_BG2PD_A, 0x100); + SETREG16(HW_REG_BG3PA_A, 0x100); + SETREG16(HW_REG_BG3PD_A, 0x100); + SETREG16(HW_REG_BG2PA_B, 0x100); + SETREG16(HW_REG_BG2PD_B, 0x100); + SETREG16(HW_REG_BG3PA_B, 0x100); + SETREG16(HW_REG_BG3PD_B, 0x100); +} + +u32 GX_HBlankIntr(u32 enable){ + u32 temp = READREG16(HW_REG_DISPSTAT) & 0x10; + if (enable) + { + SETREG16(HW_REG_DISPSTAT, READREG16(HW_REG_DISPSTAT) | 0x10); + } + else + { + SETREG16(HW_REG_DISPSTAT, READREG16(HW_REG_DISPSTAT) & ~0x10); + } + return temp; +} + +u32 GX_VBlankIntr(u32 enable){ + u32 temp = READREG16(HW_REG_DISPSTAT) & 0x8; + if (enable) + { + SETREG16(HW_REG_DISPSTAT, READREG16(HW_REG_DISPSTAT) | 0x8); + } + else + { + SETREG16(HW_REG_DISPSTAT, READREG16(HW_REG_DISPSTAT) & ~0x8); + } + return temp; +} + +void GX_DispOff(){ + u32 temp = READREG32(HW_REG_DISPCNT); + gUnk02106810 = 0x0; + gUnk021D33C0 = (temp & 0x30000) >> 0x10; + SETREG32(HW_REG_DISPCNT, temp & ~0x30000); +} + +void GX_DispOn(){ + gUnk02106810 = 0x1; + if (gUnk021D33C0) + { + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x30000 | (gUnk021D33C0 << 0x10)); + + } + else + { + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x10000); + } +} + +void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3){ + u32 temp2 = READREG32(HW_REG_DISPCNT); + gUnk021D33C0 = mode1; + if (!gUnk02106810) + mode1 = 0; + SETREG32(HW_REG_DISPCNT, (mode2 | ((temp2 & 0xFFF0FFF0) | (mode1 << 0x10))) | (mode3 << 0x3)); + if (!gUnk021D33C0) + gUnk02106810 = 0x0; +} + +void GXS_SetGraphicsMode(u32 mode){ + SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x7 | mode); +} + +void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness){ + if (!brightness) + { + *dst = 0x0; + } + else if (brightness > 0) + { + *dst = 0x4000 | brightness; + } + else + { + *dst = 0x8000 | -brightness; + } +} diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt index 1705fd25..6735579a 100644 --- a/arm9/undefined_syms.txt +++ b/arm9/undefined_syms.txt @@ -7,6 +7,7 @@ SDK_IRQ_STACKSIZE = 0x00000400; // FX FX_AtanTable_ = 0x02103A38; // OS +gUnk02106810 = 0x02106810; gUnk02106814 = 0x02106814; OSi_IrqCallbackInfoIndex = 0x02106818; OSi_ConsoleTypeCache = 0x02106828; @@ -21,6 +22,7 @@ SDK_OVERLAY_DIGEST = 0x02106F84; SDK_OVERLAY_DIGEST_END = 0x02106F84; //GX gUnk021D33BC = 0x021D33BC; +gUnk021D33C0 = 0x021D33C0; gUnk021D33C4 = 0x021D33C4; gUnk021D33E0 = 0x021D33E0; -- cgit v1.2.3 From 14a5ca7ae49912305b1bcbaa180cfc9fdf8ff17a Mon Sep 17 00:00:00 2001 From: Made Date: Fri, 15 May 2020 03:29:32 +0200 Subject: Decompile GX_g2.s --- arm9/asm/GX_g2.s | 121 -------------------------------------------------- arm9/lib/include/gx.h | 7 +++ arm9/lib/src/GX_g2.c | 66 +++++++++++++++++++++++++++ 3 files changed, 73 insertions(+), 121 deletions(-) delete mode 100644 arm9/asm/GX_g2.s create mode 100644 arm9/lib/src/GX_g2.c diff --git a/arm9/asm/GX_g2.s b/arm9/asm/GX_g2.s deleted file mode 100644 index 7ed2f124..00000000 --- a/arm9/asm/GX_g2.s +++ /dev/null @@ -1,121 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start G2x_ChangeBlendBrightness_ -G2x_ChangeBlendBrightness_: ; 0x020C7418 - cmp r1, #0x0 - ldrh r3, [r0, #0x0] - bge _020C7444 - and r2, r3, #0xc0 - cmp r2, #0x80 - biceq r2, r3, #0xc0 - orreq r2, r2, #0xc0 - streqh r2, [r0, #0x0] - rsb r1, r1, #0x0 - strh r1, [r0, #0x4] - bx lr -_020C7444: - and r2, r3, #0xc0 - cmp r2, #0xc0 - biceq r2, r3, #0xc0 - orreq r2, r2, #0x80 - streqh r2, [r0, #0x0] - strh r1, [r0, #0x4] - bx lr - - arm_func_start G2x_SetBlendBrightnessExt_ -G2x_SetBlendBrightnessExt_: ; 0x020C7460 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr lr, [sp, #0x8] - ldr r12, [sp, #0xc] - orr r3, r3, lr, lsl #0x8 - cmp r12, #0x0 - orrge r1, r1, #0x80 - strh r3, [r0, #0x2] - orrge r1, r1, r2, lsl #0x8 - strgeh r1, [r0, #0x0] - strgeh r12, [r0, #0x4] - addge sp, sp, #0x4 - ldmgeia sp!, {lr} - bxge lr - orr r1, r1, #0xc0 - orr r1, r1, r2, lsl #0x8 - strh r1, [r0, #0x0] - rsb r1, r12, #0x0 - strh r1, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start G2x_SetBlendBrightness_ -G2x_SetBlendBrightness_: ; 0x020C74B8 - cmp r2, #0x0 - orrlt r1, r1, #0xc0 - strlth r1, [r0, #0x0] - rsblt r1, r2, #0x0 - strlth r1, [r0, #0x4] - orrge r1, r1, #0x80 - strgeh r1, [r0, #0x0] - strgeh r2, [r0, #0x4] - bx lr - - arm_func_start G2x_SetBlendAlpha_ -G2x_SetBlendAlpha_: ; 0x020C74DC - ldr r12, [sp, #0x0] - orr r1, r1, #0x40 - orr r2, r1, r2, lsl #0x8 - orr r1, r3, r12, lsl #0x8 - orr r1, r2, r1, lsl #0x10 - str r1, [r0, #0x0] - bx lr - - arm_func_start G2x_SetBGyAffine_ -G2x_SetBGyAffine_: ; 0x020C74F8 - stmdb sp!, {r4-r6,lr} - ldr r5, [r1, #0x0] - ldr r4, [r1, #0x4] - mov r12, r5, lsl #0xc - mov lr, r4, lsl #0xc - mov r5, r12, asr #0x10 - mov r4, lr, asr #0x10 - mov r12, r5, lsl #0x10 - mov lr, r4, lsl #0x10 - mov r5, r12, lsr #0x10 - mov r4, lr, lsr #0x10 - orr r4, r5, r4, lsl #0x10 - str r4, [r0, #0x0] - ldr r5, [r1, #0x8] - ldr r4, [r1, #0xc] - mov r12, r5, lsl #0xc - mov lr, r4, lsl #0xc - mov r5, r12, asr #0x10 - mov r4, lr, asr #0x10 - mov r12, r5, lsl #0x10 - mov lr, r4, lsl #0x10 - ldr r4, [sp, #0x14] - ldr r6, [sp, #0x10] - mov r12, r12, lsr #0x10 - mov r5, lr, lsr #0x10 - orr r5, r12, r5, lsl #0x10 - str r5, [r0, #0x4] - ldr r12, [r1, #0x4] - sub r5, r4, r3 - ldr r4, [r1, #0xc] - mul lr, r12, r5 - mul r5, r4, r5 - ldr r12, [r1, #0x0] - sub r6, r6, r2 - ldr r4, [r1, #0x8] - mla r1, r12, r6, lr - mla r5, r4, r6, r5 - add r1, r1, r2, lsl #0xc - add r2, r5, r3, lsl #0xc - mov r1, r1, asr #0x4 - str r1, [r0, #0x8] - mov r1, r2, asr #0x4 - str r1, [r0, #0xc] - ldmia sp!, {r4-r6,lr} - bx lr diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index f3016f44..a17132ed 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -300,6 +300,13 @@ void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3); void GXS_SetGraphicsMode(u32 mode); void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness); +//GX_g2 +void G2x_SetBGyAffine_(u32 *ptr, struct Mtx22 *mtx, fx32 a, fx32 b, fx32 c, fx32 d); +void G2x_SetBlendAlpha_(u32 *ptr, fx32 a, fx32 b, fx32 c, fx32 d); +void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness); +void G2x_SetBlendBrightnessExt_(u16 *ptr, fx32 a, fx32 b, fx32 c, fx32 d, fx32 brightness); +void *G2x_ChangeBlendBrightness_(u16 *ptr, fx32 brightness); + //GXi_NopClearFifo128_ probably asm #endif //GUARD_GX_H diff --git a/arm9/lib/src/GX_g2.c b/arm9/lib/src/GX_g2.c new file mode 100644 index 00000000..7441e302 --- /dev/null +++ b/arm9/lib/src/GX_g2.c @@ -0,0 +1,66 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +void G2x_SetBGyAffine_(u32 *ptr, struct Mtx22 *mtx, fx32 a, fx32 b, fx32 c, fx32 d){ + fx32 temp0, temp1, temp2, temp3; + ptr[0] = ((u16)(fx16)(mtx->_[0] >> 4) | (u16)(fx16)(mtx->_[1] >> 4)<< 0x10); + ptr[1] = ((u16)(fx16)(mtx->_[2] >> 4) | (u16)(fx16)(mtx->_[3] >> 4)<< 0x10); + temp0 = c - a; + temp1 = d - b; + temp2 = mtx->_[0] * temp0 + mtx->_[1] * temp1 + (a << 0xC); + temp3 = mtx->_[2] * temp0 + mtx->_[3] * temp1 + (b << 0xC); + ptr[2] = temp2 >> 4; + ptr[3] = temp3 >> 4; +} + +void G2x_SetBlendAlpha_(u32 *ptr, fx32 a, fx32 b, fx32 c, fx32 d){ + *ptr = ((a | 0x40) | (b << 0x8)) | ((c | (d << 0x8)) << 0x10); +} + +void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness){ + if (brightness < 0) + { + ptr[0] = a | 0xC0; + ptr[2] = -brightness; + } + else + { + ptr[0] = a | 0x80; + ptr[2] = brightness; + } +} + +void G2x_SetBlendBrightnessExt_(u16 *ptr, fx32 a, fx32 b, fx32 c, fx32 d, fx32 brightness){ + ptr[1] = c | (d << 0x8); + if (brightness < 0) + { + ptr[0] = 0xC0 | a | (b << 0x8); + ptr[2] = -brightness; + } + else + { + ptr[0] = 0x80 | a | (b << 0x8); + ptr[2] = brightness; + } +} + +void *G2x_ChangeBlendBrightness_(u16 *ptr, fx32 brightness){ + u32 temp = *ptr; + if (brightness < 0) + { + if ((temp & 0xC0) == 0x80) + { + ptr[0] = temp & ~0xC0 | 0xC0; + } + ptr[2] = -brightness; + } + else + { + if ((temp & 0xC0) == 0xC0) + { + ptr[0] = temp & ~0xC0 | 0x80; + } + ptr[2] = brightness; + } +} -- cgit v1.2.3 From 7e9089849989d5e930eb5b5f7cecfd8d2c6c379c Mon Sep 17 00:00:00 2001 From: Made Date: Fri, 15 May 2020 03:47:36 +0200 Subject: Decompile GX_g3imm.s and GX_state.s --- arm9/asm/GX_g3imm.s | 37 ------------------------------------- arm9/asm/GX_state.s | 40 ---------------------------------------- arm9/lib/include/gx.h | 8 +++++++- arm9/lib/src/GX_g3imm.c | 18 ++++++++++++++++++ arm9/lib/src/GX_state.c | 26 ++++++++++++++++++++++++++ 5 files changed, 51 insertions(+), 78 deletions(-) delete mode 100644 arm9/asm/GX_g3imm.s delete mode 100644 arm9/asm/GX_state.s create mode 100644 arm9/lib/src/GX_g3imm.c create mode 100644 arm9/lib/src/GX_state.c diff --git a/arm9/asm/GX_g3imm.s b/arm9/asm/GX_g3imm.s deleted file mode 100644 index 34ba9328..00000000 --- a/arm9/asm/GX_g3imm.s +++ /dev/null @@ -1,37 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start G3_MultMtx33 -G3_MultMtx33: ; 0x020C791C - ldr r1, _020C7930 ; =0x04000400 - mov r2, #0x1a - ldr ip, _020C7934 ; =MI_Copy36B - str r2, [r1, #0x0] - bx r12 - .balign 4 -_020C7930: .word 0x04000400 -_020C7934: .word MI_Copy36B - - arm_func_start G3_MultMtx43 -G3_MultMtx43: - ldr r1, _020C794C ; =0x04000400 - mov r2, #0x19 - ldr ip, _020C7950 ; =GX_SendFifo48B - str r2, [r1, #0x0] - bx r12 - .balign 4 -_020C794C: .word 0x04000400 -_020C7950: .word GX_SendFifo48B - - arm_func_start G3_LoadMtx43 -G3_LoadMtx43: ; 0x020C7954 - ldr r1, _020C7968 ; =0x04000400 - mov r2, #0x17 - ldr ip, _020C796C ; =GX_SendFifo48B - str r2, [r1, #0x0] - bx r12 - .balign 4 -_020C7968: .word 0x04000400 -_020C796C: .word GX_SendFifo48B diff --git a/arm9/asm/GX_state.s b/arm9/asm/GX_state.s deleted file mode 100644 index 42089a09..00000000 --- a/arm9/asm/GX_state.s +++ /dev/null @@ -1,40 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start GX_InitGXState -GX_InitGXState: ; 0x020C5CAC - ldr r0, _020C5D14 ; =0x021D33C4 - mov r3, #0x0 - ldr r2, _020C5D18 ; =0x04000240 - strh r3, [r0, #0x0] - strh r3, [r0, #0x2] - strh r3, [r0, #0x4] - strh r3, [r0, #0x6] - strh r3, [r0, #0x8] - strh r3, [r0, #0xa] - strh r3, [r0, #0xc] - strh r3, [r0, #0xe] - strh r3, [r0, #0x10] - strh r3, [r0, #0x12] - strh r3, [r0, #0x14] - strh r3, [r0, #0x16] - strh r3, [r0, #0x18] - ldr r1, _020C5D1C ; =0x04000244 - str r3, [r2, #0x0] - ldr r0, _020C5D20 ; =0x04000245 - strb r3, [r1, #0x0] - ldr r1, _020C5D24 ; =0x04000246 - strb r3, [r0, #0x0] - ldr r0, _020C5D28 ; =0x04000248 - strb r3, [r1, #0x0] - strh r3, [r0, #0x0] - bx lr - .balign 4 -_020C5D14: .word 0x021D33C4 -_020C5D18: .word 0x04000240 -_020C5D1C: .word 0x04000244 -_020C5D20: .word 0x04000245 -_020C5D24: .word 0x04000246 -_020C5D28: .word 0x04000248 diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index a17132ed..c542f560 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -307,6 +307,12 @@ void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness); void G2x_SetBlendBrightnessExt_(u16 *ptr, fx32 a, fx32 b, fx32 c, fx32 d, fx32 brightness); void *G2x_ChangeBlendBrightness_(u16 *ptr, fx32 brightness); -//GXi_NopClearFifo128_ probably asm +//GX_state +void GX_InitGXState(); + +//GX_g3imm +void G3_LoadMtx43(struct Mtx43 *mtx); +void G3_MultMtx43(struct Mtx43 *mtx); +void G3_MultMtx33(struct Mtx33 *mtx); #endif //GUARD_GX_H diff --git a/arm9/lib/src/GX_g3imm.c b/arm9/lib/src/GX_g3imm.c new file mode 100644 index 00000000..f41b5cbf --- /dev/null +++ b/arm9/lib/src/GX_g3imm.c @@ -0,0 +1,18 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +void G3_LoadMtx43(struct Mtx43 *mtx){ + SETREG32(HW_REG_GXFIFO, 0x17); + GX_SendFifo48B(mtx, (void *)HW_REG_GXFIFO); +} + +void G3_MultMtx43(struct Mtx43 *mtx){ + SETREG32(HW_REG_GXFIFO, 0x19); + GX_SendFifo48B(mtx, (void *)HW_REG_GXFIFO); +} + +void G3_MultMtx33(struct Mtx33 *mtx){ + SETREG32(HW_REG_GXFIFO, 0x1A); + MI_Copy36B(mtx, (void *)HW_REG_GXFIFO); +} diff --git a/arm9/lib/src/GX_state.c b/arm9/lib/src/GX_state.c new file mode 100644 index 00000000..52d3c6f5 --- /dev/null +++ b/arm9/lib/src/GX_state.c @@ -0,0 +1,26 @@ +#include "global.h" +#include "main.h" +#include "gx.h" + +extern struct VRAM_banks gUnk021D33C4; + +void GX_InitGXState(){ + gUnk021D33C4.var00 = 0x0; + gUnk021D33C4.var02 = 0x0; + gUnk021D33C4.var04 = 0x0; + gUnk021D33C4.var06 = 0x0; + gUnk021D33C4.var08 = 0x0; + gUnk021D33C4.var0A = 0x0; + gUnk021D33C4.var0C = 0x0; + gUnk021D33C4.var0E = 0x0; + gUnk021D33C4.var10 = 0x0; + gUnk021D33C4.var12 = 0x0; + gUnk021D33C4.var14 = 0x0; + gUnk021D33C4.var16 = 0x0; + gUnk021D33C4.var18 = 0x0; + SETREG32(HW_REG_VRAMCNT_A, 0x0); + SETREG8(HW_REG_VRAMCNT_E, 0x0); + SETREG8(HW_REG_VRAMCNT_F, 0x0); + SETREG8(HW_REG_VRAMCNT_G, 0x0); + SETREG16(HW_REG_VRAMCNT_H, 0x0); +} -- cgit v1.2.3 From 08e4b4f6657bac9d361a9f6948ae6d2bfe50eebf Mon Sep 17 00:00:00 2001 From: Made Date: Fri, 15 May 2020 04:03:35 +0200 Subject: Cleanup --- arm9/lib/include/gx.h | 60 +++++++++++++++++++++++++++-- arm9/lib/src/GX.c | 5 --- arm9/lib/src/GX_g3_util.c | 6 --- arm9/lib/src/GX_g3b.c | 2 - arm9/lib/src/GX_g3x.c | 7 ---- arm9/lib/src/GX_load2d.c | 96 ++++++++++++++--------------------------------- arm9/lib/src/GX_load3d.c | 45 +++------------------- arm9/lib/src/GX_vramcnt.c | 2 - 8 files changed, 91 insertions(+), 132 deletions(-) diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index c542f560..c4be4deb 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -3,10 +3,35 @@ #include "fx.h" +//temporary while other files aren't decompiled +void MIi_CpuCopy16(void *, void *, u32); +void GXi_NopClearFifo128_(void *); +void MI_Copy16B(void *, void *); +void MI_DmaFill32Async(u32, void *, u32, u32, u32, u32); +void MI_DmaFill32(u32, void *, u32, u32); +void MIi_CpuClear32(u32, void *, u32); +void MI_Copy64B(void *src, void *dst); +void MI_WaitDma(u32); +void MI_DmaCopy32Async(u32, void *, void *, u32, void *, void *); +void MI_DmaCopy16(u32 unk, void *src, void *dst, u32 size); +void MIi_CpuCopy16(void *src, void *dst, u32 size); +void MI_DmaCopy32(u32 unk, void *src, void *dst, u32 size); +void MIi_CpuCopy32(void *src, void *dst, u32 size); +void OSi_UnlockVram(u16, u16); +void MIi_CpuClear32(u32, void *, u32); + //Todos before PR //TODO: Add defines for GX commands, add structs/unions for HW registers //TODO: Add ARM_FUNC attributes +#define HW_REG_DIV_NUMER 0x04000290 +#define HW_REG_DIV_DENOM 0x04000298 + +#define HW_REG_MTX_MODE 0x04000440 +#define HW_REG_MTX_LOAD_4x4 0x04000458 +#define HW_REG_MTX_LOAD_4x3 0x0400045C +#define HW_REG_MTX_MULT_3x3 0x04000468 + #define HW_REG_END_VTXS 0x04000504 #define HW_REG_GXSTAT 0x04000600 #define HW_REG_DISP3DCNT 0x04000060 @@ -88,9 +113,38 @@ #define READREG32(x) (*(vu32 *)x) #define READREG64(x) (*(vu64 *)x) -//TODO: add SDK signatures and symbols -//TODO: add arm function attributes - +static inline void _GX_Load_16(u32 var, void *src, void *dst, u32 size){ + if (var != -1 && size > 0x1C) + { + MI_DmaCopy16(var, src, dst, size); + } + else + { + MIi_CpuCopy16(src, dst, size); + } +} + +static inline void _GX_Load_32(u32 var, void *src, void *dst, u32 size){ + if (var != -1 && size > 0x30) + { + MI_DmaCopy32(var, src, dst, size); + } + else + { + MIi_CpuCopy32(src, dst, size); + } +} + +static inline void _GX_Load_32_Async(u32 var, void *src, void *dst, u32 size, void *func, void *ptr){ + if (var != -1) + { + MI_DmaCopy32Async(var, src, dst, size, func, ptr); + } + else + { + MIi_CpuCopy32(src, dst, size); + } +} struct DL { diff --git a/arm9/lib/src/GX.c b/arm9/lib/src/GX.c index 6d979139..9823e8ba 100644 --- a/arm9/lib/src/GX.c +++ b/arm9/lib/src/GX.c @@ -7,11 +7,6 @@ extern u16 gUnk021D33C0; extern u32 gUnk02106814; extern u16 gUnk02106810; -void GX_InitGXState(); - -void MI_DmaFill32(u32, void *, u32, u32); -void MIi_CpuClear32(u32, void *, u32); - void GX_Init(){ SETREG16(HW_REG_POWCNT1, READREG16(HW_REG_POWCNT1) | 0x8000); SETREG16(HW_REG_POWCNT1, (READREG16(HW_REG_POWCNT1) & ~0x20E) | 0x20E); diff --git a/arm9/lib/src/GX_g3_util.c b/arm9/lib/src/GX_g3_util.c index 049b9366..1cd956ad 100644 --- a/arm9/lib/src/GX_g3_util.c +++ b/arm9/lib/src/GX_g3_util.c @@ -2,13 +2,7 @@ #include "main.h" #include "gx.h" -#define HW_REG_DIV_NUMER 0x04000290 -#define HW_REG_DIV_DENOM 0x04000298 -#define HW_REG_MTX_MODE 0x04000440 -#define HW_REG_MTX_LOAD_4x4 0x04000458 -#define HW_REG_MTX_LOAD_4x3 0x0400045C -#define HW_REG_MTX_MULT_3x3 0x04000468 void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx){ fx32 fovcot, temp1, temp2; diff --git a/arm9/lib/src/GX_g3b.c b/arm9/lib/src/GX_g3b.c index 1e25adb5..0efe8518 100644 --- a/arm9/lib/src/GX_g3b.c +++ b/arm9/lib/src/GX_g3b.c @@ -3,8 +3,6 @@ #include "gx.h" -void MI_Copy64B(void *src, void *dst); - void G3BS_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx){ *(u32 *)displaylist->var00 = 0x16; MI_Copy64B(mtx, displaylist->var04); diff --git a/arm9/lib/src/GX_g3x.c b/arm9/lib/src/GX_g3x.c index f9c2adb7..70c4f3fe 100644 --- a/arm9/lib/src/GX_g3x.c +++ b/arm9/lib/src/GX_g3x.c @@ -3,13 +3,6 @@ #include "gx.h" extern u32 gUnk02106814; -void MI_Copy64B(void *, void *); -void MIi_CpuCopy16(void *, void *, u32); -void GXi_NopClearFifo128_(void *); -void MI_Copy16B(void *, void *); -void MI_DmaFill32Async(u32, void *, u32, u32, u32, u32); -void MI_DmaFill32(u32, void *, u32, u32); -void MIi_CpuClear32(u32, void *, u32); asm void GXi_NopClearFifo128_(void *reg){ mov r1, #0x0 diff --git a/arm9/lib/src/GX_load2d.c b/arm9/lib/src/GX_load2d.c index b0af0e8c..9ebf24cc 100644 --- a/arm9/lib/src/GX_load2d.c +++ b/arm9/lib/src/GX_load2d.c @@ -12,46 +12,6 @@ extern s32 gUnk021D33E8; extern u32 gUnk021D33E4; extern s32 gUnk021D33E0; -void MI_WaitDma(u32); -void MI_DmaCopy32Async(u32, void *, void *, u32, void *, void *); -void MI_DmaCopy16(u32 unk, void *src, void *dst, u32 size); -void MIi_CpuCopy16(void *src, void *dst, u32 size); -void MI_DmaCopy32(u32 unk, void *src, void *dst, u32 size); -void MIi_CpuCopy32(void *src, void *dst, u32 size); - - -static inline void _GX_Load_16(void *src, u32 offset, u32 size, u32 base){ - if (gUnk02106814 != -1 && size > 0x1C) - { - MI_DmaCopy16(gUnk02106814, src, (void *)(base + offset), size); - } - else - { - MIi_CpuCopy16(src, (void *)(base + offset), size); - } -} - -static inline void _GX_Load_32(void *src, u32 offset, u32 size, u32 base){ - if (gUnk02106814 != -1 && size > 0x30) - { - MI_DmaCopy32(gUnk02106814, src, (void *)(base + offset), size); - } - else - { - MIi_CpuCopy32(src, (void *)(base + offset), size); - } -} - -static inline void _GX_Load_32_Async(void *src, void *dst, u32 size, void *func, void *ptr){ - if (gUnk02106814 != -1) - { - MI_DmaCopy32Async(gUnk02106814, src, dst, size, func, ptr); - } - else - { - MIi_CpuCopy32(src, dst, size); - } -} static inline void *_GX_OBJ_PTR(){ return (void *)0x6400000; @@ -61,117 +21,117 @@ static inline void *_GXS_OBJ_PTR(){ } void GX_LoadBGPltt(void *src, u32 offset, u32 size){ - _GX_Load_16(src, offset, size, 0x5000000); + _GX_Load_16(gUnk02106814, src, (void *)(0x5000000 + offset), size); } void GXS_LoadBGPltt(void *src, u32 offset, u32 size){ - _GX_Load_16(src, offset, size, 0x5000400); + _GX_Load_16(gUnk02106814, src, (void *)(0x5000400 + offset), size); } void GX_LoadOBJPltt(void *src, u32 offset, u32 size){ - _GX_Load_16(src, offset, size, 0x5000200); + _GX_Load_16(gUnk02106814, src, (void *)(0x5000200 + offset), size); } void GXS_LoadOBJPltt(void *src, u32 offset, u32 size){ - _GX_Load_16(src, offset, size, 0x5000600); + _GX_Load_16(gUnk02106814, src, (void *)(0x5000600 + offset), size); } void GX_LoadOAM(void *src, u32 offset, u32 size){ - _GX_Load_32(src, offset, size, 0x7000000); + _GX_Load_32(gUnk02106814, src, (void *)(0x7000000 + offset), size); } void GXS_LoadOAM(void *src, u32 offset, u32 size){ - _GX_Load_32(src, offset, size, 0x7000400); + _GX_Load_32(gUnk02106814, src, (void *)(0x7000400 + offset), size); } void GX_LoadOBJ(void *src, u32 offset, u32 size){ u32 base = (u32)_GX_OBJ_PTR(); - _GX_Load_32(src, offset, size, base); + _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } void GXS_LoadOBJ(void *src, u32 offset, u32 size){ u32 base = (u32)_GXS_OBJ_PTR(); - _GX_Load_32(src, offset, size, base); + _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } void GX_LoadBG0Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG0ScrPtr(); - _GX_Load_16(src, offset, size, base); + _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } void GXS_LoadBG0Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG0ScrPtr(); - _GX_Load_16(src, offset, size, base); + _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } void GX_LoadBG1Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG1ScrPtr(); - _GX_Load_16(src, offset, size, base); + _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } void GXS_LoadBG1Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG1ScrPtr(); - _GX_Load_16(src, offset, size, base); + _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } void GX_LoadBG2Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG2ScrPtr(); - _GX_Load_16(src, offset, size, base); + _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } void GXS_LoadBG2Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG2ScrPtr(); - _GX_Load_16(src, offset, size, base); + _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } void GX_LoadBG3Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG3ScrPtr(); - _GX_Load_16(src, offset, size, base); + _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } void GXS_LoadBG3Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG3ScrPtr(); - _GX_Load_16(src, offset, size, base); + _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } void GX_LoadBG0Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG0CharPtr(); - _GX_Load_32(src, offset, size, base); + _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } void GXS_LoadBG0Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG0CharPtr(); - _GX_Load_32(src, offset, size, base); + _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } void GX_LoadBG1Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG1CharPtr(); - _GX_Load_32(src, offset, size, base); + _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } void GXS_LoadBG1Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG1CharPtr(); - _GX_Load_32(src, offset, size, base); + _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } void GX_LoadBG2Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG2CharPtr(); - _GX_Load_32(src, offset, size, base); + _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } void GXS_LoadBG2Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG2CharPtr(); - _GX_Load_32(src, offset, size, base); + _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } void GX_LoadBG3Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG3CharPtr(); - _GX_Load_32(src, offset, size, base); + _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } void GXS_LoadBG3Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG3CharPtr(); - _GX_Load_32(src, offset, size, base); + _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } void GX_BeginLoadBGExtPltt(){ @@ -197,7 +157,7 @@ void GX_BeginLoadBGExtPltt(){ } void GX_LoadBGExtPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(src, (void *)(gUnk021D33F0 + offset - gUnk021D33EC), size, NULL, NULL); + _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D33F0 + offset - gUnk021D33EC), size, NULL, NULL); } void GX_EndLoadBGExtPltt(){ @@ -225,7 +185,7 @@ void GX_BeginLoadOBJExtPltt(){ } void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(src, (void *)(gUnk021D33E4 + offset), size, NULL, NULL); + _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D33E4 + offset), size, NULL, NULL); } void GX_EndLoadOBJExtPltt(){ @@ -241,7 +201,7 @@ void GXS_BeginLoadBGExtPltt(){ } void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(src, (void *)(0x06898000 + offset), size, NULL, NULL); + _GX_Load_32_Async(gUnk02106814, src, (void *)(0x06898000 + offset), size, NULL, NULL); } void GXS_EndLoadBGExtPltt(){ @@ -256,7 +216,7 @@ void GXS_BeginLoadOBJExtPltt(){ } void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(src, (void *)(0x068A0000 + offset), size, NULL, NULL); + _GX_Load_32_Async(gUnk02106814, src, (void *)(0x068A0000 + offset), size, NULL, NULL); } void GXS_EndLoadOBJExtPltt(){ diff --git a/arm9/lib/src/GX_load3d.c b/arm9/lib/src/GX_load3d.c index 9ae7427a..bad119fd 100644 --- a/arm9/lib/src/GX_load3d.c +++ b/arm9/lib/src/GX_load3d.c @@ -21,39 +21,6 @@ extern u16 gUnk02103B3C[]; extern s32 gUnk021D33FC; extern u32 gUnk021D340C; -static inline void _GX_Load_16(void *src, void *dst, u32 size){ - if (gUnk02106814 != -1 && size > 0x1C) - { - MI_DmaCopy16(gUnk02106814, src, dst, size); - } - else - { - MIi_CpuCopy16(src, dst, size); - } -} - -static inline void _GX_Load_32(void *src, void *dst, u32 size){ - if (gUnk02106814 != -1 && size > 0x30) - { - MI_DmaCopy32(gUnk02106814, src, dst, size); - } - else - { - MIi_CpuCopy32(src, dst, size); - } -} - -static inline void _GX_Load_32_Async(void *src, void *dst, u32 size, void *func, void *ptr){ - if (gUnk02106814 != -1) - { - MI_DmaCopy32Async(gUnk02106814, src, dst, size, func, ptr); - } - else - { - MIi_CpuCopy32(src, dst, size); - } -} - void GX_BeginLoadTex(){ u32 temp = GX_ResetBankForTex(); gUnk021D3410 = temp; @@ -83,12 +50,12 @@ void GX_LoadTex(void *src, u32 offset, u32 size){ void *temp2 = (void *)gUnk021D3414; u32 temp1 = gUnk021D3418 - offset; temp = (void *)(gUnk021D3400 + offset); - _GX_Load_32(src, temp, temp1); - _GX_Load_32_Async((void *)((u8 *)src + temp1), temp2, (size - temp1), NULL, NULL); + _GX_Load_32(gUnk02106814, src, temp, temp1); + _GX_Load_32_Async(gUnk02106814, (void *)((u8 *)src + temp1), temp2, (size - temp1), NULL, NULL); return; } } - _GX_Load_32_Async(src, temp, size, NULL, NULL); + _GX_Load_32_Async(gUnk02106814, src, temp, size, NULL, NULL); } void GX_EndLoadTex(){ @@ -108,7 +75,7 @@ void GX_BeginLoadTexPltt(){ } void GX_LoadTexPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(src, (void *)(gUnk021D3404 + offset), size, NULL, NULL); + _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D3404 + offset), size, NULL, NULL); } void GX_EndLoadTexPltt(){ @@ -141,11 +108,11 @@ void GX_BeginLoadClearImage(){ } void GX_LoadClearImageColor(void *src, u32 size){ - _GX_Load_32_Async(src, (void *)(gUnk021D340C), size, NULL, NULL); + _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D340C), size, NULL, NULL); } void GX_LoadClearImageDepth(void *src, u32 size){ - _GX_Load_32_Async(src, (void *)(gUnk021D340C + 0x20000), size, NULL, NULL); + _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D340C + 0x20000), size, NULL, NULL); } void GX_EndLoadClearImage(){ diff --git a/arm9/lib/src/GX_vramcnt.c b/arm9/lib/src/GX_vramcnt.c index 52be412c..d0ac5f7a 100644 --- a/arm9/lib/src/GX_vramcnt.c +++ b/arm9/lib/src/GX_vramcnt.c @@ -5,8 +5,6 @@ extern u16 gUnk021D33BC; extern struct VRAM_banks gUnk021D33C4; -void OSi_UnlockVram(u16, u16); - void GX_VRAMCNT_SetLCDC_(u32 mask){ if (mask & (0x1 << 0)) SETREG8(HW_REG_VRAMCNT_A, 0x80); -- cgit v1.2.3 From a92d77224c8ec645752a56aa35cc8a8457cd4cd3 Mon Sep 17 00:00:00 2001 From: Made Date: Fri, 15 May 2020 04:14:48 +0200 Subject: Add ARM_FUNC to GX --- arm9/lib/src/GX.c | 16 ++++---- arm9/lib/src/GX_bgcnt.c | 32 +++++++-------- arm9/lib/src/GX_g2.c | 10 ++--- arm9/lib/src/GX_g3.c | 4 +- arm9/lib/src/GX_g3_util.c | 13 +++--- arm9/lib/src/GX_g3b.c | 28 ++++++------- arm9/lib/src/GX_g3imm.c | 6 +-- arm9/lib/src/GX_g3x.c | 34 ++++++++-------- arm9/lib/src/GX_load2d.c | 72 ++++++++++++++++---------------- arm9/lib/src/GX_load3d.c | 20 ++++----- arm9/lib/src/GX_state.c | 2 +- arm9/lib/src/GX_vramcnt.c | 102 +++++++++++++++++++++++----------------------- 12 files changed, 169 insertions(+), 170 deletions(-) diff --git a/arm9/lib/src/GX.c b/arm9/lib/src/GX.c index 9823e8ba..bae16fca 100644 --- a/arm9/lib/src/GX.c +++ b/arm9/lib/src/GX.c @@ -7,7 +7,7 @@ extern u16 gUnk021D33C0; extern u32 gUnk02106814; extern u16 gUnk02106810; -void GX_Init(){ +ARM_FUNC void GX_Init(){ SETREG16(HW_REG_POWCNT1, READREG16(HW_REG_POWCNT1) | 0x8000); SETREG16(HW_REG_POWCNT1, (READREG16(HW_REG_POWCNT1) & ~0x20E) | 0x20E); SETREG16(HW_REG_POWCNT1, READREG16(HW_REG_POWCNT1) | 0x1); @@ -46,7 +46,7 @@ void GX_Init(){ SETREG16(HW_REG_BG3PD_B, 0x100); } -u32 GX_HBlankIntr(u32 enable){ +ARM_FUNC u32 GX_HBlankIntr(u32 enable){ u32 temp = READREG16(HW_REG_DISPSTAT) & 0x10; if (enable) { @@ -59,7 +59,7 @@ u32 GX_HBlankIntr(u32 enable){ return temp; } -u32 GX_VBlankIntr(u32 enable){ +ARM_FUNC u32 GX_VBlankIntr(u32 enable){ u32 temp = READREG16(HW_REG_DISPSTAT) & 0x8; if (enable) { @@ -72,14 +72,14 @@ u32 GX_VBlankIntr(u32 enable){ return temp; } -void GX_DispOff(){ +ARM_FUNC void GX_DispOff(){ u32 temp = READREG32(HW_REG_DISPCNT); gUnk02106810 = 0x0; gUnk021D33C0 = (temp & 0x30000) >> 0x10; SETREG32(HW_REG_DISPCNT, temp & ~0x30000); } -void GX_DispOn(){ +ARM_FUNC void GX_DispOn(){ gUnk02106810 = 0x1; if (gUnk021D33C0) { @@ -92,7 +92,7 @@ void GX_DispOn(){ } } -void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3){ +ARM_FUNC void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3){ u32 temp2 = READREG32(HW_REG_DISPCNT); gUnk021D33C0 = mode1; if (!gUnk02106810) @@ -102,11 +102,11 @@ void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3){ gUnk02106810 = 0x0; } -void GXS_SetGraphicsMode(u32 mode){ +ARM_FUNC void GXS_SetGraphicsMode(u32 mode){ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x7 | mode); } -void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness){ +ARM_FUNC void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness){ if (!brightness) { *dst = 0x0; diff --git a/arm9/lib/src/GX_bgcnt.c b/arm9/lib/src/GX_bgcnt.c index 918f4d32..1eeffab6 100644 --- a/arm9/lib/src/GX_bgcnt.c +++ b/arm9/lib/src/GX_bgcnt.c @@ -2,25 +2,25 @@ #include "main.h" #include "gx.h" -void *G2_GetBG0ScrPtr(){ +ARM_FUNC void *G2_GetBG0ScrPtr(){ u32 temp = (((READREG16(HW_REG_BG0CNT_A) & 0x1F00) >> 0x8) << 0xB); return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10) + temp); } -void *G2S_GetBG0ScrPtr(){ +ARM_FUNC void *G2S_GetBG0ScrPtr(){ return (void *)(0x6200000 + (((READREG16(HW_REG_BG0CNT_B) & 0x1F00) >> 0x8) << 0xB)); } -void *G2_GetBG1ScrPtr(){ +ARM_FUNC void *G2_GetBG1ScrPtr(){ u32 temp = (((READREG16(HW_REG_BG1CNT_A) & 0x1F00) >> 0x8) << 0xB); return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10) + temp); } -void *G2S_GetBG1ScrPtr(){ +ARM_FUNC void *G2S_GetBG1ScrPtr(){ return (void *)(0x6200000 + (((READREG16(HW_REG_BG1CNT_B) & 0x1F00) >> 0x8) << 0xB)); } -void *G2_GetBG2ScrPtr(){ +ARM_FUNC void *G2_GetBG2ScrPtr(){ u32 temp12 = (READREG32(HW_REG_DISPCNT_A) & 0x7); u32 temp3 = READREG16(HW_REG_BG2CNT_A); u32 temp2 = (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10); @@ -45,7 +45,7 @@ void *G2_GetBG2ScrPtr(){ } } -void *G2S_GetBG2ScrPtr(){ +ARM_FUNC void *G2S_GetBG2ScrPtr(){ u32 temp12 = (READREG32(HW_REG_DISPCNT_B) & 0x7); u32 temp3 = READREG16(HW_REG_BG2CNT_B); u32 temp1 = ((temp3 & 0x1F00) >> 0x8); @@ -69,7 +69,7 @@ void *G2S_GetBG2ScrPtr(){ } } -void *G2_GetBG3ScrPtr(){ +ARM_FUNC void *G2_GetBG3ScrPtr(){ u32 temp12 = (READREG32(HW_REG_DISPCNT_A) & 0x7); u32 temp3 = READREG16(HW_REG_BG3CNT_A); u32 temp2 = (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10); @@ -94,7 +94,7 @@ void *G2_GetBG3ScrPtr(){ } } -void *G2S_GetBG3ScrPtr(){ +ARM_FUNC void *G2S_GetBG3ScrPtr(){ u32 temp12 = (READREG32(HW_REG_DISPCNT_B) & 0x7); u32 temp3 = READREG16(HW_REG_BG3CNT_B); u32 temp1 = ((temp3 & 0x1F00) >> 0x8); @@ -118,25 +118,25 @@ void *G2S_GetBG3ScrPtr(){ } } -void *G2_GetBG0CharPtr(){ +ARM_FUNC void *G2_GetBG0CharPtr(){ u32 temp = (((READREG16(HW_REG_BG0CNT_A) & 0x3C) >> 0x2) << 0xE); return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10) + temp); } -void *G2S_GetBG0CharPtr(){ +ARM_FUNC void *G2S_GetBG0CharPtr(){ return (void *)(0x6200000 + (((READREG16(HW_REG_BG0CNT_B) & 0x3C) >> 0x2) << 0xE)); } -void *G2_GetBG1CharPtr(){ +ARM_FUNC void *G2_GetBG1CharPtr(){ u32 temp = (((READREG16(HW_REG_BG1CNT_A) & 0x3C) >> 0x2) << 0xE); return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10) + temp); } -void *G2S_GetBG1CharPtr(){ +ARM_FUNC void *G2S_GetBG1CharPtr(){ return (void *)(0x6200000 + (((READREG16(HW_REG_BG1CNT_B) & 0x3C) >> 0x2) << 0xE)); } -void *G2_GetBG2CharPtr(){ +ARM_FUNC void *G2_GetBG2CharPtr(){ s32 temp1 = (READREG32(HW_REG_DISPCNT_A) & 0x7); u32 temp = READREG16(HW_REG_BG2CNT_A); if (temp1 < 5 || !(temp & 0x80)) @@ -151,7 +151,7 @@ void *G2_GetBG2CharPtr(){ } } -void *G2S_GetBG2CharPtr(){ +ARM_FUNC void *G2S_GetBG2CharPtr(){ s32 temp1 = (READREG32(HW_REG_DISPCNT_B) & 0x7); u32 temp = READREG16(HW_REG_BG2CNT_B); if (temp1 < 5 || !(temp & 0x80)) @@ -165,7 +165,7 @@ void *G2S_GetBG2CharPtr(){ } } -void *G2_GetBG3CharPtr(){ +ARM_FUNC void *G2_GetBG3CharPtr(){ s32 temp1 = (READREG32(HW_REG_DISPCNT_A) & 0x7); u32 temp = READREG16(HW_REG_BG3CNT_A); if (temp1 < 3 || (temp1 < 6 && !(temp & 0x80))) @@ -180,7 +180,7 @@ void *G2_GetBG3CharPtr(){ } } -void *G2S_GetBG3CharPtr(){ +ARM_FUNC void *G2S_GetBG3CharPtr(){ s32 temp1 = (READREG32(HW_REG_DISPCNT_B) & 0x7); u32 temp = READREG16(HW_REG_BG3CNT_B); if (temp1 < 3 || (temp1 < 6 && !(temp & 0x80))) diff --git a/arm9/lib/src/GX_g2.c b/arm9/lib/src/GX_g2.c index 7441e302..5bced1ef 100644 --- a/arm9/lib/src/GX_g2.c +++ b/arm9/lib/src/GX_g2.c @@ -2,7 +2,7 @@ #include "main.h" #include "gx.h" -void G2x_SetBGyAffine_(u32 *ptr, struct Mtx22 *mtx, fx32 a, fx32 b, fx32 c, fx32 d){ +ARM_FUNC void G2x_SetBGyAffine_(u32 *ptr, struct Mtx22 *mtx, fx32 a, fx32 b, fx32 c, fx32 d){ fx32 temp0, temp1, temp2, temp3; ptr[0] = ((u16)(fx16)(mtx->_[0] >> 4) | (u16)(fx16)(mtx->_[1] >> 4)<< 0x10); ptr[1] = ((u16)(fx16)(mtx->_[2] >> 4) | (u16)(fx16)(mtx->_[3] >> 4)<< 0x10); @@ -14,11 +14,11 @@ void G2x_SetBGyAffine_(u32 *ptr, struct Mtx22 *mtx, fx32 a, fx32 b, fx32 c, fx32 ptr[3] = temp3 >> 4; } -void G2x_SetBlendAlpha_(u32 *ptr, fx32 a, fx32 b, fx32 c, fx32 d){ +ARM_FUNC void G2x_SetBlendAlpha_(u32 *ptr, fx32 a, fx32 b, fx32 c, fx32 d){ *ptr = ((a | 0x40) | (b << 0x8)) | ((c | (d << 0x8)) << 0x10); } -void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness){ +ARM_FUNC void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness){ if (brightness < 0) { ptr[0] = a | 0xC0; @@ -31,7 +31,7 @@ void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness){ } } -void G2x_SetBlendBrightnessExt_(u16 *ptr, fx32 a, fx32 b, fx32 c, fx32 d, fx32 brightness){ +ARM_FUNC void G2x_SetBlendBrightnessExt_(u16 *ptr, fx32 a, fx32 b, fx32 c, fx32 d, fx32 brightness){ ptr[1] = c | (d << 0x8); if (brightness < 0) { @@ -45,7 +45,7 @@ void G2x_SetBlendBrightnessExt_(u16 *ptr, fx32 a, fx32 b, fx32 c, fx32 d, fx32 b } } -void *G2x_ChangeBlendBrightness_(u16 *ptr, fx32 brightness){ +ARM_FUNC void *G2x_ChangeBlendBrightness_(u16 *ptr, fx32 brightness){ u32 temp = *ptr; if (brightness < 0) { diff --git a/arm9/lib/src/GX_g3.c b/arm9/lib/src/GX_g3.c index 66e34dc7..eb01453d 100644 --- a/arm9/lib/src/GX_g3.c +++ b/arm9/lib/src/GX_g3.c @@ -3,7 +3,7 @@ #include "gx.h" -void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2){ +ARM_FUNC void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2){ displaylist->var0C = r2; displaylist->var08 = r1; displaylist->var00 = r1; @@ -11,7 +11,7 @@ void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2){ displaylist->var10 = 0x0; } -s32 G3_EndMakeDL(struct DL *displaylist){ +ARM_FUNC s32 G3_EndMakeDL(struct DL *displaylist){ if (displaylist->var08 == displaylist->var00) return 0; //pads the buffer with 0 to 4byte alignment if needed diff --git a/arm9/lib/src/GX_g3_util.c b/arm9/lib/src/GX_g3_util.c index 1cd956ad..75e18589 100644 --- a/arm9/lib/src/GX_g3_util.c +++ b/arm9/lib/src/GX_g3_util.c @@ -3,8 +3,7 @@ #include "gx.h" - -void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx){ +ARM_FUNC void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx){ fx32 fovcot, temp1, temp2; fx64c temp0; vu32 *reg_ptr; @@ -76,7 +75,7 @@ void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far } } -void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx){ +ARM_FUNC void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx){ fx64c temp1, temp2, temp3; fx32 temp0, temp4, temp5; vu32 *reg_ptr; @@ -167,7 +166,7 @@ void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 near, fx32 f } } -void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, u32 load, struct Mtx44 *mtx){ +ARM_FUNC void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, u32 load, struct Mtx44 *mtx){ struct Vecx32 temp, temp1, temp2; fx32 c1, c2, c3; vu32 *reg_ptr; @@ -218,7 +217,7 @@ void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, u32 load, } } -void G3_RotX(fx32 sinphi, fx32 cosphi){ +ARM_FUNC void G3_RotX(fx32 sinphi, fx32 cosphi){ vu32 *reg_ptr; reg_ptr = (vu32 *)HW_REG_MTX_MULT_3x3; *reg_ptr = 0x1000; @@ -232,7 +231,7 @@ void G3_RotX(fx32 sinphi, fx32 cosphi){ *reg_ptr = cosphi; } -void G3_RotY(fx32 sinphi, fx32 cosphi){ +ARM_FUNC void G3_RotY(fx32 sinphi, fx32 cosphi){ vu32 *reg_ptr; reg_ptr = (vu32 *)HW_REG_MTX_MULT_3x3; *reg_ptr = cosphi; @@ -246,7 +245,7 @@ void G3_RotY(fx32 sinphi, fx32 cosphi){ *reg_ptr = cosphi; } -void G3_RotZ(fx32 sinphi, fx32 cosphi){ +ARM_FUNC void G3_RotZ(fx32 sinphi, fx32 cosphi){ vu32 *reg_ptr; reg_ptr = (vu32 *)HW_REG_MTX_MULT_3x3; *reg_ptr = cosphi; diff --git a/arm9/lib/src/GX_g3b.c b/arm9/lib/src/GX_g3b.c index 0efe8518..50281ec0 100644 --- a/arm9/lib/src/GX_g3b.c +++ b/arm9/lib/src/GX_g3b.c @@ -3,32 +3,32 @@ #include "gx.h" -void G3BS_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx){ +ARM_FUNC void G3BS_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx){ *(u32 *)displaylist->var00 = 0x16; MI_Copy64B(mtx, displaylist->var04); } -void G3B_PushMtx(struct DL *displaylist){ +ARM_FUNC void G3B_PushMtx(struct DL *displaylist){ *(u32 *)displaylist->var00 = 0x11; displaylist->var00 = (u8 *)displaylist->var04; displaylist->var04 = (u32 *)displaylist->var00 + 1; } -void G3B_PopMtx(struct DL *displaylist, void *mtx){ +ARM_FUNC void G3B_PopMtx(struct DL *displaylist, void *mtx){ *(u32 *)displaylist->var00 = 0x12; *displaylist->var04 = (u32)mtx; displaylist->var00 = (u8 *)displaylist->var04 + 0x4; displaylist->var04 = (u32 *)displaylist->var00 + 1; } -void G3B_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx){ +ARM_FUNC void G3B_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx){ G3BS_LoadMtx44(displaylist, mtx); displaylist->var00 = (u8 *)displaylist->var04 + sizeof(struct Mtx44); displaylist->var04 = (u32 *)displaylist->var00 + 1; } //color format is RGB555, stored in the lower bits -void G3B_Color(struct DL * displaylist, u32 vtx_col){ +ARM_FUNC void G3B_Color(struct DL * displaylist, u32 vtx_col){ *(u32 *)displaylist->var00 = 0x20; *displaylist->var04 = vtx_col; displaylist->var00 = (u8 *)displaylist->var04 + 0x4; @@ -40,14 +40,14 @@ Only feed normalized Vectors only the fractional part and the sign, which is in the first nonfraction bit since the vector is assumed to be normalized, are used */ -void G3B_Normal(struct DL * displaylist, fx16 x, fx16 y, fx16 z){ +ARM_FUNC void G3B_Normal(struct DL * displaylist, fx16 x, fx16 y, fx16 z){ *(u32 *)displaylist->var00 = 0x21; *displaylist->var04 = ((x >> 3) & 0x3FF) | (((y >> 3) & 0x3FF) << 0xA) | (((z >> 3) & 0x3FF) << 0x14) ; displaylist->var00 = (u8 *)displaylist->var04 + 0x4; displaylist->var04 = (u32 *)displaylist->var00 + 1; } -void G3B_Vtx(struct DL * displaylist, fx32 x, fx32 y, fx32 z){ +ARM_FUNC void G3B_Vtx(struct DL * displaylist, fx32 x, fx32 y, fx32 z){ *(u32 *)displaylist->var00 = 0x23; displaylist->var04[0] = (u32)(u16)x | (u32)(u16)y << 0x10; displaylist->var04[1] = (u32)(u16)z; @@ -56,14 +56,14 @@ void G3B_Vtx(struct DL * displaylist, fx32 x, fx32 y, fx32 z){ } //TODO: name arguments -void G3B_PolygonAttr(struct DL *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6){ +ARM_FUNC void G3B_PolygonAttr(struct DL *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6){ *(u32 *)displaylist->var00 = 0x29; *displaylist->var04 = r1 | r2 << 0x4 | r3 << 0x6 | r6 | r4 << 0x18 | r5 << 0x10; displaylist->var00 = (u8 *)displaylist->var04 + 0x4; displaylist->var04 = (u32 *)displaylist->var00 + 1; } -void G3B_MaterialColorDiffAmb(struct DL *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace){ +ARM_FUNC void G3B_MaterialColorDiffAmb(struct DL *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace){ *(u32 *)displaylist->var00 = 0x30; u32 replace_vtx_color_with_diffuse; if (replace) @@ -75,7 +75,7 @@ void G3B_MaterialColorDiffAmb(struct DL *displaylist, u32 diffuse_col, u32 ambie displaylist->var04 = (u32 *)displaylist->var00 + 1; } -void G3B_MaterialColorSpecEmi(struct DL *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table){ +ARM_FUNC void G3B_MaterialColorSpecEmi(struct DL *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table){ *(u32 *)displaylist->var00 = 0x31; u32 enable_shininess_table; if (shiny_table) @@ -92,28 +92,28 @@ Only feed normalized Vectors only the fractional part and the sign, which is in the first nonfraction bit since the vector is assumed to be normalized, are used */ -void G3B_LightVector(struct DL * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z){ +ARM_FUNC void G3B_LightVector(struct DL * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z){ *(u32 *)displaylist->var00 = 0x32; *displaylist->var04 = ((x >> 3) & 0x3FF) | (((y >> 3) & 0x3FF) << 0xA) | (((z >> 3) & 0x3FF) << 0x14) | light_num << 0x1E; displaylist->var00 = (u8 *)displaylist->var04 + 0x4; displaylist->var04 = (u32 *)displaylist->var00 + 1; } -void G3B_LightColor(struct DL * displaylist, u32 light_num, u32 col){ +ARM_FUNC void G3B_LightColor(struct DL * displaylist, u32 light_num, u32 col){ *(u32 *)displaylist->var00 = 0x33; *displaylist->var04 = col | light_num << 0x1E; displaylist->var00 = (u8 *)displaylist->var04 + 0x4; displaylist->var04 = (u32 *)displaylist->var00 + 1; } -void G3B_Begin(struct DL * displaylist, u32 type){ +ARM_FUNC void G3B_Begin(struct DL * displaylist, u32 type){ *(u32 *)displaylist->var00 = 0x40; *displaylist->var04 = type; displaylist->var00 = (u8 *)displaylist->var04 + 0x4; displaylist->var04 = (u32 *)displaylist->var00 + 1; } -void G3B_End(struct DL * displaylist){ +ARM_FUNC void G3B_End(struct DL * displaylist){ *(u32 *)displaylist->var00 = 0x41; displaylist->var00 = (u8 *)displaylist->var04; displaylist->var04 = (u32 *)displaylist->var00 + 1; diff --git a/arm9/lib/src/GX_g3imm.c b/arm9/lib/src/GX_g3imm.c index f41b5cbf..f11e2927 100644 --- a/arm9/lib/src/GX_g3imm.c +++ b/arm9/lib/src/GX_g3imm.c @@ -2,17 +2,17 @@ #include "main.h" #include "gx.h" -void G3_LoadMtx43(struct Mtx43 *mtx){ +ARM_FUNC void G3_LoadMtx43(struct Mtx43 *mtx){ SETREG32(HW_REG_GXFIFO, 0x17); GX_SendFifo48B(mtx, (void *)HW_REG_GXFIFO); } -void G3_MultMtx43(struct Mtx43 *mtx){ +ARM_FUNC void G3_MultMtx43(struct Mtx43 *mtx){ SETREG32(HW_REG_GXFIFO, 0x19); GX_SendFifo48B(mtx, (void *)HW_REG_GXFIFO); } -void G3_MultMtx33(struct Mtx33 *mtx){ +ARM_FUNC void G3_MultMtx33(struct Mtx33 *mtx){ SETREG32(HW_REG_GXFIFO, 0x1A); MI_Copy36B(mtx, (void *)HW_REG_GXFIFO); } diff --git a/arm9/lib/src/GX_g3x.c b/arm9/lib/src/GX_g3x.c index 70c4f3fe..7ced9de6 100644 --- a/arm9/lib/src/GX_g3x.c +++ b/arm9/lib/src/GX_g3x.c @@ -4,7 +4,7 @@ extern u32 gUnk02106814; -asm void GXi_NopClearFifo128_(void *reg){ +ARM_FUNC asm void GXi_NopClearFifo128_(void *reg){ mov r1, #0x0 mov r2, #0x0 mov r3, #0x0 @@ -44,7 +44,7 @@ asm void GXi_NopClearFifo128_(void *reg){ bx lr } -void G3X_Init(){ +ARM_FUNC void G3X_Init(){ G3X_ClearFifo(); SETREG32(HW_REG_END_VTXS, 0x0); while (READREG32(HW_REG_GXSTAT) & 0x8000000); //wait for geometry engine to not be busy @@ -71,7 +71,7 @@ void G3X_Init(){ SETREG32(HW_REG_PLTT_BASE, 0x0); } -void G3X_ResetMtxStack(){ +ARM_FUNC void G3X_ResetMtxStack(){ while (READREG32(HW_REG_GXSTAT) & 0x8000000); SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000); SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x2000); @@ -82,12 +82,12 @@ void G3X_ResetMtxStack(){ SETREG32(HW_REG_PLTT_BASE, 0x0); } -void G3X_ClearFifo(){ +ARM_FUNC void G3X_ClearFifo(){ GXi_NopClearFifo128_((void *)HW_REG_GXFIFO); while (READREG32(HW_REG_GXSTAT) & 0x8000000); } -void G3X_InitMtxStack(){ +ARM_FUNC void G3X_InitMtxStack(){ u32 PV_level, PJ_level; SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000); while (G3X_GetMtxStackLevelPV(&PV_level)); @@ -105,7 +105,7 @@ void G3X_InitMtxStack(){ SETREG32(HW_REG_MTX_IDENTITY, 0x0); } -void G3X_ResetMtxStack_2(){ +ARM_FUNC void G3X_ResetMtxStack_2(){ u32 PV_level, PJ_level; SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000); while (G3X_GetMtxStackLevelPV(&PV_level)); @@ -124,7 +124,7 @@ void G3X_ResetMtxStack_2(){ } -void G3X_SetFog(u32 enable, u32 alphamode, u32 depth, s32 offset){ +ARM_FUNC void G3X_SetFog(u32 enable, u32 alphamode, u32 depth, s32 offset){ if (enable) { SETREG16(HW_REG_FOG_OFFSET, offset); @@ -137,7 +137,7 @@ void G3X_SetFog(u32 enable, u32 alphamode, u32 depth, s32 offset){ } } -u32 G3X_GetClipMtx(struct Mtx44 *dst){ +ARM_FUNC u32 G3X_GetClipMtx(struct Mtx44 *dst){ if (READREG32(HW_REG_GXSTAT) & 0x8000000) { return -1; @@ -149,7 +149,7 @@ u32 G3X_GetClipMtx(struct Mtx44 *dst){ } } -u32 G3X_GetVectorMtx(struct Mtx33 *dst){ +ARM_FUNC u32 G3X_GetVectorMtx(struct Mtx33 *dst){ if (READREG32(HW_REG_GXSTAT) & 0x8000000) { return -1; @@ -161,15 +161,15 @@ u32 G3X_GetVectorMtx(struct Mtx33 *dst){ } } -void G3X_SetEdgeColorTable(void *tbl_ptr){ +ARM_FUNC void G3X_SetEdgeColorTable(void *tbl_ptr){ MIi_CpuCopy16(tbl_ptr, (void *)HW_REG_EDGE_COLOR, 0x10); } -void G3X_SetFogTable(void *tbl_ptr){ +ARM_FUNC void G3X_SetFogTable(void *tbl_ptr){ MI_Copy16B(tbl_ptr, (void *)HW_REG_FOG_TABLE); } -void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable_fog){ +ARM_FUNC void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable_fog){ u32 temp = col | (alpha << 0x10) | (polygon_id << 0x18); if (enable_fog) temp |= 0x8000; @@ -177,7 +177,7 @@ void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable SETREG16(HW_REG_CLEAR_DEPTH, depth); } -void G3X_InitTable(){ +ARM_FUNC void G3X_InitTable(){ if (gUnk02106814 != -1) { MI_DmaFill32Async(gUnk02106814, (void *)HW_REG_EDGE_COLOR, 0x0, 0x10, 0x0, 0x0); @@ -194,7 +194,7 @@ void G3X_InitTable(){ } } -u32 G3X_GetMtxStackLevelPV(u32 *level){ +ARM_FUNC u32 G3X_GetMtxStackLevelPV(u32 *level){ if (READREG32(HW_REG_GXSTAT) & 0x4000) { return -1; @@ -206,7 +206,7 @@ u32 G3X_GetMtxStackLevelPV(u32 *level){ } } -u32 G3X_GetMtxStackLevelPJ(u32 *level){ +ARM_FUNC u32 G3X_GetMtxStackLevelPJ(u32 *level){ if (READREG32(HW_REG_GXSTAT) & 0x4000) { return -1; @@ -218,7 +218,7 @@ u32 G3X_GetMtxStackLevelPJ(u32 *level){ } } -u32 G3X_GetBoxTestResult(u32 *result){ +ARM_FUNC u32 G3X_GetBoxTestResult(u32 *result){ if (READREG32(HW_REG_GXSTAT) & 0x1) { return -1; @@ -230,6 +230,6 @@ u32 G3X_GetBoxTestResult(u32 *result){ } } -void G3X_SetHOffset(u32 offset){ +ARM_FUNC void G3X_SetHOffset(u32 offset){ SETREG32(HW_REG_BG0HOFS, offset); } diff --git a/arm9/lib/src/GX_load2d.c b/arm9/lib/src/GX_load2d.c index 9ebf24cc..972babad 100644 --- a/arm9/lib/src/GX_load2d.c +++ b/arm9/lib/src/GX_load2d.c @@ -20,121 +20,121 @@ static inline void *_GXS_OBJ_PTR(){ return (void *)0x6600000; } -void GX_LoadBGPltt(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadBGPltt(void *src, u32 offset, u32 size){ _GX_Load_16(gUnk02106814, src, (void *)(0x5000000 + offset), size); } -void GXS_LoadBGPltt(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadBGPltt(void *src, u32 offset, u32 size){ _GX_Load_16(gUnk02106814, src, (void *)(0x5000400 + offset), size); } -void GX_LoadOBJPltt(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadOBJPltt(void *src, u32 offset, u32 size){ _GX_Load_16(gUnk02106814, src, (void *)(0x5000200 + offset), size); } -void GXS_LoadOBJPltt(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadOBJPltt(void *src, u32 offset, u32 size){ _GX_Load_16(gUnk02106814, src, (void *)(0x5000600 + offset), size); } -void GX_LoadOAM(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadOAM(void *src, u32 offset, u32 size){ _GX_Load_32(gUnk02106814, src, (void *)(0x7000000 + offset), size); } -void GXS_LoadOAM(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadOAM(void *src, u32 offset, u32 size){ _GX_Load_32(gUnk02106814, src, (void *)(0x7000400 + offset), size); } -void GX_LoadOBJ(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadOBJ(void *src, u32 offset, u32 size){ u32 base = (u32)_GX_OBJ_PTR(); _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } -void GXS_LoadOBJ(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadOBJ(void *src, u32 offset, u32 size){ u32 base = (u32)_GXS_OBJ_PTR(); _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } -void GX_LoadBG0Scr(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadBG0Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG0ScrPtr(); _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } -void GXS_LoadBG0Scr(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadBG0Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG0ScrPtr(); _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } -void GX_LoadBG1Scr(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadBG1Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG1ScrPtr(); _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } -void GXS_LoadBG1Scr(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadBG1Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG1ScrPtr(); _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } -void GX_LoadBG2Scr(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadBG2Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG2ScrPtr(); _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } -void GXS_LoadBG2Scr(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadBG2Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG2ScrPtr(); _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } -void GX_LoadBG3Scr(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadBG3Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG3ScrPtr(); _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } -void GXS_LoadBG3Scr(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadBG3Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG3ScrPtr(); _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); } -void GX_LoadBG0Char(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadBG0Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG0CharPtr(); _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } -void GXS_LoadBG0Char(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadBG0Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG0CharPtr(); _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } -void GX_LoadBG1Char(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadBG1Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG1CharPtr(); _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } -void GXS_LoadBG1Char(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadBG1Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG1CharPtr(); _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } -void GX_LoadBG2Char(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadBG2Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG2CharPtr(); _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } -void GXS_LoadBG2Char(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadBG2Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG2CharPtr(); _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } -void GX_LoadBG3Char(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadBG3Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG3CharPtr(); _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } -void GXS_LoadBG3Char(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadBG3Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG3CharPtr(); _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); } -void GX_BeginLoadBGExtPltt(){ +ARM_FUNC void GX_BeginLoadBGExtPltt(){ gUnk021D33F4 = GX_ResetBankForBGExtPltt(); switch (gUnk021D33F4) { @@ -156,11 +156,11 @@ void GX_BeginLoadBGExtPltt(){ } } -void GX_LoadBGExtPltt(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadBGExtPltt(void *src, u32 offset, u32 size){ _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D33F0 + offset - gUnk021D33EC), size, NULL, NULL); } -void GX_EndLoadBGExtPltt(){ +ARM_FUNC void GX_EndLoadBGExtPltt(){ if (gUnk02106814 != -1) MI_WaitDma(gUnk02106814); GX_SetBankForBGExtPltt(gUnk021D33F4); @@ -169,7 +169,7 @@ void GX_EndLoadBGExtPltt(){ gUnk021D33EC = 0x0; } -void GX_BeginLoadOBJExtPltt(){ +ARM_FUNC void GX_BeginLoadOBJExtPltt(){ gUnk021D33E8 = GX_ResetBankForOBJExtPltt(); switch (gUnk021D33E8) { @@ -184,11 +184,11 @@ void GX_BeginLoadOBJExtPltt(){ } } -void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size){ _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D33E4 + offset), size, NULL, NULL); } -void GX_EndLoadOBJExtPltt(){ +ARM_FUNC void GX_EndLoadOBJExtPltt(){ if (gUnk02106814 != -1) MI_WaitDma(gUnk02106814); GX_SetBankForOBJExtPltt(gUnk021D33E8); @@ -196,30 +196,30 @@ void GX_EndLoadOBJExtPltt(){ gUnk021D33E4 = 0x0; } -void GXS_BeginLoadBGExtPltt(){ +ARM_FUNC void GXS_BeginLoadBGExtPltt(){ gUnk021D33E0 = FUN_020C6034(); } -void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size){ _GX_Load_32_Async(gUnk02106814, src, (void *)(0x06898000 + offset), size, NULL, NULL); } -void GXS_EndLoadBGExtPltt(){ +ARM_FUNC void GXS_EndLoadBGExtPltt(){ if (gUnk02106814 != -1) MI_WaitDma(gUnk02106814); GX_SetBankForSubBGExtPltt(gUnk021D33E0); gUnk021D33E0 = 0x0; } -void GXS_BeginLoadOBJExtPltt(){ +ARM_FUNC void GXS_BeginLoadOBJExtPltt(){ gUnk021D33F8 = GX_ResetBankForSubOBJ(); } -void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size){ +ARM_FUNC void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size){ _GX_Load_32_Async(gUnk02106814, src, (void *)(0x068A0000 + offset), size, NULL, NULL); } -void GXS_EndLoadOBJExtPltt(){ +ARM_FUNC void GXS_EndLoadOBJExtPltt(){ if (gUnk02106814 != -1) MI_WaitDma(gUnk02106814); GX_SetBankForSubOBJExtPltt(gUnk021D33F8); diff --git a/arm9/lib/src/GX_load3d.c b/arm9/lib/src/GX_load3d.c index bad119fd..ee7502db 100644 --- a/arm9/lib/src/GX_load3d.c +++ b/arm9/lib/src/GX_load3d.c @@ -21,7 +21,7 @@ extern u16 gUnk02103B3C[]; extern s32 gUnk021D33FC; extern u32 gUnk021D340C; -void GX_BeginLoadTex(){ +ARM_FUNC void GX_BeginLoadTex(){ u32 temp = GX_ResetBankForTex(); gUnk021D3410 = temp; gUnk021D3400 = gUnk02103B4C[temp * 3] << 0xC; @@ -29,7 +29,7 @@ void GX_BeginLoadTex(){ gUnk021D3418 = gUnk02103B50[temp * 3] << 0xC; } -void GX_LoadTex(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadTex(void *src, u32 offset, u32 size){ void *temp; if (!gUnk021D3414) { @@ -58,7 +58,7 @@ void GX_LoadTex(void *src, u32 offset, u32 size){ _GX_Load_32_Async(gUnk02106814, src, temp, size, NULL, NULL); } -void GX_EndLoadTex(){ +ARM_FUNC void GX_EndLoadTex(){ if (gUnk02106814 != -1) MI_WaitDma(gUnk02106814); GX_SetBankForTex(gUnk021D3410); @@ -68,17 +68,17 @@ void GX_EndLoadTex(){ gUnk021D3410 = 0x0; } -void GX_BeginLoadTexPltt(){ +ARM_FUNC void GX_BeginLoadTexPltt(){ s32 temp = GX_ResetBankForTexPltt(); gUnk021D3408 = temp; gUnk021D3404 = gUnk02103B3C[temp >> 4] << 0xC; } -void GX_LoadTexPltt(void *src, u32 offset, u32 size){ +ARM_FUNC void GX_LoadTexPltt(void *src, u32 offset, u32 size){ _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D3404 + offset), size, NULL, NULL); } -void GX_EndLoadTexPltt(){ +ARM_FUNC void GX_EndLoadTexPltt(){ if (gUnk02106814 != -1) MI_WaitDma(gUnk02106814); GX_SetBankForTexPltt(gUnk021D3408); @@ -86,7 +86,7 @@ void GX_EndLoadTexPltt(){ gUnk021D3404 = 0x0; } -void GX_BeginLoadClearImage(){ +ARM_FUNC void GX_BeginLoadClearImage(){ s32 temp = GX_ResetBankForClearImage(); gUnk021D33FC = temp; switch (temp) @@ -107,15 +107,15 @@ void GX_BeginLoadClearImage(){ } } -void GX_LoadClearImageColor(void *src, u32 size){ +ARM_FUNC void GX_LoadClearImageColor(void *src, u32 size){ _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D340C), size, NULL, NULL); } -void GX_LoadClearImageDepth(void *src, u32 size){ +ARM_FUNC void GX_LoadClearImageDepth(void *src, u32 size){ _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D340C + 0x20000), size, NULL, NULL); } -void GX_EndLoadClearImage(){ +ARM_FUNC void GX_EndLoadClearImage(){ if (gUnk02106814 != -1) MI_WaitDma(gUnk02106814); GX_SetBankForClearImage(gUnk021D33FC); diff --git a/arm9/lib/src/GX_state.c b/arm9/lib/src/GX_state.c index 52d3c6f5..38968523 100644 --- a/arm9/lib/src/GX_state.c +++ b/arm9/lib/src/GX_state.c @@ -4,7 +4,7 @@ extern struct VRAM_banks gUnk021D33C4; -void GX_InitGXState(){ +ARM_FUNC void GX_InitGXState(){ gUnk021D33C4.var00 = 0x0; gUnk021D33C4.var02 = 0x0; gUnk021D33C4.var04 = 0x0; diff --git a/arm9/lib/src/GX_vramcnt.c b/arm9/lib/src/GX_vramcnt.c index d0ac5f7a..24862470 100644 --- a/arm9/lib/src/GX_vramcnt.c +++ b/arm9/lib/src/GX_vramcnt.c @@ -5,7 +5,7 @@ extern u16 gUnk021D33BC; extern struct VRAM_banks gUnk021D33C4; -void GX_VRAMCNT_SetLCDC_(u32 mask){ +ARM_FUNC void GX_VRAMCNT_SetLCDC_(u32 mask){ if (mask & (0x1 << 0)) SETREG8(HW_REG_VRAMCNT_A, 0x80); if (mask & (0x1 << 1)) @@ -26,7 +26,7 @@ void GX_VRAMCNT_SetLCDC_(u32 mask){ SETREG8(HW_REG_VRAMCNT_I, 0x80); } -void GX_SetBankForBG(s32 bg){ +ARM_FUNC void GX_SetBankForBG(s32 bg){ gUnk021D33C4.var00 = (u16)(~bg & (gUnk021D33C4.var00 | gUnk021D33C4.var02)); gUnk021D33C4.var02 = bg; switch (bg) @@ -99,7 +99,7 @@ void GX_SetBankForBG(s32 bg){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForOBJ(s32 obj){ +ARM_FUNC void GX_SetBankForOBJ(s32 obj){ gUnk021D33C4.var00 = (u16)(~obj & (gUnk021D33C4.var00 | gUnk021D33C4.var04)); gUnk021D33C4.var04 = obj; switch (obj) @@ -138,7 +138,7 @@ void GX_SetBankForOBJ(s32 obj){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForBGExtPltt(s32 bgextpltt){ +ARM_FUNC void GX_SetBankForBGExtPltt(s32 bgextpltt){ gUnk021D33C4.var00 = (u16)(~bgextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var0E)); gUnk021D33C4.var0E = bgextpltt; switch (bgextpltt) @@ -164,7 +164,7 @@ void GX_SetBankForBGExtPltt(s32 bgextpltt){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForOBJExtPltt(s32 objextpltt){ +ARM_FUNC void GX_SetBankForOBJExtPltt(s32 objextpltt){ gUnk021D33C4.var00 = (u16)(~objextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var10)); gUnk021D33C4.var10 = objextpltt; switch (objextpltt) @@ -184,7 +184,7 @@ void GX_SetBankForOBJExtPltt(s32 objextpltt){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForTex(s32 tex){ +ARM_FUNC void GX_SetBankForTex(s32 tex){ gUnk021D33C4.var00 = (u16)(~tex & (gUnk021D33C4.var00 | gUnk021D33C4.var08)); gUnk021D33C4.var08 = tex; if (tex == 0) @@ -247,7 +247,7 @@ void GX_SetBankForTex(s32 tex){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForTexPltt(s32 texpltt){ +ARM_FUNC void GX_SetBankForTexPltt(s32 texpltt){ gUnk021D33C4.var00 = (u16)(~texpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var0A)); gUnk021D33C4.var0A = texpltt; switch (texpltt) @@ -273,7 +273,7 @@ void GX_SetBankForTexPltt(s32 texpltt){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForClearImage(s32 clearimage){ +ARM_FUNC void GX_SetBankForClearImage(s32 clearimage){ gUnk021D33C4.var00 = (u16)(~clearimage & (gUnk021D33C4.var00 | gUnk021D33C4.var0C)); gUnk021D33C4.var0C = clearimage; switch (clearimage) @@ -304,7 +304,7 @@ void GX_SetBankForClearImage(s32 clearimage){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForARM7(s32 arm7){ +ARM_FUNC void GX_SetBankForARM7(s32 arm7){ gUnk021D33C4.var00 = (u16)(~arm7 & (gUnk021D33C4.var00 | gUnk021D33C4.var06)); gUnk021D33C4.var06 = arm7; switch (arm7) @@ -324,12 +324,12 @@ void GX_SetBankForARM7(s32 arm7){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForLCDC(s32 lcdc){ +ARM_FUNC void GX_SetBankForLCDC(s32 lcdc){ gUnk021D33C4.var00 |= lcdc; GX_VRAMCNT_SetLCDC_(lcdc); } -void GX_SetBankForSubBG(s32 subbg){ +ARM_FUNC void GX_SetBankForSubBG(s32 subbg){ gUnk021D33C4.var00 = (u16)(~subbg & (gUnk021D33C4.var00 | gUnk021D33C4.var12)); gUnk021D33C4.var12 = subbg; switch (subbg) @@ -348,7 +348,7 @@ void GX_SetBankForSubBG(s32 subbg){ } -void GX_SetBankForSubOBJ(s32 subobj){ +ARM_FUNC void GX_SetBankForSubOBJ(s32 subobj){ gUnk021D33C4.var00 = (u16)(~subobj & (gUnk021D33C4.var00 | gUnk021D33C4.var14)); gUnk021D33C4.var14 = subobj; switch (subobj) @@ -365,7 +365,7 @@ void GX_SetBankForSubOBJ(s32 subobj){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){ +ARM_FUNC void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){ gUnk021D33C4.var00 = (u16)(~subbgextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var16)); gUnk021D33C4.var16 = subbgextpltt; switch (subbgextpltt) @@ -381,7 +381,7 @@ void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){ +ARM_FUNC void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){ gUnk021D33C4.var00 = (u16)(~subobjextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var18)); gUnk021D33C4.var18 = subobjextpltt; switch (subobjextpltt) @@ -397,7 +397,7 @@ void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); } -u32 FUN_020C6130(u16 *ptr){ +ARM_FUNC u32 FUN_020C6130(u16 *ptr){ u16 temp = *ptr; *ptr = 0; gUnk021D33C4.var00 |= temp; @@ -405,55 +405,55 @@ u32 FUN_020C6130(u16 *ptr){ return temp; } -u32 GX_ResetBankForBG(){ +ARM_FUNC u32 GX_ResetBankForBG(){ return FUN_020C6130(&gUnk021D33C4.var02); } -u32 GX_ResetBankForOBJ(){ +ARM_FUNC u32 GX_ResetBankForOBJ(){ return FUN_020C6130(&gUnk021D33C4.var04); } -u32 GX_ResetBankForBGExtPltt(){ +ARM_FUNC u32 GX_ResetBankForBGExtPltt(){ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000); return FUN_020C6130(&gUnk021D33C4.var0E); } -u32 GX_ResetBankForOBJExtPltt(){ +ARM_FUNC u32 GX_ResetBankForOBJExtPltt(){ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000); return FUN_020C6130(&gUnk021D33C4.var10); } -u32 GX_ResetBankForTex(){ +ARM_FUNC u32 GX_ResetBankForTex(){ return FUN_020C6130(&gUnk021D33C4.var08); } -u32 GX_ResetBankForTexPltt(){ +ARM_FUNC u32 GX_ResetBankForTexPltt(){ return FUN_020C6130(&gUnk021D33C4.var0A); } -u32 GX_ResetBankForClearImage(){ +ARM_FUNC u32 GX_ResetBankForClearImage(){ return FUN_020C6130(&gUnk021D33C4.var0C); } -u32 GX_ResetBankForSubBG(){ +ARM_FUNC u32 GX_ResetBankForSubBG(){ return FUN_020C6130(&gUnk021D33C4.var12); } -u32 FUN_020C605C(){ +ARM_FUNC u32 FUN_020C605C(){ return FUN_020C6130(&gUnk021D33C4.var14); } -u32 FUN_020C6034(){ +ARM_FUNC u32 FUN_020C6034(){ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000); return FUN_020C6130(&gUnk021D33C4.var16); } -u32 GX_ResetBankForSubOBJ(){ +ARM_FUNC u32 GX_ResetBankForSubOBJ(){ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000); return FUN_020C6130(&gUnk021D33C4.var18); } -u32 FUN_020C5F28(u16 *ptr){ +ARM_FUNC u32 FUN_020C5F28(u16 *ptr){ u32 temp = *ptr; *ptr = 0; if (temp & (0x1 << 0)) @@ -478,102 +478,102 @@ u32 FUN_020C5F28(u16 *ptr){ return temp; } -u32 disableBankForX_(){ +ARM_FUNC u32 disableBankForX_(){ return FUN_020C5F28(&gUnk021D33C4.var02); } -u32 GX_DisableBankForOBJExtPltt_2(){ +ARM_FUNC u32 GX_DisableBankForOBJExtPltt_2(){ return FUN_020C5F28(&gUnk021D33C4.var04); } -u32 GX_DisableBankForBGExtPltt(){ +ARM_FUNC u32 GX_DisableBankForBGExtPltt(){ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000); return FUN_020C5F28(&gUnk021D33C4.var0E); } -u32 GX_DisableBankForOBJExtPltt(){ +ARM_FUNC u32 GX_DisableBankForOBJExtPltt(){ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000); return FUN_020C5F28(&gUnk021D33C4.var10); } -u32 GX_DisableBankForTexPltt_2(){ +ARM_FUNC u32 GX_DisableBankForTexPltt_2(){ return FUN_020C5F28(&gUnk021D33C4.var08); } -u32 GX_DisableBankForTexPltt(){ +ARM_FUNC u32 GX_DisableBankForTexPltt(){ return FUN_020C5F28(&gUnk021D33C4.var0A); } -u32 GX_DisableBankForClearImage(){ +ARM_FUNC u32 GX_DisableBankForClearImage(){ return FUN_020C5F28(&gUnk021D33C4.var0C); } -u32 GX_DisableBankForARM7(){ +ARM_FUNC u32 GX_DisableBankForARM7(){ return FUN_020C5F28(&gUnk021D33C4.var06); } -u32 GX_DisableBankForLCDC(){ +ARM_FUNC u32 GX_DisableBankForLCDC(){ return FUN_020C5F28(&gUnk021D33C4.var00); } -u32 GX_DisableBankForSubBGExtPltt(){ +ARM_FUNC u32 GX_DisableBankForSubBGExtPltt(){ return FUN_020C5F28(&gUnk021D33C4.var12); } -u32 GX_DisableBankForSubOBJExtPltt_2(){ +ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt_2(){ return FUN_020C5F28(&gUnk021D33C4.var14); } -u32 FUN_020C5E04(){ +ARM_FUNC u32 FUN_020C5E04(){ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000); return FUN_020C5F28(&gUnk021D33C4.var16); } -u32 GX_DisableBankForSubOBJExtPltt(){ +ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt(){ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000); return FUN_020C5F28(&gUnk021D33C4.var18); } -u32 GX_GetBankForBGExtPltt_2(){ +ARM_FUNC u32 GX_GetBankForBGExtPltt_2(){ return gUnk021D33C4.var02; } -u32 GX_GetBankForOBJ(){ +ARM_FUNC u32 GX_GetBankForOBJ(){ return gUnk021D33C4.var04; } -u32 GX_GetBankForBGExtPltt(){ +ARM_FUNC u32 GX_GetBankForBGExtPltt(){ return gUnk021D33C4.var0E; } -u32 GX_GetBankForOBJExtPltt(){ +ARM_FUNC u32 GX_GetBankForOBJExtPltt(){ return gUnk021D33C4.var10; } -u32 FUN_020C5D8C(){ +ARM_FUNC u32 FUN_020C5D8C(){ return gUnk021D33C4.var08; } -u32 GX_GetBankForTexPltt(){ +ARM_FUNC u32 GX_GetBankForTexPltt(){ return gUnk021D33C4.var0A; } -u32 GX_GetBankForLCDC(){ +ARM_FUNC u32 GX_GetBankForLCDC(){ return gUnk021D33C4.var00; } -u32 GX_GetBankForSubBGExtPltt_2(){ +ARM_FUNC u32 GX_GetBankForSubBGExtPltt_2(){ return gUnk021D33C4.var12; } -u32 GX_GetBankForSubOBJ(){ +ARM_FUNC u32 GX_GetBankForSubOBJ(){ return gUnk021D33C4.var14; } -u32 GX_GetBankForSubBGExtPltt(){ +ARM_FUNC u32 GX_GetBankForSubBGExtPltt(){ return gUnk021D33C4.var16; } -u32 GX_GetBankForSubOBJExtPltt(){ +ARM_FUNC u32 GX_GetBankForSubOBJExtPltt(){ return gUnk021D33C4.var18; } -- cgit v1.2.3 From f34db9ec15de8a39989afc722286844ac5fe252b Mon Sep 17 00:00:00 2001 From: Made Date: Fri, 15 May 2020 04:54:46 +0200 Subject: Correct global symbol names --- arm9/lib/src/GX.c | 36 +++++------ arm9/lib/src/GX_g3x.c | 8 +-- arm9/lib/src/GX_load2d.c | 138 ++++++++++++++++++++--------------------- arm9/lib/src/GX_load3d.c | 112 +++++++++++++++++----------------- arm9/lib/src/GX_state.c | 28 ++++----- arm9/lib/src/GX_vramcnt.c | 152 +++++++++++++++++++++++----------------------- arm9/undefined_syms.txt | 42 ++++++------- 7 files changed, 258 insertions(+), 258 deletions(-) diff --git a/arm9/lib/src/GX.c b/arm9/lib/src/GX.c index bae16fca..ca3e4604 100644 --- a/arm9/lib/src/GX.c +++ b/arm9/lib/src/GX.c @@ -2,10 +2,10 @@ #include "main.h" #include "gx.h" -extern u16 gUnk021D33BC; -extern u16 gUnk021D33C0; -extern u32 gUnk02106814; -extern u16 gUnk02106810; +extern u16 UNK_021D33BC; +extern u16 UNK_021D33C0; +extern u32 UNK_02106814; +extern u16 UNK_02106810; ARM_FUNC void GX_Init(){ SETREG16(HW_REG_POWCNT1, READREG16(HW_REG_POWCNT1) | 0x8000); @@ -13,22 +13,22 @@ ARM_FUNC void GX_Init(){ SETREG16(HW_REG_POWCNT1, READREG16(HW_REG_POWCNT1) | 0x1); GX_InitGXState(); u32 temp; - while (gUnk021D33BC == 0) + while (UNK_021D33BC == 0) { temp = OS_GetLockID(); if (temp == -3) { OS_Terminate(); } - gUnk021D33BC = temp; + UNK_021D33BC = temp; } SETREG16(HW_REG_DISPSTAT, 0x0); SETREG32(HW_REG_DISPCNT, 0x0); - if (gUnk02106814 != -1) + if (UNK_02106814 != -1) { - MI_DmaFill32(gUnk02106814, (void *)HW_REG_BG0CNT_A, 0x0, 0x60); + MI_DmaFill32(UNK_02106814, (void *)HW_REG_BG0CNT_A, 0x0, 0x60); SETREG16(HW_REG_MASTER_BRIGHT, 0x0); - MI_DmaFill32(gUnk02106814, (void *)HW_REG_DISPCNT_2D, 0x0, 0x70); + MI_DmaFill32(UNK_02106814, (void *)HW_REG_DISPCNT_2D, 0x0, 0x70); } else { @@ -74,16 +74,16 @@ ARM_FUNC u32 GX_VBlankIntr(u32 enable){ ARM_FUNC void GX_DispOff(){ u32 temp = READREG32(HW_REG_DISPCNT); - gUnk02106810 = 0x0; - gUnk021D33C0 = (temp & 0x30000) >> 0x10; + UNK_02106810 = 0x0; + UNK_021D33C0 = (temp & 0x30000) >> 0x10; SETREG32(HW_REG_DISPCNT, temp & ~0x30000); } ARM_FUNC void GX_DispOn(){ - gUnk02106810 = 0x1; - if (gUnk021D33C0) + UNK_02106810 = 0x1; + if (UNK_021D33C0) { - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x30000 | (gUnk021D33C0 << 0x10)); + SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x30000 | (UNK_021D33C0 << 0x10)); } else @@ -94,12 +94,12 @@ ARM_FUNC void GX_DispOn(){ ARM_FUNC void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3){ u32 temp2 = READREG32(HW_REG_DISPCNT); - gUnk021D33C0 = mode1; - if (!gUnk02106810) + UNK_021D33C0 = mode1; + if (!UNK_02106810) mode1 = 0; SETREG32(HW_REG_DISPCNT, (mode2 | ((temp2 & 0xFFF0FFF0) | (mode1 << 0x10))) | (mode3 << 0x3)); - if (!gUnk021D33C0) - gUnk02106810 = 0x0; + if (!UNK_021D33C0) + UNK_02106810 = 0x0; } ARM_FUNC void GXS_SetGraphicsMode(u32 mode){ diff --git a/arm9/lib/src/GX_g3x.c b/arm9/lib/src/GX_g3x.c index 7ced9de6..e76adce7 100644 --- a/arm9/lib/src/GX_g3x.c +++ b/arm9/lib/src/GX_g3x.c @@ -2,7 +2,7 @@ #include "main.h" #include "gx.h" -extern u32 gUnk02106814; +extern u32 UNK_02106814; ARM_FUNC asm void GXi_NopClearFifo128_(void *reg){ mov r1, #0x0 @@ -178,10 +178,10 @@ ARM_FUNC void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u } ARM_FUNC void G3X_InitTable(){ - if (gUnk02106814 != -1) + if (UNK_02106814 != -1) { - MI_DmaFill32Async(gUnk02106814, (void *)HW_REG_EDGE_COLOR, 0x0, 0x10, 0x0, 0x0); - MI_DmaFill32(gUnk02106814, (void *)HW_REG_FOG_TABLE, 0x0, 0x60); + MI_DmaFill32Async(UNK_02106814, (void *)HW_REG_EDGE_COLOR, 0x0, 0x10, 0x0, 0x0); + MI_DmaFill32(UNK_02106814, (void *)HW_REG_FOG_TABLE, 0x0, 0x60); } else { diff --git a/arm9/lib/src/GX_load2d.c b/arm9/lib/src/GX_load2d.c index 972babad..c0139c41 100644 --- a/arm9/lib/src/GX_load2d.c +++ b/arm9/lib/src/GX_load2d.c @@ -2,15 +2,15 @@ #include "main.h" #include "gx.h" -extern u32 gUnk02106814; +extern u32 UNK_02106814; -extern s32 gUnk021D33F8; -extern s32 gUnk021D33F4; -extern u32 gUnk021D33F0; -extern u32 gUnk021D33EC; -extern s32 gUnk021D33E8; -extern u32 gUnk021D33E4; -extern s32 gUnk021D33E0; +extern s32 UNK_021D33F8; +extern s32 UNK_021D33F4; +extern u32 UNK_021D33F0; +extern u32 UNK_021D33EC; +extern s32 UNK_021D33E8; +extern u32 UNK_021D33E4; +extern s32 UNK_021D33E0; static inline void *_GX_OBJ_PTR(){ @@ -21,207 +21,207 @@ static inline void *_GXS_OBJ_PTR(){ } ARM_FUNC void GX_LoadBGPltt(void *src, u32 offset, u32 size){ - _GX_Load_16(gUnk02106814, src, (void *)(0x5000000 + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(0x5000000 + offset), size); } ARM_FUNC void GXS_LoadBGPltt(void *src, u32 offset, u32 size){ - _GX_Load_16(gUnk02106814, src, (void *)(0x5000400 + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(0x5000400 + offset), size); } ARM_FUNC void GX_LoadOBJPltt(void *src, u32 offset, u32 size){ - _GX_Load_16(gUnk02106814, src, (void *)(0x5000200 + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(0x5000200 + offset), size); } ARM_FUNC void GXS_LoadOBJPltt(void *src, u32 offset, u32 size){ - _GX_Load_16(gUnk02106814, src, (void *)(0x5000600 + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(0x5000600 + offset), size); } ARM_FUNC void GX_LoadOAM(void *src, u32 offset, u32 size){ - _GX_Load_32(gUnk02106814, src, (void *)(0x7000000 + offset), size); + _GX_Load_32(UNK_02106814, src, (void *)(0x7000000 + offset), size); } ARM_FUNC void GXS_LoadOAM(void *src, u32 offset, u32 size){ - _GX_Load_32(gUnk02106814, src, (void *)(0x7000400 + offset), size); + _GX_Load_32(UNK_02106814, src, (void *)(0x7000400 + offset), size); } ARM_FUNC void GX_LoadOBJ(void *src, u32 offset, u32 size){ u32 base = (u32)_GX_OBJ_PTR(); - _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadOBJ(void *src, u32 offset, u32 size){ u32 base = (u32)_GXS_OBJ_PTR(); - _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG0Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG0ScrPtr(); - _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG0Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG0ScrPtr(); - _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG1Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG1ScrPtr(); - _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG1Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG1ScrPtr(); - _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG2Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG2ScrPtr(); - _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG2Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG2ScrPtr(); - _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG3Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG3ScrPtr(); - _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG3Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG3ScrPtr(); - _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG0Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG0CharPtr(); - _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG0Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG0CharPtr(); - _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG1Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG1CharPtr(); - _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG1Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG1CharPtr(); - _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG2Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG2CharPtr(); - _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG2Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG2CharPtr(); - _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG3Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG3CharPtr(); - _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG3Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG3CharPtr(); - _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size); + _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_BeginLoadBGExtPltt(){ - gUnk021D33F4 = GX_ResetBankForBGExtPltt(); - switch (gUnk021D33F4) + UNK_021D33F4 = GX_ResetBankForBGExtPltt(); + switch (UNK_021D33F4) { case 0: //needed to match break; case 0x10: - gUnk021D33F0 = 0x06880000; - gUnk021D33EC = 0x0; + UNK_021D33F0 = 0x06880000; + UNK_021D33EC = 0x0; break; case 0x40: - gUnk021D33F0 = 0x06894000; - gUnk021D33EC = 0x4000; + UNK_021D33F0 = 0x06894000; + UNK_021D33EC = 0x4000; break; case 0x20: case 0x60: - gUnk021D33F0 = 0x06890000; - gUnk021D33EC = 0x0; + UNK_021D33F0 = 0x06890000; + UNK_021D33EC = 0x0; break; } } ARM_FUNC void GX_LoadBGExtPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D33F0 + offset - gUnk021D33EC), size, NULL, NULL); + _GX_Load_32_Async(UNK_02106814, src, (void *)(UNK_021D33F0 + offset - UNK_021D33EC), size, NULL, NULL); } ARM_FUNC void GX_EndLoadBGExtPltt(){ - if (gUnk02106814 != -1) - MI_WaitDma(gUnk02106814); - GX_SetBankForBGExtPltt(gUnk021D33F4); - gUnk021D33F4 = 0x0; - gUnk021D33F0 = 0x0; - gUnk021D33EC = 0x0; + if (UNK_02106814 != -1) + MI_WaitDma(UNK_02106814); + GX_SetBankForBGExtPltt(UNK_021D33F4); + UNK_021D33F4 = 0x0; + UNK_021D33F0 = 0x0; + UNK_021D33EC = 0x0; } ARM_FUNC void GX_BeginLoadOBJExtPltt(){ - gUnk021D33E8 = GX_ResetBankForOBJExtPltt(); - switch (gUnk021D33E8) + UNK_021D33E8 = GX_ResetBankForOBJExtPltt(); + switch (UNK_021D33E8) { case 0: //needed to match break; case 0x40: - gUnk021D33E4 = 0x06894000; + UNK_021D33E4 = 0x06894000; break; case 0x20: - gUnk021D33E4 = 0x06890000; + UNK_021D33E4 = 0x06890000; break; } } ARM_FUNC void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D33E4 + offset), size, NULL, NULL); + _GX_Load_32_Async(UNK_02106814, src, (void *)(UNK_021D33E4 + offset), size, NULL, NULL); } ARM_FUNC void GX_EndLoadOBJExtPltt(){ - if (gUnk02106814 != -1) - MI_WaitDma(gUnk02106814); - GX_SetBankForOBJExtPltt(gUnk021D33E8); - gUnk021D33E8 = 0x0; - gUnk021D33E4 = 0x0; + if (UNK_02106814 != -1) + MI_WaitDma(UNK_02106814); + GX_SetBankForOBJExtPltt(UNK_021D33E8); + UNK_021D33E8 = 0x0; + UNK_021D33E4 = 0x0; } ARM_FUNC void GXS_BeginLoadBGExtPltt(){ - gUnk021D33E0 = FUN_020C6034(); + UNK_021D33E0 = FUN_020C6034(); } ARM_FUNC void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(gUnk02106814, src, (void *)(0x06898000 + offset), size, NULL, NULL); + _GX_Load_32_Async(UNK_02106814, src, (void *)(0x06898000 + offset), size, NULL, NULL); } ARM_FUNC void GXS_EndLoadBGExtPltt(){ - if (gUnk02106814 != -1) - MI_WaitDma(gUnk02106814); - GX_SetBankForSubBGExtPltt(gUnk021D33E0); - gUnk021D33E0 = 0x0; + if (UNK_02106814 != -1) + MI_WaitDma(UNK_02106814); + GX_SetBankForSubBGExtPltt(UNK_021D33E0); + UNK_021D33E0 = 0x0; } ARM_FUNC void GXS_BeginLoadOBJExtPltt(){ - gUnk021D33F8 = GX_ResetBankForSubOBJ(); + UNK_021D33F8 = GX_ResetBankForSubOBJ(); } ARM_FUNC void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(gUnk02106814, src, (void *)(0x068A0000 + offset), size, NULL, NULL); + _GX_Load_32_Async(UNK_02106814, src, (void *)(0x068A0000 + offset), size, NULL, NULL); } ARM_FUNC void GXS_EndLoadOBJExtPltt(){ - if (gUnk02106814 != -1) - MI_WaitDma(gUnk02106814); - GX_SetBankForSubOBJExtPltt(gUnk021D33F8); - gUnk021D33F8 = 0x0; + if (UNK_02106814 != -1) + MI_WaitDma(UNK_02106814); + GX_SetBankForSubOBJExtPltt(UNK_021D33F8); + UNK_021D33F8 = 0x0; } diff --git a/arm9/lib/src/GX_load3d.c b/arm9/lib/src/GX_load3d.c index ee7502db..3a8a8c1d 100644 --- a/arm9/lib/src/GX_load3d.c +++ b/arm9/lib/src/GX_load3d.c @@ -2,123 +2,123 @@ #include "main.h" #include "gx.h" -extern u32 gUnk02106814; +extern u32 UNK_02106814; -extern u32 gUnk021D3410; -extern u32 gUnk021D3400; -extern u32 gUnk021D3414; -extern u32 gUnk021D3418; +extern u32 UNK_021D3410; +extern u32 UNK_021D3400; +extern u32 UNK_021D3414; +extern u32 UNK_021D3418; //probably structs of length 0x6 -extern u16 gUnk02103B4C[]; -extern u16 gUnk02103B4E[]; -extern u16 gUnk02103B50[]; +extern u16 UNK_02103B4C[]; +extern u16 UNK_02103B4E[]; +extern u16 UNK_02103B50[]; -extern u32 gUnk021D3408; -extern u32 gUnk021D3404; -extern u16 gUnk02103B3C[]; +extern u32 UNK_021D3408; +extern u32 UNK_021D3404; +extern u16 UNK_02103B3C[]; -extern s32 gUnk021D33FC; -extern u32 gUnk021D340C; +extern s32 UNK_021D33FC; +extern u32 UNK_021D340C; ARM_FUNC void GX_BeginLoadTex(){ u32 temp = GX_ResetBankForTex(); - gUnk021D3410 = temp; - gUnk021D3400 = gUnk02103B4C[temp * 3] << 0xC; - gUnk021D3414 = gUnk02103B4E[temp * 3] << 0xC; - gUnk021D3418 = gUnk02103B50[temp * 3] << 0xC; + UNK_021D3410 = temp; + UNK_021D3400 = UNK_02103B4C[temp * 3] << 0xC; + UNK_021D3414 = UNK_02103B4E[temp * 3] << 0xC; + UNK_021D3418 = UNK_02103B50[temp * 3] << 0xC; } ARM_FUNC void GX_LoadTex(void *src, u32 offset, u32 size){ void *temp; - if (!gUnk021D3414) + if (!UNK_021D3414) { - temp = (void *)(gUnk021D3400 + offset); + temp = (void *)(UNK_021D3400 + offset); } else { - if ((offset + size) < gUnk021D3418) + if ((offset + size) < UNK_021D3418) { - temp = (void *)(gUnk021D3400 + offset); + temp = (void *)(UNK_021D3400 + offset); } - else if (offset >= gUnk021D3418) + else if (offset >= UNK_021D3418) { - temp = (void *)(gUnk021D3414 + offset - gUnk021D3418); + temp = (void *)(UNK_021D3414 + offset - UNK_021D3418); } else { - void *temp2 = (void *)gUnk021D3414; - u32 temp1 = gUnk021D3418 - offset; - temp = (void *)(gUnk021D3400 + offset); - _GX_Load_32(gUnk02106814, src, temp, temp1); - _GX_Load_32_Async(gUnk02106814, (void *)((u8 *)src + temp1), temp2, (size - temp1), NULL, NULL); + void *temp2 = (void *)UNK_021D3414; + u32 temp1 = UNK_021D3418 - offset; + temp = (void *)(UNK_021D3400 + offset); + _GX_Load_32(UNK_02106814, src, temp, temp1); + _GX_Load_32_Async(UNK_02106814, (void *)((u8 *)src + temp1), temp2, (size - temp1), NULL, NULL); return; } } - _GX_Load_32_Async(gUnk02106814, src, temp, size, NULL, NULL); + _GX_Load_32_Async(UNK_02106814, src, temp, size, NULL, NULL); } ARM_FUNC void GX_EndLoadTex(){ - if (gUnk02106814 != -1) - MI_WaitDma(gUnk02106814); - GX_SetBankForTex(gUnk021D3410); - gUnk021D3418 = 0x0; - gUnk021D3414 = 0x0; - gUnk021D3400 = 0x0; - gUnk021D3410 = 0x0; + if (UNK_02106814 != -1) + MI_WaitDma(UNK_02106814); + GX_SetBankForTex(UNK_021D3410); + UNK_021D3418 = 0x0; + UNK_021D3414 = 0x0; + UNK_021D3400 = 0x0; + UNK_021D3410 = 0x0; } ARM_FUNC void GX_BeginLoadTexPltt(){ s32 temp = GX_ResetBankForTexPltt(); - gUnk021D3408 = temp; - gUnk021D3404 = gUnk02103B3C[temp >> 4] << 0xC; + UNK_021D3408 = temp; + UNK_021D3404 = UNK_02103B3C[temp >> 4] << 0xC; } ARM_FUNC void GX_LoadTexPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D3404 + offset), size, NULL, NULL); + _GX_Load_32_Async(UNK_02106814, src, (void *)(UNK_021D3404 + offset), size, NULL, NULL); } ARM_FUNC void GX_EndLoadTexPltt(){ - if (gUnk02106814 != -1) - MI_WaitDma(gUnk02106814); - GX_SetBankForTexPltt(gUnk021D3408); - gUnk021D3408 = 0x0; - gUnk021D3404 = 0x0; + if (UNK_02106814 != -1) + MI_WaitDma(UNK_02106814); + GX_SetBankForTexPltt(UNK_021D3408); + UNK_021D3408 = 0x0; + UNK_021D3404 = 0x0; } ARM_FUNC void GX_BeginLoadClearImage(){ s32 temp = GX_ResetBankForClearImage(); - gUnk021D33FC = temp; + UNK_021D33FC = temp; switch (temp) { case 2: case 3: - gUnk021D340C = 0x6800000; + UNK_021D340C = 0x6800000; return; case 8: case 12: - gUnk021D340C = 0x6840000; + UNK_021D340C = 0x6840000; return; case 1: - gUnk021D340C = 0x67E0000; + UNK_021D340C = 0x67E0000; return; case 4: - gUnk021D340C = 0x6820000; + UNK_021D340C = 0x6820000; } } ARM_FUNC void GX_LoadClearImageColor(void *src, u32 size){ - _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D340C), size, NULL, NULL); + _GX_Load_32_Async(UNK_02106814, src, (void *)(UNK_021D340C), size, NULL, NULL); } ARM_FUNC void GX_LoadClearImageDepth(void *src, u32 size){ - _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D340C + 0x20000), size, NULL, NULL); + _GX_Load_32_Async(UNK_02106814, src, (void *)(UNK_021D340C + 0x20000), size, NULL, NULL); } ARM_FUNC void GX_EndLoadClearImage(){ - if (gUnk02106814 != -1) - MI_WaitDma(gUnk02106814); - GX_SetBankForClearImage(gUnk021D33FC); - gUnk021D33FC = 0x0; - gUnk021D340C = 0x0; + if (UNK_02106814 != -1) + MI_WaitDma(UNK_02106814); + GX_SetBankForClearImage(UNK_021D33FC); + UNK_021D33FC = 0x0; + UNK_021D340C = 0x0; } diff --git a/arm9/lib/src/GX_state.c b/arm9/lib/src/GX_state.c index 38968523..79a53ee7 100644 --- a/arm9/lib/src/GX_state.c +++ b/arm9/lib/src/GX_state.c @@ -2,22 +2,22 @@ #include "main.h" #include "gx.h" -extern struct VRAM_banks gUnk021D33C4; +extern struct VRAM_banks UNK_021D33C4; ARM_FUNC void GX_InitGXState(){ - gUnk021D33C4.var00 = 0x0; - gUnk021D33C4.var02 = 0x0; - gUnk021D33C4.var04 = 0x0; - gUnk021D33C4.var06 = 0x0; - gUnk021D33C4.var08 = 0x0; - gUnk021D33C4.var0A = 0x0; - gUnk021D33C4.var0C = 0x0; - gUnk021D33C4.var0E = 0x0; - gUnk021D33C4.var10 = 0x0; - gUnk021D33C4.var12 = 0x0; - gUnk021D33C4.var14 = 0x0; - gUnk021D33C4.var16 = 0x0; - gUnk021D33C4.var18 = 0x0; + UNK_021D33C4.var00 = 0x0; + UNK_021D33C4.var02 = 0x0; + UNK_021D33C4.var04 = 0x0; + UNK_021D33C4.var06 = 0x0; + UNK_021D33C4.var08 = 0x0; + UNK_021D33C4.var0A = 0x0; + UNK_021D33C4.var0C = 0x0; + UNK_021D33C4.var0E = 0x0; + UNK_021D33C4.var10 = 0x0; + UNK_021D33C4.var12 = 0x0; + UNK_021D33C4.var14 = 0x0; + UNK_021D33C4.var16 = 0x0; + UNK_021D33C4.var18 = 0x0; SETREG32(HW_REG_VRAMCNT_A, 0x0); SETREG8(HW_REG_VRAMCNT_E, 0x0); SETREG8(HW_REG_VRAMCNT_F, 0x0); diff --git a/arm9/lib/src/GX_vramcnt.c b/arm9/lib/src/GX_vramcnt.c index 24862470..fdedca46 100644 --- a/arm9/lib/src/GX_vramcnt.c +++ b/arm9/lib/src/GX_vramcnt.c @@ -2,8 +2,8 @@ #include "main.h" #include "gx.h" -extern u16 gUnk021D33BC; -extern struct VRAM_banks gUnk021D33C4; +extern u16 UNK_021D33BC; +extern struct VRAM_banks UNK_021D33C4; ARM_FUNC void GX_VRAMCNT_SetLCDC_(u32 mask){ if (mask & (0x1 << 0)) @@ -27,8 +27,8 @@ ARM_FUNC void GX_VRAMCNT_SetLCDC_(u32 mask){ } ARM_FUNC void GX_SetBankForBG(s32 bg){ - gUnk021D33C4.var00 = (u16)(~bg & (gUnk021D33C4.var00 | gUnk021D33C4.var02)); - gUnk021D33C4.var02 = bg; + UNK_021D33C4.var00 = (u16)(~bg & (UNK_021D33C4.var00 | UNK_021D33C4.var02)); + UNK_021D33C4.var02 = bg; switch (bg) { case 8: @@ -96,12 +96,12 @@ ARM_FUNC void GX_SetBankForBG(s32 bg){ default: break; } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC void GX_SetBankForOBJ(s32 obj){ - gUnk021D33C4.var00 = (u16)(~obj & (gUnk021D33C4.var00 | gUnk021D33C4.var04)); - gUnk021D33C4.var04 = obj; + UNK_021D33C4.var00 = (u16)(~obj & (UNK_021D33C4.var00 | UNK_021D33C4.var04)); + UNK_021D33C4.var04 = obj; switch (obj) { case 3: @@ -135,12 +135,12 @@ ARM_FUNC void GX_SetBankForOBJ(s32 obj){ default: break; } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC void GX_SetBankForBGExtPltt(s32 bgextpltt){ - gUnk021D33C4.var00 = (u16)(~bgextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var0E)); - gUnk021D33C4.var0E = bgextpltt; + UNK_021D33C4.var00 = (u16)(~bgextpltt & (UNK_021D33C4.var00 | UNK_021D33C4.var0E)); + UNK_021D33C4.var0E = bgextpltt; switch (bgextpltt) { case 0x10: @@ -161,12 +161,12 @@ ARM_FUNC void GX_SetBankForBGExtPltt(s32 bgextpltt){ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000); break; } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC void GX_SetBankForOBJExtPltt(s32 objextpltt){ - gUnk021D33C4.var00 = (u16)(~objextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var10)); - gUnk021D33C4.var10 = objextpltt; + UNK_021D33C4.var00 = (u16)(~objextpltt & (UNK_021D33C4.var00 | UNK_021D33C4.var10)); + UNK_021D33C4.var10 = objextpltt; switch (objextpltt) { case 32: @@ -181,12 +181,12 @@ ARM_FUNC void GX_SetBankForOBJExtPltt(s32 objextpltt){ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000); break; } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC void GX_SetBankForTex(s32 tex){ - gUnk021D33C4.var00 = (u16)(~tex & (gUnk021D33C4.var00 | gUnk021D33C4.var08)); - gUnk021D33C4.var08 = tex; + UNK_021D33C4.var00 = (u16)(~tex & (UNK_021D33C4.var00 | UNK_021D33C4.var08)); + UNK_021D33C4.var08 = tex; if (tex == 0) { SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & 0x0000CFFE); @@ -244,12 +244,12 @@ ARM_FUNC void GX_SetBankForTex(s32 tex){ break; } } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC void GX_SetBankForTexPltt(s32 texpltt){ - gUnk021D33C4.var00 = (u16)(~texpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var0A)); - gUnk021D33C4.var0A = texpltt; + UNK_021D33C4.var00 = (u16)(~texpltt & (UNK_021D33C4.var00 | UNK_021D33C4.var0A)); + UNK_021D33C4.var0A = texpltt; switch (texpltt) { case 0: //needed to match @@ -270,12 +270,12 @@ ARM_FUNC void GX_SetBankForTexPltt(s32 texpltt){ SETREG8(HW_REG_VRAMCNT_G, 0x83); break; } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC void GX_SetBankForClearImage(s32 clearimage){ - gUnk021D33C4.var00 = (u16)(~clearimage & (gUnk021D33C4.var00 | gUnk021D33C4.var0C)); - gUnk021D33C4.var0C = clearimage; + UNK_021D33C4.var00 = (u16)(~clearimage & (UNK_021D33C4.var00 | UNK_021D33C4.var0C)); + UNK_021D33C4.var0C = clearimage; switch (clearimage) { case 3: @@ -301,12 +301,12 @@ ARM_FUNC void GX_SetBankForClearImage(s32 clearimage){ SETREG8(HW_REG_VRAMCNT_C, 0x9B); SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x4000); } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC void GX_SetBankForARM7(s32 arm7){ - gUnk021D33C4.var00 = (u16)(~arm7 & (gUnk021D33C4.var00 | gUnk021D33C4.var06)); - gUnk021D33C4.var06 = arm7; + UNK_021D33C4.var00 = (u16)(~arm7 & (UNK_021D33C4.var00 | UNK_021D33C4.var06)); + UNK_021D33C4.var06 = arm7; switch (arm7) { case 0: //needed to match @@ -321,17 +321,17 @@ ARM_FUNC void GX_SetBankForARM7(s32 arm7){ case 8: SETREG8(HW_REG_VRAMCNT_D, 0x82); } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC void GX_SetBankForLCDC(s32 lcdc){ - gUnk021D33C4.var00 |= lcdc; + UNK_021D33C4.var00 |= lcdc; GX_VRAMCNT_SetLCDC_(lcdc); } ARM_FUNC void GX_SetBankForSubBG(s32 subbg){ - gUnk021D33C4.var00 = (u16)(~subbg & (gUnk021D33C4.var00 | gUnk021D33C4.var12)); - gUnk021D33C4.var12 = subbg; + UNK_021D33C4.var00 = (u16)(~subbg & (UNK_021D33C4.var00 | UNK_021D33C4.var12)); + UNK_021D33C4.var12 = subbg; switch (subbg) { case 0: //needed to match @@ -344,13 +344,13 @@ ARM_FUNC void GX_SetBankForSubBG(s32 subbg){ case 128: SETREG8(HW_REG_VRAMCNT_H, 0x81); } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC void GX_SetBankForSubOBJ(s32 subobj){ - gUnk021D33C4.var00 = (u16)(~subobj & (gUnk021D33C4.var00 | gUnk021D33C4.var14)); - gUnk021D33C4.var14 = subobj; + UNK_021D33C4.var00 = (u16)(~subobj & (UNK_021D33C4.var00 | UNK_021D33C4.var14)); + UNK_021D33C4.var14 = subobj; switch (subobj) { case 8: @@ -362,12 +362,12 @@ ARM_FUNC void GX_SetBankForSubOBJ(s32 subobj){ case 0: //needed to match break; } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){ - gUnk021D33C4.var00 = (u16)(~subbgextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var16)); - gUnk021D33C4.var16 = subbgextpltt; + UNK_021D33C4.var00 = (u16)(~subbgextpltt & (UNK_021D33C4.var00 | UNK_021D33C4.var16)); + UNK_021D33C4.var16 = subbgextpltt; switch (subbgextpltt) { case 128: @@ -378,12 +378,12 @@ ARM_FUNC void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000); break; } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){ - gUnk021D33C4.var00 = (u16)(~subobjextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var18)); - gUnk021D33C4.var18 = subobjextpltt; + UNK_021D33C4.var00 = (u16)(~subobjextpltt & (UNK_021D33C4.var00 | UNK_021D33C4.var18)); + UNK_021D33C4.var18 = subobjextpltt; switch (subobjextpltt) { case 256: @@ -394,63 +394,63 @@ ARM_FUNC void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000); break; } - GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00); + GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } ARM_FUNC u32 FUN_020C6130(u16 *ptr){ u16 temp = *ptr; *ptr = 0; - gUnk021D33C4.var00 |= temp; + UNK_021D33C4.var00 |= temp; GX_VRAMCNT_SetLCDC_(temp); return temp; } ARM_FUNC u32 GX_ResetBankForBG(){ - return FUN_020C6130(&gUnk021D33C4.var02); + return FUN_020C6130(&UNK_021D33C4.var02); } ARM_FUNC u32 GX_ResetBankForOBJ(){ - return FUN_020C6130(&gUnk021D33C4.var04); + return FUN_020C6130(&UNK_021D33C4.var04); } ARM_FUNC u32 GX_ResetBankForBGExtPltt(){ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000); - return FUN_020C6130(&gUnk021D33C4.var0E); + return FUN_020C6130(&UNK_021D33C4.var0E); } ARM_FUNC u32 GX_ResetBankForOBJExtPltt(){ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000); - return FUN_020C6130(&gUnk021D33C4.var10); + return FUN_020C6130(&UNK_021D33C4.var10); } ARM_FUNC u32 GX_ResetBankForTex(){ - return FUN_020C6130(&gUnk021D33C4.var08); + return FUN_020C6130(&UNK_021D33C4.var08); } ARM_FUNC u32 GX_ResetBankForTexPltt(){ - return FUN_020C6130(&gUnk021D33C4.var0A); + return FUN_020C6130(&UNK_021D33C4.var0A); } ARM_FUNC u32 GX_ResetBankForClearImage(){ - return FUN_020C6130(&gUnk021D33C4.var0C); + return FUN_020C6130(&UNK_021D33C4.var0C); } ARM_FUNC u32 GX_ResetBankForSubBG(){ - return FUN_020C6130(&gUnk021D33C4.var12); + return FUN_020C6130(&UNK_021D33C4.var12); } ARM_FUNC u32 FUN_020C605C(){ - return FUN_020C6130(&gUnk021D33C4.var14); + return FUN_020C6130(&UNK_021D33C4.var14); } ARM_FUNC u32 FUN_020C6034(){ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000); - return FUN_020C6130(&gUnk021D33C4.var16); + return FUN_020C6130(&UNK_021D33C4.var16); } ARM_FUNC u32 GX_ResetBankForSubOBJ(){ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000); - return FUN_020C6130(&gUnk021D33C4.var18); + return FUN_020C6130(&UNK_021D33C4.var18); } ARM_FUNC u32 FUN_020C5F28(u16 *ptr){ @@ -474,106 +474,106 @@ ARM_FUNC u32 FUN_020C5F28(u16 *ptr){ SETREG8(HW_REG_VRAMCNT_H, 0x0); if (temp & (0x1 << 8)) SETREG8(HW_REG_VRAMCNT_I, 0x0); - OSi_UnlockVram((u16)temp, gUnk021D33BC); + OSi_UnlockVram((u16)temp, UNK_021D33BC); return temp; } ARM_FUNC u32 disableBankForX_(){ - return FUN_020C5F28(&gUnk021D33C4.var02); + return FUN_020C5F28(&UNK_021D33C4.var02); } ARM_FUNC u32 GX_DisableBankForOBJExtPltt_2(){ - return FUN_020C5F28(&gUnk021D33C4.var04); + return FUN_020C5F28(&UNK_021D33C4.var04); } ARM_FUNC u32 GX_DisableBankForBGExtPltt(){ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000); - return FUN_020C5F28(&gUnk021D33C4.var0E); + return FUN_020C5F28(&UNK_021D33C4.var0E); } ARM_FUNC u32 GX_DisableBankForOBJExtPltt(){ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000); - return FUN_020C5F28(&gUnk021D33C4.var10); + return FUN_020C5F28(&UNK_021D33C4.var10); } ARM_FUNC u32 GX_DisableBankForTexPltt_2(){ - return FUN_020C5F28(&gUnk021D33C4.var08); + return FUN_020C5F28(&UNK_021D33C4.var08); } ARM_FUNC u32 GX_DisableBankForTexPltt(){ - return FUN_020C5F28(&gUnk021D33C4.var0A); + return FUN_020C5F28(&UNK_021D33C4.var0A); } ARM_FUNC u32 GX_DisableBankForClearImage(){ - return FUN_020C5F28(&gUnk021D33C4.var0C); + return FUN_020C5F28(&UNK_021D33C4.var0C); } ARM_FUNC u32 GX_DisableBankForARM7(){ - return FUN_020C5F28(&gUnk021D33C4.var06); + return FUN_020C5F28(&UNK_021D33C4.var06); } ARM_FUNC u32 GX_DisableBankForLCDC(){ - return FUN_020C5F28(&gUnk021D33C4.var00); + return FUN_020C5F28(&UNK_021D33C4.var00); } ARM_FUNC u32 GX_DisableBankForSubBGExtPltt(){ - return FUN_020C5F28(&gUnk021D33C4.var12); + return FUN_020C5F28(&UNK_021D33C4.var12); } ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt_2(){ - return FUN_020C5F28(&gUnk021D33C4.var14); + return FUN_020C5F28(&UNK_021D33C4.var14); } ARM_FUNC u32 FUN_020C5E04(){ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000); - return FUN_020C5F28(&gUnk021D33C4.var16); + return FUN_020C5F28(&UNK_021D33C4.var16); } ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt(){ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000); - return FUN_020C5F28(&gUnk021D33C4.var18); + return FUN_020C5F28(&UNK_021D33C4.var18); } ARM_FUNC u32 GX_GetBankForBGExtPltt_2(){ - return gUnk021D33C4.var02; + return UNK_021D33C4.var02; } ARM_FUNC u32 GX_GetBankForOBJ(){ - return gUnk021D33C4.var04; + return UNK_021D33C4.var04; } ARM_FUNC u32 GX_GetBankForBGExtPltt(){ - return gUnk021D33C4.var0E; + return UNK_021D33C4.var0E; } ARM_FUNC u32 GX_GetBankForOBJExtPltt(){ - return gUnk021D33C4.var10; + return UNK_021D33C4.var10; } ARM_FUNC u32 FUN_020C5D8C(){ - return gUnk021D33C4.var08; + return UNK_021D33C4.var08; } ARM_FUNC u32 GX_GetBankForTexPltt(){ - return gUnk021D33C4.var0A; + return UNK_021D33C4.var0A; } ARM_FUNC u32 GX_GetBankForLCDC(){ - return gUnk021D33C4.var00; + return UNK_021D33C4.var00; } ARM_FUNC u32 GX_GetBankForSubBGExtPltt_2(){ - return gUnk021D33C4.var12; + return UNK_021D33C4.var12; } ARM_FUNC u32 GX_GetBankForSubOBJ(){ - return gUnk021D33C4.var14; + return UNK_021D33C4.var14; } ARM_FUNC u32 GX_GetBankForSubBGExtPltt(){ - return gUnk021D33C4.var16; + return UNK_021D33C4.var16; } ARM_FUNC u32 GX_GetBankForSubOBJExtPltt(){ - return gUnk021D33C4.var18; + return UNK_021D33C4.var18; } diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt index 6735579a..587556dc 100644 --- a/arm9/undefined_syms.txt +++ b/arm9/undefined_syms.txt @@ -8,7 +8,7 @@ SDK_IRQ_STACKSIZE = 0x00000400; FX_AtanTable_ = 0x02103A38; // OS gUnk02106810 = 0x02106810; -gUnk02106814 = 0x02106814; +UNK_02106814 = 0x02106814; OSi_IrqCallbackInfoIndex = 0x02106818; OSi_ConsoleTypeCache = 0x02106828; // DGT @@ -23,29 +23,29 @@ SDK_OVERLAY_DIGEST_END = 0x02106F84; //GX gUnk021D33BC = 0x021D33BC; gUnk021D33C0 = 0x021D33C0; -gUnk021D33C4 = 0x021D33C4; +UNK_021D33C4 = 0x021D33C4; -gUnk021D33E0 = 0x021D33E0; -gUnk021D33E4 = 0x021D33E4; -gUnk021D33E8 = 0x021D33E8; -gUnk021D33EC = 0x021D33EC; -gUnk021D33F0 = 0x021D33F0; -gUnk021D33F4 = 0x021D33F4; -gUnk021D33F8 = 0x021D33F8; -gUnk021D33FC = 0x021D33FC; -gUnk021D3400 = 0x021D3400; -gUnk021D3404 = 0x021D3404; -gUnk021D3408 = 0x021D3408; -gUnk021D340C = 0x021D340C; -gUnk021D3410 = 0x021D3410; -gUnk021D3414 = 0x021D3414; -gUnk021D3418 = 0x021D3418; +UNK_021D33E0 = 0x021D33E0; +UNK_021D33E4 = 0x021D33E4; +UNK_021D33E8 = 0x021D33E8; +UNK_021D33EC = 0x021D33EC; +UNK_021D33F0 = 0x021D33F0; +UNK_021D33F4 = 0x021D33F4; +UNK_021D33F8 = 0x021D33F8; +UNK_021D33FC = 0x021D33FC; +UNK_021D3400 = 0x021D3400; +UNK_021D3404 = 0x021D3404; +UNK_021D3408 = 0x021D3408; +UNK_021D340C = 0x021D340C; +UNK_021D3410 = 0x021D3410; +UNK_021D3414 = 0x021D3414; +UNK_021D3418 = 0x021D3418; -gUnk02103B3C = 0x02103B3C; +UNK_02103B3C = 0x02103B3C; -gUnk02103B4C = 0x02103B4C; -gUnk02103B4E = 0x02103B4E; -gUnk02103B50 = 0x02103B50; +UNK_02103B4C = 0x02103B4C; +UNK_02103B4E = 0x02103B4E; +UNK_02103B50 = 0x02103B50; // Overlay FUN_021D76AC = 0x021D76AC; -- cgit v1.2.3 From 929c523340dfecbd0e3313e25d36abe47e1cc63e Mon Sep 17 00:00:00 2001 From: Made Date: Fri, 15 May 2020 06:46:25 +0200 Subject: Replace register access macros with variables --- arm9/lib/include/gx.h | 90 ---------------- arm9/lib/src/GX.c | 65 ++++++----- arm9/lib/src/GX_bgcnt.c | 64 +++++------ arm9/lib/src/GX_g3_util.c | 34 +++--- arm9/lib/src/GX_g3imm.c | 12 +-- arm9/lib/src/GX_g3x.c | 140 ++++++++++++------------ arm9/lib/src/GX_state.c | 10 +- arm9/lib/src/GX_vramcnt.c | 268 +++++++++++++++++++++++----------------------- 8 files changed, 296 insertions(+), 387 deletions(-) diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 5abc2693..58e4c35f 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -20,98 +20,8 @@ void MIi_CpuCopy32(void *src, void *dst, u32 size); void OSi_UnlockVram(u16, u16); void MIi_CpuClear32(u32, void *, u32); -//Todos before PR //TODO: Add defines for GX commands, add structs/unions for HW registers -#define HW_REG_DIV_NUMER 0x04000290 -#define HW_REG_DIV_DENOM 0x04000298 - -#define HW_REG_MTX_MODE 0x04000440 -#define HW_REG_MTX_LOAD_4x4 0x04000458 -#define HW_REG_MTX_LOAD_4x3 0x0400045C -#define HW_REG_MTX_MULT_3x3 0x04000468 - -#define HW_REG_END_VTXS 0x04000504 -#define HW_REG_GXSTAT 0x04000600 -#define HW_REG_DISP3DCNT 0x04000060 -#define HW_REG_BG0HOFS 0x04000010 -#define HW_REG_CLEAR_COLOR 0x04000350 -#define HW_REG_CLEAR_DEPTH 0x04000354 -#define HW_REG_CLRIMAGE_OFFSET 0x04000356 -#define HW_REG_FOG_COLOR 0x04000358 -#define HW_REG_FOG_OFFSET 0x0400035C -#define HW_REG_BG0CNT 0x04000008 -#define HW_REG_POLYGON_ATTR 0x040004A4 -#define HW_REG_TEXIMAGE_PARAM 0x040004A8 -#define HW_REG_PLTT_BASE 0x040004AC - -#define HW_REG_POWCNT1 0x04000304 - -#define HW_REG_GXFIFO 0x04000400 -#define HW_REG_MTX_IDENTITY 0x04000454 -#define HW_REG_MTX_POP 0x04000448 -#define HW_REG_MTX_MODE 0x04000440 - -#define HW_REG_CLIPMTX_RESULT 0x04000640 -#define HW_REG_VECMTX_RESULT 0x04000680 - -#define HW_REG_EDGE_COLOR 0x04000330 -#define HW_REG_FOG_TABLE 0x04000360 - -#define HW_REG_SHININESS 0x040004D0 - -#define HW_REG_MASTER_BRIGHT 0x0400006C - -#define HW_REG_VRAMCNT_A 0x04000240 -#define HW_REG_VRAMCNT_B 0x04000241 -#define HW_REG_VRAMCNT_C 0x04000242 -#define HW_REG_VRAMCNT_D 0x04000243 -#define HW_REG_VRAMCNT_E 0x04000244 -#define HW_REG_VRAMCNT_F 0x04000245 -#define HW_REG_VRAMCNT_G 0x04000246 -#define HW_REG_WRAMCNT 0x04000247 -#define HW_REG_VRAMCNT_H 0x04000248 -#define HW_REG_VRAMCNT_I 0x04000249 - -#define HW_REG_DISPCNT 0x04000000 -#define HW_REG_DISPSTAT 0x04000004 -#define HW_REG_DISPCNT_2D 0x04001000 - -#define HW_REG_DISP3DCNT 0x04000060 - -#define HW_REG_BG2PA_A 0x04000020 -#define HW_REG_BG2PD_A 0x04000026 -#define HW_REG_BG3PA_A 0x04000030 -#define HW_REG_BG3PD_A 0x04000036 -#define HW_REG_BG2PA_B 0x04001020 -#define HW_REG_BG2PD_B 0x04001026 -#define HW_REG_BG3PA_B 0x04001030 -#define HW_REG_BG3PD_B 0x04001036 - -#define HW_REG_BG0CNT_A 0x04000008 -#define HW_REG_BG1CNT_A 0x0400000A -#define HW_REG_BG2CNT_A 0x0400000C -#define HW_REG_BG3CNT_A 0x0400000E - -#define HW_REG_BG0CNT_B 0x04001008 -#define HW_REG_BG1CNT_B 0x0400100A -#define HW_REG_BG2CNT_B 0x0400100C -#define HW_REG_BG3CNT_B 0x0400100E - -#define HW_REG_DISPCNT_A 0x04000000 -#define HW_REG_DISPCNT_B 0x04001000 - -//TODO: wait for register commit and replace these -#define SETREG8(x, y) ((*(vu8 *)x) = y) -#define SETREG16(x, y) ((*(vu16 *)x) = y) -#define SETREG32(x, y) ((*(vu32 *)x) = y) -#define SETREG64(x, y) ((*(vu64 *)x) = y) - -#define READREG8(x) (*(vu8 *)x) -#define READREG16(x) (*(vu16 *)x) -#define READREG32(x) (*(vu32 *)x) -#define READREG64(x) (*(vu64 *)x) - static inline void _GX_Load_16(u32 var, void *src, void *dst, u32 size){ if (var != -1 && size > 0x1C) { diff --git a/arm9/lib/src/GX.c b/arm9/lib/src/GX.c index ca3e4604..883dfe69 100644 --- a/arm9/lib/src/GX.c +++ b/arm9/lib/src/GX.c @@ -8,9 +8,9 @@ extern u32 UNK_02106814; extern u16 UNK_02106810; ARM_FUNC void GX_Init(){ - SETREG16(HW_REG_POWCNT1, READREG16(HW_REG_POWCNT1) | 0x8000); - SETREG16(HW_REG_POWCNT1, (READREG16(HW_REG_POWCNT1) & ~0x20E) | 0x20E); - SETREG16(HW_REG_POWCNT1, READREG16(HW_REG_POWCNT1) | 0x1); + reg_GX_POWCNT |= 0x8000; + reg_GX_POWCNT = (reg_GX_POWCNT & ~0x20E) | 0x20E; + reg_GX_POWCNT = reg_GX_POWCNT | 0x1; GX_InitGXState(); u32 temp; while (UNK_021D33BC == 0) @@ -22,88 +22,87 @@ ARM_FUNC void GX_Init(){ } UNK_021D33BC = temp; } - SETREG16(HW_REG_DISPSTAT, 0x0); - SETREG32(HW_REG_DISPCNT, 0x0); + reg_GX_DISPSTAT = 0x0; + reg_GX_DISPCNT = 0x0; if (UNK_02106814 != -1) { - MI_DmaFill32(UNK_02106814, (void *)HW_REG_BG0CNT_A, 0x0, 0x60); - SETREG16(HW_REG_MASTER_BRIGHT, 0x0); - MI_DmaFill32(UNK_02106814, (void *)HW_REG_DISPCNT_2D, 0x0, 0x70); + MI_DmaFill32(UNK_02106814, (void *)®_G2_BG0CNT, 0x0, 0x60); + reg_GX_MASTER_BRIGHT = 0x0; + MI_DmaFill32(UNK_02106814, (void *)®_GXS_DB_DISPCNT, 0x0, 0x70); } else { - MIi_CpuClear32(0x0, (void *)HW_REG_BG0CNT_A, 0x60); - SETREG16(HW_REG_MASTER_BRIGHT, 0x0); - MIi_CpuClear32(0x0, (void *)HW_REG_DISPCNT_2D, 0x70); + MIi_CpuClear32(0x0, (void *)®_G2_BG0CNT, 0x60); + reg_GX_MASTER_BRIGHT = 0x0; + MIi_CpuClear32(0x0, (void *)®_GXS_DB_DISPCNT, 0x70); } - SETREG16(HW_REG_BG2PA_A, 0x100); - SETREG16(HW_REG_BG2PD_A, 0x100); - SETREG16(HW_REG_BG3PA_A, 0x100); - SETREG16(HW_REG_BG3PD_A, 0x100); - SETREG16(HW_REG_BG2PA_B, 0x100); - SETREG16(HW_REG_BG2PD_B, 0x100); - SETREG16(HW_REG_BG3PA_B, 0x100); - SETREG16(HW_REG_BG3PD_B, 0x100); + reg_G2_BG2PA = 0x100; + reg_G2_BG2PD = 0x100; + reg_G2_BG3PA = 0x100; + reg_G2_BG3PD = 0x100; + reg_G2S_DB_BG2PA = 0x100; + reg_G2S_DB_BG2PD = 0x100; + reg_G2S_DB_BG3PA = 0x100; + reg_G2S_DB_BG3PD = 0x100; } ARM_FUNC u32 GX_HBlankIntr(u32 enable){ - u32 temp = READREG16(HW_REG_DISPSTAT) & 0x10; + u32 temp = reg_GX_DISPSTAT & 0x10; if (enable) { - SETREG16(HW_REG_DISPSTAT, READREG16(HW_REG_DISPSTAT) | 0x10); + reg_GX_DISPSTAT |= 0x10; } else { - SETREG16(HW_REG_DISPSTAT, READREG16(HW_REG_DISPSTAT) & ~0x10); + reg_GX_DISPSTAT &= ~0x10; } return temp; } ARM_FUNC u32 GX_VBlankIntr(u32 enable){ - u32 temp = READREG16(HW_REG_DISPSTAT) & 0x8; + u32 temp = reg_GX_DISPSTAT & 0x8; if (enable) { - SETREG16(HW_REG_DISPSTAT, READREG16(HW_REG_DISPSTAT) | 0x8); + reg_GX_DISPSTAT |= 0x8; } else { - SETREG16(HW_REG_DISPSTAT, READREG16(HW_REG_DISPSTAT) & ~0x8); + reg_GX_DISPSTAT &= ~0x8; } return temp; } ARM_FUNC void GX_DispOff(){ - u32 temp = READREG32(HW_REG_DISPCNT); + u32 temp = reg_GX_DISPCNT; UNK_02106810 = 0x0; UNK_021D33C0 = (temp & 0x30000) >> 0x10; - SETREG32(HW_REG_DISPCNT, temp & ~0x30000); + reg_GX_DISPCNT = temp & ~0x30000; } ARM_FUNC void GX_DispOn(){ UNK_02106810 = 0x1; if (UNK_021D33C0) { - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x30000 | (UNK_021D33C0 << 0x10)); - + reg_GX_DISPCNT = reg_GX_DISPCNT & ~0x30000 | (UNK_021D33C0 << 0x10); } else { - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x10000); + reg_GX_DISPCNT = reg_GX_DISPCNT | 0x10000; } } ARM_FUNC void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3){ - u32 temp2 = READREG32(HW_REG_DISPCNT); + u32 temp2 = reg_GX_DISPCNT; UNK_021D33C0 = mode1; if (!UNK_02106810) mode1 = 0; - SETREG32(HW_REG_DISPCNT, (mode2 | ((temp2 & 0xFFF0FFF0) | (mode1 << 0x10))) | (mode3 << 0x3)); + reg_GX_DISPCNT = (mode2 | ((temp2 & 0xFFF0FFF0) | (mode1 << 0x10))) | (mode3 << 0x3); if (!UNK_021D33C0) UNK_02106810 = 0x0; } ARM_FUNC void GXS_SetGraphicsMode(u32 mode){ - SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x7 | mode); + reg_GXS_DB_DISPCNT = reg_GXS_DB_DISPCNT & ~0x7 | mode; } ARM_FUNC void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness){ diff --git a/arm9/lib/src/GX_bgcnt.c b/arm9/lib/src/GX_bgcnt.c index 1eeffab6..63fe87b1 100644 --- a/arm9/lib/src/GX_bgcnt.c +++ b/arm9/lib/src/GX_bgcnt.c @@ -3,27 +3,27 @@ #include "gx.h" ARM_FUNC void *G2_GetBG0ScrPtr(){ - u32 temp = (((READREG16(HW_REG_BG0CNT_A) & 0x1F00) >> 0x8) << 0xB); - return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10) + temp); + u32 temp = (((reg_G2_BG0CNT & 0x1F00) >> 0x8) << 0xB); + return (void *)(0x6000000 + (((reg_GX_DISPCNT & 0x38000000) >> 0x1B) << 0x10) + temp); } ARM_FUNC void *G2S_GetBG0ScrPtr(){ - return (void *)(0x6200000 + (((READREG16(HW_REG_BG0CNT_B) & 0x1F00) >> 0x8) << 0xB)); + return (void *)(0x6200000 + (((reg_G2S_DB_BG0CNT & 0x1F00) >> 0x8) << 0xB)); } ARM_FUNC void *G2_GetBG1ScrPtr(){ - u32 temp = (((READREG16(HW_REG_BG1CNT_A) & 0x1F00) >> 0x8) << 0xB); - return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10) + temp); + u32 temp = (((reg_G2_BG1CNT & 0x1F00) >> 0x8) << 0xB); + return (void *)(0x6000000 + (((reg_GX_DISPCNT & 0x38000000) >> 0x1B) << 0x10) + temp); } ARM_FUNC void *G2S_GetBG1ScrPtr(){ - return (void *)(0x6200000 + (((READREG16(HW_REG_BG1CNT_B) & 0x1F00) >> 0x8) << 0xB)); + return (void *)(0x6200000 + (((reg_G2S_DB_BG1CNT & 0x1F00) >> 0x8) << 0xB)); } ARM_FUNC void *G2_GetBG2ScrPtr(){ - u32 temp12 = (READREG32(HW_REG_DISPCNT_A) & 0x7); - u32 temp3 = READREG16(HW_REG_BG2CNT_A); - u32 temp2 = (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10); + u32 temp12 = (reg_GX_DISPCNT & 0x7); + u32 temp3 = reg_G2_BG2CNT; + u32 temp2 = (((reg_GX_DISPCNT & 0x38000000) >> 0x1B) << 0x10); u32 temp1 = ((temp3 & 0x1F00) >> 0x8); switch (temp12) { @@ -46,8 +46,8 @@ ARM_FUNC void *G2_GetBG2ScrPtr(){ } ARM_FUNC void *G2S_GetBG2ScrPtr(){ - u32 temp12 = (READREG32(HW_REG_DISPCNT_B) & 0x7); - u32 temp3 = READREG16(HW_REG_BG2CNT_B); + u32 temp12 = (reg_GXS_DB_DISPCNT & 0x7); + u32 temp3 = reg_G2S_DB_BG2CNT; u32 temp1 = ((temp3 & 0x1F00) >> 0x8); switch (temp12) { @@ -70,9 +70,9 @@ ARM_FUNC void *G2S_GetBG2ScrPtr(){ } ARM_FUNC void *G2_GetBG3ScrPtr(){ - u32 temp12 = (READREG32(HW_REG_DISPCNT_A) & 0x7); - u32 temp3 = READREG16(HW_REG_BG3CNT_A); - u32 temp2 = (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10); + u32 temp12 = (reg_GX_DISPCNT & 0x7); + u32 temp3 = reg_G2_BG3CNT; + u32 temp2 = (((reg_GX_DISPCNT & 0x38000000) >> 0x1B) << 0x10); u32 temp1 = ((temp3 & 0x1F00) >> 0x8); switch (temp12) { @@ -95,8 +95,8 @@ ARM_FUNC void *G2_GetBG3ScrPtr(){ } ARM_FUNC void *G2S_GetBG3ScrPtr(){ - u32 temp12 = (READREG32(HW_REG_DISPCNT_B) & 0x7); - u32 temp3 = READREG16(HW_REG_BG3CNT_B); + u32 temp12 = (reg_GXS_DB_DISPCNT & 0x7); + u32 temp3 = reg_G2S_DB_BG3CNT; u32 temp1 = ((temp3 & 0x1F00) >> 0x8); switch (temp12) { @@ -119,29 +119,29 @@ ARM_FUNC void *G2S_GetBG3ScrPtr(){ } ARM_FUNC void *G2_GetBG0CharPtr(){ - u32 temp = (((READREG16(HW_REG_BG0CNT_A) & 0x3C) >> 0x2) << 0xE); - return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10) + temp); + u32 temp = (((reg_G2_BG0CNT & 0x3C) >> 0x2) << 0xE); + return (void *)(0x6000000 + (((reg_GX_DISPCNT & 0x7000000) >> 0x18) << 0x10) + temp); } ARM_FUNC void *G2S_GetBG0CharPtr(){ - return (void *)(0x6200000 + (((READREG16(HW_REG_BG0CNT_B) & 0x3C) >> 0x2) << 0xE)); + return (void *)(0x6200000 + (((reg_G2S_DB_BG0CNT & 0x3C) >> 0x2) << 0xE)); } ARM_FUNC void *G2_GetBG1CharPtr(){ - u32 temp = (((READREG16(HW_REG_BG1CNT_A) & 0x3C) >> 0x2) << 0xE); - return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10) + temp); + u32 temp = (((reg_G2_BG1CNT & 0x3C) >> 0x2) << 0xE); + return (void *)(0x6000000 + (((reg_GX_DISPCNT & 0x7000000) >> 0x18) << 0x10) + temp); } ARM_FUNC void *G2S_GetBG1CharPtr(){ - return (void *)(0x6200000 + (((READREG16(HW_REG_BG1CNT_B) & 0x3C) >> 0x2) << 0xE)); + return (void *)(0x6200000 + (((reg_G2S_DB_BG1CNT & 0x3C) >> 0x2) << 0xE)); } ARM_FUNC void *G2_GetBG2CharPtr(){ - s32 temp1 = (READREG32(HW_REG_DISPCNT_A) & 0x7); - u32 temp = READREG16(HW_REG_BG2CNT_A); + s32 temp1 = (reg_GX_DISPCNT & 0x7); + u32 temp = reg_G2_BG2CNT; if (temp1 < 5 || !(temp & 0x80)) { - u32 temp1 = (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10); + u32 temp1 = (((reg_GX_DISPCNT & 0x7000000) >> 0x18) << 0x10); u32 temp2 = (temp & 0x3C) >> 2; return (void *)(0x6000000 + temp1 + (temp2 << 0xE)); } @@ -152,8 +152,8 @@ ARM_FUNC void *G2_GetBG2CharPtr(){ } ARM_FUNC void *G2S_GetBG2CharPtr(){ - s32 temp1 = (READREG32(HW_REG_DISPCNT_B) & 0x7); - u32 temp = READREG16(HW_REG_BG2CNT_B); + s32 temp1 = (reg_GXS_DB_DISPCNT & 0x7); + u32 temp = reg_G2S_DB_BG2CNT; if (temp1 < 5 || !(temp & 0x80)) { u32 temp2 = ((temp & 0x3C) >> 2) << 0xE; @@ -166,11 +166,11 @@ ARM_FUNC void *G2S_GetBG2CharPtr(){ } ARM_FUNC void *G2_GetBG3CharPtr(){ - s32 temp1 = (READREG32(HW_REG_DISPCNT_A) & 0x7); - u32 temp = READREG16(HW_REG_BG3CNT_A); + s32 temp1 = (reg_GX_DISPCNT & 0x7); + u32 temp = reg_G2_BG3CNT; if (temp1 < 3 || (temp1 < 6 && !(temp & 0x80))) { - u32 temp1 = (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10); + u32 temp1 = (((reg_GX_DISPCNT & 0x7000000) >> 0x18) << 0x10); u32 temp2 = (temp & 0x3C) >> 2; return (void *)(0x6000000 + temp1 + (temp2 << 0xE)); } @@ -181,8 +181,8 @@ ARM_FUNC void *G2_GetBG3CharPtr(){ } ARM_FUNC void *G2S_GetBG3CharPtr(){ - s32 temp1 = (READREG32(HW_REG_DISPCNT_B) & 0x7); - u32 temp = READREG16(HW_REG_BG3CNT_B); + s32 temp1 = (reg_GXS_DB_DISPCNT & 0x7); + u32 temp = reg_G2S_DB_BG3CNT; if (temp1 < 3 || (temp1 < 6 && !(temp & 0x80))) { u32 temp2 = ((temp & 0x3C) >> 2) << 0xE; diff --git a/arm9/lib/src/GX_g3_util.c b/arm9/lib/src/GX_g3_util.c index 75e18589..f34e23ed 100644 --- a/arm9/lib/src/GX_g3_util.c +++ b/arm9/lib/src/GX_g3_util.c @@ -11,12 +11,12 @@ ARM_FUNC void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fovcot = FX_Div(fovcos, fovsin); if (scale != 0x1000) //!= 1.0 fovcot = (fovcot * scale) / 0x1000; - SETREG64(HW_REG_DIV_NUMER, (s64)fovcot << 0x20); - SETREG64(HW_REG_DIV_DENOM, (u32)ratio); + reg_CP_DIV_NUMER = (s64)fovcot << 0x20; + reg_CP_DIV_DENOM = (u32)ratio; if (load) { - SETREG32(HW_REG_MTX_MODE, 0x0); - reg_ptr = (vu32 *)HW_REG_MTX_LOAD_4x4; + reg_G3_MTX_MODE = 0x0; + reg_ptr = (vu32 *)®_G3_MTX_LOAD_4x4; } if (mtx) { @@ -34,8 +34,8 @@ ARM_FUNC void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, mtx->_[15] = 0x0; } temp1 = FX_GetDivResult(); - SETREG64(HW_REG_DIV_NUMER, (s64)0x1000 << 0x20); - SETREG64(HW_REG_DIV_DENOM, (u32)(near - far)); + reg_CP_DIV_NUMER = (s64)0x1000 << 0x20; + reg_CP_DIV_DENOM = (u32)(near - far); if (load) { *reg_ptr = temp1; @@ -83,8 +83,8 @@ ARM_FUNC void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 nea FX_InvAsync(right - left); if (load) { - SETREG32(HW_REG_MTX_MODE, 0x0); - reg_ptr = (vu32 *)HW_REG_MTX_LOAD_4x4; + reg_G3_MTX_MODE = 0x0; + reg_ptr = (vu32 *)®_G3_MTX_LOAD_4x4; } if (mtx) { @@ -100,8 +100,8 @@ ARM_FUNC void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 nea mtx->_[15] = scale; } temp1 = FX_GetDivResultFx64c(); - SETREG64(HW_REG_DIV_NUMER, (s64)0x1000 << 0x20); - SETREG64(HW_REG_DIV_DENOM, (u32)(top - bottom)); + reg_CP_DIV_NUMER = (s64)0x1000 << 0x20; + reg_CP_DIV_DENOM = (u32)(top - bottom); if (scale != 0x1000) temp1 = (temp1 * scale) / 0x1000; temp0 = (0x2000 * temp1 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT; @@ -118,8 +118,8 @@ ARM_FUNC void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 nea mtx->_[0] = temp0; } temp2 = FX_GetDivResultFx64c(); - SETREG64(HW_REG_DIV_NUMER, (s64)0x1000 << 0x20); - SETREG64(HW_REG_DIV_DENOM, (u32)(near - far)); + reg_CP_DIV_NUMER = (s64)0x1000 << 0x20; + reg_CP_DIV_DENOM = (u32)(near - far); if (scale != 0x1000) temp2 = (temp2 * scale) / 0x1000; temp0 = (0x2000 * temp2 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT; @@ -179,8 +179,8 @@ ARM_FUNC void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, VEC_CrossProduct(&temp, &temp1, &temp2); if (load) { - SETREG32(HW_REG_MTX_MODE, 0x2); - reg_ptr = (vu32 *)HW_REG_MTX_LOAD_4x3; + reg_G3_MTX_MODE = 0x2; + reg_ptr = (vu32 *)®_G3_MTX_LOAD_4x3; *reg_ptr = temp1.x; *reg_ptr = temp2.x; *reg_ptr = temp.x; @@ -219,7 +219,7 @@ ARM_FUNC void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, ARM_FUNC void G3_RotX(fx32 sinphi, fx32 cosphi){ vu32 *reg_ptr; - reg_ptr = (vu32 *)HW_REG_MTX_MULT_3x3; + reg_ptr = (vu32 *)®_G3_MTX_MULT_3x3; *reg_ptr = 0x1000; *reg_ptr = 0x0; *reg_ptr = 0x0; @@ -233,7 +233,7 @@ ARM_FUNC void G3_RotX(fx32 sinphi, fx32 cosphi){ ARM_FUNC void G3_RotY(fx32 sinphi, fx32 cosphi){ vu32 *reg_ptr; - reg_ptr = (vu32 *)HW_REG_MTX_MULT_3x3; + reg_ptr = (vu32 *)®_G3_MTX_MULT_3x3; *reg_ptr = cosphi; *reg_ptr = 0x0; *reg_ptr = -sinphi; @@ -247,7 +247,7 @@ ARM_FUNC void G3_RotY(fx32 sinphi, fx32 cosphi){ ARM_FUNC void G3_RotZ(fx32 sinphi, fx32 cosphi){ vu32 *reg_ptr; - reg_ptr = (vu32 *)HW_REG_MTX_MULT_3x3; + reg_ptr = (vu32 *)®_G3_MTX_MULT_3x3; *reg_ptr = cosphi; *reg_ptr = sinphi; *reg_ptr = 0x0; diff --git a/arm9/lib/src/GX_g3imm.c b/arm9/lib/src/GX_g3imm.c index f11e2927..a5c62c26 100644 --- a/arm9/lib/src/GX_g3imm.c +++ b/arm9/lib/src/GX_g3imm.c @@ -3,16 +3,16 @@ #include "gx.h" ARM_FUNC void G3_LoadMtx43(struct Mtx43 *mtx){ - SETREG32(HW_REG_GXFIFO, 0x17); - GX_SendFifo48B(mtx, (void *)HW_REG_GXFIFO); + reg_G3X_GXFIFO = 0x17; + GX_SendFifo48B(mtx, (void *)®_G3X_GXFIFO); } ARM_FUNC void G3_MultMtx43(struct Mtx43 *mtx){ - SETREG32(HW_REG_GXFIFO, 0x19); - GX_SendFifo48B(mtx, (void *)HW_REG_GXFIFO); + reg_G3X_GXFIFO = 0x19; + GX_SendFifo48B(mtx, (void *)®_G3X_GXFIFO); } ARM_FUNC void G3_MultMtx33(struct Mtx33 *mtx){ - SETREG32(HW_REG_GXFIFO, 0x1A); - MI_Copy36B(mtx, (void *)HW_REG_GXFIFO); + reg_G3X_GXFIFO = 0x1A; + MI_Copy36B(mtx, (void *)®_G3X_GXFIFO); } diff --git a/arm9/lib/src/GX_g3x.c b/arm9/lib/src/GX_g3x.c index e76adce7..5a03c4ca 100644 --- a/arm9/lib/src/GX_g3x.c +++ b/arm9/lib/src/GX_g3x.c @@ -46,190 +46,190 @@ ARM_FUNC asm void GXi_NopClearFifo128_(void *reg){ ARM_FUNC void G3X_Init(){ G3X_ClearFifo(); - SETREG32(HW_REG_END_VTXS, 0x0); - while (READREG32(HW_REG_GXSTAT) & 0x8000000); //wait for geometry engine to not be busy - SETREG16(HW_REG_DISP3DCNT, 0x0); - SETREG32(HW_REG_GXSTAT, 0x0); - SETREG32(HW_REG_BG0HOFS, 0x0); - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x2000); - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x1000); - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & ~0x3002); - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & ~0x3000 | 0x10); - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & (u16)~0x3004); - SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000); - SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) & ~0xC0000000 | 0x80000000); + reg_G3_END_VTXS = 0x0; + while (reg_G3X_GXSTAT & 0x8000000); //wait for geometry engine to not be busy + reg_G3X_DISP3DCNT = 0x0; + reg_G3X_GXSTAT = 0x0; + reg_G2_BG0OFS = 0x0; + reg_G3X_DISP3DCNT |= 0x2000; + reg_G3X_DISP3DCNT |= 0x1000; + reg_G3X_DISP3DCNT &= ~0x3002; + reg_G3X_DISP3DCNT = reg_G3X_DISP3DCNT & ~0x3000 | 0x10; + reg_G3X_DISP3DCNT = reg_G3X_DISP3DCNT & (u16)~0x3004; + reg_G3X_GXSTAT |= 0x8000; + reg_G3X_GXSTAT = reg_G3X_GXSTAT & ~0xC0000000 | 0x80000000; G3X_InitMtxStack(); - SETREG32(HW_REG_CLEAR_COLOR, 0x0); - SETREG16(HW_REG_CLEAR_DEPTH, 0x7FFF); - SETREG16(HW_REG_CLRIMAGE_OFFSET, 0x0); - SETREG32(HW_REG_FOG_COLOR, 0x0); - SETREG16(HW_REG_FOG_OFFSET, 0x0); - SETREG16(HW_REG_BG0CNT, READREG16(HW_REG_BG0CNT) & ~0x3); + reg_G3X_CLEAR_COLOR = 0x0; + reg_G3X_CLEAR_DEPTH = 0x7FFF; + reg_G3X_CLRIMAGE_OFFSET = 0x0; + reg_G3X_FOG_COLOR = 0x0; + reg_G3X_FOG_OFFSET = 0x0; + reg_G2_BG0CNT &= ~0x3; G3X_InitTable(); - SETREG32(HW_REG_POLYGON_ATTR, 0x1F0080); - SETREG32(HW_REG_TEXIMAGE_PARAM, 0x0); - SETREG32(HW_REG_PLTT_BASE, 0x0); + reg_G3_POLYGON_ATTR = 0x1F0080; + reg_G3_TEXIMAGE_PARAM = 0x0; + reg_G3_TEXPLTT_BASE = 0x0; } ARM_FUNC void G3X_ResetMtxStack(){ - while (READREG32(HW_REG_GXSTAT) & 0x8000000); - SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000); - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x2000); - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x1000); + while (reg_G3X_GXSTAT & 0x8000000); + reg_G3X_GXSTAT |= 0x8000; + reg_G3X_DISP3DCNT |= 0x2000; + reg_G3X_DISP3DCNT |= 0x1000; G3X_ResetMtxStack_2(); - SETREG32(HW_REG_POLYGON_ATTR, 0x1F0080); - SETREG32(HW_REG_TEXIMAGE_PARAM, 0x0); - SETREG32(HW_REG_PLTT_BASE, 0x0); + reg_G3_POLYGON_ATTR = 0x1F0080; + reg_G3_TEXIMAGE_PARAM = 0x0; + reg_G3_TEXPLTT_BASE = 0x0; } ARM_FUNC void G3X_ClearFifo(){ - GXi_NopClearFifo128_((void *)HW_REG_GXFIFO); - while (READREG32(HW_REG_GXSTAT) & 0x8000000); + GXi_NopClearFifo128_((void *)®_G3X_GXFIFO); + while (reg_G3X_GXSTAT & 0x8000000); } ARM_FUNC void G3X_InitMtxStack(){ u32 PV_level, PJ_level; - SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000); + reg_G3X_GXSTAT |= 0x8000; while (G3X_GetMtxStackLevelPV(&PV_level)); while (G3X_GetMtxStackLevelPJ(&PJ_level)); - SETREG32(HW_REG_MTX_MODE, 0x3); - SETREG32(HW_REG_MTX_IDENTITY, 0x0); - SETREG32(HW_REG_MTX_MODE, 0x0); + reg_G3_MTX_MODE = 0x3; + reg_G3_MTX_IDENTITY = 0x0; + reg_G3_MTX_MODE = 0x0; if (PJ_level) { - SETREG32(HW_REG_MTX_POP, PJ_level); + reg_G3_MTX_POP = PJ_level; } - SETREG32(HW_REG_MTX_IDENTITY, 0x0); - SETREG32(HW_REG_MTX_MODE, 0x2); - SETREG32(HW_REG_MTX_POP, PV_level); - SETREG32(HW_REG_MTX_IDENTITY, 0x0); + reg_G3_MTX_IDENTITY = 0x0; + reg_G3_MTX_MODE = 0x2; + reg_G3_MTX_POP = PV_level; + reg_G3_MTX_IDENTITY = 0x0; } ARM_FUNC void G3X_ResetMtxStack_2(){ u32 PV_level, PJ_level; - SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000); + reg_G3X_GXSTAT |= 0x8000; while (G3X_GetMtxStackLevelPV(&PV_level)); while (G3X_GetMtxStackLevelPJ(&PJ_level)); - SETREG32(HW_REG_MTX_MODE, 0x3); - SETREG32(HW_REG_MTX_IDENTITY, 0x0); - SETREG32(HW_REG_MTX_MODE, 0x0); + reg_G3_MTX_MODE = 0x3; + reg_G3_MTX_IDENTITY = 0x0; + reg_G3_MTX_MODE = 0x0; if (PJ_level) { - SETREG32(HW_REG_MTX_POP, PJ_level); + reg_G3_MTX_POP = PJ_level; } - SETREG32(HW_REG_MTX_MODE, 0x2); - SETREG32(HW_REG_MTX_POP, PV_level); - SETREG32(HW_REG_MTX_IDENTITY, 0x0); + reg_G3_MTX_MODE = 0x2; + reg_G3_MTX_POP = PV_level; + reg_G3_MTX_IDENTITY = 0x0; } ARM_FUNC void G3X_SetFog(u32 enable, u32 alphamode, u32 depth, s32 offset){ if (enable) { - SETREG16(HW_REG_FOG_OFFSET, offset); - SETREG16(HW_REG_DISP3DCNT, (READREG16(HW_REG_DISP3DCNT) &~0x3f40) | (((depth << 0x8)| (alphamode << 0x6)|0x80 ))); + reg_G3X_FOG_OFFSET = offset; + reg_G3X_DISP3DCNT = (reg_G3X_DISP3DCNT &~0x3f40) | (((depth << 0x8)| (alphamode << 0x6)|0x80 )); } else { - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & (u16)~0x3080); + reg_G3X_DISP3DCNT = reg_G3X_DISP3DCNT & (u16)~0x3080; } } ARM_FUNC u32 G3X_GetClipMtx(struct Mtx44 *dst){ - if (READREG32(HW_REG_GXSTAT) & 0x8000000) + if (reg_G3X_GXSTAT & 0x8000000) { return -1; } else { - MI_Copy64B((void *)HW_REG_CLIPMTX_RESULT, dst); + MI_Copy64B((void *)®_G3X_CLIPMTX_RESULT_0, dst); return 0; } } ARM_FUNC u32 G3X_GetVectorMtx(struct Mtx33 *dst){ - if (READREG32(HW_REG_GXSTAT) & 0x8000000) + if (reg_G3X_GXSTAT & 0x8000000) { return -1; } else { - MI_Copy36B((void *)HW_REG_VECMTX_RESULT, dst); + MI_Copy36B((void *)®_G3X_VECMTX_RESULT_0, dst); return 0; } } ARM_FUNC void G3X_SetEdgeColorTable(void *tbl_ptr){ - MIi_CpuCopy16(tbl_ptr, (void *)HW_REG_EDGE_COLOR, 0x10); + MIi_CpuCopy16(tbl_ptr, (void *)®_G3X_EDGE_COLOR_0, 0x10); } ARM_FUNC void G3X_SetFogTable(void *tbl_ptr){ - MI_Copy16B(tbl_ptr, (void *)HW_REG_FOG_TABLE); + MI_Copy16B(tbl_ptr, (void *)®_G3X_FOG_TABLE_0); } ARM_FUNC void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable_fog){ u32 temp = col | (alpha << 0x10) | (polygon_id << 0x18); if (enable_fog) temp |= 0x8000; - SETREG32(HW_REG_CLEAR_COLOR, temp); - SETREG16(HW_REG_CLEAR_DEPTH, depth); + reg_G3X_CLEAR_COLOR = temp; + reg_G3X_CLEAR_DEPTH = depth; } ARM_FUNC void G3X_InitTable(){ if (UNK_02106814 != -1) { - MI_DmaFill32Async(UNK_02106814, (void *)HW_REG_EDGE_COLOR, 0x0, 0x10, 0x0, 0x0); - MI_DmaFill32(UNK_02106814, (void *)HW_REG_FOG_TABLE, 0x0, 0x60); + MI_DmaFill32Async(UNK_02106814, (void *)®_G3X_EDGE_COLOR_0, 0x0, 0x10, 0x0, 0x0); + MI_DmaFill32(UNK_02106814, (void *)®_G3X_FOG_TABLE_0, 0x0, 0x60); } else { - MIi_CpuClear32(0x0, (void *)HW_REG_EDGE_COLOR, 0x10); - MIi_CpuClear32(0x0, (void *)HW_REG_FOG_TABLE, 0x60); + MIi_CpuClear32(0x0, (void *)®_G3X_EDGE_COLOR_0, 0x10); + MIi_CpuClear32(0x0, (void *)®_G3X_FOG_TABLE_0, 0x60); } for (int i = 0; i < 0x20; i++) { - SETREG32(HW_REG_SHININESS, 0x0); + reg_G3_SHININESS = 0x0; } } ARM_FUNC u32 G3X_GetMtxStackLevelPV(u32 *level){ - if (READREG32(HW_REG_GXSTAT) & 0x4000) + if (reg_G3X_GXSTAT & 0x4000) { return -1; } else { - *level = (READREG32(HW_REG_GXSTAT) & 0x1F00) >> 0x8; + *level = (reg_G3X_GXSTAT & 0x1F00) >> 0x8; return 0; } } ARM_FUNC u32 G3X_GetMtxStackLevelPJ(u32 *level){ - if (READREG32(HW_REG_GXSTAT) & 0x4000) + if (reg_G3X_GXSTAT & 0x4000) { return -1; } else { - *level = (READREG32(HW_REG_GXSTAT) & 0x2000) >> 0xD; + *level = (reg_G3X_GXSTAT & 0x2000) >> 0xD; return 0; } } ARM_FUNC u32 G3X_GetBoxTestResult(u32 *result){ - if (READREG32(HW_REG_GXSTAT) & 0x1) + if (reg_G3X_GXSTAT & 0x1) { return -1; } else { - *result = (READREG32(HW_REG_GXSTAT) & 0x2); + *result = (reg_G3X_GXSTAT & 0x2); return 0; } } ARM_FUNC void G3X_SetHOffset(u32 offset){ - SETREG32(HW_REG_BG0HOFS, offset); + reg_G2_BG0OFS = offset; } diff --git a/arm9/lib/src/GX_state.c b/arm9/lib/src/GX_state.c index 79a53ee7..7da3e1b4 100644 --- a/arm9/lib/src/GX_state.c +++ b/arm9/lib/src/GX_state.c @@ -18,9 +18,9 @@ ARM_FUNC void GX_InitGXState(){ UNK_021D33C4.var14 = 0x0; UNK_021D33C4.var16 = 0x0; UNK_021D33C4.var18 = 0x0; - SETREG32(HW_REG_VRAMCNT_A, 0x0); - SETREG8(HW_REG_VRAMCNT_E, 0x0); - SETREG8(HW_REG_VRAMCNT_F, 0x0); - SETREG8(HW_REG_VRAMCNT_G, 0x0); - SETREG16(HW_REG_VRAMCNT_H, 0x0); + reg_GX_VRAMCNT = 0x0; + reg_GX_VRAMCNT_E = 0x0; + reg_GX_VRAMCNT_F = 0x0; + reg_GX_VRAMCNT_G = 0x0; + reg_GX_VRAM_HI_CNT = 0x0; } diff --git a/arm9/lib/src/GX_vramcnt.c b/arm9/lib/src/GX_vramcnt.c index fdedca46..18507fa4 100644 --- a/arm9/lib/src/GX_vramcnt.c +++ b/arm9/lib/src/GX_vramcnt.c @@ -7,23 +7,23 @@ extern struct VRAM_banks UNK_021D33C4; ARM_FUNC void GX_VRAMCNT_SetLCDC_(u32 mask){ if (mask & (0x1 << 0)) - SETREG8(HW_REG_VRAMCNT_A, 0x80); + reg_GX_VRAMCNT_A = 0x80; if (mask & (0x1 << 1)) - SETREG8(HW_REG_VRAMCNT_B, 0x80); + reg_GX_VRAMCNT_B = 0x80; if (mask & (0x1 << 2)) - SETREG8(HW_REG_VRAMCNT_C, 0x80); + reg_GX_VRAMCNT_C = 0x80; if (mask & (0x1 << 3)) - SETREG8(HW_REG_VRAMCNT_D, 0x80); + reg_GX_VRAMCNT_D = 0x80; if (mask & (0x1 << 4)) - SETREG8(HW_REG_VRAMCNT_E, 0x80); + reg_GX_VRAMCNT_E = 0x80; if (mask & (0x1 << 5)) - SETREG8(HW_REG_VRAMCNT_F, 0x80); + reg_GX_VRAMCNT_F = 0x80; if (mask & (0x1 << 6)) - SETREG8(HW_REG_VRAMCNT_G, 0x80); + reg_GX_VRAMCNT_G = 0x80; if (mask & (0x1 << 7)) - SETREG8(HW_REG_VRAMCNT_H, 0x80); + reg_GX_VRAMCNT_H = 0x80; if (mask & (0x1 << 8)) - SETREG8(HW_REG_VRAMCNT_I, 0x80); + reg_GX_VRAMCNT_I = 0x80; } ARM_FUNC void GX_SetBankForBG(s32 bg){ @@ -32,66 +32,66 @@ ARM_FUNC void GX_SetBankForBG(s32 bg){ switch (bg) { case 8: - SETREG8(HW_REG_VRAMCNT_D, 0x81); + reg_GX_VRAMCNT_D = 0x81; break; case 12: - SETREG8(HW_REG_VRAMCNT_D, 0x89); + reg_GX_VRAMCNT_D = 0x89; case 4: - SETREG8(HW_REG_VRAMCNT_C, 0x81); + reg_GX_VRAMCNT_C = 0x81; break; case 14: - SETREG8(HW_REG_VRAMCNT_D, 0x91); + reg_GX_VRAMCNT_D = 0x91; case 6: - SETREG8(HW_REG_VRAMCNT_C, 0x89); + reg_GX_VRAMCNT_C = 0x89; case 2: - SETREG8(HW_REG_VRAMCNT_B, 0x81); + reg_GX_VRAMCNT_B = 0x81; break; case 15: - SETREG8(HW_REG_VRAMCNT_D, 0x99); + reg_GX_VRAMCNT_D = 0x99; case 7: - SETREG8(HW_REG_VRAMCNT_C, 0x91); + reg_GX_VRAMCNT_C = 0x91; case 3: - SETREG8(HW_REG_VRAMCNT_B, 0x89); + reg_GX_VRAMCNT_B = 0x89; case 1: - SETREG8(HW_REG_VRAMCNT_A, 0x81); + reg_GX_VRAMCNT_A = 0x81; break; case 11: - SETREG8(HW_REG_VRAMCNT_A, 0x81); - SETREG8(HW_REG_VRAMCNT_B, 0x89); - SETREG8(HW_REG_VRAMCNT_D, 0x91); + reg_GX_VRAMCNT_A = 0x81; + reg_GX_VRAMCNT_B = 0x89; + reg_GX_VRAMCNT_D = 0x91; break; case 13: - SETREG8(HW_REG_VRAMCNT_D, 0x91); + reg_GX_VRAMCNT_D = 0x91; case 5: - SETREG8(HW_REG_VRAMCNT_A, 0x81); - SETREG8(HW_REG_VRAMCNT_C, 0x89); + reg_GX_VRAMCNT_A = 0x81; + reg_GX_VRAMCNT_C = 0x89; break; case 9: - SETREG8(HW_REG_VRAMCNT_A, 0x81); - SETREG8(HW_REG_VRAMCNT_D, 0x89); + reg_GX_VRAMCNT_A = 0x81; + reg_GX_VRAMCNT_D = 0x89; break; case 10: - SETREG8(HW_REG_VRAMCNT_B, 0x81); - SETREG8(HW_REG_VRAMCNT_D, 0x89); + reg_GX_VRAMCNT_B = 0x81; + reg_GX_VRAMCNT_D = 0x89; break; case 112: - SETREG8(HW_REG_VRAMCNT_G, 0x99); + reg_GX_VRAMCNT_G = 0x99; case 48: - SETREG8(HW_REG_VRAMCNT_F, 0x91); + reg_GX_VRAMCNT_F = 0x91; case 16: - SETREG8(HW_REG_VRAMCNT_E, 0x81); + reg_GX_VRAMCNT_E = 0x81; break; case 80: - SETREG8(HW_REG_VRAMCNT_G, 0x91); - SETREG8(HW_REG_VRAMCNT_E, 0x81); + reg_GX_VRAMCNT_G = 0x91; + reg_GX_VRAMCNT_E = 0x81; break; case 96: - SETREG8(HW_REG_VRAMCNT_G, 0x89); + reg_GX_VRAMCNT_G = 0x89; case 32: - SETREG8(HW_REG_VRAMCNT_F, 0x81); + reg_GX_VRAMCNT_F = 0x81; break; case 64: - SETREG8(HW_REG_VRAMCNT_G, 0x81); + reg_GX_VRAMCNT_G = 0x81; break; default: break; @@ -105,32 +105,32 @@ ARM_FUNC void GX_SetBankForOBJ(s32 obj){ switch (obj) { case 3: - SETREG8(HW_REG_VRAMCNT_B, 0x8A); + reg_GX_VRAMCNT_B = 0x8A; case 1: - SETREG8(HW_REG_VRAMCNT_A, 0x82); + reg_GX_VRAMCNT_A = 0x82; case 0: //needed to match break; case 2: - SETREG8(HW_REG_VRAMCNT_B, 0x82); + reg_GX_VRAMCNT_B = 0x82; break; case 112: - SETREG8(HW_REG_VRAMCNT_G, 0x9A); + reg_GX_VRAMCNT_G = 0x9A; case 48: - SETREG8(HW_REG_VRAMCNT_F, 0x92); + reg_GX_VRAMCNT_F = 0x92; case 16: - SETREG8(HW_REG_VRAMCNT_E, 0x82); + reg_GX_VRAMCNT_E = 0x82; break; case 80: - SETREG8(HW_REG_VRAMCNT_G, 0x92); - SETREG8(HW_REG_VRAMCNT_E, 0x82); + reg_GX_VRAMCNT_G = 0x92; + reg_GX_VRAMCNT_E = 0x82; break; case 96: - SETREG8(HW_REG_VRAMCNT_G, 0x8A); + reg_GX_VRAMCNT_G = 0x8A; case 32: - SETREG8(HW_REG_VRAMCNT_F, 0x82); + reg_GX_VRAMCNT_F = 0x82; break; case 64: - SETREG8(HW_REG_VRAMCNT_G, 0x82); + reg_GX_VRAMCNT_G = 0x82; break; default: break; @@ -144,21 +144,21 @@ ARM_FUNC void GX_SetBankForBGExtPltt(s32 bgextpltt){ switch (bgextpltt) { case 0x10: - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x40000000); - SETREG8(HW_REG_VRAMCNT_E, 0x84); + reg_GX_DISPCNT |= 0x40000000; + reg_GX_VRAMCNT_E = 0x84; break; case 0x40: - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x40000000); - SETREG8(HW_REG_VRAMCNT_G, 0x8C); + reg_GX_DISPCNT |= 0x40000000; + reg_GX_VRAMCNT_G = 0x8C; break; case 0x60: - SETREG8(HW_REG_VRAMCNT_G, 0x8C); + reg_GX_VRAMCNT_G = 0x8C; case 0x20: - SETREG8(HW_REG_VRAMCNT_F, 0x84); - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x40000000); + reg_GX_VRAMCNT_F = 0x84; + reg_GX_DISPCNT |= 0x40000000; break; case 0: - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000); + reg_GX_DISPCNT &= ~0x40000000; break; } GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); @@ -170,15 +170,15 @@ ARM_FUNC void GX_SetBankForOBJExtPltt(s32 objextpltt){ switch (objextpltt) { case 32: - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x80000000); - SETREG8(HW_REG_VRAMCNT_F, 0x85); + reg_GX_DISPCNT |= 0x80000000; + reg_GX_VRAMCNT_F = 0x85; break; case 64: - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x80000000); - SETREG8(HW_REG_VRAMCNT_G, 0x85); + reg_GX_DISPCNT |= 0x80000000; + reg_GX_VRAMCNT_G = 0x85; break; case 0: - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000); + reg_GX_DISPCNT &= ~0x80000000; break; } GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); @@ -189,58 +189,58 @@ ARM_FUNC void GX_SetBankForTex(s32 tex){ UNK_021D33C4.var08 = tex; if (tex == 0) { - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & 0x0000CFFE); + reg_G3X_DISP3DCNT &= 0x0000CFFE; } else { - SETREG16(HW_REG_DISP3DCNT, (READREG16(HW_REG_DISP3DCNT) & ~0x3000) | 0x1); + reg_G3X_DISP3DCNT = (reg_G3X_DISP3DCNT & ~0x3000) | 0x1; switch (tex) { case 5: - SETREG8(HW_REG_VRAMCNT_A, 0x83); - SETREG8(HW_REG_VRAMCNT_C, 0x8B); + reg_GX_VRAMCNT_A = 0x83; + reg_GX_VRAMCNT_C = 0x8B; break; case 9: - SETREG8(HW_REG_VRAMCNT_A, 0x83); - SETREG8(HW_REG_VRAMCNT_D, 0x8B); + reg_GX_VRAMCNT_A = 0x83; + reg_GX_VRAMCNT_D = 0x8B; break; case 10: - SETREG8(HW_REG_VRAMCNT_B, 0x83); - SETREG8(HW_REG_VRAMCNT_D, 0x8B); + reg_GX_VRAMCNT_B = 0x83; + reg_GX_VRAMCNT_D = 0x8B; break; case 11: - SETREG8(HW_REG_VRAMCNT_A, 0x83); - SETREG8(HW_REG_VRAMCNT_B, 0x8B); - SETREG8(HW_REG_VRAMCNT_D, 0x93); + reg_GX_VRAMCNT_A = 0x83; + reg_GX_VRAMCNT_B = 0x8B; + reg_GX_VRAMCNT_D = 0x93; break; case 13: - SETREG8(HW_REG_VRAMCNT_A, 0x83); - SETREG8(HW_REG_VRAMCNT_C, 0x8B); - SETREG8(HW_REG_VRAMCNT_D, 0x93); + reg_GX_VRAMCNT_A = 0x83; + reg_GX_VRAMCNT_C = 0x8B; + reg_GX_VRAMCNT_D = 0x93; break; case 8: - SETREG8(HW_REG_VRAMCNT_D, 0x83); + reg_GX_VRAMCNT_D = 0x83; break; case 12: - SETREG8(HW_REG_VRAMCNT_D, 0x8B); + reg_GX_VRAMCNT_D = 0x8B; case 4: - SETREG8(HW_REG_VRAMCNT_C, 0x83); + reg_GX_VRAMCNT_C = 0x83; break; case 14: - SETREG8(HW_REG_VRAMCNT_D, 0x93); + reg_GX_VRAMCNT_D = 0x93; case 6: - SETREG8(HW_REG_VRAMCNT_C, 0x8B); + reg_GX_VRAMCNT_C = 0x8B; case 2: - SETREG8(HW_REG_VRAMCNT_B, 0x83); + reg_GX_VRAMCNT_B = 0x83; break; case 15: - SETREG8(HW_REG_VRAMCNT_D, 0x9B); + reg_GX_VRAMCNT_D = 0x9B; case 7: - SETREG8(HW_REG_VRAMCNT_C, 0x93); + reg_GX_VRAMCNT_C = 0x93; case 3: - SETREG8(HW_REG_VRAMCNT_B, 0x8B); + reg_GX_VRAMCNT_B = 0x8B; case 1: - SETREG8(HW_REG_VRAMCNT_A, 0x83); + reg_GX_VRAMCNT_A = 0x83; break; } } @@ -255,19 +255,19 @@ ARM_FUNC void GX_SetBankForTexPltt(s32 texpltt){ case 0: //needed to match break; case 96: - SETREG8(HW_REG_VRAMCNT_G, 0x8B); + reg_GX_VRAMCNT_G = 0x8B; case 32: - SETREG8(HW_REG_VRAMCNT_F, 0x83); + reg_GX_VRAMCNT_F = 0x83; break; case 112: - SETREG8(HW_REG_VRAMCNT_G, 0x9B); + reg_GX_VRAMCNT_G = 0x9B; case 48: - SETREG8(HW_REG_VRAMCNT_F, 0x93); + reg_GX_VRAMCNT_F = 0x93; case 16: - SETREG8(HW_REG_VRAMCNT_E, 0x83); + reg_GX_VRAMCNT_E = 0x83; break; case 64: - SETREG8(HW_REG_VRAMCNT_G, 0x83); + reg_GX_VRAMCNT_G = 0x83; break; } GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); @@ -279,27 +279,27 @@ ARM_FUNC void GX_SetBankForClearImage(s32 clearimage){ switch (clearimage) { case 3: - SETREG8(HW_REG_VRAMCNT_A, 0x93); + reg_GX_VRAMCNT_A = 0x93; case 2: - SETREG8(HW_REG_VRAMCNT_B, 0x9B); - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x4000); + reg_GX_VRAMCNT_B = 0x9B; + reg_G3X_DISP3DCNT |= 0x4000; break; case 12: - SETREG8(HW_REG_VRAMCNT_C, 0x93); + reg_GX_VRAMCNT_C = 0x93; case 8: - SETREG8(HW_REG_VRAMCNT_D, 0x9B); - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x4000); + reg_GX_VRAMCNT_D = 0x9B; + reg_G3X_DISP3DCNT |= 0x4000; break; case 0: - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & ~0x4000); + reg_G3X_DISP3DCNT &= ~0x4000; break; case 1: - SETREG8(HW_REG_VRAMCNT_A, 0x9B); - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x4000); + reg_GX_VRAMCNT_A = 0x9B; + reg_G3X_DISP3DCNT |= 0x4000; break; case 4: - SETREG8(HW_REG_VRAMCNT_C, 0x9B); - SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x4000); + reg_GX_VRAMCNT_C = 0x9B; + reg_G3X_DISP3DCNT |= 0x4000; } GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } @@ -312,14 +312,14 @@ ARM_FUNC void GX_SetBankForARM7(s32 arm7){ case 0: //needed to match break; case 12: - SETREG8(HW_REG_VRAMCNT_D, 0x8A); - SETREG8(HW_REG_VRAMCNT_C, 0x82); + reg_GX_VRAMCNT_D = 0x8A; + reg_GX_VRAMCNT_C = 0x82; break; case 4: - SETREG8(HW_REG_VRAMCNT_C, 0x82); + reg_GX_VRAMCNT_C = 0x82; break; case 8: - SETREG8(HW_REG_VRAMCNT_D, 0x82); + reg_GX_VRAMCNT_D = 0x82; } GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } @@ -337,12 +337,12 @@ ARM_FUNC void GX_SetBankForSubBG(s32 subbg){ case 0: //needed to match break; case 4: - SETREG8(HW_REG_VRAMCNT_C, 0x84); + reg_GX_VRAMCNT_C = 0x84; break; case 384: - SETREG8(HW_REG_VRAMCNT_I, 0x81); + reg_GX_VRAMCNT_I = 0x81; case 128: - SETREG8(HW_REG_VRAMCNT_H, 0x81); + reg_GX_VRAMCNT_H = 0x81; } GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); } @@ -354,10 +354,10 @@ ARM_FUNC void GX_SetBankForSubOBJ(s32 subobj){ switch (subobj) { case 8: - SETREG8(HW_REG_VRAMCNT_D, 0x84); + reg_GX_VRAMCNT_D = 0x84; break; case 256: - SETREG8(HW_REG_VRAMCNT_I, 0x82); + reg_GX_VRAMCNT_I = 0x82; break; case 0: //needed to match break; @@ -371,11 +371,11 @@ ARM_FUNC void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){ switch (subbgextpltt) { case 128: - SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) | 0x40000000); - SETREG8(HW_REG_VRAMCNT_H, 0x82); + reg_GXS_DB_DISPCNT |= 0x40000000; + reg_GX_VRAMCNT_H = 0x82; break; case 0: - SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000); + reg_GXS_DB_DISPCNT &= ~0x40000000; break; } GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); @@ -387,11 +387,11 @@ ARM_FUNC void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){ switch (subobjextpltt) { case 256: - SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) | 0x80000000); - SETREG8(HW_REG_VRAMCNT_I, 0x83); + reg_GXS_DB_DISPCNT |= 0x80000000; + reg_GX_VRAMCNT_I = 0x83; break; case 0: - SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000); + reg_GXS_DB_DISPCNT &= ~0x80000000; break; } GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); @@ -414,12 +414,12 @@ ARM_FUNC u32 GX_ResetBankForOBJ(){ } ARM_FUNC u32 GX_ResetBankForBGExtPltt(){ - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000); + reg_GX_DISPCNT &= ~0x40000000; return FUN_020C6130(&UNK_021D33C4.var0E); } ARM_FUNC u32 GX_ResetBankForOBJExtPltt(){ - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000); + reg_GX_DISPCNT &= ~0x80000000; return FUN_020C6130(&UNK_021D33C4.var10); } @@ -444,12 +444,12 @@ ARM_FUNC u32 FUN_020C605C(){ } ARM_FUNC u32 FUN_020C6034(){ - SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000); + reg_GXS_DB_DISPCNT &= ~0x40000000; return FUN_020C6130(&UNK_021D33C4.var16); } ARM_FUNC u32 GX_ResetBankForSubOBJ(){ - SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000); + reg_GXS_DB_DISPCNT &= ~0x80000000; return FUN_020C6130(&UNK_021D33C4.var18); } @@ -457,23 +457,23 @@ ARM_FUNC u32 FUN_020C5F28(u16 *ptr){ u32 temp = *ptr; *ptr = 0; if (temp & (0x1 << 0)) - SETREG8(HW_REG_VRAMCNT_A, 0x0); + reg_GX_VRAMCNT_A = 0x0; if (temp & (0x1 << 1)) - SETREG8(HW_REG_VRAMCNT_B, 0x0); + reg_GX_VRAMCNT_B = 0x0; if (temp & (0x1 << 2)) - SETREG8(HW_REG_VRAMCNT_C, 0x0); + reg_GX_VRAMCNT_C = 0x0; if (temp & (0x1 << 3)) - SETREG8(HW_REG_VRAMCNT_D, 0x0); + reg_GX_VRAMCNT_D = 0x0; if (temp & (0x1 << 4)) - SETREG8(HW_REG_VRAMCNT_E, 0x0); + reg_GX_VRAMCNT_E = 0x0; if (temp & (0x1 << 5)) - SETREG8(HW_REG_VRAMCNT_F, 0x0); + reg_GX_VRAMCNT_F = 0x0; if (temp & (0x1 << 6)) - SETREG8(HW_REG_VRAMCNT_G, 0x0); + reg_GX_VRAMCNT_G = 0x0; if (temp & (0x1 << 7)) - SETREG8(HW_REG_VRAMCNT_H, 0x0); + reg_GX_VRAMCNT_H = 0x0; if (temp & (0x1 << 8)) - SETREG8(HW_REG_VRAMCNT_I, 0x0); + reg_GX_VRAMCNT_I = 0x0; OSi_UnlockVram((u16)temp, UNK_021D33BC); return temp; } @@ -487,12 +487,12 @@ ARM_FUNC u32 GX_DisableBankForOBJExtPltt_2(){ } ARM_FUNC u32 GX_DisableBankForBGExtPltt(){ - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000); + reg_GX_DISPCNT &= ~0x40000000; return FUN_020C5F28(&UNK_021D33C4.var0E); } ARM_FUNC u32 GX_DisableBankForOBJExtPltt(){ - SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000); + reg_GX_DISPCNT &= ~0x80000000; return FUN_020C5F28(&UNK_021D33C4.var10); } @@ -525,12 +525,12 @@ ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt_2(){ } ARM_FUNC u32 FUN_020C5E04(){ - SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000); + reg_GXS_DB_DISPCNT &= ~0x40000000; return FUN_020C5F28(&UNK_021D33C4.var16); } ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt(){ - SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000); + reg_GXS_DB_DISPCNT &= ~0x80000000; return FUN_020C5F28(&UNK_021D33C4.var18); } -- cgit v1.2.3 From 157c523cb52b6564612298ebe10c260fa0cbffc4 Mon Sep 17 00:00:00 2001 From: red031000 Date: Sat, 16 May 2020 20:15:41 +0100 Subject: match OS_interrupt (finally) --- arm9/arm9.lcf | 1 - arm9/asm/OS_interrupt_asm.s | 95 ----------------------------------------- arm9/lib/include/OS_interrupt.h | 5 +++ arm9/lib/src/OS_init.c | 1 - arm9/lib/src/OS_interrupt.c | 56 +++++++++++++++++++++++- arm9/lib/src/OS_reset.c | 5 +-- 6 files changed, 62 insertions(+), 101 deletions(-) delete mode 100644 arm9/asm/OS_interrupt_asm.s diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index 9ae0d28a..5504c2dd 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -161,7 +161,6 @@ SECTIONS { GX_asm.o (.text) OS_irqHandler.o (.text) OS_irqTable.o (.text) - OS_interrupt_asm.o (.text) OS_interrupt.o (.text) OS_spinLock.o (.text) OS_printf.o (.text) diff --git a/arm9/asm/OS_interrupt_asm.s b/arm9/asm/OS_interrupt_asm.s deleted file mode 100644 index 7fdc1ccc..00000000 --- a/arm9/asm/OS_interrupt_asm.s +++ /dev/null @@ -1,95 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start OS_SetIrqStackChecker -OS_SetIrqStackChecker: ; 0x020C9DAC - ldr ip, _020C9DD0 ; =0x027E0000 - ldr r3, _020C9DD4 ; =0xFDDB597D - add r0, r12, #0x3000 - ldr r2, _020C9DD8 ; =0x7BF9DD5B - ldr r1, _020C9DDC ; =0x00000400 - str r3, [r0, #0xf7c] - add r0, r12, #0x3f80 - str r2, [r0, -r1] - bx lr - .balign 4 -_020C9DD0: .word 0x027E0000 -_020C9DD4: .word 0xFDDB597D -_020C9DD8: .word 0x7BF9DD5B -_020C9DDC: .word 0x00000400 - - arm_func_start OS_ResetRequestIrqMask -OS_ResetRequestIrqMask: ; 0x020C9DE0 - ldr ip, _020C9E0C ; =0x04000208 - mov r1, #0x0 - ldrh r3, [r12, #0x0] - ldr r2, _020C9E10 ; =0x04000214 - strh r1, [r12, #0x0] - ldr r1, [r2, #0x0] - str r0, [r2, #0x0] - ldrh r0, [r12, #0x0] - mov r0, r1 - strh r3, [r12, #0x0] - bx lr - .balign 4 -_020C9E0C: .word 0x04000208 -_020C9E10: .word 0x04000214 - - arm_func_start OS_DisableIrqMask -OS_DisableIrqMask: ; 0x020C9E14 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr lr, _020C9E54 ; =0x04000208 - mov r3, #0x0 - ldrh r12, [lr, #0x0] - ldr r2, _020C9E58 ; =0x04000210 - mvn r1, r0 - strh r3, [lr, #0x0] - ldr r0, [r2, #0x0] - and r1, r0, r1 - str r1, [r2, #0x0] - ldrh r1, [lr, #0x0] - strh r12, [lr, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020C9E54: .word 0x04000208 -_020C9E58: .word 0x04000210 - - arm_func_start OS_EnableIrqMask -OS_EnableIrqMask: ; 0x020C9E5C - ldr ip, _020C9E8C ; =0x04000208 - mov r1, #0x0 - ldrh r3, [r12, #0x0] - ldr r2, _020C9E90 ; =0x04000210 - strh r1, [r12, #0x0] - ldr r1, [r2, #0x0] - orr r0, r1, r0 - str r0, [r2, #0x0] - ldrh r0, [r12, #0x0] - mov r0, r1 - strh r3, [r12, #0x0] - bx lr - .balign 4 -_020C9E8C: .word 0x04000208 -_020C9E90: .word 0x04000210 - - arm_func_start OS_SetIrqMask -OS_SetIrqMask: ; 0x020C9E94 - ldr ip, _020C9EC0 ; =0x04000208 - mov r1, #0x0 - ldrh r3, [r12, #0x0] - ldr r2, _020C9EC4 ; =0x04000210 - strh r1, [r12, #0x0] - ldr r1, [r2, #0x0] - str r0, [r2, #0x0] - ldrh r0, [r12, #0x0] - mov r0, r1 - strh r3, [r12, #0x0] - bx lr - .balign 4 -_020C9EC0: .word 0x04000208 -_020C9EC4: .word 0x04000210 diff --git a/arm9/lib/include/OS_interrupt.h b/arm9/lib/include/OS_interrupt.h index 21ce2ea0..21ae8079 100644 --- a/arm9/lib/include/OS_interrupt.h +++ b/arm9/lib/include/OS_interrupt.h @@ -26,5 +26,10 @@ void OS_SetIrqFunction(OSIrqMask intrBit, OSIrqFunction function); OSIrqFunction OS_GetIrqFunction(OSIrqMask intrBit); void OSi_EnterDmaCallback(u32 dmaNo, void (*callback) (void *), void *arg); void OSi_EnterTimerCallback(u32 timerNo, void (*callback) (void *), void *arg); +OSIrqMask OS_SetIrqMask(OSIrqMask mask); +OSIrqMask OS_EnableIrqMask(OSIrqMask mask); +OSIrqMask OS_DisableIrqMask(OSIrqMask mask); +OSIrqMask OS_ResetRequestIrqMask(OSIrqMask mask); +void OS_SetIrqStackChecker(void); #endif //POKEDIAMOND_OS_INTERRUPT_H diff --git a/arm9/lib/src/OS_init.c b/arm9/lib/src/OS_init.c index 7467c672..a1db8788 100644 --- a/arm9/lib/src/OS_init.c +++ b/arm9/lib/src/OS_init.c @@ -7,7 +7,6 @@ extern void PXI_Init(); extern void OS_InitLock(); -extern void OS_SetIrqStackChecker(); extern void OS_InitException(); extern void MI_Init(); extern void OS_InitVAlarm(); diff --git a/arm9/lib/src/OS_interrupt.c b/arm9/lib/src/OS_interrupt.c index 1fb43821..76deb069 100644 --- a/arm9/lib/src/OS_interrupt.c +++ b/arm9/lib/src/OS_interrupt.c @@ -10,7 +10,6 @@ #pragma optimize_for_size on extern OSThreadQueue OSi_IrqThreadQueue; -extern OSIrqMask OS_EnableIrqMask(OSIrqMask intr); ARM_FUNC void OS_InitIrqTable() { OS_InitThreadQueue(&OSi_IrqThreadQueue); @@ -87,3 +86,58 @@ ARM_FUNC void OSi_EnterTimerCallback(u32 timerNo, void (*callback) (void *), voi (void)OS_EnableIrqMask(mask); OSi_IrqCallbackInfo[timerNo + 4].enable = TRUE; } + +ARM_FUNC OSIrqMask OS_SetIrqMask(OSIrqMask mask) +{ + u16 regIme = reg_OS_IME; + reg_OS_IME = 0; + OSIrqMask regIe = reg_OS_IE; + reg_OS_IE = mask; + u16 unused = reg_OS_IME; //needed because otherwise it doesn't match + reg_OS_IME = regIme; + return regIe; +} + +ARM_FUNC OSIrqMask OS_EnableIrqMask(OSIrqMask mask) +{ + u16 regIme = reg_OS_IME; + reg_OS_IME = 0; + OSIrqMask regIe = reg_OS_IE; + reg_OS_IE = regIe | mask; + u16 unused = reg_OS_IME; + reg_OS_IME = regIme; + return regIe; +} + +ARM_FUNC OSIrqMask OS_DisableIrqMask(OSIrqMask mask) +{ + u16 regIme = reg_OS_IME; + reg_OS_IME = 0; + OSIrqMask regIe = reg_OS_IE; + reg_OS_IE = regIe & ~mask; + u16 unused = reg_OS_IME; + reg_OS_IME = regIme; + return regIe; +} + +ARM_FUNC OSIrqMask OS_ResetRequestIrqMask(OSIrqMask mask) +{ + u16 regIme = reg_OS_IME; + reg_OS_IME = 0; + OSIrqMask regIf = reg_OS_IF; + reg_OS_IF = mask; + u16 unused = reg_OS_IME; + reg_OS_IME = regIme; + return regIf; +} + +extern void SDK_IRQ_STACKSIZE(void); + +#define OSi_IRQ_STACK_TOP (HW_DTCM_SVC_STACK - ((s32)SDK_IRQ_STACKSIZE)) +#define OSi_IRQ_STACK_BOTTOM HW_DTCM_SVC_STACK + +ARM_FUNC void OS_SetIrqStackChecker(void) +{ + *(u32 *)(OSi_IRQ_STACK_BOTTOM - sizeof(u32)) = 0xfddb597dUL; + *(u32 *)(OSi_IRQ_STACK_TOP) = 0x7bf9dd5bUL; +} diff --git a/arm9/lib/src/OS_reset.c b/arm9/lib/src/OS_reset.c index c21d20ab..d4254ce3 100644 --- a/arm9/lib/src/OS_reset.c +++ b/arm9/lib/src/OS_reset.c @@ -6,6 +6,7 @@ #include "OS_reset.h" #include "MB_mb.h" #include "OS_terminate_proc.h" +#include "OS_interrupt.h" extern u16 OSi_IsInitReset; extern vu16 OSi_IsResetOccurred; @@ -15,8 +16,6 @@ extern void PXI_SetFifoRecvCallback(u32 param1, void* callback); extern u32 PXI_SendWordByFifo(u32 param1, u32 data, u32 param2); extern void CARD_LockRom(u16 lockId); extern void MI_StopDma(u32 dma); -extern void OS_SetIrqMask(u32 mask); -extern void OS_ResetRequestIrqMask(u32 mask); extern void OSi_DoResetSystem(); //in itcm, should technically be in this file ARM_FUNC void OS_InitReset() { @@ -54,7 +53,7 @@ ARM_FUNC void OS_ResetSystem(u32 parameter) { MI_StopDma(1); MI_StopDma(2); MI_StopDma(3); - OS_SetIrqMask(0x40000); + (void)OS_SetIrqMask(0x40000); OS_ResetRequestIrqMask((u32)~0); *(u32 *)HW_RESET_PARAMETER_BUF = parameter; OSi_SendToPxi(OS_PXI_COMMAND_RESET); -- cgit v1.2.3 From 2e1c3ccd3ff3035acc98b34c2b29ba5c865e6194 Mon Sep 17 00:00:00 2001 From: Made Date: Sun, 17 May 2020 01:40:01 +0200 Subject: struct defs --- arm9/data/bss_2.s | 4 +- arm9/lib/include/gx.h | 80 ++++++++++++++----------- arm9/lib/src/GX_g3.c | 36 +++++------ arm9/lib/src/GX_g3b.c | 130 ++++++++++++++++++++-------------------- arm9/lib/src/GX_state.c | 28 ++++----- arm9/lib/src/GX_vramcnt.c | 148 +++++++++++++++++++++++----------------------- arm9/undefined_syms.txt | 2 +- 7 files changed, 218 insertions(+), 210 deletions(-) diff --git a/arm9/data/bss_2.s b/arm9/data/bss_2.s index 5c9d538b..3832b009 100644 --- a/arm9/data/bss_2.s +++ b/arm9/data/bss_2.s @@ -940,8 +940,8 @@ UNK_021D33BC: ; 0x021D33BC UNK_021D33C0: ; 0x021D33C0 .space 0x4 - .global UNK_021D33C4 -UNK_021D33C4: ; 0x021D33C4 + .global gGXState +gGXState: ; 0x021D33C4 .space 0x2 .global UNK_021D33C6 diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 58e4c35f..82f07a62 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -21,6 +21,12 @@ void OSi_UnlockVram(u16, u16); void MIi_CpuClear32(u32, void *, u32); //TODO: Add defines for GX commands, add structs/unions for HW registers +//TODO: structs +//TODO: useful macros +//TODO: inline functions +//TODO: enums +//TODO: function signatures + static inline void _GX_Load_16(u32 var, void *src, void *dst, u32 size){ if (var != -1 && size > 0x1C) @@ -55,35 +61,37 @@ static inline void _GX_Load_32_Async(u32 var, void *src, void *dst, u32 size, vo } } -struct DL +struct GXDLInfo { - u8 *var00; //end pointer - u32 *var04; //aligned end pointer, used to write data - u8 *var08; //start pointer - u32 var0C; - u32 var10; //pad end with zero bool + u8 *curr_cmd; + u32 *curr_param; + u32 *bottom; + u32 length; + BOOL param0_cmd_flg; }; -struct VRAM_banks + +struct GX_State { - u16 var00; //lcdc - u16 var02; //bg - u16 var04; //obj - u16 var06; //arm7 - u16 var08; //tex - u16 var0A; //texpltt - u16 var0C; //clearimage - u16 var0E; //bgextpltt - u16 var10; //objextpltt - u16 var12; //subbg - u16 var14; //subobj - u16 var16; //subbgextpltt - u16 var18; //subobjextpltt + u16 lcdc; + u16 bg; + u16 obj; + u16 arm7; + u16 tex; + u16 texPltt; + u16 clrImg; + u16 bgExtPltt; + u16 objExtPltt; + + u16 sub_bg; + u16 sub_obj; + u16 sub_bgExtPltt; + u16 sub_objExtPltt; }; //GX_g3 -void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2); -s32 G3_EndMakeDL(struct DL *displaylist); +void G3_BeginMakeDL(struct GXDLInfo *displaylist, void *r1, u32 r2); +s32 G3_EndMakeDL(struct GXDLInfo *displaylist); //GX_g3_util void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx); @@ -113,20 +121,20 @@ u32 G3X_GetBoxTestResult(u32 *result); void G3X_SetHOffset(u32 offset); //GX_g3b -void G3BS_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx); -void G3B_PushMtx(struct DL *displaylist); -void G3B_PopMtx(struct DL *displaylist, void *mtx); -void G3B_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx); -void G3B_Color(struct DL * displaylist, u32 vtx_col); -void G3B_Normal(struct DL * displaylist, fx16 x, fx16 y, fx16 z); -void G3B_Vtx(struct DL * displaylist, fx32 x, fx32 y, fx32 z); -void G3B_PolygonAttr(struct DL *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6); -void G3B_MaterialColorDiffAmb(struct DL *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace); -void G3B_MaterialColorSpecEmi(struct DL *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table); -void G3B_LightVector(struct DL * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z); -void G3B_LightColor(struct DL * displaylist, u32 light_num, u32 col); -void G3B_Begin(struct DL * displaylist, u32 type); -void G3B_End(struct DL * displaylist); +void G3BS_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx); +void G3B_PushMtx(struct GXDLInfo *displaylist); +void G3B_PopMtx(struct GXDLInfo *displaylist, void *mtx); +void G3B_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx); +void G3B_Color(struct GXDLInfo * displaylist, u32 vtx_col); +void G3B_Normal(struct GXDLInfo * displaylist, fx16 x, fx16 y, fx16 z); +void G3B_Vtx(struct GXDLInfo * displaylist, fx32 x, fx32 y, fx32 z); +void G3B_PolygonAttr(struct GXDLInfo *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6); +void G3B_MaterialColorDiffAmb(struct GXDLInfo *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace); +void G3B_MaterialColorSpecEmi(struct GXDLInfo *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table); +void G3B_LightVector(struct GXDLInfo * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z); +void G3B_LightColor(struct GXDLInfo * displaylist, u32 light_num, u32 col); +void G3B_Begin(struct GXDLInfo * displaylist, u32 type); +void G3B_End(struct GXDLInfo * displaylist); //GX_asm void GX_SendFifo48B(void *src, void *dst); diff --git a/arm9/lib/src/GX_g3.c b/arm9/lib/src/GX_g3.c index eb01453d..379ee52b 100644 --- a/arm9/lib/src/GX_g3.c +++ b/arm9/lib/src/GX_g3.c @@ -3,34 +3,34 @@ #include "gx.h" -ARM_FUNC void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2){ - displaylist->var0C = r2; - displaylist->var08 = r1; - displaylist->var00 = r1; - displaylist->var04 = (u32 *)r1 + 1; - displaylist->var10 = 0x0; +ARM_FUNC void G3_BeginMakeDL(struct GXDLInfo *displaylist, void *r1, u32 r2){ + displaylist->length = r2; + displaylist->bottom = r1; + displaylist->curr_cmd = r1; + displaylist->curr_param = (u32 *)r1 + 1; + displaylist->param0_cmd_flg = 0x0; } -ARM_FUNC s32 G3_EndMakeDL(struct DL *displaylist){ - if (displaylist->var08 == displaylist->var00) +ARM_FUNC s32 G3_EndMakeDL(struct GXDLInfo *displaylist){ + if (displaylist->bottom == (u32 *)displaylist->curr_cmd) return 0; //pads the buffer with 0 to 4byte alignment if needed - switch((u32)displaylist->var00 & 0x3) + switch((u32)displaylist->curr_cmd & 0x3) { case 0: - return displaylist->var00 - displaylist->var08; + return displaylist->curr_cmd - (u8 *)displaylist->bottom; case 1: - *displaylist->var00++ = 0x0; + *displaylist->curr_cmd++ = 0x0; case 2: - *displaylist->var00++ = 0x0; + *displaylist->curr_cmd++ = 0x0; case 3: - *displaylist->var00++ = 0x0; + *displaylist->curr_cmd++ = 0x0; } - if (displaylist->var10) + if (displaylist->param0_cmd_flg) { - *displaylist->var04++ = 0x0; - displaylist->var10 = 0x0; + *displaylist->curr_param++ = 0x0; + displaylist->param0_cmd_flg = 0x0; } - displaylist->var00 = (u8 *)displaylist->var04; - return displaylist->var00 - displaylist->var08; + displaylist->curr_cmd = (u8 *)displaylist->curr_param; + return displaylist->curr_cmd - (u8 *)displaylist->bottom; } diff --git a/arm9/lib/src/GX_g3b.c b/arm9/lib/src/GX_g3b.c index 50281ec0..9a943bce 100644 --- a/arm9/lib/src/GX_g3b.c +++ b/arm9/lib/src/GX_g3b.c @@ -3,36 +3,36 @@ #include "gx.h" -ARM_FUNC void G3BS_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx){ - *(u32 *)displaylist->var00 = 0x16; - MI_Copy64B(mtx, displaylist->var04); +ARM_FUNC void G3BS_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx){ + *(u32 *)displaylist->curr_cmd = 0x16; + MI_Copy64B(mtx, displaylist->curr_param); } -ARM_FUNC void G3B_PushMtx(struct DL *displaylist){ - *(u32 *)displaylist->var00 = 0x11; - displaylist->var00 = (u8 *)displaylist->var04; - displaylist->var04 = (u32 *)displaylist->var00 + 1; +ARM_FUNC void G3B_PushMtx(struct GXDLInfo *displaylist){ + *(u32 *)displaylist->curr_cmd = 0x11; + displaylist->curr_cmd = (u8 *)displaylist->curr_param; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; } -ARM_FUNC void G3B_PopMtx(struct DL *displaylist, void *mtx){ - *(u32 *)displaylist->var00 = 0x12; - *displaylist->var04 = (u32)mtx; - displaylist->var00 = (u8 *)displaylist->var04 + 0x4; - displaylist->var04 = (u32 *)displaylist->var00 + 1; +ARM_FUNC void G3B_PopMtx(struct GXDLInfo *displaylist, void *mtx){ + *(u32 *)displaylist->curr_cmd = 0x12; + *displaylist->curr_param = (u32)mtx; + displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; } -ARM_FUNC void G3B_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx){ +ARM_FUNC void G3B_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx){ G3BS_LoadMtx44(displaylist, mtx); - displaylist->var00 = (u8 *)displaylist->var04 + sizeof(struct Mtx44); - displaylist->var04 = (u32 *)displaylist->var00 + 1; + displaylist->curr_cmd = (u8 *)displaylist->curr_param + sizeof(struct Mtx44); + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; } //color format is RGB555, stored in the lower bits -ARM_FUNC void G3B_Color(struct DL * displaylist, u32 vtx_col){ - *(u32 *)displaylist->var00 = 0x20; - *displaylist->var04 = vtx_col; - displaylist->var00 = (u8 *)displaylist->var04 + 0x4; - displaylist->var04 = (u32 *)displaylist->var00 + 1; +ARM_FUNC void G3B_Color(struct GXDLInfo * displaylist, u32 vtx_col){ + *(u32 *)displaylist->curr_cmd = 0x20; + *displaylist->curr_param = vtx_col; + displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; } /* @@ -40,51 +40,51 @@ Only feed normalized Vectors only the fractional part and the sign, which is in the first nonfraction bit since the vector is assumed to be normalized, are used */ -ARM_FUNC void G3B_Normal(struct DL * displaylist, fx16 x, fx16 y, fx16 z){ - *(u32 *)displaylist->var00 = 0x21; - *displaylist->var04 = ((x >> 3) & 0x3FF) | (((y >> 3) & 0x3FF) << 0xA) | (((z >> 3) & 0x3FF) << 0x14) ; - displaylist->var00 = (u8 *)displaylist->var04 + 0x4; - displaylist->var04 = (u32 *)displaylist->var00 + 1; +ARM_FUNC void G3B_Normal(struct GXDLInfo * displaylist, fx16 x, fx16 y, fx16 z){ + *(u32 *)displaylist->curr_cmd = 0x21; + *displaylist->curr_param = ((x >> 3) & 0x3FF) | (((y >> 3) & 0x3FF) << 0xA) | (((z >> 3) & 0x3FF) << 0x14) ; + displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; } -ARM_FUNC void G3B_Vtx(struct DL * displaylist, fx32 x, fx32 y, fx32 z){ - *(u32 *)displaylist->var00 = 0x23; - displaylist->var04[0] = (u32)(u16)x | (u32)(u16)y << 0x10; - displaylist->var04[1] = (u32)(u16)z; - displaylist->var00 = (u8 *)displaylist->var04 + 0x8; - displaylist->var04 = (u32 *)displaylist->var00 + 1; +ARM_FUNC void G3B_Vtx(struct GXDLInfo * displaylist, fx32 x, fx32 y, fx32 z){ + *(u32 *)displaylist->curr_cmd = 0x23; + displaylist->curr_param[0] = (u32)(u16)x | (u32)(u16)y << 0x10; + displaylist->curr_param[1] = (u32)(u16)z; + displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x8; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; } //TODO: name arguments -ARM_FUNC void G3B_PolygonAttr(struct DL *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6){ - *(u32 *)displaylist->var00 = 0x29; - *displaylist->var04 = r1 | r2 << 0x4 | r3 << 0x6 | r6 | r4 << 0x18 | r5 << 0x10; - displaylist->var00 = (u8 *)displaylist->var04 + 0x4; - displaylist->var04 = (u32 *)displaylist->var00 + 1; +ARM_FUNC void G3B_PolygonAttr(struct GXDLInfo *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6){ + *(u32 *)displaylist->curr_cmd = 0x29; + *displaylist->curr_param = r1 | r2 << 0x4 | r3 << 0x6 | r6 | r4 << 0x18 | r5 << 0x10; + displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; } -ARM_FUNC void G3B_MaterialColorDiffAmb(struct DL *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace){ - *(u32 *)displaylist->var00 = 0x30; +ARM_FUNC void G3B_MaterialColorDiffAmb(struct GXDLInfo *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace){ + *(u32 *)displaylist->curr_cmd = 0x30; u32 replace_vtx_color_with_diffuse; if (replace) replace_vtx_color_with_diffuse = TRUE; else replace_vtx_color_with_diffuse = FALSE; - *displaylist->var04 = diffuse_col | ambient_col << 0x10 | replace_vtx_color_with_diffuse << 0xF; - displaylist->var00 = (u8 *)displaylist->var04 + 0x4; - displaylist->var04 = (u32 *)displaylist->var00 + 1; + *displaylist->curr_param = diffuse_col | ambient_col << 0x10 | replace_vtx_color_with_diffuse << 0xF; + displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; } -ARM_FUNC void G3B_MaterialColorSpecEmi(struct DL *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table){ - *(u32 *)displaylist->var00 = 0x31; +ARM_FUNC void G3B_MaterialColorSpecEmi(struct GXDLInfo *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table){ + *(u32 *)displaylist->curr_cmd = 0x31; u32 enable_shininess_table; if (shiny_table) enable_shininess_table = TRUE; else enable_shininess_table = FALSE; - *displaylist->var04 = specular_col | emission_col << 0x10 | enable_shininess_table << 0xF; - displaylist->var00 = (u8 *)displaylist->var04 + 0x4; - displaylist->var04 = (u32 *)displaylist->var00 + 1; + *displaylist->curr_param = specular_col | emission_col << 0x10 | enable_shininess_table << 0xF; + displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; } /* @@ -92,29 +92,29 @@ Only feed normalized Vectors only the fractional part and the sign, which is in the first nonfraction bit since the vector is assumed to be normalized, are used */ -ARM_FUNC void G3B_LightVector(struct DL * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z){ - *(u32 *)displaylist->var00 = 0x32; - *displaylist->var04 = ((x >> 3) & 0x3FF) | (((y >> 3) & 0x3FF) << 0xA) | (((z >> 3) & 0x3FF) << 0x14) | light_num << 0x1E; - displaylist->var00 = (u8 *)displaylist->var04 + 0x4; - displaylist->var04 = (u32 *)displaylist->var00 + 1; +ARM_FUNC void G3B_LightVector(struct GXDLInfo * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z){ + *(u32 *)displaylist->curr_cmd = 0x32; + *displaylist->curr_param = ((x >> 3) & 0x3FF) | (((y >> 3) & 0x3FF) << 0xA) | (((z >> 3) & 0x3FF) << 0x14) | light_num << 0x1E; + displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; } -ARM_FUNC void G3B_LightColor(struct DL * displaylist, u32 light_num, u32 col){ - *(u32 *)displaylist->var00 = 0x33; - *displaylist->var04 = col | light_num << 0x1E; - displaylist->var00 = (u8 *)displaylist->var04 + 0x4; - displaylist->var04 = (u32 *)displaylist->var00 + 1; +ARM_FUNC void G3B_LightColor(struct GXDLInfo * displaylist, u32 light_num, u32 col){ + *(u32 *)displaylist->curr_cmd = 0x33; + *displaylist->curr_param = col | light_num << 0x1E; + displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; } -ARM_FUNC void G3B_Begin(struct DL * displaylist, u32 type){ - *(u32 *)displaylist->var00 = 0x40; - *displaylist->var04 = type; - displaylist->var00 = (u8 *)displaylist->var04 + 0x4; - displaylist->var04 = (u32 *)displaylist->var00 + 1; +ARM_FUNC void G3B_Begin(struct GXDLInfo * displaylist, u32 type){ + *(u32 *)displaylist->curr_cmd = 0x40; + *displaylist->curr_param = type; + displaylist->curr_cmd = (u8 *)displaylist->curr_param + 0x4; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; } -ARM_FUNC void G3B_End(struct DL * displaylist){ - *(u32 *)displaylist->var00 = 0x41; - displaylist->var00 = (u8 *)displaylist->var04; - displaylist->var04 = (u32 *)displaylist->var00 + 1; +ARM_FUNC void G3B_End(struct GXDLInfo * displaylist){ + *(u32 *)displaylist->curr_cmd = 0x41; + displaylist->curr_cmd = (u8 *)displaylist->curr_param; + displaylist->curr_param = (u32 *)displaylist->curr_cmd + 1; } diff --git a/arm9/lib/src/GX_state.c b/arm9/lib/src/GX_state.c index 7da3e1b4..db313c31 100644 --- a/arm9/lib/src/GX_state.c +++ b/arm9/lib/src/GX_state.c @@ -2,22 +2,22 @@ #include "main.h" #include "gx.h" -extern struct VRAM_banks UNK_021D33C4; +extern struct GX_State gGXState; ARM_FUNC void GX_InitGXState(){ - UNK_021D33C4.var00 = 0x0; - UNK_021D33C4.var02 = 0x0; - UNK_021D33C4.var04 = 0x0; - UNK_021D33C4.var06 = 0x0; - UNK_021D33C4.var08 = 0x0; - UNK_021D33C4.var0A = 0x0; - UNK_021D33C4.var0C = 0x0; - UNK_021D33C4.var0E = 0x0; - UNK_021D33C4.var10 = 0x0; - UNK_021D33C4.var12 = 0x0; - UNK_021D33C4.var14 = 0x0; - UNK_021D33C4.var16 = 0x0; - UNK_021D33C4.var18 = 0x0; + gGXState.lcdc = 0x0; + gGXState.bg = 0x0; + gGXState.obj = 0x0; + gGXState.arm7 = 0x0; + gGXState.tex = 0x0; + gGXState.texPltt = 0x0; + gGXState.clrImg = 0x0; + gGXState.bgExtPltt = 0x0; + gGXState.objExtPltt = 0x0; + gGXState.sub_bg = 0x0; + gGXState.sub_obj = 0x0; + gGXState.sub_bgExtPltt = 0x0; + gGXState.sub_objExtPltt = 0x0; reg_GX_VRAMCNT = 0x0; reg_GX_VRAMCNT_E = 0x0; reg_GX_VRAMCNT_F = 0x0; diff --git a/arm9/lib/src/GX_vramcnt.c b/arm9/lib/src/GX_vramcnt.c index 18507fa4..da55d806 100644 --- a/arm9/lib/src/GX_vramcnt.c +++ b/arm9/lib/src/GX_vramcnt.c @@ -3,7 +3,7 @@ #include "gx.h" extern u16 UNK_021D33BC; -extern struct VRAM_banks UNK_021D33C4; +extern struct GX_State gGXState; ARM_FUNC void GX_VRAMCNT_SetLCDC_(u32 mask){ if (mask & (0x1 << 0)) @@ -27,8 +27,8 @@ ARM_FUNC void GX_VRAMCNT_SetLCDC_(u32 mask){ } ARM_FUNC void GX_SetBankForBG(s32 bg){ - UNK_021D33C4.var00 = (u16)(~bg & (UNK_021D33C4.var00 | UNK_021D33C4.var02)); - UNK_021D33C4.var02 = bg; + gGXState.lcdc = (u16)(~bg & (gGXState.lcdc | gGXState.bg)); + gGXState.bg = bg; switch (bg) { case 8: @@ -96,12 +96,12 @@ ARM_FUNC void GX_SetBankForBG(s32 bg){ default: break; } - GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); } ARM_FUNC void GX_SetBankForOBJ(s32 obj){ - UNK_021D33C4.var00 = (u16)(~obj & (UNK_021D33C4.var00 | UNK_021D33C4.var04)); - UNK_021D33C4.var04 = obj; + gGXState.lcdc = (u16)(~obj & (gGXState.lcdc | gGXState.obj)); + gGXState.obj = obj; switch (obj) { case 3: @@ -135,12 +135,12 @@ ARM_FUNC void GX_SetBankForOBJ(s32 obj){ default: break; } - GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); } ARM_FUNC void GX_SetBankForBGExtPltt(s32 bgextpltt){ - UNK_021D33C4.var00 = (u16)(~bgextpltt & (UNK_021D33C4.var00 | UNK_021D33C4.var0E)); - UNK_021D33C4.var0E = bgextpltt; + gGXState.lcdc = (u16)(~bgextpltt & (gGXState.lcdc | gGXState.bgExtPltt)); + gGXState.bgExtPltt = bgextpltt; switch (bgextpltt) { case 0x10: @@ -161,12 +161,12 @@ ARM_FUNC void GX_SetBankForBGExtPltt(s32 bgextpltt){ reg_GX_DISPCNT &= ~0x40000000; break; } - GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); } ARM_FUNC void GX_SetBankForOBJExtPltt(s32 objextpltt){ - UNK_021D33C4.var00 = (u16)(~objextpltt & (UNK_021D33C4.var00 | UNK_021D33C4.var10)); - UNK_021D33C4.var10 = objextpltt; + gGXState.lcdc = (u16)(~objextpltt & (gGXState.lcdc | gGXState.objExtPltt)); + gGXState.objExtPltt = objextpltt; switch (objextpltt) { case 32: @@ -181,12 +181,12 @@ ARM_FUNC void GX_SetBankForOBJExtPltt(s32 objextpltt){ reg_GX_DISPCNT &= ~0x80000000; break; } - GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); } ARM_FUNC void GX_SetBankForTex(s32 tex){ - UNK_021D33C4.var00 = (u16)(~tex & (UNK_021D33C4.var00 | UNK_021D33C4.var08)); - UNK_021D33C4.var08 = tex; + gGXState.lcdc = (u16)(~tex & (gGXState.lcdc | gGXState.tex)); + gGXState.tex = tex; if (tex == 0) { reg_G3X_DISP3DCNT &= 0x0000CFFE; @@ -244,12 +244,12 @@ ARM_FUNC void GX_SetBankForTex(s32 tex){ break; } } - GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); } ARM_FUNC void GX_SetBankForTexPltt(s32 texpltt){ - UNK_021D33C4.var00 = (u16)(~texpltt & (UNK_021D33C4.var00 | UNK_021D33C4.var0A)); - UNK_021D33C4.var0A = texpltt; + gGXState.lcdc = (u16)(~texpltt & (gGXState.lcdc | gGXState.texPltt)); + gGXState.texPltt = texpltt; switch (texpltt) { case 0: //needed to match @@ -270,12 +270,12 @@ ARM_FUNC void GX_SetBankForTexPltt(s32 texpltt){ reg_GX_VRAMCNT_G = 0x83; break; } - GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); } ARM_FUNC void GX_SetBankForClearImage(s32 clearimage){ - UNK_021D33C4.var00 = (u16)(~clearimage & (UNK_021D33C4.var00 | UNK_021D33C4.var0C)); - UNK_021D33C4.var0C = clearimage; + gGXState.lcdc = (u16)(~clearimage & (gGXState.lcdc | gGXState.clrImg)); + gGXState.clrImg = clearimage; switch (clearimage) { case 3: @@ -301,12 +301,12 @@ ARM_FUNC void GX_SetBankForClearImage(s32 clearimage){ reg_GX_VRAMCNT_C = 0x9B; reg_G3X_DISP3DCNT |= 0x4000; } - GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); } ARM_FUNC void GX_SetBankForARM7(s32 arm7){ - UNK_021D33C4.var00 = (u16)(~arm7 & (UNK_021D33C4.var00 | UNK_021D33C4.var06)); - UNK_021D33C4.var06 = arm7; + gGXState.lcdc = (u16)(~arm7 & (gGXState.lcdc | gGXState.arm7)); + gGXState.arm7 = arm7; switch (arm7) { case 0: //needed to match @@ -321,17 +321,17 @@ ARM_FUNC void GX_SetBankForARM7(s32 arm7){ case 8: reg_GX_VRAMCNT_D = 0x82; } - GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); } ARM_FUNC void GX_SetBankForLCDC(s32 lcdc){ - UNK_021D33C4.var00 |= lcdc; + gGXState.lcdc |= lcdc; GX_VRAMCNT_SetLCDC_(lcdc); } ARM_FUNC void GX_SetBankForSubBG(s32 subbg){ - UNK_021D33C4.var00 = (u16)(~subbg & (UNK_021D33C4.var00 | UNK_021D33C4.var12)); - UNK_021D33C4.var12 = subbg; + gGXState.lcdc = (u16)(~subbg & (gGXState.lcdc | gGXState.sub_bg)); + gGXState.sub_bg = subbg; switch (subbg) { case 0: //needed to match @@ -344,13 +344,13 @@ ARM_FUNC void GX_SetBankForSubBG(s32 subbg){ case 128: reg_GX_VRAMCNT_H = 0x81; } - GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); } ARM_FUNC void GX_SetBankForSubOBJ(s32 subobj){ - UNK_021D33C4.var00 = (u16)(~subobj & (UNK_021D33C4.var00 | UNK_021D33C4.var14)); - UNK_021D33C4.var14 = subobj; + gGXState.lcdc = (u16)(~subobj & (gGXState.lcdc | gGXState.sub_obj)); + gGXState.sub_obj = subobj; switch (subobj) { case 8: @@ -362,12 +362,12 @@ ARM_FUNC void GX_SetBankForSubOBJ(s32 subobj){ case 0: //needed to match break; } - GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); } ARM_FUNC void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){ - UNK_021D33C4.var00 = (u16)(~subbgextpltt & (UNK_021D33C4.var00 | UNK_021D33C4.var16)); - UNK_021D33C4.var16 = subbgextpltt; + gGXState.lcdc = (u16)(~subbgextpltt & (gGXState.lcdc | gGXState.sub_bgExtPltt)); + gGXState.sub_bgExtPltt = subbgextpltt; switch (subbgextpltt) { case 128: @@ -378,12 +378,12 @@ ARM_FUNC void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){ reg_GXS_DB_DISPCNT &= ~0x40000000; break; } - GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); } ARM_FUNC void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){ - UNK_021D33C4.var00 = (u16)(~subobjextpltt & (UNK_021D33C4.var00 | UNK_021D33C4.var18)); - UNK_021D33C4.var18 = subobjextpltt; + gGXState.lcdc = (u16)(~subobjextpltt & (gGXState.lcdc | gGXState.sub_objExtPltt)); + gGXState.sub_objExtPltt = subobjextpltt; switch (subobjextpltt) { case 256: @@ -394,63 +394,63 @@ ARM_FUNC void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){ reg_GXS_DB_DISPCNT &= ~0x80000000; break; } - GX_VRAMCNT_SetLCDC_(UNK_021D33C4.var00); + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); } ARM_FUNC u32 FUN_020C6130(u16 *ptr){ u16 temp = *ptr; *ptr = 0; - UNK_021D33C4.var00 |= temp; + gGXState.lcdc |= temp; GX_VRAMCNT_SetLCDC_(temp); return temp; } ARM_FUNC u32 GX_ResetBankForBG(){ - return FUN_020C6130(&UNK_021D33C4.var02); + return FUN_020C6130(&gGXState.bg); } ARM_FUNC u32 GX_ResetBankForOBJ(){ - return FUN_020C6130(&UNK_021D33C4.var04); + return FUN_020C6130(&gGXState.obj); } ARM_FUNC u32 GX_ResetBankForBGExtPltt(){ reg_GX_DISPCNT &= ~0x40000000; - return FUN_020C6130(&UNK_021D33C4.var0E); + return FUN_020C6130(&gGXState.bgExtPltt); } ARM_FUNC u32 GX_ResetBankForOBJExtPltt(){ reg_GX_DISPCNT &= ~0x80000000; - return FUN_020C6130(&UNK_021D33C4.var10); + return FUN_020C6130(&gGXState.objExtPltt); } ARM_FUNC u32 GX_ResetBankForTex(){ - return FUN_020C6130(&UNK_021D33C4.var08); + return FUN_020C6130(&gGXState.tex); } ARM_FUNC u32 GX_ResetBankForTexPltt(){ - return FUN_020C6130(&UNK_021D33C4.var0A); + return FUN_020C6130(&gGXState.texPltt); } ARM_FUNC u32 GX_ResetBankForClearImage(){ - return FUN_020C6130(&UNK_021D33C4.var0C); + return FUN_020C6130(&gGXState.clrImg); } ARM_FUNC u32 GX_ResetBankForSubBG(){ - return FUN_020C6130(&UNK_021D33C4.var12); + return FUN_020C6130(&gGXState.sub_bg); } ARM_FUNC u32 FUN_020C605C(){ - return FUN_020C6130(&UNK_021D33C4.var14); + return FUN_020C6130(&gGXState.sub_obj); } ARM_FUNC u32 FUN_020C6034(){ reg_GXS_DB_DISPCNT &= ~0x40000000; - return FUN_020C6130(&UNK_021D33C4.var16); + return FUN_020C6130(&gGXState.sub_bgExtPltt); } ARM_FUNC u32 GX_ResetBankForSubOBJ(){ reg_GXS_DB_DISPCNT &= ~0x80000000; - return FUN_020C6130(&UNK_021D33C4.var18); + return FUN_020C6130(&gGXState.sub_objExtPltt); } ARM_FUNC u32 FUN_020C5F28(u16 *ptr){ @@ -479,101 +479,101 @@ ARM_FUNC u32 FUN_020C5F28(u16 *ptr){ } ARM_FUNC u32 disableBankForX_(){ - return FUN_020C5F28(&UNK_021D33C4.var02); + return FUN_020C5F28(&gGXState.bg); } ARM_FUNC u32 GX_DisableBankForOBJExtPltt_2(){ - return FUN_020C5F28(&UNK_021D33C4.var04); + return FUN_020C5F28(&gGXState.obj); } ARM_FUNC u32 GX_DisableBankForBGExtPltt(){ reg_GX_DISPCNT &= ~0x40000000; - return FUN_020C5F28(&UNK_021D33C4.var0E); + return FUN_020C5F28(&gGXState.bgExtPltt); } ARM_FUNC u32 GX_DisableBankForOBJExtPltt(){ reg_GX_DISPCNT &= ~0x80000000; - return FUN_020C5F28(&UNK_021D33C4.var10); + return FUN_020C5F28(&gGXState.objExtPltt); } ARM_FUNC u32 GX_DisableBankForTexPltt_2(){ - return FUN_020C5F28(&UNK_021D33C4.var08); + return FUN_020C5F28(&gGXState.tex); } ARM_FUNC u32 GX_DisableBankForTexPltt(){ - return FUN_020C5F28(&UNK_021D33C4.var0A); + return FUN_020C5F28(&gGXState.texPltt); } ARM_FUNC u32 GX_DisableBankForClearImage(){ - return FUN_020C5F28(&UNK_021D33C4.var0C); + return FUN_020C5F28(&gGXState.clrImg); } ARM_FUNC u32 GX_DisableBankForARM7(){ - return FUN_020C5F28(&UNK_021D33C4.var06); + return FUN_020C5F28(&gGXState.arm7); } ARM_FUNC u32 GX_DisableBankForLCDC(){ - return FUN_020C5F28(&UNK_021D33C4.var00); + return FUN_020C5F28(&gGXState.lcdc); } ARM_FUNC u32 GX_DisableBankForSubBGExtPltt(){ - return FUN_020C5F28(&UNK_021D33C4.var12); + return FUN_020C5F28(&gGXState.sub_bg); } ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt_2(){ - return FUN_020C5F28(&UNK_021D33C4.var14); + return FUN_020C5F28(&gGXState.sub_obj); } ARM_FUNC u32 FUN_020C5E04(){ reg_GXS_DB_DISPCNT &= ~0x40000000; - return FUN_020C5F28(&UNK_021D33C4.var16); + return FUN_020C5F28(&gGXState.sub_bgExtPltt); } ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt(){ reg_GXS_DB_DISPCNT &= ~0x80000000; - return FUN_020C5F28(&UNK_021D33C4.var18); + return FUN_020C5F28(&gGXState.sub_objExtPltt); } ARM_FUNC u32 GX_GetBankForBGExtPltt_2(){ - return UNK_021D33C4.var02; + return gGXState.bg; } ARM_FUNC u32 GX_GetBankForOBJ(){ - return UNK_021D33C4.var04; + return gGXState.obj; } ARM_FUNC u32 GX_GetBankForBGExtPltt(){ - return UNK_021D33C4.var0E; + return gGXState.bgExtPltt; } ARM_FUNC u32 GX_GetBankForOBJExtPltt(){ - return UNK_021D33C4.var10; + return gGXState.objExtPltt; } ARM_FUNC u32 FUN_020C5D8C(){ - return UNK_021D33C4.var08; + return gGXState.tex; } ARM_FUNC u32 GX_GetBankForTexPltt(){ - return UNK_021D33C4.var0A; + return gGXState.texPltt; } ARM_FUNC u32 GX_GetBankForLCDC(){ - return UNK_021D33C4.var00; + return gGXState.lcdc; } ARM_FUNC u32 GX_GetBankForSubBGExtPltt_2(){ - return UNK_021D33C4.var12; + return gGXState.sub_bg; } ARM_FUNC u32 GX_GetBankForSubOBJ(){ - return UNK_021D33C4.var14; + return gGXState.sub_obj; } ARM_FUNC u32 GX_GetBankForSubBGExtPltt(){ - return UNK_021D33C4.var16; + return gGXState.sub_bgExtPltt; } ARM_FUNC u32 GX_GetBankForSubOBJExtPltt(){ - return UNK_021D33C4.var18; + return gGXState.sub_objExtPltt; } diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt index 587556dc..25771881 100644 --- a/arm9/undefined_syms.txt +++ b/arm9/undefined_syms.txt @@ -23,7 +23,7 @@ SDK_OVERLAY_DIGEST_END = 0x02106F84; //GX gUnk021D33BC = 0x021D33BC; gUnk021D33C0 = 0x021D33C0; -UNK_021D33C4 = 0x021D33C4; +gGXState = 0x021D33C4; UNK_021D33E0 = 0x021D33E0; UNK_021D33E4 = 0x021D33E4; -- cgit v1.2.3 From fc177ec7c3976d54b24ef480a29b301ef26e7073 Mon Sep 17 00:00:00 2001 From: red031000 Date: Sun, 17 May 2020 17:43:10 +0100 Subject: fill out _OSThread --- arm9/lib/include/CP_context.h | 18 +++++++++++++ arm9/lib/include/OS_alarm.h | 27 +++++++++++++++++++ arm9/lib/include/OS_context.h | 22 +++++++++++++++ arm9/lib/include/OS_init.h | 4 +++ arm9/lib/include/OS_mutex.h | 20 ++++++++++++++ arm9/lib/include/OS_thread.h | 62 ++++++++++++++++++++++++++++++++++++++++++- arm9/lib/include/OS_tick.h | 12 +++++++++ 7 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 arm9/lib/include/CP_context.h create mode 100644 arm9/lib/include/OS_alarm.h create mode 100644 arm9/lib/include/OS_context.h create mode 100644 arm9/lib/include/OS_mutex.h create mode 100644 arm9/lib/include/OS_tick.h diff --git a/arm9/lib/include/CP_context.h b/arm9/lib/include/CP_context.h new file mode 100644 index 00000000..d1e0062c --- /dev/null +++ b/arm9/lib/include/CP_context.h @@ -0,0 +1,18 @@ +// +// Created by red031000 on 2020-05-17. +// + +#ifndef POKEDIAMOND_CP_CONTEXT_H +#define POKEDIAMOND_CP_CONTEXT_H + +#include "types.h" + +typedef struct CPContext { + u64 div_numer; + u64 div_denom; + u64 sqrt; + u16 div_mode; + u16 sqrt_mode; +} CPContext; + +#endif //POKEDIAMOND_CP_CONTEXT_H diff --git a/arm9/lib/include/OS_alarm.h b/arm9/lib/include/OS_alarm.h new file mode 100644 index 00000000..6971248a --- /dev/null +++ b/arm9/lib/include/OS_alarm.h @@ -0,0 +1,27 @@ +// +// Created by red031000 on 2020-05-17. +// + +#ifndef POKEDIAMOND_OS_ALARM_H +#define POKEDIAMOND_OS_ALARM_H + +#include "types.h" +#include "OS_thread.h" + +typedef void (*OSAlarmHandler) (void *); + +struct OSiAlarm +{ + OSAlarmHandler handler; + void *arg; + + u32 tag; + OSTick fire; + OSAlarm *prev; + OSAlarm *next; + + OSTick period; + OSTick start; +}; + +#endif //POKEDIAMOND_OS_ALARM_H diff --git a/arm9/lib/include/OS_context.h b/arm9/lib/include/OS_context.h new file mode 100644 index 00000000..c0ab62f1 --- /dev/null +++ b/arm9/lib/include/OS_context.h @@ -0,0 +1,22 @@ +// +// Created by red031000 on 2020-05-17. +// + +#ifndef POKEDIAMOND_OS_CONTEXT_H +#define POKEDIAMOND_OS_CONTEXT_H + +#include "types.h" +#include "CP_context.h" + +typedef struct OSContext +{ + u32 cpsr; + u32 r[13]; + u32 sp; + u32 lr; + u32 pc_plus4; + u32 sp_svc; + CPContext cp_context; +} OSContext; + +#endif //POKEDIAMOND_OS_CONTEXT_H diff --git a/arm9/lib/include/OS_init.h b/arm9/lib/include/OS_init.h index dd2b20c7..a998b45e 100644 --- a/arm9/lib/include/OS_init.h +++ b/arm9/lib/include/OS_init.h @@ -9,6 +9,10 @@ #include "consts.h" #include "OS_tcm.h" #include "OS_spinLock.h" +#include "OS_context.h" +#include "OS_tick.h" +#include "OS_alarm.h" +#include "OS_mutex.h" #include "OS_thread.h" #include "OS_protectionRegion.h" #include "OS_entropy.h" diff --git a/arm9/lib/include/OS_mutex.h b/arm9/lib/include/OS_mutex.h new file mode 100644 index 00000000..abd79724 --- /dev/null +++ b/arm9/lib/include/OS_mutex.h @@ -0,0 +1,20 @@ +// +// Created by red031000 on 2020-05-17. +// + +#ifndef POKEDIAMOND_OS_MUTEX_H +#define POKEDIAMOND_OS_MUTEX_H + +#include "types.h" +#include "OS_thread.h" + +#pragma warn_padding off //apparently needed? +struct OSMutex { + OSThreadQueue queue; + OSThread *thread; + s32 count; + OSMutexLink link; +}; +#pragma warn_padding reset + +#endif //POKEDIAMOND_OS_MUTEX_H diff --git a/arm9/lib/include/OS_thread.h b/arm9/lib/include/OS_thread.h index 15cec0c9..96226c71 100644 --- a/arm9/lib/include/OS_thread.h +++ b/arm9/lib/include/OS_thread.h @@ -5,7 +5,16 @@ #ifndef POKEDIAMOND_OS_THREAD_H #define POKEDIAMOND_OS_THREAD_H +#include "types.h" +#include "OS_context.h" + +typedef struct OSiAlarm OSAlarm; + typedef struct _OSThread OSThread; +typedef struct _OSThreadLink OSThreadLink; +typedef struct _OSMutexQueue OSMutexQueue; +typedef struct _OSMutexLink OSMutexLink; +typedef struct OSMutex OSMutex; struct _OSThreadQueue { @@ -13,7 +22,26 @@ struct _OSThreadQueue OSThread *tail; }; +struct _OSThreadLink +{ + OSThread *prev; + OSThread *next; +}; + +struct _OSMutexQueue +{ + OSMutex *head; + OSMutex *tail; +}; + +struct _OSMutexLink +{ + OSMutex *next; + OSMutex *prev; +}; + typedef struct _OSThreadQueue OSThreadQueue; +typedef struct _OSThreadLink OSThreadLink; typedef struct OSThreadInfo { u16 isNeedRescheduling; @@ -23,9 +51,41 @@ typedef struct OSThreadInfo { void* switchCallback; // type: OSSwitchThreadCallback } OSThreadInfo; +typedef enum { + OS_THREAD_STATE_WAITING = 0, + OS_THREAD_STATE_READY = 1, + OS_THREAD_STATE_TERMINATED = 2 +} OSThreadState; + +typedef void (*OSThreadDestructor) (void *); + struct _OSThread { - u8 padding[0x80]; //todo: not the correct size but idfk + OSContext context; + OSThreadState state; + OSThread *next; + u32 id; + u32 priority; + void *profiler; + + OSThreadQueue *queue; + OSThreadLink link; + + OSMutex *mutex; + OSMutexQueue mutexQueue; + + u32 stackTop; + u32 stackBottom; + u32 stackWarningOffset; + + OSThreadQueue joinQueue; + + void *specific[3]; + OSAlarm *alarmForSleep; + OSThreadDestructor destructor; + void *userParameter; + + u32 systemErrno; }; void OS_SleepThread(OSThreadQueue * queue); diff --git a/arm9/lib/include/OS_tick.h b/arm9/lib/include/OS_tick.h new file mode 100644 index 00000000..fbb8ce9e --- /dev/null +++ b/arm9/lib/include/OS_tick.h @@ -0,0 +1,12 @@ +// +// Created by red031000 on 2020-05-17. +// + +#ifndef POKEDIAMOND_OS_TICK_H +#define POKEDIAMOND_OS_TICK_H + +#include "types.h" + +typedef u64 OSTick; + +#endif //POKEDIAMOND_OS_TICK_H -- cgit v1.2.3 From 2ac260c49fa1203c27d96fc792a562460e0b4724 Mon Sep 17 00:00:00 2001 From: red031000 Date: Sun, 17 May 2020 17:58:24 +0100 Subject: remove duplicate typedef --- arm9/lib/include/OS_thread.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/arm9/lib/include/OS_thread.h b/arm9/lib/include/OS_thread.h index 96226c71..adcadf2e 100644 --- a/arm9/lib/include/OS_thread.h +++ b/arm9/lib/include/OS_thread.h @@ -11,6 +11,8 @@ typedef struct OSiAlarm OSAlarm; typedef struct _OSThread OSThread; + +typedef struct _OSThreadQueue OSThreadQueue; typedef struct _OSThreadLink OSThreadLink; typedef struct _OSMutexQueue OSMutexQueue; typedef struct _OSMutexLink OSMutexLink; @@ -40,9 +42,6 @@ struct _OSMutexLink OSMutex *prev; }; -typedef struct _OSThreadQueue OSThreadQueue; -typedef struct _OSThreadLink OSThreadLink; - typedef struct OSThreadInfo { u16 isNeedRescheduling; u16 irqDepth; -- cgit v1.2.3 From 648c9421d8ecbd8642f4ae393ab8add89fb3dc00 Mon Sep 17 00:00:00 2001 From: Made Date: Mon, 18 May 2020 02:10:36 +0200 Subject: Add enums and some other stuff and split header --- arm9/lib/include/GX_asm.h | 6 + arm9/lib/include/GX_bgcnt.h | 347 ++++++++++++++++++++++++++++++++++ arm9/lib/include/GX_dma.h | 53 ++++++ arm9/lib/include/GX_g2.h | 14 ++ arm9/lib/include/GX_g3.h | 184 ++++++++++++++++++ arm9/lib/include/GX_g3_util.h | 11 ++ arm9/lib/include/GX_g3b.h | 21 +++ arm9/lib/include/GX_g3imm.h | 10 + arm9/lib/include/GX_g3x.h | 69 +++++++ arm9/lib/include/GX_load2d.h | 41 ++++ arm9/lib/include/GX_load3d.h | 15 ++ arm9/lib/include/GX_state.h | 24 +++ arm9/lib/include/GX_struct_2d.h | 243 ++++++++++++++++++++++++ arm9/lib/include/GX_vramcnt.h | 57 ++++++ arm9/lib/include/GXcommon.h | 29 +++ arm9/lib/include/gx.h | 406 +++++++++++++++------------------------- arm9/lib/src/GX_load2d.c | 68 ++++--- arm9/lib/src/GX_load3d.c | 21 +-- 18 files changed, 1317 insertions(+), 302 deletions(-) create mode 100644 arm9/lib/include/GX_asm.h create mode 100644 arm9/lib/include/GX_bgcnt.h create mode 100644 arm9/lib/include/GX_dma.h create mode 100644 arm9/lib/include/GX_g2.h create mode 100644 arm9/lib/include/GX_g3.h create mode 100644 arm9/lib/include/GX_g3_util.h create mode 100644 arm9/lib/include/GX_g3b.h create mode 100644 arm9/lib/include/GX_g3imm.h create mode 100644 arm9/lib/include/GX_g3x.h create mode 100644 arm9/lib/include/GX_load2d.h create mode 100644 arm9/lib/include/GX_load3d.h create mode 100644 arm9/lib/include/GX_state.h create mode 100644 arm9/lib/include/GX_struct_2d.h create mode 100644 arm9/lib/include/GX_vramcnt.h create mode 100644 arm9/lib/include/GXcommon.h diff --git a/arm9/lib/include/GX_asm.h b/arm9/lib/include/GX_asm.h new file mode 100644 index 00000000..d2622508 --- /dev/null +++ b/arm9/lib/include/GX_asm.h @@ -0,0 +1,6 @@ +#ifndef GUARD_GX_ASM_H +#define GUARD_GX_ASM_H + +void GX_SendFifo48B(register void *pSrc, register void *pDest); + +#endif //GUARD_GX_ASM_H diff --git a/arm9/lib/include/GX_bgcnt.h b/arm9/lib/include/GX_bgcnt.h new file mode 100644 index 00000000..a581443e --- /dev/null +++ b/arm9/lib/include/GX_bgcnt.h @@ -0,0 +1,347 @@ +#ifndef GUARD_GX_BGCNT_H +#define GUARD_GX_BGCNT_H + +void *G2_GetBG0ScrPtr(); +void *G2S_GetBG0ScrPtr(); +void *G2_GetBG1ScrPtr(); +void *G2S_GetBG1ScrPtr(); +void *G2_GetBG2ScrPtr(); +void *G2S_GetBG2ScrPtr(); +void *G2_GetBG3ScrPtr(); +void *G2S_GetBG3ScrPtr(); +void *G2_GetBG0CharPtr(); +void *G2S_GetBG0CharPtr(); +void *G2_GetBG1CharPtr(); +void *G2S_GetBG1CharPtr(); +void *G2_GetBG2CharPtr(); +void *G2S_GetBG2CharPtr(); +void *G2_GetBG3CharPtr(); +void *G2S_GetBG3CharPtr(); + +typedef union +{ + u16 raw; + struct + { + u16 priority:2; + u16 charBase:4; + u16 mosaic:1; + u16 colorMode:1; + u16 screenBase:5; + u16 bgExtPltt:1; + u16 screenSize:2; + }; +} +GXBg01Control; + +typedef union +{ + u16 raw; + struct + { + u16 priority:2; + u16 charBase:4; + u16 mosaic:1; + u16 colorMode:1; + u16 screenBase:5; + u16 _reserve:1; + u16 screenSize:2; + }; +} +GXBg23ControlText; + +typedef union +{ + u16 raw; + struct + { + u16 priority:2; + u16 charBase:4; + u16 mosaic:1; + u16 _reserve:1; + u16 screenBase:5; + u16 areaOver:1; + u16 screenSize:2; + }; +} +GXBg23ControlAffine; + +typedef union +{ + u16 raw; + struct + { + u16 priority:2; + u16 _reserve1:1; + u16 charBase:3; + u16 mosaic:1; + u16 _reserve2:1; + u16 screenBase:5; + u16 areaOver:1; + u16 screenSize:2; + }; +} +GXBg23Control256x16Pltt; + + +typedef union +{ + u16 raw; + struct + { + u16 priority:2; + u16 _reserve1:4; + u16 mosaic:1; + u16 _reserve2:1; + u16 screenBase:5; + u16 areaOver:1; + u16 screenSize:2; + }; +} +GXBg23Control256Bmp, GXBg23ControlDCBmp; + +typedef union +{ + u16 raw; + struct + { + u16 priority:2; + u16 _reserve1:4; + u16 mosaic:1; + u16 _reserve2:6; + u16 areaOver:1; + u16 screenSize:2; + }; +} +GXBg2ControlLargeBmp; + + + +typedef enum +{ + GX_BG_SCRSIZE_TEXT_256x256 = 0, + GX_BG_SCRSIZE_TEXT_512x256 = 1, + GX_BG_SCRSIZE_TEXT_256x512 = 2, + GX_BG_SCRSIZE_TEXT_512x512 = 3 +} +GXBGScrSizeText; + +typedef enum +{ + GX_BG_SCRSIZE_AFFINE_128x128 = 0, + GX_BG_SCRSIZE_AFFINE_256x256 = 1, + GX_BG_SCRSIZE_AFFINE_512x512 = 2, + GX_BG_SCRSIZE_AFFINE_1024x1024 = 3 +} +GXBGScrSizeAffine; + +typedef enum +{ + GX_BG_SCRSIZE_256x16PLTT_128x128 = 0, + GX_BG_SCRSIZE_256x16PLTT_256x256 = 1, + GX_BG_SCRSIZE_256x16PLTT_512x512 = 2, + GX_BG_SCRSIZE_256x16PLTT_1024x1024 = 3 +} +GXBGScrSize256x16Pltt; + +typedef enum +{ + GX_BG_SCRSIZE_256BMP_128x128 = 0, + GX_BG_SCRSIZE_256BMP_256x256 = 1, + GX_BG_SCRSIZE_256BMP_512x256 = 2, + GX_BG_SCRSIZE_256BMP_512x512 = 3 +} +GXBGScrSize256Bmp; + +typedef enum +{ + GX_BG_SCRSIZE_DCBMP_128x128 = 0, + GX_BG_SCRSIZE_DCBMP_256x256 = 1, + GX_BG_SCRSIZE_DCBMP_512x256 = 2, + GX_BG_SCRSIZE_DCBMP_512x512 = 3 +} +GXBGScrSizeDcBmp; + +typedef enum +{ + GX_BG_SCRSIZE_LARGEBMP_512x1024 = 0, + GX_BG_SCRSIZE_LARGEBMP_1024x512 = 1 +} +GXBGScrSizeLargeBmp; + +typedef enum +{ + GX_BG_COLORMODE_16 = 0, + GX_BG_COLORMODE_256 = 1 +} +GXBGColorMode; + +typedef enum +{ + GX_BG_AREAOVER_XLU = 0, + GX_BG_AREAOVER_REPEAT = 1 +} +GXBGAreaOver; + +typedef enum +{ + GX_BG_CHARBASE_0x00000 = 0, + GX_BG_CHARBASE_0x04000 = 1, + GX_BG_CHARBASE_0x08000 = 2, + GX_BG_CHARBASE_0x0c000 = 3, + GX_BG_CHARBASE_0x10000 = 4, + GX_BG_CHARBASE_0x14000 = 5, + GX_BG_CHARBASE_0x18000 = 6, + GX_BG_CHARBASE_0x1c000 = 7, + GX_BG_CHARBASE_0x20000 = 8, + GX_BG_CHARBASE_0x24000 = 9, + GX_BG_CHARBASE_0x28000 = 10, + GX_BG_CHARBASE_0x2c000 = 11, + GX_BG_CHARBASE_0x30000 = 12, + GX_BG_CHARBASE_0x34000 = 13, + GX_BG_CHARBASE_0x38000 = 14, + GX_BG_CHARBASE_0x3c000 = 15 +} +GXBGCharBase; + +typedef enum +{ + GX_BG_SCRBASE_0x0000 = 0, + GX_BG_SCRBASE_0x0800 = 1, + GX_BG_SCRBASE_0x1000 = 2, + GX_BG_SCRBASE_0x1800 = 3, + GX_BG_SCRBASE_0x2000 = 4, + GX_BG_SCRBASE_0x2800 = 5, + GX_BG_SCRBASE_0x3000 = 6, + GX_BG_SCRBASE_0x3800 = 7, + GX_BG_SCRBASE_0x4000 = 8, + GX_BG_SCRBASE_0x4800 = 9, + GX_BG_SCRBASE_0x5000 = 10, + GX_BG_SCRBASE_0x5800 = 11, + GX_BG_SCRBASE_0x6000 = 12, + GX_BG_SCRBASE_0x6800 = 13, + GX_BG_SCRBASE_0x7000 = 14, + GX_BG_SCRBASE_0x7800 = 15, + GX_BG_SCRBASE_0x8000 = 16, + GX_BG_SCRBASE_0x8800 = 17, + GX_BG_SCRBASE_0x9000 = 18, + GX_BG_SCRBASE_0x9800 = 19, + GX_BG_SCRBASE_0xa000 = 20, + GX_BG_SCRBASE_0xa800 = 21, + GX_BG_SCRBASE_0xb000 = 22, + GX_BG_SCRBASE_0xb800 = 23, + GX_BG_SCRBASE_0xc000 = 24, + GX_BG_SCRBASE_0xc800 = 25, + GX_BG_SCRBASE_0xd000 = 26, + GX_BG_SCRBASE_0xd800 = 27, + GX_BG_SCRBASE_0xe000 = 28, + GX_BG_SCRBASE_0xe800 = 29, + GX_BG_SCRBASE_0xf000 = 30, + GX_BG_SCRBASE_0xf800 = 31 +} +GXBGScrBase; + +typedef enum +{ + GX_BG_BMPSCRBASE_0x00000 = 0, + GX_BG_BMPSCRBASE_0x04000 = 1, + GX_BG_BMPSCRBASE_0x08000 = 2, + GX_BG_BMPSCRBASE_0x0c000 = 3, + GX_BG_BMPSCRBASE_0x10000 = 4, + GX_BG_BMPSCRBASE_0x14000 = 5, + GX_BG_BMPSCRBASE_0x18000 = 6, + GX_BG_BMPSCRBASE_0x1c000 = 7, + GX_BG_BMPSCRBASE_0x20000 = 8, + GX_BG_BMPSCRBASE_0x24000 = 9, + GX_BG_BMPSCRBASE_0x28000 = 10, + GX_BG_BMPSCRBASE_0x2c000 = 11, + GX_BG_BMPSCRBASE_0x30000 = 12, + GX_BG_BMPSCRBASE_0x34000 = 13, + GX_BG_BMPSCRBASE_0x38000 = 14, + GX_BG_BMPSCRBASE_0x3c000 = 15, + GX_BG_BMPSCRBASE_0x40000 = 16, + GX_BG_BMPSCRBASE_0x44000 = 17, + GX_BG_BMPSCRBASE_0x48000 = 18, + GX_BG_BMPSCRBASE_0x4c000 = 19, + GX_BG_BMPSCRBASE_0x50000 = 20, + GX_BG_BMPSCRBASE_0x54000 = 21, + GX_BG_BMPSCRBASE_0x58000 = 22, + GX_BG_BMPSCRBASE_0x5c000 = 23, + GX_BG_BMPSCRBASE_0x60000 = 24, + GX_BG_BMPSCRBASE_0x64000 = 25, + GX_BG_BMPSCRBASE_0x68000 = 26, + GX_BG_BMPSCRBASE_0x6c000 = 27, + GX_BG_BMPSCRBASE_0x70000 = 28, + GX_BG_BMPSCRBASE_0x74000 = 29, + GX_BG_BMPSCRBASE_0x78000 = 30, + GX_BG_BMPSCRBASE_0x7c000 = 31 +} +GXBGBmpScrBase; + +typedef enum +{ + GX_BG_EXTPLTT_01 = 0, + GX_BG_EXTPLTT_23 = 1 +} +GXBGExtPltt; + +//GX_capture +typedef enum +{ + GX_CAPTURE_DEST_VRAM_A_0x00000 = 0, + GX_CAPTURE_DEST_VRAM_B_0x00000 = 1, + GX_CAPTURE_DEST_VRAM_C_0x00000 = 2, + GX_CAPTURE_DEST_VRAM_D_0x00000 = 3, + + GX_CAPTURE_DEST_VRAM_A_0x08000 = 4, + GX_CAPTURE_DEST_VRAM_B_0x08000 = 5, + GX_CAPTURE_DEST_VRAM_C_0x08000 = 6, + GX_CAPTURE_DEST_VRAM_D_0x08000 = 7, + + GX_CAPTURE_DEST_VRAM_A_0x10000 = 8, + GX_CAPTURE_DEST_VRAM_B_0x10000 = 9, + GX_CAPTURE_DEST_VRAM_C_0x10000 = 10, + GX_CAPTURE_DEST_VRAM_D_0x10000 = 11, + + GX_CAPTURE_DEST_VRAM_A_0x18000 = 12, + GX_CAPTURE_DEST_VRAM_B_0x18000 = 13, + GX_CAPTURE_DEST_VRAM_C_0x18000 = 14, + GX_CAPTURE_DEST_VRAM_D_0x18000 = 15 +} +GXCaptureDest; + +typedef enum +{ + GX_CAPTURE_SIZE_128x128 = 0, + GX_CAPTURE_SIZE_256x64 = 1, + GX_CAPTURE_SIZE_256x128 = 2, + GX_CAPTURE_SIZE_256x192 = 3 +} +GXCaptureSize; + +typedef enum +{ + GX_CAPTURE_SRCA_2D3D = 0, + GX_CAPTURE_SRCA_3D = 1 +} +GXCaptureSrcA; + +typedef enum +{ + GX_CAPTURE_SRCB_VRAM_0x00000 = 0, + GX_CAPTURE_SRCB_MRAM = 1, + GX_CAPTURE_SRCB_VRAM_0x08000 = 2, + GX_CAPTURE_SRCB_VRAM_0x10000 = 4, + GX_CAPTURE_SRCB_VRAM_0x18000 = 6 +} +GXCaptureSrcB; + +typedef enum +{ + GX_CAPTURE_MODE_A = 0, + GX_CAPTURE_MODE_B = 1, + GX_CAPTURE_MODE_AB = 2 +} +GXCaptureMode; + +#endif //GUARD_GX_BGCNT_H diff --git a/arm9/lib/include/GX_dma.h b/arm9/lib/include/GX_dma.h new file mode 100644 index 00000000..98f6a4a2 --- /dev/null +++ b/arm9/lib/include/GX_dma.h @@ -0,0 +1,53 @@ +#ifndef GUARD_GX_DMA_H +#define GUARD_GX_DMA_H + +#define GX_DMA_NOT_USE -1 +#define GX_CPU_FASTER32_SIZE 0x30 +#define GX_CPU_FASTER16_SIZE 0x1C + +static inline void GXi_DmaCopy32(u32 dmaNo, const void *src, void *dest, u32 size) +{ + if (dmaNo != GX_DMA_NOT_USE && size > GX_CPU_FASTER32_SIZE) + { + MI_DmaCopy32(dmaNo, src, dest, size); + } + else + { + MIi_CpuCopy32(src, dest, size); + } +} + +static inline void GXi_DmaCopy16(u32 dmaNo, const void *src, void *dest, u32 size) +{ + if (dmaNo != GX_DMA_NOT_USE && size > GX_CPU_FASTER16_SIZE) + { + MI_DmaCopy16(dmaNo, src, dest, size); + } + else + { + MIi_CpuCopy16(src, dest, size); + } +} + +static inline void GXi_DmaCopy32Async(u32 dmaNo, const void *src, void *dest, u32 size, + MIDmaCallback callback, void *arg) +{ + if (dmaNo != GX_DMA_NOT_USE) + { + MI_DmaCopy32Async(dmaNo, src, dest, size, callback, arg); + } + else + { + MIi_CpuCopy32(src, dest, size); + } +} + +static inline void GXi_WaitDma(u32 dmaNo) +{ + if (dmaNo != GX_DMA_NOT_USE) + { + MI_WaitDma(dmaNo); + } +} + +#endif //GUARD_GX_DMA_H diff --git a/arm9/lib/include/GX_g2.h b/arm9/lib/include/GX_g2.h new file mode 100644 index 00000000..f8d86df0 --- /dev/null +++ b/arm9/lib/include/GX_g2.h @@ -0,0 +1,14 @@ +#ifndef GUARD_GX_G2_H +#define GUARD_GX_G2_H + +#include "fx.h" + +void G2x_SetBGyAffine_(u32 *ptr, struct Mtx22 *mtx, fx32 a, fx32 b, fx32 c, fx32 d); +void G2x_SetBlendAlpha_(u32 *ptr, fx32 a, fx32 b, fx32 c, fx32 d); +void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness); +void G2x_SetBlendBrightnessExt_(u16 *ptr, fx32 a, fx32 b, fx32 c, fx32 d, fx32 brightness); +void *G2x_ChangeBlendBrightness_(u16 *ptr, fx32 brightness); + +//The g2 and g2_oam headers contain a lot of inline functions and enums that may want to be ported over at some point + +#endif //GUARD_GX_G2_H diff --git a/arm9/lib/include/GX_g3.h b/arm9/lib/include/GX_g3.h new file mode 100644 index 00000000..765ecc64 --- /dev/null +++ b/arm9/lib/include/GX_g3.h @@ -0,0 +1,184 @@ +#ifndef GUARD_GX_G3_H +#define GUARD_GX_G3_H + +struct GXDLInfo +{ + u8 *curr_cmd; + u32 *curr_param; + u32 *bottom; + u32 length; + BOOL param0_cmd_flg; +}; + +void G3_BeginMakeDL(struct GXDLInfo *displaylist, void *r1, u32 r2); +s32 G3_EndMakeDL(struct GXDLInfo *displaylist); + +typedef enum +{ + GX_MTXMODE_PROJECTION = 0, + GX_MTXMODE_POSITION = 1, + GX_MTXMODE_POSITION_VECTOR = 2, + GX_MTXMODE_TEXTURE = 3 +} +GXMtxMode; + +typedef enum +{ + GX_BEGIN_TRIANGLES = 0, + GX_BEGIN_QUADS = 1, + GX_BEGIN_TRIANGLE_STRIP = 2, + GX_BEGIN_QUAD_STRIP = 3 +} +GXBegin; + +typedef enum +{ + GX_SORTMODE_AUTO = 0, + GX_SORTMODE_MANUAL = 1 +} +GXSortMode; + +typedef enum +{ + GX_BUFFERMODE_Z = 0, + GX_BUFFERMODE_W = 1 +} +GXBufferMode; + +typedef enum +{ + GX_LIGHTMASK_NONE = 0, + GX_LIGHTMASK_0 = 1, + GX_LIGHTMASK_1 = 2, + GX_LIGHTMASK_01 = 3, + GX_LIGHTMASK_2 = 4, + GX_LIGHTMASK_02 = 5, + GX_LIGHTMASK_12 = 6, + GX_LIGHTMASK_012 = 7, + GX_LIGHTMASK_3 = 8, + GX_LIGHTMASK_03 = 9, + GX_LIGHTMASK_13 = 10, + GX_LIGHTMASK_013 = 11, + GX_LIGHTMASK_23 = 12, + GX_LIGHTMASK_023 = 13, + GX_LIGHTMASK_123 = 14, + GX_LIGHTMASK_0123 = 15 +} +GXLightMask; + +typedef enum +{ + GX_POLYGONMODE_MODULATE = 0, + GX_POLYGONMODE_DECAL = 1, + GX_POLYGONMODE_TOON = 2, + GX_POLYGONMODE_SHADOW = 3 +} +GXPolygonMode; + +typedef enum +{ + GX_CULL_ALL = 0, + GX_CULL_FRONT = 1, + GX_CULL_BACK = 2, + GX_CULL_NONE = 3 +} +GXCull; + +typedef enum +{ + GX_TEXREPEAT_NONE = 0, + GX_TEXREPEAT_S = 1, + GX_TEXREPEAT_T = 2, + GX_TEXREPEAT_ST = 3 +} +GXTexRepeat; + +typedef enum +{ + GX_TEXFLIP_NONE = 0, + GX_TEXFLIP_S = 1, + GX_TEXFLIP_T = 2, + GX_TEXFLIP_ST = 3 +} +GXTexFlip; + +typedef enum +{ + GX_TEXSIZE_S8 = 0, + GX_TEXSIZE_S16 = 1, + GX_TEXSIZE_S32 = 2, + GX_TEXSIZE_S64 = 3, + GX_TEXSIZE_S128 = 4, + GX_TEXSIZE_S256 = 5, + GX_TEXSIZE_S512 = 6, + GX_TEXSIZE_S1024 = 7 +} +GXTexSizeS; + +typedef enum +{ + GX_TEXSIZE_T8 = 0, + GX_TEXSIZE_T16 = 1, + GX_TEXSIZE_T32 = 2, + GX_TEXSIZE_T64 = 3, + GX_TEXSIZE_T128 = 4, + GX_TEXSIZE_T256 = 5, + GX_TEXSIZE_T512 = 6, + GX_TEXSIZE_T1024 = 7 +} +GXTexSizeT; + +typedef enum +{ + GX_TEXFMT_NONE = 0, + GX_TEXFMT_A3I5 = 1, + GX_TEXFMT_PLTT4 = 2, + GX_TEXFMT_PLTT16 = 3, + GX_TEXFMT_PLTT256 = 4, + GX_TEXFMT_COMP4x4 = 5, + GX_TEXFMT_A5I3 = 6, + GX_TEXFMT_DIRECT = 7 +} +GXTexFmt; + +typedef enum +{ + GX_TEXPLTTCOLOR0_USE = 0, + GX_TEXPLTTCOLOR0_TRNS = 1 +} +GXTexPlttColor0; + +typedef enum +{ + GX_TEXGEN_NONE = 0, + GX_TEXGEN_TEXCOORD = 1, + GX_TEXGEN_NORMAL = 2, + GX_TEXGEN_VERTEX = 3 +} +GXTexGen; + +typedef enum +{ + GX_LIGHTID_0 = 0, + GX_LIGHTID_1 = 1, + GX_LIGHTID_2 = 2, + GX_LIGHTID_3 = 3 +} +GXLightId; + +typedef union +{ + u32 val[3]; + struct + { + fx16 x; + fx16 y; + fx16 z; + fx16 width; + fx16 height; + fx16 depth; + }; +} +GXBoxTestParam; + +#endif //GUARD_GX_G3_H diff --git a/arm9/lib/include/GX_g3_util.h b/arm9/lib/include/GX_g3_util.h new file mode 100644 index 00000000..a9bc4c17 --- /dev/null +++ b/arm9/lib/include/GX_g3_util.h @@ -0,0 +1,11 @@ +#ifndef GUARD_GX_G3_UTIL_H +#define GUARD_GX_G3_UTIL_H + +void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx); +void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx); +void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, u32 load, struct Mtx44 *mtx); +void G3_RotX(fx32 sinphi, fx32 cosphi); +void G3_RotY(fx32 sinphi, fx32 cosphi); +void G3_RotZ(fx32 sinphi, fx32 cosphi); + +#endif //GUARD_GX_G3_UTIL_H diff --git a/arm9/lib/include/GX_g3b.h b/arm9/lib/include/GX_g3b.h new file mode 100644 index 00000000..d299ea34 --- /dev/null +++ b/arm9/lib/include/GX_g3b.h @@ -0,0 +1,21 @@ +#ifndef GUARD_GX_G3B_H +#define GUARD_GX_G3B_H + +#include "GX_g3.h" + +void G3BS_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx); +void G3B_PushMtx(struct GXDLInfo *displaylist); +void G3B_PopMtx(struct GXDLInfo *displaylist, void *mtx); +void G3B_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx); +void G3B_Color(struct GXDLInfo * displaylist, u32 vtx_col); +void G3B_Normal(struct GXDLInfo * displaylist, fx16 x, fx16 y, fx16 z); +void G3B_Vtx(struct GXDLInfo * displaylist, fx32 x, fx32 y, fx32 z); +void G3B_PolygonAttr(struct GXDLInfo *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6); +void G3B_MaterialColorDiffAmb(struct GXDLInfo *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace); +void G3B_MaterialColorSpecEmi(struct GXDLInfo *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table); +void G3B_LightVector(struct GXDLInfo * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z); +void G3B_LightColor(struct GXDLInfo * displaylist, u32 light_num, u32 col); +void G3B_Begin(struct GXDLInfo * displaylist, u32 type); +void G3B_End(struct GXDLInfo * displaylist); + +#endif //GUARD_GX_G3B_H diff --git a/arm9/lib/include/GX_g3imm.h b/arm9/lib/include/GX_g3imm.h new file mode 100644 index 00000000..f811dc68 --- /dev/null +++ b/arm9/lib/include/GX_g3imm.h @@ -0,0 +1,10 @@ +#ifndef GUARD_GX_G3IMM_H +#define GUARD_GX_G3IMM_H + +#include "fx.h" + +void G3_LoadMtx43(struct Mtx43 *mtx); +void G3_MultMtx43(struct Mtx43 *mtx); +void G3_MultMtx33(struct Mtx33 *mtx); + +#endif //GUARD_GX_G3IMM_H diff --git a/arm9/lib/include/GX_g3x.h b/arm9/lib/include/GX_g3x.h new file mode 100644 index 00000000..4bd55831 --- /dev/null +++ b/arm9/lib/include/GX_g3x.h @@ -0,0 +1,69 @@ +#ifndef GUARD_GX_G3X_H +#define GUARD_GX_G3X_H + +void GXi_NopClearFifo128_(void *reg); +void G3X_Init(); +void G3X_ResetMtxStack(); +void G3X_ClearFifo(); +void G3X_InitMtxStack(); +void G3X_ResetMtxStack_2(); +void G3X_SetFog(u32 enable, u32 alphamode, u32 depth, s32 offset); +u32 G3X_GetClipMtx(struct Mtx44 *dst); +u32 G3X_GetVectorMtx(struct Mtx33 *dst); +void G3X_SetEdgeColorTable(void *tbl_ptr); +void G3X_SetFogTable(void *tbl_ptr); +void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable_fog); +void G3X_InitTable(); +u32 G3X_GetMtxStackLevelPV(u32 *level); +u32 G3X_GetMtxStackLevelPJ(u32 *level); +u32 G3X_GetBoxTestResult(u32 *result); +void G3X_SetHOffset(u32 offset); + +typedef enum +{ + GX_SHADING_TOON = 0, + GX_SHADING_HIGHLIGHT = 1 +} +GXShading; + +typedef enum +{ + GX_FOGBLEND_COLOR_ALPHA = 0, + GX_FOGBLEND_ALPHA = 1 +} +GXFogBlend; + +typedef enum +{ + GX_FOGSLOPE_0x8000 = 0, + GX_FOGSLOPE_0x4000 = 1, + GX_FOGSLOPE_0x2000 = 2, + GX_FOGSLOPE_0x1000 = 3, + GX_FOGSLOPE_0x0800 = 4, + GX_FOGSLOPE_0x0400 = 5, + GX_FOGSLOPE_0x0200 = 6, + GX_FOGSLOPE_0x0100 = 7, + GX_FOGSLOPE_0x0080 = 8, + GX_FOGSLOPE_0x0040 = 9, + GX_FOGSLOPE_0x0020 = 10 +} +GXFogSlope; + +typedef enum +{ + GX_FIFOINTR_COND_DISABLE = 0, + GX_FIFOINTR_COND_UNDERHALF = 1, + GX_FIFOINTR_COND_EMPTY = 2 +} +GXFifoIntrCond; + +typedef enum +{ + GX_FIFOSTAT_EMPTY = 6, + GX_FIFOSTAT_UNDERHALF = 2, + GX_FIFOSTAT_OVERHALF = 0, + GX_FIFOSTAT_FULL = 1 +} +GXFifoStat; + +#endif //GUARD_GX_G3X_H diff --git a/arm9/lib/include/GX_load2d.h b/arm9/lib/include/GX_load2d.h new file mode 100644 index 00000000..3c9fb5cb --- /dev/null +++ b/arm9/lib/include/GX_load2d.h @@ -0,0 +1,41 @@ +#ifndef GUARD_GX_LOAD2D_H +#define GUARD_GX_LOAD2D_H + +void GX_LoadBGPltt(void *src, u32 offset, u32 size); +void GXS_LoadBGPltt(void *src, u32 offset, u32 size); +void GX_LoadOBJPltt(void *src, u32 offset, u32 size); +void GXS_LoadOBJPltt(void *src, u32 offset, u32 size); +void GX_LoadOAM(void *src, u32 offset, u32 size); +void GXS_LoadOAM(void *src, u32 offset, u32 size); +void GX_LoadOBJ(void *src, u32 offset, u32 size); +void GXS_LoadOBJ(void *src, u32 offset, u32 size); +void GX_LoadBG0Scr(void *src, u32 offset, u32 size); +void GXS_LoadBG0Scr(void *src, u32 offset, u32 size); +void GX_LoadBG1Scr(void *src, u32 offset, u32 size); +void GXS_LoadBG1Scr(void *src, u32 offset, u32 size); +void GX_LoadBG2Scr(void *src, u32 offset, u32 size); +void GXS_LoadBG2Scr(void *src, u32 offset, u32 size); +void GX_LoadBG3Scr(void *src, u32 offset, u32 size); +void GXS_LoadBG3Scr(void *src, u32 offset, u32 size); +void GX_LoadBG0Char(void *src, u32 offset, u32 size); +void GXS_LoadBG0Char(void *src, u32 offset, u32 size); +void GX_LoadBG1Char(void *src, u32 offset, u32 size); +void GXS_LoadBG1Char(void *src, u32 offset, u32 size); +void GX_LoadBG2Char(void *src, u32 offset, u32 size); +void GXS_LoadBG2Char(void *src, u32 offset, u32 size); +void GX_LoadBG3Char(void *src, u32 offset, u32 size); +void GXS_LoadBG3Char(void *src, u32 offset, u32 size); +void GX_BeginLoadBGExtPltt(); +void GX_LoadBGExtPltt(void *src, u32 offset, u32 size); +void GX_EndLoadBGExtPltt(); +void GX_BeginLoadOBJExtPltt(); +void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size); +void GX_EndLoadOBJExtPltt(); +void GXS_BeginLoadBGExtPltt(); +void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size); +void GXS_EndLoadBGExtPltt(); +void GXS_BeginLoadOBJExtPltt(); +void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size); +void GXS_EndLoadOBJExtPltt(); + +#endif //GUARD_GX_LOAD2D_H diff --git a/arm9/lib/include/GX_load3d.h b/arm9/lib/include/GX_load3d.h new file mode 100644 index 00000000..09fd296a --- /dev/null +++ b/arm9/lib/include/GX_load3d.h @@ -0,0 +1,15 @@ +#ifndef GUARD_GX_LOAD3D_H +#define GUARD_GX_LOAD3D_H + +void GX_BeginLoadTex(); +void GX_LoadTex(void *src, u32 offset, u32 size); +void GX_EndLoadTex(); +void GX_BeginLoadTexPltt(); +void GX_LoadTexPltt(void *src, u32 offset, u32 size); +void GX_EndLoadTexPltt(); +void GX_BeginLoadClearImage(); +void GX_LoadClearImageColor(void *src, u32 size); +void GX_LoadClearImageDepth(void *src, u32 size); +void GX_EndLoadClearImage(); + +#endif //GUARD_GX_LOAD3D_H diff --git a/arm9/lib/include/GX_state.h b/arm9/lib/include/GX_state.h new file mode 100644 index 00000000..c94b6c07 --- /dev/null +++ b/arm9/lib/include/GX_state.h @@ -0,0 +1,24 @@ +#ifndef GUARD_GX_STATE_H +#define GUARD_GX_STATE_H + +struct GX_State +{ + u16 lcdc; + u16 bg; + u16 obj; + u16 arm7; + u16 tex; + u16 texPltt; + u16 clrImg; + u16 bgExtPltt; + u16 objExtPltt; + + u16 sub_bg; + u16 sub_obj; + u16 sub_bgExtPltt; + u16 sub_objExtPltt; +}; + +void GX_InitGXState(); + +#endif //GUARD_GX_STATE_H diff --git a/arm9/lib/include/GX_struct_2d.h b/arm9/lib/include/GX_struct_2d.h new file mode 100644 index 00000000..3b544927 --- /dev/null +++ b/arm9/lib/include/GX_struct_2d.h @@ -0,0 +1,243 @@ +#ifndef GUARD_GX_STRUCT_2D_H +#define GUARD_GX_STRUCT_2D_H + +typedef u16 GXScrFmtText; +#define GX_SCRFMT_TEXT_CHARNAME_SHIFT (0) +#define GX_SCRFMT_TEXT_CHARNAME_MASK (0x03ff) +#define GX_SCRFMT_TEXT_HF_SHIFT (10) +#define GX_SCRFMT_TEXT_HF_MASK (0x0400) +#define GX_SCRFMT_TEXT_VF_SHIFT (11) +#define GX_SCRFMT_TEXT_VF_MASK (0x0800) +#define GX_SCRFMT_TEXT_COLORPLTT_SHIFT (12) +#define GX_SCRFMT_TEXT_COLORPLTT_MASK (0xf000) +#define GX_SCRFMT_TEXT(pltt, vf, hf, name) \ + ((u16)(((name) << GX_SCRFMT_TEXT_CHARNAME_SHIFT) | \ + ((hf) << GX_SCRFMT_TEXT_HF_SHIFT) | \ + ((vf) << GX_SCRFMT_TEXT_VF_SHIFT) | \ + ((pltt) << GX_SCRFMT_TEXT_COLORPLTT_SHIFT))) + +typedef u8 GXScrFmtAffine; +#define GX_SCRFMT_AFFINE_CHARNAME_SHIFT (0) +#define GX_SCRFMT_AFFINE_CHARNAME_MASK (0xff) + +typedef u8 GXScrFmt256Bmp; +#define GX_SCRFMT_256BMP_COLORNO_SHIFT (0) +#define GX_SCRFMT_256BMP_COLORNO_MASK (0xff) + +typedef union +{ + u32 data32[8]; + u16 data16[16]; + u8 data8[32]; +} +GXCharFmt16; + +typedef union +{ + u32 data32[16]; + u16 data16[32]; + u8 data8[64]; +} +GXCharFmt256; + +typedef union +{ + u16 data16[16]; + u32 data32[8]; + GXRgb rgb[16]; +} +GXBGPltt16; + +typedef GXBGPltt16 GXOBJPltt16; + +typedef union +{ + u16 data16[256]; + u32 data32[128]; + GXRgb rgb[256]; +} +GXBGPltt256; + +typedef GXBGPltt256 GXOBJPltt256; + +typedef union +{ + u16 data16[32 * 32]; + u32 data32[32 * 32 / 2]; + GXScrFmtText scr[32][32]; +} +GXScrText32x32; + +typedef union +{ + u16 data16[64 * 32]; + u32 data32[64 * 32 / 2]; + GXScrFmtText scr[64][32]; +} +GXScrText64x32; + +typedef union +{ + // 4K bytes + u16 data16[32 * 64]; + u32 data32[32 * 64 / 2]; + GXScrFmtText scr[32][64]; +} +GXScrText32x64; + +typedef union +{ + u16 data16[64 * 64]; + u32 data32[64 * 64 / 2]; + GXScrFmtText scr[64][64]; +} +GXScrText64x64; + +typedef union +{ + u8 data8[16 * 16]; + u32 data32[16 * 16 / 4]; + GXScrFmtAffine scr[16][16]; +} +GXScrAffine16x16; + +typedef union +{ + u8 data8[32 * 32]; + u32 data32[32 * 32 / 4]; + GXScrFmtAffine scr[32][32]; +} +GXScrAffine32x32; + +typedef union +{ + u8 data8[64 * 64]; + u32 data32[64 * 64 / 4]; + GXScrFmtAffine scr[64][64]; +} +GXScrAffine64x64; + +typedef union +{ + u8 data8[128 * 128]; + u32 data32[128 * 128 / 4]; + GXScrFmtAffine scr[128][128]; +} +GXScrAffine128x128; + +typedef union +{ + u8 data8[128 * 128]; + u32 data32[128 * 128 / 4]; + GXScrFmt256Bmp scr[128][128]; +} +GXScr256Bmp128x128; + +typedef union +{ + u8 data8[256 * 256]; + u32 data32[256 * 256 / 4]; + GXScrFmt256Bmp scr[256][256]; +} +GXScr256Bmp256x256; + +typedef union +{ + u8 data8[512 * 256]; + u32 data32[512 * 256 / 4]; + GXScrFmt256Bmp scr[512][256]; +} +GXScr256Bmp512x256; + +typedef union +{ + u8 data8[512 * 512]; + u32 data32[512 * 512 / 4]; + GXScrFmt256Bmp scr[512][512]; +} +GXScr256Bmp512x512; + +typedef union +{ + u16 data16[128 * 128]; + u32 data32[128 * 128 / 2]; + GXRgba scr[128][128]; +} +GXScrDCBmp128x128; + +typedef union +{ + u16 data16[256 * 256]; + u32 data32[256 * 256 / 2]; + GXRgba scr[256][256]; +} +GXScrDCBmp256x256; + +typedef union +{ + u16 data16[512 * 256]; + u32 data32[512 * 256 / 2]; + GXRgba scr[512][256]; +} +GXScrDCBmp512x256; + +typedef union +{ + u16 data16[512 * 512]; + u32 data32[512 * 512 / 2]; + GXRgba scr[512][512]; +} +GXScrDCBmp512x512; + +typedef struct +{ + GXCharFmt16 ch[1024]; +} +GXCharBGText16; + +typedef struct +{ + GXCharFmt256 ch[1024]; +} +GXCharBGText256; + +typedef struct +{ + GXCharFmt256 ch[256]; +} +GXCharBGAffine256; + +typedef union +{ + GXBGPltt256 pltt256; + GXBGPltt16 pltt16[16]; +} +GXBGStdPlttData; + +typedef union +{ + GXOBJPltt256 pltt256; + GXOBJPltt16 pltt16[16]; +} +GXOBJStdPlttData; + +typedef struct +{ + GXBGStdPlttData bgPltt; + GXOBJStdPlttData objPltt; +} +GXStdPlttData; + +typedef struct +{ + GXBGPltt256 pltt256[16]; +} +GXBGExtPlttData; + +typedef struct +{ + GXOBJPltt256 pltt256[16]; +} +GXOBJExtPlttData; + +#endif //GUARD_GX_STRUCT_2D_H diff --git a/arm9/lib/include/GX_vramcnt.h b/arm9/lib/include/GX_vramcnt.h new file mode 100644 index 00000000..6fe677bc --- /dev/null +++ b/arm9/lib/include/GX_vramcnt.h @@ -0,0 +1,57 @@ +#ifndef GUARD_GX_VRAMCNT_H +#define GUARD_GX_VRAMCNT_H + +//some of the symbols don't match what the function does +void GX_VRAMCNT_SetLCDC_(u32 mask); +void GX_SetBankForBG(s32 bg); +void GX_SetBankForOBJ(s32 obj); +void GX_SetBankForBGExtPltt(s32 bgextpltt); +void GX_SetBankForOBJExtPltt(s32 objextpltt); +void GX_SetBankForTex(s32 tex); +void GX_SetBankForTexPltt(s32 texpltt); +void GX_SetBankForClearImage(s32 clearimage); +void GX_SetBankForARM7(s32 arm7); +void GX_SetBankForLCDC(s32 lcdc); +void GX_SetBankForSubBG(s32 subbg); +void GX_SetBankForSubOBJ(s32 subobj); +void GX_SetBankForSubBGExtPltt(s32 subbgextpltt); +void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt); +u32 FUN_020C6130(u16 *ptr); +u32 GX_ResetBankForBG(); +u32 GX_ResetBankForOBJ(); +u32 GX_ResetBankForBGExtPltt(); +u32 GX_ResetBankForOBJExtPltt(); +u32 GX_ResetBankForTex(); +u32 GX_ResetBankForTexPltt(); +u32 GX_ResetBankForClearImage(); +u32 GX_ResetBankForSubBG(); +u32 FUN_020C605C(); +u32 FUN_020C6034(); +u32 GX_ResetBankForSubOBJ(); +u32 FUN_020C5F28(u16 *ptr); +u32 disableBankForX_(); +u32 GX_DisableBankForOBJExtPltt_2(); +u32 GX_DisableBankForBGExtPltt(); +u32 GX_DisableBankForOBJExtPltt(); +u32 GX_DisableBankForTexPltt_2(); +u32 GX_DisableBankForTexPltt(); +u32 GX_DisableBankForClearImage(); +u32 GX_DisableBankForARM7(); +u32 GX_DisableBankForLCDC(); +u32 GX_DisableBankForSubBGExtPltt(); +u32 GX_DisableBankForSubOBJExtPltt_2(); +u32 FUN_020C5E04(); +u32 GX_DisableBankForSubOBJExtPltt(); +u32 GX_GetBankForBGExtPltt_2(); +u32 GX_GetBankForOBJ(); +u32 GX_GetBankForBGExtPltt(); +u32 GX_GetBankForOBJExtPltt(); +u32 FUN_020C5D8C(); +u32 GX_GetBankForTexPltt(); +u32 GX_GetBankForLCDC(); +u32 GX_GetBankForSubBGExtPltt_2(); +u32 GX_GetBankForSubOBJ(); +u32 GX_GetBankForSubBGExtPltt(); +u32 GX_GetBankForSubOBJExtPltt(); + +#endif //GUARD_GX_VRAMCNT_H diff --git a/arm9/lib/include/GXcommon.h b/arm9/lib/include/GXcommon.h new file mode 100644 index 00000000..a83f4384 --- /dev/null +++ b/arm9/lib/include/GXcommon.h @@ -0,0 +1,29 @@ +#ifndef GUARD_GXCOMMON_H +#define GUARD_GXCOMMON_H + +typedef u16 GXRgb; +#define GXRGB_ASSERT(gxrgb) SDK_ASSERT(((gxrgb) & 0x8000) == 0) +#define GX_RGB_R_SHIFT (0) +#define GX_RGB_R_MASK (0x001f) +#define GX_RGB_G_SHIFT (5) +#define GX_RGB_G_MASK (0x03e0) +#define GX_RGB_B_SHIFT (10) +#define GX_RGB_B_MASK (0x7c00) +#define GX_RGB(r, g, b) ((GXRgb)(((r) << GX_RGB_R_SHIFT) | \ + ((g) << GX_RGB_G_SHIFT) | \ + ((b) << GX_RGB_B_SHIFT))) + +typedef u16 GXRgba; +#define GX_RGBA_R_SHIFT (0) +#define GX_RGBA_R_MASK (0x001f) +#define GX_RGBA_G_SHIFT (5) +#define GX_RGBA_G_MASK (0x03e0) +#define GX_RGBA_B_SHIFT (10) +#define GX_RGBA_B_MASK (0x7c00) +#define GX_RGBA_A_SHIFT (15) +#define GX_RGBA_A_MASK (0x8000) +#define GX_RGBA(r, g, b, a) ((GXRgba)(((r) << GX_RGBA_R_SHIFT) | \ + ((g) << GX_RGBA_G_SHIFT) | \ + ((b) << GX_RGBA_B_SHIFT) | \ + ((a) << GX_RGBA_A_SHIFT))) +#endif //GUARD_GXCOMMON_H diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 82f07a62..877e5bb2 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -4,286 +4,184 @@ #include "fx.h" //temporary while other files aren't decompiled -void MIi_CpuCopy16(void *, void *, u32); + void GXi_NopClearFifo128_(void *); -void MI_Copy16B(void *, void *); +void MI_Copy16B(const void *, void *); void MI_DmaFill32Async(u32, void *, u32, u32, u32, u32); void MI_DmaFill32(u32, void *, u32, u32); void MIi_CpuClear32(u32, void *, u32); void MI_Copy64B(void *src, void *dst); void MI_WaitDma(u32); -void MI_DmaCopy32Async(u32, void *, void *, u32, void *, void *); -void MI_DmaCopy16(u32 unk, void *src, void *dst, u32 size); -void MIi_CpuCopy16(void *src, void *dst, u32 size); -void MI_DmaCopy32(u32 unk, void *src, void *dst, u32 size); -void MIi_CpuCopy32(void *src, void *dst, u32 size); +void MI_DmaCopy32Async(u32, const void *, void *, u32, void *, void *); +void MI_DmaCopy16(u32 unk, const void *src, void *dst, u32 size); +void MIi_CpuCopy16(const void *src, void *dst, u32 size); +void MI_DmaCopy32(u32 unk, const void *src, void *dst, u32 size); +void MIi_CpuCopy32(const void *src, void *dst, u32 size); void OSi_UnlockVram(u16, u16); void MIi_CpuClear32(u32, void *, u32); -//TODO: Add defines for GX commands, add structs/unions for HW registers -//TODO: structs -//TODO: useful macros -//TODO: inline functions -//TODO: enums -//TODO: function signatures +//DONE: Add defines for GX commands, add structs/unions for HW registers +//DONE: structs +//DONE: useful macros +//DONE: inline functions used in sdk +//DONE: enums +//DONE: maybe some function signatures +//TODO: proper global names + +#include "GXcommon.h" +#include "GX_struct_2d.h" +#include "GX_g3.h" +#include "GX_g3_util.h" +#include "GX_g3x.h" +#include "GX_g3b.h" +#include "GX_asm.h" +#include "GX_vramcnt.h" +#include "GX_bgcnt.h" +#include "GX_load2d.h" +#include "GX_load3d.h" +#include "GX_g2.h" +#include "GX_state.h" +#include "GX_g3imm.h" +#include "GX_dma.h" +void GX_Init(); +u32 GX_HBlankIntr(u32 enable); +u32 GX_VBlankIntr(u32 enable); +void GX_DispOff(); +void GX_DispOn(); +void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3); +void GXS_SetGraphicsMode(u32 mode); +void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness); -static inline void _GX_Load_16(u32 var, void *src, void *dst, u32 size){ - if (var != -1 && size > 0x1C) - { - MI_DmaCopy16(var, src, dst, size); - } - else +typedef union +{ + u32 raw; + struct { - MIi_CpuCopy16(src, dst, size); - } + u32 bgMode:3; + u32 bg0_2d3d:1; + u32 objMapChar:1; + u32 objMapBmp:2; + u32 blankScr:1; + u32 visiblePlane:5; + u32 visibleWnd:3; + u32 dispMode:4; + u32 extObjMapChar:2; + u32 extObjMapBmp:1; + u32 hBlankObjProc:1; + u32 bgCharOffset:3; + u32 bgScrOffset:3; + u32 bgExtPltt:1; + u32 objExtPltt:1; + }; } +GXDispCnt; -static inline void _GX_Load_32(u32 var, void *src, void *dst, u32 size){ - if (var != -1 && size > 0x30) - { - MI_DmaCopy32(var, src, dst, size); - } - else +typedef union +{ + u32 raw; + struct { - MIi_CpuCopy32(src, dst, size); - } + u32 bgMode:3; + u32 _reserve1:1; + u32 objMapChar:1; + u32 objMapBmp:2; + u32 blankScr:1; + u32 visiblePlane:5; + u32 visibleWnd:3; + u32 dispMode:1; + u32 _reserve2:3; + u32 extObjMapChar:2; + u32 _reserve3:1; + u32 hBlankObjProc:1; + u32 _reserve4:6; + u32 bgExtPltt:1; + u32 objExtPltt:1; + }; } +GXSDispCnt; -static inline void _GX_Load_32_Async(u32 var, void *src, void *dst, u32 size, void *func, void *ptr){ - if (var != -1) - { - MI_DmaCopy32Async(var, src, dst, size, func, ptr); - } - else - { - MIi_CpuCopy32(src, dst, size); - } +typedef enum +{ + GX_BGMODE_0 = 0, + GX_BGMODE_1 = 1, + GX_BGMODE_2 = 2, + GX_BGMODE_3 = 3, + GX_BGMODE_4 = 4, + GX_BGMODE_5 = 5, + GX_BGMODE_6 = 6 } +GXBGMode; -struct GXDLInfo +typedef enum { - u8 *curr_cmd; - u32 *curr_param; - u32 *bottom; - u32 length; - BOOL param0_cmd_flg; -}; - + GX_BG0_AS_2D = 0, + GX_BG0_AS_3D = 1 +} +GXBG0As; -struct GX_State +typedef enum { - u16 lcdc; - u16 bg; - u16 obj; - u16 arm7; - u16 tex; - u16 texPltt; - u16 clrImg; - u16 bgExtPltt; - u16 objExtPltt; - - u16 sub_bg; - u16 sub_obj; - u16 sub_bgExtPltt; - u16 sub_objExtPltt; -}; - -//GX_g3 -void G3_BeginMakeDL(struct GXDLInfo *displaylist, void *r1, u32 r2); -s32 G3_EndMakeDL(struct GXDLInfo *displaylist); - -//GX_g3_util -void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx); -void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx); -void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, u32 load, struct Mtx44 *mtx); -void G3_RotX(fx32 sinphi, fx32 cosphi); -void G3_RotY(fx32 sinphi, fx32 cosphi); -void G3_RotZ(fx32 sinphi, fx32 cosphi); - -//GX_g3x -void GXi_NopClearFifo128_(void *reg); -void G3X_Init(); -void G3X_ResetMtxStack(); -void G3X_ClearFifo(); -void G3X_InitMtxStack(); -void G3X_ResetMtxStack_2(); -void G3X_SetFog(u32 enable, u32 alphamode, u32 depth, s32 offset); -u32 G3X_GetClipMtx(struct Mtx44 *dst); -u32 G3X_GetVectorMtx(struct Mtx33 *dst); -void G3X_SetEdgeColorTable(void *tbl_ptr); -void G3X_SetFogTable(void *tbl_ptr); -void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable_fog); -void G3X_InitTable(); -u32 G3X_GetMtxStackLevelPV(u32 *level); -u32 G3X_GetMtxStackLevelPJ(u32 *level); -u32 G3X_GetBoxTestResult(u32 *result); -void G3X_SetHOffset(u32 offset); - -//GX_g3b -void G3BS_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx); -void G3B_PushMtx(struct GXDLInfo *displaylist); -void G3B_PopMtx(struct GXDLInfo *displaylist, void *mtx); -void G3B_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx); -void G3B_Color(struct GXDLInfo * displaylist, u32 vtx_col); -void G3B_Normal(struct GXDLInfo * displaylist, fx16 x, fx16 y, fx16 z); -void G3B_Vtx(struct GXDLInfo * displaylist, fx32 x, fx32 y, fx32 z); -void G3B_PolygonAttr(struct GXDLInfo *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6); -void G3B_MaterialColorDiffAmb(struct GXDLInfo *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace); -void G3B_MaterialColorSpecEmi(struct GXDLInfo *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table); -void G3B_LightVector(struct GXDLInfo * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z); -void G3B_LightColor(struct GXDLInfo * displaylist, u32 light_num, u32 col); -void G3B_Begin(struct GXDLInfo * displaylist, u32 type); -void G3B_End(struct GXDLInfo * displaylist); - -//GX_asm -void GX_SendFifo48B(void *src, void *dst); - -//GX_vramcnt -//some of the symbols don't match what the function does -void GX_VRAMCNT_SetLCDC_(u32 mask); -void GX_SetBankForBG(s32 bg); -void GX_SetBankForOBJ(s32 obj); -void GX_SetBankForBGExtPltt(s32 bgextpltt); -void GX_SetBankForOBJExtPltt(s32 objextpltt); -void GX_SetBankForTex(s32 tex); -void GX_SetBankForTexPltt(s32 texpltt); -void GX_SetBankForClearImage(s32 clearimage); -void GX_SetBankForARM7(s32 arm7); -void GX_SetBankForLCDC(s32 lcdc); -void GX_SetBankForSubBG(s32 subbg); -void GX_SetBankForSubOBJ(s32 subobj); -void GX_SetBankForSubBGExtPltt(s32 subbgextpltt); -void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt); -u32 FUN_020C6130(u16 *ptr); -u32 GX_ResetBankForBG(); -u32 GX_ResetBankForOBJ(); -u32 GX_ResetBankForBGExtPltt(); -u32 GX_ResetBankForOBJExtPltt(); -u32 GX_ResetBankForTex(); -u32 GX_ResetBankForTexPltt(); -u32 GX_ResetBankForClearImage(); -u32 GX_ResetBankForSubBG(); -u32 FUN_020C605C(); -u32 FUN_020C6034(); -u32 GX_ResetBankForSubOBJ(); -u32 FUN_020C5F28(u16 *ptr); -u32 disableBankForX_(); -u32 GX_DisableBankForOBJExtPltt_2(); -u32 GX_DisableBankForBGExtPltt(); -u32 GX_DisableBankForOBJExtPltt(); -u32 GX_DisableBankForTexPltt_2(); -u32 GX_DisableBankForTexPltt(); -u32 GX_DisableBankForClearImage(); -u32 GX_DisableBankForARM7(); -u32 GX_DisableBankForLCDC(); -u32 GX_DisableBankForSubBGExtPltt(); -u32 GX_DisableBankForSubOBJExtPltt_2(); -u32 FUN_020C5E04(); -u32 GX_DisableBankForSubOBJExtPltt(); -u32 GX_GetBankForBGExtPltt_2(); -u32 GX_GetBankForOBJ(); -u32 GX_GetBankForBGExtPltt(); -u32 GX_GetBankForOBJExtPltt(); -u32 FUN_020C5D8C(); -u32 GX_GetBankForTexPltt(); -u32 GX_GetBankForLCDC(); -u32 GX_GetBankForSubBGExtPltt_2(); -u32 GX_GetBankForSubOBJ(); -u32 GX_GetBankForSubBGExtPltt(); -u32 GX_GetBankForSubOBJExtPltt(); - -//GX_bgcnt -void *G2_GetBG0ScrPtr(); -void *G2S_GetBG0ScrPtr(); -void *G2_GetBG1ScrPtr(); -void *G2S_GetBG1ScrPtr(); -void *G2_GetBG2ScrPtr(); -void *G2S_GetBG2ScrPtr(); -void *G2_GetBG3ScrPtr(); -void *G2S_GetBG3ScrPtr(); -void *G2_GetBG0CharPtr(); -void *G2S_GetBG0CharPtr(); -void *G2_GetBG1CharPtr(); -void *G2S_GetBG1CharPtr(); -void *G2_GetBG2CharPtr(); -void *G2S_GetBG2CharPtr(); -void *G2_GetBG3CharPtr(); -void *G2S_GetBG3CharPtr(); - -//GX_load2d -void GX_LoadBGPltt(void *src, u32 offset, u32 size); -void GXS_LoadBGPltt(void *src, u32 offset, u32 size); -void GX_LoadOBJPltt(void *src, u32 offset, u32 size); -void GXS_LoadOBJPltt(void *src, u32 offset, u32 size); -void GX_LoadOAM(void *src, u32 offset, u32 size); -void GXS_LoadOAM(void *src, u32 offset, u32 size); -void GX_LoadOBJ(void *src, u32 offset, u32 size); -void GXS_LoadOBJ(void *src, u32 offset, u32 size); -void GX_LoadBG0Scr(void *src, u32 offset, u32 size); -void GXS_LoadBG0Scr(void *src, u32 offset, u32 size); -void GX_LoadBG1Scr(void *src, u32 offset, u32 size); -void GXS_LoadBG1Scr(void *src, u32 offset, u32 size); -void GX_LoadBG2Scr(void *src, u32 offset, u32 size); -void GXS_LoadBG2Scr(void *src, u32 offset, u32 size); -void GX_LoadBG3Scr(void *src, u32 offset, u32 size); -void GXS_LoadBG3Scr(void *src, u32 offset, u32 size); -void GX_LoadBG0Char(void *src, u32 offset, u32 size); -void GXS_LoadBG0Char(void *src, u32 offset, u32 size); -void GX_LoadBG1Char(void *src, u32 offset, u32 size); -void GXS_LoadBG1Char(void *src, u32 offset, u32 size); -void GX_LoadBG2Char(void *src, u32 offset, u32 size); -void GXS_LoadBG2Char(void *src, u32 offset, u32 size); -void GX_LoadBG3Char(void *src, u32 offset, u32 size); -void GXS_LoadBG3Char(void *src, u32 offset, u32 size); -void GX_BeginLoadBGExtPltt(); -void GX_LoadBGExtPltt(void *src, u32 offset, u32 size); -void GX_EndLoadBGExtPltt(); -void GX_BeginLoadOBJExtPltt(); -void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size); -void GX_EndLoadOBJExtPltt(); -void GXS_BeginLoadBGExtPltt(); -void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size); -void GXS_EndLoadBGExtPltt(); -void GXS_BeginLoadOBJExtPltt(); -void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size); -void GXS_EndLoadOBJExtPltt(); + GX_DISPMODE_GRAPHICS = 0x01, + GX_DISPMODE_VRAM_A = 0x02, + GX_DISPMODE_VRAM_B = 0x06, + GX_DISPMODE_VRAM_C = 0x0a, + GX_DISPMODE_VRAM_D = 0x0e, + GX_DISPMODE_MMEM = 0x03 +} +GXDispMode; -//GX_load3d -void GX_BeginLoadTex(); -void GX_LoadTex(void *src, u32 offset, u32 size); -void GX_EndLoadTex(); -void GX_BeginLoadTexPltt(); -void GX_LoadTexPltt(void *src, u32 offset, u32 size); -void GX_EndLoadTexPltt(); -void GX_BeginLoadClearImage(); -void GX_LoadClearImageColor(void *src, u32 size); -void GX_LoadClearImageDepth(void *src, u32 size); -void GX_EndLoadClearImage(); +typedef enum +{ + GX_PLANEMASK_NONE = 0x00, + GX_PLANEMASK_BG0 = 0x01, + GX_PLANEMASK_BG1 = 0x02, + GX_PLANEMASK_BG2 = 0x04, + GX_PLANEMASK_BG3 = 0x08, + GX_PLANEMASK_OBJ = 0x10 +} +GXPlaneMask; -//GX -void GX_Init(); -u32 GX_HBlankIntr(u32 enable); -u32 GX_VBlankIntr(u32 enable); -void GX_DispOff(); -void GX_DispOn(); -void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3); -void GXS_SetGraphicsMode(u32 mode); -void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness); +typedef enum +{ + GX_WNDMASK_NONE = 0x00, + GX_WNDMASK_W0 = 0x01, + GX_WNDMASK_W1 = 0x02, + GX_WNDMASK_OW = 0x04 +} +GXWndMask; -//GX_g2 -void G2x_SetBGyAffine_(u32 *ptr, struct Mtx22 *mtx, fx32 a, fx32 b, fx32 c, fx32 d); -void G2x_SetBlendAlpha_(u32 *ptr, fx32 a, fx32 b, fx32 c, fx32 d); -void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness); -void G2x_SetBlendBrightnessExt_(u16 *ptr, fx32 a, fx32 b, fx32 c, fx32 d, fx32 brightness); -void *G2x_ChangeBlendBrightness_(u16 *ptr, fx32 brightness); +typedef enum +{ + GX_BGCHAROFFSET_0x00000 = 0x00, + GX_BGCHAROFFSET_0x10000 = 0x01, + GX_BGCHAROFFSET_0x20000 = 0x02, + GX_BGCHAROFFSET_0x30000 = 0x03, + GX_BGCHAROFFSET_0x40000 = 0x04, + GX_BGCHAROFFSET_0x50000 = 0x05, + GX_BGCHAROFFSET_0x60000 = 0x06, + GX_BGCHAROFFSET_0x70000 = 0x07 +} +GXBGCharOffset; -//GX_state -void GX_InitGXState(); +typedef enum +{ + GX_BGSCROFFSET_0x00000 = 0x00, + GX_BGSCROFFSET_0x10000 = 0x01, + GX_BGSCROFFSET_0x20000 = 0x02, + GX_BGSCROFFSET_0x30000 = 0x03, + GX_BGSCROFFSET_0x40000 = 0x04, + GX_BGSCROFFSET_0x50000 = 0x05, + GX_BGSCROFFSET_0x60000 = 0x06, + GX_BGSCROFFSET_0x70000 = 0x07 +} +GXBGScrOffset; -//GX_g3imm -void G3_LoadMtx43(struct Mtx43 *mtx); -void G3_MultMtx43(struct Mtx43 *mtx); -void G3_MultMtx33(struct Mtx33 *mtx); +typedef enum +{ + GX_DISP_SELECT_SUB_MAIN = 0, + GX_DISP_SELECT_MAIN_SUB = 1 +} +GXDispSelect; #endif //GUARD_GX_H diff --git a/arm9/lib/src/GX_load2d.c b/arm9/lib/src/GX_load2d.c index c0139c41..55faa915 100644 --- a/arm9/lib/src/GX_load2d.c +++ b/arm9/lib/src/GX_load2d.c @@ -21,117 +21,117 @@ static inline void *_GXS_OBJ_PTR(){ } ARM_FUNC void GX_LoadBGPltt(void *src, u32 offset, u32 size){ - _GX_Load_16(UNK_02106814, src, (void *)(0x5000000 + offset), size); + GXi_DmaCopy16(UNK_02106814, src, (void *)(0x5000000 + offset), size); } ARM_FUNC void GXS_LoadBGPltt(void *src, u32 offset, u32 size){ - _GX_Load_16(UNK_02106814, src, (void *)(0x5000400 + offset), size); + GXi_DmaCopy16(UNK_02106814, src, (void *)(0x5000400 + offset), size); } ARM_FUNC void GX_LoadOBJPltt(void *src, u32 offset, u32 size){ - _GX_Load_16(UNK_02106814, src, (void *)(0x5000200 + offset), size); + GXi_DmaCopy16(UNK_02106814, src, (void *)(0x5000200 + offset), size); } ARM_FUNC void GXS_LoadOBJPltt(void *src, u32 offset, u32 size){ - _GX_Load_16(UNK_02106814, src, (void *)(0x5000600 + offset), size); + GXi_DmaCopy16(UNK_02106814, src, (void *)(0x5000600 + offset), size); } ARM_FUNC void GX_LoadOAM(void *src, u32 offset, u32 size){ - _GX_Load_32(UNK_02106814, src, (void *)(0x7000000 + offset), size); + GXi_DmaCopy32(UNK_02106814, src, (void *)(0x7000000 + offset), size); } ARM_FUNC void GXS_LoadOAM(void *src, u32 offset, u32 size){ - _GX_Load_32(UNK_02106814, src, (void *)(0x7000400 + offset), size); + GXi_DmaCopy32(UNK_02106814, src, (void *)(0x7000400 + offset), size); } ARM_FUNC void GX_LoadOBJ(void *src, u32 offset, u32 size){ u32 base = (u32)_GX_OBJ_PTR(); - _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadOBJ(void *src, u32 offset, u32 size){ u32 base = (u32)_GXS_OBJ_PTR(); - _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG0Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG0ScrPtr(); - _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG0Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG0ScrPtr(); - _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG1Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG1ScrPtr(); - _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG1Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG1ScrPtr(); - _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG2Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG2ScrPtr(); - _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG2Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG2ScrPtr(); - _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG3Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG3ScrPtr(); - _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG3Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG3ScrPtr(); - _GX_Load_16(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy16(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG0Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG0CharPtr(); - _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG0Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG0CharPtr(); - _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG1Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG1CharPtr(); - _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG1Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG1CharPtr(); - _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG2Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG2CharPtr(); - _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG2Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG2CharPtr(); - _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG3Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG3CharPtr(); - _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG3Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG3CharPtr(); - _GX_Load_32(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy32(UNK_02106814, src, (void *)(base + offset), size); } ARM_FUNC void GX_BeginLoadBGExtPltt(){ @@ -157,12 +157,11 @@ ARM_FUNC void GX_BeginLoadBGExtPltt(){ } ARM_FUNC void GX_LoadBGExtPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(UNK_02106814, src, (void *)(UNK_021D33F0 + offset - UNK_021D33EC), size, NULL, NULL); + GXi_DmaCopy32Async(UNK_02106814, src, (void *)(UNK_021D33F0 + offset - UNK_021D33EC), size, NULL, NULL); } ARM_FUNC void GX_EndLoadBGExtPltt(){ - if (UNK_02106814 != -1) - MI_WaitDma(UNK_02106814); + GXi_WaitDma(UNK_02106814); GX_SetBankForBGExtPltt(UNK_021D33F4); UNK_021D33F4 = 0x0; UNK_021D33F0 = 0x0; @@ -185,12 +184,11 @@ ARM_FUNC void GX_BeginLoadOBJExtPltt(){ } ARM_FUNC void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(UNK_02106814, src, (void *)(UNK_021D33E4 + offset), size, NULL, NULL); + GXi_DmaCopy32Async(UNK_02106814, src, (void *)(UNK_021D33E4 + offset), size, NULL, NULL); } ARM_FUNC void GX_EndLoadOBJExtPltt(){ - if (UNK_02106814 != -1) - MI_WaitDma(UNK_02106814); + GXi_WaitDma(UNK_02106814); GX_SetBankForOBJExtPltt(UNK_021D33E8); UNK_021D33E8 = 0x0; UNK_021D33E4 = 0x0; @@ -201,12 +199,11 @@ ARM_FUNC void GXS_BeginLoadBGExtPltt(){ } ARM_FUNC void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(UNK_02106814, src, (void *)(0x06898000 + offset), size, NULL, NULL); + GXi_DmaCopy32Async(UNK_02106814, src, (void *)(0x06898000 + offset), size, NULL, NULL); } ARM_FUNC void GXS_EndLoadBGExtPltt(){ - if (UNK_02106814 != -1) - MI_WaitDma(UNK_02106814); + GXi_WaitDma(UNK_02106814); GX_SetBankForSubBGExtPltt(UNK_021D33E0); UNK_021D33E0 = 0x0; } @@ -216,12 +213,11 @@ ARM_FUNC void GXS_BeginLoadOBJExtPltt(){ } ARM_FUNC void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(UNK_02106814, src, (void *)(0x068A0000 + offset), size, NULL, NULL); + GXi_DmaCopy32Async(UNK_02106814, src, (void *)(0x068A0000 + offset), size, NULL, NULL); } ARM_FUNC void GXS_EndLoadOBJExtPltt(){ - if (UNK_02106814 != -1) - MI_WaitDma(UNK_02106814); + GXi_WaitDma(UNK_02106814); GX_SetBankForSubOBJExtPltt(UNK_021D33F8); UNK_021D33F8 = 0x0; } diff --git a/arm9/lib/src/GX_load3d.c b/arm9/lib/src/GX_load3d.c index 3a8a8c1d..31ddffc3 100644 --- a/arm9/lib/src/GX_load3d.c +++ b/arm9/lib/src/GX_load3d.c @@ -50,17 +50,16 @@ ARM_FUNC void GX_LoadTex(void *src, u32 offset, u32 size){ void *temp2 = (void *)UNK_021D3414; u32 temp1 = UNK_021D3418 - offset; temp = (void *)(UNK_021D3400 + offset); - _GX_Load_32(UNK_02106814, src, temp, temp1); - _GX_Load_32_Async(UNK_02106814, (void *)((u8 *)src + temp1), temp2, (size - temp1), NULL, NULL); + GXi_DmaCopy32(UNK_02106814, src, temp, temp1); + GXi_DmaCopy32Async(UNK_02106814, (void *)((u8 *)src + temp1), temp2, (size - temp1), NULL, NULL); return; } } - _GX_Load_32_Async(UNK_02106814, src, temp, size, NULL, NULL); + GXi_DmaCopy32Async(UNK_02106814, src, temp, size, NULL, NULL); } ARM_FUNC void GX_EndLoadTex(){ - if (UNK_02106814 != -1) - MI_WaitDma(UNK_02106814); + GXi_WaitDma(UNK_02106814); GX_SetBankForTex(UNK_021D3410); UNK_021D3418 = 0x0; UNK_021D3414 = 0x0; @@ -75,12 +74,11 @@ ARM_FUNC void GX_BeginLoadTexPltt(){ } ARM_FUNC void GX_LoadTexPltt(void *src, u32 offset, u32 size){ - _GX_Load_32_Async(UNK_02106814, src, (void *)(UNK_021D3404 + offset), size, NULL, NULL); + GXi_DmaCopy32Async(UNK_02106814, src, (void *)(UNK_021D3404 + offset), size, NULL, NULL); } ARM_FUNC void GX_EndLoadTexPltt(){ - if (UNK_02106814 != -1) - MI_WaitDma(UNK_02106814); + GXi_WaitDma(UNK_02106814); GX_SetBankForTexPltt(UNK_021D3408); UNK_021D3408 = 0x0; UNK_021D3404 = 0x0; @@ -108,16 +106,15 @@ ARM_FUNC void GX_BeginLoadClearImage(){ } ARM_FUNC void GX_LoadClearImageColor(void *src, u32 size){ - _GX_Load_32_Async(UNK_02106814, src, (void *)(UNK_021D340C), size, NULL, NULL); + GXi_DmaCopy32Async(UNK_02106814, src, (void *)(UNK_021D340C), size, NULL, NULL); } ARM_FUNC void GX_LoadClearImageDepth(void *src, u32 size){ - _GX_Load_32_Async(UNK_02106814, src, (void *)(UNK_021D340C + 0x20000), size, NULL, NULL); + GXi_DmaCopy32Async(UNK_02106814, src, (void *)(UNK_021D340C + 0x20000), size, NULL, NULL); } ARM_FUNC void GX_EndLoadClearImage(){ - if (UNK_02106814 != -1) - MI_WaitDma(UNK_02106814); + GXi_WaitDma(UNK_02106814); GX_SetBankForClearImage(UNK_021D33FC); UNK_021D33FC = 0x0; UNK_021D340C = 0x0; -- cgit v1.2.3 From 8ac22ef273a2863591f7e382d2d8781cc434e8a5 Mon Sep 17 00:00:00 2001 From: Made Date: Mon, 18 May 2020 02:32:07 +0200 Subject: Rename globals --- arm9/data/bss_2.s | 68 ++++++++++++------------ arm9/data/rom2_2.s | 16 +++--- arm9/data/rom2_3.s | 8 +-- arm9/lib/src/GX.c | 36 ++++++------- arm9/lib/src/GX_g3x.c | 8 +-- arm9/lib/src/GX_load2d.c | 130 +++++++++++++++++++++++----------------------- arm9/lib/src/GX_load3d.c | 106 ++++++++++++++++++------------------- arm9/lib/src/GX_vramcnt.c | 4 +- arm9/undefined_syms.txt | 40 +++++++------- 9 files changed, 208 insertions(+), 208 deletions(-) diff --git a/arm9/data/bss_2.s b/arm9/data/bss_2.s index 3832b009..1a39bbf1 100644 --- a/arm9/data/bss_2.s +++ b/arm9/data/bss_2.s @@ -932,12 +932,12 @@ UNK_021D2DF0: ; 0x021D2DF0 UNK_021D2DFC: ; 0x021D2DFC .space 0x5c0 - .global UNK_021D33BC -UNK_021D33BC: ; 0x021D33BC + .global GXi_VRamLockId +GXi_VRamLockId: ; 0x021D33BC .space 0x4 - .global UNK_021D33C0 -UNK_021D33C0: ; 0x021D33C0 + .global sDispMode +sDispMode: ; 0x021D33C0 .space 0x4 .global gGXState @@ -992,64 +992,64 @@ UNK_021D33DA: ; 0x021D33DA UNK_021D33DC: ; 0x021D33DC .space 0x4 - .global UNK_021D33E0 -UNK_021D33E0: ; 0x021D33E0 + .global sSubBGExtPltt +sSubBGExtPltt: ; 0x021D33E0 .space 0x4 - .global UNK_021D33E4 -UNK_021D33E4: ; 0x021D33E4 + .global sOBJExtPlttLCDCBlk +sOBJExtPlttLCDCBlk: ; 0x021D33E4 .space 0x4 - .global UNK_021D33E8 -UNK_021D33E8: ; 0x021D33E8 + .global sOBJExtPltt +sOBJExtPltt: ; 0x021D33E8 .space 0x4 - .global UNK_021D33EC -UNK_021D33EC: ; 0x021D33EC + .global sBGExtPlttLCDCOffset +sBGExtPlttLCDCOffset: ; 0x021D33EC .space 0x4 - .global UNK_021D33F0 -UNK_021D33F0: ; 0x021D33F0 + .global sBGExtPlttLCDCBlk +sBGExtPlttLCDCBlk: ; 0x021D33F0 .space 0x4 - .global UNK_021D33F4 -UNK_021D33F4: ; 0x021D33F4 + .global sBGExtPltt +sBGExtPltt: ; 0x021D33F4 .space 0x4 - .global UNK_021D33F8 -UNK_021D33F8: ; 0x021D33F8 + .global sSubOBJExtPltt +sSubOBJExtPltt: ; 0x021D33F8 .space 0x4 - .global UNK_021D33FC -UNK_021D33FC: ; 0x021D33FC + .global sClrImg +sClrImg: ; 0x021D33FC .space 0x4 - .global UNK_021D3400 -UNK_021D3400: ; 0x021D3400 + .global sTexLCDCBlk1 +sTexLCDCBlk1: ; 0x021D3400 .space 0x4 - .global UNK_021D3404 -UNK_021D3404: ; 0x021D3404 + .global sTexPlttLCDCBlk +sTexPlttLCDCBlk: ; 0x021D3404 .space 0x4 - .global UNK_021D3408 -UNK_021D3408: ; 0x021D3408 + .global sTexPltt +sTexPltt: ; 0x021D3408 .space 0x4 - .global UNK_021D340C -UNK_021D340C: ; 0x021D340C + .global sClrImgLCDCBlk +sClrImgLCDCBlk: ; 0x021D340C .space 0x4 - .global UNK_021D3410 -UNK_021D3410: ; 0x021D3410 + .global sTex +sTex: ; 0x021D3410 .space 0x4 - .global UNK_021D3414 -UNK_021D3414: ; 0x021D3414 + .global sTexLCDCBlk2 +sTexLCDCBlk2: ; 0x021D3414 .space 0x4 - .global UNK_021D3418 -UNK_021D3418: ; 0x021D3418 + .global sSzTexBlk1 +sSzTexBlk1: ; 0x021D3418 .space 0x4 .global OSi_IrqCallbackInfo diff --git a/arm9/data/rom2_2.s b/arm9/data/rom2_2.s index 396d68dc..67a4d325 100644 --- a/arm9/data/rom2_2.s +++ b/arm9/data/rom2_2.s @@ -5075,20 +5075,20 @@ UNK_02103001: ; 0x02103001 FX_AtanTable_: ; 0x02103A38 .incbin "baserom.nds", 0x107a38, 0x104 - .global UNK_02103B3C -UNK_02103B3C: ; 0x02103B3C + .global sTexPlttStartAddrTable +sTexPlttStartAddrTable: ; 0x02103B3C .incbin "baserom.nds", 0x107b3c, 0x10 - .global UNK_02103B4C -UNK_02103B4C: ; 0x02103B4C + .global sTexStartAddrTable +sTexStartAddrTable: ; 0x02103B4C .incbin "baserom.nds", 0x107b4c, 0x2 - .global UNK_02103B4E -UNK_02103B4E: ; 0x02103B4E + .global sTexStartAddrTable +sTexStartAddrTable: ; 0x02103B4E .incbin "baserom.nds", 0x107b4e, 0x2 - .global UNK_02103B50 -UNK_02103B50: ; 0x02103B50 + .global sTexStartAddrTable +sTexStartAddrTable: ; 0x02103B50 .incbin "baserom.nds", 0x107b50, 0x5c .global UNK_02103BAC diff --git a/arm9/data/rom2_3.s b/arm9/data/rom2_3.s index a86431af..5e5d18de 100644 --- a/arm9/data/rom2_3.s +++ b/arm9/data/rom2_3.s @@ -1357,12 +1357,12 @@ UNK_021067D0: ; 0x021067D0 UNK_021067F0: ; 0x021067F0 .incbin "baserom.nds", 0x10a7f0, 0x20 - .global UNK_02106810 -UNK_02106810: ; 0x02106810 + .global sIsDispOn +sIsDispOn: ; 0x02106810 .incbin "baserom.nds", 0x10a810, 0x4 - .global UNK_02106814 -UNK_02106814: ; 0x02106814 + .global GXi_DmaId +GXi_DmaId: ; 0x02106814 .incbin "baserom.nds", 0x10a814, 0x4 .global OSi_IrqCallbackInfoIndex diff --git a/arm9/lib/src/GX.c b/arm9/lib/src/GX.c index 883dfe69..8841d69a 100644 --- a/arm9/lib/src/GX.c +++ b/arm9/lib/src/GX.c @@ -2,10 +2,10 @@ #include "main.h" #include "gx.h" -extern u16 UNK_021D33BC; -extern u16 UNK_021D33C0; -extern u32 UNK_02106814; -extern u16 UNK_02106810; +extern u16 GXi_VRamLockId; +extern u16 sDispMode; +extern u32 GXi_DmaId; +extern u16 sIsDispOn; ARM_FUNC void GX_Init(){ reg_GX_POWCNT |= 0x8000; @@ -13,22 +13,22 @@ ARM_FUNC void GX_Init(){ reg_GX_POWCNT = reg_GX_POWCNT | 0x1; GX_InitGXState(); u32 temp; - while (UNK_021D33BC == 0) + while (GXi_VRamLockId == 0) { temp = OS_GetLockID(); if (temp == -3) { OS_Terminate(); } - UNK_021D33BC = temp; + GXi_VRamLockId = temp; } reg_GX_DISPSTAT = 0x0; reg_GX_DISPCNT = 0x0; - if (UNK_02106814 != -1) + if (GXi_DmaId != -1) { - MI_DmaFill32(UNK_02106814, (void *)®_G2_BG0CNT, 0x0, 0x60); + MI_DmaFill32(GXi_DmaId, (void *)®_G2_BG0CNT, 0x0, 0x60); reg_GX_MASTER_BRIGHT = 0x0; - MI_DmaFill32(UNK_02106814, (void *)®_GXS_DB_DISPCNT, 0x0, 0x70); + MI_DmaFill32(GXi_DmaId, (void *)®_GXS_DB_DISPCNT, 0x0, 0x70); } else { @@ -74,16 +74,16 @@ ARM_FUNC u32 GX_VBlankIntr(u32 enable){ ARM_FUNC void GX_DispOff(){ u32 temp = reg_GX_DISPCNT; - UNK_02106810 = 0x0; - UNK_021D33C0 = (temp & 0x30000) >> 0x10; + sIsDispOn = 0x0; + sDispMode = (temp & 0x30000) >> 0x10; reg_GX_DISPCNT = temp & ~0x30000; } ARM_FUNC void GX_DispOn(){ - UNK_02106810 = 0x1; - if (UNK_021D33C0) + sIsDispOn = 0x1; + if (sDispMode) { - reg_GX_DISPCNT = reg_GX_DISPCNT & ~0x30000 | (UNK_021D33C0 << 0x10); + reg_GX_DISPCNT = reg_GX_DISPCNT & ~0x30000 | (sDispMode << 0x10); } else { @@ -93,12 +93,12 @@ ARM_FUNC void GX_DispOn(){ ARM_FUNC void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3){ u32 temp2 = reg_GX_DISPCNT; - UNK_021D33C0 = mode1; - if (!UNK_02106810) + sDispMode = mode1; + if (!sIsDispOn) mode1 = 0; reg_GX_DISPCNT = (mode2 | ((temp2 & 0xFFF0FFF0) | (mode1 << 0x10))) | (mode3 << 0x3); - if (!UNK_021D33C0) - UNK_02106810 = 0x0; + if (!sDispMode) + sIsDispOn = 0x0; } ARM_FUNC void GXS_SetGraphicsMode(u32 mode){ diff --git a/arm9/lib/src/GX_g3x.c b/arm9/lib/src/GX_g3x.c index 5a03c4ca..6f968e7e 100644 --- a/arm9/lib/src/GX_g3x.c +++ b/arm9/lib/src/GX_g3x.c @@ -2,7 +2,7 @@ #include "main.h" #include "gx.h" -extern u32 UNK_02106814; +extern u32 GXi_DmaId; ARM_FUNC asm void GXi_NopClearFifo128_(void *reg){ mov r1, #0x0 @@ -178,10 +178,10 @@ ARM_FUNC void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u } ARM_FUNC void G3X_InitTable(){ - if (UNK_02106814 != -1) + if (GXi_DmaId != -1) { - MI_DmaFill32Async(UNK_02106814, (void *)®_G3X_EDGE_COLOR_0, 0x0, 0x10, 0x0, 0x0); - MI_DmaFill32(UNK_02106814, (void *)®_G3X_FOG_TABLE_0, 0x0, 0x60); + MI_DmaFill32Async(GXi_DmaId, (void *)®_G3X_EDGE_COLOR_0, 0x0, 0x10, 0x0, 0x0); + MI_DmaFill32(GXi_DmaId, (void *)®_G3X_FOG_TABLE_0, 0x0, 0x60); } else { diff --git a/arm9/lib/src/GX_load2d.c b/arm9/lib/src/GX_load2d.c index 55faa915..17ab3694 100644 --- a/arm9/lib/src/GX_load2d.c +++ b/arm9/lib/src/GX_load2d.c @@ -2,15 +2,15 @@ #include "main.h" #include "gx.h" -extern u32 UNK_02106814; +extern u32 GXi_DmaId; -extern s32 UNK_021D33F8; -extern s32 UNK_021D33F4; -extern u32 UNK_021D33F0; -extern u32 UNK_021D33EC; -extern s32 UNK_021D33E8; -extern u32 UNK_021D33E4; -extern s32 UNK_021D33E0; +extern s32 sSubOBJExtPltt; +extern s32 sBGExtPltt; +extern u32 sBGExtPlttLCDCBlk; +extern u32 sBGExtPlttLCDCOffset; +extern s32 sOBJExtPltt; +extern u32 sOBJExtPlttLCDCBlk; +extern s32 sSubBGExtPltt; static inline void *_GX_OBJ_PTR(){ @@ -21,203 +21,203 @@ static inline void *_GXS_OBJ_PTR(){ } ARM_FUNC void GX_LoadBGPltt(void *src, u32 offset, u32 size){ - GXi_DmaCopy16(UNK_02106814, src, (void *)(0x5000000 + offset), size); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000000 + offset), size); } ARM_FUNC void GXS_LoadBGPltt(void *src, u32 offset, u32 size){ - GXi_DmaCopy16(UNK_02106814, src, (void *)(0x5000400 + offset), size); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000400 + offset), size); } ARM_FUNC void GX_LoadOBJPltt(void *src, u32 offset, u32 size){ - GXi_DmaCopy16(UNK_02106814, src, (void *)(0x5000200 + offset), size); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000200 + offset), size); } ARM_FUNC void GXS_LoadOBJPltt(void *src, u32 offset, u32 size){ - GXi_DmaCopy16(UNK_02106814, src, (void *)(0x5000600 + offset), size); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000600 + offset), size); } ARM_FUNC void GX_LoadOAM(void *src, u32 offset, u32 size){ - GXi_DmaCopy32(UNK_02106814, src, (void *)(0x7000000 + offset), size); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(0x7000000 + offset), size); } ARM_FUNC void GXS_LoadOAM(void *src, u32 offset, u32 size){ - GXi_DmaCopy32(UNK_02106814, src, (void *)(0x7000400 + offset), size); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(0x7000400 + offset), size); } ARM_FUNC void GX_LoadOBJ(void *src, u32 offset, u32 size){ u32 base = (u32)_GX_OBJ_PTR(); - GXi_DmaCopy32(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadOBJ(void *src, u32 offset, u32 size){ u32 base = (u32)_GXS_OBJ_PTR(); - GXi_DmaCopy32(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG0Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG0ScrPtr(); - GXi_DmaCopy16(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG0Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG0ScrPtr(); - GXi_DmaCopy16(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG1Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG1ScrPtr(); - GXi_DmaCopy16(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG1Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG1ScrPtr(); - GXi_DmaCopy16(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG2Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG2ScrPtr(); - GXi_DmaCopy16(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG2Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG2ScrPtr(); - GXi_DmaCopy16(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG3Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG3ScrPtr(); - GXi_DmaCopy16(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG3Scr(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG3ScrPtr(); - GXi_DmaCopy16(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy16(GXi_DmaId, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG0Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG0CharPtr(); - GXi_DmaCopy32(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG0Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG0CharPtr(); - GXi_DmaCopy32(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG1Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG1CharPtr(); - GXi_DmaCopy32(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG1Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG1CharPtr(); - GXi_DmaCopy32(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG2Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG2CharPtr(); - GXi_DmaCopy32(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG2Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG2CharPtr(); - GXi_DmaCopy32(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); } ARM_FUNC void GX_LoadBG3Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2_GetBG3CharPtr(); - GXi_DmaCopy32(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); } ARM_FUNC void GXS_LoadBG3Char(void *src, u32 offset, u32 size){ u32 base = (u32)G2S_GetBG3CharPtr(); - GXi_DmaCopy32(UNK_02106814, src, (void *)(base + offset), size); + GXi_DmaCopy32(GXi_DmaId, src, (void *)(base + offset), size); } ARM_FUNC void GX_BeginLoadBGExtPltt(){ - UNK_021D33F4 = GX_ResetBankForBGExtPltt(); - switch (UNK_021D33F4) + sBGExtPltt = GX_ResetBankForBGExtPltt(); + switch (sBGExtPltt) { case 0: //needed to match break; case 0x10: - UNK_021D33F0 = 0x06880000; - UNK_021D33EC = 0x0; + sBGExtPlttLCDCBlk = 0x06880000; + sBGExtPlttLCDCOffset = 0x0; break; case 0x40: - UNK_021D33F0 = 0x06894000; - UNK_021D33EC = 0x4000; + sBGExtPlttLCDCBlk = 0x06894000; + sBGExtPlttLCDCOffset = 0x4000; break; case 0x20: case 0x60: - UNK_021D33F0 = 0x06890000; - UNK_021D33EC = 0x0; + sBGExtPlttLCDCBlk = 0x06890000; + sBGExtPlttLCDCOffset = 0x0; break; } } ARM_FUNC void GX_LoadBGExtPltt(void *src, u32 offset, u32 size){ - GXi_DmaCopy32Async(UNK_02106814, src, (void *)(UNK_021D33F0 + offset - UNK_021D33EC), size, NULL, NULL); + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sBGExtPlttLCDCBlk + offset - sBGExtPlttLCDCOffset), size, NULL, NULL); } ARM_FUNC void GX_EndLoadBGExtPltt(){ - GXi_WaitDma(UNK_02106814); - GX_SetBankForBGExtPltt(UNK_021D33F4); - UNK_021D33F4 = 0x0; - UNK_021D33F0 = 0x0; - UNK_021D33EC = 0x0; + GXi_WaitDma(GXi_DmaId); + GX_SetBankForBGExtPltt(sBGExtPltt); + sBGExtPltt = 0x0; + sBGExtPlttLCDCBlk = 0x0; + sBGExtPlttLCDCOffset = 0x0; } ARM_FUNC void GX_BeginLoadOBJExtPltt(){ - UNK_021D33E8 = GX_ResetBankForOBJExtPltt(); - switch (UNK_021D33E8) + sOBJExtPltt = GX_ResetBankForOBJExtPltt(); + switch (sOBJExtPltt) { case 0: //needed to match break; case 0x40: - UNK_021D33E4 = 0x06894000; + sOBJExtPlttLCDCBlk = 0x06894000; break; case 0x20: - UNK_021D33E4 = 0x06890000; + sOBJExtPlttLCDCBlk = 0x06890000; break; } } ARM_FUNC void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size){ - GXi_DmaCopy32Async(UNK_02106814, src, (void *)(UNK_021D33E4 + offset), size, NULL, NULL); + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sOBJExtPlttLCDCBlk + offset), size, NULL, NULL); } ARM_FUNC void GX_EndLoadOBJExtPltt(){ - GXi_WaitDma(UNK_02106814); - GX_SetBankForOBJExtPltt(UNK_021D33E8); - UNK_021D33E8 = 0x0; - UNK_021D33E4 = 0x0; + GXi_WaitDma(GXi_DmaId); + GX_SetBankForOBJExtPltt(sOBJExtPltt); + sOBJExtPltt = 0x0; + sOBJExtPlttLCDCBlk = 0x0; } ARM_FUNC void GXS_BeginLoadBGExtPltt(){ - UNK_021D33E0 = FUN_020C6034(); + sSubBGExtPltt = FUN_020C6034(); } ARM_FUNC void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size){ - GXi_DmaCopy32Async(UNK_02106814, src, (void *)(0x06898000 + offset), size, NULL, NULL); + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(0x06898000 + offset), size, NULL, NULL); } ARM_FUNC void GXS_EndLoadBGExtPltt(){ - GXi_WaitDma(UNK_02106814); - GX_SetBankForSubBGExtPltt(UNK_021D33E0); - UNK_021D33E0 = 0x0; + GXi_WaitDma(GXi_DmaId); + GX_SetBankForSubBGExtPltt(sSubBGExtPltt); + sSubBGExtPltt = 0x0; } ARM_FUNC void GXS_BeginLoadOBJExtPltt(){ - UNK_021D33F8 = GX_ResetBankForSubOBJ(); + sSubOBJExtPltt = GX_ResetBankForSubOBJ(); } ARM_FUNC void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size){ - GXi_DmaCopy32Async(UNK_02106814, src, (void *)(0x068A0000 + offset), size, NULL, NULL); + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(0x068A0000 + offset), size, NULL, NULL); } ARM_FUNC void GXS_EndLoadOBJExtPltt(){ - GXi_WaitDma(UNK_02106814); - GX_SetBankForSubOBJExtPltt(UNK_021D33F8); - UNK_021D33F8 = 0x0; + GXi_WaitDma(GXi_DmaId); + GX_SetBankForSubOBJExtPltt(sSubOBJExtPltt); + sSubOBJExtPltt = 0x0; } diff --git a/arm9/lib/src/GX_load3d.c b/arm9/lib/src/GX_load3d.c index 31ddffc3..db947ec9 100644 --- a/arm9/lib/src/GX_load3d.c +++ b/arm9/lib/src/GX_load3d.c @@ -2,120 +2,120 @@ #include "main.h" #include "gx.h" -extern u32 UNK_02106814; +extern u32 GXi_DmaId; -extern u32 UNK_021D3410; -extern u32 UNK_021D3400; -extern u32 UNK_021D3414; -extern u32 UNK_021D3418; +extern u32 sTex; +extern u32 sTexLCDCBlk1; +extern u32 sTexLCDCBlk2; +extern u32 sSzTexBlk1; //probably structs of length 0x6 -extern u16 UNK_02103B4C[]; -extern u16 UNK_02103B4E[]; -extern u16 UNK_02103B50[]; +extern u16 sTexStartAddrTable[]; +extern u16 sTexStartAddrTable[]; +extern u16 sTexStartAddrTable[]; -extern u32 UNK_021D3408; -extern u32 UNK_021D3404; -extern u16 UNK_02103B3C[]; +extern u32 sTexPltt; +extern u32 sTexPlttLCDCBlk; +extern u16 sTexPlttStartAddrTable[]; -extern s32 UNK_021D33FC; -extern u32 UNK_021D340C; +extern s32 sClrImg; +extern u32 sClrImgLCDCBlk; ARM_FUNC void GX_BeginLoadTex(){ u32 temp = GX_ResetBankForTex(); - UNK_021D3410 = temp; - UNK_021D3400 = UNK_02103B4C[temp * 3] << 0xC; - UNK_021D3414 = UNK_02103B4E[temp * 3] << 0xC; - UNK_021D3418 = UNK_02103B50[temp * 3] << 0xC; + sTex = temp; + sTexLCDCBlk1 = sTexStartAddrTable[temp * 3] << 0xC; + sTexLCDCBlk2 = sTexStartAddrTable[temp * 3] << 0xC; + sSzTexBlk1 = sTexStartAddrTable[temp * 3] << 0xC; } ARM_FUNC void GX_LoadTex(void *src, u32 offset, u32 size){ void *temp; - if (!UNK_021D3414) + if (!sTexLCDCBlk2) { - temp = (void *)(UNK_021D3400 + offset); + temp = (void *)(sTexLCDCBlk1 + offset); } else { - if ((offset + size) < UNK_021D3418) + if ((offset + size) < sSzTexBlk1) { - temp = (void *)(UNK_021D3400 + offset); + temp = (void *)(sTexLCDCBlk1 + offset); } - else if (offset >= UNK_021D3418) + else if (offset >= sSzTexBlk1) { - temp = (void *)(UNK_021D3414 + offset - UNK_021D3418); + temp = (void *)(sTexLCDCBlk2 + offset - sSzTexBlk1); } else { - void *temp2 = (void *)UNK_021D3414; - u32 temp1 = UNK_021D3418 - offset; - temp = (void *)(UNK_021D3400 + offset); - GXi_DmaCopy32(UNK_02106814, src, temp, temp1); - GXi_DmaCopy32Async(UNK_02106814, (void *)((u8 *)src + temp1), temp2, (size - temp1), NULL, NULL); + void *temp2 = (void *)sTexLCDCBlk2; + u32 temp1 = sSzTexBlk1 - offset; + temp = (void *)(sTexLCDCBlk1 + offset); + GXi_DmaCopy32(GXi_DmaId, src, temp, temp1); + GXi_DmaCopy32Async(GXi_DmaId, (void *)((u8 *)src + temp1), temp2, (size - temp1), NULL, NULL); return; } } - GXi_DmaCopy32Async(UNK_02106814, src, temp, size, NULL, NULL); + GXi_DmaCopy32Async(GXi_DmaId, src, temp, size, NULL, NULL); } ARM_FUNC void GX_EndLoadTex(){ - GXi_WaitDma(UNK_02106814); - GX_SetBankForTex(UNK_021D3410); - UNK_021D3418 = 0x0; - UNK_021D3414 = 0x0; - UNK_021D3400 = 0x0; - UNK_021D3410 = 0x0; + GXi_WaitDma(GXi_DmaId); + GX_SetBankForTex(sTex); + sSzTexBlk1 = 0x0; + sTexLCDCBlk2 = 0x0; + sTexLCDCBlk1 = 0x0; + sTex = 0x0; } ARM_FUNC void GX_BeginLoadTexPltt(){ s32 temp = GX_ResetBankForTexPltt(); - UNK_021D3408 = temp; - UNK_021D3404 = UNK_02103B3C[temp >> 4] << 0xC; + sTexPltt = temp; + sTexPlttLCDCBlk = sTexPlttStartAddrTable[temp >> 4] << 0xC; } ARM_FUNC void GX_LoadTexPltt(void *src, u32 offset, u32 size){ - GXi_DmaCopy32Async(UNK_02106814, src, (void *)(UNK_021D3404 + offset), size, NULL, NULL); + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sTexPlttLCDCBlk + offset), size, NULL, NULL); } ARM_FUNC void GX_EndLoadTexPltt(){ - GXi_WaitDma(UNK_02106814); - GX_SetBankForTexPltt(UNK_021D3408); - UNK_021D3408 = 0x0; - UNK_021D3404 = 0x0; + GXi_WaitDma(GXi_DmaId); + GX_SetBankForTexPltt(sTexPltt); + sTexPltt = 0x0; + sTexPlttLCDCBlk = 0x0; } ARM_FUNC void GX_BeginLoadClearImage(){ s32 temp = GX_ResetBankForClearImage(); - UNK_021D33FC = temp; + sClrImg = temp; switch (temp) { case 2: case 3: - UNK_021D340C = 0x6800000; + sClrImgLCDCBlk = 0x6800000; return; case 8: case 12: - UNK_021D340C = 0x6840000; + sClrImgLCDCBlk = 0x6840000; return; case 1: - UNK_021D340C = 0x67E0000; + sClrImgLCDCBlk = 0x67E0000; return; case 4: - UNK_021D340C = 0x6820000; + sClrImgLCDCBlk = 0x6820000; } } ARM_FUNC void GX_LoadClearImageColor(void *src, u32 size){ - GXi_DmaCopy32Async(UNK_02106814, src, (void *)(UNK_021D340C), size, NULL, NULL); + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sClrImgLCDCBlk), size, NULL, NULL); } ARM_FUNC void GX_LoadClearImageDepth(void *src, u32 size){ - GXi_DmaCopy32Async(UNK_02106814, src, (void *)(UNK_021D340C + 0x20000), size, NULL, NULL); + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sClrImgLCDCBlk + 0x20000), size, NULL, NULL); } ARM_FUNC void GX_EndLoadClearImage(){ - GXi_WaitDma(UNK_02106814); - GX_SetBankForClearImage(UNK_021D33FC); - UNK_021D33FC = 0x0; - UNK_021D340C = 0x0; + GXi_WaitDma(GXi_DmaId); + GX_SetBankForClearImage(sClrImg); + sClrImg = 0x0; + sClrImgLCDCBlk = 0x0; } diff --git a/arm9/lib/src/GX_vramcnt.c b/arm9/lib/src/GX_vramcnt.c index da55d806..2b785198 100644 --- a/arm9/lib/src/GX_vramcnt.c +++ b/arm9/lib/src/GX_vramcnt.c @@ -2,7 +2,7 @@ #include "main.h" #include "gx.h" -extern u16 UNK_021D33BC; +extern u16 GXi_VRamLockId; extern struct GX_State gGXState; ARM_FUNC void GX_VRAMCNT_SetLCDC_(u32 mask){ @@ -474,7 +474,7 @@ ARM_FUNC u32 FUN_020C5F28(u16 *ptr){ reg_GX_VRAMCNT_H = 0x0; if (temp & (0x1 << 8)) reg_GX_VRAMCNT_I = 0x0; - OSi_UnlockVram((u16)temp, UNK_021D33BC); + OSi_UnlockVram((u16)temp, GXi_VRamLockId); return temp; } diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt index 25771881..adc05ca0 100644 --- a/arm9/undefined_syms.txt +++ b/arm9/undefined_syms.txt @@ -8,7 +8,7 @@ SDK_IRQ_STACKSIZE = 0x00000400; FX_AtanTable_ = 0x02103A38; // OS gUnk02106810 = 0x02106810; -UNK_02106814 = 0x02106814; +GXi_DmaId = 0x02106814; OSi_IrqCallbackInfoIndex = 0x02106818; OSi_ConsoleTypeCache = 0x02106828; // DGT @@ -25,27 +25,27 @@ gUnk021D33BC = 0x021D33BC; gUnk021D33C0 = 0x021D33C0; gGXState = 0x021D33C4; -UNK_021D33E0 = 0x021D33E0; -UNK_021D33E4 = 0x021D33E4; -UNK_021D33E8 = 0x021D33E8; -UNK_021D33EC = 0x021D33EC; -UNK_021D33F0 = 0x021D33F0; -UNK_021D33F4 = 0x021D33F4; -UNK_021D33F8 = 0x021D33F8; -UNK_021D33FC = 0x021D33FC; -UNK_021D3400 = 0x021D3400; -UNK_021D3404 = 0x021D3404; -UNK_021D3408 = 0x021D3408; -UNK_021D340C = 0x021D340C; -UNK_021D3410 = 0x021D3410; -UNK_021D3414 = 0x021D3414; -UNK_021D3418 = 0x021D3418; +sSubBGExtPltt = 0x021D33E0; +sOBJExtPlttLCDCBlk = 0x021D33E4; +sOBJExtPltt = 0x021D33E8; +sBGExtPlttLCDCOffset = 0x021D33EC; +sBGExtPlttLCDCBlk = 0x021D33F0; +sBGExtPltt = 0x021D33F4; +sSubOBJExtPltt = 0x021D33F8; +sClrImg = 0x021D33FC; +sTexLCDCBlk1 = 0x021D3400; +sTexPlttLCDCBlk = 0x021D3404; +sTexPltt = 0x021D3408; +sClrImgLCDCBlk = 0x021D340C; +sTex = 0x021D3410; +sTexLCDCBlk2 = 0x021D3414; +sSzTexBlk1 = 0x021D3418; -UNK_02103B3C = 0x02103B3C; +sTexPlttStartAddrTable = 0x02103B3C; -UNK_02103B4C = 0x02103B4C; -UNK_02103B4E = 0x02103B4E; -UNK_02103B50 = 0x02103B50; +sTexStartAddrTable = 0x02103B4C; +sTexStartAddrTable = 0x02103B4E; +sTexStartAddrTable = 0x02103B50; // Overlay FUN_021D76AC = 0x021D76AC; -- cgit v1.2.3 From 88e486100e449d8960894c9e30c4f21489ccbc31 Mon Sep 17 00:00:00 2001 From: Made Date: Mon, 18 May 2020 02:33:11 +0200 Subject: rename main GX header --- arm9/lib/include/gx.h | 8 -------- arm9/lib/src/GX.c | 2 +- arm9/lib/src/GX_asm.c | 2 +- arm9/lib/src/GX_bgcnt.c | 2 +- arm9/lib/src/GX_g2.c | 2 +- arm9/lib/src/GX_g3.c | 2 +- arm9/lib/src/GX_g3_util.c | 2 +- arm9/lib/src/GX_g3b.c | 2 +- arm9/lib/src/GX_g3imm.c | 2 +- arm9/lib/src/GX_g3x.c | 2 +- arm9/lib/src/GX_load2d.c | 2 +- arm9/lib/src/GX_load3d.c | 2 +- arm9/lib/src/GX_state.c | 2 +- arm9/lib/src/GX_vramcnt.c | 2 +- 14 files changed, 13 insertions(+), 21 deletions(-) diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h index 877e5bb2..8abe4e40 100644 --- a/arm9/lib/include/gx.h +++ b/arm9/lib/include/gx.h @@ -20,14 +20,6 @@ void MIi_CpuCopy32(const void *src, void *dst, u32 size); void OSi_UnlockVram(u16, u16); void MIi_CpuClear32(u32, void *, u32); -//DONE: Add defines for GX commands, add structs/unions for HW registers -//DONE: structs -//DONE: useful macros -//DONE: inline functions used in sdk -//DONE: enums -//DONE: maybe some function signatures -//TODO: proper global names - #include "GXcommon.h" #include "GX_struct_2d.h" #include "GX_g3.h" diff --git a/arm9/lib/src/GX.c b/arm9/lib/src/GX.c index 8841d69a..28c3cc01 100644 --- a/arm9/lib/src/GX.c +++ b/arm9/lib/src/GX.c @@ -1,6 +1,6 @@ #include "global.h" #include "main.h" -#include "gx.h" +#include "GX.h" extern u16 GXi_VRamLockId; extern u16 sDispMode; diff --git a/arm9/lib/src/GX_asm.c b/arm9/lib/src/GX_asm.c index 1eb0a011..f40793d8 100644 --- a/arm9/lib/src/GX_asm.c +++ b/arm9/lib/src/GX_asm.c @@ -1,6 +1,6 @@ #include "global.h" #include "main.h" -#include "gx.h" +#include "GX.h" //looks like asm and says asm on the tin... ARM_FUNC asm void GX_SendFifo48B(void *src, void *dst){ diff --git a/arm9/lib/src/GX_bgcnt.c b/arm9/lib/src/GX_bgcnt.c index 63fe87b1..2086ad16 100644 --- a/arm9/lib/src/GX_bgcnt.c +++ b/arm9/lib/src/GX_bgcnt.c @@ -1,6 +1,6 @@ #include "global.h" #include "main.h" -#include "gx.h" +#include "GX.h" ARM_FUNC void *G2_GetBG0ScrPtr(){ u32 temp = (((reg_G2_BG0CNT & 0x1F00) >> 0x8) << 0xB); diff --git a/arm9/lib/src/GX_g2.c b/arm9/lib/src/GX_g2.c index 5bced1ef..66273541 100644 --- a/arm9/lib/src/GX_g2.c +++ b/arm9/lib/src/GX_g2.c @@ -1,6 +1,6 @@ #include "global.h" #include "main.h" -#include "gx.h" +#include "GX.h" ARM_FUNC void G2x_SetBGyAffine_(u32 *ptr, struct Mtx22 *mtx, fx32 a, fx32 b, fx32 c, fx32 d){ fx32 temp0, temp1, temp2, temp3; diff --git a/arm9/lib/src/GX_g3.c b/arm9/lib/src/GX_g3.c index 379ee52b..2b5f2941 100644 --- a/arm9/lib/src/GX_g3.c +++ b/arm9/lib/src/GX_g3.c @@ -1,6 +1,6 @@ #include "global.h" #include "main.h" -#include "gx.h" +#include "GX.h" ARM_FUNC void G3_BeginMakeDL(struct GXDLInfo *displaylist, void *r1, u32 r2){ diff --git a/arm9/lib/src/GX_g3_util.c b/arm9/lib/src/GX_g3_util.c index f34e23ed..c40a3848 100644 --- a/arm9/lib/src/GX_g3_util.c +++ b/arm9/lib/src/GX_g3_util.c @@ -1,6 +1,6 @@ #include "global.h" #include "main.h" -#include "gx.h" +#include "GX.h" ARM_FUNC void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx){ diff --git a/arm9/lib/src/GX_g3b.c b/arm9/lib/src/GX_g3b.c index 9a943bce..21698547 100644 --- a/arm9/lib/src/GX_g3b.c +++ b/arm9/lib/src/GX_g3b.c @@ -1,6 +1,6 @@ #include "global.h" #include "main.h" -#include "gx.h" +#include "GX.h" ARM_FUNC void G3BS_LoadMtx44(struct GXDLInfo *displaylist, struct Mtx44 *mtx){ diff --git a/arm9/lib/src/GX_g3imm.c b/arm9/lib/src/GX_g3imm.c index a5c62c26..579032a6 100644 --- a/arm9/lib/src/GX_g3imm.c +++ b/arm9/lib/src/GX_g3imm.c @@ -1,6 +1,6 @@ #include "global.h" #include "main.h" -#include "gx.h" +#include "GX.h" ARM_FUNC void G3_LoadMtx43(struct Mtx43 *mtx){ reg_G3X_GXFIFO = 0x17; diff --git a/arm9/lib/src/GX_g3x.c b/arm9/lib/src/GX_g3x.c index 6f968e7e..31508e06 100644 --- a/arm9/lib/src/GX_g3x.c +++ b/arm9/lib/src/GX_g3x.c @@ -1,6 +1,6 @@ #include "global.h" #include "main.h" -#include "gx.h" +#include "GX.h" extern u32 GXi_DmaId; diff --git a/arm9/lib/src/GX_load2d.c b/arm9/lib/src/GX_load2d.c index 17ab3694..d4def461 100644 --- a/arm9/lib/src/GX_load2d.c +++ b/arm9/lib/src/GX_load2d.c @@ -1,6 +1,6 @@ #include "global.h" #include "main.h" -#include "gx.h" +#include "GX.h" extern u32 GXi_DmaId; diff --git a/arm9/lib/src/GX_load3d.c b/arm9/lib/src/GX_load3d.c index db947ec9..5f13deda 100644 --- a/arm9/lib/src/GX_load3d.c +++ b/arm9/lib/src/GX_load3d.c @@ -1,6 +1,6 @@ #include "global.h" #include "main.h" -#include "gx.h" +#include "GX.h" extern u32 GXi_DmaId; diff --git a/arm9/lib/src/GX_state.c b/arm9/lib/src/GX_state.c index db313c31..3ca3b266 100644 --- a/arm9/lib/src/GX_state.c +++ b/arm9/lib/src/GX_state.c @@ -1,6 +1,6 @@ #include "global.h" #include "main.h" -#include "gx.h" +#include "GX.h" extern struct GX_State gGXState; diff --git a/arm9/lib/src/GX_vramcnt.c b/arm9/lib/src/GX_vramcnt.c index 2b785198..67749301 100644 --- a/arm9/lib/src/GX_vramcnt.c +++ b/arm9/lib/src/GX_vramcnt.c @@ -1,6 +1,6 @@ #include "global.h" #include "main.h" -#include "gx.h" +#include "GX.h" extern u16 GXi_VRamLockId; extern struct GX_State gGXState; -- cgit v1.2.3 From 02abe0000a06299e32557591fa9e3396a6135242 Mon Sep 17 00:00:00 2001 From: Made Date: Mon, 18 May 2020 02:58:04 +0200 Subject: Add proper struct for static data --- arm9/data/rom2_2.s | 10 +--------- arm9/lib/src/GX_load3d.c | 20 ++++++++++++-------- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/arm9/data/rom2_2.s b/arm9/data/rom2_2.s index 67a4d325..cf2f03ea 100644 --- a/arm9/data/rom2_2.s +++ b/arm9/data/rom2_2.s @@ -5081,15 +5081,7 @@ sTexPlttStartAddrTable: ; 0x02103B3C .global sTexStartAddrTable sTexStartAddrTable: ; 0x02103B4C - .incbin "baserom.nds", 0x107b4c, 0x2 - - .global sTexStartAddrTable -sTexStartAddrTable: ; 0x02103B4E - .incbin "baserom.nds", 0x107b4e, 0x2 - - .global sTexStartAddrTable -sTexStartAddrTable: ; 0x02103B50 - .incbin "baserom.nds", 0x107b50, 0x5c + .incbin "baserom.nds", 0x107b4c, 0x60 .global UNK_02103BAC UNK_02103BAC: ; 0x02103BAC diff --git a/arm9/lib/src/GX_load3d.c b/arm9/lib/src/GX_load3d.c index 5f13deda..5aa15581 100644 --- a/arm9/lib/src/GX_load3d.c +++ b/arm9/lib/src/GX_load3d.c @@ -9,14 +9,18 @@ extern u32 sTexLCDCBlk1; extern u32 sTexLCDCBlk2; extern u32 sSzTexBlk1; -//probably structs of length 0x6 -extern u16 sTexStartAddrTable[]; -extern u16 sTexStartAddrTable[]; -extern u16 sTexStartAddrTable[]; +static const struct _TexStartAddrTable +{ + u16 blk1; // 12 bit shift + u16 blk2; // 12 bit shift + u16 szBlk1; // 12 bit shift +}; +extern struct _TexStartAddrTable sTexStartAddrTable[16]; + extern u32 sTexPltt; extern u32 sTexPlttLCDCBlk; -extern u16 sTexPlttStartAddrTable[]; +extern u16 sTexPlttStartAddrTable[8]; extern s32 sClrImg; extern u32 sClrImgLCDCBlk; @@ -24,9 +28,9 @@ extern u32 sClrImgLCDCBlk; ARM_FUNC void GX_BeginLoadTex(){ u32 temp = GX_ResetBankForTex(); sTex = temp; - sTexLCDCBlk1 = sTexStartAddrTable[temp * 3] << 0xC; - sTexLCDCBlk2 = sTexStartAddrTable[temp * 3] << 0xC; - sSzTexBlk1 = sTexStartAddrTable[temp * 3] << 0xC; + sTexLCDCBlk1 = sTexStartAddrTable[temp].blk1 << 0xC; + sTexLCDCBlk2 = sTexStartAddrTable[temp].blk2 << 0xC; + sSzTexBlk1 = sTexStartAddrTable[temp].szBlk1 << 0xC; } ARM_FUNC void GX_LoadTex(void *src, u32 offset, u32 size){ -- cgit v1.2.3 From 8efd6b0d114301c0abf62be0cf29c10c28e6f851 Mon Sep 17 00:00:00 2001 From: Made Date: Mon, 18 May 2020 03:09:51 +0200 Subject: fix merge --- arm9/data/rom2_2.s | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/arm9/data/rom2_2.s b/arm9/data/rom2_2.s index 4bdd4119..013410bd 100644 --- a/arm9/data/rom2_2.s +++ b/arm9/data/rom2_2.s @@ -10232,12 +10232,12 @@ FX_AtanTable_: ; 0x02103A38 .byte 0xB0, 0x1E, 0xDB, 0x1E, 0x06, 0x1F, 0x30, 0x1F, 0x5A, 0x1F, 0x84, 0x1F, 0xAE, 0x1F, 0xD7, 0x1F .byte 0x00, 0x20, 0x00, 0x00 - .global UNK_02103B3C -UNK_02103B3C: ; 0x02103B3C + .global sTexPlttStartAddrTable +sTexPlttStartAddrTable: ; 0x02103B3C .byte 0x00, 0x00, 0x80, 0x68, 0x90, 0x68, 0x80, 0x68, 0x94, 0x68, 0x00, 0x00, 0x90, 0x68, 0x80, 0x68 - .global UNK_02103B4C -UNK_02103B4C: ; 0x02103B4C + .global sTexStartAddrTable +sTexStartAddrTable: ; 0x02103B4C .byte 0x00, 0x00 .byte 0x00, 0x00 .byte 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x20, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68 -- cgit v1.2.3 From 567c5518602e9977e26cf61218f629fa149c6c35 Mon Sep 17 00:00:00 2001 From: Made Date: Mon, 18 May 2020 13:49:28 +0200 Subject: remove undefined_syms.txt --- arm9/undefined_syms.txt | 1229 ----------------------------------------------- 1 file changed, 1229 deletions(-) delete mode 100644 arm9/undefined_syms.txt diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt deleted file mode 100644 index adc05ca0..00000000 --- a/arm9/undefined_syms.txt +++ /dev/null @@ -1,1229 +0,0 @@ -SDK_SYS_STACKSIZE = 0x00000000; -CONST_34 = 0x00000034; -CONST_3F = 0x0000003F; -SDK_IRQ_STACKSIZE = 0x00000400; - -// .data -// FX -FX_AtanTable_ = 0x02103A38; -// OS -gUnk02106810 = 0x02106810; -GXi_DmaId = 0x02106814; -OSi_IrqCallbackInfoIndex = 0x02106818; -OSi_ConsoleTypeCache = 0x02106828; -// DGT -Unk_0210683C = 0x0210683C; -Unk_02106840 = 0x02106840; -Unk_02106900 = 0x02106900; -Unk_02106A00 = 0x02106A00; -Unk_02106A04 = 0x02106A04; -// FS -SDK_OVERLAY_DIGEST = 0x02106F84; -SDK_OVERLAY_DIGEST_END = 0x02106F84; -//GX -gUnk021D33BC = 0x021D33BC; -gUnk021D33C0 = 0x021D33C0; -gGXState = 0x021D33C4; - -sSubBGExtPltt = 0x021D33E0; -sOBJExtPlttLCDCBlk = 0x021D33E4; -sOBJExtPltt = 0x021D33E8; -sBGExtPlttLCDCOffset = 0x021D33EC; -sBGExtPlttLCDCBlk = 0x021D33F0; -sBGExtPltt = 0x021D33F4; -sSubOBJExtPltt = 0x021D33F8; -sClrImg = 0x021D33FC; -sTexLCDCBlk1 = 0x021D3400; -sTexPlttLCDCBlk = 0x021D3404; -sTexPltt = 0x021D3408; -sClrImgLCDCBlk = 0x021D340C; -sTex = 0x021D3410; -sTexLCDCBlk2 = 0x021D3414; -sSzTexBlk1 = 0x021D3418; - -sTexPlttStartAddrTable = 0x02103B3C; - -sTexStartAddrTable = 0x02103B4C; -sTexStartAddrTable = 0x02103B4E; -sTexStartAddrTable = 0x02103B50; - -// Overlay -FUN_021D76AC = 0x021D76AC; -gUnk021D76C8 = 0x021D76C8; -FUN_021D77C4 = 0x021D77C4; -FUN_021D7800 = 0x021D7800; -FUN_021D78FC = 0x021D78FC; -FUN_021D79B4 = 0x021D79B4; -FUN_021D7CA4 = 0x021D7CA4; -FUN_021D7F8C = 0x021D7F8C; -FUN_021D8018 = 0x021D8018; -FUN_021D8164 = 0x021D8164; -FUN_021D82BC = 0x021D82BC; -FUN_021D8320 = 0x021D8320; -FUN_021D836C = 0x021D836C; -FUN_021D83A8 = 0x021D83A8; -FUN_021D83C0 = 0x021D83C0; -FUN_021D844C = 0x021D844C; -FUN_021D8494 = 0x021D8494; -FUN_021D85FC = 0x021D85FC; -FUN_021D8624 = 0x021D8624; -FUN_021D865C = 0x021D865C; -FUN_021D8758 = 0x021D8758; -FUN_021D8820 = 0x021D8820; -FUN_021D88E4 = 0x021D88E4; -FUN_021D89CC = 0x021D89CC; -FUN_021D8B64 = 0x021D8B64; -FUN_021D8C24 = 0x021D8C24; -FUN_021D917C = 0x021D917C; -FUN_021D959C = 0x021D959C; -FUN_021D967C = 0x021D967C; -FUN_021D96F4 = 0x021D96F4; -FUN_021D9708 = 0x021D9708; -FUN_021D971C = 0x021D971C; -FUN_021D9820 = 0x021D9820; -FUN_021D99F8 = 0x021D99F8; -FUN_021DA464 = 0x021DA464; -FUN_021DA4EC = 0x021DA4EC; -FUN_021DA54C = 0x021DA54C; -FUN_021DA58C = 0x021DA58C; -FUN_021DA5B8 = 0x021DA5B8; -FUN_021DA5C8 = 0x021DA5C8; -FUN_021DA5D0 = 0x021DA5D0; -FUN_021DA5D8 = 0x021DA5D8; -FUN_021DA7B4 = 0x021DA7B4; -FUN_021DAAA4 = 0x021DAAA4; -FUN_021DAC70 = 0x021DAC70; -FUN_021DAE40 = 0x021DAE40; -FUN_021DAED4 = 0x021DAED4; -FUN_021DAF28 = 0x021DAF28; -FUN_021DAF78 = 0x021DAF78; -FUN_021DAF98 = 0x021DAF98; -FUN_021DB030 = 0x021DB030; -FUN_021DB7E8 = 0x021DB7E8; -FUN_021DB858 = 0x021DB858; -gUnk021DBE18 = 0x021DBE18; -FUN_021DC174 = 0x021DC174; -FUN_021DD6F0 = 0x021DD6F0; -FUN_021DD718 = 0x021DD718; -FUN_021DDB08 = 0x021DDB08; -FUN_021E1374 = 0x021E1374; -FUN_021E1858 = 0x021E1858; -FUN_021E1994 = 0x021E1994; -FUN_021E1BF8 = 0x021E1BF8; -FUN_021E1C4C = 0x021E1C4C; -FUN_021E1C54 = 0x021E1C54; -FUN_021E1ECC = 0x021E1ECC; -FUN_021E1F34 = 0x021E1F34; -FUN_021E1F58 = 0x021E1F58; -FUN_021E1F60 = 0x021E1F60; -FUN_021E2464 = 0x021E2464; -FUN_021E2608 = 0x021E2608; -FUN_021E26CC = 0x021E26CC; -FUN_021E27E8 = 0x021E27E8; -FUN_021E288C = 0x021E288C; -FUN_021E28A0 = 0x021E28A0; -FUN_021E2950 = 0x021E2950; -FUN_021E29B4 = 0x021E29B4; -FUN_021E29C8 = 0x021E29C8; -FUN_021E2A70 = 0x021E2A70; -FUN_021E2AD4 = 0x021E2AD4; -FUN_021E2B80 = 0x021E2B80; -FUN_021E2B9C = 0x021E2B9C; -FUN_021E2BB8 = 0x021E2BB8; -FUN_021E2BD0 = 0x021E2BD0; -FUN_021E2C24 = 0x021E2C24; -FUN_021E2C58 = 0x021E2C58; -FUN_021E2CBC = 0x021E2CBC; -FUN_021E32F0 = 0x021E32F0; -FUN_021E331C = 0x021E331C; -FUN_021E3424 = 0x021E3424; -FUN_021E3444 = 0x021E3444; -FUN_021E495C = 0x021E495C; -FUN_021E4C54 = 0x021E4C54; -FUN_021E4C60 = 0x021E4C60; -FUN_021E4DE4 = 0x021E4DE4; -FUN_021E5614 = 0x021E5614; -FUN_021E57D4 = 0x021E57D4; -FUN_021E5970 = 0x021E5970; -FUN_021E5B30 = 0x021E5B30; -FUN_021E5FD8 = 0x021E5FD8; -FUN_021E5FE0 = 0x021E5FE0; -FUN_021E6410 = 0x021E6410; -FUN_021E643C = 0x021E643C; -FUN_021E6990 = 0x021E6990; -FUN_021E69BC = 0x021E69BC; -FUN_021E6BF4 = 0x021E6BF4; -FUN_021E7030 = 0x021E7030; -FUN_021E70F0 = 0x021E70F0; -FUN_021E7138 = 0x021E7138; -FUN_021E7184 = 0x021E7184; -FUN_021E71E8 = 0x021E71E8; -FUN_021E7750 = 0x021E7750; -FUN_021E799C = 0x021E799C; -FUN_021E7AC0 = 0x021E7AC0; -FUN_021E7EA0 = 0x021E7EA0; -FUN_021E7EB0 = 0x021E7EB0; -FUN_021E7EC4 = 0x021E7EC4; -FUN_021E7EC8 = 0x021E7EC8; -FUN_021E7ED0 = 0x021E7ED0; -FUN_021E7ED8 = 0x021E7ED8; -FUN_021E7FBC = 0x021E7FBC; -FUN_021E8128 = 0x021E8128; -FUN_021E8130 = 0x021E8130; -FUN_021E8140 = 0x021E8140; -FUN_021E8144 = 0x021E8144; -FUN_021E8148 = 0x021E8148; -FUN_021E8158 = 0x021E8158; -FUN_021E81BC = 0x021E81BC; -FUN_021E84F4 = 0x021E84F4; -FUN_021E856C = 0x021E856C; -FUN_021E8588 = 0x021E8588; -FUN_021E85E4 = 0x021E85E4; -FUN_021E85FC = 0x021E85FC; -FUN_021EAE90 = 0x021EAE90; -FUN_021EB044 = 0x021EB044; -FUN_021EC57C = 0x021EC57C; -FUN_021EC71C = 0x021EC71C; -FUN_021EC854 = 0x021EC854; -FUN_021EC864 = 0x021EC864; -FUN_021ECD64 = 0x021ECD64; -FUN_021ECF14 = 0x021ECF14; -FUN_021ED0CC = 0x021ED0CC; -FUN_021ED49C = 0x021ED49C; -FUN_021ED4E0 = 0x021ED4E0; -FUN_021ED52C = 0x021ED52C; -FUN_021ED5C4 = 0x021ED5C4; -FUN_021ED5EC = 0x021ED5EC; -FUN_021ED644 = 0x021ED644; -FUN_021ED940 = 0x021ED940; -FUN_021EDA48 = 0x021EDA48; -FUN_021EDBC8 = 0x021EDBC8; -FUN_021EF5E0 = 0x021EF5E0; -FUN_021EF604 = 0x021EF604; -FUN_021EF620 = 0x021EF620; -FUN_021EF654 = 0x021EF654; -FUN_021EF824 = 0x021EF824; -FUN_021EF844 = 0x021EF844; -FUN_021EF8C8 = 0x021EF8C8; -FUN_021EF8DC = 0x021EF8DC; -FUN_021EFA9C = 0x021EFA9C; -FUN_021D80E4 = 0x021D80E4; -FUN_021D9320 = 0x021D9320; -FUN_021D94B4 = 0x021D94B4; -FUN_021D9510 = 0x021D9510; -FUN_021DA03C = 0x021DA03C; -FUN_021DA080 = 0x021DA080; -FUN_021DA0DC = 0x021DA0DC; -FUN_021DA0E0 = 0x021DA0E0; -FUN_021DA0E8 = 0x021DA0E8; -FUN_021DA118 = 0x021DA118; -FUN_021DA138 = 0x021DA138; -FUN_021DA1A0 = 0x021DA1A0; -FUN_021DA1A4 = 0x021DA1A4; -FUN_021DA1A8 = 0x021DA1A8; -FUN_021DA20C = 0x021DA20C; -FUN_021DA4BC = 0x021DA4BC; -FUN_021DB44C = 0x021DB44C; -FUN_021DB4B0 = 0x021DB4B0; -FUN_021DB52C = 0x021DB52C; -FUN_021DB53C = 0x021DB53C; -FUN_021DBA40 = 0x021DBA40; -FUN_021DBA78 = 0x021DBA78; -FUN_021DBAA0 = 0x021DBAA0; -FUN_021E4BE8 = 0x021E4BE8; -FUN_021E4C00 = 0x021E4C00; -FUN_021E4C08 = 0x021E4C08; -FUN_021E4C20 = 0x021E4C20; -FUN_021E4C24 = 0x021E4C24; -FUN_021E4C6C = 0x021E4C6C; -FUN_021E4DC4 = 0x021E4DC4; -FUN_021E4E90 = 0x021E4E90; -FUN_021E4EE4 = 0x021E4EE4; -FUN_021E4EFC = 0x021E4EFC; -FUN_021E506C = 0x021E506C; -FUN_021E5078 = 0x021E5078; -FUN_021E5094 = 0x021E5094; -FUN_021E50A0 = 0x021E50A0; -FUN_021E50AC = 0x021E50AC; -FUN_021E50C8 = 0x021E50C8; -FUN_021E50D4 = 0x021E50D4; -FUN_021E5114 = 0x021E5114; -FUN_021E5198 = 0x021E5198; -FUN_021E51EC = 0x021E51EC; -FUN_021E5224 = 0x021E5224; -FUN_021E5260 = 0x021E5260; -FUN_021E5294 = 0x021E5294; -FUN_021E7C80 = 0x021E7C80; -FUN_021E7E9C = 0x021E7E9C; -FUN_021E7EC0 = 0x021E7EC0; -FUN_021E7ECC = 0x021E7ECC; -FUN_021E7EEC = 0x021E7EEC; -FUN_021E8698 = 0x021E8698; -FUN_021F0514 = 0x021F0514; -FUN_021F1C1C = 0x021F1C1C; -FUN_021F1C30 = 0x021F1C30; -FUN_021F1E64 = 0x021F1E64; -FUN_021F220C = 0x021F220C; -FUN_021F51D0 = 0x021F51D0; -FUN_021F522C = 0x021F522C; -FUN_021F5268 = 0x021F5268; -FUN_021F52C8 = 0x021F52C8; -FUN_021F531C = 0x021F531C; -FUN_021F5348 = 0x021F5348; -FUN_021F5358 = 0x021F5358; -FUN_021F5384 = 0x021F5384; -FUN_021F53BC = 0x021F53BC; -FUN_021F53F8 = 0x021F53F8; -FUN_021F5400 = 0x021F5400; -FUN_021F5424 = 0x021F5424; -FUN_021F5430 = 0x021F5430; -FUN_021F54CC = 0x021F54CC; -FUN_021F54D0 = 0x021F54D0; -FUN_021F54D8 = 0x021F54D8; -FUN_021F61F4 = 0x021F61F4; -FUN_021F6234 = 0x021F6234; -FUN_021F6240 = 0x021F6240; -FUN_021F6254 = 0x021F6254; -FUN_021F02C4 = 0x021F02C4; -FUN_021F1D8C = 0x021F1D8C; -FUN_021F1DC8 = 0x021F1DC8; -FUN_021F1DFC = 0x021F1DFC; -FUN_021F1EC0 = 0x021F1EC0; -FUN_021F1F78 = 0x021F1F78; -FUN_021F2094 = 0x021F2094; -FUN_021F20D8 = 0x021F20D8; -FUN_021F20F8 = 0x021F20F8; -FUN_021F2AF4 = 0x021F2AF4; -FUN_021F2E0C = 0x021F2E0C; -FUN_021F2E28 = 0x021F2E28; -FUN_021F2F48 = 0x021F2F48; -FUN_021F2F6C = 0x021F2F6C; -FUN_021F3A18 = 0x021F3A18; -FUN_021F3AB4 = 0x021F3AB4; -FUN_021F3B4C = 0x021F3B4C; -FUN_021F3B7C = 0x021F3B7C; -FUN_021F3DA4 = 0x021F3DA4; -FUN_021F44D8 = 0x021F44D8; -FUN_021F4520 = 0x021F4520; -FUN_021F4568 = 0x021F4568; -FUN_021F4594 = 0x021F4594; -FUN_021F45E8 = 0x021F45E8; -FUN_021F4608 = 0x021F4608; -FUN_021F4BD0 = 0x021F4BD0; -FUN_021F4C88 = 0x021F4C88; -FUN_021F4D80 = 0x021F4D80; -FUN_021F4DC8 = 0x021F4DC8; -FUN_021F4E7C = 0x021F4E7C; -FUN_021F57EC = 0x021F57EC; -FUN_021F5C44 = 0x021F5C44; -FUN_021F61DC = 0x021F61DC; -FUN_021F61E8 = 0x021F61E8; -FUN_02211E60 = 0x02211E60; -FUN_0222D5C0 = 0x0222D5C0; -FUN_0222DAEC = 0x0222DAEC; -FUN_0222DD1C = 0x0222DD1C; -FUN_0222DD38 = 0x0222DD38; -FUN_0222E2BC = 0x0222E2BC; -FUN_0222E360 = 0x0222E360; -FUN_0222E3A0 = 0x0222E3A0; -FUN_0222E7E8 = 0x0222E7E8; -FUN_0222E874 = 0x0222E874; -FUN_0222ED34 = 0x0222ED34; -FUN_0222EDBC = 0x0222EDBC; -FUN_0222F440 = 0x0222F440; -FUN_0222F480 = 0x0222F480; -FUN_0222F7E0 = 0x0222F7E0; -FUN_0222F990 = 0x0222F990; -FUN_02230078 = 0x02230078; -FUN_02230080 = 0x02230080; -FUN_022300CC = 0x022300CC; -FUN_022312D0 = 0x022312D0; -FUN_02231504 = 0x02231504; -FUN_02231534 = 0x02231534; -FUN_02231678 = 0x02231678; -FUN_02233560 = 0x02233560; -FUN_022300D4 = 0x022300D4; -FUN_022300DC = 0x022300DC; -FUN_022300E4 = 0x022300E4; -FUN_022300E8 = 0x022300E8; -FUN_022300F4 = 0x022300F4; -FUN_02230100 = 0x02230100; -FUN_0223010C = 0x0223010C; -FUN_02230118 = 0x02230118; -FUN_02230124 = 0x02230124; -FUN_02230F3C = 0x02230F3C; -FUN_02230F70 = 0x02230F70; -FUN_02230F80 = 0x02230F80; -FUN_02231344 = 0x02231344; -FUN_02231350 = 0x02231350; -FUN_0223135C = 0x0223135C; -FUN_02231368 = 0x02231368; -FUN_02231374 = 0x02231374; -FUN_02239944 = 0x02239944; -FUN_02239AAC = 0x02239AAC; -FUN_0223CACC = 0x0223CACC; -FUN_0223CB08 = 0x0223CB08; -FUN_0223CCDC = 0x0223CCDC; -FUN_0223CD7C = 0x0223CD7C; -FUN_0223D3D0 = 0x0223D3D0; -FUN_0223D638 = 0x0223D638; -FUN_0223D648 = 0x0223D648; -FUN_0223DFB4 = 0x0223DFB4; -FUN_0223E060 = 0x0223E060; -FUN_0223E118 = 0x0223E118; -FUN_0223E154 = 0x0223E154; -FUN_0223E1A4 = 0x0223E1A4; -FUN_0223E1E0 = 0x0223E1E0; -FUN_0223E2AC = 0x0223E2AC; -FUN_0223E4A8 = 0x0223E4A8; -FUN_0223E4D4 = 0x0223E4D4; -FUN_0223E554 = 0x0223E554; -FUN_0223E6B8 = 0x0223E6B8; -FUN_0223E734 = 0x0223E734; -FUN_0223E7FC = 0x0223E7FC; -FUN_0223EB8C = 0x0223EB8C; -FUN_0223EF7C = 0x0223EF7C; -FUN_0223F4D8 = 0x0223F4D8; -FUN_0223F4F4 = 0x0223F4F4; -FUN_0223F8D8 = 0x0223F8D8; -FUN_0223FCE8 = 0x0223FCE8; -FUN_02240790 = 0x02240790; -FUN_022407CC = 0x022407CC; -FUN_022407DC = 0x022407DC; -FUN_022407F8 = 0x022407F8; -FUN_02240834 = 0x02240834; -FUN_02240844 = 0x02240844; -FUN_0224089C = 0x0224089C; -FUN_022408FC = 0x022408FC; -FUN_022411F4 = 0x022411F4; -FUN_02241230 = 0x02241230; -FUN_02241914 = 0x02241914; -FUN_02242A38 = 0x02242A38; -FUN_02242BE0 = 0x02242BE0; -FUN_0224312C = 0x0224312C; -FUN_022432E4 = 0x022432E4; -FUN_0224339C = 0x0224339C; -FUN_022433A8 = 0x022433A8; -FUN_022433B0 = 0x022433B0; -FUN_022433B8 = 0x022433B8; -FUN_022433F8 = 0x022433F8; -FUN_02243408 = 0x02243408; -FUN_02243428 = 0x02243428; -FUN_02243448 = 0x02243448; -FUN_0224345C = 0x0224345C; -FUN_022434AC = 0x022434AC; -FUN_022434BC = 0x022434BC; -FUN_022434D0 = 0x022434D0; -FUN_02243694 = 0x02243694; -FUN_022436C8 = 0x022436C8; -FUN_022436E8 = 0x022436E8; -FUN_02243780 = 0x02243780; -FUN_02243838 = 0x02243838; -FUN_022438DC = 0x022438DC; -FUN_022438E0 = 0x022438E0; -FUN_022438FC = 0x022438FC; -FUN_02243920 = 0x02243920; -FUN_022439F8 = 0x022439F8; -FUN_02243AD8 = 0x02243AD8; -FUN_02243BA8 = 0x02243BA8; -FUN_02243C5C = 0x02243C5C; -FUN_02243D3C = 0x02243D3C; -FUN_02243DA0 = 0x02243DA0; -FUN_02243DB8 = 0x02243DB8; -FUN_02243DC0 = 0x02243DC0; -FUN_02243DC4 = 0x02243DC4; -FUN_02243DD8 = 0x02243DD8; -FUN_02243DE0 = 0x02243DE0; -FUN_02243E34 = 0x02243E34; -FUN_02243E74 = 0x02243E74; -FUN_02243F18 = 0x02243F18; -FUN_02243F50 = 0x02243F50; -FUN_02243F9C = 0x02243F9C; -FUN_02244210 = 0x02244210; -FUN_02244558 = 0x02244558; -FUN_02244660 = 0x02244660; -FUN_022446BC = 0x022446BC; -FUN_022446E0 = 0x022446E0; -FUN_022446FC = 0x022446FC; -FUN_02244758 = 0x02244758; -FUN_02244770 = 0x02244770; -FUN_02244824 = 0x02244824; -FUN_0224484C = 0x0224484C; -FUN_02244D1C = 0x02244D1C; -FUN_02244D20 = 0x02244D20; -FUN_02244D3C = 0x02244D3C; -FUN_02244D40 = 0x02244D40; -FUN_02244D58 = 0x02244D58; -FUN_02244D98 = 0x02244D98; -FUN_02244DA0 = 0x02244DA0; -FUN_02244DB0 = 0x02244DB0; -FUN_02244DBC = 0x02244DBC; -FUN_02244DC4 = 0x02244DC4; -FUN_02244EF8 = 0x02244EF8; -FUN_02244F18 = 0x02244F18; -FUN_02244F24 = 0x02244F24; -FUN_02244F2C = 0x02244F2C; -FUN_02245088 = 0x02245088; -FUN_02245114 = 0x02245114; -FUN_02245190 = 0x02245190; -FUN_02245198 = 0x02245198; -FUN_022451F0 = 0x022451F0; -FUN_0224525C = 0x0224525C; -FUN_022452A4 = 0x022452A4; -FUN_02245324 = 0x02245324; -FUN_02245340 = 0x02245340; -FUN_02245358 = 0x02245358; -FUN_0224566C = 0x0224566C; -FUN_022456E8 = 0x022456E8; -FUN_02245844 = 0x02245844; -FUN_02245910 = 0x02245910; -FUN_02245F1C = 0x02245F1C; -FUN_02245F4C = 0x02245F4C; -FUN_02245FA0 = 0x02245FA0; -FUN_022461A4 = 0x022461A4; -FUN_022461B8 = 0x022461B8; -FUN_0224666C = 0x0224666C; -FUN_022466A0 = 0x022466A0; -FUN_022466AC = 0x022466AC; -FUN_02246F1C = 0x02246F1C; -FUN_02247294 = 0x02247294; -FUN_022472AC = 0x022472AC; -FUN_02247544 = 0x02247544; -FUN_02247614 = 0x02247614; -FUN_02247728 = 0x02247728; -FUN_02247808 = 0x02247808; -FUN_02247970 = 0x02247970; -FUN_02247A34 = 0x02247A34; -FUN_022483BC = 0x022483BC; -FUN_022483E0 = 0x022483E0; -FUN_022483EC = 0x022483EC; -FUN_02248724 = 0x02248724; -FUN_0224884C = 0x0224884C; -FUN_022488CC = 0x022488CC; -FUN_022488EC = 0x022488EC; -FUN_022488F4 = 0x022488F4; -FUN_022488FC = 0x022488FC; -FUN_0224891C = 0x0224891C; -FUN_02248B54 = 0x02248B54; -FUN_02248B58 = 0x02248B58; -FUN_02248B5C = 0x02248B5C; -FUN_02248B60 = 0x02248B60; -FUN_02248B6C = 0x02248B6C; -FUN_02248CC0 = 0x02248CC0; -FUN_02248CD0 = 0x02248CD0; -FUN_02248DF8 = 0x02248DF8; -FUN_02248F70 = 0x02248F70; -FUN_02248FE0 = 0x02248FE0; -FUN_02249038 = 0x02249038; -FUN_022490A0 = 0x022490A0; -FUN_022491FC = 0x022491FC; -FUN_022494C8 = 0x022494C8; -FUN_02249508 = 0x02249508; -FUN_02249668 = 0x02249668; -FUN_022497E8 = 0x022497E8; -FUN_02249E6C = 0x02249E6C; -FUN_02249E78 = 0x02249E78; -FUN_02249E84 = 0x02249E84; -FUN_02249E90 = 0x02249E90; -FUN_0224A310 = 0x0224A310; -FUN_0224A528 = 0x0224A528; -FUN_0224A7C8 = 0x0224A7C8; -FUN_0224ABAC = 0x0224ABAC; -FUN_0224B124 = 0x0224B124; -FUN_0224B2C4 = 0x0224B2C4; -FUN_0224B568 = 0x0224B568; -FUN_0224B818 = 0x0224B818; -FUN_0224B86C = 0x0224B86C; -FUN_0224B9E0 = 0x0224B9E0; -FUN_0224BBEC = 0x0224BBEC; -FUN_0224BD90 = 0x0224BD90; -FUN_0224C038 = 0x0224C038; -FUN_0224C27C = 0x0224C27C; -FUN_0224C520 = 0x0224C520; -FUN_0224C678 = 0x0224C678; -FUN_0224C6E8 = 0x0224C6E8; -FUN_0224C6F4 = 0x0224C6F4; -FUN_0224C700 = 0x0224C700; -FUN_0224C8C8 = 0x0224C8C8; -FUN_0224CA2C = 0x0224CA2C; -FUN_0224CA54 = 0x0224CA54; -FUN_0224CA58 = 0x0224CA58; -FUN_0224CA88 = 0x0224CA88; -FUN_0224CA94 = 0x0224CA94; -FUN_0224CAA0 = 0x0224CAA0; -FUN_0224CAB4 = 0x0224CAB4; -FUN_0224CB30 = 0x0224CB30; -FUN_0224CBB0 = 0x0224CBB0; -FUN_0224CC24 = 0x0224CC24; -FUN_0224CECC = 0x0224CECC; -FUN_0224D14C = 0x0224D14C; -FUN_0224D2E0 = 0x0224D2E0; -FUN_0224D3E8 = 0x0224D3E8; -FUN_0224D70C = 0x0224D70C; -FUN_0224D76C = 0x0224D76C; -FUN_0224D79C = 0x0224D79C; -FUN_0224DCB8 = 0x0224DCB8; -FUN_0224DD94 = 0x0224DD94; -FUN_0224DDB8 = 0x0224DDB8; -FUN_0224E554 = 0x0224E554; -FUN_0224E764 = 0x0224E764; -FUN_0224E7C4 = 0x0224E7C4; -FUN_0224F12C = 0x0224F12C; -FUN_02252534 = 0x02252534; -FUN_02252538 = 0x02252538; -FUN_022567E0 = 0x022567E0; -FUN_02213B08 = 0x02213B08; -FUN_02213D80 = 0x02213D80; -FUN_02213DBC = 0x02213DBC; -FUN_02213E24 = 0x02213E24; -FUN_021D7A20 = 0x021D7A20; -FUN_021D7A28 = 0x021D7A28; -FUN_021E8648 = 0x021E8648; -FUN_0223BA04 = 0x0223BA04; -FUN_0223BE70 = 0x0223BE70; -FUN_0223C08C = 0x0223C08C; -FUN_0223CDB8 = 0x0223CDB8; -FUN_0223D8F4 = 0x0223D8F4; -FUN_0223DC98 = 0x0223DC98; -FUN_0223DCB4 = 0x0223DCB4; -FUN_0223DCD0 = 0x0223DCD0; -FUN_0223E2C4 = 0x0223E2C4; -FUN_0223E2DC = 0x0223E2DC; -FUN_02242404 = 0x02242404; -FUN_022426AC = 0x022426AC; -FUN_02249B7C = 0x02249B7C; -FUN_0224A130 = 0x0224A130; -FUN_0224A6B8 = 0x0224A6B8; -FUN_0224A6FC = 0x0224A6FC; -FUN_0224A8D4 = 0x0224A8D4; -FUN_0224AA40 = 0x0224AA40; -FUN_0224ADF8 = 0x0224ADF8; -FUN_0224AEE8 = 0x0224AEE8; -FUN_0224AF68 = 0x0224AF68; -FUN_0224ED94 = 0x0224ED94; -FUN_0224EDA8 = 0x0224EDA8; -FUN_0224F0BC = 0x0224F0BC; -FUN_0224F0D0 = 0x0224F0D0; -FUN_02252440 = 0x02252440; -FUN_02252448 = 0x02252448; -FUN_022524BC = 0x022524BC; -FUN_022524D0 = 0x022524D0; -FUN_022524DC = 0x022524DC; -FUN_022524F4 = 0x022524F4; -FUN_02252504 = 0x02252504; -FUN_02254A68 = 0x02254A68; -FUN_02254AB8 = 0x02254AB8; -FUN_0223BD14 = 0x0223BD14; -FUN_0222FF68 = 0x0222FF68; -FUN_0222FF74 = 0x0222FF74; -FUN_0222FF78 = 0x0222FF78; -FUN_0222FF88 = 0x0222FF88; -FUN_02230014 = 0x02230014; -FUN_02230188 = 0x02230188; -FUN_02230214 = 0x02230214; -FUN_02230218 = 0x02230218; -FUN_02230260 = 0x02230260; -FUN_02230290 = 0x02230290; -FUN_022302BC = 0x022302BC; -FUN_02230370 = 0x02230370; -FUN_02230E44 = 0x02230E44; -FUN_02230E54 = 0x02230E54; -FUN_02231238 = 0x02231238; -FUN_0224C474 = 0x0224C474; -FUN_0225D3EC = 0x0225D3EC; -FUN_0225D45C = 0x0225D45C; -FUN_0225D484 = 0x0225D484; -FUN_0225D508 = 0x0225D508; -FUN_0225D5DC = 0x0225D5DC; -FUN_0225D648 = 0x0225D648; -FUN_0225D6A4 = 0x0225D6A4; -FUN_0225D714 = 0x0225D714; -FUN_0225D73C = 0x0225D73C; -FUN_0225D7B8 = 0x0225D7B8; -FUN_0225D800 = 0x0225D800; -FUN_0225D80C = 0x0225D80C; -FUN_0225D820 = 0x0225D820; -FUN_0225D824 = 0x0225D824; -FUN_021EEF0C = 0x021EEF0C; -FUN_021EEF68 = 0x021EEF68; -FUN_021EEF84 = 0x021EEF84; -FUN_021EEF98 = 0x021EEF98; -FUN_021EEF9C = 0x021EEF9C; -FUN_021EFBF4 = 0x021EFBF4; -FUN_021EFD8C = 0x021EFD8C; -FUN_021F45A4 = 0x021F45A4; -FUN_021F4698 = 0x021F4698; -FUN_021F4A30 = 0x021F4A30; -FUN_02211E7C = 0x02211E7C; -FUN_02211F5C = 0x02211F5C; -FUN_02212024 = 0x02212024; -FUN_02212048 = 0x02212048; -FUN_02212384 = 0x02212384; -FUN_022123A0 = 0x022123A0; -FUN_022123B0 = 0x022123B0; -FUN_022156C0 = 0x022156C0; -FUN_0221590C = 0x0221590C; -FUN_02215918 = 0x02215918; -FUN_0221594C = 0x0221594C; -FUN_02215988 = 0x02215988; -FUN_02215A44 = 0x02215A44; -FUN_022186F0 = 0x022186F0; -FUN_021DD4F4 = 0x021DD4F4; -FUN_021DD518 = 0x021DD518; -FUN_021DD540 = 0x021DD540; -FUN_021DD58C = 0x021DD58C; -FUN_021DD594 = 0x021DD594; -FUN_021DD59C = 0x021DD59C; -FUN_021DD604 = 0x021DD604; -FUN_021DD60C = 0x021DD60C; -FUN_021DD620 = 0x021DD620; -FUN_021DD678 = 0x021DD678; -FUN_021DD6B8 = 0x021DD6B8; -FUN_021DD6CC = 0x021DD6CC; -FUN_02211FF0 = 0x02211FF0; - -// ??? -SDK_MAIN_ARENA_LO = 0x0225FFA0; - -// EWRAM -SDK_SECTION_ARENA_EX_START = 0x023E0000; - -// DTCM -gUnk027FFC20 = 0x027FFC20; - -SDK_AUTOLOAD_LIST = 0x02107700; -SDK_AUTOLOAD_ITCM_START = 0x01FF8000; -SDK_AUTOLOAD_ITCM_SIZE = 0x00000700; -SDK_AUTOLOAD_ITCM_BSS_SIZE = 0x00000000; -SDK_AUTOLOAD_DTCM_START = 0x027E0000; -SDK_AUTOLOAD_DTCM_SIZE = 0x00000060; -SDK_AUTOLOAD_DTCM_BSS_SIZE = 0x00000020; -SDK_AUTOLOAD_EXT_START = 0x02400000; -SDK_AUTOLOAD_EXT_SIZE = 0x00000000; -SDK_AUTOLOAD_EXT_BSS_SIZE = 0x00000000; -SDK_AUTOLOAD_LIST_END = 0x02107724; - -// Overlay - -SDK_OVERLAY_MODULE_00_ID = 0; -SDK_OVERLAY_MODULE_00_START = 0x021D74E0; -SDK_OVERLAY_MODULE_00_SIZE = 0x00000020; -SDK_OVERLAY_MODULE_00_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_00_STATIC_INIT_START = 0x021D74E0; -SDK_OVERLAY_MODULE_00_STATIC_INIT_END = 0x021D74E4; -SDK_OVERLAY_MODULE_01_ID = 1; -SDK_OVERLAY_MODULE_01_START = 0x021D74E0; -SDK_OVERLAY_MODULE_01_SIZE = 0x00000020; -SDK_OVERLAY_MODULE_01_BSSSIZE = 0x00000020; -SDK_OVERLAY_MODULE_01_STATIC_INIT_START = 0x021D74F0; -SDK_OVERLAY_MODULE_01_STATIC_INIT_END = 0x021D74F8; -SDK_OVERLAY_MODULE_02_ID = 2; -SDK_OVERLAY_MODULE_02_START = 0x021D7520; -SDK_OVERLAY_MODULE_02_SIZE = 0x00000020; -SDK_OVERLAY_MODULE_02_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_02_STATIC_INIT_START = 0x021D7520; -SDK_OVERLAY_MODULE_02_STATIC_INIT_END = 0x021D7524; -SDK_OVERLAY_MODULE_03_ID = 3; -SDK_OVERLAY_MODULE_03_START = 0x01FF8700; -SDK_OVERLAY_MODULE_03_SIZE = 0x00000020; -SDK_OVERLAY_MODULE_03_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_03_STATIC_INIT_START = 0x01FF8700; -SDK_OVERLAY_MODULE_03_STATIC_INIT_END = 0x01FF8704; -SDK_OVERLAY_MODULE_04_ID = 4; -SDK_OVERLAY_MODULE_04_START = 0x021D74E0; -SDK_OVERLAY_MODULE_04_SIZE = 0x000386E0; -SDK_OVERLAY_MODULE_04_BSSSIZE = 0x000022A0; -SDK_OVERLAY_MODULE_04_STATIC_INIT_START = 0x0220BE94; -SDK_OVERLAY_MODULE_04_STATIC_INIT_END = 0x0220BE98; -SDK_OVERLAY_MODULE_05_ID = 5; -SDK_OVERLAY_MODULE_05_START = 0x021D74E0; -SDK_OVERLAY_MODULE_05_SIZE = 0x000261A0; -SDK_OVERLAY_MODULE_05_BSSSIZE = 0x0003C020; -SDK_OVERLAY_MODULE_05_STATIC_INIT_START = 0x021FD1C8; -SDK_OVERLAY_MODULE_05_STATIC_INIT_END = 0x021FD1CC; -SDK_OVERLAY_MODULE_06_ID = 6; -SDK_OVERLAY_MODULE_06_START = 0x022396A0; -SDK_OVERLAY_MODULE_06_SIZE = 0x00018D80; -SDK_OVERLAY_MODULE_06_BSSSIZE = 0x00000020; -SDK_OVERLAY_MODULE_06_STATIC_INIT_START = 0x02252228; -SDK_OVERLAY_MODULE_06_STATIC_INIT_END = 0x0225222C; -SDK_OVERLAY_MODULE_07_ID = 7; -SDK_OVERLAY_MODULE_07_START = 0x02211E60; -SDK_OVERLAY_MODULE_07_SIZE = 0x000032E0; -SDK_OVERLAY_MODULE_07_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_07_STATIC_INIT_START = 0x02215134; -SDK_OVERLAY_MODULE_07_STATIC_INIT_END = 0x02215138; -SDK_OVERLAY_MODULE_08_ID = 8; -SDK_OVERLAY_MODULE_08_START = 0x02211E60; -SDK_OVERLAY_MODULE_08_SIZE = 0x0001B760; -SDK_OVERLAY_MODULE_08_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_08_STATIC_INIT_START = 0x0222D598; -SDK_OVERLAY_MODULE_08_STATIC_INIT_END = 0x0222D59C; -SDK_OVERLAY_MODULE_09_ID = 9; -SDK_OVERLAY_MODULE_09_START = 0x02211E60; -SDK_OVERLAY_MODULE_09_SIZE = 0x0000A1A0; -SDK_OVERLAY_MODULE_09_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_09_STATIC_INIT_START = 0x0221BFE8; -SDK_OVERLAY_MODULE_09_STATIC_INIT_END = 0x0221BFEC; -SDK_OVERLAY_MODULE_10_ID = 10; -SDK_OVERLAY_MODULE_10_START = 0x021D74E0; -SDK_OVERLAY_MODULE_10_SIZE = 0x00000020; -SDK_OVERLAY_MODULE_10_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_10_STATIC_INIT_START = 0x021D74E0; -SDK_OVERLAY_MODULE_10_STATIC_INIT_END = 0x021D74E4; -SDK_OVERLAY_MODULE_11_ID = 11; -SDK_OVERLAY_MODULE_11_START = 0x0222D5C0; -SDK_OVERLAY_MODULE_11_SIZE = 0x000329E0; -SDK_OVERLAY_MODULE_11_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_11_STATIC_INIT_START = 0x0225FF18; -SDK_OVERLAY_MODULE_11_STATIC_INIT_END = 0x0225FF20; -SDK_OVERLAY_MODULE_12_ID = 12; -SDK_OVERLAY_MODULE_12_START = 0x0222D5C0; -SDK_OVERLAY_MODULE_12_SIZE = 0x00019260; -SDK_OVERLAY_MODULE_12_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_12_STATIC_INIT_START = 0x02246810; -SDK_OVERLAY_MODULE_12_STATIC_INIT_END = 0x02246818; -SDK_OVERLAY_MODULE_13_ID = 13; -SDK_OVERLAY_MODULE_13_START = 0x02211E60; -SDK_OVERLAY_MODULE_13_SIZE = 0x0002EBE0; -SDK_OVERLAY_MODULE_13_BSSSIZE = 0x000027E0; -SDK_OVERLAY_MODULE_13_STATIC_INIT_START = 0x0223F768; -SDK_OVERLAY_MODULE_13_STATIC_INIT_END = 0x0223F76C; -SDK_OVERLAY_MODULE_14_ID = 14; -SDK_OVERLAY_MODULE_14_START = 0x021D74E0; -SDK_OVERLAY_MODULE_14_SIZE = 0x0000F520; -SDK_OVERLAY_MODULE_14_BSSSIZE = 0x000001A0; -SDK_OVERLAY_MODULE_14_STATIC_INIT_START = 0x021E69C8; -SDK_OVERLAY_MODULE_14_STATIC_INIT_END = 0x021E69CC; -SDK_OVERLAY_MODULE_15_ID = 15; -SDK_OVERLAY_MODULE_15_START = 0x021D74E0; -SDK_OVERLAY_MODULE_15_SIZE = 0x00004680; -SDK_OVERLAY_MODULE_15_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_15_STATIC_INIT_START = 0x021DBB5C; -SDK_OVERLAY_MODULE_15_STATIC_INIT_END = 0x021DBB60; -SDK_OVERLAY_MODULE_16_ID = 16; -SDK_OVERLAY_MODULE_16_START = 0x021D74E0; -SDK_OVERLAY_MODULE_16_SIZE = 0x00028500; -SDK_OVERLAY_MODULE_16_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_16_STATIC_INIT_START = 0x021FF9C4; -SDK_OVERLAY_MODULE_16_STATIC_INIT_END = 0x021FF9C8; -SDK_OVERLAY_MODULE_17_ID = 17; -SDK_OVERLAY_MODULE_17_START = 0x021D74E0; -SDK_OVERLAY_MODULE_17_SIZE = 0x00006E80; -SDK_OVERLAY_MODULE_17_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_17_STATIC_INIT_START = 0x021DE354; -SDK_OVERLAY_MODULE_17_STATIC_INIT_END = 0x021DE358; -SDK_OVERLAY_MODULE_18_ID = 18; -SDK_OVERLAY_MODULE_18_START = 0x022396A0; -SDK_OVERLAY_MODULE_18_SIZE = 0x00017CE0; -SDK_OVERLAY_MODULE_18_BSSSIZE = 0x00000080; -SDK_OVERLAY_MODULE_18_STATIC_INIT_START = 0x02250858; -SDK_OVERLAY_MODULE_18_STATIC_INIT_END = 0x0225085C; -SDK_OVERLAY_MODULE_19_ID = 19; -SDK_OVERLAY_MODULE_19_START = 0x02252440; -SDK_OVERLAY_MODULE_19_SIZE = 0x00000100; -SDK_OVERLAY_MODULE_19_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_19_STATIC_INIT_START = 0x02252524; -SDK_OVERLAY_MODULE_19_STATIC_INIT_END = 0x02252528; -SDK_OVERLAY_MODULE_20_ID = 20; -SDK_OVERLAY_MODULE_20_START = 0x02252440; -SDK_OVERLAY_MODULE_20_SIZE = 0x00002400; -SDK_OVERLAY_MODULE_20_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_20_STATIC_INIT_START = 0x02254838; -SDK_OVERLAY_MODULE_20_STATIC_INIT_END = 0x0225483C; -SDK_OVERLAY_MODULE_21_ID = 21; -SDK_OVERLAY_MODULE_21_START = 0x02254840; -SDK_OVERLAY_MODULE_21_SIZE = 0x000005C0; -SDK_OVERLAY_MODULE_21_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_21_STATIC_INIT_START = 0x02254DE8; -SDK_OVERLAY_MODULE_21_STATIC_INIT_END = 0x02254DF0; -SDK_OVERLAY_MODULE_22_ID = 22; -SDK_OVERLAY_MODULE_22_START = 0x02254840; -SDK_OVERLAY_MODULE_22_SIZE = 0x00000F00; -SDK_OVERLAY_MODULE_22_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_22_STATIC_INIT_START = 0x02255730; -SDK_OVERLAY_MODULE_22_STATIC_INIT_END = 0x02255738; -SDK_OVERLAY_MODULE_23_ID = 23; -SDK_OVERLAY_MODULE_23_START = 0x02254840; -SDK_OVERLAY_MODULE_23_SIZE = 0x00001900; -SDK_OVERLAY_MODULE_23_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_23_STATIC_INIT_START = 0x02256128; -SDK_OVERLAY_MODULE_23_STATIC_INIT_END = 0x02256130; -SDK_OVERLAY_MODULE_24_ID = 24; -SDK_OVERLAY_MODULE_24_START = 0x02254840; -SDK_OVERLAY_MODULE_24_SIZE = 0x000009A0; -SDK_OVERLAY_MODULE_24_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_24_STATIC_INIT_START = 0x022551C0; -SDK_OVERLAY_MODULE_24_STATIC_INIT_END = 0x022551C8; -SDK_OVERLAY_MODULE_25_ID = 25; -SDK_OVERLAY_MODULE_25_START = 0x02254840; -SDK_OVERLAY_MODULE_25_SIZE = 0x00000560; -SDK_OVERLAY_MODULE_25_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_25_STATIC_INIT_START = 0x02254D80; -SDK_OVERLAY_MODULE_25_STATIC_INIT_END = 0x02254D88; -SDK_OVERLAY_MODULE_26_ID = 26; -SDK_OVERLAY_MODULE_26_START = 0x02254840; -SDK_OVERLAY_MODULE_26_SIZE = 0x00000800; -SDK_OVERLAY_MODULE_26_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_26_STATIC_INIT_START = 0x02255020; -SDK_OVERLAY_MODULE_26_STATIC_INIT_END = 0x02255028; -SDK_OVERLAY_MODULE_27_ID = 27; -SDK_OVERLAY_MODULE_27_START = 0x02254840; -SDK_OVERLAY_MODULE_27_SIZE = 0x00000BA0; -SDK_OVERLAY_MODULE_27_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_27_STATIC_INIT_START = 0x022553C4; -SDK_OVERLAY_MODULE_27_STATIC_INIT_END = 0x022553CC; -SDK_OVERLAY_MODULE_28_ID = 28; -SDK_OVERLAY_MODULE_28_START = 0x02254840; -SDK_OVERLAY_MODULE_28_SIZE = 0x00001780; -SDK_OVERLAY_MODULE_28_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_28_STATIC_INIT_START = 0x02255F18; -SDK_OVERLAY_MODULE_28_STATIC_INIT_END = 0x02255F20; -SDK_OVERLAY_MODULE_29_ID = 29; -SDK_OVERLAY_MODULE_29_START = 0x02254840; -SDK_OVERLAY_MODULE_29_SIZE = 0x00000900; -SDK_OVERLAY_MODULE_29_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_29_STATIC_INIT_START = 0x0225512C; -SDK_OVERLAY_MODULE_29_STATIC_INIT_END = 0x02255134; -SDK_OVERLAY_MODULE_30_ID = 30; -SDK_OVERLAY_MODULE_30_START = 0x02254840; -SDK_OVERLAY_MODULE_30_SIZE = 0x00000600; -SDK_OVERLAY_MODULE_30_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_30_STATIC_INIT_START = 0x02254E28; -SDK_OVERLAY_MODULE_30_STATIC_INIT_END = 0x02254E30; -SDK_OVERLAY_MODULE_31_ID = 31; -SDK_OVERLAY_MODULE_31_START = 0x02254840; -SDK_OVERLAY_MODULE_31_SIZE = 0x00000600; -SDK_OVERLAY_MODULE_31_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_31_STATIC_INIT_START = 0x02254E20; -SDK_OVERLAY_MODULE_31_STATIC_INIT_END = 0x02254E28; -SDK_OVERLAY_MODULE_32_ID = 32; -SDK_OVERLAY_MODULE_32_START = 0x02254840; -SDK_OVERLAY_MODULE_32_SIZE = 0x000004A0; -SDK_OVERLAY_MODULE_32_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_32_STATIC_INIT_START = 0x02254CC4; -SDK_OVERLAY_MODULE_32_STATIC_INIT_END = 0x02254CCC; -SDK_OVERLAY_MODULE_33_ID = 33; -SDK_OVERLAY_MODULE_33_START = 0x02254840; -SDK_OVERLAY_MODULE_33_SIZE = 0x00000320; -SDK_OVERLAY_MODULE_33_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_33_STATIC_INIT_START = 0x02254B40; -SDK_OVERLAY_MODULE_33_STATIC_INIT_END = 0x02254B48; -SDK_OVERLAY_MODULE_34_ID = 34; -SDK_OVERLAY_MODULE_34_START = 0x02254840; -SDK_OVERLAY_MODULE_34_SIZE = 0x000004C0; -SDK_OVERLAY_MODULE_34_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_34_STATIC_INIT_START = 0x02254CF8; -SDK_OVERLAY_MODULE_34_STATIC_INIT_END = 0x02254D00; -SDK_OVERLAY_MODULE_35_ID = 35; -SDK_OVERLAY_MODULE_35_START = 0x02254840; -SDK_OVERLAY_MODULE_35_SIZE = 0x000009A0; -SDK_OVERLAY_MODULE_35_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_35_STATIC_INIT_START = 0x022551C0; -SDK_OVERLAY_MODULE_35_STATIC_INIT_END = 0x022551C8; -SDK_OVERLAY_MODULE_36_ID = 36; -SDK_OVERLAY_MODULE_36_START = 0x02254840; -SDK_OVERLAY_MODULE_36_SIZE = 0x00000CC0; -SDK_OVERLAY_MODULE_36_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_36_STATIC_INIT_START = 0x022554F8; -SDK_OVERLAY_MODULE_36_STATIC_INIT_END = 0x02255500; -SDK_OVERLAY_MODULE_37_ID = 37; -SDK_OVERLAY_MODULE_37_START = 0x02254840; -SDK_OVERLAY_MODULE_37_SIZE = 0x00000560; -SDK_OVERLAY_MODULE_37_BSSSIZE = 0x00000020; -SDK_OVERLAY_MODULE_37_STATIC_INIT_START = 0x02254D90; -SDK_OVERLAY_MODULE_37_STATIC_INIT_END = 0x02254D98; -SDK_OVERLAY_MODULE_38_ID = 38; -SDK_OVERLAY_MODULE_38_START = 0x02254840; -SDK_OVERLAY_MODULE_38_SIZE = 0x00000B40; -SDK_OVERLAY_MODULE_38_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_38_STATIC_INIT_START = 0x02255360; -SDK_OVERLAY_MODULE_38_STATIC_INIT_END = 0x02255368; -SDK_OVERLAY_MODULE_39_ID = 39; -SDK_OVERLAY_MODULE_39_START = 0x02254840; -SDK_OVERLAY_MODULE_39_SIZE = 0x00000CC0; -SDK_OVERLAY_MODULE_39_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_39_STATIC_INIT_START = 0x022554E4; -SDK_OVERLAY_MODULE_39_STATIC_INIT_END = 0x022554EC; -SDK_OVERLAY_MODULE_40_ID = 40; -SDK_OVERLAY_MODULE_40_START = 0x02254840; -SDK_OVERLAY_MODULE_40_SIZE = 0x00000C60; -SDK_OVERLAY_MODULE_40_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_40_STATIC_INIT_START = 0x02255480; -SDK_OVERLAY_MODULE_40_STATIC_INIT_END = 0x02255488; -SDK_OVERLAY_MODULE_41_ID = 41; -SDK_OVERLAY_MODULE_41_START = 0x02254840; -SDK_OVERLAY_MODULE_41_SIZE = 0x00001140; -SDK_OVERLAY_MODULE_41_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_41_STATIC_INIT_START = 0x02255974; -SDK_OVERLAY_MODULE_41_STATIC_INIT_END = 0x0225597C; -SDK_OVERLAY_MODULE_42_ID = 42; -SDK_OVERLAY_MODULE_42_START = 0x02254840; -SDK_OVERLAY_MODULE_42_SIZE = 0x00000900; -SDK_OVERLAY_MODULE_42_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_42_STATIC_INIT_START = 0x0225511C; -SDK_OVERLAY_MODULE_42_STATIC_INIT_END = 0x02255124; -SDK_OVERLAY_MODULE_43_ID = 43; -SDK_OVERLAY_MODULE_43_START = 0x02254840; -SDK_OVERLAY_MODULE_43_SIZE = 0x000009C0; -SDK_OVERLAY_MODULE_43_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_43_STATIC_INIT_START = 0x022551EC; -SDK_OVERLAY_MODULE_43_STATIC_INIT_END = 0x022551F4; -SDK_OVERLAY_MODULE_44_ID = 44; -SDK_OVERLAY_MODULE_44_START = 0x02254840; -SDK_OVERLAY_MODULE_44_SIZE = 0x000004A0; -SDK_OVERLAY_MODULE_44_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_44_STATIC_INIT_START = 0x02254CBC; -SDK_OVERLAY_MODULE_44_STATIC_INIT_END = 0x02254CC4; -SDK_OVERLAY_MODULE_45_ID = 45; -SDK_OVERLAY_MODULE_45_START = 0x02254840; -SDK_OVERLAY_MODULE_45_SIZE = 0x00000940; -SDK_OVERLAY_MODULE_45_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_45_STATIC_INIT_START = 0x02255170; -SDK_OVERLAY_MODULE_45_STATIC_INIT_END = 0x02255178; -SDK_OVERLAY_MODULE_46_ID = 46; -SDK_OVERLAY_MODULE_46_START = 0x02254840; -SDK_OVERLAY_MODULE_46_SIZE = 0x00000320; -SDK_OVERLAY_MODULE_46_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_46_STATIC_INIT_START = 0x02254B40; -SDK_OVERLAY_MODULE_46_STATIC_INIT_END = 0x02254B48; -SDK_OVERLAY_MODULE_47_ID = 47; -SDK_OVERLAY_MODULE_47_START = 0x02254840; -SDK_OVERLAY_MODULE_47_SIZE = 0x00000CA0; -SDK_OVERLAY_MODULE_47_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_47_STATIC_INIT_START = 0x022554BC; -SDK_OVERLAY_MODULE_47_STATIC_INIT_END = 0x022554C4; -SDK_OVERLAY_MODULE_48_ID = 48; -SDK_OVERLAY_MODULE_48_START = 0x02254840; -SDK_OVERLAY_MODULE_48_SIZE = 0x000008A0; -SDK_OVERLAY_MODULE_48_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_48_STATIC_INIT_START = 0x022550D0; -SDK_OVERLAY_MODULE_48_STATIC_INIT_END = 0x022550D8; -SDK_OVERLAY_MODULE_49_ID = 49; -SDK_OVERLAY_MODULE_49_START = 0x02254840; -SDK_OVERLAY_MODULE_49_SIZE = 0x00000600; -SDK_OVERLAY_MODULE_49_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_49_STATIC_INIT_START = 0x02254E20; -SDK_OVERLAY_MODULE_49_STATIC_INIT_END = 0x02254E28; -SDK_OVERLAY_MODULE_50_ID = 50; -SDK_OVERLAY_MODULE_50_START = 0x02254840; -SDK_OVERLAY_MODULE_50_SIZE = 0x00000320; -SDK_OVERLAY_MODULE_50_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_50_STATIC_INIT_START = 0x02254B50; -SDK_OVERLAY_MODULE_50_STATIC_INIT_END = 0x02254B58; -SDK_OVERLAY_MODULE_51_ID = 51; -SDK_OVERLAY_MODULE_51_START = 0x02254840; -SDK_OVERLAY_MODULE_51_SIZE = 0x00000FC0; -SDK_OVERLAY_MODULE_51_BSSSIZE = 0x00000020; -SDK_OVERLAY_MODULE_51_STATIC_INIT_START = 0x022557E0; -SDK_OVERLAY_MODULE_51_STATIC_INIT_END = 0x022557E4; -SDK_OVERLAY_MODULE_52_ID = 52; -SDK_OVERLAY_MODULE_52_START = 0x021D74E0; -SDK_OVERLAY_MODULE_52_SIZE = 0x00000400; -SDK_OVERLAY_MODULE_52_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_52_STATIC_INIT_START = 0x021D78D0; -SDK_OVERLAY_MODULE_52_STATIC_INIT_END = 0x021D78D4; -SDK_OVERLAY_MODULE_53_ID = 53; -SDK_OVERLAY_MODULE_53_START = 0x021D74E0; -SDK_OVERLAY_MODULE_53_SIZE = 0x00002480; -SDK_OVERLAY_MODULE_53_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_53_STATIC_INIT_START = 0x021D9888; -SDK_OVERLAY_MODULE_53_STATIC_INIT_END = 0x021D988C; -SDK_OVERLAY_MODULE_54_ID = 54; -SDK_OVERLAY_MODULE_54_START = 0x021D74E0; -SDK_OVERLAY_MODULE_54_SIZE = 0x00002380; -SDK_OVERLAY_MODULE_54_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_54_STATIC_INIT_START = 0x021D97D4; -SDK_OVERLAY_MODULE_54_STATIC_INIT_END = 0x021D97D8; -SDK_OVERLAY_MODULE_55_ID = 55; -SDK_OVERLAY_MODULE_55_START = 0x021D74E0; -SDK_OVERLAY_MODULE_55_SIZE = 0x00003040; -SDK_OVERLAY_MODULE_55_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_55_STATIC_INIT_START = 0x021DA480; -SDK_OVERLAY_MODULE_55_STATIC_INIT_END = 0x021DA484; -SDK_OVERLAY_MODULE_56_ID = 56; -SDK_OVERLAY_MODULE_56_START = 0x02211E60; -SDK_OVERLAY_MODULE_56_SIZE = 0x000047A0; -SDK_OVERLAY_MODULE_56_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_56_STATIC_INIT_START = 0x0221647C; -SDK_OVERLAY_MODULE_56_STATIC_INIT_END = 0x02216480; -SDK_OVERLAY_MODULE_57_ID = 57; -SDK_OVERLAY_MODULE_57_START = 0x021D74E0; -SDK_OVERLAY_MODULE_57_SIZE = 0x00002540; -SDK_OVERLAY_MODULE_57_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_57_STATIC_INIT_START = 0x021D9A10; -SDK_OVERLAY_MODULE_57_STATIC_INIT_END = 0x021D9A14; -SDK_OVERLAY_MODULE_58_ID = 58; -SDK_OVERLAY_MODULE_58_START = 0x021D9A20; -SDK_OVERLAY_MODULE_58_SIZE = 0x000015A0; -SDK_OVERLAY_MODULE_58_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_58_STATIC_INIT_START = 0x021DAF94; -SDK_OVERLAY_MODULE_58_STATIC_INIT_END = 0x021DAF98; -SDK_OVERLAY_MODULE_59_ID = 59; -SDK_OVERLAY_MODULE_59_START = 0x021D74E0; -SDK_OVERLAY_MODULE_59_SIZE = 0x00002C20; -SDK_OVERLAY_MODULE_59_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_59_STATIC_INIT_START = 0x021DA0FC; -SDK_OVERLAY_MODULE_59_STATIC_INIT_END = 0x021DA100; -SDK_OVERLAY_MODULE_60_ID = 60; -SDK_OVERLAY_MODULE_60_START = 0x021D74E0; -SDK_OVERLAY_MODULE_60_SIZE = 0x00000D00; -SDK_OVERLAY_MODULE_60_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_60_STATIC_INIT_START = 0x021D81D8; -SDK_OVERLAY_MODULE_60_STATIC_INIT_END = 0x021D81DC; -SDK_OVERLAY_MODULE_61_ID = 61; -SDK_OVERLAY_MODULE_61_START = 0x021D74E0; -SDK_OVERLAY_MODULE_61_SIZE = 0x00001080; -SDK_OVERLAY_MODULE_61_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_61_STATIC_INIT_START = 0x021D8554; -SDK_OVERLAY_MODULE_61_STATIC_INIT_END = 0x021D8558; -SDK_OVERLAY_MODULE_62_ID = 62; -SDK_OVERLAY_MODULE_62_START = 0x0222D5C0; -SDK_OVERLAY_MODULE_62_SIZE = 0x00003DE0; -SDK_OVERLAY_MODULE_62_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_62_STATIC_INIT_START = 0x02231380; -SDK_OVERLAY_MODULE_62_STATIC_INIT_END = 0x02231388; -SDK_OVERLAY_MODULE_63_ID = 63; -SDK_OVERLAY_MODULE_63_START = 0x021D74E0; -SDK_OVERLAY_MODULE_63_SIZE = 0x00004AC0; -SDK_OVERLAY_MODULE_63_BSSSIZE = 0x00000020; -SDK_OVERLAY_MODULE_63_STATIC_INIT_START = 0x021DBF20; -SDK_OVERLAY_MODULE_63_STATIC_INIT_END = 0x021DBF24; -SDK_OVERLAY_MODULE_64_ID = 64; -SDK_OVERLAY_MODULE_64_START = 0x021D74E0; -SDK_OVERLAY_MODULE_64_SIZE = 0x00001C40; -SDK_OVERLAY_MODULE_64_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_64_STATIC_INIT_START = 0x021D9110; -SDK_OVERLAY_MODULE_64_STATIC_INIT_END = 0x021D9114; -SDK_OVERLAY_MODULE_65_ID = 65; -SDK_OVERLAY_MODULE_65_START = 0x021D74E0; -SDK_OVERLAY_MODULE_65_SIZE = 0x00003000; -SDK_OVERLAY_MODULE_65_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_65_STATIC_INIT_START = 0x021DA428; -SDK_OVERLAY_MODULE_65_STATIC_INIT_END = 0x021DA42C; -SDK_OVERLAY_MODULE_66_ID = 66; -SDK_OVERLAY_MODULE_66_START = 0x021D74E0; -SDK_OVERLAY_MODULE_66_SIZE = 0x00002660; -SDK_OVERLAY_MODULE_66_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_66_STATIC_INIT_START = 0x021D9A9C; -SDK_OVERLAY_MODULE_66_STATIC_INIT_END = 0x021D9AA0; -SDK_OVERLAY_MODULE_67_ID = 67; -SDK_OVERLAY_MODULE_67_START = 0x021D74E0; -SDK_OVERLAY_MODULE_67_SIZE = 0x00002440; -SDK_OVERLAY_MODULE_67_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_67_STATIC_INIT_START = 0x021D9918; -SDK_OVERLAY_MODULE_67_STATIC_INIT_END = 0x021D991C; -SDK_OVERLAY_MODULE_68_ID = 68; -SDK_OVERLAY_MODULE_68_START = 0x021D74E0; -SDK_OVERLAY_MODULE_68_SIZE = 0x00001600; -SDK_OVERLAY_MODULE_68_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_68_STATIC_INIT_START = 0x021D8AD4; -SDK_OVERLAY_MODULE_68_STATIC_INIT_END = 0x021D8AD8; -SDK_OVERLAY_MODULE_69_ID = 69; -SDK_OVERLAY_MODULE_69_START = 0x0222D5C0; -SDK_OVERLAY_MODULE_69_SIZE = 0x000023A0; -SDK_OVERLAY_MODULE_69_BSSSIZE = 0x00000020; -SDK_OVERLAY_MODULE_69_STATIC_INIT_START = 0x0222F93C; -SDK_OVERLAY_MODULE_69_STATIC_INIT_END = 0x0222F940; -SDK_OVERLAY_MODULE_70_ID = 70; -SDK_OVERLAY_MODULE_70_START = 0x021D74E0; -SDK_OVERLAY_MODULE_70_SIZE = 0x00000E20; -SDK_OVERLAY_MODULE_70_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_70_STATIC_INIT_START = 0x021D82DC; -SDK_OVERLAY_MODULE_70_STATIC_INIT_END = 0x021D82E0; -SDK_OVERLAY_MODULE_71_ID = 71; -SDK_OVERLAY_MODULE_71_START = 0x0222D5C0; -SDK_OVERLAY_MODULE_71_SIZE = 0x00003EC0; -SDK_OVERLAY_MODULE_71_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_71_STATIC_INIT_START = 0x0223147C; -SDK_OVERLAY_MODULE_71_STATIC_INIT_END = 0x02231480; -SDK_OVERLAY_MODULE_72_ID = 72; -SDK_OVERLAY_MODULE_72_START = 0x021D74E0; -SDK_OVERLAY_MODULE_72_SIZE = 0x00000020; -SDK_OVERLAY_MODULE_72_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_72_STATIC_INIT_START = 0x021D74E0; -SDK_OVERLAY_MODULE_72_STATIC_INIT_END = 0x021D74E4; -SDK_OVERLAY_MODULE_73_ID = 73; -SDK_OVERLAY_MODULE_73_START = 0x021D74E0; -SDK_OVERLAY_MODULE_73_SIZE = 0x00004AE0; -SDK_OVERLAY_MODULE_73_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_73_STATIC_INIT_START = 0x021DBF70; -SDK_OVERLAY_MODULE_73_STATIC_INIT_END = 0x021DBF74; -SDK_OVERLAY_MODULE_74_ID = 74; -SDK_OVERLAY_MODULE_74_START = 0x021D74E0; -SDK_OVERLAY_MODULE_74_SIZE = 0x00001220; -SDK_OVERLAY_MODULE_74_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_74_STATIC_INIT_START = 0x021D8664; -SDK_OVERLAY_MODULE_74_STATIC_INIT_END = 0x021D8668; -SDK_OVERLAY_MODULE_75_ID = 75; -SDK_OVERLAY_MODULE_75_START = 0x021E6BA0; -SDK_OVERLAY_MODULE_75_SIZE = 0x00005DE0; -SDK_OVERLAY_MODULE_75_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_75_STATIC_INIT_START = 0x021EC97C; -SDK_OVERLAY_MODULE_75_STATIC_INIT_END = 0x021EC980; -SDK_OVERLAY_MODULE_76_ID = 76; -SDK_OVERLAY_MODULE_76_START = 0x021D74E0; -SDK_OVERLAY_MODULE_76_SIZE = 0x00001E20; -SDK_OVERLAY_MODULE_76_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_76_STATIC_INIT_START = 0x021D92E0; -SDK_OVERLAY_MODULE_76_STATIC_INIT_END = 0x021D92E4; -SDK_OVERLAY_MODULE_77_ID = 77; -SDK_OVERLAY_MODULE_77_START = 0x021D74E0; -SDK_OVERLAY_MODULE_77_SIZE = 0x00001BE0; -SDK_OVERLAY_MODULE_77_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_77_STATIC_INIT_START = 0x021D90AC; -SDK_OVERLAY_MODULE_77_STATIC_INIT_END = 0x021D90B0; -SDK_OVERLAY_MODULE_78_ID = 78; -SDK_OVERLAY_MODULE_78_START = 0x021D74E0; -SDK_OVERLAY_MODULE_78_SIZE = 0x00000460; -SDK_OVERLAY_MODULE_78_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_78_STATIC_INIT_START = 0x021D78F8; -SDK_OVERLAY_MODULE_78_STATIC_INIT_END = 0x021D78FC; -SDK_OVERLAY_MODULE_79_ID = 79; -SDK_OVERLAY_MODULE_79_START = 0x02211E60; -SDK_OVERLAY_MODULE_79_SIZE = 0x000052C0; -SDK_OVERLAY_MODULE_79_BSSSIZE = 0x00000040; -SDK_OVERLAY_MODULE_79_STATIC_INIT_START = 0x02216748; -SDK_OVERLAY_MODULE_79_STATIC_INIT_END = 0x0221674C; -SDK_OVERLAY_MODULE_80_ID = 80; -SDK_OVERLAY_MODULE_80_START = 0x0222D5C0; -SDK_OVERLAY_MODULE_80_SIZE = 0x0000A720; -SDK_OVERLAY_MODULE_80_BSSSIZE = 0x00000160; -SDK_OVERLAY_MODULE_80_STATIC_INIT_START = 0x02237670; -SDK_OVERLAY_MODULE_80_STATIC_INIT_END = 0x02237674; -SDK_OVERLAY_MODULE_81_ID = 81; -SDK_OVERLAY_MODULE_81_START = 0x02237E40; -SDK_OVERLAY_MODULE_81_SIZE = 0x00005580; -SDK_OVERLAY_MODULE_81_BSSSIZE = 0x000000A0; -SDK_OVERLAY_MODULE_81_STATIC_INIT_START = 0x0223D39C; -SDK_OVERLAY_MODULE_81_STATIC_INIT_END = 0x0223D3A0; -SDK_OVERLAY_MODULE_82_ID = 82; -SDK_OVERLAY_MODULE_82_START = 0x0222D5C0; -SDK_OVERLAY_MODULE_82_SIZE = 0x00002540; -SDK_OVERLAY_MODULE_82_BSSSIZE = 0x00000120; -SDK_OVERLAY_MODULE_82_STATIC_INIT_START = 0x0222F8CC; -SDK_OVERLAY_MODULE_82_STATIC_INIT_END = 0x0222F8D0; -SDK_OVERLAY_MODULE_83_ID = 83; -SDK_OVERLAY_MODULE_83_START = 0x0222D5C0; -SDK_OVERLAY_MODULE_83_SIZE = 0x0000E2A0; -SDK_OVERLAY_MODULE_83_BSSSIZE = 0x00001980; -SDK_OVERLAY_MODULE_83_STATIC_INIT_START = 0x0223A77C; -SDK_OVERLAY_MODULE_83_STATIC_INIT_END = 0x0223A780; -SDK_OVERLAY_MODULE_84_ID = 84; -SDK_OVERLAY_MODULE_84_START = 0x021D74E0; -SDK_OVERLAY_MODULE_84_SIZE = 0x00003920; -SDK_OVERLAY_MODULE_84_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_84_STATIC_INIT_START = 0x021DADE4; -SDK_OVERLAY_MODULE_84_STATIC_INIT_END = 0x021DADE8; -SDK_OVERLAY_MODULE_85_ID = 85; -SDK_OVERLAY_MODULE_85_START = 0x021D74E0; -SDK_OVERLAY_MODULE_85_SIZE = 0x00009100; -SDK_OVERLAY_MODULE_85_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_85_STATIC_INIT_START = 0x021E05A0; -SDK_OVERLAY_MODULE_85_STATIC_INIT_END = 0x021E05A4; -SDK_OVERLAY_MODULE_86_ID = 86; -SDK_OVERLAY_MODULE_86_START = 0x021D74E0; -SDK_OVERLAY_MODULE_86_SIZE = 0x00000820; -SDK_OVERLAY_MODULE_86_BSSSIZE = 0x00000000; -SDK_OVERLAY_MODULE_86_STATIC_INIT_START = 0x021D7CE4; -SDK_OVERLAY_MODULE_86_STATIC_INIT_END = 0x021D7CE8; -- cgit v1.2.3 From d8dcd1fef93929fc8905ee62c2bf627cb8e8db25 Mon Sep 17 00:00:00 2001 From: red031000 Date: Mon, 18 May 2020 20:16:42 +0100 Subject: remove pragma --- arm9/lib/include/OS_mutex.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/arm9/lib/include/OS_mutex.h b/arm9/lib/include/OS_mutex.h index abd79724..5db66fbe 100644 --- a/arm9/lib/include/OS_mutex.h +++ b/arm9/lib/include/OS_mutex.h @@ -8,13 +8,11 @@ #include "types.h" #include "OS_thread.h" -#pragma warn_padding off //apparently needed? struct OSMutex { OSThreadQueue queue; OSThread *thread; s32 count; OSMutexLink link; }; -#pragma warn_padding reset #endif //POKEDIAMOND_OS_MUTEX_H -- cgit v1.2.3 From 30112725432989fec55c561ca70352171ceaf1a0 Mon Sep 17 00:00:00 2001 From: red031000 Date: Mon, 18 May 2020 20:44:24 +0100 Subject: split librtc --- arm9/arm9.lcf | 4 +- arm9/asm/RTC_convert.s | 320 +++++++++++++++ arm9/asm/RTC_external.s | 663 ++++++++++++++++++++++++++++++ arm9/asm/RTC_internal.s | 53 +++ arm9/asm/librtc.s | 1028 ----------------------------------------------- arm9/global.inc | 5 + 6 files changed, 1044 insertions(+), 1029 deletions(-) create mode 100644 arm9/asm/RTC_convert.s create mode 100644 arm9/asm/RTC_external.s create mode 100644 arm9/asm/RTC_internal.s delete mode 100644 arm9/asm/librtc.s diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index 5504c2dd..e22f3ba6 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -218,7 +218,9 @@ SECTIONS { SPI_tp.o (.text) SPI_mic.o (.text) SPI_pm.o (.text) - librtc.o (.text) + RTC_external.o (.text) + RTC_internal.o (.text) + RTC_convert.o (.text) libcard.o (.text) libwm.o (.text) libctrdg.o (.text) diff --git a/arm9/asm/RTC_convert.s b/arm9/asm/RTC_convert.s new file mode 100644 index 00000000..a31a349b --- /dev/null +++ b/arm9/asm/RTC_convert.s @@ -0,0 +1,320 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start RTC_GetDayOfWeek +RTC_GetDayOfWeek: ; 0x020D6248 + stmdb sp!, {r4-r6,lr} + ldr r1, [r0, #0x4] + ldr r2, [r0, #0x0] + sub r3, r1, #0x2 + cmp r3, #0x1 + add lr, r2, #0x7d0 + ldr r4, _020D630C ; =0x51EB851F + sublt lr, lr, #0x1 + ldr r12, [r0, #0x8] + smull r0, r2, r4, lr + addlt r3, r3, #0xc + mov r1, #0x1a + mul r0, r3, r1 + smull r1, r3, r4, lr + ldr r5, _020D6310 ; =0x66666667 + sub r0, r0, #0x2 + smull r4, r1, r5, r0 + mov r4, lr, lsr #0x1f + mov r2, r2, asr #0x5 + mov r3, r3, asr #0x5 + add r3, r4, r3 + ldr r5, _020D6314 ; =0x00000064 + add r2, r4, r2 + smull r2, r4, r5, r2 + sub r2, lr, r2 + mov r1, r1, asr #0x2 + mov r0, r0, lsr #0x1f + add r1, r0, r1 + mov r4, r2, asr #0x1 + add r0, r12, r1 + add r1, r2, r4, lsr #0x1e + add r2, r2, r0 + mov r6, r3, asr #0x1 + add r0, r3, r6, lsr #0x1e + add r1, r2, r1, asr #0x2 + add r1, r1, r0, asr #0x2 + mov r0, #0x5 + mla r4, r3, r0, r1 + ldr r3, _020D6318 ; =0x92492493 + mov r1, r4, lsr #0x1f + smull r2, r0, r3, r4 + add r0, r4, r0 + mov r0, r0, asr #0x2 + ldr r2, _020D631C ; =0x00000007 + add r0, r1, r0 + smull r0, r1, r2, r0 + sub r0, r4, r0 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D630C: .word 0x51EB851F +_020D6310: .word 0x66666667 +_020D6314: .word 0x00000064 +_020D6318: .word 0x92492493 +_020D631C: .word 0x00000007 + + arm_func_start RTC_ConvertSecondToDateTime +RTC_ConvertSecondToDateTime: ; 0x020D6320 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r2 + mov r12, #0x0 + mov r4, r3 + subs r2, r5, r12 + sbcs r2, r4, r12 + mov r7, r0 + mov r6, r1 + movlt r5, r12 + movlt r4, r12 + blt _020D6364 + ldr r1, _020D63B0 ; =0xBC19137F + subs r0, r1, r5 + sbcs r0, r12, r4 + movlt r5, r1 + movlt r4, r12 +_020D6364: + ldr r2, _020D63B4 ; =0x00015180 + mov r0, r5 + mov r1, r4 + mov r3, #0x0 + bl _ll_mod + mov r1, r0 + mov r0, r6 + bl RTCi_ConvertSecondToTime + ldr r2, _020D63B4 ; =0x00015180 + mov r0, r5 + mov r1, r4 + mov r3, #0x0 + bl _ll_sdiv + mov r1, r0 + mov r0, r7 + bl RTC_ConvertDayToDate + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D63B0: .word 0xBC19137F +_020D63B4: .word 0x00015180 + + arm_func_start RTCi_ConvertSecondToTime +RTCi_ConvertSecondToTime: ; 0x020D63B8 + stmdb sp!, {r4-r6,lr} + ldr r2, _020D6448 ; =0x0001517F + cmp r1, #0x0 + movlt r1, #0x0 + cmp r1, r2 + ldr ip, _020D644C ; =0x88888889 + movgt r1, r2 + smull r2, r3, r12, r1 + smull r2, lr, r12, r1 + ldr r5, _020D6450 ; =0x91A2B3C5 + add r3, r1, r3 + smull r4, r2, r5, r1 + mov r5, r1, lsr #0x1f + mov r3, r3, asr #0x5 + add r3, r5, r3 + smull r4, r6, r12, r3 + add lr, r1, lr + mov lr, lr, asr #0x5 + add r6, r3, r6 + add r2, r1, r2 + ldr r4, _020D6454 ; =0x0000003C + add lr, r5, lr + smull r12, lr, r4, lr + sub lr, r1, r12 + mov r2, r2, asr #0xb + mov r6, r6, asr #0x5 + mov r1, r3, lsr #0x1f + add r6, r1, r6 + smull r1, r12, r4, r6 + str lr, [r0, #0x8] + sub r6, r3, r1 + str r6, [r0, #0x4] + add r2, r5, r2 + str r2, [r0, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D6448: .word 0x0001517F +_020D644C: .word 0x88888889 +_020D6450: .word 0x91A2B3C5 +_020D6454: .word 0x0000003C + + arm_func_start RTC_ConvertDayToDate +RTC_ConvertDayToDate: ; 0x020D6458 + stmdb sp!, {r4,lr} + ldr r2, _020D6560 ; =0x00008EAC + cmp r1, #0x0 + movlt r1, #0x0 + cmp r1, r2 + movgt r1, r2 + ldr r3, _020D6564 ; =0x92492493 + add lr, r1, #0x6 + smull r2, r4, r3, lr + add r4, lr, r4 + mov r4, r4, asr #0x2 + mov r2, lr, lsr #0x1f + ldr ip, _020D6568 ; =0x00000007 + add r4, r2, r4 + smull r2, r3, r12, r4 + sub r4, lr, r2 + ldr r2, _020D656C ; =0x0000016D + ldr r3, _020D6570 ; =0x0000016E + str r4, [r0, #0xc] + mov lr, #0x0 +_020D64A8: + ands r12, lr, #0x3 + moveq r12, r3 + movne r12, r2 + mov r4, r1 + subs r1, r1, r12 + movmi r1, r4 + bmi _020D64D0 + add lr, lr, #0x1 + cmp lr, #0x63 + blo _020D64A8 +_020D64D0: + ldr r2, _020D656C ; =0x0000016D + str lr, [r0, #0x0] + cmp r1, r2 + movgt r1, r2 + ands r2, lr, #0x3 + bne _020D6518 + cmp r1, #0x3c + bge _020D6514 + cmp r1, #0x1f + movlt r2, #0x1 + subge r1, r1, #0x1f + movge r2, #0x2 + str r2, [r0, #0x4] + add r1, r1, #0x1 + str r1, [r0, #0x8] + ldmia sp!, {r4,lr} + bx lr +_020D6514: + sub r1, r1, #0x1 +_020D6518: + ldr r3, _020D6574 ; =0x02106A20 + mov r4, #0xb +_020D6520: + ldr r2, [r3, r4, lsl #0x2] + mov r12, r4, lsl #0x2 + cmp r1, r2 + blt _020D6550 + add r2, r4, #0x1 + str r2, [r0, #0x4] + ldr r2, [r3, r12] + sub r1, r1, r2 + add r1, r1, #0x1 + str r1, [r0, #0x8] + ldmia sp!, {r4,lr} + bx lr +_020D6550: + subs r4, r4, #0x1 + bpl _020D6520 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D6560: .word 0x00008EAC +_020D6564: .word 0x92492493 +_020D6568: .word 0x00000007 +_020D656C: .word 0x0000016D +_020D6570: .word 0x0000016E +_020D6574: .word 0x02106A20 + + arm_func_start RTC_ConvertDateTimeToSecond +RTC_ConvertDateTimeToSecond: ; 0x020D6578 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r1 + bl RTC_ConvertDateToDay + mov r4, r0 + mvn r0, #0x0 + cmp r4, r0 + addeq sp, sp, #0x4 + moveq r1, r0 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + mov r0, r5 + bl RTCi_ConvertTimeToSecond + mvn r2, #0x0 + cmp r0, r2 + moveq r1, r2 + beq _020D65DC + ldr r1, _020D65EC ; =0x00015180 + mov r2, #0x0 + umull r12, r3, r4, r1 + mla r3, r4, r2, r3 + mov r2, r4, asr #0x1f + mla r3, r2, r1, r3 + adds r2, r0, r12 + adc r1, r3, r0, asr #0x1f +_020D65DC: + mov r0, r2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D65EC: .word 0x00015180 + + arm_func_start RTCi_ConvertTimeToSecond +RTCi_ConvertTimeToSecond: ; 0x020D65F0 + ldr r3, [r0, #0x4] + ldr r2, [r0, #0x0] + mov r1, #0x3c + mla r3, r2, r1, r3 + ldr r0, [r0, #0x8] + mla r0, r3, r1, r0 + bx lr + + arm_func_start RTC_ConvertDateToDay +RTC_ConvertDateToDay: ; 0x020D660C + ldr r3, [r0, #0x0] + cmp r3, #0x64 + bhs _020D665C + ldr r2, [r0, #0x4] + cmp r2, #0x1 + blo _020D665C + cmp r2, #0xc + bhi _020D665C + ldr r1, [r0, #0x8] + cmp r1, #0x1 + blo _020D665C + cmp r1, #0x1f + bhi _020D665C + ldr r0, [r0, #0xc] + cmp r0, #0x7 + bge _020D665C + cmp r2, #0x1 + blo _020D665C + cmp r2, #0xc + bls _020D6664 +_020D665C: + mvn r0, #0x0 + bx lr +_020D6664: + ldr r0, _020D6698 ; =0x02106A1C + sub r1, r1, #0x1 + ldr r0, [r0, r2, lsl #0x2] + cmp r2, #0x3 + add r2, r1, r0 + blo _020D6684 + ands r0, r3, #0x3 + addeq r2, r2, #0x1 +_020D6684: + ldr r0, _020D669C ; =0x0000016D + add r1, r3, #0x3 + mla r0, r3, r0, r2 + add r0, r0, r1, lsr #0x2 + bx lr + .balign 4 +_020D6698: .word 0x02106A1C +_020D669C: .word 0x0000016D diff --git a/arm9/asm/RTC_external.s b/arm9/asm/RTC_external.s new file mode 100644 index 00000000..cf9db8aa --- /dev/null +++ b/arm9/asm/RTC_external.s @@ -0,0 +1,663 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start RtcWaitBusy +RtcWaitBusy: ; 0x020D5914 + ldr ip, _020D5928 ; =0x021D5538 +_020D5918: + ldr r0, [r12, #0x0] + cmp r0, #0x1 + beq _020D5918 + bx lr + .balign 4 +_020D5928: .word 0x021D5538 + + arm_func_start RtcGetResultCallback +RtcGetResultCallback: ; 0x020D592C + ldr r1, _020D5938 ; =0x021D5538 + str r0, [r1, #0x20] + bx lr + .balign 4 +_020D5938: .word 0x021D5538 + + arm_func_start RtcBCD2HEX +RtcBCD2HEX: ; 0x020D593C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, #0x0 + mov r3, r5 + mov r2, r5 +_020D5950: + mov r1, r0, lsr r2 + and r1, r1, #0xf + cmp r1, #0xa + addcs sp, sp, #0x4 + movcs r0, #0x0 + ldmcsia sp!, {r4-r5,lr} + bxcs lr + add r3, r3, #0x1 + cmp r3, #0x8 + add r2, r2, #0x4 + blt _020D5950 + mov r12, #0x0 + mov lr, r12 + mov r4, #0x1 + mov r2, #0xa +_020D598C: + mov r1, r0, lsr lr + and r3, r1, #0xf + mul r1, r4, r2 + mla r5, r4, r3, r5 + add r12, r12, #0x1 + mov r4, r1 + cmp r12, #0x8 + add lr, lr, #0x4 + blt _020D598C + mov r0, r5 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start RtcCommonCallback +RtcCommonCallback: ; 0x020D59C0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + cmp r2, #0x0 + beq _020D5A30 + ldr r0, _020D5F30 ; =0x021D5538 + ldr r2, _020D5F30 ; =0x021D5538 + ldr r1, [r0, #0x18] + ldr r4, [r2, #0x4] + cmp r1, #0x0 + movne r1, #0x0 + strne r1, [r0, #0x18] + ldr r0, _020D5F30 ; =0x021D5538 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + movne r1, #0x0 + strne r1, [r0, #0x0] + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r1, [r2, #0x10] + mov r3, #0x0 + mov r0, #0x6 + str r3, [r2, #0x4] + blx r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr +_020D5A30: + and r0, r1, #0x7f00 + mov r0, r0, lsr #0x8 + and r0, r0, #0xff + cmp r0, #0x30 + and r2, r1, #0xff + bne _020D5A70 + ldr r0, _020D5F30 ; =0x021D5538 + ldr r0, [r0, #0x1c] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + blx r0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr +_020D5A70: + cmp r2, #0x0 + bne _020D5E88 + ldr r0, _020D5F30 ; =0x021D5538 + mov r5, #0x0 + ldr r1, [r0, #0x14] + cmp r1, #0xf + addls pc, pc, r1, lsl #0x2 + b _020D5E74 +_020D5A90: + b _020D5AD0 +_020D5A94: + b _020D5B24 +_020D5A98: + b _020D5B74 +_020D5A9C: + b _020D5ED0 +_020D5AA0: + b _020D5ED0 +_020D5AA4: + b _020D5ED0 +_020D5AA8: + b _020D5C1C +_020D5AAC: + b _020D5C4C +_020D5AB0: + b _020D5C70 +_020D5AB4: + b _020D5D14 +_020D5AB8: + b _020D5DC8 +_020D5ABC: + b _020D5ED0 +_020D5AC0: + b _020D5ED0 +_020D5AC4: + b _020D5ED0 +_020D5AC8: + b _020D5ED0 +_020D5ACC: + b _020D5ED0 +_020D5AD0: + ldr r1, _020D5F34 ; =0x027FFDE8 + ldr r4, [r0, #0x8] + ldrb r0, [r1, #0x0] + bl RtcBCD2HEX + ldr r1, _020D5F34 ; =0x027FFDE8 + str r0, [r4, #0x0] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x13 + mov r0, r0, lsr #0x1b + bl RtcBCD2HEX + ldr r1, _020D5F34 ; =0x027FFDE8 + str r0, [r4, #0x4] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0xa + mov r0, r0, lsr #0x1a + bl RtcBCD2HEX + str r0, [r4, #0x8] + mov r0, r4 + bl RTC_GetDayOfWeek + str r0, [r4, #0xc] + b _020D5ED0 +_020D5B24: + ldr r1, _020D5F38 ; =0x027FFDEC + ldr r4, [r0, #0x8] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x1a + mov r0, r0, lsr #0x1a + bl RtcBCD2HEX + ldr r1, _020D5F38 ; =0x027FFDEC + str r0, [r4, #0x0] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x11 + mov r0, r0, lsr #0x19 + bl RtcBCD2HEX + ldr r1, _020D5F38 ; =0x027FFDEC + str r0, [r4, #0x4] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x9 + mov r0, r0, lsr #0x19 + bl RtcBCD2HEX + str r0, [r4, #0x8] + b _020D5ED0 +_020D5B74: + ldr r1, _020D5F34 ; =0x027FFDE8 + ldr r4, [r0, #0x8] + ldr r0, [r1, #0x0] + and r0, r0, #0xff + bl RtcBCD2HEX + ldr r1, _020D5F34 ; =0x027FFDE8 + str r0, [r4, #0x0] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x13 + mov r0, r0, lsr #0x1b + bl RtcBCD2HEX + ldr r1, _020D5F34 ; =0x027FFDE8 + str r0, [r4, #0x4] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0xa + mov r0, r0, lsr #0x1a + bl RtcBCD2HEX + str r0, [r4, #0x8] + mov r0, r4 + bl RTC_GetDayOfWeek + ldr r1, _020D5F38 ; =0x027FFDEC + str r0, [r4, #0xc] + ldr r0, [r1, #0x0] + ldr r1, _020D5F30 ; =0x021D5538 + mov r0, r0, lsl #0x1a + mov r0, r0, lsr #0x1a + ldr r4, [r1, #0xc] + bl RtcBCD2HEX + ldr r1, _020D5F38 ; =0x027FFDEC + str r0, [r4, #0x0] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x11 + mov r0, r0, lsr #0x19 + bl RtcBCD2HEX + ldr r1, _020D5F38 ; =0x027FFDEC + str r0, [r4, #0x4] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x9 + mov r0, r0, lsr #0x19 + bl RtcBCD2HEX + str r0, [r4, #0x8] + b _020D5ED0 +_020D5C1C: + ldr r1, _020D5F3C ; =0x027FFDEA + ldr r2, [r0, #0x8] + ldrh r0, [r1, #0x0] + mov r0, r0, lsl #0x1c + mov r0, r0, lsr #0x1c + cmp r0, #0x4 + bne _020D5C44 + mov r0, #0x1 + str r0, [r2, #0x0] + b _020D5ED0 +_020D5C44: + str r5, [r2, #0x0] + b _020D5ED0 +_020D5C4C: + ldr r1, _020D5F3C ; =0x027FFDEA + ldr r2, [r0, #0x8] + ldrh r0, [r1, #0x0] + mov r0, r0, lsl #0x19 + movs r0, r0, lsr #0x1f + movne r0, #0x1 + strne r0, [r2, #0x0] + streq r5, [r2, #0x0] + b _020D5ED0 +_020D5C70: + ldr r1, _020D5F38 ; =0x027FFDEC + ldr r4, [r0, #0x8] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + str r0, [r4, #0x0] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x12 + mov r0, r0, lsr #0x1a + bl RtcBCD2HEX + ldr r1, _020D5F38 ; =0x027FFDEC + str r0, [r4, #0x4] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x9 + mov r0, r0, lsr #0x19 + bl RtcBCD2HEX + str r0, [r4, #0x8] + mov r1, r5 + ldr r0, _020D5F38 ; =0x027FFDEC + str r1, [r4, #0xc] + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0x18 + movs r0, r0, lsr #0x1f + ldrne r0, [r4, #0xc] + addne r0, r0, #0x1 + strne r0, [r4, #0xc] + ldr r0, _020D5F38 ; =0x027FFDEC + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0x10 + movs r0, r0, lsr #0x1f + ldrne r0, [r4, #0xc] + addne r0, r0, #0x2 + strne r0, [r4, #0xc] + ldr r0, _020D5F38 ; =0x027FFDEC + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0x8 + movs r0, r0, lsr #0x1f + ldrne r0, [r4, #0xc] + addne r0, r0, #0x4 + strne r0, [r4, #0xc] + b _020D5ED0 +_020D5D14: + ldr r3, [r0, #0x18] + cmp r3, #0x0 + bne _020D5DC0 + ldr r1, [r0, #0x8] + ldr r1, [r1, #0x0] + cmp r1, #0x1 + bne _020D5D7C + ldr r2, _020D5F3C ; =0x027FFDEA + ldrh r1, [r2, #0x0] + mov r1, r1, lsl #0x1c + mov r1, r1, lsr #0x1c + cmp r1, #0x4 + beq _020D5ED0 + add r1, r3, #0x1 + str r1, [r0, #0x18] + ldrh r0, [r2, #0x0] + bic r0, r0, #0xf + orr r0, r0, #0x4 + strh r0, [r2, #0x0] + bl RTCi_WriteRawStatus2Async +_020D5D64: ; 0x020D5D64 + cmp r0, #0x0 + moveq r1, r5 + ldreq r0, _020D5F30 ; =0x021D5538 + moveq r5, #0x3 + streq r1, [r0, #0x18] + b _020D5ED0 +_020D5D7C: + ldr r2, _020D5F3C ; =0x027FFDEA + ldrh r1, [r2, #0x0] + mov r1, r1, lsl #0x1c + movs r1, r1, lsr #0x1c + beq _020D5ED0 + add r1, r3, #0x1 + str r1, [r0, #0x18] + ldrh r0, [r2, #0x0] + bic r0, r0, #0xf + strh r0, [r2, #0x0] + bl RTCi_WriteRawStatus2Async +_020D5DA8: ; 0x020D5DA8 + cmp r0, #0x0 + moveq r1, r5 + ldreq r0, _020D5F30 ; =0x021D5538 + moveq r5, #0x3 + streq r1, [r0, #0x18] + b _020D5ED0 +_020D5DC0: + str r5, [r0, #0x18] + b _020D5ED0 +_020D5DC8: + ldr r3, [r0, #0x18] + cmp r3, #0x0 + bne _020D5E6C + ldr r1, [r0, #0x8] + ldr r1, [r1, #0x0] + cmp r1, #0x1 + bne _020D5E28 + ldr r2, _020D5F3C ; =0x027FFDEA + ldrh r1, [r2, #0x0] + mov r1, r1, lsl #0x19 + movs r1, r1, lsr #0x1f + bne _020D5ED0 + add r1, r3, #0x1 + str r1, [r0, #0x18] + ldrh r0, [r2, #0x0] + orr r0, r0, #0x40 + strh r0, [r2, #0x0] + bl RTCi_WriteRawStatus2Async +_020D5E10: ; 0x020D5E10 + cmp r0, #0x0 + moveq r1, r5 + ldreq r0, _020D5F30 ; =0x021D5538 + moveq r5, #0x3 + streq r1, [r0, #0x18] + b _020D5ED0 +_020D5E28: + ldr r2, _020D5F3C ; =0x027FFDEA + ldrh r1, [r2, #0x0] + mov r1, r1, lsl #0x19 + movs r1, r1, lsr #0x1f + beq _020D5ED0 + add r1, r3, #0x1 + str r1, [r0, #0x18] + ldrh r0, [r2, #0x0] + bic r0, r0, #0x40 + strh r0, [r2, #0x0] + bl RTCi_WriteRawStatus2Async +_020D5E54: ; 0x020D5E54 + cmp r0, #0x0 + moveq r1, r5 + ldreq r0, _020D5F30 ; =0x021D5538 + moveq r5, #0x3 + streq r1, [r0, #0x18] + b _020D5ED0 +_020D5E6C: + str r5, [r0, #0x18] + b _020D5ED0 +_020D5E74: + ldr r0, _020D5F30 ; =0x021D5538 + mov r1, #0x0 + str r1, [r0, #0x18] + mov r5, #0x4 + b _020D5ED0 +_020D5E88: + ldr r0, _020D5F30 ; =0x021D5538 + mov r1, #0x0 + str r1, [r0, #0x18] + cmp r2, #0x4 + addls pc, pc, r2, lsl #0x2 + b _020D5ECC +_020D5EA0: + b _020D5ECC +_020D5EA4: + b _020D5EB4 +_020D5EA8: + b _020D5EBC +_020D5EAC: + b _020D5EC4 +_020D5EB0: + b _020D5ECC +_020D5EB4: + mov r5, #0x4 + b _020D5ED0 +_020D5EBC: + mov r5, #0x5 + b _020D5ED0 +_020D5EC4: + mov r5, #0x1 + b _020D5ED0 +_020D5ECC: + mov r5, #0x6 +_020D5ED0: + ldr r0, _020D5F30 ; =0x021D5538 + ldr r1, [r0, #0x18] + cmp r1, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r2, _020D5F30 ; =0x021D5538 + ldr r1, [r0, #0x0] + ldr r4, [r2, #0x4] + cmp r1, #0x0 + movne r1, #0x0 + strne r1, [r0, #0x0] + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r1, [r2, #0x10] + mov r3, #0x0 + mov r0, r5 + str r3, [r2, #0x4] + blx r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D5F30: .word 0x021D5538 +_020D5F34: .word 0x027FFDE8 +_020D5F38: .word 0x027FFDEC +_020D5F3C: .word 0x027FFDEA + + arm_func_start RTC_GetDateTimeAsync +RTC_GetDateTimeAsync: ; 0x020D5F40 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl OS_DisableInterrupts + ldr r1, _020D5FCC ; =0x021D5538 + ldr r2, [r1, #0x0] + cmp r2, #0x0 + beq _020D5F80 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020D5F80: + mov r2, #0x1 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + ldr r0, _020D5FCC ; =0x021D5538 + mov r2, #0x2 + mov r1, #0x0 + str r2, [r0, #0x14] + str r1, [r0, #0x18] + str r7, [r0, #0x8] + str r6, [r0, #0xc] + str r5, [r0, #0x4] + str r4, [r0, #0x10] + bl RTCi_ReadRawDateTimeAsync +_020D5FB4: ; 0x020D5FB4 + cmp r0, #0x0 + movne r0, #0x0 + moveq r0, #0x3 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D5FCC: .word 0x021D5538 + + arm_func_start RTC_GetTime +RTC_GetTime: ; 0x020D5FD0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020D600C ; =RtcGetResultCallback + mov r2, #0x0 + bl RTC_GetTimeAsync + ldr r1, _020D6010 ; =0x021D5538 + cmp r0, #0x0 + str r0, [r1, #0x20] + bne _020D5FF8 + bl RtcWaitBusy +_020D5FF8: + ldr r0, _020D6010 ; =0x021D5538 + ldr r0, [r0, #0x20] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D600C: .word RtcGetResultCallback +_020D6010: .word 0x021D5538 + + arm_func_start RTC_GetTimeAsync +RTC_GetTimeAsync: ; 0x020D6014 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl OS_DisableInterrupts + ldr r1, _020D608C ; =0x021D5538 + ldr r2, [r1, #0x0] + cmp r2, #0x0 + beq _020D6048 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020D6048: + mov r2, #0x1 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + ldr r0, _020D608C ; =0x021D5538 + mov r2, #0x1 + mov r1, #0x0 + str r2, [r0, #0x14] + str r1, [r0, #0x18] + str r6, [r0, #0x8] + str r5, [r0, #0x4] + str r4, [r0, #0x10] + bl RTCi_ReadRawTimeAsync +_020D6078: ; 0x020D6078 + cmp r0, #0x0 + movne r0, #0x0 + moveq r0, #0x3 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D608C: .word 0x021D5538 + + arm_func_start RTC_GetDate +RTC_GetDate: ; 0x020D6090 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020D60CC ; =RtcGetResultCallback + mov r2, #0x0 + bl RTC_GetDateAsync + ldr r1, _020D60D0 ; =0x021D5538 + cmp r0, #0x0 + str r0, [r1, #0x20] + bne _020D60B8 + bl RtcWaitBusy +_020D60B8: + ldr r0, _020D60D0 ; =0x021D5538 + ldr r0, [r0, #0x20] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D60CC: .word RtcGetResultCallback +_020D60D0: .word 0x021D5538 + + arm_func_start RTC_GetDateAsync +RTC_GetDateAsync: ; 0x020D60D4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl OS_DisableInterrupts + ldr r1, _020D6148 ; =0x021D5538 + ldr r2, [r1, #0x0] + cmp r2, #0x0 + beq _020D6108 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020D6108: + mov r2, #0x1 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + ldr r0, _020D6148 ; =0x021D5538 + mov r1, #0x0 + str r1, [r0, #0x14] + str r1, [r0, #0x18] + str r6, [r0, #0x8] + str r5, [r0, #0x4] + str r4, [r0, #0x10] + bl RTCi_ReadRawDateAsync +_020D6134: ; 0x020D6134 + cmp r0, #0x0 + movne r0, #0x0 + moveq r0, #0x3 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D6148: .word 0x021D5538 + + arm_func_start RTC_Init +RTC_Init: ; 0x020D614C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r1, _020D61C8 ; =0x021D5534 + ldrh r0, [r1, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r0, _020D61CC ; =0x021D5538 + mov r2, #0x0 + mov r3, #0x1 + strh r3, [r1, #0x0] + str r2, [r0, #0x0] + str r2, [r0, #0x4] + str r2, [r0, #0x1c] + str r2, [r0, #0x8] + str r2, [r0, #0xc] + bl PXI_Init + mov r5, #0x5 + mov r4, #0x1 +_020D619C: + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady +_020D61A8: ; 0x020D61A8 + cmp r0, #0x0 + beq _020D619C + ldr r1, _020D61D0 ; =RtcCommonCallback + mov r0, #0x5 + bl PXI_SetFifoRecvCallback + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D61C8: .word 0x021D5534 +_020D61CC: .word 0x021D5538 +_020D61D0: .word RtcCommonCallback diff --git a/arm9/asm/RTC_internal.s b/arm9/asm/RTC_internal.s new file mode 100644 index 00000000..408b630c --- /dev/null +++ b/arm9/asm/RTC_internal.s @@ -0,0 +1,53 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start RtcSendPxiCommand +RtcSendPxiCommand: ; 0x020D61D4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r0, r0, lsl #0x8 + and r1, r0, #0x7f00 + mov r0, #0x5 + mov r2, #0x0 + bl PXI_SendWordByFifo +_020D61F0: ; 0x020D61F0 + cmp r0, #0x0 + movge r0, #0x1 + movlt r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start RTCi_WriteRawStatus2Async +RTCi_WriteRawStatus2Async: + ldr ip, _020D6214 ; =RtcSendPxiCommand + mov r0, #0x27 + bx r12 + .balign 4 +_020D6214: .word RtcSendPxiCommand + + arm_func_start RTCi_ReadRawTimeAsync +RTCi_ReadRawTimeAsync: + ldr ip, _020D6224 ; =RtcSendPxiCommand + mov r0, #0x12 + bx r12 + .balign 4 +_020D6224: .word RtcSendPxiCommand + + arm_func_start RTCi_ReadRawDateAsync +RTCi_ReadRawDateAsync: + ldr ip, _020D6234 ; =RtcSendPxiCommand + mov r0, #0x11 + bx r12 + .balign 4 +_020D6234: .word RtcSendPxiCommand + + arm_func_start RTCi_ReadRawDateTimeAsync +RTCi_ReadRawDateTimeAsync: + ldr ip, _020D6244 ; =RtcSendPxiCommand + mov r0, #0x10 + bx r12 + .balign 4 +_020D6244: .word RtcSendPxiCommand diff --git a/arm9/asm/librtc.s b/arm9/asm/librtc.s deleted file mode 100644 index 8116f8de..00000000 --- a/arm9/asm/librtc.s +++ /dev/null @@ -1,1028 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start RtcWaitBusy -RtcWaitBusy: ; 0x020D5914 - ldr ip, _020D5928 ; =0x021D5538 -_020D5918: - ldr r0, [r12, #0x0] - cmp r0, #0x1 - beq _020D5918 - bx lr - .balign 4 -_020D5928: .word 0x021D5538 - - arm_func_start RtcGetResultCallback -RtcGetResultCallback: ; 0x020D592C - ldr r1, _020D5938 ; =0x021D5538 - str r0, [r1, #0x20] - bx lr - .balign 4 -_020D5938: .word 0x021D5538 - - arm_func_start RtcBCD2HEX -RtcBCD2HEX: ; 0x020D593C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, #0x0 - mov r3, r5 - mov r2, r5 -_020D5950: - mov r1, r0, lsr r2 - and r1, r1, #0xf - cmp r1, #0xa - addcs sp, sp, #0x4 - movcs r0, #0x0 - ldmcsia sp!, {r4-r5,lr} - bxcs lr - add r3, r3, #0x1 - cmp r3, #0x8 - add r2, r2, #0x4 - blt _020D5950 - mov r12, #0x0 - mov lr, r12 - mov r4, #0x1 - mov r2, #0xa -_020D598C: - mov r1, r0, lsr lr - and r3, r1, #0xf - mul r1, r4, r2 - mla r5, r4, r3, r5 - add r12, r12, #0x1 - mov r4, r1 - cmp r12, #0x8 - add lr, lr, #0x4 - blt _020D598C - mov r0, r5 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start RtcCommonCallback -RtcCommonCallback: ; 0x020D59C0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - cmp r2, #0x0 - beq _020D5A30 - ldr r0, _020D5F30 ; =0x021D5538 - ldr r2, _020D5F30 ; =0x021D5538 - ldr r1, [r0, #0x18] - ldr r4, [r2, #0x4] - cmp r1, #0x0 - movne r1, #0x0 - strne r1, [r0, #0x18] - ldr r0, _020D5F30 ; =0x021D5538 - ldr r1, [r0, #0x0] - cmp r1, #0x0 - movne r1, #0x0 - strne r1, [r0, #0x0] - cmp r4, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldr r1, [r2, #0x10] - mov r3, #0x0 - mov r0, #0x6 - str r3, [r2, #0x4] - blx r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr -_020D5A30: - and r0, r1, #0x7f00 - mov r0, r0, lsr #0x8 - and r0, r0, #0xff - cmp r0, #0x30 - and r2, r1, #0xff - bne _020D5A70 - ldr r0, _020D5F30 ; =0x021D5538 - ldr r0, [r0, #0x1c] - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - blx r0 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr -_020D5A70: - cmp r2, #0x0 - bne _020D5E88 - ldr r0, _020D5F30 ; =0x021D5538 - mov r5, #0x0 - ldr r1, [r0, #0x14] - cmp r1, #0xf - addls pc, pc, r1, lsl #0x2 - b _020D5E74 -_020D5A90: - b _020D5AD0 -_020D5A94: - b _020D5B24 -_020D5A98: - b _020D5B74 -_020D5A9C: - b _020D5ED0 -_020D5AA0: - b _020D5ED0 -_020D5AA4: - b _020D5ED0 -_020D5AA8: - b _020D5C1C -_020D5AAC: - b _020D5C4C -_020D5AB0: - b _020D5C70 -_020D5AB4: - b _020D5D14 -_020D5AB8: - b _020D5DC8 -_020D5ABC: - b _020D5ED0 -_020D5AC0: - b _020D5ED0 -_020D5AC4: - b _020D5ED0 -_020D5AC8: - b _020D5ED0 -_020D5ACC: - b _020D5ED0 -_020D5AD0: - ldr r1, _020D5F34 ; =0x027FFDE8 - ldr r4, [r0, #0x8] - ldrb r0, [r1, #0x0] - bl RtcBCD2HEX - ldr r1, _020D5F34 ; =0x027FFDE8 - str r0, [r4, #0x0] - ldr r0, [r1, #0x0] - mov r0, r0, lsl #0x13 - mov r0, r0, lsr #0x1b - bl RtcBCD2HEX - ldr r1, _020D5F34 ; =0x027FFDE8 - str r0, [r4, #0x4] - ldr r0, [r1, #0x0] - mov r0, r0, lsl #0xa - mov r0, r0, lsr #0x1a - bl RtcBCD2HEX - str r0, [r4, #0x8] - mov r0, r4 - bl RTC_GetDayOfWeek - str r0, [r4, #0xc] - b _020D5ED0 -_020D5B24: - ldr r1, _020D5F38 ; =0x027FFDEC - ldr r4, [r0, #0x8] - ldr r0, [r1, #0x0] - mov r0, r0, lsl #0x1a - mov r0, r0, lsr #0x1a - bl RtcBCD2HEX - ldr r1, _020D5F38 ; =0x027FFDEC - str r0, [r4, #0x0] - ldr r0, [r1, #0x0] - mov r0, r0, lsl #0x11 - mov r0, r0, lsr #0x19 - bl RtcBCD2HEX - ldr r1, _020D5F38 ; =0x027FFDEC - str r0, [r4, #0x4] - ldr r0, [r1, #0x0] - mov r0, r0, lsl #0x9 - mov r0, r0, lsr #0x19 - bl RtcBCD2HEX - str r0, [r4, #0x8] - b _020D5ED0 -_020D5B74: - ldr r1, _020D5F34 ; =0x027FFDE8 - ldr r4, [r0, #0x8] - ldr r0, [r1, #0x0] - and r0, r0, #0xff - bl RtcBCD2HEX - ldr r1, _020D5F34 ; =0x027FFDE8 - str r0, [r4, #0x0] - ldr r0, [r1, #0x0] - mov r0, r0, lsl #0x13 - mov r0, r0, lsr #0x1b - bl RtcBCD2HEX - ldr r1, _020D5F34 ; =0x027FFDE8 - str r0, [r4, #0x4] - ldr r0, [r1, #0x0] - mov r0, r0, lsl #0xa - mov r0, r0, lsr #0x1a - bl RtcBCD2HEX - str r0, [r4, #0x8] - mov r0, r4 - bl RTC_GetDayOfWeek - ldr r1, _020D5F38 ; =0x027FFDEC - str r0, [r4, #0xc] - ldr r0, [r1, #0x0] - ldr r1, _020D5F30 ; =0x021D5538 - mov r0, r0, lsl #0x1a - mov r0, r0, lsr #0x1a - ldr r4, [r1, #0xc] - bl RtcBCD2HEX - ldr r1, _020D5F38 ; =0x027FFDEC - str r0, [r4, #0x0] - ldr r0, [r1, #0x0] - mov r0, r0, lsl #0x11 - mov r0, r0, lsr #0x19 - bl RtcBCD2HEX - ldr r1, _020D5F38 ; =0x027FFDEC - str r0, [r4, #0x4] - ldr r0, [r1, #0x0] - mov r0, r0, lsl #0x9 - mov r0, r0, lsr #0x19 - bl RtcBCD2HEX - str r0, [r4, #0x8] - b _020D5ED0 -_020D5C1C: - ldr r1, _020D5F3C ; =0x027FFDEA - ldr r2, [r0, #0x8] - ldrh r0, [r1, #0x0] - mov r0, r0, lsl #0x1c - mov r0, r0, lsr #0x1c - cmp r0, #0x4 - bne _020D5C44 - mov r0, #0x1 - str r0, [r2, #0x0] - b _020D5ED0 -_020D5C44: - str r5, [r2, #0x0] - b _020D5ED0 -_020D5C4C: - ldr r1, _020D5F3C ; =0x027FFDEA - ldr r2, [r0, #0x8] - ldrh r0, [r1, #0x0] - mov r0, r0, lsl #0x19 - movs r0, r0, lsr #0x1f - movne r0, #0x1 - strne r0, [r2, #0x0] - streq r5, [r2, #0x0] - b _020D5ED0 -_020D5C70: - ldr r1, _020D5F38 ; =0x027FFDEC - ldr r4, [r0, #0x8] - ldr r0, [r1, #0x0] - mov r0, r0, lsl #0x1d - mov r0, r0, lsr #0x1d - str r0, [r4, #0x0] - ldr r0, [r1, #0x0] - mov r0, r0, lsl #0x12 - mov r0, r0, lsr #0x1a - bl RtcBCD2HEX - ldr r1, _020D5F38 ; =0x027FFDEC - str r0, [r4, #0x4] - ldr r0, [r1, #0x0] - mov r0, r0, lsl #0x9 - mov r0, r0, lsr #0x19 - bl RtcBCD2HEX - str r0, [r4, #0x8] - mov r1, r5 - ldr r0, _020D5F38 ; =0x027FFDEC - str r1, [r4, #0xc] - ldr r0, [r0, #0x0] - mov r0, r0, lsl #0x18 - movs r0, r0, lsr #0x1f - ldrne r0, [r4, #0xc] - addne r0, r0, #0x1 - strne r0, [r4, #0xc] - ldr r0, _020D5F38 ; =0x027FFDEC - ldr r0, [r0, #0x0] - mov r0, r0, lsl #0x10 - movs r0, r0, lsr #0x1f - ldrne r0, [r4, #0xc] - addne r0, r0, #0x2 - strne r0, [r4, #0xc] - ldr r0, _020D5F38 ; =0x027FFDEC - ldr r0, [r0, #0x0] - mov r0, r0, lsl #0x8 - movs r0, r0, lsr #0x1f - ldrne r0, [r4, #0xc] - addne r0, r0, #0x4 - strne r0, [r4, #0xc] - b _020D5ED0 -_020D5D14: - ldr r3, [r0, #0x18] - cmp r3, #0x0 - bne _020D5DC0 - ldr r1, [r0, #0x8] - ldr r1, [r1, #0x0] - cmp r1, #0x1 - bne _020D5D7C - ldr r2, _020D5F3C ; =0x027FFDEA - ldrh r1, [r2, #0x0] - mov r1, r1, lsl #0x1c - mov r1, r1, lsr #0x1c - cmp r1, #0x4 - beq _020D5ED0 - add r1, r3, #0x1 - str r1, [r0, #0x18] - ldrh r0, [r2, #0x0] - bic r0, r0, #0xf - orr r0, r0, #0x4 - strh r0, [r2, #0x0] - bl RTCi_WriteRawStatus2Async -_020D5D64: ; 0x020D5D64 - cmp r0, #0x0 - moveq r1, r5 - ldreq r0, _020D5F30 ; =0x021D5538 - moveq r5, #0x3 - streq r1, [r0, #0x18] - b _020D5ED0 -_020D5D7C: - ldr r2, _020D5F3C ; =0x027FFDEA - ldrh r1, [r2, #0x0] - mov r1, r1, lsl #0x1c - movs r1, r1, lsr #0x1c - beq _020D5ED0 - add r1, r3, #0x1 - str r1, [r0, #0x18] - ldrh r0, [r2, #0x0] - bic r0, r0, #0xf - strh r0, [r2, #0x0] - bl RTCi_WriteRawStatus2Async -_020D5DA8: ; 0x020D5DA8 - cmp r0, #0x0 - moveq r1, r5 - ldreq r0, _020D5F30 ; =0x021D5538 - moveq r5, #0x3 - streq r1, [r0, #0x18] - b _020D5ED0 -_020D5DC0: - str r5, [r0, #0x18] - b _020D5ED0 -_020D5DC8: - ldr r3, [r0, #0x18] - cmp r3, #0x0 - bne _020D5E6C - ldr r1, [r0, #0x8] - ldr r1, [r1, #0x0] - cmp r1, #0x1 - bne _020D5E28 - ldr r2, _020D5F3C ; =0x027FFDEA - ldrh r1, [r2, #0x0] - mov r1, r1, lsl #0x19 - movs r1, r1, lsr #0x1f - bne _020D5ED0 - add r1, r3, #0x1 - str r1, [r0, #0x18] - ldrh r0, [r2, #0x0] - orr r0, r0, #0x40 - strh r0, [r2, #0x0] - bl RTCi_WriteRawStatus2Async -_020D5E10: ; 0x020D5E10 - cmp r0, #0x0 - moveq r1, r5 - ldreq r0, _020D5F30 ; =0x021D5538 - moveq r5, #0x3 - streq r1, [r0, #0x18] - b _020D5ED0 -_020D5E28: - ldr r2, _020D5F3C ; =0x027FFDEA - ldrh r1, [r2, #0x0] - mov r1, r1, lsl #0x19 - movs r1, r1, lsr #0x1f - beq _020D5ED0 - add r1, r3, #0x1 - str r1, [r0, #0x18] - ldrh r0, [r2, #0x0] - bic r0, r0, #0x40 - strh r0, [r2, #0x0] - bl RTCi_WriteRawStatus2Async -_020D5E54: ; 0x020D5E54 - cmp r0, #0x0 - moveq r1, r5 - ldreq r0, _020D5F30 ; =0x021D5538 - moveq r5, #0x3 - streq r1, [r0, #0x18] - b _020D5ED0 -_020D5E6C: - str r5, [r0, #0x18] - b _020D5ED0 -_020D5E74: - ldr r0, _020D5F30 ; =0x021D5538 - mov r1, #0x0 - str r1, [r0, #0x18] - mov r5, #0x4 - b _020D5ED0 -_020D5E88: - ldr r0, _020D5F30 ; =0x021D5538 - mov r1, #0x0 - str r1, [r0, #0x18] - cmp r2, #0x4 - addls pc, pc, r2, lsl #0x2 - b _020D5ECC -_020D5EA0: - b _020D5ECC -_020D5EA4: - b _020D5EB4 -_020D5EA8: - b _020D5EBC -_020D5EAC: - b _020D5EC4 -_020D5EB0: - b _020D5ECC -_020D5EB4: - mov r5, #0x4 - b _020D5ED0 -_020D5EBC: - mov r5, #0x5 - b _020D5ED0 -_020D5EC4: - mov r5, #0x1 - b _020D5ED0 -_020D5ECC: - mov r5, #0x6 -_020D5ED0: - ldr r0, _020D5F30 ; =0x021D5538 - ldr r1, [r0, #0x18] - cmp r1, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - ldr r2, _020D5F30 ; =0x021D5538 - ldr r1, [r0, #0x0] - ldr r4, [r2, #0x4] - cmp r1, #0x0 - movne r1, #0x0 - strne r1, [r0, #0x0] - cmp r4, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldr r1, [r2, #0x10] - mov r3, #0x0 - mov r0, r5 - str r3, [r2, #0x4] - blx r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D5F30: .word 0x021D5538 -_020D5F34: .word 0x027FFDE8 -_020D5F38: .word 0x027FFDEC -_020D5F3C: .word 0x027FFDEA - - arm_func_start RTC_GetDateTimeAsync -RTC_GetDateTimeAsync: ; 0x020D5F40 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl OS_DisableInterrupts - ldr r1, _020D5FCC ; =0x021D5538 - ldr r2, [r1, #0x0] - cmp r2, #0x0 - beq _020D5F80 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r7,lr} - bx lr -_020D5F80: - mov r2, #0x1 - str r2, [r1, #0x0] - bl OS_RestoreInterrupts - ldr r0, _020D5FCC ; =0x021D5538 - mov r2, #0x2 - mov r1, #0x0 - str r2, [r0, #0x14] - str r1, [r0, #0x18] - str r7, [r0, #0x8] - str r6, [r0, #0xc] - str r5, [r0, #0x4] - str r4, [r0, #0x10] - bl RTCi_ReadRawDateTimeAsync -_020D5FB4: ; 0x020D5FB4 - cmp r0, #0x0 - movne r0, #0x0 - moveq r0, #0x3 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020D5FCC: .word 0x021D5538 - - arm_func_start RTC_GetTime -RTC_GetTime: ; 0x020D5FD0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020D600C ; =RtcGetResultCallback - mov r2, #0x0 - bl RTC_GetTimeAsync - ldr r1, _020D6010 ; =0x021D5538 - cmp r0, #0x0 - str r0, [r1, #0x20] - bne _020D5FF8 - bl RtcWaitBusy -_020D5FF8: - ldr r0, _020D6010 ; =0x021D5538 - ldr r0, [r0, #0x20] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D600C: .word RtcGetResultCallback -_020D6010: .word 0x021D5538 - - arm_func_start RTC_GetTimeAsync -RTC_GetTimeAsync: ; 0x020D6014 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl OS_DisableInterrupts - ldr r1, _020D608C ; =0x021D5538 - ldr r2, [r1, #0x0] - cmp r2, #0x0 - beq _020D6048 - bl OS_RestoreInterrupts - mov r0, #0x1 - ldmia sp!, {r4-r6,lr} - bx lr -_020D6048: - mov r2, #0x1 - str r2, [r1, #0x0] - bl OS_RestoreInterrupts - ldr r0, _020D608C ; =0x021D5538 - mov r2, #0x1 - mov r1, #0x0 - str r2, [r0, #0x14] - str r1, [r0, #0x18] - str r6, [r0, #0x8] - str r5, [r0, #0x4] - str r4, [r0, #0x10] - bl RTCi_ReadRawTimeAsync -_020D6078: ; 0x020D6078 - cmp r0, #0x0 - movne r0, #0x0 - moveq r0, #0x3 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020D608C: .word 0x021D5538 - - arm_func_start RTC_GetDate -RTC_GetDate: ; 0x020D6090 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020D60CC ; =RtcGetResultCallback - mov r2, #0x0 - bl RTC_GetDateAsync - ldr r1, _020D60D0 ; =0x021D5538 - cmp r0, #0x0 - str r0, [r1, #0x20] - bne _020D60B8 - bl RtcWaitBusy -_020D60B8: - ldr r0, _020D60D0 ; =0x021D5538 - ldr r0, [r0, #0x20] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D60CC: .word RtcGetResultCallback -_020D60D0: .word 0x021D5538 - - arm_func_start RTC_GetDateAsync -RTC_GetDateAsync: ; 0x020D60D4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl OS_DisableInterrupts - ldr r1, _020D6148 ; =0x021D5538 - ldr r2, [r1, #0x0] - cmp r2, #0x0 - beq _020D6108 - bl OS_RestoreInterrupts - mov r0, #0x1 - ldmia sp!, {r4-r6,lr} - bx lr -_020D6108: - mov r2, #0x1 - str r2, [r1, #0x0] - bl OS_RestoreInterrupts - ldr r0, _020D6148 ; =0x021D5538 - mov r1, #0x0 - str r1, [r0, #0x14] - str r1, [r0, #0x18] - str r6, [r0, #0x8] - str r5, [r0, #0x4] - str r4, [r0, #0x10] - bl RTCi_ReadRawDateAsync -_020D6134: ; 0x020D6134 - cmp r0, #0x0 - movne r0, #0x0 - moveq r0, #0x3 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020D6148: .word 0x021D5538 - - arm_func_start RTC_Init -RTC_Init: ; 0x020D614C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r1, _020D61C8 ; =0x021D5534 - ldrh r0, [r1, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - ldr r0, _020D61CC ; =0x021D5538 - mov r2, #0x0 - mov r3, #0x1 - strh r3, [r1, #0x0] - str r2, [r0, #0x0] - str r2, [r0, #0x4] - str r2, [r0, #0x1c] - str r2, [r0, #0x8] - str r2, [r0, #0xc] - bl PXI_Init - mov r5, #0x5 - mov r4, #0x1 -_020D619C: - mov r0, r5 - mov r1, r4 - bl PXI_IsCallbackReady -_020D61A8: ; 0x020D61A8 - cmp r0, #0x0 - beq _020D619C - ldr r1, _020D61D0 ; =RtcCommonCallback - mov r0, #0x5 - bl PXI_SetFifoRecvCallback - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D61C8: .word 0x021D5534 -_020D61CC: .word 0x021D5538 -_020D61D0: .word RtcCommonCallback - - arm_func_start FUN_020D61D4 -FUN_020D61D4: ; 0x020D61D4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r0, r0, lsl #0x8 - and r1, r0, #0x7f00 - mov r0, #0x5 - mov r2, #0x0 - bl PXI_SendWordByFifo -_020D61F0: ; 0x020D61F0 - cmp r0, #0x0 - movge r0, #0x1 - movlt r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start RTCi_WriteRawStatus2Async -RTCi_WriteRawStatus2Async: - ldr ip, _020D6214 ; =FUN_020D61D4 - mov r0, #0x27 - bx r12 - .balign 4 -_020D6214: .word FUN_020D61D4 - - arm_func_start RTCi_ReadRawTimeAsync -RTCi_ReadRawTimeAsync: - ldr ip, _020D6224 ; =FUN_020D61D4 - mov r0, #0x12 - bx r12 - .balign 4 -_020D6224: .word FUN_020D61D4 - - arm_func_start RTCi_ReadRawDateAsync -RTCi_ReadRawDateAsync: - ldr ip, _020D6234 ; =FUN_020D61D4 - mov r0, #0x11 - bx r12 - .balign 4 -_020D6234: .word FUN_020D61D4 - - arm_func_start RTCi_ReadRawDateTimeAsync -RTCi_ReadRawDateTimeAsync: - ldr ip, _020D6244 ; =FUN_020D61D4 - mov r0, #0x10 - bx r12 - .balign 4 -_020D6244: .word FUN_020D61D4 - - arm_func_start RTC_GetDayOfWeek -RTC_GetDayOfWeek: ; 0x020D6248 - stmdb sp!, {r4-r6,lr} - ldr r1, [r0, #0x4] - ldr r2, [r0, #0x0] - sub r3, r1, #0x2 - cmp r3, #0x1 - add lr, r2, #0x7d0 - ldr r4, _020D630C ; =0x51EB851F - sublt lr, lr, #0x1 - ldr r12, [r0, #0x8] - smull r0, r2, r4, lr - addlt r3, r3, #0xc - mov r1, #0x1a - mul r0, r3, r1 - smull r1, r3, r4, lr - ldr r5, _020D6310 ; =0x66666667 - sub r0, r0, #0x2 - smull r4, r1, r5, r0 - mov r4, lr, lsr #0x1f - mov r2, r2, asr #0x5 - mov r3, r3, asr #0x5 - add r3, r4, r3 - ldr r5, _020D6314 ; =0x00000064 - add r2, r4, r2 - smull r2, r4, r5, r2 - sub r2, lr, r2 - mov r1, r1, asr #0x2 - mov r0, r0, lsr #0x1f - add r1, r0, r1 - mov r4, r2, asr #0x1 - add r0, r12, r1 - add r1, r2, r4, lsr #0x1e - add r2, r2, r0 - mov r6, r3, asr #0x1 - add r0, r3, r6, lsr #0x1e - add r1, r2, r1, asr #0x2 - add r1, r1, r0, asr #0x2 - mov r0, #0x5 - mla r4, r3, r0, r1 - ldr r3, _020D6318 ; =0x92492493 - mov r1, r4, lsr #0x1f - smull r2, r0, r3, r4 - add r0, r4, r0 - mov r0, r0, asr #0x2 - ldr r2, _020D631C ; =0x00000007 - add r0, r1, r0 - smull r0, r1, r2, r0 - sub r0, r4, r0 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020D630C: .word 0x51EB851F -_020D6310: .word 0x66666667 -_020D6314: .word 0x00000064 -_020D6318: .word 0x92492493 -_020D631C: .word 0x00000007 - - arm_func_start RTC_ConvertSecondToDateTime -RTC_ConvertSecondToDateTime: ; 0x020D6320 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r5, r2 - mov r12, #0x0 - mov r4, r3 - subs r2, r5, r12 - sbcs r2, r4, r12 - mov r7, r0 - mov r6, r1 - movlt r5, r12 - movlt r4, r12 - blt _020D6364 - ldr r1, _020D63B0 ; =0xBC19137F - subs r0, r1, r5 - sbcs r0, r12, r4 - movlt r5, r1 - movlt r4, r12 -_020D6364: - ldr r2, _020D63B4 ; =0x00015180 - mov r0, r5 - mov r1, r4 - mov r3, #0x0 - bl _ll_mod - mov r1, r0 - mov r0, r6 - bl RTCi_ConvertSecondToTime - ldr r2, _020D63B4 ; =0x00015180 - mov r0, r5 - mov r1, r4 - mov r3, #0x0 - bl _ll_sdiv - mov r1, r0 - mov r0, r7 - bl RTC_ConvertDayToDate - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020D63B0: .word 0xBC19137F -_020D63B4: .word 0x00015180 - - arm_func_start RTCi_ConvertSecondToTime -RTCi_ConvertSecondToTime: ; 0x020D63B8 - stmdb sp!, {r4-r6,lr} - ldr r2, _020D6448 ; =0x0001517F - cmp r1, #0x0 - movlt r1, #0x0 - cmp r1, r2 - ldr ip, _020D644C ; =0x88888889 - movgt r1, r2 - smull r2, r3, r12, r1 - smull r2, lr, r12, r1 - ldr r5, _020D6450 ; =0x91A2B3C5 - add r3, r1, r3 - smull r4, r2, r5, r1 - mov r5, r1, lsr #0x1f - mov r3, r3, asr #0x5 - add r3, r5, r3 - smull r4, r6, r12, r3 - add lr, r1, lr - mov lr, lr, asr #0x5 - add r6, r3, r6 - add r2, r1, r2 - ldr r4, _020D6454 ; =0x0000003C - add lr, r5, lr - smull r12, lr, r4, lr - sub lr, r1, r12 - mov r2, r2, asr #0xb - mov r6, r6, asr #0x5 - mov r1, r3, lsr #0x1f - add r6, r1, r6 - smull r1, r12, r4, r6 - str lr, [r0, #0x8] - sub r6, r3, r1 - str r6, [r0, #0x4] - add r2, r5, r2 - str r2, [r0, #0x0] - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020D6448: .word 0x0001517F -_020D644C: .word 0x88888889 -_020D6450: .word 0x91A2B3C5 -_020D6454: .word 0x0000003C - - arm_func_start RTC_ConvertDayToDate -RTC_ConvertDayToDate: ; 0x020D6458 - stmdb sp!, {r4,lr} - ldr r2, _020D6560 ; =0x00008EAC - cmp r1, #0x0 - movlt r1, #0x0 - cmp r1, r2 - movgt r1, r2 - ldr r3, _020D6564 ; =0x92492493 - add lr, r1, #0x6 - smull r2, r4, r3, lr - add r4, lr, r4 - mov r4, r4, asr #0x2 - mov r2, lr, lsr #0x1f - ldr ip, _020D6568 ; =0x00000007 - add r4, r2, r4 - smull r2, r3, r12, r4 - sub r4, lr, r2 - ldr r2, _020D656C ; =0x0000016D - ldr r3, _020D6570 ; =0x0000016E - str r4, [r0, #0xc] - mov lr, #0x0 -_020D64A8: - ands r12, lr, #0x3 - moveq r12, r3 - movne r12, r2 - mov r4, r1 - subs r1, r1, r12 - movmi r1, r4 - bmi _020D64D0 - add lr, lr, #0x1 - cmp lr, #0x63 - blo _020D64A8 -_020D64D0: - ldr r2, _020D656C ; =0x0000016D - str lr, [r0, #0x0] - cmp r1, r2 - movgt r1, r2 - ands r2, lr, #0x3 - bne _020D6518 - cmp r1, #0x3c - bge _020D6514 - cmp r1, #0x1f - movlt r2, #0x1 - subge r1, r1, #0x1f - movge r2, #0x2 - str r2, [r0, #0x4] - add r1, r1, #0x1 - str r1, [r0, #0x8] - ldmia sp!, {r4,lr} - bx lr -_020D6514: - sub r1, r1, #0x1 -_020D6518: - ldr r3, _020D6574 ; =0x02106A20 - mov r4, #0xb -_020D6520: - ldr r2, [r3, r4, lsl #0x2] - mov r12, r4, lsl #0x2 - cmp r1, r2 - blt _020D6550 - add r2, r4, #0x1 - str r2, [r0, #0x4] - ldr r2, [r3, r12] - sub r1, r1, r2 - add r1, r1, #0x1 - str r1, [r0, #0x8] - ldmia sp!, {r4,lr} - bx lr -_020D6550: - subs r4, r4, #0x1 - bpl _020D6520 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D6560: .word 0x00008EAC -_020D6564: .word 0x92492493 -_020D6568: .word 0x00000007 -_020D656C: .word 0x0000016D -_020D6570: .word 0x0000016E -_020D6574: .word 0x02106A20 - - arm_func_start RTC_ConvertDateTimeToSecond -RTC_ConvertDateTimeToSecond: ; 0x020D6578 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r1 - bl RTC_ConvertDateToDay - mov r4, r0 - mvn r0, #0x0 - cmp r4, r0 - addeq sp, sp, #0x4 - moveq r1, r0 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - mov r0, r5 - bl RTCi_ConvertTimeToSecond - mvn r2, #0x0 - cmp r0, r2 - moveq r1, r2 - beq _020D65DC - ldr r1, _020D65EC ; =0x00015180 - mov r2, #0x0 - umull r12, r3, r4, r1 - mla r3, r4, r2, r3 - mov r2, r4, asr #0x1f - mla r3, r2, r1, r3 - adds r2, r0, r12 - adc r1, r3, r0, asr #0x1f -_020D65DC: - mov r0, r2 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D65EC: .word 0x00015180 - - arm_func_start RTCi_ConvertTimeToSecond -RTCi_ConvertTimeToSecond: ; 0x020D65F0 - ldr r3, [r0, #0x4] - ldr r2, [r0, #0x0] - mov r1, #0x3c - mla r3, r2, r1, r3 - ldr r0, [r0, #0x8] - mla r0, r3, r1, r0 - bx lr - - arm_func_start RTC_ConvertDateToDay -RTC_ConvertDateToDay: ; 0x020D660C - ldr r3, [r0, #0x0] - cmp r3, #0x64 - bhs _020D665C - ldr r2, [r0, #0x4] - cmp r2, #0x1 - blo _020D665C - cmp r2, #0xc - bhi _020D665C - ldr r1, [r0, #0x8] - cmp r1, #0x1 - blo _020D665C - cmp r1, #0x1f - bhi _020D665C - ldr r0, [r0, #0xc] - cmp r0, #0x7 - bge _020D665C - cmp r2, #0x1 - blo _020D665C - cmp r2, #0xc - bls _020D6664 -_020D665C: - mvn r0, #0x0 - bx lr -_020D6664: - ldr r0, _020D6698 ; =0x02106A1C - sub r1, r1, #0x1 - ldr r0, [r0, r2, lsl #0x2] - cmp r2, #0x3 - add r2, r1, r0 - blo _020D6684 - ands r0, r3, #0x3 - addeq r2, r2, #0x1 -_020D6684: - ldr r0, _020D669C ; =0x0000016D - add r1, r3, #0x3 - mla r0, r3, r0, r2 - add r0, r0, r1, lsr #0x2 - bx lr - .balign 4 -_020D6698: .word 0x02106A1C -_020D669C: .word 0x0000016D diff --git a/arm9/global.inc b/arm9/global.inc index e418ef78..b7c0e641 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -3679,8 +3679,13 @@ .extern RTC_ConvertSecondToDateTime .extern RTC_GetDate .extern RTC_GetDateTimeAsync +.extern RTC_GetDayOfWeek .extern RTC_GetTime .extern RTC_Init +.extern RTCi_ReadRawDateAsync +.extern RTCi_ReadRawDateTimeAsync +.extern RTCi_ReadRawTimeAsync +.extern RTCi_WriteRawStatus2Async .extern RunScriptCommand .extern SDK_AUTOLOAD_DTCM_END .extern SDK_AUTOLOAD_DTCM_START -- cgit v1.2.3 From c8539fd5479e2124849a8b11e1e4b5dca48177b8 Mon Sep 17 00:00:00 2001 From: red031000 Date: Tue, 19 May 2020 00:56:00 +0100 Subject: split libcard --- arm9/arm9.lcf | 7 +- arm9/asm/CARD_backup.s | 358 ++++++++++ arm9/asm/CARD_common.s | 311 +++++++++ arm9/asm/CARD_pullOut.s | 169 +++++ arm9/asm/CARD_request.s | 162 +++++ arm9/asm/CARD_rom.s | 582 ++++++++++++++++ arm9/asm/CARD_spi.s | 223 ++++++ arm9/asm/libcard.s | 1784 ----------------------------------------------- arm9/global.inc | 11 + 9 files changed, 1822 insertions(+), 1785 deletions(-) create mode 100644 arm9/asm/CARD_backup.s create mode 100644 arm9/asm/CARD_common.s create mode 100644 arm9/asm/CARD_pullOut.s create mode 100644 arm9/asm/CARD_request.s create mode 100644 arm9/asm/CARD_rom.s create mode 100644 arm9/asm/CARD_spi.s delete mode 100644 arm9/asm/libcard.s diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index e22f3ba6..6ded2f28 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -221,7 +221,12 @@ SECTIONS { RTC_external.o (.text) RTC_internal.o (.text) RTC_convert.o (.text) - libcard.o (.text) + CARD_common.o (.text) + CARD_spi.o (.text) + CARD_backup.o (.text) + CARD_rom.o (.text) + CARD_request.o (.text) + CARD_pullOut.o (.text) libwm.o (.text) libctrdg.o (.text) libmath.o (.text) diff --git a/arm9/asm/CARD_backup.s b/arm9/asm/CARD_backup.s new file mode 100644 index 00000000..889dcf6d --- /dev/null +++ b/arm9/asm/CARD_backup.s @@ -0,0 +1,358 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start CARD_CancelBackupAsync +CARD_CancelBackupAsync: ; 0x020D6D7C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r1, _020D6DA8 ; =0x021D55C0 + ldr r2, [r1, #0x114] + orr r2, r2, #0x40 + str r2, [r1, #0x114] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D6DA8: .word 0x021D55C0 + + arm_func_start CARD_TryWaitBackupAsync +CARD_TryWaitBackupAsync: ; 0x020D6DAC + ldr ip, _020D6DB4 ; =FUN_020D6714 + bx r12 + .balign 4 +_020D6DB4: .word FUN_020D6714 + + arm_func_start CARD_WaitBackupAsync +CARD_WaitBackupAsync: ; 0x020D6DB8 + ldr ip, _020D6DC0 ; =CARDi_WaitAsync + bx r12 + .balign 4 +_020D6DC0: .word CARDi_WaitAsync + + .extern _SDK_NintendoBackup + + arm_func_start CARD_IdentifyBackup +CARD_IdentifyBackup: ; 0x020D6DC4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r0, _020D6F00 ; =_SDK_NintendoBackup + ldr r7, _020D6F04 ; =0x021D55C0 + bl OSi_ReferSymbol +_020D6DDC: ; 0x020D6DDC + cmp r5, #0x0 + bne _020D6DE8 + bl OS_Terminate +_020D6DE8: + bl CARD_CheckEnabled + bl OS_DisableInterrupts + ldr r1, [r7, #0x114] + mov r4, r0 + ands r0, r1, #0x4 + beq _020D6E18 + add r6, r7, #0x10c +_020D6E04: + mov r0, r6 + bl OS_SleepThread + ldr r0, [r7, #0x114] + ands r0, r0, #0x4 + bne _020D6E04 +_020D6E18: + ldr r0, [r7, #0x114] + mov r1, #0x0 + orr r0, r0, #0x4 + str r0, [r7, #0x114] + str r1, [r7, #0x38] + mov r0, r4 + str r1, [r7, #0x3c] + bl OS_RestoreInterrupts + mov r0, r5 + bl CARDi_IdentifyBackupCore + ldr r0, _020D6F08 ; =0x021D3498 + ldr r1, _020D6F04 ; =0x021D55C0 + ldr r2, [r0, #0x4] + mov r0, r7 + str r2, [r1, #0x104] + mov r1, #0x2 + mov r2, #0x1 + bl CARDi_Request +_020D6E60: ; 0x020D6E60 + ldr r0, [r7, #0x0] + mov r1, #0x0 + str r1, [r0, #0xc] + ldr r0, [r7, #0x0] + add r1, r7, #0x120 + str r1, [r0, #0x10] + ldr r1, [r7, #0x0] + mov r2, #0x1 + mov r0, r7 + str r2, [r1, #0x14] + mov r1, #0x6 + bl CARDi_Request + ldr r6, [r7, #0x38] + ldr r5, [r7, #0x3c] + bl OS_DisableInterrupts + mov r4, r0 + ldr r1, [r7, #0x114] + add r0, r7, #0x10c + bic r1, r1, #0x4c + str r1, [r7, #0x114] + bl OS_WakeupThread + ldr r0, [r7, #0x114] + ands r0, r0, #0x10 + beq _020D6EC8 + add r0, r7, #0x44 + bl OS_WakeupThreadDirect +_020D6EC8: + mov r0, r4 + bl OS_RestoreInterrupts +_020D6ED0: ; 0x020D6ED0 + cmp r6, #0x0 + beq _020D6EE0 + mov r0, r5 + blx r6 +_020D6EE0: + ldr r0, [r7, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D6F00: .word _SDK_NintendoBackup +_020D6F04: .word 0x021D55C0 +_020D6F08: .word 0x021D3498 + + arm_func_start CARD_GetBackupSectorSize +CARD_GetBackupSectorSize: ; 0x020D6F0C + ldr r0, _020D6F1C ; =0x021D55C0 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x1c] + bx lr + .balign 4 +_020D6F1C: .word 0x021D55C0 + + arm_func_start CARDi_RequestStreamCommand +CARDi_RequestStreamCommand: ; 0x020D6F20 + stmdb sp!, {r4-r10,lr} + mov r10, r0 + ldr r6, _020D7004 ; =0x021D55C0 + ldr r0, _020D7008 ; =_SDK_NintendoBackup + mov r9, r1 + mov r8, r2 + mov r7, r3 + bl OSi_ReferSymbol + bl OS_DisableInterrupts + ldr r1, [r6, #0x114] + mov r5, r0 + ands r0, r1, #0x4 + beq _020D6F6C + add r4, r6, #0x10c +_020D6F58: + mov r0, r4 + bl OS_SleepThread + ldr r0, [r6, #0x114] + ands r0, r0, #0x4 + bne _020D6F58 +_020D6F6C: + ldr r0, [r6, #0x114] + ldr r1, [sp, #0x20] + orr r0, r0, #0x4 + str r0, [r6, #0x114] + str r7, [r6, #0x38] + mov r0, r5 + str r1, [r6, #0x3c] + bl OS_RestoreInterrupts + str r10, [r6, #0x1c] + str r9, [r6, #0x20] + ldr r0, [sp, #0x24] + ldr r1, [sp, #0x28] + str r8, [r6, #0x24] + ldr r2, [sp, #0x2c] + str r1, [r6, #0x2c] + ldr r1, [sp, #0x30] + str r2, [r6, #0x30] + str r1, [r6, #0x34] + cmp r0, #0x0 + beq _020D6FD0 + ldr r0, _020D700C ; =CARDi_RequestStreamCommandCore + bl CARDi_SetTask + mov r0, #0x1 + ldmia sp!, {r4-r10,lr} + bx lr +_020D6FD0: + ldr r0, _020D7010 ; =0x021D3498 + ldr r1, _020D7004 ; =0x021D55C0 + ldr r2, [r0, #0x4] + mov r0, r6 + str r2, [r1, #0x104] + bl CARDi_RequestStreamCommandCore +_020D6FE8: ; 0x020D6FE8 + ldr r0, [r6, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + ldmia sp!, {r4-r10,lr} + bx lr + .balign 4 +_020D7004: .word 0x021D55C0 +_020D7008: .word _SDK_NintendoBackup +_020D700C: .word CARDi_RequestStreamCommandCore +_020D7010: .word 0x021D3498 + + arm_func_start CARDi_RequestStreamCommandCore +CARDi_RequestStreamCommandCore: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r9, r0 + ldr r8, [r9, #0x2c] + ldr r0, _020D720C ; =_SDK_NintendoBackup + ldr r7, [r9, #0x34] + ldr r10, [r9, #0x30] + mov r6, #0x100 + bl OSi_ReferSymbol + cmp r8, #0xb + bne _020D7048 + bl CARD_GetBackupSectorSize + mov r6, r0 +_020D7048: + mov r0, #0x1 + add r4, r9, #0x120 + mov r11, #0x9 + str r0, [sp, #0x0] +_020D7058: + ldr r5, [r9, #0x24] + ldr r0, [r9, #0x0] + cmp r6, r5 + movcc r5, r6 + str r5, [r0, #0x14] + ldr r0, [r9, #0x114] + ands r0, r0, #0x40 + beq _020D7094 + ldr r0, [r9, #0x114] + mov r1, #0x7 + bic r0, r0, #0x40 + str r0, [r9, #0x114] + ldr r0, [r9, #0x0] + str r1, [r0, #0x0] + b _020D71A8 +_020D7094: + cmp r7, #0x3 + addls pc, pc, r7, lsl #0x2 + b _020D7124 +_020D70A0: + b _020D70B0 +_020D70A4: + b _020D70D4 +_020D70A8: + b _020D70D4 +_020D70AC: + b _020D710C +_020D70B0: + mov r1, r5 + add r0, r9, #0x120 + bl DC_InvalidateRange + ldr r1, [r9, #0x1c] + ldr r0, [r9, #0x0] + str r1, [r0, #0xc] + ldr r0, [r9, #0x0] + str r4, [r0, #0x10] + b _020D7124 +_020D70D4: + ldr r0, [r9, #0x1c] + mov r1, r4 + mov r2, r5 + bl MI_CpuCopy8 + mov r1, r5 + add r0, r9, #0x120 + bl DC_FlushRange + bl DC_WaitWriteBufferEmpty +_020D70F4: ; 0x020D70F4 + ldr r0, [r9, #0x0] + str r4, [r0, #0xc] + ldr r1, [r9, #0x20] + ldr r0, [r9, #0x0] + str r1, [r0, #0x10] + b _020D7124 +_020D710C: + ldr r1, [r9, #0x1c] + ldr r0, [r9, #0x0] + str r1, [r0, #0xc] + ldr r1, [r9, #0x20] + ldr r0, [r9, #0x0] + str r1, [r0, #0x10] +_020D7124: + mov r0, r9 + mov r1, r8 + mov r2, r10 + bl CARDi_Request +_020D7134: ; 0x020D7134 + cmp r0, #0x0 + beq _020D71A8 + cmp r7, #0x2 + bne _020D7160 + ldr r2, [sp, #0x0] + mov r0, r9 + mov r1, r11 + bl CARDi_Request +_020D7154: ; 0x020D7154 + cmp r0, #0x0 + bne _020D7178 + b _020D71A8 +_020D7160: + cmp r7, #0x0 + bne _020D7178 + ldr r1, [r9, #0x20] + mov r2, r5 + add r0, r9, #0x120 + bl MI_CpuCopy8 +_020D7178: + ldr r0, [r9, #0x1c] + add r0, r0, r5 + str r0, [r9, #0x1c] + ldr r0, [r9, #0x20] + add r0, r0, r5 + str r0, [r9, #0x20] + ldr r0, [r9, #0x24] + sub r0, r0, r5 + str r0, [r9, #0x24] + ldr r0, [r9, #0x24] + cmp r0, #0x0 + bne _020D7058 +_020D71A8: + ldr r6, [r9, #0x38] + ldr r5, [r9, #0x3c] + bl OS_DisableInterrupts + ldr r1, [r9, #0x114] + mov r4, r0 + bic r0, r1, #0x4c + str r0, [r9, #0x114] + add r0, r9, #0x10c + bl OS_WakeupThread + ldr r0, [r9, #0x114] + ands r0, r0, #0x10 + beq _020D71E0 + add r0, r9, #0x44 + bl OS_WakeupThreadDirect +_020D71E0: + mov r0, r4 + bl OS_RestoreInterrupts +_020D71E8: ; 0x020D71E8 + cmp r6, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + mov r0, r5 + blx r6 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020D720C: .word _SDK_NintendoBackup diff --git a/arm9/asm/CARD_common.s b/arm9/asm/CARD_common.s new file mode 100644 index 00000000..3c33562d --- /dev/null +++ b/arm9/asm/CARD_common.s @@ -0,0 +1,311 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start CARD_UnlockBackup +CARD_UnlockBackup: ; 0x020D66A0 + ldr ip, _020D66AC ; =CARDi_UnlockResource + mov r1, #0x2 + bx r12 + .balign 4 +_020D66AC: .word CARDi_UnlockResource + + arm_func_start CARD_LockBackup +CARD_LockBackup: ; 0x020D66B0 + ldr ip, _020D66BC ; =CARDi_LockResource + mov r1, #0x2 + bx r12 + .balign 4 +_020D66BC: .word CARDi_LockResource + + arm_func_start CARD_UnlockRom +CARD_UnlockRom: ; 0x020D66C0 + stmdb sp!, {r4,lr} + mov r4, r0 + bl OS_UnlockCard + mov r0, r4 + mov r1, #0x1 + bl CARDi_UnlockResource + ldmia sp!, {r4,lr} + bx lr + + arm_func_start CARD_LockRom +CARD_LockRom: ; 0x020D66E0 + stmdb sp!, {r4,lr} + mov r4, r0 + mov r1, #0x1 + bl CARDi_LockResource + mov r0, r4 + bl OS_TryLockCard + ldmia sp!, {r4,lr} + bx lr + + arm_func_start CARD_GetResultCode +CARD_GetResultCode: ; 0x020D6700 + ldr r0, _020D6710 ; =0x021D55C0 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020D6710: .word 0x021D55C0 + +;CARDi_TryWaitAsync? + arm_func_start FUN_020D6714 +FUN_020D6714: ; 0x020D6714 + ldr r0, _020D672C ; =0x021D55C0 + ldr r0, [r0, #0x114] + ands r0, r0, #0x4 + moveq r0, #0x1 + movne r0, #0x0 + bx lr + .balign 4 +_020D672C: .word 0x021D55C0 + + arm_func_start CARDi_WaitAsync +CARDi_WaitAsync: ; 0x020D6730 + stmdb sp!, {r4-r6,lr} + ldr r6, _020D6788 ; =0x021D55C0 + bl OS_DisableInterrupts + ldr r1, [r6, #0x114] + mov r5, r0 + ands r0, r1, #0x4 + beq _020D6764 + add r4, r6, #0x10c +_020D6750: + mov r0, r4 + bl OS_SleepThread + ldr r0, [r6, #0x114] + ands r0, r0, #0x4 + bne _020D6750 +_020D6764: + mov r0, r5 + bl OS_RestoreInterrupts +_020D676C: ; 0x020D676C + ldr r0, [r6, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D6788: .word 0x021D55C0 + + arm_func_start CARD_Enable +CARD_Enable: ; 0x020D678C + ldr r1, _020D6798 ; =0x021D555C + str r0, [r1, #0x0] + bx lr + .balign 4 +_020D6798: .word 0x021D555C + + arm_func_start CARD_CheckEnabled +CARD_CheckEnabled: ; 0x020D679C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl CARD_IsEnabled +_020D67A8: ; 0x020D67A8 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start CARD_IsEnabled +CARD_IsEnabled: + ldr r0, _020D67D4 ; =0x021D555C + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020D67D4: .word 0x021D555C + + arm_func_start CARDi_InitCommon +CARDi_InitCommon: ; 0x020D67D8 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + ldr r4, _020D68B8 ; =0x021D55C0 + ldr r1, _020D68BC ; =0x021D5560 + mvn r2, #0x2 + mov r0, #0x0 + str r2, [r4, #0x8] + mov r2, #0x60 + str r0, [r4, #0xc] + str r0, [r4, #0x18] + str r1, [r4, #0x0] + bl MIi_CpuClearFast + ldr r0, _020D68BC ; =0x021D5560 + mov r1, #0x60 + bl DC_FlushRange + ldr r0, _020D68C0 ; =0x027FFC40 + ldrh r0, [r0, #0x0] + cmp r0, #0x2 + beq _020D6834 + ldr r0, _020D68C4 ; =0x027FFE00 + ldr r1, _020D68C8 ; =0x027FFA80 + mov r2, #0x160 + bl MI_CpuCopy8 +_020D6834: + mov r2, #0x0 + str r2, [r4, #0x14] + ldr r0, [r4, #0x14] + mov r1, #0x4 + str r0, [r4, #0x10] + str r2, [r4, #0x110] + ldr r3, [r4, #0x110] + mov r0, #0x400 + str r3, [r4, #0x10c] + str r1, [r4, #0x108] + str r0, [sp, #0x0] + ldr r12, [r4, #0x108] + ldr r1, _020D68CC ; =CARDi_TaskThread + ldr r3, _020D68D0 ; =0x021D5BE0 + add r0, r4, #0x44 + str r12, [sp, #0x4] + bl OS_CreateThread + add r0, r4, #0x44 + bl OS_WakeupThreadDirect + ldr r1, _020D68D4 ; =CARDi_OnFifoRecv + mov r0, #0xb + bl PXI_SetFifoRecvCallback + ldr r0, _020D68C0 ; =0x027FFC40 + ldrh r0, [r0, #0x0] + cmp r0, #0x2 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4,lr} + bxeq lr + mov r0, #0x1 + bl CARD_Enable + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D68B8: .word 0x021D55C0 +_020D68BC: .word 0x021D5560 +_020D68C0: .word 0x027FFC40 +_020D68C4: .word 0x027FFE00 +_020D68C8: .word 0x027FFA80 +_020D68CC: .word CARDi_TaskThread +_020D68D0: .word 0x021D5BE0 +_020D68D4: .word CARDi_OnFifoRecv + + arm_func_start CARDi_UnlockResource +CARDi_UnlockResource: ; 0x020D68D8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r5, _020D6978 ; =0x021D55C0 + mov r7, r0 + mov r6, r1 + bl OS_DisableInterrupts + mov r1, r5 + mov r4, r0 + ldr r0, [r1, #0x8] + cmp r0, r7 + bne _020D6910 + ldr r0, [r5, #0xc] + cmp r0, #0x0 + bne _020D6918 +_020D6910: + bl OS_Terminate + b _020D6958 +_020D6918: + ldr r0, [r5, #0x18] + cmp r0, r6 + beq _020D6928 + bl OS_Terminate +_020D6928: + ldr r0, [r5, #0xc] + sub r0, r0, #0x1 + str r0, [r5, #0xc] + ldr r0, [r5, #0xc] + cmp r0, #0x0 + bne _020D6958 + mvn r0, #0x2 + str r0, [r5, #0x8] + mov r1, #0x0 + add r0, r5, #0x10 + str r1, [r5, #0x18] + bl OS_WakeupThread +_020D6958: + ldr r1, [r5, #0x0] + mov r2, #0x0 + mov r0, r4 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D6978: .word 0x021D55C0 + + arm_func_start CARDi_LockResource +CARDi_LockResource: ; 0x020D697C + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + ldr r5, _020D6A14 ; =0x021D55C0 + mov r7, r0 + mov r6, r1 + bl OS_DisableInterrupts + ldr r1, [r5, #0x8] + mov r4, r0 + cmp r1, r7 + bne _020D69B8 + ldr r0, [r5, #0x18] + cmp r0, r6 + beq _020D69E8 + bl OS_Terminate + b _020D69E8 +_020D69B8: + ldr r0, [r5, #0x8] + mvn r8, #0x2 + cmp r0, r8 + beq _020D69E0 + add r9, r5, #0x10 +_020D69CC: + mov r0, r9 + bl OS_SleepThread + ldr r0, [r5, #0x8] + cmp r0, r8 + bne _020D69CC +_020D69E0: + str r7, [r5, #0x8] + str r6, [r5, #0x18] +_020D69E8: + ldr r1, [r5, #0xc] + mov r0, r4 + add r1, r1, #0x1 + str r1, [r5, #0xc] + ldr r1, [r5, #0x0] + mov r2, #0x0 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020D6A14: .word 0x021D55C0 + + arm_func_start CARDi_SetTask +CARDi_SetTask: ; 0x020D6A18 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r4, _020D6A5C ; =0x021D55C0 + mov r5, r0 + ldr r1, [r4, #0x108] + add r0, r4, #0x44 + bl OS_SetThreadPriority + add r0, r4, #0x44 + str r0, [r4, #0x104] + str r5, [r4, #0x40] + ldr r1, [r4, #0x114] + orr r1, r1, #0x8 + str r1, [r4, #0x114] + bl OS_WakeupThreadDirect + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D6A5C: .word 0x021D55C0 diff --git a/arm9/asm/CARD_pullOut.s b/arm9/asm/CARD_pullOut.s new file mode 100644 index 00000000..662ef075 --- /dev/null +++ b/arm9/asm/CARD_pullOut.s @@ -0,0 +1,169 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start CARDi_SendtoPxi +CARDi_SendtoPxi: ; 0x020D7BCC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r1, r7 + mov r0, #0xe + mov r2, #0x0 + bl PXI_SendWordByFifo +_020D7BEC: ; 0x020D7BEC + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r5, #0xe + mov r4, #0x0 +_020D7C04: + mov r0, r6 + bl SVC_WaitByLoop + mov r0, r5 + mov r1, r7 + mov r2, r4 + bl PXI_SendWordByFifo +_020D7C1C: ; 0x020D7C1C + cmp r0, #0x0 + bne _020D7C04 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start CARDi_CheckPulledOutCore +CARDi_CheckPulledOutCore: + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + ldr r1, _020D7C94 ; =0x027FFC10 + ldrh r1, [r1, #0x0] + cmp r1, #0x0 + ldreq r1, _020D7C98 ; =0x027FF800 + ldrne r1, _020D7C9C ; =0x027FFC00 + ldr r1, [r1, #0x0] + str r1, [sp, #0x0] + ldr r1, [sp, #0x0] + cmp r0, r1 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4,lr} + bxeq lr + bl OS_DisableInterrupts + mov r4, r0 + mov r0, #0xe + mov r1, #0x11 + mov r2, #0x0 + bl CARDi_PulledOutCallback + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D7C94: .word 0x027FFC10 +_020D7C98: .word 0x027FF800 +_020D7C9C: .word 0x027FFC00 + + arm_func_start CARD_TerminateForPulledOut +CARD_TerminateForPulledOut: ; 0x020D7CA0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020D7D10 ; =0x027FFFA8 + mov r5, #0x1 + ldrh r0, [r0, #0x0] + and r0, r0, #0x8000 + movs r0, r0, asr #0xf + beq _020D7CEC + bl PM_ForceToPowerOff + cmp r0, #0x4 + bne _020D7CE4 + ldr r4, _020D7D14 ; =0x000A3A47 +_020D7CD0: + mov r0, r4 + bl OS_SpinWait + bl PM_ForceToPowerOff + cmp r0, #0x4 + beq _020D7CD0 +_020D7CE4: + cmp r0, #0x0 + moveq r5, #0x0 +_020D7CEC: + cmp r5, #0x0 + beq _020D7D00 + mov r0, #0x1 + mov r1, r0 + bl CARDi_SendtoPxi +_020D7D00: + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D7D10: .word 0x027FFFA8 +_020D7D14: .word 0x000A3A47 + + arm_func_start CARD_IsPulledOut +CARD_IsPulledOut: ; 0x020D7D18 + ldr r0, _020D7D24 ; =0x021D5E20 + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020D7D24: .word 0x021D5E20 + + arm_func_start CARDi_PulledOutCallback +CARDi_PulledOutCallback: ; 0x020D7D28 + stmdb sp!, {lr} + sub sp, sp, #0x4 + and r0, r1, #0x3f + cmp r0, #0x11 + bne _020D7D90 + ldr r2, _020D7DA0 ; =0x021D5E20 + ldr r0, [r2, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r1, _020D7DA4 ; =0x021D5E24 + mov r0, #0x1 + ldr r1, [r1, #0x0] + str r0, [r2, #0x0] + cmp r1, #0x0 + beq _020D7D70 + blx r1 +_020D7D70: + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + bl CARD_TerminateForPulledOut + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020D7D90: + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D7DA0: .word 0x021D5E20 +_020D7DA4: .word 0x021D5E24 + + arm_func_start CARD_InitPulledOutCallback +CARD_InitPulledOutCallback: ; 0x020D7DA8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl PXI_Init + ldr r1, _020D7DD8 ; =CARDi_PulledOutCallback + mov r0, #0xe + bl PXI_SetFifoRecvCallback + ldr r0, _020D7DDC ; =0x021D5E24 + mov r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D7DD8: .word CARDi_PulledOutCallback +_020D7DDC: .word 0x021D5E24 diff --git a/arm9/asm/CARD_request.s b/arm9/asm/CARD_request.s new file mode 100644 index 00000000..bb9c32a9 --- /dev/null +++ b/arm9/asm/CARD_request.s @@ -0,0 +1,162 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start CARDi_Request +CARDi_Request: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r6, r0 + ldr r0, [r6, #0x114] + mov r5, r1 + mov r4, r2 + ands r0, r0, #0x2 + bne _020D7A44 + ldr r1, [r6, #0x114] + mov r0, #0xb + orr r2, r1, #0x2 + mov r1, #0x1 + str r2, [r6, #0x114] + bl PXI_IsCallbackReady +_020D7A04: ; 0x020D7A04 + cmp r0, #0x0 + bne _020D7A34 + mov r9, #0x64 + mov r8, #0xb + mov r7, #0x1 +_020D7A18: + mov r0, r9 + bl OS_SpinWait + mov r0, r8 + mov r1, r7 + bl PXI_IsCallbackReady +_020D7A2C: ; 0x020D7A2C + cmp r0, #0x0 + beq _020D7A18 +_020D7A34: + mov r0, r6 + mov r1, #0x0 + mov r2, #0x1 + bl CARDi_Request +_020D7A44: + ldr r0, [r6, #0x0] + mov r1, #0x60 + bl DC_FlushRange + bl DC_WaitWriteBufferEmpty + mov r9, #0xb + mov r8, #0x1 + mov r7, #0x0 + mov r11, #0x60 +_020D7A64: + str r5, [r6, #0x4] + ldr r0, [r6, #0x114] + orr r0, r0, #0x20 + str r0, [r6, #0x114] +_020D7A74: + mov r0, r9 + mov r1, r5 + mov r2, r8 + bl PXI_SendWordByFifo +_020D7A84: ; 0x020D7A84 + cmp r0, #0x0 + blt _020D7A74 + cmp r5, #0x0 + bne _020D7AB0 + ldr r10, [r6, #0x0] +_020D7A98: + mov r0, r9 + mov r1, r10 + mov r2, r8 + bl PXI_SendWordByFifo +_020D7AA8: ; 0x020D7AA8 + cmp r0, #0x0 + blt _020D7A98 +_020D7AB0: + bl OS_DisableInterrupts + ldr r1, [r6, #0x114] + mov r10, r0 + ands r0, r1, #0x20 + beq _020D7AD8 +_020D7AC4: + mov r0, r7 + bl OS_SleepThread + ldr r0, [r6, #0x114] + ands r0, r0, #0x20 + bne _020D7AC4 +_020D7AD8: + mov r0, r10 + bl OS_RestoreInterrupts +_020D7AE0: ; 0x020D7AE0 + ldr r0, [r6, #0x0] + mov r1, r11 + bl DC_InvalidateRange +_020D7AEC: ; 0x020D7AEC + ldr r0, [r6, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x4 + bne _020D7B08 + sub r4, r4, #0x1 + cmp r4, #0x0 + bgt _020D7A64 +_020D7B08: + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start CARDi_TaskThread +CARDi_TaskThread: ; 0x020D7B20 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r5, _020D7B78 ; =0x021D55C0 + mov r6, #0x0 + add r7, r5, #0x44 +_020D7B34: + bl OS_DisableInterrupts + ldr r1, [r5, #0x114] + mov r4, r0 + ands r0, r1, #0x8 + bne _020D7B60 +_020D7B48: + mov r0, r6 + str r7, [r5, #0x104] + bl OS_SleepThread + ldr r0, [r5, #0x114] + ands r0, r0, #0x8 + beq _020D7B48 +_020D7B60: + mov r0, r4 + bl OS_RestoreInterrupts + ldr r1, [r5, #0x40] + mov r0, r5 + blx r1 + b _020D7B34 + .balign 4 +_020D7B78: .word 0x021D55C0 + + arm_func_start CARDi_OnFifoRecv +CARDi_OnFifoRecv: ; 0x020D7B7C + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0xb + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + cmp r2, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + ldr r1, _020D7BC8 ; =0x021D55C0 + ldr r0, [r1, #0x114] + bic r0, r0, #0x20 + str r0, [r1, #0x114] + ldr r0, [r1, #0x104] + bl OS_WakeupThreadDirect + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D7BC8: .word 0x021D55C0 diff --git a/arm9/asm/CARD_rom.s b/arm9/asm/CARD_rom.s new file mode 100644 index 00000000..0f38e283 --- /dev/null +++ b/arm9/asm/CARD_rom.s @@ -0,0 +1,582 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start CARDi_GetRomAccessor +CARDi_GetRomAccessor: ; 0x020D7210 + ldr r0, _020D7218 ; =CARDi_ReadCard + bx lr + .balign 4 +_020D7218: .word CARDi_ReadCard + + arm_func_start CARD_WaitRomAsync +CARD_WaitRomAsync: ; 0x020D721C + ldr ip, _020D7224 ; =CARDi_WaitAsync + bx r12 + .balign 4 +_020D7224: .word CARDi_WaitAsync + + arm_func_start CARD_Init +CARD_Init: ; 0x020D7228 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr ip, _020D72A0 ; =0x021D55C0 + ldr r0, [r12, #0x114] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + mov r0, #0x1 + str r0, [r12, #0x114] + mov r3, #0x0 + str r3, [r12, #0x24] + ldr r0, [r12, #0x24] + mvn r1, #0x0 + str r0, [r12, #0x20] + ldr r2, [r12, #0x20] + ldr r0, _020D72A4 ; =0x021D5BE0 + str r2, [r12, #0x1c] + str r1, [r12, #0x28] + str r3, [r12, #0x38] + str r3, [r12, #0x3c] + str r3, [r0, #0x0] + bl CARDi_InitCommon + bl CARDi_GetRomAccessor + ldr r1, _020D72A8 ; =0x021D5C00 + str r0, [r1, #0x0] + bl CARD_InitPulledOutCallback + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D72A0: .word 0x021D55C0 +_020D72A4: .word 0x021D5BE0 +_020D72A8: .word 0x021D5C00 + + arm_func_start CARDi_ReadRom +CARDi_ReadRom: ; 0x020D72AC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldr r6, _020D73C0 ; =0x021D55C0 + mov r10, r0 + mov r9, r1 + mov r8, r2 + mov r7, r3 + ldr fp, _020D73C4 ; =0x021D5C00 + bl CARD_CheckEnabled + bl OS_DisableInterrupts + ldr r1, [r6, #0x114] + mov r5, r0 + ands r0, r1, #0x4 + beq _020D72FC + add r4, r6, #0x10c +_020D72E8: + mov r0, r4 + bl OS_SleepThread + ldr r0, [r6, #0x114] + ands r0, r0, #0x4 + bne _020D72E8 +_020D72FC: + ldr r1, [r6, #0x114] + ldr r0, [sp, #0x28] + orr r1, r1, #0x4 + str r1, [r6, #0x114] + ldr r1, [sp, #0x2c] + str r0, [r6, #0x38] + mov r0, r5 + str r1, [r6, #0x3c] + bl OS_RestoreInterrupts + ldr r0, _020D73C8 ; =0x021D5BE0 + str r10, [r6, #0x28] + ldr r0, [r0, #0x0] + cmp r10, #0x3 + add r0, r9, r0 + str r0, [r6, #0x1c] + str r8, [r6, #0x20] + str r7, [r6, #0x24] + bhi _020D734C + mov r0, r10 + bl MI_StopDma +_020D734C: + mov r0, r11 + bl CARDi_TryReadCardDma +_020D7354: ; 0x020D7354 + cmp r0, #0x0 + beq _020D7380 + ldr r0, [sp, #0x30] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r11,lr} + bxne lr + bl CARD_WaitRomAsync + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr +_020D7380: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + beq _020D73A0 + ldr r0, _020D73CC ; =CARDi_ReadRomSyncCore + bl CARDi_SetTask + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr +_020D73A0: + ldr r1, _020D73D0 ; =0x021D3498 + mov r0, r6 + ldr r1, [r1, #0x4] + str r1, [r6, #0x104] + bl CARDi_ReadRomSyncCore + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020D73C0: .word 0x021D55C0 +_020D73C4: .word 0x021D5C00 +_020D73C8: .word 0x021D5BE0 +_020D73CC: .word CARDi_ReadRomSyncCore +_020D73D0: .word 0x021D3498 + + arm_func_start CARDi_ReadRomSyncCore +CARDi_ReadRomSyncCore: ; 0x020D73D4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r4, _020D7478 ; =0x021D5C00 + mov r0, r4 + bl CARDi_ReadFromCache +_020D73E8: ; 0x020D73E8 + cmp r0, #0x0 + beq _020D73FC + ldr r1, [r4, #0x0] + mov r0, r4 + blx r1 +_020D73FC: + ldr r7, _020D747C ; =0x021D55C0 + bl CARDi_ReadRomIDCore + bl CARDi_CheckPulledOutCore +_020D7408: ; 0x020D7408 + ldr r0, [r7, #0x0] + mov r1, #0x0 + str r1, [r0, #0x0] + ldr r6, [r7, #0x38] + ldr r5, [r7, #0x3c] + bl OS_DisableInterrupts + ldr r1, [r7, #0x114] + mov r4, r0 + bic r0, r1, #0x4c + str r0, [r7, #0x114] + add r0, r7, #0x10c + bl OS_WakeupThread + ldr r0, [r7, #0x114] + ands r0, r0, #0x10 + beq _020D744C + add r0, r7, #0x44 + bl OS_WakeupThreadDirect +_020D744C: + mov r0, r4 + bl OS_RestoreInterrupts +_020D7454: ; 0x020D7454 + cmp r6, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r5 + blx r6 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D7478: .word 0x021D5C00 +_020D747C: .word 0x021D55C0 + + arm_func_start CARDi_ReadRomIDCore +CARDi_ReadRomIDCore: ; 0x020D7480 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r0, #0xb8000000 + mov r1, #0x0 + bl CARDi_SetRomOp + ldr r1, _020D74DC ; =0x02106A50 + mov r0, #0x2000 + ldr r1, [r1, #0x0] + rsb r0, r0, #0x0 + ldr r2, [r1, #0x60] + ldr r1, _020D74E0 ; =0x040001A4 + bic r2, r2, #0x7000000 + orr r2, r2, #0xa7000000 + and r0, r2, r0 + str r0, [r1, #0x0] +_020D74BC: + ldr r0, [r1, #0x0] + ands r0, r0, #0x800000 + beq _020D74BC + ldr r0, _020D74E4 ; =0x04100010 + ldr r0, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D74DC: .word 0x02106A50 +_020D74E0: .word 0x040001A4 +_020D74E4: .word 0x04100010 + + arm_func_start CARDi_ReadCard +CARDi_ReadCard: ; 0x020D74E8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r10, r0 + ldr sb, _020D75DC ; =0x021D55C0 + add r7, r10, #0x20 + ldr r5, _020D75E0 ; =0x04100010 + ldr r6, _020D75E4 ; =0x040001A4 + mov r11, #0x0 + mov r0, #0x200 + rsb r4, r0, #0x0 +_020D7510: + ldr r0, [r9, #0x1c] + and r1, r0, r4 + cmp r1, r0 + bne _020D7538 + ldr r8, [r9, #0x20] + ands r0, r8, #0x3 + bne _020D7538 + ldr r0, [r9, #0x24] + cmp r0, #0x200 + bhs _020D7540 +_020D7538: + mov r8, r7 + str r1, [r10, #0x8] +_020D7540: + mov r0, r1, lsr #0x8 + orr r0, r0, #0xb7000000 + mov r1, r1, lsl #0x18 + bl CARDi_SetRomOp + ldr r1, [r10, #0x4] + mov r0, r11 + str r1, [r6, #0x0] +_020D755C: + ldr r2, [r6, #0x0] + ands r1, r2, #0x800000 + beq _020D7578 + ldr r1, [r5, #0x0] + cmp r0, #0x200 + strcc r1, [r8, r0, lsl #0x2] + addcc r0, r0, #0x1 +_020D7578: + ands r1, r2, #0x80000000 + bne _020D755C + ldr r0, [r9, #0x20] + cmp r8, r0 + bne _020D75C0 + ldr r2, [r9, #0x1c] + ldr r1, [r9, #0x20] + ldr r0, [r9, #0x24] + add r2, r2, #0x200 + add r1, r1, #0x200 + subs r0, r0, #0x200 + str r2, [r9, #0x1c] + str r1, [r9, #0x20] + str r0, [r9, #0x24] + bne _020D7510 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr +_020D75C0: + mov r0, r10 + bl CARDi_ReadFromCache +_020D75C8: ; 0x020D75C8 + cmp r0, #0x0 + bne _020D7510 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020D75DC: .word 0x021D55C0 +_020D75E0: .word 0x04100010 +_020D75E4: .word 0x040001A4 + + arm_func_start CARDi_TryReadCardDma +CARDi_TryReadCardDma: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldr fp, _020D7748 ; =0x021D55C0 + mov r7, #0x0 + ldr r9, [r11, #0x20] + mov r10, r0 + mov r6, r7 + mov r5, r7 + mov r1, r7 + ands r4, r9, #0x1f + ldr r8, [r11, #0x24] + bne _020D7624 + ldr r0, [r11, #0x28] + cmp r0, #0x3 + movls r1, #0x1 +_020D7624: + cmp r1, #0x0 + beq _020D7678 + bl OS_GetDTCMAddress + ldr r1, _020D774C ; =0x01FF8000 + add r2, r9, r8 + cmp r2, r1 + mov r3, #0x1 + mov r1, #0x0 + bls _020D7650 + cmp r9, #0x2000000 + movcc r1, r3 +_020D7650: + cmp r1, #0x0 + bne _020D7670 + cmp r0, r2 + bhs _020D766C + add r0, r0, #0x4000 + cmp r0, r9 + bhi _020D7670 +_020D766C: + mov r3, #0x0 +_020D7670: + cmp r3, #0x0 + moveq r5, #0x1 +_020D7678: + cmp r5, #0x0 + beq _020D7694 + ldr r1, [r11, #0x1c] + ldr r0, _020D7750 ; =0x000001FF + orr r1, r1, r8 + ands r0, r1, r0 + moveq r6, #0x1 +_020D7694: + cmp r6, #0x0 + beq _020D76A4 + cmp r8, #0x0 + movne r7, #0x1 +_020D76A4: + ldr r0, _020D7754 ; =0x02106A50 + cmp r7, #0x0 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x60] + bic r0, r0, #0x7000000 + orr r0, r0, #0xa1000000 + str r0, [r10, #0x4] + beq _020D7738 + bl OS_DisableInterrupts + mov r5, r0 + mov r0, r9 + mov r1, r8 + bl IC_InvalidateRange +_020D76D8: ; 0x020D76D8 + cmp r4, #0x0 + beq _020D7700 + sub r9, r9, r4 + mov r0, r9 + mov r1, #0x20 + bl DC_StoreRange + add r0, r9, r8 + mov r1, #0x20 + bl DC_StoreRange + add r8, r8, #0x20 +_020D7700: + mov r0, r9 + mov r1, r8 + bl DC_InvalidateRange + bl DC_WaitWriteBufferEmpty + ldr r1, _020D7758 ; =CARDi_OnReadCard + mov r0, #0x80000 + bl OS_SetIrqFunction + mov r0, #0x80000 + bl OS_ResetRequestIrqMask + mov r0, #0x80000 + bl OS_EnableIrqMask + mov r0, r5 + bl OS_RestoreInterrupts + bl CARDi_SetCardDma +_020D7738: + mov r0, r7 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020D7748: .word cardi_common +_020D774C: .word 0x01FF8000 +_020D7750: .word 0x000001FF +_020D7754: .word 0x02106A50 +_020D7758: .word CARDi_OnReadCard + + arm_func_start CARDi_OnReadCard +CARDi_OnReadCard: ; 0x020D775C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r0, _020D7838 ; =0x021D55C0 + ldr r0, [r0, #0x28] + bl MI_StopDma + ldr r0, _020D7838 ; =0x021D55C0 + ldr r3, [r0, #0x1c] + ldr r2, [r0, #0x20] + ldr r1, [r0, #0x24] + add r3, r3, #0x200 + add r2, r2, #0x200 + subs r1, r1, #0x200 + str r3, [r0, #0x1c] + str r2, [r0, #0x20] + str r1, [r0, #0x24] + bne _020D7828 + mov r0, #0x80000 + bl OS_DisableIrqMask + mov r0, #0x80000 + bl OS_ResetRequestIrqMask + ldr r7, _020D7838 ; =0x021D55C0 + bl CARDi_ReadRomIDCore + bl CARDi_CheckPulledOutCore +_020D77B8: ; 0x020D77B8 + ldr r0, [r7, #0x0] + mov r1, #0x0 + str r1, [r0, #0x0] + ldr r6, [r7, #0x38] + ldr r5, [r7, #0x3c] + bl OS_DisableInterrupts + ldr r1, [r7, #0x114] + mov r4, r0 + bic r0, r1, #0x4c + str r0, [r7, #0x114] + add r0, r7, #0x10c + bl OS_WakeupThread + ldr r0, [r7, #0x114] + ands r0, r0, #0x10 + beq _020D77FC + add r0, r7, #0x44 + bl OS_WakeupThreadDirect +_020D77FC: + mov r0, r4 + bl OS_RestoreInterrupts +_020D7804: ; 0x020D7804 + cmp r6, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r5 + blx r6 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_020D7828: + bl CARDi_SetCardDma + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D7838: .word 0x021D55C0 + + arm_func_start CARDi_SetCardDma +CARDi_SetCardDma: ; 0x020D783C + stmdb sp!, {r4,lr} + ldr r4, _020D7884 ; =0x021D55C0 + ldr r1, _020D7888 ; =0x04100010 + ldr r0, [r4, #0x28] + ldr r2, [r4, #0x20] + mov r3, #0x200 + bl MIi_CardDmaCopy32 + ldr r1, [r4, #0x1c] + mov r0, r1, lsr #0x8 + orr r0, r0, #0xb7000000 + mov r1, r1, lsl #0x18 + bl CARDi_SetRomOp + ldr r0, _020D788C ; =0x021D5C00 + ldr r1, _020D7890 ; =0x040001A4 + ldr r0, [r0, #0x4] + str r0, [r1, #0x0] + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D7884: .word 0x021D55C0 +_020D7888: .word 0x04100010 +_020D788C: .word 0x021D5C00 +_020D7890: .word 0x040001A4 + + arm_func_start CARDi_SetRomOp +CARDi_SetRomOp: ; 0x020D7894 + ldr r3, _020D790C ; =0x040001A4 +_020D7898: + ldr r2, [r3, #0x0] + ands r2, r2, #0x80000000 + bne _020D7898 + ldr r3, _020D7910 ; =0x040001A1 + mov r12, #0xc0 + ldr r2, _020D7914 ; =0x040001A8 + strb r12, [r3, #0x0] + mov r12, r0, lsr #0x18 + ldr r3, _020D7918 ; =0x040001A9 + strb r12, [r2, #0x0] + mov r12, r0, lsr #0x10 + ldr r2, _020D791C ; =0x040001AA + strb r12, [r3, #0x0] + mov r12, r0, lsr #0x8 + ldr r3, _020D7920 ; =0x040001AB + strb r12, [r2, #0x0] + ldr r2, _020D7924 ; =0x040001AC + strb r0, [r3, #0x0] + mov r3, r1, lsr #0x18 + ldr r0, _020D7928 ; =0x040001AD + strb r3, [r2, #0x0] + mov r3, r1, lsr #0x10 + ldr r2, _020D792C ; =0x040001AE + strb r3, [r0, #0x0] + mov r3, r1, lsr #0x8 + ldr r0, _020D7930 ; =0x040001AF + strb r3, [r2, #0x0] + strb r1, [r0, #0x0] + bx lr + .balign 4 +_020D790C: .word 0x040001A4 +_020D7910: .word 0x040001A1 +_020D7914: .word 0x040001A8 +_020D7918: .word 0x040001A9 +_020D791C: .word 0x040001AA +_020D7920: .word 0x040001AB +_020D7924: .word 0x040001AC +_020D7928: .word 0x040001AD +_020D792C: .word 0x040001AE +_020D7930: .word 0x040001AF + + arm_func_start CARDi_ReadFromCache +CARDi_ReadFromCache: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r5, _020D79C8 ; =0x021D55C0 + mov r1, #0x200 + ldr r3, [r5, #0x1c] + rsb r1, r1, #0x0 + ldr r2, [r0, #0x8] + and r3, r3, r1 + cmp r3, r2 + bne _020D79AC + ldr r2, [r5, #0x1c] + ldr r1, [r5, #0x24] + sub r3, r2, r3 + rsb r4, r3, #0x200 + cmp r4, r1 + movhi r4, r1 + add r0, r0, #0x20 + ldr r1, [r5, #0x20] + mov r2, r4 + add r0, r0, r3 + bl MI_CpuCopy8 + ldr r0, [r5, #0x1c] + add r0, r0, r4 + str r0, [r5, #0x1c] + ldr r0, [r5, #0x20] + add r0, r0, r4 + str r0, [r5, #0x20] + ldr r0, [r5, #0x24] + sub r0, r0, r4 + str r0, [r5, #0x24] +_020D79AC: + ldr r0, [r5, #0x24] + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D79C8: .word 0x021D55C0 diff --git a/arm9/asm/CARD_spi.s b/arm9/asm/CARD_spi.s new file mode 100644 index 00000000..3feb1a1f --- /dev/null +++ b/arm9/asm/CARD_spi.s @@ -0,0 +1,223 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start CARDi_IdentifyBackupCore +CARDi_IdentifyBackupCore: ; 0x020D6A60 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r1, _020D6D60 ; =0x021D55C0 + mov r5, r0 + ldr r4, [r1, #0x0] + mov r1, #0x0 + add r0, r4, #0x18 + mov r2, #0x48 + bl MI_CpuFill8 +_020D6A84: ; 0x020D6A84 + cmp r5, #0x0 + str r5, [r4, #0x4] + mov r0, #0x3f + addeq sp, sp, #0x4 + str r0, [r4, #0x4c] + ldmeqia sp!, {r4-r5,lr} + bxeq lr + mov r0, r5, asr #0x8 + and r0, r0, #0xff + mov r2, #0x1 + mov r3, r2, lsl r0 + and r1, r5, #0xff + str r3, [r4, #0x18] + mov r0, #0xff + strb r0, [r4, #0x48] + cmp r1, #0x1 + bne _020D6B80 + cmp r3, #0x200 + beq _020D6AE4 + cmp r3, #0x2000 + beq _020D6B04 + cmp r3, #0x10000 + beq _020D6B28 + b _020D6D38 +_020D6AE4: + mov r0, #0x10 + str r0, [r4, #0x20] + str r2, [r4, #0x24] + mov r0, #0x5 + str r0, [r4, #0x28] + mov r0, #0xf0 + strb r0, [r4, #0x48] + b _020D6B48 +_020D6B04: + mov r0, #0x20 + str r0, [r4, #0x20] + mov r0, #0x2 + str r0, [r4, #0x24] + mov r0, #0x5 + str r0, [r4, #0x28] + mov r0, #0x0 + strb r0, [r4, #0x48] + b _020D6B48 +_020D6B28: + mov r0, #0x80 + str r0, [r4, #0x20] + mov r0, #0x2 + str r0, [r4, #0x24] + mov r0, #0xa + str r0, [r4, #0x28] + mov r0, #0x0 + strb r0, [r4, #0x48] +_020D6B48: + ldr r0, [r4, #0x20] + add sp, sp, #0x4 + str r0, [r4, #0x1c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x40 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x100 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x200 + str r0, [r4, #0x4c] + ldmia sp!, {r4-r5,lr} + bx lr +_020D6B80: + cmp r1, #0x2 + bne _020D6CD8 + cmp r3, #0x100000 + bhi _020D6BB8 + cmp r3, #0x100000 + bhs _020D6BD8 + cmp r3, #0x40000 + bhi _020D6BAC + cmp r3, #0x40000 + beq _020D6BD8 + b _020D6D38 +_020D6BAC: + cmp r3, #0x80000 + beq _020D6BD8 + b _020D6D38 +_020D6BB8: + cmp r3, #0x200000 + bhi _020D6BCC + cmp r3, #0x200000 + beq _020D6C10 + b _020D6D38 +_020D6BCC: + cmp r3, #0x800000 + beq _020D6C48 + b _020D6D38 +_020D6BD8: + mov r0, #0x19 + str r0, [r4, #0x2c] + mov r1, #0x12c + str r1, [r4, #0x30] + ldr r0, _020D6D64 ; =0x00001388 + str r1, [r4, #0x44] + str r0, [r4, #0x3c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x80 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x400 + str r0, [r4, #0x4c] + b _020D6C7C +_020D6C10: + mov r1, #0x3e8 + ldr r0, _020D6D68 ; =0x00000BB8 + str r1, [r4, #0x3c] + ldr r1, _020D6D6C ; =0x00004268 + str r0, [r4, #0x40] + ldr r0, _020D6D70 ; =0x00009C40 + str r1, [r4, #0x34] + str r0, [r4, #0x38] + mov r0, #0x0 + strb r0, [r4, #0x48] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x1000 + str r0, [r4, #0x4c] + b _020D6C7C +_020D6C48: + mov r1, #0x3e8 + ldr r0, _020D6D68 ; =0x00000BB8 + str r1, [r4, #0x3c] + ldr r1, _020D6D74 ; =0x000109A0 + str r0, [r4, #0x40] + ldr r0, _020D6D78 ; =0x00027100 + str r1, [r4, #0x34] + str r0, [r4, #0x38] + mov r0, #0x0 + strb r0, [r4, #0x48] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x1000 + str r0, [r4, #0x4c] +_020D6C7C: + mov r0, #0x10000 + str r0, [r4, #0x1c] + mov r0, #0x100 + str r0, [r4, #0x20] + mov r0, #0x3 + str r0, [r4, #0x24] + mov r0, #0x5 + str r0, [r4, #0x28] + ldr r0, [r4, #0x4c] + add sp, sp, #0x4 + orr r0, r0, #0x40 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x100 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x200 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x800 + str r0, [r4, #0x4c] + ldmia sp!, {r4-r5,lr} + bx lr +_020D6CD8: + cmp r1, #0x3 + bne _020D6D38 + cmp r3, #0x2000 + beq _020D6CF0 + cmp r3, #0x8000 + bne _020D6D38 +_020D6CF0: + str r3, [r4, #0x20] + str r3, [r4, #0x1c] + mov r0, #0x2 + str r0, [r4, #0x24] + mov r0, #0x0 + strb r0, [r4, #0x48] + ldr r0, [r4, #0x4c] + add sp, sp, #0x4 + orr r0, r0, #0x40 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x100 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x200 + str r0, [r4, #0x4c] + ldmia sp!, {r4-r5,lr} + bx lr +_020D6D38: + mov r1, #0x0 + str r1, [r4, #0x4] + str r1, [r4, #0x18] + ldr r0, _020D6D60 ; =0x021D55C0 + mov r1, #0x3 + ldr r0, [r0, #0x0] + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D6D60: .word 0x021D55C0 +_020D6D64: .word 0x00001388 +_020D6D68: .word 0x00000BB8 +_020D6D6C: .word 0x00004268 +_020D6D70: .word 0x00009C40 +_020D6D74: .word 0x000109A0 +_020D6D78: .word 0x00027100 diff --git a/arm9/asm/libcard.s b/arm9/asm/libcard.s deleted file mode 100644 index 1eb74e0d..00000000 --- a/arm9/asm/libcard.s +++ /dev/null @@ -1,1784 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start CARD_UnlockBackup -CARD_UnlockBackup: ; 0x020D66A0 - ldr ip, _020D66AC ; =CARDi_UnlockResource - mov r1, #0x2 - bx r12 - .balign 4 -_020D66AC: .word CARDi_UnlockResource - - arm_func_start CARD_LockBackup -CARD_LockBackup: ; 0x020D66B0 - ldr ip, _020D66BC ; =CARDi_LockResource - mov r1, #0x2 - bx r12 - .balign 4 -_020D66BC: .word CARDi_LockResource - - arm_func_start CARD_UnlockRom -CARD_UnlockRom: ; 0x020D66C0 - stmdb sp!, {r4,lr} - mov r4, r0 - bl OS_UnlockCard - mov r0, r4 - mov r1, #0x1 - bl CARDi_UnlockResource - ldmia sp!, {r4,lr} - bx lr - - arm_func_start CARD_LockRom -CARD_LockRom: ; 0x020D66E0 - stmdb sp!, {r4,lr} - mov r4, r0 - mov r1, #0x1 - bl CARDi_LockResource - mov r0, r4 - bl OS_TryLockCard - ldmia sp!, {r4,lr} - bx lr - - arm_func_start CARD_GetResultCode -CARD_GetResultCode: ; 0x020D6700 - ldr r0, _020D6710 ; =0x021D55C0 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020D6710: .word 0x021D55C0 - - arm_func_start FUN_020D6714 -FUN_020D6714: ; 0x020D6714 - ldr r0, _020D672C ; =0x021D55C0 - ldr r0, [r0, #0x114] - ands r0, r0, #0x4 - moveq r0, #0x1 - movne r0, #0x0 - bx lr - .balign 4 -_020D672C: .word 0x021D55C0 - - arm_func_start CARDi_WaitAsync -CARDi_WaitAsync: ; 0x020D6730 - stmdb sp!, {r4-r6,lr} - ldr r6, _020D6788 ; =0x021D55C0 - bl OS_DisableInterrupts - ldr r1, [r6, #0x114] - mov r5, r0 - ands r0, r1, #0x4 - beq _020D6764 - add r4, r6, #0x10c -_020D6750: - mov r0, r4 - bl OS_SleepThread - ldr r0, [r6, #0x114] - ands r0, r0, #0x4 - bne _020D6750 -_020D6764: - mov r0, r5 - bl OS_RestoreInterrupts -_020D676C: ; 0x020D676C - ldr r0, [r6, #0x0] - ldr r0, [r0, #0x0] - cmp r0, #0x0 - moveq r0, #0x1 - movne r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020D6788: .word 0x021D55C0 - - arm_func_start CARD_Enable -CARD_Enable: ; 0x020D678C - ldr r1, _020D6798 ; =0x021D555C - str r0, [r1, #0x0] - bx lr - .balign 4 -_020D6798: .word 0x021D555C - - arm_func_start CARD_CheckEnabled -CARD_CheckEnabled: ; 0x020D679C - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl CARD_IsEnabled -_020D67A8: ; 0x020D67A8 - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - bl OS_Terminate - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start CARD_IsEnabled -CARD_IsEnabled: - ldr r0, _020D67D4 ; =0x021D555C - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020D67D4: .word 0x021D555C - - arm_func_start CARDi_InitCommon -CARDi_InitCommon: ; 0x020D67D8 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - ldr r4, _020D68B8 ; =0x021D55C0 - ldr r1, _020D68BC ; =0x021D5560 - mvn r2, #0x2 - mov r0, #0x0 - str r2, [r4, #0x8] - mov r2, #0x60 - str r0, [r4, #0xc] - str r0, [r4, #0x18] - str r1, [r4, #0x0] - bl MIi_CpuClearFast - ldr r0, _020D68BC ; =0x021D5560 - mov r1, #0x60 - bl DC_FlushRange - ldr r0, _020D68C0 ; =0x027FFC40 - ldrh r0, [r0, #0x0] - cmp r0, #0x2 - beq _020D6834 - ldr r0, _020D68C4 ; =0x027FFE00 - ldr r1, _020D68C8 ; =0x027FFA80 - mov r2, #0x160 - bl MI_CpuCopy8 -_020D6834: - mov r2, #0x0 - str r2, [r4, #0x14] - ldr r0, [r4, #0x14] - mov r1, #0x4 - str r0, [r4, #0x10] - str r2, [r4, #0x110] - ldr r3, [r4, #0x110] - mov r0, #0x400 - str r3, [r4, #0x10c] - str r1, [r4, #0x108] - str r0, [sp, #0x0] - ldr r12, [r4, #0x108] - ldr r1, _020D68CC ; =CARDi_TaskThread - ldr r3, _020D68D0 ; =0x021D5BE0 - add r0, r4, #0x44 - str r12, [sp, #0x4] - bl OS_CreateThread - add r0, r4, #0x44 - bl OS_WakeupThreadDirect - ldr r1, _020D68D4 ; =CARDi_OnFifoRecv - mov r0, #0xb - bl PXI_SetFifoRecvCallback - ldr r0, _020D68C0 ; =0x027FFC40 - ldrh r0, [r0, #0x0] - cmp r0, #0x2 - addeq sp, sp, #0x8 - ldmeqia sp!, {r4,lr} - bxeq lr - mov r0, #0x1 - bl CARD_Enable - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D68B8: .word 0x021D55C0 -_020D68BC: .word 0x021D5560 -_020D68C0: .word 0x027FFC40 -_020D68C4: .word 0x027FFE00 -_020D68C8: .word 0x027FFA80 -_020D68CC: .word CARDi_TaskThread -_020D68D0: .word 0x021D5BE0 -_020D68D4: .word CARDi_OnFifoRecv - - arm_func_start CARDi_UnlockResource -CARDi_UnlockResource: ; 0x020D68D8 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r5, _020D6978 ; =0x021D55C0 - mov r7, r0 - mov r6, r1 - bl OS_DisableInterrupts - mov r1, r5 - mov r4, r0 - ldr r0, [r1, #0x8] - cmp r0, r7 - bne _020D6910 - ldr r0, [r5, #0xc] - cmp r0, #0x0 - bne _020D6918 -_020D6910: - bl OS_Terminate - b _020D6958 -_020D6918: - ldr r0, [r5, #0x18] - cmp r0, r6 - beq _020D6928 - bl OS_Terminate -_020D6928: - ldr r0, [r5, #0xc] - sub r0, r0, #0x1 - str r0, [r5, #0xc] - ldr r0, [r5, #0xc] - cmp r0, #0x0 - bne _020D6958 - mvn r0, #0x2 - str r0, [r5, #0x8] - mov r1, #0x0 - add r0, r5, #0x10 - str r1, [r5, #0x18] - bl OS_WakeupThread -_020D6958: - ldr r1, [r5, #0x0] - mov r2, #0x0 - mov r0, r4 - str r2, [r1, #0x0] - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020D6978: .word 0x021D55C0 - - arm_func_start CARDi_LockResource -CARDi_LockResource: ; 0x020D697C - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - ldr r5, _020D6A14 ; =0x021D55C0 - mov r7, r0 - mov r6, r1 - bl OS_DisableInterrupts - ldr r1, [r5, #0x8] - mov r4, r0 - cmp r1, r7 - bne _020D69B8 - ldr r0, [r5, #0x18] - cmp r0, r6 - beq _020D69E8 - bl OS_Terminate - b _020D69E8 -_020D69B8: - ldr r0, [r5, #0x8] - mvn r8, #0x2 - cmp r0, r8 - beq _020D69E0 - add r9, r5, #0x10 -_020D69CC: - mov r0, r9 - bl OS_SleepThread - ldr r0, [r5, #0x8] - cmp r0, r8 - bne _020D69CC -_020D69E0: - str r7, [r5, #0x8] - str r6, [r5, #0x18] -_020D69E8: - ldr r1, [r5, #0xc] - mov r0, r4 - add r1, r1, #0x1 - str r1, [r5, #0xc] - ldr r1, [r5, #0x0] - mov r2, #0x0 - str r2, [r1, #0x0] - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r9,lr} - bx lr - .balign 4 -_020D6A14: .word 0x021D55C0 - - arm_func_start CARDi_SetTask -CARDi_SetTask: ; 0x020D6A18 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r4, _020D6A5C ; =0x021D55C0 - mov r5, r0 - ldr r1, [r4, #0x108] - add r0, r4, #0x44 - bl OS_SetThreadPriority - add r0, r4, #0x44 - str r0, [r4, #0x104] - str r5, [r4, #0x40] - ldr r1, [r4, #0x114] - orr r1, r1, #0x8 - str r1, [r4, #0x114] - bl OS_WakeupThreadDirect - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D6A5C: .word 0x021D55C0 - - arm_func_start FUN_020D6A60 -FUN_020D6A60: ; 0x020D6A60 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r1, _020D6D60 ; =0x021D55C0 - mov r5, r0 - ldr r4, [r1, #0x0] - mov r1, #0x0 - add r0, r4, #0x18 - mov r2, #0x48 - bl MI_CpuFill8 -_020D6A84: ; 0x020D6A84 - cmp r5, #0x0 - str r5, [r4, #0x4] - mov r0, #0x3f - addeq sp, sp, #0x4 - str r0, [r4, #0x4c] - ldmeqia sp!, {r4-r5,lr} - bxeq lr - mov r0, r5, asr #0x8 - and r0, r0, #0xff - mov r2, #0x1 - mov r3, r2, lsl r0 - and r1, r5, #0xff - str r3, [r4, #0x18] - mov r0, #0xff - strb r0, [r4, #0x48] - cmp r1, #0x1 - bne _020D6B80 - cmp r3, #0x200 - beq _020D6AE4 - cmp r3, #0x2000 - beq _020D6B04 - cmp r3, #0x10000 - beq _020D6B28 - b _020D6D38 -_020D6AE4: - mov r0, #0x10 - str r0, [r4, #0x20] - str r2, [r4, #0x24] - mov r0, #0x5 - str r0, [r4, #0x28] - mov r0, #0xf0 - strb r0, [r4, #0x48] - b _020D6B48 -_020D6B04: - mov r0, #0x20 - str r0, [r4, #0x20] - mov r0, #0x2 - str r0, [r4, #0x24] - mov r0, #0x5 - str r0, [r4, #0x28] - mov r0, #0x0 - strb r0, [r4, #0x48] - b _020D6B48 -_020D6B28: - mov r0, #0x80 - str r0, [r4, #0x20] - mov r0, #0x2 - str r0, [r4, #0x24] - mov r0, #0xa - str r0, [r4, #0x28] - mov r0, #0x0 - strb r0, [r4, #0x48] -_020D6B48: - ldr r0, [r4, #0x20] - add sp, sp, #0x4 - str r0, [r4, #0x1c] - ldr r0, [r4, #0x4c] - orr r0, r0, #0x40 - str r0, [r4, #0x4c] - ldr r0, [r4, #0x4c] - orr r0, r0, #0x100 - str r0, [r4, #0x4c] - ldr r0, [r4, #0x4c] - orr r0, r0, #0x200 - str r0, [r4, #0x4c] - ldmia sp!, {r4-r5,lr} - bx lr -_020D6B80: - cmp r1, #0x2 - bne _020D6CD8 - cmp r3, #0x100000 - bhi _020D6BB8 - cmp r3, #0x100000 - bhs _020D6BD8 - cmp r3, #0x40000 - bhi _020D6BAC - cmp r3, #0x40000 - beq _020D6BD8 - b _020D6D38 -_020D6BAC: - cmp r3, #0x80000 - beq _020D6BD8 - b _020D6D38 -_020D6BB8: - cmp r3, #0x200000 - bhi _020D6BCC - cmp r3, #0x200000 - beq _020D6C10 - b _020D6D38 -_020D6BCC: - cmp r3, #0x800000 - beq _020D6C48 - b _020D6D38 -_020D6BD8: - mov r0, #0x19 - str r0, [r4, #0x2c] - mov r1, #0x12c - str r1, [r4, #0x30] - ldr r0, _020D6D64 ; =0x00001388 - str r1, [r4, #0x44] - str r0, [r4, #0x3c] - ldr r0, [r4, #0x4c] - orr r0, r0, #0x80 - str r0, [r4, #0x4c] - ldr r0, [r4, #0x4c] - orr r0, r0, #0x400 - str r0, [r4, #0x4c] - b _020D6C7C -_020D6C10: - mov r1, #0x3e8 - ldr r0, _020D6D68 ; =0x00000BB8 - str r1, [r4, #0x3c] - ldr r1, _020D6D6C ; =0x00004268 - str r0, [r4, #0x40] - ldr r0, _020D6D70 ; =0x00009C40 - str r1, [r4, #0x34] - str r0, [r4, #0x38] - mov r0, #0x0 - strb r0, [r4, #0x48] - ldr r0, [r4, #0x4c] - orr r0, r0, #0x1000 - str r0, [r4, #0x4c] - b _020D6C7C -_020D6C48: - mov r1, #0x3e8 - ldr r0, _020D6D68 ; =0x00000BB8 - str r1, [r4, #0x3c] - ldr r1, _020D6D74 ; =0x000109A0 - str r0, [r4, #0x40] - ldr r0, _020D6D78 ; =0x00027100 - str r1, [r4, #0x34] - str r0, [r4, #0x38] - mov r0, #0x0 - strb r0, [r4, #0x48] - ldr r0, [r4, #0x4c] - orr r0, r0, #0x1000 - str r0, [r4, #0x4c] -_020D6C7C: - mov r0, #0x10000 - str r0, [r4, #0x1c] - mov r0, #0x100 - str r0, [r4, #0x20] - mov r0, #0x3 - str r0, [r4, #0x24] - mov r0, #0x5 - str r0, [r4, #0x28] - ldr r0, [r4, #0x4c] - add sp, sp, #0x4 - orr r0, r0, #0x40 - str r0, [r4, #0x4c] - ldr r0, [r4, #0x4c] - orr r0, r0, #0x100 - str r0, [r4, #0x4c] - ldr r0, [r4, #0x4c] - orr r0, r0, #0x200 - str r0, [r4, #0x4c] - ldr r0, [r4, #0x4c] - orr r0, r0, #0x800 - str r0, [r4, #0x4c] - ldmia sp!, {r4-r5,lr} - bx lr -_020D6CD8: - cmp r1, #0x3 - bne _020D6D38 - cmp r3, #0x2000 - beq _020D6CF0 - cmp r3, #0x8000 - bne _020D6D38 -_020D6CF0: - str r3, [r4, #0x20] - str r3, [r4, #0x1c] - mov r0, #0x2 - str r0, [r4, #0x24] - mov r0, #0x0 - strb r0, [r4, #0x48] - ldr r0, [r4, #0x4c] - add sp, sp, #0x4 - orr r0, r0, #0x40 - str r0, [r4, #0x4c] - ldr r0, [r4, #0x4c] - orr r0, r0, #0x100 - str r0, [r4, #0x4c] - ldr r0, [r4, #0x4c] - orr r0, r0, #0x200 - str r0, [r4, #0x4c] - ldmia sp!, {r4-r5,lr} - bx lr -_020D6D38: - mov r1, #0x0 - str r1, [r4, #0x4] - str r1, [r4, #0x18] - ldr r0, _020D6D60 ; =0x021D55C0 - mov r1, #0x3 - ldr r0, [r0, #0x0] - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D6D60: .word 0x021D55C0 -_020D6D64: .word 0x00001388 -_020D6D68: .word 0x00000BB8 -_020D6D6C: .word 0x00004268 -_020D6D70: .word 0x00009C40 -_020D6D74: .word 0x000109A0 -_020D6D78: .word 0x00027100 - - arm_func_start CARD_CancelBackupAsync -CARD_CancelBackupAsync: ; 0x020D6D7C - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl OS_DisableInterrupts - ldr r1, _020D6DA8 ; =0x021D55C0 - ldr r2, [r1, #0x114] - orr r2, r2, #0x40 - str r2, [r1, #0x114] - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D6DA8: .word 0x021D55C0 - - arm_func_start CARD_TryWaitBackupAsync -CARD_TryWaitBackupAsync: ; 0x020D6DAC - ldr ip, _020D6DB4 ; =FUN_020D6714 - bx r12 - .balign 4 -_020D6DB4: .word FUN_020D6714 - - arm_func_start CARD_WaitBackupAsync -CARD_WaitBackupAsync: ; 0x020D6DB8 - ldr ip, _020D6DC0 ; =CARDi_WaitAsync - bx r12 - .balign 4 -_020D6DC0: .word CARDi_WaitAsync - - .extern _SDK_NintendoBackup - - arm_func_start CARD_IdentifyBackup -CARD_IdentifyBackup: ; 0x020D6DC4 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r5, r0 - ldr r0, _020D6F00 ; =_SDK_NintendoBackup - ldr r7, _020D6F04 ; =0x021D55C0 - bl OSi_ReferSymbol -_020D6DDC: ; 0x020D6DDC - cmp r5, #0x0 - bne _020D6DE8 - bl OS_Terminate -_020D6DE8: - bl CARD_CheckEnabled - bl OS_DisableInterrupts - ldr r1, [r7, #0x114] - mov r4, r0 - ands r0, r1, #0x4 - beq _020D6E18 - add r6, r7, #0x10c -_020D6E04: - mov r0, r6 - bl OS_SleepThread - ldr r0, [r7, #0x114] - ands r0, r0, #0x4 - bne _020D6E04 -_020D6E18: - ldr r0, [r7, #0x114] - mov r1, #0x0 - orr r0, r0, #0x4 - str r0, [r7, #0x114] - str r1, [r7, #0x38] - mov r0, r4 - str r1, [r7, #0x3c] - bl OS_RestoreInterrupts - mov r0, r5 - bl FUN_020D6A60 - ldr r0, _020D6F08 ; =0x021D3498 - ldr r1, _020D6F04 ; =0x021D55C0 - ldr r2, [r0, #0x4] - mov r0, r7 - str r2, [r1, #0x104] - mov r1, #0x2 - mov r2, #0x1 - bl CARDi_Request -_020D6E60: ; 0x020D6E60 - ldr r0, [r7, #0x0] - mov r1, #0x0 - str r1, [r0, #0xc] - ldr r0, [r7, #0x0] - add r1, r7, #0x120 - str r1, [r0, #0x10] - ldr r1, [r7, #0x0] - mov r2, #0x1 - mov r0, r7 - str r2, [r1, #0x14] - mov r1, #0x6 - bl CARDi_Request - ldr r6, [r7, #0x38] - ldr r5, [r7, #0x3c] - bl OS_DisableInterrupts - mov r4, r0 - ldr r1, [r7, #0x114] - add r0, r7, #0x10c - bic r1, r1, #0x4c - str r1, [r7, #0x114] - bl OS_WakeupThread - ldr r0, [r7, #0x114] - ands r0, r0, #0x10 - beq _020D6EC8 - add r0, r7, #0x44 - bl OS_WakeupThreadDirect -_020D6EC8: - mov r0, r4 - bl OS_RestoreInterrupts -_020D6ED0: ; 0x020D6ED0 - cmp r6, #0x0 - beq _020D6EE0 - mov r0, r5 - blx r6 -_020D6EE0: - ldr r0, [r7, #0x0] - ldr r0, [r0, #0x0] - cmp r0, #0x0 - moveq r0, #0x1 - movne r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020D6F00: .word _SDK_NintendoBackup -_020D6F04: .word 0x021D55C0 -_020D6F08: .word 0x021D3498 - - arm_func_start CARD_GetBackupSectorSize -CARD_GetBackupSectorSize: ; 0x020D6F0C - ldr r0, _020D6F1C ; =0x021D55C0 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x1c] - bx lr - .balign 4 -_020D6F1C: .word 0x021D55C0 - - arm_func_start CARDi_RequestStreamCommand -CARDi_RequestStreamCommand: ; 0x020D6F20 - stmdb sp!, {r4-r10,lr} - mov r10, r0 - ldr r6, _020D7004 ; =0x021D55C0 - ldr r0, _020D7008 ; =_SDK_NintendoBackup - mov r9, r1 - mov r8, r2 - mov r7, r3 - bl OSi_ReferSymbol - bl OS_DisableInterrupts - ldr r1, [r6, #0x114] - mov r5, r0 - ands r0, r1, #0x4 - beq _020D6F6C - add r4, r6, #0x10c -_020D6F58: - mov r0, r4 - bl OS_SleepThread - ldr r0, [r6, #0x114] - ands r0, r0, #0x4 - bne _020D6F58 -_020D6F6C: - ldr r0, [r6, #0x114] - ldr r1, [sp, #0x20] - orr r0, r0, #0x4 - str r0, [r6, #0x114] - str r7, [r6, #0x38] - mov r0, r5 - str r1, [r6, #0x3c] - bl OS_RestoreInterrupts - str r10, [r6, #0x1c] - str r9, [r6, #0x20] - ldr r0, [sp, #0x24] - ldr r1, [sp, #0x28] - str r8, [r6, #0x24] - ldr r2, [sp, #0x2c] - str r1, [r6, #0x2c] - ldr r1, [sp, #0x30] - str r2, [r6, #0x30] - str r1, [r6, #0x34] - cmp r0, #0x0 - beq _020D6FD0 - ldr r0, _020D700C ; =CARDi_RequestStreamCommandCore - bl CARDi_SetTask - mov r0, #0x1 - ldmia sp!, {r4-r10,lr} - bx lr -_020D6FD0: - ldr r0, _020D7010 ; =0x021D3498 - ldr r1, _020D7004 ; =0x021D55C0 - ldr r2, [r0, #0x4] - mov r0, r6 - str r2, [r1, #0x104] - bl CARDi_RequestStreamCommandCore -_020D6FE8: ; 0x020D6FE8 - ldr r0, [r6, #0x0] - ldr r0, [r0, #0x0] - cmp r0, #0x0 - moveq r0, #0x1 - movne r0, #0x0 - ldmia sp!, {r4-r10,lr} - bx lr - .balign 4 -_020D7004: .word 0x021D55C0 -_020D7008: .word _SDK_NintendoBackup -_020D700C: .word CARDi_RequestStreamCommandCore -_020D7010: .word 0x021D3498 - - arm_func_start CARDi_RequestStreamCommandCore -CARDi_RequestStreamCommandCore: - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - mov r9, r0 - ldr r8, [r9, #0x2c] - ldr r0, _020D720C ; =_SDK_NintendoBackup - ldr r7, [r9, #0x34] - ldr r10, [r9, #0x30] - mov r6, #0x100 - bl OSi_ReferSymbol - cmp r8, #0xb - bne _020D7048 - bl CARD_GetBackupSectorSize - mov r6, r0 -_020D7048: - mov r0, #0x1 - add r4, r9, #0x120 - mov r11, #0x9 - str r0, [sp, #0x0] -_020D7058: - ldr r5, [r9, #0x24] - ldr r0, [r9, #0x0] - cmp r6, r5 - movcc r5, r6 - str r5, [r0, #0x14] - ldr r0, [r9, #0x114] - ands r0, r0, #0x40 - beq _020D7094 - ldr r0, [r9, #0x114] - mov r1, #0x7 - bic r0, r0, #0x40 - str r0, [r9, #0x114] - ldr r0, [r9, #0x0] - str r1, [r0, #0x0] - b _020D71A8 -_020D7094: - cmp r7, #0x3 - addls pc, pc, r7, lsl #0x2 - b _020D7124 -_020D70A0: - b _020D70B0 -_020D70A4: - b _020D70D4 -_020D70A8: - b _020D70D4 -_020D70AC: - b _020D710C -_020D70B0: - mov r1, r5 - add r0, r9, #0x120 - bl DC_InvalidateRange - ldr r1, [r9, #0x1c] - ldr r0, [r9, #0x0] - str r1, [r0, #0xc] - ldr r0, [r9, #0x0] - str r4, [r0, #0x10] - b _020D7124 -_020D70D4: - ldr r0, [r9, #0x1c] - mov r1, r4 - mov r2, r5 - bl MI_CpuCopy8 - mov r1, r5 - add r0, r9, #0x120 - bl DC_FlushRange - bl DC_WaitWriteBufferEmpty -_020D70F4: ; 0x020D70F4 - ldr r0, [r9, #0x0] - str r4, [r0, #0xc] - ldr r1, [r9, #0x20] - ldr r0, [r9, #0x0] - str r1, [r0, #0x10] - b _020D7124 -_020D710C: - ldr r1, [r9, #0x1c] - ldr r0, [r9, #0x0] - str r1, [r0, #0xc] - ldr r1, [r9, #0x20] - ldr r0, [r9, #0x0] - str r1, [r0, #0x10] -_020D7124: - mov r0, r9 - mov r1, r8 - mov r2, r10 - bl CARDi_Request -_020D7134: ; 0x020D7134 - cmp r0, #0x0 - beq _020D71A8 - cmp r7, #0x2 - bne _020D7160 - ldr r2, [sp, #0x0] - mov r0, r9 - mov r1, r11 - bl CARDi_Request -_020D7154: ; 0x020D7154 - cmp r0, #0x0 - bne _020D7178 - b _020D71A8 -_020D7160: - cmp r7, #0x0 - bne _020D7178 - ldr r1, [r9, #0x20] - mov r2, r5 - add r0, r9, #0x120 - bl MI_CpuCopy8 -_020D7178: - ldr r0, [r9, #0x1c] - add r0, r0, r5 - str r0, [r9, #0x1c] - ldr r0, [r9, #0x20] - add r0, r0, r5 - str r0, [r9, #0x20] - ldr r0, [r9, #0x24] - sub r0, r0, r5 - str r0, [r9, #0x24] - ldr r0, [r9, #0x24] - cmp r0, #0x0 - bne _020D7058 -_020D71A8: - ldr r6, [r9, #0x38] - ldr r5, [r9, #0x3c] - bl OS_DisableInterrupts - ldr r1, [r9, #0x114] - mov r4, r0 - bic r0, r1, #0x4c - str r0, [r9, #0x114] - add r0, r9, #0x10c - bl OS_WakeupThread - ldr r0, [r9, #0x114] - ands r0, r0, #0x10 - beq _020D71E0 - add r0, r9, #0x44 - bl OS_WakeupThreadDirect -_020D71E0: - mov r0, r4 - bl OS_RestoreInterrupts -_020D71E8: ; 0x020D71E8 - cmp r6, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r11,lr} - bxeq lr - mov r0, r5 - blx r6 - add sp, sp, #0x4 - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020D720C: .word _SDK_NintendoBackup - - arm_func_start CARDi_GetRomAccessor -CARDi_GetRomAccessor: ; 0x020D7210 - ldr r0, _020D7218 ; =CARDi_ReadCard - bx lr - .balign 4 -_020D7218: .word CARDi_ReadCard - - arm_func_start CARD_WaitRomAsync -CARD_WaitRomAsync: ; 0x020D721C - ldr ip, _020D7224 ; =CARDi_WaitAsync - bx r12 - .balign 4 -_020D7224: .word CARDi_WaitAsync - - arm_func_start CARD_Init -CARD_Init: ; 0x020D7228 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr ip, _020D72A0 ; =0x021D55C0 - ldr r0, [r12, #0x114] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - mov r0, #0x1 - str r0, [r12, #0x114] - mov r3, #0x0 - str r3, [r12, #0x24] - ldr r0, [r12, #0x24] - mvn r1, #0x0 - str r0, [r12, #0x20] - ldr r2, [r12, #0x20] - ldr r0, _020D72A4 ; =0x021D5BE0 - str r2, [r12, #0x1c] - str r1, [r12, #0x28] - str r3, [r12, #0x38] - str r3, [r12, #0x3c] - str r3, [r0, #0x0] - bl CARDi_InitCommon - bl CARDi_GetRomAccessor - ldr r1, _020D72A8 ; =0x021D5C00 - str r0, [r1, #0x0] - bl CARD_InitPulledOutCallback - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D72A0: .word 0x021D55C0 -_020D72A4: .word 0x021D5BE0 -_020D72A8: .word 0x021D5C00 - - arm_func_start CARDi_ReadRom -CARDi_ReadRom: ; 0x020D72AC - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - ldr r6, _020D73C0 ; =0x021D55C0 - mov r10, r0 - mov r9, r1 - mov r8, r2 - mov r7, r3 - ldr fp, _020D73C4 ; =0x021D5C00 - bl CARD_CheckEnabled - bl OS_DisableInterrupts - ldr r1, [r6, #0x114] - mov r5, r0 - ands r0, r1, #0x4 - beq _020D72FC - add r4, r6, #0x10c -_020D72E8: - mov r0, r4 - bl OS_SleepThread - ldr r0, [r6, #0x114] - ands r0, r0, #0x4 - bne _020D72E8 -_020D72FC: - ldr r1, [r6, #0x114] - ldr r0, [sp, #0x28] - orr r1, r1, #0x4 - str r1, [r6, #0x114] - ldr r1, [sp, #0x2c] - str r0, [r6, #0x38] - mov r0, r5 - str r1, [r6, #0x3c] - bl OS_RestoreInterrupts - ldr r0, _020D73C8 ; =0x021D5BE0 - str r10, [r6, #0x28] - ldr r0, [r0, #0x0] - cmp r10, #0x3 - add r0, r9, r0 - str r0, [r6, #0x1c] - str r8, [r6, #0x20] - str r7, [r6, #0x24] - bhi _020D734C - mov r0, r10 - bl MI_StopDma -_020D734C: - mov r0, r11 - bl CARDi_TryReadCardDma -_020D7354: ; 0x020D7354 - cmp r0, #0x0 - beq _020D7380 - ldr r0, [sp, #0x30] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r11,lr} - bxne lr - bl CARD_WaitRomAsync - add sp, sp, #0x4 - ldmia sp!, {r4-r11,lr} - bx lr -_020D7380: - ldr r0, [sp, #0x30] - cmp r0, #0x0 - beq _020D73A0 - ldr r0, _020D73CC ; =CARDi_ReadRomSyncCore - bl CARDi_SetTask - add sp, sp, #0x4 - ldmia sp!, {r4-r11,lr} - bx lr -_020D73A0: - ldr r1, _020D73D0 ; =0x021D3498 - mov r0, r6 - ldr r1, [r1, #0x4] - str r1, [r6, #0x104] - bl CARDi_ReadRomSyncCore - add sp, sp, #0x4 - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020D73C0: .word 0x021D55C0 -_020D73C4: .word 0x021D5C00 -_020D73C8: .word 0x021D5BE0 -_020D73CC: .word CARDi_ReadRomSyncCore -_020D73D0: .word 0x021D3498 - - arm_func_start CARDi_ReadRomSyncCore -CARDi_ReadRomSyncCore: ; 0x020D73D4 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r4, _020D7478 ; =0x021D5C00 - mov r0, r4 - bl CARDi_ReadFromCache -_020D73E8: ; 0x020D73E8 - cmp r0, #0x0 - beq _020D73FC - ldr r1, [r4, #0x0] - mov r0, r4 - blx r1 -_020D73FC: - ldr r7, _020D747C ; =0x021D55C0 - bl CARDi_ReadRomIDCore - bl CARDi_CheckPulledOutCore -_020D7408: ; 0x020D7408 - ldr r0, [r7, #0x0] - mov r1, #0x0 - str r1, [r0, #0x0] - ldr r6, [r7, #0x38] - ldr r5, [r7, #0x3c] - bl OS_DisableInterrupts - ldr r1, [r7, #0x114] - mov r4, r0 - bic r0, r1, #0x4c - str r0, [r7, #0x114] - add r0, r7, #0x10c - bl OS_WakeupThread - ldr r0, [r7, #0x114] - ands r0, r0, #0x10 - beq _020D744C - add r0, r7, #0x44 - bl OS_WakeupThreadDirect -_020D744C: - mov r0, r4 - bl OS_RestoreInterrupts -_020D7454: ; 0x020D7454 - cmp r6, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - mov r0, r5 - blx r6 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020D7478: .word 0x021D5C00 -_020D747C: .word 0x021D55C0 - - arm_func_start CARDi_ReadRomIDCore -CARDi_ReadRomIDCore: ; 0x020D7480 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r0, #0xb8000000 - mov r1, #0x0 - bl CARDi_SetRomOp - ldr r1, _020D74DC ; =0x02106A50 - mov r0, #0x2000 - ldr r1, [r1, #0x0] - rsb r0, r0, #0x0 - ldr r2, [r1, #0x60] - ldr r1, _020D74E0 ; =0x040001A4 - bic r2, r2, #0x7000000 - orr r2, r2, #0xa7000000 - and r0, r2, r0 - str r0, [r1, #0x0] -_020D74BC: - ldr r0, [r1, #0x0] - ands r0, r0, #0x800000 - beq _020D74BC - ldr r0, _020D74E4 ; =0x04100010 - ldr r0, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D74DC: .word 0x02106A50 -_020D74E0: .word 0x040001A4 -_020D74E4: .word 0x04100010 - - arm_func_start CARDi_ReadCard -CARDi_ReadCard: ; 0x020D74E8 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - mov r10, r0 - ldr sb, _020D75DC ; =0x021D55C0 - add r7, r10, #0x20 - ldr r5, _020D75E0 ; =0x04100010 - ldr r6, _020D75E4 ; =0x040001A4 - mov r11, #0x0 - mov r0, #0x200 - rsb r4, r0, #0x0 -_020D7510: - ldr r0, [r9, #0x1c] - and r1, r0, r4 - cmp r1, r0 - bne _020D7538 - ldr r8, [r9, #0x20] - ands r0, r8, #0x3 - bne _020D7538 - ldr r0, [r9, #0x24] - cmp r0, #0x200 - bhs _020D7540 -_020D7538: - mov r8, r7 - str r1, [r10, #0x8] -_020D7540: - mov r0, r1, lsr #0x8 - orr r0, r0, #0xb7000000 - mov r1, r1, lsl #0x18 - bl CARDi_SetRomOp - ldr r1, [r10, #0x4] - mov r0, r11 - str r1, [r6, #0x0] -_020D755C: - ldr r2, [r6, #0x0] - ands r1, r2, #0x800000 - beq _020D7578 - ldr r1, [r5, #0x0] - cmp r0, #0x200 - strcc r1, [r8, r0, lsl #0x2] - addcc r0, r0, #0x1 -_020D7578: - ands r1, r2, #0x80000000 - bne _020D755C - ldr r0, [r9, #0x20] - cmp r8, r0 - bne _020D75C0 - ldr r2, [r9, #0x1c] - ldr r1, [r9, #0x20] - ldr r0, [r9, #0x24] - add r2, r2, #0x200 - add r1, r1, #0x200 - subs r0, r0, #0x200 - str r2, [r9, #0x1c] - str r1, [r9, #0x20] - str r0, [r9, #0x24] - bne _020D7510 - add sp, sp, #0x4 - ldmia sp!, {r4-r11,lr} - bx lr -_020D75C0: - mov r0, r10 - bl CARDi_ReadFromCache -_020D75C8: ; 0x020D75C8 - cmp r0, #0x0 - bne _020D7510 - add sp, sp, #0x4 - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020D75DC: .word 0x021D55C0 -_020D75E0: .word 0x04100010 -_020D75E4: .word 0x040001A4 - - arm_func_start CARDi_TryReadCardDma -CARDi_TryReadCardDma: - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - ldr fp, _020D7748 ; =0x021D55C0 - mov r7, #0x0 - ldr r9, [r11, #0x20] - mov r10, r0 - mov r6, r7 - mov r5, r7 - mov r1, r7 - ands r4, r9, #0x1f - ldr r8, [r11, #0x24] - bne _020D7624 - ldr r0, [r11, #0x28] - cmp r0, #0x3 - movls r1, #0x1 -_020D7624: - cmp r1, #0x0 - beq _020D7678 - bl OS_GetDTCMAddress - ldr r1, _020D774C ; =0x01FF8000 - add r2, r9, r8 - cmp r2, r1 - mov r3, #0x1 - mov r1, #0x0 - bls _020D7650 - cmp r9, #0x2000000 - movcc r1, r3 -_020D7650: - cmp r1, #0x0 - bne _020D7670 - cmp r0, r2 - bhs _020D766C - add r0, r0, #0x4000 - cmp r0, r9 - bhi _020D7670 -_020D766C: - mov r3, #0x0 -_020D7670: - cmp r3, #0x0 - moveq r5, #0x1 -_020D7678: - cmp r5, #0x0 - beq _020D7694 - ldr r1, [r11, #0x1c] - ldr r0, _020D7750 ; =0x000001FF - orr r1, r1, r8 - ands r0, r1, r0 - moveq r6, #0x1 -_020D7694: - cmp r6, #0x0 - beq _020D76A4 - cmp r8, #0x0 - movne r7, #0x1 -_020D76A4: - ldr r0, _020D7754 ; =0x02106A50 - cmp r7, #0x0 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x60] - bic r0, r0, #0x7000000 - orr r0, r0, #0xa1000000 - str r0, [r10, #0x4] - beq _020D7738 - bl OS_DisableInterrupts - mov r5, r0 - mov r0, r9 - mov r1, r8 - bl IC_InvalidateRange -_020D76D8: ; 0x020D76D8 - cmp r4, #0x0 - beq _020D7700 - sub r9, r9, r4 - mov r0, r9 - mov r1, #0x20 - bl DC_StoreRange - add r0, r9, r8 - mov r1, #0x20 - bl DC_StoreRange - add r8, r8, #0x20 -_020D7700: - mov r0, r9 - mov r1, r8 - bl DC_InvalidateRange - bl DC_WaitWriteBufferEmpty - ldr r1, _020D7758 ; =CARDi_OnReadCard - mov r0, #0x80000 - bl OS_SetIrqFunction - mov r0, #0x80000 - bl OS_ResetRequestIrqMask - mov r0, #0x80000 - bl OS_EnableIrqMask - mov r0, r5 - bl OS_RestoreInterrupts - bl CARDi_SetCardDma -_020D7738: - mov r0, r7 - add sp, sp, #0x4 - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020D7748: .word cardi_common -_020D774C: .word 0x01FF8000 -_020D7750: .word 0x000001FF -_020D7754: .word 0x02106A50 -_020D7758: .word CARDi_OnReadCard - - arm_func_start CARDi_OnReadCard -CARDi_OnReadCard: ; 0x020D775C - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r0, _020D7838 ; =0x021D55C0 - ldr r0, [r0, #0x28] - bl MI_StopDma - ldr r0, _020D7838 ; =0x021D55C0 - ldr r3, [r0, #0x1c] - ldr r2, [r0, #0x20] - ldr r1, [r0, #0x24] - add r3, r3, #0x200 - add r2, r2, #0x200 - subs r1, r1, #0x200 - str r3, [r0, #0x1c] - str r2, [r0, #0x20] - str r1, [r0, #0x24] - bne _020D7828 - mov r0, #0x80000 - bl OS_DisableIrqMask - mov r0, #0x80000 - bl OS_ResetRequestIrqMask - ldr r7, _020D7838 ; =0x021D55C0 - bl CARDi_ReadRomIDCore - bl CARDi_CheckPulledOutCore -_020D77B8: ; 0x020D77B8 - ldr r0, [r7, #0x0] - mov r1, #0x0 - str r1, [r0, #0x0] - ldr r6, [r7, #0x38] - ldr r5, [r7, #0x3c] - bl OS_DisableInterrupts - ldr r1, [r7, #0x114] - mov r4, r0 - bic r0, r1, #0x4c - str r0, [r7, #0x114] - add r0, r7, #0x10c - bl OS_WakeupThread - ldr r0, [r7, #0x114] - ands r0, r0, #0x10 - beq _020D77FC - add r0, r7, #0x44 - bl OS_WakeupThreadDirect -_020D77FC: - mov r0, r4 - bl OS_RestoreInterrupts -_020D7804: ; 0x020D7804 - cmp r6, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - mov r0, r5 - blx r6 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr -_020D7828: - bl CARDi_SetCardDma - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020D7838: .word 0x021D55C0 - - arm_func_start CARDi_SetCardDma -CARDi_SetCardDma: ; 0x020D783C - stmdb sp!, {r4,lr} - ldr r4, _020D7884 ; =0x021D55C0 - ldr r1, _020D7888 ; =0x04100010 - ldr r0, [r4, #0x28] - ldr r2, [r4, #0x20] - mov r3, #0x200 - bl MIi_CardDmaCopy32 - ldr r1, [r4, #0x1c] - mov r0, r1, lsr #0x8 - orr r0, r0, #0xb7000000 - mov r1, r1, lsl #0x18 - bl CARDi_SetRomOp - ldr r0, _020D788C ; =0x021D5C00 - ldr r1, _020D7890 ; =0x040001A4 - ldr r0, [r0, #0x4] - str r0, [r1, #0x0] - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D7884: .word 0x021D55C0 -_020D7888: .word 0x04100010 -_020D788C: .word 0x021D5C00 -_020D7890: .word 0x040001A4 - - arm_func_start CARDi_SetRomOp -CARDi_SetRomOp: ; 0x020D7894 - ldr r3, _020D790C ; =0x040001A4 -_020D7898: - ldr r2, [r3, #0x0] - ands r2, r2, #0x80000000 - bne _020D7898 - ldr r3, _020D7910 ; =0x040001A1 - mov r12, #0xc0 - ldr r2, _020D7914 ; =0x040001A8 - strb r12, [r3, #0x0] - mov r12, r0, lsr #0x18 - ldr r3, _020D7918 ; =0x040001A9 - strb r12, [r2, #0x0] - mov r12, r0, lsr #0x10 - ldr r2, _020D791C ; =0x040001AA - strb r12, [r3, #0x0] - mov r12, r0, lsr #0x8 - ldr r3, _020D7920 ; =0x040001AB - strb r12, [r2, #0x0] - ldr r2, _020D7924 ; =0x040001AC - strb r0, [r3, #0x0] - mov r3, r1, lsr #0x18 - ldr r0, _020D7928 ; =0x040001AD - strb r3, [r2, #0x0] - mov r3, r1, lsr #0x10 - ldr r2, _020D792C ; =0x040001AE - strb r3, [r0, #0x0] - mov r3, r1, lsr #0x8 - ldr r0, _020D7930 ; =0x040001AF - strb r3, [r2, #0x0] - strb r1, [r0, #0x0] - bx lr - .balign 4 -_020D790C: .word 0x040001A4 -_020D7910: .word 0x040001A1 -_020D7914: .word 0x040001A8 -_020D7918: .word 0x040001A9 -_020D791C: .word 0x040001AA -_020D7920: .word 0x040001AB -_020D7924: .word 0x040001AC -_020D7928: .word 0x040001AD -_020D792C: .word 0x040001AE -_020D7930: .word 0x040001AF - - arm_func_start CARDi_ReadFromCache -CARDi_ReadFromCache: - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r5, _020D79C8 ; =0x021D55C0 - mov r1, #0x200 - ldr r3, [r5, #0x1c] - rsb r1, r1, #0x0 - ldr r2, [r0, #0x8] - and r3, r3, r1 - cmp r3, r2 - bne _020D79AC - ldr r2, [r5, #0x1c] - ldr r1, [r5, #0x24] - sub r3, r2, r3 - rsb r4, r3, #0x200 - cmp r4, r1 - movhi r4, r1 - add r0, r0, #0x20 - ldr r1, [r5, #0x20] - mov r2, r4 - add r0, r0, r3 - bl MI_CpuCopy8 - ldr r0, [r5, #0x1c] - add r0, r0, r4 - str r0, [r5, #0x1c] - ldr r0, [r5, #0x20] - add r0, r0, r4 - str r0, [r5, #0x20] - ldr r0, [r5, #0x24] - sub r0, r0, r4 - str r0, [r5, #0x24] -_020D79AC: - ldr r0, [r5, #0x24] - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D79C8: .word 0x021D55C0 - - arm_func_start CARDi_Request -CARDi_Request: - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - mov r6, r0 - ldr r0, [r6, #0x114] - mov r5, r1 - mov r4, r2 - ands r0, r0, #0x2 - bne _020D7A44 - ldr r1, [r6, #0x114] - mov r0, #0xb - orr r2, r1, #0x2 - mov r1, #0x1 - str r2, [r6, #0x114] - bl PXI_IsCallbackReady -_020D7A04: ; 0x020D7A04 - cmp r0, #0x0 - bne _020D7A34 - mov r9, #0x64 - mov r8, #0xb - mov r7, #0x1 -_020D7A18: - mov r0, r9 - bl OS_SpinWait - mov r0, r8 - mov r1, r7 - bl PXI_IsCallbackReady -_020D7A2C: ; 0x020D7A2C - cmp r0, #0x0 - beq _020D7A18 -_020D7A34: - mov r0, r6 - mov r1, #0x0 - mov r2, #0x1 - bl CARDi_Request -_020D7A44: - ldr r0, [r6, #0x0] - mov r1, #0x60 - bl DC_FlushRange - bl DC_WaitWriteBufferEmpty - mov r9, #0xb - mov r8, #0x1 - mov r7, #0x0 - mov r11, #0x60 -_020D7A64: - str r5, [r6, #0x4] - ldr r0, [r6, #0x114] - orr r0, r0, #0x20 - str r0, [r6, #0x114] -_020D7A74: - mov r0, r9 - mov r1, r5 - mov r2, r8 - bl PXI_SendWordByFifo -_020D7A84: ; 0x020D7A84 - cmp r0, #0x0 - blt _020D7A74 - cmp r5, #0x0 - bne _020D7AB0 - ldr r10, [r6, #0x0] -_020D7A98: - mov r0, r9 - mov r1, r10 - mov r2, r8 - bl PXI_SendWordByFifo -_020D7AA8: ; 0x020D7AA8 - cmp r0, #0x0 - blt _020D7A98 -_020D7AB0: - bl OS_DisableInterrupts - ldr r1, [r6, #0x114] - mov r10, r0 - ands r0, r1, #0x20 - beq _020D7AD8 -_020D7AC4: - mov r0, r7 - bl OS_SleepThread - ldr r0, [r6, #0x114] - ands r0, r0, #0x20 - bne _020D7AC4 -_020D7AD8: - mov r0, r10 - bl OS_RestoreInterrupts -_020D7AE0: ; 0x020D7AE0 - ldr r0, [r6, #0x0] - mov r1, r11 - bl DC_InvalidateRange -_020D7AEC: ; 0x020D7AEC - ldr r0, [r6, #0x0] - ldr r0, [r0, #0x0] - cmp r0, #0x4 - bne _020D7B08 - sub r4, r4, #0x1 - cmp r4, #0x0 - bgt _020D7A64 -_020D7B08: - cmp r0, #0x0 - moveq r0, #0x1 - movne r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r11,lr} - bx lr - - arm_func_start CARDi_TaskThread -CARDi_TaskThread: ; 0x020D7B20 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r5, _020D7B78 ; =0x021D55C0 - mov r6, #0x0 - add r7, r5, #0x44 -_020D7B34: - bl OS_DisableInterrupts - ldr r1, [r5, #0x114] - mov r4, r0 - ands r0, r1, #0x8 - bne _020D7B60 -_020D7B48: - mov r0, r6 - str r7, [r5, #0x104] - bl OS_SleepThread - ldr r0, [r5, #0x114] - ands r0, r0, #0x8 - beq _020D7B48 -_020D7B60: - mov r0, r4 - bl OS_RestoreInterrupts - ldr r1, [r5, #0x40] - mov r0, r5 - blx r1 - b _020D7B34 - .balign 4 -_020D7B78: .word 0x021D55C0 - - arm_func_start CARDi_OnFifoRecv -CARDi_OnFifoRecv: ; 0x020D7B7C - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r0, #0xb - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - cmp r2, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {lr} - bxeq lr - ldr r1, _020D7BC8 ; =0x021D55C0 - ldr r0, [r1, #0x114] - bic r0, r0, #0x20 - str r0, [r1, #0x114] - ldr r0, [r1, #0x104] - bl OS_WakeupThreadDirect - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D7BC8: .word 0x021D55C0 - - arm_func_start CARDi_SendtoPxi -CARDi_SendtoPxi: ; 0x020D7BCC - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r1, r7 - mov r0, #0xe - mov r2, #0x0 - bl PXI_SendWordByFifo -_020D7BEC: ; 0x020D7BEC - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - mov r5, #0xe - mov r4, #0x0 -_020D7C04: - mov r0, r6 - bl SVC_WaitByLoop - mov r0, r5 - mov r1, r7 - mov r2, r4 - bl PXI_SendWordByFifo -_020D7C1C: ; 0x020D7C1C - cmp r0, #0x0 - bne _020D7C04 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start CARDi_CheckPulledOutCore -CARDi_CheckPulledOutCore: - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - ldr r1, _020D7C94 ; =0x027FFC10 - ldrh r1, [r1, #0x0] - cmp r1, #0x0 - ldreq r1, _020D7C98 ; =0x027FF800 - ldrne r1, _020D7C9C ; =0x027FFC00 - ldr r1, [r1, #0x0] - str r1, [sp, #0x0] - ldr r1, [sp, #0x0] - cmp r0, r1 - addeq sp, sp, #0x8 - ldmeqia sp!, {r4,lr} - bxeq lr - bl OS_DisableInterrupts - mov r4, r0 - mov r0, #0xe - mov r1, #0x11 - mov r2, #0x0 - bl CARDi_PulledOutCallback - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D7C94: .word 0x027FFC10 -_020D7C98: .word 0x027FF800 -_020D7C9C: .word 0x027FFC00 - - arm_func_start CARD_TerminateForPulledOut -CARD_TerminateForPulledOut: ; 0x020D7CA0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020D7D10 ; =0x027FFFA8 - mov r5, #0x1 - ldrh r0, [r0, #0x0] - and r0, r0, #0x8000 - movs r0, r0, asr #0xf - beq _020D7CEC - bl PM_ForceToPowerOff - cmp r0, #0x4 - bne _020D7CE4 - ldr r4, _020D7D14 ; =0x000A3A47 -_020D7CD0: - mov r0, r4 - bl OS_SpinWait - bl PM_ForceToPowerOff - cmp r0, #0x4 - beq _020D7CD0 -_020D7CE4: - cmp r0, #0x0 - moveq r5, #0x0 -_020D7CEC: - cmp r5, #0x0 - beq _020D7D00 - mov r0, #0x1 - mov r1, r0 - bl CARDi_SendtoPxi -_020D7D00: - bl OS_Terminate - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D7D10: .word 0x027FFFA8 -_020D7D14: .word 0x000A3A47 - - arm_func_start CARD_IsPulledOut -CARD_IsPulledOut: ; 0x020D7D18 - ldr r0, _020D7D24 ; =0x021D5E20 - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020D7D24: .word 0x021D5E20 - - arm_func_start CARDi_PulledOutCallback -CARDi_PulledOutCallback: ; 0x020D7D28 - stmdb sp!, {lr} - sub sp, sp, #0x4 - and r0, r1, #0x3f - cmp r0, #0x11 - bne _020D7D90 - ldr r2, _020D7DA0 ; =0x021D5E20 - ldr r0, [r2, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - ldr r1, _020D7DA4 ; =0x021D5E24 - mov r0, #0x1 - ldr r1, [r1, #0x0] - str r0, [r2, #0x0] - cmp r1, #0x0 - beq _020D7D70 - blx r1 -_020D7D70: - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {lr} - bxeq lr - bl CARD_TerminateForPulledOut - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020D7D90: - bl OS_Terminate - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D7DA0: .word 0x021D5E20 -_020D7DA4: .word 0x021D5E24 - - arm_func_start CARD_InitPulledOutCallback -CARD_InitPulledOutCallback: ; 0x020D7DA8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl PXI_Init - ldr r1, _020D7DD8 ; =CARDi_PulledOutCallback - mov r0, #0xe - bl PXI_SetFifoRecvCallback - ldr r0, _020D7DDC ; =0x021D5E24 - mov r1, #0x0 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D7DD8: .word CARDi_PulledOutCallback -_020D7DDC: .word 0x021D5E24 diff --git a/arm9/global.inc b/arm9/global.inc index b7c0e641..0f1b50e2 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -1,7 +1,9 @@ .extern CARD_CancelBackupAsync +.extern CARD_CheckEnabled .extern CARD_GetResultCode .extern CARD_IdentifyBackup .extern CARD_Init +.extern CARD_InitPulledOutCallback .extern CARD_IsPulledOut .extern CARD_LockBackup .extern CARD_LockRom @@ -9,8 +11,16 @@ .extern CARD_UnlockBackup .extern CARD_UnlockRom .extern CARD_WaitBackupAsync +.extern CARDi_CheckPulledOutCore +.extern CARDi_IdentifyBackupCore +.extern CARDi_InitCommon +.extern CARDi_OnFifoRecv .extern CARDi_ReadRom +.extern CARDi_Request .extern CARDi_RequestStreamCommand +.extern CARDi_SetTask +.extern CARDi_TaskThread +.extern CARDi_WaitAsync .extern CP_RestoreContext .extern CP_SaveContext .extern CTRDG_Init @@ -2651,6 +2661,7 @@ .extern FUN_020C1F54 .extern FUN_020C1FA4 .extern FUN_020C1FF0 +.extern FUN_020D6714 .extern FUN_02013EA8 .extern FUN_02013EC4 .extern FUN_0200A06C -- cgit v1.2.3 From cbcfe08b1bd4b1f7173783e81a098315995f698b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 19 May 2020 11:52:54 -0400 Subject: Create CONTRIBUTING.md --- CONTRIBUTING.md | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..397bdf95 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,132 @@ +# Contributing guide for Pokémon Diamond + +**As the repository is in a volatile state, contribution is closed to the public until further notice.** + +This is a living document which lays out the procedure for decompiling the game code of Pokémon Diamond Version (5.0-US) for the Nintendo DS. + +## Structure of the repository + +Nintendo DS games contain separate static binaries and overlays for the ARM7 and ARM9 processors as well as a filesystem. Therefore the repository is laid out as such: + +``` +root +`- arm9 + `- asm + `- data + `- graphics + `- lib + `- src + `- include + `- modules + `- 00 + `- asm + `- src + `- ... + `- src + `- global.inc + `- arm9.lcf + `- Makefile +`- arm7 + `- asm + `- global.inc + `- arm7.lcf + `- Makefile +`- files +`- data +`- graphics +`- include +`- include-mw +`- tools +`- Makefile +``` + +In the above structure, ASM files (.s) in the asm/ directories contains the machine code extracted from the ROM (baserom.nds). They are to be decompiled into C or C++ (.c, .cpp) files in the respective src/ directories. + +## Decompilation of ASM to C + +**Decompilation** entails writing C code which the project compiler (mwccarm) will translate to the exact same assembly code. For example, consider this ASM function: + +```armasm + thumb_func_start FUN_0201B578 +FUN_0201B578: ; 0x0201B578 + lsl r0, r0, #0x5 + add r0, #0x34 + bx lr + .balign 4 +``` + +Without knowing anything else about the function prototypes, we can make an educated guess as to what C code would produce this function. Function arguments are passed in registers r0-r2 or r0-r3, and the return value (if any) is held in r0. The `LSL` instruction means "logical shift left", which is equivalent to multiplying the input operand by a power of 2. In this case, the input operand is being shifted left by 5 bits (multiplied by 20h). The following instruction (`ADD r0, #0x34`) adds 34h to that value, and the final instruction `BX lr` returns to the parent routine with the result of the ADD instruction held in r0. Thus we can surmise that the C function +```c +s32 FUN_0201B578(s32 arg0) +{ + return 32 * arg0 + 52; +} +``` +will produce that assembly code. + +Most functions in the codebase will be longer and more complicated than this. + +## Creating a new C file + +Section link order is specified in the Linker Command File, arm9/arm9.lcf. Only the basenames of each object (.o) file are specified in the lcf and recognized by the project linker, mwldarm. Therefore, no two compiled objects can have the same name. When decompiling asm/foo.s, please create the C file with a different name (basename minus extension i.e. src/foo_c.c). You must explicitly specify the .text, .data, .rodata, and .bss sections in their respective locations in the lcf. For instance: +```diff + file1.o (.text) + file2.o (.text) ++ file3_c.o (.text) + file3.o (.text) + file4.o (.text) +-- + file1.o (.rodata) + file2.o (.rodata) ++ file3_c.o (.rodata) + file3.o (.rodata) + file4.o (.rodata) +``` + +## Testing the build + +After placing your C file into the LCF as described above, test your build by running `make`. Here are some common errors you may encounter and how to resolve them: + + Unknown identifier, FUN_0201B578 + +Append the line `.extern FUN_0201B578` to arm9/global.inc and recompile. + + build/arm9.sbin: FAILED + build/MODULE_00.sbin: FAILED + ... + +Your attempt was incorrect. Don't be discouraged, this is all part of the process. The following bash script will allow you to compare your code to the original ROM; save it as arm9/asmdiff.sh + +```bash +#!/bin/bash + +OBJDUMP_ARCH="${OBJDUMP_ARCH:-armv5te}" +OBJDUMP_MODE="${OBJDUMP_MODE:-force-thumb}" +OBJDUMP_VMA="${OBJDUMP_VMA:-0x02000000}" +OBJDUMP="arm-none-eabi-objdump -Drz -bbinary -m${OBJDUMP_ARCH} -M${OBJDUMP_MODE}" +OPTIONS="--start-address=$(($1 + OBJDUMP_VMA)) --stop-address=$(($1 + $2 + OBJDUMP_VMA))" +$OBJDUMP $OPTIONS baserom.sbin > baserom.dump || exit 1 +$OBJDUMP $OPTIONS build/arm9.sbin > arm9.dump +diff -u baserom.dump arm9.dump +``` +Place a clean version of the ARM9 binary as arm9/baserom.sbin. In your terminal, navigate to the arm9 directory and run `./asmdiff.sh 0 $(wc -c baserom.sbin) | less`, then scroll through to where the grievances begin. Fix any obvious problems in your code/tree, and rerun. If the differences are extensive, you may have induced a shift in the binary either by writing incorrect code or placing it incorrectly into the LCF. *Tip: you can specify a start address and size to only compare the portion of the ROM you are working on.* + +## Decompiling data + +**This section describes a target repository specification and does not reflect the current state of the project.** + +ASM files may own one or more data/RAM sections. The types of these sections is not guaranteed to be accurate. When decompiling data, you are expected to translate the raw bytes into the actual structures used by the source code. These may be simple values (char, short, word, or pointer), or they could be C structs or unions. Some overlay modules are suspected to contain C++ classes, the handling of which is not yet described. + +Because the Nintendo DS architecture is ARM, all data is aligned. This means 16-bit integers are aligned to 2 bytes within a structure, and anything 4 bytes or wider is aligned to 4 bytes (long, long long, float, double, struct, union, void *). All data requiring alignment are padded with 0. For example: +```armasm +u8_var_foo: + .byte 0x05, 0x00, 0x00, 0x00 +ptr_var_bar: + .word u8_var_foo +``` +could have been compiled from +```c +u8 u8_var_foo = 5; +u8 * ptr_var_bar = &u8_var_foo; +``` +Notice that the three extra 0 bytes are treated as implicit padding. -- cgit v1.2.3 From 0a437d2db4d273e4521015755984f74df9d25c10 Mon Sep 17 00:00:00 2001 From: red031000 Date: Tue, 19 May 2020 23:34:49 +0100 Subject: split libwm --- arm9/arm9.lcf | 9 +- arm9/asm/WM_dcf.s | 160 ++ arm9/asm/WM_ds.s | 920 +++++++++ arm9/asm/WM_etc.s | 278 +++ arm9/asm/WM_ks.s | 26 + arm9/asm/WM_mp.s | 320 +++ arm9/asm/WM_standard.s | 684 +++++++ arm9/asm/WM_sync.s | 593 ++++++ arm9/asm/WM_system.s | 791 +++++++ arm9/asm/libwm.s | 3744 ---------------------------------- arm9/global.inc | 17 +- arm9/modules/13/asm/module_13_arm1.s | 2 +- arm9/modules/13/asm/module_13_arm2.s | 2 +- 13 files changed, 3797 insertions(+), 3749 deletions(-) create mode 100644 arm9/asm/WM_dcf.s create mode 100644 arm9/asm/WM_ds.s create mode 100644 arm9/asm/WM_etc.s create mode 100644 arm9/asm/WM_ks.s create mode 100644 arm9/asm/WM_mp.s create mode 100644 arm9/asm/WM_standard.s create mode 100644 arm9/asm/WM_sync.s create mode 100644 arm9/asm/WM_system.s delete mode 100644 arm9/asm/libwm.s diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index 6ded2f28..dddd067c 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -227,7 +227,14 @@ SECTIONS { CARD_rom.o (.text) CARD_request.o (.text) CARD_pullOut.o (.text) - libwm.o (.text) + WM_system.o (.text) + WM_sync.o (.text) + WM_standard.o (.text) + WM_mp.o (.text) + WM_dcf.o (.text) + WM_ds.o (.text) + WM_ks.o (.text) + WM_etc.o (.text) libctrdg.o (.text) libmath.o (.text) libstd.o (.text) diff --git a/arm9/asm/WM_dcf.s b/arm9/asm/WM_dcf.s new file mode 100644 index 00000000..eb802550 --- /dev/null +++ b/arm9/asm/WM_dcf.s @@ -0,0 +1,160 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start WM_EndDCF +WM_EndDCF: ; 0x020D9DDC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl WMi_GetSystemWork + mov r4, r0 + mov r0, #0x1 + mov r1, #0xb + bl WMi_CheckStateEx +_020D9DFC: ; 0x020D9DFC + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r0, [r4, #0x4] + mov r1, #0x4 + add r0, r0, #0x10 + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + ldr r0, [r0, #0x10] + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x3 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + mov r1, r5 + mov r0, #0x13 + bl WMi_SetCallbackTable + mov r0, #0x13 + mov r1, #0x0 + bl WMi_SendCommand +_020D9E50: ; 0x020D9E50 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_SetDCFData +WM_SetDCFData: ; 0x020D9E64 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl WMi_GetSystemWork + mov r8, r0 + mov r0, #0x1 + mov r1, #0xb + bl WMi_CheckStateEx +_020D9E90: ; 0x020D9E90 + cmp r0, #0x0 + addne sp, sp, #0x10 + ldmneia sp!, {r4-r8,lr} + bxne lr + ldr r0, [r8, #0x4] + mov r1, #0x4 + add r0, r0, #0x10 + bl DC_InvalidateRange + ldr r0, [r8, #0x4] + ldr r0, [r0, #0x10] + cmp r0, #0x0 + addeq sp, sp, #0x10 + moveq r0, #0x3 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldr r0, _020D9F3C ; =0x000005E4 + cmp r4, r0 + addhi sp, sp, #0x10 + movhi r0, #0x6 + ldmhiia sp!, {r4-r8,lr} + bxhi lr + mov r0, r5 + mov r1, r4 + bl DC_StoreRange + mov r1, r7 + mov r0, #0x12 + bl WMi_SetCallbackTable + add r1, sp, #0x8 + mov r0, r6 + mov r2, #0x6 + bl MI_CpuCopy8 + str r5, [sp, #0x0] + str r4, [sp, #0x4] + ldr r2, [sp, #0x8] + ldr r3, [sp, #0xc] + mov r0, #0x12 + mov r1, #0x4 + bl WMi_SendCommand +_020D9F28: ; 0x020D9F28 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x10 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020D9F3C: .word 0x000005E4 + + arm_func_start WM_StartDCF +WM_StartDCF: ; 0x020D9F40 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl WMi_GetSystemWork + mov r4, r0 + mov r0, #0x1 + mov r1, #0x8 + bl WMi_CheckStateEx +_020D9F68: ; 0x020D9F68 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + ldr r0, [r4, #0x4] + mov r1, #0x4 + add r0, r0, #0x10 + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + ldr r0, [r0, #0x10] + cmp r0, #0x1 + addeq sp, sp, #0x4 + moveq r0, #0x3 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + cmp r5, #0x10 + addcc sp, sp, #0x4 + movcc r0, #0x6 + ldmccia sp!, {r4-r7,lr} + bxcc lr + cmp r6, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x6 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r6 + mov r1, r5 + bl DC_StoreRange + mov r1, r7 + mov r0, #0x11 + bl WMi_SetCallbackTable + mov r2, r6 + mov r3, r5 + mov r0, #0x11 + mov r1, #0x2 + bl WMi_SendCommand +_020D9FF8: ; 0x020D9FF8 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr diff --git a/arm9/asm/WM_ds.s b/arm9/asm/WM_ds.s new file mode 100644 index 00000000..c2a26eb4 --- /dev/null +++ b/arm9/asm/WM_ds.s @@ -0,0 +1,920 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start WmGetSharedDataAddress +WmGetSharedDataAddress: ; 0x020DA00C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r12, #0x1 + mov r3, r12, lsl r3 + sub r3, r3, #0x1 + mov r5, r0 + and r0, r1, r3 + mov r4, r2 + bl MATH_CountPopulation + add r1, r5, #0x800 + ldrh r1, [r1, #0x10] + mla r0, r1, r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_GetSharedDataAddress +WM_GetSharedDataAddress: ; 0x020DA048 + stmdb sp!, {r4,lr} + mov r4, r1 + ldrh lr, [r4, #0x2] + cmp r0, #0x0 + mov r3, r2 + mov r1, #0x1 + mov r12, r1, lsl r3 + ldrh r1, [r4, #0x0] + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + cmp r4, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ands r2, r1, r12 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ands r2, lr, r12 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + add r2, r4, #0x4 + bl WmGetSharedDataAddress + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WmDataSharingSendDataSet +WmDataSharingSendDataSet: + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x10 + mov r10, r0 + mov r9, r1 + bl OS_DisableInterrupts + add r1, r10, #0x800 + ldrh r1, [r1, #0x8] + mov r7, r0 + mov r1, r1, lsl #0x9 + ldrh r1, [r10, r1] + cmp r1, #0x0 + bne _020DA210 + bl WMi_GetMPReadyAIDs + add r1, r10, #0x800 + ldrh r6, [r1, #0x8] + mov r5, r0 + ldrh r1, [r1, #0x18] + add r0, r6, #0x1 + and r0, r0, #0x3 + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 + cmp r1, #0x1 + addeq r0, r4, #0x1 + andeq r0, r0, #0x3 + moveq r0, r0, lsl #0x10 + moveq r8, r0, lsr #0x10 + movne r8, r4 + add r1, r10, r8, lsl #0x9 + mov r0, #0x0 + mov r2, #0x200 + bl MIi_CpuClear16 + add r0, r10, #0x800 + ldrh r3, [r0, #0xe] + orr r2, r5, #0x1 + mov r1, r8, lsl #0x9 + and r2, r3, r2 + strh r2, [r10, r1] + strh r4, [r0, #0x8] + ldrh r0, [r0, #0xe] + mov r1, r6, lsl #0x9 + cmp r9, #0x1 + strh r0, [r10, r1] + ldreqh r0, [r10, r1] + biceq r0, r0, #0x1 + streqh r0, [r10, r1] + mov r0, r7 + bl OS_RestoreInterrupts + add r3, r10, #0x800 + ldrh r1, [r3, #0xe] + mov r4, #0x1 + ldr r0, _020DA220 ; =WmDataSharingSetDataCallback + and r1, r1, r5 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + str r1, [sp, #0x0] + ldrh r5, [r3, #0x16] + mov r1, r10 + add r2, r10, r6, lsl #0x9 + str r5, [sp, #0x4] + str r4, [sp, #0x8] + ldrh r3, [r3, #0x14] + bl WM_SetMPDataToPortEx + cmp r0, #0x7 + bne _020DA1E4 + add r0, r10, r6, lsl #0x1 + ldr r1, _020DA224 ; =0x0000FFFF + add r0, r0, #0x800 + strh r1, [r0, #0x0] + add r0, r10, #0x800 + ldrh r1, [r0, #0xa] + add sp, sp, #0x10 + add r1, r1, #0x1 + and r1, r1, #0x3 + strh r1, [r0, #0xa] + ldmia sp!, {r4-r10,lr} + bx lr +_020DA1E4: + cmp r0, #0x0 + addeq sp, sp, #0x10 + ldmeqia sp!, {r4-r10,lr} + bxeq lr + cmp r0, #0x2 + addne r0, r10, #0x800 + movne r1, #0x5 + strneh r1, [r0, #0x1c] + add sp, sp, #0x10 + ldmia sp!, {r4-r10,lr} + bx lr +_020DA210: + bl OS_RestoreInterrupts + add sp, sp, #0x10 + ldmia sp!, {r4-r10,lr} + bx lr + .balign 4 +_020DA220: .word WmDataSharingSetDataCallback +_020DA224: .word 0x0000FFFF + + arm_func_start WmDataSharingReceiveData +WmDataSharingReceiveData: ; 0x020DA228 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r3, r1 + mov r0, #0x1 + mov r0, r0, lsl r3 + add r12, r7, #0x800 + mov r0, r0, lsl #0x10 + ldrh r1, [r12, #0xe] + mov r5, r0, lsr #0x10 + mov r6, r2 + ands r0, r1, r5 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldrh r4, [r12, #0x8] + mov r0, r4, lsl #0x9 + ldrh r0, [r7, r0] + ands r0, r5, r0 + bne _020DA2B4 + ldrh r0, [r12, #0x18] + cmp r0, #0x1 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + add r0, r4, #0x1 + and r0, r0, #0x3 + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 + mov r0, r4, lsl #0x9 + ldrh r0, [r7, r0] + ands r0, r5, r0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr +_020DA2B4: + add r2, r7, r4, lsl #0x9 + mov r0, r7 + add r2, r2, #0x4 + bl WmGetSharedDataAddress + mov r1, r0 + cmp r6, #0x0 + beq _020DA2E4 + add r0, r7, #0x800 + ldrh r2, [r0, #0x10] + mov r0, r6 + bl MIi_CpuCopy16 + b _020DA2F4 +_020DA2E4: + add r0, r7, #0x800 + ldrh r2, [r0, #0x10] + mov r0, #0x0 + bl MIi_CpuClear16 +_020DA2F4: + bl OS_DisableInterrupts + mov r4, r4, lsl #0x9 + ldrh r3, [r7, r4] + mvn r1, r5 + add r2, r7, #0x2 + and r1, r3, r1 + strh r1, [r7, r4] + ldrh r1, [r2, r4] + orr r1, r1, r5 + strh r1, [r2, r4] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WmDataSharingReceiveCallback_Child +WmDataSharingReceiveCallback_Child: ; 0x020DA32C + stmdb sp!, {r4-r8,lr} + mov r8, r0 + ldr r7, [r8, #0x1c] + cmp r7, #0x0 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldrh r0, [r8, #0x2] + cmp r0, #0x0 + bne _020DA458 + ldrh r0, [r8, #0x4] + cmp r0, #0x15 + bgt _020DA394 + cmp r0, #0x15 + bge _020DA3C4 + cmp r0, #0x9 + ldmgtia sp!, {r4-r8,lr} + bxgt lr + cmp r0, #0x7 + ldmltia sp!, {r4-r8,lr} + bxlt lr + cmp r0, #0x7 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + cmp r0, #0x9 + ldmia sp!, {r4-r8,lr} + bx lr +_020DA394: + cmp r0, #0x1a + ldmgtia sp!, {r4-r8,lr} + bxgt lr + cmp r0, #0x19 + ldmltia sp!, {r4-r8,lr} + bxlt lr + cmp r0, #0x19 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + cmp r0, #0x1a + ldmia sp!, {r4-r8,lr} + bx lr +_020DA3C4: + ldr r4, [r8, #0xc] + ldrh r6, [r8, #0x10] + ldrh r5, [r4, #0x0] + bl WM_GetAID + add r1, r7, #0x800 + ldrh r1, [r1, #0x14] + cmp r6, r1 + beq _020DA3EC + cmp r6, #0x200 + movhi r6, #0x200 +_020DA3EC: + cmp r6, #0x4 + ldmccia sp!, {r4-r8,lr} + bxcc lr + mov r1, #0x1 + mov r0, r1, lsl r0 + ands r0, r5, r0 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + add r0, r7, #0x800 + ldrh r1, [r0, #0x8] + mov r0, r4 + mov r2, r6 + add r1, r7, r1, lsl #0x9 + bl MIi_CpuCopy16 + add r1, r7, #0x800 + ldrh r0, [r1, #0x8] + ldrh r2, [r8, #0x1a] + add r0, r7, r0, lsl #0x1 + mov r2, r2, asr #0x1 + add r0, r0, #0x800 + strh r2, [r0, #0x0] + ldrh r0, [r1, #0x8] + add r0, r0, #0x1 + and r0, r0, #0x3 + strh r0, [r1, #0x8] + ldmia sp!, {r4-r8,lr} + bx lr +_020DA458: + add r0, r7, #0x800 + mov r1, #0x5 + strh r1, [r0, #0x1c] + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start WmDataSharingReceiveCallback_Parent +WmDataSharingReceiveCallback_Parent: ; 0x020DA46C + stmdb sp!, {r4-r6,lr} + ldr r4, [r0, #0x1c] + cmp r4, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldrh r1, [r0, #0x2] + cmp r1, #0x0 + bne _020DA5C4 + ldrh r1, [r0, #0x4] + cmp r1, #0x15 + bgt _020DA4D0 + cmp r1, #0x15 + bge _020DA504 + cmp r1, #0x9 + ldmgtia sp!, {r4-r6,lr} + bxgt lr + cmp r1, #0x7 + ldmltia sp!, {r4-r6,lr} + bxlt lr + cmp r1, #0x7 + beq _020DA528 + cmp r1, #0x9 + beq _020DA53C + ldmia sp!, {r4-r6,lr} + bx lr +_020DA4D0: + cmp r1, #0x1a + ldmgtia sp!, {r4-r6,lr} + bxgt lr + cmp r1, #0x19 + ldmltia sp!, {r4-r6,lr} + bxlt lr + cmp r1, #0x19 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + cmp r1, #0x1a + beq _020DA53C + ldmia sp!, {r4-r6,lr} + bx lr +_020DA504: + ldrh r1, [r0, #0x12] + ldr r2, [r0, #0xc] + mov r0, r4 + bl WmDataSharingReceiveData + mov r0, r4 + mov r1, #0x0 + bl WmDataSharingSendDataSet + ldmia sp!, {r4-r6,lr} + bx lr +_020DA528: + mov r0, r4 + mov r1, #0x0 + bl WmDataSharingSendDataSet + ldmia sp!, {r4-r6,lr} + bx lr +_020DA53C: + ldrh r5, [r0, #0x12] + mov r6, #0x1 + bl OS_DisableInterrupts + add r1, r4, #0x800 + ldrh lr, [r1, #0x8] + mvn r12, r6, lsl r5 + mov r3, lr, lsl #0x9 + ldrh r2, [r4, r3] + and r2, r2, r12 + strh r2, [r4, r3] + ldrh r1, [r1, #0x18] + cmp r1, #0x1 + bne _020DA58C + add r1, lr, #0x1 + and r1, r1, #0x3 + mov r1, r1, lsl #0x10 + mov r2, r1, lsr #0x7 + ldrh r1, [r4, r2] + and r1, r1, r12 + strh r1, [r4, r2] +_020DA58C: + bl OS_RestoreInterrupts + mov r0, r4 + mov r1, #0x0 + bl WmDataSharingSendDataSet + add r0, r4, #0x800 + ldrh r0, [r0, #0x18] + cmp r0, #0x1 + ldmneia sp!, {r4-r6,lr} + bxne lr + mov r0, r4 + mov r1, #0x0 + bl WmDataSharingSendDataSet + ldmia sp!, {r4-r6,lr} + bx lr +_020DA5C4: + add r0, r4, #0x800 + mov r1, #0x5 + strh r1, [r0, #0x1c] + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start WmDataSharingSetDataCallback +WmDataSharingSetDataCallback: ; 0x020DA5D8 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl WMi_GetSystemWork + ldrh r2, [r5, #0xa] + ldr r1, _020DA6E4 ; =WmDataSharingReceiveCallback_Parent + add r0, r0, r2, lsl #0x2 + ldr r2, [r0, #0xcc] + ldr r4, [r0, #0x10c] + cmp r2, r1 + beq _020DA618 + ldr r0, _020DA6E8 ; =WmDataSharingReceiveCallback_Child + cmp r2, r0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr +_020DA618: + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r0, [r5, #0x20] + cmp r4, r0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + bl WM_GetAID + ldrh r1, [r5, #0x2] + cmp r1, #0x0 + bne _020DA694 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + add r1, r4, #0x800 + ldrh r0, [r1, #0xa] + ldrh r2, [r5, #0x1a] + add sp, sp, #0x4 + add r0, r4, r0, lsl #0x1 + mov r2, r2, asr #0x1 + add r0, r0, #0x800 + strh r2, [r0, #0x0] + ldrh r0, [r1, #0xa] + add r0, r0, #0x1 + and r0, r0, #0x3 + strh r0, [r1, #0xa] + ldmia sp!, {r4-r5,lr} + bx lr +_020DA694: + cmp r1, #0xa + bne _020DA6CC + cmp r0, #0x0 + addne r0, r4, #0x800 + ldrneh r1, [r0, #0xa] + add sp, sp, #0x4 + addne r1, r1, #0x3 + andne r1, r1, #0x3 + strneh r1, [r0, #0xa] + add r0, r4, #0x800 + mov r1, #0x4 + strh r1, [r0, #0x1c] + ldmia sp!, {r4-r5,lr} + bx lr +_020DA6CC: + add r0, r4, #0x800 + mov r1, #0x5 + strh r1, [r0, #0x1c] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DA6E4: .word WmDataSharingReceiveCallback_Parent +_020DA6E8: .word WmDataSharingReceiveCallback_Child + + arm_func_start WM_StepDataSharing +WM_StepDataSharing: ; 0x020DA6EC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r10, r0 + mov r9, r1 + mov r8, r2 + mov r0, #0x2 + mov r1, #0x9 + mov r2, #0xa + bl WMi_CheckStateEx +_020DA710: ; 0x020DA710 + cmp r0, #0x0 + addne sp, sp, #0xc + ldmneia sp!, {r4-r11,lr} + bxne lr + cmp r10, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x6 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + cmp r9, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x6 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + cmp r8, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x6 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + bl WM_GetAID + movs r4, r0 + bne _020DA770 + bl WMi_GetMPReadyAIDs + mov r7, r0 +_020DA770: + add r0, r10, #0x800 + ldrh r0, [r0, #0x1c] + cmp r0, #0x5 + addeq sp, sp, #0xc + moveq r0, #0x1 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + cmp r0, #0x1 + beq _020DA7A8 + cmp r0, #0x4 + addne sp, sp, #0xc + movne r0, #0x3 + ldmneia sp!, {r4-r11,lr} + bxne lr +_020DA7A8: + cmp r4, #0x0 + mov r4, #0x5 + bne _020DA94C + mov r6, #0x0 + mov r11, r6 + cmp r0, #0x4 + bne _020DA870 + add r1, r10, #0x800 + mov r3, #0x1 + strh r3, [r1, #0x1c] + ldrh r5, [r1, #0xe] + ldrh r2, [r1, #0x8] + ldr r0, _020DAA64 ; =WmDataSharingSetDataCallback + and r5, r5, r7 + mov r5, r5, lsl #0x10 + mov r5, r5, lsr #0x10 + str r5, [sp, #0x0] + ldrh r5, [r1, #0x16] + add r2, r2, #0x3 + and r2, r2, #0x3 + str r5, [sp, #0x4] + str r3, [sp, #0x8] + mov r2, r2, lsl #0x10 + mov r5, r2, lsr #0x10 + ldrh r3, [r1, #0x14] + mov r1, r10 + add r2, r10, r5, lsl #0x9 + bl WM_SetMPDataToPortEx + cmp r0, #0x7 + bne _020DA848 + add r0, r10, r5, lsl #0x1 + ldr r1, _020DAA68 ; =0x0000FFFF + add r0, r0, #0x800 + strh r1, [r0, #0x0] + add r0, r10, #0x800 + ldrh r1, [r0, #0xa] + add r1, r1, #0x1 + and r1, r1, #0x3 + strh r1, [r0, #0xa] + b _020DA870 +_020DA848: + cmp r0, #0x0 + beq _020DA870 + cmp r0, #0x2 + addne r0, r10, #0x800 + movne r1, r4 + strneh r1, [r0, #0x1c] + addne sp, sp, #0xc + movne r0, #0x1 + ldmneia sp!, {r4-r11,lr} + bxne lr +_020DA870: + add r0, r10, #0x800 + ldrh r2, [r0, #0xc] + ldrh r1, [r0, #0xa] + cmp r2, r1 + beq _020DA908 + mov r4, r2, lsl #0x9 + ldrh r3, [r10, r4] + mov r1, r8 + mov r2, #0x200 + orr r3, r3, #0x1 + strh r3, [r10, r4] + ldrh r0, [r0, #0xc] + add r0, r10, r0, lsl #0x9 + bl MIi_CpuCopy16 + add r1, r10, #0x800 + ldrh r0, [r1, #0xc] + mov r6, #0x1 + mov r4, #0x0 + add r0, r10, r0, lsl #0x1 + add r0, r0, #0x800 + ldrh r0, [r0, #0x0] + strh r0, [r1, #0x1a] + ldrh r0, [r1, #0xc] + add r0, r0, #0x1 + and r0, r0, #0x3 + strh r0, [r1, #0xc] + ldrh r0, [r1, #0x18] + cmp r0, #0x0 + bne _020DA904 + cmp r7, #0x0 + beq _020DA904 + ldrh r0, [r1, #0x8] + mov r0, r0, lsl #0x9 + ldrh r0, [r10, r0] + cmp r0, #0x1 + moveq r11, r6 + beq _020DA908 +_020DA904: + mov r11, #0x0 +_020DA908: + mov r0, r10 + mov r1, #0x0 + bl WmDataSharingSendDataSet +_020DA914: ; 0x020DA914 + cmp r6, #0x0 + beq _020DAA54 + mov r0, r10 + mov r2, r9 + mov r1, #0x0 + bl WmDataSharingReceiveData + add r0, r10, #0x800 + ldrh r0, [r0, #0x18] + cmp r0, #0x0 + bne _020DAA54 + mov r0, r10 + mov r1, r11 + bl WmDataSharingSendDataSet + b _020DAA54 +_020DA94C: + cmp r0, #0x4 + mov r0, #0x0 + addeq r1, r10, #0x800 + moveq r0, #0x1 + streqh r0, [r1, #0x1c] + beq _020DA9D0 + add r1, r10, #0x800 + ldrh r2, [r1, #0xc] + ldrh r1, [r1, #0x8] + cmp r2, r1 + beq _020DA9D0 + mov r2, r2, lsl #0x9 + ldrh r1, [r10, r2] + ands r3, r1, #0x1 + orreq r1, r1, #0x1 + streqh r1, [r10, r2] + beq _020DA9D0 + mov r1, r8 + add r0, r10, r2 + mov r2, #0x200 + bl MIi_CpuCopy16 + add r2, r10, #0x800 + ldrh r1, [r2, #0xc] + mov r0, #0x1 + mov r4, #0x0 + add r1, r10, r1, lsl #0x1 + add r1, r1, #0x800 + ldrh r1, [r1, #0x0] + strh r1, [r2, #0x1a] + ldrh r1, [r2, #0xc] + add r1, r1, #0x1 + and r1, r1, #0x3 + strh r1, [r2, #0xc] +_020DA9D0: + cmp r0, #0x0 + beq _020DAA54 + add r0, r10, #0x800 + ldrh r1, [r0, #0xa] + ldrh r2, [r0, #0x10] + mov r0, r9 + add r1, r10, r1, lsl #0x9 + add r7, r1, #0x20 + mov r1, r7 + bl MIi_CpuCopy16 + add r3, r10, #0x800 + ldrh r1, [r3, #0xe] + mov r5, #0x1 + ldr r0, _020DAA64 ; =WmDataSharingSetDataCallback + str r1, [sp, #0x0] + ldrh r6, [r3, #0x16] + mov r1, r10 + mov r2, r7 + str r6, [sp, #0x4] + str r5, [sp, #0x8] + ldrh r3, [r3, #0x10] + bl WM_SetMPDataToPortEx + add r1, r10, #0x800 + ldrh r2, [r1, #0xa] + cmp r0, #0x2 + add r2, r2, #0x1 + and r2, r2, #0x3 + strh r2, [r1, #0xa] + beq _020DAA54 + cmp r0, #0x0 + movne r0, #0x5 + strneh r0, [r1, #0x1c] + movne r4, r5 +_020DAA54: + mov r0, r4 + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020DAA64: .word WmDataSharingSetDataCallback +_020DAA68: .word 0x0000FFFF + + arm_func_start WM_EndDataSharing +WM_EndDataSharing: ; 0x020DAA6C + stmdb sp!, {r4,lr} + movs r4, r0 + moveq r0, #0x6 + ldmeqia sp!, {r4,lr} + bxeq lr + add r0, r4, #0x800 + ldrh r1, [r0, #0xe] + cmp r1, #0x0 + moveq r0, #0x3 + ldmeqia sp!, {r4,lr} + bxeq lr + ldrh r0, [r0, #0x16] + mov r1, #0x0 + mov r2, r1 + bl WM_SetPortCallback + add r1, r4, #0x800 + mov r0, #0x0 + strh r0, [r1, #0xe] + strh r0, [r1, #0x1c] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_StartDataSharing +WM_StartDataSharing: ; 0x020DAAC0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r10, r0 + mov r7, r1 + mov r6, r2 + mov r0, #0x2 + mov r1, #0x9 + mov r2, #0xa + mov r5, r3 + mov r9, #0x1 + bl WMi_CheckStateEx +_020DAAEC: ; 0x020DAAEC + cmp r0, #0x0 + addne sp, sp, #0xc + ldmneia sp!, {r4-r11,lr} + bxne lr + cmp r10, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x6 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + cmp r7, #0x10 + addcs sp, sp, #0xc + movcs r0, #0x6 + ldmcsia sp!, {r4-r11,lr} + bxcs lr + cmp r6, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x6 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + bl WM_GetAID + movs r4, r0 + bne _020DAB4C + bl WMi_GetMPReadyAIDs + mov r9, r0 +_020DAB4C: + mov r1, r10 + mov r0, #0x0 + mov r2, #0x820 + bl MIi_CpuClearFast + add r0, r10, #0x800 + mov r2, #0x0 + strh r2, [r0, #0x8] + strh r2, [r0, #0xa] + strh r2, [r0, #0xc] + strh r5, [r0, #0x10] + strh r7, [r0, #0x16] + strh r2, [r0, #0xe] + mov r0, #0x1 + ldr r1, [sp, #0x30] + orr r0, r6, r0, lsl r4 + cmp r1, #0x0 + mov r0, r0, lsl #0x10 + movne r2, #0x1 + add r1, r10, #0x800 + strh r2, [r1, #0x18] + mov r0, r0, lsr #0x10 + strh r0, [r1, #0xe] + bl MATH_CountPopulation + add r3, r10, #0x800 + mul r1, r5, r0 + strh r0, [r3, #0x12] + strh r1, [r3, #0x14] + ldrh r0, [r3, #0x14] + cmp r0, #0x1fc + movhi r0, #0x0 + strhih r0, [r3, #0xe] + addhi sp, sp, #0xc + movhi r0, #0x6 + ldmhiia sp!, {r4-r11,lr} + bxhi lr + add r0, r0, #0x4 + strh r0, [r3, #0x14] + mov r0, #0x1 + strh r0, [r3, #0x1c] + cmp r4, #0x0 + bne _020DAD04 + orr r2, r9, #0x1 + mov r4, #0x0 +_020DABF8: + ldrh r1, [r3, #0xe] + mov r0, r4, lsl #0x9 + add r4, r4, #0x1 + and r1, r1, r2 + strh r1, [r10, r0] + cmp r4, #0x4 + blt _020DABF8 + ldr r1, _020DAD2C ; =WmDataSharingReceiveCallback_Parent + mov r0, r7 + mov r2, r10 + bl WM_SetPortCallback + mov r8, r10 + mov r7, #0x0 + mov r4, #0x2 + mov r6, #0x1 + ldr fp, _020DAD30 ; =WmDataSharingSetDataCallback + ldr r5, _020DAD34 ; =0x0000FFFF + b _020DACE4 +_020DAC40: + add r12, r10, #0x800 + ldrh r2, [r12, #0x8] + mov r0, r11 + mov r1, r10 + add r2, r2, #0x1 + and r2, r2, #0x3 + strh r2, [r12, #0x8] + ldrh r3, [r12, #0xe] + mov r2, r8 + and r3, r3, r9 + mov r3, r3, lsl #0x10 + mov r3, r3, lsr #0x10 + str r3, [sp, #0x0] + ldrh r3, [r12, #0x16] + str r3, [sp, #0x4] + str r6, [sp, #0x8] + ldrh r3, [r12, #0x14] + bl WM_SetMPDataToPortEx + cmp r0, #0x7 + bne _020DACB4 + add r0, r10, r7, lsl #0x1 + add r0, r0, #0x800 + strh r5, [r0, #0x0] + add r0, r10, #0x800 + ldrh r1, [r0, #0xa] + add r1, r1, #0x1 + and r1, r1, #0x3 + strh r1, [r0, #0xa] + b _020DACDC +_020DACB4: + cmp r0, #0x0 + beq _020DACDC + cmp r0, #0x2 + addne r0, r10, #0x800 + movne r1, #0x5 + strneh r1, [r0, #0x1c] + addne sp, sp, #0xc + movne r0, #0x1 + ldmneia sp!, {r4-r11,lr} + bxne lr +_020DACDC: + add r8, r8, #0x200 + add r7, r7, #0x1 +_020DACE4: + add r0, r10, #0x800 + ldrh r0, [r0, #0x18] + cmp r0, #0x1 + movne r0, r6 + moveq r0, r4 + cmp r7, r0 + blt _020DAC40 + b _020DAD1C +_020DAD04: + ldr r1, _020DAD38 ; =WmDataSharingReceiveCallback_Child + mov r4, #0x3 + mov r0, r7 + mov r2, r10 + strh r4, [r3, #0xa] + bl WM_SetPortCallback +_020DAD1C: + mov r0, #0x0 + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020DAD2C: .word WmDataSharingReceiveCallback_Parent +_020DAD30: .word WmDataSharingSetDataCallback +_020DAD34: .word 0x0000FFFF +_020DAD38: .word WmDataSharingReceiveCallback_Child diff --git a/arm9/asm/WM_etc.s b/arm9/asm/WM_etc.s new file mode 100644 index 00000000..1e960fab --- /dev/null +++ b/arm9/asm/WM_etc.s @@ -0,0 +1,278 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start WM_SetEntry +WM_SetEntry: ; 0x020DAD74 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + mov r0, #0x2 + mov r1, #0x7 + mov r2, #0x9 + bl WMi_CheckStateEx +_020DAD94: ; 0x020DAD94 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + mov r1, r5 + mov r0, #0x21 + bl WMi_SetCallbackTable + mov r2, r4 + mov r0, #0x21 + mov r1, #0x1 + bl WMi_SendCommand +_020DADC0: ; 0x020DADC0 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_MeasureChannel +WM_MeasureChannel: ; 0x020DADD4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl WMi_GetSystemWork + mov r0, #0x1 + mov r1, #0x2 + bl WMi_CheckStateEx +_020DADFC: ; 0x020DADFC + cmp r0, #0x0 + addne sp, sp, #0xc + ldmneia sp!, {r4-r7,lr} + bxne lr + mov r1, r7 + mov r0, #0x1e + bl WMi_SetCallbackTable + ldrh r2, [sp, #0x20] + mov r3, #0x1e + add r0, sp, #0x0 + mov r1, #0xa + strh r3, [sp, #0x0] + strh r6, [sp, #0x2] + strh r5, [sp, #0x4] + strh r4, [sp, #0x6] + strh r2, [sp, #0x8] + bl WMi_SendCommandDirect +_020DAE40: ; 0x020DAE40 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WM_SetLifeTime +WM_SetLifeTime: ; 0x020DAE54 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl WMi_CheckIdle +_020DAE70: ; 0x020DAE70 + cmp r0, #0x0 + addne sp, sp, #0xc + ldmneia sp!, {r4-r7,lr} + bxne lr + mov r1, r7 + mov r0, #0x1d + bl WMi_SetCallbackTable + ldrh r12, [sp, #0x20] + str r4, [sp, #0x0] + mov r2, r6 + mov r3, r5 + mov r0, #0x1d + mov r1, #0x4 + str r12, [sp, #0x4] + bl WMi_SendCommand +_020DAEAC: ; 0x020DAEAC + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WM_SetBeaconIndication +WM_SetBeaconIndication: ; 0x020DAEC0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 +_020DAECC: ; 0x020DAECC + mov r4, r1 + bl WMi_CheckIdle +_020DAED4: ; 0x020DAED4 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + cmp r4, #0x0 + beq _020DAF00 + cmp r4, #0x1 + addne sp, sp, #0x4 + movne r0, #0x6 + ldmneia sp!, {r4-r5,lr} + bxne lr +_020DAF00: + mov r1, r5 + mov r0, #0x19 + bl WMi_SetCallbackTable + mov r2, r4 + mov r0, #0x19 + mov r1, #0x1 + bl WMi_SendCommand +_020DAF1C: ; 0x020DAF1C + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_SetGameInfo +WM_SetGameInfo: ; 0x020DAF30 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r0, #0x2 + mov r1, #0x7 + mov r2, #0x9 + mov r4, r3 + bl WMi_CheckStateEx +_020DAF58: ; 0x020DAF58 + cmp r0, #0x0 + addne sp, sp, #0xc + ldmneia sp!, {r4-r7,lr} + bxne lr + cmp r6, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x6 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + cmp r5, #0x70 + addhi sp, sp, #0xc + movhi r0, #0x6 + ldmhiia sp!, {r4-r7,lr} + bxhi lr + ldr r1, _020DAFF4 ; =0x021D68C0 + mov r0, r6 + mov r2, r5 + bl MIi_CpuCopy16 + ldr r0, _020DAFF4 ; =0x021D68C0 + mov r1, r5 + bl DC_StoreRange + mov r1, r7 + mov r0, #0x18 + bl WMi_SetCallbackTable + ldrh r0, [sp, #0x20] + str r4, [sp, #0x0] + ldrb r1, [sp, #0x24] + str r0, [sp, #0x4] + ldr r2, _020DAFF4 ; =0x021D68C0 + str r1, [sp, #0x8] + mov r3, r5 + mov r0, #0x18 + mov r1, #0x5 + bl WMi_SendCommand +_020DAFE0: ; 0x020DAFE0 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DAFF4: .word 0x021D68C0 + + arm_func_start WM_SetWEPKeyEx +WM_SetWEPKeyEx: ; 0x020DAFF8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl WMi_CheckIdle +_020DB014: ; 0x020DB014 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + cmp r6, #0x3 + addhi sp, sp, #0x4 + movhi r0, #0x6 + ldmhiia sp!, {r4-r7,lr} + bxhi lr + cmp r6, #0x0 + beq _020DB060 + cmp r4, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x6 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r4 + mov r1, #0x50 + bl DC_StoreRange +_020DB060: + mov r1, r7 + mov r0, #0x27 + bl WMi_SetCallbackTable + mov r2, r6 + mov r3, r4 + mov r0, #0x27 + mov r1, #0x3 + str r5, [sp, #0x0] + bl WMi_SendCommand +_020DB084: ; 0x020DB084 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WM_SetWEPKey +WM_SetWEPKey: ; 0x020DB098 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl WMi_CheckIdle +_020DB0AC: ; 0x020DB0AC + cmp r0, #0x0 + ldmneia sp!, {r4-r6,lr} + bxne lr + cmp r5, #0x3 + movhi r0, #0x6 + ldmhiia sp!, {r4-r6,lr} + bxhi lr + cmp r5, #0x0 + beq _020DB0EC + cmp r4, #0x0 + moveq r0, #0x6 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + mov r0, r4 + mov r1, #0x50 + bl DC_StoreRange +_020DB0EC: + mov r1, r6 + mov r0, #0x14 + bl WMi_SetCallbackTable + mov r2, r5 + mov r3, r4 + mov r0, #0x14 + mov r1, #0x2 + bl WMi_SendCommand +_020DB10C: ; 0x020DB10C + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4-r6,lr} + bx lr diff --git a/arm9/asm/WM_ks.s b/arm9/asm/WM_ks.s new file mode 100644 index 00000000..ba5fdb5c --- /dev/null +++ b/arm9/asm/WM_ks.s @@ -0,0 +1,26 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start WM_EndKeySharing +WM_EndKeySharing: ; 0x020DAD3C + ldr ip, _020DAD44 ; =WM_EndDataSharing + bx r12 + .balign 4 +_020DAD44: .word WM_EndDataSharing + + arm_func_start WM_StartKeySharing +WM_StartKeySharing: ; 0x020DAD48 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020DAD70 ; =0x0000FFFF + mov r12, #0x1 + mov r3, #0x2 + str r12, [sp, #0x0] + bl WM_StartDataSharing + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DAD70: .word 0x0000FFFF diff --git a/arm9/asm/WM_mp.s b/arm9/asm/WM_mp.s new file mode 100644 index 00000000..0c2fca76 --- /dev/null +++ b/arm9/asm/WM_mp.s @@ -0,0 +1,320 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start WM_EndMP +WM_EndMP: ; 0x020D9960 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl WMi_GetSystemWork + mov r4, r0 + mov r0, #0x2 + mov r1, #0x9 + mov r2, #0xa + bl WMi_CheckStateEx +_020D9984: ; 0x020D9984 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r0, [r4, #0x4] + mov r1, #0x4 + add r0, r0, #0xc + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + ldr r0, [r0, #0xc] + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x3 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + mov r1, r5 + mov r0, #0x10 + bl WMi_SetCallbackTable + mov r0, #0x10 + mov r1, #0x0 + bl WMi_SendCommand +_020D99D8: ; 0x020D99D8 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_SetMPDataToPortEx +WM_SetMPDataToPortEx: ; 0x020D99EC + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x14 + mov r9, r0 + mov r8, r1 + mov r7, r2 + mov r6, r3 + mov r5, #0x1 + bl WMi_GetSystemWork + ldr r4, [r0, #0x4] + mov r0, #0x2 + mov r1, #0x9 + mov r2, #0xa + bl WMi_CheckStateEx +_020D9A20: ; 0x020D9A20 + cmp r0, #0x0 + addne sp, sp, #0x14 + ldmneia sp!, {r4-r9,lr} + bxne lr + add r0, r4, #0x3c + mov r1, #0x2 + bl DC_InvalidateRange + add r0, r4, #0x188 + mov r1, #0x2 + bl DC_InvalidateRange + add r0, r4, #0x100 + ldrh r0, [r0, #0x88] + cmp r0, #0x0 + bne _020D9A7C + ldr r0, _020D9B44 ; =0x00000182 + mov r1, #0x2 + add r0, r4, r0 + bl DC_InvalidateRange + add r2, r4, #0x100 + add r0, r4, #0x86 + mov r1, #0x2 + ldrh r5, [r2, #0x82] + bl DC_InvalidateRange +_020D9A7C: + cmp r7, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x6 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + cmp r5, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x7 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + add r0, r4, #0x7c + mov r1, #0x2 + bl DC_InvalidateRange + ldr r0, [r4, #0x7c] + cmp r7, r0 + addeq sp, sp, #0x14 + moveq r0, #0x6 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + cmp r6, #0x200 + addhi sp, sp, #0x14 + movhi r0, #0x6 + ldmhiia sp!, {r4-r9,lr} + bxhi lr + cmp r6, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x6 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + mov r0, r7 + mov r1, r6 + bl DC_StoreRange + ldrh r2, [sp, #0x30] + ldrh r1, [sp, #0x34] + ldrh r0, [sp, #0x38] + str r2, [sp, #0x0] + str r1, [sp, #0x4] + str r0, [sp, #0x8] + str r9, [sp, #0xc] + mov r2, r7 + mov r3, r6 + mov r0, #0xf + mov r1, #0x7 + str r8, [sp, #0x10] + bl WMi_SendCommand +_020D9B30: ; 0x020D9B30 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x14 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020D9B44: .word 0x00000182 + + arm_func_start WM_StartMP +WM_StartMP: ; 0x020D9B48 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x24 + mov r6, r1 + mov r7, r0 + mov r5, r2 + add r1, sp, #0x8 + mov r0, #0x0 + mov r2, #0x1c + mov r4, r3 + bl MIi_CpuClear32 + ldrh r12, [sp, #0x3c] + mov r0, #0x3 + str r0, [sp, #0x8] + ldrh lr, [sp, #0x38] + strh r12, [sp, #0xc] + strh r12, [sp, #0xe] + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, r4 + add r12, sp, #0x8 + str lr, [sp, #0x0] + str r12, [sp, #0x4] + bl WMi_StartMP + add sp, sp, #0x24 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WM_StartMPEx +WM_StartMPEx: ; 0x020D9BB4 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x28 + mov r6, r1 + mov r7, r0 + mov r5, r2 + add r1, sp, #0x8 + mov r0, #0x0 + mov r2, #0x1c + mov r4, r3 + bl MIi_CpuClear32 + ldrh lr, [sp, #0x44] + ldr r1, [sp, #0x58] + ldrh r12, [sp, #0x48] + ldr r0, [sp, #0x54] + ldr r8, _020D9C54 ; =0x00001E03 + cmp r0, #0x0 + ldr r3, [sp, #0x4c] + ldr r2, [sp, #0x50] + strb r1, [sp, #0x22] + strh r12, [sp, #0x1e] + strb r3, [sp, #0x20] + strb r2, [sp, #0x21] + ldrh r1, [sp, #0x40] + str r8, [sp, #0x8] + orrne r0, r8, #0x4 + strne r0, [sp, #0x8] + strh lr, [sp, #0xc] + strh lr, [sp, #0xe] + strneh lr, [sp, #0x10] + str r1, [sp, #0x0] + add r12, sp, #0x8 + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, r4 + str r12, [sp, #0x4] + bl WMi_StartMP + add sp, sp, #0x28 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020D9C54: .word 0x00001E03 + + arm_func_start WMi_StartMP +WMi_StartMP: ; 0x020D9C58 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x34 + mov r9, r0 + mov r8, r1 + mov r7, r2 + mov r6, r3 + bl WMi_GetSystemWork + ldr r5, [r0, #0x4] + mov r0, #0x2 + mov r1, #0x7 + mov r2, #0x8 + bl WMi_CheckStateEx +_020D9C88: ; 0x020D9C88 + cmp r0, #0x0 + addne sp, sp, #0x34 + ldmneia sp!, {r4-r9,lr} + bxne lr + add r0, r5, #0x188 + mov r1, #0x2 + bl DC_InvalidateRange + add r0, r5, #0xc6 + mov r1, #0x2 + bl DC_InvalidateRange + add r0, r5, #0x100 + ldrh r0, [r0, #0x88] + cmp r0, #0x0 + beq _020D9CD8 + ldrh r0, [r5, #0xc6] + cmp r0, #0x1 + addne sp, sp, #0x34 + movne r0, #0x3 + ldmneia sp!, {r4-r9,lr} + bxne lr +_020D9CD8: + add r0, r5, #0xc + mov r1, #0x4 + bl DC_InvalidateRange + ldr r0, [r5, #0xc] + cmp r0, #0x1 + addeq sp, sp, #0x34 + moveq r0, #0x3 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + ands r0, r7, #0x3f + addne sp, sp, #0x34 + movne r0, #0x6 + ldmneia sp!, {r4-r9,lr} + bxne lr + ldrh r4, [sp, #0x50] + ands r0, r4, #0x1f + addne sp, sp, #0x34 + movne r0, #0x6 + ldmneia sp!, {r4-r9,lr} + bxne lr + add r0, r5, #0x9c + mov r1, #0x2 + bl DC_InvalidateRange + ldrh r0, [r5, #0x9c] + cmp r0, #0x0 + bne _020D9D70 + bl WM_GetMPReceiveBufferSize +_020D9D44: ; 0x020D9D44 + cmp r7, r0 + addlt sp, sp, #0x34 + movlt r0, #0x6 + ldmltia sp!, {r4-r9,lr} + bxlt lr + bl WM_GetMPSendBufferSize +_020D9D5C: ; 0x020D9D5C + cmp r4, r0 + addlt sp, sp, #0x34 + movlt r0, #0x6 + ldmltia sp!, {r4-r9,lr} + bxlt lr +_020D9D70: + mov r1, r9 + mov r0, #0xe + bl WMi_SetCallbackTable + add r1, sp, #0x0 + mov r0, #0x0 + mov r2, #0x30 + bl MIi_CpuClear32 + ldrh r3, [sp, #0x50] + mov r4, r7, lsr #0x1 + mov r5, #0xe + ldr r0, [sp, #0x54] + add r1, sp, #0x14 + mov r2, #0x1c + strh r5, [sp, #0x0] + str r8, [sp, #0x4] + str r4, [sp, #0x8] + str r6, [sp, #0xc] + str r3, [sp, #0x10] + bl MIi_CpuCopy32 +_020D9DBC: ; 0x020D9DBC + add r0, sp, #0x0 + mov r1, #0x30 + bl WMi_SendCommandDirect +_020D9DC8: ; 0x020D9DC8 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x34 + ldmia sp!, {r4-r9,lr} + bx lr diff --git a/arm9/asm/WM_standard.s b/arm9/asm/WM_standard.s new file mode 100644 index 00000000..fe00e8fa --- /dev/null +++ b/arm9/asm/WM_standard.s @@ -0,0 +1,684 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start WM_Disconnect +WM_Disconnect: ; 0x020D9060 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + mov r6, r0 + mov r5, r1 + bl WMi_GetSystemWork + mov r1, #0xa + mov r4, r0 + str r1, [sp, #0x0] + mov r12, #0xb + mov r0, #0x5 + mov r1, #0x7 + mov r2, #0x9 + mov r3, #0x8 + str r12, [sp, #0x4] + bl WMi_CheckStateEx +_020D909C: ; 0x020D909C + cmp r0, #0x0 + addne sp, sp, #0x8 + ldmneia sp!, {r4-r6,lr} + bxne lr + ldr r2, [r4, #0x4] + ldrh r0, [r2, #0x0] + cmp r0, #0x7 + beq _020D90C4 + cmp r0, #0x9 + bne _020D9120 +_020D90C4: + cmp r5, #0x1 + blo _020D90D4 + cmp r5, #0xf + bls _020D90E4 +_020D90D4: + add sp, sp, #0x8 + mov r0, #0x6 + ldmia sp!, {r4-r6,lr} + bx lr +_020D90E4: + ldr r0, _020D9164 ; =0x00000182 + mov r1, #0x2 + add r0, r2, r0 + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + mov r1, #0x1 + add r0, r0, #0x100 + ldrh r2, [r0, #0x82] + mov r0, r1, lsl r5 + ands r0, r2, r0 + bne _020D9134 + add sp, sp, #0x8 + mov r0, #0x7 + ldmia sp!, {r4-r6,lr} + bx lr +_020D9120: + cmp r5, #0x0 + addne sp, sp, #0x8 + movne r0, #0x6 + ldmneia sp!, {r4-r6,lr} + bxne lr +_020D9134: + mov r1, r6 + mov r0, #0xd + bl WMi_SetCallbackTable + mov r1, #0x1 + mov r2, r1, lsl r5 + mov r0, #0xd + bl WMi_SendCommand +_020D9150: ; 0x020D9150 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x8 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D9164: .word 0x00000182 + + arm_func_start WM_StartConnectEx +WM_StartConnectEx: ; 0x020D9168 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x2c + mov r7, r0 + mov r6, r1 + mov r0, #0x1 + mov r1, #0x2 + mov r5, r2 + mov r4, r3 + bl WMi_CheckStateEx +_020D918C: ; 0x020D918C + cmp r0, #0x0 + addne sp, sp, #0x2c + ldmneia sp!, {r4-r7,lr} + bxne lr + cmp r6, #0x0 + addeq sp, sp, #0x2c + moveq r0, #0x6 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldrh r1, [r6, #0x0] + mov r0, r6 + mov r1, r1, lsl #0x1 + bl DC_StoreRange + bl WMi_GetSystemWork + add r1, r0, #0x100 + mov r2, #0x0 + strh r2, [r1, #0x50] + str r2, [r0, #0x14c] + mov r1, r7 + mov r0, #0xc + bl WMi_SetCallbackTable + mov r0, #0xc + strh r0, [sp, #0x0] + str r6, [sp, #0x4] + cmp r5, #0x0 + beq _020D9208 + add r1, sp, #0x8 + mov r0, r5 + mov r2, #0x18 + bl MI_CpuCopy8 + b _020D9218 +_020D9208: + add r0, sp, #0x8 + mov r1, #0x0 + mov r2, #0x18 + bl MI_CpuFill8 +_020D9218: + ldrh r2, [sp, #0x40] + add r0, sp, #0x0 + mov r1, #0x28 + str r4, [sp, #0x20] + strh r2, [sp, #0x26] + bl WMi_SendCommandDirect +_020D9230: ; 0x020D9230 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x2c + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WM_EndScan +WM_EndScan: ; 0x020D9244 + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, #0x5 + bl WMi_CheckStateEx +_020D9258: ; 0x020D9258 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0xb + bl WMi_SetCallbackTable + mov r0, #0xb + mov r1, #0x0 + bl WMi_SendCommand +_020D927C: ; 0x020D927C + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_StartScanEx +WM_StartScanEx: ; 0x020D928C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x3c + mov r5, r0 + mov r0, #0x3 + mov r4, r1 + mov r2, r0 + mov r1, #0x2 + mov r3, #0x5 + bl WMi_CheckStateEx +_020D92B0: ; 0x020D92B0 + cmp r0, #0x0 + addne sp, sp, #0x3c + ldmneia sp!, {r4-r5,lr} + bxne lr + cmp r4, #0x0 + addeq sp, sp, #0x3c + moveq r0, #0x6 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r0, [r4, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x3c + moveq r0, #0x6 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldrh r0, [r4, #0x4] + cmp r0, #0x400 + addhi sp, sp, #0x3c + movhi r0, #0x6 + ldmhiia sp!, {r4-r5,lr} + bxhi lr + ldrh r0, [r4, #0x12] + cmp r0, #0x20 + addhi sp, sp, #0x3c + movhi r0, #0x6 + ldmhiia sp!, {r4-r5,lr} + bxhi lr + ldrh r1, [r4, #0x10] + cmp r1, #0x0 + beq _020D934C + cmp r1, #0x1 + beq _020D934C + cmp r1, #0x2 + beq _020D934C + cmp r1, #0x3 + addne sp, sp, #0x3c + movne r0, #0x6 + ldmneia sp!, {r4-r5,lr} + bxne lr +_020D934C: + ldr r0, _020D9408 ; =0x0000FFFE + add r0, r1, r0 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, #0x1 + bhi _020D937C + ldrh r0, [r4, #0x34] + cmp r0, #0x20 + addhi sp, sp, #0x3c + movhi r0, #0x6 + ldmhiia sp!, {r4-r5,lr} + bxhi lr +_020D937C: + mov r1, r5 + mov r0, #0x26 + bl WMi_SetCallbackTable + mov r0, #0x26 + strh r0, [sp, #0x0] + ldrh r2, [r4, #0x6] + add r1, sp, #0xc + add r0, r4, #0xa + strh r2, [sp, #0x2] + ldr r3, [r4, #0x0] + mov r2, #0x6 + str r3, [sp, #0x4] + ldrh r3, [r4, #0x4] + strh r3, [sp, #0x8] + ldrh r3, [r4, #0x8] + strh r3, [sp, #0xa] + bl MI_CpuCopy8 + ldrh r2, [r4, #0x10] + add r1, sp, #0x16 + add r0, r4, #0x14 + strh r2, [sp, #0x12] + ldrh r3, [r4, #0x34] + mov r2, #0x20 + strh r3, [sp, #0x36] + ldrh r3, [r4, #0x12] + strh r3, [sp, #0x14] + bl MI_CpuCopy8 +_020D93E8: ; 0x020D93E8 + add r0, sp, #0x0 + mov r1, #0x3c + bl WMi_SendCommandDirect +_020D93F4: ; 0x020D93F4 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x3c + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D9408: .word 0x0000FFFE + + arm_func_start WM_StartScan +WM_StartScan: ; 0x020D940C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x14 + mov r5, r0 + mov r0, #0x3 + mov r4, r1 + mov r2, r0 + mov r1, #0x2 + mov r3, #0x5 + bl WMi_CheckStateEx +_020D9430: ; 0x020D9430 + cmp r0, #0x0 + addne sp, sp, #0x14 + ldmneia sp!, {r4-r5,lr} + bxne lr + cmp r4, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x6 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r0, [r4, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x6 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldrh r0, [r4, #0x4] + cmp r0, #0x1 + blo _020D9480 + cmp r0, #0xe + bls _020D9490 +_020D9480: + add sp, sp, #0x14 + mov r0, #0x6 + ldmia sp!, {r4-r5,lr} + bx lr +_020D9490: + mov r1, r5 + mov r0, #0xa + bl WMi_SetCallbackTable + mov r0, #0xa + strh r0, [sp, #0x0] + ldrh r2, [r4, #0x4] + add r0, sp, #0x0 + mov r1, #0x10 + strh r2, [sp, #0x2] + ldr r2, [r4, #0x0] + str r2, [sp, #0x4] + ldrh r2, [r4, #0x6] + strh r2, [sp, #0x8] + ldrb r2, [r4, #0x8] + strb r2, [sp, #0xa] + ldrb r2, [r4, #0x9] + strb r2, [sp, #0xb] + ldrb r2, [r4, #0xa] + strb r2, [sp, #0xc] + ldrb r2, [r4, #0xb] + strb r2, [sp, #0xd] + ldrb r2, [r4, #0xc] + strb r2, [sp, #0xe] + ldrb r2, [r4, #0xd] + strb r2, [sp, #0xf] + bl WMi_SendCommandDirect +_020D94F8: ; 0x020D94F8 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x14 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_EndParent +WM_EndParent: ; 0x020D950C + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, #0x7 + bl WMi_CheckStateEx +_020D9520: ; 0x020D9520 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x9 + bl WMi_SetCallbackTable + mov r0, #0x9 + mov r1, #0x0 + bl WMi_SendCommand +_020D9544: ; 0x020D9544 + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_StartParent +WM_StartParent: ; 0x020D9554 + ldr ip, _020D9560 ; =WMi_StartParentEx + mov r1, #0x1 + bx r12 + .balign 4 +_020D9560: .word WMi_StartParentEx + + arm_func_start WMi_StartParentEx +WMi_StartParentEx: ; 0x020D9564 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + mov r0, #0x1 + mov r1, #0x2 + bl WMi_CheckStateEx +_020D9580: ; 0x020D9580 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + bl WMi_GetSystemWork + add r1, r0, #0x100 + mov r2, #0x0 + strh r2, [r1, #0x50] + str r2, [r0, #0x14c] + mov r1, r5 + mov r0, #0x8 + bl WMi_SetCallbackTable + mov r2, r4 + mov r0, #0x8 + mov r1, #0x1 + bl WMi_SendCommand +_020D95C0: ; 0x020D95C0 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WmCheckParentParameter +WmCheckParentParameter: ; 0x020D95D4 + ldrh r1, [r0, #0x4] + cmp r1, #0x70 + movhi r0, #0x0 + bxhi lr + ldrh r1, [r0, #0x18] + cmp r1, #0xa + blo _020D95F8 + cmp r1, #0x3e8 + bls _020D9600 +_020D95F8: + mov r0, #0x0 + bx lr +_020D9600: + ldrh r0, [r0, #0x32] + cmp r0, #0x1 + blo _020D9614 + cmp r0, #0xe + bls _020D961C +_020D9614: + mov r0, #0x0 + bx lr +_020D961C: + mov r0, #0x1 + bx lr + + arm_func_start WM_SetParentParameter +WM_SetParentParameter: ; 0x020D9624 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + mov r0, #0x1 + mov r1, #0x2 + bl WMi_CheckStateEx +_020D9640: ; 0x020D9640 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + cmp r4, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x6 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldrh r0, [r4, #0x4] + cmp r0, #0x0 + beq _020D9688 + ldr r0, [r4, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x6 + ldmeqia sp!, {r4-r5,lr} + bxeq lr +_020D9688: + ldrh r1, [r4, #0x14] + ldrh r0, [r4, #0x34] + cmp r1, #0x0 + movne r2, #0x2a + moveq r2, #0x0 + add r0, r0, r2 + cmp r0, #0x200 + bgt _020D96C4 + ldrh r0, [r4, #0x36] + cmp r1, #0x0 + movne r1, #0x6 + moveq r1, #0x0 + add r0, r0, r1 + cmp r0, #0x200 + ble _020D96D4 +_020D96C4: + add sp, sp, #0x4 + mov r0, #0x6 + ldmia sp!, {r4-r5,lr} + bx lr +_020D96D4: + mov r0, r4 + bl WmCheckParentParameter + mov r1, r5 + mov r0, #0x7 + bl WMi_SetCallbackTable + mov r0, r4 + mov r1, #0x40 + bl DC_StoreRange + ldrh r1, [r4, #0x4] + cmp r1, #0x0 + beq _020D9708 + ldr r0, [r4, #0x0] + bl DC_StoreRange +_020D9708: + mov r2, r4 + mov r0, #0x7 + mov r1, #0x1 + bl WMi_SendCommand +_020D9718: ; 0x020D9718 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_End +WM_End: ; 0x020D972C + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, #0x2 + bl WMi_CheckStateEx +_020D9740: ; 0x020D9740 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x2 + bl WMi_SetCallbackTable + mov r0, #0x2 + mov r1, #0x0 + bl WMi_SendCommand +_020D9764: ; 0x020D9764 + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_Reset +WM_Reset: ; 0x020D9774 + stmdb sp!, {r4,lr} + mov r4, r0 + bl WMi_CheckIdle +_020D9780: ; 0x020D9780 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x1 + bl WMi_SetCallbackTable + mov r0, #0x1 + mov r1, #0x0 + bl WMi_SendCommand +_020D97A4: ; 0x020D97A4 + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_Initialize +WM_Initialize: ; 0x020D97B4 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + mov r4, r1 + mov r1, r2 + bl WM_Init +_020D97C8: ; 0x020D97C8 + cmp r0, #0x0 + addne sp, sp, #0x8 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x0 + bl WMi_SetCallbackTable + bl WMi_GetSystemWork + mov r3, r0 + ldr r1, [r3, #0x10] + mov r0, #0x0 + str r1, [sp, #0x0] + ldr r2, [r3, #0x0] + ldr r3, [r3, #0x4] + mov r1, #0x3 + bl WMi_SendCommand +_020D9808: ; 0x020D9808 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_PowerOff +WM_PowerOff: ; 0x020D981C + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, #0x2 + bl WMi_CheckStateEx +_020D9830: ; 0x020D9830 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x6 + bl WMi_SetCallbackTable + mov r0, #0x6 + mov r1, #0x0 + bl WMi_SendCommand +_020D9854: ; 0x020D9854 + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_PowerOn +WM_PowerOn: ; 0x020D9864 + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, r0 + bl WMi_CheckStateEx +_020D9878: ; 0x020D9878 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x5 + bl WMi_SetCallbackTable + mov r0, #0x5 + mov r1, #0x0 + bl WMi_SendCommand +_020D989C: ; 0x020D989C + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_Disable +WM_Disable: ; 0x020D98AC + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, r0 + bl WMi_CheckStateEx +_020D98C0: ; 0x020D98C0 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x4 + bl WMi_SetCallbackTable + mov r0, #0x4 + mov r1, #0x0 + bl WMi_SendCommand +_020D98E4: ; 0x020D98E4 + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_Enable +WM_Enable: ; 0x020D98F4 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + mov r4, r0 + mov r0, #0x1 + mov r1, #0x0 + bl WMi_CheckStateEx +_020D990C: ; 0x020D990C + cmp r0, #0x0 + addne sp, sp, #0x8 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x3 + bl WMi_SetCallbackTable + bl WMi_GetSystemWork + mov r3, r0 + ldr r1, [r3, #0x10] + mov r0, #0x3 + str r1, [sp, #0x0] + ldr r2, [r3, #0x0] + ldr r3, [r3, #0x4] + mov r1, r0 + bl WMi_SendCommand +_020D994C: ; 0x020D994C + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr diff --git a/arm9/asm/WM_sync.s b/arm9/asm/WM_sync.s new file mode 100644 index 00000000..7c8bbc9d --- /dev/null +++ b/arm9/asm/WM_sync.s @@ -0,0 +1,593 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start WM_GetNextTgid +WM_GetNextTgid: ; 0x020D8868 + stmdb sp!, {lr} + sub sp, sp, #0xc + + arm_func_start FUN_020D8870 +FUN_020D8870: ; 0x020D8870 + ldr r0, _020D88DC ; =0x02106A54 + ldr r0, [r0, #0x0] + cmp r0, #0x10000 + bne _020D88B0 + bl RTC_Init +_020D8884: ; 0x020D8884 + add r0, sp, #0x0 + bl RTC_GetTime +_020D888C: ; 0x020D888C + cmp r0, #0x0 + bne _020D88B0 + ldr r2, [sp, #0x8] + ldr r0, [sp, #0x4] + ldr r1, _020D88DC ; =0x02106A54 + add r0, r2, r0, lsl #0x8 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + str r0, [r1, #0x0] +_020D88B0: + ldr r1, _020D88DC ; =0x02106A54 + ldr r0, [r1, #0x0] + add r0, r0, #0x1 + mov r0, r0, lsl #0x10 + mov r2, r0, lsr #0x10 + mov r0, r2, lsl #0x10 + str r2, [r1, #0x0] + mov r0, r0, lsr #0x10 + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + .balign 4 +_020D88DC: .word 0x02106A54 + + arm_func_start WM_GetOtherElements +WM_GetOtherElements: ; 0x020D88E0 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x88 + ldrh r2, [r1, #0x3c] + mov lr, r0 + cmp r2, #0x0 + beq _020D892C + mov r0, #0x0 + add r5, sp, #0x0 + strb r0, [sp, #0x0] + mov r4, #0x8 +_020D8908: + ldmia r5!, {r0-r3} + stmia lr!, {r0-r3} + subs r4, r4, #0x1 + bne _020D8908 + ldr r0, [r5, #0x0] + add sp, sp, #0x88 + str r0, [lr, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr +_020D892C: + ldrh r0, [r1, #0x3e] + strb r0, [sp, #0x0] + ldrb r0, [sp, #0x0] + cmp r0, #0x0 + bne _020D896C + add r5, sp, #0x0 + mov r4, #0x8 +_020D8948: + ldmia r5!, {r0-r3} + stmia lr!, {r0-r3} + subs r4, r4, #0x1 + bne _020D8948 + ldr r0, [r5, #0x0] + add sp, sp, #0x88 + str r0, [lr, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr +_020D896C: + cmp r0, #0x10 + movhi r0, #0x10 + strhib r0, [sp, #0x0] + ldrh r2, [r1, #0x0] + ldrb r3, [sp, #0x0] + mov r0, #0x0 + mov r2, r2, lsl #0x1 + sub r4, r2, #0x40 + cmp r3, #0x0 + add r3, r1, #0x40 + mov r2, r0 + and r1, r4, #0xff + ble _020D8A20 + add r12, sp, #0x0 +_020D89A4: + ldrb r5, [r3, #0x0] + add r6, r12, r2, lsl #0x3 + add r4, r3, #0x2 + strb r5, [r6, #0x4] + ldrb r5, [r3, #0x1] + strb r5, [r6, #0x5] + str r4, [r6, #0x8] + ldrb r4, [r6, #0x5] + add r4, r4, #0x2 + and r5, r4, #0xff + add r0, r0, r5 + and r0, r0, #0xff + cmp r0, r1 + bls _020D8A0C + mov r0, #0x0 + strb r0, [sp, #0x0] + mov r4, #0x8 +_020D89E8: + ldmia r12!, {r0-r3} + stmia lr!, {r0-r3} + subs r4, r4, #0x1 + bne _020D89E8 + ldr r0, [r12, #0x0] + add sp, sp, #0x88 + str r0, [lr, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr +_020D8A0C: + ldrb r4, [sp, #0x0] + add r2, r2, #0x1 + add r3, r3, r5 + cmp r2, r4 + blt _020D89A4 +_020D8A20: + add r4, sp, #0x0 + mov r12, #0x8 +_020D8A28: + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + subs r12, r12, #0x1 + bne _020D8A28 + ldr r0, [r4, #0x0] + str r0, [lr, #0x0] + add sp, sp, #0x88 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start WM_GetDispersionScanPeriod +WM_GetDispersionScanPeriod: ; 0x020D8A4C + stmdb sp!, {lr} + sub sp, sp, #0xc + add r0, sp, #0x0 + bl OS_GetMacAddress + mov r2, #0x0 + add r1, sp, #0x0 + mov r3, r2 +_020D8A68: + ldrb r0, [r1, #0x0] + add r2, r2, #0x1 + cmp r2, #0x6 + add r0, r3, r0 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + add r1, r1, #0x1 + blt _020D8A68 + ldr r0, _020D8AE4 ; =0x027FFC3C + mov r1, #0xd + ldr r0, [r0, #0x0] + ldr r2, _020D8AE8 ; =0x66666667 + add r0, r3, r0 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + mul r0, r3, r1 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + smull r0, r1, r2, r3 + mov r1, r1, asr #0x2 + mov r0, r3, lsr #0x1f + ldr r2, _020D8AEC ; =0x0000000A + add r1, r0, r1 + smull r0, r1, r2, r1 + sub r1, r3, r0 + add r0, r1, #0x1e + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + .balign 4 +_020D8AE4: .word 0x027FFC3C +_020D8AE8: .word 0x66666667 +_020D8AEC: .word 0x0000000A + + arm_func_start WM_GetDispersionBeaconPeriod +WM_GetDispersionBeaconPeriod: ; 0x020D8AF0 + stmdb sp!, {lr} + sub sp, sp, #0xc + add r0, sp, #0x0 + bl OS_GetMacAddress + mov r2, #0x0 + add r1, sp, #0x0 + mov r3, r2 +_020D8B0C: + ldrb r0, [r1, #0x0] + add r2, r2, #0x1 + cmp r2, #0x6 + add r0, r3, r0 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + add r1, r1, #0x1 + blt _020D8B0C + ldr r0, _020D8B88 ; =0x027FFC3C + mov r1, #0x7 + ldr r0, [r0, #0x0] + ldr r2, _020D8B8C ; =0x66666667 + add r0, r3, r0 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + mul r0, r3, r1 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + smull r0, r1, r2, r3 + mov r1, r1, asr #0x3 + mov r0, r3, lsr #0x1f + ldr r2, _020D8B90 ; =0x00000014 + add r1, r0, r1 + smull r0, r1, r2, r1 + sub r1, r3, r0 + add r0, r1, #0xc8 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + .balign 4 +_020D8B88: .word 0x027FFC3C +_020D8B8C: .word 0x66666667 +_020D8B90: .word 0x00000014 + + arm_func_start WM_GetLinkLevel +WM_GetLinkLevel: ; 0x020D8B94 + stmdb sp!, {r4,lr} + bl WMi_GetSystemWork + mov r4, r0 + bl WMi_CheckInitialized +_020D8BA4: ; 0x020D8BA4 + cmp r0, #0x0 + movne r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + ldr r0, [r4, #0x4] + mov r1, #0x2 + bl DC_InvalidateRange + ldr r2, [r4, #0x4] + ldrh r0, [r2, #0x0] + cmp r0, #0x9 + beq _020D8BE4 + cmp r0, #0xa + beq _020D8C10 + cmp r0, #0xb + beq _020D8C10 + b _020D8C2C +_020D8BE4: + ldr r0, _020D8C38 ; =0x00000182 + mov r1, #0x2 + add r0, r2, r0 + bl DC_InvalidateRange + ldr r2, [r4, #0x4] + add r0, r2, #0x100 + ldrh r0, [r0, #0x82] + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr +_020D8C10: + add r0, r2, #0xbc + mov r1, #0x2 + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + ldrh r0, [r0, #0xbc] + ldmia sp!, {r4,lr} + bx lr +_020D8C2C: + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D8C38: .word 0x00000182 + + arm_func_start WM_GetAllowedChannel +WM_GetAllowedChannel: ; 0x020D8C3C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WMi_CheckInitialized +_020D8C48: ; 0x020D8C48 + cmp r0, #0x0 + movne r0, #0x8000 + ldreq r0, _020D8C64 ; =0x027FFCFA + ldreqh r0, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D8C64: .word 0x027FFCFA + + arm_func_start WM_ReadMPData +WM_ReadMPData: ; 0x020D8C68 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x40 + mov r5, r0 + mov r4, r1 + bl WMi_GetSystemWork + mov r6, r0 + bl WMi_CheckInitialized +_020D8C84: ; 0x020D8C84 + cmp r0, #0x0 + addne sp, sp, #0x40 + movne r0, #0x0 + ldmneia sp!, {r4-r6,lr} + bxne lr + cmp r4, #0x1 + blo _020D8CA8 + cmp r4, #0xf + bls _020D8CB8 +_020D8CA8: + add sp, sp, #0x40 + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020D8CB8: + ldr r2, [r6, #0x4] + ldr r0, _020D8D68 ; =0x00000182 + mov r1, #0x2 + add r0, r2, r0 + bl DC_InvalidateRange + ldr r0, [r6, #0x4] + mov r1, #0x1 + add r0, r0, #0x100 + ldrh r2, [r0, #0x82] + mov r0, r1, lsl r4 + ands r0, r2, r0 + addeq sp, sp, #0x40 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldrh r0, [r5, #0x4] + cmp r0, #0x0 + addeq sp, sp, #0x40 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + add r0, r5, #0xa + str r0, [sp, #0x0] + mov r3, #0x0 + add r2, sp, #0x0 +_020D8D1C: + ldr r0, [r2, r3, lsl #0x2] + ldrh r1, [r0, #0x4] + cmp r4, r1 + addeq sp, sp, #0x40 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + add r3, r3, #0x1 + sub r0, r3, #0x1 + ldrh r1, [r5, #0x6] + ldr r0, [r2, r0, lsl #0x2] + add r0, r1, r0 + str r0, [r2, r3, lsl #0x2] + ldrh r0, [r5, #0x4] + cmp r3, r0 + blt _020D8D1C + mov r0, #0x0 + add sp, sp, #0x40 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D8D68: .word 0x00000182 + + arm_func_start WM_GetMPReceiveBufferSize +WM_GetMPReceiveBufferSize: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl WMi_GetSystemWork + mov r4, r0 + mov r0, #0x2 + mov r1, #0x7 + mov r2, #0x8 + bl WMi_CheckStateEx +_020D8D8C: ; 0x020D8D8C + cmp r0, #0x0 + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r0, [r4, #0x4] + mov r1, #0x4 + add r0, r0, #0xc + bl DC_InvalidateRange + ldr r1, [r4, #0x4] + ldr r0, [r1, #0xc] + cmp r0, #0x1 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + add r0, r1, #0x188 + mov r1, #0x2 + bl DC_InvalidateRange + ldr r1, [r4, #0x4] + add r0, r1, #0x100 + ldrh r0, [r0, #0x88] + cmp r0, #0x0 + moveq r5, #0x1 + add r0, r1, #0x3e + mov r1, #0x2 + movne r5, #0x0 + bl DC_InvalidateRange + cmp r5, #0x1 + ldr r0, [r4, #0x4] + addne sp, sp, #0x4 + ldrh r5, [r0, #0x3e] + addne r0, r5, #0x51 + bicne r0, r0, #0x1f + movne r0, r0, lsl #0x1 + ldmneia sp!, {r4-r5,lr} + bxne lr + add r0, r0, #0xf8 + mov r1, #0x2 + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + add r1, r5, #0xc + ldrh r0, [r0, #0xf8] + mul r0, r1, r0 + add r0, r0, #0x29 + bic r0, r0, #0x1f + mov r0, r0, lsl #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_GetMPSendBufferSize +WM_GetMPSendBufferSize: + stmdb sp!, {r4,lr} + bl WMi_GetSystemWork + mov r4, r0 + mov r0, #0x2 + mov r1, #0x7 + mov r2, #0x8 + bl WMi_CheckStateEx +_020D8E70: ; 0x020D8E70 + cmp r0, #0x0 + movne r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + ldr r0, [r4, #0x4] + mov r1, #0x4 + add r0, r0, #0xc + bl DC_InvalidateRange + ldr r1, [r4, #0x4] + ldr r0, [r1, #0xc] + cmp r0, #0x1 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + add r0, r1, #0x3c + mov r1, #0x4 + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + ldrh r0, [r0, #0x3c] + add r0, r0, #0x1f + bic r0, r0, #0x1f + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_ReadStatus +WM_ReadStatus: ; 0x020D8ECC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl WMi_GetSystemWork + mov r4, r0 + bl WMi_CheckInitialized +_020D8EE4: ; 0x020D8EE4 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + cmp r5, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x6 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r0, [r4, #0x4] + mov r1, #0x7c0 + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + mov r1, r5 + mov r2, #0x7c0 + bl MIi_CpuCopyFast +_020D8F24: ; 0x020D8F24 + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_SetPortCallback +WM_SetPortCallback: + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x48 + movs r5, r1 + mov r6, r0 + mov r4, r2 + beq _020D8F9C + add r0, sp, #0x0 + mov r1, #0x0 + mov r2, #0x44 + bl MI_CpuFill8 + mov r3, #0x0 + ldr r1, _020D9010 ; =0x0000FFFF + mov r7, #0x82 + mov r2, #0x19 + add r0, sp, #0x14 + strh r7, [sp, #0x0] + strh r3, [sp, #0x2] + strh r2, [sp, #0x4] + strh r6, [sp, #0x6] + str r3, [sp, #0x8] + str r3, [sp, #0xc] + strh r3, [sp, #0x10] + strh r1, [sp, #0x1a] + str r4, [sp, #0x1c] + strh r3, [sp, #0x12] + bl OS_GetMacAddress +_020D8F9C: + bl OS_DisableInterrupts + mov r8, r0 + bl WMi_CheckInitialized + movs r7, r0 + beq _020D8FC8 + mov r0, r8 + bl OS_RestoreInterrupts + add sp, sp, #0x48 + mov r0, r7 + ldmia sp!, {r4-r8,lr} + bx lr +_020D8FC8: + bl WMi_GetSystemWork + add r0, r0, r6, lsl #0x2 + str r5, [r0, #0xcc] + str r4, [r0, #0x10c] + cmp r5, #0x0 + beq _020D8FF8 + bl WM_GetConnectedAIDs + strh r0, [sp, #0x22] + bl WM_GetAID + strh r0, [sp, #0x20] + add r0, sp, #0x0 + blx r5 +_020D8FF8: + mov r0, r8 + bl OS_RestoreInterrupts +_020D9000: ; 0x020D9000 + mov r0, #0x0 + add sp, sp, #0x48 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020D9010: .word 0x0000FFFF + + arm_func_start WM_SetIndCallback +WM_SetIndCallback: ; 0x020D9014 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + bl OS_DisableInterrupts + mov r5, r0 + bl WMi_CheckInitialized + movs r4, r0 + beq _020D9044 + mov r0, r5 + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4-r6,lr} + bx lr +_020D9044: + bl WMi_GetSystemWork + str r6, [r0, #0xc8] + mov r0, r5 + bl OS_RestoreInterrupts +_020D9054: ; 0x020D9054 + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr diff --git a/arm9/asm/WM_system.s b/arm9/asm/WM_system.s new file mode 100644 index 00000000..1ed5512f --- /dev/null +++ b/arm9/asm/WM_system.s @@ -0,0 +1,791 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start WMi_GetMPReadyAIDs +WMi_GetMPReadyAIDs: ; 0x020D7DE0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r1, _020D7E30 ; =0x021D5E2C + mov r4, r0 + ldr r0, [r1, #0x0] + cmp r0, #0x0 + moveq r5, #0x0 + beq _020D7E18 + ldr r5, [r0, #0x4] + mov r1, #0x2 + add r0, r5, #0x86 + bl DC_InvalidateRange + ldrh r5, [r5, #0x86] +_020D7E18: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, r5 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D7E30: .word 0x021D5E2C + + arm_func_start WM_GetConnectedAIDs +WM_GetConnectedAIDs: ; 0x020D7E34 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020D7E64 ; =0x021D5E2C + ldr r1, [r1, #0x0] + cmp r1, #0x0 + ldrne r4, [r1, #0x14c] + moveq r4, #0x0 + bl OS_RestoreInterrupts + mov r0, r4, lsl #0x10 + mov r0, r0, lsr #0x10 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D7E64: .word 0x021D5E2C + + arm_func_start WM_GetAID +WM_GetAID: ; 0x020D7E68 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020D7E98 ; =0x021D5E2C + ldr r1, [r1, #0x0] + cmp r1, #0x0 + addne r1, r1, #0x100 + ldrneh r4, [r1, #0x50] + moveq r4, #0x0 + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D7E98: .word 0x021D5E2C + + arm_func_start WMi_GetStatusAddress +WMi_GetStatusAddress: ; 0x020D7E9C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WMi_CheckInitialized +_020D7EA8: ; 0x020D7EA8 + cmp r0, #0x0 + movne r0, #0x0 + ldreq r0, _020D7EC8 ; =0x021D5E2C + ldreq r0, [r0, #0x0] + ldreq r0, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D7EC8: .word 0x021D5E2C + + arm_func_start WmClearFifoRecvFlag +WmClearFifoRecvFlag: ; 0x020D7ECC + ldr r1, _020D7EE4 ; =0x027FFF96 + ldrh r0, [r1, #0x0] + ands r2, r0, #0x1 + bicne r0, r0, #0x1 + strneh r0, [r1, #0x0] + bx lr + .balign 4 +_020D7EE4: .word 0x027FFF96 + + arm_func_start WmReceiveFifo +WmReceiveFifo: ; 0x020D7EE8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + ldr r0, _020D82B0 ; =0x021D5E2C + cmp r2, #0x0 + ldr r8, [r0, #0x0] + mov r10, r1 + addne sp, sp, #0xc + ldmneia sp!, {r4-r11,lr} + bxne lr + ldr r0, [r8, #0x10] + mov r1, #0x100 + bl DC_InvalidateRange + ldrh r0, [r8, #0x16] + cmp r0, #0x0 + bne _020D7F30 + ldr r0, [r8, #0x4] + mov r1, #0x800 + bl DC_InvalidateRange +_020D7F30: + ldr r0, [r8, #0x10] + cmp r10, r0 + beq _020D7F48 + mov r0, r10 + mov r1, #0x100 + bl DC_InvalidateRange +_020D7F48: + ldrh r0, [r10, #0x0] + cmp r0, #0x2c + blo _020D8000 + cmp r0, #0x80 + bne _020D7F84 + ldrh r0, [r10, #0x2] + cmp r0, #0x13 + bne _020D7F6C + bl OS_Terminate +_020D7F6C: + ldr r1, [r8, #0xc8] + cmp r1, #0x0 + beq _020D8268 + mov r0, r10 + blx r1 + b _020D8268 +_020D7F84: + cmp r0, #0x82 + bne _020D7FD8 + ldrh r0, [r10, #0x6] + add r1, r8, r0, lsl #0x2 + ldr r0, [r1, #0xcc] + cmp r0, #0x0 + beq _020D8268 + ldr r0, [r1, #0x10c] + str r0, [r10, #0x1c] + ldr r0, [r8, #0x14c] + strh r0, [r10, #0x22] + ldr r1, [r8, #0x4] + ldr r0, [r10, #0x8] + ldrh r1, [r1, #0x72] + bl DC_InvalidateRange + ldrh r1, [r10, #0x6] + mov r0, r10 + add r1, r8, r1, lsl #0x2 + ldr r1, [r1, #0xcc] + blx r1 + b _020D8268 +_020D7FD8: + cmp r0, #0x81 + bne _020D8268 + mov r0, #0xf + strh r0, [r10, #0x0] + ldr r1, [r10, #0x1c] + cmp r1, #0x0 + beq _020D8268 + mov r0, r10 + blx r1 + b _020D8268 +_020D8000: + cmp r0, #0xe + bne _020D8040 + ldrh r1, [r10, #0x4] + ldr r0, _020D82B4 ; =0x0000FFF5 + add r0, r1, r0 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, #0x1 + bhi _020D8040 + ldrh r0, [r10, #0x2] + cmp r0, #0x0 + bne _020D8040 + ldr r1, [r8, #0x4] + ldr r0, [r10, #0x8] + ldrh r1, [r1, #0x72] + bl DC_InvalidateRange +_020D8040: + ldrh r1, [r10, #0x0] + cmp r1, #0x2 + bne _020D8088 + ldrh r0, [r10, #0x2] + cmp r0, #0x0 + bne _020D8088 + add r0, r8, r1, lsl #0x2 + ldr r4, [r0, #0x18] + bl WM_Finish +_020D8064: ; 0x020D8064 + cmp r4, #0x0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4-r11,lr} + bxeq lr + mov r0, r10 + blx r4 + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr +_020D8088: + add r0, r8, r1, lsl #0x2 + ldr r1, [r0, #0x18] + cmp r1, #0x0 + beq _020D80B8 + mov r0, r10 + blx r1 + ldr r0, _020D82B8 ; =0x021D5E28 + ldrh r0, [r0, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4-r11,lr} + bxeq lr +_020D80B8: + ldrh r0, [r10, #0x0] + cmp r0, #0x8 + beq _020D80CC + cmp r0, #0xc + bne _020D8268 +_020D80CC: + cmp r0, #0x8 + bne _020D8100 + add r0, r10, #0xa + str r0, [sp, #0x0] + ldrh r0, [r10, #0x2c] + add r11, r10, #0x14 + ldrh r7, [r10, #0x8] + ldrh r6, [r10, #0x10] + ldrh r4, [r10, #0x12] + str r0, [sp, #0x4] + ldrh r9, [r10, #0x2e] + mov r5, #0x0 + b _020D8130 +_020D8100: + cmp r0, #0xc + bne _020D8130 + ldrh r0, [r10, #0x16] + mov r6, #0x0 + ldrh r7, [r10, #0x8] + str r0, [sp, #0x4] + add r0, r10, #0x10 + ldrh r5, [r10, #0xa] + ldrh r4, [r10, #0xc] + ldrh r9, [r10, #0x18] + mov r11, r6 + str r0, [sp, #0x0] +_020D8130: + cmp r7, #0x7 + beq _020D8148 + cmp r7, #0x9 + beq _020D8148 + cmp r7, #0x1a + bne _020D8268 +_020D8148: + cmp r7, #0x7 + ldreq r1, [r8, #0x14c] + moveq r0, #0x1 + orreq r0, r1, r0, lsl r6 + streq r0, [r8, #0x14c] + movne r0, #0x1 + mvnne r0, r0, lsl r6 + ldrne r1, [r8, #0x14c] + add r3, r8, #0x100 + andne r0, r1, r0 + strne r0, [r8, #0x14c] + ldr r0, _020D82BC ; =0x021D5E78 + mov r1, #0x0 + mov r2, #0x44 + strh r5, [r3, #0x50] + bl MI_CpuFill8 + ldr r3, _020D82BC ; =0x021D5E78 + mov r1, #0x0 + mov r2, #0x82 + strh r2, [r3, #0x0] + strh r7, [r3, #0x4] + strh r6, [r3, #0x12] + strh r5, [r3, #0x20] + strh r1, [r3, #0x2] + str r1, [r3, #0x8] + str r1, [r3, #0xc] + strh r1, [r3, #0x10] + ldr r1, [r8, #0x14c] + ldr r2, _020D82C0 ; =0x0000FFFF + strh r1, [r3, #0x22] + strh r2, [r3, #0x1a] + ldr r0, [sp, #0x0] + ldr r1, _020D82C4 ; =0x021D5E8C + mov r2, #0x6 + strh r4, [r3, #0x3c] + bl MI_CpuCopy8 +_020D81D8: ; 0x020D81D8 + cmp r11, #0x0 + beq _020D81F4 + ldr r1, _020D82C8 ; =0x021D5E9C + mov r0, r11 + mov r2, #0x18 + bl MIi_CpuCopy16 + b _020D8204 +_020D81F4: + ldr r1, _020D82C8 ; =0x021D5E9C + mov r0, #0x0 + mov r2, #0x18 + bl MIi_CpuClear16 +_020D8204: + cmp r5, #0x0 + ldreq r1, [sp, #0x4] + ldr r0, _020D82BC ; =0x021D5E78 + movne r1, r9 + cmp r5, #0x0 + ldrne r9, [sp, #0x4] + ldr r5, _020D82BC ; =0x021D5E78 + strh r1, [r0, #0x40] + mov r4, #0x0 + strh r9, [r5, #0x42] +_020D822C: + strh r4, [r5, #0x6] + add r2, r8, r4, lsl #0x2 + ldr r0, [r2, #0xcc] + cmp r0, #0x0 + beq _020D8254 + ldr r1, [r2, #0x10c] + mov r0, r5 + str r1, [r5, #0x1c] + ldr r1, [r2, #0xcc] + blx r1 +_020D8254: + add r0, r4, #0x1 + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 + cmp r4, #0x10 + blo _020D822C +_020D8268: + ldr r0, [r8, #0x10] + mov r1, #0x100 + bl DC_InvalidateRange + bl WmClearFifoRecvFlag + ldr r0, [r8, #0x10] + cmp r10, r0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4-r11,lr} + bxeq lr + ldrh r2, [r10, #0x0] + mov r0, r10 + mov r1, #0x100 + orr r2, r2, #0x8000 + strh r2, [r10, #0x0] + bl DC_StoreRange + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020D82B0: .word 0x021D5E2C +_020D82B4: .word 0x0000FFF5 +_020D82B8: .word 0x021D5E28 +_020D82BC: .word 0x021D5E78 +_020D82C0: .word 0x0000FFFF +_020D82C4: .word 0x021D5E8C +_020D82C8: .word 0x021D5E9C + + arm_func_start WMi_CheckStateEx +WMi_CheckStateEx: + stmdb sp!, {r0-r3} + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WMi_CheckInitialized +_020D82DC: ; 0x020D82DC + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + addne sp, sp, #0x10 + bxne lr + ldr r0, _020D8370 ; =0x021D5E2C + mov r1, #0x2 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x4] + bl DC_InvalidateRange + ldr r0, _020D8370 ; =0x021D5E2C + add r1, sp, #0x8 + ldr r2, [r0, #0x0] + ldr r0, [sp, #0x8] + ldr r2, [r2, #0x4] + cmp r0, #0x0 + bic r1, r1, #0x3 + addeq sp, sp, #0x4 + add r12, r1, #0x4 + ldrh r3, [r2, #0x0] + mov r0, #0x3 + ldmeqia sp!, {lr} + addeq sp, sp, #0x10 + bxeq lr + mov r2, #0x0 +_020D8340: + add r12, r12, #0x4 + ldr r1, [r12, #-0x4] + cmp r1, r3 + ldr r1, [sp, #0x8] + moveq r0, r2 + subs r1, r1, #0x1 + str r1, [sp, #0x8] + bne _020D8340 + add sp, sp, #0x4 + ldmia sp!, {lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020D8370: .word 0x021D5E2C + + arm_func_start WMi_CheckIdle +WMi_CheckIdle: + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WMi_CheckInitialized +_020D8380: ; 0x020D8380 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r0, _020D83CC ; =0x021D5E2C + mov r1, #0x2 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x4] + bl DC_InvalidateRange + ldr r0, _020D83CC ; =0x021D5E2C + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x4] + ldrh r0, [r0, #0x0] + cmp r0, #0x1 + movls r0, #0x3 + movhi r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D83CC: .word 0x021D5E2C + + arm_func_start WMi_CheckInitialized +WMi_CheckInitialized: + ldr r0, _020D83E8 ; =0x021D5E28 + ldrh r0, [r0, #0x0] + cmp r0, #0x0 + movne r0, #0x0 + moveq r0, #0x3 + bx lr + .balign 4 +_020D83E8: .word 0x021D5E28 + + arm_func_start WMi_GetSystemWork +WMi_GetSystemWork: ; 0x020D83EC + ldr r0, _020D83F8 ; =0x021D5E2C + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020D83F8: .word 0x021D5E2C + + arm_func_start WMi_SendCommandDirect +WMi_SendCommandDirect: + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r4, r1 + bl WmGetCommandBuffer4Arm7 + movs r5, r0 + moveq r0, #0x8 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl MI_CpuCopy8 + mov r0, r5 + mov r1, r4 + bl DC_StoreRange + mov r1, r5 + mov r0, #0xa + mov r2, #0x0 + bl PXI_SendWordByFifo + mov r4, r0 + ldr r0, _020D8470 ; =0x021D5E30 + mov r1, r5 + mov r2, #0x1 + bl OS_SendMessage +_020D845C: ; 0x020D845C + cmp r4, #0x0 + movlt r0, #0x8 + movge r0, #0x2 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D8470: .word 0x021D5E30 + + arm_func_start WMi_SendCommand +WMi_SendCommand: + stmdb sp!, {r0-r3} + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + bl WmGetCommandBuffer4Arm7 + movs r5, r0 + addeq sp, sp, #0x4 + moveq r0, #0x8 + ldmeqia sp!, {r4-r5,lr} + addeq sp, sp, #0x10 + bxeq lr + strh r4, [r5, #0x0] + ldrh r2, [sp, #0x14] + add r0, sp, #0x14 + bic r0, r0, #0x3 + mov r3, #0x0 + cmp r2, #0x0 + add r4, r0, #0x4 + ble _020D84DC +_020D84C0: + add r4, r4, #0x4 + ldr r1, [r4, #-0x4] + add r0, r5, r3, lsl #0x2 + add r3, r3, #0x1 + str r1, [r0, #0x4] + cmp r3, r2 + blt _020D84C0 +_020D84DC: + mov r0, r5 + mov r1, #0x100 + bl DC_StoreRange + mov r1, r5 + mov r0, #0xa + mov r2, #0x0 + bl PXI_SendWordByFifo + mov r4, r0 + ldr r0, _020D8528 ; =0x021D5E30 + mov r1, r5 + mov r2, #0x1 + bl OS_SendMessage +_020D850C: ; 0x020D850C + cmp r4, #0x0 + movlt r0, #0x8 + movge r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020D8528: .word 0x021D5E30 + + arm_func_start WmGetCommandBuffer4Arm7 +WmGetCommandBuffer4Arm7: ; 0x020D852C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020D859C ; =0x021D5E30 + add r1, sp, #0x0 + mov r2, #0x0 + bl OS_ReceiveMessage +_020D8544: ; 0x020D8544 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {lr} + bxeq lr + ldr r0, [sp, #0x0] + mov r1, #0x2 + bl DC_InvalidateRange + ldr r1, [sp, #0x0] + ldrh r0, [r1, #0x0] + ands r0, r0, #0x8000 + addne sp, sp, #0x4 + movne r0, r1 + ldmneia sp!, {lr} + bxne lr + ldr r0, _020D859C ; =0x021D5E30 + mov r2, #0x1 + bl OS_JamMessage +_020D858C: ; 0x020D858C + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D859C: .word 0x021D5E30 + + arm_func_start WMi_SetCallbackTable +WMi_SetCallbackTable: ; 0x020D85A0 + ldr r2, _020D85B4 ; =0x021D5E2C + ldr r2, [r2, #0x0] + add r0, r2, r0, lsl #0x2 + str r1, [r0, #0x18] + bx lr + .balign 4 +_020D85B4: .word 0x021D5E2C + + arm_func_start WM_Finish +WM_Finish: + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + mov r4, r0 + bl WMi_CheckInitialized +_020D85C8: ; 0x020D85C8 + cmp r0, #0x0 + beq _020D85E4 + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x3 + ldmia sp!, {r4,lr} + bx lr +_020D85E4: + mov r0, #0x1 + mov r1, #0x0 + bl WMi_CheckStateEx +_020D85F0: ; 0x020D85F0 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + bl WmClearFifoRecvFlag + mov r0, #0xa + mov r1, #0x0 + bl PXI_SetFifoRecvCallback + ldr r2, _020D8634 ; =0x021D5E2C + mov r3, #0x0 + ldr r1, _020D8638 ; =0x021D5E28 + mov r0, r4 + str r3, [r2, #0x0] + strh r3, [r1, #0x0] + bl OS_RestoreInterrupts +_020D8628: ; 0x020D8628 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D8634: .word 0x021D5E2C +_020D8638: .word 0x021D5E28 + + arm_func_start WmInitCore +WmInitCore: + stmdb sp!, {r4-r10,lr} + mov r6, r0 + mov r5, r1 + mov r7, r2 + bl OS_DisableInterrupts + ldr r1, _020D881C ; =0x021D5E28 + mov r4, r0 + ldrh r1, [r1, #0x0] + cmp r1, #0x0 + beq _020D8674 + bl OS_RestoreInterrupts + mov r0, #0x3 + ldmia sp!, {r4-r10,lr} + bx lr +_020D8674: + cmp r6, #0x0 + bne _020D868C + bl OS_RestoreInterrupts + mov r0, #0x6 + ldmia sp!, {r4-r10,lr} + bx lr +_020D868C: + cmp r5, #0x3 + bls _020D86A4 + bl OS_RestoreInterrupts + mov r0, #0x6 + ldmia sp!, {r4-r10,lr} + bx lr +_020D86A4: + ands r1, r6, #0x1f + beq _020D86BC + bl OS_RestoreInterrupts + mov r0, #0x6 + ldmia sp!, {r4-r10,lr} + bx lr +_020D86BC: + bl PXI_Init + mov r0, #0xa + mov r1, #0x1 + bl PXI_IsCallbackReady +_020D86CC: ; 0x020D86CC + cmp r0, #0x0 + bne _020D86E8 + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x4 + ldmia sp!, {r4-r10,lr} + bx lr +_020D86E8: + mov r0, r6 + mov r1, r7 + bl DC_InvalidateRange + mov r0, r5 + mov r1, r6 + mov r3, r7 + mov r2, #0x0 + bl MI_DmaFill32 + ldr r0, _020D8820 ; =0x021D5E2C + add r1, r6, #0x200 + str r6, [r0, #0x0] + str r1, [r6, #0x0] + ldr r2, [r0, #0x0] + ldr r1, [r2, #0x0] + add r1, r1, #0x300 + str r1, [r2, #0x4] + ldr r2, [r0, #0x0] + ldr r1, [r2, #0x4] + add r1, r1, #0x800 + str r1, [r2, #0xc] + ldr r1, [r0, #0x0] + ldr r0, [r1, #0xc] + add r0, r0, #0x100 + str r0, [r1, #0x10] + bl WmClearFifoRecvFlag + ldr r1, _020D8820 ; =0x021D5E2C + mov r3, #0x0 + ldr r0, [r1, #0x0] + strh r5, [r0, #0x14] + ldr r0, [r1, #0x0] + str r3, [r0, #0x14c] + ldr r0, [r1, #0x0] + add r0, r0, #0x100 + strh r3, [r0, #0x50] + mov r2, r3 +_020D8774: + ldr r0, [r1, #0x0] + add r0, r0, r3, lsl #0x2 + str r2, [r0, #0xcc] + ldr r0, [r1, #0x0] + add r0, r0, r3, lsl #0x2 + add r3, r3, #0x1 + str r2, [r0, #0x10c] + cmp r3, #0x10 + blt _020D8774 + ldr r0, _020D8824 ; =0x021D5E30 + ldr r1, _020D8828 ; =0x021D5E50 + mov r2, #0xa + bl OS_InitMessageQueue + ldr sb, _020D882C ; =0x021D5EC0 + mov r10, #0x0 + ldr r6, _020D8824 ; =0x021D5E30 + mov r8, #0x8000 + mov r7, #0x2 + mov r5, #0x1 +_020D87C0: + mov r0, r9 + mov r1, r7 + strh r8, [r9, #0x0] + bl DC_StoreRange + mov r0, r6 + mov r1, r9 + mov r2, r5 + bl OS_SendMessage + add r10, r10, #0x1 + cmp r10, #0xa + add r9, r9, #0x100 + blt _020D87C0 + ldr r1, _020D8830 ; =WmReceiveFifo + mov r0, #0xa + bl PXI_SetFifoRecvCallback + ldr r1, _020D881C ; =0x021D5E28 + mov r2, #0x1 + mov r0, r4 + strh r2, [r1, #0x0] + bl OS_RestoreInterrupts +_020D8810: ; 0x020D8810 + mov r0, #0x0 + ldmia sp!, {r4-r10,lr} + bx lr + .balign 4 +_020D881C: .word 0x021D5E28 +_020D8820: .word 0x021D5E2C +_020D8824: .word 0x021D5E30 +_020D8828: .word 0x021D5E50 +_020D882C: .word 0x021D5EC0 +_020D8830: .word WmReceiveFifo + + arm_func_start WM_Init +WM_Init: + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, #0xf00 + bl WmInitCore +_020D8844: ; 0x020D8844 + cmp r0, #0x0 + ldreq r1, _020D8864 ; =0x021D5E2C + moveq r2, #0x0 + ldreq r1, [r1, #0x0] + streqh r2, [r1, #0x16] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D8864: .word 0x021D5E2C diff --git a/arm9/asm/libwm.s b/arm9/asm/libwm.s deleted file mode 100644 index cc3e7998..00000000 --- a/arm9/asm/libwm.s +++ /dev/null @@ -1,3744 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start WMi_GetMPReadyAIDs -WMi_GetMPReadyAIDs: ; 0x020D7DE0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - bl OS_DisableInterrupts - ldr r1, _020D7E30 ; =0x021D5E2C - mov r4, r0 - ldr r0, [r1, #0x0] - cmp r0, #0x0 - moveq r5, #0x0 - beq _020D7E18 - ldr r5, [r0, #0x4] - mov r1, #0x2 - add r0, r5, #0x86 - bl DC_InvalidateRange - ldrh r5, [r5, #0x86] -_020D7E18: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, r5 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D7E30: .word 0x021D5E2C - - arm_func_start WM_GetConnectedAIDs -WM_GetConnectedAIDs: ; 0x020D7E34 - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - ldr r1, _020D7E64 ; =0x021D5E2C - ldr r1, [r1, #0x0] - cmp r1, #0x0 - ldrne r4, [r1, #0x14c] - moveq r4, #0x0 - bl OS_RestoreInterrupts - mov r0, r4, lsl #0x10 - mov r0, r0, lsr #0x10 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D7E64: .word 0x021D5E2C - - arm_func_start WM_GetAID -WM_GetAID: ; 0x020D7E68 - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - ldr r1, _020D7E98 ; =0x021D5E2C - ldr r1, [r1, #0x0] - cmp r1, #0x0 - addne r1, r1, #0x100 - ldrneh r4, [r1, #0x50] - moveq r4, #0x0 - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D7E98: .word 0x021D5E2C - - arm_func_start WMi_GetStatusAddress -WMi_GetStatusAddress: ; 0x020D7E9C - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl WMi_CheckInitialized -_020D7EA8: ; 0x020D7EA8 - cmp r0, #0x0 - movne r0, #0x0 - ldreq r0, _020D7EC8 ; =0x021D5E2C - ldreq r0, [r0, #0x0] - ldreq r0, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D7EC8: .word 0x021D5E2C - - arm_func_start WmClearFifoRecvFlag -WmClearFifoRecvFlag: ; 0x020D7ECC - ldr r1, _020D7EE4 ; =0x027FFF96 - ldrh r0, [r1, #0x0] - ands r2, r0, #0x1 - bicne r0, r0, #0x1 - strneh r0, [r1, #0x0] - bx lr - .balign 4 -_020D7EE4: .word 0x027FFF96 - - arm_func_start WmReceiveFifo -WmReceiveFifo: ; 0x020D7EE8 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xc - ldr r0, _020D82B0 ; =0x021D5E2C - cmp r2, #0x0 - ldr r8, [r0, #0x0] - mov r10, r1 - addne sp, sp, #0xc - ldmneia sp!, {r4-r11,lr} - bxne lr - ldr r0, [r8, #0x10] - mov r1, #0x100 - bl DC_InvalidateRange - ldrh r0, [r8, #0x16] - cmp r0, #0x0 - bne _020D7F30 - ldr r0, [r8, #0x4] - mov r1, #0x800 - bl DC_InvalidateRange -_020D7F30: - ldr r0, [r8, #0x10] - cmp r10, r0 - beq _020D7F48 - mov r0, r10 - mov r1, #0x100 - bl DC_InvalidateRange -_020D7F48: - ldrh r0, [r10, #0x0] - cmp r0, #0x2c - blo _020D8000 - cmp r0, #0x80 - bne _020D7F84 - ldrh r0, [r10, #0x2] - cmp r0, #0x13 - bne _020D7F6C - bl OS_Terminate -_020D7F6C: - ldr r1, [r8, #0xc8] - cmp r1, #0x0 - beq _020D8268 - mov r0, r10 - blx r1 - b _020D8268 -_020D7F84: - cmp r0, #0x82 - bne _020D7FD8 - ldrh r0, [r10, #0x6] - add r1, r8, r0, lsl #0x2 - ldr r0, [r1, #0xcc] - cmp r0, #0x0 - beq _020D8268 - ldr r0, [r1, #0x10c] - str r0, [r10, #0x1c] - ldr r0, [r8, #0x14c] - strh r0, [r10, #0x22] - ldr r1, [r8, #0x4] - ldr r0, [r10, #0x8] - ldrh r1, [r1, #0x72] - bl DC_InvalidateRange - ldrh r1, [r10, #0x6] - mov r0, r10 - add r1, r8, r1, lsl #0x2 - ldr r1, [r1, #0xcc] - blx r1 - b _020D8268 -_020D7FD8: - cmp r0, #0x81 - bne _020D8268 - mov r0, #0xf - strh r0, [r10, #0x0] - ldr r1, [r10, #0x1c] - cmp r1, #0x0 - beq _020D8268 - mov r0, r10 - blx r1 - b _020D8268 -_020D8000: - cmp r0, #0xe - bne _020D8040 - ldrh r1, [r10, #0x4] - ldr r0, _020D82B4 ; =0x0000FFF5 - add r0, r1, r0 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r0, #0x1 - bhi _020D8040 - ldrh r0, [r10, #0x2] - cmp r0, #0x0 - bne _020D8040 - ldr r1, [r8, #0x4] - ldr r0, [r10, #0x8] - ldrh r1, [r1, #0x72] - bl DC_InvalidateRange -_020D8040: - ldrh r1, [r10, #0x0] - cmp r1, #0x2 - bne _020D8088 - ldrh r0, [r10, #0x2] - cmp r0, #0x0 - bne _020D8088 - add r0, r8, r1, lsl #0x2 - ldr r4, [r0, #0x18] - bl WM_Finish -_020D8064: ; 0x020D8064 - cmp r4, #0x0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4-r11,lr} - bxeq lr - mov r0, r10 - blx r4 - add sp, sp, #0xc - ldmia sp!, {r4-r11,lr} - bx lr -_020D8088: - add r0, r8, r1, lsl #0x2 - ldr r1, [r0, #0x18] - cmp r1, #0x0 - beq _020D80B8 - mov r0, r10 - blx r1 - ldr r0, _020D82B8 ; =0x021D5E28 - ldrh r0, [r0, #0x0] - cmp r0, #0x0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4-r11,lr} - bxeq lr -_020D80B8: - ldrh r0, [r10, #0x0] - cmp r0, #0x8 - beq _020D80CC - cmp r0, #0xc - bne _020D8268 -_020D80CC: - cmp r0, #0x8 - bne _020D8100 - add r0, r10, #0xa - str r0, [sp, #0x0] - ldrh r0, [r10, #0x2c] - add r11, r10, #0x14 - ldrh r7, [r10, #0x8] - ldrh r6, [r10, #0x10] - ldrh r4, [r10, #0x12] - str r0, [sp, #0x4] - ldrh r9, [r10, #0x2e] - mov r5, #0x0 - b _020D8130 -_020D8100: - cmp r0, #0xc - bne _020D8130 - ldrh r0, [r10, #0x16] - mov r6, #0x0 - ldrh r7, [r10, #0x8] - str r0, [sp, #0x4] - add r0, r10, #0x10 - ldrh r5, [r10, #0xa] - ldrh r4, [r10, #0xc] - ldrh r9, [r10, #0x18] - mov r11, r6 - str r0, [sp, #0x0] -_020D8130: - cmp r7, #0x7 - beq _020D8148 - cmp r7, #0x9 - beq _020D8148 - cmp r7, #0x1a - bne _020D8268 -_020D8148: - cmp r7, #0x7 - ldreq r1, [r8, #0x14c] - moveq r0, #0x1 - orreq r0, r1, r0, lsl r6 - streq r0, [r8, #0x14c] - movne r0, #0x1 - mvnne r0, r0, lsl r6 - ldrne r1, [r8, #0x14c] - add r3, r8, #0x100 - andne r0, r1, r0 - strne r0, [r8, #0x14c] - ldr r0, _020D82BC ; =0x021D5E78 - mov r1, #0x0 - mov r2, #0x44 - strh r5, [r3, #0x50] - bl MI_CpuFill8 - ldr r3, _020D82BC ; =0x021D5E78 - mov r1, #0x0 - mov r2, #0x82 - strh r2, [r3, #0x0] - strh r7, [r3, #0x4] - strh r6, [r3, #0x12] - strh r5, [r3, #0x20] - strh r1, [r3, #0x2] - str r1, [r3, #0x8] - str r1, [r3, #0xc] - strh r1, [r3, #0x10] - ldr r1, [r8, #0x14c] - ldr r2, _020D82C0 ; =0x0000FFFF - strh r1, [r3, #0x22] - strh r2, [r3, #0x1a] - ldr r0, [sp, #0x0] - ldr r1, _020D82C4 ; =0x021D5E8C - mov r2, #0x6 - strh r4, [r3, #0x3c] - bl MI_CpuCopy8 -_020D81D8: ; 0x020D81D8 - cmp r11, #0x0 - beq _020D81F4 - ldr r1, _020D82C8 ; =0x021D5E9C - mov r0, r11 - mov r2, #0x18 - bl MIi_CpuCopy16 - b _020D8204 -_020D81F4: - ldr r1, _020D82C8 ; =0x021D5E9C - mov r0, #0x0 - mov r2, #0x18 - bl MIi_CpuClear16 -_020D8204: - cmp r5, #0x0 - ldreq r1, [sp, #0x4] - ldr r0, _020D82BC ; =0x021D5E78 - movne r1, r9 - cmp r5, #0x0 - ldrne r9, [sp, #0x4] - ldr r5, _020D82BC ; =0x021D5E78 - strh r1, [r0, #0x40] - mov r4, #0x0 - strh r9, [r5, #0x42] -_020D822C: - strh r4, [r5, #0x6] - add r2, r8, r4, lsl #0x2 - ldr r0, [r2, #0xcc] - cmp r0, #0x0 - beq _020D8254 - ldr r1, [r2, #0x10c] - mov r0, r5 - str r1, [r5, #0x1c] - ldr r1, [r2, #0xcc] - blx r1 -_020D8254: - add r0, r4, #0x1 - mov r0, r0, lsl #0x10 - mov r4, r0, lsr #0x10 - cmp r4, #0x10 - blo _020D822C -_020D8268: - ldr r0, [r8, #0x10] - mov r1, #0x100 - bl DC_InvalidateRange - bl WmClearFifoRecvFlag - ldr r0, [r8, #0x10] - cmp r10, r0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4-r11,lr} - bxeq lr - ldrh r2, [r10, #0x0] - mov r0, r10 - mov r1, #0x100 - orr r2, r2, #0x8000 - strh r2, [r10, #0x0] - bl DC_StoreRange - add sp, sp, #0xc - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020D82B0: .word 0x021D5E2C -_020D82B4: .word 0x0000FFF5 -_020D82B8: .word 0x021D5E28 -_020D82BC: .word 0x021D5E78 -_020D82C0: .word 0x0000FFFF -_020D82C4: .word 0x021D5E8C -_020D82C8: .word 0x021D5E9C - - arm_func_start WMi_CheckStateEx -WMi_CheckStateEx: - stmdb sp!, {r0-r3} - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl WMi_CheckInitialized -_020D82DC: ; 0x020D82DC - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - addne sp, sp, #0x10 - bxne lr - ldr r0, _020D8370 ; =0x021D5E2C - mov r1, #0x2 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x4] - bl DC_InvalidateRange - ldr r0, _020D8370 ; =0x021D5E2C - add r1, sp, #0x8 - ldr r2, [r0, #0x0] - ldr r0, [sp, #0x8] - ldr r2, [r2, #0x4] - cmp r0, #0x0 - bic r1, r1, #0x3 - addeq sp, sp, #0x4 - add r12, r1, #0x4 - ldrh r3, [r2, #0x0] - mov r0, #0x3 - ldmeqia sp!, {lr} - addeq sp, sp, #0x10 - bxeq lr - mov r2, #0x0 -_020D8340: - add r12, r12, #0x4 - ldr r1, [r12, #-0x4] - cmp r1, r3 - ldr r1, [sp, #0x8] - moveq r0, r2 - subs r1, r1, #0x1 - str r1, [sp, #0x8] - bne _020D8340 - add sp, sp, #0x4 - ldmia sp!, {lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020D8370: .word 0x021D5E2C - - arm_func_start WMi_CheckIdle -WMi_CheckIdle: - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl WMi_CheckInitialized -_020D8380: ; 0x020D8380 - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - ldr r0, _020D83CC ; =0x021D5E2C - mov r1, #0x2 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x4] - bl DC_InvalidateRange - ldr r0, _020D83CC ; =0x021D5E2C - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x4] - ldrh r0, [r0, #0x0] - cmp r0, #0x1 - movls r0, #0x3 - movhi r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D83CC: .word 0x021D5E2C - - arm_func_start WMi_CheckInitialized -WMi_CheckInitialized: - ldr r0, _020D83E8 ; =0x021D5E28 - ldrh r0, [r0, #0x0] - cmp r0, #0x0 - movne r0, #0x0 - moveq r0, #0x3 - bx lr - .balign 4 -_020D83E8: .word 0x021D5E28 - - arm_func_start WMi_GetSystemWork -WMi_GetSystemWork: ; 0x020D83EC - ldr r0, _020D83F8 ; =0x021D5E2C - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020D83F8: .word 0x021D5E2C - - arm_func_start WMi_SendCommandDirect -WMi_SendCommandDirect: - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r4, r1 - bl WmGetCommandBuffer4Arm7 - movs r5, r0 - moveq r0, #0x8 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl MI_CpuCopy8 - mov r0, r5 - mov r1, r4 - bl DC_StoreRange - mov r1, r5 - mov r0, #0xa - mov r2, #0x0 - bl PXI_SendWordByFifo - mov r4, r0 - ldr r0, _020D8470 ; =0x021D5E30 - mov r1, r5 - mov r2, #0x1 - bl OS_SendMessage -_020D845C: ; 0x020D845C - cmp r4, #0x0 - movlt r0, #0x8 - movge r0, #0x2 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020D8470: .word 0x021D5E30 - - arm_func_start WMi_SendCommand -WMi_SendCommand: - stmdb sp!, {r0-r3} - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, r0 - bl WmGetCommandBuffer4Arm7 - movs r5, r0 - addeq sp, sp, #0x4 - moveq r0, #0x8 - ldmeqia sp!, {r4-r5,lr} - addeq sp, sp, #0x10 - bxeq lr - strh r4, [r5, #0x0] - ldrh r2, [sp, #0x14] - add r0, sp, #0x14 - bic r0, r0, #0x3 - mov r3, #0x0 - cmp r2, #0x0 - add r4, r0, #0x4 - ble _020D84DC -_020D84C0: - add r4, r4, #0x4 - ldr r1, [r4, #-0x4] - add r0, r5, r3, lsl #0x2 - add r3, r3, #0x1 - str r1, [r0, #0x4] - cmp r3, r2 - blt _020D84C0 -_020D84DC: - mov r0, r5 - mov r1, #0x100 - bl DC_StoreRange - mov r1, r5 - mov r0, #0xa - mov r2, #0x0 - bl PXI_SendWordByFifo - mov r4, r0 - ldr r0, _020D8528 ; =0x021D5E30 - mov r1, r5 - mov r2, #0x1 - bl OS_SendMessage -_020D850C: ; 0x020D850C - cmp r4, #0x0 - movlt r0, #0x8 - movge r0, #0x2 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020D8528: .word 0x021D5E30 - - arm_func_start WmGetCommandBuffer4Arm7 -WmGetCommandBuffer4Arm7: ; 0x020D852C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020D859C ; =0x021D5E30 - add r1, sp, #0x0 - mov r2, #0x0 - bl OS_ReceiveMessage -_020D8544: ; 0x020D8544 - cmp r0, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {lr} - bxeq lr - ldr r0, [sp, #0x0] - mov r1, #0x2 - bl DC_InvalidateRange - ldr r1, [sp, #0x0] - ldrh r0, [r1, #0x0] - ands r0, r0, #0x8000 - addne sp, sp, #0x4 - movne r0, r1 - ldmneia sp!, {lr} - bxne lr - ldr r0, _020D859C ; =0x021D5E30 - mov r2, #0x1 - bl OS_JamMessage -_020D858C: ; 0x020D858C - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D859C: .word 0x021D5E30 - - arm_func_start WMi_SetCallbackTable -WMi_SetCallbackTable: ; 0x020D85A0 - ldr r2, _020D85B4 ; =0x021D5E2C - ldr r2, [r2, #0x0] - add r0, r2, r0, lsl #0x2 - str r1, [r0, #0x18] - bx lr - .balign 4 -_020D85B4: .word 0x021D5E2C - - arm_func_start WM_Finish -WM_Finish: - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - mov r4, r0 - bl WMi_CheckInitialized -_020D85C8: ; 0x020D85C8 - cmp r0, #0x0 - beq _020D85E4 - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x3 - ldmia sp!, {r4,lr} - bx lr -_020D85E4: - mov r0, #0x1 - mov r1, #0x0 - bl WMi_CheckStateEx -_020D85F0: ; 0x020D85F0 - cmp r0, #0x0 - ldmneia sp!, {r4,lr} - bxne lr - bl WmClearFifoRecvFlag - mov r0, #0xa - mov r1, #0x0 - bl PXI_SetFifoRecvCallback - ldr r2, _020D8634 ; =0x021D5E2C - mov r3, #0x0 - ldr r1, _020D8638 ; =0x021D5E28 - mov r0, r4 - str r3, [r2, #0x0] - strh r3, [r1, #0x0] - bl OS_RestoreInterrupts -_020D8628: ; 0x020D8628 - mov r0, #0x0 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D8634: .word 0x021D5E2C -_020D8638: .word 0x021D5E28 - - arm_func_start WmInitCore -WmInitCore: - stmdb sp!, {r4-r10,lr} - mov r6, r0 - mov r5, r1 - mov r7, r2 - bl OS_DisableInterrupts - ldr r1, _020D881C ; =0x021D5E28 - mov r4, r0 - ldrh r1, [r1, #0x0] - cmp r1, #0x0 - beq _020D8674 - bl OS_RestoreInterrupts - mov r0, #0x3 - ldmia sp!, {r4-r10,lr} - bx lr -_020D8674: - cmp r6, #0x0 - bne _020D868C - bl OS_RestoreInterrupts - mov r0, #0x6 - ldmia sp!, {r4-r10,lr} - bx lr -_020D868C: - cmp r5, #0x3 - bls _020D86A4 - bl OS_RestoreInterrupts - mov r0, #0x6 - ldmia sp!, {r4-r10,lr} - bx lr -_020D86A4: - ands r1, r6, #0x1f - beq _020D86BC - bl OS_RestoreInterrupts - mov r0, #0x6 - ldmia sp!, {r4-r10,lr} - bx lr -_020D86BC: - bl PXI_Init - mov r0, #0xa - mov r1, #0x1 - bl PXI_IsCallbackReady -_020D86CC: ; 0x020D86CC - cmp r0, #0x0 - bne _020D86E8 - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x4 - ldmia sp!, {r4-r10,lr} - bx lr -_020D86E8: - mov r0, r6 - mov r1, r7 - bl DC_InvalidateRange - mov r0, r5 - mov r1, r6 - mov r3, r7 - mov r2, #0x0 - bl MI_DmaFill32 - ldr r0, _020D8820 ; =0x021D5E2C - add r1, r6, #0x200 - str r6, [r0, #0x0] - str r1, [r6, #0x0] - ldr r2, [r0, #0x0] - ldr r1, [r2, #0x0] - add r1, r1, #0x300 - str r1, [r2, #0x4] - ldr r2, [r0, #0x0] - ldr r1, [r2, #0x4] - add r1, r1, #0x800 - str r1, [r2, #0xc] - ldr r1, [r0, #0x0] - ldr r0, [r1, #0xc] - add r0, r0, #0x100 - str r0, [r1, #0x10] - bl WmClearFifoRecvFlag - ldr r1, _020D8820 ; =0x021D5E2C - mov r3, #0x0 - ldr r0, [r1, #0x0] - strh r5, [r0, #0x14] - ldr r0, [r1, #0x0] - str r3, [r0, #0x14c] - ldr r0, [r1, #0x0] - add r0, r0, #0x100 - strh r3, [r0, #0x50] - mov r2, r3 -_020D8774: - ldr r0, [r1, #0x0] - add r0, r0, r3, lsl #0x2 - str r2, [r0, #0xcc] - ldr r0, [r1, #0x0] - add r0, r0, r3, lsl #0x2 - add r3, r3, #0x1 - str r2, [r0, #0x10c] - cmp r3, #0x10 - blt _020D8774 - ldr r0, _020D8824 ; =0x021D5E30 - ldr r1, _020D8828 ; =0x021D5E50 - mov r2, #0xa - bl OS_InitMessageQueue - ldr sb, _020D882C ; =0x021D5EC0 - mov r10, #0x0 - ldr r6, _020D8824 ; =0x021D5E30 - mov r8, #0x8000 - mov r7, #0x2 - mov r5, #0x1 -_020D87C0: - mov r0, r9 - mov r1, r7 - strh r8, [r9, #0x0] - bl DC_StoreRange - mov r0, r6 - mov r1, r9 - mov r2, r5 - bl OS_SendMessage - add r10, r10, #0x1 - cmp r10, #0xa - add r9, r9, #0x100 - blt _020D87C0 - ldr r1, _020D8830 ; =WmReceiveFifo - mov r0, #0xa - bl PXI_SetFifoRecvCallback - ldr r1, _020D881C ; =0x021D5E28 - mov r2, #0x1 - mov r0, r4 - strh r2, [r1, #0x0] - bl OS_RestoreInterrupts -_020D8810: ; 0x020D8810 - mov r0, #0x0 - ldmia sp!, {r4-r10,lr} - bx lr - .balign 4 -_020D881C: .word 0x021D5E28 -_020D8820: .word 0x021D5E2C -_020D8824: .word 0x021D5E30 -_020D8828: .word 0x021D5E50 -_020D882C: .word 0x021D5EC0 -_020D8830: .word WmReceiveFifo - - arm_func_start WM_Init -WM_Init: - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, #0xf00 - bl WmInitCore -_020D8844: ; 0x020D8844 - cmp r0, #0x0 - ldreq r1, _020D8864 ; =0x021D5E2C - moveq r2, #0x0 - ldreq r1, [r1, #0x0] - streqh r2, [r1, #0x16] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D8864: .word 0x021D5E2C - - arm_func_start WM_GetNextTgid -WM_GetNextTgid: ; 0x020D8868 - stmdb sp!, {lr} - sub sp, sp, #0xc - - arm_func_start FUN_020D8870 -FUN_020D8870: ; 0x020D8870 - ldr r0, _020D88DC ; =0x02106A54 - ldr r0, [r0, #0x0] - cmp r0, #0x10000 - bne _020D88B0 - bl RTC_Init -_020D8884: ; 0x020D8884 - add r0, sp, #0x0 - bl RTC_GetTime -_020D888C: ; 0x020D888C - cmp r0, #0x0 - bne _020D88B0 - ldr r2, [sp, #0x8] - ldr r0, [sp, #0x4] - ldr r1, _020D88DC ; =0x02106A54 - add r0, r2, r0, lsl #0x8 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - str r0, [r1, #0x0] -_020D88B0: - ldr r1, _020D88DC ; =0x02106A54 - ldr r0, [r1, #0x0] - add r0, r0, #0x1 - mov r0, r0, lsl #0x10 - mov r2, r0, lsr #0x10 - mov r0, r2, lsl #0x10 - str r2, [r1, #0x0] - mov r0, r0, lsr #0x10 - add sp, sp, #0xc - ldmia sp!, {lr} - bx lr - .balign 4 -_020D88DC: .word 0x02106A54 - - arm_func_start WM_GetOtherElements -WM_GetOtherElements: ; 0x020D88E0 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x88 - ldrh r2, [r1, #0x3c] - mov lr, r0 - cmp r2, #0x0 - beq _020D892C - mov r0, #0x0 - add r5, sp, #0x0 - strb r0, [sp, #0x0] - mov r4, #0x8 -_020D8908: - ldmia r5!, {r0-r3} - stmia lr!, {r0-r3} - subs r4, r4, #0x1 - bne _020D8908 - ldr r0, [r5, #0x0] - add sp, sp, #0x88 - str r0, [lr, #0x0] - ldmia sp!, {r4-r6,lr} - bx lr -_020D892C: - ldrh r0, [r1, #0x3e] - strb r0, [sp, #0x0] - ldrb r0, [sp, #0x0] - cmp r0, #0x0 - bne _020D896C - add r5, sp, #0x0 - mov r4, #0x8 -_020D8948: - ldmia r5!, {r0-r3} - stmia lr!, {r0-r3} - subs r4, r4, #0x1 - bne _020D8948 - ldr r0, [r5, #0x0] - add sp, sp, #0x88 - str r0, [lr, #0x0] - ldmia sp!, {r4-r6,lr} - bx lr -_020D896C: - cmp r0, #0x10 - movhi r0, #0x10 - strhib r0, [sp, #0x0] - ldrh r2, [r1, #0x0] - ldrb r3, [sp, #0x0] - mov r0, #0x0 - mov r2, r2, lsl #0x1 - sub r4, r2, #0x40 - cmp r3, #0x0 - add r3, r1, #0x40 - mov r2, r0 - and r1, r4, #0xff - ble _020D8A20 - add r12, sp, #0x0 -_020D89A4: - ldrb r5, [r3, #0x0] - add r6, r12, r2, lsl #0x3 - add r4, r3, #0x2 - strb r5, [r6, #0x4] - ldrb r5, [r3, #0x1] - strb r5, [r6, #0x5] - str r4, [r6, #0x8] - ldrb r4, [r6, #0x5] - add r4, r4, #0x2 - and r5, r4, #0xff - add r0, r0, r5 - and r0, r0, #0xff - cmp r0, r1 - bls _020D8A0C - mov r0, #0x0 - strb r0, [sp, #0x0] - mov r4, #0x8 -_020D89E8: - ldmia r12!, {r0-r3} - stmia lr!, {r0-r3} - subs r4, r4, #0x1 - bne _020D89E8 - ldr r0, [r12, #0x0] - add sp, sp, #0x88 - str r0, [lr, #0x0] - ldmia sp!, {r4-r6,lr} - bx lr -_020D8A0C: - ldrb r4, [sp, #0x0] - add r2, r2, #0x1 - add r3, r3, r5 - cmp r2, r4 - blt _020D89A4 -_020D8A20: - add r4, sp, #0x0 - mov r12, #0x8 -_020D8A28: - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - subs r12, r12, #0x1 - bne _020D8A28 - ldr r0, [r4, #0x0] - str r0, [lr, #0x0] - add sp, sp, #0x88 - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start WM_GetDispersionScanPeriod -WM_GetDispersionScanPeriod: ; 0x020D8A4C - stmdb sp!, {lr} - sub sp, sp, #0xc - add r0, sp, #0x0 - bl OS_GetMacAddress - mov r2, #0x0 - add r1, sp, #0x0 - mov r3, r2 -_020D8A68: - ldrb r0, [r1, #0x0] - add r2, r2, #0x1 - cmp r2, #0x6 - add r0, r3, r0 - mov r0, r0, lsl #0x10 - mov r3, r0, lsr #0x10 - add r1, r1, #0x1 - blt _020D8A68 - ldr r0, _020D8AE4 ; =0x027FFC3C - mov r1, #0xd - ldr r0, [r0, #0x0] - ldr r2, _020D8AE8 ; =0x66666667 - add r0, r3, r0 - mov r0, r0, lsl #0x10 - mov r3, r0, lsr #0x10 - mul r0, r3, r1 - mov r0, r0, lsl #0x10 - mov r3, r0, lsr #0x10 - smull r0, r1, r2, r3 - mov r1, r1, asr #0x2 - mov r0, r3, lsr #0x1f - ldr r2, _020D8AEC ; =0x0000000A - add r1, r0, r1 - smull r0, r1, r2, r1 - sub r1, r3, r0 - add r0, r1, #0x1e - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0xc - ldmia sp!, {lr} - bx lr - .balign 4 -_020D8AE4: .word 0x027FFC3C -_020D8AE8: .word 0x66666667 -_020D8AEC: .word 0x0000000A - - arm_func_start WM_GetDispersionBeaconPeriod -WM_GetDispersionBeaconPeriod: ; 0x020D8AF0 - stmdb sp!, {lr} - sub sp, sp, #0xc - add r0, sp, #0x0 - bl OS_GetMacAddress - mov r2, #0x0 - add r1, sp, #0x0 - mov r3, r2 -_020D8B0C: - ldrb r0, [r1, #0x0] - add r2, r2, #0x1 - cmp r2, #0x6 - add r0, r3, r0 - mov r0, r0, lsl #0x10 - mov r3, r0, lsr #0x10 - add r1, r1, #0x1 - blt _020D8B0C - ldr r0, _020D8B88 ; =0x027FFC3C - mov r1, #0x7 - ldr r0, [r0, #0x0] - ldr r2, _020D8B8C ; =0x66666667 - add r0, r3, r0 - mov r0, r0, lsl #0x10 - mov r3, r0, lsr #0x10 - mul r0, r3, r1 - mov r0, r0, lsl #0x10 - mov r3, r0, lsr #0x10 - smull r0, r1, r2, r3 - mov r1, r1, asr #0x3 - mov r0, r3, lsr #0x1f - ldr r2, _020D8B90 ; =0x00000014 - add r1, r0, r1 - smull r0, r1, r2, r1 - sub r1, r3, r0 - add r0, r1, #0xc8 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0xc - ldmia sp!, {lr} - bx lr - .balign 4 -_020D8B88: .word 0x027FFC3C -_020D8B8C: .word 0x66666667 -_020D8B90: .word 0x00000014 - - arm_func_start WM_GetLinkLevel -WM_GetLinkLevel: ; 0x020D8B94 - stmdb sp!, {r4,lr} - bl WMi_GetSystemWork - mov r4, r0 - bl WMi_CheckInitialized -_020D8BA4: ; 0x020D8BA4 - cmp r0, #0x0 - movne r0, #0x0 - ldmneia sp!, {r4,lr} - bxne lr - ldr r0, [r4, #0x4] - mov r1, #0x2 - bl DC_InvalidateRange - ldr r2, [r4, #0x4] - ldrh r0, [r2, #0x0] - cmp r0, #0x9 - beq _020D8BE4 - cmp r0, #0xa - beq _020D8C10 - cmp r0, #0xb - beq _020D8C10 - b _020D8C2C -_020D8BE4: - ldr r0, _020D8C38 ; =0x00000182 - mov r1, #0x2 - add r0, r2, r0 - bl DC_InvalidateRange - ldr r2, [r4, #0x4] - add r0, r2, #0x100 - ldrh r0, [r0, #0x82] - cmp r0, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr -_020D8C10: - add r0, r2, #0xbc - mov r1, #0x2 - bl DC_InvalidateRange - ldr r0, [r4, #0x4] - ldrh r0, [r0, #0xbc] - ldmia sp!, {r4,lr} - bx lr -_020D8C2C: - mov r0, #0x0 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D8C38: .word 0x00000182 - - arm_func_start WM_GetAllowedChannel -WM_GetAllowedChannel: ; 0x020D8C3C - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl WMi_CheckInitialized -_020D8C48: ; 0x020D8C48 - cmp r0, #0x0 - movne r0, #0x8000 - ldreq r0, _020D8C64 ; =0x027FFCFA - ldreqh r0, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D8C64: .word 0x027FFCFA - - arm_func_start WM_ReadMPData -WM_ReadMPData: ; 0x020D8C68 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x40 - mov r5, r0 - mov r4, r1 - bl WMi_GetSystemWork - mov r6, r0 - bl WMi_CheckInitialized -_020D8C84: ; 0x020D8C84 - cmp r0, #0x0 - addne sp, sp, #0x40 - movne r0, #0x0 - ldmneia sp!, {r4-r6,lr} - bxne lr - cmp r4, #0x1 - blo _020D8CA8 - cmp r4, #0xf - bls _020D8CB8 -_020D8CA8: - add sp, sp, #0x40 - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020D8CB8: - ldr r2, [r6, #0x4] - ldr r0, _020D8D68 ; =0x00000182 - mov r1, #0x2 - add r0, r2, r0 - bl DC_InvalidateRange - ldr r0, [r6, #0x4] - mov r1, #0x1 - add r0, r0, #0x100 - ldrh r2, [r0, #0x82] - mov r0, r1, lsl r4 - ands r0, r2, r0 - addeq sp, sp, #0x40 - moveq r0, #0x0 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - ldrh r0, [r5, #0x4] - cmp r0, #0x0 - addeq sp, sp, #0x40 - moveq r0, #0x0 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - add r0, r5, #0xa - str r0, [sp, #0x0] - mov r3, #0x0 - add r2, sp, #0x0 -_020D8D1C: - ldr r0, [r2, r3, lsl #0x2] - ldrh r1, [r0, #0x4] - cmp r4, r1 - addeq sp, sp, #0x40 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - add r3, r3, #0x1 - sub r0, r3, #0x1 - ldrh r1, [r5, #0x6] - ldr r0, [r2, r0, lsl #0x2] - add r0, r1, r0 - str r0, [r2, r3, lsl #0x2] - ldrh r0, [r5, #0x4] - cmp r3, r0 - blt _020D8D1C - mov r0, #0x0 - add sp, sp, #0x40 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020D8D68: .word 0x00000182 - - arm_func_start WM_GetMPReceiveBufferSize -WM_GetMPReceiveBufferSize: - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - bl WMi_GetSystemWork - mov r4, r0 - mov r0, #0x2 - mov r1, #0x7 - mov r2, #0x8 - bl WMi_CheckStateEx -_020D8D8C: ; 0x020D8D8C - cmp r0, #0x0 - addne sp, sp, #0x4 - movne r0, #0x0 - ldmneia sp!, {r4-r5,lr} - bxne lr - ldr r0, [r4, #0x4] - mov r1, #0x4 - add r0, r0, #0xc - bl DC_InvalidateRange - ldr r1, [r4, #0x4] - ldr r0, [r1, #0xc] - cmp r0, #0x1 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - add r0, r1, #0x188 - mov r1, #0x2 - bl DC_InvalidateRange - ldr r1, [r4, #0x4] - add r0, r1, #0x100 - ldrh r0, [r0, #0x88] - cmp r0, #0x0 - moveq r5, #0x1 - add r0, r1, #0x3e - mov r1, #0x2 - movne r5, #0x0 - bl DC_InvalidateRange - cmp r5, #0x1 - ldr r0, [r4, #0x4] - addne sp, sp, #0x4 - ldrh r5, [r0, #0x3e] - addne r0, r5, #0x51 - bicne r0, r0, #0x1f - movne r0, r0, lsl #0x1 - ldmneia sp!, {r4-r5,lr} - bxne lr - add r0, r0, #0xf8 - mov r1, #0x2 - bl DC_InvalidateRange - ldr r0, [r4, #0x4] - add r1, r5, #0xc - ldrh r0, [r0, #0xf8] - mul r0, r1, r0 - add r0, r0, #0x29 - bic r0, r0, #0x1f - mov r0, r0, lsl #0x1 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start WM_GetMPSendBufferSize -WM_GetMPSendBufferSize: - stmdb sp!, {r4,lr} - bl WMi_GetSystemWork - mov r4, r0 - mov r0, #0x2 - mov r1, #0x7 - mov r2, #0x8 - bl WMi_CheckStateEx -_020D8E70: ; 0x020D8E70 - cmp r0, #0x0 - movne r0, #0x0 - ldmneia sp!, {r4,lr} - bxne lr - ldr r0, [r4, #0x4] - mov r1, #0x4 - add r0, r0, #0xc - bl DC_InvalidateRange - ldr r1, [r4, #0x4] - ldr r0, [r1, #0xc] - cmp r0, #0x1 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - add r0, r1, #0x3c - mov r1, #0x4 - bl DC_InvalidateRange - ldr r0, [r4, #0x4] - ldrh r0, [r0, #0x3c] - add r0, r0, #0x1f - bic r0, r0, #0x1f - ldmia sp!, {r4,lr} - bx lr - - arm_func_start WM_ReadStatus -WM_ReadStatus: ; 0x020D8ECC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl WMi_GetSystemWork - mov r4, r0 - bl WMi_CheckInitialized -_020D8EE4: ; 0x020D8EE4 - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - cmp r5, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x6 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldr r0, [r4, #0x4] - mov r1, #0x7c0 - bl DC_InvalidateRange - ldr r0, [r4, #0x4] - mov r1, r5 - mov r2, #0x7c0 - bl MIi_CpuCopyFast -_020D8F24: ; 0x020D8F24 - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start WM_SetPortCallback -WM_SetPortCallback: - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x48 - movs r5, r1 - mov r6, r0 - mov r4, r2 - beq _020D8F9C - add r0, sp, #0x0 - mov r1, #0x0 - mov r2, #0x44 - bl MI_CpuFill8 - mov r3, #0x0 - ldr r1, _020D9010 ; =0x0000FFFF - mov r7, #0x82 - mov r2, #0x19 - add r0, sp, #0x14 - strh r7, [sp, #0x0] - strh r3, [sp, #0x2] - strh r2, [sp, #0x4] - strh r6, [sp, #0x6] - str r3, [sp, #0x8] - str r3, [sp, #0xc] - strh r3, [sp, #0x10] - strh r1, [sp, #0x1a] - str r4, [sp, #0x1c] - strh r3, [sp, #0x12] - bl OS_GetMacAddress -_020D8F9C: - bl OS_DisableInterrupts - mov r8, r0 - bl WMi_CheckInitialized - movs r7, r0 - beq _020D8FC8 - mov r0, r8 - bl OS_RestoreInterrupts - add sp, sp, #0x48 - mov r0, r7 - ldmia sp!, {r4-r8,lr} - bx lr -_020D8FC8: - bl WMi_GetSystemWork - add r0, r0, r6, lsl #0x2 - str r5, [r0, #0xcc] - str r4, [r0, #0x10c] - cmp r5, #0x0 - beq _020D8FF8 - bl WM_GetConnectedAIDs - strh r0, [sp, #0x22] - bl WM_GetAID - strh r0, [sp, #0x20] - add r0, sp, #0x0 - blx r5 -_020D8FF8: - mov r0, r8 - bl OS_RestoreInterrupts -_020D9000: ; 0x020D9000 - mov r0, #0x0 - add sp, sp, #0x48 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020D9010: .word 0x0000FFFF - - arm_func_start WM_SetIndCallback -WM_SetIndCallback: ; 0x020D9014 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - bl OS_DisableInterrupts - mov r5, r0 - bl WMi_CheckInitialized - movs r4, r0 - beq _020D9044 - mov r0, r5 - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4-r6,lr} - bx lr -_020D9044: - bl WMi_GetSystemWork - str r6, [r0, #0xc8] - mov r0, r5 - bl OS_RestoreInterrupts -_020D9054: ; 0x020D9054 - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start WM_Disconnect -WM_Disconnect: ; 0x020D9060 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x8 - mov r6, r0 - mov r5, r1 - bl WMi_GetSystemWork - mov r1, #0xa - mov r4, r0 - str r1, [sp, #0x0] - mov r12, #0xb - mov r0, #0x5 - mov r1, #0x7 - mov r2, #0x9 - mov r3, #0x8 - str r12, [sp, #0x4] - bl WMi_CheckStateEx -_020D909C: ; 0x020D909C - cmp r0, #0x0 - addne sp, sp, #0x8 - ldmneia sp!, {r4-r6,lr} - bxne lr - ldr r2, [r4, #0x4] - ldrh r0, [r2, #0x0] - cmp r0, #0x7 - beq _020D90C4 - cmp r0, #0x9 - bne _020D9120 -_020D90C4: - cmp r5, #0x1 - blo _020D90D4 - cmp r5, #0xf - bls _020D90E4 -_020D90D4: - add sp, sp, #0x8 - mov r0, #0x6 - ldmia sp!, {r4-r6,lr} - bx lr -_020D90E4: - ldr r0, _020D9164 ; =0x00000182 - mov r1, #0x2 - add r0, r2, r0 - bl DC_InvalidateRange - ldr r0, [r4, #0x4] - mov r1, #0x1 - add r0, r0, #0x100 - ldrh r2, [r0, #0x82] - mov r0, r1, lsl r5 - ands r0, r2, r0 - bne _020D9134 - add sp, sp, #0x8 - mov r0, #0x7 - ldmia sp!, {r4-r6,lr} - bx lr -_020D9120: - cmp r5, #0x0 - addne sp, sp, #0x8 - movne r0, #0x6 - ldmneia sp!, {r4-r6,lr} - bxne lr -_020D9134: - mov r1, r6 - mov r0, #0xd - bl WMi_SetCallbackTable - mov r1, #0x1 - mov r2, r1, lsl r5 - mov r0, #0xd - bl WMi_SendCommand -_020D9150: ; 0x020D9150 - cmp r0, #0x0 - moveq r0, #0x2 - add sp, sp, #0x8 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020D9164: .word 0x00000182 - - arm_func_start WM_StartConnectEx -WM_StartConnectEx: ; 0x020D9168 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x2c - mov r7, r0 - mov r6, r1 - mov r0, #0x1 - mov r1, #0x2 - mov r5, r2 - mov r4, r3 - bl WMi_CheckStateEx -_020D918C: ; 0x020D918C - cmp r0, #0x0 - addne sp, sp, #0x2c - ldmneia sp!, {r4-r7,lr} - bxne lr - cmp r6, #0x0 - addeq sp, sp, #0x2c - moveq r0, #0x6 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - ldrh r1, [r6, #0x0] - mov r0, r6 - mov r1, r1, lsl #0x1 - bl DC_StoreRange - bl WMi_GetSystemWork - add r1, r0, #0x100 - mov r2, #0x0 - strh r2, [r1, #0x50] - str r2, [r0, #0x14c] - mov r1, r7 - mov r0, #0xc - bl WMi_SetCallbackTable - mov r0, #0xc - strh r0, [sp, #0x0] - str r6, [sp, #0x4] - cmp r5, #0x0 - beq _020D9208 - add r1, sp, #0x8 - mov r0, r5 - mov r2, #0x18 - bl MI_CpuCopy8 - b _020D9218 -_020D9208: - add r0, sp, #0x8 - mov r1, #0x0 - mov r2, #0x18 - bl MI_CpuFill8 -_020D9218: - ldrh r2, [sp, #0x40] - add r0, sp, #0x0 - mov r1, #0x28 - str r4, [sp, #0x20] - strh r2, [sp, #0x26] - bl WMi_SendCommandDirect -_020D9230: ; 0x020D9230 - cmp r0, #0x0 - moveq r0, #0x2 - add sp, sp, #0x2c - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start WM_EndScan -WM_EndScan: ; 0x020D9244 - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, #0x1 - mov r1, #0x5 - bl WMi_CheckStateEx -_020D9258: ; 0x020D9258 - cmp r0, #0x0 - ldmneia sp!, {r4,lr} - bxne lr - mov r1, r4 - mov r0, #0xb - bl WMi_SetCallbackTable - mov r0, #0xb - mov r1, #0x0 - bl WMi_SendCommand -_020D927C: ; 0x020D927C - cmp r0, #0x0 - moveq r0, #0x2 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start WM_StartScanEx -WM_StartScanEx: ; 0x020D928C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x3c - mov r5, r0 - mov r0, #0x3 - mov r4, r1 - mov r2, r0 - mov r1, #0x2 - mov r3, #0x5 - bl WMi_CheckStateEx -_020D92B0: ; 0x020D92B0 - cmp r0, #0x0 - addne sp, sp, #0x3c - ldmneia sp!, {r4-r5,lr} - bxne lr - cmp r4, #0x0 - addeq sp, sp, #0x3c - moveq r0, #0x6 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldr r0, [r4, #0x0] - cmp r0, #0x0 - addeq sp, sp, #0x3c - moveq r0, #0x6 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldrh r0, [r4, #0x4] - cmp r0, #0x400 - addhi sp, sp, #0x3c - movhi r0, #0x6 - ldmhiia sp!, {r4-r5,lr} - bxhi lr - ldrh r0, [r4, #0x12] - cmp r0, #0x20 - addhi sp, sp, #0x3c - movhi r0, #0x6 - ldmhiia sp!, {r4-r5,lr} - bxhi lr - ldrh r1, [r4, #0x10] - cmp r1, #0x0 - beq _020D934C - cmp r1, #0x1 - beq _020D934C - cmp r1, #0x2 - beq _020D934C - cmp r1, #0x3 - addne sp, sp, #0x3c - movne r0, #0x6 - ldmneia sp!, {r4-r5,lr} - bxne lr -_020D934C: - ldr r0, _020D9408 ; =0x0000FFFE - add r0, r1, r0 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r0, #0x1 - bhi _020D937C - ldrh r0, [r4, #0x34] - cmp r0, #0x20 - addhi sp, sp, #0x3c - movhi r0, #0x6 - ldmhiia sp!, {r4-r5,lr} - bxhi lr -_020D937C: - mov r1, r5 - mov r0, #0x26 - bl WMi_SetCallbackTable - mov r0, #0x26 - strh r0, [sp, #0x0] - ldrh r2, [r4, #0x6] - add r1, sp, #0xc - add r0, r4, #0xa - strh r2, [sp, #0x2] - ldr r3, [r4, #0x0] - mov r2, #0x6 - str r3, [sp, #0x4] - ldrh r3, [r4, #0x4] - strh r3, [sp, #0x8] - ldrh r3, [r4, #0x8] - strh r3, [sp, #0xa] - bl MI_CpuCopy8 - ldrh r2, [r4, #0x10] - add r1, sp, #0x16 - add r0, r4, #0x14 - strh r2, [sp, #0x12] - ldrh r3, [r4, #0x34] - mov r2, #0x20 - strh r3, [sp, #0x36] - ldrh r3, [r4, #0x12] - strh r3, [sp, #0x14] - bl MI_CpuCopy8 -_020D93E8: ; 0x020D93E8 - add r0, sp, #0x0 - mov r1, #0x3c - bl WMi_SendCommandDirect -_020D93F4: ; 0x020D93F4 - cmp r0, #0x0 - moveq r0, #0x2 - add sp, sp, #0x3c - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D9408: .word 0x0000FFFE - - arm_func_start WM_StartScan -WM_StartScan: ; 0x020D940C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x14 - mov r5, r0 - mov r0, #0x3 - mov r4, r1 - mov r2, r0 - mov r1, #0x2 - mov r3, #0x5 - bl WMi_CheckStateEx -_020D9430: ; 0x020D9430 - cmp r0, #0x0 - addne sp, sp, #0x14 - ldmneia sp!, {r4-r5,lr} - bxne lr - cmp r4, #0x0 - addeq sp, sp, #0x14 - moveq r0, #0x6 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldr r0, [r4, #0x0] - cmp r0, #0x0 - addeq sp, sp, #0x14 - moveq r0, #0x6 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldrh r0, [r4, #0x4] - cmp r0, #0x1 - blo _020D9480 - cmp r0, #0xe - bls _020D9490 -_020D9480: - add sp, sp, #0x14 - mov r0, #0x6 - ldmia sp!, {r4-r5,lr} - bx lr -_020D9490: - mov r1, r5 - mov r0, #0xa - bl WMi_SetCallbackTable - mov r0, #0xa - strh r0, [sp, #0x0] - ldrh r2, [r4, #0x4] - add r0, sp, #0x0 - mov r1, #0x10 - strh r2, [sp, #0x2] - ldr r2, [r4, #0x0] - str r2, [sp, #0x4] - ldrh r2, [r4, #0x6] - strh r2, [sp, #0x8] - ldrb r2, [r4, #0x8] - strb r2, [sp, #0xa] - ldrb r2, [r4, #0x9] - strb r2, [sp, #0xb] - ldrb r2, [r4, #0xa] - strb r2, [sp, #0xc] - ldrb r2, [r4, #0xb] - strb r2, [sp, #0xd] - ldrb r2, [r4, #0xc] - strb r2, [sp, #0xe] - ldrb r2, [r4, #0xd] - strb r2, [sp, #0xf] - bl WMi_SendCommandDirect -_020D94F8: ; 0x020D94F8 - cmp r0, #0x0 - moveq r0, #0x2 - add sp, sp, #0x14 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start WM_EndParent -WM_EndParent: ; 0x020D950C - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, #0x1 - mov r1, #0x7 - bl WMi_CheckStateEx -_020D9520: ; 0x020D9520 - cmp r0, #0x0 - ldmneia sp!, {r4,lr} - bxne lr - mov r1, r4 - mov r0, #0x9 - bl WMi_SetCallbackTable - mov r0, #0x9 - mov r1, #0x0 - bl WMi_SendCommand -_020D9544: ; 0x020D9544 - cmp r0, #0x0 - moveq r0, #0x2 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start WM_StartParent -WM_StartParent: ; 0x020D9554 - ldr ip, _020D9560 ; =FUN_020D9564 - mov r1, #0x1 - bx r12 - .balign 4 -_020D9560: .word FUN_020D9564 - - arm_func_start FUN_020D9564 -FUN_020D9564: ; 0x020D9564 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r1 - mov r0, #0x1 - mov r1, #0x2 - bl WMi_CheckStateEx -_020D9580: ; 0x020D9580 - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - bl WMi_GetSystemWork - add r1, r0, #0x100 - mov r2, #0x0 - strh r2, [r1, #0x50] - str r2, [r0, #0x14c] - mov r1, r5 - mov r0, #0x8 - bl WMi_SetCallbackTable - mov r2, r4 - mov r0, #0x8 - mov r1, #0x1 - bl WMi_SendCommand -_020D95C0: ; 0x020D95C0 - cmp r0, #0x0 - moveq r0, #0x2 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start WmCheckParentParameter -WmCheckParentParameter: ; 0x020D95D4 - ldrh r1, [r0, #0x4] - cmp r1, #0x70 - movhi r0, #0x0 - bxhi lr - ldrh r1, [r0, #0x18] - cmp r1, #0xa - blo _020D95F8 - cmp r1, #0x3e8 - bls _020D9600 -_020D95F8: - mov r0, #0x0 - bx lr -_020D9600: - ldrh r0, [r0, #0x32] - cmp r0, #0x1 - blo _020D9614 - cmp r0, #0xe - bls _020D961C -_020D9614: - mov r0, #0x0 - bx lr -_020D961C: - mov r0, #0x1 - bx lr - - arm_func_start WM_SetParentParameter -WM_SetParentParameter: ; 0x020D9624 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r1 - mov r0, #0x1 - mov r1, #0x2 - bl WMi_CheckStateEx -_020D9640: ; 0x020D9640 - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - cmp r4, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x6 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldrh r0, [r4, #0x4] - cmp r0, #0x0 - beq _020D9688 - ldr r0, [r4, #0x0] - cmp r0, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x6 - ldmeqia sp!, {r4-r5,lr} - bxeq lr -_020D9688: - ldrh r1, [r4, #0x14] - ldrh r0, [r4, #0x34] - cmp r1, #0x0 - movne r2, #0x2a - moveq r2, #0x0 - add r0, r0, r2 - cmp r0, #0x200 - bgt _020D96C4 - ldrh r0, [r4, #0x36] - cmp r1, #0x0 - movne r1, #0x6 - moveq r1, #0x0 - add r0, r0, r1 - cmp r0, #0x200 - ble _020D96D4 -_020D96C4: - add sp, sp, #0x4 - mov r0, #0x6 - ldmia sp!, {r4-r5,lr} - bx lr -_020D96D4: - mov r0, r4 - bl WmCheckParentParameter - mov r1, r5 - mov r0, #0x7 - bl WMi_SetCallbackTable - mov r0, r4 - mov r1, #0x40 - bl DC_StoreRange - ldrh r1, [r4, #0x4] - cmp r1, #0x0 - beq _020D9708 - ldr r0, [r4, #0x0] - bl DC_StoreRange -_020D9708: - mov r2, r4 - mov r0, #0x7 - mov r1, #0x1 - bl WMi_SendCommand -_020D9718: ; 0x020D9718 - cmp r0, #0x0 - moveq r0, #0x2 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start WM_End -WM_End: ; 0x020D972C - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, #0x1 - mov r1, #0x2 - bl WMi_CheckStateEx -_020D9740: ; 0x020D9740 - cmp r0, #0x0 - ldmneia sp!, {r4,lr} - bxne lr - mov r1, r4 - mov r0, #0x2 - bl WMi_SetCallbackTable - mov r0, #0x2 - mov r1, #0x0 - bl WMi_SendCommand -_020D9764: ; 0x020D9764 - cmp r0, #0x0 - moveq r0, #0x2 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start WM_Reset -WM_Reset: ; 0x020D9774 - stmdb sp!, {r4,lr} - mov r4, r0 - bl WMi_CheckIdle -_020D9780: ; 0x020D9780 - cmp r0, #0x0 - ldmneia sp!, {r4,lr} - bxne lr - mov r1, r4 - mov r0, #0x1 - bl WMi_SetCallbackTable - mov r0, #0x1 - mov r1, #0x0 - bl WMi_SendCommand -_020D97A4: ; 0x020D97A4 - cmp r0, #0x0 - moveq r0, #0x2 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start WM_Initialize -WM_Initialize: ; 0x020D97B4 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - mov r4, r1 - mov r1, r2 - bl WM_Init -_020D97C8: ; 0x020D97C8 - cmp r0, #0x0 - addne sp, sp, #0x8 - ldmneia sp!, {r4,lr} - bxne lr - mov r1, r4 - mov r0, #0x0 - bl WMi_SetCallbackTable - bl WMi_GetSystemWork - mov r3, r0 - ldr r1, [r3, #0x10] - mov r0, #0x0 - str r1, [sp, #0x0] - ldr r2, [r3, #0x0] - ldr r3, [r3, #0x4] - mov r1, #0x3 - bl WMi_SendCommand -_020D9808: ; 0x020D9808 - cmp r0, #0x0 - moveq r0, #0x2 - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start WM_PowerOff -WM_PowerOff: ; 0x020D981C - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, #0x1 - mov r1, #0x2 - bl WMi_CheckStateEx -_020D9830: ; 0x020D9830 - cmp r0, #0x0 - ldmneia sp!, {r4,lr} - bxne lr - mov r1, r4 - mov r0, #0x6 - bl WMi_SetCallbackTable - mov r0, #0x6 - mov r1, #0x0 - bl WMi_SendCommand -_020D9854: ; 0x020D9854 - cmp r0, #0x0 - moveq r0, #0x2 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start WM_PowerOn -WM_PowerOn: ; 0x020D9864 - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, #0x1 - mov r1, r0 - bl WMi_CheckStateEx -_020D9878: ; 0x020D9878 - cmp r0, #0x0 - ldmneia sp!, {r4,lr} - bxne lr - mov r1, r4 - mov r0, #0x5 - bl WMi_SetCallbackTable - mov r0, #0x5 - mov r1, #0x0 - bl WMi_SendCommand -_020D989C: ; 0x020D989C - cmp r0, #0x0 - moveq r0, #0x2 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start WM_Disable -WM_Disable: ; 0x020D98AC - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, #0x1 - mov r1, r0 - bl WMi_CheckStateEx -_020D98C0: ; 0x020D98C0 - cmp r0, #0x0 - ldmneia sp!, {r4,lr} - bxne lr - mov r1, r4 - mov r0, #0x4 - bl WMi_SetCallbackTable - mov r0, #0x4 - mov r1, #0x0 - bl WMi_SendCommand -_020D98E4: ; 0x020D98E4 - cmp r0, #0x0 - moveq r0, #0x2 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start WM_Enable -WM_Enable: ; 0x020D98F4 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - mov r4, r0 - mov r0, #0x1 - mov r1, #0x0 - bl WMi_CheckStateEx -_020D990C: ; 0x020D990C - cmp r0, #0x0 - addne sp, sp, #0x8 - ldmneia sp!, {r4,lr} - bxne lr - mov r1, r4 - mov r0, #0x3 - bl WMi_SetCallbackTable - bl WMi_GetSystemWork - mov r3, r0 - ldr r1, [r3, #0x10] - mov r0, #0x3 - str r1, [sp, #0x0] - ldr r2, [r3, #0x0] - ldr r3, [r3, #0x4] - mov r1, r0 - bl WMi_SendCommand -_020D994C: ; 0x020D994C - cmp r0, #0x0 - moveq r0, #0x2 - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start WM_EndMP -WM_EndMP: ; 0x020D9960 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl WMi_GetSystemWork - mov r4, r0 - mov r0, #0x2 - mov r1, #0x9 - mov r2, #0xa - bl WMi_CheckStateEx -_020D9984: ; 0x020D9984 - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - ldr r0, [r4, #0x4] - mov r1, #0x4 - add r0, r0, #0xc - bl DC_InvalidateRange - ldr r0, [r4, #0x4] - ldr r0, [r0, #0xc] - cmp r0, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x3 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - mov r1, r5 - mov r0, #0x10 - bl WMi_SetCallbackTable - mov r0, #0x10 - mov r1, #0x0 - bl WMi_SendCommand -_020D99D8: ; 0x020D99D8 - cmp r0, #0x0 - moveq r0, #0x2 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start WM_SetMPDataToPortEx -WM_SetMPDataToPortEx: ; 0x020D99EC - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x14 - mov r9, r0 - mov r8, r1 - mov r7, r2 - mov r6, r3 - mov r5, #0x1 - bl WMi_GetSystemWork - ldr r4, [r0, #0x4] - mov r0, #0x2 - mov r1, #0x9 - mov r2, #0xa - bl WMi_CheckStateEx -_020D9A20: ; 0x020D9A20 - cmp r0, #0x0 - addne sp, sp, #0x14 - ldmneia sp!, {r4-r9,lr} - bxne lr - add r0, r4, #0x3c - mov r1, #0x2 - bl DC_InvalidateRange - add r0, r4, #0x188 - mov r1, #0x2 - bl DC_InvalidateRange - add r0, r4, #0x100 - ldrh r0, [r0, #0x88] - cmp r0, #0x0 - bne _020D9A7C - ldr r0, _020D9B44 ; =0x00000182 - mov r1, #0x2 - add r0, r4, r0 - bl DC_InvalidateRange - add r2, r4, #0x100 - add r0, r4, #0x86 - mov r1, #0x2 - ldrh r5, [r2, #0x82] - bl DC_InvalidateRange -_020D9A7C: - cmp r7, #0x0 - addeq sp, sp, #0x14 - moveq r0, #0x6 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - cmp r5, #0x0 - addeq sp, sp, #0x14 - moveq r0, #0x7 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - add r0, r4, #0x7c - mov r1, #0x2 - bl DC_InvalidateRange - ldr r0, [r4, #0x7c] - cmp r7, r0 - addeq sp, sp, #0x14 - moveq r0, #0x6 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - cmp r6, #0x200 - addhi sp, sp, #0x14 - movhi r0, #0x6 - ldmhiia sp!, {r4-r9,lr} - bxhi lr - cmp r6, #0x0 - addeq sp, sp, #0x14 - moveq r0, #0x6 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - mov r0, r7 - mov r1, r6 - bl DC_StoreRange - ldrh r2, [sp, #0x30] - ldrh r1, [sp, #0x34] - ldrh r0, [sp, #0x38] - str r2, [sp, #0x0] - str r1, [sp, #0x4] - str r0, [sp, #0x8] - str r9, [sp, #0xc] - mov r2, r7 - mov r3, r6 - mov r0, #0xf - mov r1, #0x7 - str r8, [sp, #0x10] - bl WMi_SendCommand -_020D9B30: ; 0x020D9B30 - cmp r0, #0x0 - moveq r0, #0x2 - add sp, sp, #0x14 - ldmia sp!, {r4-r9,lr} - bx lr - .balign 4 -_020D9B44: .word 0x00000182 - - arm_func_start WM_StartMP -WM_StartMP: ; 0x020D9B48 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x24 - mov r6, r1 - mov r7, r0 - mov r5, r2 - add r1, sp, #0x8 - mov r0, #0x0 - mov r2, #0x1c - mov r4, r3 - bl MIi_CpuClear32 - ldrh r12, [sp, #0x3c] - mov r0, #0x3 - str r0, [sp, #0x8] - ldrh lr, [sp, #0x38] - strh r12, [sp, #0xc] - strh r12, [sp, #0xe] - mov r0, r7 - mov r1, r6 - mov r2, r5 - mov r3, r4 - add r12, sp, #0x8 - str lr, [sp, #0x0] - str r12, [sp, #0x4] - bl WMi_StartMP - add sp, sp, #0x24 - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start WM_StartMPEx -WM_StartMPEx: ; 0x020D9BB4 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x28 - mov r6, r1 - mov r7, r0 - mov r5, r2 - add r1, sp, #0x8 - mov r0, #0x0 - mov r2, #0x1c - mov r4, r3 - bl MIi_CpuClear32 - ldrh lr, [sp, #0x44] - ldr r1, [sp, #0x58] - ldrh r12, [sp, #0x48] - ldr r0, [sp, #0x54] - ldr r8, _020D9C54 ; =0x00001E03 - cmp r0, #0x0 - ldr r3, [sp, #0x4c] - ldr r2, [sp, #0x50] - strb r1, [sp, #0x22] - strh r12, [sp, #0x1e] - strb r3, [sp, #0x20] - strb r2, [sp, #0x21] - ldrh r1, [sp, #0x40] - str r8, [sp, #0x8] - orrne r0, r8, #0x4 - strne r0, [sp, #0x8] - strh lr, [sp, #0xc] - strh lr, [sp, #0xe] - strneh lr, [sp, #0x10] - str r1, [sp, #0x0] - add r12, sp, #0x8 - mov r0, r7 - mov r1, r6 - mov r2, r5 - mov r3, r4 - str r12, [sp, #0x4] - bl WMi_StartMP - add sp, sp, #0x28 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020D9C54: .word 0x00001E03 - - arm_func_start WMi_StartMP -WMi_StartMP: ; 0x020D9C58 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x34 - mov r9, r0 - mov r8, r1 - mov r7, r2 - mov r6, r3 - bl WMi_GetSystemWork - ldr r5, [r0, #0x4] - mov r0, #0x2 - mov r1, #0x7 - mov r2, #0x8 - bl WMi_CheckStateEx -_020D9C88: ; 0x020D9C88 - cmp r0, #0x0 - addne sp, sp, #0x34 - ldmneia sp!, {r4-r9,lr} - bxne lr - add r0, r5, #0x188 - mov r1, #0x2 - bl DC_InvalidateRange - add r0, r5, #0xc6 - mov r1, #0x2 - bl DC_InvalidateRange - add r0, r5, #0x100 - ldrh r0, [r0, #0x88] - cmp r0, #0x0 - beq _020D9CD8 - ldrh r0, [r5, #0xc6] - cmp r0, #0x1 - addne sp, sp, #0x34 - movne r0, #0x3 - ldmneia sp!, {r4-r9,lr} - bxne lr -_020D9CD8: - add r0, r5, #0xc - mov r1, #0x4 - bl DC_InvalidateRange - ldr r0, [r5, #0xc] - cmp r0, #0x1 - addeq sp, sp, #0x34 - moveq r0, #0x3 - ldmeqia sp!, {r4-r9,lr} - bxeq lr - ands r0, r7, #0x3f - addne sp, sp, #0x34 - movne r0, #0x6 - ldmneia sp!, {r4-r9,lr} - bxne lr - ldrh r4, [sp, #0x50] - ands r0, r4, #0x1f - addne sp, sp, #0x34 - movne r0, #0x6 - ldmneia sp!, {r4-r9,lr} - bxne lr - add r0, r5, #0x9c - mov r1, #0x2 - bl DC_InvalidateRange - ldrh r0, [r5, #0x9c] - cmp r0, #0x0 - bne _020D9D70 - bl WM_GetMPReceiveBufferSize -_020D9D44: ; 0x020D9D44 - cmp r7, r0 - addlt sp, sp, #0x34 - movlt r0, #0x6 - ldmltia sp!, {r4-r9,lr} - bxlt lr - bl WM_GetMPSendBufferSize -_020D9D5C: ; 0x020D9D5C - cmp r4, r0 - addlt sp, sp, #0x34 - movlt r0, #0x6 - ldmltia sp!, {r4-r9,lr} - bxlt lr -_020D9D70: - mov r1, r9 - mov r0, #0xe - bl WMi_SetCallbackTable - add r1, sp, #0x0 - mov r0, #0x0 - mov r2, #0x30 - bl MIi_CpuClear32 - ldrh r3, [sp, #0x50] - mov r4, r7, lsr #0x1 - mov r5, #0xe - ldr r0, [sp, #0x54] - add r1, sp, #0x14 - mov r2, #0x1c - strh r5, [sp, #0x0] - str r8, [sp, #0x4] - str r4, [sp, #0x8] - str r6, [sp, #0xc] - str r3, [sp, #0x10] - bl MIi_CpuCopy32 -_020D9DBC: ; 0x020D9DBC - add r0, sp, #0x0 - mov r1, #0x30 - bl WMi_SendCommandDirect -_020D9DC8: ; 0x020D9DC8 - cmp r0, #0x0 - moveq r0, #0x2 - add sp, sp, #0x34 - ldmia sp!, {r4-r9,lr} - bx lr - - arm_func_start WM_EndDCF -WM_EndDCF: ; 0x020D9DDC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl WMi_GetSystemWork - mov r4, r0 - mov r0, #0x1 - mov r1, #0xb - bl WMi_CheckStateEx -_020D9DFC: ; 0x020D9DFC - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - ldr r0, [r4, #0x4] - mov r1, #0x4 - add r0, r0, #0x10 - bl DC_InvalidateRange - ldr r0, [r4, #0x4] - ldr r0, [r0, #0x10] - cmp r0, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x3 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - mov r1, r5 - mov r0, #0x13 - bl WMi_SetCallbackTable - mov r0, #0x13 - mov r1, #0x0 - bl WMi_SendCommand -_020D9E50: ; 0x020D9E50 - cmp r0, #0x0 - moveq r0, #0x2 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start WM_SetDCFData -WM_SetDCFData: ; 0x020D9E64 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x10 - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl WMi_GetSystemWork - mov r8, r0 - mov r0, #0x1 - mov r1, #0xb - bl WMi_CheckStateEx -_020D9E90: ; 0x020D9E90 - cmp r0, #0x0 - addne sp, sp, #0x10 - ldmneia sp!, {r4-r8,lr} - bxne lr - ldr r0, [r8, #0x4] - mov r1, #0x4 - add r0, r0, #0x10 - bl DC_InvalidateRange - ldr r0, [r8, #0x4] - ldr r0, [r0, #0x10] - cmp r0, #0x0 - addeq sp, sp, #0x10 - moveq r0, #0x3 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - ldr r0, _020D9F3C ; =0x000005E4 - cmp r4, r0 - addhi sp, sp, #0x10 - movhi r0, #0x6 - ldmhiia sp!, {r4-r8,lr} - bxhi lr - mov r0, r5 - mov r1, r4 - bl DC_StoreRange - mov r1, r7 - mov r0, #0x12 - bl WMi_SetCallbackTable - add r1, sp, #0x8 - mov r0, r6 - mov r2, #0x6 - bl MI_CpuCopy8 - str r5, [sp, #0x0] - str r4, [sp, #0x4] - ldr r2, [sp, #0x8] - ldr r3, [sp, #0xc] - mov r0, #0x12 - mov r1, #0x4 - bl WMi_SendCommand -_020D9F28: ; 0x020D9F28 - cmp r0, #0x0 - moveq r0, #0x2 - add sp, sp, #0x10 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020D9F3C: .word 0x000005E4 - - arm_func_start WM_StartDCF -WM_StartDCF: ; 0x020D9F40 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - bl WMi_GetSystemWork - mov r4, r0 - mov r0, #0x1 - mov r1, #0x8 - bl WMi_CheckStateEx -_020D9F68: ; 0x020D9F68 - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r7,lr} - bxne lr - ldr r0, [r4, #0x4] - mov r1, #0x4 - add r0, r0, #0x10 - bl DC_InvalidateRange - ldr r0, [r4, #0x4] - ldr r0, [r0, #0x10] - cmp r0, #0x1 - addeq sp, sp, #0x4 - moveq r0, #0x3 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - cmp r5, #0x10 - addcc sp, sp, #0x4 - movcc r0, #0x6 - ldmccia sp!, {r4-r7,lr} - bxcc lr - cmp r6, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x6 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - mov r0, r6 - mov r1, r5 - bl DC_StoreRange - mov r1, r7 - mov r0, #0x11 - bl WMi_SetCallbackTable - mov r2, r6 - mov r3, r5 - mov r0, #0x11 - mov r1, #0x2 - bl WMi_SendCommand -_020D9FF8: ; 0x020D9FF8 - cmp r0, #0x0 - moveq r0, #0x2 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start WmGetSharedDataAddress -WmGetSharedDataAddress: ; 0x020DA00C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r12, #0x1 - mov r3, r12, lsl r3 - sub r3, r3, #0x1 - mov r5, r0 - and r0, r1, r3 - mov r4, r2 - bl MATH_CountPopulation - add r1, r5, #0x800 - ldrh r1, [r1, #0x10] - mla r0, r1, r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start WM_GetSharedDataAddress -WM_GetSharedDataAddress: ; 0x020DA048 - stmdb sp!, {r4,lr} - mov r4, r1 - ldrh lr, [r4, #0x2] - cmp r0, #0x0 - mov r3, r2 - mov r1, #0x1 - mov r12, r1, lsl r3 - ldrh r1, [r4, #0x0] - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - cmp r4, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - ands r2, r1, r12 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - ands r2, lr, r12 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - add r2, r4, #0x4 - bl WmGetSharedDataAddress - ldmia sp!, {r4,lr} - bx lr - - arm_func_start WmDataSharingSendDataSet -WmDataSharingSendDataSet: - stmdb sp!, {r4-r10,lr} - sub sp, sp, #0x10 - mov r10, r0 - mov r9, r1 - bl OS_DisableInterrupts - add r1, r10, #0x800 - ldrh r1, [r1, #0x8] - mov r7, r0 - mov r1, r1, lsl #0x9 - ldrh r1, [r10, r1] - cmp r1, #0x0 - bne _020DA210 - bl WMi_GetMPReadyAIDs - add r1, r10, #0x800 - ldrh r6, [r1, #0x8] - mov r5, r0 - ldrh r1, [r1, #0x18] - add r0, r6, #0x1 - and r0, r0, #0x3 - mov r0, r0, lsl #0x10 - mov r4, r0, lsr #0x10 - cmp r1, #0x1 - addeq r0, r4, #0x1 - andeq r0, r0, #0x3 - moveq r0, r0, lsl #0x10 - moveq r8, r0, lsr #0x10 - movne r8, r4 - add r1, r10, r8, lsl #0x9 - mov r0, #0x0 - mov r2, #0x200 - bl MIi_CpuClear16 - add r0, r10, #0x800 - ldrh r3, [r0, #0xe] - orr r2, r5, #0x1 - mov r1, r8, lsl #0x9 - and r2, r3, r2 - strh r2, [r10, r1] - strh r4, [r0, #0x8] - ldrh r0, [r0, #0xe] - mov r1, r6, lsl #0x9 - cmp r9, #0x1 - strh r0, [r10, r1] - ldreqh r0, [r10, r1] - biceq r0, r0, #0x1 - streqh r0, [r10, r1] - mov r0, r7 - bl OS_RestoreInterrupts - add r3, r10, #0x800 - ldrh r1, [r3, #0xe] - mov r4, #0x1 - ldr r0, _020DA220 ; =WmDataSharingSetDataCallback - and r1, r1, r5 - mov r1, r1, lsl #0x10 - mov r1, r1, lsr #0x10 - str r1, [sp, #0x0] - ldrh r5, [r3, #0x16] - mov r1, r10 - add r2, r10, r6, lsl #0x9 - str r5, [sp, #0x4] - str r4, [sp, #0x8] - ldrh r3, [r3, #0x14] - bl WM_SetMPDataToPortEx - cmp r0, #0x7 - bne _020DA1E4 - add r0, r10, r6, lsl #0x1 - ldr r1, _020DA224 ; =0x0000FFFF - add r0, r0, #0x800 - strh r1, [r0, #0x0] - add r0, r10, #0x800 - ldrh r1, [r0, #0xa] - add sp, sp, #0x10 - add r1, r1, #0x1 - and r1, r1, #0x3 - strh r1, [r0, #0xa] - ldmia sp!, {r4-r10,lr} - bx lr -_020DA1E4: - cmp r0, #0x0 - addeq sp, sp, #0x10 - ldmeqia sp!, {r4-r10,lr} - bxeq lr - cmp r0, #0x2 - addne r0, r10, #0x800 - movne r1, #0x5 - strneh r1, [r0, #0x1c] - add sp, sp, #0x10 - ldmia sp!, {r4-r10,lr} - bx lr -_020DA210: - bl OS_RestoreInterrupts - add sp, sp, #0x10 - ldmia sp!, {r4-r10,lr} - bx lr - .balign 4 -_020DA220: .word WmDataSharingSetDataCallback -_020DA224: .word 0x0000FFFF - - arm_func_start WmDataSharingReceiveData -WmDataSharingReceiveData: ; 0x020DA228 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r3, r1 - mov r0, #0x1 - mov r0, r0, lsl r3 - add r12, r7, #0x800 - mov r0, r0, lsl #0x10 - ldrh r1, [r12, #0xe] - mov r5, r0, lsr #0x10 - mov r6, r2 - ands r0, r1, r5 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - ldrh r4, [r12, #0x8] - mov r0, r4, lsl #0x9 - ldrh r0, [r7, r0] - ands r0, r5, r0 - bne _020DA2B4 - ldrh r0, [r12, #0x18] - cmp r0, #0x1 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r7,lr} - bxne lr - add r0, r4, #0x1 - and r0, r0, #0x3 - mov r0, r0, lsl #0x10 - mov r4, r0, lsr #0x10 - mov r0, r4, lsl #0x9 - ldrh r0, [r7, r0] - ands r0, r5, r0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,lr} - bxeq lr -_020DA2B4: - add r2, r7, r4, lsl #0x9 - mov r0, r7 - add r2, r2, #0x4 - bl WmGetSharedDataAddress - mov r1, r0 - cmp r6, #0x0 - beq _020DA2E4 - add r0, r7, #0x800 - ldrh r2, [r0, #0x10] - mov r0, r6 - bl MIi_CpuCopy16 - b _020DA2F4 -_020DA2E4: - add r0, r7, #0x800 - ldrh r2, [r0, #0x10] - mov r0, #0x0 - bl MIi_CpuClear16 -_020DA2F4: - bl OS_DisableInterrupts - mov r4, r4, lsl #0x9 - ldrh r3, [r7, r4] - mvn r1, r5 - add r2, r7, #0x2 - and r1, r3, r1 - strh r1, [r7, r4] - ldrh r1, [r2, r4] - orr r1, r1, r5 - strh r1, [r2, r4] - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start WmDataSharingReceiveCallback_Child -WmDataSharingReceiveCallback_Child: ; 0x020DA32C - stmdb sp!, {r4-r8,lr} - mov r8, r0 - ldr r7, [r8, #0x1c] - cmp r7, #0x0 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - ldrh r0, [r8, #0x2] - cmp r0, #0x0 - bne _020DA458 - ldrh r0, [r8, #0x4] - cmp r0, #0x15 - bgt _020DA394 - cmp r0, #0x15 - bge _020DA3C4 - cmp r0, #0x9 - ldmgtia sp!, {r4-r8,lr} - bxgt lr - cmp r0, #0x7 - ldmltia sp!, {r4-r8,lr} - bxlt lr - cmp r0, #0x7 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - cmp r0, #0x9 - ldmia sp!, {r4-r8,lr} - bx lr -_020DA394: - cmp r0, #0x1a - ldmgtia sp!, {r4-r8,lr} - bxgt lr - cmp r0, #0x19 - ldmltia sp!, {r4-r8,lr} - bxlt lr - cmp r0, #0x19 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - cmp r0, #0x1a - ldmia sp!, {r4-r8,lr} - bx lr -_020DA3C4: - ldr r4, [r8, #0xc] - ldrh r6, [r8, #0x10] - ldrh r5, [r4, #0x0] - bl WM_GetAID - add r1, r7, #0x800 - ldrh r1, [r1, #0x14] - cmp r6, r1 - beq _020DA3EC - cmp r6, #0x200 - movhi r6, #0x200 -_020DA3EC: - cmp r6, #0x4 - ldmccia sp!, {r4-r8,lr} - bxcc lr - mov r1, #0x1 - mov r0, r1, lsl r0 - ands r0, r5, r0 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - add r0, r7, #0x800 - ldrh r1, [r0, #0x8] - mov r0, r4 - mov r2, r6 - add r1, r7, r1, lsl #0x9 - bl MIi_CpuCopy16 - add r1, r7, #0x800 - ldrh r0, [r1, #0x8] - ldrh r2, [r8, #0x1a] - add r0, r7, r0, lsl #0x1 - mov r2, r2, asr #0x1 - add r0, r0, #0x800 - strh r2, [r0, #0x0] - ldrh r0, [r1, #0x8] - add r0, r0, #0x1 - and r0, r0, #0x3 - strh r0, [r1, #0x8] - ldmia sp!, {r4-r8,lr} - bx lr -_020DA458: - add r0, r7, #0x800 - mov r1, #0x5 - strh r1, [r0, #0x1c] - ldmia sp!, {r4-r8,lr} - bx lr - - arm_func_start WmDataSharingReceiveCallback_Parent -WmDataSharingReceiveCallback_Parent: ; 0x020DA46C - stmdb sp!, {r4-r6,lr} - ldr r4, [r0, #0x1c] - cmp r4, #0x0 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - ldrh r1, [r0, #0x2] - cmp r1, #0x0 - bne _020DA5C4 - ldrh r1, [r0, #0x4] - cmp r1, #0x15 - bgt _020DA4D0 - cmp r1, #0x15 - bge _020DA504 - cmp r1, #0x9 - ldmgtia sp!, {r4-r6,lr} - bxgt lr - cmp r1, #0x7 - ldmltia sp!, {r4-r6,lr} - bxlt lr - cmp r1, #0x7 - beq _020DA528 - cmp r1, #0x9 - beq _020DA53C - ldmia sp!, {r4-r6,lr} - bx lr -_020DA4D0: - cmp r1, #0x1a - ldmgtia sp!, {r4-r6,lr} - bxgt lr - cmp r1, #0x19 - ldmltia sp!, {r4-r6,lr} - bxlt lr - cmp r1, #0x19 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - cmp r1, #0x1a - beq _020DA53C - ldmia sp!, {r4-r6,lr} - bx lr -_020DA504: - ldrh r1, [r0, #0x12] - ldr r2, [r0, #0xc] - mov r0, r4 - bl WmDataSharingReceiveData - mov r0, r4 - mov r1, #0x0 - bl WmDataSharingSendDataSet - ldmia sp!, {r4-r6,lr} - bx lr -_020DA528: - mov r0, r4 - mov r1, #0x0 - bl WmDataSharingSendDataSet - ldmia sp!, {r4-r6,lr} - bx lr -_020DA53C: - ldrh r5, [r0, #0x12] - mov r6, #0x1 - bl OS_DisableInterrupts - add r1, r4, #0x800 - ldrh lr, [r1, #0x8] - mvn r12, r6, lsl r5 - mov r3, lr, lsl #0x9 - ldrh r2, [r4, r3] - and r2, r2, r12 - strh r2, [r4, r3] - ldrh r1, [r1, #0x18] - cmp r1, #0x1 - bne _020DA58C - add r1, lr, #0x1 - and r1, r1, #0x3 - mov r1, r1, lsl #0x10 - mov r2, r1, lsr #0x7 - ldrh r1, [r4, r2] - and r1, r1, r12 - strh r1, [r4, r2] -_020DA58C: - bl OS_RestoreInterrupts - mov r0, r4 - mov r1, #0x0 - bl WmDataSharingSendDataSet - add r0, r4, #0x800 - ldrh r0, [r0, #0x18] - cmp r0, #0x1 - ldmneia sp!, {r4-r6,lr} - bxne lr - mov r0, r4 - mov r1, #0x0 - bl WmDataSharingSendDataSet - ldmia sp!, {r4-r6,lr} - bx lr -_020DA5C4: - add r0, r4, #0x800 - mov r1, #0x5 - strh r1, [r0, #0x1c] - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start WmDataSharingSetDataCallback -WmDataSharingSetDataCallback: ; 0x020DA5D8 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl WMi_GetSystemWork - ldrh r2, [r5, #0xa] - ldr r1, _020DA6E4 ; =WmDataSharingReceiveCallback_Parent - add r0, r0, r2, lsl #0x2 - ldr r2, [r0, #0xcc] - ldr r4, [r0, #0x10c] - cmp r2, r1 - beq _020DA618 - ldr r0, _020DA6E8 ; =WmDataSharingReceiveCallback_Child - cmp r2, r0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr -_020DA618: - cmp r4, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldr r0, [r5, #0x20] - cmp r4, r0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - bl WM_GetAID - ldrh r1, [r5, #0x2] - cmp r1, #0x0 - bne _020DA694 - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - add r1, r4, #0x800 - ldrh r0, [r1, #0xa] - ldrh r2, [r5, #0x1a] - add sp, sp, #0x4 - add r0, r4, r0, lsl #0x1 - mov r2, r2, asr #0x1 - add r0, r0, #0x800 - strh r2, [r0, #0x0] - ldrh r0, [r1, #0xa] - add r0, r0, #0x1 - and r0, r0, #0x3 - strh r0, [r1, #0xa] - ldmia sp!, {r4-r5,lr} - bx lr -_020DA694: - cmp r1, #0xa - bne _020DA6CC - cmp r0, #0x0 - addne r0, r4, #0x800 - ldrneh r1, [r0, #0xa] - add sp, sp, #0x4 - addne r1, r1, #0x3 - andne r1, r1, #0x3 - strneh r1, [r0, #0xa] - add r0, r4, #0x800 - mov r1, #0x4 - strh r1, [r0, #0x1c] - ldmia sp!, {r4-r5,lr} - bx lr -_020DA6CC: - add r0, r4, #0x800 - mov r1, #0x5 - strh r1, [r0, #0x1c] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DA6E4: .word WmDataSharingReceiveCallback_Parent -_020DA6E8: .word WmDataSharingReceiveCallback_Child - - arm_func_start WM_StepDataSharing -WM_StepDataSharing: ; 0x020DA6EC - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xc - mov r10, r0 - mov r9, r1 - mov r8, r2 - mov r0, #0x2 - mov r1, #0x9 - mov r2, #0xa - bl WMi_CheckStateEx -_020DA710: ; 0x020DA710 - cmp r0, #0x0 - addne sp, sp, #0xc - ldmneia sp!, {r4-r11,lr} - bxne lr - cmp r10, #0x0 - addeq sp, sp, #0xc - moveq r0, #0x6 - ldmeqia sp!, {r4-r11,lr} - bxeq lr - cmp r9, #0x0 - addeq sp, sp, #0xc - moveq r0, #0x6 - ldmeqia sp!, {r4-r11,lr} - bxeq lr - cmp r8, #0x0 - addeq sp, sp, #0xc - moveq r0, #0x6 - ldmeqia sp!, {r4-r11,lr} - bxeq lr - bl WM_GetAID - movs r4, r0 - bne _020DA770 - bl WMi_GetMPReadyAIDs - mov r7, r0 -_020DA770: - add r0, r10, #0x800 - ldrh r0, [r0, #0x1c] - cmp r0, #0x5 - addeq sp, sp, #0xc - moveq r0, #0x1 - ldmeqia sp!, {r4-r11,lr} - bxeq lr - cmp r0, #0x1 - beq _020DA7A8 - cmp r0, #0x4 - addne sp, sp, #0xc - movne r0, #0x3 - ldmneia sp!, {r4-r11,lr} - bxne lr -_020DA7A8: - cmp r4, #0x0 - mov r4, #0x5 - bne _020DA94C - mov r6, #0x0 - mov r11, r6 - cmp r0, #0x4 - bne _020DA870 - add r1, r10, #0x800 - mov r3, #0x1 - strh r3, [r1, #0x1c] - ldrh r5, [r1, #0xe] - ldrh r2, [r1, #0x8] - ldr r0, _020DAA64 ; =WmDataSharingSetDataCallback - and r5, r5, r7 - mov r5, r5, lsl #0x10 - mov r5, r5, lsr #0x10 - str r5, [sp, #0x0] - ldrh r5, [r1, #0x16] - add r2, r2, #0x3 - and r2, r2, #0x3 - str r5, [sp, #0x4] - str r3, [sp, #0x8] - mov r2, r2, lsl #0x10 - mov r5, r2, lsr #0x10 - ldrh r3, [r1, #0x14] - mov r1, r10 - add r2, r10, r5, lsl #0x9 - bl WM_SetMPDataToPortEx - cmp r0, #0x7 - bne _020DA848 - add r0, r10, r5, lsl #0x1 - ldr r1, _020DAA68 ; =0x0000FFFF - add r0, r0, #0x800 - strh r1, [r0, #0x0] - add r0, r10, #0x800 - ldrh r1, [r0, #0xa] - add r1, r1, #0x1 - and r1, r1, #0x3 - strh r1, [r0, #0xa] - b _020DA870 -_020DA848: - cmp r0, #0x0 - beq _020DA870 - cmp r0, #0x2 - addne r0, r10, #0x800 - movne r1, r4 - strneh r1, [r0, #0x1c] - addne sp, sp, #0xc - movne r0, #0x1 - ldmneia sp!, {r4-r11,lr} - bxne lr -_020DA870: - add r0, r10, #0x800 - ldrh r2, [r0, #0xc] - ldrh r1, [r0, #0xa] - cmp r2, r1 - beq _020DA908 - mov r4, r2, lsl #0x9 - ldrh r3, [r10, r4] - mov r1, r8 - mov r2, #0x200 - orr r3, r3, #0x1 - strh r3, [r10, r4] - ldrh r0, [r0, #0xc] - add r0, r10, r0, lsl #0x9 - bl MIi_CpuCopy16 - add r1, r10, #0x800 - ldrh r0, [r1, #0xc] - mov r6, #0x1 - mov r4, #0x0 - add r0, r10, r0, lsl #0x1 - add r0, r0, #0x800 - ldrh r0, [r0, #0x0] - strh r0, [r1, #0x1a] - ldrh r0, [r1, #0xc] - add r0, r0, #0x1 - and r0, r0, #0x3 - strh r0, [r1, #0xc] - ldrh r0, [r1, #0x18] - cmp r0, #0x0 - bne _020DA904 - cmp r7, #0x0 - beq _020DA904 - ldrh r0, [r1, #0x8] - mov r0, r0, lsl #0x9 - ldrh r0, [r10, r0] - cmp r0, #0x1 - moveq r11, r6 - beq _020DA908 -_020DA904: - mov r11, #0x0 -_020DA908: - mov r0, r10 - mov r1, #0x0 - bl WmDataSharingSendDataSet -_020DA914: ; 0x020DA914 - cmp r6, #0x0 - beq _020DAA54 - mov r0, r10 - mov r2, r9 - mov r1, #0x0 - bl WmDataSharingReceiveData - add r0, r10, #0x800 - ldrh r0, [r0, #0x18] - cmp r0, #0x0 - bne _020DAA54 - mov r0, r10 - mov r1, r11 - bl WmDataSharingSendDataSet - b _020DAA54 -_020DA94C: - cmp r0, #0x4 - mov r0, #0x0 - addeq r1, r10, #0x800 - moveq r0, #0x1 - streqh r0, [r1, #0x1c] - beq _020DA9D0 - add r1, r10, #0x800 - ldrh r2, [r1, #0xc] - ldrh r1, [r1, #0x8] - cmp r2, r1 - beq _020DA9D0 - mov r2, r2, lsl #0x9 - ldrh r1, [r10, r2] - ands r3, r1, #0x1 - orreq r1, r1, #0x1 - streqh r1, [r10, r2] - beq _020DA9D0 - mov r1, r8 - add r0, r10, r2 - mov r2, #0x200 - bl MIi_CpuCopy16 - add r2, r10, #0x800 - ldrh r1, [r2, #0xc] - mov r0, #0x1 - mov r4, #0x0 - add r1, r10, r1, lsl #0x1 - add r1, r1, #0x800 - ldrh r1, [r1, #0x0] - strh r1, [r2, #0x1a] - ldrh r1, [r2, #0xc] - add r1, r1, #0x1 - and r1, r1, #0x3 - strh r1, [r2, #0xc] -_020DA9D0: - cmp r0, #0x0 - beq _020DAA54 - add r0, r10, #0x800 - ldrh r1, [r0, #0xa] - ldrh r2, [r0, #0x10] - mov r0, r9 - add r1, r10, r1, lsl #0x9 - add r7, r1, #0x20 - mov r1, r7 - bl MIi_CpuCopy16 - add r3, r10, #0x800 - ldrh r1, [r3, #0xe] - mov r5, #0x1 - ldr r0, _020DAA64 ; =WmDataSharingSetDataCallback - str r1, [sp, #0x0] - ldrh r6, [r3, #0x16] - mov r1, r10 - mov r2, r7 - str r6, [sp, #0x4] - str r5, [sp, #0x8] - ldrh r3, [r3, #0x10] - bl WM_SetMPDataToPortEx - add r1, r10, #0x800 - ldrh r2, [r1, #0xa] - cmp r0, #0x2 - add r2, r2, #0x1 - and r2, r2, #0x3 - strh r2, [r1, #0xa] - beq _020DAA54 - cmp r0, #0x0 - movne r0, #0x5 - strneh r0, [r1, #0x1c] - movne r4, r5 -_020DAA54: - mov r0, r4 - add sp, sp, #0xc - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020DAA64: .word WmDataSharingSetDataCallback -_020DAA68: .word 0x0000FFFF - - arm_func_start WM_EndDataSharing -WM_EndDataSharing: ; 0x020DAA6C - stmdb sp!, {r4,lr} - movs r4, r0 - moveq r0, #0x6 - ldmeqia sp!, {r4,lr} - bxeq lr - add r0, r4, #0x800 - ldrh r1, [r0, #0xe] - cmp r1, #0x0 - moveq r0, #0x3 - ldmeqia sp!, {r4,lr} - bxeq lr - ldrh r0, [r0, #0x16] - mov r1, #0x0 - mov r2, r1 - bl WM_SetPortCallback - add r1, r4, #0x800 - mov r0, #0x0 - strh r0, [r1, #0xe] - strh r0, [r1, #0x1c] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start WM_StartDataSharing -WM_StartDataSharing: ; 0x020DAAC0 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xc - mov r10, r0 - mov r7, r1 - mov r6, r2 - mov r0, #0x2 - mov r1, #0x9 - mov r2, #0xa - mov r5, r3 - mov r9, #0x1 - bl WMi_CheckStateEx -_020DAAEC: ; 0x020DAAEC - cmp r0, #0x0 - addne sp, sp, #0xc - ldmneia sp!, {r4-r11,lr} - bxne lr - cmp r10, #0x0 - addeq sp, sp, #0xc - moveq r0, #0x6 - ldmeqia sp!, {r4-r11,lr} - bxeq lr - cmp r7, #0x10 - addcs sp, sp, #0xc - movcs r0, #0x6 - ldmcsia sp!, {r4-r11,lr} - bxcs lr - cmp r6, #0x0 - addeq sp, sp, #0xc - moveq r0, #0x6 - ldmeqia sp!, {r4-r11,lr} - bxeq lr - bl WM_GetAID - movs r4, r0 - bne _020DAB4C - bl WMi_GetMPReadyAIDs - mov r9, r0 -_020DAB4C: - mov r1, r10 - mov r0, #0x0 - mov r2, #0x820 - bl MIi_CpuClearFast - add r0, r10, #0x800 - mov r2, #0x0 - strh r2, [r0, #0x8] - strh r2, [r0, #0xa] - strh r2, [r0, #0xc] - strh r5, [r0, #0x10] - strh r7, [r0, #0x16] - strh r2, [r0, #0xe] - mov r0, #0x1 - ldr r1, [sp, #0x30] - orr r0, r6, r0, lsl r4 - cmp r1, #0x0 - mov r0, r0, lsl #0x10 - movne r2, #0x1 - add r1, r10, #0x800 - strh r2, [r1, #0x18] - mov r0, r0, lsr #0x10 - strh r0, [r1, #0xe] - bl MATH_CountPopulation - add r3, r10, #0x800 - mul r1, r5, r0 - strh r0, [r3, #0x12] - strh r1, [r3, #0x14] - ldrh r0, [r3, #0x14] - cmp r0, #0x1fc - movhi r0, #0x0 - strhih r0, [r3, #0xe] - addhi sp, sp, #0xc - movhi r0, #0x6 - ldmhiia sp!, {r4-r11,lr} - bxhi lr - add r0, r0, #0x4 - strh r0, [r3, #0x14] - mov r0, #0x1 - strh r0, [r3, #0x1c] - cmp r4, #0x0 - bne _020DAD04 - orr r2, r9, #0x1 - mov r4, #0x0 -_020DABF8: - ldrh r1, [r3, #0xe] - mov r0, r4, lsl #0x9 - add r4, r4, #0x1 - and r1, r1, r2 - strh r1, [r10, r0] - cmp r4, #0x4 - blt _020DABF8 - ldr r1, _020DAD2C ; =WmDataSharingReceiveCallback_Parent - mov r0, r7 - mov r2, r10 - bl WM_SetPortCallback - mov r8, r10 - mov r7, #0x0 - mov r4, #0x2 - mov r6, #0x1 - ldr fp, _020DAD30 ; =WmDataSharingSetDataCallback - ldr r5, _020DAD34 ; =0x0000FFFF - b _020DACE4 -_020DAC40: - add r12, r10, #0x800 - ldrh r2, [r12, #0x8] - mov r0, r11 - mov r1, r10 - add r2, r2, #0x1 - and r2, r2, #0x3 - strh r2, [r12, #0x8] - ldrh r3, [r12, #0xe] - mov r2, r8 - and r3, r3, r9 - mov r3, r3, lsl #0x10 - mov r3, r3, lsr #0x10 - str r3, [sp, #0x0] - ldrh r3, [r12, #0x16] - str r3, [sp, #0x4] - str r6, [sp, #0x8] - ldrh r3, [r12, #0x14] - bl WM_SetMPDataToPortEx - cmp r0, #0x7 - bne _020DACB4 - add r0, r10, r7, lsl #0x1 - add r0, r0, #0x800 - strh r5, [r0, #0x0] - add r0, r10, #0x800 - ldrh r1, [r0, #0xa] - add r1, r1, #0x1 - and r1, r1, #0x3 - strh r1, [r0, #0xa] - b _020DACDC -_020DACB4: - cmp r0, #0x0 - beq _020DACDC - cmp r0, #0x2 - addne r0, r10, #0x800 - movne r1, #0x5 - strneh r1, [r0, #0x1c] - addne sp, sp, #0xc - movne r0, #0x1 - ldmneia sp!, {r4-r11,lr} - bxne lr -_020DACDC: - add r8, r8, #0x200 - add r7, r7, #0x1 -_020DACE4: - add r0, r10, #0x800 - ldrh r0, [r0, #0x18] - cmp r0, #0x1 - movne r0, r6 - moveq r0, r4 - cmp r7, r0 - blt _020DAC40 - b _020DAD1C -_020DAD04: - ldr r1, _020DAD38 ; =WmDataSharingReceiveCallback_Child - mov r4, #0x3 - mov r0, r7 - mov r2, r10 - strh r4, [r3, #0xa] - bl WM_SetPortCallback -_020DAD1C: - mov r0, #0x0 - add sp, sp, #0xc - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020DAD2C: .word WmDataSharingReceiveCallback_Parent -_020DAD30: .word WmDataSharingSetDataCallback -_020DAD34: .word 0x0000FFFF -_020DAD38: .word WmDataSharingReceiveCallback_Child - - arm_func_start WM_EndKeySharing -WM_EndKeySharing: ; 0x020DAD3C - ldr ip, _020DAD44 ; =WM_EndDataSharing - bx r12 - .balign 4 -_020DAD44: .word WM_EndDataSharing - - arm_func_start WM_StartKeySharing -WM_StartKeySharing: ; 0x020DAD48 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020DAD70 ; =0x0000FFFF - mov r12, #0x1 - mov r3, #0x2 - str r12, [sp, #0x0] - bl WM_StartDataSharing - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DAD70: .word 0x0000FFFF - - arm_func_start WM_SetEntry -WM_SetEntry: ; 0x020DAD74 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r1 - mov r0, #0x2 - mov r1, #0x7 - mov r2, #0x9 - bl WMi_CheckStateEx -_020DAD94: ; 0x020DAD94 - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - mov r1, r5 - mov r0, #0x21 - bl WMi_SetCallbackTable - mov r2, r4 - mov r0, #0x21 - mov r1, #0x1 - bl WMi_SendCommand -_020DADC0: ; 0x020DADC0 - cmp r0, #0x0 - moveq r0, #0x2 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start WM_MeasureChannel -WM_MeasureChannel: ; 0x020DADD4 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0xc - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl WMi_GetSystemWork - mov r0, #0x1 - mov r1, #0x2 - bl WMi_CheckStateEx -_020DADFC: ; 0x020DADFC - cmp r0, #0x0 - addne sp, sp, #0xc - ldmneia sp!, {r4-r7,lr} - bxne lr - mov r1, r7 - mov r0, #0x1e - bl WMi_SetCallbackTable - ldrh r2, [sp, #0x20] - mov r3, #0x1e - add r0, sp, #0x0 - mov r1, #0xa - strh r3, [sp, #0x0] - strh r6, [sp, #0x2] - strh r5, [sp, #0x4] - strh r4, [sp, #0x6] - strh r2, [sp, #0x8] - bl WMi_SendCommandDirect -_020DAE40: ; 0x020DAE40 - cmp r0, #0x0 - moveq r0, #0x2 - add sp, sp, #0xc - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start WM_SetLifeTime -WM_SetLifeTime: ; 0x020DAE54 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0xc - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl WMi_CheckIdle -_020DAE70: ; 0x020DAE70 - cmp r0, #0x0 - addne sp, sp, #0xc - ldmneia sp!, {r4-r7,lr} - bxne lr - mov r1, r7 - mov r0, #0x1d - bl WMi_SetCallbackTable - ldrh r12, [sp, #0x20] - str r4, [sp, #0x0] - mov r2, r6 - mov r3, r5 - mov r0, #0x1d - mov r1, #0x4 - str r12, [sp, #0x4] - bl WMi_SendCommand -_020DAEAC: ; 0x020DAEAC - cmp r0, #0x0 - moveq r0, #0x2 - add sp, sp, #0xc - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start WM_SetBeaconIndication -WM_SetBeaconIndication: ; 0x020DAEC0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 -_020DAECC: ; 0x020DAECC - mov r4, r1 - bl WMi_CheckIdle -_020DAED4: ; 0x020DAED4 - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - cmp r4, #0x0 - beq _020DAF00 - cmp r4, #0x1 - addne sp, sp, #0x4 - movne r0, #0x6 - ldmneia sp!, {r4-r5,lr} - bxne lr -_020DAF00: - mov r1, r5 - mov r0, #0x19 - bl WMi_SetCallbackTable - mov r2, r4 - mov r0, #0x19 - mov r1, #0x1 - bl WMi_SendCommand -_020DAF1C: ; 0x020DAF1C - cmp r0, #0x0 - moveq r0, #0x2 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start WM_SetGameInfo -WM_SetGameInfo: ; 0x020DAF30 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0xc - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r0, #0x2 - mov r1, #0x7 - mov r2, #0x9 - mov r4, r3 - bl WMi_CheckStateEx -_020DAF58: ; 0x020DAF58 - cmp r0, #0x0 - addne sp, sp, #0xc - ldmneia sp!, {r4-r7,lr} - bxne lr - cmp r6, #0x0 - addeq sp, sp, #0xc - moveq r0, #0x6 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - cmp r5, #0x70 - addhi sp, sp, #0xc - movhi r0, #0x6 - ldmhiia sp!, {r4-r7,lr} - bxhi lr - ldr r1, _020DAFF4 ; =0x021D68C0 - mov r0, r6 - mov r2, r5 - bl MIi_CpuCopy16 - ldr r0, _020DAFF4 ; =0x021D68C0 - mov r1, r5 - bl DC_StoreRange - mov r1, r7 - mov r0, #0x18 - bl WMi_SetCallbackTable - ldrh r0, [sp, #0x20] - str r4, [sp, #0x0] - ldrb r1, [sp, #0x24] - str r0, [sp, #0x4] - ldr r2, _020DAFF4 ; =0x021D68C0 - str r1, [sp, #0x8] - mov r3, r5 - mov r0, #0x18 - mov r1, #0x5 - bl WMi_SendCommand -_020DAFE0: ; 0x020DAFE0 - cmp r0, #0x0 - moveq r0, #0x2 - add sp, sp, #0xc - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020DAFF4: .word 0x021D68C0 - - arm_func_start WM_SetWEPKeyEx -WM_SetWEPKeyEx: ; 0x020DAFF8 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl WMi_CheckIdle -_020DB014: ; 0x020DB014 - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r7,lr} - bxne lr - cmp r6, #0x3 - addhi sp, sp, #0x4 - movhi r0, #0x6 - ldmhiia sp!, {r4-r7,lr} - bxhi lr - cmp r6, #0x0 - beq _020DB060 - cmp r4, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x6 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - mov r0, r4 - mov r1, #0x50 - bl DC_StoreRange -_020DB060: - mov r1, r7 - mov r0, #0x27 - bl WMi_SetCallbackTable - mov r2, r6 - mov r3, r4 - mov r0, #0x27 - mov r1, #0x3 - str r5, [sp, #0x0] - bl WMi_SendCommand -_020DB084: ; 0x020DB084 - cmp r0, #0x0 - moveq r0, #0x2 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start WM_SetWEPKeyEx2 -WM_SetWEPKeyEx2: ; 0x020DB098 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl WMi_CheckIdle -_020DB0AC: ; 0x020DB0AC - cmp r0, #0x0 - ldmneia sp!, {r4-r6,lr} - bxne lr - cmp r5, #0x3 - movhi r0, #0x6 - ldmhiia sp!, {r4-r6,lr} - bxhi lr - cmp r5, #0x0 - beq _020DB0EC - cmp r4, #0x0 - moveq r0, #0x6 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - mov r0, r4 - mov r1, #0x50 - bl DC_StoreRange -_020DB0EC: - mov r1, r6 - mov r0, #0x14 - bl WMi_SetCallbackTable - mov r2, r5 - mov r3, r4 - mov r0, #0x14 - mov r1, #0x2 - bl WMi_SendCommand -_020DB10C: ; 0x020DB10C - cmp r0, #0x0 - moveq r0, #0x2 - ldmia sp!, {r4-r6,lr} - bx lr diff --git a/arm9/global.inc b/arm9/global.inc index 0f1b50e2..b46c2c88 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -3816,15 +3816,20 @@ .extern WM_Disconnect .extern WM_Enable .extern WM_End +.extern WM_EndDataSharing .extern WM_EndDCF .extern WM_EndMP .extern WM_EndParent .extern WM_EndScan .extern WM_Finish +.extern WM_GetAID .extern WM_GetAllowedChannel +.extern WM_GetConnectedAIDs .extern WM_GetDispersionBeaconPeriod .extern WM_GetDispersionScanPeriod .extern WM_GetLinkLevel +.extern WM_GetMPReceiveBufferSize +.extern WM_GetMPSendBufferSize .extern WM_Init .extern WM_Initialize .extern WM_MeasureChannel @@ -3847,7 +3852,15 @@ .extern WM_StartParent .extern WM_StartScan .extern WM_StartScanEx +.extern WMi_CheckIdle +.extern WMi_CheckInitialized +.extern WMi_CheckStateEx +.extern WMi_GetMPReadyAIDs .extern WMi_GetStatusAddress +.extern WMi_GetSystemWork +.extern WMi_SendCommand +.extern WMi_SendCommandDirect +.extern WMi_SetCallbackTable .extern _ExitProcess .extern __call_static_initializers .extern __close_console @@ -5086,7 +5099,7 @@ .extern MOD13_0221A7EC .extern MOD13_0221A8A4 .extern FS_OpenFileDirect -.extern FUN_020D9564 +.extern WMi_StartParentEx .extern WM_GetNextTgid .extern WM_ReadMPData .extern WM_StartMPEx @@ -5262,7 +5275,7 @@ .extern WM_EndKeySharing .extern WM_GetOtherElements .extern WM_ReadStatus -.extern WM_SetWEPKeyEx2 +.extern WM_SetWEPKey .extern WM_StartDataSharing .extern WM_StartKeySharing .extern WM_StepDataSharing diff --git a/arm9/modules/13/asm/module_13_arm1.s b/arm9/modules/13/asm/module_13_arm1.s index bd308915..6e644609 100644 --- a/arm9/modules/13/asm/module_13_arm1.s +++ b/arm9/modules/13/asm/module_13_arm1.s @@ -4826,7 +4826,7 @@ _02216228: ldr r1, _02216904 ; =0x0223F7A0 ldr r0, _02216900 ; =MOD13_02216098 ldr r1, [r1] - bl FUN_020D9564 + bl WMi_StartParentEx mov r1, r0 mov r0, #8 bl MOD13_02214B08 diff --git a/arm9/modules/13/asm/module_13_arm2.s b/arm9/modules/13/asm/module_13_arm2.s index d5e257e5..e69032cc 100644 --- a/arm9/modules/13/asm/module_13_arm2.s +++ b/arm9/modules/13/asm/module_13_arm2.s @@ -30397,7 +30397,7 @@ MOD13_02238130: ; 0x02238130 ldr r2, [r2] ldr r0, _0223819C ; =MOD13_022380E8 add r2, r2, #0x13c0 - bl WM_SetWEPKeyEx2 + bl WM_SetWEPKey cmp r0, #2 addeq sp, sp, #4 moveq r0, #1 -- cgit v1.2.3 From d648a684ef6e337f22df8f7197c2dd6cd286743e Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 20 May 2020 16:33:51 +0100 Subject: split libctrdg --- arm9/arm9.lcf | 10 +- arm9/asm/CTRDG.s | 678 ++++++++ arm9/asm/CTRDG_backup.s | 124 ++ arm9/asm/CTRDG_flash_AT29LV512.s | 503 ++++++ arm9/asm/CTRDG_flash_LE39FW512.s | 457 ++++++ arm9/asm/CTRDG_flash_MX29L010.s | 401 +++++ arm9/asm/CTRDG_flash_MX29L512.s | 118 ++ arm9/asm/CTRDG_flash_common.s | 517 ++++++ arm9/asm/CTRDG_proc.s | 285 ++++ arm9/asm/CTRDG_task.s | 187 +++ arm9/asm/libctrdg.s | 3238 -------------------------------------- arm9/global.inc | 12 + 12 files changed, 3291 insertions(+), 3239 deletions(-) create mode 100644 arm9/asm/CTRDG.s create mode 100644 arm9/asm/CTRDG_backup.s create mode 100644 arm9/asm/CTRDG_flash_AT29LV512.s create mode 100644 arm9/asm/CTRDG_flash_LE39FW512.s create mode 100644 arm9/asm/CTRDG_flash_MX29L010.s create mode 100644 arm9/asm/CTRDG_flash_MX29L512.s create mode 100644 arm9/asm/CTRDG_flash_common.s create mode 100644 arm9/asm/CTRDG_proc.s create mode 100644 arm9/asm/CTRDG_task.s delete mode 100644 arm9/asm/libctrdg.s diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index dddd067c..f1dc7c8d 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -235,7 +235,15 @@ SECTIONS { WM_ds.o (.text) WM_ks.o (.text) WM_etc.o (.text) - libctrdg.o (.text) + CTRDG.o (.text) + CTRDG_proc.o (.text) + CTRDG_backup.o (.text) + CTRDG_flash_common.o (.text) + CTRDG_flash_AT29LV512.o (.text) + CTRDG_flash_LE39FW512.o (.text) + CTRDG_flash_MX29L010.o (.text) + CTRDG_flash_MX29L512.o (.text) + CTRDG_task.o (.text) libmath.o (.text) libstd.o (.text) /* C standard library */ diff --git a/arm9/asm/CTRDG.s b/arm9/asm/CTRDG.s new file mode 100644 index 00000000..1b08d623 --- /dev/null +++ b/arm9/asm/CTRDG.s @@ -0,0 +1,678 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start CTRDG_CheckEnabled +CTRDG_CheckEnabled: + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl CTRDG_IsOptionCartridge +_020DB128: ; 0x020DB128 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + bl CTRDG_IsEnabled +_020DB13C: ; 0x020DB13C + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDG_Enable +CTRDG_Enable: ; 0x020DB15C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, _020DB1AC ; =0x021D6940 + mov r4, r0 + str r5, [r1, #0x0] + bl CTRDG_IsOptionCartridge +_020DB17C: ; 0x020DB17C + cmp r0, #0x0 + bne _020DB198 + cmp r5, #0x0 + movne r1, #0x1000 + moveq r1, #0x5000 + mov r0, #0xf000 + bl OS_SetDPermissionsForProtectionRegion +_020DB198: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DB1AC: .word 0x021D6940 + + arm_func_start CTRDG_IsEnabled +CTRDG_IsEnabled: + ldr r0, _020DB1BC ; =0x021D6940 + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020DB1BC: .word 0x021D6940 + + arm_func_start CTRDGi_AccessCommon +CTRDGi_AccessCommon: ; 0x020DB1C0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl CTRDG_IsExisting +_020DB1DC: ; 0x020DB1DC + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + bl CTRDG_CheckEnabled + ldr r0, _020DB2BC ; =0x021D6944 + ldrh r0, [r0, #0x2] + bl OS_LockCartridge + cmp r4, #0x21 + bhi _020DB240 + cmp r4, #0x21 + bhs _020DB270 + cmp r4, #0x11 + bhi _020DB234 + cmp r4, #0x10 + blo _020DB294 + cmp r4, #0x10 + beq _020DB290 + cmp r4, #0x11 + beq _020DB260 + b _020DB294 +_020DB234: + cmp r4, #0x20 + streqh r6, [r7, #0x0] + b _020DB294 +_020DB240: + cmp r4, #0x40 + bhi _020DB254 + cmp r4, #0x40 + streq r6, [r7, #0x0] + b _020DB294 +_020DB254: + cmp r4, #0x41 + beq _020DB280 + b _020DB294 +_020DB260: + cmp r5, #0x0 + ldrneb r0, [r7, #0x0] + strneb r0, [r5, #0x0] + b _020DB294 +_020DB270: + cmp r5, #0x0 + ldrneh r0, [r7, #0x0] + strneh r0, [r5, #0x0] + b _020DB294 +_020DB280: + cmp r5, #0x0 + ldrne r0, [r7, #0x0] + strne r0, [r5, #0x0] + b _020DB294 +_020DB290: + strb r6, [r7, #0x0] +_020DB294: + ldr r0, _020DB2BC ; =0x021D6944 + ldrh r0, [r0, #0x2] + bl OS_UnlockCartridge + bl CTRDG_IsExisting +_020DB2A4: ; 0x020DB2A4 + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DB2BC: .word 0x021D6944 + + arm_func_start CTRDG_Read32 +CTRDG_Read32: ; 0x020DB2C0 + ldr ip, _020DB2D4 ; =CTRDGi_AccessCommon + mov r2, r1 + mov r1, #0x0 + mov r3, #0x41 + bx r12 + .balign 4 +_020DB2D4: .word CTRDGi_AccessCommon + + arm_func_start CTRDGi_CopyCommon +CTRDGi_CopyCommon: ; 0x020DB2D8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl CTRDG_IsExisting +_020DB2F4: ; 0x020DB2F4 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + bl CTRDG_CheckEnabled + ldr r0, _020DB42C ; =0x021D6944 + ldrh r0, [r0, #0x2] + bl OS_LockCartridge + ldr r0, [sp, #0x18] + ands r0, r0, #0x1 + bne _020DB338 + mov r0, r7 + bl MI_StopDma + mov r0, r5 + mov r1, r4 + bl DC_FlushRange +_020DB338: + ldr r0, [sp, #0x18] + cmp r0, #0x11 + bhi _020DB36C + cmp r0, #0x10 + blo _020DB360 + cmp r0, #0x10 + beq _020DB38C + cmp r0, #0x11 + beq _020DB3BC + b _020DB404 +_020DB360: + cmp r0, #0x1 + beq _020DB3E4 + b _020DB404 +_020DB36C: + cmp r0, #0x20 + bhi _020DB380 + cmp r0, #0x20 + beq _020DB3A4 + b _020DB404 +_020DB380: + cmp r0, #0x21 + beq _020DB3D0 + b _020DB404 +_020DB38C: + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, r4 + bl MI_DmaCopy16 + b _020DB404 +_020DB3A4: + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, r4 + bl MI_DmaCopy32 + b _020DB404 +_020DB3BC: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl MIi_CpuCopy16 + b _020DB404 +_020DB3D0: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl MIi_CpuCopy32 + b _020DB404 +_020DB3E4: + cmp r4, #0x0 + mov r1, #0x0 + bls _020DB404 +_020DB3F0: + ldrb r0, [r6], #0x1 + add r1, r1, #0x1 + cmp r1, r4 + strb r0, [r5], #0x1 + blo _020DB3F0 +_020DB404: + ldr r0, _020DB42C ; =0x021D6944 + ldrh r0, [r0, #0x2] + bl OS_UnlockCartridge + bl CTRDG_IsExisting +_020DB414: ; 0x020DB414 + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DB42C: .word 0x021D6944 + + arm_func_start CTRDG_CpuCopy32 +CTRDG_CpuCopy32: ; 0x020DB430 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r3, r2 + mov r12, #0x21 + mov r1, r0 + mov r2, lr + mov r0, #0x0 + str r12, [sp, #0x0] + bl CTRDGi_CopyCommon + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDG_CpuCopy16 +CTRDG_CpuCopy16: ; 0x020DB464 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r3, r2 + mov r12, #0x11 + mov r1, r0 + mov r2, lr + mov r0, #0x0 + str r12, [sp, #0x0] + bl CTRDGi_CopyCommon + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDG_CpuCopy8 +CTRDG_CpuCopy8: ; 0x020DB498 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r3, r2 + cmp lr, #0x8000000 + blo _020DB4DC + ldr r2, _020DB500 ; =0x0A010000 + cmp lr, r2 + bhs _020DB4DC + mov r12, #0x1 + mov r2, r0 + mov r0, #0x0 + str r12, [sp, #0x0] + bl CTRDGi_CopyCommon + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020DB4DC: + mov r12, #0x1 + mov r1, r0 + mov r2, lr + mov r0, #0x0 + str r12, [sp, #0x0] + bl CTRDGi_CopyCommon + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DB500: .word 0x0A010000 + + arm_func_start CTRDGi_SendtoPxi +CTRDGi_SendtoPxi: ; 0x020DB504 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r1, r7 + mov r0, #0xd + mov r2, #0x0 + bl PXI_SendWordByFifo +_020DB520: ; 0x020DB520 + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r6, #0x1 + mov r5, #0xd + mov r4, #0x0 +_020DB53C: + mov r0, r6 + bl SVC_WaitByLoop + mov r0, r5 + mov r1, r7 + mov r2, r4 + bl PXI_SendWordByFifo +_020DB554: ; 0x020DB554 + cmp r0, #0x0 + bne _020DB53C + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start CTRDGi_UnlockByProcessor +CTRDGi_UnlockByProcessor: ; 0x020DB568 + stmdb sp!, {r4,lr} + mov r4, r1 + ldr r1, [r4, #0x0] + cmp r1, #0x0 + bne _020DB580 + bl OS_UnlockCartridge +_020DB580: + ldr r0, [r4, #0x4] + bl OS_RestoreInterrupts + ldmia sp!, {r4,lr} + bx lr + + arm_func_start CTRDGi_LockByProcessor +CTRDGi_LockByProcessor: ; 0x020DB590 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + ldr r5, _020DB60C ; =0x027FFFE8 + mov r4, #0x1 +_020DB5A8: + bl OS_DisableInterrupts + str r0, [r6, #0x4] + mov r0, r5 + bl OS_ReadOwnerOfLockWord + and r0, r0, #0x40 + str r0, [r6, #0x0] + ldr r0, [r6, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + mov r0, r7 + bl OS_TryLockCartridge +_020DB5DC: ; 0x020DB5DC + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldr r0, [r6, #0x4] + bl OS_RestoreInterrupts + mov r0, r4 + bl SVC_WaitByLoop + b _020DB5A8 +_020DB600: ; 0x020DB600 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DB60C: .word 0x027FFFE8 + + arm_func_start CTRDGi_RestoreAccessCycle +CTRDGi_RestoreAccessCycle: ; 0x020DB610 + ldr r3, _020DB640 ; =0x04000204 + ldr r2, [r0, #0x0] + ldrh r1, [r3, #0x0] + bic r1, r1, #0xc + orr r1, r1, r2, lsl #0x2 + strh r1, [r3, #0x0] + ldrh r1, [r3, #0x0] + ldr r2, [r0, #0x4] + bic r0, r1, #0x10 + orr r0, r0, r2, lsl #0x4 + strh r0, [r3, #0x0] + bx lr + .balign 4 +_020DB640: .word 0x04000204 + + arm_func_start CTRDGi_ChangeLatestAccessCycle +CTRDGi_ChangeLatestAccessCycle: ; 0x020DB644 + ldr r2, _020DB688 ; =0x04000204 + ldrh r1, [r2, #0x0] + and r1, r1, #0xc + mov r1, r1, asr #0x2 + str r1, [r0, #0x0] + ldrh r1, [r2, #0x0] + and r1, r1, #0x10 + mov r1, r1, asr #0x4 + str r1, [r0, #0x4] + ldrh r0, [r2, #0x0] + bic r0, r0, #0xc + orr r0, r0, #0xc + strh r0, [r2, #0x0] + ldrh r0, [r2, #0x0] + bic r0, r0, #0x10 + strh r0, [r2, #0x0] + bx lr + .balign 4 +_020DB688: .word 0x04000204 + + arm_func_start CTRDG_IsExisting +CTRDG_IsExisting: + stmdb sp!, {r4,lr} + sub sp, sp, #0x10 + ldr r2, _020DB798 ; =0x027FFC30 + ldr r0, _020DB79C ; =0x0000FFFF + ldrh r1, [r2, #0x0] + mov r4, #0x1 + cmp r1, r0 + addeq sp, sp, #0x10 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldrb r0, [r2, #0x5] + mov r0, r0, lsl #0x1e + mov r0, r0, lsr #0x1f + cmp r0, #0x1 + addeq sp, sp, #0x10 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r0, _020DB7A0 ; =0x021D6944 + add r1, sp, #0x0 + ldrh r0, [r0, #0x2] + bl CTRDGi_LockByProcessor + add r0, sp, #0x8 + bl CTRDGi_ChangeLatestAccessCycle + mov r0, #0x8000000 + ldrb r2, [r0, #0xb2] + cmp r2, #0x96 + bne _020DB714 + ldr r1, _020DB798 ; =0x027FFC30 + ldrh r0, [r0, #0xbe] + ldrh r1, [r1, #0x0] + cmp r1, r0 + bne _020DB75C +_020DB714: + cmp r2, #0x96 + beq _020DB734 + ldr r1, _020DB798 ; =0x027FFC30 + ldr r0, _020DB7A4 ; =0x0801FFFE + ldrh r1, [r1, #0x0] + ldrh r0, [r0, #0x0] + cmp r1, r0 + bne _020DB75C +_020DB734: + ldr r2, _020DB798 ; =0x027FFC30 + mov r0, #0x8000000 + ldr r1, [r2, #0x8] + ldr r0, [r0, #0xac] + cmp r1, r0 + beq _020DB770 + ldrb r0, [r2, #0x5] + mov r0, r0, lsl #0x1f + movs r0, r0, lsr #0x1f + beq _020DB770 +_020DB75C: + ldr r1, _020DB798 ; =0x027FFC30 + mov r4, #0x0 + ldrb r0, [r1, #0x5] + orr r0, r0, #0x2 + strb r0, [r1, #0x5] +_020DB770: + add r0, sp, #0x8 + bl CTRDGi_RestoreAccessCycle + ldr r0, _020DB7A0 ; =0x021D6944 + add r1, sp, #0x0 + ldrh r0, [r0, #0x2] + bl CTRDGi_UnlockByProcessor + mov r0, r4 + add sp, sp, #0x10 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020DB798: .word 0x027FFC30 +_020DB79C: .word 0x0000FFFF +_020DB7A0: .word 0x021D6944 +_020DB7A4: .word 0x0801FFFE + + arm_func_start CTRDG_IsPulledOut +CTRDG_IsPulledOut: ; 0x020DB7A8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020DB800 ; =0x027FFC30 + ldr r0, _020DB804 ; =0x0000FFFF + ldrh r1, [r2, #0x0] + cmp r1, r0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {lr} + bxeq lr + ldrb r0, [r2, #0x5] + mov r0, r0, lsl #0x1e + movs r0, r0, lsr #0x1f + bne _020DB7E4 + bl CTRDG_IsExisting +_020DB7E4: + ldr r0, _020DB800 ; =0x027FFC30 + ldrb r0, [r0, #0x5] + mov r0, r0, lsl #0x1e + mov r0, r0, lsr #0x1f + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DB800: .word 0x027FFC30 +_020DB804: .word 0x0000FFFF + + arm_func_start CTRDGi_GetAgbMakerCodeAtInit +CTRDGi_GetAgbMakerCodeAtInit: ; 0x020DB808 + stmdb sp!, {r4,lr} + mov r4, #0x0 + bl CTRDGi_IsAgbCartridgeAtInit +_020DB814: ; 0x020DB814 + cmp r0, #0x0 + ldrne r0, _020DB82C ; =0x027FFC30 + ldrneh r4, [r0, #0x6] + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020DB82C: .word 0x027FFC30 + + arm_func_start CTRDG_GetAgbMakerCode +CTRDG_GetAgbMakerCode: ; 0x020DB830 + stmdb sp!, {r4,lr} + mov r4, #0x0 + bl CTRDG_IsExisting +_020DB83C: ; 0x020DB83C + cmp r0, #0x0 + beq _020DB84C + bl CTRDGi_GetAgbMakerCodeAtInit + mov r4, r0 +_020DB84C: + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start CTRDGi_GetAgbGameCodeAtInit +CTRDGi_GetAgbGameCodeAtInit: ; 0x020DB858 + stmdb sp!, {r4,lr} + mov r4, #0x0 + bl CTRDGi_IsAgbCartridgeAtInit +_020DB864: ; 0x020DB864 + cmp r0, #0x0 + ldrne r0, _020DB87C ; =0x027FFC30 + ldrne r4, [r0, #0x8] + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020DB87C: .word 0x027FFC30 + + arm_func_start CTRDG_GetAgbGameCode +CTRDG_GetAgbGameCode: ; 0x020DB880 + stmdb sp!, {r4,lr} + mov r4, #0x0 + bl CTRDG_IsExisting +_020DB88C: ; 0x020DB88C + cmp r0, #0x0 + beq _020DB89C + bl CTRDGi_GetAgbGameCodeAtInit + mov r4, r0 +_020DB89C: + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start CTRDGi_IsAgbCartridgeAtInit +CTRDGi_IsAgbCartridgeAtInit: + ldr r0, _020DB8BC ; =0x027FFC30 + ldrb r0, [r0, #0x5] + mov r0, r0, lsl #0x1f + mov r0, r0, lsr #0x1f + bx lr + .balign 4 +_020DB8BC: .word 0x027FFC30 + + arm_func_start CTRDG_IsOptionCartridge +CTRDG_IsOptionCartridge: + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl CTRDG_IsExisting +_020DB8CC: ; 0x020DB8CC + cmp r0, #0x0 + beq _020DB8EC + bl CTRDGi_IsAgbCartridgeAtInit +_020DB8D8: ; 0x020DB8D8 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x1 + ldmeqia sp!, {lr} + bxeq lr +_020DB8EC: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDG_IsAgbCartridge +CTRDG_IsAgbCartridge: ; 0x020DB8FC + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl CTRDG_IsExisting +_020DB908: ; 0x020DB908 + cmp r0, #0x0 + beq _020DB928 + bl CTRDGi_IsAgbCartridgeAtInit +_020DB914: ; 0x020DB914 + cmp r0, #0x0 + addne sp, sp, #0x4 + movne r0, #0x1 + ldmneia sp!, {lr} + bxne lr +_020DB928: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_InitCommon +CTRDGi_InitCommon: ; 0x020DB938 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020DB970 ; =0x021D6944 + mov r3, #0x0 + ldr r2, _020DB974 ; =0x05000001 + add r0, sp, #0x0 + str r3, [sp, #0x0] + bl FUN_020002FE + bl OS_GetLockID + ldr r1, _020DB970 ; =0x021D6944 + strh r0, [r1, #0x2] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DB970: .word 0x021D6944 +_020DB974: .word 0x05000001 diff --git a/arm9/asm/CTRDG_backup.s b/arm9/asm/CTRDG_backup.s new file mode 100644 index 00000000..952730a2 --- /dev/null +++ b/arm9/asm/CTRDG_backup.s @@ -0,0 +1,124 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start CTRDG_IdentifyAgbBackup +CTRDG_IdentifyAgbBackup: ; 0x020DBD50 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + cmp r7, #0x1 + mov r0, #0x1 + bhi _020DBEAC + bl OS_GetLockID + ldr r1, _020DBED8 ; =0x021D6B0C + strh r0, [r1, #0x0] + ldrh r0, [r1, #0x0] + bl OS_LockCartridge + ldr r6, _020DBEDC ; =0x04000204 + ldr r1, _020DBEE0 ; =0x02103FE4 + ldrh r3, [r6, #0x0] + ldrh r2, [r6, #0x0] + ldr r0, _020DBEE4 ; =0x021D6B28 + and r4, r3, #0x3 + bic r2, r2, #0x3 + orr r2, r2, #0x3 + strh r2, [r6, #0x0] + str r1, [r0, #0x0] + bl CTRDGi_ReadFlashID + ldr r2, _020DBEDC ; =0x04000204 + mov r6, r0 + ldrh r1, [r2, #0x0] + cmp r7, #0x0 + ldreq r5, _020DBEE8 ; =0x02103FF4 + bic r1, r1, #0x3 + orr r1, r1, r4 + cmp r7, #0x1 + ldr r0, _020DBED8 ; =0x021D6B0C + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + ldreq r5, _020DBEEC ; =0x02103FE8 + bl OS_UnlockCartridge2 + ldr r2, [r5, #0x0] + mov r0, #0x1 + ldrh r1, [r2, #0x38] + cmp r1, #0x0 + beq _020DBE14 + and r3, r6, #0xff +_020DBDF4: + ldrh r1, [r2, #0x38] + cmp r3, r1 + moveq r0, #0x0 + beq _020DBE14 + ldr r2, [r5, #0x4]! + ldrh r1, [r2, #0x38] + cmp r1, #0x0 + bne _020DBDF4 +_020DBE14: + ldr r2, [r2, #0x0] + ldr r1, _020DBEF0 ; =0x021D6B14 + ldr r3, _020DBEF4 ; =0x021D6B34 + str r2, [r1, #0x0] + ldr r1, [r5, #0x0] + ldr r2, _020DBEF8 ; =0x021D6B2C + ldr r4, [r1, #0x4] + ldr r1, _020DBEFC ; =0x021D6B18 + str r4, [r3, #0x0] + ldr r3, [r5, #0x0] + ldr r6, _020DBF00 ; =0x021D6B1C + ldr r3, [r3, #0x8] + ldr r4, _020DBF04 ; =0x021D6B30 + str r3, [r2, #0x0] + ldr r2, [r5, #0x0] + ldr r3, _020DBF08 ; =0x021D6B24 + ldr r7, [r2, #0xc] + ldr r2, _020DBEE4 ; =0x021D6B28 + str r7, [r1, #0x0] + ldr r7, [r5, #0x0] + ldr r1, _020DBF0C ; =0x021D6B20 + ldr r7, [r7, #0x10] + add sp, sp, #0x4 + str r7, [r6, #0x0] + ldr r6, [r5, #0x0] + ldr r6, [r6, #0x14] + str r6, [r4, #0x0] + ldr r4, [r5, #0x0] + ldr r4, [r4, #0x18] + str r4, [r3, #0x0] + ldr r3, [r5, #0x0] + ldr r3, [r3, #0x1c] + str r3, [r2, #0x0] + ldr r2, [r5, #0x0] + add r2, r2, #0x20 + str r2, [r1, #0x0] + ldmia sp!, {r4-r7,lr} + bx lr +_020DBEAC: + cmp r7, #0x2 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + bl OS_GetLockID + ldr r1, _020DBF10 ; =0x021D6B4C + strh r0, [r1, #0x0] + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DBED8: .word 0x021D6B0C +_020DBEDC: .word 0x04000204 +_020DBEE0: .word 0x02103FE4 +_020DBEE4: .word 0x021D6B28 +_020DBEE8: .word 0x02103FF4 +_020DBEEC: .word 0x02103FE8 +_020DBEF0: .word 0x021D6B14 +_020DBEF4: .word 0x021D6B34 +_020DBEF8: .word 0x021D6B2C +_020DBEFC: .word 0x021D6B18 +_020DBF00: .word 0x021D6B1C +_020DBF04: .word 0x021D6B30 +_020DBF08: .word 0x021D6B24 +_020DBF0C: .word 0x021D6B20 +_020DBF10: .word 0x021D6B4C diff --git a/arm9/asm/CTRDG_flash_AT29LV512.s b/arm9/asm/CTRDG_flash_AT29LV512.s new file mode 100644 index 00000000..6dd4646e --- /dev/null +++ b/arm9/asm/CTRDG_flash_AT29LV512.s @@ -0,0 +1,503 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start CTRDGi_WriteFlashSectorAsyncAT +CTRDGi_WriteFlashSectorAsyncAT: ; 0x020DC5DC + stmdb sp!, {lr} + sub sp, sp, #0x24 + str r1, [sp, #0xc] + strh r0, [sp, #0x20] + ldr r1, _020DC604 ; =CTRDGi_WriteFlashSectorCoreAT + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC604: .word CTRDGi_WriteFlashSectorCoreAT + + arm_func_start CTRDGi_EraseFlashSectorAsyncAT +CTRDGi_EraseFlashSectorAsyncAT: ; 0x020DC608 + stmdb sp!, {lr} + sub sp, sp, #0x24 + mov r2, r1 + strh r0, [sp, #0x20] + ldr r1, _020DC630 ; =CTRDGi_EraseFlashSectorCoreAT + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC630: .word CTRDGi_EraseFlashSectorCoreAT + + arm_func_start CTRDGi_WriteFlashSectorAT +CTRDGi_WriteFlashSectorAT: ; 0x020DC634 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0xc] + bl CTRDGi_WriteFlashSectorCoreAT + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashSectorAT +CTRDGi_EraseFlashSectorAT: + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + bl CTRDGi_EraseFlashSectorCoreAT + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_WriteFlash4KBAsyncAT +CTRDGi_WriteFlash4KBAsyncAT: ; 0x020DC688 + stmdb sp!, {lr} + sub sp, sp, #0x24 + str r1, [sp, #0xc] + strh r0, [sp, #0x20] + ldr r1, _020DC6B0 ; =CTRDGi_WriteFlash4KBCoreAT + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC6B0: .word CTRDGi_WriteFlash4KBCoreAT + + arm_func_start CTRDGi_EraseFlash4KBAsyncAT +CTRDGi_EraseFlash4KBAsyncAT: ; 0x020DC6B4 + stmdb sp!, {lr} + sub sp, sp, #0x24 + mov r2, r1 + strh r0, [sp, #0x20] + ldr r1, _020DC6DC ; =CTRDGi_EraseFlash4KBCoreAT + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC6DC: .word CTRDGi_EraseFlash4KBCoreAT + + arm_func_start CTRDGi_EraseFlashChipAsyncAT +CTRDGi_EraseFlashChipAsyncAT: ; 0x020DC6E0 + stmdb sp!, {lr} + sub sp, sp, #0x24 + ldr r1, _020DC704 ; =CTRDGi_EraseFlashChipCoreAT + mov r2, r0 + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC704: .word CTRDGi_EraseFlashChipCoreAT + + arm_func_start CTRDGi_WriteFlash4KBAT +CTRDGi_WriteFlash4KBAT: ; 0x020DC708 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0xc] + bl CTRDGi_WriteFlash4KBCoreAT + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlash4KBAT +CTRDGi_EraseFlash4KBAT: ; 0x020DC734 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + bl CTRDGi_EraseFlash4KBCoreAT + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashChipAT +CTRDGi_EraseFlashChipAT: ; 0x020DC75C + stmdb sp!, {lr} + sub sp, sp, #0x24 + add r0, sp, #0x0 + bl CTRDGi_EraseFlashChipCoreAT + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_WriteFlash4KBCoreAT +CTRDGi_WriteFlash4KBCoreAT: ; 0x020DC780 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x24 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, [r5, #0x0] + str r0, [r4, #0x0] + ldrh r0, [sp, #0x20] + ldr r7, [sp, #0xc] + cmp r0, #0x10 + addcs sp, sp, #0x24 + ldrhs r0, _020DC85C ; =0x000080FF + ldmcsia sp!, {r4-r9,lr} + bxcs lr + ldr r1, _020DC860 ; =0x0210400C + mov r0, r0, lsl #0x15 + ldr r1, [r1, #0x24] + ldr r4, _020DC864 ; =0x021D6B08 + mov r8, r0, lsr #0x10 + strh r1, [r4, #0x0] + ldrh r0, [r4, #0x0] + cmp r0, #0x0 + beq _020DC84C + ldr r0, _020DC868 ; =0x02104048 + ldr r6, [r0, #0x24] + mov r5, #0x2 +_020DC7F4: + mov r9, r5 +_020DC7F8: + mov r0, r8 + mov r1, r7 + bl CTRDGi_WriteFlashSectorAT + movs r12, r0 + beq _020DC81C + sub r0, r9, #0x1 + mov r0, r0, lsl #0x10 + movs r9, r0, lsr #0x10 + bne _020DC7F8 +_020DC81C: + cmp r12, #0x0 + bne _020DC84C + ldrh r1, [r4, #0x0] + add r0, r8, #0x1 + mov r0, r0, lsl #0x10 + sub r1, r1, r6 + strh r1, [r4, #0x0] + ldrh r1, [r4, #0x0] + add r7, r7, r6 + mov r8, r0, lsr #0x10 + cmp r1, #0x0 + bne _020DC7F4 +_020DC84C: + mov r0, r12 + add sp, sp, #0x24 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020DC85C: .word 0x000080FF +_020DC860: .word 0x0210400C +_020DC864: .word 0x021D6B08 +_020DC868: .word 0x02104048 + + arm_func_start CTRDGi_WriteFlashSectorCoreAT +CTRDGi_WriteFlashSectorCoreAT: ; 0x020DC86C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x24 + mov r5, r0 + add r4, sp, #0x0 + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, _020DC984 ; =0x021D6B0C + ldr r1, [r5, #0x0] + ldrh r0, [r0, #0x0] + str r1, [r4, #0x0] + ldr r4, [sp, #0xc] + bl OS_LockCartridge + ldr r5, _020DC988 ; =0x04000204 + ldr r1, _020DC98C ; =0x021D6B20 + ldrh r0, [r5, #0x0] + ldr r1, [r1, #0x0] + ldrh r2, [r5, #0x0] + ldr r3, [r1, #0x10] + ldr r1, _020DC990 ; =0x02104048 + bic r2, r2, #0x3 + orr r2, r2, r3 + strh r2, [r5, #0x0] + ldr r5, _020DC994 ; =0x04000208 + ldrh lr, [sp, #0x20] + ldrh r12, [r1, #0x28] + ldrh r2, [r5, #0x0] + mov r3, #0x0 + mov lr, lr, lsl r12 + strh r3, [r5, #0x0] + ldr ip, _020DC998 ; =0x0A005555 + mov r5, #0xaa + strb r5, [r12, #0x0] + ldr r3, _020DC99C ; =0x0A002AAA + mov r5, #0x55 + strb r5, [r3, #0x0] + mov r3, #0xa0 + strb r3, [r12, #0x0] + ldr r3, [r1, #0x24] + and r5, r0, #0x3 + cmp r3, #0x0 + add r1, lr, #0xa000000 + beq _020DC92C +_020DC91C: + ldrb r0, [r4], #0x1 + subs r3, r3, #0x1 + strb r0, [r1], #0x1 + bne _020DC91C +_020DC92C: + ldr ip, _020DC994 ; =0x04000208 + ldr r3, _020DC9A0 ; =0x021D6B24 + ldrh r0, [r12, #0x0] + sub r1, r1, #0x1 + mov r0, #0x1 + strh r2, [r12, #0x0] + ldrb r2, [r4, #-0x1] + ldr r3, [r3, #0x0] + blx r3 + ldr r3, _020DC988 ; =0x04000204 + ldr r1, _020DC984 ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r5 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x24 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DC984: .word 0x021D6B0C +_020DC988: .word 0x04000204 +_020DC98C: .word 0x021D6B20 +_020DC990: .word 0x02104048 +_020DC994: .word 0x04000208 +_020DC998: .word 0x0A005555 +_020DC99C: .word 0x0A002AAA +_020DC9A0: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlash4KBCoreAT +CTRDGi_EraseFlash4KBCoreAT: ; 0x020DC9A4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x24 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, [r5, #0x0] + str r0, [r4, #0x0] + ldrh r0, [sp, #0x20] + cmp r0, #0x10 + addcs sp, sp, #0x24 + ldrhs r0, _020DCA54 ; =0x000080FF + ldmcsia sp!, {r4-r7,lr} + bxcs lr + mov r0, r0, lsl #0x15 + mov r5, r0, lsr #0x10 + mov r6, #0x0 + mov r4, #0x2 +_020DC9F4: + mov r7, r4 +_020DC9F8: + mov r0, r5 + bl CTRDGi_EraseFlashSectorAT +_020DCA00: ; 0x020DCA00 + cmp r0, #0x0 + beq _020DCA18 + sub r1, r7, #0x1 + mov r1, r1, lsl #0x10 + movs r7, r1, lsr #0x10 + bne _020DC9F8 +_020DCA18: + add r1, r5, #0x1 + mov r1, r1, lsl #0x10 + cmp r0, #0x0 + mov r5, r1, lsr #0x10 + addne sp, sp, #0x24 + ldmneia sp!, {r4-r7,lr} + bxne lr + add r1, r6, #0x1 + mov r1, r1, lsl #0x10 + mov r6, r1, lsr #0x10 + cmp r6, #0x20 + blo _020DC9F4 + add sp, sp, #0x24 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DCA54: .word 0x000080FF + + arm_func_start CTRDGi_EraseFlashSectorCoreAT +CTRDGi_EraseFlashSectorCoreAT: ; 0x020DCA58 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x24 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, [r5, #0x0] + ldr r1, _020DCB80 ; =0x02104048 + str r0, [r4, #0x0] + ldr r0, _020DCB84 ; =0x021D6B0C + ldrh r2, [sp, #0x20] + ldrh r1, [r1, #0x28] + ldrh r0, [r0, #0x0] + mov r1, r2, lsl r1 + add r5, r1, #0xa000000 + bl OS_LockCartridge + ldr r4, _020DCB88 ; =0x04000204 + ldr r1, _020DCB8C ; =0x021D6B20 + ldrh r0, [r4, #0x0] + ldr r2, [r1, #0x0] + ldrh r1, [r4, #0x0] + ldr r2, [r2, #0x10] + ldr r3, _020DCB90 ; =0x04000208 + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r4, #0x0] + ldrh r2, [r3, #0x0] + mov r1, #0x0 + ldr r4, _020DCB94 ; =0x0A005555 + strh r1, [r3, #0x0] + mov r3, #0xaa + strb r3, [r4, #0x0] + ldr r1, _020DCB98 ; =0x0A002AAA + mov r3, #0x55 + strb r3, [r1, #0x0] + mov r3, #0xa0 + strb r3, [r4, #0x0] + ldr r1, _020DCB80 ; =0x02104048 + and r4, r0, #0x3 + ldr r1, [r1, #0x24] + cmp r1, #0x0 + beq _020DCB18 + mov r0, #0xff +_020DCB0C: + strb r0, [r5], #0x1 + subs r1, r1, #0x1 + bne _020DCB0C +_020DCB18: + ldr ip, _020DCB90 ; =0x04000208 + ldr r3, _020DCB9C ; =0x021D6B24 + ldrh r0, [r12, #0x0] + sub r1, r5, #0x1 + strh r2, [r12, #0x0] + ldr r3, [r3, #0x0] + mov r0, #0x1 + mov r2, #0xff + blx r3 + ldr r2, _020DCB88 ; =0x04000204 + movs r5, r0 + ldrh r1, [r2, #0x0] + andne r0, r5, #0xff00 + orrne r0, r0, #0x2 + movne r0, r0, lsl #0x10 + bic r1, r1, #0x3 + movne r5, r0, lsr #0x10 + orr r1, r1, r4 + ldr r0, _020DCB84 ; =0x021D6B0C + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + bl OS_UnlockCartridge2 + mov r0, r5 + add sp, sp, #0x24 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DCB80: .word 0x02104048 +_020DCB84: .word 0x021D6B0C +_020DCB88: .word 0x04000204 +_020DCB8C: .word 0x021D6B20 +_020DCB90: .word 0x04000208 +_020DCB94: .word 0x0A005555 +_020DCB98: .word 0x0A002AAA +_020DCB9C: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlashChipCoreAT +CTRDGi_EraseFlashChipCoreAT: ; 0x020DCBA0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020DCC7C ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r4, _020DCC80 ; =0x04000204 + ldr r0, _020DCC84 ; =0x021D6B20 + ldrh r3, [r4, #0x0] + ldr r0, [r0, #0x0] + ldrh r1, [r4, #0x0] + ldr r2, [r0, #0x10] + ldr r0, _020DCC88 ; =0x04000208 + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r4, #0x0] + ldrh r4, [r0, #0x0] + mov r2, #0x0 + ldr r1, _020DCC8C ; =0x021D6B38 + strh r2, [r0, #0x0] + ldr lr, _020DCC90 ; =0x0A005555 + str r4, [r1, #0x0] + mov r5, #0xaa + ldr r4, _020DCC94 ; =0x0A002AAA + strb r5, [lr, #0x0] + mov r12, #0x55 + strb r12, [r4, #0x0] + mov r2, #0x80 + strb r2, [lr, #0x0] + strb r5, [lr, #0x0] + strb r12, [r4, #0x0] + mov r2, #0x10 + strb r2, [lr, #0x0] + ldrh r2, [r0, #0x0] + ldr r2, [r1, #0x0] + ldr r1, _020DCC98 ; =0x021D6B24 + strh r2, [r0, #0x0] + ldr r4, [r1, #0x0] + mov r0, #0x3 + mov r1, #0xa000000 + mov r2, #0xff + and r5, r3, #0x3 + blx r4 + ldr r3, _020DCC80 ; =0x04000204 + ldr r1, _020DCC7C ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r5 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DCC7C: .word 0x021D6B0C +_020DCC80: .word 0x04000204 +_020DCC84: .word 0x021D6B20 +_020DCC88: .word 0x04000208 +_020DCC8C: .word 0x021D6B38 +_020DCC90: .word 0x0A005555 +_020DCC94: .word 0x0A002AAA +_020DCC98: .word 0x021D6B24 diff --git a/arm9/asm/CTRDG_flash_LE39FW512.s b/arm9/asm/CTRDG_flash_LE39FW512.s new file mode 100644 index 00000000..05e69476 --- /dev/null +++ b/arm9/asm/CTRDG_flash_LE39FW512.s @@ -0,0 +1,457 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start CTRDGi_WriteFlashSectorAsyncLE +CTRDGi_WriteFlashSectorAsyncLE: ; 0x020DCC9C + stmdb sp!, {lr} + sub sp, sp, #0x24 + str r1, [sp, #0xc] + strh r0, [sp, #0x20] + ldr r1, _020DCCC4 ; =CTRDGi_WriteFlashSectorCoreLE + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DCCC4: .word CTRDGi_WriteFlashSectorCoreLE + + arm_func_start CTRDGi_EraseFlashSectorAsyncLE +CTRDGi_EraseFlashSectorAsyncLE: ; 0x020DCCC8 + stmdb sp!, {lr} + sub sp, sp, #0x24 + mov r2, r1 + strh r0, [sp, #0x20] + ldr r1, _020DCCF0 ; =CTRDGi_EraseFlashSectorCoreLE + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DCCF0: .word CTRDGi_EraseFlashSectorCoreLE + + arm_func_start CTRDGi_EraseFlashChipAsyncLE +CTRDGi_EraseFlashChipAsyncLE: ; 0x020DCCF4 + stmdb sp!, {lr} + sub sp, sp, #0x24 + ldr r1, _020DCD18 ; =CTRDGi_EraseFlashChipCoreLE + mov r2, r0 + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DCD18: .word CTRDGi_EraseFlashChipCoreLE + + arm_func_start CTRDGi_WriteFlashSectorLE +CTRDGi_WriteFlashSectorLE: ; 0x020DCD1C + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0xc] + bl CTRDGi_WriteFlashSectorCoreLE + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashSectorLE +CTRDGi_EraseFlashSectorLE: ; 0x020DCD48 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + bl CTRDGi_EraseFlashSectorCoreLE + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashChipLE +CTRDGi_EraseFlashChipLE: ; 0x020DCD70 + stmdb sp!, {lr} + sub sp, sp, #0x24 + add r0, sp, #0x0 + bl CTRDGi_EraseFlashChipCoreLE + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_VerifyFlashErase +CTRDGi_VerifyFlashErase: ; 0x020DCD94 + stmdb sp!, {r4-r6,lr} + ldr r2, _020DCE14 ; =0x021D6B0C + mov r4, r0 + ldrh r0, [r2, #0x0] + mov r5, r1 + bl OS_LockCartridge + ldr ip, _020DCE18 ; =0x04000204 + ldr r0, _020DCE1C ; =0x021D6B20 + ldrh r3, [r12, #0x0] + ldr r0, [r0, #0x0] + ldrh r1, [r12, #0x0] + ldr r2, [r0, #0x10] + mov r0, r4 + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r12, #0x0] + and r6, r3, #0x3 + mov r4, #0x0 + blx r5 + cmp r0, #0x0 + ldr r2, _020DCE18 ; =0x04000204 + ldr r0, _020DCE14 ; =0x021D6B0C + ldrh r1, [r2, #0x0] + ldrne r4, _020DCE20 ; =0x00008004 + bic r1, r1, #0x3 + orr r1, r1, r6 + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020DCE14: .word 0x021D6B0C +_020DCE18: .word 0x04000204 +_020DCE1C: .word 0x021D6B20 +_020DCE20: .word 0x00008004 + + arm_func_start CTRDGi_VerifyFlashCoreFF +CTRDGi_VerifyFlashCoreFF: ; 0x020DCE24 + ldr r1, _020DCE54 ; =0x021D6B20 + ldr r1, [r1, #0x0] + ldr r2, [r1, #0x4] + cmp r2, #0x0 + beq _020DCE4C +_020DCE38: + ldrb r1, [r0], #0x1 + cmp r1, #0xff + bne _020DCE4C + subs r2, r2, #0x1 + bne _020DCE38 +_020DCE4C: + mov r0, r2 + bx lr + .balign 4 +_020DCE54: .word 0x021D6B20 + + arm_func_start CTRDGi_WriteFlashSectorCoreLE +CTRDGi_WriteFlashSectorCoreLE: ; 0x020DCE58 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x24 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, [r5, #0x0] + str r0, [r4, #0x0] + ldrh r7, [sp, #0x20] + ldr r6, [sp, #0xc] + cmp r7, #0x10 + addcs sp, sp, #0x24 + ldrhs r0, _020DD018 ; =0x000080FF + ldmcsia sp!, {r4-r9,lr} + bxcs lr + ldr r0, _020DD01C ; =0x021D6B20 + mov r9, #0x0 + ldr r0, [r0, #0x0] + ldrh r0, [r0, #0x8] + mov r0, r7, lsl r0 + add r4, r0, #0xa000000 + ldr r5, _020DD020 ; =CTRDGi_VerifyFlashCoreFF +_020DCEB8: + mov r0, r7 + bl CTRDGi_EraseFlashSectorLE + movs r8, r0 + bne _020DCEE0 + mov r0, r4 + mov r1, r5 + bl CTRDGi_VerifyFlashErase + mov r0, r0, lsl #0x10 + movs r8, r0, lsr #0x10 + beq _020DCF04 +_020DCEE0: + add r0, r9, #0x1 + mov r0, r0, lsl #0x10 + cmp r9, #0x50 + mov r9, r0, lsr #0x10 + bne _020DCEB8 + add sp, sp, #0x24 + mov r0, r8 + ldmia sp!, {r4-r9,lr} + bx lr +_020DCF04: + mov r5, #0x1 + cmp r9, #0x0 + movne r5, #0x6 + cmp r5, #0x1 + mov r9, #0x1 + blo _020DCF38 +_020DCF1C: + mov r0, r7 + bl CTRDGi_EraseFlashSectorLE + add r0, r9, #0x1 + mov r0, r0, lsl #0x10 + mov r9, r0, lsr #0x10 + cmp r9, r5 + bls _020DCF1C +_020DCF38: + ldr r0, _020DD024 ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r5, _020DD028 ; =0x04000204 + ldr r1, _020DD01C ; =0x021D6B20 + ldrh r0, [r5, #0x0] + ldr r3, [r1, #0x0] + ldrh r2, [r5, #0x0] + ldr r3, [r3, #0x10] + ldr r7, _020DD02C ; =0x021D6B08 + bic r2, r2, #0x3 + orr r2, r2, r3 + strh r2, [r5, #0x0] + ldr r1, [r1, #0x0] + ldr sb, _020DD030 ; =0x04000208 + ldr r1, [r1, #0x4] + mov r2, #0x0 + strh r1, [r7, #0x0] + ldrh r3, [r9, #0x0] + ldr r1, _020DD034 ; =0x021D6B38 + and r5, r0, #0x3 + strh r2, [r9, #0x0] + ldrh r0, [r7, #0x0] + str r3, [r1, #0x0] + cmp r0, #0x0 + beq _020DCFD4 +_020DCFA0: + mov r0, r6 + mov r1, r4 + bl CTRDGi_ProgramFlashByteLE + movs r8, r0 + bne _020DCFD4 + ldrh r0, [r7, #0x0] + add r6, r6, #0x1 + add r4, r4, #0x1 + sub r0, r0, #0x1 + strh r0, [r7, #0x0] + ldrh r0, [r7, #0x0] + cmp r0, #0x0 + bne _020DCFA0 +_020DCFD4: + ldr r3, _020DD030 ; =0x04000208 + ldr r0, _020DD034 ; =0x021D6B38 + ldrh r1, [r3, #0x0] + ldr r0, [r0, #0x0] + ldr r2, _020DD028 ; =0x04000204 + strh r0, [r3, #0x0] + ldrh r1, [r2, #0x0] + ldr r0, _020DD024 ; =0x021D6B0C + bic r1, r1, #0x3 + orr r1, r1, r5 + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + bl OS_UnlockCartridge2 + mov r0, r8 + add sp, sp, #0x24 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020DD018: .word 0x000080FF +_020DD01C: .word 0x021D6B20 +_020DD020: .word CTRDGi_VerifyFlashCoreFF +_020DD024: .word 0x021D6B0C +_020DD028: .word 0x04000204 +_020DD02C: .word 0x021D6B08 +_020DD030: .word 0x04000208 +_020DD034: .word 0x021D6B38 + + arm_func_start CTRDGi_ProgramFlashByteLE +CTRDGi_ProgramFlashByteLE: ; 0x020DD038 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr ip, _020DD08C ; =0x0A005555 + mov r3, #0xaa + ldr r2, _020DD090 ; =0x0A002AAA + strb r3, [r12, #0x0] + mov r3, #0x55 + mov lr, r0 + strb r3, [r2, #0x0] + mov r0, #0xa0 + strb r0, [r12, #0x0] + ldrb r2, [lr, #0x0] + ldr r3, _020DD094 ; =0x021D6B24 + mov r0, #0x1 + strb r2, [r1, #0x0] + ldrb r2, [lr, #0x0] + ldr r3, [r3, #0x0] + blx r3 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DD08C: .word 0x0A005555 +_020DD090: .word 0x0A002AAA +_020DD094: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlashSectorCoreLE +CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x28 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, [r5, #0x0] + str r0, [r4, #0x0] + ldrh r4, [sp, #0x20] + cmp r4, #0x10 + addcs sp, sp, #0x28 + ldrhs r0, _020DD1B8 ; =0x000080FF + ldmcsia sp!, {r4-r6,lr} + bxcs lr + ldr r0, _020DD1BC ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r6, _020DD1C0 ; =0x04000204 + ldr r1, _020DD1C4 ; =0x021D6B20 + ldrh r3, [r6, #0x0] + ldr r0, [r1, #0x0] + ldrh r2, [r6, #0x0] + ldr r5, [r0, #0x10] + ldr r0, _020DD1C8 ; =0x04000208 + bic r2, r2, #0x3 + orr r2, r2, r5 + strh r2, [r6, #0x0] + ldr r1, [r1, #0x0] + ldrh r5, [r0, #0x0] + ldrh r12, [r1, #0x8] + mov r1, #0x0 + ldr r2, _020DD1CC ; =0x021D6B38 + strh r1, [r0, #0x0] + mov r6, r4, lsl r12 + ldr lr, _020DD1D0 ; =0x0A005555 + str r5, [r2, #0x0] + mov r5, #0xaa + ldr r4, _020DD1D4 ; =0x0A002AAA + strb r5, [lr, #0x0] + mov r12, #0x55 + strb r12, [r4, #0x0] + mov r1, #0x80 + strb r1, [lr, #0x0] + strb r5, [lr, #0x0] + strb r12, [r4, #0x0] + add r1, r6, #0xa000000 + mov r4, #0x30 + strb r4, [r1, #0x0] + ldrh r4, [r0, #0x0] + ldr r4, [r2, #0x0] + ldr r2, _020DD1D8 ; =0x021D6B24 + strh r4, [r0, #0x0] + ldr r4, [r2, #0x0] + mov r0, #0x2 + mov r2, #0xff + and r5, r3, #0x3 + blx r4 + ldr r3, _020DD1C0 ; =0x04000204 + ldr r1, _020DD1BC ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r5 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x28 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020DD1B8: .word 0x000080FF +_020DD1BC: .word 0x021D6B0C +_020DD1C0: .word 0x04000204 +_020DD1C4: .word 0x021D6B20 +_020DD1C8: .word 0x04000208 +_020DD1CC: .word 0x021D6B38 +_020DD1D0: .word 0x0A005555 +_020DD1D4: .word 0x0A002AAA +_020DD1D8: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlashChipCoreLE +CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020DD2B8 ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r4, _020DD2BC ; =0x04000204 + ldr r0, _020DD2C0 ; =0x021D6B20 + ldrh r3, [r4, #0x0] + ldr r0, [r0, #0x0] + ldrh r1, [r4, #0x0] + ldr r2, [r0, #0x10] + ldr r0, _020DD2C4 ; =0x04000208 + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r4, #0x0] + ldrh r4, [r0, #0x0] + mov r2, #0x0 + ldr r1, _020DD2C8 ; =0x021D6B38 + strh r2, [r0, #0x0] + ldr lr, _020DD2CC ; =0x0A005555 + str r4, [r1, #0x0] + mov r5, #0xaa + ldr r4, _020DD2D0 ; =0x0A002AAA + strb r5, [lr, #0x0] + mov r12, #0x55 + strb r12, [r4, #0x0] + mov r2, #0x80 + strb r2, [lr, #0x0] + strb r5, [lr, #0x0] + strb r12, [r4, #0x0] + mov r2, #0x10 + strb r2, [lr, #0x0] + ldrh r2, [r0, #0x0] + ldr r2, [r1, #0x0] + ldr r1, _020DD2D4 ; =0x021D6B24 + strh r2, [r0, #0x0] + ldr r4, [r1, #0x0] + mov r0, #0x3 + mov r1, #0xa000000 + mov r2, #0xff + and r5, r3, #0x3 + blx r4 + ldr r3, _020DD2BC ; =0x04000204 + ldr r1, _020DD2B8 ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r5 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DD2B8: .word 0x021D6B0C +_020DD2BC: .word 0x04000204 +_020DD2C0: .word 0x021D6B20 +_020DD2C4: .word 0x04000208 +_020DD2C8: .word 0x021D6B38 +_020DD2CC: .word 0x0A005555 +_020DD2D0: .word 0x0A002AAA +_020DD2D4: .word 0x021D6B24 diff --git a/arm9/asm/CTRDG_flash_MX29L010.s b/arm9/asm/CTRDG_flash_MX29L010.s new file mode 100644 index 00000000..4cfb8f0b --- /dev/null +++ b/arm9/asm/CTRDG_flash_MX29L010.s @@ -0,0 +1,401 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start CTRDGi_WriteFlashSectorAsyncMX +CTRDGi_WriteFlashSectorAsyncMX: ; 0x020DD2D8 + stmdb sp!, {lr} + sub sp, sp, #0x24 + str r1, [sp, #0xc] + strh r0, [sp, #0x20] + ldr r1, _020DD300 ; =CTRDGi_WriteFlashSectorCoreMX + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DD300: .word CTRDGi_WriteFlashSectorCoreMX + + arm_func_start CTRDGi_EraseFlashSectorAsyncMX +CTRDGi_EraseFlashSectorAsyncMX: ; 0x020DD304 + stmdb sp!, {lr} + sub sp, sp, #0x24 + mov r2, r1 + strh r0, [sp, #0x20] + ldr r1, _020DD32C ; =CTRDGi_EraseFlashSectorCoreMX + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DD32C: .word CTRDGi_EraseFlashSectorCoreMX + + arm_func_start CTRDGi_EraseFlashChipAsyncMX +CTRDGi_EraseFlashChipAsyncMX: ; 0x020DD330 + stmdb sp!, {lr} + sub sp, sp, #0x24 + ldr r1, _020DD354 ; =CTRDGi_EraseFlashChipCoreMX + mov r2, r0 + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DD354: .word CTRDGi_EraseFlashChipCoreMX + + arm_func_start CTRDGi_WriteFlashSectorMX +CTRDGi_WriteFlashSectorMX: ; 0x020DD358 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0xc] + bl CTRDGi_WriteFlashSectorCoreMX + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashSectorMX +CTRDGi_EraseFlashSectorMX: ; 0x020DD384 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + bl CTRDGi_EraseFlashSectorCoreMX + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_EraseFlashChipMX +CTRDGi_EraseFlashChipMX: ; 0x020DD3AC + stmdb sp!, {lr} + sub sp, sp, #0x24 + add r0, sp, #0x0 + bl CTRDGi_EraseFlashChipCoreMX + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_WriteFlashSectorCoreMX +CTRDGi_WriteFlashSectorCoreMX: ; 0x020DD3D0 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x28 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, _020DD540 ; =0x021D6B20 + ldr r1, [r5, #0x0] + ldr r0, [r0, #0x0] + str r1, [r4, #0x0] + ldrh r5, [sp, #0x20] + ldrh r0, [r0, #0xa] + ldr r4, [sp, #0xc] + cmp r5, r0 + addcs sp, sp, #0x28 + ldrhs r0, _020DD544 ; =0x000080FF + ldmcsia sp!, {r4-r8,lr} + bxcs lr + mov r0, r5 + bl CTRDGi_EraseFlashSectorMX + movs r6, r0 + addne sp, sp, #0x28 + ldmneia sp!, {r4-r8,lr} + bxne lr + ldr r0, _020DD548 ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r7, _020DD54C ; =0x04000204 + ldr r0, _020DD540 ; =0x021D6B20 + ldrh r3, [r7, #0x0] + ldr r2, [r0, #0x0] + ldrh r1, [r7, #0x0] + mov r0, r5, lsl #0xc + ldr r2, [r2, #0x10] + bic r1, r1, #0x3 + orr r1, r1, r2 + mov r0, r0, lsr #0x10 + strh r1, [r7, #0x0] + and r7, r3, #0x3 + bl CTRDGi_SetFlashBankMx + ldr r0, _020DD540 ; =0x021D6B20 + and r1, r5, #0xf + ldr r3, [r0, #0x0] + mov r0, r1, lsl #0x10 + ldr r2, [r3, #0x4] + ldr r8, _020DD550 ; =0x021D6B08 + ldr r1, _020DD554 ; =0x04000208 + strh r2, [r8, #0x0] + ldrh r3, [r3, #0x8] + mov r5, r0, lsr #0x10 + ldrh r2, [r1, #0x0] + mov r0, #0x0 + mov r3, r5, lsl r3 + strh r0, [r1, #0x0] + ldrh r1, [r8, #0x0] + ldr r0, _020DD558 ; =0x021D6B38 + add r5, r3, #0xa000000 + str r2, [r0, #0x0] + cmp r1, #0x0 + beq _020DD4FC +_020DD4C8: + mov r0, r4 + mov r1, r5 + bl CTRDGi_ProgramFlashByteMX + movs r6, r0 + bne _020DD4FC + ldrh r0, [r8, #0x0] + add r4, r4, #0x1 + add r5, r5, #0x1 + sub r0, r0, #0x1 + strh r0, [r8, #0x0] + ldrh r0, [r8, #0x0] + cmp r0, #0x0 + bne _020DD4C8 +_020DD4FC: + ldr r3, _020DD554 ; =0x04000208 + ldr r0, _020DD558 ; =0x021D6B38 + ldrh r1, [r3, #0x0] + ldr r0, [r0, #0x0] + ldr r2, _020DD54C ; =0x04000204 + strh r0, [r3, #0x0] + ldrh r1, [r2, #0x0] + ldr r0, _020DD548 ; =0x021D6B0C + bic r1, r1, #0x3 + orr r1, r1, r7 + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + bl OS_UnlockCartridge2 + mov r0, r6 + add sp, sp, #0x28 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020DD540: .word 0x021D6B20 +_020DD544: .word 0x000080FF +_020DD548: .word 0x021D6B0C +_020DD54C: .word 0x04000204 +_020DD550: .word 0x021D6B08 +_020DD554: .word 0x04000208 +_020DD558: .word 0x021D6B38 + + arm_func_start CTRDGi_ProgramFlashByteMX +CTRDGi_ProgramFlashByteMX: ; 0x020DD55C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr ip, _020DD5B0 ; =0x0A005555 + mov r3, #0xaa + ldr r2, _020DD5B4 ; =0x0A002AAA + strb r3, [r12, #0x0] + mov r3, #0x55 + mov lr, r0 + strb r3, [r2, #0x0] + mov r0, #0xa0 + strb r0, [r12, #0x0] + ldrb r2, [lr, #0x0] + ldr r3, _020DD5B8 ; =0x021D6B24 + mov r0, #0x1 + strb r2, [r1, #0x0] + ldrb r2, [lr, #0x0] + ldr r3, [r3, #0x0] + blx r3 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DD5B0: .word 0x0A005555 +_020DD5B4: .word 0x0A002AAA +_020DD5B8: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlashSectorCoreMX +CTRDGi_EraseFlashSectorCoreMX: ; 0x020DD5BC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x34 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x10 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, _020DD748 ; =0x021D6B20 + ldr r1, [r5, #0x0] + ldr r0, [r0, #0x0] + str r1, [r4, #0x0] + ldrh r4, [sp, #0x30] + ldrh r0, [r0, #0xa] + cmp r4, r0 + addcs sp, sp, #0x34 + ldrhs r0, _020DD74C ; =0x000080FF + ldmcsia sp!, {r4-r11,lr} + bxcs lr + ldr r0, _020DD750 ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r5, _020DD754 ; =0x04000204 + ldr r0, _020DD748 ; =0x021D6B20 + ldrh r3, [r5, #0x0] + ldr r2, [r0, #0x0] + ldrh r1, [r5, #0x0] + mov r0, r4, lsl #0xc + ldr r2, [r2, #0x10] + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r5, #0x0] + and r1, r3, #0x3 + mov r0, r0, lsr #0x10 + str r1, [sp, #0x0] + bl CTRDGi_SetFlashBankMx + and r0, r4, #0xf + mov r0, r0, lsl #0x10 + mov r9, r0, lsr #0x10 + mov r0, #0x2 + mov r10, #0x0 + str r0, [sp, #0x8] + mov r0, #0xff + ldr r8, _020DD758 ; =0x04000208 + mov r11, r10 + mov r7, #0xaa + mov r6, #0x55 + mov r5, #0x80 + mov r4, #0x30 + str r0, [sp, #0xc] +_020DD684: + ldr r0, _020DD748 ; =0x021D6B20 + ldrh r12, [r8, #0x0] + ldr r0, [r0, #0x0] + ldr r3, _020DD75C ; =0x021D6B38 + ldrh r1, [r0, #0x8] + ldr r0, [sp, #0x8] + ldr r2, [sp, #0xc] + strh r11, [r8, #0x0] + str r12, [r3, #0x0] + ldr r3, _020DD760 ; =0x0A005555 + mov r1, r9, lsl r1 + strb r7, [r3, #0x0] + ldr r3, _020DD764 ; =0x0A002AAA + add r1, r1, #0xa000000 + strb r6, [r3, #0x0] + ldr r3, _020DD760 ; =0x0A005555 + strb r5, [r3, #0x0] + strb r7, [r3, #0x0] + ldr r3, _020DD764 ; =0x0A002AAA + strb r6, [r3, #0x0] + strb r4, [r1, #0x0] + ldrh r3, [r8, #0x0] + ldr r3, _020DD75C ; =0x021D6B38 + ldr r3, [r3, #0x0] + strh r3, [r8, #0x0] + ldr r3, _020DD768 ; =0x021D6B24 + ldr r3, [r3, #0x0] + blx r3 + str r0, [sp, #0x4] + ands r0, r0, #0xa000 + beq _020DD714 + cmp r10, #0x0 + addeq r0, r10, #0x1 + moveq r0, r0, lsl #0x10 + moveq r10, r0, lsr #0x10 + beq _020DD684 +_020DD714: + ldr r2, _020DD754 ; =0x04000204 + ldr r1, _020DD750 ; =0x021D6B0C + ldrh r0, [r2, #0x0] + bic r3, r0, #0x3 + ldr r0, [sp, #0x0] + orr r0, r3, r0 + strh r0, [r2, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + ldr r0, [sp, #0x4] + add sp, sp, #0x34 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020DD748: .word 0x021D6B20 +_020DD74C: .word 0x000080FF +_020DD750: .word 0x021D6B0C +_020DD754: .word 0x04000204 +_020DD758: .word 0x04000208 +_020DD75C: .word 0x021D6B38 +_020DD760: .word 0x0A005555 +_020DD764: .word 0x0A002AAA +_020DD768: .word 0x021D6B24 + + arm_func_start CTRDGi_EraseFlashChipCoreMX +CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020DD848 ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r4, _020DD84C ; =0x04000204 + ldr r0, _020DD850 ; =0x021D6B20 + ldrh r3, [r4, #0x0] + ldr r0, [r0, #0x0] + ldrh r1, [r4, #0x0] + ldr r2, [r0, #0x10] + ldr r0, _020DD854 ; =0x04000208 + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r4, #0x0] + ldrh r4, [r0, #0x0] + mov r2, #0x0 + ldr r1, _020DD858 ; =0x021D6B38 + strh r2, [r0, #0x0] + ldr lr, _020DD85C ; =0x0A005555 + str r4, [r1, #0x0] + mov r5, #0xaa + ldr r4, _020DD860 ; =0x0A002AAA + strb r5, [lr, #0x0] + mov r12, #0x55 + strb r12, [r4, #0x0] + mov r2, #0x80 + strb r2, [lr, #0x0] + strb r5, [lr, #0x0] + strb r12, [r4, #0x0] + mov r2, #0x10 + strb r2, [lr, #0x0] + ldrh r2, [r0, #0x0] + ldr r2, [r1, #0x0] + ldr r1, _020DD864 ; =0x021D6B24 + strh r2, [r0, #0x0] + ldr r4, [r1, #0x0] + mov r0, #0x3 + mov r1, #0xa000000 + mov r2, #0xff + and r5, r3, #0x3 + blx r4 + ldr r3, _020DD84C ; =0x04000204 + ldr r1, _020DD848 ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r5 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DD848: .word 0x021D6B0C +_020DD84C: .word 0x04000204 +_020DD850: .word 0x021D6B20 +_020DD854: .word 0x04000208 +_020DD858: .word 0x021D6B38 +_020DD85C: .word 0x0A005555 +_020DD860: .word 0x0A002AAA +_020DD864: .word 0x021D6B24 diff --git a/arm9/asm/CTRDG_flash_MX29L512.s b/arm9/asm/CTRDG_flash_MX29L512.s new file mode 100644 index 00000000..7cc4a1a7 --- /dev/null +++ b/arm9/asm/CTRDG_flash_MX29L512.s @@ -0,0 +1,118 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start CTRDGi_WriteFlashSectorAsyncMX5 +CTRDGi_WriteFlashSectorAsyncMX5: ; 0x020DD868 + stmdb sp!, {lr} + sub sp, sp, #0x24 + str r1, [sp, #0xc] + strh r0, [sp, #0x20] + ldr r1, _020DD890 ; =CTRDGi_WriteFlashSectorCoreMX5 + add r0, sp, #0x0 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DD890: .word CTRDGi_WriteFlashSectorCoreMX5 + + arm_func_start CTRDGi_WriteFlashSectorMX5 +CTRDGi_WriteFlashSectorMX5: ; 0x020DD894 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0xc] + bl CTRDGi_WriteFlashSectorCoreMX5 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_WriteFlashSectorCoreMX5 +CTRDGi_WriteFlashSectorCoreMX5: ; 0x020DD8C0 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x28 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, _020DD9E8 ; =0x021D6B20 + ldr r1, [r5, #0x0] + ldr r0, [r0, #0x0] + str r1, [r4, #0x0] + ldrh r5, [sp, #0x20] + ldrh r0, [r0, #0xa] + ldr r4, [sp, #0xc] + cmp r5, r0 + addcs sp, sp, #0x28 + ldrhs r0, _020DD9EC ; =0x000080FF + ldmcsia sp!, {r4-r8,lr} + bxcs lr + mov r0, r5 + bl CTRDGi_EraseFlashSectorLE + movs r6, r0 + addne sp, sp, #0x28 + ldmneia sp!, {r4-r8,lr} + bxne lr + ldr r0, _020DD9F0 ; =0x021D6B0C + ldrh r0, [r0, #0x0] + bl OS_LockCartridge + ldr r7, _020DD9F4 ; =0x04000204 + ldr r0, _020DD9E8 ; =0x021D6B20 + ldrh r3, [r7, #0x0] + ldr r2, [r0, #0x0] + ldrh r1, [r7, #0x0] + ldr r2, [r2, #0x10] + ldr r8, _020DD9F8 ; =0x021D6B08 + bic r1, r1, #0x3 + orr r1, r1, r2 + strh r1, [r7, #0x0] + ldr r1, [r0, #0x0] + and r7, r3, #0x3 + ldr r0, [r1, #0x4] + strh r0, [r8, #0x0] + ldrh r1, [r1, #0x8] + ldrh r0, [r8, #0x0] + mov r1, r5, lsl r1 + cmp r0, #0x0 + add r5, r1, #0xa000000 + beq _020DD9B8 +_020DD984: + mov r0, r4 + mov r1, r5 + bl CTRDGi_ProgramFlashByteLE + movs r6, r0 + bne _020DD9B8 + ldrh r0, [r8, #0x0] + add r4, r4, #0x1 + add r5, r5, #0x1 + sub r0, r0, #0x1 + strh r0, [r8, #0x0] + ldrh r0, [r8, #0x0] + cmp r0, #0x0 + bne _020DD984 +_020DD9B8: + ldr r2, _020DD9F4 ; =0x04000204 + ldr r0, _020DD9F0 ; =0x021D6B0C + ldrh r1, [r2, #0x0] + bic r1, r1, #0x3 + orr r1, r1, r7 + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + bl OS_UnlockCartridge2 + mov r0, r6 + add sp, sp, #0x28 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020DD9E8: .word 0x021D6B20 +_020DD9EC: .word 0x000080FF +_020DD9F0: .word 0x021D6B0C +_020DD9F4: .word 0x04000204 +_020DD9F8: .word 0x021D6B08 diff --git a/arm9/asm/CTRDG_flash_common.s b/arm9/asm/CTRDG_flash_common.s new file mode 100644 index 00000000..1d144d73 --- /dev/null +++ b/arm9/asm/CTRDG_flash_common.s @@ -0,0 +1,517 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start CTRDG_WriteAndVerifyAgbFlashAsync +CTRDG_WriteAndVerifyAgbFlashAsync: ; 0x020DBF14 + stmdb sp!, {lr} + sub sp, sp, #0x24 + str r1, [sp, #0xc] + strh r0, [sp, #0x20] + str r2, [sp, #0x18] + ldr r1, _020DBF44 ; =CTRDGi_WriteAndVerifyAgbFlashSectorCore + add r0, sp, #0x0 + mov r2, r3 + bl CTRDGi_SetTask + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DBF44: .word CTRDGi_WriteAndVerifyAgbFlashSectorCore + + arm_func_start CTRDG_VerifyAgbFlash +CTRDG_VerifyAgbFlash: + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0xc] + str r2, [sp, #0x18] + bl CTRDGi_VerifyAgbFlashCore + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDG_WriteAgbFlashSector +CTRDG_WriteAgbFlashSector: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020DBF90 ; =0x021D6B14 + ldr r2, [r2, #0x0] + blx r2 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DBF90: .word 0x021D6B14 + + arm_func_start CTRDG_ReadAgbFlash +CTRDG_ReadAgbFlash: ; 0x020DBF94 + stmdb sp!, {lr} + sub sp, sp, #0x24 + strh r0, [sp, #0x20] + add r0, sp, #0x0 + str r1, [sp, #0x14] + str r2, [sp, #0x1c] + str r3, [sp, #0x18] + bl CTRDGi_ReadAgbFlashCore + add sp, sp, #0x24 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_WriteAndVerifyAgbFlashSectorCore +CTRDGi_WriteAndVerifyAgbFlashSectorCore: ; 0x020DBFC0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x24 + mov r4, r0 + ldmia r4!, {r0-r3} + add r12, sp, #0x0 + stmia r12!, {r0-r3} + ldmia r4!, {r0-r3} + stmia r12!, {r0-r3} + ldr r0, [r4, #0x0] + mov r7, #0x0 + str r0, [r12, #0x0] + ldrh r6, [sp, #0x20] + ldr r5, [sp, #0xc] + ldr r4, [sp, #0x18] +_020DBFF8: + mov r0, r6 + mov r1, r5 + bl CTRDG_WriteAgbFlashSector +_020DC004: ; 0x020DC004 + cmp r0, #0x0 + bne _020DC02C + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl CTRDG_VerifyAgbFlash +_020DC01C: ; 0x020DC01C + cmp r0, #0x0 + addeq sp, sp, #0x24 + ldmeqia sp!, {r4-r7,lr} + bxeq lr +_020DC02C: + add r1, r7, #0x1 + mov r1, r1, lsl #0x10 + mov r7, r1, lsr #0x10 + cmp r7, #0x3 + blo _020DBFF8 + add sp, sp, #0x24 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start CTRDGi_VerifyAgbFlashCore +CTRDGi_VerifyAgbFlashCore: ; 0x020DC04C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x24 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, _020DC128 ; =0x021D6B0C + ldr r1, [r5, #0x0] + ldrh r0, [r0, #0x0] + str r1, [r4, #0x0] + ldrh r6, [sp, #0x20] + ldr r5, [sp, #0xc] + ldr r4, [sp, #0x18] + bl OS_LockCartridge + ldr r3, _020DC12C ; =0x04000204 + ldr r0, _020DC130 ; =0x021D6B20 + ldrh r2, [r3, #0x0] + ldrh r1, [r3, #0x0] + and r7, r2, #0x3 + bic r1, r1, #0x3 + orr r1, r1, #0x3 + strh r1, [r3, #0x0] + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x20000 + bne _020DC0D4 + mov r0, r6, lsl #0xc + mov r0, r0, lsr #0x10 + bl CTRDGi_SetFlashBankMx + and r0, r6, #0xf + mov r0, r0, lsl #0x10 + mov r6, r0, lsr #0x10 +_020DC0D4: + ldr r1, _020DC130 ; =0x021D6B20 + mov r0, r5 + ldr r1, [r1, #0x0] + mov r2, r4 + ldrh r1, [r1, #0x8] + mov r1, r6, lsl r1 + add r1, r1, #0xa000000 + bl CTRDGi_VerifyFlashSectorCore + ldr r3, _020DC12C ; =0x04000204 + ldr r1, _020DC128 ; =0x021D6B0C + ldrh r2, [r3, #0x0] + mov r4, r0 + bic r0, r2, #0x3 + orr r0, r0, r7 + strh r0, [r3, #0x0] + ldrh r0, [r1, #0x0] + bl OS_UnlockCartridge2 + mov r0, r4 + add sp, sp, #0x24 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DC128: .word 0x021D6B0C +_020DC12C: .word 0x04000204 +_020DC130: .word 0x021D6B20 + + arm_func_start CTRDGi_VerifyFlashSectorCore +CTRDGi_VerifyFlashSectorCore: ; 0x020DC134 + cmp r2, #0x0 + sub r2, r2, #0x1 + beq _020DC160 +_020DC140: + ldrb r12, [r1], #0x1 + ldrb r3, [r0], #0x1 + cmp r12, r3 + subne r0, r1, #0x1 + bxne lr + cmp r2, #0x0 + sub r2, r2, #0x1 + bne _020DC140 +_020DC160: + mov r0, #0x0 + bx lr + + arm_func_start CTRDGi_ReadAgbFlashCore +CTRDGi_ReadAgbFlashCore: ; 0x020DC168 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x28 + mov r5, r0 + ldmia r5!, {r0-r3} + add r4, sp, #0x0 + stmia r4!, {r0-r3} + ldmia r5!, {r0-r3} + stmia r4!, {r0-r3} + ldr r0, _020DC25C ; =0x021D6B0C + ldr r1, [r5, #0x0] + ldrh r0, [r0, #0x0] + str r1, [r4, #0x0] + ldrh r7, [sp, #0x20] + ldr r6, [sp, #0x14] + ldr r5, [sp, #0x1c] + ldr r4, [sp, #0x18] + bl OS_LockCartridge + ldr r3, _020DC260 ; =0x04000204 + ldr r0, _020DC264 ; =0x021D6B20 + ldrh r2, [r3, #0x0] + ldrh r1, [r3, #0x0] + and r8, r2, #0x3 + bic r1, r1, #0x3 + orr r1, r1, #0x3 + strh r1, [r3, #0x0] + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x20000 + bne _020DC1F4 + mov r0, r7, lsl #0xc + mov r0, r0, lsr #0x10 + bl CTRDGi_SetFlashBankMx + and r0, r7, #0xf + mov r0, r0, lsl #0x10 + mov r7, r0, lsr #0x10 +_020DC1F4: + ldr r0, _020DC264 ; =0x021D6B20 + cmp r4, #0x0 + ldr r0, [r0, #0x0] + sub r4, r4, #0x1 + ldrh r0, [r0, #0x8] + mov r0, r7, lsl r0 + add r0, r0, #0xa000000 + add r1, r6, r0 + beq _020DC22C +_020DC218: + ldrb r0, [r1], #0x1 + cmp r4, #0x0 + sub r4, r4, #0x1 + strb r0, [r5], #0x1 + bne _020DC218 +_020DC22C: + ldr r2, _020DC260 ; =0x04000204 + ldr r0, _020DC25C ; =0x021D6B0C + ldrh r1, [r2, #0x0] + bic r1, r1, #0x3 + orr r1, r1, r8 + strh r1, [r2, #0x0] + ldrh r0, [r0, #0x0] + bl OS_UnlockCartridge2 + mov r0, #0x0 + add sp, sp, #0x28 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020DC25C: .word 0x021D6B0C +_020DC260: .word 0x04000204 +_020DC264: .word 0x021D6B20 + + arm_func_start CTRDGi_PollingSR1MCOMMON +CTRDGi_PollingSR1MCOMMON: ; 0x020DC268 + stmdb sp!, {r4-r8,lr} + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r5, #0x0 + bl StartFlashTimer + ldr r4, _020DC318 ; =0x021D6B10 +_020DC284: + bl CheckFlashTimer + mov r0, r7 + bl CTRDGi_ReadSrFunc + cmp r0, r6 + beq _020DC300 + ands r0, r0, #0x20 + beq _020DC2CC + mov r0, r7 + bl CTRDGi_ReadSrFunc +_020DC2A8: ; 0x020DC2A8 + cmp r6, r0 + beq _020DC300 + orr r0, r8, #0xa000 + mov r0, r0, lsl #0x10 + ldr r1, _020DC31C ; =0x0A005555 + mov r2, #0xf0 + strb r2, [r1, #0x0] + mov r5, r0, lsr #0x10 + b _020DC300 +_020DC2CC: + ldrh r0, [r4, #0x0] + cmp r0, #0x0 + beq _020DC284 + mov r0, r7 + bl CTRDGi_ReadSrFunc +_020DC2E0: ; 0x020DC2E0 + cmp r6, r0 + beq _020DC300 + orr r0, r8, #0xc000 + mov r0, r0, lsl #0x10 + ldr r1, _020DC31C ; =0x0A005555 + mov r2, #0xf0 + strb r2, [r1, #0x0] + mov r5, r0, lsr #0x10 +_020DC300: + bl CTRDG_IsExisting +_020DC304: ; 0x020DC304 + cmp r0, #0x0 + moveq r5, #0x1000 + mov r0, r5 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020DC318: .word 0x021D6B10 +_020DC31C: .word 0x0A005555 + + arm_func_start CTRDGi_PollingSR512kCOMMON +CTRDGi_PollingSR512kCOMMON: ; 0x020DC320 + stmdb sp!, {r4-r8,lr} + mov r4, r0 + mov r8, r1 + mov r7, r2 + mov r6, #0x0 + bl StartFlashTimer + ldr r5, _020DC3A8 ; =0x021D6B10 +_020DC33C: + mov r0, r8 + bl CTRDGi_ReadSrFunc + cmp r0, r7 + beq _020DC390 + ldrh r0, [r5, #0x0] + cmp r0, #0x0 + beq _020DC33C + mov r0, r8 + bl CTRDGi_ReadSrFunc +_020DC360: ; 0x020DC360 + cmp r7, r0 + beq _020DC390 + ldr r0, _020DC3AC ; =0x021D6B20 + ldr r0, [r0, #0x0] + ldrh r0, [r0, #0x18] + cmp r0, #0xc2 + ldreq r0, _020DC3B0 ; =0x0A005555 + moveq r1, #0xf0 + streqb r1, [r0, #0x0] + orr r0, r4, #0xc000 + mov r0, r0, lsl #0x10 + mov r6, r0, lsr #0x10 +_020DC390: + bl CTRDG_IsExisting +_020DC394: ; 0x020DC394 + cmp r0, #0x0 + moveq r6, #0x1000 + mov r0, r6 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020DC3A8: .word 0x021D6B10 +_020DC3AC: .word 0x021D6B20 +_020DC3B0: .word 0x0A005555 + + arm_func_start CTRDGi_ReadSrFunc +CTRDGi_ReadSrFunc: + ldrb r0, [r0, #0x0] + bx lr + + arm_func_start CheckFlashTimer +CheckFlashTimer: ; 0x020DC3BC + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl OS_GetTick + ldr r3, _020DC420 ; =0x021D6B44 + ldr r2, _020DC424 ; =0x000082EA + ldr r12, [r3, #0x0] + ldr r3, [r3, #0x4] + subs r12, r0, r12 + sbc r0, r1, r3 + mov r1, r0, lsl #0x6 + orr r1, r1, r12, lsr #0x1a + mov r0, r12, lsl #0x6 + mov r3, #0x0 + bl _ll_udiv + ldr r2, _020DC428 ; =0x021D6B3C + ldr r3, [r2, #0x4] + ldr r2, [r2, #0x0] + cmp r3, r1 + cmpeq r2, r0 + ldrls r0, _020DC42C ; =0x021D6B10 + movls r1, #0x1 + strlsh r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC420: .word 0x021D6B44 +_020DC424: .word 0x000082EA +_020DC428: .word 0x021D6B3C +_020DC42C: .word 0x021D6B10 + + arm_func_start StartFlashTimer +StartFlashTimer: ; 0x020DC430 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020DC47C ; =0x021D6B28 + ldr r2, _020DC480 ; =0x021D6B10 + mov r3, #0x0 + ldr r1, [r1, #0x0] + strh r3, [r2, #0x0] + mov r0, r0, lsl #0x1 + ldrh r1, [r1, r0] + ldr r0, _020DC484 ; =0x021D6B3C + str r1, [r0, #0x0] + str r3, [r0, #0x4] + bl OS_GetTick + ldr r2, _020DC488 ; =0x021D6B44 + str r0, [r2, #0x0] + str r1, [r2, #0x4] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DC47C: .word 0x021D6B28 +_020DC480: .word 0x021D6B10 +_020DC484: .word 0x021D6B3C +_020DC488: .word 0x021D6B44 + + arm_func_start CTRDGi_ReadFlashID +CTRDGi_ReadFlashID: ; 0x020DC48C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r5, _020DC590 ; =0x04000208 + mov r0, #0x0 + ldrh r2, [r5, #0x0] + ldr r1, _020DC594 ; =0x021D6B38 + ldr r4, _020DC598 ; =0x0A005555 + strh r0, [r5, #0x0] + str r2, [r1, #0x0] + mov r3, #0xaa + ldr r2, _020DC59C ; =0x0A002AAA + strb r3, [r4, #0x0] + mov r3, #0x55 + strb r3, [r2, #0x0] + mov r2, #0x90 + strb r2, [r4, #0x0] + ldrh r2, [r5, #0x0] + ldr r1, [r1, #0x0] + strh r1, [r5, #0x0] + bl StartFlashTimer + ldr r4, _020DC5A0 ; =0x021D6B10 + ldrh r0, [r4, #0x0] + cmp r0, #0x0 + bne _020DC4FC +_020DC4EC: + bl CheckFlashTimer + ldrh r0, [r4, #0x0] + cmp r0, #0x0 + beq _020DC4EC +_020DC4FC: + ldr r0, _020DC5A4 ; =0x0A000001 + bl CTRDGi_ReadSrFunc + mov r4, r0, lsl #0x18 + mov r0, #0xa000000 + bl CTRDGi_ReadSrFunc + ldr ip, _020DC590 ; =0x04000208 + orr r4, r0, r4, lsr #0x10 + ldrh r2, [r12, #0x0] + mov r0, #0x0 + ldr r1, _020DC594 ; =0x021D6B38 + strh r0, [r12, #0x0] + ldr r5, _020DC598 ; =0x0A005555 + str r2, [r1, #0x0] + mov r3, #0xaa + ldr r2, _020DC59C ; =0x0A002AAA + strb r3, [r5, #0x0] + mov r3, #0x55 + strb r3, [r2, #0x0] + mov r2, #0xf0 + strb r2, [r5, #0x0] + strb r2, [r5, #0x0] + ldrh r2, [r12, #0x0] + ldr r1, [r1, #0x0] + strh r1, [r12, #0x0] + bl StartFlashTimer + ldr r5, _020DC5A0 ; =0x021D6B10 + ldrh r0, [r5, #0x0] + cmp r0, #0x0 + bne _020DC580 +_020DC570: + bl CheckFlashTimer + ldrh r0, [r5, #0x0] + cmp r0, #0x0 + beq _020DC570 +_020DC580: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DC590: .word 0x04000208 +_020DC594: .word 0x021D6B38 +_020DC598: .word 0x0A005555 +_020DC59C: .word 0x0A002AAA +_020DC5A0: .word 0x021D6B10 +_020DC5A4: .word 0x0A000001 + + arm_func_start CTRDGi_SetFlashBankMx +CTRDGi_SetFlashBankMx: ; 0x020DC5A8 + ldr r3, _020DC5D4 ; =0x0A005555 + mov r2, #0xaa + ldr r1, _020DC5D8 ; =0x0A002AAA + strb r2, [r3, #0x0] + mov r2, #0x55 + strb r2, [r1, #0x0] + mov r1, #0xb0 + strb r1, [r3, #0x0] + mov r1, #0xa000000 + strb r0, [r1, #0x0] + bx lr + .balign 4 +_020DC5D4: .word 0x0A005555 +_020DC5D8: .word 0x0A002AAA diff --git a/arm9/asm/CTRDG_proc.s b/arm9/asm/CTRDG_proc.s new file mode 100644 index 00000000..d266917a --- /dev/null +++ b/arm9/asm/CTRDG_proc.s @@ -0,0 +1,285 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start CTRDGi_CallbackForSetPhi +CTRDGi_CallbackForSetPhi: ; 0x020DB978 + ldr r0, _020DB988 ; =0x021D694C + mov r1, #0x0 + str r1, [r0, #0x0] + bx lr + .balign 4 +_020DB988: .word 0x021D694C + + arm_func_start CTRDG_TerminateForPulledOut +CTRDG_TerminateForPulledOut: ; 0x020DB98C + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r0, #0x2 + bl CTRDGi_SendtoPxi + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start CTRDGi_PulledOutCallback +CTRDGi_PulledOutCallback: ; 0x020DB9AC + stmdb sp!, {lr} + sub sp, sp, #0x4 + and r0, r1, #0x3f + cmp r0, #0x11 + bne _020DBA14 + ldr r0, _020DBA24 ; =0x021D6954 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r1, _020DBA28 ; =0x021D6958 + mov r0, #0x0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + beq _020DB9F0 + blx r1 +_020DB9F0: + cmp r0, #0x0 + beq _020DB9FC + bl CTRDG_TerminateForPulledOut +_020DB9FC: + ldr r0, _020DBA24 ; =0x021D6954 + mov r1, #0x1 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020DBA14: + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DBA24: .word 0x021D6954 +_020DBA28: .word 0x021D6958 + + arm_func_start CTRDGi_CallbackForInitModuleInfo +CTRDGi_CallbackForInitModuleInfo: ; 0x020DBA2C + stmdb sp!, {lr} + sub sp, sp, #0x4 + and r0, r1, #0x3f + cmp r0, #0x1 + ldreq r0, _020DBA64 ; =0x021D6944 + moveq r1, #0x1 + streqh r1, [r0, #0x0] + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DBA64: .word 0x021D6944 + + arm_func_start CTRDGi_InitModuleInfo +CTRDGi_InitModuleInfo: ; 0x020DBA68 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x14 + ldr r0, _020DBC50 ; =0x021D6948 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + addne sp, sp, #0x14 + ldmneia sp!, {r4-r7,lr} + bxne lr + ldr r1, _020DBC54 ; =0x04000300 + mov r2, #0x1 + str r2, [r0, #0x0] + ldrh r0, [r1, #0x0] + ands r0, r0, #0x1 + addeq sp, sp, #0x14 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, #0x40000 + bl OS_SetIrqMask + ldr r3, _020DBC58 ; =0x04000208 + mov r2, #0x1 + ldrh r4, [r3, #0x0] + ldr r1, _020DBC5C ; =0x021D6944 + mov r6, r0 + strh r2, [r3, #0x0] + ldrh r0, [r1, #0x2] + add r1, sp, #0x0 + bl CTRDGi_LockByProcessor + ldr r1, _020DBC60 ; =0x04000204 + add r0, sp, #0x8 + ldrh r1, [r1, #0x0] + and r1, r1, #0x8000 + mov r5, r1, asr #0xf + bl CTRDGi_ChangeLatestAccessCycle + ldr r3, _020DBC60 ; =0x04000204 + ldr r0, _020DBC64 ; =0x021D6960 + ldrh r2, [r3, #0x0] + add r0, r0, #0x80 + mov r1, #0x40 + bic r2, r2, #0x8000 + strh r2, [r3, #0x0] + bl DC_InvalidateRange + ldr r2, _020DBC64 ; =0x021D6960 + ldr r1, _020DBC68 ; =0x08000080 + mov r0, #0x1 + mov r3, #0x40 + add r2, r2, #0x80 + bl MI_DmaCopy16 + ldr r2, _020DBC60 ; =0x04000204 + add r0, sp, #0x8 + ldrh r1, [r2, #0x0] + bic r1, r1, #0x8000 + orr r1, r1, r5, lsl #0xf + strh r1, [r2, #0x0] + bl CTRDGi_RestoreAccessCycle + ldr r0, _020DBC5C ; =0x021D6944 + add r1, sp, #0x0 + ldrh r0, [r0, #0x2] + bl CTRDGi_UnlockByProcessor + ldr r0, _020DBC6C ; =0x027FFF9B + ldrb r0, [r0, #0x0] + cmp r0, #0x0 + bne _020DBB70 + ldr r0, _020DBC70 ; =0x027FFF9A + ldrb r0, [r0, #0x0] + cmp r0, #0x0 + bne _020DBBDC +_020DBB70: + ldr r2, _020DBC64 ; =0x021D6960 + ldr r0, _020DBC74 ; =0x027FFC30 + ldrh r1, [r2, #0xbe] + mov r3, #0x0 + strh r1, [r0, #0x0] +_020DBB84: + add r0, r2, r3 + ldrb r1, [r0, #0xb5] + add r0, r3, #0x2700000 + add r0, r0, #0xff000 + add r3, r3, #0x1 + strb r1, [r0, #0xC32] + cmp r3, #0x3 + blt _020DBB84 + ldrh r0, [r2, #0xb0] + ldr r1, _020DBC74 ; =0x027FFC30 + strh r0, [r1, #0x6] + ldr r0, [r2, #0xac] + str r0, [r1, #0x8] + bl CTRDG_IsExisting +_020DBBBC: ; 0x020DBBBC + cmp r0, #0x0 + movne r2, #0x1 + ldr r1, _020DBC6C ; =0x027FFF9B + moveq r2, #0x0 + strb r2, [r1, #0x0] + ldr r0, _020DBC70 ; =0x027FFF9A + mov r1, #0x1 + strb r1, [r0, #0x0] +_020DBBDC: + ldr r0, _020DBC78 ; =0xFFFF0020 + ldr r1, _020DBC7C ; =0x021D6964 + mov r2, #0x9c + bl MIi_CpuCopy32 + bl DC_FlushAll + ldr r0, _020DBC64 ; =0x021D6960 + add r0, r0, #0xfe000000 + mov r0, r0, lsr #0x5 + mov r0, r0, lsl #0x6 + orr r0, r0, #0x1 + bl CTRDGi_SendtoPxi + ldr r5, _020DBC5C ; =0x021D6944 + ldrh r0, [r5, #0x0] + cmp r0, #0x1 + beq _020DBC30 + mov r7, #0x1 +_020DBC1C: + mov r0, r7 + bl SVC_WaitByLoop + ldrh r0, [r5, #0x0] + cmp r0, #0x1 + bne _020DBC1C +_020DBC30: + ldr r2, _020DBC58 ; =0x04000208 + mov r0, r6 + ldrh r1, [r2, #0x0] + strh r4, [r2, #0x0] + bl OS_SetIrqMask + add sp, sp, #0x14 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DBC50: .word 0x021D6948 +_020DBC54: .word 0x04000300 +_020DBC58: .word 0x04000208 +_020DBC5C: .word 0x021D6944 +_020DBC60: .word 0x04000204 +_020DBC64: .word 0x021D6960 +_020DBC68: .word 0x08000080 +_020DBC6C: .word 0x027FFF9B +_020DBC70: .word 0x027FFF9A +_020DBC74: .word 0x027FFC30 +_020DBC78: .word 0xFFFF0020 +_020DBC7C: .word 0x021D6964 + + arm_func_start CTRDG_Init +CTRDG_Init: ; 0x020DBC80 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020DBD34 ; =0x021D6950 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + mov r1, #0x1 + str r1, [r0, #0x0] + bl CTRDGi_InitCommon + ldr r0, _020DBD38 ; =0x021D6954 + mov r1, #0x0 + str r1, [r0, #0x0] + bl PXI_Init + mov r5, #0xd + mov r4, #0x1 +_020DBCC4: + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady +_020DBCD0: ; 0x020DBCD0 + cmp r0, #0x0 + beq _020DBCC4 + ldr r1, _020DBD3C ; =CTRDGi_CallbackForInitModuleInfo + mov r0, #0xd + bl PXI_SetFifoRecvCallback + bl CTRDGi_InitModuleInfo + mov r0, #0xd + mov r1, #0x0 + bl PXI_SetFifoRecvCallback + ldr r1, _020DBD40 ; =CTRDGi_PulledOutCallback + mov r0, #0xd + bl PXI_SetFifoRecvCallback + ldr r1, _020DBD44 ; =0x021D6958 + mov r2, #0x0 + ldr r0, _020DBD48 ; =0x021D6A20 + str r2, [r1, #0x0] + bl CTRDGi_InitTaskThread + ldr r1, _020DBD4C ; =CTRDGi_CallbackForSetPhi + mov r0, #0x11 + bl PXI_SetFifoRecvCallback +_020DBD20: ; 0x020DBD20 + mov r0, #0x0 + bl CTRDG_Enable + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DBD34: .word 0x021D6950 +_020DBD38: .word 0x021D6954 +_020DBD3C: .word CTRDGi_CallbackForInitModuleInfo +_020DBD40: .word CTRDGi_PulledOutCallback +_020DBD44: .word 0x021D6958 +_020DBD48: .word 0x021D6A20 +_020DBD4C: .word CTRDGi_CallbackForSetPhi 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 diff --git a/arm9/asm/libctrdg.s b/arm9/asm/libctrdg.s deleted file mode 100644 index 6d8cf4a5..00000000 --- a/arm9/asm/libctrdg.s +++ /dev/null @@ -1,3238 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start CTRDG_CheckEnabled -CTRDG_CheckEnabled: - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl CTRDG_IsOptionCartridge -_020DB128: ; 0x020DB128 - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - bl CTRDG_IsEnabled -_020DB13C: ; 0x020DB13C - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - bl OS_Terminate - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDG_Enable -CTRDG_Enable: ; 0x020DB15C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl OS_DisableInterrupts - ldr r1, _020DB1AC ; =0x021D6940 - mov r4, r0 - str r5, [r1, #0x0] - bl CTRDG_IsOptionCartridge -_020DB17C: ; 0x020DB17C - cmp r0, #0x0 - bne _020DB198 - cmp r5, #0x0 - movne r1, #0x1000 - moveq r1, #0x5000 - mov r0, #0xf000 - bl OS_SetDPermissionsForProtectionRegion -_020DB198: - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DB1AC: .word 0x021D6940 - - arm_func_start CTRDG_IsEnabled -CTRDG_IsEnabled: - ldr r0, _020DB1BC ; =0x021D6940 - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020DB1BC: .word 0x021D6940 - - arm_func_start CTRDGi_AccessCommon -CTRDGi_AccessCommon: ; 0x020DB1C0 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl CTRDG_IsExisting -_020DB1DC: ; 0x020DB1DC - cmp r0, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - bl CTRDG_CheckEnabled - ldr r0, _020DB2BC ; =0x021D6944 - ldrh r0, [r0, #0x2] - bl OS_LockCartridge - cmp r4, #0x21 - bhi _020DB240 - cmp r4, #0x21 - bhs _020DB270 - cmp r4, #0x11 - bhi _020DB234 - cmp r4, #0x10 - blo _020DB294 - cmp r4, #0x10 - beq _020DB290 - cmp r4, #0x11 - beq _020DB260 - b _020DB294 -_020DB234: - cmp r4, #0x20 - streqh r6, [r7, #0x0] - b _020DB294 -_020DB240: - cmp r4, #0x40 - bhi _020DB254 - cmp r4, #0x40 - streq r6, [r7, #0x0] - b _020DB294 -_020DB254: - cmp r4, #0x41 - beq _020DB280 - b _020DB294 -_020DB260: - cmp r5, #0x0 - ldrneb r0, [r7, #0x0] - strneb r0, [r5, #0x0] - b _020DB294 -_020DB270: - cmp r5, #0x0 - ldrneh r0, [r7, #0x0] - strneh r0, [r5, #0x0] - b _020DB294 -_020DB280: - cmp r5, #0x0 - ldrne r0, [r7, #0x0] - strne r0, [r5, #0x0] - b _020DB294 -_020DB290: - strb r6, [r7, #0x0] -_020DB294: - ldr r0, _020DB2BC ; =0x021D6944 - ldrh r0, [r0, #0x2] - bl OS_UnlockCartridge - bl CTRDG_IsExisting -_020DB2A4: ; 0x020DB2A4 - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020DB2BC: .word 0x021D6944 - - arm_func_start CTRDG_Read32 -CTRDG_Read32: ; 0x020DB2C0 - ldr ip, _020DB2D4 ; =CTRDGi_AccessCommon - mov r2, r1 - mov r1, #0x0 - mov r3, #0x41 - bx r12 - .balign 4 -_020DB2D4: .word CTRDGi_AccessCommon - - arm_func_start CTRDGi_CopyCommon -CTRDGi_CopyCommon: ; 0x020DB2D8 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl CTRDG_IsExisting -_020DB2F4: ; 0x020DB2F4 - cmp r0, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - bl CTRDG_CheckEnabled - ldr r0, _020DB42C ; =0x021D6944 - ldrh r0, [r0, #0x2] - bl OS_LockCartridge - ldr r0, [sp, #0x18] - ands r0, r0, #0x1 - bne _020DB338 - mov r0, r7 - bl MI_StopDma - mov r0, r5 - mov r1, r4 - bl DC_FlushRange -_020DB338: - ldr r0, [sp, #0x18] - cmp r0, #0x11 - bhi _020DB36C - cmp r0, #0x10 - blo _020DB360 - cmp r0, #0x10 - beq _020DB38C - cmp r0, #0x11 - beq _020DB3BC - b _020DB404 -_020DB360: - cmp r0, #0x1 - beq _020DB3E4 - b _020DB404 -_020DB36C: - cmp r0, #0x20 - bhi _020DB380 - cmp r0, #0x20 - beq _020DB3A4 - b _020DB404 -_020DB380: - cmp r0, #0x21 - beq _020DB3D0 - b _020DB404 -_020DB38C: - mov r0, r7 - mov r1, r6 - mov r2, r5 - mov r3, r4 - bl MI_DmaCopy16 - b _020DB404 -_020DB3A4: - mov r0, r7 - mov r1, r6 - mov r2, r5 - mov r3, r4 - bl MI_DmaCopy32 - b _020DB404 -_020DB3BC: - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl MIi_CpuCopy16 - b _020DB404 -_020DB3D0: - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl MIi_CpuCopy32 - b _020DB404 -_020DB3E4: - cmp r4, #0x0 - mov r1, #0x0 - bls _020DB404 -_020DB3F0: - ldrb r0, [r6], #0x1 - add r1, r1, #0x1 - cmp r1, r4 - strb r0, [r5], #0x1 - blo _020DB3F0 -_020DB404: - ldr r0, _020DB42C ; =0x021D6944 - ldrh r0, [r0, #0x2] - bl OS_UnlockCartridge - bl CTRDG_IsExisting -_020DB414: ; 0x020DB414 - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020DB42C: .word 0x021D6944 - - arm_func_start CTRDG_CpuCopy32 -CTRDG_CpuCopy32: ; 0x020DB430 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r3, r2 - mov r12, #0x21 - mov r1, r0 - mov r2, lr - mov r0, #0x0 - str r12, [sp, #0x0] - bl CTRDGi_CopyCommon - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDG_CpuCopy16 -CTRDG_CpuCopy16: ; 0x020DB464 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r3, r2 - mov r12, #0x11 - mov r1, r0 - mov r2, lr - mov r0, #0x0 - str r12, [sp, #0x0] - bl CTRDGi_CopyCommon - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDG_CpuCopy8 -CTRDG_CpuCopy8: ; 0x020DB498 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r3, r2 - cmp lr, #0x8000000 - blo _020DB4DC - ldr r2, _020DB500 ; =0x0A010000 - cmp lr, r2 - bhs _020DB4DC - mov r12, #0x1 - mov r2, r0 - mov r0, #0x0 - str r12, [sp, #0x0] - bl CTRDGi_CopyCommon - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020DB4DC: - mov r12, #0x1 - mov r1, r0 - mov r2, lr - mov r0, #0x0 - str r12, [sp, #0x0] - bl CTRDGi_CopyCommon - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DB500: .word 0x0A010000 - - arm_func_start CTRDGi_SendtoPxi -CTRDGi_SendtoPxi: ; 0x020DB504 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r1, r7 - mov r0, #0xd - mov r2, #0x0 - bl PXI_SendWordByFifo -_020DB520: ; 0x020DB520 - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - mov r6, #0x1 - mov r5, #0xd - mov r4, #0x0 -_020DB53C: - mov r0, r6 - bl SVC_WaitByLoop - mov r0, r5 - mov r1, r7 - mov r2, r4 - bl PXI_SendWordByFifo -_020DB554: ; 0x020DB554 - cmp r0, #0x0 - bne _020DB53C - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start CTRDGi_UnlockByProcessor -CTRDGi_UnlockByProcessor: ; 0x020DB568 - stmdb sp!, {r4,lr} - mov r4, r1 - ldr r1, [r4, #0x0] - cmp r1, #0x0 - bne _020DB580 - bl OS_UnlockCartridge -_020DB580: - ldr r0, [r4, #0x4] - bl OS_RestoreInterrupts - ldmia sp!, {r4,lr} - bx lr - - arm_func_start CTRDGi_LockByProcessor -CTRDGi_LockByProcessor: ; 0x020DB590 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - ldr r5, _020DB60C ; =0x027FFFE8 - mov r4, #0x1 -_020DB5A8: - bl OS_DisableInterrupts - str r0, [r6, #0x4] - mov r0, r5 - bl OS_ReadOwnerOfLockWord - and r0, r0, #0x40 - str r0, [r6, #0x0] - ldr r0, [r6, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r7,lr} - bxne lr - mov r0, r7 - bl OS_TryLockCartridge -_020DB5DC: ; 0x020DB5DC - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - ldr r0, [r6, #0x4] - bl OS_RestoreInterrupts - mov r0, r4 - bl SVC_WaitByLoop - b _020DB5A8 -_020DB600: ; 0x020DB600 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020DB60C: .word 0x027FFFE8 - - arm_func_start CTRDGi_RestoreAccessCycle -CTRDGi_RestoreAccessCycle: ; 0x020DB610 - ldr r3, _020DB640 ; =0x04000204 - ldr r2, [r0, #0x0] - ldrh r1, [r3, #0x0] - bic r1, r1, #0xc - orr r1, r1, r2, lsl #0x2 - strh r1, [r3, #0x0] - ldrh r1, [r3, #0x0] - ldr r2, [r0, #0x4] - bic r0, r1, #0x10 - orr r0, r0, r2, lsl #0x4 - strh r0, [r3, #0x0] - bx lr - .balign 4 -_020DB640: .word 0x04000204 - - arm_func_start CTRDGi_ChangeLatestAccessCycle -CTRDGi_ChangeLatestAccessCycle: ; 0x020DB644 - ldr r2, _020DB688 ; =0x04000204 - ldrh r1, [r2, #0x0] - and r1, r1, #0xc - mov r1, r1, asr #0x2 - str r1, [r0, #0x0] - ldrh r1, [r2, #0x0] - and r1, r1, #0x10 - mov r1, r1, asr #0x4 - str r1, [r0, #0x4] - ldrh r0, [r2, #0x0] - bic r0, r0, #0xc - orr r0, r0, #0xc - strh r0, [r2, #0x0] - ldrh r0, [r2, #0x0] - bic r0, r0, #0x10 - strh r0, [r2, #0x0] - bx lr - .balign 4 -_020DB688: .word 0x04000204 - - arm_func_start CTRDG_IsExisting -CTRDG_IsExisting: - stmdb sp!, {r4,lr} - sub sp, sp, #0x10 - ldr r2, _020DB798 ; =0x027FFC30 - ldr r0, _020DB79C ; =0x0000FFFF - ldrh r1, [r2, #0x0] - mov r4, #0x1 - cmp r1, r0 - addeq sp, sp, #0x10 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - ldrb r0, [r2, #0x5] - mov r0, r0, lsl #0x1e - mov r0, r0, lsr #0x1f - cmp r0, #0x1 - addeq sp, sp, #0x10 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - ldr r0, _020DB7A0 ; =0x021D6944 - add r1, sp, #0x0 - ldrh r0, [r0, #0x2] - bl CTRDGi_LockByProcessor - add r0, sp, #0x8 - bl CTRDGi_ChangeLatestAccessCycle - mov r0, #0x8000000 - ldrb r2, [r0, #0xb2] - cmp r2, #0x96 - bne _020DB714 - ldr r1, _020DB798 ; =0x027FFC30 - ldrh r0, [r0, #0xbe] - ldrh r1, [r1, #0x0] - cmp r1, r0 - bne _020DB75C -_020DB714: - cmp r2, #0x96 - beq _020DB734 - ldr r1, _020DB798 ; =0x027FFC30 - ldr r0, _020DB7A4 ; =0x0801FFFE - ldrh r1, [r1, #0x0] - ldrh r0, [r0, #0x0] - cmp r1, r0 - bne _020DB75C -_020DB734: - ldr r2, _020DB798 ; =0x027FFC30 - mov r0, #0x8000000 - ldr r1, [r2, #0x8] - ldr r0, [r0, #0xac] - cmp r1, r0 - beq _020DB770 - ldrb r0, [r2, #0x5] - mov r0, r0, lsl #0x1f - movs r0, r0, lsr #0x1f - beq _020DB770 -_020DB75C: - ldr r1, _020DB798 ; =0x027FFC30 - mov r4, #0x0 - ldrb r0, [r1, #0x5] - orr r0, r0, #0x2 - strb r0, [r1, #0x5] -_020DB770: - add r0, sp, #0x8 - bl CTRDGi_RestoreAccessCycle - ldr r0, _020DB7A0 ; =0x021D6944 - add r1, sp, #0x0 - ldrh r0, [r0, #0x2] - bl CTRDGi_UnlockByProcessor - mov r0, r4 - add sp, sp, #0x10 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020DB798: .word 0x027FFC30 -_020DB79C: .word 0x0000FFFF -_020DB7A0: .word 0x021D6944 -_020DB7A4: .word 0x0801FFFE - - arm_func_start CTRDG_IsPulledOut -CTRDG_IsPulledOut: ; 0x020DB7A8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020DB800 ; =0x027FFC30 - ldr r0, _020DB804 ; =0x0000FFFF - ldrh r1, [r2, #0x0] - cmp r1, r0 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {lr} - bxeq lr - ldrb r0, [r2, #0x5] - mov r0, r0, lsl #0x1e - movs r0, r0, lsr #0x1f - bne _020DB7E4 - bl CTRDG_IsExisting -_020DB7E4: - ldr r0, _020DB800 ; =0x027FFC30 - ldrb r0, [r0, #0x5] - mov r0, r0, lsl #0x1e - mov r0, r0, lsr #0x1f - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DB800: .word 0x027FFC30 -_020DB804: .word 0x0000FFFF - - arm_func_start CTRDGi_GetAgbMakerCodeAtInit -CTRDGi_GetAgbMakerCodeAtInit: ; 0x020DB808 - stmdb sp!, {r4,lr} - mov r4, #0x0 - bl CTRDGi_IsAgbCartridgeAtInit -_020DB814: ; 0x020DB814 - cmp r0, #0x0 - ldrne r0, _020DB82C ; =0x027FFC30 - ldrneh r4, [r0, #0x6] - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020DB82C: .word 0x027FFC30 - - arm_func_start CTRDG_GetAgbMakerCode -CTRDG_GetAgbMakerCode: ; 0x020DB830 - stmdb sp!, {r4,lr} - mov r4, #0x0 - bl CTRDG_IsExisting -_020DB83C: ; 0x020DB83C - cmp r0, #0x0 - beq _020DB84C - bl CTRDGi_GetAgbMakerCodeAtInit - mov r4, r0 -_020DB84C: - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start CTRDGi_GetAgbGameCodeAtInit -CTRDGi_GetAgbGameCodeAtInit: ; 0x020DB858 - stmdb sp!, {r4,lr} - mov r4, #0x0 - bl CTRDGi_IsAgbCartridgeAtInit -_020DB864: ; 0x020DB864 - cmp r0, #0x0 - ldrne r0, _020DB87C ; =0x027FFC30 - ldrne r4, [r0, #0x8] - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020DB87C: .word 0x027FFC30 - - arm_func_start CTRDG_GetAgbGameCode -CTRDG_GetAgbGameCode: ; 0x020DB880 - stmdb sp!, {r4,lr} - mov r4, #0x0 - bl CTRDG_IsExisting -_020DB88C: ; 0x020DB88C - cmp r0, #0x0 - beq _020DB89C - bl CTRDGi_GetAgbGameCodeAtInit - mov r4, r0 -_020DB89C: - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start CTRDGi_IsAgbCartridgeAtInit -CTRDGi_IsAgbCartridgeAtInit: - ldr r0, _020DB8BC ; =0x027FFC30 - ldrb r0, [r0, #0x5] - mov r0, r0, lsl #0x1f - mov r0, r0, lsr #0x1f - bx lr - .balign 4 -_020DB8BC: .word 0x027FFC30 - - arm_func_start CTRDG_IsOptionCartridge -CTRDG_IsOptionCartridge: - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl CTRDG_IsExisting -_020DB8CC: ; 0x020DB8CC - cmp r0, #0x0 - beq _020DB8EC - bl CTRDGi_IsAgbCartridgeAtInit -_020DB8D8: ; 0x020DB8D8 - cmp r0, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x1 - ldmeqia sp!, {lr} - bxeq lr -_020DB8EC: - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDG_IsAgbCartridge -CTRDG_IsAgbCartridge: ; 0x020DB8FC - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl CTRDG_IsExisting -_020DB908: ; 0x020DB908 - cmp r0, #0x0 - beq _020DB928 - bl CTRDGi_IsAgbCartridgeAtInit -_020DB914: ; 0x020DB914 - cmp r0, #0x0 - addne sp, sp, #0x4 - movne r0, #0x1 - ldmneia sp!, {lr} - bxne lr -_020DB928: - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_InitCommon -CTRDGi_InitCommon: ; 0x020DB938 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020DB970 ; =0x021D6944 - mov r3, #0x0 - ldr r2, _020DB974 ; =0x05000001 - add r0, sp, #0x0 - str r3, [sp, #0x0] - bl FUN_020002FE - bl OS_GetLockID - ldr r1, _020DB970 ; =0x021D6944 - strh r0, [r1, #0x2] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DB970: .word 0x021D6944 -_020DB974: .word 0x05000001 - - arm_func_start CTRDGi_CallbackForSetPhi -CTRDGi_CallbackForSetPhi: ; 0x020DB978 - ldr r0, _020DB988 ; =0x021D694C - mov r1, #0x0 - str r1, [r0, #0x0] - bx lr - .balign 4 -_020DB988: .word 0x021D694C - - arm_func_start CTRDG_TerminateForPulledOut -CTRDG_TerminateForPulledOut: ; 0x020DB98C - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r0, #0x2 - bl CTRDGi_SendtoPxi - bl OS_Terminate - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_PulledOutCallback -CTRDGi_PulledOutCallback: ; 0x020DB9AC - stmdb sp!, {lr} - sub sp, sp, #0x4 - and r0, r1, #0x3f - cmp r0, #0x11 - bne _020DBA14 - ldr r0, _020DBA24 ; =0x021D6954 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - ldr r1, _020DBA28 ; =0x021D6958 - mov r0, #0x0 - ldr r1, [r1, #0x0] - cmp r1, #0x0 - beq _020DB9F0 - blx r1 -_020DB9F0: - cmp r0, #0x0 - beq _020DB9FC - bl CTRDG_TerminateForPulledOut -_020DB9FC: - ldr r0, _020DBA24 ; =0x021D6954 - mov r1, #0x1 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020DBA14: - bl OS_Terminate - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DBA24: .word 0x021D6954 -_020DBA28: .word 0x021D6958 - - arm_func_start CTRDGi_CallbackForInitModuleInfo -CTRDGi_CallbackForInitModuleInfo: ; 0x020DBA2C - stmdb sp!, {lr} - sub sp, sp, #0x4 - and r0, r1, #0x3f - cmp r0, #0x1 - ldreq r0, _020DBA64 ; =0x021D6944 - moveq r1, #0x1 - streqh r1, [r0, #0x0] - addeq sp, sp, #0x4 - ldmeqia sp!, {lr} - bxeq lr - bl OS_Terminate - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DBA64: .word 0x021D6944 - - arm_func_start CTRDGi_InitModuleInfo -CTRDGi_InitModuleInfo: ; 0x020DBA68 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x14 - ldr r0, _020DBC50 ; =0x021D6948 - ldr r1, [r0, #0x0] - cmp r1, #0x0 - addne sp, sp, #0x14 - ldmneia sp!, {r4-r7,lr} - bxne lr - ldr r1, _020DBC54 ; =0x04000300 - mov r2, #0x1 - str r2, [r0, #0x0] - ldrh r0, [r1, #0x0] - ands r0, r0, #0x1 - addeq sp, sp, #0x14 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - mov r0, #0x40000 - bl OS_SetIrqMask - ldr r3, _020DBC58 ; =0x04000208 - mov r2, #0x1 - ldrh r4, [r3, #0x0] - ldr r1, _020DBC5C ; =0x021D6944 - mov r6, r0 - strh r2, [r3, #0x0] - ldrh r0, [r1, #0x2] - add r1, sp, #0x0 - bl CTRDGi_LockByProcessor - ldr r1, _020DBC60 ; =0x04000204 - add r0, sp, #0x8 - ldrh r1, [r1, #0x0] - and r1, r1, #0x8000 - mov r5, r1, asr #0xf - bl CTRDGi_ChangeLatestAccessCycle - ldr r3, _020DBC60 ; =0x04000204 - ldr r0, _020DBC64 ; =0x021D6960 - ldrh r2, [r3, #0x0] - add r0, r0, #0x80 - mov r1, #0x40 - bic r2, r2, #0x8000 - strh r2, [r3, #0x0] - bl DC_InvalidateRange - ldr r2, _020DBC64 ; =0x021D6960 - ldr r1, _020DBC68 ; =0x08000080 - mov r0, #0x1 - mov r3, #0x40 - add r2, r2, #0x80 - bl MI_DmaCopy16 - ldr r2, _020DBC60 ; =0x04000204 - add r0, sp, #0x8 - ldrh r1, [r2, #0x0] - bic r1, r1, #0x8000 - orr r1, r1, r5, lsl #0xf - strh r1, [r2, #0x0] - bl CTRDGi_RestoreAccessCycle - ldr r0, _020DBC5C ; =0x021D6944 - add r1, sp, #0x0 - ldrh r0, [r0, #0x2] - bl CTRDGi_UnlockByProcessor - ldr r0, _020DBC6C ; =0x027FFF9B - ldrb r0, [r0, #0x0] - cmp r0, #0x0 - bne _020DBB70 - ldr r0, _020DBC70 ; =0x027FFF9A - ldrb r0, [r0, #0x0] - cmp r0, #0x0 - bne _020DBBDC -_020DBB70: - ldr r2, _020DBC64 ; =0x021D6960 - ldr r0, _020DBC74 ; =0x027FFC30 - ldrh r1, [r2, #0xbe] - mov r3, #0x0 - strh r1, [r0, #0x0] -_020DBB84: - add r0, r2, r3 - ldrb r1, [r0, #0xb5] - add r0, r3, #0x2700000 - add r0, r0, #0xff000 - add r3, r3, #0x1 - strb r1, [r0, #0xC32] - cmp r3, #0x3 - blt _020DBB84 - ldrh r0, [r2, #0xb0] - ldr r1, _020DBC74 ; =0x027FFC30 - strh r0, [r1, #0x6] - ldr r0, [r2, #0xac] - str r0, [r1, #0x8] - bl CTRDG_IsExisting -_020DBBBC: ; 0x020DBBBC - cmp r0, #0x0 - movne r2, #0x1 - ldr r1, _020DBC6C ; =0x027FFF9B - moveq r2, #0x0 - strb r2, [r1, #0x0] - ldr r0, _020DBC70 ; =0x027FFF9A - mov r1, #0x1 - strb r1, [r0, #0x0] -_020DBBDC: - ldr r0, _020DBC78 ; =0xFFFF0020 - ldr r1, _020DBC7C ; =0x021D6964 - mov r2, #0x9c - bl MIi_CpuCopy32 - bl DC_FlushAll - ldr r0, _020DBC64 ; =0x021D6960 - add r0, r0, #0xfe000000 - mov r0, r0, lsr #0x5 - mov r0, r0, lsl #0x6 - orr r0, r0, #0x1 - bl CTRDGi_SendtoPxi - ldr r5, _020DBC5C ; =0x021D6944 - ldrh r0, [r5, #0x0] - cmp r0, #0x1 - beq _020DBC30 - mov r7, #0x1 -_020DBC1C: - mov r0, r7 - bl SVC_WaitByLoop - ldrh r0, [r5, #0x0] - cmp r0, #0x1 - bne _020DBC1C -_020DBC30: - ldr r2, _020DBC58 ; =0x04000208 - mov r0, r6 - ldrh r1, [r2, #0x0] - strh r4, [r2, #0x0] - bl OS_SetIrqMask - add sp, sp, #0x14 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020DBC50: .word 0x021D6948 -_020DBC54: .word 0x04000300 -_020DBC58: .word 0x04000208 -_020DBC5C: .word 0x021D6944 -_020DBC60: .word 0x04000204 -_020DBC64: .word 0x021D6960 -_020DBC68: .word 0x08000080 -_020DBC6C: .word 0x027FFF9B -_020DBC70: .word 0x027FFF9A -_020DBC74: .word 0x027FFC30 -_020DBC78: .word 0xFFFF0020 -_020DBC7C: .word 0x021D6964 - - arm_func_start CTRDG_Init -CTRDG_Init: ; 0x020DBC80 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020DBD34 ; =0x021D6950 - ldr r1, [r0, #0x0] - cmp r1, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - mov r1, #0x1 - str r1, [r0, #0x0] - bl CTRDGi_InitCommon - ldr r0, _020DBD38 ; =0x021D6954 - mov r1, #0x0 - str r1, [r0, #0x0] - bl PXI_Init - mov r5, #0xd - mov r4, #0x1 -_020DBCC4: - mov r0, r5 - mov r1, r4 - bl PXI_IsCallbackReady -_020DBCD0: ; 0x020DBCD0 - cmp r0, #0x0 - beq _020DBCC4 - ldr r1, _020DBD3C ; =CTRDGi_CallbackForInitModuleInfo - mov r0, #0xd - bl PXI_SetFifoRecvCallback - bl CTRDGi_InitModuleInfo - mov r0, #0xd - mov r1, #0x0 - bl PXI_SetFifoRecvCallback - ldr r1, _020DBD40 ; =CTRDGi_PulledOutCallback - mov r0, #0xd - bl PXI_SetFifoRecvCallback - ldr r1, _020DBD44 ; =0x021D6958 - mov r2, #0x0 - ldr r0, _020DBD48 ; =0x021D6A20 - str r2, [r1, #0x0] - bl CTRDGi_InitTaskThread - ldr r1, _020DBD4C ; =CTRDGi_CallbackForSetPhi - mov r0, #0x11 - bl PXI_SetFifoRecvCallback -_020DBD20: ; 0x020DBD20 - mov r0, #0x0 - bl CTRDG_Enable - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DBD34: .word 0x021D6950 -_020DBD38: .word 0x021D6954 -_020DBD3C: .word CTRDGi_CallbackForInitModuleInfo -_020DBD40: .word CTRDGi_PulledOutCallback -_020DBD44: .word 0x021D6958 -_020DBD48: .word 0x021D6A20 -_020DBD4C: .word CTRDGi_CallbackForSetPhi - - arm_func_start CTRDG_IdentifyAgbBackup -CTRDG_IdentifyAgbBackup: ; 0x020DBD50 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - cmp r7, #0x1 - mov r0, #0x1 - bhi _020DBEAC - bl OS_GetLockID - ldr r1, _020DBED8 ; =0x021D6B0C - strh r0, [r1, #0x0] - ldrh r0, [r1, #0x0] - bl OS_LockCartridge - ldr r6, _020DBEDC ; =0x04000204 - ldr r1, _020DBEE0 ; =0x02103FE4 - ldrh r3, [r6, #0x0] - ldrh r2, [r6, #0x0] - ldr r0, _020DBEE4 ; =0x021D6B28 - and r4, r3, #0x3 - bic r2, r2, #0x3 - orr r2, r2, #0x3 - strh r2, [r6, #0x0] - str r1, [r0, #0x0] - bl CTRDGi_ReadFlashID - ldr r2, _020DBEDC ; =0x04000204 - mov r6, r0 - ldrh r1, [r2, #0x0] - cmp r7, #0x0 - ldreq r5, _020DBEE8 ; =0x02103FF4 - bic r1, r1, #0x3 - orr r1, r1, r4 - cmp r7, #0x1 - ldr r0, _020DBED8 ; =0x021D6B0C - strh r1, [r2, #0x0] - ldrh r0, [r0, #0x0] - ldreq r5, _020DBEEC ; =0x02103FE8 - bl OS_UnlockCartridge2 - ldr r2, [r5, #0x0] - mov r0, #0x1 - ldrh r1, [r2, #0x38] - cmp r1, #0x0 - beq _020DBE14 - and r3, r6, #0xff -_020DBDF4: - ldrh r1, [r2, #0x38] - cmp r3, r1 - moveq r0, #0x0 - beq _020DBE14 - ldr r2, [r5, #0x4]! - ldrh r1, [r2, #0x38] - cmp r1, #0x0 - bne _020DBDF4 -_020DBE14: - ldr r2, [r2, #0x0] - ldr r1, _020DBEF0 ; =0x021D6B14 - ldr r3, _020DBEF4 ; =0x021D6B34 - str r2, [r1, #0x0] - ldr r1, [r5, #0x0] - ldr r2, _020DBEF8 ; =0x021D6B2C - ldr r4, [r1, #0x4] - ldr r1, _020DBEFC ; =0x021D6B18 - str r4, [r3, #0x0] - ldr r3, [r5, #0x0] - ldr r6, _020DBF00 ; =0x021D6B1C - ldr r3, [r3, #0x8] - ldr r4, _020DBF04 ; =0x021D6B30 - str r3, [r2, #0x0] - ldr r2, [r5, #0x0] - ldr r3, _020DBF08 ; =0x021D6B24 - ldr r7, [r2, #0xc] - ldr r2, _020DBEE4 ; =0x021D6B28 - str r7, [r1, #0x0] - ldr r7, [r5, #0x0] - ldr r1, _020DBF0C ; =0x021D6B20 - ldr r7, [r7, #0x10] - add sp, sp, #0x4 - str r7, [r6, #0x0] - ldr r6, [r5, #0x0] - ldr r6, [r6, #0x14] - str r6, [r4, #0x0] - ldr r4, [r5, #0x0] - ldr r4, [r4, #0x18] - str r4, [r3, #0x0] - ldr r3, [r5, #0x0] - ldr r3, [r3, #0x1c] - str r3, [r2, #0x0] - ldr r2, [r5, #0x0] - add r2, r2, #0x20 - str r2, [r1, #0x0] - ldmia sp!, {r4-r7,lr} - bx lr -_020DBEAC: - cmp r7, #0x2 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r7,lr} - bxne lr - bl OS_GetLockID - ldr r1, _020DBF10 ; =0x021D6B4C - strh r0, [r1, #0x0] - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020DBED8: .word 0x021D6B0C -_020DBEDC: .word 0x04000204 -_020DBEE0: .word 0x02103FE4 -_020DBEE4: .word 0x021D6B28 -_020DBEE8: .word 0x02103FF4 -_020DBEEC: .word 0x02103FE8 -_020DBEF0: .word 0x021D6B14 -_020DBEF4: .word 0x021D6B34 -_020DBEF8: .word 0x021D6B2C -_020DBEFC: .word 0x021D6B18 -_020DBF00: .word 0x021D6B1C -_020DBF04: .word 0x021D6B30 -_020DBF08: .word 0x021D6B24 -_020DBF0C: .word 0x021D6B20 -_020DBF10: .word 0x021D6B4C - - arm_func_start CTRDG_WriteAndVerifyAgbFlashAsync -CTRDG_WriteAndVerifyAgbFlashAsync: ; 0x020DBF14 - stmdb sp!, {lr} - sub sp, sp, #0x24 - str r1, [sp, #0xc] - strh r0, [sp, #0x20] - str r2, [sp, #0x18] - ldr r1, _020DBF44 ; =CTRDGi_WriteAndVerifyAgbFlashSectorCore - add r0, sp, #0x0 - mov r2, r3 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DBF44: .word CTRDGi_WriteAndVerifyAgbFlashSectorCore - - arm_func_start CTRDG_VerifyAgbFlash -CTRDG_VerifyAgbFlash: - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - str r1, [sp, #0xc] - str r2, [sp, #0x18] - bl CTRDGi_VerifyAgbFlashCore - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDG_WriteAgbFlashSector -CTRDG_WriteAgbFlashSector: - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020DBF90 ; =0x021D6B14 - ldr r2, [r2, #0x0] - blx r2 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DBF90: .word 0x021D6B14 - - arm_func_start CTRDG_ReadAgbFlash -CTRDG_ReadAgbFlash: ; 0x020DBF94 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - str r1, [sp, #0x14] - str r2, [sp, #0x1c] - str r3, [sp, #0x18] - bl CTRDGi_ReadAgbFlashCore - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_WriteAndVerifyAgbFlashSectorCore -CTRDGi_WriteAndVerifyAgbFlashSectorCore: ; 0x020DBFC0 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x24 - mov r4, r0 - ldmia r4!, {r0-r3} - add r12, sp, #0x0 - stmia r12!, {r0-r3} - ldmia r4!, {r0-r3} - stmia r12!, {r0-r3} - ldr r0, [r4, #0x0] - mov r7, #0x0 - str r0, [r12, #0x0] - ldrh r6, [sp, #0x20] - ldr r5, [sp, #0xc] - ldr r4, [sp, #0x18] -_020DBFF8: - mov r0, r6 - mov r1, r5 - bl CTRDG_WriteAgbFlashSector -_020DC004: ; 0x020DC004 - cmp r0, #0x0 - bne _020DC02C - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl CTRDG_VerifyAgbFlash -_020DC01C: ; 0x020DC01C - cmp r0, #0x0 - addeq sp, sp, #0x24 - ldmeqia sp!, {r4-r7,lr} - bxeq lr -_020DC02C: - add r1, r7, #0x1 - mov r1, r1, lsl #0x10 - mov r7, r1, lsr #0x10 - cmp r7, #0x3 - blo _020DBFF8 - add sp, sp, #0x24 - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start CTRDGi_VerifyAgbFlashCore -CTRDGi_VerifyAgbFlashCore: ; 0x020DC04C - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x24 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, _020DC128 ; =0x021D6B0C - ldr r1, [r5, #0x0] - ldrh r0, [r0, #0x0] - str r1, [r4, #0x0] - ldrh r6, [sp, #0x20] - ldr r5, [sp, #0xc] - ldr r4, [sp, #0x18] - bl OS_LockCartridge - ldr r3, _020DC12C ; =0x04000204 - ldr r0, _020DC130 ; =0x021D6B20 - ldrh r2, [r3, #0x0] - ldrh r1, [r3, #0x0] - and r7, r2, #0x3 - bic r1, r1, #0x3 - orr r1, r1, #0x3 - strh r1, [r3, #0x0] - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x0] - cmp r0, #0x20000 - bne _020DC0D4 - mov r0, r6, lsl #0xc - mov r0, r0, lsr #0x10 - bl CTRDGi_SetFlashBankMx - and r0, r6, #0xf - mov r0, r0, lsl #0x10 - mov r6, r0, lsr #0x10 -_020DC0D4: - ldr r1, _020DC130 ; =0x021D6B20 - mov r0, r5 - ldr r1, [r1, #0x0] - mov r2, r4 - ldrh r1, [r1, #0x8] - mov r1, r6, lsl r1 - add r1, r1, #0xa000000 - bl CTRDGi_VerifyFlashSectorCore - ldr r3, _020DC12C ; =0x04000204 - ldr r1, _020DC128 ; =0x021D6B0C - ldrh r2, [r3, #0x0] - mov r4, r0 - bic r0, r2, #0x3 - orr r0, r0, r7 - strh r0, [r3, #0x0] - ldrh r0, [r1, #0x0] - bl OS_UnlockCartridge2 - mov r0, r4 - add sp, sp, #0x24 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020DC128: .word 0x021D6B0C -_020DC12C: .word 0x04000204 -_020DC130: .word 0x021D6B20 - - arm_func_start CTRDGi_VerifyFlashSectorCore -CTRDGi_VerifyFlashSectorCore: ; 0x020DC134 - cmp r2, #0x0 - sub r2, r2, #0x1 - beq _020DC160 -_020DC140: - ldrb r12, [r1], #0x1 - ldrb r3, [r0], #0x1 - cmp r12, r3 - subne r0, r1, #0x1 - bxne lr - cmp r2, #0x0 - sub r2, r2, #0x1 - bne _020DC140 -_020DC160: - mov r0, #0x0 - bx lr - - arm_func_start CTRDGi_ReadAgbFlashCore -CTRDGi_ReadAgbFlashCore: ; 0x020DC168 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x28 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, _020DC25C ; =0x021D6B0C - ldr r1, [r5, #0x0] - ldrh r0, [r0, #0x0] - str r1, [r4, #0x0] - ldrh r7, [sp, #0x20] - ldr r6, [sp, #0x14] - ldr r5, [sp, #0x1c] - ldr r4, [sp, #0x18] - bl OS_LockCartridge - ldr r3, _020DC260 ; =0x04000204 - ldr r0, _020DC264 ; =0x021D6B20 - ldrh r2, [r3, #0x0] - ldrh r1, [r3, #0x0] - and r8, r2, #0x3 - bic r1, r1, #0x3 - orr r1, r1, #0x3 - strh r1, [r3, #0x0] - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x0] - cmp r0, #0x20000 - bne _020DC1F4 - mov r0, r7, lsl #0xc - mov r0, r0, lsr #0x10 - bl CTRDGi_SetFlashBankMx - and r0, r7, #0xf - mov r0, r0, lsl #0x10 - mov r7, r0, lsr #0x10 -_020DC1F4: - ldr r0, _020DC264 ; =0x021D6B20 - cmp r4, #0x0 - ldr r0, [r0, #0x0] - sub r4, r4, #0x1 - ldrh r0, [r0, #0x8] - mov r0, r7, lsl r0 - add r0, r0, #0xa000000 - add r1, r6, r0 - beq _020DC22C -_020DC218: - ldrb r0, [r1], #0x1 - cmp r4, #0x0 - sub r4, r4, #0x1 - strb r0, [r5], #0x1 - bne _020DC218 -_020DC22C: - ldr r2, _020DC260 ; =0x04000204 - ldr r0, _020DC25C ; =0x021D6B0C - ldrh r1, [r2, #0x0] - bic r1, r1, #0x3 - orr r1, r1, r8 - strh r1, [r2, #0x0] - ldrh r0, [r0, #0x0] - bl OS_UnlockCartridge2 - mov r0, #0x0 - add sp, sp, #0x28 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020DC25C: .word 0x021D6B0C -_020DC260: .word 0x04000204 -_020DC264: .word 0x021D6B20 - - arm_func_start CTRDGi_PollingSR1MCOMMON -CTRDGi_PollingSR1MCOMMON: ; 0x020DC268 - stmdb sp!, {r4-r8,lr} - mov r8, r0 - mov r7, r1 - mov r6, r2 - mov r5, #0x0 - bl StartFlashTimer - ldr r4, _020DC318 ; =0x021D6B10 -_020DC284: - bl CheckFlashTimer - mov r0, r7 - bl CTRDGi_ReadSrFunc - cmp r0, r6 - beq _020DC300 - ands r0, r0, #0x20 - beq _020DC2CC - mov r0, r7 - bl CTRDGi_ReadSrFunc -_020DC2A8: ; 0x020DC2A8 - cmp r6, r0 - beq _020DC300 - orr r0, r8, #0xa000 - mov r0, r0, lsl #0x10 - ldr r1, _020DC31C ; =0x0A005555 - mov r2, #0xf0 - strb r2, [r1, #0x0] - mov r5, r0, lsr #0x10 - b _020DC300 -_020DC2CC: - ldrh r0, [r4, #0x0] - cmp r0, #0x0 - beq _020DC284 - mov r0, r7 - bl CTRDGi_ReadSrFunc -_020DC2E0: ; 0x020DC2E0 - cmp r6, r0 - beq _020DC300 - orr r0, r8, #0xc000 - mov r0, r0, lsl #0x10 - ldr r1, _020DC31C ; =0x0A005555 - mov r2, #0xf0 - strb r2, [r1, #0x0] - mov r5, r0, lsr #0x10 -_020DC300: - bl CTRDG_IsExisting -_020DC304: ; 0x020DC304 - cmp r0, #0x0 - moveq r5, #0x1000 - mov r0, r5 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020DC318: .word 0x021D6B10 -_020DC31C: .word 0x0A005555 - - arm_func_start CTRDGi_PollingSR512kCOMMON -CTRDGi_PollingSR512kCOMMON: ; 0x020DC320 - stmdb sp!, {r4-r8,lr} - mov r4, r0 - mov r8, r1 - mov r7, r2 - mov r6, #0x0 - bl StartFlashTimer - ldr r5, _020DC3A8 ; =0x021D6B10 -_020DC33C: - mov r0, r8 - bl CTRDGi_ReadSrFunc - cmp r0, r7 - beq _020DC390 - ldrh r0, [r5, #0x0] - cmp r0, #0x0 - beq _020DC33C - mov r0, r8 - bl CTRDGi_ReadSrFunc -_020DC360: ; 0x020DC360 - cmp r7, r0 - beq _020DC390 - ldr r0, _020DC3AC ; =0x021D6B20 - ldr r0, [r0, #0x0] - ldrh r0, [r0, #0x18] - cmp r0, #0xc2 - ldreq r0, _020DC3B0 ; =0x0A005555 - moveq r1, #0xf0 - streqb r1, [r0, #0x0] - orr r0, r4, #0xc000 - mov r0, r0, lsl #0x10 - mov r6, r0, lsr #0x10 -_020DC390: - bl CTRDG_IsExisting -_020DC394: ; 0x020DC394 - cmp r0, #0x0 - moveq r6, #0x1000 - mov r0, r6 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020DC3A8: .word 0x021D6B10 -_020DC3AC: .word 0x021D6B20 -_020DC3B0: .word 0x0A005555 - - arm_func_start CTRDGi_ReadSrFunc -CTRDGi_ReadSrFunc: - ldrb r0, [r0, #0x0] - bx lr - - arm_func_start CheckFlashTimer -CheckFlashTimer: ; 0x020DC3BC - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl OS_GetTick - ldr r3, _020DC420 ; =0x021D6B44 - ldr r2, _020DC424 ; =0x000082EA - ldr r12, [r3, #0x0] - ldr r3, [r3, #0x4] - subs r12, r0, r12 - sbc r0, r1, r3 - mov r1, r0, lsl #0x6 - orr r1, r1, r12, lsr #0x1a - mov r0, r12, lsl #0x6 - mov r3, #0x0 - bl _ll_udiv - ldr r2, _020DC428 ; =0x021D6B3C - ldr r3, [r2, #0x4] - ldr r2, [r2, #0x0] - cmp r3, r1 - cmpeq r2, r0 - ldrls r0, _020DC42C ; =0x021D6B10 - movls r1, #0x1 - strlsh r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DC420: .word 0x021D6B44 -_020DC424: .word 0x000082EA -_020DC428: .word 0x021D6B3C -_020DC42C: .word 0x021D6B10 - - arm_func_start StartFlashTimer -StartFlashTimer: ; 0x020DC430 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020DC47C ; =0x021D6B28 - ldr r2, _020DC480 ; =0x021D6B10 - mov r3, #0x0 - ldr r1, [r1, #0x0] - strh r3, [r2, #0x0] - mov r0, r0, lsl #0x1 - ldrh r1, [r1, r0] - ldr r0, _020DC484 ; =0x021D6B3C - str r1, [r0, #0x0] - str r3, [r0, #0x4] - bl OS_GetTick - ldr r2, _020DC488 ; =0x021D6B44 - str r0, [r2, #0x0] - str r1, [r2, #0x4] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DC47C: .word 0x021D6B28 -_020DC480: .word 0x021D6B10 -_020DC484: .word 0x021D6B3C -_020DC488: .word 0x021D6B44 - - arm_func_start CTRDGi_ReadFlashID -CTRDGi_ReadFlashID: ; 0x020DC48C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r5, _020DC590 ; =0x04000208 - mov r0, #0x0 - ldrh r2, [r5, #0x0] - ldr r1, _020DC594 ; =0x021D6B38 - ldr r4, _020DC598 ; =0x0A005555 - strh r0, [r5, #0x0] - str r2, [r1, #0x0] - mov r3, #0xaa - ldr r2, _020DC59C ; =0x0A002AAA - strb r3, [r4, #0x0] - mov r3, #0x55 - strb r3, [r2, #0x0] - mov r2, #0x90 - strb r2, [r4, #0x0] - ldrh r2, [r5, #0x0] - ldr r1, [r1, #0x0] - strh r1, [r5, #0x0] - bl StartFlashTimer - ldr r4, _020DC5A0 ; =0x021D6B10 - ldrh r0, [r4, #0x0] - cmp r0, #0x0 - bne _020DC4FC -_020DC4EC: - bl CheckFlashTimer - ldrh r0, [r4, #0x0] - cmp r0, #0x0 - beq _020DC4EC -_020DC4FC: - ldr r0, _020DC5A4 ; =0x0A000001 - bl CTRDGi_ReadSrFunc - mov r4, r0, lsl #0x18 - mov r0, #0xa000000 - bl CTRDGi_ReadSrFunc - ldr ip, _020DC590 ; =0x04000208 - orr r4, r0, r4, lsr #0x10 - ldrh r2, [r12, #0x0] - mov r0, #0x0 - ldr r1, _020DC594 ; =0x021D6B38 - strh r0, [r12, #0x0] - ldr r5, _020DC598 ; =0x0A005555 - str r2, [r1, #0x0] - mov r3, #0xaa - ldr r2, _020DC59C ; =0x0A002AAA - strb r3, [r5, #0x0] - mov r3, #0x55 - strb r3, [r2, #0x0] - mov r2, #0xf0 - strb r2, [r5, #0x0] - strb r2, [r5, #0x0] - ldrh r2, [r12, #0x0] - ldr r1, [r1, #0x0] - strh r1, [r12, #0x0] - bl StartFlashTimer - ldr r5, _020DC5A0 ; =0x021D6B10 - ldrh r0, [r5, #0x0] - cmp r0, #0x0 - bne _020DC580 -_020DC570: - bl CheckFlashTimer - ldrh r0, [r5, #0x0] - cmp r0, #0x0 - beq _020DC570 -_020DC580: - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DC590: .word 0x04000208 -_020DC594: .word 0x021D6B38 -_020DC598: .word 0x0A005555 -_020DC59C: .word 0x0A002AAA -_020DC5A0: .word 0x021D6B10 -_020DC5A4: .word 0x0A000001 - - arm_func_start CTRDGi_SetFlashBankMx -CTRDGi_SetFlashBankMx: ; 0x020DC5A8 - ldr r3, _020DC5D4 ; =0x0A005555 - mov r2, #0xaa - ldr r1, _020DC5D8 ; =0x0A002AAA - strb r2, [r3, #0x0] - mov r2, #0x55 - strb r2, [r1, #0x0] - mov r1, #0xb0 - strb r1, [r3, #0x0] - mov r1, #0xa000000 - strb r0, [r1, #0x0] - bx lr - .balign 4 -_020DC5D4: .word 0x0A005555 -_020DC5D8: .word 0x0A002AAA - - arm_func_start CTRDGi_WriteFlashSectorAsyncAT -CTRDGi_WriteFlashSectorAsyncAT: ; 0x020DC5DC - stmdb sp!, {lr} - sub sp, sp, #0x24 - str r1, [sp, #0xc] - strh r0, [sp, #0x20] - ldr r1, _020DC604 ; =CTRDGi_WriteFlashSectorCoreAT - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DC604: .word CTRDGi_WriteFlashSectorCoreAT - - arm_func_start CTRDGi_EraseFlashSectorAsyncAT -CTRDGi_EraseFlashSectorAsyncAT: ; 0x020DC608 - stmdb sp!, {lr} - sub sp, sp, #0x24 - mov r2, r1 - strh r0, [sp, #0x20] - ldr r1, _020DC630 ; =CTRDGi_EraseFlashSectorCoreAT - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DC630: .word CTRDGi_EraseFlashSectorCoreAT - - arm_func_start CTRDGi_WriteFlashSectorAT -CTRDGi_WriteFlashSectorAT: ; 0x020DC634 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - str r1, [sp, #0xc] - bl CTRDGi_WriteFlashSectorCoreAT - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_EraseFlashSectorAT -CTRDGi_EraseFlashSectorAT: - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - bl CTRDGi_EraseFlashSectorCoreAT - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_WriteFlash4KBAsyncAT -CTRDGi_WriteFlash4KBAsyncAT: ; 0x020DC688 - stmdb sp!, {lr} - sub sp, sp, #0x24 - str r1, [sp, #0xc] - strh r0, [sp, #0x20] - ldr r1, _020DC6B0 ; =CTRDGi_WriteFlash4KBCoreAT - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DC6B0: .word CTRDGi_WriteFlash4KBCoreAT - - arm_func_start CTRDGi_EraseFlash4KBAsyncAT -CTRDGi_EraseFlash4KBAsyncAT: ; 0x020DC6B4 - stmdb sp!, {lr} - sub sp, sp, #0x24 - mov r2, r1 - strh r0, [sp, #0x20] - ldr r1, _020DC6DC ; =CTRDGi_EraseFlash4KBCoreAT - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DC6DC: .word CTRDGi_EraseFlash4KBCoreAT - - arm_func_start CTRDGi_EraseFlashChipAsyncAT -CTRDGi_EraseFlashChipAsyncAT: ; 0x020DC6E0 - stmdb sp!, {lr} - sub sp, sp, #0x24 - ldr r1, _020DC704 ; =CTRDGi_EraseFlashChipCoreAT - mov r2, r0 - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DC704: .word CTRDGi_EraseFlashChipCoreAT - - arm_func_start CTRDGi_WriteFlash4KBAT -CTRDGi_WriteFlash4KBAT: ; 0x020DC708 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - str r1, [sp, #0xc] - bl CTRDGi_WriteFlash4KBCoreAT - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_EraseFlash4KBAT -CTRDGi_EraseFlash4KBAT: ; 0x020DC734 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - bl CTRDGi_EraseFlash4KBCoreAT - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_EraseFlashChipAT -CTRDGi_EraseFlashChipAT: ; 0x020DC75C - stmdb sp!, {lr} - sub sp, sp, #0x24 - add r0, sp, #0x0 - bl CTRDGi_EraseFlashChipCoreAT - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_WriteFlash4KBCoreAT -CTRDGi_WriteFlash4KBCoreAT: ; 0x020DC780 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x24 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, [r5, #0x0] - str r0, [r4, #0x0] - ldrh r0, [sp, #0x20] - ldr r7, [sp, #0xc] - cmp r0, #0x10 - addcs sp, sp, #0x24 - ldrhs r0, _020DC85C ; =0x000080FF - ldmcsia sp!, {r4-r9,lr} - bxcs lr - ldr r1, _020DC860 ; =0x0210400C - mov r0, r0, lsl #0x15 - ldr r1, [r1, #0x24] - ldr r4, _020DC864 ; =0x021D6B08 - mov r8, r0, lsr #0x10 - strh r1, [r4, #0x0] - ldrh r0, [r4, #0x0] - cmp r0, #0x0 - beq _020DC84C - ldr r0, _020DC868 ; =0x02104048 - ldr r6, [r0, #0x24] - mov r5, #0x2 -_020DC7F4: - mov r9, r5 -_020DC7F8: - mov r0, r8 - mov r1, r7 - bl CTRDGi_WriteFlashSectorAT - movs r12, r0 - beq _020DC81C - sub r0, r9, #0x1 - mov r0, r0, lsl #0x10 - movs r9, r0, lsr #0x10 - bne _020DC7F8 -_020DC81C: - cmp r12, #0x0 - bne _020DC84C - ldrh r1, [r4, #0x0] - add r0, r8, #0x1 - mov r0, r0, lsl #0x10 - sub r1, r1, r6 - strh r1, [r4, #0x0] - ldrh r1, [r4, #0x0] - add r7, r7, r6 - mov r8, r0, lsr #0x10 - cmp r1, #0x0 - bne _020DC7F4 -_020DC84C: - mov r0, r12 - add sp, sp, #0x24 - ldmia sp!, {r4-r9,lr} - bx lr - .balign 4 -_020DC85C: .word 0x000080FF -_020DC860: .word 0x0210400C -_020DC864: .word 0x021D6B08 -_020DC868: .word 0x02104048 - - arm_func_start CTRDGi_WriteFlashSectorCoreAT -CTRDGi_WriteFlashSectorCoreAT: ; 0x020DC86C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x24 - mov r5, r0 - add r4, sp, #0x0 - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, _020DC984 ; =0x021D6B0C - ldr r1, [r5, #0x0] - ldrh r0, [r0, #0x0] - str r1, [r4, #0x0] - ldr r4, [sp, #0xc] - bl OS_LockCartridge - ldr r5, _020DC988 ; =0x04000204 - ldr r1, _020DC98C ; =0x021D6B20 - ldrh r0, [r5, #0x0] - ldr r1, [r1, #0x0] - ldrh r2, [r5, #0x0] - ldr r3, [r1, #0x10] - ldr r1, _020DC990 ; =0x02104048 - bic r2, r2, #0x3 - orr r2, r2, r3 - strh r2, [r5, #0x0] - ldr r5, _020DC994 ; =0x04000208 - ldrh lr, [sp, #0x20] - ldrh r12, [r1, #0x28] - ldrh r2, [r5, #0x0] - mov r3, #0x0 - mov lr, lr, lsl r12 - strh r3, [r5, #0x0] - ldr ip, _020DC998 ; =0x0A005555 - mov r5, #0xaa - strb r5, [r12, #0x0] - ldr r3, _020DC99C ; =0x0A002AAA - mov r5, #0x55 - strb r5, [r3, #0x0] - mov r3, #0xa0 - strb r3, [r12, #0x0] - ldr r3, [r1, #0x24] - and r5, r0, #0x3 - cmp r3, #0x0 - add r1, lr, #0xa000000 - beq _020DC92C -_020DC91C: - ldrb r0, [r4], #0x1 - subs r3, r3, #0x1 - strb r0, [r1], #0x1 - bne _020DC91C -_020DC92C: - ldr ip, _020DC994 ; =0x04000208 - ldr r3, _020DC9A0 ; =0x021D6B24 - ldrh r0, [r12, #0x0] - sub r1, r1, #0x1 - mov r0, #0x1 - strh r2, [r12, #0x0] - ldrb r2, [r4, #-0x1] - ldr r3, [r3, #0x0] - blx r3 - ldr r3, _020DC988 ; =0x04000204 - ldr r1, _020DC984 ; =0x021D6B0C - ldrh r2, [r3, #0x0] - mov r4, r0 - bic r0, r2, #0x3 - orr r0, r0, r5 - strh r0, [r3, #0x0] - ldrh r0, [r1, #0x0] - bl OS_UnlockCartridge2 - mov r0, r4 - add sp, sp, #0x24 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DC984: .word 0x021D6B0C -_020DC988: .word 0x04000204 -_020DC98C: .word 0x021D6B20 -_020DC990: .word 0x02104048 -_020DC994: .word 0x04000208 -_020DC998: .word 0x0A005555 -_020DC99C: .word 0x0A002AAA -_020DC9A0: .word 0x021D6B24 - - arm_func_start CTRDGi_EraseFlash4KBCoreAT -CTRDGi_EraseFlash4KBCoreAT: ; 0x020DC9A4 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x24 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, [r5, #0x0] - str r0, [r4, #0x0] - ldrh r0, [sp, #0x20] - cmp r0, #0x10 - addcs sp, sp, #0x24 - ldrhs r0, _020DCA54 ; =0x000080FF - ldmcsia sp!, {r4-r7,lr} - bxcs lr - mov r0, r0, lsl #0x15 - mov r5, r0, lsr #0x10 - mov r6, #0x0 - mov r4, #0x2 -_020DC9F4: - mov r7, r4 -_020DC9F8: - mov r0, r5 - bl CTRDGi_EraseFlashSectorAT -_020DCA00: ; 0x020DCA00 - cmp r0, #0x0 - beq _020DCA18 - sub r1, r7, #0x1 - mov r1, r1, lsl #0x10 - movs r7, r1, lsr #0x10 - bne _020DC9F8 -_020DCA18: - add r1, r5, #0x1 - mov r1, r1, lsl #0x10 - cmp r0, #0x0 - mov r5, r1, lsr #0x10 - addne sp, sp, #0x24 - ldmneia sp!, {r4-r7,lr} - bxne lr - add r1, r6, #0x1 - mov r1, r1, lsl #0x10 - mov r6, r1, lsr #0x10 - cmp r6, #0x20 - blo _020DC9F4 - add sp, sp, #0x24 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020DCA54: .word 0x000080FF - - arm_func_start CTRDGi_EraseFlashSectorCoreAT -CTRDGi_EraseFlashSectorCoreAT: ; 0x020DCA58 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x24 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, [r5, #0x0] - ldr r1, _020DCB80 ; =0x02104048 - str r0, [r4, #0x0] - ldr r0, _020DCB84 ; =0x021D6B0C - ldrh r2, [sp, #0x20] - ldrh r1, [r1, #0x28] - ldrh r0, [r0, #0x0] - mov r1, r2, lsl r1 - add r5, r1, #0xa000000 - bl OS_LockCartridge - ldr r4, _020DCB88 ; =0x04000204 - ldr r1, _020DCB8C ; =0x021D6B20 - ldrh r0, [r4, #0x0] - ldr r2, [r1, #0x0] - ldrh r1, [r4, #0x0] - ldr r2, [r2, #0x10] - ldr r3, _020DCB90 ; =0x04000208 - bic r1, r1, #0x3 - orr r1, r1, r2 - strh r1, [r4, #0x0] - ldrh r2, [r3, #0x0] - mov r1, #0x0 - ldr r4, _020DCB94 ; =0x0A005555 - strh r1, [r3, #0x0] - mov r3, #0xaa - strb r3, [r4, #0x0] - ldr r1, _020DCB98 ; =0x0A002AAA - mov r3, #0x55 - strb r3, [r1, #0x0] - mov r3, #0xa0 - strb r3, [r4, #0x0] - ldr r1, _020DCB80 ; =0x02104048 - and r4, r0, #0x3 - ldr r1, [r1, #0x24] - cmp r1, #0x0 - beq _020DCB18 - mov r0, #0xff -_020DCB0C: - strb r0, [r5], #0x1 - subs r1, r1, #0x1 - bne _020DCB0C -_020DCB18: - ldr ip, _020DCB90 ; =0x04000208 - ldr r3, _020DCB9C ; =0x021D6B24 - ldrh r0, [r12, #0x0] - sub r1, r5, #0x1 - strh r2, [r12, #0x0] - ldr r3, [r3, #0x0] - mov r0, #0x1 - mov r2, #0xff - blx r3 - ldr r2, _020DCB88 ; =0x04000204 - movs r5, r0 - ldrh r1, [r2, #0x0] - andne r0, r5, #0xff00 - orrne r0, r0, #0x2 - movne r0, r0, lsl #0x10 - bic r1, r1, #0x3 - movne r5, r0, lsr #0x10 - orr r1, r1, r4 - ldr r0, _020DCB84 ; =0x021D6B0C - strh r1, [r2, #0x0] - ldrh r0, [r0, #0x0] - bl OS_UnlockCartridge2 - mov r0, r5 - add sp, sp, #0x24 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DCB80: .word 0x02104048 -_020DCB84: .word 0x021D6B0C -_020DCB88: .word 0x04000204 -_020DCB8C: .word 0x021D6B20 -_020DCB90: .word 0x04000208 -_020DCB94: .word 0x0A005555 -_020DCB98: .word 0x0A002AAA -_020DCB9C: .word 0x021D6B24 - - arm_func_start CTRDGi_EraseFlashChipCoreAT -CTRDGi_EraseFlashChipCoreAT: ; 0x020DCBA0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020DCC7C ; =0x021D6B0C - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r4, _020DCC80 ; =0x04000204 - ldr r0, _020DCC84 ; =0x021D6B20 - ldrh r3, [r4, #0x0] - ldr r0, [r0, #0x0] - ldrh r1, [r4, #0x0] - ldr r2, [r0, #0x10] - ldr r0, _020DCC88 ; =0x04000208 - bic r1, r1, #0x3 - orr r1, r1, r2 - strh r1, [r4, #0x0] - ldrh r4, [r0, #0x0] - mov r2, #0x0 - ldr r1, _020DCC8C ; =0x021D6B38 - strh r2, [r0, #0x0] - ldr lr, _020DCC90 ; =0x0A005555 - str r4, [r1, #0x0] - mov r5, #0xaa - ldr r4, _020DCC94 ; =0x0A002AAA - strb r5, [lr, #0x0] - mov r12, #0x55 - strb r12, [r4, #0x0] - mov r2, #0x80 - strb r2, [lr, #0x0] - strb r5, [lr, #0x0] - strb r12, [r4, #0x0] - mov r2, #0x10 - strb r2, [lr, #0x0] - ldrh r2, [r0, #0x0] - ldr r2, [r1, #0x0] - ldr r1, _020DCC98 ; =0x021D6B24 - strh r2, [r0, #0x0] - ldr r4, [r1, #0x0] - mov r0, #0x3 - mov r1, #0xa000000 - mov r2, #0xff - and r5, r3, #0x3 - blx r4 - ldr r3, _020DCC80 ; =0x04000204 - ldr r1, _020DCC7C ; =0x021D6B0C - ldrh r2, [r3, #0x0] - mov r4, r0 - bic r0, r2, #0x3 - orr r0, r0, r5 - strh r0, [r3, #0x0] - ldrh r0, [r1, #0x0] - bl OS_UnlockCartridge2 - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DCC7C: .word 0x021D6B0C -_020DCC80: .word 0x04000204 -_020DCC84: .word 0x021D6B20 -_020DCC88: .word 0x04000208 -_020DCC8C: .word 0x021D6B38 -_020DCC90: .word 0x0A005555 -_020DCC94: .word 0x0A002AAA -_020DCC98: .word 0x021D6B24 - - arm_func_start CTRDGi_WriteFlashSectorAsyncLE -CTRDGi_WriteFlashSectorAsyncLE: ; 0x020DCC9C - stmdb sp!, {lr} - sub sp, sp, #0x24 - str r1, [sp, #0xc] - strh r0, [sp, #0x20] - ldr r1, _020DCCC4 ; =CTRDGi_WriteFlashSectorCoreLE - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DCCC4: .word CTRDGi_WriteFlashSectorCoreLE - - arm_func_start CTRDGi_EraseFlashSectorAsyncLE -CTRDGi_EraseFlashSectorAsyncLE: ; 0x020DCCC8 - stmdb sp!, {lr} - sub sp, sp, #0x24 - mov r2, r1 - strh r0, [sp, #0x20] - ldr r1, _020DCCF0 ; =CTRDGi_EraseFlashSectorCoreLE - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DCCF0: .word CTRDGi_EraseFlashSectorCoreLE - - arm_func_start CTRDGi_EraseFlashChipAsyncLE -CTRDGi_EraseFlashChipAsyncLE: ; 0x020DCCF4 - stmdb sp!, {lr} - sub sp, sp, #0x24 - ldr r1, _020DCD18 ; =CTRDGi_EraseFlashChipCoreLE - mov r2, r0 - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DCD18: .word CTRDGi_EraseFlashChipCoreLE - - arm_func_start CTRDGi_WriteFlashSectorLE -CTRDGi_WriteFlashSectorLE: ; 0x020DCD1C - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - str r1, [sp, #0xc] - bl CTRDGi_WriteFlashSectorCoreLE - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_EraseFlashSectorLE -CTRDGi_EraseFlashSectorLE: ; 0x020DCD48 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - bl CTRDGi_EraseFlashSectorCoreLE - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_EraseFlashChipLE -CTRDGi_EraseFlashChipLE: ; 0x020DCD70 - stmdb sp!, {lr} - sub sp, sp, #0x24 - add r0, sp, #0x0 - bl CTRDGi_EraseFlashChipCoreLE - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_VerifyFlashErase -CTRDGi_VerifyFlashErase: ; 0x020DCD94 - stmdb sp!, {r4-r6,lr} - ldr r2, _020DCE14 ; =0x021D6B0C - mov r4, r0 - ldrh r0, [r2, #0x0] - mov r5, r1 - bl OS_LockCartridge - ldr ip, _020DCE18 ; =0x04000204 - ldr r0, _020DCE1C ; =0x021D6B20 - ldrh r3, [r12, #0x0] - ldr r0, [r0, #0x0] - ldrh r1, [r12, #0x0] - ldr r2, [r0, #0x10] - mov r0, r4 - bic r1, r1, #0x3 - orr r1, r1, r2 - strh r1, [r12, #0x0] - and r6, r3, #0x3 - mov r4, #0x0 - blx r5 - cmp r0, #0x0 - ldr r2, _020DCE18 ; =0x04000204 - ldr r0, _020DCE14 ; =0x021D6B0C - ldrh r1, [r2, #0x0] - ldrne r4, _020DCE20 ; =0x00008004 - bic r1, r1, #0x3 - orr r1, r1, r6 - strh r1, [r2, #0x0] - ldrh r0, [r0, #0x0] - bl OS_UnlockCartridge2 - mov r0, r4 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020DCE14: .word 0x021D6B0C -_020DCE18: .word 0x04000204 -_020DCE1C: .word 0x021D6B20 -_020DCE20: .word 0x00008004 - - arm_func_start CTRDGi_VerifyFlashCoreFF -CTRDGi_VerifyFlashCoreFF: ; 0x020DCE24 - ldr r1, _020DCE54 ; =0x021D6B20 - ldr r1, [r1, #0x0] - ldr r2, [r1, #0x4] - cmp r2, #0x0 - beq _020DCE4C -_020DCE38: - ldrb r1, [r0], #0x1 - cmp r1, #0xff - bne _020DCE4C - subs r2, r2, #0x1 - bne _020DCE38 -_020DCE4C: - mov r0, r2 - bx lr - .balign 4 -_020DCE54: .word 0x021D6B20 - - arm_func_start CTRDGi_WriteFlashSectorCoreLE -CTRDGi_WriteFlashSectorCoreLE: ; 0x020DCE58 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x24 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, [r5, #0x0] - str r0, [r4, #0x0] - ldrh r7, [sp, #0x20] - ldr r6, [sp, #0xc] - cmp r7, #0x10 - addcs sp, sp, #0x24 - ldrhs r0, _020DD018 ; =0x000080FF - ldmcsia sp!, {r4-r9,lr} - bxcs lr - ldr r0, _020DD01C ; =0x021D6B20 - mov r9, #0x0 - ldr r0, [r0, #0x0] - ldrh r0, [r0, #0x8] - mov r0, r7, lsl r0 - add r4, r0, #0xa000000 - ldr r5, _020DD020 ; =CTRDGi_VerifyFlashCoreFF -_020DCEB8: - mov r0, r7 - bl CTRDGi_EraseFlashSectorLE - movs r8, r0 - bne _020DCEE0 - mov r0, r4 - mov r1, r5 - bl CTRDGi_VerifyFlashErase - mov r0, r0, lsl #0x10 - movs r8, r0, lsr #0x10 - beq _020DCF04 -_020DCEE0: - add r0, r9, #0x1 - mov r0, r0, lsl #0x10 - cmp r9, #0x50 - mov r9, r0, lsr #0x10 - bne _020DCEB8 - add sp, sp, #0x24 - mov r0, r8 - ldmia sp!, {r4-r9,lr} - bx lr -_020DCF04: - mov r5, #0x1 - cmp r9, #0x0 - movne r5, #0x6 - cmp r5, #0x1 - mov r9, #0x1 - blo _020DCF38 -_020DCF1C: - mov r0, r7 - bl CTRDGi_EraseFlashSectorLE - add r0, r9, #0x1 - mov r0, r0, lsl #0x10 - mov r9, r0, lsr #0x10 - cmp r9, r5 - bls _020DCF1C -_020DCF38: - ldr r0, _020DD024 ; =0x021D6B0C - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r5, _020DD028 ; =0x04000204 - ldr r1, _020DD01C ; =0x021D6B20 - ldrh r0, [r5, #0x0] - ldr r3, [r1, #0x0] - ldrh r2, [r5, #0x0] - ldr r3, [r3, #0x10] - ldr r7, _020DD02C ; =0x021D6B08 - bic r2, r2, #0x3 - orr r2, r2, r3 - strh r2, [r5, #0x0] - ldr r1, [r1, #0x0] - ldr sb, _020DD030 ; =0x04000208 - ldr r1, [r1, #0x4] - mov r2, #0x0 - strh r1, [r7, #0x0] - ldrh r3, [r9, #0x0] - ldr r1, _020DD034 ; =0x021D6B38 - and r5, r0, #0x3 - strh r2, [r9, #0x0] - ldrh r0, [r7, #0x0] - str r3, [r1, #0x0] - cmp r0, #0x0 - beq _020DCFD4 -_020DCFA0: - mov r0, r6 - mov r1, r4 - bl CTRDGi_ProgramFlashByteLE - movs r8, r0 - bne _020DCFD4 - ldrh r0, [r7, #0x0] - add r6, r6, #0x1 - add r4, r4, #0x1 - sub r0, r0, #0x1 - strh r0, [r7, #0x0] - ldrh r0, [r7, #0x0] - cmp r0, #0x0 - bne _020DCFA0 -_020DCFD4: - ldr r3, _020DD030 ; =0x04000208 - ldr r0, _020DD034 ; =0x021D6B38 - ldrh r1, [r3, #0x0] - ldr r0, [r0, #0x0] - ldr r2, _020DD028 ; =0x04000204 - strh r0, [r3, #0x0] - ldrh r1, [r2, #0x0] - ldr r0, _020DD024 ; =0x021D6B0C - bic r1, r1, #0x3 - orr r1, r1, r5 - strh r1, [r2, #0x0] - ldrh r0, [r0, #0x0] - bl OS_UnlockCartridge2 - mov r0, r8 - add sp, sp, #0x24 - ldmia sp!, {r4-r9,lr} - bx lr - .balign 4 -_020DD018: .word 0x000080FF -_020DD01C: .word 0x021D6B20 -_020DD020: .word CTRDGi_VerifyFlashCoreFF -_020DD024: .word 0x021D6B0C -_020DD028: .word 0x04000204 -_020DD02C: .word 0x021D6B08 -_020DD030: .word 0x04000208 -_020DD034: .word 0x021D6B38 - - arm_func_start CTRDGi_ProgramFlashByteLE -CTRDGi_ProgramFlashByteLE: ; 0x020DD038 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr ip, _020DD08C ; =0x0A005555 - mov r3, #0xaa - ldr r2, _020DD090 ; =0x0A002AAA - strb r3, [r12, #0x0] - mov r3, #0x55 - mov lr, r0 - strb r3, [r2, #0x0] - mov r0, #0xa0 - strb r0, [r12, #0x0] - ldrb r2, [lr, #0x0] - ldr r3, _020DD094 ; =0x021D6B24 - mov r0, #0x1 - strb r2, [r1, #0x0] - ldrb r2, [lr, #0x0] - ldr r3, [r3, #0x0] - blx r3 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DD08C: .word 0x0A005555 -_020DD090: .word 0x0A002AAA -_020DD094: .word 0x021D6B24 - - arm_func_start CTRDGi_EraseFlashSectorCoreLE -CTRDGi_EraseFlashSectorCoreLE: ; 0x020DD098 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x28 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, [r5, #0x0] - str r0, [r4, #0x0] - ldrh r4, [sp, #0x20] - cmp r4, #0x10 - addcs sp, sp, #0x28 - ldrhs r0, _020DD1B8 ; =0x000080FF - ldmcsia sp!, {r4-r6,lr} - bxcs lr - ldr r0, _020DD1BC ; =0x021D6B0C - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r6, _020DD1C0 ; =0x04000204 - ldr r1, _020DD1C4 ; =0x021D6B20 - ldrh r3, [r6, #0x0] - ldr r0, [r1, #0x0] - ldrh r2, [r6, #0x0] - ldr r5, [r0, #0x10] - ldr r0, _020DD1C8 ; =0x04000208 - bic r2, r2, #0x3 - orr r2, r2, r5 - strh r2, [r6, #0x0] - ldr r1, [r1, #0x0] - ldrh r5, [r0, #0x0] - ldrh r12, [r1, #0x8] - mov r1, #0x0 - ldr r2, _020DD1CC ; =0x021D6B38 - strh r1, [r0, #0x0] - mov r6, r4, lsl r12 - ldr lr, _020DD1D0 ; =0x0A005555 - str r5, [r2, #0x0] - mov r5, #0xaa - ldr r4, _020DD1D4 ; =0x0A002AAA - strb r5, [lr, #0x0] - mov r12, #0x55 - strb r12, [r4, #0x0] - mov r1, #0x80 - strb r1, [lr, #0x0] - strb r5, [lr, #0x0] - strb r12, [r4, #0x0] - add r1, r6, #0xa000000 - mov r4, #0x30 - strb r4, [r1, #0x0] - ldrh r4, [r0, #0x0] - ldr r4, [r2, #0x0] - ldr r2, _020DD1D8 ; =0x021D6B24 - strh r4, [r0, #0x0] - ldr r4, [r2, #0x0] - mov r0, #0x2 - mov r2, #0xff - and r5, r3, #0x3 - blx r4 - ldr r3, _020DD1C0 ; =0x04000204 - ldr r1, _020DD1BC ; =0x021D6B0C - ldrh r2, [r3, #0x0] - mov r4, r0 - bic r0, r2, #0x3 - orr r0, r0, r5 - strh r0, [r3, #0x0] - ldrh r0, [r1, #0x0] - bl OS_UnlockCartridge2 - mov r0, r4 - add sp, sp, #0x28 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020DD1B8: .word 0x000080FF -_020DD1BC: .word 0x021D6B0C -_020DD1C0: .word 0x04000204 -_020DD1C4: .word 0x021D6B20 -_020DD1C8: .word 0x04000208 -_020DD1CC: .word 0x021D6B38 -_020DD1D0: .word 0x0A005555 -_020DD1D4: .word 0x0A002AAA -_020DD1D8: .word 0x021D6B24 - - arm_func_start CTRDGi_EraseFlashChipCoreLE -CTRDGi_EraseFlashChipCoreLE: ; 0x020DD1DC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020DD2B8 ; =0x021D6B0C - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r4, _020DD2BC ; =0x04000204 - ldr r0, _020DD2C0 ; =0x021D6B20 - ldrh r3, [r4, #0x0] - ldr r0, [r0, #0x0] - ldrh r1, [r4, #0x0] - ldr r2, [r0, #0x10] - ldr r0, _020DD2C4 ; =0x04000208 - bic r1, r1, #0x3 - orr r1, r1, r2 - strh r1, [r4, #0x0] - ldrh r4, [r0, #0x0] - mov r2, #0x0 - ldr r1, _020DD2C8 ; =0x021D6B38 - strh r2, [r0, #0x0] - ldr lr, _020DD2CC ; =0x0A005555 - str r4, [r1, #0x0] - mov r5, #0xaa - ldr r4, _020DD2D0 ; =0x0A002AAA - strb r5, [lr, #0x0] - mov r12, #0x55 - strb r12, [r4, #0x0] - mov r2, #0x80 - strb r2, [lr, #0x0] - strb r5, [lr, #0x0] - strb r12, [r4, #0x0] - mov r2, #0x10 - strb r2, [lr, #0x0] - ldrh r2, [r0, #0x0] - ldr r2, [r1, #0x0] - ldr r1, _020DD2D4 ; =0x021D6B24 - strh r2, [r0, #0x0] - ldr r4, [r1, #0x0] - mov r0, #0x3 - mov r1, #0xa000000 - mov r2, #0xff - and r5, r3, #0x3 - blx r4 - ldr r3, _020DD2BC ; =0x04000204 - ldr r1, _020DD2B8 ; =0x021D6B0C - ldrh r2, [r3, #0x0] - mov r4, r0 - bic r0, r2, #0x3 - orr r0, r0, r5 - strh r0, [r3, #0x0] - ldrh r0, [r1, #0x0] - bl OS_UnlockCartridge2 - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DD2B8: .word 0x021D6B0C -_020DD2BC: .word 0x04000204 -_020DD2C0: .word 0x021D6B20 -_020DD2C4: .word 0x04000208 -_020DD2C8: .word 0x021D6B38 -_020DD2CC: .word 0x0A005555 -_020DD2D0: .word 0x0A002AAA -_020DD2D4: .word 0x021D6B24 - - arm_func_start CTRDGi_WriteFlashSectorAsyncMX -CTRDGi_WriteFlashSectorAsyncMX: ; 0x020DD2D8 - stmdb sp!, {lr} - sub sp, sp, #0x24 - str r1, [sp, #0xc] - strh r0, [sp, #0x20] - ldr r1, _020DD300 ; =CTRDGi_WriteFlashSectorCoreMX - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DD300: .word CTRDGi_WriteFlashSectorCoreMX - - arm_func_start CTRDGi_EraseFlashSectorAsyncMX -CTRDGi_EraseFlashSectorAsyncMX: ; 0x020DD304 - stmdb sp!, {lr} - sub sp, sp, #0x24 - mov r2, r1 - strh r0, [sp, #0x20] - ldr r1, _020DD32C ; =CTRDGi_EraseFlashSectorCoreMX - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DD32C: .word CTRDGi_EraseFlashSectorCoreMX - - arm_func_start CTRDGi_EraseFlashChipAsyncMX -CTRDGi_EraseFlashChipAsyncMX: ; 0x020DD330 - stmdb sp!, {lr} - sub sp, sp, #0x24 - ldr r1, _020DD354 ; =CTRDGi_EraseFlashChipCoreMX - mov r2, r0 - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DD354: .word CTRDGi_EraseFlashChipCoreMX - - arm_func_start CTRDGi_WriteFlashSectorMX -CTRDGi_WriteFlashSectorMX: ; 0x020DD358 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - str r1, [sp, #0xc] - bl CTRDGi_WriteFlashSectorCoreMX - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_EraseFlashSectorMX -CTRDGi_EraseFlashSectorMX: ; 0x020DD384 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - bl CTRDGi_EraseFlashSectorCoreMX - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_EraseFlashChipMX -CTRDGi_EraseFlashChipMX: ; 0x020DD3AC - stmdb sp!, {lr} - sub sp, sp, #0x24 - add r0, sp, #0x0 - bl CTRDGi_EraseFlashChipCoreMX - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start CTRDGi_WriteFlashSectorCoreMX -CTRDGi_WriteFlashSectorCoreMX: ; 0x020DD3D0 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x28 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, _020DD540 ; =0x021D6B20 - ldr r1, [r5, #0x0] - ldr r0, [r0, #0x0] - str r1, [r4, #0x0] - ldrh r5, [sp, #0x20] - ldrh r0, [r0, #0xa] - ldr r4, [sp, #0xc] - cmp r5, r0 - addcs sp, sp, #0x28 - ldrhs r0, _020DD544 ; =0x000080FF - ldmcsia sp!, {r4-r8,lr} - bxcs lr - mov r0, r5 - bl CTRDGi_EraseFlashSectorMX - movs r6, r0 - addne sp, sp, #0x28 - ldmneia sp!, {r4-r8,lr} - bxne lr - ldr r0, _020DD548 ; =0x021D6B0C - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r7, _020DD54C ; =0x04000204 - ldr r0, _020DD540 ; =0x021D6B20 - ldrh r3, [r7, #0x0] - ldr r2, [r0, #0x0] - ldrh r1, [r7, #0x0] - mov r0, r5, lsl #0xc - ldr r2, [r2, #0x10] - bic r1, r1, #0x3 - orr r1, r1, r2 - mov r0, r0, lsr #0x10 - strh r1, [r7, #0x0] - and r7, r3, #0x3 - bl CTRDGi_SetFlashBankMx - ldr r0, _020DD540 ; =0x021D6B20 - and r1, r5, #0xf - ldr r3, [r0, #0x0] - mov r0, r1, lsl #0x10 - ldr r2, [r3, #0x4] - ldr r8, _020DD550 ; =0x021D6B08 - ldr r1, _020DD554 ; =0x04000208 - strh r2, [r8, #0x0] - ldrh r3, [r3, #0x8] - mov r5, r0, lsr #0x10 - ldrh r2, [r1, #0x0] - mov r0, #0x0 - mov r3, r5, lsl r3 - strh r0, [r1, #0x0] - ldrh r1, [r8, #0x0] - ldr r0, _020DD558 ; =0x021D6B38 - add r5, r3, #0xa000000 - str r2, [r0, #0x0] - cmp r1, #0x0 - beq _020DD4FC -_020DD4C8: - mov r0, r4 - mov r1, r5 - bl CTRDGi_ProgramFlashByteMX - movs r6, r0 - bne _020DD4FC - ldrh r0, [r8, #0x0] - add r4, r4, #0x1 - add r5, r5, #0x1 - sub r0, r0, #0x1 - strh r0, [r8, #0x0] - ldrh r0, [r8, #0x0] - cmp r0, #0x0 - bne _020DD4C8 -_020DD4FC: - ldr r3, _020DD554 ; =0x04000208 - ldr r0, _020DD558 ; =0x021D6B38 - ldrh r1, [r3, #0x0] - ldr r0, [r0, #0x0] - ldr r2, _020DD54C ; =0x04000204 - strh r0, [r3, #0x0] - ldrh r1, [r2, #0x0] - ldr r0, _020DD548 ; =0x021D6B0C - bic r1, r1, #0x3 - orr r1, r1, r7 - strh r1, [r2, #0x0] - ldrh r0, [r0, #0x0] - bl OS_UnlockCartridge2 - mov r0, r6 - add sp, sp, #0x28 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020DD540: .word 0x021D6B20 -_020DD544: .word 0x000080FF -_020DD548: .word 0x021D6B0C -_020DD54C: .word 0x04000204 -_020DD550: .word 0x021D6B08 -_020DD554: .word 0x04000208 -_020DD558: .word 0x021D6B38 - - arm_func_start CTRDGi_ProgramFlashByteMX -CTRDGi_ProgramFlashByteMX: ; 0x020DD55C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr ip, _020DD5B0 ; =0x0A005555 - mov r3, #0xaa - ldr r2, _020DD5B4 ; =0x0A002AAA - strb r3, [r12, #0x0] - mov r3, #0x55 - mov lr, r0 - strb r3, [r2, #0x0] - mov r0, #0xa0 - strb r0, [r12, #0x0] - ldrb r2, [lr, #0x0] - ldr r3, _020DD5B8 ; =0x021D6B24 - mov r0, #0x1 - strb r2, [r1, #0x0] - ldrb r2, [lr, #0x0] - ldr r3, [r3, #0x0] - blx r3 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DD5B0: .word 0x0A005555 -_020DD5B4: .word 0x0A002AAA -_020DD5B8: .word 0x021D6B24 - - arm_func_start CTRDGi_EraseFlashSectorCoreMX -CTRDGi_EraseFlashSectorCoreMX: ; 0x020DD5BC - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x34 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x10 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, _020DD748 ; =0x021D6B20 - ldr r1, [r5, #0x0] - ldr r0, [r0, #0x0] - str r1, [r4, #0x0] - ldrh r4, [sp, #0x30] - ldrh r0, [r0, #0xa] - cmp r4, r0 - addcs sp, sp, #0x34 - ldrhs r0, _020DD74C ; =0x000080FF - ldmcsia sp!, {r4-r11,lr} - bxcs lr - ldr r0, _020DD750 ; =0x021D6B0C - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r5, _020DD754 ; =0x04000204 - ldr r0, _020DD748 ; =0x021D6B20 - ldrh r3, [r5, #0x0] - ldr r2, [r0, #0x0] - ldrh r1, [r5, #0x0] - mov r0, r4, lsl #0xc - ldr r2, [r2, #0x10] - bic r1, r1, #0x3 - orr r1, r1, r2 - strh r1, [r5, #0x0] - and r1, r3, #0x3 - mov r0, r0, lsr #0x10 - str r1, [sp, #0x0] - bl CTRDGi_SetFlashBankMx - and r0, r4, #0xf - mov r0, r0, lsl #0x10 - mov r9, r0, lsr #0x10 - mov r0, #0x2 - mov r10, #0x0 - str r0, [sp, #0x8] - mov r0, #0xff - ldr r8, _020DD758 ; =0x04000208 - mov r11, r10 - mov r7, #0xaa - mov r6, #0x55 - mov r5, #0x80 - mov r4, #0x30 - str r0, [sp, #0xc] -_020DD684: - ldr r0, _020DD748 ; =0x021D6B20 - ldrh r12, [r8, #0x0] - ldr r0, [r0, #0x0] - ldr r3, _020DD75C ; =0x021D6B38 - ldrh r1, [r0, #0x8] - ldr r0, [sp, #0x8] - ldr r2, [sp, #0xc] - strh r11, [r8, #0x0] - str r12, [r3, #0x0] - ldr r3, _020DD760 ; =0x0A005555 - mov r1, r9, lsl r1 - strb r7, [r3, #0x0] - ldr r3, _020DD764 ; =0x0A002AAA - add r1, r1, #0xa000000 - strb r6, [r3, #0x0] - ldr r3, _020DD760 ; =0x0A005555 - strb r5, [r3, #0x0] - strb r7, [r3, #0x0] - ldr r3, _020DD764 ; =0x0A002AAA - strb r6, [r3, #0x0] - strb r4, [r1, #0x0] - ldrh r3, [r8, #0x0] - ldr r3, _020DD75C ; =0x021D6B38 - ldr r3, [r3, #0x0] - strh r3, [r8, #0x0] - ldr r3, _020DD768 ; =0x021D6B24 - ldr r3, [r3, #0x0] - blx r3 - str r0, [sp, #0x4] - ands r0, r0, #0xa000 - beq _020DD714 - cmp r10, #0x0 - addeq r0, r10, #0x1 - moveq r0, r0, lsl #0x10 - moveq r10, r0, lsr #0x10 - beq _020DD684 -_020DD714: - ldr r2, _020DD754 ; =0x04000204 - ldr r1, _020DD750 ; =0x021D6B0C - ldrh r0, [r2, #0x0] - bic r3, r0, #0x3 - ldr r0, [sp, #0x0] - orr r0, r3, r0 - strh r0, [r2, #0x0] - ldrh r0, [r1, #0x0] - bl OS_UnlockCartridge2 - ldr r0, [sp, #0x4] - add sp, sp, #0x34 - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020DD748: .word 0x021D6B20 -_020DD74C: .word 0x000080FF -_020DD750: .word 0x021D6B0C -_020DD754: .word 0x04000204 -_020DD758: .word 0x04000208 -_020DD75C: .word 0x021D6B38 -_020DD760: .word 0x0A005555 -_020DD764: .word 0x0A002AAA -_020DD768: .word 0x021D6B24 - - arm_func_start CTRDGi_EraseFlashChipCoreMX -CTRDGi_EraseFlashChipCoreMX: ; 0x020DD76C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020DD848 ; =0x021D6B0C - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r4, _020DD84C ; =0x04000204 - ldr r0, _020DD850 ; =0x021D6B20 - ldrh r3, [r4, #0x0] - ldr r0, [r0, #0x0] - ldrh r1, [r4, #0x0] - ldr r2, [r0, #0x10] - ldr r0, _020DD854 ; =0x04000208 - bic r1, r1, #0x3 - orr r1, r1, r2 - strh r1, [r4, #0x0] - ldrh r4, [r0, #0x0] - mov r2, #0x0 - ldr r1, _020DD858 ; =0x021D6B38 - strh r2, [r0, #0x0] - ldr lr, _020DD85C ; =0x0A005555 - str r4, [r1, #0x0] - mov r5, #0xaa - ldr r4, _020DD860 ; =0x0A002AAA - strb r5, [lr, #0x0] - mov r12, #0x55 - strb r12, [r4, #0x0] - mov r2, #0x80 - strb r2, [lr, #0x0] - strb r5, [lr, #0x0] - strb r12, [r4, #0x0] - mov r2, #0x10 - strb r2, [lr, #0x0] - ldrh r2, [r0, #0x0] - ldr r2, [r1, #0x0] - ldr r1, _020DD864 ; =0x021D6B24 - strh r2, [r0, #0x0] - ldr r4, [r1, #0x0] - mov r0, #0x3 - mov r1, #0xa000000 - mov r2, #0xff - and r5, r3, #0x3 - blx r4 - ldr r3, _020DD84C ; =0x04000204 - ldr r1, _020DD848 ; =0x021D6B0C - ldrh r2, [r3, #0x0] - mov r4, r0 - bic r0, r2, #0x3 - orr r0, r0, r5 - strh r0, [r3, #0x0] - ldrh r0, [r1, #0x0] - bl OS_UnlockCartridge2 - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DD848: .word 0x021D6B0C -_020DD84C: .word 0x04000204 -_020DD850: .word 0x021D6B20 -_020DD854: .word 0x04000208 -_020DD858: .word 0x021D6B38 -_020DD85C: .word 0x0A005555 -_020DD860: .word 0x0A002AAA -_020DD864: .word 0x021D6B24 - - arm_func_start FUN_020DD868 -FUN_020DD868: ; 0x020DD868 - stmdb sp!, {lr} - sub sp, sp, #0x24 - str r1, [sp, #0xc] - strh r0, [sp, #0x20] - ldr r1, _020DD890 ; =FUN_020DD8C0 - add r0, sp, #0x0 - bl CTRDGi_SetTask - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DD890: .word FUN_020DD8C0 - - arm_func_start FUN_020DD894 -FUN_020DD894: ; 0x020DD894 - stmdb sp!, {lr} - sub sp, sp, #0x24 - strh r0, [sp, #0x20] - add r0, sp, #0x0 - str r1, [sp, #0xc] - bl FUN_020DD8C0 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x24 - ldmia sp!, {lr} - bx lr - - arm_func_start FUN_020DD8C0 -FUN_020DD8C0: ; 0x020DD8C0 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x28 - mov r5, r0 - ldmia r5!, {r0-r3} - add r4, sp, #0x0 - stmia r4!, {r0-r3} - ldmia r5!, {r0-r3} - stmia r4!, {r0-r3} - ldr r0, _020DD9E8 ; =0x021D6B20 - ldr r1, [r5, #0x0] - ldr r0, [r0, #0x0] - str r1, [r4, #0x0] - ldrh r5, [sp, #0x20] - ldrh r0, [r0, #0xa] - ldr r4, [sp, #0xc] - cmp r5, r0 - addcs sp, sp, #0x28 - ldrhs r0, _020DD9EC ; =0x000080FF - ldmcsia sp!, {r4-r8,lr} - bxcs lr - mov r0, r5 - bl CTRDGi_EraseFlashSectorLE - movs r6, r0 - addne sp, sp, #0x28 - ldmneia sp!, {r4-r8,lr} - bxne lr - ldr r0, _020DD9F0 ; =0x021D6B0C - ldrh r0, [r0, #0x0] - bl OS_LockCartridge - ldr r7, _020DD9F4 ; =0x04000204 - ldr r0, _020DD9E8 ; =0x021D6B20 - ldrh r3, [r7, #0x0] - ldr r2, [r0, #0x0] - ldrh r1, [r7, #0x0] - ldr r2, [r2, #0x10] - ldr r8, _020DD9F8 ; =0x021D6B08 - bic r1, r1, #0x3 - orr r1, r1, r2 - strh r1, [r7, #0x0] - ldr r1, [r0, #0x0] - and r7, r3, #0x3 - ldr r0, [r1, #0x4] - strh r0, [r8, #0x0] - ldrh r1, [r1, #0x8] - ldrh r0, [r8, #0x0] - mov r1, r5, lsl r1 - cmp r0, #0x0 - add r5, r1, #0xa000000 - beq _020DD9B8 -_020DD984: - mov r0, r4 - mov r1, r5 - bl CTRDGi_ProgramFlashByteLE - movs r6, r0 - bne _020DD9B8 - ldrh r0, [r8, #0x0] - add r4, r4, #0x1 - add r5, r5, #0x1 - sub r0, r0, #0x1 - strh r0, [r8, #0x0] - ldrh r0, [r8, #0x0] - cmp r0, #0x0 - bne _020DD984 -_020DD9B8: - ldr r2, _020DD9F4 ; =0x04000204 - ldr r0, _020DD9F0 ; =0x021D6B0C - ldrh r1, [r2, #0x0] - bic r1, r1, #0x3 - orr r1, r1, r7 - strh r1, [r2, #0x0] - ldrh r0, [r0, #0x0] - bl OS_UnlockCartridge2 - mov r0, r6 - add sp, sp, #0x28 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020DD9E8: .word 0x021D6B20 -_020DD9EC: .word 0x000080FF -_020DD9F0: .word 0x021D6B0C -_020DD9F4: .word 0x04000204 -_020DD9F8: .word 0x021D6B08 - - 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 diff --git a/arm9/global.inc b/arm9/global.inc index b46c2c88..37cd687d 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -26,6 +26,18 @@ .extern CTRDG_Init .extern CTRDG_IsExisting .extern CTRDG_IsPulledOut +.extern CTRDGi_ChangeLatestAccessCycle +.extern CTRDGi_EraseFlashSectorLE +.extern CTRDGi_InitCommon +.extern CTRDGi_InitTaskThread +.extern CTRDGi_LockByProcessor +.extern CTRDGi_ProgramFlashByteLE +.extern CTRDGi_ReadFlashID +.extern CTRDGi_RestoreAccessCycle +.extern CTRDGi_SendtoPxi +.extern CTRDGi_SetFlashBankMx +.extern CTRDGi_SetTask +.extern CTRDGi_UnlockByProcessor .extern Call_FillMemWithValue .extern ConvertUIntToDecimalString .extern DC_FlushAll -- cgit v1.2.3 From 9aa70573ad7d087e3121de3d445736a798301acb Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 20 May 2020 16:45:50 +0100 Subject: split libmath --- arm9/arm9.lcf | 4 +- arm9/asm/MATH.s | 25 ++++ arm9/asm/MATH_crc.s | 256 +++++++++++++++++++++++++++++++++++++++++ arm9/asm/MATH_dgt.s | 47 ++++++++ arm9/asm/libmath.s | 320 ---------------------------------------------------- 5 files changed, 331 insertions(+), 321 deletions(-) create mode 100644 arm9/asm/MATH.s create mode 100644 arm9/asm/MATH_crc.s create mode 100644 arm9/asm/MATH_dgt.s delete mode 100644 arm9/asm/libmath.s diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index f1dc7c8d..9035d69e 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -244,7 +244,9 @@ SECTIONS { CTRDG_flash_MX29L010.o (.text) CTRDG_flash_MX29L512.o (.text) CTRDG_task.o (.text) - libmath.o (.text) + MATH.o (.text) + MATH_dgt.o (.text) + MATH_crc.o (.text) libstd.o (.text) /* C standard library */ libc.o (.text) diff --git a/arm9/asm/MATH.s b/arm9/asm/MATH.s new file mode 100644 index 00000000..8e127de0 --- /dev/null +++ b/arm9/asm/MATH.s @@ -0,0 +1,25 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start MATH_CountPopulation +MATH_CountPopulation: ; 0x020DDC5C + ldr r1, _020DDC94 ; =0x55555555 + ldr r2, _020DDC98 ; =0x33333333 + and r1, r1, r0, lsr #0x1 + sub r0, r0, r1 + and r1, r0, r2 + and r0, r2, r0, lsr #0x2 + add r1, r1, r0 + ldr r0, _020DDC9C ; =0x0F0F0F0F + add r1, r1, r1, lsr #0x4 + and r0, r1, r0 + add r0, r0, r0, lsr #0x8 + add r0, r0, r0, lsr #0x10 + and r0, r0, #0xff + bx lr + .balign 4 +_020DDC94: .word 0x55555555 +_020DDC98: .word 0x33333333 +_020DDC9C: .word 0x0F0F0F0F diff --git a/arm9/asm/MATH_crc.s b/arm9/asm/MATH_crc.s new file mode 100644 index 00000000..2b9b8f26 --- /dev/null +++ b/arm9/asm/MATH_crc.s @@ -0,0 +1,256 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start MATH_CalcCRC32 +MATH_CalcCRC32: ; 0x020DDD28 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mvn r12, #0x0 + mov r3, r2 + add r1, sp, #0x0 + mov r2, lr + str r12, [sp, #0x0] + bl MATHi_CRC32UpdateRev +_020DDD4C: ; 0x020DDD4C + ldr r0, [sp, #0x0] + mvn r0, r0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start MATH_CalcCRC16CCITT +MATH_CalcCRC16CCITT: ; 0x020DDD60 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr ip, _020DDD94 ; =0x0000FFFF + mov lr, r1 + mov r3, r2 + add r1, sp, #0x0 + mov r2, lr + strh r12, [sp, #0x0] + bl MATHi_CRC16Update + ldrh r0, [sp, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DDD94: .word 0x0000FFFF + + arm_func_start MATH_CalcCRC16 +MATH_CalcCRC16: ; 0x020DDD98 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r12, #0x0 + mov r3, r2 + add r1, sp, #0x0 + mov r2, lr + strh r12, [sp, #0x0] + bl MATHi_CRC16UpdateRev + ldrh r0, [sp, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start MATH_CalcCRC8 +MATH_CalcCRC8: ; 0x020DDDCC + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, r1 + mov r12, #0x0 + mov r3, r2 + add r1, sp, #0x0 + mov r2, lr + strb r12, [sp, #0x0] + bl MATHi_CRC8Update +_020DDDF0: ; 0x020DDDF0 + ldrb r0, [sp, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start MATHi_CRC32UpdateRev +MATHi_CRC32UpdateRev: + stmdb sp!, {r4,lr} + cmp r3, #0x0 + ldr r4, [r1, #0x0] + mov lr, #0x0 + bls _020DDE38 +_020DDE14: + ldrb r12, [r2, #0x0] + add lr, lr, #0x1 + cmp lr, r3 + eor r12, r4, r12 + and r12, r12, #0xff + ldr r12, [r0, r12, lsl #0x2] + add r2, r2, #0x1 + eor r4, r12, r4, lsr #0x8 + blo _020DDE14 +_020DDE38: + str r4, [r1, #0x0] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC32InitTableRev +MATHi_CRC32InitTableRev: ; 0x020DDE44 + stmdb sp!, {r4,lr} + mov lr, #0x0 + mov r3, lr +_020DDE50: + mov r4, lr + mov r12, r3 +_020DDE58: + ands r2, r4, #0x1 + eorne r4, r1, r4, lsr #0x1 + add r12, r12, #0x1 + moveq r4, r4, lsr #0x1 + cmp r12, #0x8 + blo _020DDE58 + str r4, [r0, lr, lsl #0x2] + add lr, lr, #0x1 + cmp lr, #0x100 + blo _020DDE50 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC16UpdateRev +MATHi_CRC16UpdateRev: ; 0x020DDE88 + stmdb sp!, {r4,lr} + cmp r3, #0x0 + ldrh r4, [r1, #0x0] + mov lr, #0x0 + bls _020DDEC4 +_020DDE9C: + ldrb r12, [r2, #0x0] + add lr, lr, #0x1 + cmp lr, r3 + eor r12, r4, r12 + and r12, r12, #0xff + mov r12, r12, lsl #0x1 + ldrh r12, [r0, r12] + add r2, r2, #0x1 + eor r4, r12, r4, lsr #0x8 + blo _020DDE9C +_020DDEC4: + strh r4, [r1, #0x0] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC16Update +MATHi_CRC16Update: ; 0x020DDED0 + stmdb sp!, {r4,lr} + cmp r3, #0x0 + ldrh r4, [r1, #0x0] + mov lr, #0x0 + bls _020DDF0C +_020DDEE4: + ldrb r12, [r2, #0x0] + add lr, lr, #0x1 + cmp lr, r3 + eor r12, r12, r4, lsr #0x8 + and r12, r12, #0xff + mov r12, r12, lsl #0x1 + ldrh r12, [r0, r12] + add r2, r2, #0x1 + eor r4, r12, r4, lsl #0x8 + blo _020DDEE4 +_020DDF0C: + strh r4, [r1, #0x0] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC16InitTableRev +MATHi_CRC16InitTableRev: ; 0x020DDF18 + stmdb sp!, {r4,lr} + mov lr, #0x0 + mov r3, lr +_020DDF24: + mov r4, lr + mov r12, r3 +_020DDF2C: + ands r2, r4, #0x1 + eorne r4, r1, r4, lsr #0x1 + add r12, r12, #0x1 + moveq r4, r4, lsr #0x1 + cmp r12, #0x8 + blo _020DDF2C + mov r2, lr, lsl #0x1 + add lr, lr, #0x1 + strh r4, [r0, r2] + cmp lr, #0x100 + blo _020DDF24 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC16InitTable +MATHi_CRC16InitTable: ; 0x020DDF60 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, #0x0 + mov r12, r4 + mov r3, r4 +_020DDF74: + mov r5, r12 + mov lr, r3 +_020DDF7C: + ands r2, r5, #0x8000 + eorne r5, r1, r5, lsl #0x1 + add lr, lr, #0x1 + moveq r5, r5, lsl #0x1 + cmp lr, #0x8 + blo _020DDF7C + mov r2, r4, lsl #0x1 + add r4, r4, #0x1 + strh r5, [r0, r2] + cmp r4, #0x100 + add r12, r12, #0x100 + blo _020DDF74 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start MATHi_CRC8Update +MATHi_CRC8Update: + stmdb sp!, {r4,lr} + cmp r3, #0x0 + ldrb r4, [r1, #0x0] + mov lr, #0x0 + bls _020DDFEC +_020DDFCC: + ldrb r12, [r2, #0x0] + add lr, lr, #0x1 + cmp lr, r3 + eor r12, r4, r12 + and r12, r12, #0xff + add r2, r2, #0x1 + ldrb r4, [r0, r12] + blo _020DDFCC +_020DDFEC: + strb r4, [r1, #0x0] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start MATHi_CRC8InitTable +MATHi_CRC8InitTable: ; 0x020DDFF8 + stmdb sp!, {r4,lr} + mov lr, #0x0 + mov r3, lr +_020DE004: + mov r4, lr + mov r12, r3 +_020DE00C: + ands r2, r4, #0x80 + eorne r4, r1, r4, lsl #0x1 + add r12, r12, #0x1 + moveq r4, r4, lsl #0x1 + cmp r12, #0x8 + blo _020DE00C + strb r4, [r0, lr] + add lr, lr, #0x1 + cmp lr, #0x100 + blo _020DE004 + ldmia sp!, {r4,lr} + bx lr diff --git a/arm9/asm/MATH_dgt.s b/arm9/asm/MATH_dgt.s new file mode 100644 index 00000000..12d05588 --- /dev/null +++ b/arm9/asm/MATH_dgt.s @@ -0,0 +1,47 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start MATH_CalcSHA1 +MATH_CalcSHA1: ; 0x020DDCA0 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x68 + mov r6, r0 + add r0, sp, #0x0 + mov r5, r1 + mov r4, r2 + bl DGT_Hash2Reset +_020DDCBC: ; 0x020DDCBC + add r0, sp, #0x0 + mov r1, r5 + mov r2, r4 + bl DGT_Hash2SetSource +_020DDCCC: ; 0x020DDCCC + add r0, sp, #0x0 + mov r1, r6 + bl DGT_Hash2GetDigest + add sp, sp, #0x68 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start MATH_CalcMD5 +MATH_CalcMD5: ; 0x020DDCE4 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x58 + mov r6, r0 + add r0, sp, #0x0 + mov r5, r1 + mov r4, r2 + bl DGT_Hash1Reset +_020DDD00: ; 0x020DDD00 + add r0, sp, #0x0 + mov r1, r5 + mov r2, r4 + bl DGT_Hash1SetSource + add r1, sp, #0x0 + mov r0, r6 + bl DGT_Hash1GetDigest_R + add sp, sp, #0x58 + ldmia sp!, {r4-r6,lr} + bx lr diff --git a/arm9/asm/libmath.s b/arm9/asm/libmath.s deleted file mode 100644 index e841f5da..00000000 --- a/arm9/asm/libmath.s +++ /dev/null @@ -1,320 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start MATH_CountPopulation -MATH_CountPopulation: ; 0x020DDC5C - ldr r1, _020DDC94 ; =0x55555555 - ldr r2, _020DDC98 ; =0x33333333 - and r1, r1, r0, lsr #0x1 - sub r0, r0, r1 - and r1, r0, r2 - and r0, r2, r0, lsr #0x2 - add r1, r1, r0 - ldr r0, _020DDC9C ; =0x0F0F0F0F - add r1, r1, r1, lsr #0x4 - and r0, r1, r0 - add r0, r0, r0, lsr #0x8 - add r0, r0, r0, lsr #0x10 - and r0, r0, #0xff - bx lr - .balign 4 -_020DDC94: .word 0x55555555 -_020DDC98: .word 0x33333333 -_020DDC9C: .word 0x0F0F0F0F - - arm_func_start MATH_CalcSHA1 -MATH_CalcSHA1: ; 0x020DDCA0 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x68 - mov r6, r0 - add r0, sp, #0x0 - mov r5, r1 - mov r4, r2 - bl DGT_Hash2Reset -_020DDCBC: ; 0x020DDCBC - add r0, sp, #0x0 - mov r1, r5 - mov r2, r4 - bl DGT_Hash2SetSource -_020DDCCC: ; 0x020DDCCC - add r0, sp, #0x0 - mov r1, r6 - bl DGT_Hash2GetDigest - add sp, sp, #0x68 - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start MATH_CalcMD5 -MATH_CalcMD5: ; 0x020DDCE4 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x58 - mov r6, r0 - add r0, sp, #0x0 - mov r5, r1 - mov r4, r2 - bl DGT_Hash1Reset -_020DDD00: ; 0x020DDD00 - add r0, sp, #0x0 - mov r1, r5 - mov r2, r4 - bl DGT_Hash1SetSource - add r1, sp, #0x0 - mov r0, r6 - bl DGT_Hash1GetDigest_R - add sp, sp, #0x58 - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start MATH_CalcCRC32 -MATH_CalcCRC32: ; 0x020DDD28 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mvn r12, #0x0 - mov r3, r2 - add r1, sp, #0x0 - mov r2, lr - str r12, [sp, #0x0] - bl MATHi_CRC32UpdateRev -_020DDD4C: ; 0x020DDD4C - ldr r0, [sp, #0x0] - mvn r0, r0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start MATH_CalcCRC16CCITT -MATH_CalcCRC16CCITT: ; 0x020DDD60 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr ip, _020DDD94 ; =0x0000FFFF - mov lr, r1 - mov r3, r2 - add r1, sp, #0x0 - mov r2, lr - strh r12, [sp, #0x0] - bl MATHi_CRC16Update - ldrh r0, [sp, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DDD94: .word 0x0000FFFF - - arm_func_start MATH_CalcCRC16 -MATH_CalcCRC16: ; 0x020DDD98 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r12, #0x0 - mov r3, r2 - add r1, sp, #0x0 - mov r2, lr - strh r12, [sp, #0x0] - bl MATHi_CRC16UpdateRev - ldrh r0, [sp, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start MATH_CalcCRC8 -MATH_CalcCRC8: ; 0x020DDDCC - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r12, #0x0 - mov r3, r2 - add r1, sp, #0x0 - mov r2, lr - strb r12, [sp, #0x0] - bl MATHi_CRC8Update -_020DDDF0: ; 0x020DDDF0 - ldrb r0, [sp, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start MATHi_CRC32UpdateRev -MATHi_CRC32UpdateRev: - stmdb sp!, {r4,lr} - cmp r3, #0x0 - ldr r4, [r1, #0x0] - mov lr, #0x0 - bls _020DDE38 -_020DDE14: - ldrb r12, [r2, #0x0] - add lr, lr, #0x1 - cmp lr, r3 - eor r12, r4, r12 - and r12, r12, #0xff - ldr r12, [r0, r12, lsl #0x2] - add r2, r2, #0x1 - eor r4, r12, r4, lsr #0x8 - blo _020DDE14 -_020DDE38: - str r4, [r1, #0x0] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC32InitTableRev -MATHi_CRC32InitTableRev: ; 0x020DDE44 - stmdb sp!, {r4,lr} - mov lr, #0x0 - mov r3, lr -_020DDE50: - mov r4, lr - mov r12, r3 -_020DDE58: - ands r2, r4, #0x1 - eorne r4, r1, r4, lsr #0x1 - add r12, r12, #0x1 - moveq r4, r4, lsr #0x1 - cmp r12, #0x8 - blo _020DDE58 - str r4, [r0, lr, lsl #0x2] - add lr, lr, #0x1 - cmp lr, #0x100 - blo _020DDE50 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC16UpdateRev -MATHi_CRC16UpdateRev: ; 0x020DDE88 - stmdb sp!, {r4,lr} - cmp r3, #0x0 - ldrh r4, [r1, #0x0] - mov lr, #0x0 - bls _020DDEC4 -_020DDE9C: - ldrb r12, [r2, #0x0] - add lr, lr, #0x1 - cmp lr, r3 - eor r12, r4, r12 - and r12, r12, #0xff - mov r12, r12, lsl #0x1 - ldrh r12, [r0, r12] - add r2, r2, #0x1 - eor r4, r12, r4, lsr #0x8 - blo _020DDE9C -_020DDEC4: - strh r4, [r1, #0x0] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC16Update -MATHi_CRC16Update: ; 0x020DDED0 - stmdb sp!, {r4,lr} - cmp r3, #0x0 - ldrh r4, [r1, #0x0] - mov lr, #0x0 - bls _020DDF0C -_020DDEE4: - ldrb r12, [r2, #0x0] - add lr, lr, #0x1 - cmp lr, r3 - eor r12, r12, r4, lsr #0x8 - and r12, r12, #0xff - mov r12, r12, lsl #0x1 - ldrh r12, [r0, r12] - add r2, r2, #0x1 - eor r4, r12, r4, lsl #0x8 - blo _020DDEE4 -_020DDF0C: - strh r4, [r1, #0x0] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC16InitTableRev -MATHi_CRC16InitTableRev: ; 0x020DDF18 - stmdb sp!, {r4,lr} - mov lr, #0x0 - mov r3, lr -_020DDF24: - mov r4, lr - mov r12, r3 -_020DDF2C: - ands r2, r4, #0x1 - eorne r4, r1, r4, lsr #0x1 - add r12, r12, #0x1 - moveq r4, r4, lsr #0x1 - cmp r12, #0x8 - blo _020DDF2C - mov r2, lr, lsl #0x1 - add lr, lr, #0x1 - strh r4, [r0, r2] - cmp lr, #0x100 - blo _020DDF24 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC16InitTable -MATHi_CRC16InitTable: ; 0x020DDF60 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, #0x0 - mov r12, r4 - mov r3, r4 -_020DDF74: - mov r5, r12 - mov lr, r3 -_020DDF7C: - ands r2, r5, #0x8000 - eorne r5, r1, r5, lsl #0x1 - add lr, lr, #0x1 - moveq r5, r5, lsl #0x1 - cmp lr, #0x8 - blo _020DDF7C - mov r2, r4, lsl #0x1 - add r4, r4, #0x1 - strh r5, [r0, r2] - cmp r4, #0x100 - add r12, r12, #0x100 - blo _020DDF74 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start MATHi_CRC8Update -MATHi_CRC8Update: - stmdb sp!, {r4,lr} - cmp r3, #0x0 - ldrb r4, [r1, #0x0] - mov lr, #0x0 - bls _020DDFEC -_020DDFCC: - ldrb r12, [r2, #0x0] - add lr, lr, #0x1 - cmp lr, r3 - eor r12, r4, r12 - and r12, r12, #0xff - add r2, r2, #0x1 - ldrb r4, [r0, r12] - blo _020DDFCC -_020DDFEC: - strb r4, [r1, #0x0] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC8InitTable -MATHi_CRC8InitTable: ; 0x020DDFF8 - stmdb sp!, {r4,lr} - mov lr, #0x0 - mov r3, lr -_020DE004: - mov r4, lr - mov r12, r3 -_020DE00C: - ands r2, r4, #0x80 - eorne r4, r1, r4, lsl #0x1 - add r12, r12, #0x1 - moveq r4, r4, lsl #0x1 - cmp r12, #0x8 - blo _020DE00C - strb r4, [r0, lr] - add lr, lr, #0x1 - cmp lr, #0x100 - blo _020DE004 - ldmia sp!, {r4,lr} - bx lr -- cgit v1.2.3 From ca4b474a0daa9789ac93b86f035f8e47254439ac Mon Sep 17 00:00:00 2001 From: red031000 Date: Wed, 20 May 2020 16:48:12 +0100 Subject: split libstd, all sdk libs are split --- arm9/arm9.lcf | 2 +- arm9/asm/STD_string.s | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++ arm9/asm/libstd.s | 94 --------------------------------------------------- 3 files changed, 95 insertions(+), 95 deletions(-) create mode 100644 arm9/asm/STD_string.s delete mode 100644 arm9/asm/libstd.s diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index 9035d69e..52f70ee3 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -247,7 +247,7 @@ SECTIONS { MATH.o (.text) MATH_dgt.o (.text) MATH_crc.o (.text) - libstd.o (.text) + STD_string.o (.text) /* C standard library */ libc.o (.text) /* MWCC library */ diff --git a/arm9/asm/STD_string.s b/arm9/asm/STD_string.s new file mode 100644 index 00000000..e8a74a75 --- /dev/null +++ b/arm9/asm/STD_string.s @@ -0,0 +1,94 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start STD_CompareNString +STD_CompareNString: ; 0x020DE03C + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r2, #0x0 + beq _020DE080 + cmp r2, #0x0 + mov lr, #0x0 + ble _020DE080 +_020DE058: + ldrb r12, [r0, lr] + ldrb r3, [r1, lr] + cmp r12, r3 + addne sp, sp, #0x4 + subne r0, r12, r3 + ldmneia sp!, {lr} + bxne lr + add lr, lr, #0x1 + cmp lr, r2 + blt _020DE058 +_020DE080: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start STD_CompareString +STD_CompareString: ; 0x020DE090 + b _020DE09C +_020DE094: + add r0, r0, #0x1 + add r1, r1, #0x1 +_020DE09C: + ldrsb r2, [r1, #0x0] + ldrsb r3, [r0, #0x0] + cmp r3, r2 + bne _020DE0B4 + cmp r3, #0x0 + bne _020DE094 +_020DE0B4: + sub r0, r3, r2 + bx lr + + arm_func_start STD_GetStringLength +STD_GetStringLength: ; 0x020DE0BC + ldrsb r1, [r0, #0x0] + mov r2, #0x0 + cmp r1, #0x0 + beq _020DE0DC +_020DE0CC: + add r2, r2, #0x1 + ldrsb r1, [r0, r2] + cmp r1, #0x0 + bne _020DE0CC +_020DE0DC: + mov r0, r2 + bx lr + + arm_func_start STD_CopyLString +STD_CopyLString: ; 0x020DE0E4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + sub r12, r2, #0x1 + cmp r12, #0x0 + mov lr, #0x0 + ble _020DE120 +_020DE0FC: + ldrsb r3, [r1, #0x0] + strb r3, [r0, lr] + ldrsb r3, [r1, #0x0] + cmp r3, #0x0 + beq _020DE120 + add lr, lr, #0x1 + cmp lr, r12 + add r1, r1, #0x1 + blt _020DE0FC +_020DE120: + sub r3, r2, #0x1 + cmp lr, r3 + blt _020DE138 + cmp r2, #0x0 + movne r2, #0x0 + strneb r2, [r0, lr] +_020DE138: + mov r0, r1 + bl STD_GetStringLength + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr diff --git a/arm9/asm/libstd.s b/arm9/asm/libstd.s deleted file mode 100644 index 39946c46..00000000 --- a/arm9/asm/libstd.s +++ /dev/null @@ -1,94 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start STD_CompareNString -STD_CompareNString: ; 0x020DE03C - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r2, #0x0 - beq _020DE080 - cmp r2, #0x0 - mov lr, #0x0 - ble _020DE080 -_020DE058: - ldrb r12, [r0, lr] - ldrb r3, [r1, lr] - cmp r12, r3 - addne sp, sp, #0x4 - subne r0, r12, r3 - ldmneia sp!, {lr} - bxne lr - add lr, lr, #0x1 - cmp lr, r2 - blt _020DE058 -_020DE080: - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start STD_CompareString -STD_CompareString: ; 0x020DE090 - b _020DE09C -_020DE094: - add r0, r0, #0x1 - add r1, r1, #0x1 -_020DE09C: - ldrsb r2, [r1, #0x0] - ldrsb r3, [r0, #0x0] - cmp r3, r2 - bne _020DE0B4 - cmp r3, #0x0 - bne _020DE094 -_020DE0B4: - sub r0, r3, r2 - bx lr - - arm_func_start STD_GetStringLength -STD_GetStringLength: ; 0x020DE0BC - ldrsb r1, [r0, #0x0] - mov r2, #0x0 - cmp r1, #0x0 - beq _020DE0DC -_020DE0CC: - add r2, r2, #0x1 - ldrsb r1, [r0, r2] - cmp r1, #0x0 - bne _020DE0CC -_020DE0DC: - mov r0, r2 - bx lr - - arm_func_start STD_CopyLString -STD_CopyLString: ; 0x020DE0E4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - sub r12, r2, #0x1 - cmp r12, #0x0 - mov lr, #0x0 - ble _020DE120 -_020DE0FC: - ldrsb r3, [r1, #0x0] - strb r3, [r0, lr] - ldrsb r3, [r1, #0x0] - cmp r3, #0x0 - beq _020DE120 - add lr, lr, #0x1 - cmp lr, r12 - add r1, r1, #0x1 - blt _020DE0FC -_020DE120: - sub r3, r2, #0x1 - cmp lr, r3 - blt _020DE138 - cmp r2, #0x0 - movne r2, #0x0 - strneb r2, [r0, lr] -_020DE138: - mov r0, r1 - bl STD_GetStringLength - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -- cgit v1.2.3