summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/asm/GX.s245
-rw-r--r--arm9/asm/GX_asm.s16
-rw-r--r--arm9/asm/GX_bgcnt.s422
-rw-r--r--arm9/asm/GX_g2.s121
-rw-r--r--arm9/asm/GX_g3.s72
-rw-r--r--arm9/asm/GX_g3_util.s503
-rw-r--r--arm9/asm/GX_g3b.s269
-rw-r--r--arm9/asm/GX_g3imm.s37
-rw-r--r--arm9/asm/GX_g3x.s503
-rw-r--r--arm9/asm/GX_load2d.s1116
-rw-r--r--arm9/asm/GX_load3d.s420
-rw-r--r--arm9/asm/GX_state.s40
-rw-r--r--arm9/asm/GX_vramcnt.s1540
-rw-r--r--arm9/lib/include/fx.h10
-rw-r--r--arm9/lib/include/gx.h371
-rw-r--r--arm9/lib/src/GX.c122
-rw-r--r--arm9/lib/src/GX_asm.c16
-rw-r--r--arm9/lib/src/GX_bgcnt.c195
-rw-r--r--arm9/lib/src/GX_g2.c66
-rw-r--r--arm9/lib/src/GX_g3.c36
-rw-r--r--arm9/lib/src/GX_g3_util.c260
-rw-r--r--arm9/lib/src/GX_g3b.c120
-rw-r--r--arm9/lib/src/GX_g3imm.c18
-rw-r--r--arm9/lib/src/GX_g3x.c235
-rw-r--r--arm9/lib/src/GX_load2d.c227
-rw-r--r--arm9/lib/src/GX_load3d.c124
-rw-r--r--arm9/lib/src/GX_state.c26
-rw-r--r--arm9/lib/src/GX_vramcnt.c579
-rw-r--r--arm9/undefined_syms.txt1229
29 files changed, 3631 insertions, 5307 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/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..5abc2693
--- /dev/null
+++ b/arm9/lib/include/gx.h
@@ -0,0 +1,371 @@
+#ifndef GUARD_GX_H
+#define GUARD_GX_H
+
+#include "fx.h"
+
+//temporary while other files aren't decompiled
+void MIi_CpuCopy16(void *, void *, u32);
+void GXi_NopClearFifo128_(void *);
+void MI_Copy16B(void *, void *);
+void MI_DmaFill32Async(u32, void *, u32, u32, u32, u32);
+void MI_DmaFill32(u32, void *, u32, u32);
+void MIi_CpuClear32(u32, void *, u32);
+void MI_Copy64B(void *src, void *dst);
+void MI_WaitDma(u32);
+void MI_DmaCopy32Async(u32, void *, void *, u32, void *, void *);
+void MI_DmaCopy16(u32 unk, void *src, void *dst, u32 size);
+void MIi_CpuCopy16(void *src, void *dst, u32 size);
+void MI_DmaCopy32(u32 unk, void *src, void *dst, u32 size);
+void MIi_CpuCopy32(void *src, void *dst, u32 size);
+void OSi_UnlockVram(u16, u16);
+void MIi_CpuClear32(u32, void *, u32);
+
+//Todos before PR
+//TODO: Add defines for GX commands, add structs/unions for HW registers
+
+#define HW_REG_DIV_NUMER 0x04000290
+#define HW_REG_DIV_DENOM 0x04000298
+
+#define HW_REG_MTX_MODE 0x04000440
+#define HW_REG_MTX_LOAD_4x4 0x04000458
+#define HW_REG_MTX_LOAD_4x3 0x0400045C
+#define HW_REG_MTX_MULT_3x3 0x04000468
+
+#define HW_REG_END_VTXS 0x04000504
+#define HW_REG_GXSTAT 0x04000600
+#define HW_REG_DISP3DCNT 0x04000060
+#define HW_REG_BG0HOFS 0x04000010
+#define HW_REG_CLEAR_COLOR 0x04000350
+#define HW_REG_CLEAR_DEPTH 0x04000354
+#define HW_REG_CLRIMAGE_OFFSET 0x04000356
+#define HW_REG_FOG_COLOR 0x04000358
+#define HW_REG_FOG_OFFSET 0x0400035C
+#define HW_REG_BG0CNT 0x04000008
+#define HW_REG_POLYGON_ATTR 0x040004A4
+#define HW_REG_TEXIMAGE_PARAM 0x040004A8
+#define HW_REG_PLTT_BASE 0x040004AC
+
+#define HW_REG_POWCNT1 0x04000304
+
+#define HW_REG_GXFIFO 0x04000400
+#define HW_REG_MTX_IDENTITY 0x04000454
+#define HW_REG_MTX_POP 0x04000448
+#define HW_REG_MTX_MODE 0x04000440
+
+#define HW_REG_CLIPMTX_RESULT 0x04000640
+#define HW_REG_VECMTX_RESULT 0x04000680
+
+#define HW_REG_EDGE_COLOR 0x04000330
+#define HW_REG_FOG_TABLE 0x04000360
+
+#define HW_REG_SHININESS 0x040004D0
+
+#define HW_REG_MASTER_BRIGHT 0x0400006C
+
+#define HW_REG_VRAMCNT_A 0x04000240
+#define HW_REG_VRAMCNT_B 0x04000241
+#define HW_REG_VRAMCNT_C 0x04000242
+#define HW_REG_VRAMCNT_D 0x04000243
+#define HW_REG_VRAMCNT_E 0x04000244
+#define HW_REG_VRAMCNT_F 0x04000245
+#define HW_REG_VRAMCNT_G 0x04000246
+#define HW_REG_WRAMCNT 0x04000247
+#define HW_REG_VRAMCNT_H 0x04000248
+#define HW_REG_VRAMCNT_I 0x04000249
+
+#define HW_REG_DISPCNT 0x04000000
+#define HW_REG_DISPSTAT 0x04000004
+#define HW_REG_DISPCNT_2D 0x04001000
+
+#define HW_REG_DISP3DCNT 0x04000060
+
+#define HW_REG_BG2PA_A 0x04000020
+#define HW_REG_BG2PD_A 0x04000026
+#define HW_REG_BG3PA_A 0x04000030
+#define HW_REG_BG3PD_A 0x04000036
+#define HW_REG_BG2PA_B 0x04001020
+#define HW_REG_BG2PD_B 0x04001026
+#define HW_REG_BG3PA_B 0x04001030
+#define HW_REG_BG3PD_B 0x04001036
+
+#define HW_REG_BG0CNT_A 0x04000008
+#define HW_REG_BG1CNT_A 0x0400000A
+#define HW_REG_BG2CNT_A 0x0400000C
+#define HW_REG_BG3CNT_A 0x0400000E
+
+#define HW_REG_BG0CNT_B 0x04001008
+#define HW_REG_BG1CNT_B 0x0400100A
+#define HW_REG_BG2CNT_B 0x0400100C
+#define HW_REG_BG3CNT_B 0x0400100E
+
+#define HW_REG_DISPCNT_A 0x04000000
+#define HW_REG_DISPCNT_B 0x04001000
+
+//TODO: wait for register commit and replace these
+#define SETREG8(x, y) ((*(vu8 *)x) = y)
+#define SETREG16(x, y) ((*(vu16 *)x) = y)
+#define SETREG32(x, y) ((*(vu32 *)x) = y)
+#define SETREG64(x, y) ((*(vu64 *)x) = y)
+
+#define READREG8(x) (*(vu8 *)x)
+#define READREG16(x) (*(vu16 *)x)
+#define READREG32(x) (*(vu32 *)x)
+#define READREG64(x) (*(vu64 *)x)
+
+static inline void _GX_Load_16(u32 var, void *src, void *dst, u32 size){
+ if (var != -1 && size > 0x1C)
+ {
+ MI_DmaCopy16(var, src, dst, size);
+ }
+ else
+ {
+ MIi_CpuCopy16(src, dst, size);
+ }
+}
+
+static inline void _GX_Load_32(u32 var, void *src, void *dst, u32 size){
+ if (var != -1 && size > 0x30)
+ {
+ MI_DmaCopy32(var, src, dst, size);
+ }
+ else
+ {
+ MIi_CpuCopy32(src, dst, size);
+ }
+}
+
+static inline void _GX_Load_32_Async(u32 var, void *src, void *dst, u32 size, void *func, void *ptr){
+ if (var != -1)
+ {
+ MI_DmaCopy32Async(var, src, dst, size, func, ptr);
+ }
+ else
+ {
+ MIi_CpuCopy32(src, dst, size);
+ }
+}
+
+struct DL
+{
+ u8 *var00; //end pointer
+ u32 *var04; //aligned end pointer, used to write data
+ u8 *var08; //start pointer
+ u32 var0C;
+ u32 var10; //pad end with zero bool
+};
+
+struct VRAM_banks
+{
+ u16 var00; //lcdc
+ u16 var02; //bg
+ u16 var04; //obj
+ u16 var06; //arm7
+ u16 var08; //tex
+ u16 var0A; //texpltt
+ u16 var0C; //clearimage
+ u16 var0E; //bgextpltt
+ u16 var10; //objextpltt
+ u16 var12; //subbg
+ u16 var14; //subobj
+ u16 var16; //subbgextpltt
+ u16 var18; //subobjextpltt
+};
+
+//GX_g3
+void G3_BeginMakeDL(struct DL *displaylist, void *r1, u32 r2);
+s32 G3_EndMakeDL(struct DL *displaylist);
+
+//GX_g3_util
+void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx);
+void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx);
+void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, u32 load, struct Mtx44 *mtx);
+void G3_RotX(fx32 sinphi, fx32 cosphi);
+void G3_RotY(fx32 sinphi, fx32 cosphi);
+void G3_RotZ(fx32 sinphi, fx32 cosphi);
+
+//GX_g3x
+void GXi_NopClearFifo128_(void *reg);
+void G3X_Init();
+void G3X_ResetMtxStack();
+void G3X_ClearFifo();
+void G3X_InitMtxStack();
+void G3X_ResetMtxStack_2();
+void G3X_SetFog(u32 enable, u32 alphamode, u32 depth, s32 offset);
+u32 G3X_GetClipMtx(struct Mtx44 *dst);
+u32 G3X_GetVectorMtx(struct Mtx33 *dst);
+void G3X_SetEdgeColorTable(void *tbl_ptr);
+void G3X_SetFogTable(void *tbl_ptr);
+void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable_fog);
+void G3X_InitTable();
+u32 G3X_GetMtxStackLevelPV(u32 *level);
+u32 G3X_GetMtxStackLevelPJ(u32 *level);
+u32 G3X_GetBoxTestResult(u32 *result);
+void G3X_SetHOffset(u32 offset);
+
+//GX_g3b
+void G3BS_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx);
+void G3B_PushMtx(struct DL *displaylist);
+void G3B_PopMtx(struct DL *displaylist, void *mtx);
+void G3B_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx);
+void G3B_Color(struct DL * displaylist, u32 vtx_col);
+void G3B_Normal(struct DL * displaylist, fx16 x, fx16 y, fx16 z);
+void G3B_Vtx(struct DL * displaylist, fx32 x, fx32 y, fx32 z);
+void G3B_PolygonAttr(struct DL *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6);
+void G3B_MaterialColorDiffAmb(struct DL *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace);
+void G3B_MaterialColorSpecEmi(struct DL *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table);
+void G3B_LightVector(struct DL * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z);
+void G3B_LightColor(struct DL * displaylist, u32 light_num, u32 col);
+void G3B_Begin(struct DL * displaylist, u32 type);
+void G3B_End(struct DL * displaylist);
+
+//GX_asm
+void GX_SendFifo48B(void *src, void *dst);
+
+//GX_vramcnt
+//some of the symbols don't match what the function does
+void GX_VRAMCNT_SetLCDC_(u32 mask);
+void GX_SetBankForBG(s32 bg);
+void GX_SetBankForOBJ(s32 obj);
+void GX_SetBankForBGExtPltt(s32 bgextpltt);
+void GX_SetBankForOBJExtPltt(s32 objextpltt);
+void GX_SetBankForTex(s32 tex);
+void GX_SetBankForTexPltt(s32 texpltt);
+void GX_SetBankForClearImage(s32 clearimage);
+void GX_SetBankForARM7(s32 arm7);
+void GX_SetBankForLCDC(s32 lcdc);
+void GX_SetBankForSubBG(s32 subbg);
+void GX_SetBankForSubOBJ(s32 subobj);
+void GX_SetBankForSubBGExtPltt(s32 subbgextpltt);
+void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt);
+u32 FUN_020C6130(u16 *ptr);
+u32 GX_ResetBankForBG();
+u32 GX_ResetBankForOBJ();
+u32 GX_ResetBankForBGExtPltt();
+u32 GX_ResetBankForOBJExtPltt();
+u32 GX_ResetBankForTex();
+u32 GX_ResetBankForTexPltt();
+u32 GX_ResetBankForClearImage();
+u32 GX_ResetBankForSubBG();
+u32 FUN_020C605C();
+u32 FUN_020C6034();
+u32 GX_ResetBankForSubOBJ();
+u32 FUN_020C5F28(u16 *ptr);
+u32 disableBankForX_();
+u32 GX_DisableBankForOBJExtPltt_2();
+u32 GX_DisableBankForBGExtPltt();
+u32 GX_DisableBankForOBJExtPltt();
+u32 GX_DisableBankForTexPltt_2();
+u32 GX_DisableBankForTexPltt();
+u32 GX_DisableBankForClearImage();
+u32 GX_DisableBankForARM7();
+u32 GX_DisableBankForLCDC();
+u32 GX_DisableBankForSubBGExtPltt();
+u32 GX_DisableBankForSubOBJExtPltt_2();
+u32 FUN_020C5E04();
+u32 GX_DisableBankForSubOBJExtPltt();
+u32 GX_GetBankForBGExtPltt_2();
+u32 GX_GetBankForOBJ();
+u32 GX_GetBankForBGExtPltt();
+u32 GX_GetBankForOBJExtPltt();
+u32 FUN_020C5D8C();
+u32 GX_GetBankForTexPltt();
+u32 GX_GetBankForLCDC();
+u32 GX_GetBankForSubBGExtPltt_2();
+u32 GX_GetBankForSubOBJ();
+u32 GX_GetBankForSubBGExtPltt();
+u32 GX_GetBankForSubOBJExtPltt();
+
+//GX_bgcnt
+void *G2_GetBG0ScrPtr();
+void *G2S_GetBG0ScrPtr();
+void *G2_GetBG1ScrPtr();
+void *G2S_GetBG1ScrPtr();
+void *G2_GetBG2ScrPtr();
+void *G2S_GetBG2ScrPtr();
+void *G2_GetBG3ScrPtr();
+void *G2S_GetBG3ScrPtr();
+void *G2_GetBG0CharPtr();
+void *G2S_GetBG0CharPtr();
+void *G2_GetBG1CharPtr();
+void *G2S_GetBG1CharPtr();
+void *G2_GetBG2CharPtr();
+void *G2S_GetBG2CharPtr();
+void *G2_GetBG3CharPtr();
+void *G2S_GetBG3CharPtr();
+
+//GX_load2d
+void GX_LoadBGPltt(void *src, u32 offset, u32 size);
+void GXS_LoadBGPltt(void *src, u32 offset, u32 size);
+void GX_LoadOBJPltt(void *src, u32 offset, u32 size);
+void GXS_LoadOBJPltt(void *src, u32 offset, u32 size);
+void GX_LoadOAM(void *src, u32 offset, u32 size);
+void GXS_LoadOAM(void *src, u32 offset, u32 size);
+void GX_LoadOBJ(void *src, u32 offset, u32 size);
+void GXS_LoadOBJ(void *src, u32 offset, u32 size);
+void GX_LoadBG0Scr(void *src, u32 offset, u32 size);
+void GXS_LoadBG0Scr(void *src, u32 offset, u32 size);
+void GX_LoadBG1Scr(void *src, u32 offset, u32 size);
+void GXS_LoadBG1Scr(void *src, u32 offset, u32 size);
+void GX_LoadBG2Scr(void *src, u32 offset, u32 size);
+void GXS_LoadBG2Scr(void *src, u32 offset, u32 size);
+void GX_LoadBG3Scr(void *src, u32 offset, u32 size);
+void GXS_LoadBG3Scr(void *src, u32 offset, u32 size);
+void GX_LoadBG0Char(void *src, u32 offset, u32 size);
+void GXS_LoadBG0Char(void *src, u32 offset, u32 size);
+void GX_LoadBG1Char(void *src, u32 offset, u32 size);
+void GXS_LoadBG1Char(void *src, u32 offset, u32 size);
+void GX_LoadBG2Char(void *src, u32 offset, u32 size);
+void GXS_LoadBG2Char(void *src, u32 offset, u32 size);
+void GX_LoadBG3Char(void *src, u32 offset, u32 size);
+void GXS_LoadBG3Char(void *src, u32 offset, u32 size);
+void GX_BeginLoadBGExtPltt();
+void GX_LoadBGExtPltt(void *src, u32 offset, u32 size);
+void GX_EndLoadBGExtPltt();
+void GX_BeginLoadOBJExtPltt();
+void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size);
+void GX_EndLoadOBJExtPltt();
+void GXS_BeginLoadBGExtPltt();
+void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size);
+void GXS_EndLoadBGExtPltt();
+void GXS_BeginLoadOBJExtPltt();
+void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size);
+void GXS_EndLoadOBJExtPltt();
+
+//GX_load3d
+void GX_BeginLoadTex();
+void GX_LoadTex(void *src, u32 offset, u32 size);
+void GX_EndLoadTex();
+void GX_BeginLoadTexPltt();
+void GX_LoadTexPltt(void *src, u32 offset, u32 size);
+void GX_EndLoadTexPltt();
+void GX_BeginLoadClearImage();
+void GX_LoadClearImageColor(void *src, u32 size);
+void GX_LoadClearImageDepth(void *src, u32 size);
+void GX_EndLoadClearImage();
+
+//GX
+void GX_Init();
+u32 GX_HBlankIntr(u32 enable);
+u32 GX_VBlankIntr(u32 enable);
+void GX_DispOff();
+void GX_DispOn();
+void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3);
+void GXS_SetGraphicsMode(u32 mode);
+void GXx_SetMasterBrightness_(vu16 *dst, s32 brightness);
+
+//GX_g2
+void G2x_SetBGyAffine_(u32 *ptr, struct Mtx22 *mtx, fx32 a, fx32 b, fx32 c, fx32 d);
+void G2x_SetBlendAlpha_(u32 *ptr, fx32 a, fx32 b, fx32 c, fx32 d);
+void G2x_SetBlendBrightness_(u16 *ptr, fx32 a, fx32 brightness);
+void G2x_SetBlendBrightnessExt_(u16 *ptr, fx32 a, fx32 b, fx32 c, fx32 d, fx32 brightness);
+void *G2x_ChangeBlendBrightness_(u16 *ptr, fx32 brightness);
+
+//GX_state
+void GX_InitGXState();
+
+//GX_g3imm
+void G3_LoadMtx43(struct Mtx43 *mtx);
+void G3_MultMtx43(struct Mtx43 *mtx);
+void G3_MultMtx33(struct Mtx33 *mtx);
+
+#endif //GUARD_GX_H
diff --git a/arm9/lib/src/GX.c b/arm9/lib/src/GX.c
new file mode 100644
index 00000000..bae16fca
--- /dev/null
+++ b/arm9/lib/src/GX.c
@@ -0,0 +1,122 @@
+#include "global.h"
+#include "main.h"
+#include "gx.h"
+
+extern u16 gUnk021D33BC;
+extern u16 gUnk021D33C0;
+extern u32 gUnk02106814;
+extern u16 gUnk02106810;
+
+ARM_FUNC void GX_Init(){
+ SETREG16(HW_REG_POWCNT1, READREG16(HW_REG_POWCNT1) | 0x8000);
+ SETREG16(HW_REG_POWCNT1, (READREG16(HW_REG_POWCNT1) & ~0x20E) | 0x20E);
+ SETREG16(HW_REG_POWCNT1, READREG16(HW_REG_POWCNT1) | 0x1);
+ GX_InitGXState();
+ u32 temp;
+ while (gUnk021D33BC == 0)
+ {
+ temp = OS_GetLockID();
+ if (temp == -3)
+ {
+ OS_Terminate();
+ }
+ gUnk021D33BC = temp;
+ }
+ SETREG16(HW_REG_DISPSTAT, 0x0);
+ SETREG32(HW_REG_DISPCNT, 0x0);
+ if (gUnk02106814 != -1)
+ {
+ MI_DmaFill32(gUnk02106814, (void *)HW_REG_BG0CNT_A, 0x0, 0x60);
+ SETREG16(HW_REG_MASTER_BRIGHT, 0x0);
+ MI_DmaFill32(gUnk02106814, (void *)HW_REG_DISPCNT_2D, 0x0, 0x70);
+ }
+ else
+ {
+ MIi_CpuClear32(0x0, (void *)HW_REG_BG0CNT_A, 0x60);
+ SETREG16(HW_REG_MASTER_BRIGHT, 0x0);
+ MIi_CpuClear32(0x0, (void *)HW_REG_DISPCNT_2D, 0x70);
+ }
+ SETREG16(HW_REG_BG2PA_A, 0x100);
+ SETREG16(HW_REG_BG2PD_A, 0x100);
+ SETREG16(HW_REG_BG3PA_A, 0x100);
+ SETREG16(HW_REG_BG3PD_A, 0x100);
+ SETREG16(HW_REG_BG2PA_B, 0x100);
+ SETREG16(HW_REG_BG2PD_B, 0x100);
+ SETREG16(HW_REG_BG3PA_B, 0x100);
+ SETREG16(HW_REG_BG3PD_B, 0x100);
+}
+
+ARM_FUNC u32 GX_HBlankIntr(u32 enable){
+ u32 temp = READREG16(HW_REG_DISPSTAT) & 0x10;
+ if (enable)
+ {
+ SETREG16(HW_REG_DISPSTAT, READREG16(HW_REG_DISPSTAT) | 0x10);
+ }
+ else
+ {
+ SETREG16(HW_REG_DISPSTAT, READREG16(HW_REG_DISPSTAT) & ~0x10);
+ }
+ return temp;
+}
+
+ARM_FUNC u32 GX_VBlankIntr(u32 enable){
+ u32 temp = READREG16(HW_REG_DISPSTAT) & 0x8;
+ if (enable)
+ {
+ SETREG16(HW_REG_DISPSTAT, READREG16(HW_REG_DISPSTAT) | 0x8);
+ }
+ else
+ {
+ SETREG16(HW_REG_DISPSTAT, READREG16(HW_REG_DISPSTAT) & ~0x8);
+ }
+ return temp;
+}
+
+ARM_FUNC void GX_DispOff(){
+ u32 temp = READREG32(HW_REG_DISPCNT);
+ gUnk02106810 = 0x0;
+ gUnk021D33C0 = (temp & 0x30000) >> 0x10;
+ SETREG32(HW_REG_DISPCNT, temp & ~0x30000);
+}
+
+ARM_FUNC void GX_DispOn(){
+ gUnk02106810 = 0x1;
+ if (gUnk021D33C0)
+ {
+ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x30000 | (gUnk021D33C0 << 0x10));
+
+ }
+ else
+ {
+ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x10000);
+ }
+}
+
+ARM_FUNC void GX_SetGraphicsMode(u32 mode1, u32 mode2, u32 mode3){
+ u32 temp2 = READREG32(HW_REG_DISPCNT);
+ gUnk021D33C0 = mode1;
+ if (!gUnk02106810)
+ mode1 = 0;
+ SETREG32(HW_REG_DISPCNT, (mode2 | ((temp2 & 0xFFF0FFF0) | (mode1 << 0x10))) | (mode3 << 0x3));
+ if (!gUnk021D33C0)
+ gUnk02106810 = 0x0;
+}
+
+ARM_FUNC void GXS_SetGraphicsMode(u32 mode){
+ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~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..1eb0a011
--- /dev/null
+++ b/arm9/lib/src/GX_asm.c
@@ -0,0 +1,16 @@
+#include "global.h"
+#include "main.h"
+#include "gx.h"
+
+//looks like asm and says asm on the tin...
+ARM_FUNC asm void GX_SendFifo48B(void *src, void *dst){
+ ldmia r0!, {r2-r3,r12}
+ stmia r1, {r2-r3,r12}
+ ldmia r0!, {r2-r3,r12}
+ stmia r1, {r2-r3,r12}
+ ldmia r0!, {r2-r3,r12}
+ stmia r1, {r2-r3,r12}
+ ldmia r0!, {r2-r3,r12}
+ stmia r1, {r2-r3,r12}
+ bx lr
+}
diff --git a/arm9/lib/src/GX_bgcnt.c b/arm9/lib/src/GX_bgcnt.c
new file mode 100644
index 00000000..1eeffab6
--- /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 = (((READREG16(HW_REG_BG0CNT_A) & 0x1F00) >> 0x8) << 0xB);
+ return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10) + temp);
+}
+
+ARM_FUNC void *G2S_GetBG0ScrPtr(){
+ return (void *)(0x6200000 + (((READREG16(HW_REG_BG0CNT_B) & 0x1F00) >> 0x8) << 0xB));
+}
+
+ARM_FUNC void *G2_GetBG1ScrPtr(){
+ u32 temp = (((READREG16(HW_REG_BG1CNT_A) & 0x1F00) >> 0x8) << 0xB);
+ return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10) + temp);
+}
+
+ARM_FUNC void *G2S_GetBG1ScrPtr(){
+ return (void *)(0x6200000 + (((READREG16(HW_REG_BG1CNT_B) & 0x1F00) >> 0x8) << 0xB));
+}
+
+ARM_FUNC void *G2_GetBG2ScrPtr(){
+ u32 temp12 = (READREG32(HW_REG_DISPCNT_A) & 0x7);
+ u32 temp3 = READREG16(HW_REG_BG2CNT_A);
+ u32 temp2 = (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10);
+ u32 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 = (READREG32(HW_REG_DISPCNT_B) & 0x7);
+ u32 temp3 = READREG16(HW_REG_BG2CNT_B);
+ u32 temp1 = ((temp3 & 0x1F00) >> 0x8);
+ switch (temp12)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ return (void *)(0x6200000 + (temp1 << 0xB));
+ case 5:
+ if (temp3 & 0x80)
+ return (void *)(0x6200000 + (temp1 << 0xE));
+ else
+ return (void *)(0x6200000 + (temp1 << 0xB));
+ case 6:
+ return NULL;
+ default:
+ return NULL;
+ }
+}
+
+ARM_FUNC void *G2_GetBG3ScrPtr(){
+ u32 temp12 = (READREG32(HW_REG_DISPCNT_A) & 0x7);
+ u32 temp3 = READREG16(HW_REG_BG3CNT_A);
+ u32 temp2 = (((READREG32(HW_REG_DISPCNT_A) & 0x38000000) >> 0x1B) << 0x10);
+ u32 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 = (READREG32(HW_REG_DISPCNT_B) & 0x7);
+ u32 temp3 = READREG16(HW_REG_BG3CNT_B);
+ u32 temp1 = ((temp3 & 0x1F00) >> 0x8);
+ switch (temp12)
+ {
+ case 0:
+ case 1:
+ case 2:
+ return (void *)(0x6200000 + (temp1 << 0xB));
+ case 3:
+ case 4:
+ case 5:
+ if (temp3 & 0x80)
+ return (void *)(0x6200000 + (temp1 << 0xE));
+ else
+ return (void *)(0x6200000 + (temp1 << 0xB));
+ case 6:
+ return NULL;
+ default:
+ return NULL;
+ }
+}
+
+ARM_FUNC void *G2_GetBG0CharPtr(){
+ u32 temp = (((READREG16(HW_REG_BG0CNT_A) & 0x3C) >> 0x2) << 0xE);
+ return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10) + temp);
+}
+
+ARM_FUNC void *G2S_GetBG0CharPtr(){
+ return (void *)(0x6200000 + (((READREG16(HW_REG_BG0CNT_B) & 0x3C) >> 0x2) << 0xE));
+}
+
+ARM_FUNC void *G2_GetBG1CharPtr(){
+ u32 temp = (((READREG16(HW_REG_BG1CNT_A) & 0x3C) >> 0x2) << 0xE);
+ return (void *)(0x6000000 + (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10) + temp);
+}
+
+ARM_FUNC void *G2S_GetBG1CharPtr(){
+ return (void *)(0x6200000 + (((READREG16(HW_REG_BG1CNT_B) & 0x3C) >> 0x2) << 0xE));
+}
+
+ARM_FUNC void *G2_GetBG2CharPtr(){
+ s32 temp1 = (READREG32(HW_REG_DISPCNT_A) & 0x7);
+ u32 temp = READREG16(HW_REG_BG2CNT_A);
+ if (temp1 < 5 || !(temp & 0x80))
+ {
+ u32 temp1 = (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10);
+ u32 temp2 = (temp & 0x3C) >> 2;
+ return (void *)(0x6000000 + temp1 + (temp2 << 0xE));
+ }
+ else
+ {
+ return NULL;
+ }
+}
+
+ARM_FUNC void *G2S_GetBG2CharPtr(){
+ s32 temp1 = (READREG32(HW_REG_DISPCNT_B) & 0x7);
+ u32 temp = READREG16(HW_REG_BG2CNT_B);
+ if (temp1 < 5 || !(temp & 0x80))
+ {
+ u32 temp2 = ((temp & 0x3C) >> 2) << 0xE;
+ return (void *)(0x6200000 + temp2);
+ }
+ else
+ {
+ return NULL;
+ }
+}
+
+ARM_FUNC void *G2_GetBG3CharPtr(){
+ s32 temp1 = (READREG32(HW_REG_DISPCNT_A) & 0x7);
+ u32 temp = READREG16(HW_REG_BG3CNT_A);
+ if (temp1 < 3 || (temp1 < 6 && !(temp & 0x80)))
+ {
+ u32 temp1 = (((READREG32(HW_REG_DISPCNT_A) & 0x7000000) >> 0x18) << 0x10);
+ u32 temp2 = (temp & 0x3C) >> 2;
+ return (void *)(0x6000000 + temp1 + (temp2 << 0xE));
+ }
+ else
+ {
+ return NULL;
+ }
+}
+
+ARM_FUNC void *G2S_GetBG3CharPtr(){
+ s32 temp1 = (READREG32(HW_REG_DISPCNT_B) & 0x7);
+ u32 temp = READREG16(HW_REG_BG3CNT_B);
+ if (temp1 < 3 || (temp1 < 6 && !(temp & 0x80)))
+ {
+ 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..5bced1ef
--- /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..eb01453d
--- /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 DL *displaylist, void *r1, u32 r2){
+ displaylist->var0C = r2;
+ displaylist->var08 = r1;
+ displaylist->var00 = r1;
+ displaylist->var04 = (u32 *)r1 + 1;
+ displaylist->var10 = 0x0;
+}
+
+ARM_FUNC s32 G3_EndMakeDL(struct DL *displaylist){
+ if (displaylist->var08 == displaylist->var00)
+ return 0;
+ //pads the buffer with 0 to 4byte alignment if needed
+ switch((u32)displaylist->var00 & 0x3)
+ {
+ case 0:
+ return displaylist->var00 - displaylist->var08;
+ case 1:
+ *displaylist->var00++ = 0x0;
+ case 2:
+ *displaylist->var00++ = 0x0;
+ case 3:
+ *displaylist->var00++ = 0x0;
+ }
+ if (displaylist->var10)
+ {
+ *displaylist->var04++ = 0x0;
+ displaylist->var10 = 0x0;
+ }
+ displaylist->var00 = (u8 *)displaylist->var04;
+ return displaylist->var00 - displaylist->var08;
+}
diff --git a/arm9/lib/src/GX_g3_util.c b/arm9/lib/src/GX_g3_util.c
new file mode 100644
index 00000000..75e18589
--- /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;
+ SETREG64(HW_REG_DIV_NUMER, (s64)fovcot << 0x20);
+ SETREG64(HW_REG_DIV_DENOM, (u32)ratio);
+ if (load)
+ {
+ SETREG32(HW_REG_MTX_MODE, 0x0);
+ reg_ptr = (vu32 *)HW_REG_MTX_LOAD_4x4;
+ }
+ if (mtx)
+ {
+ mtx->_[1] = 0x0;
+ mtx->_[2] = 0x0;
+ mtx->_[3] = 0x0;
+ mtx->_[4] = 0x0;
+ mtx->_[6] = 0x0;
+ mtx->_[7] = 0x0;
+ mtx->_[8] = 0x0;
+ mtx->_[9] = 0x0;
+ mtx->_[11] = -scale;
+ mtx->_[12] = 0x0;
+ mtx->_[13] = 0x0;
+ mtx->_[15] = 0x0;
+ }
+ temp1 = FX_GetDivResult();
+ SETREG64(HW_REG_DIV_NUMER, (s64)0x1000 << 0x20);
+ SETREG64(HW_REG_DIV_DENOM, (u32)(near - far));
+ if (load)
+ {
+ *reg_ptr = temp1;
+ *reg_ptr = 0x0;
+ *reg_ptr = 0x0;
+ *reg_ptr = 0x0;
+ *reg_ptr = 0x0;
+ *reg_ptr = fovcot;
+ *reg_ptr = 0x0;
+ *reg_ptr = 0x0;
+ *reg_ptr = 0x0;
+ *reg_ptr = 0x0;
+ }
+ if (mtx)
+ {
+ mtx->_[0] = temp1;
+ mtx->_[5] = fovcot;
+ }
+ temp0 = FX_GetDivResultFx64c();
+ if (scale != 0x1000)
+ temp0 = (temp0 * scale) / 0x1000;
+ temp1 = ((far + near) * temp0 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT;
+ temp2 = (((fx32)(((fx64)(near << 1) * far + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT)) * temp0 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT;
+ if (load)
+ {
+ *reg_ptr = temp1;
+ *reg_ptr = -scale;
+ *reg_ptr = 0x0;
+ *reg_ptr = 0x0;
+ *reg_ptr = temp2;
+ *reg_ptr = 0x0;
+ }
+ if (mtx)
+ {
+ mtx->_[10] = temp1;
+ mtx->_[14] = temp2;
+ }
+}
+
+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)
+ {
+ SETREG32(HW_REG_MTX_MODE, 0x0);
+ reg_ptr = (vu32 *)HW_REG_MTX_LOAD_4x4;
+ }
+ if (mtx)
+ {
+ mtx->_[1] = 0x0;
+ mtx->_[2] = 0x0;
+ mtx->_[3] = 0x0;
+ mtx->_[4] = 0x0;
+ mtx->_[6] = 0x0;
+ mtx->_[7] = 0x0;
+ mtx->_[8] = 0x0;
+ mtx->_[9] = 0x0;
+ mtx->_[11] = 0x0;
+ mtx->_[15] = scale;
+ }
+ temp1 = FX_GetDivResultFx64c();
+ SETREG64(HW_REG_DIV_NUMER, (s64)0x1000 << 0x20);
+ SETREG64(HW_REG_DIV_DENOM, (u32)(top - bottom));
+ if (scale != 0x1000)
+ temp1 = (temp1 * scale) / 0x1000;
+ temp0 = (0x2000 * temp1 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT;
+ if (load)
+ {
+ *reg_ptr = temp0;
+ *reg_ptr = 0x0;
+ *reg_ptr = 0x0;
+ *reg_ptr = 0x0;
+ *reg_ptr = 0x0;
+ }
+ if (mtx)
+ {
+ mtx->_[0] = temp0;
+ }
+ temp2 = FX_GetDivResultFx64c();
+ SETREG64(HW_REG_DIV_NUMER, (s64)0x1000 << 0x20);
+ SETREG64(HW_REG_DIV_DENOM, (u32)(near - far));
+ if (scale != 0x1000)
+ temp2 = (temp2 * scale) / 0x1000;
+ temp0 = (0x2000 * temp2 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT;
+ if (load)
+ {
+ *reg_ptr = temp0;
+ *reg_ptr = 0x0;
+ *reg_ptr = 0x0;
+ *reg_ptr = 0x0;
+ *reg_ptr = 0x0;
+ }
+ if (mtx)
+ {
+ mtx->_[5] = temp0;
+ }
+ temp3 = FX_GetDivResultFx64c();
+ if (scale != 0x1000)
+ temp3 = (temp3 * scale) / 0x1000;
+ temp0 = (0x2000 * temp3 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT;
+ if (load)
+ {
+ *reg_ptr = temp0;
+ *reg_ptr = 0x0;
+ }
+ if (mtx)
+ {
+ mtx->_[10] = temp0;
+ }
+ temp0 = ((-(right + left)) * temp1 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT;
+ temp4 = ((-(top + bottom)) * temp2 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT;
+ temp5 = ((far + near) * temp3 + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT;
+ if (load)
+ {
+ *reg_ptr = temp0;
+ *reg_ptr = temp4;
+ *reg_ptr = temp5;
+ *reg_ptr = scale;
+ }
+ if (mtx)
+ {
+ mtx->_[12] = temp0;
+ mtx->_[13] = temp4;
+ mtx->_[14] = temp5;
+ }
+}
+
+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)
+ {
+ SETREG32(HW_REG_MTX_MODE, 0x2);
+ reg_ptr = (vu32 *)HW_REG_MTX_LOAD_4x3;
+ *reg_ptr = temp1.x;
+ *reg_ptr = temp2.x;
+ *reg_ptr = temp.x;
+ *reg_ptr = temp1.y;
+ *reg_ptr = temp2.y;
+ *reg_ptr = temp.y;
+ *reg_ptr = temp1.z;
+ *reg_ptr = temp2.z;
+ *reg_ptr = temp.z;
+ }
+ c1 = -VEC_DotProduct(a, &temp1);
+ c2 = -VEC_DotProduct(a, &temp2);
+ c3 = -VEC_DotProduct(a, &temp);
+ if (load)
+ {
+ *reg_ptr = c1;
+ *reg_ptr = c2;
+ *reg_ptr = c3;
+ }
+ if (mtx)
+ {
+ mtx->_[0] = temp1.x;
+ mtx->_[1] = temp2.x;
+ mtx->_[2] = temp.x;
+ mtx->_[3] = temp1.y;
+ mtx->_[4] = temp2.y;
+ mtx->_[5] = temp.y;
+ mtx->_[6] = temp1.z;
+ mtx->_[7] = temp2.z;
+ mtx->_[8] = temp.z;
+ mtx->_[9] = c1;
+ mtx->_[10] = c2;
+ mtx->_[11] = c3;
+ }
+}
+
+ARM_FUNC void G3_RotX(fx32 sinphi, fx32 cosphi){
+ vu32 *reg_ptr;
+ reg_ptr = (vu32 *)HW_REG_MTX_MULT_3x3;
+ *reg_ptr = 0x1000;
+ *reg_ptr = 0x0;
+ *reg_ptr = 0x0;
+ *reg_ptr = 0x0;
+ *reg_ptr = cosphi;
+ *reg_ptr = sinphi;
+ *reg_ptr = 0x0;
+ *reg_ptr = -sinphi;
+ *reg_ptr = cosphi;
+}
+
+ARM_FUNC void G3_RotY(fx32 sinphi, fx32 cosphi){
+ vu32 *reg_ptr;
+ reg_ptr = (vu32 *)HW_REG_MTX_MULT_3x3;
+ *reg_ptr = cosphi;
+ *reg_ptr = 0x0;
+ *reg_ptr = -sinphi;
+ *reg_ptr = 0x0;
+ *reg_ptr = 0x1000;
+ *reg_ptr = 0x0;
+ *reg_ptr = sinphi;
+ *reg_ptr = 0x0;
+ *reg_ptr = cosphi;
+}
+
+ARM_FUNC void G3_RotZ(fx32 sinphi, fx32 cosphi){
+ vu32 *reg_ptr;
+ reg_ptr = (vu32 *)HW_REG_MTX_MULT_3x3;
+ *reg_ptr = cosphi;
+ *reg_ptr = sinphi;
+ *reg_ptr = 0x0;
+ *reg_ptr = -sinphi;
+ *reg_ptr = cosphi;
+ *reg_ptr = 0x0;
+ *reg_ptr = 0x0;
+ *reg_ptr = 0x0;
+ *reg_ptr = 0x1000;
+}
diff --git a/arm9/lib/src/GX_g3b.c b/arm9/lib/src/GX_g3b.c
new file mode 100644
index 00000000..50281ec0
--- /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 DL *displaylist, struct Mtx44 *mtx){
+ *(u32 *)displaylist->var00 = 0x16;
+ MI_Copy64B(mtx, displaylist->var04);
+}
+
+ARM_FUNC void G3B_PushMtx(struct DL *displaylist){
+ *(u32 *)displaylist->var00 = 0x11;
+ displaylist->var00 = (u8 *)displaylist->var04;
+ displaylist->var04 = (u32 *)displaylist->var00 + 1;
+}
+
+ARM_FUNC void G3B_PopMtx(struct DL *displaylist, void *mtx){
+ *(u32 *)displaylist->var00 = 0x12;
+ *displaylist->var04 = (u32)mtx;
+ displaylist->var00 = (u8 *)displaylist->var04 + 0x4;
+ displaylist->var04 = (u32 *)displaylist->var00 + 1;
+}
+
+ARM_FUNC void G3B_LoadMtx44(struct DL *displaylist, struct Mtx44 *mtx){
+ G3BS_LoadMtx44(displaylist, mtx);
+ displaylist->var00 = (u8 *)displaylist->var04 + sizeof(struct Mtx44);
+ displaylist->var04 = (u32 *)displaylist->var00 + 1;
+}
+
+//color format is RGB555, stored in the lower bits
+ARM_FUNC void G3B_Color(struct DL * displaylist, u32 vtx_col){
+ *(u32 *)displaylist->var00 = 0x20;
+ *displaylist->var04 = vtx_col;
+ displaylist->var00 = (u8 *)displaylist->var04 + 0x4;
+ displaylist->var04 = (u32 *)displaylist->var00 + 1;
+}
+
+/*
+Only feed normalized Vectors
+only the fractional part and the sign, which is in the first nonfraction bit
+since the vector is assumed to be normalized, are used
+*/
+ARM_FUNC void G3B_Normal(struct DL * displaylist, fx16 x, fx16 y, fx16 z){
+ *(u32 *)displaylist->var00 = 0x21;
+ *displaylist->var04 = ((x >> 3) & 0x3FF) | (((y >> 3) & 0x3FF) << 0xA) | (((z >> 3) & 0x3FF) << 0x14) ;
+ displaylist->var00 = (u8 *)displaylist->var04 + 0x4;
+ displaylist->var04 = (u32 *)displaylist->var00 + 1;
+}
+
+ARM_FUNC void G3B_Vtx(struct DL * displaylist, fx32 x, fx32 y, fx32 z){
+ *(u32 *)displaylist->var00 = 0x23;
+ displaylist->var04[0] = (u32)(u16)x | (u32)(u16)y << 0x10;
+ displaylist->var04[1] = (u32)(u16)z;
+ displaylist->var00 = (u8 *)displaylist->var04 + 0x8;
+ displaylist->var04 = (u32 *)displaylist->var00 + 1;
+}
+
+//TODO: name arguments
+ARM_FUNC void G3B_PolygonAttr(struct DL *displaylist, u32 r1, u32 r2, u32 r3, u32 r4, u32 r5, u32 r6){
+ *(u32 *)displaylist->var00 = 0x29;
+ *displaylist->var04 = r1 | r2 << 0x4 | r3 << 0x6 | r6 | r4 << 0x18 | r5 << 0x10;
+ displaylist->var00 = (u8 *)displaylist->var04 + 0x4;
+ displaylist->var04 = (u32 *)displaylist->var00 + 1;
+}
+
+ARM_FUNC void G3B_MaterialColorDiffAmb(struct DL *displaylist, u32 diffuse_col, u32 ambient_col, u32 replace){
+ *(u32 *)displaylist->var00 = 0x30;
+ u32 replace_vtx_color_with_diffuse;
+ if (replace)
+ replace_vtx_color_with_diffuse = TRUE;
+ else
+ replace_vtx_color_with_diffuse = FALSE;
+ *displaylist->var04 = diffuse_col | ambient_col << 0x10 | replace_vtx_color_with_diffuse << 0xF;
+ displaylist->var00 = (u8 *)displaylist->var04 + 0x4;
+ displaylist->var04 = (u32 *)displaylist->var00 + 1;
+}
+
+ARM_FUNC void G3B_MaterialColorSpecEmi(struct DL *displaylist, u32 specular_col, u32 emission_col, u32 shiny_table){
+ *(u32 *)displaylist->var00 = 0x31;
+ u32 enable_shininess_table;
+ if (shiny_table)
+ enable_shininess_table = TRUE;
+ else
+ enable_shininess_table = FALSE;
+ *displaylist->var04 = specular_col | emission_col << 0x10 | enable_shininess_table << 0xF;
+ displaylist->var00 = (u8 *)displaylist->var04 + 0x4;
+ displaylist->var04 = (u32 *)displaylist->var00 + 1;
+}
+
+/*
+Only feed normalized Vectors
+only the fractional part and the sign, which is in the first nonfraction bit
+since the vector is assumed to be normalized, are used
+*/
+ARM_FUNC void G3B_LightVector(struct DL * displaylist, u32 light_num, fx16 x, fx16 y, fx16 z){
+ *(u32 *)displaylist->var00 = 0x32;
+ *displaylist->var04 = ((x >> 3) & 0x3FF) | (((y >> 3) & 0x3FF) << 0xA) | (((z >> 3) & 0x3FF) << 0x14) | light_num << 0x1E;
+ displaylist->var00 = (u8 *)displaylist->var04 + 0x4;
+ displaylist->var04 = (u32 *)displaylist->var00 + 1;
+}
+
+ARM_FUNC void G3B_LightColor(struct DL * displaylist, u32 light_num, u32 col){
+ *(u32 *)displaylist->var00 = 0x33;
+ *displaylist->var04 = col | light_num << 0x1E;
+ displaylist->var00 = (u8 *)displaylist->var04 + 0x4;
+ displaylist->var04 = (u32 *)displaylist->var00 + 1;
+}
+
+ARM_FUNC void G3B_Begin(struct DL * displaylist, u32 type){
+ *(u32 *)displaylist->var00 = 0x40;
+ *displaylist->var04 = type;
+ displaylist->var00 = (u8 *)displaylist->var04 + 0x4;
+ displaylist->var04 = (u32 *)displaylist->var00 + 1;
+}
+
+ARM_FUNC void G3B_End(struct DL * displaylist){
+ *(u32 *)displaylist->var00 = 0x41;
+ displaylist->var00 = (u8 *)displaylist->var04;
+ displaylist->var04 = (u32 *)displaylist->var00 + 1;
+}
diff --git a/arm9/lib/src/GX_g3imm.c b/arm9/lib/src/GX_g3imm.c
new file mode 100644
index 00000000..f11e2927
--- /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){
+ SETREG32(HW_REG_GXFIFO, 0x17);
+ GX_SendFifo48B(mtx, (void *)HW_REG_GXFIFO);
+}
+
+ARM_FUNC void G3_MultMtx43(struct Mtx43 *mtx){
+ SETREG32(HW_REG_GXFIFO, 0x19);
+ GX_SendFifo48B(mtx, (void *)HW_REG_GXFIFO);
+}
+
+ARM_FUNC void G3_MultMtx33(struct Mtx33 *mtx){
+ SETREG32(HW_REG_GXFIFO, 0x1A);
+ MI_Copy36B(mtx, (void *)HW_REG_GXFIFO);
+}
diff --git a/arm9/lib/src/GX_g3x.c b/arm9/lib/src/GX_g3x.c
new file mode 100644
index 00000000..7ced9de6
--- /dev/null
+++ b/arm9/lib/src/GX_g3x.c
@@ -0,0 +1,235 @@
+#include "global.h"
+#include "main.h"
+#include "gx.h"
+
+extern u32 gUnk02106814;
+
+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();
+ SETREG32(HW_REG_END_VTXS, 0x0);
+ while (READREG32(HW_REG_GXSTAT) & 0x8000000); //wait for geometry engine to not be busy
+ SETREG16(HW_REG_DISP3DCNT, 0x0);
+ SETREG32(HW_REG_GXSTAT, 0x0);
+ SETREG32(HW_REG_BG0HOFS, 0x0);
+ SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x2000);
+ SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x1000);
+ SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & ~0x3002);
+ SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & ~0x3000 | 0x10);
+ SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & (u16)~0x3004);
+ SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000);
+ SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) & ~0xC0000000 | 0x80000000);
+ G3X_InitMtxStack();
+ SETREG32(HW_REG_CLEAR_COLOR, 0x0);
+ SETREG16(HW_REG_CLEAR_DEPTH, 0x7FFF);
+ SETREG16(HW_REG_CLRIMAGE_OFFSET, 0x0);
+ SETREG32(HW_REG_FOG_COLOR, 0x0);
+ SETREG16(HW_REG_FOG_OFFSET, 0x0);
+ SETREG16(HW_REG_BG0CNT, READREG16(HW_REG_BG0CNT) & ~0x3);
+ G3X_InitTable();
+ SETREG32(HW_REG_POLYGON_ATTR, 0x1F0080);
+ SETREG32(HW_REG_TEXIMAGE_PARAM, 0x0);
+ SETREG32(HW_REG_PLTT_BASE, 0x0);
+}
+
+ARM_FUNC void G3X_ResetMtxStack(){
+ while (READREG32(HW_REG_GXSTAT) & 0x8000000);
+ SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000);
+ SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x2000);
+ SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x1000);
+ G3X_ResetMtxStack_2();
+ SETREG32(HW_REG_POLYGON_ATTR, 0x1F0080);
+ SETREG32(HW_REG_TEXIMAGE_PARAM, 0x0);
+ SETREG32(HW_REG_PLTT_BASE, 0x0);
+}
+
+ARM_FUNC void G3X_ClearFifo(){
+ GXi_NopClearFifo128_((void *)HW_REG_GXFIFO);
+ while (READREG32(HW_REG_GXSTAT) & 0x8000000);
+}
+
+ARM_FUNC void G3X_InitMtxStack(){
+ u32 PV_level, PJ_level;
+ SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000);
+ while (G3X_GetMtxStackLevelPV(&PV_level));
+ while (G3X_GetMtxStackLevelPJ(&PJ_level));
+ SETREG32(HW_REG_MTX_MODE, 0x3);
+ SETREG32(HW_REG_MTX_IDENTITY, 0x0);
+ SETREG32(HW_REG_MTX_MODE, 0x0);
+ if (PJ_level)
+ {
+ SETREG32(HW_REG_MTX_POP, PJ_level);
+ }
+ SETREG32(HW_REG_MTX_IDENTITY, 0x0);
+ SETREG32(HW_REG_MTX_MODE, 0x2);
+ SETREG32(HW_REG_MTX_POP, PV_level);
+ SETREG32(HW_REG_MTX_IDENTITY, 0x0);
+}
+
+ARM_FUNC void G3X_ResetMtxStack_2(){
+ u32 PV_level, PJ_level;
+ SETREG32(HW_REG_GXSTAT, READREG32(HW_REG_GXSTAT) | 0x8000);
+ while (G3X_GetMtxStackLevelPV(&PV_level));
+ while (G3X_GetMtxStackLevelPJ(&PJ_level));
+ SETREG32(HW_REG_MTX_MODE, 0x3);
+ SETREG32(HW_REG_MTX_IDENTITY, 0x0);
+ SETREG32(HW_REG_MTX_MODE, 0x0);
+ if (PJ_level)
+ {
+ SETREG32(HW_REG_MTX_POP, PJ_level);
+ }
+
+ SETREG32(HW_REG_MTX_MODE, 0x2);
+ SETREG32(HW_REG_MTX_POP, PV_level);
+ SETREG32(HW_REG_MTX_IDENTITY, 0x0);
+
+}
+
+ARM_FUNC void G3X_SetFog(u32 enable, u32 alphamode, u32 depth, s32 offset){
+ if (enable)
+ {
+ SETREG16(HW_REG_FOG_OFFSET, offset);
+ SETREG16(HW_REG_DISP3DCNT, (READREG16(HW_REG_DISP3DCNT) &~0x3f40) | (((depth << 0x8)| (alphamode << 0x6)|0x80 )));
+
+ }
+ else
+ {
+ SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & (u16)~0x3080);
+ }
+}
+
+ARM_FUNC u32 G3X_GetClipMtx(struct Mtx44 *dst){
+ if (READREG32(HW_REG_GXSTAT) & 0x8000000)
+ {
+ return -1;
+ }
+ else
+ {
+ MI_Copy64B((void *)HW_REG_CLIPMTX_RESULT, dst);
+ return 0;
+ }
+}
+
+ARM_FUNC u32 G3X_GetVectorMtx(struct Mtx33 *dst){
+ if (READREG32(HW_REG_GXSTAT) & 0x8000000)
+ {
+ return -1;
+ }
+ else
+ {
+ MI_Copy36B((void *)HW_REG_VECMTX_RESULT, dst);
+ return 0;
+ }
+}
+
+ARM_FUNC void G3X_SetEdgeColorTable(void *tbl_ptr){
+ MIi_CpuCopy16(tbl_ptr, (void *)HW_REG_EDGE_COLOR, 0x10);
+}
+
+ARM_FUNC void G3X_SetFogTable(void *tbl_ptr){
+ MI_Copy16B(tbl_ptr, (void *)HW_REG_FOG_TABLE);
+}
+
+ARM_FUNC void G3X_SetClearColor(u32 col, u32 alpha, u32 depth, u32 polygon_id, u32 enable_fog){
+ u32 temp = col | (alpha << 0x10) | (polygon_id << 0x18);
+ if (enable_fog)
+ temp |= 0x8000;
+ SETREG32(HW_REG_CLEAR_COLOR, temp);
+ SETREG16(HW_REG_CLEAR_DEPTH, depth);
+}
+
+ARM_FUNC void G3X_InitTable(){
+ if (gUnk02106814 != -1)
+ {
+ MI_DmaFill32Async(gUnk02106814, (void *)HW_REG_EDGE_COLOR, 0x0, 0x10, 0x0, 0x0);
+ MI_DmaFill32(gUnk02106814, (void *)HW_REG_FOG_TABLE, 0x0, 0x60);
+ }
+ else
+ {
+ MIi_CpuClear32(0x0, (void *)HW_REG_EDGE_COLOR, 0x10);
+ MIi_CpuClear32(0x0, (void *)HW_REG_FOG_TABLE, 0x60);
+ }
+ for (int i = 0; i < 0x20; i++)
+ {
+ SETREG32(HW_REG_SHININESS, 0x0);
+ }
+}
+
+ARM_FUNC u32 G3X_GetMtxStackLevelPV(u32 *level){
+ if (READREG32(HW_REG_GXSTAT) & 0x4000)
+ {
+ return -1;
+ }
+ else
+ {
+ *level = (READREG32(HW_REG_GXSTAT) & 0x1F00) >> 0x8;
+ return 0;
+ }
+}
+
+ARM_FUNC u32 G3X_GetMtxStackLevelPJ(u32 *level){
+ if (READREG32(HW_REG_GXSTAT) & 0x4000)
+ {
+ return -1;
+ }
+ else
+ {
+ *level = (READREG32(HW_REG_GXSTAT) & 0x2000) >> 0xD;
+ return 0;
+ }
+}
+
+ARM_FUNC u32 G3X_GetBoxTestResult(u32 *result){
+ if (READREG32(HW_REG_GXSTAT) & 0x1)
+ {
+ return -1;
+ }
+ else
+ {
+ *result = (READREG32(HW_REG_GXSTAT) & 0x2);
+ return 0;
+ }
+}
+
+ARM_FUNC void G3X_SetHOffset(u32 offset){
+ SETREG32(HW_REG_BG0HOFS, offset);
+}
diff --git a/arm9/lib/src/GX_load2d.c b/arm9/lib/src/GX_load2d.c
new file mode 100644
index 00000000..972babad
--- /dev/null
+++ b/arm9/lib/src/GX_load2d.c
@@ -0,0 +1,227 @@
+#include "global.h"
+#include "main.h"
+#include "gx.h"
+
+extern u32 gUnk02106814;
+
+extern s32 gUnk021D33F8;
+extern s32 gUnk021D33F4;
+extern u32 gUnk021D33F0;
+extern u32 gUnk021D33EC;
+extern s32 gUnk021D33E8;
+extern u32 gUnk021D33E4;
+extern s32 gUnk021D33E0;
+
+
+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){
+ _GX_Load_16(gUnk02106814, src, (void *)(0x5000000 + offset), size);
+}
+
+ARM_FUNC void GXS_LoadBGPltt(void *src, u32 offset, u32 size){
+ _GX_Load_16(gUnk02106814, src, (void *)(0x5000400 + offset), size);
+}
+
+ARM_FUNC void GX_LoadOBJPltt(void *src, u32 offset, u32 size){
+ _GX_Load_16(gUnk02106814, src, (void *)(0x5000200 + offset), size);
+}
+
+ARM_FUNC void GXS_LoadOBJPltt(void *src, u32 offset, u32 size){
+ _GX_Load_16(gUnk02106814, src, (void *)(0x5000600 + offset), size);
+}
+
+ARM_FUNC void GX_LoadOAM(void *src, u32 offset, u32 size){
+ _GX_Load_32(gUnk02106814, src, (void *)(0x7000000 + offset), size);
+}
+
+ARM_FUNC void GXS_LoadOAM(void *src, u32 offset, u32 size){
+ _GX_Load_32(gUnk02106814, src, (void *)(0x7000400 + offset), size);
+}
+
+ARM_FUNC void GX_LoadOBJ(void *src, u32 offset, u32 size){
+ u32 base = (u32)_GX_OBJ_PTR();
+ _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size);
+}
+
+ARM_FUNC void GXS_LoadOBJ(void *src, u32 offset, u32 size){
+ u32 base = (u32)_GXS_OBJ_PTR();
+ _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size);
+}
+
+ARM_FUNC void GX_LoadBG0Scr(void *src, u32 offset, u32 size){
+ u32 base = (u32)G2_GetBG0ScrPtr();
+ _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size);
+}
+
+ARM_FUNC void GXS_LoadBG0Scr(void *src, u32 offset, u32 size){
+ u32 base = (u32)G2S_GetBG0ScrPtr();
+ _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size);
+}
+
+ARM_FUNC void GX_LoadBG1Scr(void *src, u32 offset, u32 size){
+ u32 base = (u32)G2_GetBG1ScrPtr();
+ _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size);
+}
+
+ARM_FUNC void GXS_LoadBG1Scr(void *src, u32 offset, u32 size){
+ u32 base = (u32)G2S_GetBG1ScrPtr();
+ _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size);
+}
+
+ARM_FUNC void GX_LoadBG2Scr(void *src, u32 offset, u32 size){
+ u32 base = (u32)G2_GetBG2ScrPtr();
+ _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size);
+}
+
+ARM_FUNC void GXS_LoadBG2Scr(void *src, u32 offset, u32 size){
+ u32 base = (u32)G2S_GetBG2ScrPtr();
+ _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size);
+}
+
+ARM_FUNC void GX_LoadBG3Scr(void *src, u32 offset, u32 size){
+ u32 base = (u32)G2_GetBG3ScrPtr();
+ _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size);
+}
+
+ARM_FUNC void GXS_LoadBG3Scr(void *src, u32 offset, u32 size){
+ u32 base = (u32)G2S_GetBG3ScrPtr();
+ _GX_Load_16(gUnk02106814, src, (void *)(base + offset), size);
+}
+
+ARM_FUNC void GX_LoadBG0Char(void *src, u32 offset, u32 size){
+ u32 base = (u32)G2_GetBG0CharPtr();
+ _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size);
+}
+
+ARM_FUNC void GXS_LoadBG0Char(void *src, u32 offset, u32 size){
+ u32 base = (u32)G2S_GetBG0CharPtr();
+ _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size);
+}
+
+ARM_FUNC void GX_LoadBG1Char(void *src, u32 offset, u32 size){
+ u32 base = (u32)G2_GetBG1CharPtr();
+ _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size);
+}
+
+ARM_FUNC void GXS_LoadBG1Char(void *src, u32 offset, u32 size){
+ u32 base = (u32)G2S_GetBG1CharPtr();
+ _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size);
+}
+
+ARM_FUNC void GX_LoadBG2Char(void *src, u32 offset, u32 size){
+ u32 base = (u32)G2_GetBG2CharPtr();
+ _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size);
+}
+
+ARM_FUNC void GXS_LoadBG2Char(void *src, u32 offset, u32 size){
+ u32 base = (u32)G2S_GetBG2CharPtr();
+ _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size);
+}
+
+ARM_FUNC void GX_LoadBG3Char(void *src, u32 offset, u32 size){
+ u32 base = (u32)G2_GetBG3CharPtr();
+ _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size);
+}
+
+ARM_FUNC void GXS_LoadBG3Char(void *src, u32 offset, u32 size){
+ u32 base = (u32)G2S_GetBG3CharPtr();
+ _GX_Load_32(gUnk02106814, src, (void *)(base + offset), size);
+}
+
+ARM_FUNC void GX_BeginLoadBGExtPltt(){
+ gUnk021D33F4 = GX_ResetBankForBGExtPltt();
+ switch (gUnk021D33F4)
+ {
+ case 0: //needed to match
+ break;
+ case 0x10:
+ gUnk021D33F0 = 0x06880000;
+ gUnk021D33EC = 0x0;
+ break;
+ case 0x40:
+ gUnk021D33F0 = 0x06894000;
+ gUnk021D33EC = 0x4000;
+ break;
+ case 0x20:
+ case 0x60:
+ gUnk021D33F0 = 0x06890000;
+ gUnk021D33EC = 0x0;
+ break;
+ }
+}
+
+ARM_FUNC void GX_LoadBGExtPltt(void *src, u32 offset, u32 size){
+ _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D33F0 + offset - gUnk021D33EC), size, NULL, NULL);
+}
+
+ARM_FUNC void GX_EndLoadBGExtPltt(){
+ if (gUnk02106814 != -1)
+ MI_WaitDma(gUnk02106814);
+ GX_SetBankForBGExtPltt(gUnk021D33F4);
+ gUnk021D33F4 = 0x0;
+ gUnk021D33F0 = 0x0;
+ gUnk021D33EC = 0x0;
+}
+
+ARM_FUNC void GX_BeginLoadOBJExtPltt(){
+ gUnk021D33E8 = GX_ResetBankForOBJExtPltt();
+ switch (gUnk021D33E8)
+ {
+ case 0: //needed to match
+ break;
+ case 0x40:
+ gUnk021D33E4 = 0x06894000;
+ break;
+ case 0x20:
+ gUnk021D33E4 = 0x06890000;
+ break;
+ }
+}
+
+ARM_FUNC void GX_LoadOBJExtPltt(void *src, u32 offset, u32 size){
+ _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D33E4 + offset), size, NULL, NULL);
+}
+
+ARM_FUNC void GX_EndLoadOBJExtPltt(){
+ if (gUnk02106814 != -1)
+ MI_WaitDma(gUnk02106814);
+ GX_SetBankForOBJExtPltt(gUnk021D33E8);
+ gUnk021D33E8 = 0x0;
+ gUnk021D33E4 = 0x0;
+}
+
+ARM_FUNC void GXS_BeginLoadBGExtPltt(){
+ gUnk021D33E0 = FUN_020C6034();
+}
+
+ARM_FUNC void GXS_LoadBGExtPltt(void *src, u32 offset, u32 size){
+ _GX_Load_32_Async(gUnk02106814, src, (void *)(0x06898000 + offset), size, NULL, NULL);
+}
+
+ARM_FUNC void GXS_EndLoadBGExtPltt(){
+ if (gUnk02106814 != -1)
+ MI_WaitDma(gUnk02106814);
+ GX_SetBankForSubBGExtPltt(gUnk021D33E0);
+ gUnk021D33E0 = 0x0;
+}
+
+ARM_FUNC void GXS_BeginLoadOBJExtPltt(){
+ gUnk021D33F8 = GX_ResetBankForSubOBJ();
+}
+
+ARM_FUNC void GXS_LoadOBJExtPltt(void *src, u32 offset, u32 size){
+ _GX_Load_32_Async(gUnk02106814, src, (void *)(0x068A0000 + offset), size, NULL, NULL);
+}
+
+ARM_FUNC void GXS_EndLoadOBJExtPltt(){
+ if (gUnk02106814 != -1)
+ MI_WaitDma(gUnk02106814);
+ GX_SetBankForSubOBJExtPltt(gUnk021D33F8);
+ gUnk021D33F8 = 0x0;
+}
diff --git a/arm9/lib/src/GX_load3d.c b/arm9/lib/src/GX_load3d.c
new file mode 100644
index 00000000..ee7502db
--- /dev/null
+++ b/arm9/lib/src/GX_load3d.c
@@ -0,0 +1,124 @@
+#include "global.h"
+#include "main.h"
+#include "gx.h"
+
+extern u32 gUnk02106814;
+
+extern u32 gUnk021D3410;
+extern u32 gUnk021D3400;
+extern u32 gUnk021D3414;
+extern u32 gUnk021D3418;
+
+//probably structs of length 0x6
+extern u16 gUnk02103B4C[];
+extern u16 gUnk02103B4E[];
+extern u16 gUnk02103B50[];
+
+extern u32 gUnk021D3408;
+extern u32 gUnk021D3404;
+extern u16 gUnk02103B3C[];
+
+extern s32 gUnk021D33FC;
+extern u32 gUnk021D340C;
+
+ARM_FUNC void GX_BeginLoadTex(){
+ u32 temp = GX_ResetBankForTex();
+ gUnk021D3410 = temp;
+ gUnk021D3400 = gUnk02103B4C[temp * 3] << 0xC;
+ gUnk021D3414 = gUnk02103B4E[temp * 3] << 0xC;
+ gUnk021D3418 = gUnk02103B50[temp * 3] << 0xC;
+}
+
+ARM_FUNC void GX_LoadTex(void *src, u32 offset, u32 size){
+ void *temp;
+ if (!gUnk021D3414)
+ {
+ temp = (void *)(gUnk021D3400 + offset);
+ }
+ else
+ {
+ if ((offset + size) < gUnk021D3418)
+ {
+ temp = (void *)(gUnk021D3400 + offset);
+ }
+ else if (offset >= gUnk021D3418)
+ {
+ temp = (void *)(gUnk021D3414 + offset - gUnk021D3418);
+ }
+ else
+ {
+ void *temp2 = (void *)gUnk021D3414;
+ u32 temp1 = gUnk021D3418 - offset;
+ temp = (void *)(gUnk021D3400 + offset);
+ _GX_Load_32(gUnk02106814, src, temp, temp1);
+ _GX_Load_32_Async(gUnk02106814, (void *)((u8 *)src + temp1), temp2, (size - temp1), NULL, NULL);
+ return;
+ }
+ }
+ _GX_Load_32_Async(gUnk02106814, src, temp, size, NULL, NULL);
+}
+
+ARM_FUNC void GX_EndLoadTex(){
+ if (gUnk02106814 != -1)
+ MI_WaitDma(gUnk02106814);
+ GX_SetBankForTex(gUnk021D3410);
+ gUnk021D3418 = 0x0;
+ gUnk021D3414 = 0x0;
+ gUnk021D3400 = 0x0;
+ gUnk021D3410 = 0x0;
+}
+
+ARM_FUNC void GX_BeginLoadTexPltt(){
+ s32 temp = GX_ResetBankForTexPltt();
+ gUnk021D3408 = temp;
+ gUnk021D3404 = gUnk02103B3C[temp >> 4] << 0xC;
+}
+
+ARM_FUNC void GX_LoadTexPltt(void *src, u32 offset, u32 size){
+ _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D3404 + offset), size, NULL, NULL);
+}
+
+ARM_FUNC void GX_EndLoadTexPltt(){
+ if (gUnk02106814 != -1)
+ MI_WaitDma(gUnk02106814);
+ GX_SetBankForTexPltt(gUnk021D3408);
+ gUnk021D3408 = 0x0;
+ gUnk021D3404 = 0x0;
+}
+
+ARM_FUNC void GX_BeginLoadClearImage(){
+ s32 temp = GX_ResetBankForClearImage();
+ gUnk021D33FC = temp;
+ switch (temp)
+ {
+ case 2:
+ case 3:
+ gUnk021D340C = 0x6800000;
+ return;
+ case 8:
+ case 12:
+ gUnk021D340C = 0x6840000;
+ return;
+ case 1:
+ gUnk021D340C = 0x67E0000;
+ return;
+ case 4:
+ gUnk021D340C = 0x6820000;
+ }
+}
+
+ARM_FUNC void GX_LoadClearImageColor(void *src, u32 size){
+ _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D340C), size, NULL, NULL);
+}
+
+ARM_FUNC void GX_LoadClearImageDepth(void *src, u32 size){
+ _GX_Load_32_Async(gUnk02106814, src, (void *)(gUnk021D340C + 0x20000), size, NULL, NULL);
+}
+
+ARM_FUNC void GX_EndLoadClearImage(){
+ if (gUnk02106814 != -1)
+ MI_WaitDma(gUnk02106814);
+ GX_SetBankForClearImage(gUnk021D33FC);
+ gUnk021D33FC = 0x0;
+ gUnk021D340C = 0x0;
+}
diff --git a/arm9/lib/src/GX_state.c b/arm9/lib/src/GX_state.c
new file mode 100644
index 00000000..38968523
--- /dev/null
+++ b/arm9/lib/src/GX_state.c
@@ -0,0 +1,26 @@
+#include "global.h"
+#include "main.h"
+#include "gx.h"
+
+extern struct VRAM_banks gUnk021D33C4;
+
+ARM_FUNC void GX_InitGXState(){
+ gUnk021D33C4.var00 = 0x0;
+ gUnk021D33C4.var02 = 0x0;
+ gUnk021D33C4.var04 = 0x0;
+ gUnk021D33C4.var06 = 0x0;
+ gUnk021D33C4.var08 = 0x0;
+ gUnk021D33C4.var0A = 0x0;
+ gUnk021D33C4.var0C = 0x0;
+ gUnk021D33C4.var0E = 0x0;
+ gUnk021D33C4.var10 = 0x0;
+ gUnk021D33C4.var12 = 0x0;
+ gUnk021D33C4.var14 = 0x0;
+ gUnk021D33C4.var16 = 0x0;
+ gUnk021D33C4.var18 = 0x0;
+ SETREG32(HW_REG_VRAMCNT_A, 0x0);
+ SETREG8(HW_REG_VRAMCNT_E, 0x0);
+ SETREG8(HW_REG_VRAMCNT_F, 0x0);
+ SETREG8(HW_REG_VRAMCNT_G, 0x0);
+ SETREG16(HW_REG_VRAMCNT_H, 0x0);
+}
diff --git a/arm9/lib/src/GX_vramcnt.c b/arm9/lib/src/GX_vramcnt.c
new file mode 100644
index 00000000..24862470
--- /dev/null
+++ b/arm9/lib/src/GX_vramcnt.c
@@ -0,0 +1,579 @@
+#include "global.h"
+#include "main.h"
+#include "gx.h"
+
+extern u16 gUnk021D33BC;
+extern struct VRAM_banks gUnk021D33C4;
+
+ARM_FUNC void GX_VRAMCNT_SetLCDC_(u32 mask){
+ if (mask & (0x1 << 0))
+ SETREG8(HW_REG_VRAMCNT_A, 0x80);
+ if (mask & (0x1 << 1))
+ SETREG8(HW_REG_VRAMCNT_B, 0x80);
+ if (mask & (0x1 << 2))
+ SETREG8(HW_REG_VRAMCNT_C, 0x80);
+ if (mask & (0x1 << 3))
+ SETREG8(HW_REG_VRAMCNT_D, 0x80);
+ if (mask & (0x1 << 4))
+ SETREG8(HW_REG_VRAMCNT_E, 0x80);
+ if (mask & (0x1 << 5))
+ SETREG8(HW_REG_VRAMCNT_F, 0x80);
+ if (mask & (0x1 << 6))
+ SETREG8(HW_REG_VRAMCNT_G, 0x80);
+ if (mask & (0x1 << 7))
+ SETREG8(HW_REG_VRAMCNT_H, 0x80);
+ if (mask & (0x1 << 8))
+ SETREG8(HW_REG_VRAMCNT_I, 0x80);
+}
+
+ARM_FUNC void GX_SetBankForBG(s32 bg){
+ gUnk021D33C4.var00 = (u16)(~bg & (gUnk021D33C4.var00 | gUnk021D33C4.var02));
+ gUnk021D33C4.var02 = bg;
+ switch (bg)
+ {
+ case 8:
+ SETREG8(HW_REG_VRAMCNT_D, 0x81);
+ break;
+ case 12:
+ SETREG8(HW_REG_VRAMCNT_D, 0x89);
+ case 4:
+ SETREG8(HW_REG_VRAMCNT_C, 0x81);
+ break;
+ case 14:
+ SETREG8(HW_REG_VRAMCNT_D, 0x91);
+ case 6:
+ SETREG8(HW_REG_VRAMCNT_C, 0x89);
+ case 2:
+ SETREG8(HW_REG_VRAMCNT_B, 0x81);
+ break;
+ case 15:
+ SETREG8(HW_REG_VRAMCNT_D, 0x99);
+ case 7:
+ SETREG8(HW_REG_VRAMCNT_C, 0x91);
+ case 3:
+ SETREG8(HW_REG_VRAMCNT_B, 0x89);
+ case 1:
+ SETREG8(HW_REG_VRAMCNT_A, 0x81);
+ break;
+ case 11:
+ SETREG8(HW_REG_VRAMCNT_A, 0x81);
+ SETREG8(HW_REG_VRAMCNT_B, 0x89);
+ SETREG8(HW_REG_VRAMCNT_D, 0x91);
+ break;
+ case 13:
+ SETREG8(HW_REG_VRAMCNT_D, 0x91);
+ case 5:
+ SETREG8(HW_REG_VRAMCNT_A, 0x81);
+ SETREG8(HW_REG_VRAMCNT_C, 0x89);
+ break;
+ case 9:
+ SETREG8(HW_REG_VRAMCNT_A, 0x81);
+ SETREG8(HW_REG_VRAMCNT_D, 0x89);
+ break;
+ case 10:
+ SETREG8(HW_REG_VRAMCNT_B, 0x81);
+ SETREG8(HW_REG_VRAMCNT_D, 0x89);
+ break;
+ case 112:
+ SETREG8(HW_REG_VRAMCNT_G, 0x99);
+ case 48:
+ SETREG8(HW_REG_VRAMCNT_F, 0x91);
+ case 16:
+ SETREG8(HW_REG_VRAMCNT_E, 0x81);
+ break;
+ case 80:
+ SETREG8(HW_REG_VRAMCNT_G, 0x91);
+ SETREG8(HW_REG_VRAMCNT_E, 0x81);
+ break;
+ case 96:
+ SETREG8(HW_REG_VRAMCNT_G, 0x89);
+ case 32:
+ SETREG8(HW_REG_VRAMCNT_F, 0x81);
+ break;
+ case 64:
+ SETREG8(HW_REG_VRAMCNT_G, 0x81);
+ break;
+ default:
+ break;
+ }
+ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00);
+}
+
+ARM_FUNC void GX_SetBankForOBJ(s32 obj){
+ gUnk021D33C4.var00 = (u16)(~obj & (gUnk021D33C4.var00 | gUnk021D33C4.var04));
+ gUnk021D33C4.var04 = obj;
+ switch (obj)
+ {
+ case 3:
+ SETREG8(HW_REG_VRAMCNT_B, 0x8A);
+ case 1:
+ SETREG8(HW_REG_VRAMCNT_A, 0x82);
+ case 0: //needed to match
+ break;
+ case 2:
+ SETREG8(HW_REG_VRAMCNT_B, 0x82);
+ break;
+ case 112:
+ SETREG8(HW_REG_VRAMCNT_G, 0x9A);
+ case 48:
+ SETREG8(HW_REG_VRAMCNT_F, 0x92);
+ case 16:
+ SETREG8(HW_REG_VRAMCNT_E, 0x82);
+ break;
+ case 80:
+ SETREG8(HW_REG_VRAMCNT_G, 0x92);
+ SETREG8(HW_REG_VRAMCNT_E, 0x82);
+ break;
+ case 96:
+ SETREG8(HW_REG_VRAMCNT_G, 0x8A);
+ case 32:
+ SETREG8(HW_REG_VRAMCNT_F, 0x82);
+ break;
+ case 64:
+ SETREG8(HW_REG_VRAMCNT_G, 0x82);
+ break;
+ default:
+ break;
+ }
+ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00);
+}
+
+ARM_FUNC void GX_SetBankForBGExtPltt(s32 bgextpltt){
+ gUnk021D33C4.var00 = (u16)(~bgextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var0E));
+ gUnk021D33C4.var0E = bgextpltt;
+ switch (bgextpltt)
+ {
+ case 0x10:
+ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x40000000);
+ SETREG8(HW_REG_VRAMCNT_E, 0x84);
+ break;
+ case 0x40:
+ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x40000000);
+ SETREG8(HW_REG_VRAMCNT_G, 0x8C);
+ break;
+ case 0x60:
+ SETREG8(HW_REG_VRAMCNT_G, 0x8C);
+ case 0x20:
+ SETREG8(HW_REG_VRAMCNT_F, 0x84);
+ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x40000000);
+ break;
+ case 0:
+ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000);
+ break;
+ }
+ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00);
+}
+
+ARM_FUNC void GX_SetBankForOBJExtPltt(s32 objextpltt){
+ gUnk021D33C4.var00 = (u16)(~objextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var10));
+ gUnk021D33C4.var10 = objextpltt;
+ switch (objextpltt)
+ {
+ case 32:
+ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x80000000);
+ SETREG8(HW_REG_VRAMCNT_F, 0x85);
+ break;
+ case 64:
+ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) | 0x80000000);
+ SETREG8(HW_REG_VRAMCNT_G, 0x85);
+ break;
+ case 0:
+ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000);
+ break;
+ }
+ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00);
+}
+
+ARM_FUNC void GX_SetBankForTex(s32 tex){
+ gUnk021D33C4.var00 = (u16)(~tex & (gUnk021D33C4.var00 | gUnk021D33C4.var08));
+ gUnk021D33C4.var08 = tex;
+ if (tex == 0)
+ {
+ SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & 0x0000CFFE);
+ }
+ else
+ {
+ SETREG16(HW_REG_DISP3DCNT, (READREG16(HW_REG_DISP3DCNT) & ~0x3000) | 0x1);
+ switch (tex)
+ {
+ case 5:
+ SETREG8(HW_REG_VRAMCNT_A, 0x83);
+ SETREG8(HW_REG_VRAMCNT_C, 0x8B);
+ break;
+ case 9:
+ SETREG8(HW_REG_VRAMCNT_A, 0x83);
+ SETREG8(HW_REG_VRAMCNT_D, 0x8B);
+ break;
+ case 10:
+ SETREG8(HW_REG_VRAMCNT_B, 0x83);
+ SETREG8(HW_REG_VRAMCNT_D, 0x8B);
+ break;
+ case 11:
+ SETREG8(HW_REG_VRAMCNT_A, 0x83);
+ SETREG8(HW_REG_VRAMCNT_B, 0x8B);
+ SETREG8(HW_REG_VRAMCNT_D, 0x93);
+ break;
+ case 13:
+ SETREG8(HW_REG_VRAMCNT_A, 0x83);
+ SETREG8(HW_REG_VRAMCNT_C, 0x8B);
+ SETREG8(HW_REG_VRAMCNT_D, 0x93);
+ break;
+ case 8:
+ SETREG8(HW_REG_VRAMCNT_D, 0x83);
+ break;
+ case 12:
+ SETREG8(HW_REG_VRAMCNT_D, 0x8B);
+ case 4:
+ SETREG8(HW_REG_VRAMCNT_C, 0x83);
+ break;
+ case 14:
+ SETREG8(HW_REG_VRAMCNT_D, 0x93);
+ case 6:
+ SETREG8(HW_REG_VRAMCNT_C, 0x8B);
+ case 2:
+ SETREG8(HW_REG_VRAMCNT_B, 0x83);
+ break;
+ case 15:
+ SETREG8(HW_REG_VRAMCNT_D, 0x9B);
+ case 7:
+ SETREG8(HW_REG_VRAMCNT_C, 0x93);
+ case 3:
+ SETREG8(HW_REG_VRAMCNT_B, 0x8B);
+ case 1:
+ SETREG8(HW_REG_VRAMCNT_A, 0x83);
+ break;
+ }
+ }
+ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00);
+}
+
+ARM_FUNC void GX_SetBankForTexPltt(s32 texpltt){
+ gUnk021D33C4.var00 = (u16)(~texpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var0A));
+ gUnk021D33C4.var0A = texpltt;
+ switch (texpltt)
+ {
+ case 0: //needed to match
+ break;
+ case 96:
+ SETREG8(HW_REG_VRAMCNT_G, 0x8B);
+ case 32:
+ SETREG8(HW_REG_VRAMCNT_F, 0x83);
+ break;
+ case 112:
+ SETREG8(HW_REG_VRAMCNT_G, 0x9B);
+ case 48:
+ SETREG8(HW_REG_VRAMCNT_F, 0x93);
+ case 16:
+ SETREG8(HW_REG_VRAMCNT_E, 0x83);
+ break;
+ case 64:
+ SETREG8(HW_REG_VRAMCNT_G, 0x83);
+ break;
+ }
+ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00);
+}
+
+ARM_FUNC void GX_SetBankForClearImage(s32 clearimage){
+ gUnk021D33C4.var00 = (u16)(~clearimage & (gUnk021D33C4.var00 | gUnk021D33C4.var0C));
+ gUnk021D33C4.var0C = clearimage;
+ switch (clearimage)
+ {
+ case 3:
+ SETREG8(HW_REG_VRAMCNT_A, 0x93);
+ case 2:
+ SETREG8(HW_REG_VRAMCNT_B, 0x9B);
+ SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x4000);
+ break;
+ case 12:
+ SETREG8(HW_REG_VRAMCNT_C, 0x93);
+ case 8:
+ SETREG8(HW_REG_VRAMCNT_D, 0x9B);
+ SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x4000);
+ break;
+ case 0:
+ SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) & ~0x4000);
+ break;
+ case 1:
+ SETREG8(HW_REG_VRAMCNT_A, 0x9B);
+ SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x4000);
+ break;
+ case 4:
+ SETREG8(HW_REG_VRAMCNT_C, 0x9B);
+ SETREG16(HW_REG_DISP3DCNT, READREG16(HW_REG_DISP3DCNT) | 0x4000);
+ }
+ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00);
+}
+
+ARM_FUNC void GX_SetBankForARM7(s32 arm7){
+ gUnk021D33C4.var00 = (u16)(~arm7 & (gUnk021D33C4.var00 | gUnk021D33C4.var06));
+ gUnk021D33C4.var06 = arm7;
+ switch (arm7)
+ {
+ case 0: //needed to match
+ break;
+ case 12:
+ SETREG8(HW_REG_VRAMCNT_D, 0x8A);
+ SETREG8(HW_REG_VRAMCNT_C, 0x82);
+ break;
+ case 4:
+ SETREG8(HW_REG_VRAMCNT_C, 0x82);
+ break;
+ case 8:
+ SETREG8(HW_REG_VRAMCNT_D, 0x82);
+ }
+ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00);
+}
+
+ARM_FUNC void GX_SetBankForLCDC(s32 lcdc){
+ gUnk021D33C4.var00 |= lcdc;
+ GX_VRAMCNT_SetLCDC_(lcdc);
+}
+
+ARM_FUNC void GX_SetBankForSubBG(s32 subbg){
+ gUnk021D33C4.var00 = (u16)(~subbg & (gUnk021D33C4.var00 | gUnk021D33C4.var12));
+ gUnk021D33C4.var12 = subbg;
+ switch (subbg)
+ {
+ case 0: //needed to match
+ break;
+ case 4:
+ SETREG8(HW_REG_VRAMCNT_C, 0x84);
+ break;
+ case 384:
+ SETREG8(HW_REG_VRAMCNT_I, 0x81);
+ case 128:
+ SETREG8(HW_REG_VRAMCNT_H, 0x81);
+ }
+ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00);
+}
+
+
+ARM_FUNC void GX_SetBankForSubOBJ(s32 subobj){
+ gUnk021D33C4.var00 = (u16)(~subobj & (gUnk021D33C4.var00 | gUnk021D33C4.var14));
+ gUnk021D33C4.var14 = subobj;
+ switch (subobj)
+ {
+ case 8:
+ SETREG8(HW_REG_VRAMCNT_D, 0x84);
+ break;
+ case 256:
+ SETREG8(HW_REG_VRAMCNT_I, 0x82);
+ break;
+ case 0: //needed to match
+ break;
+ }
+ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00);
+}
+
+ARM_FUNC void GX_SetBankForSubBGExtPltt(s32 subbgextpltt){
+ gUnk021D33C4.var00 = (u16)(~subbgextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var16));
+ gUnk021D33C4.var16 = subbgextpltt;
+ switch (subbgextpltt)
+ {
+ case 128:
+ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) | 0x40000000);
+ SETREG8(HW_REG_VRAMCNT_H, 0x82);
+ break;
+ case 0:
+ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000);
+ break;
+ }
+ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00);
+}
+
+ARM_FUNC void GX_SetBankForSubOBJExtPltt(s32 subobjextpltt){
+ gUnk021D33C4.var00 = (u16)(~subobjextpltt & (gUnk021D33C4.var00 | gUnk021D33C4.var18));
+ gUnk021D33C4.var18 = subobjextpltt;
+ switch (subobjextpltt)
+ {
+ case 256:
+ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) | 0x80000000);
+ SETREG8(HW_REG_VRAMCNT_I, 0x83);
+ break;
+ case 0:
+ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000);
+ break;
+ }
+ GX_VRAMCNT_SetLCDC_(gUnk021D33C4.var00);
+}
+
+ARM_FUNC u32 FUN_020C6130(u16 *ptr){
+ u16 temp = *ptr;
+ *ptr = 0;
+ gUnk021D33C4.var00 |= temp;
+ GX_VRAMCNT_SetLCDC_(temp);
+ return temp;
+}
+
+ARM_FUNC u32 GX_ResetBankForBG(){
+ return FUN_020C6130(&gUnk021D33C4.var02);
+}
+
+ARM_FUNC u32 GX_ResetBankForOBJ(){
+ return FUN_020C6130(&gUnk021D33C4.var04);
+}
+
+ARM_FUNC u32 GX_ResetBankForBGExtPltt(){
+ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000);
+ return FUN_020C6130(&gUnk021D33C4.var0E);
+}
+
+ARM_FUNC u32 GX_ResetBankForOBJExtPltt(){
+ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000);
+ return FUN_020C6130(&gUnk021D33C4.var10);
+}
+
+ARM_FUNC u32 GX_ResetBankForTex(){
+ return FUN_020C6130(&gUnk021D33C4.var08);
+}
+
+ARM_FUNC u32 GX_ResetBankForTexPltt(){
+ return FUN_020C6130(&gUnk021D33C4.var0A);
+}
+
+ARM_FUNC u32 GX_ResetBankForClearImage(){
+ return FUN_020C6130(&gUnk021D33C4.var0C);
+}
+
+ARM_FUNC u32 GX_ResetBankForSubBG(){
+ return FUN_020C6130(&gUnk021D33C4.var12);
+}
+
+ARM_FUNC u32 FUN_020C605C(){
+ return FUN_020C6130(&gUnk021D33C4.var14);
+}
+
+ARM_FUNC u32 FUN_020C6034(){
+ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000);
+ return FUN_020C6130(&gUnk021D33C4.var16);
+}
+
+ARM_FUNC u32 GX_ResetBankForSubOBJ(){
+ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000);
+ return FUN_020C6130(&gUnk021D33C4.var18);
+}
+
+ARM_FUNC u32 FUN_020C5F28(u16 *ptr){
+ u32 temp = *ptr;
+ *ptr = 0;
+ if (temp & (0x1 << 0))
+ SETREG8(HW_REG_VRAMCNT_A, 0x0);
+ if (temp & (0x1 << 1))
+ SETREG8(HW_REG_VRAMCNT_B, 0x0);
+ if (temp & (0x1 << 2))
+ SETREG8(HW_REG_VRAMCNT_C, 0x0);
+ if (temp & (0x1 << 3))
+ SETREG8(HW_REG_VRAMCNT_D, 0x0);
+ if (temp & (0x1 << 4))
+ SETREG8(HW_REG_VRAMCNT_E, 0x0);
+ if (temp & (0x1 << 5))
+ SETREG8(HW_REG_VRAMCNT_F, 0x0);
+ if (temp & (0x1 << 6))
+ SETREG8(HW_REG_VRAMCNT_G, 0x0);
+ if (temp & (0x1 << 7))
+ SETREG8(HW_REG_VRAMCNT_H, 0x0);
+ if (temp & (0x1 << 8))
+ SETREG8(HW_REG_VRAMCNT_I, 0x0);
+ OSi_UnlockVram((u16)temp, gUnk021D33BC);
+ return temp;
+}
+
+ARM_FUNC u32 disableBankForX_(){
+ return FUN_020C5F28(&gUnk021D33C4.var02);
+}
+
+ARM_FUNC u32 GX_DisableBankForOBJExtPltt_2(){
+ return FUN_020C5F28(&gUnk021D33C4.var04);
+}
+
+ARM_FUNC u32 GX_DisableBankForBGExtPltt(){
+ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x40000000);
+ return FUN_020C5F28(&gUnk021D33C4.var0E);
+}
+
+ARM_FUNC u32 GX_DisableBankForOBJExtPltt(){
+ SETREG32(HW_REG_DISPCNT, READREG32(HW_REG_DISPCNT) & ~0x80000000);
+ return FUN_020C5F28(&gUnk021D33C4.var10);
+}
+
+ARM_FUNC u32 GX_DisableBankForTexPltt_2(){
+ return FUN_020C5F28(&gUnk021D33C4.var08);
+}
+
+ARM_FUNC u32 GX_DisableBankForTexPltt(){
+ return FUN_020C5F28(&gUnk021D33C4.var0A);
+}
+
+ARM_FUNC u32 GX_DisableBankForClearImage(){
+ return FUN_020C5F28(&gUnk021D33C4.var0C);
+}
+
+ARM_FUNC u32 GX_DisableBankForARM7(){
+ return FUN_020C5F28(&gUnk021D33C4.var06);
+}
+
+ARM_FUNC u32 GX_DisableBankForLCDC(){
+ return FUN_020C5F28(&gUnk021D33C4.var00);
+}
+
+ARM_FUNC u32 GX_DisableBankForSubBGExtPltt(){
+ return FUN_020C5F28(&gUnk021D33C4.var12);
+}
+
+ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt_2(){
+ return FUN_020C5F28(&gUnk021D33C4.var14);
+}
+
+ARM_FUNC u32 FUN_020C5E04(){
+ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x40000000);
+ return FUN_020C5F28(&gUnk021D33C4.var16);
+}
+
+ARM_FUNC u32 GX_DisableBankForSubOBJExtPltt(){
+ SETREG32(HW_REG_DISPCNT_2D, READREG32(HW_REG_DISPCNT_2D) & ~0x80000000);
+ return FUN_020C5F28(&gUnk021D33C4.var18);
+}
+
+ARM_FUNC u32 GX_GetBankForBGExtPltt_2(){
+ return gUnk021D33C4.var02;
+}
+
+ARM_FUNC u32 GX_GetBankForOBJ(){
+ return gUnk021D33C4.var04;
+}
+
+ARM_FUNC u32 GX_GetBankForBGExtPltt(){
+ return gUnk021D33C4.var0E;
+}
+
+ARM_FUNC u32 GX_GetBankForOBJExtPltt(){
+ return gUnk021D33C4.var10;
+}
+
+ARM_FUNC u32 FUN_020C5D8C(){
+ return gUnk021D33C4.var08;
+}
+
+ARM_FUNC u32 GX_GetBankForTexPltt(){
+ return gUnk021D33C4.var0A;
+}
+
+ARM_FUNC u32 GX_GetBankForLCDC(){
+ return gUnk021D33C4.var00;
+}
+
+ARM_FUNC u32 GX_GetBankForSubBGExtPltt_2(){
+ return gUnk021D33C4.var12;
+}
+
+ARM_FUNC u32 GX_GetBankForSubOBJ(){
+ return gUnk021D33C4.var14;
+}
+
+ARM_FUNC u32 GX_GetBankForSubBGExtPltt(){
+ return gUnk021D33C4.var16;
+}
+
+ARM_FUNC u32 GX_GetBankForSubOBJExtPltt(){
+ return gUnk021D33C4.var18;
+}
diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt
new file mode 100644
index 00000000..6735579a
--- /dev/null
+++ b/arm9/undefined_syms.txt
@@ -0,0 +1,1229 @@
+SDK_SYS_STACKSIZE = 0x00000000;
+CONST_34 = 0x00000034;
+CONST_3F = 0x0000003F;
+SDK_IRQ_STACKSIZE = 0x00000400;
+
+// .data
+// FX
+FX_AtanTable_ = 0x02103A38;
+// OS
+gUnk02106810 = 0x02106810;
+gUnk02106814 = 0x02106814;
+OSi_IrqCallbackInfoIndex = 0x02106818;
+OSi_ConsoleTypeCache = 0x02106828;
+// DGT
+Unk_0210683C = 0x0210683C;
+Unk_02106840 = 0x02106840;
+Unk_02106900 = 0x02106900;
+Unk_02106A00 = 0x02106A00;
+Unk_02106A04 = 0x02106A04;
+// FS
+SDK_OVERLAY_DIGEST = 0x02106F84;
+SDK_OVERLAY_DIGEST_END = 0x02106F84;
+//GX
+gUnk021D33BC = 0x021D33BC;
+gUnk021D33C0 = 0x021D33C0;
+gUnk021D33C4 = 0x021D33C4;
+
+gUnk021D33E0 = 0x021D33E0;
+gUnk021D33E4 = 0x021D33E4;
+gUnk021D33E8 = 0x021D33E8;
+gUnk021D33EC = 0x021D33EC;
+gUnk021D33F0 = 0x021D33F0;
+gUnk021D33F4 = 0x021D33F4;
+gUnk021D33F8 = 0x021D33F8;
+gUnk021D33FC = 0x021D33FC;
+gUnk021D3400 = 0x021D3400;
+gUnk021D3404 = 0x021D3404;
+gUnk021D3408 = 0x021D3408;
+gUnk021D340C = 0x021D340C;
+gUnk021D3410 = 0x021D3410;
+gUnk021D3414 = 0x021D3414;
+gUnk021D3418 = 0x021D3418;
+
+gUnk02103B3C = 0x02103B3C;
+
+gUnk02103B4C = 0x02103B4C;
+gUnk02103B4E = 0x02103B4E;
+gUnk02103B50 = 0x02103B50;
+
+// Overlay
+FUN_021D76AC = 0x021D76AC;
+gUnk021D76C8 = 0x021D76C8;
+FUN_021D77C4 = 0x021D77C4;
+FUN_021D7800 = 0x021D7800;
+FUN_021D78FC = 0x021D78FC;
+FUN_021D79B4 = 0x021D79B4;
+FUN_021D7CA4 = 0x021D7CA4;
+FUN_021D7F8C = 0x021D7F8C;
+FUN_021D8018 = 0x021D8018;
+FUN_021D8164 = 0x021D8164;
+FUN_021D82BC = 0x021D82BC;
+FUN_021D8320 = 0x021D8320;
+FUN_021D836C = 0x021D836C;
+FUN_021D83A8 = 0x021D83A8;
+FUN_021D83C0 = 0x021D83C0;
+FUN_021D844C = 0x021D844C;
+FUN_021D8494 = 0x021D8494;
+FUN_021D85FC = 0x021D85FC;
+FUN_021D8624 = 0x021D8624;
+FUN_021D865C = 0x021D865C;
+FUN_021D8758 = 0x021D8758;
+FUN_021D8820 = 0x021D8820;
+FUN_021D88E4 = 0x021D88E4;
+FUN_021D89CC = 0x021D89CC;
+FUN_021D8B64 = 0x021D8B64;
+FUN_021D8C24 = 0x021D8C24;
+FUN_021D917C = 0x021D917C;
+FUN_021D959C = 0x021D959C;
+FUN_021D967C = 0x021D967C;
+FUN_021D96F4 = 0x021D96F4;
+FUN_021D9708 = 0x021D9708;
+FUN_021D971C = 0x021D971C;
+FUN_021D9820 = 0x021D9820;
+FUN_021D99F8 = 0x021D99F8;
+FUN_021DA464 = 0x021DA464;
+FUN_021DA4EC = 0x021DA4EC;
+FUN_021DA54C = 0x021DA54C;
+FUN_021DA58C = 0x021DA58C;
+FUN_021DA5B8 = 0x021DA5B8;
+FUN_021DA5C8 = 0x021DA5C8;
+FUN_021DA5D0 = 0x021DA5D0;
+FUN_021DA5D8 = 0x021DA5D8;
+FUN_021DA7B4 = 0x021DA7B4;
+FUN_021DAAA4 = 0x021DAAA4;
+FUN_021DAC70 = 0x021DAC70;
+FUN_021DAE40 = 0x021DAE40;
+FUN_021DAED4 = 0x021DAED4;
+FUN_021DAF28 = 0x021DAF28;
+FUN_021DAF78 = 0x021DAF78;
+FUN_021DAF98 = 0x021DAF98;
+FUN_021DB030 = 0x021DB030;
+FUN_021DB7E8 = 0x021DB7E8;
+FUN_021DB858 = 0x021DB858;
+gUnk021DBE18 = 0x021DBE18;
+FUN_021DC174 = 0x021DC174;
+FUN_021DD6F0 = 0x021DD6F0;
+FUN_021DD718 = 0x021DD718;
+FUN_021DDB08 = 0x021DDB08;
+FUN_021E1374 = 0x021E1374;
+FUN_021E1858 = 0x021E1858;
+FUN_021E1994 = 0x021E1994;
+FUN_021E1BF8 = 0x021E1BF8;
+FUN_021E1C4C = 0x021E1C4C;
+FUN_021E1C54 = 0x021E1C54;
+FUN_021E1ECC = 0x021E1ECC;
+FUN_021E1F34 = 0x021E1F34;
+FUN_021E1F58 = 0x021E1F58;
+FUN_021E1F60 = 0x021E1F60;
+FUN_021E2464 = 0x021E2464;
+FUN_021E2608 = 0x021E2608;
+FUN_021E26CC = 0x021E26CC;
+FUN_021E27E8 = 0x021E27E8;
+FUN_021E288C = 0x021E288C;
+FUN_021E28A0 = 0x021E28A0;
+FUN_021E2950 = 0x021E2950;
+FUN_021E29B4 = 0x021E29B4;
+FUN_021E29C8 = 0x021E29C8;
+FUN_021E2A70 = 0x021E2A70;
+FUN_021E2AD4 = 0x021E2AD4;
+FUN_021E2B80 = 0x021E2B80;
+FUN_021E2B9C = 0x021E2B9C;
+FUN_021E2BB8 = 0x021E2BB8;
+FUN_021E2BD0 = 0x021E2BD0;
+FUN_021E2C24 = 0x021E2C24;
+FUN_021E2C58 = 0x021E2C58;
+FUN_021E2CBC = 0x021E2CBC;
+FUN_021E32F0 = 0x021E32F0;
+FUN_021E331C = 0x021E331C;
+FUN_021E3424 = 0x021E3424;
+FUN_021E3444 = 0x021E3444;
+FUN_021E495C = 0x021E495C;
+FUN_021E4C54 = 0x021E4C54;
+FUN_021E4C60 = 0x021E4C60;
+FUN_021E4DE4 = 0x021E4DE4;
+FUN_021E5614 = 0x021E5614;
+FUN_021E57D4 = 0x021E57D4;
+FUN_021E5970 = 0x021E5970;
+FUN_021E5B30 = 0x021E5B30;
+FUN_021E5FD8 = 0x021E5FD8;
+FUN_021E5FE0 = 0x021E5FE0;
+FUN_021E6410 = 0x021E6410;
+FUN_021E643C = 0x021E643C;
+FUN_021E6990 = 0x021E6990;
+FUN_021E69BC = 0x021E69BC;
+FUN_021E6BF4 = 0x021E6BF4;
+FUN_021E7030 = 0x021E7030;
+FUN_021E70F0 = 0x021E70F0;
+FUN_021E7138 = 0x021E7138;
+FUN_021E7184 = 0x021E7184;
+FUN_021E71E8 = 0x021E71E8;
+FUN_021E7750 = 0x021E7750;
+FUN_021E799C = 0x021E799C;
+FUN_021E7AC0 = 0x021E7AC0;
+FUN_021E7EA0 = 0x021E7EA0;
+FUN_021E7EB0 = 0x021E7EB0;
+FUN_021E7EC4 = 0x021E7EC4;
+FUN_021E7EC8 = 0x021E7EC8;
+FUN_021E7ED0 = 0x021E7ED0;
+FUN_021E7ED8 = 0x021E7ED8;
+FUN_021E7FBC = 0x021E7FBC;
+FUN_021E8128 = 0x021E8128;
+FUN_021E8130 = 0x021E8130;
+FUN_021E8140 = 0x021E8140;
+FUN_021E8144 = 0x021E8144;
+FUN_021E8148 = 0x021E8148;
+FUN_021E8158 = 0x021E8158;
+FUN_021E81BC = 0x021E81BC;
+FUN_021E84F4 = 0x021E84F4;
+FUN_021E856C = 0x021E856C;
+FUN_021E8588 = 0x021E8588;
+FUN_021E85E4 = 0x021E85E4;
+FUN_021E85FC = 0x021E85FC;
+FUN_021EAE90 = 0x021EAE90;
+FUN_021EB044 = 0x021EB044;
+FUN_021EC57C = 0x021EC57C;
+FUN_021EC71C = 0x021EC71C;
+FUN_021EC854 = 0x021EC854;
+FUN_021EC864 = 0x021EC864;
+FUN_021ECD64 = 0x021ECD64;
+FUN_021ECF14 = 0x021ECF14;
+FUN_021ED0CC = 0x021ED0CC;
+FUN_021ED49C = 0x021ED49C;
+FUN_021ED4E0 = 0x021ED4E0;
+FUN_021ED52C = 0x021ED52C;
+FUN_021ED5C4 = 0x021ED5C4;
+FUN_021ED5EC = 0x021ED5EC;
+FUN_021ED644 = 0x021ED644;
+FUN_021ED940 = 0x021ED940;
+FUN_021EDA48 = 0x021EDA48;
+FUN_021EDBC8 = 0x021EDBC8;
+FUN_021EF5E0 = 0x021EF5E0;
+FUN_021EF604 = 0x021EF604;
+FUN_021EF620 = 0x021EF620;
+FUN_021EF654 = 0x021EF654;
+FUN_021EF824 = 0x021EF824;
+FUN_021EF844 = 0x021EF844;
+FUN_021EF8C8 = 0x021EF8C8;
+FUN_021EF8DC = 0x021EF8DC;
+FUN_021EFA9C = 0x021EFA9C;
+FUN_021D80E4 = 0x021D80E4;
+FUN_021D9320 = 0x021D9320;
+FUN_021D94B4 = 0x021D94B4;
+FUN_021D9510 = 0x021D9510;
+FUN_021DA03C = 0x021DA03C;
+FUN_021DA080 = 0x021DA080;
+FUN_021DA0DC = 0x021DA0DC;
+FUN_021DA0E0 = 0x021DA0E0;
+FUN_021DA0E8 = 0x021DA0E8;
+FUN_021DA118 = 0x021DA118;
+FUN_021DA138 = 0x021DA138;
+FUN_021DA1A0 = 0x021DA1A0;
+FUN_021DA1A4 = 0x021DA1A4;
+FUN_021DA1A8 = 0x021DA1A8;
+FUN_021DA20C = 0x021DA20C;
+FUN_021DA4BC = 0x021DA4BC;
+FUN_021DB44C = 0x021DB44C;
+FUN_021DB4B0 = 0x021DB4B0;
+FUN_021DB52C = 0x021DB52C;
+FUN_021DB53C = 0x021DB53C;
+FUN_021DBA40 = 0x021DBA40;
+FUN_021DBA78 = 0x021DBA78;
+FUN_021DBAA0 = 0x021DBAA0;
+FUN_021E4BE8 = 0x021E4BE8;
+FUN_021E4C00 = 0x021E4C00;
+FUN_021E4C08 = 0x021E4C08;
+FUN_021E4C20 = 0x021E4C20;
+FUN_021E4C24 = 0x021E4C24;
+FUN_021E4C6C = 0x021E4C6C;
+FUN_021E4DC4 = 0x021E4DC4;
+FUN_021E4E90 = 0x021E4E90;
+FUN_021E4EE4 = 0x021E4EE4;
+FUN_021E4EFC = 0x021E4EFC;
+FUN_021E506C = 0x021E506C;
+FUN_021E5078 = 0x021E5078;
+FUN_021E5094 = 0x021E5094;
+FUN_021E50A0 = 0x021E50A0;
+FUN_021E50AC = 0x021E50AC;
+FUN_021E50C8 = 0x021E50C8;
+FUN_021E50D4 = 0x021E50D4;
+FUN_021E5114 = 0x021E5114;
+FUN_021E5198 = 0x021E5198;
+FUN_021E51EC = 0x021E51EC;
+FUN_021E5224 = 0x021E5224;
+FUN_021E5260 = 0x021E5260;
+FUN_021E5294 = 0x021E5294;
+FUN_021E7C80 = 0x021E7C80;
+FUN_021E7E9C = 0x021E7E9C;
+FUN_021E7EC0 = 0x021E7EC0;
+FUN_021E7ECC = 0x021E7ECC;
+FUN_021E7EEC = 0x021E7EEC;
+FUN_021E8698 = 0x021E8698;
+FUN_021F0514 = 0x021F0514;
+FUN_021F1C1C = 0x021F1C1C;
+FUN_021F1C30 = 0x021F1C30;
+FUN_021F1E64 = 0x021F1E64;
+FUN_021F220C = 0x021F220C;
+FUN_021F51D0 = 0x021F51D0;
+FUN_021F522C = 0x021F522C;
+FUN_021F5268 = 0x021F5268;
+FUN_021F52C8 = 0x021F52C8;
+FUN_021F531C = 0x021F531C;
+FUN_021F5348 = 0x021F5348;
+FUN_021F5358 = 0x021F5358;
+FUN_021F5384 = 0x021F5384;
+FUN_021F53BC = 0x021F53BC;
+FUN_021F53F8 = 0x021F53F8;
+FUN_021F5400 = 0x021F5400;
+FUN_021F5424 = 0x021F5424;
+FUN_021F5430 = 0x021F5430;
+FUN_021F54CC = 0x021F54CC;
+FUN_021F54D0 = 0x021F54D0;
+FUN_021F54D8 = 0x021F54D8;
+FUN_021F61F4 = 0x021F61F4;
+FUN_021F6234 = 0x021F6234;
+FUN_021F6240 = 0x021F6240;
+FUN_021F6254 = 0x021F6254;
+FUN_021F02C4 = 0x021F02C4;
+FUN_021F1D8C = 0x021F1D8C;
+FUN_021F1DC8 = 0x021F1DC8;
+FUN_021F1DFC = 0x021F1DFC;
+FUN_021F1EC0 = 0x021F1EC0;
+FUN_021F1F78 = 0x021F1F78;
+FUN_021F2094 = 0x021F2094;
+FUN_021F20D8 = 0x021F20D8;
+FUN_021F20F8 = 0x021F20F8;
+FUN_021F2AF4 = 0x021F2AF4;
+FUN_021F2E0C = 0x021F2E0C;
+FUN_021F2E28 = 0x021F2E28;
+FUN_021F2F48 = 0x021F2F48;
+FUN_021F2F6C = 0x021F2F6C;
+FUN_021F3A18 = 0x021F3A18;
+FUN_021F3AB4 = 0x021F3AB4;
+FUN_021F3B4C = 0x021F3B4C;
+FUN_021F3B7C = 0x021F3B7C;
+FUN_021F3DA4 = 0x021F3DA4;
+FUN_021F44D8 = 0x021F44D8;
+FUN_021F4520 = 0x021F4520;
+FUN_021F4568 = 0x021F4568;
+FUN_021F4594 = 0x021F4594;
+FUN_021F45E8 = 0x021F45E8;
+FUN_021F4608 = 0x021F4608;
+FUN_021F4BD0 = 0x021F4BD0;
+FUN_021F4C88 = 0x021F4C88;
+FUN_021F4D80 = 0x021F4D80;
+FUN_021F4DC8 = 0x021F4DC8;
+FUN_021F4E7C = 0x021F4E7C;
+FUN_021F57EC = 0x021F57EC;
+FUN_021F5C44 = 0x021F5C44;
+FUN_021F61DC = 0x021F61DC;
+FUN_021F61E8 = 0x021F61E8;
+FUN_02211E60 = 0x02211E60;
+FUN_0222D5C0 = 0x0222D5C0;
+FUN_0222DAEC = 0x0222DAEC;
+FUN_0222DD1C = 0x0222DD1C;
+FUN_0222DD38 = 0x0222DD38;
+FUN_0222E2BC = 0x0222E2BC;
+FUN_0222E360 = 0x0222E360;
+FUN_0222E3A0 = 0x0222E3A0;
+FUN_0222E7E8 = 0x0222E7E8;
+FUN_0222E874 = 0x0222E874;
+FUN_0222ED34 = 0x0222ED34;
+FUN_0222EDBC = 0x0222EDBC;
+FUN_0222F440 = 0x0222F440;
+FUN_0222F480 = 0x0222F480;
+FUN_0222F7E0 = 0x0222F7E0;
+FUN_0222F990 = 0x0222F990;
+FUN_02230078 = 0x02230078;
+FUN_02230080 = 0x02230080;
+FUN_022300CC = 0x022300CC;
+FUN_022312D0 = 0x022312D0;
+FUN_02231504 = 0x02231504;
+FUN_02231534 = 0x02231534;
+FUN_02231678 = 0x02231678;
+FUN_02233560 = 0x02233560;
+FUN_022300D4 = 0x022300D4;
+FUN_022300DC = 0x022300DC;
+FUN_022300E4 = 0x022300E4;
+FUN_022300E8 = 0x022300E8;
+FUN_022300F4 = 0x022300F4;
+FUN_02230100 = 0x02230100;
+FUN_0223010C = 0x0223010C;
+FUN_02230118 = 0x02230118;
+FUN_02230124 = 0x02230124;
+FUN_02230F3C = 0x02230F3C;
+FUN_02230F70 = 0x02230F70;
+FUN_02230F80 = 0x02230F80;
+FUN_02231344 = 0x02231344;
+FUN_02231350 = 0x02231350;
+FUN_0223135C = 0x0223135C;
+FUN_02231368 = 0x02231368;
+FUN_02231374 = 0x02231374;
+FUN_02239944 = 0x02239944;
+FUN_02239AAC = 0x02239AAC;
+FUN_0223CACC = 0x0223CACC;
+FUN_0223CB08 = 0x0223CB08;
+FUN_0223CCDC = 0x0223CCDC;
+FUN_0223CD7C = 0x0223CD7C;
+FUN_0223D3D0 = 0x0223D3D0;
+FUN_0223D638 = 0x0223D638;
+FUN_0223D648 = 0x0223D648;
+FUN_0223DFB4 = 0x0223DFB4;
+FUN_0223E060 = 0x0223E060;
+FUN_0223E118 = 0x0223E118;
+FUN_0223E154 = 0x0223E154;
+FUN_0223E1A4 = 0x0223E1A4;
+FUN_0223E1E0 = 0x0223E1E0;
+FUN_0223E2AC = 0x0223E2AC;
+FUN_0223E4A8 = 0x0223E4A8;
+FUN_0223E4D4 = 0x0223E4D4;
+FUN_0223E554 = 0x0223E554;
+FUN_0223E6B8 = 0x0223E6B8;
+FUN_0223E734 = 0x0223E734;
+FUN_0223E7FC = 0x0223E7FC;
+FUN_0223EB8C = 0x0223EB8C;
+FUN_0223EF7C = 0x0223EF7C;
+FUN_0223F4D8 = 0x0223F4D8;
+FUN_0223F4F4 = 0x0223F4F4;
+FUN_0223F8D8 = 0x0223F8D8;
+FUN_0223FCE8 = 0x0223FCE8;
+FUN_02240790 = 0x02240790;
+FUN_022407CC = 0x022407CC;
+FUN_022407DC = 0x022407DC;
+FUN_022407F8 = 0x022407F8;
+FUN_02240834 = 0x02240834;
+FUN_02240844 = 0x02240844;
+FUN_0224089C = 0x0224089C;
+FUN_022408FC = 0x022408FC;
+FUN_022411F4 = 0x022411F4;
+FUN_02241230 = 0x02241230;
+FUN_02241914 = 0x02241914;
+FUN_02242A38 = 0x02242A38;
+FUN_02242BE0 = 0x02242BE0;
+FUN_0224312C = 0x0224312C;
+FUN_022432E4 = 0x022432E4;
+FUN_0224339C = 0x0224339C;
+FUN_022433A8 = 0x022433A8;
+FUN_022433B0 = 0x022433B0;
+FUN_022433B8 = 0x022433B8;
+FUN_022433F8 = 0x022433F8;
+FUN_02243408 = 0x02243408;
+FUN_02243428 = 0x02243428;
+FUN_02243448 = 0x02243448;
+FUN_0224345C = 0x0224345C;
+FUN_022434AC = 0x022434AC;
+FUN_022434BC = 0x022434BC;
+FUN_022434D0 = 0x022434D0;
+FUN_02243694 = 0x02243694;
+FUN_022436C8 = 0x022436C8;
+FUN_022436E8 = 0x022436E8;
+FUN_02243780 = 0x02243780;
+FUN_02243838 = 0x02243838;
+FUN_022438DC = 0x022438DC;
+FUN_022438E0 = 0x022438E0;
+FUN_022438FC = 0x022438FC;
+FUN_02243920 = 0x02243920;
+FUN_022439F8 = 0x022439F8;
+FUN_02243AD8 = 0x02243AD8;
+FUN_02243BA8 = 0x02243BA8;
+FUN_02243C5C = 0x02243C5C;
+FUN_02243D3C = 0x02243D3C;
+FUN_02243DA0 = 0x02243DA0;
+FUN_02243DB8 = 0x02243DB8;
+FUN_02243DC0 = 0x02243DC0;
+FUN_02243DC4 = 0x02243DC4;
+FUN_02243DD8 = 0x02243DD8;
+FUN_02243DE0 = 0x02243DE0;
+FUN_02243E34 = 0x02243E34;
+FUN_02243E74 = 0x02243E74;
+FUN_02243F18 = 0x02243F18;
+FUN_02243F50 = 0x02243F50;
+FUN_02243F9C = 0x02243F9C;
+FUN_02244210 = 0x02244210;
+FUN_02244558 = 0x02244558;
+FUN_02244660 = 0x02244660;
+FUN_022446BC = 0x022446BC;
+FUN_022446E0 = 0x022446E0;
+FUN_022446FC = 0x022446FC;
+FUN_02244758 = 0x02244758;
+FUN_02244770 = 0x02244770;
+FUN_02244824 = 0x02244824;
+FUN_0224484C = 0x0224484C;
+FUN_02244D1C = 0x02244D1C;
+FUN_02244D20 = 0x02244D20;
+FUN_02244D3C = 0x02244D3C;
+FUN_02244D40 = 0x02244D40;
+FUN_02244D58 = 0x02244D58;
+FUN_02244D98 = 0x02244D98;
+FUN_02244DA0 = 0x02244DA0;
+FUN_02244DB0 = 0x02244DB0;
+FUN_02244DBC = 0x02244DBC;
+FUN_02244DC4 = 0x02244DC4;
+FUN_02244EF8 = 0x02244EF8;
+FUN_02244F18 = 0x02244F18;
+FUN_02244F24 = 0x02244F24;
+FUN_02244F2C = 0x02244F2C;
+FUN_02245088 = 0x02245088;
+FUN_02245114 = 0x02245114;
+FUN_02245190 = 0x02245190;
+FUN_02245198 = 0x02245198;
+FUN_022451F0 = 0x022451F0;
+FUN_0224525C = 0x0224525C;
+FUN_022452A4 = 0x022452A4;
+FUN_02245324 = 0x02245324;
+FUN_02245340 = 0x02245340;
+FUN_02245358 = 0x02245358;
+FUN_0224566C = 0x0224566C;
+FUN_022456E8 = 0x022456E8;
+FUN_02245844 = 0x02245844;
+FUN_02245910 = 0x02245910;
+FUN_02245F1C = 0x02245F1C;
+FUN_02245F4C = 0x02245F4C;
+FUN_02245FA0 = 0x02245FA0;
+FUN_022461A4 = 0x022461A4;
+FUN_022461B8 = 0x022461B8;
+FUN_0224666C = 0x0224666C;
+FUN_022466A0 = 0x022466A0;
+FUN_022466AC = 0x022466AC;
+FUN_02246F1C = 0x02246F1C;
+FUN_02247294 = 0x02247294;
+FUN_022472AC = 0x022472AC;
+FUN_02247544 = 0x02247544;
+FUN_02247614 = 0x02247614;
+FUN_02247728 = 0x02247728;
+FUN_02247808 = 0x02247808;
+FUN_02247970 = 0x02247970;
+FUN_02247A34 = 0x02247A34;
+FUN_022483BC = 0x022483BC;
+FUN_022483E0 = 0x022483E0;
+FUN_022483EC = 0x022483EC;
+FUN_02248724 = 0x02248724;
+FUN_0224884C = 0x0224884C;
+FUN_022488CC = 0x022488CC;
+FUN_022488EC = 0x022488EC;
+FUN_022488F4 = 0x022488F4;
+FUN_022488FC = 0x022488FC;
+FUN_0224891C = 0x0224891C;
+FUN_02248B54 = 0x02248B54;
+FUN_02248B58 = 0x02248B58;
+FUN_02248B5C = 0x02248B5C;
+FUN_02248B60 = 0x02248B60;
+FUN_02248B6C = 0x02248B6C;
+FUN_02248CC0 = 0x02248CC0;
+FUN_02248CD0 = 0x02248CD0;
+FUN_02248DF8 = 0x02248DF8;
+FUN_02248F70 = 0x02248F70;
+FUN_02248FE0 = 0x02248FE0;
+FUN_02249038 = 0x02249038;
+FUN_022490A0 = 0x022490A0;
+FUN_022491FC = 0x022491FC;
+FUN_022494C8 = 0x022494C8;
+FUN_02249508 = 0x02249508;
+FUN_02249668 = 0x02249668;
+FUN_022497E8 = 0x022497E8;
+FUN_02249E6C = 0x02249E6C;
+FUN_02249E78 = 0x02249E78;
+FUN_02249E84 = 0x02249E84;
+FUN_02249E90 = 0x02249E90;
+FUN_0224A310 = 0x0224A310;
+FUN_0224A528 = 0x0224A528;
+FUN_0224A7C8 = 0x0224A7C8;
+FUN_0224ABAC = 0x0224ABAC;
+FUN_0224B124 = 0x0224B124;
+FUN_0224B2C4 = 0x0224B2C4;
+FUN_0224B568 = 0x0224B568;
+FUN_0224B818 = 0x0224B818;
+FUN_0224B86C = 0x0224B86C;
+FUN_0224B9E0 = 0x0224B9E0;
+FUN_0224BBEC = 0x0224BBEC;
+FUN_0224BD90 = 0x0224BD90;
+FUN_0224C038 = 0x0224C038;
+FUN_0224C27C = 0x0224C27C;
+FUN_0224C520 = 0x0224C520;
+FUN_0224C678 = 0x0224C678;
+FUN_0224C6E8 = 0x0224C6E8;
+FUN_0224C6F4 = 0x0224C6F4;
+FUN_0224C700 = 0x0224C700;
+FUN_0224C8C8 = 0x0224C8C8;
+FUN_0224CA2C = 0x0224CA2C;
+FUN_0224CA54 = 0x0224CA54;
+FUN_0224CA58 = 0x0224CA58;
+FUN_0224CA88 = 0x0224CA88;
+FUN_0224CA94 = 0x0224CA94;
+FUN_0224CAA0 = 0x0224CAA0;
+FUN_0224CAB4 = 0x0224CAB4;
+FUN_0224CB30 = 0x0224CB30;
+FUN_0224CBB0 = 0x0224CBB0;
+FUN_0224CC24 = 0x0224CC24;
+FUN_0224CECC = 0x0224CECC;
+FUN_0224D14C = 0x0224D14C;
+FUN_0224D2E0 = 0x0224D2E0;
+FUN_0224D3E8 = 0x0224D3E8;
+FUN_0224D70C = 0x0224D70C;
+FUN_0224D76C = 0x0224D76C;
+FUN_0224D79C = 0x0224D79C;
+FUN_0224DCB8 = 0x0224DCB8;
+FUN_0224DD94 = 0x0224DD94;
+FUN_0224DDB8 = 0x0224DDB8;
+FUN_0224E554 = 0x0224E554;
+FUN_0224E764 = 0x0224E764;
+FUN_0224E7C4 = 0x0224E7C4;
+FUN_0224F12C = 0x0224F12C;
+FUN_02252534 = 0x02252534;
+FUN_02252538 = 0x02252538;
+FUN_022567E0 = 0x022567E0;
+FUN_02213B08 = 0x02213B08;
+FUN_02213D80 = 0x02213D80;
+FUN_02213DBC = 0x02213DBC;
+FUN_02213E24 = 0x02213E24;
+FUN_021D7A20 = 0x021D7A20;
+FUN_021D7A28 = 0x021D7A28;
+FUN_021E8648 = 0x021E8648;
+FUN_0223BA04 = 0x0223BA04;
+FUN_0223BE70 = 0x0223BE70;
+FUN_0223C08C = 0x0223C08C;
+FUN_0223CDB8 = 0x0223CDB8;
+FUN_0223D8F4 = 0x0223D8F4;
+FUN_0223DC98 = 0x0223DC98;
+FUN_0223DCB4 = 0x0223DCB4;
+FUN_0223DCD0 = 0x0223DCD0;
+FUN_0223E2C4 = 0x0223E2C4;
+FUN_0223E2DC = 0x0223E2DC;
+FUN_02242404 = 0x02242404;
+FUN_022426AC = 0x022426AC;
+FUN_02249B7C = 0x02249B7C;
+FUN_0224A130 = 0x0224A130;
+FUN_0224A6B8 = 0x0224A6B8;
+FUN_0224A6FC = 0x0224A6FC;
+FUN_0224A8D4 = 0x0224A8D4;
+FUN_0224AA40 = 0x0224AA40;
+FUN_0224ADF8 = 0x0224ADF8;
+FUN_0224AEE8 = 0x0224AEE8;
+FUN_0224AF68 = 0x0224AF68;
+FUN_0224ED94 = 0x0224ED94;
+FUN_0224EDA8 = 0x0224EDA8;
+FUN_0224F0BC = 0x0224F0BC;
+FUN_0224F0D0 = 0x0224F0D0;
+FUN_02252440 = 0x02252440;
+FUN_02252448 = 0x02252448;
+FUN_022524BC = 0x022524BC;
+FUN_022524D0 = 0x022524D0;
+FUN_022524DC = 0x022524DC;
+FUN_022524F4 = 0x022524F4;
+FUN_02252504 = 0x02252504;
+FUN_02254A68 = 0x02254A68;
+FUN_02254AB8 = 0x02254AB8;
+FUN_0223BD14 = 0x0223BD14;
+FUN_0222FF68 = 0x0222FF68;
+FUN_0222FF74 = 0x0222FF74;
+FUN_0222FF78 = 0x0222FF78;
+FUN_0222FF88 = 0x0222FF88;
+FUN_02230014 = 0x02230014;
+FUN_02230188 = 0x02230188;
+FUN_02230214 = 0x02230214;
+FUN_02230218 = 0x02230218;
+FUN_02230260 = 0x02230260;
+FUN_02230290 = 0x02230290;
+FUN_022302BC = 0x022302BC;
+FUN_02230370 = 0x02230370;
+FUN_02230E44 = 0x02230E44;
+FUN_02230E54 = 0x02230E54;
+FUN_02231238 = 0x02231238;
+FUN_0224C474 = 0x0224C474;
+FUN_0225D3EC = 0x0225D3EC;
+FUN_0225D45C = 0x0225D45C;
+FUN_0225D484 = 0x0225D484;
+FUN_0225D508 = 0x0225D508;
+FUN_0225D5DC = 0x0225D5DC;
+FUN_0225D648 = 0x0225D648;
+FUN_0225D6A4 = 0x0225D6A4;
+FUN_0225D714 = 0x0225D714;
+FUN_0225D73C = 0x0225D73C;
+FUN_0225D7B8 = 0x0225D7B8;
+FUN_0225D800 = 0x0225D800;
+FUN_0225D80C = 0x0225D80C;
+FUN_0225D820 = 0x0225D820;
+FUN_0225D824 = 0x0225D824;
+FUN_021EEF0C = 0x021EEF0C;
+FUN_021EEF68 = 0x021EEF68;
+FUN_021EEF84 = 0x021EEF84;
+FUN_021EEF98 = 0x021EEF98;
+FUN_021EEF9C = 0x021EEF9C;
+FUN_021EFBF4 = 0x021EFBF4;
+FUN_021EFD8C = 0x021EFD8C;
+FUN_021F45A4 = 0x021F45A4;
+FUN_021F4698 = 0x021F4698;
+FUN_021F4A30 = 0x021F4A30;
+FUN_02211E7C = 0x02211E7C;
+FUN_02211F5C = 0x02211F5C;
+FUN_02212024 = 0x02212024;
+FUN_02212048 = 0x02212048;
+FUN_02212384 = 0x02212384;
+FUN_022123A0 = 0x022123A0;
+FUN_022123B0 = 0x022123B0;
+FUN_022156C0 = 0x022156C0;
+FUN_0221590C = 0x0221590C;
+FUN_02215918 = 0x02215918;
+FUN_0221594C = 0x0221594C;
+FUN_02215988 = 0x02215988;
+FUN_02215A44 = 0x02215A44;
+FUN_022186F0 = 0x022186F0;
+FUN_021DD4F4 = 0x021DD4F4;
+FUN_021DD518 = 0x021DD518;
+FUN_021DD540 = 0x021DD540;
+FUN_021DD58C = 0x021DD58C;
+FUN_021DD594 = 0x021DD594;
+FUN_021DD59C = 0x021DD59C;
+FUN_021DD604 = 0x021DD604;
+FUN_021DD60C = 0x021DD60C;
+FUN_021DD620 = 0x021DD620;
+FUN_021DD678 = 0x021DD678;
+FUN_021DD6B8 = 0x021DD6B8;
+FUN_021DD6CC = 0x021DD6CC;
+FUN_02211FF0 = 0x02211FF0;
+
+// ???
+SDK_MAIN_ARENA_LO = 0x0225FFA0;
+
+// EWRAM
+SDK_SECTION_ARENA_EX_START = 0x023E0000;
+
+// DTCM
+gUnk027FFC20 = 0x027FFC20;
+
+SDK_AUTOLOAD_LIST = 0x02107700;
+SDK_AUTOLOAD_ITCM_START = 0x01FF8000;
+SDK_AUTOLOAD_ITCM_SIZE = 0x00000700;
+SDK_AUTOLOAD_ITCM_BSS_SIZE = 0x00000000;
+SDK_AUTOLOAD_DTCM_START = 0x027E0000;
+SDK_AUTOLOAD_DTCM_SIZE = 0x00000060;
+SDK_AUTOLOAD_DTCM_BSS_SIZE = 0x00000020;
+SDK_AUTOLOAD_EXT_START = 0x02400000;
+SDK_AUTOLOAD_EXT_SIZE = 0x00000000;
+SDK_AUTOLOAD_EXT_BSS_SIZE = 0x00000000;
+SDK_AUTOLOAD_LIST_END = 0x02107724;
+
+// Overlay
+
+SDK_OVERLAY_MODULE_00_ID = 0;
+SDK_OVERLAY_MODULE_00_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_00_SIZE = 0x00000020;
+SDK_OVERLAY_MODULE_00_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_00_STATIC_INIT_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_00_STATIC_INIT_END = 0x021D74E4;
+SDK_OVERLAY_MODULE_01_ID = 1;
+SDK_OVERLAY_MODULE_01_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_01_SIZE = 0x00000020;
+SDK_OVERLAY_MODULE_01_BSSSIZE = 0x00000020;
+SDK_OVERLAY_MODULE_01_STATIC_INIT_START = 0x021D74F0;
+SDK_OVERLAY_MODULE_01_STATIC_INIT_END = 0x021D74F8;
+SDK_OVERLAY_MODULE_02_ID = 2;
+SDK_OVERLAY_MODULE_02_START = 0x021D7520;
+SDK_OVERLAY_MODULE_02_SIZE = 0x00000020;
+SDK_OVERLAY_MODULE_02_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_02_STATIC_INIT_START = 0x021D7520;
+SDK_OVERLAY_MODULE_02_STATIC_INIT_END = 0x021D7524;
+SDK_OVERLAY_MODULE_03_ID = 3;
+SDK_OVERLAY_MODULE_03_START = 0x01FF8700;
+SDK_OVERLAY_MODULE_03_SIZE = 0x00000020;
+SDK_OVERLAY_MODULE_03_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_03_STATIC_INIT_START = 0x01FF8700;
+SDK_OVERLAY_MODULE_03_STATIC_INIT_END = 0x01FF8704;
+SDK_OVERLAY_MODULE_04_ID = 4;
+SDK_OVERLAY_MODULE_04_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_04_SIZE = 0x000386E0;
+SDK_OVERLAY_MODULE_04_BSSSIZE = 0x000022A0;
+SDK_OVERLAY_MODULE_04_STATIC_INIT_START = 0x0220BE94;
+SDK_OVERLAY_MODULE_04_STATIC_INIT_END = 0x0220BE98;
+SDK_OVERLAY_MODULE_05_ID = 5;
+SDK_OVERLAY_MODULE_05_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_05_SIZE = 0x000261A0;
+SDK_OVERLAY_MODULE_05_BSSSIZE = 0x0003C020;
+SDK_OVERLAY_MODULE_05_STATIC_INIT_START = 0x021FD1C8;
+SDK_OVERLAY_MODULE_05_STATIC_INIT_END = 0x021FD1CC;
+SDK_OVERLAY_MODULE_06_ID = 6;
+SDK_OVERLAY_MODULE_06_START = 0x022396A0;
+SDK_OVERLAY_MODULE_06_SIZE = 0x00018D80;
+SDK_OVERLAY_MODULE_06_BSSSIZE = 0x00000020;
+SDK_OVERLAY_MODULE_06_STATIC_INIT_START = 0x02252228;
+SDK_OVERLAY_MODULE_06_STATIC_INIT_END = 0x0225222C;
+SDK_OVERLAY_MODULE_07_ID = 7;
+SDK_OVERLAY_MODULE_07_START = 0x02211E60;
+SDK_OVERLAY_MODULE_07_SIZE = 0x000032E0;
+SDK_OVERLAY_MODULE_07_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_07_STATIC_INIT_START = 0x02215134;
+SDK_OVERLAY_MODULE_07_STATIC_INIT_END = 0x02215138;
+SDK_OVERLAY_MODULE_08_ID = 8;
+SDK_OVERLAY_MODULE_08_START = 0x02211E60;
+SDK_OVERLAY_MODULE_08_SIZE = 0x0001B760;
+SDK_OVERLAY_MODULE_08_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_08_STATIC_INIT_START = 0x0222D598;
+SDK_OVERLAY_MODULE_08_STATIC_INIT_END = 0x0222D59C;
+SDK_OVERLAY_MODULE_09_ID = 9;
+SDK_OVERLAY_MODULE_09_START = 0x02211E60;
+SDK_OVERLAY_MODULE_09_SIZE = 0x0000A1A0;
+SDK_OVERLAY_MODULE_09_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_09_STATIC_INIT_START = 0x0221BFE8;
+SDK_OVERLAY_MODULE_09_STATIC_INIT_END = 0x0221BFEC;
+SDK_OVERLAY_MODULE_10_ID = 10;
+SDK_OVERLAY_MODULE_10_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_10_SIZE = 0x00000020;
+SDK_OVERLAY_MODULE_10_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_10_STATIC_INIT_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_10_STATIC_INIT_END = 0x021D74E4;
+SDK_OVERLAY_MODULE_11_ID = 11;
+SDK_OVERLAY_MODULE_11_START = 0x0222D5C0;
+SDK_OVERLAY_MODULE_11_SIZE = 0x000329E0;
+SDK_OVERLAY_MODULE_11_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_11_STATIC_INIT_START = 0x0225FF18;
+SDK_OVERLAY_MODULE_11_STATIC_INIT_END = 0x0225FF20;
+SDK_OVERLAY_MODULE_12_ID = 12;
+SDK_OVERLAY_MODULE_12_START = 0x0222D5C0;
+SDK_OVERLAY_MODULE_12_SIZE = 0x00019260;
+SDK_OVERLAY_MODULE_12_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_12_STATIC_INIT_START = 0x02246810;
+SDK_OVERLAY_MODULE_12_STATIC_INIT_END = 0x02246818;
+SDK_OVERLAY_MODULE_13_ID = 13;
+SDK_OVERLAY_MODULE_13_START = 0x02211E60;
+SDK_OVERLAY_MODULE_13_SIZE = 0x0002EBE0;
+SDK_OVERLAY_MODULE_13_BSSSIZE = 0x000027E0;
+SDK_OVERLAY_MODULE_13_STATIC_INIT_START = 0x0223F768;
+SDK_OVERLAY_MODULE_13_STATIC_INIT_END = 0x0223F76C;
+SDK_OVERLAY_MODULE_14_ID = 14;
+SDK_OVERLAY_MODULE_14_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_14_SIZE = 0x0000F520;
+SDK_OVERLAY_MODULE_14_BSSSIZE = 0x000001A0;
+SDK_OVERLAY_MODULE_14_STATIC_INIT_START = 0x021E69C8;
+SDK_OVERLAY_MODULE_14_STATIC_INIT_END = 0x021E69CC;
+SDK_OVERLAY_MODULE_15_ID = 15;
+SDK_OVERLAY_MODULE_15_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_15_SIZE = 0x00004680;
+SDK_OVERLAY_MODULE_15_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_15_STATIC_INIT_START = 0x021DBB5C;
+SDK_OVERLAY_MODULE_15_STATIC_INIT_END = 0x021DBB60;
+SDK_OVERLAY_MODULE_16_ID = 16;
+SDK_OVERLAY_MODULE_16_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_16_SIZE = 0x00028500;
+SDK_OVERLAY_MODULE_16_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_16_STATIC_INIT_START = 0x021FF9C4;
+SDK_OVERLAY_MODULE_16_STATIC_INIT_END = 0x021FF9C8;
+SDK_OVERLAY_MODULE_17_ID = 17;
+SDK_OVERLAY_MODULE_17_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_17_SIZE = 0x00006E80;
+SDK_OVERLAY_MODULE_17_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_17_STATIC_INIT_START = 0x021DE354;
+SDK_OVERLAY_MODULE_17_STATIC_INIT_END = 0x021DE358;
+SDK_OVERLAY_MODULE_18_ID = 18;
+SDK_OVERLAY_MODULE_18_START = 0x022396A0;
+SDK_OVERLAY_MODULE_18_SIZE = 0x00017CE0;
+SDK_OVERLAY_MODULE_18_BSSSIZE = 0x00000080;
+SDK_OVERLAY_MODULE_18_STATIC_INIT_START = 0x02250858;
+SDK_OVERLAY_MODULE_18_STATIC_INIT_END = 0x0225085C;
+SDK_OVERLAY_MODULE_19_ID = 19;
+SDK_OVERLAY_MODULE_19_START = 0x02252440;
+SDK_OVERLAY_MODULE_19_SIZE = 0x00000100;
+SDK_OVERLAY_MODULE_19_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_19_STATIC_INIT_START = 0x02252524;
+SDK_OVERLAY_MODULE_19_STATIC_INIT_END = 0x02252528;
+SDK_OVERLAY_MODULE_20_ID = 20;
+SDK_OVERLAY_MODULE_20_START = 0x02252440;
+SDK_OVERLAY_MODULE_20_SIZE = 0x00002400;
+SDK_OVERLAY_MODULE_20_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_20_STATIC_INIT_START = 0x02254838;
+SDK_OVERLAY_MODULE_20_STATIC_INIT_END = 0x0225483C;
+SDK_OVERLAY_MODULE_21_ID = 21;
+SDK_OVERLAY_MODULE_21_START = 0x02254840;
+SDK_OVERLAY_MODULE_21_SIZE = 0x000005C0;
+SDK_OVERLAY_MODULE_21_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_21_STATIC_INIT_START = 0x02254DE8;
+SDK_OVERLAY_MODULE_21_STATIC_INIT_END = 0x02254DF0;
+SDK_OVERLAY_MODULE_22_ID = 22;
+SDK_OVERLAY_MODULE_22_START = 0x02254840;
+SDK_OVERLAY_MODULE_22_SIZE = 0x00000F00;
+SDK_OVERLAY_MODULE_22_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_22_STATIC_INIT_START = 0x02255730;
+SDK_OVERLAY_MODULE_22_STATIC_INIT_END = 0x02255738;
+SDK_OVERLAY_MODULE_23_ID = 23;
+SDK_OVERLAY_MODULE_23_START = 0x02254840;
+SDK_OVERLAY_MODULE_23_SIZE = 0x00001900;
+SDK_OVERLAY_MODULE_23_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_23_STATIC_INIT_START = 0x02256128;
+SDK_OVERLAY_MODULE_23_STATIC_INIT_END = 0x02256130;
+SDK_OVERLAY_MODULE_24_ID = 24;
+SDK_OVERLAY_MODULE_24_START = 0x02254840;
+SDK_OVERLAY_MODULE_24_SIZE = 0x000009A0;
+SDK_OVERLAY_MODULE_24_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_24_STATIC_INIT_START = 0x022551C0;
+SDK_OVERLAY_MODULE_24_STATIC_INIT_END = 0x022551C8;
+SDK_OVERLAY_MODULE_25_ID = 25;
+SDK_OVERLAY_MODULE_25_START = 0x02254840;
+SDK_OVERLAY_MODULE_25_SIZE = 0x00000560;
+SDK_OVERLAY_MODULE_25_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_25_STATIC_INIT_START = 0x02254D80;
+SDK_OVERLAY_MODULE_25_STATIC_INIT_END = 0x02254D88;
+SDK_OVERLAY_MODULE_26_ID = 26;
+SDK_OVERLAY_MODULE_26_START = 0x02254840;
+SDK_OVERLAY_MODULE_26_SIZE = 0x00000800;
+SDK_OVERLAY_MODULE_26_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_26_STATIC_INIT_START = 0x02255020;
+SDK_OVERLAY_MODULE_26_STATIC_INIT_END = 0x02255028;
+SDK_OVERLAY_MODULE_27_ID = 27;
+SDK_OVERLAY_MODULE_27_START = 0x02254840;
+SDK_OVERLAY_MODULE_27_SIZE = 0x00000BA0;
+SDK_OVERLAY_MODULE_27_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_27_STATIC_INIT_START = 0x022553C4;
+SDK_OVERLAY_MODULE_27_STATIC_INIT_END = 0x022553CC;
+SDK_OVERLAY_MODULE_28_ID = 28;
+SDK_OVERLAY_MODULE_28_START = 0x02254840;
+SDK_OVERLAY_MODULE_28_SIZE = 0x00001780;
+SDK_OVERLAY_MODULE_28_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_28_STATIC_INIT_START = 0x02255F18;
+SDK_OVERLAY_MODULE_28_STATIC_INIT_END = 0x02255F20;
+SDK_OVERLAY_MODULE_29_ID = 29;
+SDK_OVERLAY_MODULE_29_START = 0x02254840;
+SDK_OVERLAY_MODULE_29_SIZE = 0x00000900;
+SDK_OVERLAY_MODULE_29_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_29_STATIC_INIT_START = 0x0225512C;
+SDK_OVERLAY_MODULE_29_STATIC_INIT_END = 0x02255134;
+SDK_OVERLAY_MODULE_30_ID = 30;
+SDK_OVERLAY_MODULE_30_START = 0x02254840;
+SDK_OVERLAY_MODULE_30_SIZE = 0x00000600;
+SDK_OVERLAY_MODULE_30_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_30_STATIC_INIT_START = 0x02254E28;
+SDK_OVERLAY_MODULE_30_STATIC_INIT_END = 0x02254E30;
+SDK_OVERLAY_MODULE_31_ID = 31;
+SDK_OVERLAY_MODULE_31_START = 0x02254840;
+SDK_OVERLAY_MODULE_31_SIZE = 0x00000600;
+SDK_OVERLAY_MODULE_31_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_31_STATIC_INIT_START = 0x02254E20;
+SDK_OVERLAY_MODULE_31_STATIC_INIT_END = 0x02254E28;
+SDK_OVERLAY_MODULE_32_ID = 32;
+SDK_OVERLAY_MODULE_32_START = 0x02254840;
+SDK_OVERLAY_MODULE_32_SIZE = 0x000004A0;
+SDK_OVERLAY_MODULE_32_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_32_STATIC_INIT_START = 0x02254CC4;
+SDK_OVERLAY_MODULE_32_STATIC_INIT_END = 0x02254CCC;
+SDK_OVERLAY_MODULE_33_ID = 33;
+SDK_OVERLAY_MODULE_33_START = 0x02254840;
+SDK_OVERLAY_MODULE_33_SIZE = 0x00000320;
+SDK_OVERLAY_MODULE_33_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_33_STATIC_INIT_START = 0x02254B40;
+SDK_OVERLAY_MODULE_33_STATIC_INIT_END = 0x02254B48;
+SDK_OVERLAY_MODULE_34_ID = 34;
+SDK_OVERLAY_MODULE_34_START = 0x02254840;
+SDK_OVERLAY_MODULE_34_SIZE = 0x000004C0;
+SDK_OVERLAY_MODULE_34_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_34_STATIC_INIT_START = 0x02254CF8;
+SDK_OVERLAY_MODULE_34_STATIC_INIT_END = 0x02254D00;
+SDK_OVERLAY_MODULE_35_ID = 35;
+SDK_OVERLAY_MODULE_35_START = 0x02254840;
+SDK_OVERLAY_MODULE_35_SIZE = 0x000009A0;
+SDK_OVERLAY_MODULE_35_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_35_STATIC_INIT_START = 0x022551C0;
+SDK_OVERLAY_MODULE_35_STATIC_INIT_END = 0x022551C8;
+SDK_OVERLAY_MODULE_36_ID = 36;
+SDK_OVERLAY_MODULE_36_START = 0x02254840;
+SDK_OVERLAY_MODULE_36_SIZE = 0x00000CC0;
+SDK_OVERLAY_MODULE_36_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_36_STATIC_INIT_START = 0x022554F8;
+SDK_OVERLAY_MODULE_36_STATIC_INIT_END = 0x02255500;
+SDK_OVERLAY_MODULE_37_ID = 37;
+SDK_OVERLAY_MODULE_37_START = 0x02254840;
+SDK_OVERLAY_MODULE_37_SIZE = 0x00000560;
+SDK_OVERLAY_MODULE_37_BSSSIZE = 0x00000020;
+SDK_OVERLAY_MODULE_37_STATIC_INIT_START = 0x02254D90;
+SDK_OVERLAY_MODULE_37_STATIC_INIT_END = 0x02254D98;
+SDK_OVERLAY_MODULE_38_ID = 38;
+SDK_OVERLAY_MODULE_38_START = 0x02254840;
+SDK_OVERLAY_MODULE_38_SIZE = 0x00000B40;
+SDK_OVERLAY_MODULE_38_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_38_STATIC_INIT_START = 0x02255360;
+SDK_OVERLAY_MODULE_38_STATIC_INIT_END = 0x02255368;
+SDK_OVERLAY_MODULE_39_ID = 39;
+SDK_OVERLAY_MODULE_39_START = 0x02254840;
+SDK_OVERLAY_MODULE_39_SIZE = 0x00000CC0;
+SDK_OVERLAY_MODULE_39_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_39_STATIC_INIT_START = 0x022554E4;
+SDK_OVERLAY_MODULE_39_STATIC_INIT_END = 0x022554EC;
+SDK_OVERLAY_MODULE_40_ID = 40;
+SDK_OVERLAY_MODULE_40_START = 0x02254840;
+SDK_OVERLAY_MODULE_40_SIZE = 0x00000C60;
+SDK_OVERLAY_MODULE_40_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_40_STATIC_INIT_START = 0x02255480;
+SDK_OVERLAY_MODULE_40_STATIC_INIT_END = 0x02255488;
+SDK_OVERLAY_MODULE_41_ID = 41;
+SDK_OVERLAY_MODULE_41_START = 0x02254840;
+SDK_OVERLAY_MODULE_41_SIZE = 0x00001140;
+SDK_OVERLAY_MODULE_41_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_41_STATIC_INIT_START = 0x02255974;
+SDK_OVERLAY_MODULE_41_STATIC_INIT_END = 0x0225597C;
+SDK_OVERLAY_MODULE_42_ID = 42;
+SDK_OVERLAY_MODULE_42_START = 0x02254840;
+SDK_OVERLAY_MODULE_42_SIZE = 0x00000900;
+SDK_OVERLAY_MODULE_42_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_42_STATIC_INIT_START = 0x0225511C;
+SDK_OVERLAY_MODULE_42_STATIC_INIT_END = 0x02255124;
+SDK_OVERLAY_MODULE_43_ID = 43;
+SDK_OVERLAY_MODULE_43_START = 0x02254840;
+SDK_OVERLAY_MODULE_43_SIZE = 0x000009C0;
+SDK_OVERLAY_MODULE_43_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_43_STATIC_INIT_START = 0x022551EC;
+SDK_OVERLAY_MODULE_43_STATIC_INIT_END = 0x022551F4;
+SDK_OVERLAY_MODULE_44_ID = 44;
+SDK_OVERLAY_MODULE_44_START = 0x02254840;
+SDK_OVERLAY_MODULE_44_SIZE = 0x000004A0;
+SDK_OVERLAY_MODULE_44_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_44_STATIC_INIT_START = 0x02254CBC;
+SDK_OVERLAY_MODULE_44_STATIC_INIT_END = 0x02254CC4;
+SDK_OVERLAY_MODULE_45_ID = 45;
+SDK_OVERLAY_MODULE_45_START = 0x02254840;
+SDK_OVERLAY_MODULE_45_SIZE = 0x00000940;
+SDK_OVERLAY_MODULE_45_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_45_STATIC_INIT_START = 0x02255170;
+SDK_OVERLAY_MODULE_45_STATIC_INIT_END = 0x02255178;
+SDK_OVERLAY_MODULE_46_ID = 46;
+SDK_OVERLAY_MODULE_46_START = 0x02254840;
+SDK_OVERLAY_MODULE_46_SIZE = 0x00000320;
+SDK_OVERLAY_MODULE_46_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_46_STATIC_INIT_START = 0x02254B40;
+SDK_OVERLAY_MODULE_46_STATIC_INIT_END = 0x02254B48;
+SDK_OVERLAY_MODULE_47_ID = 47;
+SDK_OVERLAY_MODULE_47_START = 0x02254840;
+SDK_OVERLAY_MODULE_47_SIZE = 0x00000CA0;
+SDK_OVERLAY_MODULE_47_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_47_STATIC_INIT_START = 0x022554BC;
+SDK_OVERLAY_MODULE_47_STATIC_INIT_END = 0x022554C4;
+SDK_OVERLAY_MODULE_48_ID = 48;
+SDK_OVERLAY_MODULE_48_START = 0x02254840;
+SDK_OVERLAY_MODULE_48_SIZE = 0x000008A0;
+SDK_OVERLAY_MODULE_48_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_48_STATIC_INIT_START = 0x022550D0;
+SDK_OVERLAY_MODULE_48_STATIC_INIT_END = 0x022550D8;
+SDK_OVERLAY_MODULE_49_ID = 49;
+SDK_OVERLAY_MODULE_49_START = 0x02254840;
+SDK_OVERLAY_MODULE_49_SIZE = 0x00000600;
+SDK_OVERLAY_MODULE_49_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_49_STATIC_INIT_START = 0x02254E20;
+SDK_OVERLAY_MODULE_49_STATIC_INIT_END = 0x02254E28;
+SDK_OVERLAY_MODULE_50_ID = 50;
+SDK_OVERLAY_MODULE_50_START = 0x02254840;
+SDK_OVERLAY_MODULE_50_SIZE = 0x00000320;
+SDK_OVERLAY_MODULE_50_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_50_STATIC_INIT_START = 0x02254B50;
+SDK_OVERLAY_MODULE_50_STATIC_INIT_END = 0x02254B58;
+SDK_OVERLAY_MODULE_51_ID = 51;
+SDK_OVERLAY_MODULE_51_START = 0x02254840;
+SDK_OVERLAY_MODULE_51_SIZE = 0x00000FC0;
+SDK_OVERLAY_MODULE_51_BSSSIZE = 0x00000020;
+SDK_OVERLAY_MODULE_51_STATIC_INIT_START = 0x022557E0;
+SDK_OVERLAY_MODULE_51_STATIC_INIT_END = 0x022557E4;
+SDK_OVERLAY_MODULE_52_ID = 52;
+SDK_OVERLAY_MODULE_52_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_52_SIZE = 0x00000400;
+SDK_OVERLAY_MODULE_52_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_52_STATIC_INIT_START = 0x021D78D0;
+SDK_OVERLAY_MODULE_52_STATIC_INIT_END = 0x021D78D4;
+SDK_OVERLAY_MODULE_53_ID = 53;
+SDK_OVERLAY_MODULE_53_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_53_SIZE = 0x00002480;
+SDK_OVERLAY_MODULE_53_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_53_STATIC_INIT_START = 0x021D9888;
+SDK_OVERLAY_MODULE_53_STATIC_INIT_END = 0x021D988C;
+SDK_OVERLAY_MODULE_54_ID = 54;
+SDK_OVERLAY_MODULE_54_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_54_SIZE = 0x00002380;
+SDK_OVERLAY_MODULE_54_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_54_STATIC_INIT_START = 0x021D97D4;
+SDK_OVERLAY_MODULE_54_STATIC_INIT_END = 0x021D97D8;
+SDK_OVERLAY_MODULE_55_ID = 55;
+SDK_OVERLAY_MODULE_55_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_55_SIZE = 0x00003040;
+SDK_OVERLAY_MODULE_55_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_55_STATIC_INIT_START = 0x021DA480;
+SDK_OVERLAY_MODULE_55_STATIC_INIT_END = 0x021DA484;
+SDK_OVERLAY_MODULE_56_ID = 56;
+SDK_OVERLAY_MODULE_56_START = 0x02211E60;
+SDK_OVERLAY_MODULE_56_SIZE = 0x000047A0;
+SDK_OVERLAY_MODULE_56_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_56_STATIC_INIT_START = 0x0221647C;
+SDK_OVERLAY_MODULE_56_STATIC_INIT_END = 0x02216480;
+SDK_OVERLAY_MODULE_57_ID = 57;
+SDK_OVERLAY_MODULE_57_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_57_SIZE = 0x00002540;
+SDK_OVERLAY_MODULE_57_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_57_STATIC_INIT_START = 0x021D9A10;
+SDK_OVERLAY_MODULE_57_STATIC_INIT_END = 0x021D9A14;
+SDK_OVERLAY_MODULE_58_ID = 58;
+SDK_OVERLAY_MODULE_58_START = 0x021D9A20;
+SDK_OVERLAY_MODULE_58_SIZE = 0x000015A0;
+SDK_OVERLAY_MODULE_58_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_58_STATIC_INIT_START = 0x021DAF94;
+SDK_OVERLAY_MODULE_58_STATIC_INIT_END = 0x021DAF98;
+SDK_OVERLAY_MODULE_59_ID = 59;
+SDK_OVERLAY_MODULE_59_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_59_SIZE = 0x00002C20;
+SDK_OVERLAY_MODULE_59_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_59_STATIC_INIT_START = 0x021DA0FC;
+SDK_OVERLAY_MODULE_59_STATIC_INIT_END = 0x021DA100;
+SDK_OVERLAY_MODULE_60_ID = 60;
+SDK_OVERLAY_MODULE_60_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_60_SIZE = 0x00000D00;
+SDK_OVERLAY_MODULE_60_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_60_STATIC_INIT_START = 0x021D81D8;
+SDK_OVERLAY_MODULE_60_STATIC_INIT_END = 0x021D81DC;
+SDK_OVERLAY_MODULE_61_ID = 61;
+SDK_OVERLAY_MODULE_61_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_61_SIZE = 0x00001080;
+SDK_OVERLAY_MODULE_61_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_61_STATIC_INIT_START = 0x021D8554;
+SDK_OVERLAY_MODULE_61_STATIC_INIT_END = 0x021D8558;
+SDK_OVERLAY_MODULE_62_ID = 62;
+SDK_OVERLAY_MODULE_62_START = 0x0222D5C0;
+SDK_OVERLAY_MODULE_62_SIZE = 0x00003DE0;
+SDK_OVERLAY_MODULE_62_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_62_STATIC_INIT_START = 0x02231380;
+SDK_OVERLAY_MODULE_62_STATIC_INIT_END = 0x02231388;
+SDK_OVERLAY_MODULE_63_ID = 63;
+SDK_OVERLAY_MODULE_63_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_63_SIZE = 0x00004AC0;
+SDK_OVERLAY_MODULE_63_BSSSIZE = 0x00000020;
+SDK_OVERLAY_MODULE_63_STATIC_INIT_START = 0x021DBF20;
+SDK_OVERLAY_MODULE_63_STATIC_INIT_END = 0x021DBF24;
+SDK_OVERLAY_MODULE_64_ID = 64;
+SDK_OVERLAY_MODULE_64_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_64_SIZE = 0x00001C40;
+SDK_OVERLAY_MODULE_64_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_64_STATIC_INIT_START = 0x021D9110;
+SDK_OVERLAY_MODULE_64_STATIC_INIT_END = 0x021D9114;
+SDK_OVERLAY_MODULE_65_ID = 65;
+SDK_OVERLAY_MODULE_65_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_65_SIZE = 0x00003000;
+SDK_OVERLAY_MODULE_65_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_65_STATIC_INIT_START = 0x021DA428;
+SDK_OVERLAY_MODULE_65_STATIC_INIT_END = 0x021DA42C;
+SDK_OVERLAY_MODULE_66_ID = 66;
+SDK_OVERLAY_MODULE_66_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_66_SIZE = 0x00002660;
+SDK_OVERLAY_MODULE_66_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_66_STATIC_INIT_START = 0x021D9A9C;
+SDK_OVERLAY_MODULE_66_STATIC_INIT_END = 0x021D9AA0;
+SDK_OVERLAY_MODULE_67_ID = 67;
+SDK_OVERLAY_MODULE_67_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_67_SIZE = 0x00002440;
+SDK_OVERLAY_MODULE_67_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_67_STATIC_INIT_START = 0x021D9918;
+SDK_OVERLAY_MODULE_67_STATIC_INIT_END = 0x021D991C;
+SDK_OVERLAY_MODULE_68_ID = 68;
+SDK_OVERLAY_MODULE_68_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_68_SIZE = 0x00001600;
+SDK_OVERLAY_MODULE_68_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_68_STATIC_INIT_START = 0x021D8AD4;
+SDK_OVERLAY_MODULE_68_STATIC_INIT_END = 0x021D8AD8;
+SDK_OVERLAY_MODULE_69_ID = 69;
+SDK_OVERLAY_MODULE_69_START = 0x0222D5C0;
+SDK_OVERLAY_MODULE_69_SIZE = 0x000023A0;
+SDK_OVERLAY_MODULE_69_BSSSIZE = 0x00000020;
+SDK_OVERLAY_MODULE_69_STATIC_INIT_START = 0x0222F93C;
+SDK_OVERLAY_MODULE_69_STATIC_INIT_END = 0x0222F940;
+SDK_OVERLAY_MODULE_70_ID = 70;
+SDK_OVERLAY_MODULE_70_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_70_SIZE = 0x00000E20;
+SDK_OVERLAY_MODULE_70_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_70_STATIC_INIT_START = 0x021D82DC;
+SDK_OVERLAY_MODULE_70_STATIC_INIT_END = 0x021D82E0;
+SDK_OVERLAY_MODULE_71_ID = 71;
+SDK_OVERLAY_MODULE_71_START = 0x0222D5C0;
+SDK_OVERLAY_MODULE_71_SIZE = 0x00003EC0;
+SDK_OVERLAY_MODULE_71_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_71_STATIC_INIT_START = 0x0223147C;
+SDK_OVERLAY_MODULE_71_STATIC_INIT_END = 0x02231480;
+SDK_OVERLAY_MODULE_72_ID = 72;
+SDK_OVERLAY_MODULE_72_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_72_SIZE = 0x00000020;
+SDK_OVERLAY_MODULE_72_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_72_STATIC_INIT_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_72_STATIC_INIT_END = 0x021D74E4;
+SDK_OVERLAY_MODULE_73_ID = 73;
+SDK_OVERLAY_MODULE_73_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_73_SIZE = 0x00004AE0;
+SDK_OVERLAY_MODULE_73_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_73_STATIC_INIT_START = 0x021DBF70;
+SDK_OVERLAY_MODULE_73_STATIC_INIT_END = 0x021DBF74;
+SDK_OVERLAY_MODULE_74_ID = 74;
+SDK_OVERLAY_MODULE_74_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_74_SIZE = 0x00001220;
+SDK_OVERLAY_MODULE_74_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_74_STATIC_INIT_START = 0x021D8664;
+SDK_OVERLAY_MODULE_74_STATIC_INIT_END = 0x021D8668;
+SDK_OVERLAY_MODULE_75_ID = 75;
+SDK_OVERLAY_MODULE_75_START = 0x021E6BA0;
+SDK_OVERLAY_MODULE_75_SIZE = 0x00005DE0;
+SDK_OVERLAY_MODULE_75_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_75_STATIC_INIT_START = 0x021EC97C;
+SDK_OVERLAY_MODULE_75_STATIC_INIT_END = 0x021EC980;
+SDK_OVERLAY_MODULE_76_ID = 76;
+SDK_OVERLAY_MODULE_76_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_76_SIZE = 0x00001E20;
+SDK_OVERLAY_MODULE_76_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_76_STATIC_INIT_START = 0x021D92E0;
+SDK_OVERLAY_MODULE_76_STATIC_INIT_END = 0x021D92E4;
+SDK_OVERLAY_MODULE_77_ID = 77;
+SDK_OVERLAY_MODULE_77_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_77_SIZE = 0x00001BE0;
+SDK_OVERLAY_MODULE_77_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_77_STATIC_INIT_START = 0x021D90AC;
+SDK_OVERLAY_MODULE_77_STATIC_INIT_END = 0x021D90B0;
+SDK_OVERLAY_MODULE_78_ID = 78;
+SDK_OVERLAY_MODULE_78_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_78_SIZE = 0x00000460;
+SDK_OVERLAY_MODULE_78_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_78_STATIC_INIT_START = 0x021D78F8;
+SDK_OVERLAY_MODULE_78_STATIC_INIT_END = 0x021D78FC;
+SDK_OVERLAY_MODULE_79_ID = 79;
+SDK_OVERLAY_MODULE_79_START = 0x02211E60;
+SDK_OVERLAY_MODULE_79_SIZE = 0x000052C0;
+SDK_OVERLAY_MODULE_79_BSSSIZE = 0x00000040;
+SDK_OVERLAY_MODULE_79_STATIC_INIT_START = 0x02216748;
+SDK_OVERLAY_MODULE_79_STATIC_INIT_END = 0x0221674C;
+SDK_OVERLAY_MODULE_80_ID = 80;
+SDK_OVERLAY_MODULE_80_START = 0x0222D5C0;
+SDK_OVERLAY_MODULE_80_SIZE = 0x0000A720;
+SDK_OVERLAY_MODULE_80_BSSSIZE = 0x00000160;
+SDK_OVERLAY_MODULE_80_STATIC_INIT_START = 0x02237670;
+SDK_OVERLAY_MODULE_80_STATIC_INIT_END = 0x02237674;
+SDK_OVERLAY_MODULE_81_ID = 81;
+SDK_OVERLAY_MODULE_81_START = 0x02237E40;
+SDK_OVERLAY_MODULE_81_SIZE = 0x00005580;
+SDK_OVERLAY_MODULE_81_BSSSIZE = 0x000000A0;
+SDK_OVERLAY_MODULE_81_STATIC_INIT_START = 0x0223D39C;
+SDK_OVERLAY_MODULE_81_STATIC_INIT_END = 0x0223D3A0;
+SDK_OVERLAY_MODULE_82_ID = 82;
+SDK_OVERLAY_MODULE_82_START = 0x0222D5C0;
+SDK_OVERLAY_MODULE_82_SIZE = 0x00002540;
+SDK_OVERLAY_MODULE_82_BSSSIZE = 0x00000120;
+SDK_OVERLAY_MODULE_82_STATIC_INIT_START = 0x0222F8CC;
+SDK_OVERLAY_MODULE_82_STATIC_INIT_END = 0x0222F8D0;
+SDK_OVERLAY_MODULE_83_ID = 83;
+SDK_OVERLAY_MODULE_83_START = 0x0222D5C0;
+SDK_OVERLAY_MODULE_83_SIZE = 0x0000E2A0;
+SDK_OVERLAY_MODULE_83_BSSSIZE = 0x00001980;
+SDK_OVERLAY_MODULE_83_STATIC_INIT_START = 0x0223A77C;
+SDK_OVERLAY_MODULE_83_STATIC_INIT_END = 0x0223A780;
+SDK_OVERLAY_MODULE_84_ID = 84;
+SDK_OVERLAY_MODULE_84_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_84_SIZE = 0x00003920;
+SDK_OVERLAY_MODULE_84_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_84_STATIC_INIT_START = 0x021DADE4;
+SDK_OVERLAY_MODULE_84_STATIC_INIT_END = 0x021DADE8;
+SDK_OVERLAY_MODULE_85_ID = 85;
+SDK_OVERLAY_MODULE_85_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_85_SIZE = 0x00009100;
+SDK_OVERLAY_MODULE_85_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_85_STATIC_INIT_START = 0x021E05A0;
+SDK_OVERLAY_MODULE_85_STATIC_INIT_END = 0x021E05A4;
+SDK_OVERLAY_MODULE_86_ID = 86;
+SDK_OVERLAY_MODULE_86_START = 0x021D74E0;
+SDK_OVERLAY_MODULE_86_SIZE = 0x00000820;
+SDK_OVERLAY_MODULE_86_BSSSIZE = 0x00000000;
+SDK_OVERLAY_MODULE_86_STATIC_INIT_START = 0x021D7CE4;
+SDK_OVERLAY_MODULE_86_STATIC_INIT_END = 0x021D7CE8;