diff options
author | Cleverking2003 <30466983+Cleverking2003@users.noreply.github.com> | 2020-05-19 20:47:26 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-19 20:47:26 +0300 |
commit | f498725e917a761e42a6f93efdf239dde46dc245 (patch) | |
tree | dc335eeb815b2236516ea1c405cb1d26b0890f76 | |
parent | f0f5bcb1ff206f093958f523e2fc8892383e3028 (diff) | |
parent | 07c521e0fb29afac447846c52379fe6874c08a3e (diff) |
Merge branch 'master' into master
46 files changed, 3385 insertions, 5368 deletions
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/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_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/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/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/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/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_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_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/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/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/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/asm/GX_vramcnt.s b/arm9/asm/GX_vramcnt.s deleted file mode 100644 index 0dc8890b..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 - - 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 diff --git a/arm9/data/bss_2.s b/arm9/data/bss_2.s index 5c9d538b..1a39bbf1 100644 --- a/arm9/data/bss_2.s +++ b/arm9/data/bss_2.s @@ -932,16 +932,16 @@ 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 UNK_021D33C4 -UNK_021D33C4: ; 0x021D33C4 + .global gGXState +gGXState: ; 0x021D33C4 .space 0x2 .global UNK_021D33C6 @@ -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 9eba6039..013410bd 100644 --- a/arm9/data/rom2_2.s +++ b/arm9/data/rom2_2.s @@ -171,45 +171,45 @@ UNK_020ECEF4: ; 0x020ECEF4 .word 0x0200E851 .word 0x0200E86D .word 0x0200E88D - .word 0x0200E8C9 + .word 0x0200E8C9 .word 0x0200E901 .word 0x0200E93D .word 0x0200E975 - .word 0x0200E9A1 + .word 0x0200E9A1 .word 0x0200E9CD .word 0x0200EA09 .word 0x0200EA41 - .word 0x0200EA7D + .word 0x0200EA7D .word 0x0200EAB5 .word 0x0200EAE1 .word 0x0200EB0D - .word 0x0200EB41 + .word 0x0200EB41 .word 0x0200EB71 .word 0x0200EB9D .word 0x0200EBC9 - .word 0x0200EBF5 + .word 0x0200EBF5 .word 0x0200EC21 .word 0x0200EC4D .word 0x0200EC79 - .word 0x0200ECA5 + .word 0x0200ECA5 .word 0x0200ECD1 .word 0x0200ECFD .word 0x0200ED29 - .word 0x0200ED55 + .word 0x0200ED55 .word 0x0200ED81 .word 0x0200EDD5 .word 0x0200EE25 - .word 0x0200EE61 + .word 0x0200EE61 .word 0x0200EE99 .word 0x0200EED9 .word 0x0200EF15 - .word 0x0200EF55 + .word 0x0200EF55 .word 0x0200EF91 .word 0x0200EFBD .word 0x0200EFE9 - .word 0x0200F015 + .word 0x0200F015 .word 0x0200F041 - .word 0x0200F07D + .word 0x0200F07D .global UNK_020ECF9C UNK_020ECF9C: ; 0x020ECF9C @@ -10232,20 +10232,14 @@ 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 - - .global UNK_02103B4E -UNK_02103B4E: ; 0x02103B4E .byte 0x00, 0x00 - - .global UNK_02103B50 -UNK_02103B50: ; 0x02103B50 .byte 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x20, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68 .byte 0x00, 0x00, 0x00, 0x00, 0x40, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x40, 0x68, 0x20, 0x00 .byte 0x20, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x60, 0x68, 0x00, 0x00 diff --git a/arm9/data/rom2_3.s b/arm9/data/rom2_3.s index 1324e85c..3a317b36 100644 --- a/arm9/data/rom2_3.s +++ b/arm9/data/rom2_3.s @@ -2055,12 +2055,12 @@ UNK_021067F0: ; 0x021067F0 .word 0x020BFC4C .word 0x020BFC28 - .global UNK_02106810 -UNK_02106810: ; 0x02106810 + .global sIsDispOn +sIsDispOn: ; 0x02106810 .byte 0x01, 0x00, 0x00, 0x00 - .global UNK_02106814 -UNK_02106814: ; 0x02106814 + .global GXi_DmaId +GXi_DmaId: ; 0x02106814 .byte 0x03, 0x00, 0x00, 0x00 .global OSi_IrqCallbackInfoIndex 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/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 { diff --git a/arm9/lib/include/gx.h b/arm9/lib/include/gx.h new file mode 100644 index 00000000..8abe4e40 --- /dev/null +++ b/arm9/lib/include/gx.h @@ -0,0 +1,179 @@ +#ifndef GUARD_GX_H +#define GUARD_GX_H + +#include "fx.h" + +//temporary while other files aren't decompiled + +void GXi_NopClearFifo128_(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, 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); + +#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); + +typedef union +{ + u32 raw; + struct + { + 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; + +typedef union +{ + u32 raw; + struct + { + 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; + +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; + +typedef enum +{ + GX_BG0_AS_2D = 0, + GX_BG0_AS_3D = 1 +} +GXBG0As; + +typedef enum +{ + 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; + +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; + +typedef enum +{ + GX_WNDMASK_NONE = 0x00, + GX_WNDMASK_W0 = 0x01, + GX_WNDMASK_W1 = 0x02, + GX_WNDMASK_OW = 0x04 +} +GXWndMask; + +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; + +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; + +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.c b/arm9/lib/src/GX.c new file mode 100644 index 00000000..28c3cc01 --- /dev/null +++ b/arm9/lib/src/GX.c @@ -0,0 +1,121 @@ +#include "global.h" +#include "main.h" +#include "GX.h" + +extern u16 GXi_VRamLockId; +extern u16 sDispMode; +extern u32 GXi_DmaId; +extern u16 sIsDispOn; + +ARM_FUNC void GX_Init(){ + reg_GX_POWCNT |= 0x8000; + reg_GX_POWCNT = (reg_GX_POWCNT & ~0x20E) | 0x20E; + reg_GX_POWCNT = reg_GX_POWCNT | 0x1; + GX_InitGXState(); + u32 temp; + while (GXi_VRamLockId == 0) + { + temp = OS_GetLockID(); + if (temp == -3) + { + OS_Terminate(); + } + GXi_VRamLockId = temp; + } + reg_GX_DISPSTAT = 0x0; + reg_GX_DISPCNT = 0x0; + if (GXi_DmaId != -1) + { + MI_DmaFill32(GXi_DmaId, (void *)®_G2_BG0CNT, 0x0, 0x60); + reg_GX_MASTER_BRIGHT = 0x0; + MI_DmaFill32(GXi_DmaId, (void *)®_GXS_DB_DISPCNT, 0x0, 0x70); + } + else + { + MIi_CpuClear32(0x0, (void *)®_G2_BG0CNT, 0x60); + reg_GX_MASTER_BRIGHT = 0x0; + MIi_CpuClear32(0x0, (void *)®_GXS_DB_DISPCNT, 0x70); + } + 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 = reg_GX_DISPSTAT & 0x10; + if (enable) + { + reg_GX_DISPSTAT |= 0x10; + } + else + { + reg_GX_DISPSTAT &= ~0x10; + } + return temp; +} + +ARM_FUNC u32 GX_VBlankIntr(u32 enable){ + u32 temp = reg_GX_DISPSTAT & 0x8; + if (enable) + { + reg_GX_DISPSTAT |= 0x8; + } + else + { + reg_GX_DISPSTAT &= ~0x8; + } + return temp; +} + +ARM_FUNC void GX_DispOff(){ + u32 temp = reg_GX_DISPCNT; + sIsDispOn = 0x0; + sDispMode = (temp & 0x30000) >> 0x10; + reg_GX_DISPCNT = temp & ~0x30000; +} + +ARM_FUNC void GX_DispOn(){ + sIsDispOn = 0x1; + if (sDispMode) + { + reg_GX_DISPCNT = reg_GX_DISPCNT & ~0x30000 | (sDispMode << 0x10); + } + else + { + reg_GX_DISPCNT = reg_GX_DISPCNT | 0x10000; + } +} + +ARM_FUNC void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3){ + u32 temp2 = reg_GX_DISPCNT; + sDispMode = mode1; + if (!sIsDispOn) + mode1 = 0; + reg_GX_DISPCNT = (mode2 | ((temp2 & 0xFFF0FFF0) | (mode1 << 0x10))) | (mode3 << 0x3); + if (!sDispMode) + sIsDispOn = 0x0; +} + +ARM_FUNC void GXS_SetGraphicsMode(u32 mode){ + reg_GXS_DB_DISPCNT = reg_GXS_DB_DISPCNT & ~0x7 | mode; +} + +ARM_FUNC 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/lib/src/GX_asm.c b/arm9/lib/src/GX_asm.c new file mode 100644 index 00000000..f40793d8 --- /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_bgcnt.c b/arm9/lib/src/GX_bgcnt.c new file mode 100644 index 00000000..2086ad16 --- /dev/null +++ b/arm9/lib/src/GX_bgcnt.c @@ -0,0 +1,195 @@ +#include "global.h" +#include "main.h" +#include "GX.h" + +ARM_FUNC void *G2_GetBG0ScrPtr(){ + 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 + (((reg_G2S_DB_BG0CNT & 0x1F00) >> 0x8) << 0xB)); +} + +ARM_FUNC void *G2_GetBG1ScrPtr(){ + 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 + (((reg_G2S_DB_BG1CNT & 0x1F00) >> 0x8) << 0xB)); +} + +ARM_FUNC void *G2_GetBG2ScrPtr(){ + 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) + { + 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; + } +} + +ARM_FUNC void *G2S_GetBG2ScrPtr(){ + u32 temp12 = (reg_GXS_DB_DISPCNT & 0x7); + u32 temp3 = reg_G2S_DB_BG2CNT; + 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; + } +} + +ARM_FUNC void *G2_GetBG3ScrPtr(){ + 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) + { + 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; + } +} + +ARM_FUNC void *G2S_GetBG3ScrPtr(){ + u32 temp12 = (reg_GXS_DB_DISPCNT & 0x7); + u32 temp3 = reg_G2S_DB_BG3CNT; + 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; + } +} + +ARM_FUNC void *G2_GetBG0CharPtr(){ + 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 + (((reg_G2S_DB_BG0CNT & 0x3C) >> 0x2) << 0xE)); +} + +ARM_FUNC void *G2_GetBG1CharPtr(){ + 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 + (((reg_G2S_DB_BG1CNT & 0x3C) >> 0x2) << 0xE)); +} + +ARM_FUNC void *G2_GetBG2CharPtr(){ + s32 temp1 = (reg_GX_DISPCNT & 0x7); + u32 temp = reg_G2_BG2CNT; + if (temp1 < 5 || !(temp & 0x80)) + { + u32 temp1 = (((reg_GX_DISPCNT & 0x7000000) >> 0x18) << 0x10); + u32 temp2 = (temp & 0x3C) >> 2; + return (void *)(0x6000000 + temp1 + (temp2 << 0xE)); + } + else + { + return NULL; + } +} + +ARM_FUNC void *G2S_GetBG2CharPtr(){ + s32 temp1 = (reg_GXS_DB_DISPCNT & 0x7); + u32 temp = reg_G2S_DB_BG2CNT; + if (temp1 < 5 || !(temp & 0x80)) + { + u32 temp2 = ((temp & 0x3C) >> 2) << 0xE; + return (void *)(0x6200000 + temp2); + } + else + { + return NULL; + } +} + +ARM_FUNC void *G2_GetBG3CharPtr(){ + s32 temp1 = (reg_GX_DISPCNT & 0x7); + u32 temp = reg_G2_BG3CNT; + if (temp1 < 3 || (temp1 < 6 && !(temp & 0x80))) + { + u32 temp1 = (((reg_GX_DISPCNT & 0x7000000) >> 0x18) << 0x10); + u32 temp2 = (temp & 0x3C) >> 2; + return (void *)(0x6000000 + temp1 + (temp2 << 0xE)); + } + else + { + return NULL; + } +} + +ARM_FUNC void *G2S_GetBG3CharPtr(){ + 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; + return (void *)(0x6200000 + temp2); + } + else + { + return NULL; + } +} diff --git a/arm9/lib/src/GX_g2.c b/arm9/lib/src/GX_g2.c new file mode 100644 index 00000000..66273541 --- /dev/null +++ b/arm9/lib/src/GX_g2.c @@ -0,0 +1,66 @@ +#include "global.h" +#include "main.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; + 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; +} + +ARM_FUNC void G2x_SetBlendAlpha_(u32 *ptr, fx32 a, fx32 b, fx32 c, fx32 d){ + *ptr = ((a | 0x40) | (b << 0x8)) | ((c | (d << 0x8)) << 0x10); +} + +ARM_FUNC 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; + } +} + +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) + { + ptr[0] = 0xC0 | a | (b << 0x8); + ptr[2] = -brightness; + } + else + { + ptr[0] = 0x80 | a | (b << 0x8); + ptr[2] = brightness; + } +} + +ARM_FUNC 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; + } +} diff --git a/arm9/lib/src/GX_g3.c b/arm9/lib/src/GX_g3.c new file mode 100644 index 00000000..2b5f2941 --- /dev/null +++ b/arm9/lib/src/GX_g3.c @@ -0,0 +1,36 @@ +#include "global.h" +#include "main.h" +#include "GX.h" + + +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 GXDLInfo *displaylist){ + if (displaylist->bottom == (u32 *)displaylist->curr_cmd) + return 0; + //pads the buffer with 0 to 4byte alignment if needed + switch((u32)displaylist->curr_cmd & 0x3) + { + case 0: + return displaylist->curr_cmd - (u8 *)displaylist->bottom; + case 1: + *displaylist->curr_cmd++ = 0x0; + case 2: + *displaylist->curr_cmd++ = 0x0; + case 3: + *displaylist->curr_cmd++ = 0x0; + } + if (displaylist->param0_cmd_flg) + { + *displaylist->curr_param++ = 0x0; + displaylist->param0_cmd_flg = 0x0; + } + displaylist->curr_cmd = (u8 *)displaylist->curr_param; + return displaylist->curr_cmd - (u8 *)displaylist->bottom; +} diff --git a/arm9/lib/src/GX_g3_util.c b/arm9/lib/src/GX_g3_util.c new file mode 100644 index 00000000..c40a3848 --- /dev/null +++ b/arm9/lib/src/GX_g3_util.c @@ -0,0 +1,260 @@ +#include "global.h" +#include "main.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){ + fx32 fovcot, temp1, temp2; + fx64c temp0; + vu32 *reg_ptr; + + fovcot = FX_Div(fovcos, fovsin); + if (scale != 0x1000) //!= 1.0 + fovcot = (fovcot * scale) / 0x1000; + reg_CP_DIV_NUMER = (s64)fovcot << 0x20; + reg_CP_DIV_DENOM = (u32)ratio; + if (load) + { + reg_G3_MTX_MODE = 0x0; + reg_ptr = (vu32 *)®_G3_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(); + reg_CP_DIV_NUMER = (s64)0x1000 << 0x20; + reg_CP_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; + } +} + +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; + + FX_InvAsync(right - left); + if (load) + { + reg_G3_MTX_MODE = 0x0; + reg_ptr = (vu32 *)®_G3_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(); + 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; + 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(); + 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; + 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; + } +} + +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; + 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) + { + reg_G3_MTX_MODE = 0x2; + reg_ptr = (vu32 *)®_G3_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; + } +} + +ARM_FUNC void G3_RotX(fx32 sinphi, fx32 cosphi){ + vu32 *reg_ptr; + reg_ptr = (vu32 *)®_G3_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; +} + +ARM_FUNC void G3_RotY(fx32 sinphi, fx32 cosphi){ + vu32 *reg_ptr; + reg_ptr = (vu32 *)®_G3_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; +} + +ARM_FUNC void G3_RotZ(fx32 sinphi, fx32 cosphi){ + vu32 *reg_ptr; + reg_ptr = (vu32 *)®_G3_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; +} diff --git a/arm9/lib/src/GX_g3b.c b/arm9/lib/src/GX_g3b.c new file mode 100644 index 00000000..21698547 --- /dev/null +++ b/arm9/lib/src/GX_g3b.c @@ -0,0 +1,120 @@ +#include "global.h" +#include "main.h" +#include "GX.h" + + +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 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 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 GXDLInfo *displaylist, struct Mtx44 *mtx){ + G3BS_LoadMtx44(displaylist, mtx); + 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 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; +} + +/* +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 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 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 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 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->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 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->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; +} + +/* +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 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 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 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 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_g3imm.c b/arm9/lib/src/GX_g3imm.c new file mode 100644 index 00000000..579032a6 --- /dev/null +++ b/arm9/lib/src/GX_g3imm.c @@ -0,0 +1,18 @@ +#include "global.h" +#include "main.h" +#include "GX.h" + +ARM_FUNC void G3_LoadMtx43(struct Mtx43 *mtx){ + reg_G3X_GXFIFO = 0x17; + GX_SendFifo48B(mtx, (void *)®_G3X_GXFIFO); +} + +ARM_FUNC void G3_MultMtx43(struct Mtx43 *mtx){ + reg_G3X_GXFIFO = 0x19; + GX_SendFifo48B(mtx, (void *)®_G3X_GXFIFO); +} + +ARM_FUNC void G3_MultMtx33(struct Mtx33 *mtx){ + 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 new file mode 100644 index 00000000..31508e06 --- /dev/null +++ b/arm9/lib/src/GX_g3x.c @@ -0,0 +1,235 @@ +#include "global.h" +#include "main.h" +#include "GX.h" + +extern u32 GXi_DmaId; + +ARM_FUNC 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 +} + +ARM_FUNC void G3X_Init(){ + G3X_ClearFifo(); + 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(); + 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(); + reg_G3_POLYGON_ATTR = 0x1F0080; + reg_G3_TEXIMAGE_PARAM = 0x0; + reg_G3_TEXPLTT_BASE = 0x0; +} + +ARM_FUNC void G3X_ResetMtxStack(){ + while (reg_G3X_GXSTAT & 0x8000000); + reg_G3X_GXSTAT |= 0x8000; + reg_G3X_DISP3DCNT |= 0x2000; + reg_G3X_DISP3DCNT |= 0x1000; + G3X_ResetMtxStack_2(); + reg_G3_POLYGON_ATTR = 0x1F0080; + reg_G3_TEXIMAGE_PARAM = 0x0; + reg_G3_TEXPLTT_BASE = 0x0; +} + +ARM_FUNC void G3X_ClearFifo(){ + GXi_NopClearFifo128_((void *)®_G3X_GXFIFO); + while (reg_G3X_GXSTAT & 0x8000000); +} + +ARM_FUNC void G3X_InitMtxStack(){ + u32 PV_level, PJ_level; + reg_G3X_GXSTAT |= 0x8000; + while (G3X_GetMtxStackLevelPV(&PV_level)); + while (G3X_GetMtxStackLevelPJ(&PJ_level)); + reg_G3_MTX_MODE = 0x3; + reg_G3_MTX_IDENTITY = 0x0; + reg_G3_MTX_MODE = 0x0; + if (PJ_level) + { + reg_G3_MTX_POP = PJ_level; + } + 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; + reg_G3X_GXSTAT |= 0x8000; + while (G3X_GetMtxStackLevelPV(&PV_level)); + while (G3X_GetMtxStackLevelPJ(&PJ_level)); + reg_G3_MTX_MODE = 0x3; + reg_G3_MTX_IDENTITY = 0x0; + reg_G3_MTX_MODE = 0x0; + if (PJ_level) + { + reg_G3_MTX_POP = PJ_level; + } + + 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) + { + reg_G3X_FOG_OFFSET = offset; + reg_G3X_DISP3DCNT = (reg_G3X_DISP3DCNT &~0x3f40) | (((depth << 0x8)| (alphamode << 0x6)|0x80 )); + + } + else + { + reg_G3X_DISP3DCNT = reg_G3X_DISP3DCNT & (u16)~0x3080; + } +} + +ARM_FUNC u32 G3X_GetClipMtx(struct Mtx44 *dst){ + if (reg_G3X_GXSTAT & 0x8000000) + { + return -1; + } + else + { + MI_Copy64B((void *)®_G3X_CLIPMTX_RESULT_0, dst); + return 0; + } +} + +ARM_FUNC u32 G3X_GetVectorMtx(struct Mtx33 *dst){ + if (reg_G3X_GXSTAT & 0x8000000) + { + return -1; + } + else + { + MI_Copy36B((void *)®_G3X_VECMTX_RESULT_0, dst); + return 0; + } +} + +ARM_FUNC void G3X_SetEdgeColorTable(void *tbl_ptr){ + MIi_CpuCopy16(tbl_ptr, (void *)®_G3X_EDGE_COLOR_0, 0x10); +} + +ARM_FUNC void G3X_SetFogTable(void *tbl_ptr){ + 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; + reg_G3X_CLEAR_COLOR = temp; + reg_G3X_CLEAR_DEPTH = depth; +} + +ARM_FUNC void G3X_InitTable(){ + if (GXi_DmaId != -1) + { + 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 + { + 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++) + { + reg_G3_SHININESS = 0x0; + } +} + +ARM_FUNC u32 G3X_GetMtxStackLevelPV(u32 *level){ + if (reg_G3X_GXSTAT & 0x4000) + { + return -1; + } + else + { + *level = (reg_G3X_GXSTAT & 0x1F00) >> 0x8; + return 0; + } +} + +ARM_FUNC u32 G3X_GetMtxStackLevelPJ(u32 *level){ + if (reg_G3X_GXSTAT & 0x4000) + { + return -1; + } + else + { + *level = (reg_G3X_GXSTAT & 0x2000) >> 0xD; + return 0; + } +} + +ARM_FUNC u32 G3X_GetBoxTestResult(u32 *result){ + if (reg_G3X_GXSTAT & 0x1) + { + return -1; + } + else + { + *result = (reg_G3X_GXSTAT & 0x2); + return 0; + } +} + +ARM_FUNC void G3X_SetHOffset(u32 offset){ + reg_G2_BG0OFS = offset; +} diff --git a/arm9/lib/src/GX_load2d.c b/arm9/lib/src/GX_load2d.c new file mode 100644 index 00000000..d4def461 --- /dev/null +++ b/arm9/lib/src/GX_load2d.c @@ -0,0 +1,223 @@ +#include "global.h" +#include "main.h" +#include "GX.h" + +extern u32 GXi_DmaId; + +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(){ + return (void *)0x6400000; +} +static inline void *_GXS_OBJ_PTR(){ + return (void *)0x6600000; +} + +ARM_FUNC void GX_LoadBGPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000000 + offset), size); +} + +ARM_FUNC void GXS_LoadBGPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000400 + offset), size); +} + +ARM_FUNC void GX_LoadOBJPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000200 + offset), size); +} + +ARM_FUNC void GXS_LoadOBJPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy16(GXi_DmaId, src, (void *)(0x5000600 + offset), size); +} + +ARM_FUNC void GX_LoadOAM(void *src, u32 offset, u32 size){ + GXi_DmaCopy32(GXi_DmaId, src, (void *)(0x7000000 + offset), size); +} + +ARM_FUNC void GXS_LoadOAM(void *src, u32 offset, u32 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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(GXi_DmaId, src, (void *)(base + offset), size); +} + +ARM_FUNC void GX_BeginLoadBGExtPltt(){ + sBGExtPltt = GX_ResetBankForBGExtPltt(); + switch (sBGExtPltt) + { + case 0: //needed to match + break; + case 0x10: + sBGExtPlttLCDCBlk = 0x06880000; + sBGExtPlttLCDCOffset = 0x0; + break; + case 0x40: + sBGExtPlttLCDCBlk = 0x06894000; + sBGExtPlttLCDCOffset = 0x4000; + break; + case 0x20: + case 0x60: + sBGExtPlttLCDCBlk = 0x06890000; + sBGExtPlttLCDCOffset = 0x0; + break; + } +} + +ARM_FUNC void GX_LoadBGExtPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sBGExtPlttLCDCBlk + offset - sBGExtPlttLCDCOffset), size, NULL, NULL); +} + +ARM_FUNC void GX_EndLoadBGExtPltt(){ + GXi_WaitDma(GXi_DmaId); + GX_SetBankForBGExtPltt(sBGExtPltt); + sBGExtPltt = 0x0; + sBGExtPlttLCDCBlk = 0x0; + sBGExtPlttLCDCOffset = 0x0; +} + +ARM_FUNC void GX_BeginLoadOBJExtPltt(){ + sOBJExtPltt = GX_ResetBankForOBJExtPltt(); + switch (sOBJExtPltt) + { + case 0: //needed to match + break; + case 0x40: + sOBJExtPlttLCDCBlk = 0x06894000; + break; + case 0x20: + sOBJExtPlttLCDCBlk = 0x06890000; + break; + } +} + +ARM_FUNC void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sOBJExtPlttLCDCBlk + offset), size, NULL, NULL); +} + +ARM_FUNC void GX_EndLoadOBJExtPltt(){ + GXi_WaitDma(GXi_DmaId); + GX_SetBankForOBJExtPltt(sOBJExtPltt); + sOBJExtPltt = 0x0; + sOBJExtPlttLCDCBlk = 0x0; +} + +ARM_FUNC void GXS_BeginLoadBGExtPltt(){ + sSubBGExtPltt = FUN_020C6034(); +} + +ARM_FUNC void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(0x06898000 + offset), size, NULL, NULL); +} + +ARM_FUNC void GXS_EndLoadBGExtPltt(){ + GXi_WaitDma(GXi_DmaId); + GX_SetBankForSubBGExtPltt(sSubBGExtPltt); + sSubBGExtPltt = 0x0; +} + +ARM_FUNC void GXS_BeginLoadOBJExtPltt(){ + sSubOBJExtPltt = GX_ResetBankForSubOBJ(); +} + +ARM_FUNC void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(0x068A0000 + offset), size, NULL, NULL); +} + +ARM_FUNC void GXS_EndLoadOBJExtPltt(){ + 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 new file mode 100644 index 00000000..5aa15581 --- /dev/null +++ b/arm9/lib/src/GX_load3d.c @@ -0,0 +1,125 @@ +#include "global.h" +#include "main.h" +#include "GX.h" + +extern u32 GXi_DmaId; + +extern u32 sTex; +extern u32 sTexLCDCBlk1; +extern u32 sTexLCDCBlk2; +extern u32 sSzTexBlk1; + +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[8]; + +extern s32 sClrImg; +extern u32 sClrImgLCDCBlk; + +ARM_FUNC void GX_BeginLoadTex(){ + u32 temp = GX_ResetBankForTex(); + sTex = temp; + 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){ + void *temp; + if (!sTexLCDCBlk2) + { + temp = (void *)(sTexLCDCBlk1 + offset); + } + else + { + if ((offset + size) < sSzTexBlk1) + { + temp = (void *)(sTexLCDCBlk1 + offset); + } + else if (offset >= sSzTexBlk1) + { + temp = (void *)(sTexLCDCBlk2 + offset - sSzTexBlk1); + } + else + { + 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(GXi_DmaId, src, temp, size, NULL, NULL); +} + +ARM_FUNC void GX_EndLoadTex(){ + GXi_WaitDma(GXi_DmaId); + GX_SetBankForTex(sTex); + sSzTexBlk1 = 0x0; + sTexLCDCBlk2 = 0x0; + sTexLCDCBlk1 = 0x0; + sTex = 0x0; +} + +ARM_FUNC void GX_BeginLoadTexPltt(){ + s32 temp = GX_ResetBankForTexPltt(); + sTexPltt = temp; + sTexPlttLCDCBlk = sTexPlttStartAddrTable[temp >> 4] << 0xC; +} + +ARM_FUNC void GX_LoadTexPltt(void *src, u32 offset, u32 size){ + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sTexPlttLCDCBlk + offset), size, NULL, NULL); +} + +ARM_FUNC void GX_EndLoadTexPltt(){ + GXi_WaitDma(GXi_DmaId); + GX_SetBankForTexPltt(sTexPltt); + sTexPltt = 0x0; + sTexPlttLCDCBlk = 0x0; +} + +ARM_FUNC void GX_BeginLoadClearImage(){ + s32 temp = GX_ResetBankForClearImage(); + sClrImg = temp; + switch (temp) + { + case 2: + case 3: + sClrImgLCDCBlk = 0x6800000; + return; + case 8: + case 12: + sClrImgLCDCBlk = 0x6840000; + return; + case 1: + sClrImgLCDCBlk = 0x67E0000; + return; + case 4: + sClrImgLCDCBlk = 0x6820000; + } +} + +ARM_FUNC void GX_LoadClearImageColor(void *src, u32 size){ + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sClrImgLCDCBlk), size, NULL, NULL); +} + +ARM_FUNC void GX_LoadClearImageDepth(void *src, u32 size){ + GXi_DmaCopy32Async(GXi_DmaId, src, (void *)(sClrImgLCDCBlk + 0x20000), size, NULL, NULL); +} + +ARM_FUNC void GX_EndLoadClearImage(){ + GXi_WaitDma(GXi_DmaId); + GX_SetBankForClearImage(sClrImg); + sClrImg = 0x0; + sClrImgLCDCBlk = 0x0; +} diff --git a/arm9/lib/src/GX_state.c b/arm9/lib/src/GX_state.c new file mode 100644 index 00000000..3ca3b266 --- /dev/null +++ b/arm9/lib/src/GX_state.c @@ -0,0 +1,26 @@ +#include "global.h" +#include "main.h" +#include "GX.h" + +extern struct GX_State gGXState; + +ARM_FUNC void GX_InitGXState(){ + 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; + 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 new file mode 100644 index 00000000..67749301 --- /dev/null +++ b/arm9/lib/src/GX_vramcnt.c @@ -0,0 +1,579 @@ +#include "global.h" +#include "main.h" +#include "GX.h" + +extern u16 GXi_VRamLockId; +extern struct GX_State gGXState; + +ARM_FUNC void GX_VRAMCNT_SetLCDC_(u32 mask){ + if (mask & (0x1 << 0)) + reg_GX_VRAMCNT_A = 0x80; + if (mask & (0x1 << 1)) + reg_GX_VRAMCNT_B = 0x80; + if (mask & (0x1 << 2)) + reg_GX_VRAMCNT_C = 0x80; + if (mask & (0x1 << 3)) + reg_GX_VRAMCNT_D = 0x80; + if (mask & (0x1 << 4)) + reg_GX_VRAMCNT_E = 0x80; + if (mask & (0x1 << 5)) + reg_GX_VRAMCNT_F = 0x80; + if (mask & (0x1 << 6)) + reg_GX_VRAMCNT_G = 0x80; + if (mask & (0x1 << 7)) + reg_GX_VRAMCNT_H = 0x80; + if (mask & (0x1 << 8)) + reg_GX_VRAMCNT_I = 0x80; +} + +ARM_FUNC void GX_SetBankForBG(s32 bg){ + gGXState.lcdc = (u16)(~bg & (gGXState.lcdc | gGXState.bg)); + gGXState.bg = bg; + switch (bg) + { + case 8: + reg_GX_VRAMCNT_D = 0x81; + break; + case 12: + reg_GX_VRAMCNT_D = 0x89; + case 4: + reg_GX_VRAMCNT_C = 0x81; + break; + case 14: + reg_GX_VRAMCNT_D = 0x91; + case 6: + reg_GX_VRAMCNT_C = 0x89; + case 2: + reg_GX_VRAMCNT_B = 0x81; + break; + case 15: + reg_GX_VRAMCNT_D = 0x99; + case 7: + reg_GX_VRAMCNT_C = 0x91; + case 3: + reg_GX_VRAMCNT_B = 0x89; + case 1: + reg_GX_VRAMCNT_A = 0x81; + break; + case 11: + reg_GX_VRAMCNT_A = 0x81; + reg_GX_VRAMCNT_B = 0x89; + reg_GX_VRAMCNT_D = 0x91; + break; + case 13: + reg_GX_VRAMCNT_D = 0x91; + case 5: + reg_GX_VRAMCNT_A = 0x81; + reg_GX_VRAMCNT_C = 0x89; + break; + case 9: + reg_GX_VRAMCNT_A = 0x81; + reg_GX_VRAMCNT_D = 0x89; + break; + case 10: + reg_GX_VRAMCNT_B = 0x81; + reg_GX_VRAMCNT_D = 0x89; + break; + case 112: + reg_GX_VRAMCNT_G = 0x99; + case 48: + reg_GX_VRAMCNT_F = 0x91; + case 16: + reg_GX_VRAMCNT_E = 0x81; + break; + case 80: + reg_GX_VRAMCNT_G = 0x91; + reg_GX_VRAMCNT_E = 0x81; + break; + case 96: + reg_GX_VRAMCNT_G = 0x89; + case 32: + reg_GX_VRAMCNT_F = 0x81; + break; + case 64: + reg_GX_VRAMCNT_G = 0x81; + break; + default: + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForOBJ(s32 obj){ + gGXState.lcdc = (u16)(~obj & (gGXState.lcdc | gGXState.obj)); + gGXState.obj = obj; + switch (obj) + { + case 3: + reg_GX_VRAMCNT_B = 0x8A; + case 1: + reg_GX_VRAMCNT_A = 0x82; + case 0: //needed to match + break; + case 2: + reg_GX_VRAMCNT_B = 0x82; + break; + case 112: + reg_GX_VRAMCNT_G = 0x9A; + case 48: + reg_GX_VRAMCNT_F = 0x92; + case 16: + reg_GX_VRAMCNT_E = 0x82; + break; + case 80: + reg_GX_VRAMCNT_G = 0x92; + reg_GX_VRAMCNT_E = 0x82; + break; + case 96: + reg_GX_VRAMCNT_G = 0x8A; + case 32: + reg_GX_VRAMCNT_F = 0x82; + break; + case 64: + reg_GX_VRAMCNT_G = 0x82; + break; + default: + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForBGExtPltt(s32 bgextpltt){ + gGXState.lcdc = (u16)(~bgextpltt & (gGXState.lcdc | gGXState.bgExtPltt)); + gGXState.bgExtPltt = bgextpltt; + switch (bgextpltt) + { + case 0x10: + reg_GX_DISPCNT |= 0x40000000; + reg_GX_VRAMCNT_E = 0x84; + break; + case 0x40: + reg_GX_DISPCNT |= 0x40000000; + reg_GX_VRAMCNT_G = 0x8C; + break; + case 0x60: + reg_GX_VRAMCNT_G = 0x8C; + case 0x20: + reg_GX_VRAMCNT_F = 0x84; + reg_GX_DISPCNT |= 0x40000000; + break; + case 0: + reg_GX_DISPCNT &= ~0x40000000; + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForOBJExtPltt(s32 objextpltt){ + gGXState.lcdc = (u16)(~objextpltt & (gGXState.lcdc | gGXState.objExtPltt)); + gGXState.objExtPltt = objextpltt; + switch (objextpltt) + { + case 32: + reg_GX_DISPCNT |= 0x80000000; + reg_GX_VRAMCNT_F = 0x85; + break; + case 64: + reg_GX_DISPCNT |= 0x80000000; + reg_GX_VRAMCNT_G = 0x85; + break; + case 0: + reg_GX_DISPCNT &= ~0x80000000; + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForTex(s32 tex){ + gGXState.lcdc = (u16)(~tex & (gGXState.lcdc | gGXState.tex)); + gGXState.tex = tex; + if (tex == 0) + { + reg_G3X_DISP3DCNT &= 0x0000CFFE; + } + else + { + reg_G3X_DISP3DCNT = (reg_G3X_DISP3DCNT & ~0x3000) | 0x1; + switch (tex) + { + case 5: + reg_GX_VRAMCNT_A = 0x83; + reg_GX_VRAMCNT_C = 0x8B; + break; + case 9: + reg_GX_VRAMCNT_A = 0x83; + reg_GX_VRAMCNT_D = 0x8B; + break; + case 10: + reg_GX_VRAMCNT_B = 0x83; + reg_GX_VRAMCNT_D = 0x8B; + break; + case 11: + reg_GX_VRAMCNT_A = 0x83; + reg_GX_VRAMCNT_B = 0x8B; + reg_GX_VRAMCNT_D = 0x93; + break; + case 13: + reg_GX_VRAMCNT_A = 0x83; + reg_GX_VRAMCNT_C = 0x8B; + reg_GX_VRAMCNT_D = 0x93; + break; + case 8: + reg_GX_VRAMCNT_D = 0x83; + break; + case 12: + reg_GX_VRAMCNT_D = 0x8B; + case 4: + reg_GX_VRAMCNT_C = 0x83; + break; + case 14: + reg_GX_VRAMCNT_D = 0x93; + case 6: + reg_GX_VRAMCNT_C = 0x8B; + case 2: + reg_GX_VRAMCNT_B = 0x83; + break; + case 15: + reg_GX_VRAMCNT_D = 0x9B; + case 7: + reg_GX_VRAMCNT_C = 0x93; + case 3: + reg_GX_VRAMCNT_B = 0x8B; + case 1: + reg_GX_VRAMCNT_A = 0x83; + break; + } + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForTexPltt(s32 texpltt){ + gGXState.lcdc = (u16)(~texpltt & (gGXState.lcdc | gGXState.texPltt)); + gGXState.texPltt = texpltt; + switch (texpltt) + { + case 0: //needed to match + break; + case 96: + reg_GX_VRAMCNT_G = 0x8B; + case 32: + reg_GX_VRAMCNT_F = 0x83; + break; + case 112: + reg_GX_VRAMCNT_G = 0x9B; + case 48: + reg_GX_VRAMCNT_F = 0x93; + case 16: + reg_GX_VRAMCNT_E = 0x83; + break; + case 64: + reg_GX_VRAMCNT_G = 0x83; + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForClearImage(s32 clearimage){ + gGXState.lcdc = (u16)(~clearimage & (gGXState.lcdc | gGXState.clrImg)); + gGXState.clrImg = clearimage; + switch (clearimage) + { + case 3: + reg_GX_VRAMCNT_A = 0x93; + case 2: + reg_GX_VRAMCNT_B = 0x9B; + reg_G3X_DISP3DCNT |= 0x4000; + break; + case 12: + reg_GX_VRAMCNT_C = 0x93; + case 8: + reg_GX_VRAMCNT_D = 0x9B; + reg_G3X_DISP3DCNT |= 0x4000; + break; + case 0: + reg_G3X_DISP3DCNT &= ~0x4000; + break; + case 1: + reg_GX_VRAMCNT_A = 0x9B; + reg_G3X_DISP3DCNT |= 0x4000; + break; + case 4: + reg_GX_VRAMCNT_C = 0x9B; + reg_G3X_DISP3DCNT |= 0x4000; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForARM7(s32 arm7){ + gGXState.lcdc = (u16)(~arm7 & (gGXState.lcdc | gGXState.arm7)); + gGXState.arm7 = arm7; + switch (arm7) + { + case 0: //needed to match + break; + case 12: + reg_GX_VRAMCNT_D = 0x8A; + reg_GX_VRAMCNT_C = 0x82; + break; + case 4: + reg_GX_VRAMCNT_C = 0x82; + break; + case 8: + reg_GX_VRAMCNT_D = 0x82; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForLCDC(s32 lcdc){ + gGXState.lcdc |= lcdc; + GX_VRAMCNT_SetLCDC_(lcdc); +} + +ARM_FUNC void GX_SetBankForSubBG(s32 subbg){ + gGXState.lcdc = (u16)(~subbg & (gGXState.lcdc | gGXState.sub_bg)); + gGXState.sub_bg = subbg; + switch (subbg) + { + case 0: //needed to match + break; + case 4: + reg_GX_VRAMCNT_C = 0x84; + break; + case 384: + reg_GX_VRAMCNT_I = 0x81; + case 128: + reg_GX_VRAMCNT_H = 0x81; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + + +ARM_FUNC void GX_SetBankForSubOBJ(s32 subobj){ + gGXState.lcdc = (u16)(~subobj & (gGXState.lcdc | gGXState.sub_obj)); + gGXState.sub_obj = subobj; + switch (subobj) + { + case 8: + reg_GX_VRAMCNT_D = 0x84; + break; + case 256: + reg_GX_VRAMCNT_I = 0x82; + break; + case 0: //needed to match + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){ + gGXState.lcdc = (u16)(~subbgextpltt & (gGXState.lcdc | gGXState.sub_bgExtPltt)); + gGXState.sub_bgExtPltt = subbgextpltt; + switch (subbgextpltt) + { + case 128: + reg_GXS_DB_DISPCNT |= 0x40000000; + reg_GX_VRAMCNT_H = 0x82; + break; + case 0: + reg_GXS_DB_DISPCNT &= ~0x40000000; + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){ + gGXState.lcdc = (u16)(~subobjextpltt & (gGXState.lcdc | gGXState.sub_objExtPltt)); + gGXState.sub_objExtPltt = subobjextpltt; + switch (subobjextpltt) + { + case 256: + reg_GXS_DB_DISPCNT |= 0x80000000; + reg_GX_VRAMCNT_I = 0x83; + break; + case 0: + reg_GXS_DB_DISPCNT &= ~0x80000000; + break; + } + GX_VRAMCNT_SetLCDC_(gGXState.lcdc); +} + +ARM_FUNC u32 FUN_020C6130(u16 *ptr){ + u16 temp = *ptr; + *ptr = 0; + gGXState.lcdc |= temp; + GX_VRAMCNT_SetLCDC_(temp); + return temp; +} + +ARM_FUNC u32 GX_ResetBankForBG(){ + return FUN_020C6130(&gGXState.bg); +} + +ARM_FUNC u32 GX_ResetBankForOBJ(){ + return FUN_020C6130(&gGXState.obj); +} + +ARM_FUNC u32 GX_ResetBankForBGExtPltt(){ + reg_GX_DISPCNT &= ~0x40000000; + return FUN_020C6130(&gGXState.bgExtPltt); +} + +ARM_FUNC u32 GX_ResetBankForOBJExtPltt(){ + reg_GX_DISPCNT &= ~0x80000000; + return FUN_020C6130(&gGXState.objExtPltt); +} + +ARM_FUNC u32 GX_ResetBankForTex(){ + return FUN_020C6130(&gGXState.tex); +} + +ARM_FUNC u32 GX_ResetBankForTexPltt(){ + return FUN_020C6130(&gGXState.texPltt); +} + +ARM_FUNC u32 GX_ResetBankForClearImage(){ + return FUN_020C6130(&gGXState.clrImg); +} + +ARM_FUNC u32 GX_ResetBankForSubBG(){ + return FUN_020C6130(&gGXState.sub_bg); +} + +ARM_FUNC u32 FUN_020C605C(){ + return FUN_020C6130(&gGXState.sub_obj); +} + +ARM_FUNC u32 FUN_020C6034(){ + reg_GXS_DB_DISPCNT &= ~0x40000000; + return FUN_020C6130(&gGXState.sub_bgExtPltt); +} + +ARM_FUNC u32 GX_ResetBankForSubOBJ(){ + reg_GXS_DB_DISPCNT &= ~0x80000000; + return FUN_020C6130(&gGXState.sub_objExtPltt); +} + +ARM_FUNC u32 FUN_020C5F28(u16 *ptr){ + u32 temp = *ptr; + *ptr = 0; + if (temp & (0x1 << 0)) + reg_GX_VRAMCNT_A = 0x0; + if (temp & (0x1 << 1)) + reg_GX_VRAMCNT_B = 0x0; + if (temp & (0x1 << 2)) + reg_GX_VRAMCNT_C = 0x0; + if (temp & (0x1 << 3)) + reg_GX_VRAMCNT_D = 0x0; + if (temp & (0x1 << 4)) + reg_GX_VRAMCNT_E = 0x0; + if (temp & (0x1 << 5)) + reg_GX_VRAMCNT_F = 0x0; + if (temp & (0x1 << 6)) + reg_GX_VRAMCNT_G = 0x0; + if (temp & (0x1 << 7)) + reg_GX_VRAMCNT_H = 0x0; + if (temp & (0x1 << 8)) + reg_GX_VRAMCNT_I = 0x0; + OSi_UnlockVram((u16)temp, GXi_VRamLockId); + return temp; +} + +ARM_FUNC u32 disableBankForX_(){ + return FUN_020C5F28(&gGXState.bg); +} + +ARM_FUNC u32 GX_DisableBankForOBJExtPltt_2(){ + return FUN_020C5F28(&gGXState.obj); +} + +ARM_FUNC u32 GX_DisableBankForBGExtPltt(){ + reg_GX_DISPCNT &= ~0x40000000; + return FUN_020C5F28(&gGXState.bgExtPltt); +} + +ARM_FUNC u32 GX_DisableBankForOBJExtPltt(){ + reg_GX_DISPCNT &= ~0x80000000; + return FUN_020C5F28(&gGXState.objExtPltt); +} + +ARM_FUNC u32 GX_DisableBankForTexPltt_2(){ + return FUN_020C5F28(&gGXState.tex); +} + +ARM_FUNC u32 GX_DisableBankForTexPltt(){ + return FUN_020C5F28(&gGXState.texPltt); +} + +ARM_FUNC u32 GX_DisableBankForClearImage(){ + return FUN_020C5F28(&gGXState.clrImg); +} + +ARM_FUNC u32 GX_DisableBankForARM7(){ + return FUN_020C5F28(&gGXState.arm7); +} + +ARM_FUNC u32 GX_DisableBankForLCDC(){ + return FUN_020C5F28(&gGXState.lcdc); +} + +ARM_FUNC u32 GX_DisableBankForSubBGExtPltt(){ + return FUN_020C5F28(&gGXState.sub_bg); +} + +ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt_2(){ + return FUN_020C5F28(&gGXState.sub_obj); +} + +ARM_FUNC u32 FUN_020C5E04(){ + reg_GXS_DB_DISPCNT &= ~0x40000000; + return FUN_020C5F28(&gGXState.sub_bgExtPltt); +} + +ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt(){ + reg_GXS_DB_DISPCNT &= ~0x80000000; + return FUN_020C5F28(&gGXState.sub_objExtPltt); +} + +ARM_FUNC u32 GX_GetBankForBGExtPltt_2(){ + return gGXState.bg; +} + +ARM_FUNC u32 GX_GetBankForOBJ(){ + return gGXState.obj; +} + +ARM_FUNC u32 GX_GetBankForBGExtPltt(){ + return gGXState.bgExtPltt; +} + +ARM_FUNC u32 GX_GetBankForOBJExtPltt(){ + return gGXState.objExtPltt; +} + +ARM_FUNC u32 FUN_020C5D8C(){ + return gGXState.tex; +} + +ARM_FUNC u32 GX_GetBankForTexPltt(){ + return gGXState.texPltt; +} + +ARM_FUNC u32 GX_GetBankForLCDC(){ + return gGXState.lcdc; +} + +ARM_FUNC u32 GX_GetBankForSubBGExtPltt_2(){ + return gGXState.sub_bg; +} + +ARM_FUNC u32 GX_GetBankForSubOBJ(){ + return gGXState.sub_obj; +} + +ARM_FUNC u32 GX_GetBankForSubBGExtPltt(){ + return gGXState.sub_bgExtPltt; +} + +ARM_FUNC u32 GX_GetBankForSubOBJExtPltt(){ + return gGXState.sub_objExtPltt; +} |