summaryrefslogtreecommitdiff
path: root/arm9/asm/GX.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/asm/GX.s')
-rw-r--r--arm9/asm/GX.s245
1 files changed, 245 insertions, 0 deletions
diff --git a/arm9/asm/GX.s b/arm9/asm/GX.s
new file mode 100644
index 00000000..1e6bdc88
--- /dev/null
+++ b/arm9/asm/GX.s
@@ -0,0 +1,245 @@
+ .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